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); \
81 for (sva = PL_sv_arenaroot; sva; sva = (SV *) SvANY(sva)) {
83 svend = &sva[SvREFCNT(sva)];
84 if (p >= sv && p < svend)
88 if (ckWARN_d(WARN_INTERNAL))
89 Perl_warner(aTHX_ WARN_INTERNAL,
90 "Attempt to free non-arena SV: 0x%"UVxf,
98 #else /* ! DEBUGGING */
100 #define del_SV(p) plant_SV(p)
102 #endif /* DEBUGGING */
105 Perl_sv_add_arena(pTHX_ char *ptr, U32 size, U32 flags)
110 Zero(ptr, size, char);
112 /* The first SV in an arena isn't an SV. */
113 SvANY(sva) = (void *) PL_sv_arenaroot; /* ptr to next arena */
114 SvREFCNT(sva) = size / sizeof(SV); /* number of SV slots */
115 SvFLAGS(sva) = flags; /* FAKE if not to be freed */
117 PL_sv_arenaroot = sva;
118 PL_sv_root = sva + 1;
120 svend = &sva[SvREFCNT(sva) - 1];
123 SvANY(sv) = (void *)(SV*)(sv + 1);
124 SvFLAGS(sv) = SVTYPEMASK;
128 SvFLAGS(sv) = SVTYPEMASK;
131 /* sv_mutex must be held while calling more_sv() */
138 sv_add_arena(PL_nice_chunk, PL_nice_chunk_size, 0);
139 PL_nice_chunk = Nullch;
142 char *chunk; /* must use New here to match call to */
143 New(704,chunk,1008,char); /* Safefree() in sv_free_arenas() */
144 sv_add_arena(chunk, 1008, 0);
151 S_visit(pTHX_ SVFUNC_t f)
157 for (sva = PL_sv_arenaroot; sva; sva = (SV*)SvANY(sva)) {
158 svend = &sva[SvREFCNT(sva)];
159 for (sv = sva + 1; sv < svend; ++sv) {
160 if (SvTYPE(sv) != SVTYPEMASK)
167 Perl_sv_report_used(pTHX)
169 visit(do_report_used);
173 Perl_sv_clean_objs(pTHX)
175 PL_in_clean_objs = TRUE;
176 visit(do_clean_objs);
177 #ifndef DISABLE_DESTRUCTOR_KLUDGE
178 /* some barnacles may yet remain, clinging to typeglobs */
179 visit(do_clean_named_objs);
181 PL_in_clean_objs = FALSE;
185 Perl_sv_clean_all(pTHX)
187 PL_in_clean_all = TRUE;
189 PL_in_clean_all = FALSE;
193 Perl_sv_free_arenas(pTHX)
197 XPV *arena, *arenanext;
199 /* Free arenas here, but be careful about fake ones. (We assume
200 contiguity of the fake ones with the corresponding real ones.) */
202 for (sva = PL_sv_arenaroot; sva; sva = svanext) {
203 svanext = (SV*) SvANY(sva);
204 while (svanext && SvFAKE(svanext))
205 svanext = (SV*) SvANY(svanext);
208 Safefree((void *)sva);
211 for (arena = PL_xiv_arenaroot; arena; arena = arenanext) {
212 arenanext = (XPV*)arena->xpv_pv;
215 PL_xiv_arenaroot = 0;
217 for (arena = PL_xnv_arenaroot; arena; arena = arenanext) {
218 arenanext = (XPV*)arena->xpv_pv;
221 PL_xnv_arenaroot = 0;
223 for (arena = PL_xrv_arenaroot; arena; arena = arenanext) {
224 arenanext = (XPV*)arena->xpv_pv;
227 PL_xrv_arenaroot = 0;
229 for (arena = PL_xpv_arenaroot; arena; arena = arenanext) {
230 arenanext = (XPV*)arena->xpv_pv;
233 PL_xpv_arenaroot = 0;
235 for (arena = (XPV*)PL_xpviv_arenaroot; arena; arena = arenanext) {
236 arenanext = (XPV*)arena->xpv_pv;
239 PL_xpviv_arenaroot = 0;
241 for (arena = (XPV*)PL_xpvnv_arenaroot; arena; arena = arenanext) {
242 arenanext = (XPV*)arena->xpv_pv;
245 PL_xpvnv_arenaroot = 0;
247 for (arena = (XPV*)PL_xpvcv_arenaroot; arena; arena = arenanext) {
248 arenanext = (XPV*)arena->xpv_pv;
251 PL_xpvcv_arenaroot = 0;
253 for (arena = (XPV*)PL_xpvav_arenaroot; arena; arena = arenanext) {
254 arenanext = (XPV*)arena->xpv_pv;
257 PL_xpvav_arenaroot = 0;
259 for (arena = (XPV*)PL_xpvhv_arenaroot; arena; arena = arenanext) {
260 arenanext = (XPV*)arena->xpv_pv;
263 PL_xpvhv_arenaroot = 0;
265 for (arena = (XPV*)PL_xpvmg_arenaroot; arena; arena = arenanext) {
266 arenanext = (XPV*)arena->xpv_pv;
269 PL_xpvmg_arenaroot = 0;
271 for (arena = (XPV*)PL_xpvlv_arenaroot; arena; arena = arenanext) {
272 arenanext = (XPV*)arena->xpv_pv;
275 PL_xpvlv_arenaroot = 0;
277 for (arena = (XPV*)PL_xpvbm_arenaroot; arena; arena = arenanext) {
278 arenanext = (XPV*)arena->xpv_pv;
281 PL_xpvbm_arenaroot = 0;
283 for (arena = (XPV*)PL_he_arenaroot; arena; arena = arenanext) {
284 arenanext = (XPV*)arena->xpv_pv;
290 Safefree(PL_nice_chunk);
291 PL_nice_chunk = Nullch;
292 PL_nice_chunk_size = 0;
298 Perl_report_uninit(pTHX)
301 Perl_warner(aTHX_ WARN_UNINITIALIZED, PL_warn_uninit,
302 " in ", PL_op_desc[PL_op->op_type]);
304 Perl_warner(aTHX_ WARN_UNINITIALIZED, PL_warn_uninit, "", "");
316 * See comment in more_xiv() -- RAM.
318 PL_xiv_root = *(IV**)xiv;
320 return (XPVIV*)((char*)xiv - STRUCT_OFFSET(XPVIV, xiv_iv));
324 S_del_xiv(pTHX_ XPVIV *p)
326 IV* xiv = (IV*)((char*)(p) + STRUCT_OFFSET(XPVIV, xiv_iv));
328 *(IV**)xiv = PL_xiv_root;
339 New(705, ptr, 1008/sizeof(XPV), XPV);
340 ptr->xpv_pv = (char*)PL_xiv_arenaroot; /* linked list of xiv arenas */
341 PL_xiv_arenaroot = ptr; /* to keep Purify happy */
344 xivend = &xiv[1008 / sizeof(IV) - 1];
345 xiv += (sizeof(XPV) - 1) / sizeof(IV) + 1; /* fudge by size of XPV */
347 while (xiv < xivend) {
348 *(IV**)xiv = (IV *)(xiv + 1);
362 PL_xnv_root = *(NV**)xnv;
364 return (XPVNV*)((char*)xnv - STRUCT_OFFSET(XPVNV, xnv_nv));
368 S_del_xnv(pTHX_ XPVNV *p)
370 NV* xnv = (NV*)((char*)(p) + STRUCT_OFFSET(XPVNV, xnv_nv));
372 *(NV**)xnv = PL_xnv_root;
383 New(711, ptr, 1008/sizeof(XPV), XPV);
384 ptr->xpv_pv = (char*)PL_xnv_arenaroot;
385 PL_xnv_arenaroot = ptr;
388 xnvend = &xnv[1008 / sizeof(NV) - 1];
389 xnv += (sizeof(XPVIV) - 1) / sizeof(NV) + 1; /* fudge by sizeof XPVIV */
391 while (xnv < xnvend) {
392 *(NV**)xnv = (NV*)(xnv + 1);
406 PL_xrv_root = (XRV*)xrv->xrv_rv;
412 S_del_xrv(pTHX_ XRV *p)
415 p->xrv_rv = (SV*)PL_xrv_root;
424 register XRV* xrvend;
426 New(712, ptr, 1008/sizeof(XPV), XPV);
427 ptr->xpv_pv = (char*)PL_xrv_arenaroot;
428 PL_xrv_arenaroot = ptr;
431 xrvend = &xrv[1008 / sizeof(XRV) - 1];
432 xrv += (sizeof(XPV) - 1) / sizeof(XRV) + 1;
434 while (xrv < xrvend) {
435 xrv->xrv_rv = (SV*)(xrv + 1);
449 PL_xpv_root = (XPV*)xpv->xpv_pv;
455 S_del_xpv(pTHX_ XPV *p)
458 p->xpv_pv = (char*)PL_xpv_root;
467 register XPV* xpvend;
468 New(713, xpv, 1008/sizeof(XPV), XPV);
469 xpv->xpv_pv = (char*)PL_xpv_arenaroot;
470 PL_xpv_arenaroot = xpv;
472 xpvend = &xpv[1008 / sizeof(XPV) - 1];
474 while (xpv < xpvend) {
475 xpv->xpv_pv = (char*)(xpv + 1);
488 xpviv = PL_xpviv_root;
489 PL_xpviv_root = (XPVIV*)xpviv->xpv_pv;
495 S_del_xpviv(pTHX_ XPVIV *p)
498 p->xpv_pv = (char*)PL_xpviv_root;
506 register XPVIV* xpviv;
507 register XPVIV* xpvivend;
508 New(714, xpviv, 1008/sizeof(XPVIV), XPVIV);
509 xpviv->xpv_pv = (char*)PL_xpviv_arenaroot;
510 PL_xpviv_arenaroot = xpviv;
512 xpvivend = &xpviv[1008 / sizeof(XPVIV) - 1];
513 PL_xpviv_root = ++xpviv;
514 while (xpviv < xpvivend) {
515 xpviv->xpv_pv = (char*)(xpviv + 1);
528 xpvnv = PL_xpvnv_root;
529 PL_xpvnv_root = (XPVNV*)xpvnv->xpv_pv;
535 S_del_xpvnv(pTHX_ XPVNV *p)
538 p->xpv_pv = (char*)PL_xpvnv_root;
546 register XPVNV* xpvnv;
547 register XPVNV* xpvnvend;
548 New(715, xpvnv, 1008/sizeof(XPVNV), XPVNV);
549 xpvnv->xpv_pv = (char*)PL_xpvnv_arenaroot;
550 PL_xpvnv_arenaroot = xpvnv;
552 xpvnvend = &xpvnv[1008 / sizeof(XPVNV) - 1];
553 PL_xpvnv_root = ++xpvnv;
554 while (xpvnv < xpvnvend) {
555 xpvnv->xpv_pv = (char*)(xpvnv + 1);
568 xpvcv = PL_xpvcv_root;
569 PL_xpvcv_root = (XPVCV*)xpvcv->xpv_pv;
575 S_del_xpvcv(pTHX_ XPVCV *p)
578 p->xpv_pv = (char*)PL_xpvcv_root;
586 register XPVCV* xpvcv;
587 register XPVCV* xpvcvend;
588 New(716, xpvcv, 1008/sizeof(XPVCV), XPVCV);
589 xpvcv->xpv_pv = (char*)PL_xpvcv_arenaroot;
590 PL_xpvcv_arenaroot = xpvcv;
592 xpvcvend = &xpvcv[1008 / sizeof(XPVCV) - 1];
593 PL_xpvcv_root = ++xpvcv;
594 while (xpvcv < xpvcvend) {
595 xpvcv->xpv_pv = (char*)(xpvcv + 1);
608 xpvav = PL_xpvav_root;
609 PL_xpvav_root = (XPVAV*)xpvav->xav_array;
615 S_del_xpvav(pTHX_ XPVAV *p)
618 p->xav_array = (char*)PL_xpvav_root;
626 register XPVAV* xpvav;
627 register XPVAV* xpvavend;
628 New(717, xpvav, 1008/sizeof(XPVAV), XPVAV);
629 xpvav->xav_array = (char*)PL_xpvav_arenaroot;
630 PL_xpvav_arenaroot = xpvav;
632 xpvavend = &xpvav[1008 / sizeof(XPVAV) - 1];
633 PL_xpvav_root = ++xpvav;
634 while (xpvav < xpvavend) {
635 xpvav->xav_array = (char*)(xpvav + 1);
638 xpvav->xav_array = 0;
648 xpvhv = PL_xpvhv_root;
649 PL_xpvhv_root = (XPVHV*)xpvhv->xhv_array;
655 S_del_xpvhv(pTHX_ XPVHV *p)
658 p->xhv_array = (char*)PL_xpvhv_root;
666 register XPVHV* xpvhv;
667 register XPVHV* xpvhvend;
668 New(718, xpvhv, 1008/sizeof(XPVHV), XPVHV);
669 xpvhv->xhv_array = (char*)PL_xpvhv_arenaroot;
670 PL_xpvhv_arenaroot = xpvhv;
672 xpvhvend = &xpvhv[1008 / sizeof(XPVHV) - 1];
673 PL_xpvhv_root = ++xpvhv;
674 while (xpvhv < xpvhvend) {
675 xpvhv->xhv_array = (char*)(xpvhv + 1);
678 xpvhv->xhv_array = 0;
688 xpvmg = PL_xpvmg_root;
689 PL_xpvmg_root = (XPVMG*)xpvmg->xpv_pv;
695 S_del_xpvmg(pTHX_ XPVMG *p)
698 p->xpv_pv = (char*)PL_xpvmg_root;
706 register XPVMG* xpvmg;
707 register XPVMG* xpvmgend;
708 New(719, xpvmg, 1008/sizeof(XPVMG), XPVMG);
709 xpvmg->xpv_pv = (char*)PL_xpvmg_arenaroot;
710 PL_xpvmg_arenaroot = xpvmg;
712 xpvmgend = &xpvmg[1008 / sizeof(XPVMG) - 1];
713 PL_xpvmg_root = ++xpvmg;
714 while (xpvmg < xpvmgend) {
715 xpvmg->xpv_pv = (char*)(xpvmg + 1);
728 xpvlv = PL_xpvlv_root;
729 PL_xpvlv_root = (XPVLV*)xpvlv->xpv_pv;
735 S_del_xpvlv(pTHX_ XPVLV *p)
738 p->xpv_pv = (char*)PL_xpvlv_root;
746 register XPVLV* xpvlv;
747 register XPVLV* xpvlvend;
748 New(720, xpvlv, 1008/sizeof(XPVLV), XPVLV);
749 xpvlv->xpv_pv = (char*)PL_xpvlv_arenaroot;
750 PL_xpvlv_arenaroot = xpvlv;
752 xpvlvend = &xpvlv[1008 / sizeof(XPVLV) - 1];
753 PL_xpvlv_root = ++xpvlv;
754 while (xpvlv < xpvlvend) {
755 xpvlv->xpv_pv = (char*)(xpvlv + 1);
768 xpvbm = PL_xpvbm_root;
769 PL_xpvbm_root = (XPVBM*)xpvbm->xpv_pv;
775 S_del_xpvbm(pTHX_ XPVBM *p)
778 p->xpv_pv = (char*)PL_xpvbm_root;
786 register XPVBM* xpvbm;
787 register XPVBM* xpvbmend;
788 New(721, xpvbm, 1008/sizeof(XPVBM), XPVBM);
789 xpvbm->xpv_pv = (char*)PL_xpvbm_arenaroot;
790 PL_xpvbm_arenaroot = xpvbm;
792 xpvbmend = &xpvbm[1008 / sizeof(XPVBM) - 1];
793 PL_xpvbm_root = ++xpvbm;
794 while (xpvbm < xpvbmend) {
795 xpvbm->xpv_pv = (char*)(xpvbm + 1);
802 # define my_safemalloc(s) (void*)safexmalloc(717,s)
803 # define my_safefree(p) safexfree((char*)p)
805 # define my_safemalloc(s) (void*)safemalloc(s)
806 # define my_safefree(p) safefree((char*)p)
811 #define new_XIV() my_safemalloc(sizeof(XPVIV))
812 #define del_XIV(p) my_safefree(p)
814 #define new_XNV() my_safemalloc(sizeof(XPVNV))
815 #define del_XNV(p) my_safefree(p)
817 #define new_XRV() my_safemalloc(sizeof(XRV))
818 #define del_XRV(p) my_safefree(p)
820 #define new_XPV() my_safemalloc(sizeof(XPV))
821 #define del_XPV(p) my_safefree(p)
823 #define new_XPVIV() my_safemalloc(sizeof(XPVIV))
824 #define del_XPVIV(p) my_safefree(p)
826 #define new_XPVNV() my_safemalloc(sizeof(XPVNV))
827 #define del_XPVNV(p) my_safefree(p)
829 #define new_XPVCV() my_safemalloc(sizeof(XPVCV))
830 #define del_XPVCV(p) my_safefree(p)
832 #define new_XPVAV() my_safemalloc(sizeof(XPVAV))
833 #define del_XPVAV(p) my_safefree(p)
835 #define new_XPVHV() my_safemalloc(sizeof(XPVHV))
836 #define del_XPVHV(p) my_safefree(p)
838 #define new_XPVMG() my_safemalloc(sizeof(XPVMG))
839 #define del_XPVMG(p) my_safefree(p)
841 #define new_XPVLV() my_safemalloc(sizeof(XPVLV))
842 #define del_XPVLV(p) my_safefree(p)
844 #define new_XPVBM() my_safemalloc(sizeof(XPVBM))
845 #define del_XPVBM(p) my_safefree(p)
849 #define new_XIV() (void*)new_xiv()
850 #define del_XIV(p) del_xiv((XPVIV*) p)
852 #define new_XNV() (void*)new_xnv()
853 #define del_XNV(p) del_xnv((XPVNV*) p)
855 #define new_XRV() (void*)new_xrv()
856 #define del_XRV(p) del_xrv((XRV*) p)
858 #define new_XPV() (void*)new_xpv()
859 #define del_XPV(p) del_xpv((XPV *)p)
861 #define new_XPVIV() (void*)new_xpviv()
862 #define del_XPVIV(p) del_xpviv((XPVIV *)p)
864 #define new_XPVNV() (void*)new_xpvnv()
865 #define del_XPVNV(p) del_xpvnv((XPVNV *)p)
867 #define new_XPVCV() (void*)new_xpvcv()
868 #define del_XPVCV(p) del_xpvcv((XPVCV *)p)
870 #define new_XPVAV() (void*)new_xpvav()
871 #define del_XPVAV(p) del_xpvav((XPVAV *)p)
873 #define new_XPVHV() (void*)new_xpvhv()
874 #define del_XPVHV(p) del_xpvhv((XPVHV *)p)
876 #define new_XPVMG() (void*)new_xpvmg()
877 #define del_XPVMG(p) del_xpvmg((XPVMG *)p)
879 #define new_XPVLV() (void*)new_xpvlv()
880 #define del_XPVLV(p) del_xpvlv((XPVLV *)p)
882 #define new_XPVBM() (void*)new_xpvbm()
883 #define del_XPVBM(p) del_xpvbm((XPVBM *)p)
887 #define new_XPVGV() my_safemalloc(sizeof(XPVGV))
888 #define del_XPVGV(p) my_safefree(p)
890 #define new_XPVFM() my_safemalloc(sizeof(XPVFM))
891 #define del_XPVFM(p) my_safefree(p)
893 #define new_XPVIO() my_safemalloc(sizeof(XPVIO))
894 #define del_XPVIO(p) my_safefree(p)
897 =for apidoc sv_upgrade
899 Upgrade an SV to a more complex form. Use C<SvUPGRADE>. See
906 Perl_sv_upgrade(pTHX_ register SV *sv, U32 mt)
916 if (mt != SVt_PV && SvREADONLY(sv) && SvFAKE(sv)) {
920 if (SvTYPE(sv) == mt)
926 switch (SvTYPE(sv)) {
947 else if (mt < SVt_PVIV)
964 pv = (char*)SvRV(sv);
984 else if (mt == SVt_NV)
995 del_XPVIV(SvANY(sv));
1005 del_XPVNV(SvANY(sv));
1013 magic = SvMAGIC(sv);
1014 stash = SvSTASH(sv);
1015 del_XPVMG(SvANY(sv));
1018 Perl_croak(aTHX_ "Can't upgrade that kind of scalar");
1023 Perl_croak(aTHX_ "Can't upgrade to undef");
1025 SvANY(sv) = new_XIV();
1029 SvANY(sv) = new_XNV();
1033 SvANY(sv) = new_XRV();
1037 SvANY(sv) = new_XPV();
1043 SvANY(sv) = new_XPVIV();
1053 SvANY(sv) = new_XPVNV();
1061 SvANY(sv) = new_XPVMG();
1067 SvMAGIC(sv) = magic;
1068 SvSTASH(sv) = stash;
1071 SvANY(sv) = new_XPVLV();
1077 SvMAGIC(sv) = magic;
1078 SvSTASH(sv) = stash;
1085 SvANY(sv) = new_XPVAV();
1093 SvMAGIC(sv) = magic;
1094 SvSTASH(sv) = stash;
1100 SvANY(sv) = new_XPVHV();
1108 SvMAGIC(sv) = magic;
1109 SvSTASH(sv) = stash;
1116 SvANY(sv) = new_XPVCV();
1117 Zero(SvANY(sv), 1, XPVCV);
1123 SvMAGIC(sv) = magic;
1124 SvSTASH(sv) = stash;
1127 SvANY(sv) = new_XPVGV();
1133 SvMAGIC(sv) = magic;
1134 SvSTASH(sv) = stash;
1142 SvANY(sv) = new_XPVBM();
1148 SvMAGIC(sv) = magic;
1149 SvSTASH(sv) = stash;
1155 SvANY(sv) = new_XPVFM();
1156 Zero(SvANY(sv), 1, XPVFM);
1162 SvMAGIC(sv) = magic;
1163 SvSTASH(sv) = stash;
1166 SvANY(sv) = new_XPVIO();
1167 Zero(SvANY(sv), 1, XPVIO);
1173 SvMAGIC(sv) = magic;
1174 SvSTASH(sv) = stash;
1175 IoPAGE_LEN(sv) = 60;
1178 SvFLAGS(sv) &= ~SVTYPEMASK;
1184 Perl_sv_backoff(pTHX_ register SV *sv)
1188 char *s = SvPVX(sv);
1189 SvLEN(sv) += SvIVX(sv);
1190 SvPVX(sv) -= SvIVX(sv);
1192 Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1194 SvFLAGS(sv) &= ~SVf_OOK;
1201 Expands the character buffer in the SV. This will use C<sv_unref> and will
1202 upgrade the SV to C<SVt_PV>. Returns a pointer to the character buffer.
1209 Perl_sv_grow(pTHX_ register SV *sv, register STRLEN newlen)
1213 #ifdef HAS_64K_LIMIT
1214 if (newlen >= 0x10000) {
1215 PerlIO_printf(Perl_debug_log,
1216 "Allocation too large: %"UVxf"\n", (UV)newlen);
1219 #endif /* HAS_64K_LIMIT */
1222 if (SvTYPE(sv) < SVt_PV) {
1223 sv_upgrade(sv, SVt_PV);
1226 else if (SvOOK(sv)) { /* pv is offset? */
1229 if (newlen > SvLEN(sv))
1230 newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1231 #ifdef HAS_64K_LIMIT
1232 if (newlen >= 0x10000)
1238 if (newlen > SvLEN(sv)) { /* need more room? */
1239 if (SvLEN(sv) && s) {
1240 #if defined(MYMALLOC) && !defined(LEAKTEST)
1241 STRLEN l = malloced_size((void*)SvPVX(sv));
1247 Renew(s,newlen,char);
1250 New(703,s,newlen,char);
1252 SvLEN_set(sv, newlen);
1258 =for apidoc sv_setiv
1260 Copies an integer into the given SV. Does not handle 'set' magic. See
1267 Perl_sv_setiv(pTHX_ register SV *sv, IV i)
1269 SV_CHECK_THINKFIRST(sv);
1270 switch (SvTYPE(sv)) {
1272 sv_upgrade(sv, SVt_IV);
1275 sv_upgrade(sv, SVt_PVNV);
1279 sv_upgrade(sv, SVt_PVIV);
1288 Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1289 PL_op_desc[PL_op->op_type]);
1291 (void)SvIOK_only(sv); /* validate number */
1297 =for apidoc sv_setiv_mg
1299 Like C<sv_setiv>, but also handles 'set' magic.
1305 Perl_sv_setiv_mg(pTHX_ register SV *sv, IV i)
1312 =for apidoc sv_setuv
1314 Copies an unsigned integer into the given SV. Does not handle 'set' magic.
1321 Perl_sv_setuv(pTHX_ register SV *sv, UV u)
1323 /* With these two if statements:
1324 u=1.49 s=0.52 cu=72.49 cs=10.64 scripts=270 tests=20865
1327 u=1.35 s=0.47 cu=73.45 cs=11.43 scripts=270 tests=20865
1329 If you wish to remove them, please benchmark to see what the effect is
1331 if (u <= (UV)IV_MAX) {
1332 sv_setiv(sv, (IV)u);
1341 =for apidoc sv_setuv_mg
1343 Like C<sv_setuv>, but also handles 'set' magic.
1349 Perl_sv_setuv_mg(pTHX_ register SV *sv, UV u)
1351 /* With these two if statements:
1352 u=1.49 s=0.52 cu=72.49 cs=10.64 scripts=270 tests=20865
1355 u=1.35 s=0.47 cu=73.45 cs=11.43 scripts=270 tests=20865
1357 If you wish to remove them, please benchmark to see what the effect is
1359 if (u <= (UV)IV_MAX) {
1360 sv_setiv(sv, (IV)u);
1370 =for apidoc sv_setnv
1372 Copies a double into the given SV. Does not handle 'set' magic. See
1379 Perl_sv_setnv(pTHX_ register SV *sv, NV num)
1381 SV_CHECK_THINKFIRST(sv);
1382 switch (SvTYPE(sv)) {
1385 sv_upgrade(sv, SVt_NV);
1390 sv_upgrade(sv, SVt_PVNV);
1399 Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1400 PL_op_name[PL_op->op_type]);
1403 (void)SvNOK_only(sv); /* validate number */
1408 =for apidoc sv_setnv_mg
1410 Like C<sv_setnv>, but also handles 'set' magic.
1416 Perl_sv_setnv_mg(pTHX_ register SV *sv, NV num)
1423 S_not_a_number(pTHX_ SV *sv)
1428 char *limit = tmpbuf + sizeof(tmpbuf) - 8;
1429 /* each *s can expand to 4 chars + "...\0",
1430 i.e. need room for 8 chars */
1432 for (s = SvPVX(sv); *s && d < limit; s++) {
1434 if (ch & 128 && !isPRINT_LC(ch)) {
1443 else if (ch == '\r') {
1447 else if (ch == '\f') {
1451 else if (ch == '\\') {
1455 else if (isPRINT_LC(ch))
1470 Perl_warner(aTHX_ WARN_NUMERIC,
1471 "Argument \"%s\" isn't numeric in %s", tmpbuf,
1472 PL_op_desc[PL_op->op_type]);
1474 Perl_warner(aTHX_ WARN_NUMERIC,
1475 "Argument \"%s\" isn't numeric", tmpbuf);
1478 /* the number can be converted to integer with atol() or atoll() although */
1479 #define IS_NUMBER_TO_INT_BY_ATOL 0x01 /* integer (may have decimals) */
1480 #define IS_NUMBER_TO_INT_BY_STRTOL 0x02 /* it may exceed IV_MAX */
1481 #define IS_NUMBER_TO_INT_BY_ATOF 0x04 /* seen something like 123e4 */
1482 #define IS_NUMBER_LONGER_THAN_IV_MAX 0x08 /* more digits than IV_MAX */
1483 #define IS_NUMBER_AS_LONG_AS_IV_MAX 0x10 /* may(be not) larger than IV_MAX */
1484 #define IS_NUMBER_NOT_INT 0x20 /* seen a decimal point or e */
1485 #define IS_NUMBER_NEG 0x40 /* seen a leading - */
1486 #define IS_NUMBER_INFINITY 0x80 /* /^\s*-?Infinity\s*$/i */
1488 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1489 until proven guilty, assume that things are not that bad... */
1491 /* As 64 bit platforms often have an NV that doesn't preserve all bits of
1492 an IV (an assumption perl has been based on to date) it becomes necessary
1493 to remove the assumption that the NV always carries enough precision to
1494 recreate the IV whenever needed, and that the NV is the canonical form.
1495 Instead, IV/UV and NV need to be given equal rights. So as to not lose
1496 precision as an side effect of conversion (which would lead to insanity
1497 and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1498 1) to distinguish between IV/UV/NV slots that have cached a valid
1499 conversion where precision was lost and IV/UV/NV slots that have a
1500 valid conversion which has lost no precision
1501 2) to ensure that if a numeric conversion to one form is request that
1502 would lose precision, the precise conversion (or differently
1503 imprecise conversion) is also performed and cached, to prevent
1504 requests for different numeric formats on the same SV causing
1505 lossy conversion chains. (lossless conversion chains are perfectly
1510 SvIOKp is true if the IV slot contains a valid value
1511 SvIOK is true only if the IV value is accurate (UV if SvIOK_UV true)
1512 SvNOKp is true if the NV slot contains a valid value
1513 SvNOK is true only if the NV value is accurate
1516 while converting from PV to NV check to see if converting that NV to an
1517 IV(or UV) would lose accuracy over a direct conversion from PV to
1518 IV(or UV). If it would, cache both conversions, return NV, but mark
1519 SV as IOK NOKp (ie not NOK).
1521 while converting from PV to IV check to see if converting that IV to an
1522 NV would lose accuracy over a direct conversion from PV to NV. If it
1523 would, cache both conversions, flag similarly.
1525 Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1526 correctly because if IV & NV were set NV *always* overruled.
1527 Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flags meaning
1528 changes - now IV and NV together means that the two are interchangeable
1529 SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1531 The benefit of this is operations such as pp_add know that if SvIOK is
1532 true for both left and right operands, then integer addition can be
1533 used instead of floating point. (for cases where the result won't
1534 overflow) Before, floating point was always used, which could lead to
1535 loss of precision compared with integer addition.
1537 * making IV and NV equal status should make maths accurate on 64 bit
1539 * may speed up maths somewhat if pp_add and friends start to use
1540 integers when possible instead of fp. (hopefully the overhead in
1541 looking for SvIOK and checking for overflow will not outweigh the
1542 fp to integer speedup)
1543 * will slow down integer operations (callers of SvIV) on "inaccurate"
1544 values, as the change from SvIOK to SvIOKp will cause a call into
1545 sv_2iv each time rather than a macro access direct to the IV slot
1546 * should speed up number->string conversion on integers as IV is
1547 favoured when IV and NV equally accurate
1549 ####################################################################
1550 You had better be using SvIOK_notUV if you want an IV for arithmetic
1551 SvIOK is true if (IV or UV), so you might be getting (IV)SvUV
1552 SvUOK is true iff UV.
1553 ####################################################################
1555 Your mileage will vary depending your CPUs relative fp to integer
1559 #ifndef NV_PRESERVES_UV
1560 #define IS_NUMBER_UNDERFLOW_IV 1
1561 #define IS_NUMBER_UNDERFLOW_UV 2
1562 #define IS_NUMBER_IV_AND_UV 2
1563 #define IS_NUMBER_OVERFLOW_IV 4
1564 #define IS_NUMBER_OVERFLOW_UV 5
1565 /* Hopefully your optimiser will consider inlining these two functions. */
1567 S_sv_2inuv_non_preserve (pTHX_ register SV *sv, I32 numtype) {
1568 NV nv = SvNVX(sv); /* Code simpler and had compiler problems if */
1569 UV nv_as_uv = U_V(nv); /* these are not in simple variables. */
1570 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_2inuv_non '%s', IV=0x%"UVxf" NV=%g inttype=%"UVXf"\n", SvPVX(sv), SvIVX(sv), nv, (UV)numtype));
1571 if (nv_as_uv <= (UV)IV_MAX) {
1572 (void)SvIOKp_on(sv);
1573 (void)SvNOKp_on(sv);
1574 /* Within suitable range to fit in an IV, atol won't overflow */
1575 /* XXX quite sure? Is that your final answer? not really, I'm
1576 trusting that nv_as_uv to round down if NV is (IV_MAX + 1) */
1577 SvIVX(sv) = (IV)Atol(SvPVX(sv));
1578 if (numtype & IS_NUMBER_NOT_INT) {
1579 /* I believe that even if the original PV had decimals, they
1580 are lost beyond the limit of the FP precision.
1581 However, neither is canonical, so both only get p flags.
1583 /* Both already have p flags, so do nothing */
1584 } else if (SvIVX(sv) == I_V(nv)) {
1589 /* It had no "." so it must be integer. assert (get in here from
1590 sv_2iv and sv_2uv only for ndef HAS_STRTOL and
1591 IS_NUMBER_AS_LONG_AS_IV_MAX) or my logic is faulty and all
1592 conversion routines need audit. */
1594 return nv < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
1596 /* between IV_MAX and NV(UV_MAX). Could be slightly> UV_MAX */
1597 (void)SvIOKp_on(sv);
1598 (void)SvNOKp_on(sv);
1601 int save_errno = errno;
1603 SvUVX(sv) = Strtoul(SvPVX(sv), Null(char**), 10);
1605 if (numtype & IS_NUMBER_NOT_INT) {
1606 /* UV and NV both imprecise. */
1608 } else if (SvUVX(sv) == nv_as_uv && SvUVX(sv) != UV_MAX) {
1617 return IS_NUMBER_OVERFLOW_IV;
1621 /* Must have just overflowed UV, but not enough that an NV could spot
1623 return IS_NUMBER_OVERFLOW_UV;
1626 /* We've just lost integer precision, nothing we could do. */
1627 SvUVX(sv) = nv_as_uv;
1628 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_2niuv_non UV? '%s', UV=0x%"UVxf" NV=%g U_V(NV)=0x%"UVxf" inttype=%"UVXf"\n", SvPVX(sv), SvIVX(sv), nv, nv_as_uv, (UV)numtype));
1629 /* UV and NV slots equally valid only if we have casting symmetry. */
1630 if (numtype & IS_NUMBER_NOT_INT) {
1632 } else if (SvUVX(sv) == nv_as_uv && SvUVX(sv) != UV_MAX) {
1633 /* UV_MAX can cast up to NV (UV_MAX+1), that NV casts down to UV_MAX
1634 UV_MAX ought to be 0xFF...FFF which won't preserve (We only
1635 get to this point if NVs don't preserve UVs) */
1640 /* As above, I believe UV at least as good as NV */
1643 #endif /* HAS_STRTOUL */
1644 return IS_NUMBER_OVERFLOW_IV;
1647 /* For sv_2nv these three cases are "SvNOK and don't bother casting" */
1649 S_sv_2iuv_non_preserve (pTHX_ register SV *sv, I32 numtype)
1651 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_2iuv_non '%s', IV=0x%"UVxf" NV=%g inttype=%"UVXf"\n", SvPVX(sv), SvIVX(sv), SvNVX(sv), (UV)numtype));
1652 if (SvNVX(sv) < (NV)IV_MIN) {
1653 (void)SvIOKp_on(sv);
1656 return IS_NUMBER_UNDERFLOW_IV;
1658 if (SvNVX(sv) > (NV)UV_MAX) {
1659 (void)SvIOKp_on(sv);
1663 return IS_NUMBER_OVERFLOW_UV;
1665 if (!(numtype & (IS_NUMBER_TO_INT_BY_ATOL | IS_NUMBER_TO_INT_BY_STRTOL))) {
1666 (void)SvIOKp_on(sv);
1668 /* Can't use strtol etc to convert this string */
1669 if (SvNVX(sv) <= (UV)IV_MAX) {
1670 SvIVX(sv) = I_V(SvNVX(sv));
1671 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1672 SvIOK_on(sv); /* Integer is precise. NOK, IOK */
1674 /* Integer is imprecise. NOK, IOKp */
1676 return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
1679 SvUVX(sv) = U_V(SvNVX(sv));
1680 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
1681 if (SvUVX(sv) == UV_MAX) {
1682 /* As we know that NVs don't preserve UVs, UV_MAX cannot
1683 possibly be preserved by NV. Hence, it must be overflow.
1685 return IS_NUMBER_OVERFLOW_UV;
1687 SvIOK_on(sv); /* Integer is precise. NOK, UOK */
1689 /* Integer is imprecise. NOK, IOKp */
1691 return IS_NUMBER_OVERFLOW_IV;
1693 return S_sv_2inuv_non_preserve(aTHX_ sv, numtype);
1695 #endif /* NV_PRESERVES_UV*/
1698 Perl_sv_2iv(pTHX_ register SV *sv)
1702 if (SvGMAGICAL(sv)) {
1707 return I_V(SvNVX(sv));
1709 if (SvPOKp(sv) && SvLEN(sv))
1712 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
1713 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
1719 if (SvTHINKFIRST(sv)) {
1722 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
1723 (SvRV(tmpstr) != SvRV(sv)))
1724 return SvIV(tmpstr);
1725 return PTR2IV(SvRV(sv));
1727 if (SvREADONLY(sv) && SvFAKE(sv)) {
1728 sv_force_normal(sv);
1730 if (SvREADONLY(sv) && !SvOK(sv)) {
1731 if (ckWARN(WARN_UNINITIALIZED))
1738 return (IV)(SvUVX(sv));
1745 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
1746 * without also getting a cached IV/UV from it at the same time
1747 * (ie PV->NV conversion should detect loss of accuracy and cache
1748 * IV or UV at same time to avoid this. NWC */
1750 if (SvTYPE(sv) == SVt_NV)
1751 sv_upgrade(sv, SVt_PVNV);
1753 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
1754 /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
1755 certainly cast into the IV range at IV_MAX, whereas the correct
1756 answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
1758 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
1759 SvIVX(sv) = I_V(SvNVX(sv));
1760 if (SvNVX(sv) == (NV) SvIVX(sv)
1761 #ifndef NV_PRESERVES_UV
1762 && (((UV)1 << NV_PRESERVES_UV_BITS) >
1763 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
1764 /* Don't flag it as "accurately an integer" if the number
1765 came from a (by definition imprecise) NV operation, and
1766 we're outside the range of NV integer precision */
1769 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
1770 DEBUG_c(PerlIO_printf(Perl_debug_log,
1771 "0x%"UVxf" iv(%g => %"IVdf") (precise)\n",
1777 /* IV not precise. No need to convert from PV, as NV
1778 conversion would already have cached IV if it detected
1779 that PV->IV would be better than PV->NV->IV
1780 flags already correct - don't set public IOK. */
1781 DEBUG_c(PerlIO_printf(Perl_debug_log,
1782 "0x%"UVxf" iv(%g => %"IVdf") (imprecise)\n",
1787 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
1788 but the cast (NV)IV_MIN rounds to a the value less (more
1789 negative) than IV_MIN which happens to be equal to SvNVX ??
1790 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
1791 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
1792 (NV)UVX == NVX are both true, but the values differ. :-(
1793 Hopefully for 2s complement IV_MIN is something like
1794 0x8000000000000000 which will be exact. NWC */
1797 SvUVX(sv) = U_V(SvNVX(sv));
1799 (SvNVX(sv) == (NV) SvUVX(sv))
1800 #ifndef NV_PRESERVES_UV
1801 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
1802 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
1803 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
1804 /* Don't flag it as "accurately an integer" if the number
1805 came from a (by definition imprecise) NV operation, and
1806 we're outside the range of NV integer precision */
1812 DEBUG_c(PerlIO_printf(Perl_debug_log,
1813 "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
1817 return (IV)SvUVX(sv);
1820 else if (SvPOKp(sv) && SvLEN(sv)) {
1821 I32 numtype = looks_like_number(sv);
1823 /* We want to avoid a possible problem when we cache an IV which
1824 may be later translated to an NV, and the resulting NV is not
1825 the translation of the initial data.
1827 This means that if we cache such an IV, we need to cache the
1828 NV as well. Moreover, we trade speed for space, and do not
1829 cache the NV if we are sure it's not needed.
1832 if ((numtype & ~IS_NUMBER_NEG) == IS_NUMBER_TO_INT_BY_ATOL) {
1833 /* The NV may be reconstructed from IV - safe to cache IV,
1834 which may be calculated by atol(). */
1835 if (SvTYPE(sv) < SVt_PVIV)
1836 sv_upgrade(sv, SVt_PVIV);
1838 SvIVX(sv) = Atol(SvPVX(sv));
1842 int save_errno = errno;
1843 /* Is it an integer that we could convert with strtol?
1844 So try it, and if it doesn't set errno then it's pukka.
1845 This should be faster than going atof and then thinking. */
1846 if (((numtype & (IS_NUMBER_TO_INT_BY_STRTOL | IS_NUMBER_NOT_INT))
1847 == IS_NUMBER_TO_INT_BY_STRTOL)
1848 /* && is a sequence point. Without it not sure if I'm trying
1849 to do too much between sequence points and hence going
1851 && ((errno = 0), 1) /* , 1 so always true */
1852 && ((i = Strtol(SvPVX(sv), Null(char**), 10)), 1)
1854 if (SvTYPE(sv) < SVt_PVIV)
1855 sv_upgrade(sv, SVt_PVIV);
1864 /* Hopefully trace flow will optimise this away where possible
1868 /* It wasn't an integer, or it overflowed, or we don't have
1869 strtol. Do things the slow way - check if it's a UV etc. */
1870 d = Atof(SvPVX(sv));
1872 if (SvTYPE(sv) < SVt_PVNV)
1873 sv_upgrade(sv, SVt_PVNV);
1876 if (! numtype && ckWARN(WARN_NUMERIC))
1879 #if defined(USE_LONG_DOUBLE)
1880 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
1881 PTR2UV(sv), SvNVX(sv)));
1883 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%g)\n",
1884 PTR2UV(sv), SvNVX(sv)));
1888 #ifdef NV_PRESERVES_UV
1889 (void)SvIOKp_on(sv);
1891 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
1892 SvIVX(sv) = I_V(SvNVX(sv));
1893 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1896 /* Integer is imprecise. NOK, IOKp */
1898 /* UV will not work better than IV */
1900 if (SvNVX(sv) > (NV)UV_MAX) {
1902 /* Integer is inaccurate. NOK, IOKp, is UV */
1906 SvUVX(sv) = U_V(SvNVX(sv));
1907 /* 0xFFFFFFFFFFFFFFFF not an issue in here */
1908 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
1912 /* Integer is imprecise. NOK, IOKp, is UV */
1918 #else /* NV_PRESERVES_UV */
1919 if (((UV)1 << NV_PRESERVES_UV_BITS) >
1920 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
1921 /* Small enough to preserve all bits. */
1922 (void)SvIOKp_on(sv);
1924 SvIVX(sv) = I_V(SvNVX(sv));
1925 if ((NV)(SvIVX(sv)) == SvNVX(sv))
1927 /* Assumption: first non-preserved integer is < IV_MAX,
1928 this NV is in the preserved range, therefore: */
1929 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
1931 Perl_croak(aTHX_ "sv_2iv assumed (U_V(fabs(SvNVX(sv))) < (UV)IV_MAX) but SvNVX(sv)=%g U_V is 0x%"UVxf", IV_MAX is 0x%"UVxf"\n", SvNVX(sv), U_V(SvNVX(sv)), (UV)IV_MAX);
1933 } else if (sv_2iuv_non_preserve (sv, numtype)
1934 >= IS_NUMBER_OVERFLOW_IV)
1936 #endif /* NV_PRESERVES_UV */
1940 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
1942 if (SvTYPE(sv) < SVt_IV)
1943 /* Typically the caller expects that sv_any is not NULL now. */
1944 sv_upgrade(sv, SVt_IV);
1947 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
1948 PTR2UV(sv),SvIVX(sv)));
1949 return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
1953 Perl_sv_2uv(pTHX_ register SV *sv)
1957 if (SvGMAGICAL(sv)) {
1962 return U_V(SvNVX(sv));
1963 if (SvPOKp(sv) && SvLEN(sv))
1966 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
1967 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
1973 if (SvTHINKFIRST(sv)) {
1976 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
1977 (SvRV(tmpstr) != SvRV(sv)))
1978 return SvUV(tmpstr);
1979 return PTR2UV(SvRV(sv));
1981 if (SvREADONLY(sv) && SvFAKE(sv)) {
1982 sv_force_normal(sv);
1984 if (SvREADONLY(sv) && !SvOK(sv)) {
1985 if (ckWARN(WARN_UNINITIALIZED))
1995 return (UV)SvIVX(sv);
1999 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2000 * without also getting a cached IV/UV from it at the same time
2001 * (ie PV->NV conversion should detect loss of accuracy and cache
2002 * IV or UV at same time to avoid this. */
2003 /* IV-over-UV optimisation - choose to cache IV if possible */
2005 if (SvTYPE(sv) == SVt_NV)
2006 sv_upgrade(sv, SVt_PVNV);
2008 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
2009 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2010 SvIVX(sv) = I_V(SvNVX(sv));
2011 if (SvNVX(sv) == (NV) SvIVX(sv)
2012 #ifndef NV_PRESERVES_UV
2013 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2014 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2015 /* Don't flag it as "accurately an integer" if the number
2016 came from a (by definition imprecise) NV operation, and
2017 we're outside the range of NV integer precision */
2020 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
2021 DEBUG_c(PerlIO_printf(Perl_debug_log,
2022 "0x%"UVxf" uv(%g => %"IVdf") (precise)\n",
2028 /* IV not precise. No need to convert from PV, as NV
2029 conversion would already have cached IV if it detected
2030 that PV->IV would be better than PV->NV->IV
2031 flags already correct - don't set public IOK. */
2032 DEBUG_c(PerlIO_printf(Perl_debug_log,
2033 "0x%"UVxf" uv(%g => %"IVdf") (imprecise)\n",
2038 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2039 but the cast (NV)IV_MIN rounds to a the value less (more
2040 negative) than IV_MIN which happens to be equal to SvNVX ??
2041 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2042 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2043 (NV)UVX == NVX are both true, but the values differ. :-(
2044 Hopefully for 2s complement IV_MIN is something like
2045 0x8000000000000000 which will be exact. NWC */
2048 SvUVX(sv) = U_V(SvNVX(sv));
2050 (SvNVX(sv) == (NV) SvUVX(sv))
2051 #ifndef NV_PRESERVES_UV
2052 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2053 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2054 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2055 /* Don't flag it as "accurately an integer" if the number
2056 came from a (by definition imprecise) NV operation, and
2057 we're outside the range of NV integer precision */
2062 DEBUG_c(PerlIO_printf(Perl_debug_log,
2063 "0x%"UVxf" 2uv(%"UVuf" => %"IVdf") (as unsigned)\n",
2069 else if (SvPOKp(sv) && SvLEN(sv)) {
2070 I32 numtype = looks_like_number(sv);
2072 /* We want to avoid a possible problem when we cache a UV which
2073 may be later translated to an NV, and the resulting NV is not
2074 the translation of the initial data.
2076 This means that if we cache such a UV, we need to cache the
2077 NV as well. Moreover, we trade speed for space, and do not
2078 cache the NV if not needed.
2081 if ((numtype & ~IS_NUMBER_NEG) == IS_NUMBER_TO_INT_BY_ATOL) {
2082 /* The NV may be reconstructed from IV - safe to cache IV,
2083 which may be calculated by atol(). */
2084 if (SvTYPE(sv) < SVt_PVIV)
2085 sv_upgrade(sv, SVt_PVIV);
2087 SvIVX(sv) = Atol(SvPVX(sv));
2091 char *num_begin = SvPVX(sv);
2092 int save_errno = errno;
2094 /* seems that strtoul taking numbers that start with - is
2095 implementation dependant, and can't be relied upon. */
2096 if (numtype & IS_NUMBER_NEG) {
2097 /* Not totally defensive. assumine that looks_like_num
2098 didn't lie about a - sign */
2099 while (isSPACE(*num_begin))
2101 if (*num_begin == '-')
2105 /* Is it an integer that we could convert with strtoul?
2106 So try it, and if it doesn't set errno then it's pukka.
2107 This should be faster than going atof and then thinking. */
2108 if (((numtype & (IS_NUMBER_TO_INT_BY_STRTOL | IS_NUMBER_NOT_INT))
2109 == IS_NUMBER_TO_INT_BY_STRTOL)
2110 && ((errno = 0), 1) /* always true */
2111 && ((u = Strtoul(num_begin, Null(char**), 10)), 1) /* ditto */
2113 /* If known to be negative, check it didn't undeflow IV
2114 XXX possibly we should put more negative values as NVs
2115 direct rather than go via atof below */
2116 && ((numtype & IS_NUMBER_NEG) ? (u <= (UV)IV_MIN) : 1)) {
2119 if (SvTYPE(sv) < SVt_PVIV)
2120 sv_upgrade(sv, SVt_PVIV);
2123 /* If it's negative must use IV.
2124 IV-over-UV optimisation */
2125 if (numtype & IS_NUMBER_NEG) {
2127 } else if (u <= (UV) IV_MAX) {
2130 /* it didn't overflow, and it was positive. */
2139 /* Hopefully trace flow will optimise this away where possible
2143 /* It wasn't an integer, or it overflowed, or we don't have
2144 strtol. Do things the slow way - check if it's a IV etc. */
2145 d = Atof(SvPVX(sv));
2147 if (SvTYPE(sv) < SVt_PVNV)
2148 sv_upgrade(sv, SVt_PVNV);
2151 if (! numtype && ckWARN(WARN_NUMERIC))
2154 #if defined(USE_LONG_DOUBLE)
2155 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%" PERL_PRIgldbl ")\n",
2156 PTR2UV(sv), SvNVX(sv)));
2158 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%g)\n",
2159 PTR2UV(sv), SvNVX(sv)));
2162 #ifdef NV_PRESERVES_UV
2163 (void)SvIOKp_on(sv);
2165 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2166 SvIVX(sv) = I_V(SvNVX(sv));
2167 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2170 /* Integer is imprecise. NOK, IOKp */
2172 /* UV will not work better than IV */
2174 if (SvNVX(sv) > (NV)UV_MAX) {
2176 /* Integer is inaccurate. NOK, IOKp, is UV */
2180 SvUVX(sv) = U_V(SvNVX(sv));
2181 /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2182 NV preservse UV so can do correct comparison. */
2183 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2187 /* Integer is imprecise. NOK, IOKp, is UV */
2192 #else /* NV_PRESERVES_UV */
2193 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2194 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2195 /* Small enough to preserve all bits. */
2196 (void)SvIOKp_on(sv);
2198 SvIVX(sv) = I_V(SvNVX(sv));
2199 if ((NV)(SvIVX(sv)) == SvNVX(sv))
2201 /* Assumption: first non-preserved integer is < IV_MAX,
2202 this NV is in the preserved range, therefore: */
2203 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2205 Perl_croak(aTHX_ "sv_2uv assumed (U_V(fabs(SvNVX(sv))) < (UV)IV_MAX) but SvNVX(sv)=%g U_V is 0x%"UVxf", IV_MAX is 0x%"UVxf"\n", SvNVX(sv), U_V(SvNVX(sv)), (UV)IV_MAX);
2208 sv_2iuv_non_preserve (sv, numtype);
2209 #endif /* NV_PRESERVES_UV */
2214 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2215 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2218 if (SvTYPE(sv) < SVt_IV)
2219 /* Typically the caller expects that sv_any is not NULL now. */
2220 sv_upgrade(sv, SVt_IV);
2224 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2225 PTR2UV(sv),SvUVX(sv)));
2226 return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2230 Perl_sv_2nv(pTHX_ register SV *sv)
2234 if (SvGMAGICAL(sv)) {
2238 if (SvPOKp(sv) && SvLEN(sv)) {
2239 if (ckWARN(WARN_NUMERIC) && !SvIOKp(sv) && !looks_like_number(sv))
2241 return Atof(SvPVX(sv));
2245 return (NV)SvUVX(sv);
2247 return (NV)SvIVX(sv);
2250 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2251 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2257 if (SvTHINKFIRST(sv)) {
2260 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
2261 (SvRV(tmpstr) != SvRV(sv)))
2262 return SvNV(tmpstr);
2263 return PTR2NV(SvRV(sv));
2265 if (SvREADONLY(sv) && SvFAKE(sv)) {
2266 sv_force_normal(sv);
2268 if (SvREADONLY(sv) && !SvOK(sv)) {
2269 if (ckWARN(WARN_UNINITIALIZED))
2274 if (SvTYPE(sv) < SVt_NV) {
2275 if (SvTYPE(sv) == SVt_IV)
2276 sv_upgrade(sv, SVt_PVNV);
2278 sv_upgrade(sv, SVt_NV);
2279 #if defined(USE_LONG_DOUBLE)
2281 STORE_NUMERIC_LOCAL_SET_STANDARD();
2282 PerlIO_printf(Perl_debug_log,
2283 "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2284 PTR2UV(sv), SvNVX(sv));
2285 RESTORE_NUMERIC_LOCAL();
2289 STORE_NUMERIC_LOCAL_SET_STANDARD();
2290 PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%g)\n",
2291 PTR2UV(sv), SvNVX(sv));
2292 RESTORE_NUMERIC_LOCAL();
2296 else if (SvTYPE(sv) < SVt_PVNV)
2297 sv_upgrade(sv, SVt_PVNV);
2299 (!SvPOKp(sv) || !strchr(SvPVX(sv),'.') || !looks_like_number(sv)))
2301 SvNVX(sv) = SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv);
2302 #ifdef NV_PRESERVES_UV
2305 /* Only set the public NV OK flag if this NV preserves the IV */
2306 /* Check it's not 0xFFFFFFFFFFFFFFFF */
2307 if (SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2308 : (SvIVX(sv) == I_V(SvNVX(sv))))
2314 else if (SvPOKp(sv) && SvLEN(sv)) {
2315 if (ckWARN(WARN_NUMERIC) && !SvIOKp(sv) && !looks_like_number(sv))
2317 SvNVX(sv) = Atof(SvPVX(sv));
2318 #ifdef NV_PRESERVES_UV
2321 /* Only set the public NV OK flag if this NV preserves the value in
2322 the PV at least as well as an IV/UV would.
2323 Not sure how to do this 100% reliably. */
2324 /* if that shift count is out of range then Configure's test is
2325 wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2327 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2328 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv)))
2329 SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2330 else if (SvNVX(sv) < (NV)IV_MIN || SvNVX(sv) > (NV)UV_MAX) {
2331 /* Definitely too large/small to fit in an integer, so no loss
2332 of precision going to integer in the future via NV */
2335 /* Is it something we can run through strtol etc (ie no
2336 trailing exponent part)? */
2337 int numtype = looks_like_number(sv);
2338 /* XXX probably should cache this if called above */
2341 (IS_NUMBER_TO_INT_BY_ATOL | IS_NUMBER_TO_INT_BY_STRTOL))) {
2342 /* Can't use strtol etc to convert this string, so don't try */
2345 sv_2inuv_non_preserve (sv, numtype);
2347 #endif /* NV_PRESERVES_UV */
2350 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
2352 if (SvTYPE(sv) < SVt_NV)
2353 /* Typically the caller expects that sv_any is not NULL now. */
2354 /* XXX Ilya implies that this is a bug in callers that assume this
2355 and ideally should be fixed. */
2356 sv_upgrade(sv, SVt_NV);
2359 #if defined(USE_LONG_DOUBLE)
2361 STORE_NUMERIC_LOCAL_SET_STANDARD();
2362 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2363 PTR2UV(sv), SvNVX(sv));
2364 RESTORE_NUMERIC_LOCAL();
2368 STORE_NUMERIC_LOCAL_SET_STANDARD();
2369 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%g)\n",
2370 PTR2UV(sv), SvNVX(sv));
2371 RESTORE_NUMERIC_LOCAL();
2378 S_asIV(pTHX_ SV *sv)
2380 I32 numtype = looks_like_number(sv);
2383 if (numtype & IS_NUMBER_TO_INT_BY_ATOL)
2384 return Atol(SvPVX(sv));
2386 if (ckWARN(WARN_NUMERIC))
2389 d = Atof(SvPVX(sv));
2394 S_asUV(pTHX_ SV *sv)
2396 I32 numtype = looks_like_number(sv);
2399 if (numtype & IS_NUMBER_TO_INT_BY_ATOL)
2400 return Strtoul(SvPVX(sv), Null(char**), 10);
2403 if (ckWARN(WARN_NUMERIC))
2406 return U_V(Atof(SvPVX(sv)));
2410 * Returns a combination of (advisory only - can get false negatives)
2411 * IS_NUMBER_TO_INT_BY_ATOL, IS_NUMBER_TO_INT_BY_ATOF
2412 * IS_NUMBER_LONGER_THAN_IV_MAX, IS_NUMBER_AS_LONG_AS_IV_MAX
2413 * IS_NUMBER_NOT_INT, IS_NUMBER_NEG, IS_NUMBER_INFINITY
2414 * 0 if does not look like number.
2416 * (atol and strtol stop when they hit a decimal point. strtol will return
2417 * LONG_MAX and LONG_MIN when given out of range values. ANSI says they should
2418 * do this, and vendors have had 11 years to get it right.
2419 * However, will try to make it still work with only atol
2421 * IS_NUMBER_TO_INT_BY_ATOL 123456789 or 123456789.3 definitely < IV_MAX
2422 * IS_NUMBER_TO_INT_BY_STRTOL 123456789 or 123456789.3 if digits = IV_MAX
2423 * IS_NUMBER_TO_INT_BY_ATOF 123456789e0 or >> IV_MAX
2424 * IS_NUMBER_LONGER_THAN_IV_MAX lots of digits, don't bother with atol
2425 * IS_NUMBER_AS_LONG_AS_IV_MAX atol might hit LONG_MAX, might not.
2426 * IS_NUMBER_NOT_INT saw "." or "e"
2428 * IS_NUMBER_INFINITY
2432 =for apidoc looks_like_number
2434 Test if an the content of an SV looks like a number (or is a
2435 number). C<Inf> and C<Infinity> are treated as numbers (so will not
2436 issue a non-numeric warning), even if your atof() doesn't grok them.
2442 Perl_looks_like_number(pTHX_ SV *sv)
2445 register char *send;
2446 register char *sbegin;
2447 register char *nbegin;
2451 #ifdef USE_LOCALE_NUMERIC
2452 bool specialradix = FALSE;
2459 else if (SvPOKp(sv))
2460 sbegin = SvPV(sv, len);
2463 send = sbegin + len;
2470 numtype = IS_NUMBER_NEG;
2477 * we return IS_NUMBER_TO_INT_BY_ATOL if the number can converted to
2478 * integer with atol() without overflow, IS_NUMBER_TO_INT_BY_STRTOL if
2479 * possibly slightly larger than max int, IS_NUMBER_TO_INT_BY_ATOF if you
2480 * will need (int)atof().
2483 /* next must be digit or the radix separator or beginning of infinity */
2487 } while (isDIGIT(*s));
2489 /* Aaargh. long long really is irritating.
2490 In the gospel according to ANSI 1989, it is an axiom that "long"
2491 is the longest integer type, and that if you don't know how long
2492 something is you can cast it to long, and nothing will be lost
2493 (except possibly speed of execution if long is slower than the
2495 Now, one can't be sure if the old rules apply, or long long
2496 (or some other newfangled thing) is actually longer than the
2497 (formerly) longest thing.
2499 /* This lot will work for 64 bit *as long as* either
2500 either long is 64 bit
2501 or we can find both strtol/strtoq and strtoul/strtouq
2502 If not, we really should refuse to let the user use 64 bit IVs
2503 By "64 bit" I really mean IVs that don't get preserved by NVs
2504 It also should work for 128 bit IVs. Can any lend me a machine to
2507 if (s - nbegin > TYPE_DIGITS(UV)) /* Cannot cache ato[ul]() */
2508 numtype |= IS_NUMBER_TO_INT_BY_ATOF | IS_NUMBER_LONGER_THAN_IV_MAX;
2509 else if (s - nbegin < BIT_DIGITS(((sizeof (IV)>sizeof (long))
2510 ? sizeof(long) : sizeof (IV))*8-1))
2511 numtype |= IS_NUMBER_TO_INT_BY_ATOL;
2513 /* Can't be sure either way. (For 64 bit UV, 63 bit IV is 1 decimal
2514 digit less (IV_MAX= 9223372036854775807,
2515 UV_MAX= 18446744073709551615) so be cautious */
2516 numtype |= IS_NUMBER_TO_INT_BY_STRTOL | IS_NUMBER_AS_LONG_AS_IV_MAX;
2519 #ifdef USE_LOCALE_NUMERIC
2520 || (specialradix = IS_NUMERIC_RADIX(s))
2523 #ifdef USE_LOCALE_NUMERIC
2525 s += SvCUR(PL_numeric_radix);
2529 numtype |= IS_NUMBER_NOT_INT;
2530 while (isDIGIT(*s)) /* optional digits after the radix */
2535 #ifdef USE_LOCALE_NUMERIC
2536 || (specialradix = IS_NUMERIC_RADIX(s))
2539 #ifdef USE_LOCALE_NUMERIC
2541 s += SvCUR(PL_numeric_radix);
2545 numtype |= IS_NUMBER_TO_INT_BY_ATOL | IS_NUMBER_NOT_INT;
2546 /* no digits before the radix means we need digits after it */
2550 } while (isDIGIT(*s));
2555 else if (*s == 'I' || *s == 'i') {
2556 s++; if (*s != 'N' && *s != 'n') return 0;
2557 s++; if (*s != 'F' && *s != 'f') return 0;
2558 s++; if (*s == 'I' || *s == 'i') {
2559 s++; if (*s != 'N' && *s != 'n') return 0;
2560 s++; if (*s != 'I' && *s != 'i') return 0;
2561 s++; if (*s != 'T' && *s != 't') return 0;
2562 s++; if (*s != 'Y' && *s != 'y') return 0;
2571 numtype = (numtype & IS_NUMBER_NEG) /* Keep track of sign */
2572 | IS_NUMBER_INFINITY | IS_NUMBER_NOT_INT;
2574 /* we can have an optional exponent part */
2575 if (*s == 'e' || *s == 'E') {
2576 numtype &= IS_NUMBER_NEG;
2577 numtype |= IS_NUMBER_TO_INT_BY_ATOF | IS_NUMBER_NOT_INT;
2579 if (*s == '+' || *s == '-')
2584 } while (isDIGIT(*s));
2594 if (len == 10 && memEQ(sbegin, "0 but true", 10))
2595 return IS_NUMBER_TO_INT_BY_ATOL;
2600 Perl_sv_2pv_nolen(pTHX_ register SV *sv)
2603 return sv_2pv(sv, &n_a);
2606 /* We assume that buf is at least TYPE_CHARS(UV) long. */
2608 uiv_2buf(char *buf, IV iv, UV uv, int is_uv, char **peob)
2610 char *ptr = buf + TYPE_CHARS(UV);
2624 *--ptr = '0' + (uv % 10);
2633 Perl_sv_2pv(pTHX_ register SV *sv, STRLEN *lp)
2638 char tbuf[64]; /* Must fit sprintf/Gconvert of longest IV/NV */
2639 char *tmpbuf = tbuf;
2645 if (SvGMAGICAL(sv)) {
2653 (void)sprintf(tmpbuf,"%"UVuf, (UV)SvUVX(sv));
2655 (void)sprintf(tmpbuf,"%"IVdf, (IV)SvIVX(sv));
2660 Gconvert(SvNVX(sv), NV_DIG, 0, tmpbuf);
2665 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2666 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2673 if (SvTHINKFIRST(sv)) {
2676 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,string)) &&
2677 (SvRV(tmpstr) != SvRV(sv)))
2678 return SvPV(tmpstr,*lp);
2685 switch (SvTYPE(sv)) {
2687 if ( ((SvFLAGS(sv) &
2688 (SVs_OBJECT|SVf_OK|SVs_GMG|SVs_SMG|SVs_RMG))
2689 == (SVs_OBJECT|SVs_RMG))
2690 && strEQ(s=HvNAME(SvSTASH(sv)), "Regexp")
2691 && (mg = mg_find(sv, 'r'))) {
2692 regexp *re = (regexp *)mg->mg_obj;
2695 char *fptr = "msix";
2700 U16 reganch = (re->reganch & PMf_COMPILETIME) >> 12;
2702 while((ch = *fptr++)) {
2704 reflags[left++] = ch;
2707 reflags[right--] = ch;
2712 reflags[left] = '-';
2716 mg->mg_len = re->prelen + 4 + left;
2717 New(616, mg->mg_ptr, mg->mg_len + 1 + left, char);
2718 Copy("(?", mg->mg_ptr, 2, char);
2719 Copy(reflags, mg->mg_ptr+2, left, char);
2720 Copy(":", mg->mg_ptr+left+2, 1, char);
2721 Copy(re->precomp, mg->mg_ptr+3+left, re->prelen, char);
2722 mg->mg_ptr[mg->mg_len - 1] = ')';
2723 mg->mg_ptr[mg->mg_len] = 0;
2725 PL_reginterp_cnt += re->program[0].next_off;
2737 case SVt_PVBM: if (SvROK(sv))
2740 s = "SCALAR"; break;
2741 case SVt_PVLV: s = "LVALUE"; break;
2742 case SVt_PVAV: s = "ARRAY"; break;
2743 case SVt_PVHV: s = "HASH"; break;
2744 case SVt_PVCV: s = "CODE"; break;
2745 case SVt_PVGV: s = "GLOB"; break;
2746 case SVt_PVFM: s = "FORMAT"; break;
2747 case SVt_PVIO: s = "IO"; break;
2748 default: s = "UNKNOWN"; break;
2752 Perl_sv_setpvf(aTHX_ tsv, "%s=%s", HvNAME(SvSTASH(sv)), s);
2755 Perl_sv_catpvf(aTHX_ tsv, "(0x%"UVxf")", PTR2UV(sv));
2761 if (SvREADONLY(sv) && !SvOK(sv)) {
2762 if (ckWARN(WARN_UNINITIALIZED))
2768 if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
2769 /* I'm assuming that if both IV and NV are equally valid then
2770 converting the IV is going to be more efficient */
2771 U32 isIOK = SvIOK(sv);
2772 U32 isUIOK = SvIsUV(sv);
2773 char buf[TYPE_CHARS(UV)];
2776 if (SvTYPE(sv) < SVt_PVIV)
2777 sv_upgrade(sv, SVt_PVIV);
2779 ptr = uiv_2buf(buf, 0, SvUVX(sv), 1, &ebuf);
2781 ptr = uiv_2buf(buf, SvIVX(sv), 0, 0, &ebuf);
2782 SvGROW(sv, ebuf - ptr + 1); /* inlined from sv_setpvn */
2783 Move(ptr,SvPVX(sv),ebuf - ptr,char);
2784 SvCUR_set(sv, ebuf - ptr);
2794 else if (SvNOKp(sv)) {
2795 if (SvTYPE(sv) < SVt_PVNV)
2796 sv_upgrade(sv, SVt_PVNV);
2797 /* The +20 is pure guesswork. Configure test needed. --jhi */
2798 SvGROW(sv, NV_DIG + 20);
2800 olderrno = errno; /* some Xenix systems wipe out errno here */
2802 if (SvNVX(sv) == 0.0)
2803 (void)strcpy(s,"0");
2807 Gconvert(SvNVX(sv), NV_DIG, 0, s);
2810 #ifdef FIXNEGATIVEZERO
2811 if (*s == '-' && s[1] == '0' && !s[2])
2821 if (ckWARN(WARN_UNINITIALIZED)
2822 && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
2825 if (SvTYPE(sv) < SVt_PV)
2826 /* Typically the caller expects that sv_any is not NULL now. */
2827 sv_upgrade(sv, SVt_PV);
2830 *lp = s - SvPVX(sv);
2833 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
2834 PTR2UV(sv),SvPVX(sv)));
2838 if (SvROK(sv)) { /* XXX Skip this when sv_pvn_force calls */
2839 /* Sneaky stuff here */
2843 tsv = newSVpv(tmpbuf, 0);
2859 len = strlen(tmpbuf);
2861 #ifdef FIXNEGATIVEZERO
2862 if (len == 2 && t[0] == '-' && t[1] == '0') {
2867 (void)SvUPGRADE(sv, SVt_PV);
2869 s = SvGROW(sv, len + 1);
2878 Perl_sv_2pvbyte_nolen(pTHX_ register SV *sv)
2881 return sv_2pvbyte(sv, &n_a);
2885 Perl_sv_2pvbyte(pTHX_ register SV *sv, STRLEN *lp)
2887 sv_utf8_downgrade(sv,0);
2888 return SvPV(sv,*lp);
2892 Perl_sv_2pvutf8_nolen(pTHX_ register SV *sv)
2895 return sv_2pvutf8(sv, &n_a);
2899 Perl_sv_2pvutf8(pTHX_ register SV *sv, STRLEN *lp)
2901 sv_utf8_upgrade(sv);
2902 return SvPV(sv,*lp);
2905 /* This function is only called on magical items */
2907 Perl_sv_2bool(pTHX_ register SV *sv)
2916 if (SvAMAGIC(sv) && (tmpsv=AMG_CALLun(sv,bool_)) &&
2917 (SvRV(tmpsv) != SvRV(sv)))
2918 return SvTRUE(tmpsv);
2919 return SvRV(sv) != 0;
2922 register XPV* Xpvtmp;
2923 if ((Xpvtmp = (XPV*)SvANY(sv)) &&
2924 (*Xpvtmp->xpv_pv > '0' ||
2925 Xpvtmp->xpv_cur > 1 ||
2926 (Xpvtmp->xpv_cur && *Xpvtmp->xpv_pv != '0')))
2933 return SvIVX(sv) != 0;
2936 return SvNVX(sv) != 0.0;
2944 =for apidoc sv_utf8_upgrade
2946 Convert the PV of an SV to its UTF8-encoded form.
2947 Forces the SV to string form it it is not already.
2948 Always sets the SvUTF8 flag to avoid future validity checks even
2949 if all the bytes have hibit clear.
2955 Perl_sv_utf8_upgrade(pTHX_ register SV *sv)
2964 (void) SvPV_nolen(sv);
2969 if (SvREADONLY(sv) && SvFAKE(sv)) {
2970 sv_force_normal(sv);
2973 /* This function could be much more efficient if we had a FLAG in SVs
2974 * to signal if there are any hibit chars in the PV.
2975 * Given that there isn't make loop fast as possible
2977 s = (U8 *) SvPVX(sv);
2978 e = (U8 *) SvEND(sv);
2982 if ((hibit = !NATIVE_IS_INVARIANT(ch)))
2988 len = SvCUR(sv) + 1; /* Plus the \0 */
2989 SvPVX(sv) = (char*)bytes_to_utf8((U8*)s, &len);
2990 SvCUR(sv) = len - 1;
2992 Safefree(s); /* No longer using what was there before. */
2993 SvLEN(sv) = len; /* No longer know the real size. */
2995 /* Mark as UTF-8 even if no hibit - saves scanning loop */
3001 =for apidoc sv_utf8_downgrade
3003 Attempt to convert the PV of an SV from UTF8-encoded to byte encoding.
3004 This may not be possible if the PV contains non-byte encoding characters;
3005 if this is the case, either returns false or, if C<fail_ok> is not
3012 Perl_sv_utf8_downgrade(pTHX_ register SV* sv, bool fail_ok)
3014 if (SvPOK(sv) && SvUTF8(sv)) {
3019 if (SvREADONLY(sv) && SvFAKE(sv))
3020 sv_force_normal(sv);
3021 s = (U8 *) SvPV(sv, len);
3022 if (!utf8_to_bytes(s, &len)) {
3025 #ifdef USE_BYTES_DOWNGRADES
3028 U8 *e = (U8 *) SvEND(sv);
3031 UV ch = utf8n_to_uvchr(s,(e-s),&len,0);
3032 if (first && ch > 255) {
3034 Perl_warner(aTHX_ WARN_UTF8, "Wide character in byte %s",
3035 PL_op_desc[PL_op->op_type]);
3037 Perl_warner(aTHX_ WARN_UTF8, "Wide character in byte");
3044 len = (d - (U8 *) SvPVX(sv));
3049 Perl_croak(aTHX_ "Wide character in %s",
3050 PL_op_desc[PL_op->op_type]);
3052 Perl_croak(aTHX_ "Wide character");
3063 =for apidoc sv_utf8_encode
3065 Convert the PV of an SV to UTF8-encoded, but then turn off the C<SvUTF8>
3066 flag so that it looks like octets again. Used as a building block
3067 for encode_utf8 in Encode.xs
3073 Perl_sv_utf8_encode(pTHX_ register SV *sv)
3075 (void) sv_utf8_upgrade(sv);
3080 =for apidoc sv_utf8_decode
3082 Convert the octets in the PV from UTF-8 to chars. Scan for validity and then
3083 turn of SvUTF8 if needed so that we see characters. Used as a building block
3084 for decode_utf8 in Encode.xs
3092 Perl_sv_utf8_decode(pTHX_ register SV *sv)
3098 /* The octets may have got themselves encoded - get them back as bytes */
3099 if (!sv_utf8_downgrade(sv, TRUE))
3102 /* it is actually just a matter of turning the utf8 flag on, but
3103 * we want to make sure everything inside is valid utf8 first.
3105 c = (U8 *) SvPVX(sv);
3106 if (!is_utf8_string(c, SvCUR(sv)+1))
3108 e = (U8 *) SvEND(sv);
3111 if (!UTF8_IS_INVARIANT(ch)) {
3121 /* Note: sv_setsv() should not be called with a source string that needs
3122 * to be reused, since it may destroy the source string if it is marked
3127 =for apidoc sv_setsv
3129 Copies the contents of the source SV C<ssv> into the destination SV C<dsv>.
3130 The source SV may be destroyed if it is mortal. Does not handle 'set'
3131 magic. See the macro forms C<SvSetSV>, C<SvSetSV_nosteal> and
3138 Perl_sv_setsv(pTHX_ SV *dstr, register SV *sstr)
3140 register U32 sflags;
3146 SV_CHECK_THINKFIRST(dstr);
3148 sstr = &PL_sv_undef;
3149 stype = SvTYPE(sstr);
3150 dtype = SvTYPE(dstr);
3154 /* There's a lot of redundancy below but we're going for speed here */
3159 if (dtype != SVt_PVGV) {
3160 (void)SvOK_off(dstr);
3168 sv_upgrade(dstr, SVt_IV);
3171 sv_upgrade(dstr, SVt_PVNV);
3175 sv_upgrade(dstr, SVt_PVIV);
3178 (void)SvIOK_only(dstr);
3179 SvIVX(dstr) = SvIVX(sstr);
3182 if (SvTAINTED(sstr))
3193 sv_upgrade(dstr, SVt_NV);
3198 sv_upgrade(dstr, SVt_PVNV);
3201 SvNVX(dstr) = SvNVX(sstr);
3202 (void)SvNOK_only(dstr);
3203 if (SvTAINTED(sstr))
3211 sv_upgrade(dstr, SVt_RV);
3212 else if (dtype == SVt_PVGV &&
3213 SvTYPE(SvRV(sstr)) == SVt_PVGV) {
3216 if (GvIMPORTED(dstr) != GVf_IMPORTED
3217 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3219 GvIMPORTED_on(dstr);
3230 sv_upgrade(dstr, SVt_PV);
3233 if (dtype < SVt_PVIV)
3234 sv_upgrade(dstr, SVt_PVIV);
3237 if (dtype < SVt_PVNV)
3238 sv_upgrade(dstr, SVt_PVNV);
3245 Perl_croak(aTHX_ "Bizarre copy of %s in %s", sv_reftype(sstr, 0),
3246 PL_op_name[PL_op->op_type]);
3248 Perl_croak(aTHX_ "Bizarre copy of %s", sv_reftype(sstr, 0));
3252 if (dtype <= SVt_PVGV) {
3254 if (dtype != SVt_PVGV) {
3255 char *name = GvNAME(sstr);
3256 STRLEN len = GvNAMELEN(sstr);
3257 sv_upgrade(dstr, SVt_PVGV);
3258 sv_magic(dstr, dstr, '*', Nullch, 0);
3259 GvSTASH(dstr) = (HV*)SvREFCNT_inc(GvSTASH(sstr));
3260 GvNAME(dstr) = savepvn(name, len);
3261 GvNAMELEN(dstr) = len;
3262 SvFAKE_on(dstr); /* can coerce to non-glob */
3264 /* ahem, death to those who redefine active sort subs */
3265 else if (PL_curstackinfo->si_type == PERLSI_SORT
3266 && GvCV(dstr) && PL_sortcop == CvSTART(GvCV(dstr)))
3267 Perl_croak(aTHX_ "Can't redefine active sort subroutine %s",
3270 #ifdef GV_SHARED_CHECK
3271 if (GvSHARED((GV*)dstr)) {
3272 Perl_croak(aTHX_ PL_no_modify);
3276 (void)SvOK_off(dstr);
3277 GvINTRO_off(dstr); /* one-shot flag */
3279 GvGP(dstr) = gp_ref(GvGP(sstr));
3280 if (SvTAINTED(sstr))
3282 if (GvIMPORTED(dstr) != GVf_IMPORTED
3283 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3285 GvIMPORTED_on(dstr);
3293 if (SvGMAGICAL(sstr)) {
3295 if (SvTYPE(sstr) != stype) {
3296 stype = SvTYPE(sstr);
3297 if (stype == SVt_PVGV && dtype <= SVt_PVGV)
3301 if (stype == SVt_PVLV)
3302 (void)SvUPGRADE(dstr, SVt_PVNV);
3304 (void)SvUPGRADE(dstr, stype);
3307 sflags = SvFLAGS(sstr);
3309 if (sflags & SVf_ROK) {
3310 if (dtype >= SVt_PV) {
3311 if (dtype == SVt_PVGV) {
3312 SV *sref = SvREFCNT_inc(SvRV(sstr));
3314 int intro = GvINTRO(dstr);
3316 #ifdef GV_SHARED_CHECK
3317 if (GvSHARED((GV*)dstr)) {
3318 Perl_croak(aTHX_ PL_no_modify);
3325 GvINTRO_off(dstr); /* one-shot flag */
3326 Newz(602,gp, 1, GP);
3327 GvGP(dstr) = gp_ref(gp);
3328 GvSV(dstr) = NEWSV(72,0);
3329 GvLINE(dstr) = CopLINE(PL_curcop);
3330 GvEGV(dstr) = (GV*)dstr;
3333 switch (SvTYPE(sref)) {
3336 SAVESPTR(GvAV(dstr));
3338 dref = (SV*)GvAV(dstr);
3339 GvAV(dstr) = (AV*)sref;
3340 if (!GvIMPORTED_AV(dstr)
3341 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3343 GvIMPORTED_AV_on(dstr);
3348 SAVESPTR(GvHV(dstr));
3350 dref = (SV*)GvHV(dstr);
3351 GvHV(dstr) = (HV*)sref;
3352 if (!GvIMPORTED_HV(dstr)
3353 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3355 GvIMPORTED_HV_on(dstr);
3360 if (GvCVGEN(dstr) && GvCV(dstr) != (CV*)sref) {
3361 SvREFCNT_dec(GvCV(dstr));
3362 GvCV(dstr) = Nullcv;
3363 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3364 PL_sub_generation++;
3366 SAVESPTR(GvCV(dstr));
3369 dref = (SV*)GvCV(dstr);
3370 if (GvCV(dstr) != (CV*)sref) {
3371 CV* cv = GvCV(dstr);
3373 if (!GvCVGEN((GV*)dstr) &&
3374 (CvROOT(cv) || CvXSUB(cv)))
3376 /* ahem, death to those who redefine
3377 * active sort subs */
3378 if (PL_curstackinfo->si_type == PERLSI_SORT &&
3379 PL_sortcop == CvSTART(cv))
3381 "Can't redefine active sort subroutine %s",
3382 GvENAME((GV*)dstr));
3383 /* Redefining a sub - warning is mandatory if
3384 it was a const and its value changed. */
3385 if (ckWARN(WARN_REDEFINE)
3387 && (!CvCONST((CV*)sref)
3388 || sv_cmp(cv_const_sv(cv),
3389 cv_const_sv((CV*)sref)))))
3391 Perl_warner(aTHX_ WARN_REDEFINE,
3393 ? "Constant subroutine %s redefined"
3394 : "Subroutine %s redefined",
3395 GvENAME((GV*)dstr));
3398 cv_ckproto(cv, (GV*)dstr,
3399 SvPOK(sref) ? SvPVX(sref) : Nullch);
3401 GvCV(dstr) = (CV*)sref;
3402 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3403 GvASSUMECV_on(dstr);
3404 PL_sub_generation++;
3406 if (!GvIMPORTED_CV(dstr)
3407 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3409 GvIMPORTED_CV_on(dstr);
3414 SAVESPTR(GvIOp(dstr));
3416 dref = (SV*)GvIOp(dstr);
3417 GvIOp(dstr) = (IO*)sref;
3421 SAVESPTR(GvFORM(dstr));
3423 dref = (SV*)GvFORM(dstr);
3424 GvFORM(dstr) = (CV*)sref;
3428 SAVESPTR(GvSV(dstr));
3430 dref = (SV*)GvSV(dstr);
3432 if (!GvIMPORTED_SV(dstr)
3433 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3435 GvIMPORTED_SV_on(dstr);
3443 if (SvTAINTED(sstr))
3448 (void)SvOOK_off(dstr); /* backoff */
3450 Safefree(SvPVX(dstr));
3451 SvLEN(dstr)=SvCUR(dstr)=0;
3454 (void)SvOK_off(dstr);
3455 SvRV(dstr) = SvREFCNT_inc(SvRV(sstr));
3457 if (sflags & SVp_NOK) {
3459 /* Only set the public OK flag if the source has public OK. */
3460 if (sflags & SVf_NOK)
3461 SvFLAGS(dstr) |= SVf_NOK;
3462 SvNVX(dstr) = SvNVX(sstr);
3464 if (sflags & SVp_IOK) {
3465 (void)SvIOKp_on(dstr);
3466 if (sflags & SVf_IOK)
3467 SvFLAGS(dstr) |= SVf_IOK;
3468 if (sflags & SVf_IVisUV)
3470 SvIVX(dstr) = SvIVX(sstr);
3472 if (SvAMAGIC(sstr)) {
3476 else if (sflags & SVp_POK) {
3479 * Check to see if we can just swipe the string. If so, it's a
3480 * possible small lose on short strings, but a big win on long ones.
3481 * It might even be a win on short strings if SvPVX(dstr)
3482 * has to be allocated and SvPVX(sstr) has to be freed.
3485 if (SvTEMP(sstr) && /* slated for free anyway? */
3486 SvREFCNT(sstr) == 1 && /* and no other references to it? */
3487 !(sflags & SVf_OOK) && /* and not involved in OOK hack? */
3488 SvLEN(sstr) && /* and really is a string */
3489 !(PL_op && PL_op->op_type == OP_AASSIGN)) /* and won't be needed again, potentially */
3491 if (SvPVX(dstr)) { /* we know that dtype >= SVt_PV */
3493 SvFLAGS(dstr) &= ~SVf_OOK;
3494 Safefree(SvPVX(dstr) - SvIVX(dstr));
3496 else if (SvLEN(dstr))
3497 Safefree(SvPVX(dstr));
3499 (void)SvPOK_only(dstr);
3500 SvPV_set(dstr, SvPVX(sstr));
3501 SvLEN_set(dstr, SvLEN(sstr));
3502 SvCUR_set(dstr, SvCUR(sstr));
3505 (void)SvOK_off(sstr); /* NOTE: nukes most SvFLAGS on sstr */
3506 SvPV_set(sstr, Nullch);
3511 else { /* have to copy actual string */
3512 STRLEN len = SvCUR(sstr);
3514 SvGROW(dstr, len + 1); /* inlined from sv_setpvn */
3515 Move(SvPVX(sstr),SvPVX(dstr),len,char);
3516 SvCUR_set(dstr, len);
3517 *SvEND(dstr) = '\0';
3518 (void)SvPOK_only(dstr);
3520 if (sflags & SVf_UTF8)
3523 if (sflags & SVp_NOK) {
3525 if (sflags & SVf_NOK)
3526 SvFLAGS(dstr) |= SVf_NOK;
3527 SvNVX(dstr) = SvNVX(sstr);
3529 if (sflags & SVp_IOK) {
3530 (void)SvIOKp_on(dstr);
3531 if (sflags & SVf_IOK)
3532 SvFLAGS(dstr) |= SVf_IOK;
3533 if (sflags & SVf_IVisUV)
3535 SvIVX(dstr) = SvIVX(sstr);
3538 else if (sflags & SVp_IOK) {
3539 if (sflags & SVf_IOK)
3540 (void)SvIOK_only(dstr);
3542 (void)SvOK_off(dstr);
3543 (void)SvIOKp_on(dstr);
3545 /* XXXX Do we want to set IsUV for IV(ROK)? Be extra safe... */
3546 if (sflags & SVf_IVisUV)
3548 SvIVX(dstr) = SvIVX(sstr);
3549 if (sflags & SVp_NOK) {
3550 if (sflags & SVf_NOK)
3551 (void)SvNOK_on(dstr);
3553 (void)SvNOKp_on(dstr);
3554 SvNVX(dstr) = SvNVX(sstr);
3557 else if (sflags & SVp_NOK) {
3558 if (sflags & SVf_NOK)
3559 (void)SvNOK_only(dstr);
3561 (void)SvOK_off(dstr);
3564 SvNVX(dstr) = SvNVX(sstr);
3567 if (dtype == SVt_PVGV) {
3568 if (ckWARN(WARN_MISC))
3569 Perl_warner(aTHX_ WARN_MISC, "Undefined value assigned to typeglob");
3572 (void)SvOK_off(dstr);
3574 if (SvTAINTED(sstr))
3579 =for apidoc sv_setsv_mg
3581 Like C<sv_setsv>, but also handles 'set' magic.
3587 Perl_sv_setsv_mg(pTHX_ SV *dstr, register SV *sstr)
3589 sv_setsv(dstr,sstr);
3594 =for apidoc sv_setpvn
3596 Copies a string into an SV. The C<len> parameter indicates the number of
3597 bytes to be copied. Does not handle 'set' magic. See C<sv_setpvn_mg>.
3603 Perl_sv_setpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3605 register char *dptr;
3607 SV_CHECK_THINKFIRST(sv);
3613 /* len is STRLEN which is unsigned, need to copy to signed */
3617 (void)SvUPGRADE(sv, SVt_PV);
3619 SvGROW(sv, len + 1);
3621 Move(ptr,dptr,len,char);
3624 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3629 =for apidoc sv_setpvn_mg
3631 Like C<sv_setpvn>, but also handles 'set' magic.
3637 Perl_sv_setpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3639 sv_setpvn(sv,ptr,len);
3644 =for apidoc sv_setpv
3646 Copies a string into an SV. The string must be null-terminated. Does not
3647 handle 'set' magic. See C<sv_setpv_mg>.
3653 Perl_sv_setpv(pTHX_ register SV *sv, register const char *ptr)
3655 register STRLEN len;
3657 SV_CHECK_THINKFIRST(sv);
3663 (void)SvUPGRADE(sv, SVt_PV);
3665 SvGROW(sv, len + 1);
3666 Move(ptr,SvPVX(sv),len+1,char);
3668 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3673 =for apidoc sv_setpv_mg
3675 Like C<sv_setpv>, but also handles 'set' magic.
3681 Perl_sv_setpv_mg(pTHX_ register SV *sv, register const char *ptr)
3688 =for apidoc sv_usepvn
3690 Tells an SV to use C<ptr> to find its string value. Normally the string is
3691 stored inside the SV but sv_usepvn allows the SV to use an outside string.
3692 The C<ptr> should point to memory that was allocated by C<malloc>. The
3693 string length, C<len>, must be supplied. This function will realloc the
3694 memory pointed to by C<ptr>, so that pointer should not be freed or used by
3695 the programmer after giving it to sv_usepvn. Does not handle 'set' magic.
3696 See C<sv_usepvn_mg>.
3702 Perl_sv_usepvn(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
3704 SV_CHECK_THINKFIRST(sv);
3705 (void)SvUPGRADE(sv, SVt_PV);
3710 (void)SvOOK_off(sv);
3711 if (SvPVX(sv) && SvLEN(sv))
3712 Safefree(SvPVX(sv));
3713 Renew(ptr, len+1, char);
3716 SvLEN_set(sv, len+1);
3718 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3723 =for apidoc sv_usepvn_mg
3725 Like C<sv_usepvn>, but also handles 'set' magic.
3731 Perl_sv_usepvn_mg(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
3733 sv_usepvn(sv,ptr,len);
3738 Perl_sv_force_normal_flags(pTHX_ register SV *sv, U32 flags)
3740 if (SvREADONLY(sv)) {
3742 char *pvx = SvPVX(sv);
3743 STRLEN len = SvCUR(sv);
3744 U32 hash = SvUVX(sv);
3745 SvGROW(sv, len + 1);
3746 Move(pvx,SvPVX(sv),len,char);
3750 unsharepvn(pvx,SvUTF8(sv)?-len:len,hash);
3752 else if (PL_curcop != &PL_compiling)
3753 Perl_croak(aTHX_ PL_no_modify);
3756 sv_unref_flags(sv, flags);
3757 else if (SvFAKE(sv) && SvTYPE(sv) == SVt_PVGV)
3762 Perl_sv_force_normal(pTHX_ register SV *sv)
3764 sv_force_normal_flags(sv, 0);
3770 Efficient removal of characters from the beginning of the string buffer.
3771 SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
3772 the string buffer. The C<ptr> becomes the first character of the adjusted
3779 Perl_sv_chop(pTHX_ register SV *sv, register char *ptr) /* like set but assuming ptr is in sv */
3783 register STRLEN delta;
3785 if (!ptr || !SvPOKp(sv))
3787 SV_CHECK_THINKFIRST(sv);
3788 if (SvTYPE(sv) < SVt_PVIV)
3789 sv_upgrade(sv,SVt_PVIV);
3792 if (!SvLEN(sv)) { /* make copy of shared string */
3793 char *pvx = SvPVX(sv);
3794 STRLEN len = SvCUR(sv);
3795 SvGROW(sv, len + 1);
3796 Move(pvx,SvPVX(sv),len,char);
3800 SvFLAGS(sv) |= SVf_OOK;
3802 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVp_IOK|SVp_NOK|SVf_IVisUV);
3803 delta = ptr - SvPVX(sv);
3811 =for apidoc sv_catpvn
3813 Concatenates the string onto the end of the string which is in the SV. The
3814 C<len> indicates number of bytes to copy. Handles 'get' magic, but not
3815 'set' magic. See C<sv_catpvn_mg>.
3821 Perl_sv_catpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3826 junk = SvPV_force(sv, tlen);
3827 SvGROW(sv, tlen + len + 1);
3830 Move(ptr,SvPVX(sv)+tlen,len,char);
3833 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3838 =for apidoc sv_catpvn_mg
3840 Like C<sv_catpvn>, but also handles 'set' magic.
3846 Perl_sv_catpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3848 sv_catpvn(sv,ptr,len);
3853 =for apidoc sv_catsv
3855 Concatenates the string from SV C<ssv> onto the end of the string in
3856 SV C<dsv>. Modifies C<dsv> but not C<ssv>. Handles 'get' magic, but
3857 not 'set' magic. See C<sv_catsv_mg>.
3862 Perl_sv_catsv(pTHX_ SV *dsv, register SV *ssv)
3868 if ((spv = SvPV(ssv, slen))) {
3869 bool dutf8 = DO_UTF8(dsv);
3870 bool sutf8 = DO_UTF8(ssv);
3873 sv_catpvn(dsv,spv,slen);
3876 /* Not modifying source SV, so taking a temporary copy. */
3877 SV* csv = sv_2mortal(newSVsv(ssv));
3881 sv_utf8_upgrade(csv);
3882 cpv = SvPV(csv,clen);
3883 sv_catpvn(dsv,cpv,clen);
3886 sv_utf8_upgrade(dsv);
3887 sv_catpvn(dsv,spv,slen);
3888 SvUTF8_on(dsv); /* If dsv has no wide characters. */
3895 =for apidoc sv_catsv_mg
3897 Like C<sv_catsv>, but also handles 'set' magic.
3903 Perl_sv_catsv_mg(pTHX_ SV *dsv, register SV *ssv)
3910 =for apidoc sv_catpv
3912 Concatenates the string onto the end of the string which is in the SV.
3913 Handles 'get' magic, but not 'set' magic. See C<sv_catpv_mg>.
3919 Perl_sv_catpv(pTHX_ register SV *sv, register const char *ptr)
3921 register STRLEN len;
3927 junk = SvPV_force(sv, tlen);
3929 SvGROW(sv, tlen + len + 1);
3932 Move(ptr,SvPVX(sv)+tlen,len+1,char);
3934 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3939 =for apidoc sv_catpv_mg
3941 Like C<sv_catpv>, but also handles 'set' magic.
3947 Perl_sv_catpv_mg(pTHX_ register SV *sv, register const char *ptr)
3954 Perl_newSV(pTHX_ STRLEN len)
3960 sv_upgrade(sv, SVt_PV);
3961 SvGROW(sv, len + 1);
3966 /* name is assumed to contain an SV* if (name && namelen == HEf_SVKEY) */
3969 =for apidoc sv_magic
3971 Adds magic to an SV.
3977 Perl_sv_magic(pTHX_ register SV *sv, SV *obj, int how, const char *name, I32 namlen)
3981 if (SvREADONLY(sv)) {
3982 if (PL_curcop != &PL_compiling && !strchr("gBf", how))
3983 Perl_croak(aTHX_ PL_no_modify);
3985 if (SvMAGICAL(sv) || (how == 't' && SvTYPE(sv) >= SVt_PVMG)) {
3986 if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
3993 (void)SvUPGRADE(sv, SVt_PVMG);
3995 Newz(702,mg, 1, MAGIC);
3996 mg->mg_moremagic = SvMAGIC(sv);
3999 /* Some magic sontains a reference loop, where the sv and object refer to
4000 each other. To prevent a avoid a reference loop that would prevent such
4001 objects being freed, we look for such loops and if we find one we avoid
4002 incrementing the object refcount. */
4003 if (!obj || obj == sv || how == '#' || how == 'r' ||
4004 (SvTYPE(obj) == SVt_PVGV &&
4005 (GvSV(obj) == sv || GvHV(obj) == (HV*)sv || GvAV(obj) == (AV*)sv ||
4006 GvCV(obj) == (CV*)sv || GvIOp(obj) == (IO*)sv ||
4007 GvFORM(obj) == (CV*)sv)))
4012 mg->mg_obj = SvREFCNT_inc(obj);
4013 mg->mg_flags |= MGf_REFCOUNTED;
4016 mg->mg_len = namlen;
4019 mg->mg_ptr = savepvn(name, namlen);
4020 else if (namlen == HEf_SVKEY)
4021 mg->mg_ptr = (char*)SvREFCNT_inc((SV*)name);
4026 mg->mg_virtual = &PL_vtbl_sv;
4029 mg->mg_virtual = &PL_vtbl_amagic;
4032 mg->mg_virtual = &PL_vtbl_amagicelem;
4035 mg->mg_virtual = &PL_vtbl_ovrld;
4038 mg->mg_virtual = &PL_vtbl_bm;
4041 mg->mg_virtual = &PL_vtbl_regdata;
4044 mg->mg_virtual = &PL_vtbl_regdatum;
4047 mg->mg_virtual = &PL_vtbl_env;
4050 mg->mg_virtual = &PL_vtbl_fm;
4053 mg->mg_virtual = &PL_vtbl_envelem;
4056 mg->mg_virtual = &PL_vtbl_mglob;
4059 mg->mg_virtual = &PL_vtbl_isa;
4062 mg->mg_virtual = &PL_vtbl_isaelem;
4065 mg->mg_virtual = &PL_vtbl_nkeys;
4072 mg->mg_virtual = &PL_vtbl_dbline;
4076 mg->mg_virtual = &PL_vtbl_mutex;
4078 #endif /* USE_THREADS */
4079 #ifdef USE_LOCALE_COLLATE
4081 mg->mg_virtual = &PL_vtbl_collxfrm;
4083 #endif /* USE_LOCALE_COLLATE */
4085 mg->mg_virtual = &PL_vtbl_pack;
4089 mg->mg_virtual = &PL_vtbl_packelem;
4092 mg->mg_virtual = &PL_vtbl_regexp;
4095 mg->mg_virtual = &PL_vtbl_sig;
4098 mg->mg_virtual = &PL_vtbl_sigelem;
4101 mg->mg_virtual = &PL_vtbl_taint;
4105 mg->mg_virtual = &PL_vtbl_uvar;
4108 mg->mg_virtual = &PL_vtbl_vec;
4111 mg->mg_virtual = &PL_vtbl_substr;
4114 mg->mg_virtual = &PL_vtbl_defelem;
4117 mg->mg_virtual = &PL_vtbl_glob;
4120 mg->mg_virtual = &PL_vtbl_arylen;
4123 mg->mg_virtual = &PL_vtbl_pos;
4126 mg->mg_virtual = &PL_vtbl_backref;
4128 case '~': /* Reserved for use by extensions not perl internals. */
4129 /* Useful for attaching extension internal data to perl vars. */
4130 /* Note that multiple extensions may clash if magical scalars */
4131 /* etc holding private data from one are passed to another. */
4135 Perl_croak(aTHX_ "Don't know how to handle magic of type '%c'", how);
4139 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
4143 =for apidoc sv_unmagic
4145 Removes magic from an SV.
4151 Perl_sv_unmagic(pTHX_ SV *sv, int type)
4155 if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
4158 for (mg = *mgp; mg; mg = *mgp) {
4159 if (mg->mg_type == type) {
4160 MGVTBL* vtbl = mg->mg_virtual;
4161 *mgp = mg->mg_moremagic;
4162 if (vtbl && vtbl->svt_free)
4163 CALL_FPTR(vtbl->svt_free)(aTHX_ sv, mg);
4164 if (mg->mg_ptr && mg->mg_type != 'g') {
4165 if (mg->mg_len >= 0)
4166 Safefree(mg->mg_ptr);
4167 else if (mg->mg_len == HEf_SVKEY)
4168 SvREFCNT_dec((SV*)mg->mg_ptr);
4170 if (mg->mg_flags & MGf_REFCOUNTED)
4171 SvREFCNT_dec(mg->mg_obj);
4175 mgp = &mg->mg_moremagic;
4179 SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
4186 =for apidoc sv_rvweaken
4194 Perl_sv_rvweaken(pTHX_ SV *sv)
4197 if (!SvOK(sv)) /* let undefs pass */
4200 Perl_croak(aTHX_ "Can't weaken a nonreference");
4201 else if (SvWEAKREF(sv)) {
4202 if (ckWARN(WARN_MISC))
4203 Perl_warner(aTHX_ WARN_MISC, "Reference is already weak");
4207 sv_add_backref(tsv, sv);
4214 S_sv_add_backref(pTHX_ SV *tsv, SV *sv)
4218 if (SvMAGICAL(tsv) && (mg = mg_find(tsv, '<')))
4219 av = (AV*)mg->mg_obj;
4222 sv_magic(tsv, (SV*)av, '<', NULL, 0);
4223 SvREFCNT_dec(av); /* for sv_magic */
4229 S_sv_del_backref(pTHX_ SV *sv)
4236 if (!SvMAGICAL(tsv) || !(mg = mg_find(tsv, '<')))
4237 Perl_croak(aTHX_ "panic: del_backref");
4238 av = (AV *)mg->mg_obj;
4243 svp[i] = &PL_sv_undef; /* XXX */
4250 =for apidoc sv_insert
4252 Inserts a string at the specified offset/length within the SV. Similar to
4253 the Perl substr() function.
4259 Perl_sv_insert(pTHX_ SV *bigstr, STRLEN offset, STRLEN len, char *little, STRLEN littlelen)
4263 register char *midend;
4264 register char *bigend;
4270 Perl_croak(aTHX_ "Can't modify non-existent substring");
4271 SvPV_force(bigstr, curlen);
4272 (void)SvPOK_only_UTF8(bigstr);
4273 if (offset + len > curlen) {
4274 SvGROW(bigstr, offset+len+1);
4275 Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
4276 SvCUR_set(bigstr, offset+len);
4280 i = littlelen - len;
4281 if (i > 0) { /* string might grow */
4282 big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
4283 mid = big + offset + len;
4284 midend = bigend = big + SvCUR(bigstr);
4287 while (midend > mid) /* shove everything down */
4288 *--bigend = *--midend;
4289 Move(little,big+offset,littlelen,char);
4295 Move(little,SvPVX(bigstr)+offset,len,char);
4300 big = SvPVX(bigstr);
4303 bigend = big + SvCUR(bigstr);
4305 if (midend > bigend)
4306 Perl_croak(aTHX_ "panic: sv_insert");
4308 if (mid - big > bigend - midend) { /* faster to shorten from end */
4310 Move(little, mid, littlelen,char);
4313 i = bigend - midend;
4315 Move(midend, mid, i,char);
4319 SvCUR_set(bigstr, mid - big);
4322 else if ((i = mid - big)) { /* faster from front */
4323 midend -= littlelen;
4325 sv_chop(bigstr,midend-i);
4330 Move(little, mid, littlelen,char);
4332 else if (littlelen) {
4333 midend -= littlelen;
4334 sv_chop(bigstr,midend);
4335 Move(little,midend,littlelen,char);
4338 sv_chop(bigstr,midend);
4344 =for apidoc sv_replace
4346 Make the first argument a copy of the second, then delete the original.
4352 Perl_sv_replace(pTHX_ register SV *sv, register SV *nsv)
4354 U32 refcnt = SvREFCNT(sv);
4355 SV_CHECK_THINKFIRST(sv);
4356 if (SvREFCNT(nsv) != 1 && ckWARN_d(WARN_INTERNAL))
4357 Perl_warner(aTHX_ WARN_INTERNAL, "Reference miscount in sv_replace()");
4358 if (SvMAGICAL(sv)) {
4362 sv_upgrade(nsv, SVt_PVMG);
4363 SvMAGIC(nsv) = SvMAGIC(sv);
4364 SvFLAGS(nsv) |= SvMAGICAL(sv);
4370 assert(!SvREFCNT(sv));
4371 StructCopy(nsv,sv,SV);
4372 SvREFCNT(sv) = refcnt;
4373 SvFLAGS(nsv) |= SVTYPEMASK; /* Mark as freed */
4378 =for apidoc sv_clear
4380 Clear an SV, making it empty. Does not free the memory used by the SV
4387 Perl_sv_clear(pTHX_ register SV *sv)
4391 assert(SvREFCNT(sv) == 0);
4394 if (PL_defstash) { /* Still have a symbol table? */
4399 Zero(&tmpref, 1, SV);
4400 sv_upgrade(&tmpref, SVt_RV);
4402 SvREADONLY_on(&tmpref); /* DESTROY() could be naughty */
4403 SvREFCNT(&tmpref) = 1;
4406 stash = SvSTASH(sv);
4407 destructor = StashHANDLER(stash,DESTROY);
4410 PUSHSTACKi(PERLSI_DESTROY);
4411 SvRV(&tmpref) = SvREFCNT_inc(sv);
4416 call_sv((SV*)destructor, G_DISCARD|G_EVAL|G_KEEPERR);
4422 } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
4424 del_XRV(SvANY(&tmpref));
4427 if (PL_in_clean_objs)
4428 Perl_croak(aTHX_ "DESTROY created new reference to dead object '%s'",
4430 /* DESTROY gave object new lease on life */
4436 SvREFCNT_dec(SvSTASH(sv)); /* possibly of changed persuasion */
4437 SvOBJECT_off(sv); /* Curse the object. */
4438 if (SvTYPE(sv) != SVt_PVIO)
4439 --PL_sv_objcount; /* XXX Might want something more general */
4442 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv))
4445 switch (SvTYPE(sv)) {
4448 IoIFP(sv) != PerlIO_stdin() &&
4449 IoIFP(sv) != PerlIO_stdout() &&
4450 IoIFP(sv) != PerlIO_stderr())
4452 io_close((IO*)sv, FALSE);
4454 if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
4455 PerlDir_close(IoDIRP(sv));
4456 IoDIRP(sv) = (DIR*)NULL;
4457 Safefree(IoTOP_NAME(sv));
4458 Safefree(IoFMT_NAME(sv));
4459 Safefree(IoBOTTOM_NAME(sv));
4474 SvREFCNT_dec(LvTARG(sv));
4478 Safefree(GvNAME(sv));
4479 /* cannot decrease stash refcount yet, as we might recursively delete
4480 ourselves when the refcnt drops to zero. Delay SvREFCNT_dec
4481 of stash until current sv is completely gone.
4482 -- JohnPC, 27 Mar 1998 */
4483 stash = GvSTASH(sv);
4489 (void)SvOOK_off(sv);
4497 SvREFCNT_dec(SvRV(sv));
4499 else if (SvPVX(sv) && SvLEN(sv))
4500 Safefree(SvPVX(sv));
4501 else if (SvPVX(sv) && SvREADONLY(sv) && SvFAKE(sv)) {
4502 unsharepvn(SvPVX(sv),SvUTF8(sv)?-SvCUR(sv):SvCUR(sv),SvUVX(sv));
4514 switch (SvTYPE(sv)) {
4530 del_XPVIV(SvANY(sv));
4533 del_XPVNV(SvANY(sv));
4536 del_XPVMG(SvANY(sv));
4539 del_XPVLV(SvANY(sv));
4542 del_XPVAV(SvANY(sv));
4545 del_XPVHV(SvANY(sv));
4548 del_XPVCV(SvANY(sv));
4551 del_XPVGV(SvANY(sv));
4552 /* code duplication for increased performance. */
4553 SvFLAGS(sv) &= SVf_BREAK;
4554 SvFLAGS(sv) |= SVTYPEMASK;
4555 /* decrease refcount of the stash that owns this GV, if any */
4557 SvREFCNT_dec(stash);
4558 return; /* not break, SvFLAGS reset already happened */
4560 del_XPVBM(SvANY(sv));
4563 del_XPVFM(SvANY(sv));
4566 del_XPVIO(SvANY(sv));
4569 SvFLAGS(sv) &= SVf_BREAK;
4570 SvFLAGS(sv) |= SVTYPEMASK;
4574 Perl_sv_newref(pTHX_ SV *sv)
4577 ATOMIC_INC(SvREFCNT(sv));
4584 Free the memory used by an SV.
4590 Perl_sv_free(pTHX_ SV *sv)
4592 int refcount_is_zero;
4596 if (SvREFCNT(sv) == 0) {
4597 if (SvFLAGS(sv) & SVf_BREAK)
4599 if (PL_in_clean_all) /* All is fair */
4601 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
4602 /* make sure SvREFCNT(sv)==0 happens very seldom */
4603 SvREFCNT(sv) = (~(U32)0)/2;
4606 if (ckWARN_d(WARN_INTERNAL))
4607 Perl_warner(aTHX_ WARN_INTERNAL, "Attempt to free unreferenced scalar");
4610 ATOMIC_DEC_AND_TEST(refcount_is_zero, SvREFCNT(sv));
4611 if (!refcount_is_zero)
4615 if (ckWARN_d(WARN_DEBUGGING))
4616 Perl_warner(aTHX_ WARN_DEBUGGING,
4617 "Attempt to free temp prematurely: SV 0x%"UVxf,
4622 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
4623 /* make sure SvREFCNT(sv)==0 happens very seldom */
4624 SvREFCNT(sv) = (~(U32)0)/2;
4635 Returns the length of the string in the SV. See also C<SvCUR>.
4641 Perl_sv_len(pTHX_ register SV *sv)
4650 len = mg_length(sv);
4652 junk = SvPV(sv, len);
4657 =for apidoc sv_len_utf8
4659 Returns the number of characters in the string in an SV, counting wide
4660 UTF8 bytes as a single character.
4666 Perl_sv_len_utf8(pTHX_ register SV *sv)
4672 return mg_length(sv);
4676 U8 *s = (U8*)SvPV(sv, len);
4678 return Perl_utf8_length(aTHX_ s, s + len);
4683 Perl_sv_pos_u2b(pTHX_ register SV *sv, I32* offsetp, I32* lenp)
4688 I32 uoffset = *offsetp;
4694 start = s = (U8*)SvPV(sv, len);
4696 while (s < send && uoffset--)
4700 *offsetp = s - start;
4704 while (s < send && ulen--)
4714 Perl_sv_pos_b2u(pTHX_ register SV *sv, I32* offsetp)
4723 s = (U8*)SvPV(sv, len);
4725 Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset");
4726 send = s + *offsetp;
4730 /* We can use low level directly here as we are not looking at the values */
4731 if (utf8n_to_uvuni(s, UTF8SKIP(s), &n, 0)) {
4745 Returns a boolean indicating whether the strings in the two SVs are
4752 Perl_sv_eq(pTHX_ register SV *sv1, register SV *sv2)
4766 pv1 = SvPV(sv1, cur1);
4773 pv2 = SvPV(sv2, cur2);
4775 /* do not utf8ize the comparands as a side-effect */
4776 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTE) {
4777 bool is_utf8 = TRUE;
4778 /* UTF-8ness differs */
4779 if (PL_hints & HINT_UTF8_DISTINCT)
4783 /* sv1 is the UTF-8 one , If is equal it must be downgrade-able */
4784 char *pv = (char*)bytes_from_utf8((U8*)pv1, &cur1, &is_utf8);
4789 /* sv2 is the UTF-8 one , If is equal it must be downgrade-able */
4790 char *pv = (char *)bytes_from_utf8((U8*)pv2, &cur2, &is_utf8);
4795 /* Downgrade not possible - cannot be eq */
4801 eq = memEQ(pv1, pv2, cur1);
4812 Compares the strings in two SVs. Returns -1, 0, or 1 indicating whether the
4813 string in C<sv1> is less than, equal to, or greater than the string in
4820 Perl_sv_cmp(pTHX_ register SV *sv1, register SV *sv2)
4825 bool pv1tmp = FALSE;
4826 bool pv2tmp = FALSE;
4833 pv1 = SvPV(sv1, cur1);
4840 pv2 = SvPV(sv2, cur2);
4842 /* do not utf8ize the comparands as a side-effect */
4843 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTE) {
4844 if (PL_hints & HINT_UTF8_DISTINCT)
4845 return SvUTF8(sv1) ? 1 : -1;
4848 pv2 = (char*)bytes_to_utf8((U8*)pv2, &cur2);
4852 pv1 = (char*)bytes_to_utf8((U8*)pv1, &cur1);
4858 cmp = cur2 ? -1 : 0;
4862 I32 retval = memcmp((void*)pv1, (void*)pv2, cur1 < cur2 ? cur1 : cur2);
4865 cmp = retval < 0 ? -1 : 1;
4866 } else if (cur1 == cur2) {
4869 cmp = cur1 < cur2 ? -1 : 1;
4882 =for apidoc sv_cmp_locale
4884 Compares the strings in two SVs in a locale-aware manner. See
4891 Perl_sv_cmp_locale(pTHX_ register SV *sv1, register SV *sv2)
4893 #ifdef USE_LOCALE_COLLATE
4899 if (PL_collation_standard)
4903 pv1 = sv1 ? sv_collxfrm(sv1, &len1) : (char *) NULL;
4905 pv2 = sv2 ? sv_collxfrm(sv2, &len2) : (char *) NULL;
4907 if (!pv1 || !len1) {
4918 retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
4921 return retval < 0 ? -1 : 1;
4924 * When the result of collation is equality, that doesn't mean
4925 * that there are no differences -- some locales exclude some
4926 * characters from consideration. So to avoid false equalities,
4927 * we use the raw string as a tiebreaker.
4933 #endif /* USE_LOCALE_COLLATE */
4935 return sv_cmp(sv1, sv2);
4938 #ifdef USE_LOCALE_COLLATE
4940 * Any scalar variable may carry an 'o' magic that contains the
4941 * scalar data of the variable transformed to such a format that
4942 * a normal memory comparison can be used to compare the data
4943 * according to the locale settings.
4946 Perl_sv_collxfrm(pTHX_ SV *sv, STRLEN *nxp)
4950 mg = SvMAGICAL(sv) ? mg_find(sv, 'o') : (MAGIC *) NULL;
4951 if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
4956 Safefree(mg->mg_ptr);
4958 if ((xf = mem_collxfrm(s, len, &xlen))) {
4959 if (SvREADONLY(sv)) {
4962 return xf + sizeof(PL_collation_ix);
4965 sv_magic(sv, 0, 'o', 0, 0);
4966 mg = mg_find(sv, 'o');
4979 if (mg && mg->mg_ptr) {
4981 return mg->mg_ptr + sizeof(PL_collation_ix);
4989 #endif /* USE_LOCALE_COLLATE */
4994 Get a line from the filehandle and store it into the SV, optionally
4995 appending to the currently-stored string.
5001 Perl_sv_gets(pTHX_ register SV *sv, register PerlIO *fp, I32 append)
5005 register STDCHAR rslast;
5006 register STDCHAR *bp;
5010 SV_CHECK_THINKFIRST(sv);
5011 (void)SvUPGRADE(sv, SVt_PV);
5015 if (RsSNARF(PL_rs)) {
5019 else if (RsRECORD(PL_rs)) {
5020 I32 recsize, bytesread;
5023 /* Grab the size of the record we're getting */
5024 recsize = SvIV(SvRV(PL_rs));
5025 (void)SvPOK_only(sv); /* Validate pointer */
5026 buffer = SvGROW(sv, recsize + 1);
5029 /* VMS wants read instead of fread, because fread doesn't respect */
5030 /* RMS record boundaries. This is not necessarily a good thing to be */
5031 /* doing, but we've got no other real choice */
5032 bytesread = PerlLIO_read(PerlIO_fileno(fp), buffer, recsize);
5034 bytesread = PerlIO_read(fp, buffer, recsize);
5036 SvCUR_set(sv, bytesread);
5037 buffer[bytesread] = '\0';
5038 if (PerlIO_isutf8(fp))
5042 return(SvCUR(sv) ? SvPVX(sv) : Nullch);
5044 else if (RsPARA(PL_rs)) {
5049 /* Get $/ i.e. PL_rs into same encoding as stream wants */
5050 if (PerlIO_isutf8(fp)) {
5051 rsptr = SvPVutf8(PL_rs, rslen);
5054 if (SvUTF8(PL_rs)) {
5055 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
5056 Perl_croak(aTHX_ "Wide character in $/");
5059 rsptr = SvPV(PL_rs, rslen);
5063 rslast = rslen ? rsptr[rslen - 1] : '\0';
5065 if (RsPARA(PL_rs)) { /* have to do this both before and after */
5066 do { /* to make sure file boundaries work right */
5069 i = PerlIO_getc(fp);
5073 PerlIO_ungetc(fp,i);
5079 /* See if we know enough about I/O mechanism to cheat it ! */
5081 /* This used to be #ifdef test - it is made run-time test for ease
5082 of abstracting out stdio interface. One call should be cheap
5083 enough here - and may even be a macro allowing compile
5087 if (PerlIO_fast_gets(fp)) {
5090 * We're going to steal some values from the stdio struct
5091 * and put EVERYTHING in the innermost loop into registers.
5093 register STDCHAR *ptr;
5097 #if defined(VMS) && defined(PERLIO_IS_STDIO)
5098 /* An ungetc()d char is handled separately from the regular
5099 * buffer, so we getc() it back out and stuff it in the buffer.
5101 i = PerlIO_getc(fp);
5102 if (i == EOF) return 0;
5103 *(--((*fp)->_ptr)) = (unsigned char) i;
5107 /* Here is some breathtakingly efficient cheating */
5109 cnt = PerlIO_get_cnt(fp); /* get count into register */
5110 (void)SvPOK_only(sv); /* validate pointer */
5111 if (SvLEN(sv) - append <= cnt + 1) { /* make sure we have the room */
5112 if (cnt > 80 && SvLEN(sv) > append) {
5113 shortbuffered = cnt - SvLEN(sv) + append + 1;
5114 cnt -= shortbuffered;
5118 /* remember that cnt can be negative */
5119 SvGROW(sv, append + (cnt <= 0 ? 2 : (cnt + 1)));
5124 bp = (STDCHAR*)SvPVX(sv) + append; /* move these two too to registers */
5125 ptr = (STDCHAR*)PerlIO_get_ptr(fp);
5126 DEBUG_P(PerlIO_printf(Perl_debug_log,
5127 "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
5128 DEBUG_P(PerlIO_printf(Perl_debug_log,
5129 "Screamer: entering: 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)));
5136 while (cnt > 0) { /* this | eat */
5138 if ((*bp++ = *ptr++) == rslast) /* really | dust */
5139 goto thats_all_folks; /* screams | sed :-) */
5143 Copy(ptr, bp, cnt, char); /* this | eat */
5144 bp += cnt; /* screams | dust */
5145 ptr += cnt; /* louder | sed :-) */
5150 if (shortbuffered) { /* oh well, must extend */
5151 cnt = shortbuffered;
5153 bpx = bp - (STDCHAR*)SvPVX(sv); /* box up before relocation */
5155 SvGROW(sv, SvLEN(sv) + append + cnt + 2);
5156 bp = (STDCHAR*)SvPVX(sv) + bpx; /* unbox after relocation */
5160 DEBUG_P(PerlIO_printf(Perl_debug_log,
5161 "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
5162 PTR2UV(ptr),(long)cnt));
5163 PerlIO_set_ptrcnt(fp, ptr, cnt); /* deregisterize cnt and ptr */
5164 DEBUG_P(PerlIO_printf(Perl_debug_log,
5165 "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
5166 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
5167 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
5168 /* This used to call 'filbuf' in stdio form, but as that behaves like
5169 getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
5170 another abstraction. */
5171 i = PerlIO_getc(fp); /* get more characters */
5172 DEBUG_P(PerlIO_printf(Perl_debug_log,
5173 "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
5174 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
5175 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
5176 cnt = PerlIO_get_cnt(fp);
5177 ptr = (STDCHAR*)PerlIO_get_ptr(fp); /* reregisterize cnt and ptr */
5178 DEBUG_P(PerlIO_printf(Perl_debug_log,
5179 "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
5181 if (i == EOF) /* all done for ever? */
5182 goto thats_really_all_folks;
5184 bpx = bp - (STDCHAR*)SvPVX(sv); /* box up before relocation */
5186 SvGROW(sv, bpx + cnt + 2);
5187 bp = (STDCHAR*)SvPVX(sv) + bpx; /* unbox after relocation */
5189 *bp++ = i; /* store character from PerlIO_getc */
5191 if (rslen && (STDCHAR)i == rslast) /* all done for now? */
5192 goto thats_all_folks;
5196 if ((rslen > 1 && (bp - (STDCHAR*)SvPVX(sv) < rslen)) ||
5197 memNE((char*)bp - rslen, rsptr, rslen))
5198 goto screamer; /* go back to the fray */
5199 thats_really_all_folks:
5201 cnt += shortbuffered;
5202 DEBUG_P(PerlIO_printf(Perl_debug_log,
5203 "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
5204 PerlIO_set_ptrcnt(fp, ptr, cnt); /* put these back or we're in trouble */
5205 DEBUG_P(PerlIO_printf(Perl_debug_log,
5206 "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
5207 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
5208 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
5210 SvCUR_set(sv, bp - (STDCHAR*)SvPVX(sv)); /* set length */
5211 DEBUG_P(PerlIO_printf(Perl_debug_log,
5212 "Screamer: done, len=%ld, string=|%.*s|\n",
5213 (long)SvCUR(sv),(int)SvCUR(sv),SvPVX(sv)));
5218 /*The big, slow, and stupid way */
5221 /* Need to work around EPOC SDK features */
5222 /* On WINS: MS VC5 generates calls to _chkstk, */
5223 /* if a `large' stack frame is allocated */
5224 /* gcc on MARM does not generate calls like these */
5230 register STDCHAR *bpe = buf + sizeof(buf);
5232 while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = i) != rslast && bp < bpe)
5233 ; /* keep reading */
5237 cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
5238 /* Accomodate broken VAXC compiler, which applies U8 cast to
5239 * both args of ?: operator, causing EOF to change into 255
5241 if (cnt) { i = (U8)buf[cnt - 1]; } else { i = EOF; }
5245 sv_catpvn(sv, (char *) buf, cnt);
5247 sv_setpvn(sv, (char *) buf, cnt);
5249 if (i != EOF && /* joy */
5251 SvCUR(sv) < rslen ||
5252 memNE(SvPVX(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
5256 * If we're reading from a TTY and we get a short read,
5257 * indicating that the user hit his EOF character, we need
5258 * to notice it now, because if we try to read from the TTY
5259 * again, the EOF condition will disappear.
5261 * The comparison of cnt to sizeof(buf) is an optimization
5262 * that prevents unnecessary calls to feof().
5266 if (!(cnt < sizeof(buf) && PerlIO_eof(fp)))
5271 if (RsPARA(PL_rs)) { /* have to do this both before and after */
5272 while (i != EOF) { /* to make sure file boundaries work right */
5273 i = PerlIO_getc(fp);
5275 PerlIO_ungetc(fp,i);
5281 if (PerlIO_isutf8(fp))
5286 return (SvCUR(sv) - append) ? SvPVX(sv) : Nullch;
5293 Auto-increment of the value in the SV.
5299 Perl_sv_inc(pTHX_ register SV *sv)
5308 if (SvTHINKFIRST(sv)) {
5309 if (SvREADONLY(sv)) {
5310 if (PL_curcop != &PL_compiling)
5311 Perl_croak(aTHX_ PL_no_modify);
5315 if (SvAMAGIC(sv) && AMG_CALLun(sv,inc))
5317 i = PTR2IV(SvRV(sv));
5322 flags = SvFLAGS(sv);
5323 if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
5324 /* It's (privately or publicly) a float, but not tested as an
5325 integer, so test it to see. */
5327 flags = SvFLAGS(sv);
5329 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
5330 /* It's publicly an integer, or privately an integer-not-float */
5333 if (SvUVX(sv) == UV_MAX)
5334 sv_setnv(sv, (NV)UV_MAX + 1.0);
5336 (void)SvIOK_only_UV(sv);
5339 if (SvIVX(sv) == IV_MAX)
5340 sv_setuv(sv, (UV)IV_MAX + 1);
5342 (void)SvIOK_only(sv);
5348 if (flags & SVp_NOK) {
5349 (void)SvNOK_only(sv);
5354 if (!(flags & SVp_POK) || !*SvPVX(sv)) {
5355 if ((flags & SVTYPEMASK) < SVt_PVIV)
5356 sv_upgrade(sv, SVt_IV);
5357 (void)SvIOK_only(sv);
5362 while (isALPHA(*d)) d++;
5363 while (isDIGIT(*d)) d++;
5365 #ifdef PERL_PRESERVE_IVUV
5366 /* Got to punt this an an integer if needs be, but we don't issue
5367 warnings. Probably ought to make the sv_iv_please() that does
5368 the conversion if possible, and silently. */
5369 I32 numtype = looks_like_number(sv);
5370 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
5371 /* Need to try really hard to see if it's an integer.
5372 9.22337203685478e+18 is an integer.
5373 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
5374 so $a="9.22337203685478e+18"; $a+0; $a++
5375 needs to be the same as $a="9.22337203685478e+18"; $a++
5382 /* sv_2iv *should* have made this an NV */
5383 if (flags & SVp_NOK) {
5384 (void)SvNOK_only(sv);
5388 /* I don't think we can get here. Maybe I should assert this
5389 And if we do get here I suspect that sv_setnv will croak. NWC
5391 #if defined(USE_LONG_DOUBLE)
5392 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",
5393 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5395 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%g\n",
5396 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5399 #endif /* PERL_PRESERVE_IVUV */
5400 sv_setnv(sv,Atof(SvPVX(sv)) + 1.0);
5404 while (d >= SvPVX(sv)) {
5412 /* MKS: The original code here died if letters weren't consecutive.
5413 * at least it didn't have to worry about non-C locales. The
5414 * new code assumes that ('z'-'a')==('Z'-'A'), letters are
5415 * arranged in order (although not consecutively) and that only
5416 * [A-Za-z] are accepted by isALPHA in the C locale.
5418 if (*d != 'z' && *d != 'Z') {
5419 do { ++*d; } while (!isALPHA(*d));
5422 *(d--) -= 'z' - 'a';
5427 *(d--) -= 'z' - 'a' + 1;
5431 /* oh,oh, the number grew */
5432 SvGROW(sv, SvCUR(sv) + 2);
5434 for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX(sv); d--)
5445 Auto-decrement of the value in the SV.
5451 Perl_sv_dec(pTHX_ register SV *sv)
5459 if (SvTHINKFIRST(sv)) {
5460 if (SvREADONLY(sv)) {
5461 if (PL_curcop != &PL_compiling)
5462 Perl_croak(aTHX_ PL_no_modify);
5466 if (SvAMAGIC(sv) && AMG_CALLun(sv,dec))
5468 i = PTR2IV(SvRV(sv));
5473 /* Unlike sv_inc we don't have to worry about string-never-numbers
5474 and keeping them magic. But we mustn't warn on punting */
5475 flags = SvFLAGS(sv);
5476 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
5477 /* It's publicly an integer, or privately an integer-not-float */
5480 if (SvUVX(sv) == 0) {
5481 (void)SvIOK_only(sv);
5485 (void)SvIOK_only_UV(sv);
5489 if (SvIVX(sv) == IV_MIN)
5490 sv_setnv(sv, (NV)IV_MIN - 1.0);
5492 (void)SvIOK_only(sv);
5498 if (flags & SVp_NOK) {
5500 (void)SvNOK_only(sv);
5503 if (!(flags & SVp_POK)) {
5504 if ((flags & SVTYPEMASK) < SVt_PVNV)
5505 sv_upgrade(sv, SVt_NV);
5507 (void)SvNOK_only(sv);
5510 #ifdef PERL_PRESERVE_IVUV
5512 I32 numtype = looks_like_number(sv);
5513 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
5514 /* Need to try really hard to see if it's an integer.
5515 9.22337203685478e+18 is an integer.
5516 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
5517 so $a="9.22337203685478e+18"; $a+0; $a--
5518 needs to be the same as $a="9.22337203685478e+18"; $a--
5525 /* sv_2iv *should* have made this an NV */
5526 if (flags & SVp_NOK) {
5527 (void)SvNOK_only(sv);
5531 /* I don't think we can get here. Maybe I should assert this
5532 And if we do get here I suspect that sv_setnv will croak. NWC
5534 #if defined(USE_LONG_DOUBLE)
5535 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",
5536 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5538 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%g\n",
5539 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5543 #endif /* PERL_PRESERVE_IVUV */
5544 sv_setnv(sv,Atof(SvPVX(sv)) - 1.0); /* punt */
5548 =for apidoc sv_mortalcopy
5550 Creates a new SV which is a copy of the original SV. The new SV is marked
5556 /* Make a string that will exist for the duration of the expression
5557 * evaluation. Actually, it may have to last longer than that, but
5558 * hopefully we won't free it until it has been assigned to a
5559 * permanent location. */
5562 Perl_sv_mortalcopy(pTHX_ SV *oldstr)
5567 sv_setsv(sv,oldstr);
5569 PL_tmps_stack[++PL_tmps_ix] = sv;
5575 =for apidoc sv_newmortal
5577 Creates a new SV which is mortal. The reference count of the SV is set to 1.
5583 Perl_sv_newmortal(pTHX)
5588 SvFLAGS(sv) = SVs_TEMP;
5590 PL_tmps_stack[++PL_tmps_ix] = sv;
5595 =for apidoc sv_2mortal
5597 Marks an SV as mortal. The SV will be destroyed when the current context
5603 /* same thing without the copying */
5606 Perl_sv_2mortal(pTHX_ register SV *sv)
5610 if (SvREADONLY(sv) && SvIMMORTAL(sv))
5613 PL_tmps_stack[++PL_tmps_ix] = sv;
5621 Creates a new SV and copies a string into it. The reference count for the
5622 SV is set to 1. If C<len> is zero, Perl will compute the length using
5623 strlen(). For efficiency, consider using C<newSVpvn> instead.
5629 Perl_newSVpv(pTHX_ const char *s, STRLEN len)
5636 sv_setpvn(sv,s,len);
5641 =for apidoc newSVpvn
5643 Creates a new SV and copies a string into it. The reference count for the
5644 SV is set to 1. Note that if C<len> is zero, Perl will create a zero length
5645 string. You are responsible for ensuring that the source string is at least
5652 Perl_newSVpvn(pTHX_ const char *s, STRLEN len)
5657 sv_setpvn(sv,s,len);
5662 =for apidoc newSVpvn_share
5664 Creates a new SV and populates it with a string from
5665 the string table. Turns on READONLY and FAKE.
5666 The idea here is that as string table is used for shared hash
5667 keys these strings will have SvPVX == HeKEY and hash lookup
5668 will avoid string compare.
5674 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
5677 bool is_utf8 = FALSE;
5682 if (is_utf8 && !(PL_hints & HINT_UTF8_DISTINCT)) {
5683 STRLEN tmplen = len;
5684 /* See the note in hv.c:hv_fetch() --jhi */
5685 src = (char*)bytes_from_utf8((U8*)src, &tmplen, &is_utf8);
5689 PERL_HASH(hash, src, len);
5691 sv_upgrade(sv, SVt_PVIV);
5692 SvPVX(sv) = sharepvn(src, is_utf8?-len:len, hash);
5704 #if defined(PERL_IMPLICIT_CONTEXT)
5706 Perl_newSVpvf_nocontext(const char* pat, ...)
5711 va_start(args, pat);
5712 sv = vnewSVpvf(pat, &args);
5719 =for apidoc newSVpvf
5721 Creates a new SV an initialize it with the string formatted like
5728 Perl_newSVpvf(pTHX_ const char* pat, ...)
5732 va_start(args, pat);
5733 sv = vnewSVpvf(pat, &args);
5739 Perl_vnewSVpvf(pTHX_ const char* pat, va_list* args)
5743 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
5750 Creates a new SV and copies a floating point value into it.
5751 The reference count for the SV is set to 1.
5757 Perl_newSVnv(pTHX_ NV n)
5769 Creates a new SV and copies an integer into it. The reference count for the
5776 Perl_newSViv(pTHX_ IV i)
5788 Creates a new SV and copies an unsigned integer into it.
5789 The reference count for the SV is set to 1.
5795 Perl_newSVuv(pTHX_ UV u)
5805 =for apidoc newRV_noinc
5807 Creates an RV wrapper for an SV. The reference count for the original
5808 SV is B<not> incremented.
5814 Perl_newRV_noinc(pTHX_ SV *tmpRef)
5819 sv_upgrade(sv, SVt_RV);
5826 /* newRV_inc is #defined to newRV in sv.h */
5828 Perl_newRV(pTHX_ SV *tmpRef)
5830 return newRV_noinc(SvREFCNT_inc(tmpRef));
5836 Creates a new SV which is an exact duplicate of the original SV.
5841 /* make an exact duplicate of old */
5844 Perl_newSVsv(pTHX_ register SV *old)
5850 if (SvTYPE(old) == SVTYPEMASK) {
5851 if (ckWARN_d(WARN_INTERNAL))
5852 Perl_warner(aTHX_ WARN_INTERNAL, "semi-panic: attempt to dup freed string");
5867 Perl_sv_reset(pTHX_ register char *s, HV *stash)
5875 char todo[PERL_UCHAR_MAX+1];
5880 if (!*s) { /* reset ?? searches */
5881 for (pm = HvPMROOT(stash); pm; pm = pm->op_pmnext) {
5882 pm->op_pmdynflags &= ~PMdf_USED;
5887 /* reset variables */
5889 if (!HvARRAY(stash))
5892 Zero(todo, 256, char);
5894 i = (unsigned char)*s;
5898 max = (unsigned char)*s++;
5899 for ( ; i <= max; i++) {
5902 for (i = 0; i <= (I32) HvMAX(stash); i++) {
5903 for (entry = HvARRAY(stash)[i];
5905 entry = HeNEXT(entry))
5907 if (!todo[(U8)*HeKEY(entry)])
5909 gv = (GV*)HeVAL(entry);
5911 if (SvTHINKFIRST(sv)) {
5912 if (!SvREADONLY(sv) && SvROK(sv))
5917 if (SvTYPE(sv) >= SVt_PV) {
5919 if (SvPVX(sv) != Nullch)
5926 if (GvHV(gv) && !HvNAME(GvHV(gv))) {
5928 #ifdef USE_ENVIRON_ARRAY
5930 environ[0] = Nullch;
5939 Perl_sv_2io(pTHX_ SV *sv)
5945 switch (SvTYPE(sv)) {
5953 Perl_croak(aTHX_ "Bad filehandle: %s", GvNAME(gv));
5957 Perl_croak(aTHX_ PL_no_usym, "filehandle");
5959 return sv_2io(SvRV(sv));
5960 gv = gv_fetchpv(SvPV(sv,n_a), FALSE, SVt_PVIO);
5966 Perl_croak(aTHX_ "Bad filehandle: %s", SvPV(sv,n_a));
5973 Perl_sv_2cv(pTHX_ SV *sv, HV **st, GV **gvp, I32 lref)
5980 return *gvp = Nullgv, Nullcv;
5981 switch (SvTYPE(sv)) {
6000 SV **sp = &sv; /* Used in tryAMAGICunDEREF macro. */
6001 tryAMAGICunDEREF(to_cv);
6004 if (SvTYPE(sv) == SVt_PVCV) {
6013 Perl_croak(aTHX_ "Not a subroutine reference");
6018 gv = gv_fetchpv(SvPV(sv, n_a), lref, SVt_PVCV);
6024 if (lref && !GvCVu(gv)) {
6027 tmpsv = NEWSV(704,0);
6028 gv_efullname3(tmpsv, gv, Nullch);
6029 /* XXX this is probably not what they think they're getting.
6030 * It has the same effect as "sub name;", i.e. just a forward
6032 newSUB(start_subparse(FALSE, 0),
6033 newSVOP(OP_CONST, 0, tmpsv),
6038 Perl_croak(aTHX_ "Unable to create sub named \"%s\"", SvPV(sv,n_a));
6047 Returns true if the SV has a true value by Perl's rules.
6053 Perl_sv_true(pTHX_ register SV *sv)
6059 if ((tXpv = (XPV*)SvANY(sv)) &&
6060 (tXpv->xpv_cur > 1 ||
6061 (tXpv->xpv_cur && *tXpv->xpv_pv != '0')))
6068 return SvIVX(sv) != 0;
6071 return SvNVX(sv) != 0.0;
6073 return sv_2bool(sv);
6079 Perl_sv_iv(pTHX_ register SV *sv)
6083 return (IV)SvUVX(sv);
6090 Perl_sv_uv(pTHX_ register SV *sv)
6095 return (UV)SvIVX(sv);
6101 Perl_sv_nv(pTHX_ register SV *sv)
6109 Perl_sv_pv(pTHX_ SV *sv)
6116 return sv_2pv(sv, &n_a);
6120 Perl_sv_pvn(pTHX_ SV *sv, STRLEN *lp)
6126 return sv_2pv(sv, lp);
6130 =for apidoc sv_pvn_force
6132 Get a sensible string out of the SV somehow.
6138 Perl_sv_pvn_force(pTHX_ SV *sv, STRLEN *lp)
6142 if (SvTHINKFIRST(sv) && !SvROK(sv))
6143 sv_force_normal(sv);
6149 if (SvTYPE(sv) > SVt_PVLV && SvTYPE(sv) != SVt_PVFM) {
6150 Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
6151 PL_op_name[PL_op->op_type]);
6155 if (s != SvPVX(sv)) { /* Almost, but not quite, sv_setpvn() */
6160 (void)SvUPGRADE(sv, SVt_PV); /* Never FALSE */
6161 SvGROW(sv, len + 1);
6162 Move(s,SvPVX(sv),len,char);
6167 SvPOK_on(sv); /* validate pointer */
6169 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
6170 PTR2UV(sv),SvPVX(sv)));
6177 Perl_sv_pvbyte(pTHX_ SV *sv)
6179 sv_utf8_downgrade(sv,0);
6184 Perl_sv_pvbyten(pTHX_ SV *sv, STRLEN *lp)
6186 sv_utf8_downgrade(sv,0);
6187 return sv_pvn(sv,lp);
6191 Perl_sv_pvbyten_force(pTHX_ SV *sv, STRLEN *lp)
6193 sv_utf8_downgrade(sv,0);
6194 return sv_pvn_force(sv,lp);
6198 Perl_sv_pvutf8(pTHX_ SV *sv)
6200 sv_utf8_upgrade(sv);
6205 Perl_sv_pvutf8n(pTHX_ SV *sv, STRLEN *lp)
6207 sv_utf8_upgrade(sv);
6208 return sv_pvn(sv,lp);
6212 =for apidoc sv_pvutf8n_force
6214 Get a sensible UTF8-encoded string out of the SV somehow. See
6221 Perl_sv_pvutf8n_force(pTHX_ SV *sv, STRLEN *lp)
6223 sv_utf8_upgrade(sv);
6224 return sv_pvn_force(sv,lp);
6228 =for apidoc sv_reftype
6230 Returns a string describing what the SV is a reference to.
6236 Perl_sv_reftype(pTHX_ SV *sv, int ob)
6238 if (ob && SvOBJECT(sv))
6239 return HvNAME(SvSTASH(sv));
6241 switch (SvTYPE(sv)) {
6255 case SVt_PVLV: return "LVALUE";
6256 case SVt_PVAV: return "ARRAY";
6257 case SVt_PVHV: return "HASH";
6258 case SVt_PVCV: return "CODE";
6259 case SVt_PVGV: return "GLOB";
6260 case SVt_PVFM: return "FORMAT";
6261 case SVt_PVIO: return "IO";
6262 default: return "UNKNOWN";
6268 =for apidoc sv_isobject
6270 Returns a boolean indicating whether the SV is an RV pointing to a blessed
6271 object. If the SV is not an RV, or if the object is not blessed, then this
6278 Perl_sv_isobject(pTHX_ SV *sv)
6295 Returns a boolean indicating whether the SV is blessed into the specified
6296 class. This does not check for subtypes; use C<sv_derived_from> to verify
6297 an inheritance relationship.
6303 Perl_sv_isa(pTHX_ SV *sv, const char *name)
6315 return strEQ(HvNAME(SvSTASH(sv)), name);
6321 Creates a new SV for the RV, C<rv>, to point to. If C<rv> is not an RV then
6322 it will be upgraded to one. If C<classname> is non-null then the new SV will
6323 be blessed in the specified package. The new SV is returned and its
6324 reference count is 1.
6330 Perl_newSVrv(pTHX_ SV *rv, const char *classname)
6336 SV_CHECK_THINKFIRST(rv);
6339 if (SvTYPE(rv) >= SVt_PVMG) {
6340 U32 refcnt = SvREFCNT(rv);
6344 SvREFCNT(rv) = refcnt;
6347 if (SvTYPE(rv) < SVt_RV)
6348 sv_upgrade(rv, SVt_RV);
6349 else if (SvTYPE(rv) > SVt_RV) {
6350 (void)SvOOK_off(rv);
6351 if (SvPVX(rv) && SvLEN(rv))
6352 Safefree(SvPVX(rv));
6362 HV* stash = gv_stashpv(classname, TRUE);
6363 (void)sv_bless(rv, stash);
6369 =for apidoc sv_setref_pv
6371 Copies a pointer into a new SV, optionally blessing the SV. The C<rv>
6372 argument will be upgraded to an RV. That RV will be modified to point to
6373 the new SV. If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
6374 into the SV. The C<classname> argument indicates the package for the
6375 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
6376 will be returned and will have a reference count of 1.
6378 Do not use with other Perl types such as HV, AV, SV, CV, because those
6379 objects will become corrupted by the pointer copy process.
6381 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
6387 Perl_sv_setref_pv(pTHX_ SV *rv, const char *classname, void *pv)
6390 sv_setsv(rv, &PL_sv_undef);
6394 sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
6399 =for apidoc sv_setref_iv
6401 Copies an integer into a new SV, optionally blessing the SV. The C<rv>
6402 argument will be upgraded to an RV. That RV will be modified to point to
6403 the new SV. The C<classname> argument indicates the package for the
6404 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
6405 will be returned and will have a reference count of 1.
6411 Perl_sv_setref_iv(pTHX_ SV *rv, const char *classname, IV iv)
6413 sv_setiv(newSVrv(rv,classname), iv);
6418 =for apidoc sv_setref_uv
6420 Copies an unsigned integer into a new SV, optionally blessing the SV. The C<rv>
6421 argument will be upgraded to an RV. That RV will be modified to point to
6422 the new SV. The C<classname> argument indicates the package for the
6423 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
6424 will be returned and will have a reference count of 1.
6430 Perl_sv_setref_uv(pTHX_ SV *rv, const char *classname, UV uv)
6432 sv_setuv(newSVrv(rv,classname), uv);
6437 =for apidoc sv_setref_nv
6439 Copies a double into a new SV, optionally blessing the SV. The C<rv>
6440 argument will be upgraded to an RV. That RV will be modified to point to
6441 the new SV. The C<classname> argument indicates the package for the
6442 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
6443 will be returned and will have a reference count of 1.
6449 Perl_sv_setref_nv(pTHX_ SV *rv, const char *classname, NV nv)
6451 sv_setnv(newSVrv(rv,classname), nv);
6456 =for apidoc sv_setref_pvn
6458 Copies a string into a new SV, optionally blessing the SV. The length of the
6459 string must be specified with C<n>. The C<rv> argument will be upgraded to
6460 an RV. That RV will be modified to point to the new SV. The C<classname>
6461 argument indicates the package for the blessing. Set C<classname> to
6462 C<Nullch> to avoid the blessing. The new SV will be returned and will have
6463 a reference count of 1.
6465 Note that C<sv_setref_pv> copies the pointer while this copies the string.
6471 Perl_sv_setref_pvn(pTHX_ SV *rv, const char *classname, char *pv, STRLEN n)
6473 sv_setpvn(newSVrv(rv,classname), pv, n);
6478 =for apidoc sv_bless
6480 Blesses an SV into a specified package. The SV must be an RV. The package
6481 must be designated by its stash (see C<gv_stashpv()>). The reference count
6482 of the SV is unaffected.
6488 Perl_sv_bless(pTHX_ SV *sv, HV *stash)
6492 Perl_croak(aTHX_ "Can't bless non-reference value");
6494 if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
6495 if (SvREADONLY(tmpRef))
6496 Perl_croak(aTHX_ PL_no_modify);
6497 if (SvOBJECT(tmpRef)) {
6498 if (SvTYPE(tmpRef) != SVt_PVIO)
6500 SvREFCNT_dec(SvSTASH(tmpRef));
6503 SvOBJECT_on(tmpRef);
6504 if (SvTYPE(tmpRef) != SVt_PVIO)
6506 (void)SvUPGRADE(tmpRef, SVt_PVMG);
6507 SvSTASH(tmpRef) = (HV*)SvREFCNT_inc(stash);
6518 S_sv_unglob(pTHX_ SV *sv)
6522 assert(SvTYPE(sv) == SVt_PVGV);
6527 SvREFCNT_dec(GvSTASH(sv));
6528 GvSTASH(sv) = Nullhv;
6530 sv_unmagic(sv, '*');
6531 Safefree(GvNAME(sv));
6534 /* need to keep SvANY(sv) in the right arena */
6535 xpvmg = new_XPVMG();
6536 StructCopy(SvANY(sv), xpvmg, XPVMG);
6537 del_XPVGV(SvANY(sv));
6540 SvFLAGS(sv) &= ~SVTYPEMASK;
6541 SvFLAGS(sv) |= SVt_PVMG;
6545 =for apidoc sv_unref_flags
6547 Unsets the RV status of the SV, and decrements the reference count of
6548 whatever was being referenced by the RV. This can almost be thought of
6549 as a reversal of C<newSVrv>. The C<cflags> argument can contain
6550 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
6551 (otherwise the decrementing is conditional on the reference count being
6552 different from one or the reference being a readonly SV).
6559 Perl_sv_unref_flags(pTHX_ SV *sv, U32 flags)
6563 if (SvWEAKREF(sv)) {
6571 if (SvREFCNT(rv) != 1 || SvREADONLY(rv) || flags) /* SV_IMMEDIATE_UNREF */
6573 else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
6574 sv_2mortal(rv); /* Schedule for freeing later */
6578 =for apidoc sv_unref
6580 Unsets the RV status of the SV, and decrements the reference count of
6581 whatever was being referenced by the RV. This can almost be thought of
6582 as a reversal of C<newSVrv>. This is C<sv_unref_flags> with the C<flag>
6583 being zero. See C<SvROK_off>.
6589 Perl_sv_unref(pTHX_ SV *sv)
6591 sv_unref_flags(sv, 0);
6595 Perl_sv_taint(pTHX_ SV *sv)
6597 sv_magic((sv), Nullsv, 't', Nullch, 0);
6601 Perl_sv_untaint(pTHX_ SV *sv)
6603 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
6604 MAGIC *mg = mg_find(sv, 't');
6611 Perl_sv_tainted(pTHX_ SV *sv)
6613 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
6614 MAGIC *mg = mg_find(sv, 't');
6615 if (mg && ((mg->mg_len & 1) || ((mg->mg_len & 2) && mg->mg_obj == sv)))
6622 =for apidoc sv_setpviv
6624 Copies an integer into the given SV, also updating its string value.
6625 Does not handle 'set' magic. See C<sv_setpviv_mg>.
6631 Perl_sv_setpviv(pTHX_ SV *sv, IV iv)
6633 char buf[TYPE_CHARS(UV)];
6635 char *ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
6637 sv_setpvn(sv, ptr, ebuf - ptr);
6642 =for apidoc sv_setpviv_mg
6644 Like C<sv_setpviv>, but also handles 'set' magic.
6650 Perl_sv_setpviv_mg(pTHX_ SV *sv, IV iv)
6652 char buf[TYPE_CHARS(UV)];
6654 char *ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
6656 sv_setpvn(sv, ptr, ebuf - ptr);
6660 #if defined(PERL_IMPLICIT_CONTEXT)
6662 Perl_sv_setpvf_nocontext(SV *sv, const char* pat, ...)
6666 va_start(args, pat);
6667 sv_vsetpvf(sv, pat, &args);
6673 Perl_sv_setpvf_mg_nocontext(SV *sv, const char* pat, ...)
6677 va_start(args, pat);
6678 sv_vsetpvf_mg(sv, pat, &args);
6684 =for apidoc sv_setpvf
6686 Processes its arguments like C<sprintf> and sets an SV to the formatted
6687 output. Does not handle 'set' magic. See C<sv_setpvf_mg>.
6693 Perl_sv_setpvf(pTHX_ SV *sv, const char* pat, ...)
6696 va_start(args, pat);
6697 sv_vsetpvf(sv, pat, &args);
6702 Perl_sv_vsetpvf(pTHX_ SV *sv, const char* pat, va_list* args)
6704 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6708 =for apidoc sv_setpvf_mg
6710 Like C<sv_setpvf>, but also handles 'set' magic.
6716 Perl_sv_setpvf_mg(pTHX_ SV *sv, const char* pat, ...)
6719 va_start(args, pat);
6720 sv_vsetpvf_mg(sv, pat, &args);
6725 Perl_sv_vsetpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
6727 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6731 #if defined(PERL_IMPLICIT_CONTEXT)
6733 Perl_sv_catpvf_nocontext(SV *sv, const char* pat, ...)
6737 va_start(args, pat);
6738 sv_vcatpvf(sv, pat, &args);
6743 Perl_sv_catpvf_mg_nocontext(SV *sv, const char* pat, ...)
6747 va_start(args, pat);
6748 sv_vcatpvf_mg(sv, pat, &args);
6754 =for apidoc sv_catpvf
6756 Processes its arguments like C<sprintf> and appends the formatted output
6757 to an SV. Handles 'get' magic, but not 'set' magic. C<SvSETMAGIC()> must
6758 typically be called after calling this function to handle 'set' magic.
6764 Perl_sv_catpvf(pTHX_ SV *sv, const char* pat, ...)
6767 va_start(args, pat);
6768 sv_vcatpvf(sv, pat, &args);
6773 Perl_sv_vcatpvf(pTHX_ SV *sv, const char* pat, va_list* args)
6775 sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6779 =for apidoc sv_catpvf_mg
6781 Like C<sv_catpvf>, but also handles 'set' magic.
6787 Perl_sv_catpvf_mg(pTHX_ SV *sv, const char* pat, ...)
6790 va_start(args, pat);
6791 sv_vcatpvf_mg(sv, pat, &args);
6796 Perl_sv_vcatpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
6798 sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6803 =for apidoc sv_vsetpvfn
6805 Works like C<vcatpvfn> but copies the text into the SV instead of
6812 Perl_sv_vsetpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
6814 sv_setpvn(sv, "", 0);
6815 sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, maybe_tainted);
6819 S_expect_number(pTHX_ char** pattern)
6822 switch (**pattern) {
6823 case '1': case '2': case '3':
6824 case '4': case '5': case '6':
6825 case '7': case '8': case '9':
6826 while (isDIGIT(**pattern))
6827 var = var * 10 + (*(*pattern)++ - '0');
6831 #define EXPECT_NUMBER(pattern, var) (var = S_expect_number(aTHX_ &pattern))
6834 =for apidoc sv_vcatpvfn
6836 Processes its arguments like C<vsprintf> and appends the formatted output
6837 to an SV. Uses an array of SVs if the C style variable argument list is
6838 missing (NULL). When running with taint checks enabled, indicates via
6839 C<maybe_tainted> if results are untrustworthy (often due to the use of
6846 Perl_sv_vcatpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
6853 static char nullstr[] = "(null)";
6856 /* no matter what, this is a string now */
6857 (void)SvPV_force(sv, origlen);
6859 /* special-case "", "%s", and "%_" */
6862 if (patlen == 2 && pat[0] == '%') {
6866 char *s = va_arg(*args, char*);
6867 sv_catpv(sv, s ? s : nullstr);
6869 else if (svix < svmax) {
6870 sv_catsv(sv, *svargs);
6871 if (DO_UTF8(*svargs))
6877 argsv = va_arg(*args, SV*);
6878 sv_catsv(sv, argsv);
6883 /* See comment on '_' below */
6888 patend = (char*)pat + patlen;
6889 for (p = (char*)pat; p < patend; p = q) {
6892 bool vectorize = FALSE;
6893 bool vectorarg = FALSE;
6894 bool vec_utf = FALSE;
6900 bool has_precis = FALSE;
6902 bool is_utf = FALSE;
6905 U8 utf8buf[UTF8_MAXLEN+1];
6906 STRLEN esignlen = 0;
6908 char *eptr = Nullch;
6910 /* Times 4: a decimal digit takes more than 3 binary digits.
6911 * NV_DIG: mantissa takes than many decimal digits.
6912 * Plus 32: Playing safe. */
6913 char ebuf[IV_DIG * 4 + NV_DIG + 32];
6914 /* large enough for "%#.#f" --chip */
6915 /* what about long double NVs? --jhi */
6918 U8 *vecstr = Null(U8*);
6930 STRLEN dotstrlen = 1;
6931 I32 efix = 0; /* explicit format parameter index */
6932 I32 ewix = 0; /* explicit width index */
6933 I32 epix = 0; /* explicit precision index */
6934 I32 evix = 0; /* explicit vector index */
6935 bool asterisk = FALSE;
6937 /* echo everything up to the next format specification */
6938 for (q = p; q < patend && *q != '%'; ++q) ;
6940 sv_catpvn(sv, p, q - p);
6947 We allow format specification elements in this order:
6948 \d+\$ explicit format parameter index
6950 \*?(\d+\$)?v vector with optional (optionally specified) arg
6951 \d+|\*(\d+\$)? width using optional (optionally specified) arg
6952 \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
6954 [%bcdefginopsux_DFOUX] format (mandatory)
6956 if (EXPECT_NUMBER(q, width)) {
6997 if (EXPECT_NUMBER(q, ewix))
7006 if ((vectorarg = asterisk)) {
7016 EXPECT_NUMBER(q, width);
7021 vecsv = va_arg(*args, SV*);
7023 vecsv = (evix ? evix <= svmax : svix < svmax) ?
7024 svargs[ewix ? ewix-1 : svix++] : &PL_sv_undef;
7025 dotstr = SvPVx(vecsv, dotstrlen);
7030 vecsv = va_arg(*args, SV*);
7031 vecstr = (U8*)SvPVx(vecsv,veclen);
7032 vec_utf = DO_UTF8(vecsv);
7034 else if (efix ? efix <= svmax : svix < svmax) {
7035 vecsv = svargs[efix ? efix-1 : svix++];
7036 vecstr = (U8*)SvPVx(vecsv,veclen);
7037 vec_utf = DO_UTF8(vecsv);
7047 i = va_arg(*args, int);
7049 i = (ewix ? ewix <= svmax : svix < svmax) ?
7050 SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
7052 width = (i < 0) ? -i : i;
7062 if (EXPECT_NUMBER(q, epix) && *q++ != '$')
7065 i = va_arg(*args, int);
7067 i = (ewix ? ewix <= svmax : svix < svmax)
7068 ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
7069 precis = (i < 0) ? 0 : i;
7074 precis = precis * 10 + (*q++ - '0');
7082 #if defined(HAS_QUAD) || (defined(HAS_LONG_DOUBLE) && defined(USE_LONG_DOUBLE))
7093 #if defined(HAS_QUAD) || (defined(HAS_LONG_DOUBLE) && defined(USE_LONG_DOUBLE))
7094 if (*(q + 1) == 'l') { /* lld, llf */
7117 argsv = (efix ? efix <= svmax : svix < svmax) ?
7118 svargs[efix ? efix-1 : svix++] : &PL_sv_undef;
7125 uv = args ? va_arg(*args, int) : SvIVx(argsv);
7126 if ((uv > 255 || (!UNI_IS_INVARIANT(uv) || SvUTF8(sv))) && !IN_BYTE) {
7127 eptr = (char*)utf8buf;
7128 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
7140 eptr = va_arg(*args, char*);
7142 #ifdef MACOS_TRADITIONAL
7143 /* On MacOS, %#s format is used for Pascal strings */
7148 elen = strlen(eptr);
7151 elen = sizeof nullstr - 1;
7155 eptr = SvPVx(argsv, elen);
7156 if (DO_UTF8(argsv)) {
7157 if (has_precis && precis < elen) {
7159 sv_pos_u2b(argsv, &p, 0); /* sticks at end */
7162 if (width) { /* fudge width (can't fudge elen) */
7163 width += elen - sv_len_utf8(argsv);
7172 * The "%_" hack might have to be changed someday,
7173 * if ISO or ANSI decide to use '_' for something.
7174 * So we keep it hidden from users' code.
7178 argsv = va_arg(*args, SV*);
7179 eptr = SvPVx(argsv, elen);
7185 if (has_precis && elen > precis)
7194 uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
7212 iv = (IV)utf8n_to_uvchr(vecstr, veclen, &ulen, 0);
7222 case 'h': iv = (short)va_arg(*args, int); break;
7223 default: iv = va_arg(*args, int); break;
7224 case 'l': iv = va_arg(*args, long); break;
7225 case 'V': iv = va_arg(*args, IV); break;
7227 case 'q': iv = va_arg(*args, Quad_t); break;
7234 case 'h': iv = (short)iv; break;
7236 case 'l': iv = (long)iv; break;
7239 case 'q': iv = (Quad_t)iv; break;
7246 esignbuf[esignlen++] = plus;
7250 esignbuf[esignlen++] = '-';
7292 uv = utf8n_to_uvchr(vecstr, veclen, &ulen, 0);
7302 case 'h': uv = (unsigned short)va_arg(*args, unsigned); break;
7303 default: uv = va_arg(*args, unsigned); break;
7304 case 'l': uv = va_arg(*args, unsigned long); break;
7305 case 'V': uv = va_arg(*args, UV); break;
7307 case 'q': uv = va_arg(*args, Quad_t); break;
7314 case 'h': uv = (unsigned short)uv; break;
7316 case 'l': uv = (unsigned long)uv; break;
7319 case 'q': uv = (Quad_t)uv; break;
7325 eptr = ebuf + sizeof ebuf;
7331 p = (char*)((c == 'X')
7332 ? "0123456789ABCDEF" : "0123456789abcdef");
7338 esignbuf[esignlen++] = '0';
7339 esignbuf[esignlen++] = c; /* 'x' or 'X' */
7345 *--eptr = '0' + dig;
7347 if (alt && *eptr != '0')
7353 *--eptr = '0' + dig;
7356 esignbuf[esignlen++] = '0';
7357 esignbuf[esignlen++] = 'b';
7360 default: /* it had better be ten or less */
7361 #if defined(PERL_Y2KWARN)
7362 if (ckWARN(WARN_Y2K)) {
7364 char *s = SvPV(sv,n);
7365 if (n >= 2 && s[n-2] == '1' && s[n-1] == '9'
7366 && (n == 2 || !isDIGIT(s[n-3])))
7368 Perl_warner(aTHX_ WARN_Y2K,
7369 "Possible Y2K bug: %%%c %s",
7370 c, "format string following '19'");
7376 *--eptr = '0' + dig;
7377 } while (uv /= base);
7380 elen = (ebuf + sizeof ebuf) - eptr;
7383 zeros = precis - elen;
7384 else if (precis == 0 && elen == 1 && *eptr == '0')
7389 /* FLOATING POINT */
7392 c = 'f'; /* maybe %F isn't supported here */
7398 /* This is evil, but floating point is even more evil */
7401 nv = args ? va_arg(*args, NV) : SvNVx(argsv);
7404 if (c != 'e' && c != 'E') {
7406 (void)Perl_frexp(nv, &i);
7407 if (i == PERL_INT_MIN)
7408 Perl_die(aTHX_ "panic: frexp");
7410 need = BIT_DIGITS(i);
7412 need += has_precis ? precis : 6; /* known default */
7416 need += 20; /* fudge factor */
7417 if (PL_efloatsize < need) {
7418 Safefree(PL_efloatbuf);
7419 PL_efloatsize = need + 20; /* more fudge */
7420 New(906, PL_efloatbuf, PL_efloatsize, char);
7421 PL_efloatbuf[0] = '\0';
7424 eptr = ebuf + sizeof ebuf;
7427 #if defined(USE_LONG_DOUBLE) && defined(PERL_PRIfldbl)
7429 /* Copy the one or more characters in a long double
7430 * format before the 'base' ([efgEFG]) character to
7431 * the format string. */
7432 static char const prifldbl[] = PERL_PRIfldbl;
7433 char const *p = prifldbl + sizeof(prifldbl) - 3;
7434 while (p >= prifldbl) { *--eptr = *p--; }
7439 do { *--eptr = '0' + (base % 10); } while (base /= 10);
7444 do { *--eptr = '0' + (base % 10); } while (base /= 10);
7456 /* No taint. Otherwise we are in the strange situation
7457 * where printf() taints but print($float) doesn't.
7459 (void)sprintf(PL_efloatbuf, eptr, nv);
7461 eptr = PL_efloatbuf;
7462 elen = strlen(PL_efloatbuf);
7469 i = SvCUR(sv) - origlen;
7472 case 'h': *(va_arg(*args, short*)) = i; break;
7473 default: *(va_arg(*args, int*)) = i; break;
7474 case 'l': *(va_arg(*args, long*)) = i; break;
7475 case 'V': *(va_arg(*args, IV*)) = i; break;
7477 case 'q': *(va_arg(*args, Quad_t*)) = i; break;
7482 sv_setuv_mg(argsv, (UV)i);
7483 continue; /* not "break" */
7490 if (!args && ckWARN(WARN_PRINTF) &&
7491 (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)) {
7492 SV *msg = sv_newmortal();
7493 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %s: ",
7494 (PL_op->op_type == OP_PRTF) ? "printf" : "sprintf");
7497 Perl_sv_catpvf(aTHX_ msg,
7498 "\"%%%c\"", c & 0xFF);
7500 Perl_sv_catpvf(aTHX_ msg,
7501 "\"%%\\%03"UVof"\"",
7504 sv_catpv(msg, "end of string");
7505 Perl_warner(aTHX_ WARN_PRINTF, "%"SVf, msg); /* yes, this is reentrant */
7508 /* output mangled stuff ... */
7514 /* ... right here, because formatting flags should not apply */
7515 SvGROW(sv, SvCUR(sv) + elen + 1);
7517 Copy(eptr, p, elen, char);
7520 SvCUR(sv) = p - SvPVX(sv);
7521 continue; /* not "break" */
7524 have = esignlen + zeros + elen;
7525 need = (have > width ? have : width);
7528 SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
7530 if (esignlen && fill == '0') {
7531 for (i = 0; i < esignlen; i++)
7535 memset(p, fill, gap);
7538 if (esignlen && fill != '0') {
7539 for (i = 0; i < esignlen; i++)
7543 for (i = zeros; i; i--)
7547 Copy(eptr, p, elen, char);
7551 memset(p, ' ', gap);
7556 Copy(dotstr, p, dotstrlen, char);
7560 vectorize = FALSE; /* done iterating over vecstr */
7565 SvCUR(sv) = p - SvPVX(sv);
7573 #if defined(USE_ITHREADS)
7575 #if defined(USE_THREADS)
7576 # include "error: USE_THREADS and USE_ITHREADS are incompatible"
7579 #ifndef GpREFCNT_inc
7580 # define GpREFCNT_inc(gp) ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
7584 #define sv_dup_inc(s) SvREFCNT_inc(sv_dup(s))
7585 #define av_dup(s) (AV*)sv_dup((SV*)s)
7586 #define av_dup_inc(s) (AV*)SvREFCNT_inc(sv_dup((SV*)s))
7587 #define hv_dup(s) (HV*)sv_dup((SV*)s)
7588 #define hv_dup_inc(s) (HV*)SvREFCNT_inc(sv_dup((SV*)s))
7589 #define cv_dup(s) (CV*)sv_dup((SV*)s)
7590 #define cv_dup_inc(s) (CV*)SvREFCNT_inc(sv_dup((SV*)s))
7591 #define io_dup(s) (IO*)sv_dup((SV*)s)
7592 #define io_dup_inc(s) (IO*)SvREFCNT_inc(sv_dup((SV*)s))
7593 #define gv_dup(s) (GV*)sv_dup((SV*)s)
7594 #define gv_dup_inc(s) (GV*)SvREFCNT_inc(sv_dup((SV*)s))
7595 #define SAVEPV(p) (p ? savepv(p) : Nullch)
7596 #define SAVEPVN(p,n) (p ? savepvn(p,n) : Nullch)
7599 Perl_re_dup(pTHX_ REGEXP *r)
7601 /* XXX fix when pmop->op_pmregexp becomes shared */
7602 return ReREFCNT_inc(r);
7606 Perl_fp_dup(pTHX_ PerlIO *fp, char type)
7610 return (PerlIO*)NULL;
7612 /* look for it in the table first */
7613 ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
7617 /* create anew and remember what it is */
7618 ret = PerlIO_fdupopen(aTHX_ fp);
7619 ptr_table_store(PL_ptr_table, fp, ret);
7624 Perl_dirp_dup(pTHX_ DIR *dp)
7633 Perl_gp_dup(pTHX_ GP *gp)
7638 /* look for it in the table first */
7639 ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
7643 /* create anew and remember what it is */
7644 Newz(0, ret, 1, GP);
7645 ptr_table_store(PL_ptr_table, gp, ret);
7648 ret->gp_refcnt = 0; /* must be before any other dups! */
7649 ret->gp_sv = sv_dup_inc(gp->gp_sv);
7650 ret->gp_io = io_dup_inc(gp->gp_io);
7651 ret->gp_form = cv_dup_inc(gp->gp_form);
7652 ret->gp_av = av_dup_inc(gp->gp_av);
7653 ret->gp_hv = hv_dup_inc(gp->gp_hv);
7654 ret->gp_egv = gv_dup(gp->gp_egv); /* GvEGV is not refcounted */
7655 ret->gp_cv = cv_dup_inc(gp->gp_cv);
7656 ret->gp_cvgen = gp->gp_cvgen;
7657 ret->gp_flags = gp->gp_flags;
7658 ret->gp_line = gp->gp_line;
7659 ret->gp_file = gp->gp_file; /* points to COP.cop_file */
7664 Perl_mg_dup(pTHX_ MAGIC *mg)
7666 MAGIC *mgret = (MAGIC*)NULL;
7669 return (MAGIC*)NULL;
7670 /* look for it in the table first */
7671 mgret = (MAGIC*)ptr_table_fetch(PL_ptr_table, mg);
7675 for (; mg; mg = mg->mg_moremagic) {
7677 Newz(0, nmg, 1, MAGIC);
7681 mgprev->mg_moremagic = nmg;
7682 nmg->mg_virtual = mg->mg_virtual; /* XXX copy dynamic vtable? */
7683 nmg->mg_private = mg->mg_private;
7684 nmg->mg_type = mg->mg_type;
7685 nmg->mg_flags = mg->mg_flags;
7686 if (mg->mg_type == 'r') {
7687 nmg->mg_obj = (SV*)re_dup((REGEXP*)mg->mg_obj);
7690 nmg->mg_obj = (mg->mg_flags & MGf_REFCOUNTED)
7691 ? sv_dup_inc(mg->mg_obj)
7692 : sv_dup(mg->mg_obj);
7694 nmg->mg_len = mg->mg_len;
7695 nmg->mg_ptr = mg->mg_ptr; /* XXX random ptr? */
7696 if (mg->mg_ptr && mg->mg_type != 'g') {
7697 if (mg->mg_len >= 0) {
7698 nmg->mg_ptr = SAVEPVN(mg->mg_ptr, mg->mg_len);
7699 if (mg->mg_type == 'c' && AMT_AMAGIC((AMT*)mg->mg_ptr)) {
7700 AMT *amtp = (AMT*)mg->mg_ptr;
7701 AMT *namtp = (AMT*)nmg->mg_ptr;
7703 for (i = 1; i < NofAMmeth; i++) {
7704 namtp->table[i] = cv_dup_inc(amtp->table[i]);
7708 else if (mg->mg_len == HEf_SVKEY)
7709 nmg->mg_ptr = (char*)sv_dup_inc((SV*)mg->mg_ptr);
7717 Perl_ptr_table_new(pTHX)
7720 Newz(0, tbl, 1, PTR_TBL_t);
7723 Newz(0, tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
7728 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *tbl, void *sv)
7730 PTR_TBL_ENT_t *tblent;
7731 UV hash = PTR2UV(sv);
7733 tblent = tbl->tbl_ary[hash & tbl->tbl_max];
7734 for (; tblent; tblent = tblent->next) {
7735 if (tblent->oldval == sv)
7736 return tblent->newval;
7742 Perl_ptr_table_store(pTHX_ PTR_TBL_t *tbl, void *oldv, void *newv)
7744 PTR_TBL_ENT_t *tblent, **otblent;
7745 /* XXX this may be pessimal on platforms where pointers aren't good
7746 * hash values e.g. if they grow faster in the most significant
7748 UV hash = PTR2UV(oldv);
7752 otblent = &tbl->tbl_ary[hash & tbl->tbl_max];
7753 for (tblent = *otblent; tblent; i=0, tblent = tblent->next) {
7754 if (tblent->oldval == oldv) {
7755 tblent->newval = newv;
7760 Newz(0, tblent, 1, PTR_TBL_ENT_t);
7761 tblent->oldval = oldv;
7762 tblent->newval = newv;
7763 tblent->next = *otblent;
7766 if (i && tbl->tbl_items > tbl->tbl_max)
7767 ptr_table_split(tbl);
7771 Perl_ptr_table_split(pTHX_ PTR_TBL_t *tbl)
7773 PTR_TBL_ENT_t **ary = tbl->tbl_ary;
7774 UV oldsize = tbl->tbl_max + 1;
7775 UV newsize = oldsize * 2;
7778 Renew(ary, newsize, PTR_TBL_ENT_t*);
7779 Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
7780 tbl->tbl_max = --newsize;
7782 for (i=0; i < oldsize; i++, ary++) {
7783 PTR_TBL_ENT_t **curentp, **entp, *ent;
7786 curentp = ary + oldsize;
7787 for (entp = ary, ent = *ary; ent; ent = *entp) {
7788 if ((newsize & PTR2UV(ent->oldval)) != i) {
7790 ent->next = *curentp;
7801 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *tbl)
7803 register PTR_TBL_ENT_t **array;
7804 register PTR_TBL_ENT_t *entry;
7805 register PTR_TBL_ENT_t *oentry = Null(PTR_TBL_ENT_t*);
7809 if (!tbl || !tbl->tbl_items) {
7813 array = tbl->tbl_ary;
7820 entry = entry->next;
7824 if (++riter > max) {
7827 entry = array[riter];
7835 Perl_ptr_table_free(pTHX_ PTR_TBL_t *tbl)
7840 ptr_table_clear(tbl);
7841 Safefree(tbl->tbl_ary);
7850 S_gv_share(pTHX_ SV *sstr)
7853 SV *sv = &PL_sv_no; /* just need SvREADONLY-ness */
7855 if (GvIO(gv) || GvFORM(gv)) {
7856 GvSHARED_off(gv); /* GvIOs cannot be shared. nor can GvFORMs */
7858 else if (!GvCV(gv)) {
7862 /* CvPADLISTs cannot be shared */
7863 if (!CvXSUB(GvCV(gv))) {
7868 if (!GvSHARED(gv)) {
7870 PerlIO_printf(Perl_debug_log, "gv_share: unable to share %s::%s\n",
7871 HvNAME(GvSTASH(gv)), GvNAME(gv));
7877 * write attempts will die with
7878 * "Modification of a read-only value attempted"
7884 SvREADONLY_on(GvSV(gv));
7891 SvREADONLY_on(GvAV(gv));
7898 SvREADONLY_on(GvAV(gv));
7901 return sstr; /* he_dup() will SvREFCNT_inc() */
7905 Perl_sv_dup(pTHX_ SV *sstr)
7909 if (!sstr || SvTYPE(sstr) == SVTYPEMASK)
7911 /* look for it in the table first */
7912 dstr = (SV*)ptr_table_fetch(PL_ptr_table, sstr);
7916 /* create anew and remember what it is */
7918 ptr_table_store(PL_ptr_table, sstr, dstr);
7921 SvFLAGS(dstr) = SvFLAGS(sstr);
7922 SvFLAGS(dstr) &= ~SVf_OOK; /* don't propagate OOK hack */
7923 SvREFCNT(dstr) = 0; /* must be before any other dups! */
7926 if (SvANY(sstr) && PL_watch_pvx && SvPVX(sstr) == PL_watch_pvx)
7927 PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
7928 PL_watch_pvx, SvPVX(sstr));
7931 switch (SvTYPE(sstr)) {
7936 SvANY(dstr) = new_XIV();
7937 SvIVX(dstr) = SvIVX(sstr);
7940 SvANY(dstr) = new_XNV();
7941 SvNVX(dstr) = SvNVX(sstr);
7944 SvANY(dstr) = new_XRV();
7945 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7948 SvANY(dstr) = new_XPV();
7949 SvCUR(dstr) = SvCUR(sstr);
7950 SvLEN(dstr) = SvLEN(sstr);
7952 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7953 else if (SvPVX(sstr) && SvLEN(sstr))
7954 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7956 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7959 SvANY(dstr) = new_XPVIV();
7960 SvCUR(dstr) = SvCUR(sstr);
7961 SvLEN(dstr) = SvLEN(sstr);
7962 SvIVX(dstr) = SvIVX(sstr);
7964 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7965 else if (SvPVX(sstr) && SvLEN(sstr))
7966 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7968 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7971 SvANY(dstr) = new_XPVNV();
7972 SvCUR(dstr) = SvCUR(sstr);
7973 SvLEN(dstr) = SvLEN(sstr);
7974 SvIVX(dstr) = SvIVX(sstr);
7975 SvNVX(dstr) = SvNVX(sstr);
7977 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7978 else if (SvPVX(sstr) && SvLEN(sstr))
7979 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7981 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7984 SvANY(dstr) = new_XPVMG();
7985 SvCUR(dstr) = SvCUR(sstr);
7986 SvLEN(dstr) = SvLEN(sstr);
7987 SvIVX(dstr) = SvIVX(sstr);
7988 SvNVX(dstr) = SvNVX(sstr);
7989 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7990 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7992 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7993 else if (SvPVX(sstr) && SvLEN(sstr))
7994 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7996 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7999 SvANY(dstr) = new_XPVBM();
8000 SvCUR(dstr) = SvCUR(sstr);
8001 SvLEN(dstr) = SvLEN(sstr);
8002 SvIVX(dstr) = SvIVX(sstr);
8003 SvNVX(dstr) = SvNVX(sstr);
8004 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
8005 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
8007 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
8008 else if (SvPVX(sstr) && SvLEN(sstr))
8009 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
8011 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
8012 BmRARE(dstr) = BmRARE(sstr);
8013 BmUSEFUL(dstr) = BmUSEFUL(sstr);
8014 BmPREVIOUS(dstr)= BmPREVIOUS(sstr);
8017 SvANY(dstr) = new_XPVLV();
8018 SvCUR(dstr) = SvCUR(sstr);
8019 SvLEN(dstr) = SvLEN(sstr);
8020 SvIVX(dstr) = SvIVX(sstr);
8021 SvNVX(dstr) = SvNVX(sstr);
8022 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
8023 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
8025 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
8026 else if (SvPVX(sstr) && SvLEN(sstr))
8027 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
8029 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
8030 LvTARGOFF(dstr) = LvTARGOFF(sstr); /* XXX sometimes holds PMOP* when DEBUGGING */
8031 LvTARGLEN(dstr) = LvTARGLEN(sstr);
8032 LvTARG(dstr) = sv_dup_inc(LvTARG(sstr));
8033 LvTYPE(dstr) = LvTYPE(sstr);
8036 if (GvSHARED((GV*)sstr)) {
8038 if ((share = gv_share(sstr))) {
8042 PerlIO_printf(Perl_debug_log, "sv_dup: sharing %s::%s\n",
8043 HvNAME(GvSTASH(share)), GvNAME(share));
8048 SvANY(dstr) = new_XPVGV();
8049 SvCUR(dstr) = SvCUR(sstr);
8050 SvLEN(dstr) = SvLEN(sstr);
8051 SvIVX(dstr) = SvIVX(sstr);
8052 SvNVX(dstr) = SvNVX(sstr);
8053 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
8054 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
8056 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
8057 else if (SvPVX(sstr) && SvLEN(sstr))
8058 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
8060 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
8061 GvNAMELEN(dstr) = GvNAMELEN(sstr);
8062 GvNAME(dstr) = SAVEPVN(GvNAME(sstr), GvNAMELEN(sstr));
8063 GvSTASH(dstr) = hv_dup_inc(GvSTASH(sstr));
8064 GvFLAGS(dstr) = GvFLAGS(sstr);
8065 GvGP(dstr) = gp_dup(GvGP(sstr));
8066 (void)GpREFCNT_inc(GvGP(dstr));
8069 SvANY(dstr) = new_XPVIO();
8070 SvCUR(dstr) = SvCUR(sstr);
8071 SvLEN(dstr) = SvLEN(sstr);
8072 SvIVX(dstr) = SvIVX(sstr);
8073 SvNVX(dstr) = SvNVX(sstr);
8074 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
8075 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
8077 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
8078 else if (SvPVX(sstr) && SvLEN(sstr))
8079 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
8081 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
8082 IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(sstr));
8083 if (IoOFP(sstr) == IoIFP(sstr))
8084 IoOFP(dstr) = IoIFP(dstr);
8086 IoOFP(dstr) = fp_dup(IoOFP(sstr), IoTYPE(sstr));
8087 /* PL_rsfp_filters entries have fake IoDIRP() */
8088 if (IoDIRP(sstr) && !(IoFLAGS(sstr) & IOf_FAKE_DIRP))
8089 IoDIRP(dstr) = dirp_dup(IoDIRP(sstr));
8091 IoDIRP(dstr) = IoDIRP(sstr);
8092 IoLINES(dstr) = IoLINES(sstr);
8093 IoPAGE(dstr) = IoPAGE(sstr);
8094 IoPAGE_LEN(dstr) = IoPAGE_LEN(sstr);
8095 IoLINES_LEFT(dstr) = IoLINES_LEFT(sstr);
8096 IoTOP_NAME(dstr) = SAVEPV(IoTOP_NAME(sstr));
8097 IoTOP_GV(dstr) = gv_dup(IoTOP_GV(sstr));
8098 IoFMT_NAME(dstr) = SAVEPV(IoFMT_NAME(sstr));
8099 IoFMT_GV(dstr) = gv_dup(IoFMT_GV(sstr));
8100 IoBOTTOM_NAME(dstr) = SAVEPV(IoBOTTOM_NAME(sstr));
8101 IoBOTTOM_GV(dstr) = gv_dup(IoBOTTOM_GV(sstr));
8102 IoSUBPROCESS(dstr) = IoSUBPROCESS(sstr);
8103 IoTYPE(dstr) = IoTYPE(sstr);
8104 IoFLAGS(dstr) = IoFLAGS(sstr);
8107 SvANY(dstr) = new_XPVAV();
8108 SvCUR(dstr) = SvCUR(sstr);
8109 SvLEN(dstr) = SvLEN(sstr);
8110 SvIVX(dstr) = SvIVX(sstr);
8111 SvNVX(dstr) = SvNVX(sstr);
8112 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
8113 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
8114 AvARYLEN((AV*)dstr) = sv_dup_inc(AvARYLEN((AV*)sstr));
8115 AvFLAGS((AV*)dstr) = AvFLAGS((AV*)sstr);
8116 if (AvARRAY((AV*)sstr)) {
8117 SV **dst_ary, **src_ary;
8118 SSize_t items = AvFILLp((AV*)sstr) + 1;
8120 src_ary = AvARRAY((AV*)sstr);
8121 Newz(0, dst_ary, AvMAX((AV*)sstr)+1, SV*);
8122 ptr_table_store(PL_ptr_table, src_ary, dst_ary);
8123 SvPVX(dstr) = (char*)dst_ary;
8124 AvALLOC((AV*)dstr) = dst_ary;
8125 if (AvREAL((AV*)sstr)) {
8127 *dst_ary++ = sv_dup_inc(*src_ary++);
8131 *dst_ary++ = sv_dup(*src_ary++);
8133 items = AvMAX((AV*)sstr) - AvFILLp((AV*)sstr);
8134 while (items-- > 0) {
8135 *dst_ary++ = &PL_sv_undef;
8139 SvPVX(dstr) = Nullch;
8140 AvALLOC((AV*)dstr) = (SV**)NULL;
8144 SvANY(dstr) = new_XPVHV();
8145 SvCUR(dstr) = SvCUR(sstr);
8146 SvLEN(dstr) = SvLEN(sstr);
8147 SvIVX(dstr) = SvIVX(sstr);
8148 SvNVX(dstr) = SvNVX(sstr);
8149 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
8150 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
8151 HvRITER((HV*)dstr) = HvRITER((HV*)sstr);
8152 if (HvARRAY((HV*)sstr)) {
8154 XPVHV *dxhv = (XPVHV*)SvANY(dstr);
8155 XPVHV *sxhv = (XPVHV*)SvANY(sstr);
8156 Newz(0, dxhv->xhv_array,
8157 PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1), char);
8158 while (i <= sxhv->xhv_max) {
8159 ((HE**)dxhv->xhv_array)[i] = he_dup(((HE**)sxhv->xhv_array)[i],
8160 !!HvSHAREKEYS(sstr));
8163 dxhv->xhv_eiter = he_dup(sxhv->xhv_eiter, !!HvSHAREKEYS(sstr));
8166 SvPVX(dstr) = Nullch;
8167 HvEITER((HV*)dstr) = (HE*)NULL;
8169 HvPMROOT((HV*)dstr) = HvPMROOT((HV*)sstr); /* XXX */
8170 HvNAME((HV*)dstr) = SAVEPV(HvNAME((HV*)sstr));
8173 SvANY(dstr) = new_XPVFM();
8174 FmLINES(dstr) = FmLINES(sstr);
8178 SvANY(dstr) = new_XPVCV();
8180 SvCUR(dstr) = SvCUR(sstr);
8181 SvLEN(dstr) = SvLEN(sstr);
8182 SvIVX(dstr) = SvIVX(sstr);
8183 SvNVX(dstr) = SvNVX(sstr);
8184 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
8185 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
8186 if (SvPVX(sstr) && SvLEN(sstr))
8187 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
8189 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
8190 CvSTASH(dstr) = hv_dup(CvSTASH(sstr));/* NOTE: not refcounted */
8191 CvSTART(dstr) = CvSTART(sstr);
8192 CvROOT(dstr) = OpREFCNT_inc(CvROOT(sstr));
8193 CvXSUB(dstr) = CvXSUB(sstr);
8194 CvXSUBANY(dstr) = CvXSUBANY(sstr);
8195 CvGV(dstr) = gv_dup_inc(CvGV(sstr));
8196 CvDEPTH(dstr) = CvDEPTH(sstr);
8197 if (CvPADLIST(sstr) && !AvREAL(CvPADLIST(sstr))) {
8198 /* XXX padlists are real, but pretend to be not */
8199 AvREAL_on(CvPADLIST(sstr));
8200 CvPADLIST(dstr) = av_dup_inc(CvPADLIST(sstr));
8201 AvREAL_off(CvPADLIST(sstr));
8202 AvREAL_off(CvPADLIST(dstr));
8205 CvPADLIST(dstr) = av_dup_inc(CvPADLIST(sstr));
8206 if (!CvANON(sstr) || CvCLONED(sstr))
8207 CvOUTSIDE(dstr) = cv_dup_inc(CvOUTSIDE(sstr));
8209 CvOUTSIDE(dstr) = cv_dup(CvOUTSIDE(sstr));
8210 CvFLAGS(dstr) = CvFLAGS(sstr);
8213 Perl_croak(aTHX_ "Bizarre SvTYPE [%d]", SvTYPE(sstr));
8217 if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
8224 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max)
8229 return (PERL_CONTEXT*)NULL;
8231 /* look for it in the table first */
8232 ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
8236 /* create anew and remember what it is */
8237 Newz(56, ncxs, max + 1, PERL_CONTEXT);
8238 ptr_table_store(PL_ptr_table, cxs, ncxs);
8241 PERL_CONTEXT *cx = &cxs[ix];
8242 PERL_CONTEXT *ncx = &ncxs[ix];
8243 ncx->cx_type = cx->cx_type;
8244 if (CxTYPE(cx) == CXt_SUBST) {
8245 Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
8248 ncx->blk_oldsp = cx->blk_oldsp;
8249 ncx->blk_oldcop = cx->blk_oldcop;
8250 ncx->blk_oldretsp = cx->blk_oldretsp;
8251 ncx->blk_oldmarksp = cx->blk_oldmarksp;
8252 ncx->blk_oldscopesp = cx->blk_oldscopesp;
8253 ncx->blk_oldpm = cx->blk_oldpm;
8254 ncx->blk_gimme = cx->blk_gimme;
8255 switch (CxTYPE(cx)) {
8257 ncx->blk_sub.cv = (cx->blk_sub.olddepth == 0
8258 ? cv_dup_inc(cx->blk_sub.cv)
8259 : cv_dup(cx->blk_sub.cv));
8260 ncx->blk_sub.argarray = (cx->blk_sub.hasargs
8261 ? av_dup_inc(cx->blk_sub.argarray)
8263 ncx->blk_sub.savearray = av_dup(cx->blk_sub.savearray);
8264 ncx->blk_sub.olddepth = cx->blk_sub.olddepth;
8265 ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
8266 ncx->blk_sub.lval = cx->blk_sub.lval;
8269 ncx->blk_eval.old_in_eval = cx->blk_eval.old_in_eval;
8270 ncx->blk_eval.old_op_type = cx->blk_eval.old_op_type;
8271 ncx->blk_eval.old_namesv = sv_dup_inc(cx->blk_eval.old_namesv);
8272 ncx->blk_eval.old_eval_root = cx->blk_eval.old_eval_root;
8273 ncx->blk_eval.cur_text = sv_dup(cx->blk_eval.cur_text);
8276 ncx->blk_loop.label = cx->blk_loop.label;
8277 ncx->blk_loop.resetsp = cx->blk_loop.resetsp;
8278 ncx->blk_loop.redo_op = cx->blk_loop.redo_op;
8279 ncx->blk_loop.next_op = cx->blk_loop.next_op;
8280 ncx->blk_loop.last_op = cx->blk_loop.last_op;
8281 ncx->blk_loop.iterdata = (CxPADLOOP(cx)
8282 ? cx->blk_loop.iterdata
8283 : gv_dup((GV*)cx->blk_loop.iterdata));
8284 ncx->blk_loop.oldcurpad
8285 = (SV**)ptr_table_fetch(PL_ptr_table,
8286 cx->blk_loop.oldcurpad);
8287 ncx->blk_loop.itersave = sv_dup_inc(cx->blk_loop.itersave);
8288 ncx->blk_loop.iterlval = sv_dup_inc(cx->blk_loop.iterlval);
8289 ncx->blk_loop.iterary = av_dup_inc(cx->blk_loop.iterary);
8290 ncx->blk_loop.iterix = cx->blk_loop.iterix;
8291 ncx->blk_loop.itermax = cx->blk_loop.itermax;
8294 ncx->blk_sub.cv = cv_dup(cx->blk_sub.cv);
8295 ncx->blk_sub.gv = gv_dup(cx->blk_sub.gv);
8296 ncx->blk_sub.dfoutgv = gv_dup_inc(cx->blk_sub.dfoutgv);
8297 ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
8310 Perl_si_dup(pTHX_ PERL_SI *si)
8315 return (PERL_SI*)NULL;
8317 /* look for it in the table first */
8318 nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
8322 /* create anew and remember what it is */
8323 Newz(56, nsi, 1, PERL_SI);
8324 ptr_table_store(PL_ptr_table, si, nsi);
8326 nsi->si_stack = av_dup_inc(si->si_stack);
8327 nsi->si_cxix = si->si_cxix;
8328 nsi->si_cxmax = si->si_cxmax;
8329 nsi->si_cxstack = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax);
8330 nsi->si_type = si->si_type;
8331 nsi->si_prev = si_dup(si->si_prev);
8332 nsi->si_next = si_dup(si->si_next);
8333 nsi->si_markoff = si->si_markoff;
8338 #define POPINT(ss,ix) ((ss)[--(ix)].any_i32)
8339 #define TOPINT(ss,ix) ((ss)[ix].any_i32)
8340 #define POPLONG(ss,ix) ((ss)[--(ix)].any_long)
8341 #define TOPLONG(ss,ix) ((ss)[ix].any_long)
8342 #define POPIV(ss,ix) ((ss)[--(ix)].any_iv)
8343 #define TOPIV(ss,ix) ((ss)[ix].any_iv)
8344 #define POPPTR(ss,ix) ((ss)[--(ix)].any_ptr)
8345 #define TOPPTR(ss,ix) ((ss)[ix].any_ptr)
8346 #define POPDPTR(ss,ix) ((ss)[--(ix)].any_dptr)
8347 #define TOPDPTR(ss,ix) ((ss)[ix].any_dptr)
8348 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
8349 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
8352 #define pv_dup_inc(p) SAVEPV(p)
8353 #define pv_dup(p) SAVEPV(p)
8354 #define svp_dup_inc(p,pp) any_dup(p,pp)
8357 Perl_any_dup(pTHX_ void *v, PerlInterpreter *proto_perl)
8364 /* look for it in the table first */
8365 ret = ptr_table_fetch(PL_ptr_table, v);
8369 /* see if it is part of the interpreter structure */
8370 if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
8371 ret = (void*)(((char*)aTHXo) + (((char*)v) - (char*)proto_perl));
8379 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl)
8381 ANY *ss = proto_perl->Tsavestack;
8382 I32 ix = proto_perl->Tsavestack_ix;
8383 I32 max = proto_perl->Tsavestack_max;
8396 void (*dptr) (void*);
8397 void (*dxptr) (pTHXo_ void*);
8400 Newz(54, nss, max, ANY);
8406 case SAVEt_ITEM: /* normal string */
8407 sv = (SV*)POPPTR(ss,ix);
8408 TOPPTR(nss,ix) = sv_dup_inc(sv);
8409 sv = (SV*)POPPTR(ss,ix);
8410 TOPPTR(nss,ix) = sv_dup_inc(sv);
8412 case SAVEt_SV: /* scalar reference */
8413 sv = (SV*)POPPTR(ss,ix);
8414 TOPPTR(nss,ix) = sv_dup_inc(sv);
8415 gv = (GV*)POPPTR(ss,ix);
8416 TOPPTR(nss,ix) = gv_dup_inc(gv);
8418 case SAVEt_GENERIC_PVREF: /* generic char* */
8419 c = (char*)POPPTR(ss,ix);
8420 TOPPTR(nss,ix) = pv_dup(c);
8421 ptr = POPPTR(ss,ix);
8422 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8424 case SAVEt_GENERIC_SVREF: /* generic sv */
8425 case SAVEt_SVREF: /* scalar reference */
8426 sv = (SV*)POPPTR(ss,ix);
8427 TOPPTR(nss,ix) = sv_dup_inc(sv);
8428 ptr = POPPTR(ss,ix);
8429 TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
8431 case SAVEt_AV: /* array reference */
8432 av = (AV*)POPPTR(ss,ix);
8433 TOPPTR(nss,ix) = av_dup_inc(av);
8434 gv = (GV*)POPPTR(ss,ix);
8435 TOPPTR(nss,ix) = gv_dup(gv);
8437 case SAVEt_HV: /* hash reference */
8438 hv = (HV*)POPPTR(ss,ix);
8439 TOPPTR(nss,ix) = hv_dup_inc(hv);
8440 gv = (GV*)POPPTR(ss,ix);
8441 TOPPTR(nss,ix) = gv_dup(gv);
8443 case SAVEt_INT: /* int reference */
8444 ptr = POPPTR(ss,ix);
8445 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8446 intval = (int)POPINT(ss,ix);
8447 TOPINT(nss,ix) = intval;
8449 case SAVEt_LONG: /* long reference */
8450 ptr = POPPTR(ss,ix);
8451 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8452 longval = (long)POPLONG(ss,ix);
8453 TOPLONG(nss,ix) = longval;
8455 case SAVEt_I32: /* I32 reference */
8456 case SAVEt_I16: /* I16 reference */
8457 case SAVEt_I8: /* I8 reference */
8458 ptr = POPPTR(ss,ix);
8459 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8463 case SAVEt_IV: /* IV reference */
8464 ptr = POPPTR(ss,ix);
8465 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8469 case SAVEt_SPTR: /* SV* reference */
8470 ptr = POPPTR(ss,ix);
8471 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8472 sv = (SV*)POPPTR(ss,ix);
8473 TOPPTR(nss,ix) = sv_dup(sv);
8475 case SAVEt_VPTR: /* random* reference */
8476 ptr = POPPTR(ss,ix);
8477 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8478 ptr = POPPTR(ss,ix);
8479 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8481 case SAVEt_PPTR: /* char* reference */
8482 ptr = POPPTR(ss,ix);
8483 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8484 c = (char*)POPPTR(ss,ix);
8485 TOPPTR(nss,ix) = pv_dup(c);
8487 case SAVEt_HPTR: /* HV* reference */
8488 ptr = POPPTR(ss,ix);
8489 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8490 hv = (HV*)POPPTR(ss,ix);
8491 TOPPTR(nss,ix) = hv_dup(hv);
8493 case SAVEt_APTR: /* AV* reference */
8494 ptr = POPPTR(ss,ix);
8495 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8496 av = (AV*)POPPTR(ss,ix);
8497 TOPPTR(nss,ix) = av_dup(av);
8500 gv = (GV*)POPPTR(ss,ix);
8501 TOPPTR(nss,ix) = gv_dup(gv);
8503 case SAVEt_GP: /* scalar reference */
8504 gp = (GP*)POPPTR(ss,ix);
8505 TOPPTR(nss,ix) = gp = gp_dup(gp);
8506 (void)GpREFCNT_inc(gp);
8507 gv = (GV*)POPPTR(ss,ix);
8508 TOPPTR(nss,ix) = gv_dup_inc(c);
8509 c = (char*)POPPTR(ss,ix);
8510 TOPPTR(nss,ix) = pv_dup(c);
8517 sv = (SV*)POPPTR(ss,ix);
8518 TOPPTR(nss,ix) = sv_dup_inc(sv);
8521 ptr = POPPTR(ss,ix);
8522 if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
8523 /* these are assumed to be refcounted properly */
8524 switch (((OP*)ptr)->op_type) {
8531 TOPPTR(nss,ix) = ptr;
8536 TOPPTR(nss,ix) = Nullop;
8541 TOPPTR(nss,ix) = Nullop;
8544 c = (char*)POPPTR(ss,ix);
8545 TOPPTR(nss,ix) = pv_dup_inc(c);
8548 longval = POPLONG(ss,ix);
8549 TOPLONG(nss,ix) = longval;
8552 hv = (HV*)POPPTR(ss,ix);
8553 TOPPTR(nss,ix) = hv_dup_inc(hv);
8554 c = (char*)POPPTR(ss,ix);
8555 TOPPTR(nss,ix) = pv_dup_inc(c);
8559 case SAVEt_DESTRUCTOR:
8560 ptr = POPPTR(ss,ix);
8561 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
8562 dptr = POPDPTR(ss,ix);
8563 TOPDPTR(nss,ix) = (void (*)(void*))any_dup((void *)dptr, proto_perl);
8565 case SAVEt_DESTRUCTOR_X:
8566 ptr = POPPTR(ss,ix);
8567 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
8568 dxptr = POPDXPTR(ss,ix);
8569 TOPDXPTR(nss,ix) = (void (*)(pTHXo_ void*))any_dup((void *)dxptr, proto_perl);
8571 case SAVEt_REGCONTEXT:
8577 case SAVEt_STACK_POS: /* Position on Perl stack */
8581 case SAVEt_AELEM: /* array element */
8582 sv = (SV*)POPPTR(ss,ix);
8583 TOPPTR(nss,ix) = sv_dup_inc(sv);
8586 av = (AV*)POPPTR(ss,ix);
8587 TOPPTR(nss,ix) = av_dup_inc(av);
8589 case SAVEt_HELEM: /* hash element */
8590 sv = (SV*)POPPTR(ss,ix);
8591 TOPPTR(nss,ix) = sv_dup_inc(sv);
8592 sv = (SV*)POPPTR(ss,ix);
8593 TOPPTR(nss,ix) = sv_dup_inc(sv);
8594 hv = (HV*)POPPTR(ss,ix);
8595 TOPPTR(nss,ix) = hv_dup_inc(hv);
8598 ptr = POPPTR(ss,ix);
8599 TOPPTR(nss,ix) = ptr;
8606 av = (AV*)POPPTR(ss,ix);
8607 TOPPTR(nss,ix) = av_dup(av);
8610 longval = (long)POPLONG(ss,ix);
8611 TOPLONG(nss,ix) = longval;
8612 ptr = POPPTR(ss,ix);
8613 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8614 sv = (SV*)POPPTR(ss,ix);
8615 TOPPTR(nss,ix) = sv_dup(sv);
8618 Perl_croak(aTHX_ "panic: ss_dup inconsistency");
8630 perl_clone(PerlInterpreter *proto_perl, UV flags)
8633 CPerlObj *pPerl = (CPerlObj*)proto_perl;
8636 #ifdef PERL_IMPLICIT_SYS
8637 return perl_clone_using(proto_perl, flags,
8639 proto_perl->IMemShared,
8640 proto_perl->IMemParse,
8650 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
8651 struct IPerlMem* ipM, struct IPerlMem* ipMS,
8652 struct IPerlMem* ipMP, struct IPerlEnv* ipE,
8653 struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
8654 struct IPerlDir* ipD, struct IPerlSock* ipS,
8655 struct IPerlProc* ipP)
8657 /* XXX many of the string copies here can be optimized if they're
8658 * constants; they need to be allocated as common memory and just
8659 * their pointers copied. */
8663 CPerlObj *pPerl = new(ipM) CPerlObj(ipM, ipMS, ipMP, ipE, ipStd, ipLIO,
8665 PERL_SET_THX(pPerl);
8666 # else /* !PERL_OBJECT */
8667 PerlInterpreter *my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
8668 PERL_SET_THX(my_perl);
8671 memset(my_perl, 0xab, sizeof(PerlInterpreter));
8677 # else /* !DEBUGGING */
8678 Zero(my_perl, 1, PerlInterpreter);
8679 # endif /* DEBUGGING */
8683 PL_MemShared = ipMS;
8691 # endif /* PERL_OBJECT */
8692 #else /* !PERL_IMPLICIT_SYS */
8694 PerlInterpreter *my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
8695 PERL_SET_THX(my_perl);
8698 memset(my_perl, 0xab, sizeof(PerlInterpreter));
8704 # else /* !DEBUGGING */
8705 Zero(my_perl, 1, PerlInterpreter);
8706 # endif /* DEBUGGING */
8707 #endif /* PERL_IMPLICIT_SYS */
8710 PL_xiv_arenaroot = NULL;
8712 PL_xnv_arenaroot = NULL;
8714 PL_xrv_arenaroot = NULL;
8716 PL_xpv_arenaroot = NULL;
8718 PL_xpviv_arenaroot = NULL;
8719 PL_xpviv_root = NULL;
8720 PL_xpvnv_arenaroot = NULL;
8721 PL_xpvnv_root = NULL;
8722 PL_xpvcv_arenaroot = NULL;
8723 PL_xpvcv_root = NULL;
8724 PL_xpvav_arenaroot = NULL;
8725 PL_xpvav_root = NULL;
8726 PL_xpvhv_arenaroot = NULL;
8727 PL_xpvhv_root = NULL;
8728 PL_xpvmg_arenaroot = NULL;
8729 PL_xpvmg_root = NULL;
8730 PL_xpvlv_arenaroot = NULL;
8731 PL_xpvlv_root = NULL;
8732 PL_xpvbm_arenaroot = NULL;
8733 PL_xpvbm_root = NULL;
8734 PL_he_arenaroot = NULL;
8736 PL_nice_chunk = NULL;
8737 PL_nice_chunk_size = 0;
8740 PL_sv_root = Nullsv;
8741 PL_sv_arenaroot = Nullsv;
8743 PL_debug = proto_perl->Idebug;
8745 /* create SV map for pointer relocation */
8746 PL_ptr_table = ptr_table_new();
8748 /* initialize these special pointers as early as possible */
8749 SvANY(&PL_sv_undef) = NULL;
8750 SvREFCNT(&PL_sv_undef) = (~(U32)0)/2;
8751 SvFLAGS(&PL_sv_undef) = SVf_READONLY|SVt_NULL;
8752 ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
8755 SvUPGRADE(&PL_sv_no, SVt_PVNV);
8757 SvANY(&PL_sv_no) = new_XPVNV();
8759 SvREFCNT(&PL_sv_no) = (~(U32)0)/2;
8760 SvFLAGS(&PL_sv_no) = SVp_NOK|SVf_NOK|SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
8761 SvPVX(&PL_sv_no) = SAVEPVN(PL_No, 0);
8762 SvCUR(&PL_sv_no) = 0;
8763 SvLEN(&PL_sv_no) = 1;
8764 SvNVX(&PL_sv_no) = 0;
8765 ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
8768 SvUPGRADE(&PL_sv_yes, SVt_PVNV);
8770 SvANY(&PL_sv_yes) = new_XPVNV();
8772 SvREFCNT(&PL_sv_yes) = (~(U32)0)/2;
8773 SvFLAGS(&PL_sv_yes) = SVp_NOK|SVf_NOK|SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
8774 SvPVX(&PL_sv_yes) = SAVEPVN(PL_Yes, 1);
8775 SvCUR(&PL_sv_yes) = 1;
8776 SvLEN(&PL_sv_yes) = 2;
8777 SvNVX(&PL_sv_yes) = 1;
8778 ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
8780 /* create shared string table */
8781 PL_strtab = newHV();
8782 HvSHAREKEYS_off(PL_strtab);
8783 hv_ksplit(PL_strtab, 512);
8784 ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
8786 PL_compiling = proto_perl->Icompiling;
8787 PL_compiling.cop_stashpv = SAVEPV(PL_compiling.cop_stashpv);
8788 PL_compiling.cop_file = SAVEPV(PL_compiling.cop_file);
8789 ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
8790 if (!specialWARN(PL_compiling.cop_warnings))
8791 PL_compiling.cop_warnings = sv_dup_inc(PL_compiling.cop_warnings);
8792 if (!specialCopIO(PL_compiling.cop_io))
8793 PL_compiling.cop_io = sv_dup_inc(PL_compiling.cop_io);
8794 PL_curcop = (COP*)any_dup(proto_perl->Tcurcop, proto_perl);
8796 /* pseudo environmental stuff */
8797 PL_origargc = proto_perl->Iorigargc;
8799 New(0, PL_origargv, i+1, char*);
8800 PL_origargv[i] = '\0';
8802 PL_origargv[i] = SAVEPV(proto_perl->Iorigargv[i]);
8804 PL_envgv = gv_dup(proto_perl->Ienvgv);
8805 PL_incgv = gv_dup(proto_perl->Iincgv);
8806 PL_hintgv = gv_dup(proto_perl->Ihintgv);
8807 PL_origfilename = SAVEPV(proto_perl->Iorigfilename);
8808 PL_diehook = sv_dup_inc(proto_perl->Idiehook);
8809 PL_warnhook = sv_dup_inc(proto_perl->Iwarnhook);
8812 PL_minus_c = proto_perl->Iminus_c;
8813 PL_patchlevel = sv_dup_inc(proto_perl->Ipatchlevel);
8814 PL_localpatches = proto_perl->Ilocalpatches;
8815 PL_splitstr = proto_perl->Isplitstr;
8816 PL_preprocess = proto_perl->Ipreprocess;
8817 PL_minus_n = proto_perl->Iminus_n;
8818 PL_minus_p = proto_perl->Iminus_p;
8819 PL_minus_l = proto_perl->Iminus_l;
8820 PL_minus_a = proto_perl->Iminus_a;
8821 PL_minus_F = proto_perl->Iminus_F;
8822 PL_doswitches = proto_perl->Idoswitches;
8823 PL_dowarn = proto_perl->Idowarn;
8824 PL_doextract = proto_perl->Idoextract;
8825 PL_sawampersand = proto_perl->Isawampersand;
8826 PL_unsafe = proto_perl->Iunsafe;
8827 PL_inplace = SAVEPV(proto_perl->Iinplace);
8828 PL_e_script = sv_dup_inc(proto_perl->Ie_script);
8829 PL_perldb = proto_perl->Iperldb;
8830 PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
8832 /* magical thingies */
8833 /* XXX time(&PL_basetime) when asked for? */
8834 PL_basetime = proto_perl->Ibasetime;
8835 PL_formfeed = sv_dup(proto_perl->Iformfeed);
8837 PL_maxsysfd = proto_perl->Imaxsysfd;
8838 PL_multiline = proto_perl->Imultiline;
8839 PL_statusvalue = proto_perl->Istatusvalue;
8841 PL_statusvalue_vms = proto_perl->Istatusvalue_vms;
8844 /* shortcuts to various I/O objects */
8845 PL_stdingv = gv_dup(proto_perl->Istdingv);
8846 PL_stderrgv = gv_dup(proto_perl->Istderrgv);
8847 PL_defgv = gv_dup(proto_perl->Idefgv);
8848 PL_argvgv = gv_dup(proto_perl->Iargvgv);
8849 PL_argvoutgv = gv_dup(proto_perl->Iargvoutgv);
8850 PL_argvout_stack = av_dup(proto_perl->Iargvout_stack);
8852 /* shortcuts to regexp stuff */
8853 PL_replgv = gv_dup(proto_perl->Ireplgv);
8855 /* shortcuts to misc objects */
8856 PL_errgv = gv_dup(proto_perl->Ierrgv);
8858 /* shortcuts to debugging objects */
8859 PL_DBgv = gv_dup(proto_perl->IDBgv);
8860 PL_DBline = gv_dup(proto_perl->IDBline);
8861 PL_DBsub = gv_dup(proto_perl->IDBsub);
8862 PL_DBsingle = sv_dup(proto_perl->IDBsingle);
8863 PL_DBtrace = sv_dup(proto_perl->IDBtrace);
8864 PL_DBsignal = sv_dup(proto_perl->IDBsignal);
8865 PL_lineary = av_dup(proto_perl->Ilineary);
8866 PL_dbargs = av_dup(proto_perl->Idbargs);
8869 PL_defstash = hv_dup_inc(proto_perl->Tdefstash);
8870 PL_curstash = hv_dup(proto_perl->Tcurstash);
8871 PL_debstash = hv_dup(proto_perl->Idebstash);
8872 PL_globalstash = hv_dup(proto_perl->Iglobalstash);
8873 PL_curstname = sv_dup_inc(proto_perl->Icurstname);
8875 PL_beginav = av_dup_inc(proto_perl->Ibeginav);
8876 PL_endav = av_dup_inc(proto_perl->Iendav);
8877 PL_checkav = av_dup_inc(proto_perl->Icheckav);
8878 PL_initav = av_dup_inc(proto_perl->Iinitav);
8880 PL_sub_generation = proto_perl->Isub_generation;
8882 /* funky return mechanisms */
8883 PL_forkprocess = proto_perl->Iforkprocess;
8885 /* subprocess state */
8886 PL_fdpid = av_dup_inc(proto_perl->Ifdpid);
8888 /* internal state */
8889 PL_tainting = proto_perl->Itainting;
8890 PL_maxo = proto_perl->Imaxo;
8891 if (proto_perl->Iop_mask)
8892 PL_op_mask = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
8894 PL_op_mask = Nullch;
8896 /* current interpreter roots */
8897 PL_main_cv = cv_dup_inc(proto_perl->Imain_cv);
8898 PL_main_root = OpREFCNT_inc(proto_perl->Imain_root);
8899 PL_main_start = proto_perl->Imain_start;
8900 PL_eval_root = proto_perl->Ieval_root;
8901 PL_eval_start = proto_perl->Ieval_start;
8903 /* runtime control stuff */
8904 PL_curcopdb = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
8905 PL_copline = proto_perl->Icopline;
8907 PL_filemode = proto_perl->Ifilemode;
8908 PL_lastfd = proto_perl->Ilastfd;
8909 PL_oldname = proto_perl->Ioldname; /* XXX not quite right */
8912 PL_gensym = proto_perl->Igensym;
8913 PL_preambled = proto_perl->Ipreambled;
8914 PL_preambleav = av_dup_inc(proto_perl->Ipreambleav);
8915 PL_laststatval = proto_perl->Ilaststatval;
8916 PL_laststype = proto_perl->Ilaststype;
8917 PL_mess_sv = Nullsv;
8919 PL_ors_sv = sv_dup_inc(proto_perl->Iors_sv);
8920 PL_ofmt = SAVEPV(proto_perl->Iofmt);
8922 /* interpreter atexit processing */
8923 PL_exitlistlen = proto_perl->Iexitlistlen;
8924 if (PL_exitlistlen) {
8925 New(0, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
8926 Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
8929 PL_exitlist = (PerlExitListEntry*)NULL;
8930 PL_modglobal = hv_dup_inc(proto_perl->Imodglobal);
8932 PL_profiledata = NULL;
8933 PL_rsfp = fp_dup(proto_perl->Irsfp, '<');
8934 /* PL_rsfp_filters entries have fake IoDIRP() */
8935 PL_rsfp_filters = av_dup_inc(proto_perl->Irsfp_filters);
8937 PL_compcv = cv_dup(proto_perl->Icompcv);
8938 PL_comppad = av_dup(proto_perl->Icomppad);
8939 PL_comppad_name = av_dup(proto_perl->Icomppad_name);
8940 PL_comppad_name_fill = proto_perl->Icomppad_name_fill;
8941 PL_comppad_name_floor = proto_perl->Icomppad_name_floor;
8942 PL_curpad = (SV**)ptr_table_fetch(PL_ptr_table,
8943 proto_perl->Tcurpad);
8945 #ifdef HAVE_INTERP_INTERN
8946 sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
8949 /* more statics moved here */
8950 PL_generation = proto_perl->Igeneration;
8951 PL_DBcv = cv_dup(proto_perl->IDBcv);
8953 PL_in_clean_objs = proto_perl->Iin_clean_objs;
8954 PL_in_clean_all = proto_perl->Iin_clean_all;
8956 PL_uid = proto_perl->Iuid;
8957 PL_euid = proto_perl->Ieuid;
8958 PL_gid = proto_perl->Igid;
8959 PL_egid = proto_perl->Iegid;
8960 PL_nomemok = proto_perl->Inomemok;
8961 PL_an = proto_perl->Ian;
8962 PL_cop_seqmax = proto_perl->Icop_seqmax;
8963 PL_op_seqmax = proto_perl->Iop_seqmax;
8964 PL_evalseq = proto_perl->Ievalseq;
8965 PL_origenviron = proto_perl->Iorigenviron; /* XXX not quite right */
8966 PL_origalen = proto_perl->Iorigalen;
8967 PL_pidstatus = newHV(); /* XXX flag for cloning? */
8968 PL_osname = SAVEPV(proto_perl->Iosname);
8969 PL_sh_path = SAVEPV(proto_perl->Ish_path);
8970 PL_sighandlerp = proto_perl->Isighandlerp;
8973 PL_runops = proto_perl->Irunops;
8975 Copy(proto_perl->Itokenbuf, PL_tokenbuf, 256, char);
8978 PL_cshlen = proto_perl->Icshlen;
8979 PL_cshname = SAVEPVN(proto_perl->Icshname, PL_cshlen);
8982 PL_lex_state = proto_perl->Ilex_state;
8983 PL_lex_defer = proto_perl->Ilex_defer;
8984 PL_lex_expect = proto_perl->Ilex_expect;
8985 PL_lex_formbrack = proto_perl->Ilex_formbrack;
8986 PL_lex_dojoin = proto_perl->Ilex_dojoin;
8987 PL_lex_starts = proto_perl->Ilex_starts;
8988 PL_lex_stuff = sv_dup_inc(proto_perl->Ilex_stuff);
8989 PL_lex_repl = sv_dup_inc(proto_perl->Ilex_repl);
8990 PL_lex_op = proto_perl->Ilex_op;
8991 PL_lex_inpat = proto_perl->Ilex_inpat;
8992 PL_lex_inwhat = proto_perl->Ilex_inwhat;
8993 PL_lex_brackets = proto_perl->Ilex_brackets;
8994 i = (PL_lex_brackets < 120 ? 120 : PL_lex_brackets);
8995 PL_lex_brackstack = SAVEPVN(proto_perl->Ilex_brackstack,i);
8996 PL_lex_casemods = proto_perl->Ilex_casemods;
8997 i = (PL_lex_casemods < 12 ? 12 : PL_lex_casemods);
8998 PL_lex_casestack = SAVEPVN(proto_perl->Ilex_casestack,i);
9000 Copy(proto_perl->Inextval, PL_nextval, 5, YYSTYPE);
9001 Copy(proto_perl->Inexttype, PL_nexttype, 5, I32);
9002 PL_nexttoke = proto_perl->Inexttoke;
9004 PL_linestr = sv_dup_inc(proto_perl->Ilinestr);
9005 i = proto_perl->Ibufptr - SvPVX(proto_perl->Ilinestr);
9006 PL_bufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
9007 i = proto_perl->Ioldbufptr - SvPVX(proto_perl->Ilinestr);
9008 PL_oldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
9009 i = proto_perl->Ioldoldbufptr - SvPVX(proto_perl->Ilinestr);
9010 PL_oldoldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
9011 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
9012 i = proto_perl->Ilinestart - SvPVX(proto_perl->Ilinestr);
9013 PL_linestart = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
9014 PL_pending_ident = proto_perl->Ipending_ident;
9015 PL_sublex_info = proto_perl->Isublex_info; /* XXX not quite right */
9017 PL_expect = proto_perl->Iexpect;
9019 PL_multi_start = proto_perl->Imulti_start;
9020 PL_multi_end = proto_perl->Imulti_end;
9021 PL_multi_open = proto_perl->Imulti_open;
9022 PL_multi_close = proto_perl->Imulti_close;
9024 PL_error_count = proto_perl->Ierror_count;
9025 PL_subline = proto_perl->Isubline;
9026 PL_subname = sv_dup_inc(proto_perl->Isubname);
9028 PL_min_intro_pending = proto_perl->Imin_intro_pending;
9029 PL_max_intro_pending = proto_perl->Imax_intro_pending;
9030 PL_padix = proto_perl->Ipadix;
9031 PL_padix_floor = proto_perl->Ipadix_floor;
9032 PL_pad_reset_pending = proto_perl->Ipad_reset_pending;
9034 i = proto_perl->Ilast_uni - SvPVX(proto_perl->Ilinestr);
9035 PL_last_uni = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
9036 i = proto_perl->Ilast_lop - SvPVX(proto_perl->Ilinestr);
9037 PL_last_lop = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
9038 PL_last_lop_op = proto_perl->Ilast_lop_op;
9039 PL_in_my = proto_perl->Iin_my;
9040 PL_in_my_stash = hv_dup(proto_perl->Iin_my_stash);
9042 PL_cryptseen = proto_perl->Icryptseen;
9045 PL_hints = proto_perl->Ihints;
9047 PL_amagic_generation = proto_perl->Iamagic_generation;
9049 #ifdef USE_LOCALE_COLLATE
9050 PL_collation_ix = proto_perl->Icollation_ix;
9051 PL_collation_name = SAVEPV(proto_perl->Icollation_name);
9052 PL_collation_standard = proto_perl->Icollation_standard;
9053 PL_collxfrm_base = proto_perl->Icollxfrm_base;
9054 PL_collxfrm_mult = proto_perl->Icollxfrm_mult;
9055 #endif /* USE_LOCALE_COLLATE */
9057 #ifdef USE_LOCALE_NUMERIC
9058 PL_numeric_name = SAVEPV(proto_perl->Inumeric_name);
9059 PL_numeric_standard = proto_perl->Inumeric_standard;
9060 PL_numeric_local = proto_perl->Inumeric_local;
9061 PL_numeric_radix = sv_dup_inc(proto_perl->Inumeric_radix);
9062 #endif /* !USE_LOCALE_NUMERIC */
9064 /* utf8 character classes */
9065 PL_utf8_alnum = sv_dup_inc(proto_perl->Iutf8_alnum);
9066 PL_utf8_alnumc = sv_dup_inc(proto_perl->Iutf8_alnumc);
9067 PL_utf8_ascii = sv_dup_inc(proto_perl->Iutf8_ascii);
9068 PL_utf8_alpha = sv_dup_inc(proto_perl->Iutf8_alpha);
9069 PL_utf8_space = sv_dup_inc(proto_perl->Iutf8_space);
9070 PL_utf8_cntrl = sv_dup_inc(proto_perl->Iutf8_cntrl);
9071 PL_utf8_graph = sv_dup_inc(proto_perl->Iutf8_graph);
9072 PL_utf8_digit = sv_dup_inc(proto_perl->Iutf8_digit);
9073 PL_utf8_upper = sv_dup_inc(proto_perl->Iutf8_upper);
9074 PL_utf8_lower = sv_dup_inc(proto_perl->Iutf8_lower);
9075 PL_utf8_print = sv_dup_inc(proto_perl->Iutf8_print);
9076 PL_utf8_punct = sv_dup_inc(proto_perl->Iutf8_punct);
9077 PL_utf8_xdigit = sv_dup_inc(proto_perl->Iutf8_xdigit);
9078 PL_utf8_mark = sv_dup_inc(proto_perl->Iutf8_mark);
9079 PL_utf8_toupper = sv_dup_inc(proto_perl->Iutf8_toupper);
9080 PL_utf8_totitle = sv_dup_inc(proto_perl->Iutf8_totitle);
9081 PL_utf8_tolower = sv_dup_inc(proto_perl->Iutf8_tolower);
9084 PL_last_swash_hv = Nullhv; /* reinits on demand */
9085 PL_last_swash_klen = 0;
9086 PL_last_swash_key[0]= '\0';
9087 PL_last_swash_tmps = (U8*)NULL;
9088 PL_last_swash_slen = 0;
9090 /* perly.c globals */
9091 PL_yydebug = proto_perl->Iyydebug;
9092 PL_yynerrs = proto_perl->Iyynerrs;
9093 PL_yyerrflag = proto_perl->Iyyerrflag;
9094 PL_yychar = proto_perl->Iyychar;
9095 PL_yyval = proto_perl->Iyyval;
9096 PL_yylval = proto_perl->Iyylval;
9098 PL_glob_index = proto_perl->Iglob_index;
9099 PL_srand_called = proto_perl->Isrand_called;
9100 PL_uudmap['M'] = 0; /* reinits on demand */
9101 PL_bitcount = Nullch; /* reinits on demand */
9103 if (proto_perl->Ipsig_pend) {
9104 Newz(0, PL_psig_pend, SIG_SIZE, int);
9107 PL_psig_pend = (int*)NULL;
9110 if (proto_perl->Ipsig_ptr) {
9111 Newz(0, PL_psig_ptr, SIG_SIZE, SV*);
9112 Newz(0, PL_psig_name, SIG_SIZE, SV*);
9113 for (i = 1; i < SIG_SIZE; i++) {
9114 PL_psig_ptr[i] = sv_dup_inc(proto_perl->Ipsig_ptr[i]);
9115 PL_psig_name[i] = sv_dup_inc(proto_perl->Ipsig_name[i]);
9119 PL_psig_ptr = (SV**)NULL;
9120 PL_psig_name = (SV**)NULL;
9123 /* thrdvar.h stuff */
9125 if (flags & CLONEf_COPY_STACKS) {
9126 /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
9127 PL_tmps_ix = proto_perl->Ttmps_ix;
9128 PL_tmps_max = proto_perl->Ttmps_max;
9129 PL_tmps_floor = proto_perl->Ttmps_floor;
9130 Newz(50, PL_tmps_stack, PL_tmps_max, SV*);
9132 while (i <= PL_tmps_ix) {
9133 PL_tmps_stack[i] = sv_dup_inc(proto_perl->Ttmps_stack[i]);
9137 /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
9138 i = proto_perl->Tmarkstack_max - proto_perl->Tmarkstack;
9139 Newz(54, PL_markstack, i, I32);
9140 PL_markstack_max = PL_markstack + (proto_perl->Tmarkstack_max
9141 - proto_perl->Tmarkstack);
9142 PL_markstack_ptr = PL_markstack + (proto_perl->Tmarkstack_ptr
9143 - proto_perl->Tmarkstack);
9144 Copy(proto_perl->Tmarkstack, PL_markstack,
9145 PL_markstack_ptr - PL_markstack + 1, I32);
9147 /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
9148 * NOTE: unlike the others! */
9149 PL_scopestack_ix = proto_perl->Tscopestack_ix;
9150 PL_scopestack_max = proto_perl->Tscopestack_max;
9151 Newz(54, PL_scopestack, PL_scopestack_max, I32);
9152 Copy(proto_perl->Tscopestack, PL_scopestack, PL_scopestack_ix, I32);
9154 /* next push_return() sets PL_retstack[PL_retstack_ix]
9155 * NOTE: unlike the others! */
9156 PL_retstack_ix = proto_perl->Tretstack_ix;
9157 PL_retstack_max = proto_perl->Tretstack_max;
9158 Newz(54, PL_retstack, PL_retstack_max, OP*);
9159 Copy(proto_perl->Tretstack, PL_retstack, PL_retstack_ix, I32);
9161 /* NOTE: si_dup() looks at PL_markstack */
9162 PL_curstackinfo = si_dup(proto_perl->Tcurstackinfo);
9164 /* PL_curstack = PL_curstackinfo->si_stack; */
9165 PL_curstack = av_dup(proto_perl->Tcurstack);
9166 PL_mainstack = av_dup(proto_perl->Tmainstack);
9168 /* next PUSHs() etc. set *(PL_stack_sp+1) */
9169 PL_stack_base = AvARRAY(PL_curstack);
9170 PL_stack_sp = PL_stack_base + (proto_perl->Tstack_sp
9171 - proto_perl->Tstack_base);
9172 PL_stack_max = PL_stack_base + AvMAX(PL_curstack);
9174 /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
9175 * NOTE: unlike the others! */
9176 PL_savestack_ix = proto_perl->Tsavestack_ix;
9177 PL_savestack_max = proto_perl->Tsavestack_max;
9178 /*Newz(54, PL_savestack, PL_savestack_max, ANY);*/
9179 PL_savestack = ss_dup(proto_perl);
9183 ENTER; /* perl_destruct() wants to LEAVE; */
9186 PL_start_env = proto_perl->Tstart_env; /* XXXXXX */
9187 PL_top_env = &PL_start_env;
9189 PL_op = proto_perl->Top;
9192 PL_Xpv = (XPV*)NULL;
9193 PL_na = proto_perl->Tna;
9195 PL_statbuf = proto_perl->Tstatbuf;
9196 PL_statcache = proto_perl->Tstatcache;
9197 PL_statgv = gv_dup(proto_perl->Tstatgv);
9198 PL_statname = sv_dup_inc(proto_perl->Tstatname);
9200 PL_timesbuf = proto_perl->Ttimesbuf;
9203 PL_tainted = proto_perl->Ttainted;
9204 PL_curpm = proto_perl->Tcurpm; /* XXX No PMOP ref count */
9205 PL_nrs = sv_dup_inc(proto_perl->Tnrs);
9206 PL_rs = sv_dup_inc(proto_perl->Trs);
9207 PL_last_in_gv = gv_dup(proto_perl->Tlast_in_gv);
9208 PL_ofs_sv = sv_dup_inc(proto_perl->Tofs_sv);
9209 PL_defoutgv = gv_dup_inc(proto_perl->Tdefoutgv);
9210 PL_chopset = proto_perl->Tchopset; /* XXX never deallocated */
9211 PL_toptarget = sv_dup_inc(proto_perl->Ttoptarget);
9212 PL_bodytarget = sv_dup_inc(proto_perl->Tbodytarget);
9213 PL_formtarget = sv_dup(proto_perl->Tformtarget);
9215 PL_restartop = proto_perl->Trestartop;
9216 PL_in_eval = proto_perl->Tin_eval;
9217 PL_delaymagic = proto_perl->Tdelaymagic;
9218 PL_dirty = proto_perl->Tdirty;
9219 PL_localizing = proto_perl->Tlocalizing;
9221 #ifdef PERL_FLEXIBLE_EXCEPTIONS
9222 PL_protect = proto_perl->Tprotect;
9224 PL_errors = sv_dup_inc(proto_perl->Terrors);
9225 PL_av_fetch_sv = Nullsv;
9226 PL_hv_fetch_sv = Nullsv;
9227 Zero(&PL_hv_fetch_ent_mh, 1, HE); /* XXX */
9228 PL_modcount = proto_perl->Tmodcount;
9229 PL_lastgotoprobe = Nullop;
9230 PL_dumpindent = proto_perl->Tdumpindent;
9232 PL_sortcop = (OP*)any_dup(proto_perl->Tsortcop, proto_perl);
9233 PL_sortstash = hv_dup(proto_perl->Tsortstash);
9234 PL_firstgv = gv_dup(proto_perl->Tfirstgv);
9235 PL_secondgv = gv_dup(proto_perl->Tsecondgv);
9236 PL_sortcxix = proto_perl->Tsortcxix;
9237 PL_efloatbuf = Nullch; /* reinits on demand */
9238 PL_efloatsize = 0; /* reinits on demand */
9242 PL_screamfirst = NULL;
9243 PL_screamnext = NULL;
9244 PL_maxscream = -1; /* reinits on demand */
9245 PL_lastscream = Nullsv;
9247 PL_watchaddr = NULL;
9248 PL_watchok = Nullch;
9250 PL_regdummy = proto_perl->Tregdummy;
9251 PL_regcomp_parse = Nullch;
9252 PL_regxend = Nullch;
9253 PL_regcode = (regnode*)NULL;
9256 PL_regprecomp = Nullch;
9261 PL_seen_zerolen = 0;
9263 PL_regcomp_rx = (regexp*)NULL;
9265 PL_colorset = 0; /* reinits PL_colors[] */
9266 /*PL_colors[6] = {0,0,0,0,0,0};*/
9267 PL_reg_whilem_seen = 0;
9268 PL_reginput = Nullch;
9271 PL_regstartp = (I32*)NULL;
9272 PL_regendp = (I32*)NULL;
9273 PL_reglastparen = (U32*)NULL;
9274 PL_regtill = Nullch;
9276 PL_reg_start_tmp = (char**)NULL;
9277 PL_reg_start_tmpl = 0;
9278 PL_regdata = (struct reg_data*)NULL;
9281 PL_reg_eval_set = 0;
9283 PL_regprogram = (regnode*)NULL;
9285 PL_regcc = (CURCUR*)NULL;
9286 PL_reg_call_cc = (struct re_cc_state*)NULL;
9287 PL_reg_re = (regexp*)NULL;
9288 PL_reg_ganch = Nullch;
9290 PL_reg_magic = (MAGIC*)NULL;
9292 PL_reg_oldcurpm = (PMOP*)NULL;
9293 PL_reg_curpm = (PMOP*)NULL;
9294 PL_reg_oldsaved = Nullch;
9295 PL_reg_oldsavedlen = 0;
9297 PL_reg_leftiter = 0;
9298 PL_reg_poscache = Nullch;
9299 PL_reg_poscache_size= 0;
9301 /* RE engine - function pointers */
9302 PL_regcompp = proto_perl->Tregcompp;
9303 PL_regexecp = proto_perl->Tregexecp;
9304 PL_regint_start = proto_perl->Tregint_start;
9305 PL_regint_string = proto_perl->Tregint_string;
9306 PL_regfree = proto_perl->Tregfree;
9308 PL_reginterp_cnt = 0;
9309 PL_reg_starttry = 0;
9311 if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
9312 ptr_table_free(PL_ptr_table);
9313 PL_ptr_table = NULL;
9317 return (PerlInterpreter*)pPerl;
9323 #else /* !USE_ITHREADS */
9329 #endif /* USE_ITHREADS */
9332 do_report_used(pTHXo_ SV *sv)
9334 if (SvTYPE(sv) != SVTYPEMASK) {
9335 PerlIO_printf(Perl_debug_log, "****\n");
9341 do_clean_objs(pTHXo_ SV *sv)
9345 if (SvROK(sv) && SvOBJECT(rv = SvRV(sv))) {
9346 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(sv));)
9347 if (SvWEAKREF(sv)) {
9358 /* XXX Might want to check arrays, etc. */
9361 #ifndef DISABLE_DESTRUCTOR_KLUDGE
9363 do_clean_named_objs(pTHXo_ SV *sv)
9365 if (SvTYPE(sv) == SVt_PVGV && GvGP(sv)) {
9366 if ( SvOBJECT(GvSV(sv)) ||
9367 (GvAV(sv) && SvOBJECT(GvAV(sv))) ||
9368 (GvHV(sv) && SvOBJECT(GvHV(sv))) ||
9369 (GvIO(sv) && SvOBJECT(GvIO(sv))) ||
9370 (GvCV(sv) && SvOBJECT(GvCV(sv))) )
9372 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning named glob object:\n "), sv_dump(sv));)
9380 do_clean_all(pTHXo_ SV *sv)
9382 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) );)
9383 SvFLAGS(sv) |= SVf_BREAK;