3 * Copyright (c) 1991-2000, Larry Wall
5 * You may distribute under the terms of either the GNU General Public
6 * License or the Artistic License, as specified in the README file.
11 * "I wonder what the Entish is for 'yes' and 'no'," he thought.
19 #define SV_CHECK_THINKFIRST(sv) if (SvTHINKFIRST(sv)) sv_force_normal(sv)
21 static void do_report_used(pTHXo_ SV *sv);
22 static void do_clean_objs(pTHXo_ SV *sv);
23 #ifndef DISABLE_DESTRUCTOR_KLUDGE
24 static void do_clean_named_objs(pTHXo_ SV *sv);
26 static void do_clean_all(pTHXo_ SV *sv);
29 * "A time to plant, and a time to uproot what was planted..."
34 SvANY(p) = (void *)PL_sv_root; \
35 SvFLAGS(p) = SVTYPEMASK; \
40 /* sv_mutex must be held while calling uproot_SV() */
41 #define uproot_SV(p) \
44 PL_sv_root = (SV*)SvANY(p); \
66 if (PL_debug & 32768) \
76 if (PL_debug & 32768) {
81 for (sva = PL_sv_arenaroot; sva; sva = (SV *) SvANY(sva)) {
83 svend = &sva[SvREFCNT(sva)];
84 if (p >= sv && p < svend)
88 if (ckWARN_d(WARN_INTERNAL))
89 Perl_warner(aTHX_ WARN_INTERNAL,
90 "Attempt to free non-arena SV: 0x%"UVxf,
98 #else /* ! DEBUGGING */
100 #define del_SV(p) plant_SV(p)
102 #endif /* DEBUGGING */
105 Perl_sv_add_arena(pTHX_ char *ptr, U32 size, U32 flags)
110 Zero(ptr, size, char);
112 /* The first SV in an arena isn't an SV. */
113 SvANY(sva) = (void *) PL_sv_arenaroot; /* ptr to next arena */
114 SvREFCNT(sva) = size / sizeof(SV); /* number of SV slots */
115 SvFLAGS(sva) = flags; /* FAKE if not to be freed */
117 PL_sv_arenaroot = sva;
118 PL_sv_root = sva + 1;
120 svend = &sva[SvREFCNT(sva) - 1];
123 SvANY(sv) = (void *)(SV*)(sv + 1);
124 SvFLAGS(sv) = SVTYPEMASK;
128 SvFLAGS(sv) = SVTYPEMASK;
131 /* sv_mutex must be held while calling more_sv() */
138 sv_add_arena(PL_nice_chunk, PL_nice_chunk_size, 0);
139 PL_nice_chunk = Nullch;
142 char *chunk; /* must use New here to match call to */
143 New(704,chunk,1008,char); /* Safefree() in sv_free_arenas() */
144 sv_add_arena(chunk, 1008, 0);
151 S_visit(pTHX_ SVFUNC_t f)
157 for (sva = PL_sv_arenaroot; sva; sva = (SV*)SvANY(sva)) {
158 svend = &sva[SvREFCNT(sva)];
159 for (sv = sva + 1; sv < svend; ++sv) {
160 if (SvTYPE(sv) != SVTYPEMASK)
167 Perl_sv_report_used(pTHX)
169 visit(do_report_used);
173 Perl_sv_clean_objs(pTHX)
175 PL_in_clean_objs = TRUE;
176 visit(do_clean_objs);
177 #ifndef DISABLE_DESTRUCTOR_KLUDGE
178 /* some barnacles may yet remain, clinging to typeglobs */
179 visit(do_clean_named_objs);
181 PL_in_clean_objs = FALSE;
185 Perl_sv_clean_all(pTHX)
187 PL_in_clean_all = TRUE;
189 PL_in_clean_all = FALSE;
193 Perl_sv_free_arenas(pTHX)
197 XPV *arena, *arenanext;
199 /* Free arenas here, but be careful about fake ones. (We assume
200 contiguity of the fake ones with the corresponding real ones.) */
202 for (sva = PL_sv_arenaroot; sva; sva = svanext) {
203 svanext = (SV*) SvANY(sva);
204 while (svanext && SvFAKE(svanext))
205 svanext = (SV*) SvANY(svanext);
208 Safefree((void *)sva);
211 for (arena = PL_xiv_arenaroot; arena; arena = arenanext) {
212 arenanext = (XPV*)arena->xpv_pv;
215 PL_xiv_arenaroot = 0;
217 for (arena = PL_xnv_arenaroot; arena; arena = arenanext) {
218 arenanext = (XPV*)arena->xpv_pv;
221 PL_xnv_arenaroot = 0;
223 for (arena = PL_xrv_arenaroot; arena; arena = arenanext) {
224 arenanext = (XPV*)arena->xpv_pv;
227 PL_xrv_arenaroot = 0;
229 for (arena = PL_xpv_arenaroot; arena; arena = arenanext) {
230 arenanext = (XPV*)arena->xpv_pv;
233 PL_xpv_arenaroot = 0;
235 for (arena = (XPV*)PL_xpviv_arenaroot; arena; arena = arenanext) {
236 arenanext = (XPV*)arena->xpv_pv;
239 PL_xpviv_arenaroot = 0;
241 for (arena = (XPV*)PL_xpvnv_arenaroot; arena; arena = arenanext) {
242 arenanext = (XPV*)arena->xpv_pv;
245 PL_xpvnv_arenaroot = 0;
247 for (arena = (XPV*)PL_xpvcv_arenaroot; arena; arena = arenanext) {
248 arenanext = (XPV*)arena->xpv_pv;
251 PL_xpvcv_arenaroot = 0;
253 for (arena = (XPV*)PL_xpvav_arenaroot; arena; arena = arenanext) {
254 arenanext = (XPV*)arena->xpv_pv;
257 PL_xpvav_arenaroot = 0;
259 for (arena = (XPV*)PL_xpvhv_arenaroot; arena; arena = arenanext) {
260 arenanext = (XPV*)arena->xpv_pv;
263 PL_xpvhv_arenaroot = 0;
265 for (arena = (XPV*)PL_xpvmg_arenaroot; arena; arena = arenanext) {
266 arenanext = (XPV*)arena->xpv_pv;
269 PL_xpvmg_arenaroot = 0;
271 for (arena = (XPV*)PL_xpvlv_arenaroot; arena; arena = arenanext) {
272 arenanext = (XPV*)arena->xpv_pv;
275 PL_xpvlv_arenaroot = 0;
277 for (arena = (XPV*)PL_xpvbm_arenaroot; arena; arena = arenanext) {
278 arenanext = (XPV*)arena->xpv_pv;
281 PL_xpvbm_arenaroot = 0;
283 for (arena = (XPV*)PL_he_arenaroot; arena; arena = arenanext) {
284 arenanext = (XPV*)arena->xpv_pv;
290 Safefree(PL_nice_chunk);
291 PL_nice_chunk = Nullch;
292 PL_nice_chunk_size = 0;
298 Perl_report_uninit(pTHX)
301 Perl_warner(aTHX_ WARN_UNINITIALIZED, PL_warn_uninit,
302 " in ", PL_op_desc[PL_op->op_type]);
304 Perl_warner(aTHX_ WARN_UNINITIALIZED, PL_warn_uninit, "", "");
316 * See comment in more_xiv() -- RAM.
318 PL_xiv_root = *(IV**)xiv;
320 return (XPVIV*)((char*)xiv - STRUCT_OFFSET(XPVIV, xiv_iv));
324 S_del_xiv(pTHX_ XPVIV *p)
326 IV* xiv = (IV*)((char*)(p) + STRUCT_OFFSET(XPVIV, xiv_iv));
328 *(IV**)xiv = PL_xiv_root;
339 New(705, ptr, 1008/sizeof(XPV), XPV);
340 ptr->xpv_pv = (char*)PL_xiv_arenaroot; /* linked list of xiv arenas */
341 PL_xiv_arenaroot = ptr; /* to keep Purify happy */
344 xivend = &xiv[1008 / sizeof(IV) - 1];
345 xiv += (sizeof(XPV) - 1) / sizeof(IV) + 1; /* fudge by size of XPV */
347 while (xiv < xivend) {
348 *(IV**)xiv = (IV *)(xiv + 1);
362 PL_xnv_root = *(NV**)xnv;
364 return (XPVNV*)((char*)xnv - STRUCT_OFFSET(XPVNV, xnv_nv));
368 S_del_xnv(pTHX_ XPVNV *p)
370 NV* xnv = (NV*)((char*)(p) + STRUCT_OFFSET(XPVNV, xnv_nv));
372 *(NV**)xnv = PL_xnv_root;
383 New(711, ptr, 1008/sizeof(XPV), XPV);
384 ptr->xpv_pv = (char*)PL_xnv_arenaroot;
385 PL_xnv_arenaroot = ptr;
388 xnvend = &xnv[1008 / sizeof(NV) - 1];
389 xnv += (sizeof(XPVIV) - 1) / sizeof(NV) + 1; /* fudge by sizeof XPVIV */
391 while (xnv < xnvend) {
392 *(NV**)xnv = (NV*)(xnv + 1);
406 PL_xrv_root = (XRV*)xrv->xrv_rv;
412 S_del_xrv(pTHX_ XRV *p)
415 p->xrv_rv = (SV*)PL_xrv_root;
424 register XRV* xrvend;
426 New(712, ptr, 1008/sizeof(XPV), XPV);
427 ptr->xpv_pv = (char*)PL_xrv_arenaroot;
428 PL_xrv_arenaroot = ptr;
431 xrvend = &xrv[1008 / sizeof(XRV) - 1];
432 xrv += (sizeof(XPV) - 1) / sizeof(XRV) + 1;
434 while (xrv < xrvend) {
435 xrv->xrv_rv = (SV*)(xrv + 1);
449 PL_xpv_root = (XPV*)xpv->xpv_pv;
455 S_del_xpv(pTHX_ XPV *p)
458 p->xpv_pv = (char*)PL_xpv_root;
467 register XPV* xpvend;
468 New(713, xpv, 1008/sizeof(XPV), XPV);
469 xpv->xpv_pv = (char*)PL_xpv_arenaroot;
470 PL_xpv_arenaroot = xpv;
472 xpvend = &xpv[1008 / sizeof(XPV) - 1];
474 while (xpv < xpvend) {
475 xpv->xpv_pv = (char*)(xpv + 1);
488 xpviv = PL_xpviv_root;
489 PL_xpviv_root = (XPVIV*)xpviv->xpv_pv;
495 S_del_xpviv(pTHX_ XPVIV *p)
498 p->xpv_pv = (char*)PL_xpviv_root;
506 register XPVIV* xpviv;
507 register XPVIV* xpvivend;
508 New(714, xpviv, 1008/sizeof(XPVIV), XPVIV);
509 xpviv->xpv_pv = (char*)PL_xpviv_arenaroot;
510 PL_xpviv_arenaroot = xpviv;
512 xpvivend = &xpviv[1008 / sizeof(XPVIV) - 1];
513 PL_xpviv_root = ++xpviv;
514 while (xpviv < xpvivend) {
515 xpviv->xpv_pv = (char*)(xpviv + 1);
528 xpvnv = PL_xpvnv_root;
529 PL_xpvnv_root = (XPVNV*)xpvnv->xpv_pv;
535 S_del_xpvnv(pTHX_ XPVNV *p)
538 p->xpv_pv = (char*)PL_xpvnv_root;
546 register XPVNV* xpvnv;
547 register XPVNV* xpvnvend;
548 New(715, xpvnv, 1008/sizeof(XPVNV), XPVNV);
549 xpvnv->xpv_pv = (char*)PL_xpvnv_arenaroot;
550 PL_xpvnv_arenaroot = xpvnv;
552 xpvnvend = &xpvnv[1008 / sizeof(XPVNV) - 1];
553 PL_xpvnv_root = ++xpvnv;
554 while (xpvnv < xpvnvend) {
555 xpvnv->xpv_pv = (char*)(xpvnv + 1);
568 xpvcv = PL_xpvcv_root;
569 PL_xpvcv_root = (XPVCV*)xpvcv->xpv_pv;
575 S_del_xpvcv(pTHX_ XPVCV *p)
578 p->xpv_pv = (char*)PL_xpvcv_root;
586 register XPVCV* xpvcv;
587 register XPVCV* xpvcvend;
588 New(716, xpvcv, 1008/sizeof(XPVCV), XPVCV);
589 xpvcv->xpv_pv = (char*)PL_xpvcv_arenaroot;
590 PL_xpvcv_arenaroot = xpvcv;
592 xpvcvend = &xpvcv[1008 / sizeof(XPVCV) - 1];
593 PL_xpvcv_root = ++xpvcv;
594 while (xpvcv < xpvcvend) {
595 xpvcv->xpv_pv = (char*)(xpvcv + 1);
608 xpvav = PL_xpvav_root;
609 PL_xpvav_root = (XPVAV*)xpvav->xav_array;
615 S_del_xpvav(pTHX_ XPVAV *p)
618 p->xav_array = (char*)PL_xpvav_root;
626 register XPVAV* xpvav;
627 register XPVAV* xpvavend;
628 New(717, xpvav, 1008/sizeof(XPVAV), XPVAV);
629 xpvav->xav_array = (char*)PL_xpvav_arenaroot;
630 PL_xpvav_arenaroot = xpvav;
632 xpvavend = &xpvav[1008 / sizeof(XPVAV) - 1];
633 PL_xpvav_root = ++xpvav;
634 while (xpvav < xpvavend) {
635 xpvav->xav_array = (char*)(xpvav + 1);
638 xpvav->xav_array = 0;
648 xpvhv = PL_xpvhv_root;
649 PL_xpvhv_root = (XPVHV*)xpvhv->xhv_array;
655 S_del_xpvhv(pTHX_ XPVHV *p)
658 p->xhv_array = (char*)PL_xpvhv_root;
666 register XPVHV* xpvhv;
667 register XPVHV* xpvhvend;
668 New(718, xpvhv, 1008/sizeof(XPVHV), XPVHV);
669 xpvhv->xhv_array = (char*)PL_xpvhv_arenaroot;
670 PL_xpvhv_arenaroot = xpvhv;
672 xpvhvend = &xpvhv[1008 / sizeof(XPVHV) - 1];
673 PL_xpvhv_root = ++xpvhv;
674 while (xpvhv < xpvhvend) {
675 xpvhv->xhv_array = (char*)(xpvhv + 1);
678 xpvhv->xhv_array = 0;
688 xpvmg = PL_xpvmg_root;
689 PL_xpvmg_root = (XPVMG*)xpvmg->xpv_pv;
695 S_del_xpvmg(pTHX_ XPVMG *p)
698 p->xpv_pv = (char*)PL_xpvmg_root;
706 register XPVMG* xpvmg;
707 register XPVMG* xpvmgend;
708 New(719, xpvmg, 1008/sizeof(XPVMG), XPVMG);
709 xpvmg->xpv_pv = (char*)PL_xpvmg_arenaroot;
710 PL_xpvmg_arenaroot = xpvmg;
712 xpvmgend = &xpvmg[1008 / sizeof(XPVMG) - 1];
713 PL_xpvmg_root = ++xpvmg;
714 while (xpvmg < xpvmgend) {
715 xpvmg->xpv_pv = (char*)(xpvmg + 1);
728 xpvlv = PL_xpvlv_root;
729 PL_xpvlv_root = (XPVLV*)xpvlv->xpv_pv;
735 S_del_xpvlv(pTHX_ XPVLV *p)
738 p->xpv_pv = (char*)PL_xpvlv_root;
746 register XPVLV* xpvlv;
747 register XPVLV* xpvlvend;
748 New(720, xpvlv, 1008/sizeof(XPVLV), XPVLV);
749 xpvlv->xpv_pv = (char*)PL_xpvlv_arenaroot;
750 PL_xpvlv_arenaroot = xpvlv;
752 xpvlvend = &xpvlv[1008 / sizeof(XPVLV) - 1];
753 PL_xpvlv_root = ++xpvlv;
754 while (xpvlv < xpvlvend) {
755 xpvlv->xpv_pv = (char*)(xpvlv + 1);
768 xpvbm = PL_xpvbm_root;
769 PL_xpvbm_root = (XPVBM*)xpvbm->xpv_pv;
775 S_del_xpvbm(pTHX_ XPVBM *p)
778 p->xpv_pv = (char*)PL_xpvbm_root;
786 register XPVBM* xpvbm;
787 register XPVBM* xpvbmend;
788 New(721, xpvbm, 1008/sizeof(XPVBM), XPVBM);
789 xpvbm->xpv_pv = (char*)PL_xpvbm_arenaroot;
790 PL_xpvbm_arenaroot = xpvbm;
792 xpvbmend = &xpvbm[1008 / sizeof(XPVBM) - 1];
793 PL_xpvbm_root = ++xpvbm;
794 while (xpvbm < xpvbmend) {
795 xpvbm->xpv_pv = (char*)(xpvbm + 1);
802 # define my_safemalloc(s) (void*)safexmalloc(717,s)
803 # define my_safefree(p) safexfree((char*)p)
805 # define my_safemalloc(s) (void*)safemalloc(s)
806 # define my_safefree(p) safefree((char*)p)
811 #define new_XIV() my_safemalloc(sizeof(XPVIV))
812 #define del_XIV(p) my_safefree(p)
814 #define new_XNV() my_safemalloc(sizeof(XPVNV))
815 #define del_XNV(p) my_safefree(p)
817 #define new_XRV() my_safemalloc(sizeof(XRV))
818 #define del_XRV(p) my_safefree(p)
820 #define new_XPV() my_safemalloc(sizeof(XPV))
821 #define del_XPV(p) my_safefree(p)
823 #define new_XPVIV() my_safemalloc(sizeof(XPVIV))
824 #define del_XPVIV(p) my_safefree(p)
826 #define new_XPVNV() my_safemalloc(sizeof(XPVNV))
827 #define del_XPVNV(p) my_safefree(p)
829 #define new_XPVCV() my_safemalloc(sizeof(XPVCV))
830 #define del_XPVCV(p) my_safefree(p)
832 #define new_XPVAV() my_safemalloc(sizeof(XPVAV))
833 #define del_XPVAV(p) my_safefree(p)
835 #define new_XPVHV() my_safemalloc(sizeof(XPVHV))
836 #define del_XPVHV(p) my_safefree(p)
838 #define new_XPVMG() my_safemalloc(sizeof(XPVMG))
839 #define del_XPVMG(p) my_safefree(p)
841 #define new_XPVLV() my_safemalloc(sizeof(XPVLV))
842 #define del_XPVLV(p) my_safefree(p)
844 #define new_XPVBM() my_safemalloc(sizeof(XPVBM))
845 #define del_XPVBM(p) my_safefree(p)
849 #define new_XIV() (void*)new_xiv()
850 #define del_XIV(p) del_xiv((XPVIV*) p)
852 #define new_XNV() (void*)new_xnv()
853 #define del_XNV(p) del_xnv((XPVNV*) p)
855 #define new_XRV() (void*)new_xrv()
856 #define del_XRV(p) del_xrv((XRV*) p)
858 #define new_XPV() (void*)new_xpv()
859 #define del_XPV(p) del_xpv((XPV *)p)
861 #define new_XPVIV() (void*)new_xpviv()
862 #define del_XPVIV(p) del_xpviv((XPVIV *)p)
864 #define new_XPVNV() (void*)new_xpvnv()
865 #define del_XPVNV(p) del_xpvnv((XPVNV *)p)
867 #define new_XPVCV() (void*)new_xpvcv()
868 #define del_XPVCV(p) del_xpvcv((XPVCV *)p)
870 #define new_XPVAV() (void*)new_xpvav()
871 #define del_XPVAV(p) del_xpvav((XPVAV *)p)
873 #define new_XPVHV() (void*)new_xpvhv()
874 #define del_XPVHV(p) del_xpvhv((XPVHV *)p)
876 #define new_XPVMG() (void*)new_xpvmg()
877 #define del_XPVMG(p) del_xpvmg((XPVMG *)p)
879 #define new_XPVLV() (void*)new_xpvlv()
880 #define del_XPVLV(p) del_xpvlv((XPVLV *)p)
882 #define new_XPVBM() (void*)new_xpvbm()
883 #define del_XPVBM(p) del_xpvbm((XPVBM *)p)
887 #define new_XPVGV() my_safemalloc(sizeof(XPVGV))
888 #define del_XPVGV(p) my_safefree(p)
890 #define new_XPVFM() my_safemalloc(sizeof(XPVFM))
891 #define del_XPVFM(p) my_safefree(p)
893 #define new_XPVIO() my_safemalloc(sizeof(XPVIO))
894 #define del_XPVIO(p) my_safefree(p)
897 =for apidoc sv_upgrade
899 Upgrade an SV to a more complex form. Use C<SvUPGRADE>. See
906 Perl_sv_upgrade(pTHX_ register SV *sv, U32 mt)
916 if (mt != SVt_PV && SvREADONLY(sv) && SvFAKE(sv)) {
920 if (SvTYPE(sv) == mt)
926 switch (SvTYPE(sv)) {
947 else if (mt < SVt_PVIV)
964 pv = (char*)SvRV(sv);
984 else if (mt == SVt_NV)
995 del_XPVIV(SvANY(sv));
1005 del_XPVNV(SvANY(sv));
1013 magic = SvMAGIC(sv);
1014 stash = SvSTASH(sv);
1015 del_XPVMG(SvANY(sv));
1018 Perl_croak(aTHX_ "Can't upgrade that kind of scalar");
1023 Perl_croak(aTHX_ "Can't upgrade to undef");
1025 SvANY(sv) = new_XIV();
1029 SvANY(sv) = new_XNV();
1033 SvANY(sv) = new_XRV();
1037 SvANY(sv) = new_XPV();
1043 SvANY(sv) = new_XPVIV();
1053 SvANY(sv) = new_XPVNV();
1061 SvANY(sv) = new_XPVMG();
1067 SvMAGIC(sv) = magic;
1068 SvSTASH(sv) = stash;
1071 SvANY(sv) = new_XPVLV();
1077 SvMAGIC(sv) = magic;
1078 SvSTASH(sv) = stash;
1085 SvANY(sv) = new_XPVAV();
1093 SvMAGIC(sv) = magic;
1094 SvSTASH(sv) = stash;
1100 SvANY(sv) = new_XPVHV();
1108 SvMAGIC(sv) = magic;
1109 SvSTASH(sv) = stash;
1116 SvANY(sv) = new_XPVCV();
1117 Zero(SvANY(sv), 1, XPVCV);
1123 SvMAGIC(sv) = magic;
1124 SvSTASH(sv) = stash;
1127 SvANY(sv) = new_XPVGV();
1133 SvMAGIC(sv) = magic;
1134 SvSTASH(sv) = stash;
1142 SvANY(sv) = new_XPVBM();
1148 SvMAGIC(sv) = magic;
1149 SvSTASH(sv) = stash;
1155 SvANY(sv) = new_XPVFM();
1156 Zero(SvANY(sv), 1, XPVFM);
1162 SvMAGIC(sv) = magic;
1163 SvSTASH(sv) = stash;
1166 SvANY(sv) = new_XPVIO();
1167 Zero(SvANY(sv), 1, XPVIO);
1173 SvMAGIC(sv) = magic;
1174 SvSTASH(sv) = stash;
1175 IoPAGE_LEN(sv) = 60;
1178 SvFLAGS(sv) &= ~SVTYPEMASK;
1184 Perl_sv_backoff(pTHX_ register SV *sv)
1188 char *s = SvPVX(sv);
1189 SvLEN(sv) += SvIVX(sv);
1190 SvPVX(sv) -= SvIVX(sv);
1192 Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1194 SvFLAGS(sv) &= ~SVf_OOK;
1201 Expands the character buffer in the SV. This will use C<sv_unref> and will
1202 upgrade the SV to C<SVt_PV>. Returns a pointer to the character buffer.
1209 Perl_sv_grow(pTHX_ register SV *sv, register STRLEN newlen)
1213 #ifdef HAS_64K_LIMIT
1214 if (newlen >= 0x10000) {
1215 PerlIO_printf(Perl_debug_log,
1216 "Allocation too large: %"UVxf"\n", (UV)newlen);
1219 #endif /* HAS_64K_LIMIT */
1222 if (SvTYPE(sv) < SVt_PV) {
1223 sv_upgrade(sv, SVt_PV);
1226 else if (SvOOK(sv)) { /* pv is offset? */
1229 if (newlen > SvLEN(sv))
1230 newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1231 #ifdef HAS_64K_LIMIT
1232 if (newlen >= 0x10000)
1238 if (newlen > SvLEN(sv)) { /* need more room? */
1239 if (SvLEN(sv) && s) {
1240 #if defined(MYMALLOC) && !defined(LEAKTEST)
1241 STRLEN l = malloced_size((void*)SvPVX(sv));
1247 Renew(s,newlen,char);
1250 New(703,s,newlen,char);
1252 SvLEN_set(sv, newlen);
1258 =for apidoc sv_setiv
1260 Copies an integer into the given SV. Does not handle 'set' magic. See
1267 Perl_sv_setiv(pTHX_ register SV *sv, IV i)
1269 SV_CHECK_THINKFIRST(sv);
1270 switch (SvTYPE(sv)) {
1272 sv_upgrade(sv, SVt_IV);
1275 sv_upgrade(sv, SVt_PVNV);
1279 sv_upgrade(sv, SVt_PVIV);
1288 Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1289 PL_op_desc[PL_op->op_type]);
1291 (void)SvIOK_only(sv); /* validate number */
1297 =for apidoc sv_setiv_mg
1299 Like C<sv_setiv>, but also handles 'set' magic.
1305 Perl_sv_setiv_mg(pTHX_ register SV *sv, IV i)
1312 =for apidoc sv_setuv
1314 Copies an unsigned integer into the given SV. Does not handle 'set' magic.
1321 Perl_sv_setuv(pTHX_ register SV *sv, UV u)
1323 if (u <= (UV)IV_MAX) {
1324 sv_setiv(sv, (IV)u);
1333 =for apidoc sv_setuv_mg
1335 Like C<sv_setuv>, but also handles 'set' magic.
1341 Perl_sv_setuv_mg(pTHX_ register SV *sv, UV u)
1343 if (u <= (UV)IV_MAX) {
1344 sv_setiv(sv, (IV)u);
1354 =for apidoc sv_setnv
1356 Copies a double into the given SV. Does not handle 'set' magic. See
1363 Perl_sv_setnv(pTHX_ register SV *sv, NV num)
1365 SV_CHECK_THINKFIRST(sv);
1366 switch (SvTYPE(sv)) {
1369 sv_upgrade(sv, SVt_NV);
1374 sv_upgrade(sv, SVt_PVNV);
1383 Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1384 PL_op_name[PL_op->op_type]);
1387 (void)SvNOK_only(sv); /* validate number */
1392 =for apidoc sv_setnv_mg
1394 Like C<sv_setnv>, but also handles 'set' magic.
1400 Perl_sv_setnv_mg(pTHX_ register SV *sv, NV num)
1407 S_not_a_number(pTHX_ SV *sv)
1412 char *limit = tmpbuf + sizeof(tmpbuf) - 8;
1413 /* each *s can expand to 4 chars + "...\0",
1414 i.e. need room for 8 chars */
1416 for (s = SvPVX(sv); *s && d < limit; s++) {
1418 if (ch & 128 && !isPRINT_LC(ch)) {
1427 else if (ch == '\r') {
1431 else if (ch == '\f') {
1435 else if (ch == '\\') {
1439 else if (isPRINT_LC(ch))
1454 Perl_warner(aTHX_ WARN_NUMERIC,
1455 "Argument \"%s\" isn't numeric in %s", tmpbuf,
1456 PL_op_desc[PL_op->op_type]);
1458 Perl_warner(aTHX_ WARN_NUMERIC,
1459 "Argument \"%s\" isn't numeric", tmpbuf);
1462 /* the number can be converted to integer with atol() or atoll() although */
1463 #define IS_NUMBER_TO_INT_BY_ATOL 0x01 /* integer (may have decimals) */
1464 #define IS_NUMBER_TO_INT_BY_STRTOL 0x02 /* it may exceed IV_MAX */
1465 #define IS_NUMBER_TO_INT_BY_ATOF 0x04 /* seen something like 123e4 */
1466 #define IS_NUMBER_LONGER_THAN_IV_MAX 0x08 /* more digits than IV_MAX */
1467 #define IS_NUMBER_AS_LONG_AS_IV_MAX 0x10 /* may(be not) larger than IV_MAX */
1468 #define IS_NUMBER_NOT_INT 0x20 /* seen a decimal point or e */
1469 #define IS_NUMBER_NEG 0x40 /* seen a leading - */
1470 #define IS_NUMBER_INFINITY 0x80 /* /^\s*-?Infinity\s*$/i */
1472 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1473 until proven guilty, assume that things are not that bad... */
1475 /* As 64 bit platforms often have an NV that doesn't preserve all bits of
1476 an IV (an assumption perl has been based on to date) it becomes necessary
1477 to remove the assumption that the NV always carries enough precision to
1478 recreate the IV whenever needed, and that the NV is the canonical form.
1479 Instead, IV/UV and NV need to be given equal rights. So as to not lose
1480 precision as an side effect of conversion (which would lead to insanity
1481 and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1482 1) to distinguish between IV/UV/NV slots that have cached a valid
1483 conversion where precision was lost and IV/UV/NV slots that have a
1484 valid conversion which has lost no precision
1485 2) to ensure that if a numeric conversion to one form is request that
1486 would lose precision, the precise conversion (or differently
1487 imprecise conversion) is also performed and cached, to prevent
1488 requests for different numeric formats on the same SV causing
1489 lossy conversion chains. (lossless conversion chains are perfectly
1494 SvIOKp is true if the IV slot contains a valid value
1495 SvIOK is true only if the IV value is accurate (UV if SvIOK_UV true)
1496 SvNOKp is true if the NV slot contains a valid value
1497 SvNOK is true only if the NV value is accurate
1500 while converting from PV to NV check to see if converting that NV to an
1501 IV(or UV) would lose accuracy over a direct conversion from PV to
1502 IV(or UV). If it would, cache both conversions, return NV, but mark
1503 SV as IOK NOKp (ie not NOK).
1505 while converting from PV to IV check to see if converting that IV to an
1506 NV would lose accuracy over a direct conversion from PV to NV. If it
1507 would, cache both conversions, flag similarly.
1509 Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1510 correctly because if IV & NV were set NV *always* overruled.
1511 Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flags meaning
1512 changes - now IV and NV together means that the two are interchangeable
1513 SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1515 The benefit of this is operations such as pp_add know that if SvIOK is
1516 true for both left and right operands, then integer addition can be
1517 used instead of floating point. (for cases where the result won't
1518 overflow) Before, floating point was always used, which could lead to
1519 loss of precision compared with integer addition.
1521 * making IV and NV equal status should make maths accurate on 64 bit
1523 * may speed up maths somewhat if pp_add and friends start to use
1524 integers when possible instead of fp. (hopefully the overhead in
1525 looking for SvIOK and checking for overflow will not outweigh the
1526 fp to integer speedup)
1527 * will slow down integer operations (callers of SvIV) on "inaccurate"
1528 values, as the change from SvIOK to SvIOKp will cause a call into
1529 sv_2iv each time rather than a macro access direct to the IV slot
1530 * should speed up number->string conversion on integers as IV is
1531 favoured when IV and NV equally accurate
1533 ####################################################################
1534 You had better be using SvIOK_notUV if you want an IV for arithmetic
1535 SvIOK is true if (IV or UV), so you might be getting (IV)SvUV
1536 SvUOK is true iff UV.
1537 ####################################################################
1539 Your mileage will vary depending your CPUs relative fp to integer
1543 #ifndef NV_PRESERVES_UV
1544 #define IS_NUMBER_UNDERFLOW_IV 1
1545 #define IS_NUMBER_UNDERFLOW_UV 2
1546 #define IS_NUMBER_IV_AND_UV 2
1547 #define IS_NUMBER_OVERFLOW_IV 4
1548 #define IS_NUMBER_OVERFLOW_UV 5
1549 /* Hopefully your optimiser will consider inlining these two functions. */
1551 S_sv_2inuv_non_preserve (pTHX_ register SV *sv, I32 numtype) {
1552 NV nv = SvNVX(sv); /* Code simpler and had compiler problems if */
1553 UV nv_as_uv = U_V(nv); /* these are not in simple variables. */
1554 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_2inuv_non '%s', IV=0x%"UVxf" NV=%g inttype=%X\n", SvPVX(sv), SvIVX(sv), nv, numtype));
1555 if (nv_as_uv <= (UV)IV_MAX) {
1556 (void)SvIOKp_on(sv);
1557 (void)SvNOKp_on(sv);
1558 /* Within suitable range to fit in an IV, atol won't overflow */
1559 /* XXX quite sure? Is that your final answer? not really, I'm
1560 trusting that nv_as_uv to round down if NV is (IV_MAX + 1) */
1561 SvIVX(sv) = (IV)Atol(SvPVX(sv));
1562 if (numtype & IS_NUMBER_NOT_INT) {
1563 /* I believe that even if the original PV had decimals, they
1564 are lost beyond the limit of the FP precision.
1565 However, neither is canonical, so both only get p flags.
1567 /* Both already have p flags, so do nothing */
1568 } else if (SvIVX(sv) == I_V(nv)) {
1573 /* It had no "." so it must be integer. assert (get in here from
1574 sv_2iv and sv_2uv only for ndef HAS_STRTOL and
1575 IS_NUMBER_AS_LONG_AS_IV_MAX) or my logic is faulty and all
1576 conversion routines need audit. */
1578 return nv < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
1580 /* between IV_MAX and NV(UV_MAX). Could be slightly> UV_MAX */
1581 (void)SvIOKp_on(sv);
1582 (void)SvNOKp_on(sv);
1585 int save_errno = errno;
1587 SvUVX(sv) = Strtoul(SvPVX(sv), Null(char**), 10);
1589 if (numtype & IS_NUMBER_NOT_INT) {
1590 /* UV and NV both imprecise. */
1592 } else if (SvUVX(sv) == nv_as_uv && SvUVX(sv) != UV_MAX) {
1601 return IS_NUMBER_OVERFLOW_IV;
1605 /* Must have just overflowed UV, but not enough that an NV could spot
1607 return IS_NUMBER_OVERFLOW_UV;
1610 /* We've just lost integer precision, nothing we could do. */
1611 SvUVX(sv) = nv_as_uv;
1612 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_2niuv_non UV? '%s', UV=0x%"UVxf" NV=%g U_V(NV)=0x%"UVxf" inttype=%X\n", SvPVX(sv), SvIVX(sv), nv, nv_as_uv, numtype));
1613 /* UV and NV slots equally valid only if we have casting symmetry. */
1614 if (numtype & IS_NUMBER_NOT_INT) {
1616 } else if (SvUVX(sv) == nv_as_uv && SvUVX(sv) != UV_MAX) {
1617 /* UV_MAX can cast up to NV (UV_MAX+1), that NV casts down to UV_MAX
1618 UV_MAX ought to be 0xFF...FFF which won't preserve (We only
1619 get to this point if NVs don't preserve UVs) */
1624 /* As above, I believe UV at least as good as NV */
1627 #endif /* HAS_STRTOUL */
1628 return IS_NUMBER_OVERFLOW_IV;
1631 /* For sv_2nv these three cases are "SvNOK and don't bother casting" */
1633 S_sv_2iuv_non_preserve (pTHX_ register SV *sv, I32 numtype)
1635 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_2iuv_non '%s', IV=0x%"UVxf" NV=%g inttype=%X\n", SvPVX(sv), SvIVX(sv), SvNVX(sv), numtype));
1636 if (SvNVX(sv) < (NV)IV_MIN) {
1637 (void)SvIOKp_on(sv);
1640 return IS_NUMBER_UNDERFLOW_IV;
1642 if (SvNVX(sv) > (NV)UV_MAX) {
1643 (void)SvIOKp_on(sv);
1647 return IS_NUMBER_OVERFLOW_UV;
1649 if (!(numtype & (IS_NUMBER_TO_INT_BY_ATOL | IS_NUMBER_TO_INT_BY_STRTOL))) {
1650 (void)SvIOKp_on(sv);
1652 /* Can't use strtol etc to convert this string */
1653 if (SvNVX(sv) <= (UV)IV_MAX) {
1654 SvIVX(sv) = I_V(SvNVX(sv));
1655 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1656 SvIOK_on(sv); /* Integer is precise. NOK, IOK */
1658 /* Integer is imprecise. NOK, IOKp */
1660 return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
1663 SvUVX(sv) = U_V(SvNVX(sv));
1664 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
1665 SvIOK_on(sv); /* Integer is precise. NOK, UOK */
1667 /* Integer is imprecise. NOK, IOKp */
1669 return IS_NUMBER_OVERFLOW_IV;
1671 return S_sv_2inuv_non_preserve (sv, numtype);
1673 #endif /* NV_PRESERVES_UV*/
1677 Perl_sv_2iv(pTHX_ register SV *sv)
1681 if (SvGMAGICAL(sv)) {
1686 return I_V(SvNVX(sv));
1688 if (SvPOKp(sv) && SvLEN(sv))
1691 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
1692 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
1698 if (SvTHINKFIRST(sv)) {
1701 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
1702 (SvRV(tmpstr) != SvRV(sv)))
1703 return SvIV(tmpstr);
1704 return PTR2IV(SvRV(sv));
1706 if (SvREADONLY(sv) && SvFAKE(sv)) {
1707 sv_force_normal(sv);
1709 if (SvREADONLY(sv) && !SvOK(sv)) {
1710 if (ckWARN(WARN_UNINITIALIZED))
1717 return (IV)(SvUVX(sv));
1724 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
1725 * without also getting a cached IV/UV from it at the same time
1726 * (ie PV->NV conversion should detect loss of accuracy and cache
1727 * IV or UV at same time to avoid this. NWC */
1729 if (SvTYPE(sv) == SVt_NV)
1730 sv_upgrade(sv, SVt_PVNV);
1732 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
1733 /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
1734 certainly cast into the IV range at IV_MAX, whereas the correct
1735 answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
1737 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
1738 SvIVX(sv) = I_V(SvNVX(sv));
1739 if (SvNVX(sv) == (NV) SvIVX(sv)
1740 #ifndef NV_PRESERVES_UV
1741 && (((UV)1 << NV_PRESERVES_UV_BITS) >
1742 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
1743 /* Don't flag it as "accurately an integer" if the number
1744 came from a (by definition imprecise) NV operation, and
1745 we're outside the range of NV integer precision */
1748 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
1749 DEBUG_c(PerlIO_printf(Perl_debug_log,
1750 "0x%"UVxf" iv(%g => %"IVdf") (precise)\n",
1756 /* IV not precise. No need to convert from PV, as NV
1757 conversion would already have cached IV if it detected
1758 that PV->IV would be better than PV->NV->IV
1759 flags already correct - don't set public IOK. */
1760 DEBUG_c(PerlIO_printf(Perl_debug_log,
1761 "0x%"UVxf" iv(%g => %"IVdf") (imprecise)\n",
1766 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
1767 but the cast (NV)IV_MIN rounds to a the value less (more
1768 negative) than IV_MIN which happens to be equal to SvNVX ??
1769 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
1770 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
1771 (NV)UVX == NVX are both true, but the values differ. :-(
1772 Hopefully for 2s complement IV_MIN is something like
1773 0x8000000000000000 which will be exact. NWC */
1776 SvUVX(sv) = U_V(SvNVX(sv));
1778 (SvNVX(sv) == (NV) SvUVX(sv))
1779 #ifndef NV_PRESERVES_UV
1780 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
1781 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
1782 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
1783 /* Don't flag it as "accurately an integer" if the number
1784 came from a (by definition imprecise) NV operation, and
1785 we're outside the range of NV integer precision */
1791 DEBUG_c(PerlIO_printf(Perl_debug_log,
1792 "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
1796 return (IV)SvUVX(sv);
1799 else if (SvPOKp(sv) && SvLEN(sv)) {
1800 I32 numtype = looks_like_number(sv);
1802 /* We want to avoid a possible problem when we cache an IV which
1803 may be later translated to an NV, and the resulting NV is not
1804 the translation of the initial data.
1806 This means that if we cache such an IV, we need to cache the
1807 NV as well. Moreover, we trade speed for space, and do not
1808 cache the NV if we are sure it's not needed.
1811 if ((numtype & ~IS_NUMBER_NEG) == IS_NUMBER_TO_INT_BY_ATOL) {
1812 /* The NV may be reconstructed from IV - safe to cache IV,
1813 which may be calculated by atol(). */
1814 if (SvTYPE(sv) < SVt_PVIV)
1815 sv_upgrade(sv, SVt_PVIV);
1817 SvIVX(sv) = Atol(SvPVX(sv));
1821 int save_errno = errno;
1822 /* Is it an integer that we could convert with strtol?
1823 So try it, and if it doesn't set errno then it's pukka.
1824 This should be faster than going atof and then thinking. */
1825 if (((numtype & (IS_NUMBER_TO_INT_BY_STRTOL | IS_NUMBER_NOT_INT))
1826 == IS_NUMBER_TO_INT_BY_STRTOL)
1827 /* && is a sequence point. Without it not sure if I'm trying
1828 to do too much between sequence points and hence going
1830 && ((errno = 0), 1) /* , 1 so always true */
1831 && ((i = Strtol(SvPVX(sv), Null(char**), 10)), 1)
1833 if (SvTYPE(sv) < SVt_PVIV)
1834 sv_upgrade(sv, SVt_PVIV);
1840 /* Hopefully trace flow will optimise this away where possible
1846 /* It wasn't an integer, or it overflowed, or we don't have
1847 strtol. Do things the slow way - check if it's a UV etc. */
1848 d = Atof(SvPVX(sv));
1850 if (SvTYPE(sv) < SVt_PVNV)
1851 sv_upgrade(sv, SVt_PVNV);
1854 if (! numtype && ckWARN(WARN_NUMERIC))
1857 #if defined(USE_LONG_DOUBLE)
1858 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
1859 PTR2UV(sv), SvNVX(sv)));
1861 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%g)\n",
1862 PTR2UV(sv), SvNVX(sv)));
1866 #ifdef NV_PRESERVES_UV
1867 (void)SvIOKp_on(sv);
1869 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
1870 SvIVX(sv) = I_V(SvNVX(sv));
1871 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1874 /* Integer is imprecise. NOK, IOKp */
1876 /* UV will not work better than IV */
1878 if (SvNVX(sv) > (NV)UV_MAX) {
1880 /* Integer is inaccurate. NOK, IOKp, is UV */
1884 SvUVX(sv) = U_V(SvNVX(sv));
1885 /* 0xFFFFFFFFFFFFFFFF not an issue in here */
1886 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
1890 /* Integer is imprecise. NOK, IOKp, is UV */
1896 #else /* NV_PRESERVES_UV */
1897 if (((UV)1 << NV_PRESERVES_UV_BITS) >
1898 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
1899 /* Small enough to preserve all bits. */
1900 (void)SvIOKp_on(sv);
1902 SvIVX(sv) = I_V(SvNVX(sv));
1903 if ((NV)(SvIVX(sv)) == SvNVX(sv))
1905 /* Assumption: first non-preserved integer is < IV_MAX,
1906 this NV is in the preserved range, therefore: */
1907 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
1909 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);
1911 } else if (sv_2iuv_non_preserve (sv, numtype)
1912 >= IS_NUMBER_OVERFLOW_IV)
1914 #endif /* NV_PRESERVES_UV */
1918 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
1920 if (SvTYPE(sv) < SVt_IV)
1921 /* Typically the caller expects that sv_any is not NULL now. */
1922 sv_upgrade(sv, SVt_IV);
1925 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
1926 PTR2UV(sv),SvIVX(sv)));
1927 return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
1931 Perl_sv_2uv(pTHX_ register SV *sv)
1935 if (SvGMAGICAL(sv)) {
1940 return U_V(SvNVX(sv));
1941 if (SvPOKp(sv) && SvLEN(sv))
1944 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
1945 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
1951 if (SvTHINKFIRST(sv)) {
1954 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
1955 (SvRV(tmpstr) != SvRV(sv)))
1956 return SvUV(tmpstr);
1957 return PTR2UV(SvRV(sv));
1959 if (SvREADONLY(sv) && SvFAKE(sv)) {
1960 sv_force_normal(sv);
1962 if (SvREADONLY(sv) && !SvOK(sv)) {
1963 if (ckWARN(WARN_UNINITIALIZED))
1973 return (UV)SvIVX(sv);
1977 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
1978 * without also getting a cached IV/UV from it at the same time
1979 * (ie PV->NV conversion should detect loss of accuracy and cache
1980 * IV or UV at same time to avoid this. */
1981 /* IV-over-UV optimisation - choose to cache IV if possible */
1983 if (SvTYPE(sv) == SVt_NV)
1984 sv_upgrade(sv, SVt_PVNV);
1986 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
1987 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
1988 SvIVX(sv) = I_V(SvNVX(sv));
1989 if (SvNVX(sv) == (NV) SvIVX(sv)
1990 #ifndef NV_PRESERVES_UV
1991 && (((UV)1 << NV_PRESERVES_UV_BITS) >
1992 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
1993 /* Don't flag it as "accurately an integer" if the number
1994 came from a (by definition imprecise) NV operation, and
1995 we're outside the range of NV integer precision */
1998 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
1999 DEBUG_c(PerlIO_printf(Perl_debug_log,
2000 "0x%"UVxf" uv(%g => %"IVdf") (precise)\n",
2006 /* IV not precise. No need to convert from PV, as NV
2007 conversion would already have cached IV if it detected
2008 that PV->IV would be better than PV->NV->IV
2009 flags already correct - don't set public IOK. */
2010 DEBUG_c(PerlIO_printf(Perl_debug_log,
2011 "0x%"UVxf" uv(%g => %"IVdf") (imprecise)\n",
2016 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2017 but the cast (NV)IV_MIN rounds to a the value less (more
2018 negative) than IV_MIN which happens to be equal to SvNVX ??
2019 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2020 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2021 (NV)UVX == NVX are both true, but the values differ. :-(
2022 Hopefully for 2s complement IV_MIN is something like
2023 0x8000000000000000 which will be exact. NWC */
2026 SvUVX(sv) = U_V(SvNVX(sv));
2028 (SvNVX(sv) == (NV) SvUVX(sv))
2029 #ifndef NV_PRESERVES_UV
2030 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2031 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2032 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2033 /* Don't flag it as "accurately an integer" if the number
2034 came from a (by definition imprecise) NV operation, and
2035 we're outside the range of NV integer precision */
2040 DEBUG_c(PerlIO_printf(Perl_debug_log,
2041 "0x%"UVxf" 2uv(%"UVuf" => %"IVdf") (as unsigned)\n",
2047 else if (SvPOKp(sv) && SvLEN(sv)) {
2048 I32 numtype = looks_like_number(sv);
2050 /* We want to avoid a possible problem when we cache a UV which
2051 may be later translated to an NV, and the resulting NV is not
2052 the translation of the initial data.
2054 This means that if we cache such a UV, we need to cache the
2055 NV as well. Moreover, we trade speed for space, and do not
2056 cache the NV if not needed.
2059 if ((numtype & ~IS_NUMBER_NEG) == IS_NUMBER_TO_INT_BY_ATOL) {
2060 /* The NV may be reconstructed from IV - safe to cache IV,
2061 which may be calculated by atol(). */
2062 if (SvTYPE(sv) < SVt_PVIV)
2063 sv_upgrade(sv, SVt_PVIV);
2065 SvIVX(sv) = Atol(SvPVX(sv));
2067 int save_errno = errno;
2071 /* Is it an integer that we could convert with strtoul?
2072 So try it, and if it doesn't set errno then it's pukka.
2073 This should be faster than going atof and then thinking. */
2075 (IS_NUMBER_TO_INT_BY_STRTOL | IS_NUMBER_NOT_INT))
2076 == IS_NUMBER_TO_INT_BY_STRTOL)
2077 && ((errno = 0), 1) /* always true */
2078 && ((u = Strtoul(SvPVX(sv), Null(char**), 10)), 1) /* ditto */
2080 /* If known to be negative, check it didn't undeflow IV */
2081 && ((numtype & IS_NUMBER_NEG) ? ((IV)u <= 0) : 1)) {
2084 if (SvTYPE(sv) < SVt_PVIV)
2085 sv_upgrade(sv, SVt_PVIV);
2088 /* If it's negative must use IV.
2089 IV-over-UV optimisation */
2090 if (numtype & IS_NUMBER_NEG || u <= (UV) IV_MAX) {
2091 /* strtoul is defined to return negated value if the
2092 number starts with a minus sign. Assuming 2s
2093 complement, this value will be in range for
2094 a negative IV if casting the bit pattern to
2095 IV doesn't produce a positive value. Allow -0
2096 by checking it's <= 0
2097 hence (numtype & IS_NUMBER_NEG) test above
2101 /* it didn't overflow, and it was positive. */
2110 /* Hopefully trace flow will optimise this away where possible
2114 /* It wasn't an integer, or it overflowed, or we don't have
2115 strtol. Do things the slow way - check if it's a IV etc. */
2116 d = Atof(SvPVX(sv));
2118 if (SvTYPE(sv) < SVt_PVNV)
2119 sv_upgrade(sv, SVt_PVNV);
2122 if (! numtype && ckWARN(WARN_NUMERIC))
2125 #if defined(USE_LONG_DOUBLE)
2126 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%" PERL_PRIgldbl ")\n",
2127 PTR2UV(sv), SvNVX(sv)));
2129 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%g)\n",
2130 PTR2UV(sv), SvNVX(sv)));
2133 #ifdef NV_PRESERVES_UV
2134 (void)SvIOKp_on(sv);
2136 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2137 SvIVX(sv) = I_V(SvNVX(sv));
2138 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2141 /* Integer is imprecise. NOK, IOKp */
2143 /* UV will not work better than IV */
2145 if (SvNVX(sv) > (NV)UV_MAX) {
2147 /* Integer is inaccurate. NOK, IOKp, is UV */
2151 SvUVX(sv) = U_V(SvNVX(sv));
2152 /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2153 NV preservse UV so can do correct comparison. */
2154 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2158 /* Integer is imprecise. NOK, IOKp, is UV */
2163 #else /* NV_PRESERVES_UV */
2164 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2165 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2166 /* Small enough to preserve all bits. */
2167 (void)SvIOKp_on(sv);
2169 SvIVX(sv) = I_V(SvNVX(sv));
2170 if ((NV)(SvIVX(sv)) == SvNVX(sv))
2172 /* Assumption: first non-preserved integer is < IV_MAX,
2173 this NV is in the preserved range, therefore: */
2174 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2176 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);
2179 sv_2iuv_non_preserve (sv, numtype);
2180 #endif /* NV_PRESERVES_UV */
2185 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2186 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2189 if (SvTYPE(sv) < SVt_IV)
2190 /* Typically the caller expects that sv_any is not NULL now. */
2191 sv_upgrade(sv, SVt_IV);
2195 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2196 PTR2UV(sv),SvUVX(sv)));
2197 return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2201 Perl_sv_2nv(pTHX_ register SV *sv)
2205 if (SvGMAGICAL(sv)) {
2209 if (SvPOKp(sv) && SvLEN(sv)) {
2210 if (ckWARN(WARN_NUMERIC) && !SvIOKp(sv) && !looks_like_number(sv))
2212 return Atof(SvPVX(sv));
2216 return (NV)SvUVX(sv);
2218 return (NV)SvIVX(sv);
2221 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2222 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2228 if (SvTHINKFIRST(sv)) {
2231 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
2232 (SvRV(tmpstr) != SvRV(sv)))
2233 return SvNV(tmpstr);
2234 return PTR2NV(SvRV(sv));
2236 if (SvREADONLY(sv) && SvFAKE(sv)) {
2237 sv_force_normal(sv);
2239 if (SvREADONLY(sv) && !SvOK(sv)) {
2240 if (ckWARN(WARN_UNINITIALIZED))
2245 if (SvTYPE(sv) < SVt_NV) {
2246 if (SvTYPE(sv) == SVt_IV)
2247 sv_upgrade(sv, SVt_PVNV);
2249 sv_upgrade(sv, SVt_NV);
2250 #if defined(USE_LONG_DOUBLE)
2252 STORE_NUMERIC_LOCAL_SET_STANDARD();
2253 PerlIO_printf(Perl_debug_log,
2254 "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2255 PTR2UV(sv), SvNVX(sv));
2256 RESTORE_NUMERIC_LOCAL();
2260 STORE_NUMERIC_LOCAL_SET_STANDARD();
2261 PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%g)\n",
2262 PTR2UV(sv), SvNVX(sv));
2263 RESTORE_NUMERIC_LOCAL();
2267 else if (SvTYPE(sv) < SVt_PVNV)
2268 sv_upgrade(sv, SVt_PVNV);
2270 (!SvPOKp(sv) || !strchr(SvPVX(sv),'.') || !looks_like_number(sv)))
2272 SvNVX(sv) = SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv);
2273 #ifdef NV_PRESERVES_UV
2276 /* Only set the public NV OK flag if this NV preserves the IV */
2277 /* Check it's not 0xFFFFFFFFFFFFFFFF */
2278 if (SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2279 : (SvIVX(sv) == I_V(SvNVX(sv))))
2285 else if (SvPOKp(sv) && SvLEN(sv)) {
2286 if (ckWARN(WARN_NUMERIC) && !SvIOKp(sv) && !looks_like_number(sv))
2288 SvNVX(sv) = Atof(SvPVX(sv));
2289 #ifdef NV_PRESERVES_UV
2292 /* Only set the public NV OK flag if this NV preserves the value in
2293 the PV at least as well as an IV/UV would.
2294 Not sure how to do this 100% reliably. */
2295 /* if that shift count is out of range then Configure's test is
2296 wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2298 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2299 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv)))
2300 SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2301 else if (SvNVX(sv) < (NV)IV_MIN || SvNVX(sv) > (NV)UV_MAX) {
2302 /* Definitely too large/small to fit in an integer, so no loss
2303 of precision going to integer in the future via NV */
2306 /* Is it something we can run through strtol etc (ie no
2307 trailing exponent part)? */
2308 int numtype = looks_like_number(sv);
2309 /* XXX probably should cache this if called above */
2312 (IS_NUMBER_TO_INT_BY_ATOL | IS_NUMBER_TO_INT_BY_STRTOL))) {
2313 /* Can't use strtol etc to convert this string, so don't try */
2316 sv_2inuv_non_preserve (sv, numtype);
2318 #endif /* NV_PRESERVES_UV */
2321 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
2323 if (SvTYPE(sv) < SVt_NV)
2324 /* Typically the caller expects that sv_any is not NULL now. */
2325 /* XXX Ilya implies that this is a bug in callers that assume this
2326 and ideally should be fixed. */
2327 sv_upgrade(sv, SVt_NV);
2330 #if defined(USE_LONG_DOUBLE)
2332 STORE_NUMERIC_LOCAL_SET_STANDARD();
2333 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2334 PTR2UV(sv), SvNVX(sv));
2335 RESTORE_NUMERIC_LOCAL();
2339 STORE_NUMERIC_LOCAL_SET_STANDARD();
2340 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%g)\n",
2341 PTR2UV(sv), SvNVX(sv));
2342 RESTORE_NUMERIC_LOCAL();
2349 S_asIV(pTHX_ SV *sv)
2351 I32 numtype = looks_like_number(sv);
2354 if (numtype & IS_NUMBER_TO_INT_BY_ATOL)
2355 return Atol(SvPVX(sv));
2357 if (ckWARN(WARN_NUMERIC))
2360 d = Atof(SvPVX(sv));
2365 S_asUV(pTHX_ SV *sv)
2367 I32 numtype = looks_like_number(sv);
2370 if (numtype & IS_NUMBER_TO_INT_BY_ATOL)
2371 return Strtoul(SvPVX(sv), Null(char**), 10);
2374 if (ckWARN(WARN_NUMERIC))
2377 return U_V(Atof(SvPVX(sv)));
2381 * Returns a combination of (advisory only - can get false negatives)
2382 * IS_NUMBER_TO_INT_BY_ATOL, IS_NUMBER_TO_INT_BY_ATOF
2383 * IS_NUMBER_LONGER_THAN_IV_MAX, IS_NUMBER_AS_LONG_AS_IV_MAX
2384 * IS_NUMBER_NOT_INT, IS_NUMBER_NEG, IS_NUMBER_INFINITY
2385 * 0 if does not look like number.
2387 * (atol and strtol stop when they hit a decimal point. strtol will return
2388 * LONG_MAX and LONG_MIN when given out of range values. ANSI says they should
2389 * do this, and vendors have had 11 years to get it right.
2390 * However, will try to make it still work with only atol
2392 * IS_NUMBER_TO_INT_BY_ATOL 123456789 or 123456789.3 definitely < IV_MAX
2393 * IS_NUMBER_TO_INT_BY_STRTOL 123456789 or 123456789.3 if digits = IV_MAX
2394 * IS_NUMBER_TO_INT_BY_ATOF 123456789e0 or >> IV_MAX
2395 * IS_NUMBER_LONGER_THAN_IV_MAX lots of digits, don't bother with atol
2396 * IS_NUMBER_AS_LONG_AS_IV_MAX atol might hit LONG_MAX, might not.
2397 * IS_NUMBER_NOT_INT saw "." or "e"
2399 * IS_NUMBER_INFINITY
2403 =for apidoc looks_like_number
2405 Test if an the content of an SV looks like a number (or is a
2406 number). C<Inf> and C<Infinity> are treated as numbers (so will not
2407 issue a non-numeric warning), even if your atof() doesn't grok them.
2413 Perl_looks_like_number(pTHX_ SV *sv)
2416 register char *send;
2417 register char *sbegin;
2418 register char *nbegin;
2427 else if (SvPOKp(sv))
2428 sbegin = SvPV(sv, len);
2431 send = sbegin + len;
2438 numtype = IS_NUMBER_NEG;
2445 * we return IS_NUMBER_TO_INT_BY_ATOL if the number can converted to
2446 * integer with atol() without overflow, IS_NUMBER_TO_INT_BY_STRTOL if
2447 * possibly slightly larger than max int, IS_NUMBER_TO_INT_BY_ATOF if you
2448 * will need (int)atof().
2451 /* next must be digit or the radix separator or beginning of infinity */
2455 } while (isDIGIT(*s));
2457 /* Aaargh. long long really is irritating.
2458 In the gospel according to ANSI 1989, it is an axiom that "long"
2459 is the longest integer type, and that if you don't know how long
2460 something is you can cast it to long, and nothing will be lost
2461 (except possibly speed of execution if long is slower than the
2463 Now, one can't be sure if the old rules apply, or long long
2464 (or some other newfangled thing) is actually longer than the
2465 (formerly) longest thing.
2467 /* This lot will work for 64 bit *as long as* either
2468 either long is 64 bit
2469 or we can find both strtol/strtoq and strtoul/strtouq
2470 If not, we really should refuse to let the user use 64 bit IVs
2471 By "64 bit" I really mean IVs that don't get preserved by NVs
2472 It also should work for 128 bit IVs. Can any lend me a machine to
2475 if (s - nbegin > TYPE_DIGITS(UV)) /* Cannot cache ato[ul]() */
2476 numtype |= IS_NUMBER_TO_INT_BY_ATOF | IS_NUMBER_LONGER_THAN_IV_MAX;
2477 else if (s - nbegin < BIT_DIGITS(((sizeof (IV)>sizeof (long))
2478 ? sizeof(long) : sizeof (IV))*8-1))
2479 numtype |= IS_NUMBER_TO_INT_BY_ATOL;
2481 /* Can't be sure either way. (For 64 bit UV, 63 bit IV is 1 decimal
2482 digit less (IV_MAX= 9223372036854775807,
2483 UV_MAX= 18446744073709551615) so be cautious */
2484 numtype |= IS_NUMBER_TO_INT_BY_STRTOL | IS_NUMBER_AS_LONG_AS_IV_MAX;
2487 #ifdef USE_LOCALE_NUMERIC
2488 || IS_NUMERIC_RADIX(*s)
2492 numtype |= IS_NUMBER_NOT_INT;
2493 while (isDIGIT(*s)) /* optional digits after the radix */
2498 #ifdef USE_LOCALE_NUMERIC
2499 || IS_NUMERIC_RADIX(*s)
2503 numtype |= IS_NUMBER_TO_INT_BY_ATOL | IS_NUMBER_NOT_INT;
2504 /* no digits before the radix means we need digits after it */
2508 } while (isDIGIT(*s));
2513 else if (*s == 'I' || *s == 'i') {
2514 s++; if (*s != 'N' && *s != 'n') return 0;
2515 s++; if (*s != 'F' && *s != 'f') return 0;
2516 s++; if (*s == 'I' || *s == 'i') {
2517 s++; if (*s != 'N' && *s != 'n') return 0;
2518 s++; if (*s != 'I' && *s != 'i') return 0;
2519 s++; if (*s != 'T' && *s != 't') return 0;
2520 s++; if (*s != 'Y' && *s != 'y') return 0;
2529 numtype = (numtype & IS_NUMBER_NEG) /* Keep track of sign */
2530 | IS_NUMBER_INFINITY | IS_NUMBER_NOT_INT;
2532 /* we can have an optional exponent part */
2533 if (*s == 'e' || *s == 'E') {
2534 numtype &= IS_NUMBER_NEG;
2535 numtype |= IS_NUMBER_TO_INT_BY_ATOF | IS_NUMBER_NOT_INT;
2537 if (*s == '+' || *s == '-')
2542 } while (isDIGIT(*s));
2552 if (len == 10 && memEQ(sbegin, "0 but true", 10))
2553 return IS_NUMBER_TO_INT_BY_ATOL;
2558 Perl_sv_2pv_nolen(pTHX_ register SV *sv)
2561 return sv_2pv(sv, &n_a);
2564 /* We assume that buf is at least TYPE_CHARS(UV) long. */
2566 uiv_2buf(char *buf, IV iv, UV uv, int is_uv, char **peob)
2568 char *ptr = buf + TYPE_CHARS(UV);
2582 *--ptr = '0' + (uv % 10);
2591 Perl_sv_2pv(pTHX_ register SV *sv, STRLEN *lp)
2596 char tbuf[64]; /* Must fit sprintf/Gconvert of longest IV/NV */
2597 char *tmpbuf = tbuf;
2603 if (SvGMAGICAL(sv)) {
2611 (void)sprintf(tmpbuf,"%"UVuf, (UV)SvUVX(sv));
2613 (void)sprintf(tmpbuf,"%"IVdf, (IV)SvIVX(sv));
2618 Gconvert(SvNVX(sv), NV_DIG, 0, tmpbuf);
2623 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2624 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2631 if (SvTHINKFIRST(sv)) {
2634 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,string)) &&
2635 (SvRV(tmpstr) != SvRV(sv)))
2636 return SvPV(tmpstr,*lp);
2643 switch (SvTYPE(sv)) {
2645 if ( ((SvFLAGS(sv) &
2646 (SVs_OBJECT|SVf_OK|SVs_GMG|SVs_SMG|SVs_RMG))
2647 == (SVs_OBJECT|SVs_RMG))
2648 && strEQ(s=HvNAME(SvSTASH(sv)), "Regexp")
2649 && (mg = mg_find(sv, 'r'))) {
2650 regexp *re = (regexp *)mg->mg_obj;
2653 char *fptr = "msix";
2658 U16 reganch = (re->reganch & PMf_COMPILETIME) >> 12;
2660 while((ch = *fptr++)) {
2662 reflags[left++] = ch;
2665 reflags[right--] = ch;
2670 reflags[left] = '-';
2674 mg->mg_len = re->prelen + 4 + left;
2675 New(616, mg->mg_ptr, mg->mg_len + 1 + left, char);
2676 Copy("(?", mg->mg_ptr, 2, char);
2677 Copy(reflags, mg->mg_ptr+2, left, char);
2678 Copy(":", mg->mg_ptr+left+2, 1, char);
2679 Copy(re->precomp, mg->mg_ptr+3+left, re->prelen, char);
2680 mg->mg_ptr[mg->mg_len - 1] = ')';
2681 mg->mg_ptr[mg->mg_len] = 0;
2683 PL_reginterp_cnt += re->program[0].next_off;
2695 case SVt_PVBM: if (SvROK(sv))
2698 s = "SCALAR"; break;
2699 case SVt_PVLV: s = "LVALUE"; break;
2700 case SVt_PVAV: s = "ARRAY"; break;
2701 case SVt_PVHV: s = "HASH"; break;
2702 case SVt_PVCV: s = "CODE"; break;
2703 case SVt_PVGV: s = "GLOB"; break;
2704 case SVt_PVFM: s = "FORMAT"; break;
2705 case SVt_PVIO: s = "IO"; break;
2706 default: s = "UNKNOWN"; break;
2710 Perl_sv_setpvf(aTHX_ tsv, "%s=%s", HvNAME(SvSTASH(sv)), s);
2713 Perl_sv_catpvf(aTHX_ tsv, "(0x%"UVxf")", PTR2UV(sv));
2719 if (SvREADONLY(sv) && !SvOK(sv)) {
2720 if (ckWARN(WARN_UNINITIALIZED))
2726 if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
2727 /* I'm assuming that if both IV and NV are equally valid then
2728 converting the IV is going to be more efficient */
2729 U32 isIOK = SvIOK(sv);
2730 U32 isUIOK = SvIsUV(sv);
2731 char buf[TYPE_CHARS(UV)];
2734 if (SvTYPE(sv) < SVt_PVIV)
2735 sv_upgrade(sv, SVt_PVIV);
2737 ptr = uiv_2buf(buf, 0, SvUVX(sv), 1, &ebuf);
2739 ptr = uiv_2buf(buf, SvIVX(sv), 0, 0, &ebuf);
2740 SvGROW(sv, ebuf - ptr + 1); /* inlined from sv_setpvn */
2741 Move(ptr,SvPVX(sv),ebuf - ptr,char);
2742 SvCUR_set(sv, ebuf - ptr);
2752 else if (SvNOKp(sv)) {
2753 if (SvTYPE(sv) < SVt_PVNV)
2754 sv_upgrade(sv, SVt_PVNV);
2755 /* The +20 is pure guesswork. Configure test needed. --jhi */
2756 SvGROW(sv, NV_DIG + 20);
2758 olderrno = errno; /* some Xenix systems wipe out errno here */
2760 if (SvNVX(sv) == 0.0)
2761 (void)strcpy(s,"0");
2765 Gconvert(SvNVX(sv), NV_DIG, 0, s);
2768 #ifdef FIXNEGATIVEZERO
2769 if (*s == '-' && s[1] == '0' && !s[2])
2779 if (ckWARN(WARN_UNINITIALIZED)
2780 && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
2783 if (SvTYPE(sv) < SVt_PV)
2784 /* Typically the caller expects that sv_any is not NULL now. */
2785 sv_upgrade(sv, SVt_PV);
2788 *lp = s - SvPVX(sv);
2791 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
2792 PTR2UV(sv),SvPVX(sv)));
2796 if (SvROK(sv)) { /* XXX Skip this when sv_pvn_force calls */
2797 /* Sneaky stuff here */
2801 tsv = newSVpv(tmpbuf, 0);
2817 len = strlen(tmpbuf);
2819 #ifdef FIXNEGATIVEZERO
2820 if (len == 2 && t[0] == '-' && t[1] == '0') {
2825 (void)SvUPGRADE(sv, SVt_PV);
2827 s = SvGROW(sv, len + 1);
2836 Perl_sv_2pvbyte_nolen(pTHX_ register SV *sv)
2839 return sv_2pvbyte(sv, &n_a);
2843 Perl_sv_2pvbyte(pTHX_ register SV *sv, STRLEN *lp)
2845 return sv_2pv(sv,lp);
2849 Perl_sv_2pvutf8_nolen(pTHX_ register SV *sv)
2852 return sv_2pvutf8(sv, &n_a);
2856 Perl_sv_2pvutf8(pTHX_ register SV *sv, STRLEN *lp)
2858 sv_utf8_upgrade(sv);
2859 return SvPV(sv,*lp);
2862 /* This function is only called on magical items */
2864 Perl_sv_2bool(pTHX_ register SV *sv)
2873 if (SvAMAGIC(sv) && (tmpsv=AMG_CALLun(sv,bool_)) &&
2874 (SvRV(tmpsv) != SvRV(sv)))
2875 return SvTRUE(tmpsv);
2876 return SvRV(sv) != 0;
2879 register XPV* Xpvtmp;
2880 if ((Xpvtmp = (XPV*)SvANY(sv)) &&
2881 (*Xpvtmp->xpv_pv > '0' ||
2882 Xpvtmp->xpv_cur > 1 ||
2883 (Xpvtmp->xpv_cur && *Xpvtmp->xpv_pv != '0')))
2890 return SvIVX(sv) != 0;
2893 return SvNVX(sv) != 0.0;
2901 =for apidoc sv_utf8_upgrade
2903 Convert the PV of an SV to its UTF8-encoded form.
2909 Perl_sv_utf8_upgrade(pTHX_ register SV *sv)
2914 if (!sv || !SvPOK(sv) || SvUTF8(sv))
2917 /* This function could be much more efficient if we had a FLAG in SVs
2918 * to signal if there are any hibit chars in the PV.
2919 * Given that there isn't make loop fast as possible
2925 if ((hibit = *t++ & 0x80))
2931 if (SvREADONLY(sv) && SvFAKE(sv)) {
2932 sv_force_normal(sv);
2935 len = SvCUR(sv) + 1; /* Plus the \0 */
2936 SvPVX(sv) = (char*)bytes_to_utf8((U8*)s, &len);
2937 SvCUR(sv) = len - 1;
2939 Safefree(s); /* No longer using what was there before. */
2940 SvLEN(sv) = len; /* No longer know the real size. */
2946 =for apidoc sv_utf8_downgrade
2948 Attempt to convert the PV of an SV from UTF8-encoded to byte encoding.
2949 This may not be possible if the PV contains non-byte encoding characters;
2950 if this is the case, either returns false or, if C<fail_ok> is not
2957 Perl_sv_utf8_downgrade(pTHX_ register SV* sv, bool fail_ok)
2959 if (SvPOK(sv) && SvUTF8(sv)) {
2961 char *c = SvPVX(sv);
2962 STRLEN len = SvCUR(sv);
2964 if (!utf8_to_bytes((U8*)c, &len)) {
2969 Perl_croak(aTHX_ "Wide character in %s",
2970 PL_op_desc[PL_op->op_type]);
2972 Perl_croak(aTHX_ "Wide character");
2984 =for apidoc sv_utf8_encode
2986 Convert the PV of an SV to UTF8-encoded, but then turn off the C<SvUTF8>
2987 flag so that it looks like bytes again. Nothing calls this.
2993 Perl_sv_utf8_encode(pTHX_ register SV *sv)
2995 sv_utf8_upgrade(sv);
3000 Perl_sv_utf8_decode(pTHX_ register SV *sv)
3005 bool has_utf = FALSE;
3006 if (!sv_utf8_downgrade(sv, TRUE))
3009 /* it is actually just a matter of turning the utf8 flag on, but
3010 * we want to make sure everything inside is valid utf8 first.
3013 if (!is_utf8_string((U8*)c, SvCUR(sv)+1))
3027 /* Note: sv_setsv() should not be called with a source string that needs
3028 * to be reused, since it may destroy the source string if it is marked
3033 =for apidoc sv_setsv
3035 Copies the contents of the source SV C<ssv> into the destination SV C<dsv>.
3036 The source SV may be destroyed if it is mortal. Does not handle 'set'
3037 magic. See the macro forms C<SvSetSV>, C<SvSetSV_nosteal> and
3044 Perl_sv_setsv(pTHX_ SV *dstr, register SV *sstr)
3046 register U32 sflags;
3052 SV_CHECK_THINKFIRST(dstr);
3054 sstr = &PL_sv_undef;
3055 stype = SvTYPE(sstr);
3056 dtype = SvTYPE(dstr);
3060 /* There's a lot of redundancy below but we're going for speed here */
3065 if (dtype != SVt_PVGV) {
3066 (void)SvOK_off(dstr);
3074 sv_upgrade(dstr, SVt_IV);
3077 sv_upgrade(dstr, SVt_PVNV);
3081 sv_upgrade(dstr, SVt_PVIV);
3084 (void)SvIOK_only(dstr);
3085 SvIVX(dstr) = SvIVX(sstr);
3088 if (SvTAINTED(sstr))
3099 sv_upgrade(dstr, SVt_NV);
3104 sv_upgrade(dstr, SVt_PVNV);
3107 SvNVX(dstr) = SvNVX(sstr);
3108 (void)SvNOK_only(dstr);
3109 if (SvTAINTED(sstr))
3117 sv_upgrade(dstr, SVt_RV);
3118 else if (dtype == SVt_PVGV &&
3119 SvTYPE(SvRV(sstr)) == SVt_PVGV) {
3122 if (GvIMPORTED(dstr) != GVf_IMPORTED
3123 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3125 GvIMPORTED_on(dstr);
3136 sv_upgrade(dstr, SVt_PV);
3139 if (dtype < SVt_PVIV)
3140 sv_upgrade(dstr, SVt_PVIV);
3143 if (dtype < SVt_PVNV)
3144 sv_upgrade(dstr, SVt_PVNV);
3151 Perl_croak(aTHX_ "Bizarre copy of %s in %s", sv_reftype(sstr, 0),
3152 PL_op_name[PL_op->op_type]);
3154 Perl_croak(aTHX_ "Bizarre copy of %s", sv_reftype(sstr, 0));
3158 if (dtype <= SVt_PVGV) {
3160 if (dtype != SVt_PVGV) {
3161 char *name = GvNAME(sstr);
3162 STRLEN len = GvNAMELEN(sstr);
3163 sv_upgrade(dstr, SVt_PVGV);
3164 sv_magic(dstr, dstr, '*', Nullch, 0);
3165 GvSTASH(dstr) = (HV*)SvREFCNT_inc(GvSTASH(sstr));
3166 GvNAME(dstr) = savepvn(name, len);
3167 GvNAMELEN(dstr) = len;
3168 SvFAKE_on(dstr); /* can coerce to non-glob */
3170 /* ahem, death to those who redefine active sort subs */
3171 else if (PL_curstackinfo->si_type == PERLSI_SORT
3172 && GvCV(dstr) && PL_sortcop == CvSTART(GvCV(dstr)))
3173 Perl_croak(aTHX_ "Can't redefine active sort subroutine %s",
3175 (void)SvOK_off(dstr);
3176 GvINTRO_off(dstr); /* one-shot flag */
3178 GvGP(dstr) = gp_ref(GvGP(sstr));
3179 if (SvTAINTED(sstr))
3181 if (GvIMPORTED(dstr) != GVf_IMPORTED
3182 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3184 GvIMPORTED_on(dstr);
3192 if (SvGMAGICAL(sstr)) {
3194 if (SvTYPE(sstr) != stype) {
3195 stype = SvTYPE(sstr);
3196 if (stype == SVt_PVGV && dtype <= SVt_PVGV)
3200 if (stype == SVt_PVLV)
3201 (void)SvUPGRADE(dstr, SVt_PVNV);
3203 (void)SvUPGRADE(dstr, stype);
3206 sflags = SvFLAGS(sstr);
3208 if (sflags & SVf_ROK) {
3209 if (dtype >= SVt_PV) {
3210 if (dtype == SVt_PVGV) {
3211 SV *sref = SvREFCNT_inc(SvRV(sstr));
3213 int intro = GvINTRO(dstr);
3218 GvINTRO_off(dstr); /* one-shot flag */
3219 Newz(602,gp, 1, GP);
3220 GvGP(dstr) = gp_ref(gp);
3221 GvSV(dstr) = NEWSV(72,0);
3222 GvLINE(dstr) = CopLINE(PL_curcop);
3223 GvEGV(dstr) = (GV*)dstr;
3226 switch (SvTYPE(sref)) {
3229 SAVESPTR(GvAV(dstr));
3231 dref = (SV*)GvAV(dstr);
3232 GvAV(dstr) = (AV*)sref;
3233 if (!GvIMPORTED_AV(dstr)
3234 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3236 GvIMPORTED_AV_on(dstr);
3241 SAVESPTR(GvHV(dstr));
3243 dref = (SV*)GvHV(dstr);
3244 GvHV(dstr) = (HV*)sref;
3245 if (!GvIMPORTED_HV(dstr)
3246 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3248 GvIMPORTED_HV_on(dstr);
3253 if (GvCVGEN(dstr) && GvCV(dstr) != (CV*)sref) {
3254 SvREFCNT_dec(GvCV(dstr));
3255 GvCV(dstr) = Nullcv;
3256 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3257 PL_sub_generation++;
3259 SAVESPTR(GvCV(dstr));
3262 dref = (SV*)GvCV(dstr);
3263 if (GvCV(dstr) != (CV*)sref) {
3264 CV* cv = GvCV(dstr);
3266 if (!GvCVGEN((GV*)dstr) &&
3267 (CvROOT(cv) || CvXSUB(cv)))
3270 /* ahem, death to those who redefine
3271 * active sort subs */
3272 if (PL_curstackinfo->si_type == PERLSI_SORT &&
3273 PL_sortcop == CvSTART(cv))
3275 "Can't redefine active sort subroutine %s",
3276 GvENAME((GV*)dstr));
3277 /* Redefining a sub - warning is mandatory if
3278 it was a const and its value changed. */
3279 if (ckWARN(WARN_REDEFINE)
3281 && (!CvCONST((CV*)sref)
3282 || sv_cmp(cv_const_sv(cv),
3283 cv_const_sv((CV*)sref)))))
3285 Perl_warner(aTHX_ WARN_REDEFINE,
3287 ? "Constant subroutine %s redefined"
3288 : "Subroutine %s redefined",
3289 GvENAME((GV*)dstr));
3292 cv_ckproto(cv, (GV*)dstr,
3293 SvPOK(sref) ? SvPVX(sref) : Nullch);
3295 GvCV(dstr) = (CV*)sref;
3296 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3297 GvASSUMECV_on(dstr);
3298 PL_sub_generation++;
3300 if (!GvIMPORTED_CV(dstr)
3301 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3303 GvIMPORTED_CV_on(dstr);
3308 SAVESPTR(GvIOp(dstr));
3310 dref = (SV*)GvIOp(dstr);
3311 GvIOp(dstr) = (IO*)sref;
3315 SAVESPTR(GvFORM(dstr));
3317 dref = (SV*)GvFORM(dstr);
3318 GvFORM(dstr) = (CV*)sref;
3322 SAVESPTR(GvSV(dstr));
3324 dref = (SV*)GvSV(dstr);
3326 if (!GvIMPORTED_SV(dstr)
3327 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3329 GvIMPORTED_SV_on(dstr);
3337 if (SvTAINTED(sstr))
3342 (void)SvOOK_off(dstr); /* backoff */
3344 Safefree(SvPVX(dstr));
3345 SvLEN(dstr)=SvCUR(dstr)=0;
3348 (void)SvOK_off(dstr);
3349 SvRV(dstr) = SvREFCNT_inc(SvRV(sstr));
3351 if (sflags & SVp_NOK) {
3353 SvNVX(dstr) = SvNVX(sstr);
3355 if (sflags & SVp_IOK) {
3356 (void)SvIOK_on(dstr);
3357 SvIVX(dstr) = SvIVX(sstr);
3358 if (sflags & SVf_IVisUV)
3361 if (SvAMAGIC(sstr)) {
3365 else if (sflags & SVp_POK) {
3368 * Check to see if we can just swipe the string. If so, it's a
3369 * possible small lose on short strings, but a big win on long ones.
3370 * It might even be a win on short strings if SvPVX(dstr)
3371 * has to be allocated and SvPVX(sstr) has to be freed.
3374 if (SvTEMP(sstr) && /* slated for free anyway? */
3375 SvREFCNT(sstr) == 1 && /* and no other references to it? */
3376 !(sflags & SVf_OOK) && /* and not involved in OOK hack? */
3377 SvLEN(sstr) && /* and really is a string */
3378 !(PL_op && PL_op->op_type == OP_AASSIGN)) /* and won't be needed again, potentially */
3380 if (SvPVX(dstr)) { /* we know that dtype >= SVt_PV */
3382 SvFLAGS(dstr) &= ~SVf_OOK;
3383 Safefree(SvPVX(dstr) - SvIVX(dstr));
3385 else if (SvLEN(dstr))
3386 Safefree(SvPVX(dstr));
3388 (void)SvPOK_only(dstr);
3389 SvPV_set(dstr, SvPVX(sstr));
3390 SvLEN_set(dstr, SvLEN(sstr));
3391 SvCUR_set(dstr, SvCUR(sstr));
3394 (void)SvOK_off(sstr); /* NOTE: nukes most SvFLAGS on sstr */
3395 SvPV_set(sstr, Nullch);
3400 else { /* have to copy actual string */
3401 STRLEN len = SvCUR(sstr);
3403 SvGROW(dstr, len + 1); /* inlined from sv_setpvn */
3404 Move(SvPVX(sstr),SvPVX(dstr),len,char);
3405 SvCUR_set(dstr, len);
3406 *SvEND(dstr) = '\0';
3407 (void)SvPOK_only(dstr);
3409 if ((sflags & SVf_UTF8) && !IN_BYTE)
3412 if (sflags & SVp_NOK) {
3414 SvNVX(dstr) = SvNVX(sstr);
3416 if (sflags & SVp_IOK) {
3417 (void)SvIOK_on(dstr);
3418 SvIVX(dstr) = SvIVX(sstr);
3419 if (sflags & SVf_IVisUV)
3423 else if (sflags & SVp_NOK) {
3424 SvNVX(dstr) = SvNVX(sstr);
3425 (void)SvNOK_only(dstr);
3426 if (sflags & SVf_IOK) {
3427 (void)SvIOK_on(dstr);
3428 SvIVX(dstr) = SvIVX(sstr);
3429 /* XXXX Do we want to set IsUV for IV(ROK)? Be extra safe... */
3430 if (sflags & SVf_IVisUV)
3434 else if (sflags & SVp_IOK) {
3435 (void)SvIOK_only(dstr);
3436 SvIVX(dstr) = SvIVX(sstr);
3437 if (sflags & SVf_IVisUV)
3441 if (dtype == SVt_PVGV) {
3442 if (ckWARN(WARN_MISC))
3443 Perl_warner(aTHX_ WARN_MISC, "Undefined value assigned to typeglob");
3446 (void)SvOK_off(dstr);
3448 if (SvTAINTED(sstr))
3453 =for apidoc sv_setsv_mg
3455 Like C<sv_setsv>, but also handles 'set' magic.
3461 Perl_sv_setsv_mg(pTHX_ SV *dstr, register SV *sstr)
3463 sv_setsv(dstr,sstr);
3468 =for apidoc sv_setpvn
3470 Copies a string into an SV. The C<len> parameter indicates the number of
3471 bytes to be copied. Does not handle 'set' magic. See C<sv_setpvn_mg>.
3477 Perl_sv_setpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3479 register char *dptr;
3481 /* len is STRLEN which is unsigned, need to copy to signed */
3485 SV_CHECK_THINKFIRST(sv);
3490 (void)SvUPGRADE(sv, SVt_PV);
3492 SvGROW(sv, len + 1);
3494 Move(ptr,dptr,len,char);
3497 (void)SvPOK_only(sv); /* validate pointer */
3502 =for apidoc sv_setpvn_mg
3504 Like C<sv_setpvn>, but also handles 'set' magic.
3510 Perl_sv_setpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3512 sv_setpvn(sv,ptr,len);
3517 =for apidoc sv_setpv
3519 Copies a string into an SV. The string must be null-terminated. Does not
3520 handle 'set' magic. See C<sv_setpv_mg>.
3526 Perl_sv_setpv(pTHX_ register SV *sv, register const char *ptr)
3528 register STRLEN len;
3530 SV_CHECK_THINKFIRST(sv);
3536 (void)SvUPGRADE(sv, SVt_PV);
3538 SvGROW(sv, len + 1);
3539 Move(ptr,SvPVX(sv),len+1,char);
3541 (void)SvPOK_only(sv); /* validate pointer */
3546 =for apidoc sv_setpv_mg
3548 Like C<sv_setpv>, but also handles 'set' magic.
3554 Perl_sv_setpv_mg(pTHX_ register SV *sv, register const char *ptr)
3561 =for apidoc sv_usepvn
3563 Tells an SV to use C<ptr> to find its string value. Normally the string is
3564 stored inside the SV but sv_usepvn allows the SV to use an outside string.
3565 The C<ptr> should point to memory that was allocated by C<malloc>. The
3566 string length, C<len>, must be supplied. This function will realloc the
3567 memory pointed to by C<ptr>, so that pointer should not be freed or used by
3568 the programmer after giving it to sv_usepvn. Does not handle 'set' magic.
3569 See C<sv_usepvn_mg>.
3575 Perl_sv_usepvn(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
3577 SV_CHECK_THINKFIRST(sv);
3578 (void)SvUPGRADE(sv, SVt_PV);
3583 (void)SvOOK_off(sv);
3584 if (SvPVX(sv) && SvLEN(sv))
3585 Safefree(SvPVX(sv));
3586 Renew(ptr, len+1, char);
3589 SvLEN_set(sv, len+1);
3591 (void)SvPOK_only(sv); /* validate pointer */
3596 =for apidoc sv_usepvn_mg
3598 Like C<sv_usepvn>, but also handles 'set' magic.
3604 Perl_sv_usepvn_mg(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
3606 sv_usepvn(sv,ptr,len);
3611 Perl_sv_force_normal_flags(pTHX_ register SV *sv, U32 flags)
3613 if (SvREADONLY(sv)) {
3615 char *pvx = SvPVX(sv);
3616 STRLEN len = SvCUR(sv);
3617 U32 hash = SvUVX(sv);
3618 SvGROW(sv, len + 1);
3619 Move(pvx,SvPVX(sv),len,char);
3623 unsharepvn(pvx,SvUTF8(sv)?-len:len,hash);
3625 else if (PL_curcop != &PL_compiling)
3626 Perl_croak(aTHX_ PL_no_modify);
3629 sv_unref_flags(sv, flags);
3630 else if (SvFAKE(sv) && SvTYPE(sv) == SVt_PVGV)
3635 Perl_sv_force_normal(pTHX_ register SV *sv)
3637 sv_force_normal_flags(sv, 0);
3643 Efficient removal of characters from the beginning of the string buffer.
3644 SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
3645 the string buffer. The C<ptr> becomes the first character of the adjusted
3652 Perl_sv_chop(pTHX_ register SV *sv, register char *ptr) /* like set but assuming ptr is in sv */
3656 register STRLEN delta;
3658 if (!ptr || !SvPOKp(sv))
3660 SV_CHECK_THINKFIRST(sv);
3661 if (SvTYPE(sv) < SVt_PVIV)
3662 sv_upgrade(sv,SVt_PVIV);
3665 if (!SvLEN(sv)) { /* make copy of shared string */
3666 char *pvx = SvPVX(sv);
3667 STRLEN len = SvCUR(sv);
3668 SvGROW(sv, len + 1);
3669 Move(pvx,SvPVX(sv),len,char);
3673 SvFLAGS(sv) |= SVf_OOK;
3675 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVp_IOK|SVp_NOK|SVf_IVisUV);
3676 delta = ptr - SvPVX(sv);
3684 =for apidoc sv_catpvn
3686 Concatenates the string onto the end of the string which is in the SV. The
3687 C<len> indicates number of bytes to copy. Handles 'get' magic, but not
3688 'set' magic. See C<sv_catpvn_mg>.
3694 Perl_sv_catpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3699 junk = SvPV_force(sv, tlen);
3700 SvGROW(sv, tlen + len + 1);
3703 Move(ptr,SvPVX(sv)+tlen,len,char);
3706 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3711 =for apidoc sv_catpvn_mg
3713 Like C<sv_catpvn>, but also handles 'set' magic.
3719 Perl_sv_catpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3721 sv_catpvn(sv,ptr,len);
3726 =for apidoc sv_catsv
3728 Concatenates the string from SV C<ssv> onto the end of the string in SV
3729 C<dsv>. Handles 'get' magic, but not 'set' magic. See C<sv_catsv_mg>.
3735 Perl_sv_catsv(pTHX_ SV *dstr, register SV *sstr)
3741 if ((s = SvPV(sstr, len))) {
3742 if (DO_UTF8(sstr)) {
3743 sv_utf8_upgrade(dstr);
3744 sv_catpvn(dstr,s,len);
3748 sv_catpvn(dstr,s,len);
3753 =for apidoc sv_catsv_mg
3755 Like C<sv_catsv>, but also handles 'set' magic.
3761 Perl_sv_catsv_mg(pTHX_ SV *dstr, register SV *sstr)
3763 sv_catsv(dstr,sstr);
3768 =for apidoc sv_catpv
3770 Concatenates the string onto the end of the string which is in the SV.
3771 Handles 'get' magic, but not 'set' magic. See C<sv_catpv_mg>.
3777 Perl_sv_catpv(pTHX_ register SV *sv, register const char *ptr)
3779 register STRLEN len;
3785 junk = SvPV_force(sv, tlen);
3787 SvGROW(sv, tlen + len + 1);
3790 Move(ptr,SvPVX(sv)+tlen,len+1,char);
3792 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3797 =for apidoc sv_catpv_mg
3799 Like C<sv_catpv>, but also handles 'set' magic.
3805 Perl_sv_catpv_mg(pTHX_ register SV *sv, register const char *ptr)
3812 Perl_newSV(pTHX_ STRLEN len)
3818 sv_upgrade(sv, SVt_PV);
3819 SvGROW(sv, len + 1);
3824 /* name is assumed to contain an SV* if (name && namelen == HEf_SVKEY) */
3827 =for apidoc sv_magic
3829 Adds magic to an SV.
3835 Perl_sv_magic(pTHX_ register SV *sv, SV *obj, int how, const char *name, I32 namlen)
3839 if (SvREADONLY(sv)) {
3840 if (PL_curcop != &PL_compiling && !strchr("gBf", how))
3841 Perl_croak(aTHX_ PL_no_modify);
3843 if (SvMAGICAL(sv) || (how == 't' && SvTYPE(sv) >= SVt_PVMG)) {
3844 if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
3851 (void)SvUPGRADE(sv, SVt_PVMG);
3853 Newz(702,mg, 1, MAGIC);
3854 mg->mg_moremagic = SvMAGIC(sv);
3857 if (!obj || obj == sv || how == '#' || how == 'r')
3860 mg->mg_obj = SvREFCNT_inc(obj);
3861 mg->mg_flags |= MGf_REFCOUNTED;
3864 mg->mg_len = namlen;
3867 mg->mg_ptr = savepvn(name, namlen);
3868 else if (namlen == HEf_SVKEY)
3869 mg->mg_ptr = (char*)SvREFCNT_inc((SV*)name);
3873 mg->mg_virtual = &PL_vtbl_sv;
3876 mg->mg_virtual = &PL_vtbl_amagic;
3879 mg->mg_virtual = &PL_vtbl_amagicelem;
3885 mg->mg_virtual = &PL_vtbl_bm;
3888 mg->mg_virtual = &PL_vtbl_regdata;
3891 mg->mg_virtual = &PL_vtbl_regdatum;
3894 mg->mg_virtual = &PL_vtbl_env;
3897 mg->mg_virtual = &PL_vtbl_fm;
3900 mg->mg_virtual = &PL_vtbl_envelem;
3903 mg->mg_virtual = &PL_vtbl_mglob;
3906 mg->mg_virtual = &PL_vtbl_isa;
3909 mg->mg_virtual = &PL_vtbl_isaelem;
3912 mg->mg_virtual = &PL_vtbl_nkeys;
3919 mg->mg_virtual = &PL_vtbl_dbline;
3923 mg->mg_virtual = &PL_vtbl_mutex;
3925 #endif /* USE_THREADS */
3926 #ifdef USE_LOCALE_COLLATE
3928 mg->mg_virtual = &PL_vtbl_collxfrm;
3930 #endif /* USE_LOCALE_COLLATE */
3932 mg->mg_virtual = &PL_vtbl_pack;
3936 mg->mg_virtual = &PL_vtbl_packelem;
3939 mg->mg_virtual = &PL_vtbl_regexp;
3942 mg->mg_virtual = &PL_vtbl_sig;
3945 mg->mg_virtual = &PL_vtbl_sigelem;
3948 mg->mg_virtual = &PL_vtbl_taint;
3952 mg->mg_virtual = &PL_vtbl_uvar;
3955 mg->mg_virtual = &PL_vtbl_vec;
3958 mg->mg_virtual = &PL_vtbl_substr;
3961 mg->mg_virtual = &PL_vtbl_defelem;
3964 mg->mg_virtual = &PL_vtbl_glob;
3967 mg->mg_virtual = &PL_vtbl_arylen;
3970 mg->mg_virtual = &PL_vtbl_pos;
3973 mg->mg_virtual = &PL_vtbl_backref;
3975 case '~': /* Reserved for use by extensions not perl internals. */
3976 /* Useful for attaching extension internal data to perl vars. */
3977 /* Note that multiple extensions may clash if magical scalars */
3978 /* etc holding private data from one are passed to another. */
3982 Perl_croak(aTHX_ "Don't know how to handle magic of type '%c'", how);
3986 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
3990 =for apidoc sv_unmagic
3992 Removes magic from an SV.
3998 Perl_sv_unmagic(pTHX_ SV *sv, int type)
4002 if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
4005 for (mg = *mgp; mg; mg = *mgp) {
4006 if (mg->mg_type == type) {
4007 MGVTBL* vtbl = mg->mg_virtual;
4008 *mgp = mg->mg_moremagic;
4009 if (vtbl && vtbl->svt_free)
4010 CALL_FPTR(vtbl->svt_free)(aTHX_ sv, mg);
4011 if (mg->mg_ptr && mg->mg_type != 'g')
4012 if (mg->mg_len >= 0)
4013 Safefree(mg->mg_ptr);
4014 else if (mg->mg_len == HEf_SVKEY)
4015 SvREFCNT_dec((SV*)mg->mg_ptr);
4016 if (mg->mg_flags & MGf_REFCOUNTED)
4017 SvREFCNT_dec(mg->mg_obj);
4021 mgp = &mg->mg_moremagic;
4025 SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
4032 =for apidoc sv_rvweaken
4040 Perl_sv_rvweaken(pTHX_ SV *sv)
4043 if (!SvOK(sv)) /* let undefs pass */
4046 Perl_croak(aTHX_ "Can't weaken a nonreference");
4047 else if (SvWEAKREF(sv)) {
4048 if (ckWARN(WARN_MISC))
4049 Perl_warner(aTHX_ WARN_MISC, "Reference is already weak");
4053 sv_add_backref(tsv, sv);
4060 S_sv_add_backref(pTHX_ SV *tsv, SV *sv)
4064 if (SvMAGICAL(tsv) && (mg = mg_find(tsv, '<')))
4065 av = (AV*)mg->mg_obj;
4068 sv_magic(tsv, (SV*)av, '<', NULL, 0);
4069 SvREFCNT_dec(av); /* for sv_magic */
4075 S_sv_del_backref(pTHX_ SV *sv)
4082 if (!SvMAGICAL(tsv) || !(mg = mg_find(tsv, '<')))
4083 Perl_croak(aTHX_ "panic: del_backref");
4084 av = (AV *)mg->mg_obj;
4089 svp[i] = &PL_sv_undef; /* XXX */
4096 =for apidoc sv_insert
4098 Inserts a string at the specified offset/length within the SV. Similar to
4099 the Perl substr() function.
4105 Perl_sv_insert(pTHX_ SV *bigstr, STRLEN offset, STRLEN len, char *little, STRLEN littlelen)
4109 register char *midend;
4110 register char *bigend;
4116 Perl_croak(aTHX_ "Can't modify non-existent substring");
4117 SvPV_force(bigstr, curlen);
4118 (void)SvPOK_only_UTF8(bigstr);
4119 if (offset + len > curlen) {
4120 SvGROW(bigstr, offset+len+1);
4121 Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
4122 SvCUR_set(bigstr, offset+len);
4126 i = littlelen - len;
4127 if (i > 0) { /* string might grow */
4128 big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
4129 mid = big + offset + len;
4130 midend = bigend = big + SvCUR(bigstr);
4133 while (midend > mid) /* shove everything down */
4134 *--bigend = *--midend;
4135 Move(little,big+offset,littlelen,char);
4141 Move(little,SvPVX(bigstr)+offset,len,char);
4146 big = SvPVX(bigstr);
4149 bigend = big + SvCUR(bigstr);
4151 if (midend > bigend)
4152 Perl_croak(aTHX_ "panic: sv_insert");
4154 if (mid - big > bigend - midend) { /* faster to shorten from end */
4156 Move(little, mid, littlelen,char);
4159 i = bigend - midend;
4161 Move(midend, mid, i,char);
4165 SvCUR_set(bigstr, mid - big);
4168 else if ((i = mid - big)) { /* faster from front */
4169 midend -= littlelen;
4171 sv_chop(bigstr,midend-i);
4176 Move(little, mid, littlelen,char);
4178 else if (littlelen) {
4179 midend -= littlelen;
4180 sv_chop(bigstr,midend);
4181 Move(little,midend,littlelen,char);
4184 sv_chop(bigstr,midend);
4190 =for apidoc sv_replace
4192 Make the first argument a copy of the second, then delete the original.
4198 Perl_sv_replace(pTHX_ register SV *sv, register SV *nsv)
4200 U32 refcnt = SvREFCNT(sv);
4201 SV_CHECK_THINKFIRST(sv);
4202 if (SvREFCNT(nsv) != 1 && ckWARN_d(WARN_INTERNAL))
4203 Perl_warner(aTHX_ WARN_INTERNAL, "Reference miscount in sv_replace()");
4204 if (SvMAGICAL(sv)) {
4208 sv_upgrade(nsv, SVt_PVMG);
4209 SvMAGIC(nsv) = SvMAGIC(sv);
4210 SvFLAGS(nsv) |= SvMAGICAL(sv);
4216 assert(!SvREFCNT(sv));
4217 StructCopy(nsv,sv,SV);
4218 SvREFCNT(sv) = refcnt;
4219 SvFLAGS(nsv) |= SVTYPEMASK; /* Mark as freed */
4224 =for apidoc sv_clear
4226 Clear an SV, making it empty. Does not free the memory used by the SV
4233 Perl_sv_clear(pTHX_ register SV *sv)
4237 assert(SvREFCNT(sv) == 0);
4240 if (PL_defstash) { /* Still have a symbol table? */
4245 Zero(&tmpref, 1, SV);
4246 sv_upgrade(&tmpref, SVt_RV);
4248 SvREADONLY_on(&tmpref); /* DESTROY() could be naughty */
4249 SvREFCNT(&tmpref) = 1;
4252 stash = SvSTASH(sv);
4253 destructor = gv_fetchmethod(SvSTASH(sv), "DESTROY");
4256 PUSHSTACKi(PERLSI_DESTROY);
4257 SvRV(&tmpref) = SvREFCNT_inc(sv);
4262 call_sv((SV*)GvCV(destructor),
4263 G_DISCARD|G_EVAL|G_KEEPERR);
4269 } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
4271 del_XRV(SvANY(&tmpref));
4274 if (PL_in_clean_objs)
4275 Perl_croak(aTHX_ "DESTROY created new reference to dead object '%s'",
4277 /* DESTROY gave object new lease on life */
4283 SvREFCNT_dec(SvSTASH(sv)); /* possibly of changed persuasion */
4284 SvOBJECT_off(sv); /* Curse the object. */
4285 if (SvTYPE(sv) != SVt_PVIO)
4286 --PL_sv_objcount; /* XXX Might want something more general */
4289 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv))
4292 switch (SvTYPE(sv)) {
4295 IoIFP(sv) != PerlIO_stdin() &&
4296 IoIFP(sv) != PerlIO_stdout() &&
4297 IoIFP(sv) != PerlIO_stderr())
4299 io_close((IO*)sv, FALSE);
4301 if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
4302 PerlDir_close(IoDIRP(sv));
4303 IoDIRP(sv) = (DIR*)NULL;
4304 Safefree(IoTOP_NAME(sv));
4305 Safefree(IoFMT_NAME(sv));
4306 Safefree(IoBOTTOM_NAME(sv));
4321 SvREFCNT_dec(LvTARG(sv));
4325 Safefree(GvNAME(sv));
4326 /* cannot decrease stash refcount yet, as we might recursively delete
4327 ourselves when the refcnt drops to zero. Delay SvREFCNT_dec
4328 of stash until current sv is completely gone.
4329 -- JohnPC, 27 Mar 1998 */
4330 stash = GvSTASH(sv);
4336 (void)SvOOK_off(sv);
4344 SvREFCNT_dec(SvRV(sv));
4346 else if (SvPVX(sv) && SvLEN(sv))
4347 Safefree(SvPVX(sv));
4348 else if (SvPVX(sv) && SvREADONLY(sv) && SvFAKE(sv)) {
4349 unsharepvn(SvPVX(sv),SvUTF8(sv)?-SvCUR(sv):SvCUR(sv),SvUVX(sv));
4361 switch (SvTYPE(sv)) {
4377 del_XPVIV(SvANY(sv));
4380 del_XPVNV(SvANY(sv));
4383 del_XPVMG(SvANY(sv));
4386 del_XPVLV(SvANY(sv));
4389 del_XPVAV(SvANY(sv));
4392 del_XPVHV(SvANY(sv));
4395 del_XPVCV(SvANY(sv));
4398 del_XPVGV(SvANY(sv));
4399 /* code duplication for increased performance. */
4400 SvFLAGS(sv) &= SVf_BREAK;
4401 SvFLAGS(sv) |= SVTYPEMASK;
4402 /* decrease refcount of the stash that owns this GV, if any */
4404 SvREFCNT_dec(stash);
4405 return; /* not break, SvFLAGS reset already happened */
4407 del_XPVBM(SvANY(sv));
4410 del_XPVFM(SvANY(sv));
4413 del_XPVIO(SvANY(sv));
4416 SvFLAGS(sv) &= SVf_BREAK;
4417 SvFLAGS(sv) |= SVTYPEMASK;
4421 Perl_sv_newref(pTHX_ SV *sv)
4424 ATOMIC_INC(SvREFCNT(sv));
4431 Free the memory used by an SV.
4437 Perl_sv_free(pTHX_ SV *sv)
4439 int refcount_is_zero;
4443 if (SvREFCNT(sv) == 0) {
4444 if (SvFLAGS(sv) & SVf_BREAK)
4446 if (PL_in_clean_all) /* All is fair */
4448 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
4449 /* make sure SvREFCNT(sv)==0 happens very seldom */
4450 SvREFCNT(sv) = (~(U32)0)/2;
4453 if (ckWARN_d(WARN_INTERNAL))
4454 Perl_warner(aTHX_ WARN_INTERNAL, "Attempt to free unreferenced scalar");
4457 ATOMIC_DEC_AND_TEST(refcount_is_zero, SvREFCNT(sv));
4458 if (!refcount_is_zero)
4462 if (ckWARN_d(WARN_DEBUGGING))
4463 Perl_warner(aTHX_ WARN_DEBUGGING,
4464 "Attempt to free temp prematurely: SV 0x%"UVxf,
4469 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
4470 /* make sure SvREFCNT(sv)==0 happens very seldom */
4471 SvREFCNT(sv) = (~(U32)0)/2;
4482 Returns the length of the string in the SV. See also C<SvCUR>.
4488 Perl_sv_len(pTHX_ register SV *sv)
4497 len = mg_length(sv);
4499 junk = SvPV(sv, len);
4504 =for apidoc sv_len_utf8
4506 Returns the number of characters in the string in an SV, counting wide
4507 UTF8 bytes as a single character.
4513 Perl_sv_len_utf8(pTHX_ register SV *sv)
4520 return mg_length(sv);
4525 U8 *s = (U8*)SvPV(sv, len);
4527 return Perl_utf8_length(aTHX_ s, s + len);
4532 Perl_sv_pos_u2b(pTHX_ register SV *sv, I32* offsetp, I32* lenp)
4537 I32 uoffset = *offsetp;
4543 start = s = (U8*)SvPV(sv, len);
4545 while (s < send && uoffset--)
4549 *offsetp = s - start;
4553 while (s < send && ulen--)
4563 Perl_sv_pos_b2u(pTHX_ register SV *sv, I32* offsetp)
4572 s = (U8*)SvPV(sv, len);
4574 Perl_croak(aTHX_ "panic: bad byte offset");
4575 send = s + *offsetp;
4582 if (ckWARN_d(WARN_UTF8))
4583 Perl_warner(aTHX_ WARN_UTF8, "Malformed UTF-8 character");
4593 Returns a boolean indicating whether the strings in the two SVs are
4600 Perl_sv_eq(pTHX_ register SV *sv1, register SV *sv2)
4607 bool pv1tmp = FALSE;
4608 bool pv2tmp = FALSE;
4615 pv1 = SvPV(sv1, cur1);
4622 pv2 = SvPV(sv2, cur2);
4624 /* do not utf8ize the comparands as a side-effect */
4625 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTE) {
4627 pv2 = (char*)bytes_to_utf8((U8*)pv2, &cur2);
4631 pv1 = (char*)bytes_to_utf8((U8*)pv1, &cur1);
4637 eq = memEQ(pv1, pv2, cur1);
4650 Compares the strings in two SVs. Returns -1, 0, or 1 indicating whether the
4651 string in C<sv1> is less than, equal to, or greater than the string in
4658 Perl_sv_cmp(pTHX_ register SV *sv1, register SV *sv2)
4663 bool pv1tmp = FALSE;
4664 bool pv2tmp = FALSE;
4671 pv1 = SvPV(sv1, cur1);
4678 pv2 = SvPV(sv2, cur2);
4680 /* do not utf8ize the comparands as a side-effect */
4681 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTE) {
4683 pv2 = (char*)bytes_to_utf8((U8*)pv2, &cur2);
4687 pv1 = (char*)bytes_to_utf8((U8*)pv1, &cur1);
4693 cmp = cur2 ? -1 : 0;
4697 I32 retval = memcmp((void*)pv1, (void*)pv2, cur1 < cur2 ? cur1 : cur2);
4700 cmp = retval < 0 ? -1 : 1;
4701 } else if (cur1 == cur2) {
4704 cmp = cur1 < cur2 ? -1 : 1;
4717 =for apidoc sv_cmp_locale
4719 Compares the strings in two SVs in a locale-aware manner. See
4726 Perl_sv_cmp_locale(pTHX_ register SV *sv1, register SV *sv2)
4728 #ifdef USE_LOCALE_COLLATE
4734 if (PL_collation_standard)
4738 pv1 = sv1 ? sv_collxfrm(sv1, &len1) : (char *) NULL;
4740 pv2 = sv2 ? sv_collxfrm(sv2, &len2) : (char *) NULL;
4742 if (!pv1 || !len1) {
4753 retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
4756 return retval < 0 ? -1 : 1;
4759 * When the result of collation is equality, that doesn't mean
4760 * that there are no differences -- some locales exclude some
4761 * characters from consideration. So to avoid false equalities,
4762 * we use the raw string as a tiebreaker.
4768 #endif /* USE_LOCALE_COLLATE */
4770 return sv_cmp(sv1, sv2);
4773 #ifdef USE_LOCALE_COLLATE
4775 * Any scalar variable may carry an 'o' magic that contains the
4776 * scalar data of the variable transformed to such a format that
4777 * a normal memory comparison can be used to compare the data
4778 * according to the locale settings.
4781 Perl_sv_collxfrm(pTHX_ SV *sv, STRLEN *nxp)
4785 mg = SvMAGICAL(sv) ? mg_find(sv, 'o') : (MAGIC *) NULL;
4786 if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
4791 Safefree(mg->mg_ptr);
4793 if ((xf = mem_collxfrm(s, len, &xlen))) {
4794 if (SvREADONLY(sv)) {
4797 return xf + sizeof(PL_collation_ix);
4800 sv_magic(sv, 0, 'o', 0, 0);
4801 mg = mg_find(sv, 'o');
4814 if (mg && mg->mg_ptr) {
4816 return mg->mg_ptr + sizeof(PL_collation_ix);
4824 #endif /* USE_LOCALE_COLLATE */
4829 Get a line from the filehandle and store it into the SV, optionally
4830 appending to the currently-stored string.
4836 Perl_sv_gets(pTHX_ register SV *sv, register PerlIO *fp, I32 append)
4840 register STDCHAR rslast;
4841 register STDCHAR *bp;
4845 SV_CHECK_THINKFIRST(sv);
4846 (void)SvUPGRADE(sv, SVt_PV);
4850 if (RsSNARF(PL_rs)) {
4854 else if (RsRECORD(PL_rs)) {
4855 I32 recsize, bytesread;
4858 /* Grab the size of the record we're getting */
4859 recsize = SvIV(SvRV(PL_rs));
4860 (void)SvPOK_only(sv); /* Validate pointer */
4861 buffer = SvGROW(sv, recsize + 1);
4864 /* VMS wants read instead of fread, because fread doesn't respect */
4865 /* RMS record boundaries. This is not necessarily a good thing to be */
4866 /* doing, but we've got no other real choice */
4867 bytesread = PerlLIO_read(PerlIO_fileno(fp), buffer, recsize);
4869 bytesread = PerlIO_read(fp, buffer, recsize);
4871 SvCUR_set(sv, bytesread);
4872 buffer[bytesread] = '\0';
4873 if (PerlIO_isutf8(fp))
4877 return(SvCUR(sv) ? SvPVX(sv) : Nullch);
4879 else if (RsPARA(PL_rs)) {
4884 /* Get $/ i.e. PL_rs into same encoding as stream wants */
4885 if (PerlIO_isutf8(fp)) {
4886 rsptr = SvPVutf8(PL_rs, rslen);
4889 if (SvUTF8(PL_rs)) {
4890 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
4891 Perl_croak(aTHX_ "Wide character in $/");
4894 rsptr = SvPV(PL_rs, rslen);
4898 rslast = rslen ? rsptr[rslen - 1] : '\0';
4900 if (RsPARA(PL_rs)) { /* have to do this both before and after */
4901 do { /* to make sure file boundaries work right */
4904 i = PerlIO_getc(fp);
4908 PerlIO_ungetc(fp,i);
4914 /* See if we know enough about I/O mechanism to cheat it ! */
4916 /* This used to be #ifdef test - it is made run-time test for ease
4917 of abstracting out stdio interface. One call should be cheap
4918 enough here - and may even be a macro allowing compile
4922 if (PerlIO_fast_gets(fp)) {
4925 * We're going to steal some values from the stdio struct
4926 * and put EVERYTHING in the innermost loop into registers.
4928 register STDCHAR *ptr;
4932 #if defined(VMS) && defined(PERLIO_IS_STDIO)
4933 /* An ungetc()d char is handled separately from the regular
4934 * buffer, so we getc() it back out and stuff it in the buffer.
4936 i = PerlIO_getc(fp);
4937 if (i == EOF) return 0;
4938 *(--((*fp)->_ptr)) = (unsigned char) i;
4942 /* Here is some breathtakingly efficient cheating */
4944 cnt = PerlIO_get_cnt(fp); /* get count into register */
4945 (void)SvPOK_only(sv); /* validate pointer */
4946 if (SvLEN(sv) - append <= cnt + 1) { /* make sure we have the room */
4947 if (cnt > 80 && SvLEN(sv) > append) {
4948 shortbuffered = cnt - SvLEN(sv) + append + 1;
4949 cnt -= shortbuffered;
4953 /* remember that cnt can be negative */
4954 SvGROW(sv, append + (cnt <= 0 ? 2 : (cnt + 1)));
4959 bp = (STDCHAR*)SvPVX(sv) + append; /* move these two too to registers */
4960 ptr = (STDCHAR*)PerlIO_get_ptr(fp);
4961 DEBUG_P(PerlIO_printf(Perl_debug_log,
4962 "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
4963 DEBUG_P(PerlIO_printf(Perl_debug_log,
4964 "Screamer: entering: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
4965 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
4966 PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
4971 while (cnt > 0) { /* this | eat */
4973 if ((*bp++ = *ptr++) == rslast) /* really | dust */
4974 goto thats_all_folks; /* screams | sed :-) */
4978 Copy(ptr, bp, cnt, char); /* this | eat */
4979 bp += cnt; /* screams | dust */
4980 ptr += cnt; /* louder | sed :-) */
4985 if (shortbuffered) { /* oh well, must extend */
4986 cnt = shortbuffered;
4988 bpx = bp - (STDCHAR*)SvPVX(sv); /* box up before relocation */
4990 SvGROW(sv, SvLEN(sv) + append + cnt + 2);
4991 bp = (STDCHAR*)SvPVX(sv) + bpx; /* unbox after relocation */
4995 DEBUG_P(PerlIO_printf(Perl_debug_log,
4996 "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
4997 PTR2UV(ptr),(long)cnt));
4998 PerlIO_set_ptrcnt(fp, ptr, cnt); /* deregisterize cnt and ptr */
4999 DEBUG_P(PerlIO_printf(Perl_debug_log,
5000 "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
5001 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
5002 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
5003 /* This used to call 'filbuf' in stdio form, but as that behaves like
5004 getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
5005 another abstraction. */
5006 i = PerlIO_getc(fp); /* get more characters */
5007 DEBUG_P(PerlIO_printf(Perl_debug_log,
5008 "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
5009 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
5010 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
5011 cnt = PerlIO_get_cnt(fp);
5012 ptr = (STDCHAR*)PerlIO_get_ptr(fp); /* reregisterize cnt and ptr */
5013 DEBUG_P(PerlIO_printf(Perl_debug_log,
5014 "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
5016 if (i == EOF) /* all done for ever? */
5017 goto thats_really_all_folks;
5019 bpx = bp - (STDCHAR*)SvPVX(sv); /* box up before relocation */
5021 SvGROW(sv, bpx + cnt + 2);
5022 bp = (STDCHAR*)SvPVX(sv) + bpx; /* unbox after relocation */
5024 *bp++ = i; /* store character from PerlIO_getc */
5026 if (rslen && (STDCHAR)i == rslast) /* all done for now? */
5027 goto thats_all_folks;
5031 if ((rslen > 1 && (bp - (STDCHAR*)SvPVX(sv) < rslen)) ||
5032 memNE((char*)bp - rslen, rsptr, rslen))
5033 goto screamer; /* go back to the fray */
5034 thats_really_all_folks:
5036 cnt += shortbuffered;
5037 DEBUG_P(PerlIO_printf(Perl_debug_log,
5038 "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
5039 PerlIO_set_ptrcnt(fp, ptr, cnt); /* put these back or we're in trouble */
5040 DEBUG_P(PerlIO_printf(Perl_debug_log,
5041 "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
5042 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
5043 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
5045 SvCUR_set(sv, bp - (STDCHAR*)SvPVX(sv)); /* set length */
5046 DEBUG_P(PerlIO_printf(Perl_debug_log,
5047 "Screamer: done, len=%ld, string=|%.*s|\n",
5048 (long)SvCUR(sv),(int)SvCUR(sv),SvPVX(sv)));
5053 /*The big, slow, and stupid way */
5056 /* Need to work around EPOC SDK features */
5057 /* On WINS: MS VC5 generates calls to _chkstk, */
5058 /* if a `large' stack frame is allocated */
5059 /* gcc on MARM does not generate calls like these */
5065 register STDCHAR *bpe = buf + sizeof(buf);
5067 while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = i) != rslast && bp < bpe)
5068 ; /* keep reading */
5072 cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
5073 /* Accomodate broken VAXC compiler, which applies U8 cast to
5074 * both args of ?: operator, causing EOF to change into 255
5076 if (cnt) { i = (U8)buf[cnt - 1]; } else { i = EOF; }
5080 sv_catpvn(sv, (char *) buf, cnt);
5082 sv_setpvn(sv, (char *) buf, cnt);
5084 if (i != EOF && /* joy */
5086 SvCUR(sv) < rslen ||
5087 memNE(SvPVX(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
5091 * If we're reading from a TTY and we get a short read,
5092 * indicating that the user hit his EOF character, we need
5093 * to notice it now, because if we try to read from the TTY
5094 * again, the EOF condition will disappear.
5096 * The comparison of cnt to sizeof(buf) is an optimization
5097 * that prevents unnecessary calls to feof().
5101 if (!(cnt < sizeof(buf) && PerlIO_eof(fp)))
5106 if (RsPARA(PL_rs)) { /* have to do this both before and after */
5107 while (i != EOF) { /* to make sure file boundaries work right */
5108 i = PerlIO_getc(fp);
5110 PerlIO_ungetc(fp,i);
5116 if (PerlIO_isutf8(fp))
5121 return (SvCUR(sv) - append) ? SvPVX(sv) : Nullch;
5128 Auto-increment of the value in the SV.
5134 Perl_sv_inc(pTHX_ register SV *sv)
5143 if (SvTHINKFIRST(sv)) {
5144 if (SvREADONLY(sv)) {
5145 if (PL_curcop != &PL_compiling)
5146 Perl_croak(aTHX_ PL_no_modify);
5150 if (SvAMAGIC(sv) && AMG_CALLun(sv,inc))
5152 i = PTR2IV(SvRV(sv));
5157 flags = SvFLAGS(sv);
5158 if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
5159 /* It's (privately or publicly) a float, but not tested as an
5160 integer, so test it to see. */
5162 flags = SvFLAGS(sv);
5164 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
5165 /* It's publicly an integer, or privately an integer-not-float */
5168 if (SvUVX(sv) == UV_MAX)
5169 sv_setnv(sv, (NV)UV_MAX + 1.0);
5171 (void)SvIOK_only_UV(sv);
5174 if (SvIVX(sv) == IV_MAX)
5175 sv_setuv(sv, (UV)IV_MAX + 1);
5177 (void)SvIOK_only(sv);
5183 if (flags & SVp_NOK) {
5184 (void)SvNOK_only(sv);
5189 if (!(flags & SVp_POK) || !*SvPVX(sv)) {
5190 if ((flags & SVTYPEMASK) < SVt_PVIV)
5191 sv_upgrade(sv, SVt_IV);
5192 (void)SvIOK_only(sv);
5197 while (isALPHA(*d)) d++;
5198 while (isDIGIT(*d)) d++;
5200 #ifdef PERL_PRESERVE_IVUV
5201 /* Got to punt this an an integer if needs be, but we don't issue
5202 warnings. Probably ought to make the sv_iv_please() that does
5203 the conversion if possible, and silently. */
5204 I32 numtype = looks_like_number(sv);
5205 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
5206 /* Need to try really hard to see if it's an integer.
5207 9.22337203685478e+18 is an integer.
5208 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
5209 so $a="9.22337203685478e+18"; $a+0; $a++
5210 needs to be the same as $a="9.22337203685478e+18"; $a++
5217 /* sv_2iv *should* have made this an NV */
5218 if (flags & SVp_NOK) {
5219 (void)SvNOK_only(sv);
5223 /* I don't think we can get here. Maybe I should assert this
5224 And if we do get here I suspect that sv_setnv will croak. NWC
5226 #if defined(USE_LONG_DOUBLE)
5227 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",
5228 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5230 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%g\n",
5231 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5234 #endif /* PERL_PRESERVE_IVUV */
5235 sv_setnv(sv,Atof(SvPVX(sv)) + 1.0);
5239 while (d >= SvPVX(sv)) {
5247 /* MKS: The original code here died if letters weren't consecutive.
5248 * at least it didn't have to worry about non-C locales. The
5249 * new code assumes that ('z'-'a')==('Z'-'A'), letters are
5250 * arranged in order (although not consecutively) and that only
5251 * [A-Za-z] are accepted by isALPHA in the C locale.
5253 if (*d != 'z' && *d != 'Z') {
5254 do { ++*d; } while (!isALPHA(*d));
5257 *(d--) -= 'z' - 'a';
5262 *(d--) -= 'z' - 'a' + 1;
5266 /* oh,oh, the number grew */
5267 SvGROW(sv, SvCUR(sv) + 2);
5269 for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX(sv); d--)
5280 Auto-decrement of the value in the SV.
5286 Perl_sv_dec(pTHX_ register SV *sv)
5294 if (SvTHINKFIRST(sv)) {
5295 if (SvREADONLY(sv)) {
5296 if (PL_curcop != &PL_compiling)
5297 Perl_croak(aTHX_ PL_no_modify);
5301 if (SvAMAGIC(sv) && AMG_CALLun(sv,dec))
5303 i = PTR2IV(SvRV(sv));
5308 /* Unlike sv_inc we don't have to worry about string-never-numbers
5309 and keeping them magic. But we mustn't warn on punting */
5310 flags = SvFLAGS(sv);
5311 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
5312 /* It's publicly an integer, or privately an integer-not-float */
5315 if (SvUVX(sv) == 0) {
5316 (void)SvIOK_only(sv);
5320 (void)SvIOK_only_UV(sv);
5324 if (SvIVX(sv) == IV_MIN)
5325 sv_setnv(sv, (NV)IV_MIN - 1.0);
5327 (void)SvIOK_only(sv);
5333 if (flags & SVp_NOK) {
5335 (void)SvNOK_only(sv);
5338 if (!(flags & SVp_POK)) {
5339 if ((flags & SVTYPEMASK) < SVt_PVNV)
5340 sv_upgrade(sv, SVt_NV);
5342 (void)SvNOK_only(sv);
5345 #ifdef PERL_PRESERVE_IVUV
5347 I32 numtype = looks_like_number(sv);
5348 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
5349 /* Need to try really hard to see if it's an integer.
5350 9.22337203685478e+18 is an integer.
5351 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
5352 so $a="9.22337203685478e+18"; $a+0; $a--
5353 needs to be the same as $a="9.22337203685478e+18"; $a--
5360 /* sv_2iv *should* have made this an NV */
5361 if (flags & SVp_NOK) {
5362 (void)SvNOK_only(sv);
5366 /* I don't think we can get here. Maybe I should assert this
5367 And if we do get here I suspect that sv_setnv will croak. NWC
5369 #if defined(USE_LONG_DOUBLE)
5370 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",
5371 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5373 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%g\n",
5374 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5378 #endif /* PERL_PRESERVE_IVUV */
5379 sv_setnv(sv,Atof(SvPVX(sv)) - 1.0); /* punt */
5383 =for apidoc sv_mortalcopy
5385 Creates a new SV which is a copy of the original SV. The new SV is marked
5391 /* Make a string that will exist for the duration of the expression
5392 * evaluation. Actually, it may have to last longer than that, but
5393 * hopefully we won't free it until it has been assigned to a
5394 * permanent location. */
5397 Perl_sv_mortalcopy(pTHX_ SV *oldstr)
5402 sv_setsv(sv,oldstr);
5404 PL_tmps_stack[++PL_tmps_ix] = sv;
5410 =for apidoc sv_newmortal
5412 Creates a new SV which is mortal. The reference count of the SV is set to 1.
5418 Perl_sv_newmortal(pTHX)
5423 SvFLAGS(sv) = SVs_TEMP;
5425 PL_tmps_stack[++PL_tmps_ix] = sv;
5430 =for apidoc sv_2mortal
5432 Marks an SV as mortal. The SV will be destroyed when the current context
5438 /* same thing without the copying */
5441 Perl_sv_2mortal(pTHX_ register SV *sv)
5445 if (SvREADONLY(sv) && SvIMMORTAL(sv))
5448 PL_tmps_stack[++PL_tmps_ix] = sv;
5456 Creates a new SV and copies a string into it. The reference count for the
5457 SV is set to 1. If C<len> is zero, Perl will compute the length using
5458 strlen(). For efficiency, consider using C<newSVpvn> instead.
5464 Perl_newSVpv(pTHX_ const char *s, STRLEN len)
5471 sv_setpvn(sv,s,len);
5476 =for apidoc newSVpvn
5478 Creates a new SV and copies a string into it. The reference count for the
5479 SV is set to 1. Note that if C<len> is zero, Perl will create a zero length
5480 string. You are responsible for ensuring that the source string is at least
5487 Perl_newSVpvn(pTHX_ const char *s, STRLEN len)
5492 sv_setpvn(sv,s,len);
5497 =for apidoc newSVpvn_share
5499 Creates a new SV and populates it with a string from
5500 the string table. Turns on READONLY and FAKE.
5501 The idea here is that as string table is used for shared hash
5502 keys these strings will have SvPVX == HeKEY and hash lookup
5503 will avoid string compare.
5509 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
5512 bool is_utf8 = FALSE;
5518 PERL_HASH(hash, src, len);
5520 sv_upgrade(sv, SVt_PVIV);
5521 SvPVX(sv) = sharepvn(src, is_utf8?-len:len, hash);
5533 #if defined(PERL_IMPLICIT_CONTEXT)
5535 Perl_newSVpvf_nocontext(const char* pat, ...)
5540 va_start(args, pat);
5541 sv = vnewSVpvf(pat, &args);
5548 =for apidoc newSVpvf
5550 Creates a new SV an initialize it with the string formatted like
5557 Perl_newSVpvf(pTHX_ const char* pat, ...)
5561 va_start(args, pat);
5562 sv = vnewSVpvf(pat, &args);
5568 Perl_vnewSVpvf(pTHX_ const char* pat, va_list* args)
5572 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
5579 Creates a new SV and copies a floating point value into it.
5580 The reference count for the SV is set to 1.
5586 Perl_newSVnv(pTHX_ NV n)
5598 Creates a new SV and copies an integer into it. The reference count for the
5605 Perl_newSViv(pTHX_ IV i)
5617 Creates a new SV and copies an unsigned integer into it.
5618 The reference count for the SV is set to 1.
5624 Perl_newSVuv(pTHX_ UV u)
5634 =for apidoc newRV_noinc
5636 Creates an RV wrapper for an SV. The reference count for the original
5637 SV is B<not> incremented.
5643 Perl_newRV_noinc(pTHX_ SV *tmpRef)
5648 sv_upgrade(sv, SVt_RV);
5655 /* newRV_inc is #defined to newRV in sv.h */
5657 Perl_newRV(pTHX_ SV *tmpRef)
5659 return newRV_noinc(SvREFCNT_inc(tmpRef));
5665 Creates a new SV which is an exact duplicate of the original SV.
5670 /* make an exact duplicate of old */
5673 Perl_newSVsv(pTHX_ register SV *old)
5679 if (SvTYPE(old) == SVTYPEMASK) {
5680 if (ckWARN_d(WARN_INTERNAL))
5681 Perl_warner(aTHX_ WARN_INTERNAL, "semi-panic: attempt to dup freed string");
5696 Perl_sv_reset(pTHX_ register char *s, HV *stash)
5704 char todo[PERL_UCHAR_MAX+1];
5709 if (!*s) { /* reset ?? searches */
5710 for (pm = HvPMROOT(stash); pm; pm = pm->op_pmnext) {
5711 pm->op_pmdynflags &= ~PMdf_USED;
5716 /* reset variables */
5718 if (!HvARRAY(stash))
5721 Zero(todo, 256, char);
5723 i = (unsigned char)*s;
5727 max = (unsigned char)*s++;
5728 for ( ; i <= max; i++) {
5731 for (i = 0; i <= (I32) HvMAX(stash); i++) {
5732 for (entry = HvARRAY(stash)[i];
5734 entry = HeNEXT(entry))
5736 if (!todo[(U8)*HeKEY(entry)])
5738 gv = (GV*)HeVAL(entry);
5740 if (SvTHINKFIRST(sv)) {
5741 if (!SvREADONLY(sv) && SvROK(sv))
5746 if (SvTYPE(sv) >= SVt_PV) {
5748 if (SvPVX(sv) != Nullch)
5755 if (GvHV(gv) && !HvNAME(GvHV(gv))) {
5757 #ifdef USE_ENVIRON_ARRAY
5759 environ[0] = Nullch;
5768 Perl_sv_2io(pTHX_ SV *sv)
5774 switch (SvTYPE(sv)) {
5782 Perl_croak(aTHX_ "Bad filehandle: %s", GvNAME(gv));
5786 Perl_croak(aTHX_ PL_no_usym, "filehandle");
5788 return sv_2io(SvRV(sv));
5789 gv = gv_fetchpv(SvPV(sv,n_a), FALSE, SVt_PVIO);
5795 Perl_croak(aTHX_ "Bad filehandle: %s", SvPV(sv,n_a));
5802 Perl_sv_2cv(pTHX_ SV *sv, HV **st, GV **gvp, I32 lref)
5809 return *gvp = Nullgv, Nullcv;
5810 switch (SvTYPE(sv)) {
5829 SV **sp = &sv; /* Used in tryAMAGICunDEREF macro. */
5830 tryAMAGICunDEREF(to_cv);
5833 if (SvTYPE(sv) == SVt_PVCV) {
5842 Perl_croak(aTHX_ "Not a subroutine reference");
5847 gv = gv_fetchpv(SvPV(sv, n_a), lref, SVt_PVCV);
5853 if (lref && !GvCVu(gv)) {
5856 tmpsv = NEWSV(704,0);
5857 gv_efullname3(tmpsv, gv, Nullch);
5858 /* XXX this is probably not what they think they're getting.
5859 * It has the same effect as "sub name;", i.e. just a forward
5861 newSUB(start_subparse(FALSE, 0),
5862 newSVOP(OP_CONST, 0, tmpsv),
5867 Perl_croak(aTHX_ "Unable to create sub named \"%s\"", SvPV(sv,n_a));
5876 Returns true if the SV has a true value by Perl's rules.
5882 Perl_sv_true(pTHX_ register SV *sv)
5888 if ((tXpv = (XPV*)SvANY(sv)) &&
5889 (tXpv->xpv_cur > 1 ||
5890 (tXpv->xpv_cur && *tXpv->xpv_pv != '0')))
5897 return SvIVX(sv) != 0;
5900 return SvNVX(sv) != 0.0;
5902 return sv_2bool(sv);
5908 Perl_sv_iv(pTHX_ register SV *sv)
5912 return (IV)SvUVX(sv);
5919 Perl_sv_uv(pTHX_ register SV *sv)
5924 return (UV)SvIVX(sv);
5930 Perl_sv_nv(pTHX_ register SV *sv)
5938 Perl_sv_pv(pTHX_ SV *sv)
5945 return sv_2pv(sv, &n_a);
5949 Perl_sv_pvn(pTHX_ SV *sv, STRLEN *lp)
5955 return sv_2pv(sv, lp);
5959 =for apidoc sv_pvn_force
5961 Get a sensible string out of the SV somehow.
5967 Perl_sv_pvn_force(pTHX_ SV *sv, STRLEN *lp)
5971 if (SvTHINKFIRST(sv) && !SvROK(sv))
5972 sv_force_normal(sv);
5978 if (SvTYPE(sv) > SVt_PVLV && SvTYPE(sv) != SVt_PVFM) {
5979 Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
5980 PL_op_name[PL_op->op_type]);
5984 if (s != SvPVX(sv)) { /* Almost, but not quite, sv_setpvn() */
5989 (void)SvUPGRADE(sv, SVt_PV); /* Never FALSE */
5990 SvGROW(sv, len + 1);
5991 Move(s,SvPVX(sv),len,char);
5996 SvPOK_on(sv); /* validate pointer */
5998 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
5999 PTR2UV(sv),SvPVX(sv)));
6006 Perl_sv_pvbyte(pTHX_ SV *sv)
6012 Perl_sv_pvbyten(pTHX_ SV *sv, STRLEN *lp)
6014 return sv_pvn(sv,lp);
6018 Perl_sv_pvbyten_force(pTHX_ SV *sv, STRLEN *lp)
6020 return sv_pvn_force(sv,lp);
6024 Perl_sv_pvutf8(pTHX_ SV *sv)
6026 sv_utf8_upgrade(sv);
6031 Perl_sv_pvutf8n(pTHX_ SV *sv, STRLEN *lp)
6033 sv_utf8_upgrade(sv);
6034 return sv_pvn(sv,lp);
6038 =for apidoc sv_pvutf8n_force
6040 Get a sensible UTF8-encoded string out of the SV somehow. See
6047 Perl_sv_pvutf8n_force(pTHX_ SV *sv, STRLEN *lp)
6049 sv_utf8_upgrade(sv);
6050 return sv_pvn_force(sv,lp);
6054 =for apidoc sv_reftype
6056 Returns a string describing what the SV is a reference to.
6062 Perl_sv_reftype(pTHX_ SV *sv, int ob)
6064 if (ob && SvOBJECT(sv))
6065 return HvNAME(SvSTASH(sv));
6067 switch (SvTYPE(sv)) {
6081 case SVt_PVLV: return "LVALUE";
6082 case SVt_PVAV: return "ARRAY";
6083 case SVt_PVHV: return "HASH";
6084 case SVt_PVCV: return "CODE";
6085 case SVt_PVGV: return "GLOB";
6086 case SVt_PVFM: return "FORMAT";
6087 case SVt_PVIO: return "IO";
6088 default: return "UNKNOWN";
6094 =for apidoc sv_isobject
6096 Returns a boolean indicating whether the SV is an RV pointing to a blessed
6097 object. If the SV is not an RV, or if the object is not blessed, then this
6104 Perl_sv_isobject(pTHX_ SV *sv)
6121 Returns a boolean indicating whether the SV is blessed into the specified
6122 class. This does not check for subtypes; use C<sv_derived_from> to verify
6123 an inheritance relationship.
6129 Perl_sv_isa(pTHX_ SV *sv, const char *name)
6141 return strEQ(HvNAME(SvSTASH(sv)), name);
6147 Creates a new SV for the RV, C<rv>, to point to. If C<rv> is not an RV then
6148 it will be upgraded to one. If C<classname> is non-null then the new SV will
6149 be blessed in the specified package. The new SV is returned and its
6150 reference count is 1.
6156 Perl_newSVrv(pTHX_ SV *rv, const char *classname)
6162 SV_CHECK_THINKFIRST(rv);
6165 if (SvTYPE(rv) >= SVt_PVMG) {
6166 U32 refcnt = SvREFCNT(rv);
6170 SvREFCNT(rv) = refcnt;
6173 if (SvTYPE(rv) < SVt_RV)
6174 sv_upgrade(rv, SVt_RV);
6175 else if (SvTYPE(rv) > SVt_RV) {
6176 (void)SvOOK_off(rv);
6177 if (SvPVX(rv) && SvLEN(rv))
6178 Safefree(SvPVX(rv));
6188 HV* stash = gv_stashpv(classname, TRUE);
6189 (void)sv_bless(rv, stash);
6195 =for apidoc sv_setref_pv
6197 Copies a pointer into a new SV, optionally blessing the SV. The C<rv>
6198 argument will be upgraded to an RV. That RV will be modified to point to
6199 the new SV. If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
6200 into the SV. The C<classname> argument indicates the package for the
6201 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
6202 will be returned and will have a reference count of 1.
6204 Do not use with other Perl types such as HV, AV, SV, CV, because those
6205 objects will become corrupted by the pointer copy process.
6207 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
6213 Perl_sv_setref_pv(pTHX_ SV *rv, const char *classname, void *pv)
6216 sv_setsv(rv, &PL_sv_undef);
6220 sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
6225 =for apidoc sv_setref_iv
6227 Copies an integer into a new SV, optionally blessing the SV. The C<rv>
6228 argument will be upgraded to an RV. That RV will be modified to point to
6229 the new SV. The C<classname> argument indicates the package for the
6230 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
6231 will be returned and will have a reference count of 1.
6237 Perl_sv_setref_iv(pTHX_ SV *rv, const char *classname, IV iv)
6239 sv_setiv(newSVrv(rv,classname), iv);
6244 =for apidoc sv_setref_nv
6246 Copies a double into a new SV, optionally blessing the SV. The C<rv>
6247 argument will be upgraded to an RV. That RV will be modified to point to
6248 the new SV. The C<classname> argument indicates the package for the
6249 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
6250 will be returned and will have a reference count of 1.
6256 Perl_sv_setref_nv(pTHX_ SV *rv, const char *classname, NV nv)
6258 sv_setnv(newSVrv(rv,classname), nv);
6263 =for apidoc sv_setref_pvn
6265 Copies a string into a new SV, optionally blessing the SV. The length of the
6266 string must be specified with C<n>. The C<rv> argument will be upgraded to
6267 an RV. That RV will be modified to point to the new SV. The C<classname>
6268 argument indicates the package for the blessing. Set C<classname> to
6269 C<Nullch> to avoid the blessing. The new SV will be returned and will have
6270 a reference count of 1.
6272 Note that C<sv_setref_pv> copies the pointer while this copies the string.
6278 Perl_sv_setref_pvn(pTHX_ SV *rv, const char *classname, char *pv, STRLEN n)
6280 sv_setpvn(newSVrv(rv,classname), pv, n);
6285 =for apidoc sv_bless
6287 Blesses an SV into a specified package. The SV must be an RV. The package
6288 must be designated by its stash (see C<gv_stashpv()>). The reference count
6289 of the SV is unaffected.
6295 Perl_sv_bless(pTHX_ SV *sv, HV *stash)
6299 Perl_croak(aTHX_ "Can't bless non-reference value");
6301 if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
6302 if (SvREADONLY(tmpRef))
6303 Perl_croak(aTHX_ PL_no_modify);
6304 if (SvOBJECT(tmpRef)) {
6305 if (SvTYPE(tmpRef) != SVt_PVIO)
6307 SvREFCNT_dec(SvSTASH(tmpRef));
6310 SvOBJECT_on(tmpRef);
6311 if (SvTYPE(tmpRef) != SVt_PVIO)
6313 (void)SvUPGRADE(tmpRef, SVt_PVMG);
6314 SvSTASH(tmpRef) = (HV*)SvREFCNT_inc(stash);
6325 S_sv_unglob(pTHX_ SV *sv)
6329 assert(SvTYPE(sv) == SVt_PVGV);
6334 SvREFCNT_dec(GvSTASH(sv));
6335 GvSTASH(sv) = Nullhv;
6337 sv_unmagic(sv, '*');
6338 Safefree(GvNAME(sv));
6341 /* need to keep SvANY(sv) in the right arena */
6342 xpvmg = new_XPVMG();
6343 StructCopy(SvANY(sv), xpvmg, XPVMG);
6344 del_XPVGV(SvANY(sv));
6347 SvFLAGS(sv) &= ~SVTYPEMASK;
6348 SvFLAGS(sv) |= SVt_PVMG;
6352 =for apidoc sv_unref_flags
6354 Unsets the RV status of the SV, and decrements the reference count of
6355 whatever was being referenced by the RV. This can almost be thought of
6356 as a reversal of C<newSVrv>. The C<cflags> argument can contain
6357 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
6358 (otherwise the decrementing is conditional on the reference count being
6359 different from one or the reference being a readonly SV).
6366 Perl_sv_unref_flags(pTHX_ SV *sv, U32 flags)
6370 if (SvWEAKREF(sv)) {
6378 if (SvREFCNT(rv) != 1 || SvREADONLY(rv) || flags) /* SV_IMMEDIATE_UNREF */
6380 else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
6381 sv_2mortal(rv); /* Schedule for freeing later */
6385 =for apidoc sv_unref
6387 Unsets the RV status of the SV, and decrements the reference count of
6388 whatever was being referenced by the RV. This can almost be thought of
6389 as a reversal of C<newSVrv>. This is C<sv_unref_flags> with the C<flag>
6390 being zero. See C<SvROK_off>.
6396 Perl_sv_unref(pTHX_ SV *sv)
6398 sv_unref_flags(sv, 0);
6402 Perl_sv_taint(pTHX_ SV *sv)
6404 sv_magic((sv), Nullsv, 't', Nullch, 0);
6408 Perl_sv_untaint(pTHX_ SV *sv)
6410 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
6411 MAGIC *mg = mg_find(sv, 't');
6418 Perl_sv_tainted(pTHX_ SV *sv)
6420 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
6421 MAGIC *mg = mg_find(sv, 't');
6422 if (mg && ((mg->mg_len & 1) || ((mg->mg_len & 2) && mg->mg_obj == sv)))
6429 =for apidoc sv_setpviv
6431 Copies an integer into the given SV, also updating its string value.
6432 Does not handle 'set' magic. See C<sv_setpviv_mg>.
6438 Perl_sv_setpviv(pTHX_ SV *sv, IV iv)
6440 char buf[TYPE_CHARS(UV)];
6442 char *ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
6444 sv_setpvn(sv, ptr, ebuf - ptr);
6449 =for apidoc sv_setpviv_mg
6451 Like C<sv_setpviv>, but also handles 'set' magic.
6457 Perl_sv_setpviv_mg(pTHX_ SV *sv, IV iv)
6459 char buf[TYPE_CHARS(UV)];
6461 char *ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
6463 sv_setpvn(sv, ptr, ebuf - ptr);
6467 #if defined(PERL_IMPLICIT_CONTEXT)
6469 Perl_sv_setpvf_nocontext(SV *sv, const char* pat, ...)
6473 va_start(args, pat);
6474 sv_vsetpvf(sv, pat, &args);
6480 Perl_sv_setpvf_mg_nocontext(SV *sv, const char* pat, ...)
6484 va_start(args, pat);
6485 sv_vsetpvf_mg(sv, pat, &args);
6491 =for apidoc sv_setpvf
6493 Processes its arguments like C<sprintf> and sets an SV to the formatted
6494 output. Does not handle 'set' magic. See C<sv_setpvf_mg>.
6500 Perl_sv_setpvf(pTHX_ SV *sv, const char* pat, ...)
6503 va_start(args, pat);
6504 sv_vsetpvf(sv, pat, &args);
6509 Perl_sv_vsetpvf(pTHX_ SV *sv, const char* pat, va_list* args)
6511 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6515 =for apidoc sv_setpvf_mg
6517 Like C<sv_setpvf>, but also handles 'set' magic.
6523 Perl_sv_setpvf_mg(pTHX_ SV *sv, const char* pat, ...)
6526 va_start(args, pat);
6527 sv_vsetpvf_mg(sv, pat, &args);
6532 Perl_sv_vsetpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
6534 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6538 #if defined(PERL_IMPLICIT_CONTEXT)
6540 Perl_sv_catpvf_nocontext(SV *sv, const char* pat, ...)
6544 va_start(args, pat);
6545 sv_vcatpvf(sv, pat, &args);
6550 Perl_sv_catpvf_mg_nocontext(SV *sv, const char* pat, ...)
6554 va_start(args, pat);
6555 sv_vcatpvf_mg(sv, pat, &args);
6561 =for apidoc sv_catpvf
6563 Processes its arguments like C<sprintf> and appends the formatted output
6564 to an SV. Handles 'get' magic, but not 'set' magic. C<SvSETMAGIC()> must
6565 typically be called after calling this function to handle 'set' magic.
6571 Perl_sv_catpvf(pTHX_ SV *sv, const char* pat, ...)
6574 va_start(args, pat);
6575 sv_vcatpvf(sv, pat, &args);
6580 Perl_sv_vcatpvf(pTHX_ SV *sv, const char* pat, va_list* args)
6582 sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6586 =for apidoc sv_catpvf_mg
6588 Like C<sv_catpvf>, but also handles 'set' magic.
6594 Perl_sv_catpvf_mg(pTHX_ SV *sv, const char* pat, ...)
6597 va_start(args, pat);
6598 sv_vcatpvf_mg(sv, pat, &args);
6603 Perl_sv_vcatpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
6605 sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6610 =for apidoc sv_vsetpvfn
6612 Works like C<vcatpvfn> but copies the text into the SV instead of
6619 Perl_sv_vsetpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
6621 sv_setpvn(sv, "", 0);
6622 sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, maybe_tainted);
6626 =for apidoc sv_vcatpvfn
6628 Processes its arguments like C<vsprintf> and appends the formatted output
6629 to an SV. Uses an array of SVs if the C style variable argument list is
6630 missing (NULL). When running with taint checks enabled, indicates via
6631 C<maybe_tainted> if results are untrustworthy (often due to the use of
6638 Perl_sv_vcatpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
6645 static char nullstr[] = "(null)";
6648 /* no matter what, this is a string now */
6649 (void)SvPV_force(sv, origlen);
6651 /* special-case "", "%s", and "%_" */
6654 if (patlen == 2 && pat[0] == '%') {
6658 char *s = va_arg(*args, char*);
6659 sv_catpv(sv, s ? s : nullstr);
6661 else if (svix < svmax) {
6662 sv_catsv(sv, *svargs);
6663 if (DO_UTF8(*svargs))
6669 argsv = va_arg(*args, SV*);
6670 sv_catsv(sv, argsv);
6675 /* See comment on '_' below */
6680 patend = (char*)pat + patlen;
6681 for (p = (char*)pat; p < patend; p = q) {
6684 bool vectorize = FALSE;
6691 bool has_precis = FALSE;
6693 bool is_utf = FALSE;
6696 U8 utf8buf[UTF8_MAXLEN+1];
6697 STRLEN esignlen = 0;
6699 char *eptr = Nullch;
6701 /* Times 4: a decimal digit takes more than 3 binary digits.
6702 * NV_DIG: mantissa takes than many decimal digits.
6703 * Plus 32: Playing safe. */
6704 char ebuf[IV_DIG * 4 + NV_DIG + 32];
6705 /* large enough for "%#.#f" --chip */
6706 /* what about long double NVs? --jhi */
6709 U8 *vecstr = Null(U8*);
6721 STRLEN dotstrlen = 1;
6722 I32 epix = 0; /* explicit parameter index */
6723 I32 ewix = 0; /* explicit width index */
6724 bool asterisk = FALSE;
6726 for (q = p; q < patend && *q != '%'; ++q) ;
6728 sv_catpvn(sv, p, q - p);
6757 case '*': /* printf("%*vX",":",$ipv6addr) */
6762 vecsv = va_arg(*args, SV*);
6763 else if (svix < svmax)
6764 vecsv = svargs[svix++];
6767 dotstr = SvPVx(vecsv,dotstrlen);
6795 case '1': case '2': case '3':
6796 case '4': case '5': case '6':
6797 case '7': case '8': case '9':
6800 width = width * 10 + (*q++ - '0');
6802 if (asterisk && ewix == 0) {
6807 } else if (epix == 0) {
6819 i = va_arg(*args, int);
6821 i = (ewix ? ewix <= svmax : svix < svmax) ?
6822 SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
6824 width = (i < 0) ? -i : i;
6833 i = va_arg(*args, int);
6835 i = (ewix ? ewix <= svmax : svix < svmax)
6836 ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
6837 precis = (i < 0) ? 0 : i;
6843 precis = precis * 10 + (*q++ - '0');
6850 vecsv = va_arg(*args, SV*);
6851 vecstr = (U8*)SvPVx(vecsv,veclen);
6852 utf = DO_UTF8(vecsv);
6854 else if (epix ? epix <= svmax : svix < svmax) {
6855 vecsv = svargs[epix ? epix-1 : svix++];
6856 vecstr = (U8*)SvPVx(vecsv,veclen);
6857 utf = DO_UTF8(vecsv);
6868 #if defined(HAS_QUAD) || (defined(HAS_LONG_DOUBLE) && defined(USE_LONG_DOUBLE))
6879 #if defined(HAS_QUAD) || (defined(HAS_LONG_DOUBLE) && defined(USE_LONG_DOUBLE))
6880 if (*(q + 1) == 'l') { /* lld, llf */
6907 uv = va_arg(*args, int);
6909 uv = (epix ? epix <= svmax : svix < svmax) ?
6910 SvIVx(svargs[epix ? epix-1 : svix++]) : 0;
6911 if ((uv > 255 || (uv > 127 && SvUTF8(sv))) && !IN_BYTE) {
6912 eptr = (char*)utf8buf;
6913 elen = uv_to_utf8((U8*)eptr, uv) - utf8buf;
6925 eptr = va_arg(*args, char*);
6927 #ifdef MACOS_TRADITIONAL
6928 /* On MacOS, %#s format is used for Pascal strings */
6933 elen = strlen(eptr);
6936 elen = sizeof nullstr - 1;
6939 else if (epix ? epix <= svmax : svix < svmax) {
6940 argsv = svargs[epix ? epix-1 : svix++];
6941 eptr = SvPVx(argsv, elen);
6942 if (DO_UTF8(argsv)) {
6943 if (has_precis && precis < elen) {
6945 sv_pos_u2b(argsv, &p, 0); /* sticks at end */
6948 if (width) { /* fudge width (can't fudge elen) */
6949 width += elen - sv_len_utf8(argsv);
6958 * The "%_" hack might have to be changed someday,
6959 * if ISO or ANSI decide to use '_' for something.
6960 * So we keep it hidden from users' code.
6964 argsv = va_arg(*args,SV*);
6965 eptr = SvPVx(argsv, elen);
6971 if (has_precis && elen > precis)
6981 uv = PTR2UV(va_arg(*args, void*));
6983 uv = (epix ? epix <= svmax : svix < svmax) ?
6984 PTR2UV(svargs[epix ? epix-1 : svix++]) : 0;
7004 iv = (IV)utf8_to_uv(vecstr, veclen, &ulen, 0);
7014 case 'h': iv = (short)va_arg(*args, int); break;
7015 default: iv = va_arg(*args, int); break;
7016 case 'l': iv = va_arg(*args, long); break;
7017 case 'V': iv = va_arg(*args, IV); break;
7019 case 'q': iv = va_arg(*args, Quad_t); break;
7024 iv = (epix ? epix <= svmax : svix < svmax) ?
7025 SvIVx(svargs[epix ? epix-1 : svix++]) : 0;
7027 case 'h': iv = (short)iv; break;
7029 case 'l': iv = (long)iv; break;
7032 case 'q': iv = (Quad_t)iv; break;
7039 esignbuf[esignlen++] = plus;
7043 esignbuf[esignlen++] = '-';
7087 uv = utf8_to_uv(vecstr, veclen, &ulen, 0);
7097 case 'h': uv = (unsigned short)va_arg(*args, unsigned); break;
7098 default: uv = va_arg(*args, unsigned); break;
7099 case 'l': uv = va_arg(*args, unsigned long); break;
7100 case 'V': uv = va_arg(*args, UV); break;
7102 case 'q': uv = va_arg(*args, Quad_t); break;
7107 uv = (epix ? epix <= svmax : svix < svmax) ?
7108 SvUVx(svargs[epix ? epix-1 : svix++]) : 0;
7110 case 'h': uv = (unsigned short)uv; break;
7112 case 'l': uv = (unsigned long)uv; break;
7115 case 'q': uv = (Quad_t)uv; break;
7121 eptr = ebuf + sizeof ebuf;
7127 p = (char*)((c == 'X')
7128 ? "0123456789ABCDEF" : "0123456789abcdef");
7134 esignbuf[esignlen++] = '0';
7135 esignbuf[esignlen++] = c; /* 'x' or 'X' */
7141 *--eptr = '0' + dig;
7143 if (alt && *eptr != '0')
7149 *--eptr = '0' + dig;
7152 esignbuf[esignlen++] = '0';
7153 esignbuf[esignlen++] = 'b';
7156 default: /* it had better be ten or less */
7157 #if defined(PERL_Y2KWARN)
7158 if (ckWARN(WARN_Y2K)) {
7160 char *s = SvPV(sv,n);
7161 if (n >= 2 && s[n-2] == '1' && s[n-1] == '9'
7162 && (n == 2 || !isDIGIT(s[n-3])))
7164 Perl_warner(aTHX_ WARN_Y2K,
7165 "Possible Y2K bug: %%%c %s",
7166 c, "format string following '19'");
7172 *--eptr = '0' + dig;
7173 } while (uv /= base);
7176 elen = (ebuf + sizeof ebuf) - eptr;
7179 zeros = precis - elen;
7180 else if (precis == 0 && elen == 1 && *eptr == '0')
7185 /* FLOATING POINT */
7188 c = 'f'; /* maybe %F isn't supported here */
7194 /* This is evil, but floating point is even more evil */
7198 nv = va_arg(*args, NV);
7200 nv = (epix ? epix <= svmax : svix < svmax) ?
7201 SvNVx(svargs[epix ? epix-1 : svix++]) : 0.0;
7204 if (c != 'e' && c != 'E') {
7206 (void)Perl_frexp(nv, &i);
7207 if (i == PERL_INT_MIN)
7208 Perl_die(aTHX_ "panic: frexp");
7210 need = BIT_DIGITS(i);
7212 need += has_precis ? precis : 6; /* known default */
7216 need += 20; /* fudge factor */
7217 if (PL_efloatsize < need) {
7218 Safefree(PL_efloatbuf);
7219 PL_efloatsize = need + 20; /* more fudge */
7220 New(906, PL_efloatbuf, PL_efloatsize, char);
7221 PL_efloatbuf[0] = '\0';
7224 eptr = ebuf + sizeof ebuf;
7227 #if defined(USE_LONG_DOUBLE) && defined(PERL_PRIfldbl)
7229 /* Copy the one or more characters in a long double
7230 * format before the 'base' ([efgEFG]) character to
7231 * the format string. */
7232 static char const prifldbl[] = PERL_PRIfldbl;
7233 char const *p = prifldbl + sizeof(prifldbl) - 3;
7234 while (p >= prifldbl) { *--eptr = *p--; }
7239 do { *--eptr = '0' + (base % 10); } while (base /= 10);
7244 do { *--eptr = '0' + (base % 10); } while (base /= 10);
7256 /* No taint. Otherwise we are in the strange situation
7257 * where printf() taints but print($float) doesn't.
7259 (void)sprintf(PL_efloatbuf, eptr, nv);
7261 eptr = PL_efloatbuf;
7262 elen = strlen(PL_efloatbuf);
7269 i = SvCUR(sv) - origlen;
7272 case 'h': *(va_arg(*args, short*)) = i; break;
7273 default: *(va_arg(*args, int*)) = i; break;
7274 case 'l': *(va_arg(*args, long*)) = i; break;
7275 case 'V': *(va_arg(*args, IV*)) = i; break;
7277 case 'q': *(va_arg(*args, Quad_t*)) = i; break;
7281 else if (epix ? epix <= svmax : svix < svmax)
7282 sv_setuv_mg(svargs[epix ? epix-1 : svix++], (UV)i);
7283 continue; /* not "break" */
7290 if (!args && ckWARN(WARN_PRINTF) &&
7291 (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)) {
7292 SV *msg = sv_newmortal();
7293 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %s: ",
7294 (PL_op->op_type == OP_PRTF) ? "printf" : "sprintf");
7297 Perl_sv_catpvf(aTHX_ msg,
7298 "\"%%%c\"", c & 0xFF);
7300 Perl_sv_catpvf(aTHX_ msg,
7301 "\"%%\\%03"UVof"\"",
7304 sv_catpv(msg, "end of string");
7305 Perl_warner(aTHX_ WARN_PRINTF, "%"SVf, msg); /* yes, this is reentrant */
7308 /* output mangled stuff ... */
7314 /* ... right here, because formatting flags should not apply */
7315 SvGROW(sv, SvCUR(sv) + elen + 1);
7317 memcpy(p, eptr, elen);
7320 SvCUR(sv) = p - SvPVX(sv);
7321 continue; /* not "break" */
7324 have = esignlen + zeros + elen;
7325 need = (have > width ? have : width);
7328 SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
7330 if (esignlen && fill == '0') {
7331 for (i = 0; i < esignlen; i++)
7335 memset(p, fill, gap);
7338 if (esignlen && fill != '0') {
7339 for (i = 0; i < esignlen; i++)
7343 for (i = zeros; i; i--)
7347 memcpy(p, eptr, elen);
7351 memset(p, ' ', gap);
7356 memcpy(p, dotstr, dotstrlen);
7360 vectorize = FALSE; /* done iterating over vecstr */
7365 SvCUR(sv) = p - SvPVX(sv);
7373 #if defined(USE_ITHREADS)
7375 #if defined(USE_THREADS)
7376 # include "error: USE_THREADS and USE_ITHREADS are incompatible"
7379 #ifndef GpREFCNT_inc
7380 # define GpREFCNT_inc(gp) ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
7384 #define sv_dup_inc(s) SvREFCNT_inc(sv_dup(s))
7385 #define av_dup(s) (AV*)sv_dup((SV*)s)
7386 #define av_dup_inc(s) (AV*)SvREFCNT_inc(sv_dup((SV*)s))
7387 #define hv_dup(s) (HV*)sv_dup((SV*)s)
7388 #define hv_dup_inc(s) (HV*)SvREFCNT_inc(sv_dup((SV*)s))
7389 #define cv_dup(s) (CV*)sv_dup((SV*)s)
7390 #define cv_dup_inc(s) (CV*)SvREFCNT_inc(sv_dup((SV*)s))
7391 #define io_dup(s) (IO*)sv_dup((SV*)s)
7392 #define io_dup_inc(s) (IO*)SvREFCNT_inc(sv_dup((SV*)s))
7393 #define gv_dup(s) (GV*)sv_dup((SV*)s)
7394 #define gv_dup_inc(s) (GV*)SvREFCNT_inc(sv_dup((SV*)s))
7395 #define SAVEPV(p) (p ? savepv(p) : Nullch)
7396 #define SAVEPVN(p,n) (p ? savepvn(p,n) : Nullch)
7399 Perl_re_dup(pTHX_ REGEXP *r)
7401 /* XXX fix when pmop->op_pmregexp becomes shared */
7402 return ReREFCNT_inc(r);
7406 Perl_fp_dup(pTHX_ PerlIO *fp, char type)
7410 return (PerlIO*)NULL;
7412 /* look for it in the table first */
7413 ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
7417 /* create anew and remember what it is */
7418 ret = PerlIO_fdupopen(aTHX_ fp);
7419 ptr_table_store(PL_ptr_table, fp, ret);
7424 Perl_dirp_dup(pTHX_ DIR *dp)
7433 Perl_gp_dup(pTHX_ GP *gp)
7438 /* look for it in the table first */
7439 ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
7443 /* create anew and remember what it is */
7444 Newz(0, ret, 1, GP);
7445 ptr_table_store(PL_ptr_table, gp, ret);
7448 ret->gp_refcnt = 0; /* must be before any other dups! */
7449 ret->gp_sv = sv_dup_inc(gp->gp_sv);
7450 ret->gp_io = io_dup_inc(gp->gp_io);
7451 ret->gp_form = cv_dup_inc(gp->gp_form);
7452 ret->gp_av = av_dup_inc(gp->gp_av);
7453 ret->gp_hv = hv_dup_inc(gp->gp_hv);
7454 ret->gp_egv = gv_dup(gp->gp_egv); /* GvEGV is not refcounted */
7455 ret->gp_cv = cv_dup_inc(gp->gp_cv);
7456 ret->gp_cvgen = gp->gp_cvgen;
7457 ret->gp_flags = gp->gp_flags;
7458 ret->gp_line = gp->gp_line;
7459 ret->gp_file = gp->gp_file; /* points to COP.cop_file */
7464 Perl_mg_dup(pTHX_ MAGIC *mg)
7466 MAGIC *mgret = (MAGIC*)NULL;
7469 return (MAGIC*)NULL;
7470 /* look for it in the table first */
7471 mgret = (MAGIC*)ptr_table_fetch(PL_ptr_table, mg);
7475 for (; mg; mg = mg->mg_moremagic) {
7477 Newz(0, nmg, 1, MAGIC);
7481 mgprev->mg_moremagic = nmg;
7482 nmg->mg_virtual = mg->mg_virtual; /* XXX copy dynamic vtable? */
7483 nmg->mg_private = mg->mg_private;
7484 nmg->mg_type = mg->mg_type;
7485 nmg->mg_flags = mg->mg_flags;
7486 if (mg->mg_type == 'r') {
7487 nmg->mg_obj = (SV*)re_dup((REGEXP*)mg->mg_obj);
7490 nmg->mg_obj = (mg->mg_flags & MGf_REFCOUNTED)
7491 ? sv_dup_inc(mg->mg_obj)
7492 : sv_dup(mg->mg_obj);
7494 nmg->mg_len = mg->mg_len;
7495 nmg->mg_ptr = mg->mg_ptr; /* XXX random ptr? */
7496 if (mg->mg_ptr && mg->mg_type != 'g') {
7497 if (mg->mg_len >= 0) {
7498 nmg->mg_ptr = SAVEPVN(mg->mg_ptr, mg->mg_len);
7499 if (mg->mg_type == 'c' && AMT_AMAGIC((AMT*)mg->mg_ptr)) {
7500 AMT *amtp = (AMT*)mg->mg_ptr;
7501 AMT *namtp = (AMT*)nmg->mg_ptr;
7503 for (i = 1; i < NofAMmeth; i++) {
7504 namtp->table[i] = cv_dup_inc(amtp->table[i]);
7508 else if (mg->mg_len == HEf_SVKEY)
7509 nmg->mg_ptr = (char*)sv_dup_inc((SV*)mg->mg_ptr);
7517 Perl_ptr_table_new(pTHX)
7520 Newz(0, tbl, 1, PTR_TBL_t);
7523 Newz(0, tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
7528 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *tbl, void *sv)
7530 PTR_TBL_ENT_t *tblent;
7531 UV hash = PTR2UV(sv);
7533 tblent = tbl->tbl_ary[hash & tbl->tbl_max];
7534 for (; tblent; tblent = tblent->next) {
7535 if (tblent->oldval == sv)
7536 return tblent->newval;
7542 Perl_ptr_table_store(pTHX_ PTR_TBL_t *tbl, void *oldv, void *newv)
7544 PTR_TBL_ENT_t *tblent, **otblent;
7545 /* XXX this may be pessimal on platforms where pointers aren't good
7546 * hash values e.g. if they grow faster in the most significant
7548 UV hash = PTR2UV(oldv);
7552 otblent = &tbl->tbl_ary[hash & tbl->tbl_max];
7553 for (tblent = *otblent; tblent; i=0, tblent = tblent->next) {
7554 if (tblent->oldval == oldv) {
7555 tblent->newval = newv;
7560 Newz(0, tblent, 1, PTR_TBL_ENT_t);
7561 tblent->oldval = oldv;
7562 tblent->newval = newv;
7563 tblent->next = *otblent;
7566 if (i && tbl->tbl_items > tbl->tbl_max)
7567 ptr_table_split(tbl);
7571 Perl_ptr_table_split(pTHX_ PTR_TBL_t *tbl)
7573 PTR_TBL_ENT_t **ary = tbl->tbl_ary;
7574 UV oldsize = tbl->tbl_max + 1;
7575 UV newsize = oldsize * 2;
7578 Renew(ary, newsize, PTR_TBL_ENT_t*);
7579 Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
7580 tbl->tbl_max = --newsize;
7582 for (i=0; i < oldsize; i++, ary++) {
7583 PTR_TBL_ENT_t **curentp, **entp, *ent;
7586 curentp = ary + oldsize;
7587 for (entp = ary, ent = *ary; ent; ent = *entp) {
7588 if ((newsize & PTR2UV(ent->oldval)) != i) {
7590 ent->next = *curentp;
7605 Perl_sv_dup(pTHX_ SV *sstr)
7609 if (!sstr || SvTYPE(sstr) == SVTYPEMASK)
7611 /* look for it in the table first */
7612 dstr = (SV*)ptr_table_fetch(PL_ptr_table, sstr);
7616 /* create anew and remember what it is */
7618 ptr_table_store(PL_ptr_table, sstr, dstr);
7621 SvFLAGS(dstr) = SvFLAGS(sstr);
7622 SvFLAGS(dstr) &= ~SVf_OOK; /* don't propagate OOK hack */
7623 SvREFCNT(dstr) = 0; /* must be before any other dups! */
7626 if (SvANY(sstr) && PL_watch_pvx && SvPVX(sstr) == PL_watch_pvx)
7627 PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
7628 PL_watch_pvx, SvPVX(sstr));
7631 switch (SvTYPE(sstr)) {
7636 SvANY(dstr) = new_XIV();
7637 SvIVX(dstr) = SvIVX(sstr);
7640 SvANY(dstr) = new_XNV();
7641 SvNVX(dstr) = SvNVX(sstr);
7644 SvANY(dstr) = new_XRV();
7645 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7648 SvANY(dstr) = new_XPV();
7649 SvCUR(dstr) = SvCUR(sstr);
7650 SvLEN(dstr) = SvLEN(sstr);
7652 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7653 else if (SvPVX(sstr) && SvLEN(sstr))
7654 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7656 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7659 SvANY(dstr) = new_XPVIV();
7660 SvCUR(dstr) = SvCUR(sstr);
7661 SvLEN(dstr) = SvLEN(sstr);
7662 SvIVX(dstr) = SvIVX(sstr);
7664 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7665 else if (SvPVX(sstr) && SvLEN(sstr))
7666 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7668 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7671 SvANY(dstr) = new_XPVNV();
7672 SvCUR(dstr) = SvCUR(sstr);
7673 SvLEN(dstr) = SvLEN(sstr);
7674 SvIVX(dstr) = SvIVX(sstr);
7675 SvNVX(dstr) = SvNVX(sstr);
7677 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7678 else if (SvPVX(sstr) && SvLEN(sstr))
7679 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7681 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7684 SvANY(dstr) = new_XPVMG();
7685 SvCUR(dstr) = SvCUR(sstr);
7686 SvLEN(dstr) = SvLEN(sstr);
7687 SvIVX(dstr) = SvIVX(sstr);
7688 SvNVX(dstr) = SvNVX(sstr);
7689 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7690 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7692 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7693 else if (SvPVX(sstr) && SvLEN(sstr))
7694 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7696 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7699 SvANY(dstr) = new_XPVBM();
7700 SvCUR(dstr) = SvCUR(sstr);
7701 SvLEN(dstr) = SvLEN(sstr);
7702 SvIVX(dstr) = SvIVX(sstr);
7703 SvNVX(dstr) = SvNVX(sstr);
7704 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7705 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7707 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7708 else if (SvPVX(sstr) && SvLEN(sstr))
7709 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7711 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7712 BmRARE(dstr) = BmRARE(sstr);
7713 BmUSEFUL(dstr) = BmUSEFUL(sstr);
7714 BmPREVIOUS(dstr)= BmPREVIOUS(sstr);
7717 SvANY(dstr) = new_XPVLV();
7718 SvCUR(dstr) = SvCUR(sstr);
7719 SvLEN(dstr) = SvLEN(sstr);
7720 SvIVX(dstr) = SvIVX(sstr);
7721 SvNVX(dstr) = SvNVX(sstr);
7722 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7723 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7725 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7726 else if (SvPVX(sstr) && SvLEN(sstr))
7727 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7729 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7730 LvTARGOFF(dstr) = LvTARGOFF(sstr); /* XXX sometimes holds PMOP* when DEBUGGING */
7731 LvTARGLEN(dstr) = LvTARGLEN(sstr);
7732 LvTARG(dstr) = sv_dup_inc(LvTARG(sstr));
7733 LvTYPE(dstr) = LvTYPE(sstr);
7736 SvANY(dstr) = new_XPVGV();
7737 SvCUR(dstr) = SvCUR(sstr);
7738 SvLEN(dstr) = SvLEN(sstr);
7739 SvIVX(dstr) = SvIVX(sstr);
7740 SvNVX(dstr) = SvNVX(sstr);
7741 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7742 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7744 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7745 else if (SvPVX(sstr) && SvLEN(sstr))
7746 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7748 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7749 GvNAMELEN(dstr) = GvNAMELEN(sstr);
7750 GvNAME(dstr) = SAVEPVN(GvNAME(sstr), GvNAMELEN(sstr));
7751 GvSTASH(dstr) = hv_dup_inc(GvSTASH(sstr));
7752 GvFLAGS(dstr) = GvFLAGS(sstr);
7753 GvGP(dstr) = gp_dup(GvGP(sstr));
7754 (void)GpREFCNT_inc(GvGP(dstr));
7757 SvANY(dstr) = new_XPVIO();
7758 SvCUR(dstr) = SvCUR(sstr);
7759 SvLEN(dstr) = SvLEN(sstr);
7760 SvIVX(dstr) = SvIVX(sstr);
7761 SvNVX(dstr) = SvNVX(sstr);
7762 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7763 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7765 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7766 else if (SvPVX(sstr) && SvLEN(sstr))
7767 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7769 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7770 IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(sstr));
7771 if (IoOFP(sstr) == IoIFP(sstr))
7772 IoOFP(dstr) = IoIFP(dstr);
7774 IoOFP(dstr) = fp_dup(IoOFP(sstr), IoTYPE(sstr));
7775 /* PL_rsfp_filters entries have fake IoDIRP() */
7776 if (IoDIRP(sstr) && !(IoFLAGS(sstr) & IOf_FAKE_DIRP))
7777 IoDIRP(dstr) = dirp_dup(IoDIRP(sstr));
7779 IoDIRP(dstr) = IoDIRP(sstr);
7780 IoLINES(dstr) = IoLINES(sstr);
7781 IoPAGE(dstr) = IoPAGE(sstr);
7782 IoPAGE_LEN(dstr) = IoPAGE_LEN(sstr);
7783 IoLINES_LEFT(dstr) = IoLINES_LEFT(sstr);
7784 IoTOP_NAME(dstr) = SAVEPV(IoTOP_NAME(sstr));
7785 IoTOP_GV(dstr) = gv_dup(IoTOP_GV(sstr));
7786 IoFMT_NAME(dstr) = SAVEPV(IoFMT_NAME(sstr));
7787 IoFMT_GV(dstr) = gv_dup(IoFMT_GV(sstr));
7788 IoBOTTOM_NAME(dstr) = SAVEPV(IoBOTTOM_NAME(sstr));
7789 IoBOTTOM_GV(dstr) = gv_dup(IoBOTTOM_GV(sstr));
7790 IoSUBPROCESS(dstr) = IoSUBPROCESS(sstr);
7791 IoTYPE(dstr) = IoTYPE(sstr);
7792 IoFLAGS(dstr) = IoFLAGS(sstr);
7795 SvANY(dstr) = new_XPVAV();
7796 SvCUR(dstr) = SvCUR(sstr);
7797 SvLEN(dstr) = SvLEN(sstr);
7798 SvIVX(dstr) = SvIVX(sstr);
7799 SvNVX(dstr) = SvNVX(sstr);
7800 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7801 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7802 AvARYLEN((AV*)dstr) = sv_dup_inc(AvARYLEN((AV*)sstr));
7803 AvFLAGS((AV*)dstr) = AvFLAGS((AV*)sstr);
7804 if (AvARRAY((AV*)sstr)) {
7805 SV **dst_ary, **src_ary;
7806 SSize_t items = AvFILLp((AV*)sstr) + 1;
7808 src_ary = AvARRAY((AV*)sstr);
7809 Newz(0, dst_ary, AvMAX((AV*)sstr)+1, SV*);
7810 ptr_table_store(PL_ptr_table, src_ary, dst_ary);
7811 SvPVX(dstr) = (char*)dst_ary;
7812 AvALLOC((AV*)dstr) = dst_ary;
7813 if (AvREAL((AV*)sstr)) {
7815 *dst_ary++ = sv_dup_inc(*src_ary++);
7819 *dst_ary++ = sv_dup(*src_ary++);
7821 items = AvMAX((AV*)sstr) - AvFILLp((AV*)sstr);
7822 while (items-- > 0) {
7823 *dst_ary++ = &PL_sv_undef;
7827 SvPVX(dstr) = Nullch;
7828 AvALLOC((AV*)dstr) = (SV**)NULL;
7832 SvANY(dstr) = new_XPVHV();
7833 SvCUR(dstr) = SvCUR(sstr);
7834 SvLEN(dstr) = SvLEN(sstr);
7835 SvIVX(dstr) = SvIVX(sstr);
7836 SvNVX(dstr) = SvNVX(sstr);
7837 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7838 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7839 HvRITER((HV*)dstr) = HvRITER((HV*)sstr);
7840 if (HvARRAY((HV*)sstr)) {
7842 XPVHV *dxhv = (XPVHV*)SvANY(dstr);
7843 XPVHV *sxhv = (XPVHV*)SvANY(sstr);
7844 Newz(0, dxhv->xhv_array,
7845 PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1), char);
7846 while (i <= sxhv->xhv_max) {
7847 ((HE**)dxhv->xhv_array)[i] = he_dup(((HE**)sxhv->xhv_array)[i],
7848 !!HvSHAREKEYS(sstr));
7851 dxhv->xhv_eiter = he_dup(sxhv->xhv_eiter, !!HvSHAREKEYS(sstr));
7854 SvPVX(dstr) = Nullch;
7855 HvEITER((HV*)dstr) = (HE*)NULL;
7857 HvPMROOT((HV*)dstr) = HvPMROOT((HV*)sstr); /* XXX */
7858 HvNAME((HV*)dstr) = SAVEPV(HvNAME((HV*)sstr));
7861 SvANY(dstr) = new_XPVFM();
7862 FmLINES(dstr) = FmLINES(sstr);
7866 SvANY(dstr) = new_XPVCV();
7868 SvCUR(dstr) = SvCUR(sstr);
7869 SvLEN(dstr) = SvLEN(sstr);
7870 SvIVX(dstr) = SvIVX(sstr);
7871 SvNVX(dstr) = SvNVX(sstr);
7872 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7873 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7874 if (SvPVX(sstr) && SvLEN(sstr))
7875 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7877 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7878 CvSTASH(dstr) = hv_dup(CvSTASH(sstr));/* NOTE: not refcounted */
7879 CvSTART(dstr) = CvSTART(sstr);
7880 CvROOT(dstr) = OpREFCNT_inc(CvROOT(sstr));
7881 CvXSUB(dstr) = CvXSUB(sstr);
7882 CvXSUBANY(dstr) = CvXSUBANY(sstr);
7883 CvGV(dstr) = gv_dup_inc(CvGV(sstr));
7884 CvDEPTH(dstr) = CvDEPTH(sstr);
7885 if (CvPADLIST(sstr) && !AvREAL(CvPADLIST(sstr))) {
7886 /* XXX padlists are real, but pretend to be not */
7887 AvREAL_on(CvPADLIST(sstr));
7888 CvPADLIST(dstr) = av_dup_inc(CvPADLIST(sstr));
7889 AvREAL_off(CvPADLIST(sstr));
7890 AvREAL_off(CvPADLIST(dstr));
7893 CvPADLIST(dstr) = av_dup_inc(CvPADLIST(sstr));
7894 CvOUTSIDE(dstr) = cv_dup_inc(CvOUTSIDE(sstr));
7895 CvFLAGS(dstr) = CvFLAGS(sstr);
7898 Perl_croak(aTHX_ "Bizarre SvTYPE [%d]", SvTYPE(sstr));
7902 if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
7909 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max)
7914 return (PERL_CONTEXT*)NULL;
7916 /* look for it in the table first */
7917 ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
7921 /* create anew and remember what it is */
7922 Newz(56, ncxs, max + 1, PERL_CONTEXT);
7923 ptr_table_store(PL_ptr_table, cxs, ncxs);
7926 PERL_CONTEXT *cx = &cxs[ix];
7927 PERL_CONTEXT *ncx = &ncxs[ix];
7928 ncx->cx_type = cx->cx_type;
7929 if (CxTYPE(cx) == CXt_SUBST) {
7930 Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
7933 ncx->blk_oldsp = cx->blk_oldsp;
7934 ncx->blk_oldcop = cx->blk_oldcop;
7935 ncx->blk_oldretsp = cx->blk_oldretsp;
7936 ncx->blk_oldmarksp = cx->blk_oldmarksp;
7937 ncx->blk_oldscopesp = cx->blk_oldscopesp;
7938 ncx->blk_oldpm = cx->blk_oldpm;
7939 ncx->blk_gimme = cx->blk_gimme;
7940 switch (CxTYPE(cx)) {
7942 ncx->blk_sub.cv = (cx->blk_sub.olddepth == 0
7943 ? cv_dup_inc(cx->blk_sub.cv)
7944 : cv_dup(cx->blk_sub.cv));
7945 ncx->blk_sub.argarray = (cx->blk_sub.hasargs
7946 ? av_dup_inc(cx->blk_sub.argarray)
7948 ncx->blk_sub.savearray = av_dup(cx->blk_sub.savearray);
7949 ncx->blk_sub.olddepth = cx->blk_sub.olddepth;
7950 ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
7951 ncx->blk_sub.lval = cx->blk_sub.lval;
7954 ncx->blk_eval.old_in_eval = cx->blk_eval.old_in_eval;
7955 ncx->blk_eval.old_op_type = cx->blk_eval.old_op_type;
7956 ncx->blk_eval.old_namesv = sv_dup_inc(cx->blk_eval.old_namesv);
7957 ncx->blk_eval.old_eval_root = cx->blk_eval.old_eval_root;
7958 ncx->blk_eval.cur_text = sv_dup(cx->blk_eval.cur_text);
7961 ncx->blk_loop.label = cx->blk_loop.label;
7962 ncx->blk_loop.resetsp = cx->blk_loop.resetsp;
7963 ncx->blk_loop.redo_op = cx->blk_loop.redo_op;
7964 ncx->blk_loop.next_op = cx->blk_loop.next_op;
7965 ncx->blk_loop.last_op = cx->blk_loop.last_op;
7966 ncx->blk_loop.iterdata = (CxPADLOOP(cx)
7967 ? cx->blk_loop.iterdata
7968 : gv_dup((GV*)cx->blk_loop.iterdata));
7969 ncx->blk_loop.oldcurpad
7970 = (SV**)ptr_table_fetch(PL_ptr_table,
7971 cx->blk_loop.oldcurpad);
7972 ncx->blk_loop.itersave = sv_dup_inc(cx->blk_loop.itersave);
7973 ncx->blk_loop.iterlval = sv_dup_inc(cx->blk_loop.iterlval);
7974 ncx->blk_loop.iterary = av_dup_inc(cx->blk_loop.iterary);
7975 ncx->blk_loop.iterix = cx->blk_loop.iterix;
7976 ncx->blk_loop.itermax = cx->blk_loop.itermax;
7979 ncx->blk_sub.cv = cv_dup(cx->blk_sub.cv);
7980 ncx->blk_sub.gv = gv_dup(cx->blk_sub.gv);
7981 ncx->blk_sub.dfoutgv = gv_dup_inc(cx->blk_sub.dfoutgv);
7982 ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
7995 Perl_si_dup(pTHX_ PERL_SI *si)
8000 return (PERL_SI*)NULL;
8002 /* look for it in the table first */
8003 nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
8007 /* create anew and remember what it is */
8008 Newz(56, nsi, 1, PERL_SI);
8009 ptr_table_store(PL_ptr_table, si, nsi);
8011 nsi->si_stack = av_dup_inc(si->si_stack);
8012 nsi->si_cxix = si->si_cxix;
8013 nsi->si_cxmax = si->si_cxmax;
8014 nsi->si_cxstack = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax);
8015 nsi->si_type = si->si_type;
8016 nsi->si_prev = si_dup(si->si_prev);
8017 nsi->si_next = si_dup(si->si_next);
8018 nsi->si_markoff = si->si_markoff;
8023 #define POPINT(ss,ix) ((ss)[--(ix)].any_i32)
8024 #define TOPINT(ss,ix) ((ss)[ix].any_i32)
8025 #define POPLONG(ss,ix) ((ss)[--(ix)].any_long)
8026 #define TOPLONG(ss,ix) ((ss)[ix].any_long)
8027 #define POPIV(ss,ix) ((ss)[--(ix)].any_iv)
8028 #define TOPIV(ss,ix) ((ss)[ix].any_iv)
8029 #define POPPTR(ss,ix) ((ss)[--(ix)].any_ptr)
8030 #define TOPPTR(ss,ix) ((ss)[ix].any_ptr)
8031 #define POPDPTR(ss,ix) ((ss)[--(ix)].any_dptr)
8032 #define TOPDPTR(ss,ix) ((ss)[ix].any_dptr)
8033 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
8034 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
8037 #define pv_dup_inc(p) SAVEPV(p)
8038 #define pv_dup(p) SAVEPV(p)
8039 #define svp_dup_inc(p,pp) any_dup(p,pp)
8042 Perl_any_dup(pTHX_ void *v, PerlInterpreter *proto_perl)
8049 /* look for it in the table first */
8050 ret = ptr_table_fetch(PL_ptr_table, v);
8054 /* see if it is part of the interpreter structure */
8055 if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
8056 ret = (void*)(((char*)aTHXo) + (((char*)v) - (char*)proto_perl));
8064 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl)
8066 ANY *ss = proto_perl->Tsavestack;
8067 I32 ix = proto_perl->Tsavestack_ix;
8068 I32 max = proto_perl->Tsavestack_max;
8081 void (*dptr) (void*);
8082 void (*dxptr) (pTHXo_ void*);
8085 Newz(54, nss, max, ANY);
8091 case SAVEt_ITEM: /* normal string */
8092 sv = (SV*)POPPTR(ss,ix);
8093 TOPPTR(nss,ix) = sv_dup_inc(sv);
8094 sv = (SV*)POPPTR(ss,ix);
8095 TOPPTR(nss,ix) = sv_dup_inc(sv);
8097 case SAVEt_SV: /* scalar reference */
8098 sv = (SV*)POPPTR(ss,ix);
8099 TOPPTR(nss,ix) = sv_dup_inc(sv);
8100 gv = (GV*)POPPTR(ss,ix);
8101 TOPPTR(nss,ix) = gv_dup_inc(gv);
8103 case SAVEt_GENERIC_PVREF: /* generic char* */
8104 c = (char*)POPPTR(ss,ix);
8105 TOPPTR(nss,ix) = pv_dup(c);
8106 ptr = POPPTR(ss,ix);
8107 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8109 case SAVEt_GENERIC_SVREF: /* generic sv */
8110 case SAVEt_SVREF: /* scalar reference */
8111 sv = (SV*)POPPTR(ss,ix);
8112 TOPPTR(nss,ix) = sv_dup_inc(sv);
8113 ptr = POPPTR(ss,ix);
8114 TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
8116 case SAVEt_AV: /* array reference */
8117 av = (AV*)POPPTR(ss,ix);
8118 TOPPTR(nss,ix) = av_dup_inc(av);
8119 gv = (GV*)POPPTR(ss,ix);
8120 TOPPTR(nss,ix) = gv_dup(gv);
8122 case SAVEt_HV: /* hash reference */
8123 hv = (HV*)POPPTR(ss,ix);
8124 TOPPTR(nss,ix) = hv_dup_inc(hv);
8125 gv = (GV*)POPPTR(ss,ix);
8126 TOPPTR(nss,ix) = gv_dup(gv);
8128 case SAVEt_INT: /* int reference */
8129 ptr = POPPTR(ss,ix);
8130 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8131 intval = (int)POPINT(ss,ix);
8132 TOPINT(nss,ix) = intval;
8134 case SAVEt_LONG: /* long reference */
8135 ptr = POPPTR(ss,ix);
8136 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8137 longval = (long)POPLONG(ss,ix);
8138 TOPLONG(nss,ix) = longval;
8140 case SAVEt_I32: /* I32 reference */
8141 case SAVEt_I16: /* I16 reference */
8142 case SAVEt_I8: /* I8 reference */
8143 ptr = POPPTR(ss,ix);
8144 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8148 case SAVEt_IV: /* IV reference */
8149 ptr = POPPTR(ss,ix);
8150 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8154 case SAVEt_SPTR: /* SV* reference */
8155 ptr = POPPTR(ss,ix);
8156 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8157 sv = (SV*)POPPTR(ss,ix);
8158 TOPPTR(nss,ix) = sv_dup(sv);
8160 case SAVEt_VPTR: /* random* reference */
8161 ptr = POPPTR(ss,ix);
8162 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8163 ptr = POPPTR(ss,ix);
8164 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8166 case SAVEt_PPTR: /* char* reference */
8167 ptr = POPPTR(ss,ix);
8168 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8169 c = (char*)POPPTR(ss,ix);
8170 TOPPTR(nss,ix) = pv_dup(c);
8172 case SAVEt_HPTR: /* HV* reference */
8173 ptr = POPPTR(ss,ix);
8174 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8175 hv = (HV*)POPPTR(ss,ix);
8176 TOPPTR(nss,ix) = hv_dup(hv);
8178 case SAVEt_APTR: /* AV* reference */
8179 ptr = POPPTR(ss,ix);
8180 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8181 av = (AV*)POPPTR(ss,ix);
8182 TOPPTR(nss,ix) = av_dup(av);
8185 gv = (GV*)POPPTR(ss,ix);
8186 TOPPTR(nss,ix) = gv_dup(gv);
8188 case SAVEt_GP: /* scalar reference */
8189 gp = (GP*)POPPTR(ss,ix);
8190 TOPPTR(nss,ix) = gp = gp_dup(gp);
8191 (void)GpREFCNT_inc(gp);
8192 gv = (GV*)POPPTR(ss,ix);
8193 TOPPTR(nss,ix) = gv_dup_inc(c);
8194 c = (char*)POPPTR(ss,ix);
8195 TOPPTR(nss,ix) = pv_dup(c);
8202 sv = (SV*)POPPTR(ss,ix);
8203 TOPPTR(nss,ix) = sv_dup_inc(sv);
8206 ptr = POPPTR(ss,ix);
8207 if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
8208 /* these are assumed to be refcounted properly */
8209 switch (((OP*)ptr)->op_type) {
8216 TOPPTR(nss,ix) = ptr;
8221 TOPPTR(nss,ix) = Nullop;
8226 TOPPTR(nss,ix) = Nullop;
8229 c = (char*)POPPTR(ss,ix);
8230 TOPPTR(nss,ix) = pv_dup_inc(c);
8233 longval = POPLONG(ss,ix);
8234 TOPLONG(nss,ix) = longval;
8237 hv = (HV*)POPPTR(ss,ix);
8238 TOPPTR(nss,ix) = hv_dup_inc(hv);
8239 c = (char*)POPPTR(ss,ix);
8240 TOPPTR(nss,ix) = pv_dup_inc(c);
8244 case SAVEt_DESTRUCTOR:
8245 ptr = POPPTR(ss,ix);
8246 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
8247 dptr = POPDPTR(ss,ix);
8248 TOPDPTR(nss,ix) = (void (*)(void*))any_dup((void *)dptr, proto_perl);
8250 case SAVEt_DESTRUCTOR_X:
8251 ptr = POPPTR(ss,ix);
8252 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
8253 dxptr = POPDXPTR(ss,ix);
8254 TOPDXPTR(nss,ix) = (void (*)(pTHXo_ void*))any_dup((void *)dxptr, proto_perl);
8256 case SAVEt_REGCONTEXT:
8262 case SAVEt_STACK_POS: /* Position on Perl stack */
8266 case SAVEt_AELEM: /* array element */
8267 sv = (SV*)POPPTR(ss,ix);
8268 TOPPTR(nss,ix) = sv_dup_inc(sv);
8271 av = (AV*)POPPTR(ss,ix);
8272 TOPPTR(nss,ix) = av_dup_inc(av);
8274 case SAVEt_HELEM: /* hash element */
8275 sv = (SV*)POPPTR(ss,ix);
8276 TOPPTR(nss,ix) = sv_dup_inc(sv);
8277 sv = (SV*)POPPTR(ss,ix);
8278 TOPPTR(nss,ix) = sv_dup_inc(sv);
8279 hv = (HV*)POPPTR(ss,ix);
8280 TOPPTR(nss,ix) = hv_dup_inc(hv);
8283 ptr = POPPTR(ss,ix);
8284 TOPPTR(nss,ix) = ptr;
8291 av = (AV*)POPPTR(ss,ix);
8292 TOPPTR(nss,ix) = av_dup(av);
8295 longval = (long)POPLONG(ss,ix);
8296 TOPLONG(nss,ix) = longval;
8297 ptr = POPPTR(ss,ix);
8298 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8299 sv = (SV*)POPPTR(ss,ix);
8300 TOPPTR(nss,ix) = sv_dup(sv);
8303 Perl_croak(aTHX_ "panic: ss_dup inconsistency");
8315 perl_clone(PerlInterpreter *proto_perl, UV flags)
8318 CPerlObj *pPerl = (CPerlObj*)proto_perl;
8321 #ifdef PERL_IMPLICIT_SYS
8322 return perl_clone_using(proto_perl, flags,
8324 proto_perl->IMemShared,
8325 proto_perl->IMemParse,
8335 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
8336 struct IPerlMem* ipM, struct IPerlMem* ipMS,
8337 struct IPerlMem* ipMP, struct IPerlEnv* ipE,
8338 struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
8339 struct IPerlDir* ipD, struct IPerlSock* ipS,
8340 struct IPerlProc* ipP)
8342 /* XXX many of the string copies here can be optimized if they're
8343 * constants; they need to be allocated as common memory and just
8344 * their pointers copied. */
8348 CPerlObj *pPerl = new(ipM) CPerlObj(ipM, ipMS, ipMP, ipE, ipStd, ipLIO,
8350 PERL_SET_THX(pPerl);
8351 # else /* !PERL_OBJECT */
8352 PerlInterpreter *my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
8353 PERL_SET_THX(my_perl);
8356 memset(my_perl, 0xab, sizeof(PerlInterpreter));
8361 # else /* !DEBUGGING */
8362 Zero(my_perl, 1, PerlInterpreter);
8363 # endif /* DEBUGGING */
8367 PL_MemShared = ipMS;
8375 # endif /* PERL_OBJECT */
8376 #else /* !PERL_IMPLICIT_SYS */
8378 PerlInterpreter *my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
8379 PERL_SET_THX(my_perl);
8382 memset(my_perl, 0xab, sizeof(PerlInterpreter));
8387 # else /* !DEBUGGING */
8388 Zero(my_perl, 1, PerlInterpreter);
8389 # endif /* DEBUGGING */
8390 #endif /* PERL_IMPLICIT_SYS */
8393 PL_xiv_arenaroot = NULL;
8395 PL_xnv_arenaroot = NULL;
8397 PL_xrv_arenaroot = NULL;
8399 PL_xpv_arenaroot = NULL;
8401 PL_xpviv_arenaroot = NULL;
8402 PL_xpviv_root = NULL;
8403 PL_xpvnv_arenaroot = NULL;
8404 PL_xpvnv_root = NULL;
8405 PL_xpvcv_arenaroot = NULL;
8406 PL_xpvcv_root = NULL;
8407 PL_xpvav_arenaroot = NULL;
8408 PL_xpvav_root = NULL;
8409 PL_xpvhv_arenaroot = NULL;
8410 PL_xpvhv_root = NULL;
8411 PL_xpvmg_arenaroot = NULL;
8412 PL_xpvmg_root = NULL;
8413 PL_xpvlv_arenaroot = NULL;
8414 PL_xpvlv_root = NULL;
8415 PL_xpvbm_arenaroot = NULL;
8416 PL_xpvbm_root = NULL;
8417 PL_he_arenaroot = NULL;
8419 PL_nice_chunk = NULL;
8420 PL_nice_chunk_size = 0;
8423 PL_sv_root = Nullsv;
8424 PL_sv_arenaroot = Nullsv;
8426 PL_debug = proto_perl->Idebug;
8428 /* create SV map for pointer relocation */
8429 PL_ptr_table = ptr_table_new();
8431 /* initialize these special pointers as early as possible */
8432 SvANY(&PL_sv_undef) = NULL;
8433 SvREFCNT(&PL_sv_undef) = (~(U32)0)/2;
8434 SvFLAGS(&PL_sv_undef) = SVf_READONLY|SVt_NULL;
8435 ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
8438 SvUPGRADE(&PL_sv_no, SVt_PVNV);
8440 SvANY(&PL_sv_no) = new_XPVNV();
8442 SvREFCNT(&PL_sv_no) = (~(U32)0)/2;
8443 SvFLAGS(&PL_sv_no) = SVp_NOK|SVf_NOK|SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
8444 SvPVX(&PL_sv_no) = SAVEPVN(PL_No, 0);
8445 SvCUR(&PL_sv_no) = 0;
8446 SvLEN(&PL_sv_no) = 1;
8447 SvNVX(&PL_sv_no) = 0;
8448 ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
8451 SvUPGRADE(&PL_sv_yes, SVt_PVNV);
8453 SvANY(&PL_sv_yes) = new_XPVNV();
8455 SvREFCNT(&PL_sv_yes) = (~(U32)0)/2;
8456 SvFLAGS(&PL_sv_yes) = SVp_NOK|SVf_NOK|SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
8457 SvPVX(&PL_sv_yes) = SAVEPVN(PL_Yes, 1);
8458 SvCUR(&PL_sv_yes) = 1;
8459 SvLEN(&PL_sv_yes) = 2;
8460 SvNVX(&PL_sv_yes) = 1;
8461 ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
8463 /* create shared string table */
8464 PL_strtab = newHV();
8465 HvSHAREKEYS_off(PL_strtab);
8466 hv_ksplit(PL_strtab, 512);
8467 ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
8469 PL_compiling = proto_perl->Icompiling;
8470 PL_compiling.cop_stashpv = SAVEPV(PL_compiling.cop_stashpv);
8471 PL_compiling.cop_file = SAVEPV(PL_compiling.cop_file);
8472 ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
8473 if (!specialWARN(PL_compiling.cop_warnings))
8474 PL_compiling.cop_warnings = sv_dup_inc(PL_compiling.cop_warnings);
8475 if (!specialCopIO(PL_compiling.cop_io))
8476 PL_compiling.cop_io = sv_dup_inc(PL_compiling.cop_io);
8477 PL_curcop = (COP*)any_dup(proto_perl->Tcurcop, proto_perl);
8479 /* pseudo environmental stuff */
8480 PL_origargc = proto_perl->Iorigargc;
8482 New(0, PL_origargv, i+1, char*);
8483 PL_origargv[i] = '\0';
8485 PL_origargv[i] = SAVEPV(proto_perl->Iorigargv[i]);
8487 PL_envgv = gv_dup(proto_perl->Ienvgv);
8488 PL_incgv = gv_dup(proto_perl->Iincgv);
8489 PL_hintgv = gv_dup(proto_perl->Ihintgv);
8490 PL_origfilename = SAVEPV(proto_perl->Iorigfilename);
8491 PL_diehook = sv_dup_inc(proto_perl->Idiehook);
8492 PL_warnhook = sv_dup_inc(proto_perl->Iwarnhook);
8495 PL_minus_c = proto_perl->Iminus_c;
8496 PL_patchlevel = sv_dup_inc(proto_perl->Ipatchlevel);
8497 PL_localpatches = proto_perl->Ilocalpatches;
8498 PL_splitstr = proto_perl->Isplitstr;
8499 PL_preprocess = proto_perl->Ipreprocess;
8500 PL_minus_n = proto_perl->Iminus_n;
8501 PL_minus_p = proto_perl->Iminus_p;
8502 PL_minus_l = proto_perl->Iminus_l;
8503 PL_minus_a = proto_perl->Iminus_a;
8504 PL_minus_F = proto_perl->Iminus_F;
8505 PL_doswitches = proto_perl->Idoswitches;
8506 PL_dowarn = proto_perl->Idowarn;
8507 PL_doextract = proto_perl->Idoextract;
8508 PL_sawampersand = proto_perl->Isawampersand;
8509 PL_unsafe = proto_perl->Iunsafe;
8510 PL_inplace = SAVEPV(proto_perl->Iinplace);
8511 PL_e_script = sv_dup_inc(proto_perl->Ie_script);
8512 PL_perldb = proto_perl->Iperldb;
8513 PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
8515 /* magical thingies */
8516 /* XXX time(&PL_basetime) when asked for? */
8517 PL_basetime = proto_perl->Ibasetime;
8518 PL_formfeed = sv_dup(proto_perl->Iformfeed);
8520 PL_maxsysfd = proto_perl->Imaxsysfd;
8521 PL_multiline = proto_perl->Imultiline;
8522 PL_statusvalue = proto_perl->Istatusvalue;
8524 PL_statusvalue_vms = proto_perl->Istatusvalue_vms;
8527 /* shortcuts to various I/O objects */
8528 PL_stdingv = gv_dup(proto_perl->Istdingv);
8529 PL_stderrgv = gv_dup(proto_perl->Istderrgv);
8530 PL_defgv = gv_dup(proto_perl->Idefgv);
8531 PL_argvgv = gv_dup(proto_perl->Iargvgv);
8532 PL_argvoutgv = gv_dup(proto_perl->Iargvoutgv);
8533 PL_argvout_stack = av_dup(proto_perl->Iargvout_stack);
8535 /* shortcuts to regexp stuff */
8536 PL_replgv = gv_dup(proto_perl->Ireplgv);
8538 /* shortcuts to misc objects */
8539 PL_errgv = gv_dup(proto_perl->Ierrgv);
8541 /* shortcuts to debugging objects */
8542 PL_DBgv = gv_dup(proto_perl->IDBgv);
8543 PL_DBline = gv_dup(proto_perl->IDBline);
8544 PL_DBsub = gv_dup(proto_perl->IDBsub);
8545 PL_DBsingle = sv_dup(proto_perl->IDBsingle);
8546 PL_DBtrace = sv_dup(proto_perl->IDBtrace);
8547 PL_DBsignal = sv_dup(proto_perl->IDBsignal);
8548 PL_lineary = av_dup(proto_perl->Ilineary);
8549 PL_dbargs = av_dup(proto_perl->Idbargs);
8552 PL_defstash = hv_dup_inc(proto_perl->Tdefstash);
8553 PL_curstash = hv_dup(proto_perl->Tcurstash);
8554 PL_debstash = hv_dup(proto_perl->Idebstash);
8555 PL_globalstash = hv_dup(proto_perl->Iglobalstash);
8556 PL_curstname = sv_dup_inc(proto_perl->Icurstname);
8558 PL_beginav = av_dup_inc(proto_perl->Ibeginav);
8559 PL_endav = av_dup_inc(proto_perl->Iendav);
8560 PL_checkav = av_dup_inc(proto_perl->Icheckav);
8561 PL_initav = av_dup_inc(proto_perl->Iinitav);
8563 PL_sub_generation = proto_perl->Isub_generation;
8565 /* funky return mechanisms */
8566 PL_forkprocess = proto_perl->Iforkprocess;
8568 /* subprocess state */
8569 PL_fdpid = av_dup_inc(proto_perl->Ifdpid);
8571 /* internal state */
8572 PL_tainting = proto_perl->Itainting;
8573 PL_maxo = proto_perl->Imaxo;
8574 if (proto_perl->Iop_mask)
8575 PL_op_mask = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
8577 PL_op_mask = Nullch;
8579 /* current interpreter roots */
8580 PL_main_cv = cv_dup_inc(proto_perl->Imain_cv);
8581 PL_main_root = OpREFCNT_inc(proto_perl->Imain_root);
8582 PL_main_start = proto_perl->Imain_start;
8583 PL_eval_root = proto_perl->Ieval_root;
8584 PL_eval_start = proto_perl->Ieval_start;
8586 /* runtime control stuff */
8587 PL_curcopdb = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
8588 PL_copline = proto_perl->Icopline;
8590 PL_filemode = proto_perl->Ifilemode;
8591 PL_lastfd = proto_perl->Ilastfd;
8592 PL_oldname = proto_perl->Ioldname; /* XXX not quite right */
8595 PL_gensym = proto_perl->Igensym;
8596 PL_preambled = proto_perl->Ipreambled;
8597 PL_preambleav = av_dup_inc(proto_perl->Ipreambleav);
8598 PL_laststatval = proto_perl->Ilaststatval;
8599 PL_laststype = proto_perl->Ilaststype;
8600 PL_mess_sv = Nullsv;
8602 PL_ors_sv = sv_dup_inc(proto_perl->Iors_sv);
8603 PL_ofmt = SAVEPV(proto_perl->Iofmt);
8605 /* interpreter atexit processing */
8606 PL_exitlistlen = proto_perl->Iexitlistlen;
8607 if (PL_exitlistlen) {
8608 New(0, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
8609 Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
8612 PL_exitlist = (PerlExitListEntry*)NULL;
8613 PL_modglobal = hv_dup_inc(proto_perl->Imodglobal);
8615 PL_profiledata = NULL;
8616 PL_rsfp = fp_dup(proto_perl->Irsfp, '<');
8617 /* PL_rsfp_filters entries have fake IoDIRP() */
8618 PL_rsfp_filters = av_dup_inc(proto_perl->Irsfp_filters);
8620 PL_compcv = cv_dup(proto_perl->Icompcv);
8621 PL_comppad = av_dup(proto_perl->Icomppad);
8622 PL_comppad_name = av_dup(proto_perl->Icomppad_name);
8623 PL_comppad_name_fill = proto_perl->Icomppad_name_fill;
8624 PL_comppad_name_floor = proto_perl->Icomppad_name_floor;
8625 PL_curpad = (SV**)ptr_table_fetch(PL_ptr_table,
8626 proto_perl->Tcurpad);
8628 #ifdef HAVE_INTERP_INTERN
8629 sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
8632 /* more statics moved here */
8633 PL_generation = proto_perl->Igeneration;
8634 PL_DBcv = cv_dup(proto_perl->IDBcv);
8636 PL_in_clean_objs = proto_perl->Iin_clean_objs;
8637 PL_in_clean_all = proto_perl->Iin_clean_all;
8639 PL_uid = proto_perl->Iuid;
8640 PL_euid = proto_perl->Ieuid;
8641 PL_gid = proto_perl->Igid;
8642 PL_egid = proto_perl->Iegid;
8643 PL_nomemok = proto_perl->Inomemok;
8644 PL_an = proto_perl->Ian;
8645 PL_cop_seqmax = proto_perl->Icop_seqmax;
8646 PL_op_seqmax = proto_perl->Iop_seqmax;
8647 PL_evalseq = proto_perl->Ievalseq;
8648 PL_origenviron = proto_perl->Iorigenviron; /* XXX not quite right */
8649 PL_origalen = proto_perl->Iorigalen;
8650 PL_pidstatus = newHV(); /* XXX flag for cloning? */
8651 PL_osname = SAVEPV(proto_perl->Iosname);
8652 PL_sh_path = SAVEPV(proto_perl->Ish_path);
8653 PL_sighandlerp = proto_perl->Isighandlerp;
8656 PL_runops = proto_perl->Irunops;
8658 Copy(proto_perl->Itokenbuf, PL_tokenbuf, 256, char);
8661 PL_cshlen = proto_perl->Icshlen;
8662 PL_cshname = SAVEPVN(proto_perl->Icshname, PL_cshlen);
8665 PL_lex_state = proto_perl->Ilex_state;
8666 PL_lex_defer = proto_perl->Ilex_defer;
8667 PL_lex_expect = proto_perl->Ilex_expect;
8668 PL_lex_formbrack = proto_perl->Ilex_formbrack;
8669 PL_lex_dojoin = proto_perl->Ilex_dojoin;
8670 PL_lex_starts = proto_perl->Ilex_starts;
8671 PL_lex_stuff = sv_dup_inc(proto_perl->Ilex_stuff);
8672 PL_lex_repl = sv_dup_inc(proto_perl->Ilex_repl);
8673 PL_lex_op = proto_perl->Ilex_op;
8674 PL_lex_inpat = proto_perl->Ilex_inpat;
8675 PL_lex_inwhat = proto_perl->Ilex_inwhat;
8676 PL_lex_brackets = proto_perl->Ilex_brackets;
8677 i = (PL_lex_brackets < 120 ? 120 : PL_lex_brackets);
8678 PL_lex_brackstack = SAVEPVN(proto_perl->Ilex_brackstack,i);
8679 PL_lex_casemods = proto_perl->Ilex_casemods;
8680 i = (PL_lex_casemods < 12 ? 12 : PL_lex_casemods);
8681 PL_lex_casestack = SAVEPVN(proto_perl->Ilex_casestack,i);
8683 Copy(proto_perl->Inextval, PL_nextval, 5, YYSTYPE);
8684 Copy(proto_perl->Inexttype, PL_nexttype, 5, I32);
8685 PL_nexttoke = proto_perl->Inexttoke;
8687 PL_linestr = sv_dup_inc(proto_perl->Ilinestr);
8688 i = proto_perl->Ibufptr - SvPVX(proto_perl->Ilinestr);
8689 PL_bufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8690 i = proto_perl->Ioldbufptr - SvPVX(proto_perl->Ilinestr);
8691 PL_oldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8692 i = proto_perl->Ioldoldbufptr - SvPVX(proto_perl->Ilinestr);
8693 PL_oldoldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8694 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
8695 i = proto_perl->Ilinestart - SvPVX(proto_perl->Ilinestr);
8696 PL_linestart = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8697 PL_pending_ident = proto_perl->Ipending_ident;
8698 PL_sublex_info = proto_perl->Isublex_info; /* XXX not quite right */
8700 PL_expect = proto_perl->Iexpect;
8702 PL_multi_start = proto_perl->Imulti_start;
8703 PL_multi_end = proto_perl->Imulti_end;
8704 PL_multi_open = proto_perl->Imulti_open;
8705 PL_multi_close = proto_perl->Imulti_close;
8707 PL_error_count = proto_perl->Ierror_count;
8708 PL_subline = proto_perl->Isubline;
8709 PL_subname = sv_dup_inc(proto_perl->Isubname);
8711 PL_min_intro_pending = proto_perl->Imin_intro_pending;
8712 PL_max_intro_pending = proto_perl->Imax_intro_pending;
8713 PL_padix = proto_perl->Ipadix;
8714 PL_padix_floor = proto_perl->Ipadix_floor;
8715 PL_pad_reset_pending = proto_perl->Ipad_reset_pending;
8717 i = proto_perl->Ilast_uni - SvPVX(proto_perl->Ilinestr);
8718 PL_last_uni = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8719 i = proto_perl->Ilast_lop - SvPVX(proto_perl->Ilinestr);
8720 PL_last_lop = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8721 PL_last_lop_op = proto_perl->Ilast_lop_op;
8722 PL_in_my = proto_perl->Iin_my;
8723 PL_in_my_stash = hv_dup(proto_perl->Iin_my_stash);
8725 PL_cryptseen = proto_perl->Icryptseen;
8728 PL_hints = proto_perl->Ihints;
8730 PL_amagic_generation = proto_perl->Iamagic_generation;
8732 #ifdef USE_LOCALE_COLLATE
8733 PL_collation_ix = proto_perl->Icollation_ix;
8734 PL_collation_name = SAVEPV(proto_perl->Icollation_name);
8735 PL_collation_standard = proto_perl->Icollation_standard;
8736 PL_collxfrm_base = proto_perl->Icollxfrm_base;
8737 PL_collxfrm_mult = proto_perl->Icollxfrm_mult;
8738 #endif /* USE_LOCALE_COLLATE */
8740 #ifdef USE_LOCALE_NUMERIC
8741 PL_numeric_name = SAVEPV(proto_perl->Inumeric_name);
8742 PL_numeric_standard = proto_perl->Inumeric_standard;
8743 PL_numeric_local = proto_perl->Inumeric_local;
8744 PL_numeric_radix = proto_perl->Inumeric_radix;
8745 #endif /* !USE_LOCALE_NUMERIC */
8747 /* utf8 character classes */
8748 PL_utf8_alnum = sv_dup_inc(proto_perl->Iutf8_alnum);
8749 PL_utf8_alnumc = sv_dup_inc(proto_perl->Iutf8_alnumc);
8750 PL_utf8_ascii = sv_dup_inc(proto_perl->Iutf8_ascii);
8751 PL_utf8_alpha = sv_dup_inc(proto_perl->Iutf8_alpha);
8752 PL_utf8_space = sv_dup_inc(proto_perl->Iutf8_space);
8753 PL_utf8_cntrl = sv_dup_inc(proto_perl->Iutf8_cntrl);
8754 PL_utf8_graph = sv_dup_inc(proto_perl->Iutf8_graph);
8755 PL_utf8_digit = sv_dup_inc(proto_perl->Iutf8_digit);
8756 PL_utf8_upper = sv_dup_inc(proto_perl->Iutf8_upper);
8757 PL_utf8_lower = sv_dup_inc(proto_perl->Iutf8_lower);
8758 PL_utf8_print = sv_dup_inc(proto_perl->Iutf8_print);
8759 PL_utf8_punct = sv_dup_inc(proto_perl->Iutf8_punct);
8760 PL_utf8_xdigit = sv_dup_inc(proto_perl->Iutf8_xdigit);
8761 PL_utf8_mark = sv_dup_inc(proto_perl->Iutf8_mark);
8762 PL_utf8_toupper = sv_dup_inc(proto_perl->Iutf8_toupper);
8763 PL_utf8_totitle = sv_dup_inc(proto_perl->Iutf8_totitle);
8764 PL_utf8_tolower = sv_dup_inc(proto_perl->Iutf8_tolower);
8767 PL_last_swash_hv = Nullhv; /* reinits on demand */
8768 PL_last_swash_klen = 0;
8769 PL_last_swash_key[0]= '\0';
8770 PL_last_swash_tmps = (U8*)NULL;
8771 PL_last_swash_slen = 0;
8773 /* perly.c globals */
8774 PL_yydebug = proto_perl->Iyydebug;
8775 PL_yynerrs = proto_perl->Iyynerrs;
8776 PL_yyerrflag = proto_perl->Iyyerrflag;
8777 PL_yychar = proto_perl->Iyychar;
8778 PL_yyval = proto_perl->Iyyval;
8779 PL_yylval = proto_perl->Iyylval;
8781 PL_glob_index = proto_perl->Iglob_index;
8782 PL_srand_called = proto_perl->Isrand_called;
8783 PL_uudmap['M'] = 0; /* reinits on demand */
8784 PL_bitcount = Nullch; /* reinits on demand */
8786 if (proto_perl->Ipsig_ptr) {
8787 int sig_num[] = { SIG_NUM };
8788 Newz(0, PL_psig_ptr, sizeof(sig_num)/sizeof(*sig_num), SV*);
8789 Newz(0, PL_psig_name, sizeof(sig_num)/sizeof(*sig_num), SV*);
8790 for (i = 1; PL_sig_name[i]; i++) {
8791 PL_psig_ptr[i] = sv_dup_inc(proto_perl->Ipsig_ptr[i]);
8792 PL_psig_name[i] = sv_dup_inc(proto_perl->Ipsig_name[i]);
8796 PL_psig_ptr = (SV**)NULL;
8797 PL_psig_name = (SV**)NULL;
8800 /* thrdvar.h stuff */
8803 /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
8804 PL_tmps_ix = proto_perl->Ttmps_ix;
8805 PL_tmps_max = proto_perl->Ttmps_max;
8806 PL_tmps_floor = proto_perl->Ttmps_floor;
8807 Newz(50, PL_tmps_stack, PL_tmps_max, SV*);
8809 while (i <= PL_tmps_ix) {
8810 PL_tmps_stack[i] = sv_dup_inc(proto_perl->Ttmps_stack[i]);
8814 /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
8815 i = proto_perl->Tmarkstack_max - proto_perl->Tmarkstack;
8816 Newz(54, PL_markstack, i, I32);
8817 PL_markstack_max = PL_markstack + (proto_perl->Tmarkstack_max
8818 - proto_perl->Tmarkstack);
8819 PL_markstack_ptr = PL_markstack + (proto_perl->Tmarkstack_ptr
8820 - proto_perl->Tmarkstack);
8821 Copy(proto_perl->Tmarkstack, PL_markstack,
8822 PL_markstack_ptr - PL_markstack + 1, I32);
8824 /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
8825 * NOTE: unlike the others! */
8826 PL_scopestack_ix = proto_perl->Tscopestack_ix;
8827 PL_scopestack_max = proto_perl->Tscopestack_max;
8828 Newz(54, PL_scopestack, PL_scopestack_max, I32);
8829 Copy(proto_perl->Tscopestack, PL_scopestack, PL_scopestack_ix, I32);
8831 /* next push_return() sets PL_retstack[PL_retstack_ix]
8832 * NOTE: unlike the others! */
8833 PL_retstack_ix = proto_perl->Tretstack_ix;
8834 PL_retstack_max = proto_perl->Tretstack_max;
8835 Newz(54, PL_retstack, PL_retstack_max, OP*);
8836 Copy(proto_perl->Tretstack, PL_retstack, PL_retstack_ix, I32);
8838 /* NOTE: si_dup() looks at PL_markstack */
8839 PL_curstackinfo = si_dup(proto_perl->Tcurstackinfo);
8841 /* PL_curstack = PL_curstackinfo->si_stack; */
8842 PL_curstack = av_dup(proto_perl->Tcurstack);
8843 PL_mainstack = av_dup(proto_perl->Tmainstack);
8845 /* next PUSHs() etc. set *(PL_stack_sp+1) */
8846 PL_stack_base = AvARRAY(PL_curstack);
8847 PL_stack_sp = PL_stack_base + (proto_perl->Tstack_sp
8848 - proto_perl->Tstack_base);
8849 PL_stack_max = PL_stack_base + AvMAX(PL_curstack);
8851 /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
8852 * NOTE: unlike the others! */
8853 PL_savestack_ix = proto_perl->Tsavestack_ix;
8854 PL_savestack_max = proto_perl->Tsavestack_max;
8855 /*Newz(54, PL_savestack, PL_savestack_max, ANY);*/
8856 PL_savestack = ss_dup(proto_perl);
8860 ENTER; /* perl_destruct() wants to LEAVE; */
8863 PL_start_env = proto_perl->Tstart_env; /* XXXXXX */
8864 PL_top_env = &PL_start_env;
8866 PL_op = proto_perl->Top;
8869 PL_Xpv = (XPV*)NULL;
8870 PL_na = proto_perl->Tna;
8872 PL_statbuf = proto_perl->Tstatbuf;
8873 PL_statcache = proto_perl->Tstatcache;
8874 PL_statgv = gv_dup(proto_perl->Tstatgv);
8875 PL_statname = sv_dup_inc(proto_perl->Tstatname);
8877 PL_timesbuf = proto_perl->Ttimesbuf;
8880 PL_tainted = proto_perl->Ttainted;
8881 PL_curpm = proto_perl->Tcurpm; /* XXX No PMOP ref count */
8882 PL_nrs = sv_dup_inc(proto_perl->Tnrs);
8883 PL_rs = sv_dup_inc(proto_perl->Trs);
8884 PL_last_in_gv = gv_dup(proto_perl->Tlast_in_gv);
8885 PL_ofs_sv = sv_dup_inc(proto_perl->Tofs_sv);
8886 PL_defoutgv = gv_dup_inc(proto_perl->Tdefoutgv);
8887 PL_chopset = proto_perl->Tchopset; /* XXX never deallocated */
8888 PL_toptarget = sv_dup_inc(proto_perl->Ttoptarget);
8889 PL_bodytarget = sv_dup_inc(proto_perl->Tbodytarget);
8890 PL_formtarget = sv_dup(proto_perl->Tformtarget);
8892 PL_restartop = proto_perl->Trestartop;
8893 PL_in_eval = proto_perl->Tin_eval;
8894 PL_delaymagic = proto_perl->Tdelaymagic;
8895 PL_dirty = proto_perl->Tdirty;
8896 PL_localizing = proto_perl->Tlocalizing;
8898 #ifdef PERL_FLEXIBLE_EXCEPTIONS
8899 PL_protect = proto_perl->Tprotect;
8901 PL_errors = sv_dup_inc(proto_perl->Terrors);
8902 PL_av_fetch_sv = Nullsv;
8903 PL_hv_fetch_sv = Nullsv;
8904 Zero(&PL_hv_fetch_ent_mh, 1, HE); /* XXX */
8905 PL_modcount = proto_perl->Tmodcount;
8906 PL_lastgotoprobe = Nullop;
8907 PL_dumpindent = proto_perl->Tdumpindent;
8909 PL_sortcop = (OP*)any_dup(proto_perl->Tsortcop, proto_perl);
8910 PL_sortstash = hv_dup(proto_perl->Tsortstash);
8911 PL_firstgv = gv_dup(proto_perl->Tfirstgv);
8912 PL_secondgv = gv_dup(proto_perl->Tsecondgv);
8913 PL_sortcxix = proto_perl->Tsortcxix;
8914 PL_efloatbuf = Nullch; /* reinits on demand */
8915 PL_efloatsize = 0; /* reinits on demand */
8919 PL_screamfirst = NULL;
8920 PL_screamnext = NULL;
8921 PL_maxscream = -1; /* reinits on demand */
8922 PL_lastscream = Nullsv;
8924 PL_watchaddr = NULL;
8925 PL_watchok = Nullch;
8927 PL_regdummy = proto_perl->Tregdummy;
8928 PL_regcomp_parse = Nullch;
8929 PL_regxend = Nullch;
8930 PL_regcode = (regnode*)NULL;
8933 PL_regprecomp = Nullch;
8938 PL_seen_zerolen = 0;
8940 PL_regcomp_rx = (regexp*)NULL;
8942 PL_colorset = 0; /* reinits PL_colors[] */
8943 /*PL_colors[6] = {0,0,0,0,0,0};*/
8944 PL_reg_whilem_seen = 0;
8945 PL_reginput = Nullch;
8948 PL_regstartp = (I32*)NULL;
8949 PL_regendp = (I32*)NULL;
8950 PL_reglastparen = (U32*)NULL;
8951 PL_regtill = Nullch;
8953 PL_reg_start_tmp = (char**)NULL;
8954 PL_reg_start_tmpl = 0;
8955 PL_regdata = (struct reg_data*)NULL;
8958 PL_reg_eval_set = 0;
8960 PL_regprogram = (regnode*)NULL;
8962 PL_regcc = (CURCUR*)NULL;
8963 PL_reg_call_cc = (struct re_cc_state*)NULL;
8964 PL_reg_re = (regexp*)NULL;
8965 PL_reg_ganch = Nullch;
8967 PL_reg_magic = (MAGIC*)NULL;
8969 PL_reg_oldcurpm = (PMOP*)NULL;
8970 PL_reg_curpm = (PMOP*)NULL;
8971 PL_reg_oldsaved = Nullch;
8972 PL_reg_oldsavedlen = 0;
8974 PL_reg_leftiter = 0;
8975 PL_reg_poscache = Nullch;
8976 PL_reg_poscache_size= 0;
8978 /* RE engine - function pointers */
8979 PL_regcompp = proto_perl->Tregcompp;
8980 PL_regexecp = proto_perl->Tregexecp;
8981 PL_regint_start = proto_perl->Tregint_start;
8982 PL_regint_string = proto_perl->Tregint_string;
8983 PL_regfree = proto_perl->Tregfree;
8985 PL_reginterp_cnt = 0;
8986 PL_reg_starttry = 0;
8989 return (PerlInterpreter*)pPerl;
8995 #else /* !USE_ITHREADS */
9001 #endif /* USE_ITHREADS */
9004 do_report_used(pTHXo_ SV *sv)
9006 if (SvTYPE(sv) != SVTYPEMASK) {
9007 PerlIO_printf(Perl_debug_log, "****\n");
9013 do_clean_objs(pTHXo_ SV *sv)
9017 if (SvROK(sv) && SvOBJECT(rv = SvRV(sv))) {
9018 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(sv));)
9019 if (SvWEAKREF(sv)) {
9030 /* XXX Might want to check arrays, etc. */
9033 #ifndef DISABLE_DESTRUCTOR_KLUDGE
9035 do_clean_named_objs(pTHXo_ SV *sv)
9037 if (SvTYPE(sv) == SVt_PVGV && GvGP(sv)) {
9038 if ( SvOBJECT(GvSV(sv)) ||
9039 (GvAV(sv) && SvOBJECT(GvAV(sv))) ||
9040 (GvHV(sv) && SvOBJECT(GvHV(sv))) ||
9041 (GvIO(sv) && SvOBJECT(GvIO(sv))) ||
9042 (GvCV(sv) && SvOBJECT(GvCV(sv))) )
9044 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning named glob object:\n "), sv_dump(sv));)
9052 do_clean_all(pTHXo_ SV *sv)
9054 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) );)
9055 SvFLAGS(sv) |= SVf_BREAK;