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 bool specialradix = FALSE;
2457 else if (SvPOKp(sv))
2458 sbegin = SvPV(sv, len);
2461 send = sbegin + len;
2468 numtype = IS_NUMBER_NEG;
2475 * we return IS_NUMBER_TO_INT_BY_ATOL if the number can converted to
2476 * integer with atol() without overflow, IS_NUMBER_TO_INT_BY_STRTOL if
2477 * possibly slightly larger than max int, IS_NUMBER_TO_INT_BY_ATOF if you
2478 * will need (int)atof().
2481 /* next must be digit or the radix separator or beginning of infinity */
2485 } while (isDIGIT(*s));
2487 /* Aaargh. long long really is irritating.
2488 In the gospel according to ANSI 1989, it is an axiom that "long"
2489 is the longest integer type, and that if you don't know how long
2490 something is you can cast it to long, and nothing will be lost
2491 (except possibly speed of execution if long is slower than the
2493 Now, one can't be sure if the old rules apply, or long long
2494 (or some other newfangled thing) is actually longer than the
2495 (formerly) longest thing.
2497 /* This lot will work for 64 bit *as long as* either
2498 either long is 64 bit
2499 or we can find both strtol/strtoq and strtoul/strtouq
2500 If not, we really should refuse to let the user use 64 bit IVs
2501 By "64 bit" I really mean IVs that don't get preserved by NVs
2502 It also should work for 128 bit IVs. Can any lend me a machine to
2505 if (s - nbegin > TYPE_DIGITS(UV)) /* Cannot cache ato[ul]() */
2506 numtype |= IS_NUMBER_TO_INT_BY_ATOF | IS_NUMBER_LONGER_THAN_IV_MAX;
2507 else if (s - nbegin < BIT_DIGITS(((sizeof (IV)>sizeof (long))
2508 ? sizeof(long) : sizeof (IV))*8-1))
2509 numtype |= IS_NUMBER_TO_INT_BY_ATOL;
2511 /* Can't be sure either way. (For 64 bit UV, 63 bit IV is 1 decimal
2512 digit less (IV_MAX= 9223372036854775807,
2513 UV_MAX= 18446744073709551615) so be cautious */
2514 numtype |= IS_NUMBER_TO_INT_BY_STRTOL | IS_NUMBER_AS_LONG_AS_IV_MAX;
2517 #ifdef USE_LOCALE_NUMERIC
2518 || (specialradix = IS_NUMERIC_RADIX(s))
2522 s += SvCUR(PL_numeric_radix);
2525 numtype |= IS_NUMBER_NOT_INT;
2526 while (isDIGIT(*s)) /* optional digits after the radix */
2531 #ifdef USE_LOCALE_NUMERIC
2532 || (specialradix = IS_NUMERIC_RADIX(s))
2536 s += SvCUR(PL_numeric_radix);
2539 numtype |= IS_NUMBER_TO_INT_BY_ATOL | IS_NUMBER_NOT_INT;
2540 /* no digits before the radix means we need digits after it */
2544 } while (isDIGIT(*s));
2549 else if (*s == 'I' || *s == 'i') {
2550 s++; if (*s != 'N' && *s != 'n') return 0;
2551 s++; if (*s != 'F' && *s != 'f') return 0;
2552 s++; if (*s == 'I' || *s == 'i') {
2553 s++; if (*s != 'N' && *s != 'n') return 0;
2554 s++; if (*s != 'I' && *s != 'i') return 0;
2555 s++; if (*s != 'T' && *s != 't') return 0;
2556 s++; if (*s != 'Y' && *s != 'y') return 0;
2565 numtype = (numtype & IS_NUMBER_NEG) /* Keep track of sign */
2566 | IS_NUMBER_INFINITY | IS_NUMBER_NOT_INT;
2568 /* we can have an optional exponent part */
2569 if (*s == 'e' || *s == 'E') {
2570 numtype &= IS_NUMBER_NEG;
2571 numtype |= IS_NUMBER_TO_INT_BY_ATOF | IS_NUMBER_NOT_INT;
2573 if (*s == '+' || *s == '-')
2578 } while (isDIGIT(*s));
2588 if (len == 10 && memEQ(sbegin, "0 but true", 10))
2589 return IS_NUMBER_TO_INT_BY_ATOL;
2594 Perl_sv_2pv_nolen(pTHX_ register SV *sv)
2597 return sv_2pv(sv, &n_a);
2600 /* We assume that buf is at least TYPE_CHARS(UV) long. */
2602 uiv_2buf(char *buf, IV iv, UV uv, int is_uv, char **peob)
2604 char *ptr = buf + TYPE_CHARS(UV);
2618 *--ptr = '0' + (uv % 10);
2627 Perl_sv_2pv(pTHX_ register SV *sv, STRLEN *lp)
2632 char tbuf[64]; /* Must fit sprintf/Gconvert of longest IV/NV */
2633 char *tmpbuf = tbuf;
2639 if (SvGMAGICAL(sv)) {
2647 (void)sprintf(tmpbuf,"%"UVuf, (UV)SvUVX(sv));
2649 (void)sprintf(tmpbuf,"%"IVdf, (IV)SvIVX(sv));
2654 Gconvert(SvNVX(sv), NV_DIG, 0, tmpbuf);
2659 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2660 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2667 if (SvTHINKFIRST(sv)) {
2670 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,string)) &&
2671 (SvRV(tmpstr) != SvRV(sv)))
2672 return SvPV(tmpstr,*lp);
2679 switch (SvTYPE(sv)) {
2681 if ( ((SvFLAGS(sv) &
2682 (SVs_OBJECT|SVf_OK|SVs_GMG|SVs_SMG|SVs_RMG))
2683 == (SVs_OBJECT|SVs_RMG))
2684 && strEQ(s=HvNAME(SvSTASH(sv)), "Regexp")
2685 && (mg = mg_find(sv, 'r'))) {
2686 regexp *re = (regexp *)mg->mg_obj;
2689 char *fptr = "msix";
2694 U16 reganch = (re->reganch & PMf_COMPILETIME) >> 12;
2696 while((ch = *fptr++)) {
2698 reflags[left++] = ch;
2701 reflags[right--] = ch;
2706 reflags[left] = '-';
2710 mg->mg_len = re->prelen + 4 + left;
2711 New(616, mg->mg_ptr, mg->mg_len + 1 + left, char);
2712 Copy("(?", mg->mg_ptr, 2, char);
2713 Copy(reflags, mg->mg_ptr+2, left, char);
2714 Copy(":", mg->mg_ptr+left+2, 1, char);
2715 Copy(re->precomp, mg->mg_ptr+3+left, re->prelen, char);
2716 mg->mg_ptr[mg->mg_len - 1] = ')';
2717 mg->mg_ptr[mg->mg_len] = 0;
2719 PL_reginterp_cnt += re->program[0].next_off;
2731 case SVt_PVBM: if (SvROK(sv))
2734 s = "SCALAR"; break;
2735 case SVt_PVLV: s = "LVALUE"; break;
2736 case SVt_PVAV: s = "ARRAY"; break;
2737 case SVt_PVHV: s = "HASH"; break;
2738 case SVt_PVCV: s = "CODE"; break;
2739 case SVt_PVGV: s = "GLOB"; break;
2740 case SVt_PVFM: s = "FORMAT"; break;
2741 case SVt_PVIO: s = "IO"; break;
2742 default: s = "UNKNOWN"; break;
2746 Perl_sv_setpvf(aTHX_ tsv, "%s=%s", HvNAME(SvSTASH(sv)), s);
2749 Perl_sv_catpvf(aTHX_ tsv, "(0x%"UVxf")", PTR2UV(sv));
2755 if (SvREADONLY(sv) && !SvOK(sv)) {
2756 if (ckWARN(WARN_UNINITIALIZED))
2762 if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
2763 /* I'm assuming that if both IV and NV are equally valid then
2764 converting the IV is going to be more efficient */
2765 U32 isIOK = SvIOK(sv);
2766 U32 isUIOK = SvIsUV(sv);
2767 char buf[TYPE_CHARS(UV)];
2770 if (SvTYPE(sv) < SVt_PVIV)
2771 sv_upgrade(sv, SVt_PVIV);
2773 ptr = uiv_2buf(buf, 0, SvUVX(sv), 1, &ebuf);
2775 ptr = uiv_2buf(buf, SvIVX(sv), 0, 0, &ebuf);
2776 SvGROW(sv, ebuf - ptr + 1); /* inlined from sv_setpvn */
2777 Move(ptr,SvPVX(sv),ebuf - ptr,char);
2778 SvCUR_set(sv, ebuf - ptr);
2788 else if (SvNOKp(sv)) {
2789 if (SvTYPE(sv) < SVt_PVNV)
2790 sv_upgrade(sv, SVt_PVNV);
2791 /* The +20 is pure guesswork. Configure test needed. --jhi */
2792 SvGROW(sv, NV_DIG + 20);
2794 olderrno = errno; /* some Xenix systems wipe out errno here */
2796 if (SvNVX(sv) == 0.0)
2797 (void)strcpy(s,"0");
2801 Gconvert(SvNVX(sv), NV_DIG, 0, s);
2804 #ifdef FIXNEGATIVEZERO
2805 if (*s == '-' && s[1] == '0' && !s[2])
2815 if (ckWARN(WARN_UNINITIALIZED)
2816 && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
2819 if (SvTYPE(sv) < SVt_PV)
2820 /* Typically the caller expects that sv_any is not NULL now. */
2821 sv_upgrade(sv, SVt_PV);
2824 *lp = s - SvPVX(sv);
2827 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
2828 PTR2UV(sv),SvPVX(sv)));
2832 if (SvROK(sv)) { /* XXX Skip this when sv_pvn_force calls */
2833 /* Sneaky stuff here */
2837 tsv = newSVpv(tmpbuf, 0);
2853 len = strlen(tmpbuf);
2855 #ifdef FIXNEGATIVEZERO
2856 if (len == 2 && t[0] == '-' && t[1] == '0') {
2861 (void)SvUPGRADE(sv, SVt_PV);
2863 s = SvGROW(sv, len + 1);
2872 Perl_sv_2pvbyte_nolen(pTHX_ register SV *sv)
2875 return sv_2pvbyte(sv, &n_a);
2879 Perl_sv_2pvbyte(pTHX_ register SV *sv, STRLEN *lp)
2881 return sv_2pv(sv,lp);
2885 Perl_sv_2pvutf8_nolen(pTHX_ register SV *sv)
2888 return sv_2pvutf8(sv, &n_a);
2892 Perl_sv_2pvutf8(pTHX_ register SV *sv, STRLEN *lp)
2894 sv_utf8_upgrade(sv);
2895 return SvPV(sv,*lp);
2898 /* This function is only called on magical items */
2900 Perl_sv_2bool(pTHX_ register SV *sv)
2909 if (SvAMAGIC(sv) && (tmpsv=AMG_CALLun(sv,bool_)) &&
2910 (SvRV(tmpsv) != SvRV(sv)))
2911 return SvTRUE(tmpsv);
2912 return SvRV(sv) != 0;
2915 register XPV* Xpvtmp;
2916 if ((Xpvtmp = (XPV*)SvANY(sv)) &&
2917 (*Xpvtmp->xpv_pv > '0' ||
2918 Xpvtmp->xpv_cur > 1 ||
2919 (Xpvtmp->xpv_cur && *Xpvtmp->xpv_pv != '0')))
2926 return SvIVX(sv) != 0;
2929 return SvNVX(sv) != 0.0;
2937 =for apidoc sv_utf8_upgrade
2939 Convert the PV of an SV to its UTF8-encoded form.
2945 Perl_sv_utf8_upgrade(pTHX_ register SV *sv)
2950 if (!sv || !SvPOK(sv) || SvUTF8(sv))
2953 /* This function could be much more efficient if we had a FLAG in SVs
2954 * to signal if there are any hibit chars in the PV.
2955 * Given that there isn't make loop fast as possible
2961 if ((hibit = UTF8_IS_CONTINUED(*t++)))
2968 if (SvREADONLY(sv) && SvFAKE(sv)) {
2969 sv_force_normal(sv);
2972 len = SvCUR(sv) + 1; /* Plus the \0 */
2973 SvPVX(sv) = (char*)bytes_to_utf8((U8*)s, &len);
2974 SvCUR(sv) = len - 1;
2976 Safefree(s); /* No longer using what was there before. */
2977 SvLEN(sv) = len; /* No longer know the real size. */
2983 =for apidoc sv_utf8_downgrade
2985 Attempt to convert the PV of an SV from UTF8-encoded to byte encoding.
2986 This may not be possible if the PV contains non-byte encoding characters;
2987 if this is the case, either returns false or, if C<fail_ok> is not
2994 Perl_sv_utf8_downgrade(pTHX_ register SV* sv, bool fail_ok)
2996 if (SvPOK(sv) && SvUTF8(sv)) {
3001 if (SvREADONLY(sv) && SvFAKE(sv))
3002 sv_force_normal(sv);
3004 if (!utf8_to_bytes((U8*)s, &len)) {
3009 Perl_croak(aTHX_ "Wide character in %s",
3010 PL_op_desc[PL_op->op_type]);
3012 Perl_croak(aTHX_ "Wide character");
3024 =for apidoc sv_utf8_encode
3026 Convert the PV of an SV to UTF8-encoded, but then turn off the C<SvUTF8>
3027 flag so that it looks like bytes again. Nothing calls this.
3033 Perl_sv_utf8_encode(pTHX_ register SV *sv)
3035 sv_utf8_upgrade(sv);
3040 Perl_sv_utf8_decode(pTHX_ register SV *sv)
3045 bool has_utf = FALSE;
3046 if (!sv_utf8_downgrade(sv, TRUE))
3049 /* it is actually just a matter of turning the utf8 flag on, but
3050 * we want to make sure everything inside is valid utf8 first.
3053 if (!is_utf8_string((U8*)c, SvCUR(sv)+1))
3057 if (UTF8_IS_CONTINUED(*c++)) {
3067 /* Note: sv_setsv() should not be called with a source string that needs
3068 * to be reused, since it may destroy the source string if it is marked
3073 =for apidoc sv_setsv
3075 Copies the contents of the source SV C<ssv> into the destination SV C<dsv>.
3076 The source SV may be destroyed if it is mortal. Does not handle 'set'
3077 magic. See the macro forms C<SvSetSV>, C<SvSetSV_nosteal> and
3084 Perl_sv_setsv(pTHX_ SV *dstr, register SV *sstr)
3086 register U32 sflags;
3092 SV_CHECK_THINKFIRST(dstr);
3094 sstr = &PL_sv_undef;
3095 stype = SvTYPE(sstr);
3096 dtype = SvTYPE(dstr);
3100 /* There's a lot of redundancy below but we're going for speed here */
3105 if (dtype != SVt_PVGV) {
3106 (void)SvOK_off(dstr);
3114 sv_upgrade(dstr, SVt_IV);
3117 sv_upgrade(dstr, SVt_PVNV);
3121 sv_upgrade(dstr, SVt_PVIV);
3124 (void)SvIOK_only(dstr);
3125 SvIVX(dstr) = SvIVX(sstr);
3128 if (SvTAINTED(sstr))
3139 sv_upgrade(dstr, SVt_NV);
3144 sv_upgrade(dstr, SVt_PVNV);
3147 SvNVX(dstr) = SvNVX(sstr);
3148 (void)SvNOK_only(dstr);
3149 if (SvTAINTED(sstr))
3157 sv_upgrade(dstr, SVt_RV);
3158 else if (dtype == SVt_PVGV &&
3159 SvTYPE(SvRV(sstr)) == SVt_PVGV) {
3162 if (GvIMPORTED(dstr) != GVf_IMPORTED
3163 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3165 GvIMPORTED_on(dstr);
3176 sv_upgrade(dstr, SVt_PV);
3179 if (dtype < SVt_PVIV)
3180 sv_upgrade(dstr, SVt_PVIV);
3183 if (dtype < SVt_PVNV)
3184 sv_upgrade(dstr, SVt_PVNV);
3191 Perl_croak(aTHX_ "Bizarre copy of %s in %s", sv_reftype(sstr, 0),
3192 PL_op_name[PL_op->op_type]);
3194 Perl_croak(aTHX_ "Bizarre copy of %s", sv_reftype(sstr, 0));
3198 if (dtype <= SVt_PVGV) {
3200 if (dtype != SVt_PVGV) {
3201 char *name = GvNAME(sstr);
3202 STRLEN len = GvNAMELEN(sstr);
3203 sv_upgrade(dstr, SVt_PVGV);
3204 sv_magic(dstr, dstr, '*', Nullch, 0);
3205 GvSTASH(dstr) = (HV*)SvREFCNT_inc(GvSTASH(sstr));
3206 GvNAME(dstr) = savepvn(name, len);
3207 GvNAMELEN(dstr) = len;
3208 SvFAKE_on(dstr); /* can coerce to non-glob */
3210 /* ahem, death to those who redefine active sort subs */
3211 else if (PL_curstackinfo->si_type == PERLSI_SORT
3212 && GvCV(dstr) && PL_sortcop == CvSTART(GvCV(dstr)))
3213 Perl_croak(aTHX_ "Can't redefine active sort subroutine %s",
3215 (void)SvOK_off(dstr);
3216 GvINTRO_off(dstr); /* one-shot flag */
3218 GvGP(dstr) = gp_ref(GvGP(sstr));
3219 if (SvTAINTED(sstr))
3221 if (GvIMPORTED(dstr) != GVf_IMPORTED
3222 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3224 GvIMPORTED_on(dstr);
3232 if (SvGMAGICAL(sstr)) {
3234 if (SvTYPE(sstr) != stype) {
3235 stype = SvTYPE(sstr);
3236 if (stype == SVt_PVGV && dtype <= SVt_PVGV)
3240 if (stype == SVt_PVLV)
3241 (void)SvUPGRADE(dstr, SVt_PVNV);
3243 (void)SvUPGRADE(dstr, stype);
3246 sflags = SvFLAGS(sstr);
3248 if (sflags & SVf_ROK) {
3249 if (dtype >= SVt_PV) {
3250 if (dtype == SVt_PVGV) {
3251 SV *sref = SvREFCNT_inc(SvRV(sstr));
3253 int intro = GvINTRO(dstr);
3258 GvINTRO_off(dstr); /* one-shot flag */
3259 Newz(602,gp, 1, GP);
3260 GvGP(dstr) = gp_ref(gp);
3261 GvSV(dstr) = NEWSV(72,0);
3262 GvLINE(dstr) = CopLINE(PL_curcop);
3263 GvEGV(dstr) = (GV*)dstr;
3266 switch (SvTYPE(sref)) {
3269 SAVESPTR(GvAV(dstr));
3271 dref = (SV*)GvAV(dstr);
3272 GvAV(dstr) = (AV*)sref;
3273 if (!GvIMPORTED_AV(dstr)
3274 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3276 GvIMPORTED_AV_on(dstr);
3281 SAVESPTR(GvHV(dstr));
3283 dref = (SV*)GvHV(dstr);
3284 GvHV(dstr) = (HV*)sref;
3285 if (!GvIMPORTED_HV(dstr)
3286 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3288 GvIMPORTED_HV_on(dstr);
3293 if (GvCVGEN(dstr) && GvCV(dstr) != (CV*)sref) {
3294 SvREFCNT_dec(GvCV(dstr));
3295 GvCV(dstr) = Nullcv;
3296 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3297 PL_sub_generation++;
3299 SAVESPTR(GvCV(dstr));
3302 dref = (SV*)GvCV(dstr);
3303 if (GvCV(dstr) != (CV*)sref) {
3304 CV* cv = GvCV(dstr);
3306 if (!GvCVGEN((GV*)dstr) &&
3307 (CvROOT(cv) || CvXSUB(cv)))
3310 /* ahem, death to those who redefine
3311 * active sort subs */
3312 if (PL_curstackinfo->si_type == PERLSI_SORT &&
3313 PL_sortcop == CvSTART(cv))
3315 "Can't redefine active sort subroutine %s",
3316 GvENAME((GV*)dstr));
3317 /* Redefining a sub - warning is mandatory if
3318 it was a const and its value changed. */
3319 if (ckWARN(WARN_REDEFINE)
3321 && (!CvCONST((CV*)sref)
3322 || sv_cmp(cv_const_sv(cv),
3323 cv_const_sv((CV*)sref)))))
3325 Perl_warner(aTHX_ WARN_REDEFINE,
3327 ? "Constant subroutine %s redefined"
3328 : "Subroutine %s redefined",
3329 GvENAME((GV*)dstr));
3332 cv_ckproto(cv, (GV*)dstr,
3333 SvPOK(sref) ? SvPVX(sref) : Nullch);
3335 GvCV(dstr) = (CV*)sref;
3336 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3337 GvASSUMECV_on(dstr);
3338 PL_sub_generation++;
3340 if (!GvIMPORTED_CV(dstr)
3341 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3343 GvIMPORTED_CV_on(dstr);
3348 SAVESPTR(GvIOp(dstr));
3350 dref = (SV*)GvIOp(dstr);
3351 GvIOp(dstr) = (IO*)sref;
3355 SAVESPTR(GvFORM(dstr));
3357 dref = (SV*)GvFORM(dstr);
3358 GvFORM(dstr) = (CV*)sref;
3362 SAVESPTR(GvSV(dstr));
3364 dref = (SV*)GvSV(dstr);
3366 if (!GvIMPORTED_SV(dstr)
3367 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3369 GvIMPORTED_SV_on(dstr);
3377 if (SvTAINTED(sstr))
3382 (void)SvOOK_off(dstr); /* backoff */
3384 Safefree(SvPVX(dstr));
3385 SvLEN(dstr)=SvCUR(dstr)=0;
3388 (void)SvOK_off(dstr);
3389 SvRV(dstr) = SvREFCNT_inc(SvRV(sstr));
3391 if (sflags & SVp_NOK) {
3393 /* Only set the public OK flag if the source has public OK. */
3394 if (sflags & SVf_NOK)
3395 SvFLAGS(dstr) |= SVf_NOK;
3396 SvNVX(dstr) = SvNVX(sstr);
3398 if (sflags & SVp_IOK) {
3399 (void)SvIOKp_on(dstr);
3400 if (sflags & SVf_IOK)
3401 SvFLAGS(dstr) |= SVf_IOK;
3402 if (sflags & SVf_IVisUV)
3404 SvIVX(dstr) = SvIVX(sstr);
3406 if (SvAMAGIC(sstr)) {
3410 else if (sflags & SVp_POK) {
3413 * Check to see if we can just swipe the string. If so, it's a
3414 * possible small lose on short strings, but a big win on long ones.
3415 * It might even be a win on short strings if SvPVX(dstr)
3416 * has to be allocated and SvPVX(sstr) has to be freed.
3419 if (SvTEMP(sstr) && /* slated for free anyway? */
3420 SvREFCNT(sstr) == 1 && /* and no other references to it? */
3421 !(sflags & SVf_OOK) && /* and not involved in OOK hack? */
3422 SvLEN(sstr) && /* and really is a string */
3423 !(PL_op && PL_op->op_type == OP_AASSIGN)) /* and won't be needed again, potentially */
3425 if (SvPVX(dstr)) { /* we know that dtype >= SVt_PV */
3427 SvFLAGS(dstr) &= ~SVf_OOK;
3428 Safefree(SvPVX(dstr) - SvIVX(dstr));
3430 else if (SvLEN(dstr))
3431 Safefree(SvPVX(dstr));
3433 (void)SvPOK_only(dstr);
3434 SvPV_set(dstr, SvPVX(sstr));
3435 SvLEN_set(dstr, SvLEN(sstr));
3436 SvCUR_set(dstr, SvCUR(sstr));
3439 (void)SvOK_off(sstr); /* NOTE: nukes most SvFLAGS on sstr */
3440 SvPV_set(sstr, Nullch);
3445 else { /* have to copy actual string */
3446 STRLEN len = SvCUR(sstr);
3448 SvGROW(dstr, len + 1); /* inlined from sv_setpvn */
3449 Move(SvPVX(sstr),SvPVX(dstr),len,char);
3450 SvCUR_set(dstr, len);
3451 *SvEND(dstr) = '\0';
3452 (void)SvPOK_only(dstr);
3454 if (sflags & SVf_UTF8)
3457 if (sflags & SVp_NOK) {
3459 if (sflags & SVf_NOK)
3460 SvFLAGS(dstr) |= SVf_NOK;
3461 SvNVX(dstr) = SvNVX(sstr);
3463 if (sflags & SVp_IOK) {
3464 (void)SvIOKp_on(dstr);
3465 if (sflags & SVf_IOK)
3466 SvFLAGS(dstr) |= SVf_IOK;
3467 if (sflags & SVf_IVisUV)
3469 SvIVX(dstr) = SvIVX(sstr);
3472 else if (sflags & SVp_IOK) {
3473 if (sflags & SVf_IOK)
3474 (void)SvIOK_only(dstr);
3479 /* XXXX Do we want to set IsUV for IV(ROK)? Be extra safe... */
3480 if (sflags & SVf_IVisUV)
3482 SvIVX(dstr) = SvIVX(sstr);
3483 if (sflags & SVp_NOK) {
3484 if (sflags & SVf_NOK)
3485 (void)SvNOK_on(dstr);
3487 (void)SvNOKp_on(dstr);
3488 SvNVX(dstr) = SvNVX(sstr);
3491 else if (sflags & SVp_NOK) {
3492 if (sflags & SVf_NOK)
3493 (void)SvNOK_only(dstr);
3498 SvNVX(dstr) = SvNVX(sstr);
3501 if (dtype == SVt_PVGV) {
3502 if (ckWARN(WARN_MISC))
3503 Perl_warner(aTHX_ WARN_MISC, "Undefined value assigned to typeglob");
3506 (void)SvOK_off(dstr);
3508 if (SvTAINTED(sstr))
3513 =for apidoc sv_setsv_mg
3515 Like C<sv_setsv>, but also handles 'set' magic.
3521 Perl_sv_setsv_mg(pTHX_ SV *dstr, register SV *sstr)
3523 sv_setsv(dstr,sstr);
3528 =for apidoc sv_setpvn
3530 Copies a string into an SV. The C<len> parameter indicates the number of
3531 bytes to be copied. Does not handle 'set' magic. See C<sv_setpvn_mg>.
3537 Perl_sv_setpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3539 register char *dptr;
3541 SV_CHECK_THINKFIRST(sv);
3547 /* len is STRLEN which is unsigned, need to copy to signed */
3551 (void)SvUPGRADE(sv, SVt_PV);
3553 SvGROW(sv, len + 1);
3555 Move(ptr,dptr,len,char);
3558 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3563 =for apidoc sv_setpvn_mg
3565 Like C<sv_setpvn>, but also handles 'set' magic.
3571 Perl_sv_setpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3573 sv_setpvn(sv,ptr,len);
3578 =for apidoc sv_setpv
3580 Copies a string into an SV. The string must be null-terminated. Does not
3581 handle 'set' magic. See C<sv_setpv_mg>.
3587 Perl_sv_setpv(pTHX_ register SV *sv, register const char *ptr)
3589 register STRLEN len;
3591 SV_CHECK_THINKFIRST(sv);
3597 (void)SvUPGRADE(sv, SVt_PV);
3599 SvGROW(sv, len + 1);
3600 Move(ptr,SvPVX(sv),len+1,char);
3602 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3607 =for apidoc sv_setpv_mg
3609 Like C<sv_setpv>, but also handles 'set' magic.
3615 Perl_sv_setpv_mg(pTHX_ register SV *sv, register const char *ptr)
3622 =for apidoc sv_usepvn
3624 Tells an SV to use C<ptr> to find its string value. Normally the string is
3625 stored inside the SV but sv_usepvn allows the SV to use an outside string.
3626 The C<ptr> should point to memory that was allocated by C<malloc>. The
3627 string length, C<len>, must be supplied. This function will realloc the
3628 memory pointed to by C<ptr>, so that pointer should not be freed or used by
3629 the programmer after giving it to sv_usepvn. Does not handle 'set' magic.
3630 See C<sv_usepvn_mg>.
3636 Perl_sv_usepvn(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
3638 SV_CHECK_THINKFIRST(sv);
3639 (void)SvUPGRADE(sv, SVt_PV);
3644 (void)SvOOK_off(sv);
3645 if (SvPVX(sv) && SvLEN(sv))
3646 Safefree(SvPVX(sv));
3647 Renew(ptr, len+1, char);
3650 SvLEN_set(sv, len+1);
3652 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3657 =for apidoc sv_usepvn_mg
3659 Like C<sv_usepvn>, but also handles 'set' magic.
3665 Perl_sv_usepvn_mg(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
3667 sv_usepvn(sv,ptr,len);
3672 Perl_sv_force_normal_flags(pTHX_ register SV *sv, U32 flags)
3674 if (SvREADONLY(sv)) {
3676 char *pvx = SvPVX(sv);
3677 STRLEN len = SvCUR(sv);
3678 U32 hash = SvUVX(sv);
3679 SvGROW(sv, len + 1);
3680 Move(pvx,SvPVX(sv),len,char);
3684 unsharepvn(pvx,SvUTF8(sv)?-len:len,hash);
3686 else if (PL_curcop != &PL_compiling)
3687 Perl_croak(aTHX_ PL_no_modify);
3690 sv_unref_flags(sv, flags);
3691 else if (SvFAKE(sv) && SvTYPE(sv) == SVt_PVGV)
3696 Perl_sv_force_normal(pTHX_ register SV *sv)
3698 sv_force_normal_flags(sv, 0);
3704 Efficient removal of characters from the beginning of the string buffer.
3705 SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
3706 the string buffer. The C<ptr> becomes the first character of the adjusted
3713 Perl_sv_chop(pTHX_ register SV *sv, register char *ptr) /* like set but assuming ptr is in sv */
3717 register STRLEN delta;
3719 if (!ptr || !SvPOKp(sv))
3721 SV_CHECK_THINKFIRST(sv);
3722 if (SvTYPE(sv) < SVt_PVIV)
3723 sv_upgrade(sv,SVt_PVIV);
3726 if (!SvLEN(sv)) { /* make copy of shared string */
3727 char *pvx = SvPVX(sv);
3728 STRLEN len = SvCUR(sv);
3729 SvGROW(sv, len + 1);
3730 Move(pvx,SvPVX(sv),len,char);
3734 SvFLAGS(sv) |= SVf_OOK;
3736 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVp_IOK|SVp_NOK|SVf_IVisUV);
3737 delta = ptr - SvPVX(sv);
3745 =for apidoc sv_catpvn
3747 Concatenates the string onto the end of the string which is in the SV. The
3748 C<len> indicates number of bytes to copy. Handles 'get' magic, but not
3749 'set' magic. See C<sv_catpvn_mg>.
3755 Perl_sv_catpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3760 junk = SvPV_force(sv, tlen);
3761 SvGROW(sv, tlen + len + 1);
3764 Move(ptr,SvPVX(sv)+tlen,len,char);
3767 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3772 =for apidoc sv_catpvn_mg
3774 Like C<sv_catpvn>, but also handles 'set' magic.
3780 Perl_sv_catpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3782 sv_catpvn(sv,ptr,len);
3787 =for apidoc sv_catsv
3789 Concatenates the string from SV C<ssv> onto the end of the string in
3790 SV C<dsv>. Modifies C<dsv> but not C<ssv>. Handles 'get' magic, but
3791 not 'set' magic. See C<sv_catsv_mg>.
3796 Perl_sv_catsv(pTHX_ SV *dsv, register SV *ssv)
3802 if ((spv = SvPV(ssv, slen))) {
3803 bool dutf8 = DO_UTF8(dsv);
3804 bool sutf8 = DO_UTF8(ssv);
3807 sv_catpvn(dsv,spv,slen);
3810 /* Not modifying source SV, so taking a temporary copy. */
3811 SV* csv = sv_2mortal(newSVsv(ssv));
3815 sv_utf8_upgrade(csv);
3816 cpv = SvPV(csv,clen);
3817 sv_catpvn(dsv,cpv,clen);
3820 sv_utf8_upgrade(dsv);
3821 sv_catpvn(dsv,spv,slen);
3822 SvUTF8_on(dsv); /* If dsv has no wide characters. */
3829 =for apidoc sv_catsv_mg
3831 Like C<sv_catsv>, but also handles 'set' magic.
3837 Perl_sv_catsv_mg(pTHX_ SV *dsv, register SV *ssv)
3844 =for apidoc sv_catpv
3846 Concatenates the string onto the end of the string which is in the SV.
3847 Handles 'get' magic, but not 'set' magic. See C<sv_catpv_mg>.
3853 Perl_sv_catpv(pTHX_ register SV *sv, register const char *ptr)
3855 register STRLEN len;
3861 junk = SvPV_force(sv, tlen);
3863 SvGROW(sv, tlen + len + 1);
3866 Move(ptr,SvPVX(sv)+tlen,len+1,char);
3868 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3873 =for apidoc sv_catpv_mg
3875 Like C<sv_catpv>, but also handles 'set' magic.
3881 Perl_sv_catpv_mg(pTHX_ register SV *sv, register const char *ptr)
3888 Perl_newSV(pTHX_ STRLEN len)
3894 sv_upgrade(sv, SVt_PV);
3895 SvGROW(sv, len + 1);
3900 /* name is assumed to contain an SV* if (name && namelen == HEf_SVKEY) */
3903 =for apidoc sv_magic
3905 Adds magic to an SV.
3911 Perl_sv_magic(pTHX_ register SV *sv, SV *obj, int how, const char *name, I32 namlen)
3915 if (SvREADONLY(sv)) {
3916 if (PL_curcop != &PL_compiling && !strchr("gBf", how))
3917 Perl_croak(aTHX_ PL_no_modify);
3919 if (SvMAGICAL(sv) || (how == 't' && SvTYPE(sv) >= SVt_PVMG)) {
3920 if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
3927 (void)SvUPGRADE(sv, SVt_PVMG);
3929 Newz(702,mg, 1, MAGIC);
3930 mg->mg_moremagic = SvMAGIC(sv);
3933 if (!obj || obj == sv || how == '#' || how == 'r')
3936 mg->mg_obj = SvREFCNT_inc(obj);
3937 mg->mg_flags |= MGf_REFCOUNTED;
3940 mg->mg_len = namlen;
3943 mg->mg_ptr = savepvn(name, namlen);
3944 else if (namlen == HEf_SVKEY)
3945 mg->mg_ptr = (char*)SvREFCNT_inc((SV*)name);
3949 mg->mg_virtual = &PL_vtbl_sv;
3952 mg->mg_virtual = &PL_vtbl_amagic;
3955 mg->mg_virtual = &PL_vtbl_amagicelem;
3958 mg->mg_virtual = &PL_vtbl_ovrld;
3961 mg->mg_virtual = &PL_vtbl_bm;
3964 mg->mg_virtual = &PL_vtbl_regdata;
3967 mg->mg_virtual = &PL_vtbl_regdatum;
3970 mg->mg_virtual = &PL_vtbl_env;
3973 mg->mg_virtual = &PL_vtbl_fm;
3976 mg->mg_virtual = &PL_vtbl_envelem;
3979 mg->mg_virtual = &PL_vtbl_mglob;
3982 mg->mg_virtual = &PL_vtbl_isa;
3985 mg->mg_virtual = &PL_vtbl_isaelem;
3988 mg->mg_virtual = &PL_vtbl_nkeys;
3995 mg->mg_virtual = &PL_vtbl_dbline;
3999 mg->mg_virtual = &PL_vtbl_mutex;
4001 #endif /* USE_THREADS */
4002 #ifdef USE_LOCALE_COLLATE
4004 mg->mg_virtual = &PL_vtbl_collxfrm;
4006 #endif /* USE_LOCALE_COLLATE */
4008 mg->mg_virtual = &PL_vtbl_pack;
4012 mg->mg_virtual = &PL_vtbl_packelem;
4015 mg->mg_virtual = &PL_vtbl_regexp;
4018 mg->mg_virtual = &PL_vtbl_sig;
4021 mg->mg_virtual = &PL_vtbl_sigelem;
4024 mg->mg_virtual = &PL_vtbl_taint;
4028 mg->mg_virtual = &PL_vtbl_uvar;
4031 mg->mg_virtual = &PL_vtbl_vec;
4034 mg->mg_virtual = &PL_vtbl_substr;
4037 mg->mg_virtual = &PL_vtbl_defelem;
4040 mg->mg_virtual = &PL_vtbl_glob;
4043 mg->mg_virtual = &PL_vtbl_arylen;
4046 mg->mg_virtual = &PL_vtbl_pos;
4049 mg->mg_virtual = &PL_vtbl_backref;
4051 case '~': /* Reserved for use by extensions not perl internals. */
4052 /* Useful for attaching extension internal data to perl vars. */
4053 /* Note that multiple extensions may clash if magical scalars */
4054 /* etc holding private data from one are passed to another. */
4058 Perl_croak(aTHX_ "Don't know how to handle magic of type '%c'", how);
4062 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
4066 =for apidoc sv_unmagic
4068 Removes magic from an SV.
4074 Perl_sv_unmagic(pTHX_ SV *sv, int type)
4078 if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
4081 for (mg = *mgp; mg; mg = *mgp) {
4082 if (mg->mg_type == type) {
4083 MGVTBL* vtbl = mg->mg_virtual;
4084 *mgp = mg->mg_moremagic;
4085 if (vtbl && vtbl->svt_free)
4086 CALL_FPTR(vtbl->svt_free)(aTHX_ sv, mg);
4087 if (mg->mg_ptr && mg->mg_type != 'g')
4088 if (mg->mg_len >= 0)
4089 Safefree(mg->mg_ptr);
4090 else if (mg->mg_len == HEf_SVKEY)
4091 SvREFCNT_dec((SV*)mg->mg_ptr);
4092 if (mg->mg_flags & MGf_REFCOUNTED)
4093 SvREFCNT_dec(mg->mg_obj);
4097 mgp = &mg->mg_moremagic;
4101 SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
4108 =for apidoc sv_rvweaken
4116 Perl_sv_rvweaken(pTHX_ SV *sv)
4119 if (!SvOK(sv)) /* let undefs pass */
4122 Perl_croak(aTHX_ "Can't weaken a nonreference");
4123 else if (SvWEAKREF(sv)) {
4124 if (ckWARN(WARN_MISC))
4125 Perl_warner(aTHX_ WARN_MISC, "Reference is already weak");
4129 sv_add_backref(tsv, sv);
4136 S_sv_add_backref(pTHX_ SV *tsv, SV *sv)
4140 if (SvMAGICAL(tsv) && (mg = mg_find(tsv, '<')))
4141 av = (AV*)mg->mg_obj;
4144 sv_magic(tsv, (SV*)av, '<', NULL, 0);
4145 SvREFCNT_dec(av); /* for sv_magic */
4151 S_sv_del_backref(pTHX_ SV *sv)
4158 if (!SvMAGICAL(tsv) || !(mg = mg_find(tsv, '<')))
4159 Perl_croak(aTHX_ "panic: del_backref");
4160 av = (AV *)mg->mg_obj;
4165 svp[i] = &PL_sv_undef; /* XXX */
4172 =for apidoc sv_insert
4174 Inserts a string at the specified offset/length within the SV. Similar to
4175 the Perl substr() function.
4181 Perl_sv_insert(pTHX_ SV *bigstr, STRLEN offset, STRLEN len, char *little, STRLEN littlelen)
4185 register char *midend;
4186 register char *bigend;
4192 Perl_croak(aTHX_ "Can't modify non-existent substring");
4193 SvPV_force(bigstr, curlen);
4194 (void)SvPOK_only_UTF8(bigstr);
4195 if (offset + len > curlen) {
4196 SvGROW(bigstr, offset+len+1);
4197 Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
4198 SvCUR_set(bigstr, offset+len);
4202 i = littlelen - len;
4203 if (i > 0) { /* string might grow */
4204 big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
4205 mid = big + offset + len;
4206 midend = bigend = big + SvCUR(bigstr);
4209 while (midend > mid) /* shove everything down */
4210 *--bigend = *--midend;
4211 Move(little,big+offset,littlelen,char);
4217 Move(little,SvPVX(bigstr)+offset,len,char);
4222 big = SvPVX(bigstr);
4225 bigend = big + SvCUR(bigstr);
4227 if (midend > bigend)
4228 Perl_croak(aTHX_ "panic: sv_insert");
4230 if (mid - big > bigend - midend) { /* faster to shorten from end */
4232 Move(little, mid, littlelen,char);
4235 i = bigend - midend;
4237 Move(midend, mid, i,char);
4241 SvCUR_set(bigstr, mid - big);
4244 else if ((i = mid - big)) { /* faster from front */
4245 midend -= littlelen;
4247 sv_chop(bigstr,midend-i);
4252 Move(little, mid, littlelen,char);
4254 else if (littlelen) {
4255 midend -= littlelen;
4256 sv_chop(bigstr,midend);
4257 Move(little,midend,littlelen,char);
4260 sv_chop(bigstr,midend);
4266 =for apidoc sv_replace
4268 Make the first argument a copy of the second, then delete the original.
4274 Perl_sv_replace(pTHX_ register SV *sv, register SV *nsv)
4276 U32 refcnt = SvREFCNT(sv);
4277 SV_CHECK_THINKFIRST(sv);
4278 if (SvREFCNT(nsv) != 1 && ckWARN_d(WARN_INTERNAL))
4279 Perl_warner(aTHX_ WARN_INTERNAL, "Reference miscount in sv_replace()");
4280 if (SvMAGICAL(sv)) {
4284 sv_upgrade(nsv, SVt_PVMG);
4285 SvMAGIC(nsv) = SvMAGIC(sv);
4286 SvFLAGS(nsv) |= SvMAGICAL(sv);
4292 assert(!SvREFCNT(sv));
4293 StructCopy(nsv,sv,SV);
4294 SvREFCNT(sv) = refcnt;
4295 SvFLAGS(nsv) |= SVTYPEMASK; /* Mark as freed */
4300 =for apidoc sv_clear
4302 Clear an SV, making it empty. Does not free the memory used by the SV
4309 Perl_sv_clear(pTHX_ register SV *sv)
4313 assert(SvREFCNT(sv) == 0);
4316 if (PL_defstash) { /* Still have a symbol table? */
4321 Zero(&tmpref, 1, SV);
4322 sv_upgrade(&tmpref, SVt_RV);
4324 SvREADONLY_on(&tmpref); /* DESTROY() could be naughty */
4325 SvREFCNT(&tmpref) = 1;
4328 stash = SvSTASH(sv);
4329 destructor = StashHANDLER(stash,DESTROY);
4332 PUSHSTACKi(PERLSI_DESTROY);
4333 SvRV(&tmpref) = SvREFCNT_inc(sv);
4338 call_sv((SV*)destructor, G_DISCARD|G_EVAL|G_KEEPERR);
4344 } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
4346 del_XRV(SvANY(&tmpref));
4349 if (PL_in_clean_objs)
4350 Perl_croak(aTHX_ "DESTROY created new reference to dead object '%s'",
4352 /* DESTROY gave object new lease on life */
4358 SvREFCNT_dec(SvSTASH(sv)); /* possibly of changed persuasion */
4359 SvOBJECT_off(sv); /* Curse the object. */
4360 if (SvTYPE(sv) != SVt_PVIO)
4361 --PL_sv_objcount; /* XXX Might want something more general */
4364 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv))
4367 switch (SvTYPE(sv)) {
4370 IoIFP(sv) != PerlIO_stdin() &&
4371 IoIFP(sv) != PerlIO_stdout() &&
4372 IoIFP(sv) != PerlIO_stderr())
4374 io_close((IO*)sv, FALSE);
4376 if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
4377 PerlDir_close(IoDIRP(sv));
4378 IoDIRP(sv) = (DIR*)NULL;
4379 Safefree(IoTOP_NAME(sv));
4380 Safefree(IoFMT_NAME(sv));
4381 Safefree(IoBOTTOM_NAME(sv));
4396 SvREFCNT_dec(LvTARG(sv));
4400 Safefree(GvNAME(sv));
4401 /* cannot decrease stash refcount yet, as we might recursively delete
4402 ourselves when the refcnt drops to zero. Delay SvREFCNT_dec
4403 of stash until current sv is completely gone.
4404 -- JohnPC, 27 Mar 1998 */
4405 stash = GvSTASH(sv);
4411 (void)SvOOK_off(sv);
4419 SvREFCNT_dec(SvRV(sv));
4421 else if (SvPVX(sv) && SvLEN(sv))
4422 Safefree(SvPVX(sv));
4423 else if (SvPVX(sv) && SvREADONLY(sv) && SvFAKE(sv)) {
4424 unsharepvn(SvPVX(sv),SvUTF8(sv)?-SvCUR(sv):SvCUR(sv),SvUVX(sv));
4436 switch (SvTYPE(sv)) {
4452 del_XPVIV(SvANY(sv));
4455 del_XPVNV(SvANY(sv));
4458 del_XPVMG(SvANY(sv));
4461 del_XPVLV(SvANY(sv));
4464 del_XPVAV(SvANY(sv));
4467 del_XPVHV(SvANY(sv));
4470 del_XPVCV(SvANY(sv));
4473 del_XPVGV(SvANY(sv));
4474 /* code duplication for increased performance. */
4475 SvFLAGS(sv) &= SVf_BREAK;
4476 SvFLAGS(sv) |= SVTYPEMASK;
4477 /* decrease refcount of the stash that owns this GV, if any */
4479 SvREFCNT_dec(stash);
4480 return; /* not break, SvFLAGS reset already happened */
4482 del_XPVBM(SvANY(sv));
4485 del_XPVFM(SvANY(sv));
4488 del_XPVIO(SvANY(sv));
4491 SvFLAGS(sv) &= SVf_BREAK;
4492 SvFLAGS(sv) |= SVTYPEMASK;
4496 Perl_sv_newref(pTHX_ SV *sv)
4499 ATOMIC_INC(SvREFCNT(sv));
4506 Free the memory used by an SV.
4512 Perl_sv_free(pTHX_ SV *sv)
4514 int refcount_is_zero;
4518 if (SvREFCNT(sv) == 0) {
4519 if (SvFLAGS(sv) & SVf_BREAK)
4521 if (PL_in_clean_all) /* All is fair */
4523 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
4524 /* make sure SvREFCNT(sv)==0 happens very seldom */
4525 SvREFCNT(sv) = (~(U32)0)/2;
4528 if (ckWARN_d(WARN_INTERNAL))
4529 Perl_warner(aTHX_ WARN_INTERNAL, "Attempt to free unreferenced scalar");
4532 ATOMIC_DEC_AND_TEST(refcount_is_zero, SvREFCNT(sv));
4533 if (!refcount_is_zero)
4537 if (ckWARN_d(WARN_DEBUGGING))
4538 Perl_warner(aTHX_ WARN_DEBUGGING,
4539 "Attempt to free temp prematurely: SV 0x%"UVxf,
4544 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
4545 /* make sure SvREFCNT(sv)==0 happens very seldom */
4546 SvREFCNT(sv) = (~(U32)0)/2;
4557 Returns the length of the string in the SV. See also C<SvCUR>.
4563 Perl_sv_len(pTHX_ register SV *sv)
4572 len = mg_length(sv);
4574 junk = SvPV(sv, len);
4579 =for apidoc sv_len_utf8
4581 Returns the number of characters in the string in an SV, counting wide
4582 UTF8 bytes as a single character.
4588 Perl_sv_len_utf8(pTHX_ register SV *sv)
4594 return mg_length(sv);
4598 U8 *s = (U8*)SvPV(sv, len);
4600 return Perl_utf8_length(aTHX_ s, s + len);
4605 Perl_sv_pos_u2b(pTHX_ register SV *sv, I32* offsetp, I32* lenp)
4610 I32 uoffset = *offsetp;
4616 start = s = (U8*)SvPV(sv, len);
4618 while (s < send && uoffset--)
4622 *offsetp = s - start;
4626 while (s < send && ulen--)
4636 Perl_sv_pos_b2u(pTHX_ register SV *sv, I32* offsetp)
4645 s = (U8*)SvPV(sv, len);
4647 Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset");
4648 send = s + *offsetp;
4653 if (utf8_to_uv(s, UTF8SKIP(s), &n, 0)) {
4667 Returns a boolean indicating whether the strings in the two SVs are
4674 Perl_sv_eq(pTHX_ register SV *sv1, register SV *sv2)
4681 bool pv1tmp = FALSE;
4682 bool pv2tmp = FALSE;
4689 pv1 = SvPV(sv1, cur1);
4696 pv2 = SvPV(sv2, cur2);
4698 /* do not utf8ize the comparands as a side-effect */
4699 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTE) {
4700 bool is_utf8 = TRUE;
4702 if (PL_hints & HINT_UTF8_DISTINCT)
4706 char *pv = (char*)bytes_from_utf8((U8*)pv1, &cur1, &is_utf8);
4709 pv1tmp = (pv != pv1);
4713 char *pv = (char *)bytes_from_utf8((U8*)pv2, &cur2, &is_utf8);
4716 pv2tmp = (pv != pv2);
4722 eq = memEQ(pv1, pv2, cur1);
4735 Compares the strings in two SVs. Returns -1, 0, or 1 indicating whether the
4736 string in C<sv1> is less than, equal to, or greater than the string in
4743 Perl_sv_cmp(pTHX_ register SV *sv1, register SV *sv2)
4748 bool pv1tmp = FALSE;
4749 bool pv2tmp = FALSE;
4756 pv1 = SvPV(sv1, cur1);
4763 pv2 = SvPV(sv2, cur2);
4765 /* do not utf8ize the comparands as a side-effect */
4766 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTE) {
4767 if (PL_hints & HINT_UTF8_DISTINCT)
4768 return SvUTF8(sv1) ? 1 : -1;
4771 pv2 = (char*)bytes_to_utf8((U8*)pv2, &cur2);
4775 pv1 = (char*)bytes_to_utf8((U8*)pv1, &cur1);
4781 cmp = cur2 ? -1 : 0;
4785 I32 retval = memcmp((void*)pv1, (void*)pv2, cur1 < cur2 ? cur1 : cur2);
4788 cmp = retval < 0 ? -1 : 1;
4789 } else if (cur1 == cur2) {
4792 cmp = cur1 < cur2 ? -1 : 1;
4805 =for apidoc sv_cmp_locale
4807 Compares the strings in two SVs in a locale-aware manner. See
4814 Perl_sv_cmp_locale(pTHX_ register SV *sv1, register SV *sv2)
4816 #ifdef USE_LOCALE_COLLATE
4822 if (PL_collation_standard)
4826 pv1 = sv1 ? sv_collxfrm(sv1, &len1) : (char *) NULL;
4828 pv2 = sv2 ? sv_collxfrm(sv2, &len2) : (char *) NULL;
4830 if (!pv1 || !len1) {
4841 retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
4844 return retval < 0 ? -1 : 1;
4847 * When the result of collation is equality, that doesn't mean
4848 * that there are no differences -- some locales exclude some
4849 * characters from consideration. So to avoid false equalities,
4850 * we use the raw string as a tiebreaker.
4856 #endif /* USE_LOCALE_COLLATE */
4858 return sv_cmp(sv1, sv2);
4861 #ifdef USE_LOCALE_COLLATE
4863 * Any scalar variable may carry an 'o' magic that contains the
4864 * scalar data of the variable transformed to such a format that
4865 * a normal memory comparison can be used to compare the data
4866 * according to the locale settings.
4869 Perl_sv_collxfrm(pTHX_ SV *sv, STRLEN *nxp)
4873 mg = SvMAGICAL(sv) ? mg_find(sv, 'o') : (MAGIC *) NULL;
4874 if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
4879 Safefree(mg->mg_ptr);
4881 if ((xf = mem_collxfrm(s, len, &xlen))) {
4882 if (SvREADONLY(sv)) {
4885 return xf + sizeof(PL_collation_ix);
4888 sv_magic(sv, 0, 'o', 0, 0);
4889 mg = mg_find(sv, 'o');
4902 if (mg && mg->mg_ptr) {
4904 return mg->mg_ptr + sizeof(PL_collation_ix);
4912 #endif /* USE_LOCALE_COLLATE */
4917 Get a line from the filehandle and store it into the SV, optionally
4918 appending to the currently-stored string.
4924 Perl_sv_gets(pTHX_ register SV *sv, register PerlIO *fp, I32 append)
4928 register STDCHAR rslast;
4929 register STDCHAR *bp;
4933 SV_CHECK_THINKFIRST(sv);
4934 (void)SvUPGRADE(sv, SVt_PV);
4938 if (RsSNARF(PL_rs)) {
4942 else if (RsRECORD(PL_rs)) {
4943 I32 recsize, bytesread;
4946 /* Grab the size of the record we're getting */
4947 recsize = SvIV(SvRV(PL_rs));
4948 (void)SvPOK_only(sv); /* Validate pointer */
4949 buffer = SvGROW(sv, recsize + 1);
4952 /* VMS wants read instead of fread, because fread doesn't respect */
4953 /* RMS record boundaries. This is not necessarily a good thing to be */
4954 /* doing, but we've got no other real choice */
4955 bytesread = PerlLIO_read(PerlIO_fileno(fp), buffer, recsize);
4957 bytesread = PerlIO_read(fp, buffer, recsize);
4959 SvCUR_set(sv, bytesread);
4960 buffer[bytesread] = '\0';
4961 if (PerlIO_isutf8(fp))
4965 return(SvCUR(sv) ? SvPVX(sv) : Nullch);
4967 else if (RsPARA(PL_rs)) {
4972 /* Get $/ i.e. PL_rs into same encoding as stream wants */
4973 if (PerlIO_isutf8(fp)) {
4974 rsptr = SvPVutf8(PL_rs, rslen);
4977 if (SvUTF8(PL_rs)) {
4978 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
4979 Perl_croak(aTHX_ "Wide character in $/");
4982 rsptr = SvPV(PL_rs, rslen);
4986 rslast = rslen ? rsptr[rslen - 1] : '\0';
4988 if (RsPARA(PL_rs)) { /* have to do this both before and after */
4989 do { /* to make sure file boundaries work right */
4992 i = PerlIO_getc(fp);
4996 PerlIO_ungetc(fp,i);
5002 /* See if we know enough about I/O mechanism to cheat it ! */
5004 /* This used to be #ifdef test - it is made run-time test for ease
5005 of abstracting out stdio interface. One call should be cheap
5006 enough here - and may even be a macro allowing compile
5010 if (PerlIO_fast_gets(fp)) {
5013 * We're going to steal some values from the stdio struct
5014 * and put EVERYTHING in the innermost loop into registers.
5016 register STDCHAR *ptr;
5020 #if defined(VMS) && defined(PERLIO_IS_STDIO)
5021 /* An ungetc()d char is handled separately from the regular
5022 * buffer, so we getc() it back out and stuff it in the buffer.
5024 i = PerlIO_getc(fp);
5025 if (i == EOF) return 0;
5026 *(--((*fp)->_ptr)) = (unsigned char) i;
5030 /* Here is some breathtakingly efficient cheating */
5032 cnt = PerlIO_get_cnt(fp); /* get count into register */
5033 (void)SvPOK_only(sv); /* validate pointer */
5034 if (SvLEN(sv) - append <= cnt + 1) { /* make sure we have the room */
5035 if (cnt > 80 && SvLEN(sv) > append) {
5036 shortbuffered = cnt - SvLEN(sv) + append + 1;
5037 cnt -= shortbuffered;
5041 /* remember that cnt can be negative */
5042 SvGROW(sv, append + (cnt <= 0 ? 2 : (cnt + 1)));
5047 bp = (STDCHAR*)SvPVX(sv) + append; /* move these two too to registers */
5048 ptr = (STDCHAR*)PerlIO_get_ptr(fp);
5049 DEBUG_P(PerlIO_printf(Perl_debug_log,
5050 "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
5051 DEBUG_P(PerlIO_printf(Perl_debug_log,
5052 "Screamer: entering: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
5053 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
5054 PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
5059 while (cnt > 0) { /* this | eat */
5061 if ((*bp++ = *ptr++) == rslast) /* really | dust */
5062 goto thats_all_folks; /* screams | sed :-) */
5066 Copy(ptr, bp, cnt, char); /* this | eat */
5067 bp += cnt; /* screams | dust */
5068 ptr += cnt; /* louder | sed :-) */
5073 if (shortbuffered) { /* oh well, must extend */
5074 cnt = shortbuffered;
5076 bpx = bp - (STDCHAR*)SvPVX(sv); /* box up before relocation */
5078 SvGROW(sv, SvLEN(sv) + append + cnt + 2);
5079 bp = (STDCHAR*)SvPVX(sv) + bpx; /* unbox after relocation */
5083 DEBUG_P(PerlIO_printf(Perl_debug_log,
5084 "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
5085 PTR2UV(ptr),(long)cnt));
5086 PerlIO_set_ptrcnt(fp, ptr, cnt); /* deregisterize cnt and ptr */
5087 DEBUG_P(PerlIO_printf(Perl_debug_log,
5088 "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
5089 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
5090 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
5091 /* This used to call 'filbuf' in stdio form, but as that behaves like
5092 getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
5093 another abstraction. */
5094 i = PerlIO_getc(fp); /* get more characters */
5095 DEBUG_P(PerlIO_printf(Perl_debug_log,
5096 "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
5097 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
5098 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
5099 cnt = PerlIO_get_cnt(fp);
5100 ptr = (STDCHAR*)PerlIO_get_ptr(fp); /* reregisterize cnt and ptr */
5101 DEBUG_P(PerlIO_printf(Perl_debug_log,
5102 "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
5104 if (i == EOF) /* all done for ever? */
5105 goto thats_really_all_folks;
5107 bpx = bp - (STDCHAR*)SvPVX(sv); /* box up before relocation */
5109 SvGROW(sv, bpx + cnt + 2);
5110 bp = (STDCHAR*)SvPVX(sv) + bpx; /* unbox after relocation */
5112 *bp++ = i; /* store character from PerlIO_getc */
5114 if (rslen && (STDCHAR)i == rslast) /* all done for now? */
5115 goto thats_all_folks;
5119 if ((rslen > 1 && (bp - (STDCHAR*)SvPVX(sv) < rslen)) ||
5120 memNE((char*)bp - rslen, rsptr, rslen))
5121 goto screamer; /* go back to the fray */
5122 thats_really_all_folks:
5124 cnt += shortbuffered;
5125 DEBUG_P(PerlIO_printf(Perl_debug_log,
5126 "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
5127 PerlIO_set_ptrcnt(fp, ptr, cnt); /* put these back or we're in trouble */
5128 DEBUG_P(PerlIO_printf(Perl_debug_log,
5129 "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
5130 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
5131 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
5133 SvCUR_set(sv, bp - (STDCHAR*)SvPVX(sv)); /* set length */
5134 DEBUG_P(PerlIO_printf(Perl_debug_log,
5135 "Screamer: done, len=%ld, string=|%.*s|\n",
5136 (long)SvCUR(sv),(int)SvCUR(sv),SvPVX(sv)));
5141 /*The big, slow, and stupid way */
5144 /* Need to work around EPOC SDK features */
5145 /* On WINS: MS VC5 generates calls to _chkstk, */
5146 /* if a `large' stack frame is allocated */
5147 /* gcc on MARM does not generate calls like these */
5153 register STDCHAR *bpe = buf + sizeof(buf);
5155 while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = i) != rslast && bp < bpe)
5156 ; /* keep reading */
5160 cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
5161 /* Accomodate broken VAXC compiler, which applies U8 cast to
5162 * both args of ?: operator, causing EOF to change into 255
5164 if (cnt) { i = (U8)buf[cnt - 1]; } else { i = EOF; }
5168 sv_catpvn(sv, (char *) buf, cnt);
5170 sv_setpvn(sv, (char *) buf, cnt);
5172 if (i != EOF && /* joy */
5174 SvCUR(sv) < rslen ||
5175 memNE(SvPVX(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
5179 * If we're reading from a TTY and we get a short read,
5180 * indicating that the user hit his EOF character, we need
5181 * to notice it now, because if we try to read from the TTY
5182 * again, the EOF condition will disappear.
5184 * The comparison of cnt to sizeof(buf) is an optimization
5185 * that prevents unnecessary calls to feof().
5189 if (!(cnt < sizeof(buf) && PerlIO_eof(fp)))
5194 if (RsPARA(PL_rs)) { /* have to do this both before and after */
5195 while (i != EOF) { /* to make sure file boundaries work right */
5196 i = PerlIO_getc(fp);
5198 PerlIO_ungetc(fp,i);
5204 if (PerlIO_isutf8(fp))
5209 return (SvCUR(sv) - append) ? SvPVX(sv) : Nullch;
5216 Auto-increment of the value in the SV.
5222 Perl_sv_inc(pTHX_ register SV *sv)
5231 if (SvTHINKFIRST(sv)) {
5232 if (SvREADONLY(sv)) {
5233 if (PL_curcop != &PL_compiling)
5234 Perl_croak(aTHX_ PL_no_modify);
5238 if (SvAMAGIC(sv) && AMG_CALLun(sv,inc))
5240 i = PTR2IV(SvRV(sv));
5245 flags = SvFLAGS(sv);
5246 if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
5247 /* It's (privately or publicly) a float, but not tested as an
5248 integer, so test it to see. */
5250 flags = SvFLAGS(sv);
5252 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
5253 /* It's publicly an integer, or privately an integer-not-float */
5256 if (SvUVX(sv) == UV_MAX)
5257 sv_setnv(sv, (NV)UV_MAX + 1.0);
5259 (void)SvIOK_only_UV(sv);
5262 if (SvIVX(sv) == IV_MAX)
5263 sv_setuv(sv, (UV)IV_MAX + 1);
5265 (void)SvIOK_only(sv);
5271 if (flags & SVp_NOK) {
5272 (void)SvNOK_only(sv);
5277 if (!(flags & SVp_POK) || !*SvPVX(sv)) {
5278 if ((flags & SVTYPEMASK) < SVt_PVIV)
5279 sv_upgrade(sv, SVt_IV);
5280 (void)SvIOK_only(sv);
5285 while (isALPHA(*d)) d++;
5286 while (isDIGIT(*d)) d++;
5288 #ifdef PERL_PRESERVE_IVUV
5289 /* Got to punt this an an integer if needs be, but we don't issue
5290 warnings. Probably ought to make the sv_iv_please() that does
5291 the conversion if possible, and silently. */
5292 I32 numtype = looks_like_number(sv);
5293 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
5294 /* Need to try really hard to see if it's an integer.
5295 9.22337203685478e+18 is an integer.
5296 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
5297 so $a="9.22337203685478e+18"; $a+0; $a++
5298 needs to be the same as $a="9.22337203685478e+18"; $a++
5305 /* sv_2iv *should* have made this an NV */
5306 if (flags & SVp_NOK) {
5307 (void)SvNOK_only(sv);
5311 /* I don't think we can get here. Maybe I should assert this
5312 And if we do get here I suspect that sv_setnv will croak. NWC
5314 #if defined(USE_LONG_DOUBLE)
5315 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"PERL_PRIgldbl"\n",
5316 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5318 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%g\n",
5319 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5322 #endif /* PERL_PRESERVE_IVUV */
5323 sv_setnv(sv,Atof(SvPVX(sv)) + 1.0);
5327 while (d >= SvPVX(sv)) {
5335 /* MKS: The original code here died if letters weren't consecutive.
5336 * at least it didn't have to worry about non-C locales. The
5337 * new code assumes that ('z'-'a')==('Z'-'A'), letters are
5338 * arranged in order (although not consecutively) and that only
5339 * [A-Za-z] are accepted by isALPHA in the C locale.
5341 if (*d != 'z' && *d != 'Z') {
5342 do { ++*d; } while (!isALPHA(*d));
5345 *(d--) -= 'z' - 'a';
5350 *(d--) -= 'z' - 'a' + 1;
5354 /* oh,oh, the number grew */
5355 SvGROW(sv, SvCUR(sv) + 2);
5357 for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX(sv); d--)
5368 Auto-decrement of the value in the SV.
5374 Perl_sv_dec(pTHX_ register SV *sv)
5382 if (SvTHINKFIRST(sv)) {
5383 if (SvREADONLY(sv)) {
5384 if (PL_curcop != &PL_compiling)
5385 Perl_croak(aTHX_ PL_no_modify);
5389 if (SvAMAGIC(sv) && AMG_CALLun(sv,dec))
5391 i = PTR2IV(SvRV(sv));
5396 /* Unlike sv_inc we don't have to worry about string-never-numbers
5397 and keeping them magic. But we mustn't warn on punting */
5398 flags = SvFLAGS(sv);
5399 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
5400 /* It's publicly an integer, or privately an integer-not-float */
5403 if (SvUVX(sv) == 0) {
5404 (void)SvIOK_only(sv);
5408 (void)SvIOK_only_UV(sv);
5412 if (SvIVX(sv) == IV_MIN)
5413 sv_setnv(sv, (NV)IV_MIN - 1.0);
5415 (void)SvIOK_only(sv);
5421 if (flags & SVp_NOK) {
5423 (void)SvNOK_only(sv);
5426 if (!(flags & SVp_POK)) {
5427 if ((flags & SVTYPEMASK) < SVt_PVNV)
5428 sv_upgrade(sv, SVt_NV);
5430 (void)SvNOK_only(sv);
5433 #ifdef PERL_PRESERVE_IVUV
5435 I32 numtype = looks_like_number(sv);
5436 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
5437 /* Need to try really hard to see if it's an integer.
5438 9.22337203685478e+18 is an integer.
5439 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
5440 so $a="9.22337203685478e+18"; $a+0; $a--
5441 needs to be the same as $a="9.22337203685478e+18"; $a--
5448 /* sv_2iv *should* have made this an NV */
5449 if (flags & SVp_NOK) {
5450 (void)SvNOK_only(sv);
5454 /* I don't think we can get here. Maybe I should assert this
5455 And if we do get here I suspect that sv_setnv will croak. NWC
5457 #if defined(USE_LONG_DOUBLE)
5458 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"PERL_PRIgldbl"\n",
5459 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5461 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%g\n",
5462 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5466 #endif /* PERL_PRESERVE_IVUV */
5467 sv_setnv(sv,Atof(SvPVX(sv)) - 1.0); /* punt */
5471 =for apidoc sv_mortalcopy
5473 Creates a new SV which is a copy of the original SV. The new SV is marked
5479 /* Make a string that will exist for the duration of the expression
5480 * evaluation. Actually, it may have to last longer than that, but
5481 * hopefully we won't free it until it has been assigned to a
5482 * permanent location. */
5485 Perl_sv_mortalcopy(pTHX_ SV *oldstr)
5490 sv_setsv(sv,oldstr);
5492 PL_tmps_stack[++PL_tmps_ix] = sv;
5498 =for apidoc sv_newmortal
5500 Creates a new SV which is mortal. The reference count of the SV is set to 1.
5506 Perl_sv_newmortal(pTHX)
5511 SvFLAGS(sv) = SVs_TEMP;
5513 PL_tmps_stack[++PL_tmps_ix] = sv;
5518 =for apidoc sv_2mortal
5520 Marks an SV as mortal. The SV will be destroyed when the current context
5526 /* same thing without the copying */
5529 Perl_sv_2mortal(pTHX_ register SV *sv)
5533 if (SvREADONLY(sv) && SvIMMORTAL(sv))
5536 PL_tmps_stack[++PL_tmps_ix] = sv;
5544 Creates a new SV and copies a string into it. The reference count for the
5545 SV is set to 1. If C<len> is zero, Perl will compute the length using
5546 strlen(). For efficiency, consider using C<newSVpvn> instead.
5552 Perl_newSVpv(pTHX_ const char *s, STRLEN len)
5559 sv_setpvn(sv,s,len);
5564 =for apidoc newSVpvn
5566 Creates a new SV and copies a string into it. The reference count for the
5567 SV is set to 1. Note that if C<len> is zero, Perl will create a zero length
5568 string. You are responsible for ensuring that the source string is at least
5575 Perl_newSVpvn(pTHX_ const char *s, STRLEN len)
5580 sv_setpvn(sv,s,len);
5585 =for apidoc newSVpvn_share
5587 Creates a new SV and populates it with a string from
5588 the string table. Turns on READONLY and FAKE.
5589 The idea here is that as string table is used for shared hash
5590 keys these strings will have SvPVX == HeKEY and hash lookup
5591 will avoid string compare.
5597 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
5600 bool is_utf8 = FALSE;
5605 if (is_utf8 && !(PL_hints & HINT_UTF8_DISTINCT))
5606 src = (char*)bytes_from_utf8((U8*)src, (STRLEN*)&len, &is_utf8);
5608 PERL_HASH(hash, src, len);
5610 sv_upgrade(sv, SVt_PVIV);
5611 SvPVX(sv) = sharepvn(src, is_utf8?-len:len, hash);
5623 #if defined(PERL_IMPLICIT_CONTEXT)
5625 Perl_newSVpvf_nocontext(const char* pat, ...)
5630 va_start(args, pat);
5631 sv = vnewSVpvf(pat, &args);
5638 =for apidoc newSVpvf
5640 Creates a new SV an initialize it with the string formatted like
5647 Perl_newSVpvf(pTHX_ const char* pat, ...)
5651 va_start(args, pat);
5652 sv = vnewSVpvf(pat, &args);
5658 Perl_vnewSVpvf(pTHX_ const char* pat, va_list* args)
5662 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
5669 Creates a new SV and copies a floating point value into it.
5670 The reference count for the SV is set to 1.
5676 Perl_newSVnv(pTHX_ NV n)
5688 Creates a new SV and copies an integer into it. The reference count for the
5695 Perl_newSViv(pTHX_ IV i)
5707 Creates a new SV and copies an unsigned integer into it.
5708 The reference count for the SV is set to 1.
5714 Perl_newSVuv(pTHX_ UV u)
5724 =for apidoc newRV_noinc
5726 Creates an RV wrapper for an SV. The reference count for the original
5727 SV is B<not> incremented.
5733 Perl_newRV_noinc(pTHX_ SV *tmpRef)
5738 sv_upgrade(sv, SVt_RV);
5745 /* newRV_inc is #defined to newRV in sv.h */
5747 Perl_newRV(pTHX_ SV *tmpRef)
5749 return newRV_noinc(SvREFCNT_inc(tmpRef));
5755 Creates a new SV which is an exact duplicate of the original SV.
5760 /* make an exact duplicate of old */
5763 Perl_newSVsv(pTHX_ register SV *old)
5769 if (SvTYPE(old) == SVTYPEMASK) {
5770 if (ckWARN_d(WARN_INTERNAL))
5771 Perl_warner(aTHX_ WARN_INTERNAL, "semi-panic: attempt to dup freed string");
5786 Perl_sv_reset(pTHX_ register char *s, HV *stash)
5794 char todo[PERL_UCHAR_MAX+1];
5799 if (!*s) { /* reset ?? searches */
5800 for (pm = HvPMROOT(stash); pm; pm = pm->op_pmnext) {
5801 pm->op_pmdynflags &= ~PMdf_USED;
5806 /* reset variables */
5808 if (!HvARRAY(stash))
5811 Zero(todo, 256, char);
5813 i = (unsigned char)*s;
5817 max = (unsigned char)*s++;
5818 for ( ; i <= max; i++) {
5821 for (i = 0; i <= (I32) HvMAX(stash); i++) {
5822 for (entry = HvARRAY(stash)[i];
5824 entry = HeNEXT(entry))
5826 if (!todo[(U8)*HeKEY(entry)])
5828 gv = (GV*)HeVAL(entry);
5830 if (SvTHINKFIRST(sv)) {
5831 if (!SvREADONLY(sv) && SvROK(sv))
5836 if (SvTYPE(sv) >= SVt_PV) {
5838 if (SvPVX(sv) != Nullch)
5845 if (GvHV(gv) && !HvNAME(GvHV(gv))) {
5847 #ifdef USE_ENVIRON_ARRAY
5849 environ[0] = Nullch;
5858 Perl_sv_2io(pTHX_ SV *sv)
5864 switch (SvTYPE(sv)) {
5872 Perl_croak(aTHX_ "Bad filehandle: %s", GvNAME(gv));
5876 Perl_croak(aTHX_ PL_no_usym, "filehandle");
5878 return sv_2io(SvRV(sv));
5879 gv = gv_fetchpv(SvPV(sv,n_a), FALSE, SVt_PVIO);
5885 Perl_croak(aTHX_ "Bad filehandle: %s", SvPV(sv,n_a));
5892 Perl_sv_2cv(pTHX_ SV *sv, HV **st, GV **gvp, I32 lref)
5899 return *gvp = Nullgv, Nullcv;
5900 switch (SvTYPE(sv)) {
5919 SV **sp = &sv; /* Used in tryAMAGICunDEREF macro. */
5920 tryAMAGICunDEREF(to_cv);
5923 if (SvTYPE(sv) == SVt_PVCV) {
5932 Perl_croak(aTHX_ "Not a subroutine reference");
5937 gv = gv_fetchpv(SvPV(sv, n_a), lref, SVt_PVCV);
5943 if (lref && !GvCVu(gv)) {
5946 tmpsv = NEWSV(704,0);
5947 gv_efullname3(tmpsv, gv, Nullch);
5948 /* XXX this is probably not what they think they're getting.
5949 * It has the same effect as "sub name;", i.e. just a forward
5951 newSUB(start_subparse(FALSE, 0),
5952 newSVOP(OP_CONST, 0, tmpsv),
5957 Perl_croak(aTHX_ "Unable to create sub named \"%s\"", SvPV(sv,n_a));
5966 Returns true if the SV has a true value by Perl's rules.
5972 Perl_sv_true(pTHX_ register SV *sv)
5978 if ((tXpv = (XPV*)SvANY(sv)) &&
5979 (tXpv->xpv_cur > 1 ||
5980 (tXpv->xpv_cur && *tXpv->xpv_pv != '0')))
5987 return SvIVX(sv) != 0;
5990 return SvNVX(sv) != 0.0;
5992 return sv_2bool(sv);
5998 Perl_sv_iv(pTHX_ register SV *sv)
6002 return (IV)SvUVX(sv);
6009 Perl_sv_uv(pTHX_ register SV *sv)
6014 return (UV)SvIVX(sv);
6020 Perl_sv_nv(pTHX_ register SV *sv)
6028 Perl_sv_pv(pTHX_ SV *sv)
6035 return sv_2pv(sv, &n_a);
6039 Perl_sv_pvn(pTHX_ SV *sv, STRLEN *lp)
6045 return sv_2pv(sv, lp);
6049 =for apidoc sv_pvn_force
6051 Get a sensible string out of the SV somehow.
6057 Perl_sv_pvn_force(pTHX_ SV *sv, STRLEN *lp)
6061 if (SvTHINKFIRST(sv) && !SvROK(sv))
6062 sv_force_normal(sv);
6068 if (SvTYPE(sv) > SVt_PVLV && SvTYPE(sv) != SVt_PVFM) {
6069 Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
6070 PL_op_name[PL_op->op_type]);
6074 if (s != SvPVX(sv)) { /* Almost, but not quite, sv_setpvn() */
6079 (void)SvUPGRADE(sv, SVt_PV); /* Never FALSE */
6080 SvGROW(sv, len + 1);
6081 Move(s,SvPVX(sv),len,char);
6086 SvPOK_on(sv); /* validate pointer */
6088 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
6089 PTR2UV(sv),SvPVX(sv)));
6096 Perl_sv_pvbyte(pTHX_ SV *sv)
6102 Perl_sv_pvbyten(pTHX_ SV *sv, STRLEN *lp)
6104 return sv_pvn(sv,lp);
6108 Perl_sv_pvbyten_force(pTHX_ SV *sv, STRLEN *lp)
6110 return sv_pvn_force(sv,lp);
6114 Perl_sv_pvutf8(pTHX_ SV *sv)
6116 sv_utf8_upgrade(sv);
6121 Perl_sv_pvutf8n(pTHX_ SV *sv, STRLEN *lp)
6123 sv_utf8_upgrade(sv);
6124 return sv_pvn(sv,lp);
6128 =for apidoc sv_pvutf8n_force
6130 Get a sensible UTF8-encoded string out of the SV somehow. See
6137 Perl_sv_pvutf8n_force(pTHX_ SV *sv, STRLEN *lp)
6139 sv_utf8_upgrade(sv);
6140 return sv_pvn_force(sv,lp);
6144 =for apidoc sv_reftype
6146 Returns a string describing what the SV is a reference to.
6152 Perl_sv_reftype(pTHX_ SV *sv, int ob)
6154 if (ob && SvOBJECT(sv))
6155 return HvNAME(SvSTASH(sv));
6157 switch (SvTYPE(sv)) {
6171 case SVt_PVLV: return "LVALUE";
6172 case SVt_PVAV: return "ARRAY";
6173 case SVt_PVHV: return "HASH";
6174 case SVt_PVCV: return "CODE";
6175 case SVt_PVGV: return "GLOB";
6176 case SVt_PVFM: return "FORMAT";
6177 case SVt_PVIO: return "IO";
6178 default: return "UNKNOWN";
6184 =for apidoc sv_isobject
6186 Returns a boolean indicating whether the SV is an RV pointing to a blessed
6187 object. If the SV is not an RV, or if the object is not blessed, then this
6194 Perl_sv_isobject(pTHX_ SV *sv)
6211 Returns a boolean indicating whether the SV is blessed into the specified
6212 class. This does not check for subtypes; use C<sv_derived_from> to verify
6213 an inheritance relationship.
6219 Perl_sv_isa(pTHX_ SV *sv, const char *name)
6231 return strEQ(HvNAME(SvSTASH(sv)), name);
6237 Creates a new SV for the RV, C<rv>, to point to. If C<rv> is not an RV then
6238 it will be upgraded to one. If C<classname> is non-null then the new SV will
6239 be blessed in the specified package. The new SV is returned and its
6240 reference count is 1.
6246 Perl_newSVrv(pTHX_ SV *rv, const char *classname)
6252 SV_CHECK_THINKFIRST(rv);
6255 if (SvTYPE(rv) >= SVt_PVMG) {
6256 U32 refcnt = SvREFCNT(rv);
6260 SvREFCNT(rv) = refcnt;
6263 if (SvTYPE(rv) < SVt_RV)
6264 sv_upgrade(rv, SVt_RV);
6265 else if (SvTYPE(rv) > SVt_RV) {
6266 (void)SvOOK_off(rv);
6267 if (SvPVX(rv) && SvLEN(rv))
6268 Safefree(SvPVX(rv));
6278 HV* stash = gv_stashpv(classname, TRUE);
6279 (void)sv_bless(rv, stash);
6285 =for apidoc sv_setref_pv
6287 Copies a pointer into a new SV, optionally blessing the SV. The C<rv>
6288 argument will be upgraded to an RV. That RV will be modified to point to
6289 the new SV. If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
6290 into the SV. The C<classname> argument indicates the package for the
6291 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
6292 will be returned and will have a reference count of 1.
6294 Do not use with other Perl types such as HV, AV, SV, CV, because those
6295 objects will become corrupted by the pointer copy process.
6297 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
6303 Perl_sv_setref_pv(pTHX_ SV *rv, const char *classname, void *pv)
6306 sv_setsv(rv, &PL_sv_undef);
6310 sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
6315 =for apidoc sv_setref_iv
6317 Copies an integer into a new SV, optionally blessing the SV. The C<rv>
6318 argument will be upgraded to an RV. That RV will be modified to point to
6319 the new SV. The C<classname> argument indicates the package for the
6320 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
6321 will be returned and will have a reference count of 1.
6327 Perl_sv_setref_iv(pTHX_ SV *rv, const char *classname, IV iv)
6329 sv_setiv(newSVrv(rv,classname), iv);
6334 =for apidoc sv_setref_nv
6336 Copies a double into a new SV, optionally blessing the SV. The C<rv>
6337 argument will be upgraded to an RV. That RV will be modified to point to
6338 the new SV. The C<classname> argument indicates the package for the
6339 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
6340 will be returned and will have a reference count of 1.
6346 Perl_sv_setref_nv(pTHX_ SV *rv, const char *classname, NV nv)
6348 sv_setnv(newSVrv(rv,classname), nv);
6353 =for apidoc sv_setref_pvn
6355 Copies a string into a new SV, optionally blessing the SV. The length of the
6356 string must be specified with C<n>. The C<rv> argument will be upgraded to
6357 an RV. That RV will be modified to point to the new SV. The C<classname>
6358 argument indicates the package for the blessing. Set C<classname> to
6359 C<Nullch> to avoid the blessing. The new SV will be returned and will have
6360 a reference count of 1.
6362 Note that C<sv_setref_pv> copies the pointer while this copies the string.
6368 Perl_sv_setref_pvn(pTHX_ SV *rv, const char *classname, char *pv, STRLEN n)
6370 sv_setpvn(newSVrv(rv,classname), pv, n);
6375 =for apidoc sv_bless
6377 Blesses an SV into a specified package. The SV must be an RV. The package
6378 must be designated by its stash (see C<gv_stashpv()>). The reference count
6379 of the SV is unaffected.
6385 Perl_sv_bless(pTHX_ SV *sv, HV *stash)
6389 Perl_croak(aTHX_ "Can't bless non-reference value");
6391 if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
6392 if (SvREADONLY(tmpRef))
6393 Perl_croak(aTHX_ PL_no_modify);
6394 if (SvOBJECT(tmpRef)) {
6395 if (SvTYPE(tmpRef) != SVt_PVIO)
6397 SvREFCNT_dec(SvSTASH(tmpRef));
6400 SvOBJECT_on(tmpRef);
6401 if (SvTYPE(tmpRef) != SVt_PVIO)
6403 (void)SvUPGRADE(tmpRef, SVt_PVMG);
6404 SvSTASH(tmpRef) = (HV*)SvREFCNT_inc(stash);
6415 S_sv_unglob(pTHX_ SV *sv)
6419 assert(SvTYPE(sv) == SVt_PVGV);
6424 SvREFCNT_dec(GvSTASH(sv));
6425 GvSTASH(sv) = Nullhv;
6427 sv_unmagic(sv, '*');
6428 Safefree(GvNAME(sv));
6431 /* need to keep SvANY(sv) in the right arena */
6432 xpvmg = new_XPVMG();
6433 StructCopy(SvANY(sv), xpvmg, XPVMG);
6434 del_XPVGV(SvANY(sv));
6437 SvFLAGS(sv) &= ~SVTYPEMASK;
6438 SvFLAGS(sv) |= SVt_PVMG;
6442 =for apidoc sv_unref_flags
6444 Unsets the RV status of the SV, and decrements the reference count of
6445 whatever was being referenced by the RV. This can almost be thought of
6446 as a reversal of C<newSVrv>. The C<cflags> argument can contain
6447 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
6448 (otherwise the decrementing is conditional on the reference count being
6449 different from one or the reference being a readonly SV).
6456 Perl_sv_unref_flags(pTHX_ SV *sv, U32 flags)
6460 if (SvWEAKREF(sv)) {
6468 if (SvREFCNT(rv) != 1 || SvREADONLY(rv) || flags) /* SV_IMMEDIATE_UNREF */
6470 else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
6471 sv_2mortal(rv); /* Schedule for freeing later */
6475 =for apidoc sv_unref
6477 Unsets the RV status of the SV, and decrements the reference count of
6478 whatever was being referenced by the RV. This can almost be thought of
6479 as a reversal of C<newSVrv>. This is C<sv_unref_flags> with the C<flag>
6480 being zero. See C<SvROK_off>.
6486 Perl_sv_unref(pTHX_ SV *sv)
6488 sv_unref_flags(sv, 0);
6492 Perl_sv_taint(pTHX_ SV *sv)
6494 sv_magic((sv), Nullsv, 't', Nullch, 0);
6498 Perl_sv_untaint(pTHX_ SV *sv)
6500 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
6501 MAGIC *mg = mg_find(sv, 't');
6508 Perl_sv_tainted(pTHX_ SV *sv)
6510 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
6511 MAGIC *mg = mg_find(sv, 't');
6512 if (mg && ((mg->mg_len & 1) || ((mg->mg_len & 2) && mg->mg_obj == sv)))
6519 =for apidoc sv_setpviv
6521 Copies an integer into the given SV, also updating its string value.
6522 Does not handle 'set' magic. See C<sv_setpviv_mg>.
6528 Perl_sv_setpviv(pTHX_ SV *sv, IV iv)
6530 char buf[TYPE_CHARS(UV)];
6532 char *ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
6534 sv_setpvn(sv, ptr, ebuf - ptr);
6539 =for apidoc sv_setpviv_mg
6541 Like C<sv_setpviv>, but also handles 'set' magic.
6547 Perl_sv_setpviv_mg(pTHX_ SV *sv, IV iv)
6549 char buf[TYPE_CHARS(UV)];
6551 char *ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
6553 sv_setpvn(sv, ptr, ebuf - ptr);
6557 #if defined(PERL_IMPLICIT_CONTEXT)
6559 Perl_sv_setpvf_nocontext(SV *sv, const char* pat, ...)
6563 va_start(args, pat);
6564 sv_vsetpvf(sv, pat, &args);
6570 Perl_sv_setpvf_mg_nocontext(SV *sv, const char* pat, ...)
6574 va_start(args, pat);
6575 sv_vsetpvf_mg(sv, pat, &args);
6581 =for apidoc sv_setpvf
6583 Processes its arguments like C<sprintf> and sets an SV to the formatted
6584 output. Does not handle 'set' magic. See C<sv_setpvf_mg>.
6590 Perl_sv_setpvf(pTHX_ SV *sv, const char* pat, ...)
6593 va_start(args, pat);
6594 sv_vsetpvf(sv, pat, &args);
6599 Perl_sv_vsetpvf(pTHX_ SV *sv, const char* pat, va_list* args)
6601 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6605 =for apidoc sv_setpvf_mg
6607 Like C<sv_setpvf>, but also handles 'set' magic.
6613 Perl_sv_setpvf_mg(pTHX_ SV *sv, const char* pat, ...)
6616 va_start(args, pat);
6617 sv_vsetpvf_mg(sv, pat, &args);
6622 Perl_sv_vsetpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
6624 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6628 #if defined(PERL_IMPLICIT_CONTEXT)
6630 Perl_sv_catpvf_nocontext(SV *sv, const char* pat, ...)
6634 va_start(args, pat);
6635 sv_vcatpvf(sv, pat, &args);
6640 Perl_sv_catpvf_mg_nocontext(SV *sv, const char* pat, ...)
6644 va_start(args, pat);
6645 sv_vcatpvf_mg(sv, pat, &args);
6651 =for apidoc sv_catpvf
6653 Processes its arguments like C<sprintf> and appends the formatted output
6654 to an SV. Handles 'get' magic, but not 'set' magic. C<SvSETMAGIC()> must
6655 typically be called after calling this function to handle 'set' magic.
6661 Perl_sv_catpvf(pTHX_ SV *sv, const char* pat, ...)
6664 va_start(args, pat);
6665 sv_vcatpvf(sv, pat, &args);
6670 Perl_sv_vcatpvf(pTHX_ SV *sv, const char* pat, va_list* args)
6672 sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6676 =for apidoc sv_catpvf_mg
6678 Like C<sv_catpvf>, but also handles 'set' magic.
6684 Perl_sv_catpvf_mg(pTHX_ SV *sv, const char* pat, ...)
6687 va_start(args, pat);
6688 sv_vcatpvf_mg(sv, pat, &args);
6693 Perl_sv_vcatpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
6695 sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6700 =for apidoc sv_vsetpvfn
6702 Works like C<vcatpvfn> but copies the text into the SV instead of
6709 Perl_sv_vsetpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
6711 sv_setpvn(sv, "", 0);
6712 sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, maybe_tainted);
6716 S_expect_number(pTHX_ char** pattern)
6719 switch (**pattern) {
6720 case '1': case '2': case '3':
6721 case '4': case '5': case '6':
6722 case '7': case '8': case '9':
6723 while (isDIGIT(**pattern))
6724 var = var * 10 + (*(*pattern)++ - '0');
6728 #define EXPECT_NUMBER(pattern, var) (var = S_expect_number(aTHX_ &pattern))
6731 =for apidoc sv_vcatpvfn
6733 Processes its arguments like C<vsprintf> and appends the formatted output
6734 to an SV. Uses an array of SVs if the C style variable argument list is
6735 missing (NULL). When running with taint checks enabled, indicates via
6736 C<maybe_tainted> if results are untrustworthy (often due to the use of
6743 Perl_sv_vcatpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
6750 static char nullstr[] = "(null)";
6753 /* no matter what, this is a string now */
6754 (void)SvPV_force(sv, origlen);
6756 /* special-case "", "%s", and "%_" */
6759 if (patlen == 2 && pat[0] == '%') {
6763 char *s = va_arg(*args, char*);
6764 sv_catpv(sv, s ? s : nullstr);
6766 else if (svix < svmax) {
6767 sv_catsv(sv, *svargs);
6768 if (DO_UTF8(*svargs))
6774 argsv = va_arg(*args, SV*);
6775 sv_catsv(sv, argsv);
6780 /* See comment on '_' below */
6785 patend = (char*)pat + patlen;
6786 for (p = (char*)pat; p < patend; p = q) {
6789 bool vectorize = FALSE;
6790 bool vectorarg = FALSE;
6791 bool vec_utf = FALSE;
6797 bool has_precis = FALSE;
6799 bool is_utf = FALSE;
6802 U8 utf8buf[UTF8_MAXLEN+1];
6803 STRLEN esignlen = 0;
6805 char *eptr = Nullch;
6807 /* Times 4: a decimal digit takes more than 3 binary digits.
6808 * NV_DIG: mantissa takes than many decimal digits.
6809 * Plus 32: Playing safe. */
6810 char ebuf[IV_DIG * 4 + NV_DIG + 32];
6811 /* large enough for "%#.#f" --chip */
6812 /* what about long double NVs? --jhi */
6815 U8 *vecstr = Null(U8*);
6827 STRLEN dotstrlen = 1;
6828 I32 efix = 0; /* explicit format parameter index */
6829 I32 ewix = 0; /* explicit width index */
6830 I32 epix = 0; /* explicit precision index */
6831 I32 evix = 0; /* explicit vector index */
6832 bool asterisk = FALSE;
6834 /* echo everything up to the next format specification */
6835 for (q = p; q < patend && *q != '%'; ++q) ;
6837 sv_catpvn(sv, p, q - p);
6844 We allow format specification elements in this order:
6845 \d+\$ explicit format parameter index
6847 \*?(\d+\$)?v vector with optional (optionally specified) arg
6848 \d+|\*(\d+\$)? width using optional (optionally specified) arg
6849 \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
6851 [%bcdefginopsux_DFOUX] format (mandatory)
6853 if (EXPECT_NUMBER(q, width)) {
6894 if (EXPECT_NUMBER(q, ewix))
6903 if (vectorarg = asterisk) {
6913 EXPECT_NUMBER(q, width);
6918 vecsv = va_arg(*args, SV*);
6920 vecsv = (evix ? evix <= svmax : svix < svmax) ?
6921 svargs[ewix ? ewix-1 : svix++] : &PL_sv_undef;
6922 dotstr = SvPVx(vecsv, dotstrlen);
6927 vecsv = va_arg(*args, SV*);
6928 vecstr = (U8*)SvPVx(vecsv,veclen);
6929 vec_utf = DO_UTF8(vecsv);
6931 else if (efix ? efix <= svmax : svix < svmax) {
6932 vecsv = svargs[efix ? efix-1 : svix++];
6933 vecstr = (U8*)SvPVx(vecsv,veclen);
6934 vec_utf = DO_UTF8(vecsv);
6944 i = va_arg(*args, int);
6946 i = (ewix ? ewix <= svmax : svix < svmax) ?
6947 SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
6949 width = (i < 0) ? -i : i;
6959 if (EXPECT_NUMBER(q, epix) && *q++ != '$')
6962 i = va_arg(*args, int);
6964 i = (ewix ? ewix <= svmax : svix < svmax)
6965 ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
6966 precis = (i < 0) ? 0 : i;
6971 precis = precis * 10 + (*q++ - '0');
6979 #if defined(HAS_QUAD) || (defined(HAS_LONG_DOUBLE) && defined(USE_LONG_DOUBLE))
6990 #if defined(HAS_QUAD) || (defined(HAS_LONG_DOUBLE) && defined(USE_LONG_DOUBLE))
6991 if (*(q + 1) == 'l') { /* lld, llf */
7014 argsv = (efix ? efix <= svmax : svix < svmax) ?
7015 svargs[efix ? efix-1 : svix++] : &PL_sv_undef;
7022 uv = args ? va_arg(*args, int) : SvIVx(argsv);
7023 if ((uv > 255 || (uv > 127 && SvUTF8(sv))) && !IN_BYTE) {
7024 eptr = (char*)utf8buf;
7025 elen = uv_to_utf8((U8*)eptr, uv) - utf8buf;
7037 eptr = va_arg(*args, char*);
7039 #ifdef MACOS_TRADITIONAL
7040 /* On MacOS, %#s format is used for Pascal strings */
7045 elen = strlen(eptr);
7048 elen = sizeof nullstr - 1;
7052 eptr = SvPVx(argsv, elen);
7053 if (DO_UTF8(argsv)) {
7054 if (has_precis && precis < elen) {
7056 sv_pos_u2b(argsv, &p, 0); /* sticks at end */
7059 if (width) { /* fudge width (can't fudge elen) */
7060 width += elen - sv_len_utf8(argsv);
7069 * The "%_" hack might have to be changed someday,
7070 * if ISO or ANSI decide to use '_' for something.
7071 * So we keep it hidden from users' code.
7075 argsv = va_arg(*args, SV*);
7076 eptr = SvPVx(argsv, elen);
7082 if (has_precis && elen > precis)
7091 uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
7109 iv = (IV)utf8_to_uv(vecstr, veclen, &ulen, 0);
7119 case 'h': iv = (short)va_arg(*args, int); break;
7120 default: iv = va_arg(*args, int); break;
7121 case 'l': iv = va_arg(*args, long); break;
7122 case 'V': iv = va_arg(*args, IV); break;
7124 case 'q': iv = va_arg(*args, Quad_t); break;
7131 case 'h': iv = (short)iv; break;
7133 case 'l': iv = (long)iv; break;
7136 case 'q': iv = (Quad_t)iv; break;
7143 esignbuf[esignlen++] = plus;
7147 esignbuf[esignlen++] = '-';
7189 uv = utf8_to_uv(vecstr, veclen, &ulen, 0);
7199 case 'h': uv = (unsigned short)va_arg(*args, unsigned); break;
7200 default: uv = va_arg(*args, unsigned); break;
7201 case 'l': uv = va_arg(*args, unsigned long); break;
7202 case 'V': uv = va_arg(*args, UV); break;
7204 case 'q': uv = va_arg(*args, Quad_t); break;
7211 case 'h': uv = (unsigned short)uv; break;
7213 case 'l': uv = (unsigned long)uv; break;
7216 case 'q': uv = (Quad_t)uv; break;
7222 eptr = ebuf + sizeof ebuf;
7228 p = (char*)((c == 'X')
7229 ? "0123456789ABCDEF" : "0123456789abcdef");
7235 esignbuf[esignlen++] = '0';
7236 esignbuf[esignlen++] = c; /* 'x' or 'X' */
7242 *--eptr = '0' + dig;
7244 if (alt && *eptr != '0')
7250 *--eptr = '0' + dig;
7253 esignbuf[esignlen++] = '0';
7254 esignbuf[esignlen++] = 'b';
7257 default: /* it had better be ten or less */
7258 #if defined(PERL_Y2KWARN)
7259 if (ckWARN(WARN_Y2K)) {
7261 char *s = SvPV(sv,n);
7262 if (n >= 2 && s[n-2] == '1' && s[n-1] == '9'
7263 && (n == 2 || !isDIGIT(s[n-3])))
7265 Perl_warner(aTHX_ WARN_Y2K,
7266 "Possible Y2K bug: %%%c %s",
7267 c, "format string following '19'");
7273 *--eptr = '0' + dig;
7274 } while (uv /= base);
7277 elen = (ebuf + sizeof ebuf) - eptr;
7280 zeros = precis - elen;
7281 else if (precis == 0 && elen == 1 && *eptr == '0')
7286 /* FLOATING POINT */
7289 c = 'f'; /* maybe %F isn't supported here */
7295 /* This is evil, but floating point is even more evil */
7298 nv = args ? va_arg(*args, NV) : SvNVx(argsv);
7301 if (c != 'e' && c != 'E') {
7303 (void)Perl_frexp(nv, &i);
7304 if (i == PERL_INT_MIN)
7305 Perl_die(aTHX_ "panic: frexp");
7307 need = BIT_DIGITS(i);
7309 need += has_precis ? precis : 6; /* known default */
7313 need += 20; /* fudge factor */
7314 if (PL_efloatsize < need) {
7315 Safefree(PL_efloatbuf);
7316 PL_efloatsize = need + 20; /* more fudge */
7317 New(906, PL_efloatbuf, PL_efloatsize, char);
7318 PL_efloatbuf[0] = '\0';
7321 eptr = ebuf + sizeof ebuf;
7324 #if defined(USE_LONG_DOUBLE) && defined(PERL_PRIfldbl)
7326 /* Copy the one or more characters in a long double
7327 * format before the 'base' ([efgEFG]) character to
7328 * the format string. */
7329 static char const prifldbl[] = PERL_PRIfldbl;
7330 char const *p = prifldbl + sizeof(prifldbl) - 3;
7331 while (p >= prifldbl) { *--eptr = *p--; }
7336 do { *--eptr = '0' + (base % 10); } while (base /= 10);
7341 do { *--eptr = '0' + (base % 10); } while (base /= 10);
7353 /* No taint. Otherwise we are in the strange situation
7354 * where printf() taints but print($float) doesn't.
7356 (void)sprintf(PL_efloatbuf, eptr, nv);
7358 eptr = PL_efloatbuf;
7359 elen = strlen(PL_efloatbuf);
7366 i = SvCUR(sv) - origlen;
7369 case 'h': *(va_arg(*args, short*)) = i; break;
7370 default: *(va_arg(*args, int*)) = i; break;
7371 case 'l': *(va_arg(*args, long*)) = i; break;
7372 case 'V': *(va_arg(*args, IV*)) = i; break;
7374 case 'q': *(va_arg(*args, Quad_t*)) = i; break;
7379 sv_setuv_mg(argsv, (UV)i);
7380 continue; /* not "break" */
7387 if (!args && ckWARN(WARN_PRINTF) &&
7388 (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)) {
7389 SV *msg = sv_newmortal();
7390 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %s: ",
7391 (PL_op->op_type == OP_PRTF) ? "printf" : "sprintf");
7394 Perl_sv_catpvf(aTHX_ msg,
7395 "\"%%%c\"", c & 0xFF);
7397 Perl_sv_catpvf(aTHX_ msg,
7398 "\"%%\\%03"UVof"\"",
7401 sv_catpv(msg, "end of string");
7402 Perl_warner(aTHX_ WARN_PRINTF, "%"SVf, msg); /* yes, this is reentrant */
7405 /* output mangled stuff ... */
7411 /* ... right here, because formatting flags should not apply */
7412 SvGROW(sv, SvCUR(sv) + elen + 1);
7414 Copy(eptr, p, elen, char);
7417 SvCUR(sv) = p - SvPVX(sv);
7418 continue; /* not "break" */
7421 have = esignlen + zeros + elen;
7422 need = (have > width ? have : width);
7425 SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
7427 if (esignlen && fill == '0') {
7428 for (i = 0; i < esignlen; i++)
7432 memset(p, fill, gap);
7435 if (esignlen && fill != '0') {
7436 for (i = 0; i < esignlen; i++)
7440 for (i = zeros; i; i--)
7444 Copy(eptr, p, elen, char);
7448 memset(p, ' ', gap);
7453 Copy(dotstr, p, dotstrlen, char);
7457 vectorize = FALSE; /* done iterating over vecstr */
7462 SvCUR(sv) = p - SvPVX(sv);
7470 #if defined(USE_ITHREADS)
7472 #if defined(USE_THREADS)
7473 # include "error: USE_THREADS and USE_ITHREADS are incompatible"
7476 #ifndef GpREFCNT_inc
7477 # define GpREFCNT_inc(gp) ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
7481 #define sv_dup_inc(s) SvREFCNT_inc(sv_dup(s))
7482 #define av_dup(s) (AV*)sv_dup((SV*)s)
7483 #define av_dup_inc(s) (AV*)SvREFCNT_inc(sv_dup((SV*)s))
7484 #define hv_dup(s) (HV*)sv_dup((SV*)s)
7485 #define hv_dup_inc(s) (HV*)SvREFCNT_inc(sv_dup((SV*)s))
7486 #define cv_dup(s) (CV*)sv_dup((SV*)s)
7487 #define cv_dup_inc(s) (CV*)SvREFCNT_inc(sv_dup((SV*)s))
7488 #define io_dup(s) (IO*)sv_dup((SV*)s)
7489 #define io_dup_inc(s) (IO*)SvREFCNT_inc(sv_dup((SV*)s))
7490 #define gv_dup(s) (GV*)sv_dup((SV*)s)
7491 #define gv_dup_inc(s) (GV*)SvREFCNT_inc(sv_dup((SV*)s))
7492 #define SAVEPV(p) (p ? savepv(p) : Nullch)
7493 #define SAVEPVN(p,n) (p ? savepvn(p,n) : Nullch)
7496 Perl_re_dup(pTHX_ REGEXP *r)
7498 /* XXX fix when pmop->op_pmregexp becomes shared */
7499 return ReREFCNT_inc(r);
7503 Perl_fp_dup(pTHX_ PerlIO *fp, char type)
7507 return (PerlIO*)NULL;
7509 /* look for it in the table first */
7510 ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
7514 /* create anew and remember what it is */
7515 ret = PerlIO_fdupopen(aTHX_ fp);
7516 ptr_table_store(PL_ptr_table, fp, ret);
7521 Perl_dirp_dup(pTHX_ DIR *dp)
7530 Perl_gp_dup(pTHX_ GP *gp)
7535 /* look for it in the table first */
7536 ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
7540 /* create anew and remember what it is */
7541 Newz(0, ret, 1, GP);
7542 ptr_table_store(PL_ptr_table, gp, ret);
7545 ret->gp_refcnt = 0; /* must be before any other dups! */
7546 ret->gp_sv = sv_dup_inc(gp->gp_sv);
7547 ret->gp_io = io_dup_inc(gp->gp_io);
7548 ret->gp_form = cv_dup_inc(gp->gp_form);
7549 ret->gp_av = av_dup_inc(gp->gp_av);
7550 ret->gp_hv = hv_dup_inc(gp->gp_hv);
7551 ret->gp_egv = gv_dup(gp->gp_egv); /* GvEGV is not refcounted */
7552 ret->gp_cv = cv_dup_inc(gp->gp_cv);
7553 ret->gp_cvgen = gp->gp_cvgen;
7554 ret->gp_flags = gp->gp_flags;
7555 ret->gp_line = gp->gp_line;
7556 ret->gp_file = gp->gp_file; /* points to COP.cop_file */
7561 Perl_mg_dup(pTHX_ MAGIC *mg)
7563 MAGIC *mgret = (MAGIC*)NULL;
7566 return (MAGIC*)NULL;
7567 /* look for it in the table first */
7568 mgret = (MAGIC*)ptr_table_fetch(PL_ptr_table, mg);
7572 for (; mg; mg = mg->mg_moremagic) {
7574 Newz(0, nmg, 1, MAGIC);
7578 mgprev->mg_moremagic = nmg;
7579 nmg->mg_virtual = mg->mg_virtual; /* XXX copy dynamic vtable? */
7580 nmg->mg_private = mg->mg_private;
7581 nmg->mg_type = mg->mg_type;
7582 nmg->mg_flags = mg->mg_flags;
7583 if (mg->mg_type == 'r') {
7584 nmg->mg_obj = (SV*)re_dup((REGEXP*)mg->mg_obj);
7587 nmg->mg_obj = (mg->mg_flags & MGf_REFCOUNTED)
7588 ? sv_dup_inc(mg->mg_obj)
7589 : sv_dup(mg->mg_obj);
7591 nmg->mg_len = mg->mg_len;
7592 nmg->mg_ptr = mg->mg_ptr; /* XXX random ptr? */
7593 if (mg->mg_ptr && mg->mg_type != 'g') {
7594 if (mg->mg_len >= 0) {
7595 nmg->mg_ptr = SAVEPVN(mg->mg_ptr, mg->mg_len);
7596 if (mg->mg_type == 'c' && AMT_AMAGIC((AMT*)mg->mg_ptr)) {
7597 AMT *amtp = (AMT*)mg->mg_ptr;
7598 AMT *namtp = (AMT*)nmg->mg_ptr;
7600 for (i = 1; i < NofAMmeth; i++) {
7601 namtp->table[i] = cv_dup_inc(amtp->table[i]);
7605 else if (mg->mg_len == HEf_SVKEY)
7606 nmg->mg_ptr = (char*)sv_dup_inc((SV*)mg->mg_ptr);
7614 Perl_ptr_table_new(pTHX)
7617 Newz(0, tbl, 1, PTR_TBL_t);
7620 Newz(0, tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
7625 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *tbl, void *sv)
7627 PTR_TBL_ENT_t *tblent;
7628 UV hash = PTR2UV(sv);
7630 tblent = tbl->tbl_ary[hash & tbl->tbl_max];
7631 for (; tblent; tblent = tblent->next) {
7632 if (tblent->oldval == sv)
7633 return tblent->newval;
7639 Perl_ptr_table_store(pTHX_ PTR_TBL_t *tbl, void *oldv, void *newv)
7641 PTR_TBL_ENT_t *tblent, **otblent;
7642 /* XXX this may be pessimal on platforms where pointers aren't good
7643 * hash values e.g. if they grow faster in the most significant
7645 UV hash = PTR2UV(oldv);
7649 otblent = &tbl->tbl_ary[hash & tbl->tbl_max];
7650 for (tblent = *otblent; tblent; i=0, tblent = tblent->next) {
7651 if (tblent->oldval == oldv) {
7652 tblent->newval = newv;
7657 Newz(0, tblent, 1, PTR_TBL_ENT_t);
7658 tblent->oldval = oldv;
7659 tblent->newval = newv;
7660 tblent->next = *otblent;
7663 if (i && tbl->tbl_items > tbl->tbl_max)
7664 ptr_table_split(tbl);
7668 Perl_ptr_table_split(pTHX_ PTR_TBL_t *tbl)
7670 PTR_TBL_ENT_t **ary = tbl->tbl_ary;
7671 UV oldsize = tbl->tbl_max + 1;
7672 UV newsize = oldsize * 2;
7675 Renew(ary, newsize, PTR_TBL_ENT_t*);
7676 Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
7677 tbl->tbl_max = --newsize;
7679 for (i=0; i < oldsize; i++, ary++) {
7680 PTR_TBL_ENT_t **curentp, **entp, *ent;
7683 curentp = ary + oldsize;
7684 for (entp = ary, ent = *ary; ent; ent = *entp) {
7685 if ((newsize & PTR2UV(ent->oldval)) != i) {
7687 ent->next = *curentp;
7702 Perl_sv_dup(pTHX_ SV *sstr)
7706 if (!sstr || SvTYPE(sstr) == SVTYPEMASK)
7708 /* look for it in the table first */
7709 dstr = (SV*)ptr_table_fetch(PL_ptr_table, sstr);
7713 /* create anew and remember what it is */
7715 ptr_table_store(PL_ptr_table, sstr, dstr);
7718 SvFLAGS(dstr) = SvFLAGS(sstr);
7719 SvFLAGS(dstr) &= ~SVf_OOK; /* don't propagate OOK hack */
7720 SvREFCNT(dstr) = 0; /* must be before any other dups! */
7723 if (SvANY(sstr) && PL_watch_pvx && SvPVX(sstr) == PL_watch_pvx)
7724 PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
7725 PL_watch_pvx, SvPVX(sstr));
7728 switch (SvTYPE(sstr)) {
7733 SvANY(dstr) = new_XIV();
7734 SvIVX(dstr) = SvIVX(sstr);
7737 SvANY(dstr) = new_XNV();
7738 SvNVX(dstr) = SvNVX(sstr);
7741 SvANY(dstr) = new_XRV();
7742 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7745 SvANY(dstr) = new_XPV();
7746 SvCUR(dstr) = SvCUR(sstr);
7747 SvLEN(dstr) = SvLEN(sstr);
7749 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7750 else if (SvPVX(sstr) && SvLEN(sstr))
7751 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7753 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7756 SvANY(dstr) = new_XPVIV();
7757 SvCUR(dstr) = SvCUR(sstr);
7758 SvLEN(dstr) = SvLEN(sstr);
7759 SvIVX(dstr) = SvIVX(sstr);
7761 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7762 else if (SvPVX(sstr) && SvLEN(sstr))
7763 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7765 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7768 SvANY(dstr) = new_XPVNV();
7769 SvCUR(dstr) = SvCUR(sstr);
7770 SvLEN(dstr) = SvLEN(sstr);
7771 SvIVX(dstr) = SvIVX(sstr);
7772 SvNVX(dstr) = SvNVX(sstr);
7774 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7775 else if (SvPVX(sstr) && SvLEN(sstr))
7776 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7778 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7781 SvANY(dstr) = new_XPVMG();
7782 SvCUR(dstr) = SvCUR(sstr);
7783 SvLEN(dstr) = SvLEN(sstr);
7784 SvIVX(dstr) = SvIVX(sstr);
7785 SvNVX(dstr) = SvNVX(sstr);
7786 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7787 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7789 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7790 else if (SvPVX(sstr) && SvLEN(sstr))
7791 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7793 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7796 SvANY(dstr) = new_XPVBM();
7797 SvCUR(dstr) = SvCUR(sstr);
7798 SvLEN(dstr) = SvLEN(sstr);
7799 SvIVX(dstr) = SvIVX(sstr);
7800 SvNVX(dstr) = SvNVX(sstr);
7801 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7802 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7804 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7805 else if (SvPVX(sstr) && SvLEN(sstr))
7806 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7808 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7809 BmRARE(dstr) = BmRARE(sstr);
7810 BmUSEFUL(dstr) = BmUSEFUL(sstr);
7811 BmPREVIOUS(dstr)= BmPREVIOUS(sstr);
7814 SvANY(dstr) = new_XPVLV();
7815 SvCUR(dstr) = SvCUR(sstr);
7816 SvLEN(dstr) = SvLEN(sstr);
7817 SvIVX(dstr) = SvIVX(sstr);
7818 SvNVX(dstr) = SvNVX(sstr);
7819 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7820 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7822 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7823 else if (SvPVX(sstr) && SvLEN(sstr))
7824 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7826 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7827 LvTARGOFF(dstr) = LvTARGOFF(sstr); /* XXX sometimes holds PMOP* when DEBUGGING */
7828 LvTARGLEN(dstr) = LvTARGLEN(sstr);
7829 LvTARG(dstr) = sv_dup_inc(LvTARG(sstr));
7830 LvTYPE(dstr) = LvTYPE(sstr);
7833 SvANY(dstr) = new_XPVGV();
7834 SvCUR(dstr) = SvCUR(sstr);
7835 SvLEN(dstr) = SvLEN(sstr);
7836 SvIVX(dstr) = SvIVX(sstr);
7837 SvNVX(dstr) = SvNVX(sstr);
7838 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7839 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7841 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7842 else if (SvPVX(sstr) && SvLEN(sstr))
7843 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7845 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7846 GvNAMELEN(dstr) = GvNAMELEN(sstr);
7847 GvNAME(dstr) = SAVEPVN(GvNAME(sstr), GvNAMELEN(sstr));
7848 GvSTASH(dstr) = hv_dup_inc(GvSTASH(sstr));
7849 GvFLAGS(dstr) = GvFLAGS(sstr);
7850 GvGP(dstr) = gp_dup(GvGP(sstr));
7851 (void)GpREFCNT_inc(GvGP(dstr));
7854 SvANY(dstr) = new_XPVIO();
7855 SvCUR(dstr) = SvCUR(sstr);
7856 SvLEN(dstr) = SvLEN(sstr);
7857 SvIVX(dstr) = SvIVX(sstr);
7858 SvNVX(dstr) = SvNVX(sstr);
7859 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7860 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7862 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7863 else if (SvPVX(sstr) && SvLEN(sstr))
7864 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7866 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7867 IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(sstr));
7868 if (IoOFP(sstr) == IoIFP(sstr))
7869 IoOFP(dstr) = IoIFP(dstr);
7871 IoOFP(dstr) = fp_dup(IoOFP(sstr), IoTYPE(sstr));
7872 /* PL_rsfp_filters entries have fake IoDIRP() */
7873 if (IoDIRP(sstr) && !(IoFLAGS(sstr) & IOf_FAKE_DIRP))
7874 IoDIRP(dstr) = dirp_dup(IoDIRP(sstr));
7876 IoDIRP(dstr) = IoDIRP(sstr);
7877 IoLINES(dstr) = IoLINES(sstr);
7878 IoPAGE(dstr) = IoPAGE(sstr);
7879 IoPAGE_LEN(dstr) = IoPAGE_LEN(sstr);
7880 IoLINES_LEFT(dstr) = IoLINES_LEFT(sstr);
7881 IoTOP_NAME(dstr) = SAVEPV(IoTOP_NAME(sstr));
7882 IoTOP_GV(dstr) = gv_dup(IoTOP_GV(sstr));
7883 IoFMT_NAME(dstr) = SAVEPV(IoFMT_NAME(sstr));
7884 IoFMT_GV(dstr) = gv_dup(IoFMT_GV(sstr));
7885 IoBOTTOM_NAME(dstr) = SAVEPV(IoBOTTOM_NAME(sstr));
7886 IoBOTTOM_GV(dstr) = gv_dup(IoBOTTOM_GV(sstr));
7887 IoSUBPROCESS(dstr) = IoSUBPROCESS(sstr);
7888 IoTYPE(dstr) = IoTYPE(sstr);
7889 IoFLAGS(dstr) = IoFLAGS(sstr);
7892 SvANY(dstr) = new_XPVAV();
7893 SvCUR(dstr) = SvCUR(sstr);
7894 SvLEN(dstr) = SvLEN(sstr);
7895 SvIVX(dstr) = SvIVX(sstr);
7896 SvNVX(dstr) = SvNVX(sstr);
7897 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7898 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7899 AvARYLEN((AV*)dstr) = sv_dup_inc(AvARYLEN((AV*)sstr));
7900 AvFLAGS((AV*)dstr) = AvFLAGS((AV*)sstr);
7901 if (AvARRAY((AV*)sstr)) {
7902 SV **dst_ary, **src_ary;
7903 SSize_t items = AvFILLp((AV*)sstr) + 1;
7905 src_ary = AvARRAY((AV*)sstr);
7906 Newz(0, dst_ary, AvMAX((AV*)sstr)+1, SV*);
7907 ptr_table_store(PL_ptr_table, src_ary, dst_ary);
7908 SvPVX(dstr) = (char*)dst_ary;
7909 AvALLOC((AV*)dstr) = dst_ary;
7910 if (AvREAL((AV*)sstr)) {
7912 *dst_ary++ = sv_dup_inc(*src_ary++);
7916 *dst_ary++ = sv_dup(*src_ary++);
7918 items = AvMAX((AV*)sstr) - AvFILLp((AV*)sstr);
7919 while (items-- > 0) {
7920 *dst_ary++ = &PL_sv_undef;
7924 SvPVX(dstr) = Nullch;
7925 AvALLOC((AV*)dstr) = (SV**)NULL;
7929 SvANY(dstr) = new_XPVHV();
7930 SvCUR(dstr) = SvCUR(sstr);
7931 SvLEN(dstr) = SvLEN(sstr);
7932 SvIVX(dstr) = SvIVX(sstr);
7933 SvNVX(dstr) = SvNVX(sstr);
7934 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7935 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7936 HvRITER((HV*)dstr) = HvRITER((HV*)sstr);
7937 if (HvARRAY((HV*)sstr)) {
7939 XPVHV *dxhv = (XPVHV*)SvANY(dstr);
7940 XPVHV *sxhv = (XPVHV*)SvANY(sstr);
7941 Newz(0, dxhv->xhv_array,
7942 PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1), char);
7943 while (i <= sxhv->xhv_max) {
7944 ((HE**)dxhv->xhv_array)[i] = he_dup(((HE**)sxhv->xhv_array)[i],
7945 !!HvSHAREKEYS(sstr));
7948 dxhv->xhv_eiter = he_dup(sxhv->xhv_eiter, !!HvSHAREKEYS(sstr));
7951 SvPVX(dstr) = Nullch;
7952 HvEITER((HV*)dstr) = (HE*)NULL;
7954 HvPMROOT((HV*)dstr) = HvPMROOT((HV*)sstr); /* XXX */
7955 HvNAME((HV*)dstr) = SAVEPV(HvNAME((HV*)sstr));
7958 SvANY(dstr) = new_XPVFM();
7959 FmLINES(dstr) = FmLINES(sstr);
7963 SvANY(dstr) = new_XPVCV();
7965 SvCUR(dstr) = SvCUR(sstr);
7966 SvLEN(dstr) = SvLEN(sstr);
7967 SvIVX(dstr) = SvIVX(sstr);
7968 SvNVX(dstr) = SvNVX(sstr);
7969 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7970 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7971 if (SvPVX(sstr) && SvLEN(sstr))
7972 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7974 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7975 CvSTASH(dstr) = hv_dup(CvSTASH(sstr));/* NOTE: not refcounted */
7976 CvSTART(dstr) = CvSTART(sstr);
7977 CvROOT(dstr) = OpREFCNT_inc(CvROOT(sstr));
7978 CvXSUB(dstr) = CvXSUB(sstr);
7979 CvXSUBANY(dstr) = CvXSUBANY(sstr);
7980 CvGV(dstr) = gv_dup_inc(CvGV(sstr));
7981 CvDEPTH(dstr) = CvDEPTH(sstr);
7982 if (CvPADLIST(sstr) && !AvREAL(CvPADLIST(sstr))) {
7983 /* XXX padlists are real, but pretend to be not */
7984 AvREAL_on(CvPADLIST(sstr));
7985 CvPADLIST(dstr) = av_dup_inc(CvPADLIST(sstr));
7986 AvREAL_off(CvPADLIST(sstr));
7987 AvREAL_off(CvPADLIST(dstr));
7990 CvPADLIST(dstr) = av_dup_inc(CvPADLIST(sstr));
7991 CvOUTSIDE(dstr) = cv_dup_inc(CvOUTSIDE(sstr));
7992 CvFLAGS(dstr) = CvFLAGS(sstr);
7995 Perl_croak(aTHX_ "Bizarre SvTYPE [%d]", SvTYPE(sstr));
7999 if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
8006 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max)
8011 return (PERL_CONTEXT*)NULL;
8013 /* look for it in the table first */
8014 ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
8018 /* create anew and remember what it is */
8019 Newz(56, ncxs, max + 1, PERL_CONTEXT);
8020 ptr_table_store(PL_ptr_table, cxs, ncxs);
8023 PERL_CONTEXT *cx = &cxs[ix];
8024 PERL_CONTEXT *ncx = &ncxs[ix];
8025 ncx->cx_type = cx->cx_type;
8026 if (CxTYPE(cx) == CXt_SUBST) {
8027 Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
8030 ncx->blk_oldsp = cx->blk_oldsp;
8031 ncx->blk_oldcop = cx->blk_oldcop;
8032 ncx->blk_oldretsp = cx->blk_oldretsp;
8033 ncx->blk_oldmarksp = cx->blk_oldmarksp;
8034 ncx->blk_oldscopesp = cx->blk_oldscopesp;
8035 ncx->blk_oldpm = cx->blk_oldpm;
8036 ncx->blk_gimme = cx->blk_gimme;
8037 switch (CxTYPE(cx)) {
8039 ncx->blk_sub.cv = (cx->blk_sub.olddepth == 0
8040 ? cv_dup_inc(cx->blk_sub.cv)
8041 : cv_dup(cx->blk_sub.cv));
8042 ncx->blk_sub.argarray = (cx->blk_sub.hasargs
8043 ? av_dup_inc(cx->blk_sub.argarray)
8045 ncx->blk_sub.savearray = av_dup(cx->blk_sub.savearray);
8046 ncx->blk_sub.olddepth = cx->blk_sub.olddepth;
8047 ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
8048 ncx->blk_sub.lval = cx->blk_sub.lval;
8051 ncx->blk_eval.old_in_eval = cx->blk_eval.old_in_eval;
8052 ncx->blk_eval.old_op_type = cx->blk_eval.old_op_type;
8053 ncx->blk_eval.old_namesv = sv_dup_inc(cx->blk_eval.old_namesv);
8054 ncx->blk_eval.old_eval_root = cx->blk_eval.old_eval_root;
8055 ncx->blk_eval.cur_text = sv_dup(cx->blk_eval.cur_text);
8058 ncx->blk_loop.label = cx->blk_loop.label;
8059 ncx->blk_loop.resetsp = cx->blk_loop.resetsp;
8060 ncx->blk_loop.redo_op = cx->blk_loop.redo_op;
8061 ncx->blk_loop.next_op = cx->blk_loop.next_op;
8062 ncx->blk_loop.last_op = cx->blk_loop.last_op;
8063 ncx->blk_loop.iterdata = (CxPADLOOP(cx)
8064 ? cx->blk_loop.iterdata
8065 : gv_dup((GV*)cx->blk_loop.iterdata));
8066 ncx->blk_loop.oldcurpad
8067 = (SV**)ptr_table_fetch(PL_ptr_table,
8068 cx->blk_loop.oldcurpad);
8069 ncx->blk_loop.itersave = sv_dup_inc(cx->blk_loop.itersave);
8070 ncx->blk_loop.iterlval = sv_dup_inc(cx->blk_loop.iterlval);
8071 ncx->blk_loop.iterary = av_dup_inc(cx->blk_loop.iterary);
8072 ncx->blk_loop.iterix = cx->blk_loop.iterix;
8073 ncx->blk_loop.itermax = cx->blk_loop.itermax;
8076 ncx->blk_sub.cv = cv_dup(cx->blk_sub.cv);
8077 ncx->blk_sub.gv = gv_dup(cx->blk_sub.gv);
8078 ncx->blk_sub.dfoutgv = gv_dup_inc(cx->blk_sub.dfoutgv);
8079 ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
8092 Perl_si_dup(pTHX_ PERL_SI *si)
8097 return (PERL_SI*)NULL;
8099 /* look for it in the table first */
8100 nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
8104 /* create anew and remember what it is */
8105 Newz(56, nsi, 1, PERL_SI);
8106 ptr_table_store(PL_ptr_table, si, nsi);
8108 nsi->si_stack = av_dup_inc(si->si_stack);
8109 nsi->si_cxix = si->si_cxix;
8110 nsi->si_cxmax = si->si_cxmax;
8111 nsi->si_cxstack = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax);
8112 nsi->si_type = si->si_type;
8113 nsi->si_prev = si_dup(si->si_prev);
8114 nsi->si_next = si_dup(si->si_next);
8115 nsi->si_markoff = si->si_markoff;
8120 #define POPINT(ss,ix) ((ss)[--(ix)].any_i32)
8121 #define TOPINT(ss,ix) ((ss)[ix].any_i32)
8122 #define POPLONG(ss,ix) ((ss)[--(ix)].any_long)
8123 #define TOPLONG(ss,ix) ((ss)[ix].any_long)
8124 #define POPIV(ss,ix) ((ss)[--(ix)].any_iv)
8125 #define TOPIV(ss,ix) ((ss)[ix].any_iv)
8126 #define POPPTR(ss,ix) ((ss)[--(ix)].any_ptr)
8127 #define TOPPTR(ss,ix) ((ss)[ix].any_ptr)
8128 #define POPDPTR(ss,ix) ((ss)[--(ix)].any_dptr)
8129 #define TOPDPTR(ss,ix) ((ss)[ix].any_dptr)
8130 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
8131 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
8134 #define pv_dup_inc(p) SAVEPV(p)
8135 #define pv_dup(p) SAVEPV(p)
8136 #define svp_dup_inc(p,pp) any_dup(p,pp)
8139 Perl_any_dup(pTHX_ void *v, PerlInterpreter *proto_perl)
8146 /* look for it in the table first */
8147 ret = ptr_table_fetch(PL_ptr_table, v);
8151 /* see if it is part of the interpreter structure */
8152 if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
8153 ret = (void*)(((char*)aTHXo) + (((char*)v) - (char*)proto_perl));
8161 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl)
8163 ANY *ss = proto_perl->Tsavestack;
8164 I32 ix = proto_perl->Tsavestack_ix;
8165 I32 max = proto_perl->Tsavestack_max;
8178 void (*dptr) (void*);
8179 void (*dxptr) (pTHXo_ void*);
8182 Newz(54, nss, max, ANY);
8188 case SAVEt_ITEM: /* normal string */
8189 sv = (SV*)POPPTR(ss,ix);
8190 TOPPTR(nss,ix) = sv_dup_inc(sv);
8191 sv = (SV*)POPPTR(ss,ix);
8192 TOPPTR(nss,ix) = sv_dup_inc(sv);
8194 case SAVEt_SV: /* scalar reference */
8195 sv = (SV*)POPPTR(ss,ix);
8196 TOPPTR(nss,ix) = sv_dup_inc(sv);
8197 gv = (GV*)POPPTR(ss,ix);
8198 TOPPTR(nss,ix) = gv_dup_inc(gv);
8200 case SAVEt_GENERIC_PVREF: /* generic char* */
8201 c = (char*)POPPTR(ss,ix);
8202 TOPPTR(nss,ix) = pv_dup(c);
8203 ptr = POPPTR(ss,ix);
8204 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8206 case SAVEt_GENERIC_SVREF: /* generic sv */
8207 case SAVEt_SVREF: /* scalar reference */
8208 sv = (SV*)POPPTR(ss,ix);
8209 TOPPTR(nss,ix) = sv_dup_inc(sv);
8210 ptr = POPPTR(ss,ix);
8211 TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
8213 case SAVEt_AV: /* array reference */
8214 av = (AV*)POPPTR(ss,ix);
8215 TOPPTR(nss,ix) = av_dup_inc(av);
8216 gv = (GV*)POPPTR(ss,ix);
8217 TOPPTR(nss,ix) = gv_dup(gv);
8219 case SAVEt_HV: /* hash reference */
8220 hv = (HV*)POPPTR(ss,ix);
8221 TOPPTR(nss,ix) = hv_dup_inc(hv);
8222 gv = (GV*)POPPTR(ss,ix);
8223 TOPPTR(nss,ix) = gv_dup(gv);
8225 case SAVEt_INT: /* int reference */
8226 ptr = POPPTR(ss,ix);
8227 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8228 intval = (int)POPINT(ss,ix);
8229 TOPINT(nss,ix) = intval;
8231 case SAVEt_LONG: /* long reference */
8232 ptr = POPPTR(ss,ix);
8233 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8234 longval = (long)POPLONG(ss,ix);
8235 TOPLONG(nss,ix) = longval;
8237 case SAVEt_I32: /* I32 reference */
8238 case SAVEt_I16: /* I16 reference */
8239 case SAVEt_I8: /* I8 reference */
8240 ptr = POPPTR(ss,ix);
8241 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8245 case SAVEt_IV: /* IV reference */
8246 ptr = POPPTR(ss,ix);
8247 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8251 case SAVEt_SPTR: /* SV* reference */
8252 ptr = POPPTR(ss,ix);
8253 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8254 sv = (SV*)POPPTR(ss,ix);
8255 TOPPTR(nss,ix) = sv_dup(sv);
8257 case SAVEt_VPTR: /* random* reference */
8258 ptr = POPPTR(ss,ix);
8259 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8260 ptr = POPPTR(ss,ix);
8261 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8263 case SAVEt_PPTR: /* char* reference */
8264 ptr = POPPTR(ss,ix);
8265 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8266 c = (char*)POPPTR(ss,ix);
8267 TOPPTR(nss,ix) = pv_dup(c);
8269 case SAVEt_HPTR: /* HV* reference */
8270 ptr = POPPTR(ss,ix);
8271 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8272 hv = (HV*)POPPTR(ss,ix);
8273 TOPPTR(nss,ix) = hv_dup(hv);
8275 case SAVEt_APTR: /* AV* reference */
8276 ptr = POPPTR(ss,ix);
8277 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8278 av = (AV*)POPPTR(ss,ix);
8279 TOPPTR(nss,ix) = av_dup(av);
8282 gv = (GV*)POPPTR(ss,ix);
8283 TOPPTR(nss,ix) = gv_dup(gv);
8285 case SAVEt_GP: /* scalar reference */
8286 gp = (GP*)POPPTR(ss,ix);
8287 TOPPTR(nss,ix) = gp = gp_dup(gp);
8288 (void)GpREFCNT_inc(gp);
8289 gv = (GV*)POPPTR(ss,ix);
8290 TOPPTR(nss,ix) = gv_dup_inc(c);
8291 c = (char*)POPPTR(ss,ix);
8292 TOPPTR(nss,ix) = pv_dup(c);
8299 sv = (SV*)POPPTR(ss,ix);
8300 TOPPTR(nss,ix) = sv_dup_inc(sv);
8303 ptr = POPPTR(ss,ix);
8304 if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
8305 /* these are assumed to be refcounted properly */
8306 switch (((OP*)ptr)->op_type) {
8313 TOPPTR(nss,ix) = ptr;
8318 TOPPTR(nss,ix) = Nullop;
8323 TOPPTR(nss,ix) = Nullop;
8326 c = (char*)POPPTR(ss,ix);
8327 TOPPTR(nss,ix) = pv_dup_inc(c);
8330 longval = POPLONG(ss,ix);
8331 TOPLONG(nss,ix) = longval;
8334 hv = (HV*)POPPTR(ss,ix);
8335 TOPPTR(nss,ix) = hv_dup_inc(hv);
8336 c = (char*)POPPTR(ss,ix);
8337 TOPPTR(nss,ix) = pv_dup_inc(c);
8341 case SAVEt_DESTRUCTOR:
8342 ptr = POPPTR(ss,ix);
8343 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
8344 dptr = POPDPTR(ss,ix);
8345 TOPDPTR(nss,ix) = (void (*)(void*))any_dup((void *)dptr, proto_perl);
8347 case SAVEt_DESTRUCTOR_X:
8348 ptr = POPPTR(ss,ix);
8349 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
8350 dxptr = POPDXPTR(ss,ix);
8351 TOPDXPTR(nss,ix) = (void (*)(pTHXo_ void*))any_dup((void *)dxptr, proto_perl);
8353 case SAVEt_REGCONTEXT:
8359 case SAVEt_STACK_POS: /* Position on Perl stack */
8363 case SAVEt_AELEM: /* array element */
8364 sv = (SV*)POPPTR(ss,ix);
8365 TOPPTR(nss,ix) = sv_dup_inc(sv);
8368 av = (AV*)POPPTR(ss,ix);
8369 TOPPTR(nss,ix) = av_dup_inc(av);
8371 case SAVEt_HELEM: /* hash element */
8372 sv = (SV*)POPPTR(ss,ix);
8373 TOPPTR(nss,ix) = sv_dup_inc(sv);
8374 sv = (SV*)POPPTR(ss,ix);
8375 TOPPTR(nss,ix) = sv_dup_inc(sv);
8376 hv = (HV*)POPPTR(ss,ix);
8377 TOPPTR(nss,ix) = hv_dup_inc(hv);
8380 ptr = POPPTR(ss,ix);
8381 TOPPTR(nss,ix) = ptr;
8388 av = (AV*)POPPTR(ss,ix);
8389 TOPPTR(nss,ix) = av_dup(av);
8392 longval = (long)POPLONG(ss,ix);
8393 TOPLONG(nss,ix) = longval;
8394 ptr = POPPTR(ss,ix);
8395 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8396 sv = (SV*)POPPTR(ss,ix);
8397 TOPPTR(nss,ix) = sv_dup(sv);
8400 Perl_croak(aTHX_ "panic: ss_dup inconsistency");
8412 perl_clone(PerlInterpreter *proto_perl, UV flags)
8415 CPerlObj *pPerl = (CPerlObj*)proto_perl;
8418 #ifdef PERL_IMPLICIT_SYS
8419 return perl_clone_using(proto_perl, flags,
8421 proto_perl->IMemShared,
8422 proto_perl->IMemParse,
8432 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
8433 struct IPerlMem* ipM, struct IPerlMem* ipMS,
8434 struct IPerlMem* ipMP, struct IPerlEnv* ipE,
8435 struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
8436 struct IPerlDir* ipD, struct IPerlSock* ipS,
8437 struct IPerlProc* ipP)
8439 /* XXX many of the string copies here can be optimized if they're
8440 * constants; they need to be allocated as common memory and just
8441 * their pointers copied. */
8445 CPerlObj *pPerl = new(ipM) CPerlObj(ipM, ipMS, ipMP, ipE, ipStd, ipLIO,
8447 PERL_SET_THX(pPerl);
8448 # else /* !PERL_OBJECT */
8449 PerlInterpreter *my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
8450 PERL_SET_THX(my_perl);
8453 memset(my_perl, 0xab, sizeof(PerlInterpreter));
8459 # else /* !DEBUGGING */
8460 Zero(my_perl, 1, PerlInterpreter);
8461 # endif /* DEBUGGING */
8465 PL_MemShared = ipMS;
8473 # endif /* PERL_OBJECT */
8474 #else /* !PERL_IMPLICIT_SYS */
8476 PerlInterpreter *my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
8477 PERL_SET_THX(my_perl);
8480 memset(my_perl, 0xab, sizeof(PerlInterpreter));
8486 # else /* !DEBUGGING */
8487 Zero(my_perl, 1, PerlInterpreter);
8488 # endif /* DEBUGGING */
8489 #endif /* PERL_IMPLICIT_SYS */
8492 PL_xiv_arenaroot = NULL;
8494 PL_xnv_arenaroot = NULL;
8496 PL_xrv_arenaroot = NULL;
8498 PL_xpv_arenaroot = NULL;
8500 PL_xpviv_arenaroot = NULL;
8501 PL_xpviv_root = NULL;
8502 PL_xpvnv_arenaroot = NULL;
8503 PL_xpvnv_root = NULL;
8504 PL_xpvcv_arenaroot = NULL;
8505 PL_xpvcv_root = NULL;
8506 PL_xpvav_arenaroot = NULL;
8507 PL_xpvav_root = NULL;
8508 PL_xpvhv_arenaroot = NULL;
8509 PL_xpvhv_root = NULL;
8510 PL_xpvmg_arenaroot = NULL;
8511 PL_xpvmg_root = NULL;
8512 PL_xpvlv_arenaroot = NULL;
8513 PL_xpvlv_root = NULL;
8514 PL_xpvbm_arenaroot = NULL;
8515 PL_xpvbm_root = NULL;
8516 PL_he_arenaroot = NULL;
8518 PL_nice_chunk = NULL;
8519 PL_nice_chunk_size = 0;
8522 PL_sv_root = Nullsv;
8523 PL_sv_arenaroot = Nullsv;
8525 PL_debug = proto_perl->Idebug;
8527 /* create SV map for pointer relocation */
8528 PL_ptr_table = ptr_table_new();
8530 /* initialize these special pointers as early as possible */
8531 SvANY(&PL_sv_undef) = NULL;
8532 SvREFCNT(&PL_sv_undef) = (~(U32)0)/2;
8533 SvFLAGS(&PL_sv_undef) = SVf_READONLY|SVt_NULL;
8534 ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
8537 SvUPGRADE(&PL_sv_no, SVt_PVNV);
8539 SvANY(&PL_sv_no) = new_XPVNV();
8541 SvREFCNT(&PL_sv_no) = (~(U32)0)/2;
8542 SvFLAGS(&PL_sv_no) = SVp_NOK|SVf_NOK|SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
8543 SvPVX(&PL_sv_no) = SAVEPVN(PL_No, 0);
8544 SvCUR(&PL_sv_no) = 0;
8545 SvLEN(&PL_sv_no) = 1;
8546 SvNVX(&PL_sv_no) = 0;
8547 ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
8550 SvUPGRADE(&PL_sv_yes, SVt_PVNV);
8552 SvANY(&PL_sv_yes) = new_XPVNV();
8554 SvREFCNT(&PL_sv_yes) = (~(U32)0)/2;
8555 SvFLAGS(&PL_sv_yes) = SVp_NOK|SVf_NOK|SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
8556 SvPVX(&PL_sv_yes) = SAVEPVN(PL_Yes, 1);
8557 SvCUR(&PL_sv_yes) = 1;
8558 SvLEN(&PL_sv_yes) = 2;
8559 SvNVX(&PL_sv_yes) = 1;
8560 ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
8562 /* create shared string table */
8563 PL_strtab = newHV();
8564 HvSHAREKEYS_off(PL_strtab);
8565 hv_ksplit(PL_strtab, 512);
8566 ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
8568 PL_compiling = proto_perl->Icompiling;
8569 PL_compiling.cop_stashpv = SAVEPV(PL_compiling.cop_stashpv);
8570 PL_compiling.cop_file = SAVEPV(PL_compiling.cop_file);
8571 ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
8572 if (!specialWARN(PL_compiling.cop_warnings))
8573 PL_compiling.cop_warnings = sv_dup_inc(PL_compiling.cop_warnings);
8574 if (!specialCopIO(PL_compiling.cop_io))
8575 PL_compiling.cop_io = sv_dup_inc(PL_compiling.cop_io);
8576 PL_curcop = (COP*)any_dup(proto_perl->Tcurcop, proto_perl);
8578 /* pseudo environmental stuff */
8579 PL_origargc = proto_perl->Iorigargc;
8581 New(0, PL_origargv, i+1, char*);
8582 PL_origargv[i] = '\0';
8584 PL_origargv[i] = SAVEPV(proto_perl->Iorigargv[i]);
8586 PL_envgv = gv_dup(proto_perl->Ienvgv);
8587 PL_incgv = gv_dup(proto_perl->Iincgv);
8588 PL_hintgv = gv_dup(proto_perl->Ihintgv);
8589 PL_origfilename = SAVEPV(proto_perl->Iorigfilename);
8590 PL_diehook = sv_dup_inc(proto_perl->Idiehook);
8591 PL_warnhook = sv_dup_inc(proto_perl->Iwarnhook);
8594 PL_minus_c = proto_perl->Iminus_c;
8595 PL_patchlevel = sv_dup_inc(proto_perl->Ipatchlevel);
8596 PL_localpatches = proto_perl->Ilocalpatches;
8597 PL_splitstr = proto_perl->Isplitstr;
8598 PL_preprocess = proto_perl->Ipreprocess;
8599 PL_minus_n = proto_perl->Iminus_n;
8600 PL_minus_p = proto_perl->Iminus_p;
8601 PL_minus_l = proto_perl->Iminus_l;
8602 PL_minus_a = proto_perl->Iminus_a;
8603 PL_minus_F = proto_perl->Iminus_F;
8604 PL_doswitches = proto_perl->Idoswitches;
8605 PL_dowarn = proto_perl->Idowarn;
8606 PL_doextract = proto_perl->Idoextract;
8607 PL_sawampersand = proto_perl->Isawampersand;
8608 PL_unsafe = proto_perl->Iunsafe;
8609 PL_inplace = SAVEPV(proto_perl->Iinplace);
8610 PL_e_script = sv_dup_inc(proto_perl->Ie_script);
8611 PL_perldb = proto_perl->Iperldb;
8612 PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
8614 /* magical thingies */
8615 /* XXX time(&PL_basetime) when asked for? */
8616 PL_basetime = proto_perl->Ibasetime;
8617 PL_formfeed = sv_dup(proto_perl->Iformfeed);
8619 PL_maxsysfd = proto_perl->Imaxsysfd;
8620 PL_multiline = proto_perl->Imultiline;
8621 PL_statusvalue = proto_perl->Istatusvalue;
8623 PL_statusvalue_vms = proto_perl->Istatusvalue_vms;
8626 /* shortcuts to various I/O objects */
8627 PL_stdingv = gv_dup(proto_perl->Istdingv);
8628 PL_stderrgv = gv_dup(proto_perl->Istderrgv);
8629 PL_defgv = gv_dup(proto_perl->Idefgv);
8630 PL_argvgv = gv_dup(proto_perl->Iargvgv);
8631 PL_argvoutgv = gv_dup(proto_perl->Iargvoutgv);
8632 PL_argvout_stack = av_dup(proto_perl->Iargvout_stack);
8634 /* shortcuts to regexp stuff */
8635 PL_replgv = gv_dup(proto_perl->Ireplgv);
8637 /* shortcuts to misc objects */
8638 PL_errgv = gv_dup(proto_perl->Ierrgv);
8640 /* shortcuts to debugging objects */
8641 PL_DBgv = gv_dup(proto_perl->IDBgv);
8642 PL_DBline = gv_dup(proto_perl->IDBline);
8643 PL_DBsub = gv_dup(proto_perl->IDBsub);
8644 PL_DBsingle = sv_dup(proto_perl->IDBsingle);
8645 PL_DBtrace = sv_dup(proto_perl->IDBtrace);
8646 PL_DBsignal = sv_dup(proto_perl->IDBsignal);
8647 PL_lineary = av_dup(proto_perl->Ilineary);
8648 PL_dbargs = av_dup(proto_perl->Idbargs);
8651 PL_defstash = hv_dup_inc(proto_perl->Tdefstash);
8652 PL_curstash = hv_dup(proto_perl->Tcurstash);
8653 PL_debstash = hv_dup(proto_perl->Idebstash);
8654 PL_globalstash = hv_dup(proto_perl->Iglobalstash);
8655 PL_curstname = sv_dup_inc(proto_perl->Icurstname);
8657 PL_beginav = av_dup_inc(proto_perl->Ibeginav);
8658 PL_endav = av_dup_inc(proto_perl->Iendav);
8659 PL_checkav = av_dup_inc(proto_perl->Icheckav);
8660 PL_initav = av_dup_inc(proto_perl->Iinitav);
8662 PL_sub_generation = proto_perl->Isub_generation;
8664 /* funky return mechanisms */
8665 PL_forkprocess = proto_perl->Iforkprocess;
8667 /* subprocess state */
8668 PL_fdpid = av_dup_inc(proto_perl->Ifdpid);
8670 /* internal state */
8671 PL_tainting = proto_perl->Itainting;
8672 PL_maxo = proto_perl->Imaxo;
8673 if (proto_perl->Iop_mask)
8674 PL_op_mask = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
8676 PL_op_mask = Nullch;
8678 /* current interpreter roots */
8679 PL_main_cv = cv_dup_inc(proto_perl->Imain_cv);
8680 PL_main_root = OpREFCNT_inc(proto_perl->Imain_root);
8681 PL_main_start = proto_perl->Imain_start;
8682 PL_eval_root = proto_perl->Ieval_root;
8683 PL_eval_start = proto_perl->Ieval_start;
8685 /* runtime control stuff */
8686 PL_curcopdb = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
8687 PL_copline = proto_perl->Icopline;
8689 PL_filemode = proto_perl->Ifilemode;
8690 PL_lastfd = proto_perl->Ilastfd;
8691 PL_oldname = proto_perl->Ioldname; /* XXX not quite right */
8694 PL_gensym = proto_perl->Igensym;
8695 PL_preambled = proto_perl->Ipreambled;
8696 PL_preambleav = av_dup_inc(proto_perl->Ipreambleav);
8697 PL_laststatval = proto_perl->Ilaststatval;
8698 PL_laststype = proto_perl->Ilaststype;
8699 PL_mess_sv = Nullsv;
8701 PL_ors_sv = sv_dup_inc(proto_perl->Iors_sv);
8702 PL_ofmt = SAVEPV(proto_perl->Iofmt);
8704 /* interpreter atexit processing */
8705 PL_exitlistlen = proto_perl->Iexitlistlen;
8706 if (PL_exitlistlen) {
8707 New(0, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
8708 Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
8711 PL_exitlist = (PerlExitListEntry*)NULL;
8712 PL_modglobal = hv_dup_inc(proto_perl->Imodglobal);
8714 PL_profiledata = NULL;
8715 PL_rsfp = fp_dup(proto_perl->Irsfp, '<');
8716 /* PL_rsfp_filters entries have fake IoDIRP() */
8717 PL_rsfp_filters = av_dup_inc(proto_perl->Irsfp_filters);
8719 PL_compcv = cv_dup(proto_perl->Icompcv);
8720 PL_comppad = av_dup(proto_perl->Icomppad);
8721 PL_comppad_name = av_dup(proto_perl->Icomppad_name);
8722 PL_comppad_name_fill = proto_perl->Icomppad_name_fill;
8723 PL_comppad_name_floor = proto_perl->Icomppad_name_floor;
8724 PL_curpad = (SV**)ptr_table_fetch(PL_ptr_table,
8725 proto_perl->Tcurpad);
8727 #ifdef HAVE_INTERP_INTERN
8728 sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
8731 /* more statics moved here */
8732 PL_generation = proto_perl->Igeneration;
8733 PL_DBcv = cv_dup(proto_perl->IDBcv);
8735 PL_in_clean_objs = proto_perl->Iin_clean_objs;
8736 PL_in_clean_all = proto_perl->Iin_clean_all;
8738 PL_uid = proto_perl->Iuid;
8739 PL_euid = proto_perl->Ieuid;
8740 PL_gid = proto_perl->Igid;
8741 PL_egid = proto_perl->Iegid;
8742 PL_nomemok = proto_perl->Inomemok;
8743 PL_an = proto_perl->Ian;
8744 PL_cop_seqmax = proto_perl->Icop_seqmax;
8745 PL_op_seqmax = proto_perl->Iop_seqmax;
8746 PL_evalseq = proto_perl->Ievalseq;
8747 PL_origenviron = proto_perl->Iorigenviron; /* XXX not quite right */
8748 PL_origalen = proto_perl->Iorigalen;
8749 PL_pidstatus = newHV(); /* XXX flag for cloning? */
8750 PL_osname = SAVEPV(proto_perl->Iosname);
8751 PL_sh_path = SAVEPV(proto_perl->Ish_path);
8752 PL_sighandlerp = proto_perl->Isighandlerp;
8755 PL_runops = proto_perl->Irunops;
8757 Copy(proto_perl->Itokenbuf, PL_tokenbuf, 256, char);
8760 PL_cshlen = proto_perl->Icshlen;
8761 PL_cshname = SAVEPVN(proto_perl->Icshname, PL_cshlen);
8764 PL_lex_state = proto_perl->Ilex_state;
8765 PL_lex_defer = proto_perl->Ilex_defer;
8766 PL_lex_expect = proto_perl->Ilex_expect;
8767 PL_lex_formbrack = proto_perl->Ilex_formbrack;
8768 PL_lex_dojoin = proto_perl->Ilex_dojoin;
8769 PL_lex_starts = proto_perl->Ilex_starts;
8770 PL_lex_stuff = sv_dup_inc(proto_perl->Ilex_stuff);
8771 PL_lex_repl = sv_dup_inc(proto_perl->Ilex_repl);
8772 PL_lex_op = proto_perl->Ilex_op;
8773 PL_lex_inpat = proto_perl->Ilex_inpat;
8774 PL_lex_inwhat = proto_perl->Ilex_inwhat;
8775 PL_lex_brackets = proto_perl->Ilex_brackets;
8776 i = (PL_lex_brackets < 120 ? 120 : PL_lex_brackets);
8777 PL_lex_brackstack = SAVEPVN(proto_perl->Ilex_brackstack,i);
8778 PL_lex_casemods = proto_perl->Ilex_casemods;
8779 i = (PL_lex_casemods < 12 ? 12 : PL_lex_casemods);
8780 PL_lex_casestack = SAVEPVN(proto_perl->Ilex_casestack,i);
8782 Copy(proto_perl->Inextval, PL_nextval, 5, YYSTYPE);
8783 Copy(proto_perl->Inexttype, PL_nexttype, 5, I32);
8784 PL_nexttoke = proto_perl->Inexttoke;
8786 PL_linestr = sv_dup_inc(proto_perl->Ilinestr);
8787 i = proto_perl->Ibufptr - SvPVX(proto_perl->Ilinestr);
8788 PL_bufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8789 i = proto_perl->Ioldbufptr - SvPVX(proto_perl->Ilinestr);
8790 PL_oldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8791 i = proto_perl->Ioldoldbufptr - SvPVX(proto_perl->Ilinestr);
8792 PL_oldoldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8793 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
8794 i = proto_perl->Ilinestart - SvPVX(proto_perl->Ilinestr);
8795 PL_linestart = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8796 PL_pending_ident = proto_perl->Ipending_ident;
8797 PL_sublex_info = proto_perl->Isublex_info; /* XXX not quite right */
8799 PL_expect = proto_perl->Iexpect;
8801 PL_multi_start = proto_perl->Imulti_start;
8802 PL_multi_end = proto_perl->Imulti_end;
8803 PL_multi_open = proto_perl->Imulti_open;
8804 PL_multi_close = proto_perl->Imulti_close;
8806 PL_error_count = proto_perl->Ierror_count;
8807 PL_subline = proto_perl->Isubline;
8808 PL_subname = sv_dup_inc(proto_perl->Isubname);
8810 PL_min_intro_pending = proto_perl->Imin_intro_pending;
8811 PL_max_intro_pending = proto_perl->Imax_intro_pending;
8812 PL_padix = proto_perl->Ipadix;
8813 PL_padix_floor = proto_perl->Ipadix_floor;
8814 PL_pad_reset_pending = proto_perl->Ipad_reset_pending;
8816 i = proto_perl->Ilast_uni - SvPVX(proto_perl->Ilinestr);
8817 PL_last_uni = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8818 i = proto_perl->Ilast_lop - SvPVX(proto_perl->Ilinestr);
8819 PL_last_lop = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8820 PL_last_lop_op = proto_perl->Ilast_lop_op;
8821 PL_in_my = proto_perl->Iin_my;
8822 PL_in_my_stash = hv_dup(proto_perl->Iin_my_stash);
8824 PL_cryptseen = proto_perl->Icryptseen;
8827 PL_hints = proto_perl->Ihints;
8829 PL_amagic_generation = proto_perl->Iamagic_generation;
8831 #ifdef USE_LOCALE_COLLATE
8832 PL_collation_ix = proto_perl->Icollation_ix;
8833 PL_collation_name = SAVEPV(proto_perl->Icollation_name);
8834 PL_collation_standard = proto_perl->Icollation_standard;
8835 PL_collxfrm_base = proto_perl->Icollxfrm_base;
8836 PL_collxfrm_mult = proto_perl->Icollxfrm_mult;
8837 #endif /* USE_LOCALE_COLLATE */
8839 #ifdef USE_LOCALE_NUMERIC
8840 PL_numeric_name = SAVEPV(proto_perl->Inumeric_name);
8841 PL_numeric_standard = proto_perl->Inumeric_standard;
8842 PL_numeric_local = proto_perl->Inumeric_local;
8843 PL_numeric_radix = proto_perl->Inumeric_radix;
8844 #endif /* !USE_LOCALE_NUMERIC */
8846 /* utf8 character classes */
8847 PL_utf8_alnum = sv_dup_inc(proto_perl->Iutf8_alnum);
8848 PL_utf8_alnumc = sv_dup_inc(proto_perl->Iutf8_alnumc);
8849 PL_utf8_ascii = sv_dup_inc(proto_perl->Iutf8_ascii);
8850 PL_utf8_alpha = sv_dup_inc(proto_perl->Iutf8_alpha);
8851 PL_utf8_space = sv_dup_inc(proto_perl->Iutf8_space);
8852 PL_utf8_cntrl = sv_dup_inc(proto_perl->Iutf8_cntrl);
8853 PL_utf8_graph = sv_dup_inc(proto_perl->Iutf8_graph);
8854 PL_utf8_digit = sv_dup_inc(proto_perl->Iutf8_digit);
8855 PL_utf8_upper = sv_dup_inc(proto_perl->Iutf8_upper);
8856 PL_utf8_lower = sv_dup_inc(proto_perl->Iutf8_lower);
8857 PL_utf8_print = sv_dup_inc(proto_perl->Iutf8_print);
8858 PL_utf8_punct = sv_dup_inc(proto_perl->Iutf8_punct);
8859 PL_utf8_xdigit = sv_dup_inc(proto_perl->Iutf8_xdigit);
8860 PL_utf8_mark = sv_dup_inc(proto_perl->Iutf8_mark);
8861 PL_utf8_toupper = sv_dup_inc(proto_perl->Iutf8_toupper);
8862 PL_utf8_totitle = sv_dup_inc(proto_perl->Iutf8_totitle);
8863 PL_utf8_tolower = sv_dup_inc(proto_perl->Iutf8_tolower);
8866 PL_last_swash_hv = Nullhv; /* reinits on demand */
8867 PL_last_swash_klen = 0;
8868 PL_last_swash_key[0]= '\0';
8869 PL_last_swash_tmps = (U8*)NULL;
8870 PL_last_swash_slen = 0;
8872 /* perly.c globals */
8873 PL_yydebug = proto_perl->Iyydebug;
8874 PL_yynerrs = proto_perl->Iyynerrs;
8875 PL_yyerrflag = proto_perl->Iyyerrflag;
8876 PL_yychar = proto_perl->Iyychar;
8877 PL_yyval = proto_perl->Iyyval;
8878 PL_yylval = proto_perl->Iyylval;
8880 PL_glob_index = proto_perl->Iglob_index;
8881 PL_srand_called = proto_perl->Isrand_called;
8882 PL_uudmap['M'] = 0; /* reinits on demand */
8883 PL_bitcount = Nullch; /* reinits on demand */
8885 if (proto_perl->Ipsig_pend) {
8886 Newz(0, PL_psig_pend, SIG_SIZE, int);
8889 PL_psig_pend = (int*)NULL;
8892 if (proto_perl->Ipsig_ptr) {
8893 Newz(0, PL_psig_ptr, SIG_SIZE, SV*);
8894 Newz(0, PL_psig_name, SIG_SIZE, SV*);
8895 for (i = 1; i < SIG_SIZE; i++) {
8896 PL_psig_ptr[i] = sv_dup_inc(proto_perl->Ipsig_ptr[i]);
8897 PL_psig_name[i] = sv_dup_inc(proto_perl->Ipsig_name[i]);
8901 PL_psig_ptr = (SV**)NULL;
8902 PL_psig_name = (SV**)NULL;
8905 /* thrdvar.h stuff */
8908 /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
8909 PL_tmps_ix = proto_perl->Ttmps_ix;
8910 PL_tmps_max = proto_perl->Ttmps_max;
8911 PL_tmps_floor = proto_perl->Ttmps_floor;
8912 Newz(50, PL_tmps_stack, PL_tmps_max, SV*);
8914 while (i <= PL_tmps_ix) {
8915 PL_tmps_stack[i] = sv_dup_inc(proto_perl->Ttmps_stack[i]);
8919 /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
8920 i = proto_perl->Tmarkstack_max - proto_perl->Tmarkstack;
8921 Newz(54, PL_markstack, i, I32);
8922 PL_markstack_max = PL_markstack + (proto_perl->Tmarkstack_max
8923 - proto_perl->Tmarkstack);
8924 PL_markstack_ptr = PL_markstack + (proto_perl->Tmarkstack_ptr
8925 - proto_perl->Tmarkstack);
8926 Copy(proto_perl->Tmarkstack, PL_markstack,
8927 PL_markstack_ptr - PL_markstack + 1, I32);
8929 /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
8930 * NOTE: unlike the others! */
8931 PL_scopestack_ix = proto_perl->Tscopestack_ix;
8932 PL_scopestack_max = proto_perl->Tscopestack_max;
8933 Newz(54, PL_scopestack, PL_scopestack_max, I32);
8934 Copy(proto_perl->Tscopestack, PL_scopestack, PL_scopestack_ix, I32);
8936 /* next push_return() sets PL_retstack[PL_retstack_ix]
8937 * NOTE: unlike the others! */
8938 PL_retstack_ix = proto_perl->Tretstack_ix;
8939 PL_retstack_max = proto_perl->Tretstack_max;
8940 Newz(54, PL_retstack, PL_retstack_max, OP*);
8941 Copy(proto_perl->Tretstack, PL_retstack, PL_retstack_ix, I32);
8943 /* NOTE: si_dup() looks at PL_markstack */
8944 PL_curstackinfo = si_dup(proto_perl->Tcurstackinfo);
8946 /* PL_curstack = PL_curstackinfo->si_stack; */
8947 PL_curstack = av_dup(proto_perl->Tcurstack);
8948 PL_mainstack = av_dup(proto_perl->Tmainstack);
8950 /* next PUSHs() etc. set *(PL_stack_sp+1) */
8951 PL_stack_base = AvARRAY(PL_curstack);
8952 PL_stack_sp = PL_stack_base + (proto_perl->Tstack_sp
8953 - proto_perl->Tstack_base);
8954 PL_stack_max = PL_stack_base + AvMAX(PL_curstack);
8956 /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
8957 * NOTE: unlike the others! */
8958 PL_savestack_ix = proto_perl->Tsavestack_ix;
8959 PL_savestack_max = proto_perl->Tsavestack_max;
8960 /*Newz(54, PL_savestack, PL_savestack_max, ANY);*/
8961 PL_savestack = ss_dup(proto_perl);
8965 ENTER; /* perl_destruct() wants to LEAVE; */
8968 PL_start_env = proto_perl->Tstart_env; /* XXXXXX */
8969 PL_top_env = &PL_start_env;
8971 PL_op = proto_perl->Top;
8974 PL_Xpv = (XPV*)NULL;
8975 PL_na = proto_perl->Tna;
8977 PL_statbuf = proto_perl->Tstatbuf;
8978 PL_statcache = proto_perl->Tstatcache;
8979 PL_statgv = gv_dup(proto_perl->Tstatgv);
8980 PL_statname = sv_dup_inc(proto_perl->Tstatname);
8982 PL_timesbuf = proto_perl->Ttimesbuf;
8985 PL_tainted = proto_perl->Ttainted;
8986 PL_curpm = proto_perl->Tcurpm; /* XXX No PMOP ref count */
8987 PL_nrs = sv_dup_inc(proto_perl->Tnrs);
8988 PL_rs = sv_dup_inc(proto_perl->Trs);
8989 PL_last_in_gv = gv_dup(proto_perl->Tlast_in_gv);
8990 PL_ofs_sv = sv_dup_inc(proto_perl->Tofs_sv);
8991 PL_defoutgv = gv_dup_inc(proto_perl->Tdefoutgv);
8992 PL_chopset = proto_perl->Tchopset; /* XXX never deallocated */
8993 PL_toptarget = sv_dup_inc(proto_perl->Ttoptarget);
8994 PL_bodytarget = sv_dup_inc(proto_perl->Tbodytarget);
8995 PL_formtarget = sv_dup(proto_perl->Tformtarget);
8997 PL_restartop = proto_perl->Trestartop;
8998 PL_in_eval = proto_perl->Tin_eval;
8999 PL_delaymagic = proto_perl->Tdelaymagic;
9000 PL_dirty = proto_perl->Tdirty;
9001 PL_localizing = proto_perl->Tlocalizing;
9003 #ifdef PERL_FLEXIBLE_EXCEPTIONS
9004 PL_protect = proto_perl->Tprotect;
9006 PL_errors = sv_dup_inc(proto_perl->Terrors);
9007 PL_av_fetch_sv = Nullsv;
9008 PL_hv_fetch_sv = Nullsv;
9009 Zero(&PL_hv_fetch_ent_mh, 1, HE); /* XXX */
9010 PL_modcount = proto_perl->Tmodcount;
9011 PL_lastgotoprobe = Nullop;
9012 PL_dumpindent = proto_perl->Tdumpindent;
9014 PL_sortcop = (OP*)any_dup(proto_perl->Tsortcop, proto_perl);
9015 PL_sortstash = hv_dup(proto_perl->Tsortstash);
9016 PL_firstgv = gv_dup(proto_perl->Tfirstgv);
9017 PL_secondgv = gv_dup(proto_perl->Tsecondgv);
9018 PL_sortcxix = proto_perl->Tsortcxix;
9019 PL_efloatbuf = Nullch; /* reinits on demand */
9020 PL_efloatsize = 0; /* reinits on demand */
9024 PL_screamfirst = NULL;
9025 PL_screamnext = NULL;
9026 PL_maxscream = -1; /* reinits on demand */
9027 PL_lastscream = Nullsv;
9029 PL_watchaddr = NULL;
9030 PL_watchok = Nullch;
9032 PL_regdummy = proto_perl->Tregdummy;
9033 PL_regcomp_parse = Nullch;
9034 PL_regxend = Nullch;
9035 PL_regcode = (regnode*)NULL;
9038 PL_regprecomp = Nullch;
9043 PL_seen_zerolen = 0;
9045 PL_regcomp_rx = (regexp*)NULL;
9047 PL_colorset = 0; /* reinits PL_colors[] */
9048 /*PL_colors[6] = {0,0,0,0,0,0};*/
9049 PL_reg_whilem_seen = 0;
9050 PL_reginput = Nullch;
9053 PL_regstartp = (I32*)NULL;
9054 PL_regendp = (I32*)NULL;
9055 PL_reglastparen = (U32*)NULL;
9056 PL_regtill = Nullch;
9058 PL_reg_start_tmp = (char**)NULL;
9059 PL_reg_start_tmpl = 0;
9060 PL_regdata = (struct reg_data*)NULL;
9063 PL_reg_eval_set = 0;
9065 PL_regprogram = (regnode*)NULL;
9067 PL_regcc = (CURCUR*)NULL;
9068 PL_reg_call_cc = (struct re_cc_state*)NULL;
9069 PL_reg_re = (regexp*)NULL;
9070 PL_reg_ganch = Nullch;
9072 PL_reg_magic = (MAGIC*)NULL;
9074 PL_reg_oldcurpm = (PMOP*)NULL;
9075 PL_reg_curpm = (PMOP*)NULL;
9076 PL_reg_oldsaved = Nullch;
9077 PL_reg_oldsavedlen = 0;
9079 PL_reg_leftiter = 0;
9080 PL_reg_poscache = Nullch;
9081 PL_reg_poscache_size= 0;
9083 /* RE engine - function pointers */
9084 PL_regcompp = proto_perl->Tregcompp;
9085 PL_regexecp = proto_perl->Tregexecp;
9086 PL_regint_start = proto_perl->Tregint_start;
9087 PL_regint_string = proto_perl->Tregint_string;
9088 PL_regfree = proto_perl->Tregfree;
9090 PL_reginterp_cnt = 0;
9091 PL_reg_starttry = 0;
9094 return (PerlInterpreter*)pPerl;
9100 #else /* !USE_ITHREADS */
9106 #endif /* USE_ITHREADS */
9109 do_report_used(pTHXo_ SV *sv)
9111 if (SvTYPE(sv) != SVTYPEMASK) {
9112 PerlIO_printf(Perl_debug_log, "****\n");
9118 do_clean_objs(pTHXo_ SV *sv)
9122 if (SvROK(sv) && SvOBJECT(rv = SvRV(sv))) {
9123 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(sv));)
9124 if (SvWEAKREF(sv)) {
9135 /* XXX Might want to check arrays, etc. */
9138 #ifndef DISABLE_DESTRUCTOR_KLUDGE
9140 do_clean_named_objs(pTHXo_ SV *sv)
9142 if (SvTYPE(sv) == SVt_PVGV && GvGP(sv)) {
9143 if ( SvOBJECT(GvSV(sv)) ||
9144 (GvAV(sv) && SvOBJECT(GvAV(sv))) ||
9145 (GvHV(sv) && SvOBJECT(GvHV(sv))) ||
9146 (GvIO(sv) && SvOBJECT(GvIO(sv))) ||
9147 (GvCV(sv) && SvOBJECT(GvCV(sv))) )
9149 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning named glob object:\n "), sv_dump(sv));)
9157 do_clean_all(pTHXo_ SV *sv)
9159 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) );)
9160 SvFLAGS(sv) |= SVf_BREAK;