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(aTHX_ sv, numtype);
1673 #endif /* NV_PRESERVES_UV*/
1676 Perl_sv_2iv(pTHX_ register SV *sv)
1680 if (SvGMAGICAL(sv)) {
1685 return I_V(SvNVX(sv));
1687 if (SvPOKp(sv) && SvLEN(sv))
1690 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
1691 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
1697 if (SvTHINKFIRST(sv)) {
1700 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
1701 (SvRV(tmpstr) != SvRV(sv)))
1702 return SvIV(tmpstr);
1703 return PTR2IV(SvRV(sv));
1705 if (SvREADONLY(sv) && SvFAKE(sv)) {
1706 sv_force_normal(sv);
1708 if (SvREADONLY(sv) && !SvOK(sv)) {
1709 if (ckWARN(WARN_UNINITIALIZED))
1716 return (IV)(SvUVX(sv));
1723 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
1724 * without also getting a cached IV/UV from it at the same time
1725 * (ie PV->NV conversion should detect loss of accuracy and cache
1726 * IV or UV at same time to avoid this. NWC */
1728 if (SvTYPE(sv) == SVt_NV)
1729 sv_upgrade(sv, SVt_PVNV);
1731 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
1732 /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
1733 certainly cast into the IV range at IV_MAX, whereas the correct
1734 answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
1736 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
1737 SvIVX(sv) = I_V(SvNVX(sv));
1738 if (SvNVX(sv) == (NV) SvIVX(sv)
1739 #ifndef NV_PRESERVES_UV
1740 && (((UV)1 << NV_PRESERVES_UV_BITS) >
1741 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
1742 /* Don't flag it as "accurately an integer" if the number
1743 came from a (by definition imprecise) NV operation, and
1744 we're outside the range of NV integer precision */
1747 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
1748 DEBUG_c(PerlIO_printf(Perl_debug_log,
1749 "0x%"UVxf" iv(%g => %"IVdf") (precise)\n",
1755 /* IV not precise. No need to convert from PV, as NV
1756 conversion would already have cached IV if it detected
1757 that PV->IV would be better than PV->NV->IV
1758 flags already correct - don't set public IOK. */
1759 DEBUG_c(PerlIO_printf(Perl_debug_log,
1760 "0x%"UVxf" iv(%g => %"IVdf") (imprecise)\n",
1765 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
1766 but the cast (NV)IV_MIN rounds to a the value less (more
1767 negative) than IV_MIN which happens to be equal to SvNVX ??
1768 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
1769 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
1770 (NV)UVX == NVX are both true, but the values differ. :-(
1771 Hopefully for 2s complement IV_MIN is something like
1772 0x8000000000000000 which will be exact. NWC */
1775 SvUVX(sv) = U_V(SvNVX(sv));
1777 (SvNVX(sv) == (NV) SvUVX(sv))
1778 #ifndef NV_PRESERVES_UV
1779 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
1780 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
1781 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
1782 /* Don't flag it as "accurately an integer" if the number
1783 came from a (by definition imprecise) NV operation, and
1784 we're outside the range of NV integer precision */
1790 DEBUG_c(PerlIO_printf(Perl_debug_log,
1791 "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
1795 return (IV)SvUVX(sv);
1798 else if (SvPOKp(sv) && SvLEN(sv)) {
1799 I32 numtype = looks_like_number(sv);
1801 /* We want to avoid a possible problem when we cache an IV which
1802 may be later translated to an NV, and the resulting NV is not
1803 the translation of the initial data.
1805 This means that if we cache such an IV, we need to cache the
1806 NV as well. Moreover, we trade speed for space, and do not
1807 cache the NV if we are sure it's not needed.
1810 if ((numtype & ~IS_NUMBER_NEG) == IS_NUMBER_TO_INT_BY_ATOL) {
1811 /* The NV may be reconstructed from IV - safe to cache IV,
1812 which may be calculated by atol(). */
1813 if (SvTYPE(sv) < SVt_PVIV)
1814 sv_upgrade(sv, SVt_PVIV);
1816 SvIVX(sv) = Atol(SvPVX(sv));
1820 int save_errno = errno;
1821 /* Is it an integer that we could convert with strtol?
1822 So try it, and if it doesn't set errno then it's pukka.
1823 This should be faster than going atof and then thinking. */
1824 if (((numtype & (IS_NUMBER_TO_INT_BY_STRTOL | IS_NUMBER_NOT_INT))
1825 == IS_NUMBER_TO_INT_BY_STRTOL)
1826 /* && is a sequence point. Without it not sure if I'm trying
1827 to do too much between sequence points and hence going
1829 && ((errno = 0), 1) /* , 1 so always true */
1830 && ((i = Strtol(SvPVX(sv), Null(char**), 10)), 1)
1832 if (SvTYPE(sv) < SVt_PVIV)
1833 sv_upgrade(sv, SVt_PVIV);
1842 /* 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));
2069 char *num_begin = SvPVX(sv);
2070 int save_errno = errno;
2072 /* seems that strtoul taking numbers that start with - is
2073 implementation dependant, and can't be relied upon. */
2074 if (numtype & IS_NUMBER_NEG) {
2075 /* Not totally defensive. assumine that looks_like_num
2076 didn't lie about a - sign */
2077 while (isSPACE(*num_begin))
2079 if (*num_begin == '-')
2083 /* Is it an integer that we could convert with strtoul?
2084 So try it, and if it doesn't set errno then it's pukka.
2085 This should be faster than going atof and then thinking. */
2086 if (((numtype & (IS_NUMBER_TO_INT_BY_STRTOL | IS_NUMBER_NOT_INT))
2087 == IS_NUMBER_TO_INT_BY_STRTOL)
2088 && ((errno = 0), 1) /* always true */
2089 && ((u = Strtoul(num_begin, Null(char**), 10)), 1) /* ditto */
2091 /* If known to be negative, check it didn't undeflow IV
2092 XXX possibly we should put more negative values as NVs
2093 direct rather than go via atof below */
2094 && ((numtype & IS_NUMBER_NEG) ? (u <= (UV)IV_MIN) : 1)) {
2097 if (SvTYPE(sv) < SVt_PVIV)
2098 sv_upgrade(sv, SVt_PVIV);
2101 /* If it's negative must use IV.
2102 IV-over-UV optimisation */
2103 if (numtype & IS_NUMBER_NEG) {
2105 } else if (u <= (UV) IV_MAX) {
2108 /* it didn't overflow, and it was positive. */
2117 /* Hopefully trace flow will optimise this away where possible
2121 /* It wasn't an integer, or it overflowed, or we don't have
2122 strtol. Do things the slow way - check if it's a IV etc. */
2123 d = Atof(SvPVX(sv));
2125 if (SvTYPE(sv) < SVt_PVNV)
2126 sv_upgrade(sv, SVt_PVNV);
2129 if (! numtype && ckWARN(WARN_NUMERIC))
2132 #if defined(USE_LONG_DOUBLE)
2133 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%" PERL_PRIgldbl ")\n",
2134 PTR2UV(sv), SvNVX(sv)));
2136 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%g)\n",
2137 PTR2UV(sv), SvNVX(sv)));
2140 #ifdef NV_PRESERVES_UV
2141 (void)SvIOKp_on(sv);
2143 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2144 SvIVX(sv) = I_V(SvNVX(sv));
2145 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2148 /* Integer is imprecise. NOK, IOKp */
2150 /* UV will not work better than IV */
2152 if (SvNVX(sv) > (NV)UV_MAX) {
2154 /* Integer is inaccurate. NOK, IOKp, is UV */
2158 SvUVX(sv) = U_V(SvNVX(sv));
2159 /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2160 NV preservse UV so can do correct comparison. */
2161 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2165 /* Integer is imprecise. NOK, IOKp, is UV */
2170 #else /* NV_PRESERVES_UV */
2171 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2172 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2173 /* Small enough to preserve all bits. */
2174 (void)SvIOKp_on(sv);
2176 SvIVX(sv) = I_V(SvNVX(sv));
2177 if ((NV)(SvIVX(sv)) == SvNVX(sv))
2179 /* Assumption: first non-preserved integer is < IV_MAX,
2180 this NV is in the preserved range, therefore: */
2181 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2183 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);
2186 sv_2iuv_non_preserve (sv, numtype);
2187 #endif /* NV_PRESERVES_UV */
2192 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2193 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2196 if (SvTYPE(sv) < SVt_IV)
2197 /* Typically the caller expects that sv_any is not NULL now. */
2198 sv_upgrade(sv, SVt_IV);
2202 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2203 PTR2UV(sv),SvUVX(sv)));
2204 return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2208 Perl_sv_2nv(pTHX_ register SV *sv)
2212 if (SvGMAGICAL(sv)) {
2216 if (SvPOKp(sv) && SvLEN(sv)) {
2217 if (ckWARN(WARN_NUMERIC) && !SvIOKp(sv) && !looks_like_number(sv))
2219 return Atof(SvPVX(sv));
2223 return (NV)SvUVX(sv);
2225 return (NV)SvIVX(sv);
2228 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2229 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2235 if (SvTHINKFIRST(sv)) {
2238 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
2239 (SvRV(tmpstr) != SvRV(sv)))
2240 return SvNV(tmpstr);
2241 return PTR2NV(SvRV(sv));
2243 if (SvREADONLY(sv) && SvFAKE(sv)) {
2244 sv_force_normal(sv);
2246 if (SvREADONLY(sv) && !SvOK(sv)) {
2247 if (ckWARN(WARN_UNINITIALIZED))
2252 if (SvTYPE(sv) < SVt_NV) {
2253 if (SvTYPE(sv) == SVt_IV)
2254 sv_upgrade(sv, SVt_PVNV);
2256 sv_upgrade(sv, SVt_NV);
2257 #if defined(USE_LONG_DOUBLE)
2259 STORE_NUMERIC_LOCAL_SET_STANDARD();
2260 PerlIO_printf(Perl_debug_log,
2261 "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2262 PTR2UV(sv), SvNVX(sv));
2263 RESTORE_NUMERIC_LOCAL();
2267 STORE_NUMERIC_LOCAL_SET_STANDARD();
2268 PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%g)\n",
2269 PTR2UV(sv), SvNVX(sv));
2270 RESTORE_NUMERIC_LOCAL();
2274 else if (SvTYPE(sv) < SVt_PVNV)
2275 sv_upgrade(sv, SVt_PVNV);
2277 (!SvPOKp(sv) || !strchr(SvPVX(sv),'.') || !looks_like_number(sv)))
2279 SvNVX(sv) = SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv);
2280 #ifdef NV_PRESERVES_UV
2283 /* Only set the public NV OK flag if this NV preserves the IV */
2284 /* Check it's not 0xFFFFFFFFFFFFFFFF */
2285 if (SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2286 : (SvIVX(sv) == I_V(SvNVX(sv))))
2292 else if (SvPOKp(sv) && SvLEN(sv)) {
2293 if (ckWARN(WARN_NUMERIC) && !SvIOKp(sv) && !looks_like_number(sv))
2295 SvNVX(sv) = Atof(SvPVX(sv));
2296 #ifdef NV_PRESERVES_UV
2299 /* Only set the public NV OK flag if this NV preserves the value in
2300 the PV at least as well as an IV/UV would.
2301 Not sure how to do this 100% reliably. */
2302 /* if that shift count is out of range then Configure's test is
2303 wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2305 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2306 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv)))
2307 SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2308 else if (SvNVX(sv) < (NV)IV_MIN || SvNVX(sv) > (NV)UV_MAX) {
2309 /* Definitely too large/small to fit in an integer, so no loss
2310 of precision going to integer in the future via NV */
2313 /* Is it something we can run through strtol etc (ie no
2314 trailing exponent part)? */
2315 int numtype = looks_like_number(sv);
2316 /* XXX probably should cache this if called above */
2319 (IS_NUMBER_TO_INT_BY_ATOL | IS_NUMBER_TO_INT_BY_STRTOL))) {
2320 /* Can't use strtol etc to convert this string, so don't try */
2323 sv_2inuv_non_preserve (sv, numtype);
2325 #endif /* NV_PRESERVES_UV */
2328 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
2330 if (SvTYPE(sv) < SVt_NV)
2331 /* Typically the caller expects that sv_any is not NULL now. */
2332 /* XXX Ilya implies that this is a bug in callers that assume this
2333 and ideally should be fixed. */
2334 sv_upgrade(sv, SVt_NV);
2337 #if defined(USE_LONG_DOUBLE)
2339 STORE_NUMERIC_LOCAL_SET_STANDARD();
2340 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2341 PTR2UV(sv), SvNVX(sv));
2342 RESTORE_NUMERIC_LOCAL();
2346 STORE_NUMERIC_LOCAL_SET_STANDARD();
2347 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%g)\n",
2348 PTR2UV(sv), SvNVX(sv));
2349 RESTORE_NUMERIC_LOCAL();
2356 S_asIV(pTHX_ SV *sv)
2358 I32 numtype = looks_like_number(sv);
2361 if (numtype & IS_NUMBER_TO_INT_BY_ATOL)
2362 return Atol(SvPVX(sv));
2364 if (ckWARN(WARN_NUMERIC))
2367 d = Atof(SvPVX(sv));
2372 S_asUV(pTHX_ SV *sv)
2374 I32 numtype = looks_like_number(sv);
2377 if (numtype & IS_NUMBER_TO_INT_BY_ATOL)
2378 return Strtoul(SvPVX(sv), Null(char**), 10);
2381 if (ckWARN(WARN_NUMERIC))
2384 return U_V(Atof(SvPVX(sv)));
2388 * Returns a combination of (advisory only - can get false negatives)
2389 * IS_NUMBER_TO_INT_BY_ATOL, IS_NUMBER_TO_INT_BY_ATOF
2390 * IS_NUMBER_LONGER_THAN_IV_MAX, IS_NUMBER_AS_LONG_AS_IV_MAX
2391 * IS_NUMBER_NOT_INT, IS_NUMBER_NEG, IS_NUMBER_INFINITY
2392 * 0 if does not look like number.
2394 * (atol and strtol stop when they hit a decimal point. strtol will return
2395 * LONG_MAX and LONG_MIN when given out of range values. ANSI says they should
2396 * do this, and vendors have had 11 years to get it right.
2397 * However, will try to make it still work with only atol
2399 * IS_NUMBER_TO_INT_BY_ATOL 123456789 or 123456789.3 definitely < IV_MAX
2400 * IS_NUMBER_TO_INT_BY_STRTOL 123456789 or 123456789.3 if digits = IV_MAX
2401 * IS_NUMBER_TO_INT_BY_ATOF 123456789e0 or >> IV_MAX
2402 * IS_NUMBER_LONGER_THAN_IV_MAX lots of digits, don't bother with atol
2403 * IS_NUMBER_AS_LONG_AS_IV_MAX atol might hit LONG_MAX, might not.
2404 * IS_NUMBER_NOT_INT saw "." or "e"
2406 * IS_NUMBER_INFINITY
2410 =for apidoc looks_like_number
2412 Test if an the content of an SV looks like a number (or is a
2413 number). C<Inf> and C<Infinity> are treated as numbers (so will not
2414 issue a non-numeric warning), even if your atof() doesn't grok them.
2420 Perl_looks_like_number(pTHX_ SV *sv)
2423 register char *send;
2424 register char *sbegin;
2425 register char *nbegin;
2434 else if (SvPOKp(sv))
2435 sbegin = SvPV(sv, len);
2438 send = sbegin + len;
2445 numtype = IS_NUMBER_NEG;
2452 * we return IS_NUMBER_TO_INT_BY_ATOL if the number can converted to
2453 * integer with atol() without overflow, IS_NUMBER_TO_INT_BY_STRTOL if
2454 * possibly slightly larger than max int, IS_NUMBER_TO_INT_BY_ATOF if you
2455 * will need (int)atof().
2458 /* next must be digit or the radix separator or beginning of infinity */
2462 } while (isDIGIT(*s));
2464 /* Aaargh. long long really is irritating.
2465 In the gospel according to ANSI 1989, it is an axiom that "long"
2466 is the longest integer type, and that if you don't know how long
2467 something is you can cast it to long, and nothing will be lost
2468 (except possibly speed of execution if long is slower than the
2470 Now, one can't be sure if the old rules apply, or long long
2471 (or some other newfangled thing) is actually longer than the
2472 (formerly) longest thing.
2474 /* This lot will work for 64 bit *as long as* either
2475 either long is 64 bit
2476 or we can find both strtol/strtoq and strtoul/strtouq
2477 If not, we really should refuse to let the user use 64 bit IVs
2478 By "64 bit" I really mean IVs that don't get preserved by NVs
2479 It also should work for 128 bit IVs. Can any lend me a machine to
2482 if (s - nbegin > TYPE_DIGITS(UV)) /* Cannot cache ato[ul]() */
2483 numtype |= IS_NUMBER_TO_INT_BY_ATOF | IS_NUMBER_LONGER_THAN_IV_MAX;
2484 else if (s - nbegin < BIT_DIGITS(((sizeof (IV)>sizeof (long))
2485 ? sizeof(long) : sizeof (IV))*8-1))
2486 numtype |= IS_NUMBER_TO_INT_BY_ATOL;
2488 /* Can't be sure either way. (For 64 bit UV, 63 bit IV is 1 decimal
2489 digit less (IV_MAX= 9223372036854775807,
2490 UV_MAX= 18446744073709551615) so be cautious */
2491 numtype |= IS_NUMBER_TO_INT_BY_STRTOL | IS_NUMBER_AS_LONG_AS_IV_MAX;
2494 #ifdef USE_LOCALE_NUMERIC
2495 || IS_NUMERIC_RADIX(*s)
2499 numtype |= IS_NUMBER_NOT_INT;
2500 while (isDIGIT(*s)) /* optional digits after the radix */
2505 #ifdef USE_LOCALE_NUMERIC
2506 || IS_NUMERIC_RADIX(*s)
2510 numtype |= IS_NUMBER_TO_INT_BY_ATOL | IS_NUMBER_NOT_INT;
2511 /* no digits before the radix means we need digits after it */
2515 } while (isDIGIT(*s));
2520 else if (*s == 'I' || *s == 'i') {
2521 s++; if (*s != 'N' && *s != 'n') return 0;
2522 s++; if (*s != 'F' && *s != 'f') return 0;
2523 s++; if (*s == 'I' || *s == 'i') {
2524 s++; if (*s != 'N' && *s != 'n') return 0;
2525 s++; if (*s != 'I' && *s != 'i') return 0;
2526 s++; if (*s != 'T' && *s != 't') return 0;
2527 s++; if (*s != 'Y' && *s != 'y') return 0;
2536 numtype = (numtype & IS_NUMBER_NEG) /* Keep track of sign */
2537 | IS_NUMBER_INFINITY | IS_NUMBER_NOT_INT;
2539 /* we can have an optional exponent part */
2540 if (*s == 'e' || *s == 'E') {
2541 numtype &= IS_NUMBER_NEG;
2542 numtype |= IS_NUMBER_TO_INT_BY_ATOF | IS_NUMBER_NOT_INT;
2544 if (*s == '+' || *s == '-')
2549 } while (isDIGIT(*s));
2559 if (len == 10 && memEQ(sbegin, "0 but true", 10))
2560 return IS_NUMBER_TO_INT_BY_ATOL;
2565 Perl_sv_2pv_nolen(pTHX_ register SV *sv)
2568 return sv_2pv(sv, &n_a);
2571 /* We assume that buf is at least TYPE_CHARS(UV) long. */
2573 uiv_2buf(char *buf, IV iv, UV uv, int is_uv, char **peob)
2575 char *ptr = buf + TYPE_CHARS(UV);
2589 *--ptr = '0' + (uv % 10);
2598 Perl_sv_2pv(pTHX_ register SV *sv, STRLEN *lp)
2603 char tbuf[64]; /* Must fit sprintf/Gconvert of longest IV/NV */
2604 char *tmpbuf = tbuf;
2610 if (SvGMAGICAL(sv)) {
2618 (void)sprintf(tmpbuf,"%"UVuf, (UV)SvUVX(sv));
2620 (void)sprintf(tmpbuf,"%"IVdf, (IV)SvIVX(sv));
2625 Gconvert(SvNVX(sv), NV_DIG, 0, tmpbuf);
2630 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2631 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2638 if (SvTHINKFIRST(sv)) {
2641 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,string)) &&
2642 (SvRV(tmpstr) != SvRV(sv)))
2643 return SvPV(tmpstr,*lp);
2650 switch (SvTYPE(sv)) {
2652 if ( ((SvFLAGS(sv) &
2653 (SVs_OBJECT|SVf_OK|SVs_GMG|SVs_SMG|SVs_RMG))
2654 == (SVs_OBJECT|SVs_RMG))
2655 && strEQ(s=HvNAME(SvSTASH(sv)), "Regexp")
2656 && (mg = mg_find(sv, 'r'))) {
2657 regexp *re = (regexp *)mg->mg_obj;
2660 char *fptr = "msix";
2665 U16 reganch = (re->reganch & PMf_COMPILETIME) >> 12;
2667 while((ch = *fptr++)) {
2669 reflags[left++] = ch;
2672 reflags[right--] = ch;
2677 reflags[left] = '-';
2681 mg->mg_len = re->prelen + 4 + left;
2682 New(616, mg->mg_ptr, mg->mg_len + 1 + left, char);
2683 Copy("(?", mg->mg_ptr, 2, char);
2684 Copy(reflags, mg->mg_ptr+2, left, char);
2685 Copy(":", mg->mg_ptr+left+2, 1, char);
2686 Copy(re->precomp, mg->mg_ptr+3+left, re->prelen, char);
2687 mg->mg_ptr[mg->mg_len - 1] = ')';
2688 mg->mg_ptr[mg->mg_len] = 0;
2690 PL_reginterp_cnt += re->program[0].next_off;
2702 case SVt_PVBM: if (SvROK(sv))
2705 s = "SCALAR"; break;
2706 case SVt_PVLV: s = "LVALUE"; break;
2707 case SVt_PVAV: s = "ARRAY"; break;
2708 case SVt_PVHV: s = "HASH"; break;
2709 case SVt_PVCV: s = "CODE"; break;
2710 case SVt_PVGV: s = "GLOB"; break;
2711 case SVt_PVFM: s = "FORMAT"; break;
2712 case SVt_PVIO: s = "IO"; break;
2713 default: s = "UNKNOWN"; break;
2717 Perl_sv_setpvf(aTHX_ tsv, "%s=%s", HvNAME(SvSTASH(sv)), s);
2720 Perl_sv_catpvf(aTHX_ tsv, "(0x%"UVxf")", PTR2UV(sv));
2726 if (SvREADONLY(sv) && !SvOK(sv)) {
2727 if (ckWARN(WARN_UNINITIALIZED))
2733 if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
2734 /* I'm assuming that if both IV and NV are equally valid then
2735 converting the IV is going to be more efficient */
2736 U32 isIOK = SvIOK(sv);
2737 U32 isUIOK = SvIsUV(sv);
2738 char buf[TYPE_CHARS(UV)];
2741 if (SvTYPE(sv) < SVt_PVIV)
2742 sv_upgrade(sv, SVt_PVIV);
2744 ptr = uiv_2buf(buf, 0, SvUVX(sv), 1, &ebuf);
2746 ptr = uiv_2buf(buf, SvIVX(sv), 0, 0, &ebuf);
2747 SvGROW(sv, ebuf - ptr + 1); /* inlined from sv_setpvn */
2748 Move(ptr,SvPVX(sv),ebuf - ptr,char);
2749 SvCUR_set(sv, ebuf - ptr);
2759 else if (SvNOKp(sv)) {
2760 if (SvTYPE(sv) < SVt_PVNV)
2761 sv_upgrade(sv, SVt_PVNV);
2762 /* The +20 is pure guesswork. Configure test needed. --jhi */
2763 SvGROW(sv, NV_DIG + 20);
2765 olderrno = errno; /* some Xenix systems wipe out errno here */
2767 if (SvNVX(sv) == 0.0)
2768 (void)strcpy(s,"0");
2772 Gconvert(SvNVX(sv), NV_DIG, 0, s);
2775 #ifdef FIXNEGATIVEZERO
2776 if (*s == '-' && s[1] == '0' && !s[2])
2786 if (ckWARN(WARN_UNINITIALIZED)
2787 && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
2790 if (SvTYPE(sv) < SVt_PV)
2791 /* Typically the caller expects that sv_any is not NULL now. */
2792 sv_upgrade(sv, SVt_PV);
2795 *lp = s - SvPVX(sv);
2798 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
2799 PTR2UV(sv),SvPVX(sv)));
2803 if (SvROK(sv)) { /* XXX Skip this when sv_pvn_force calls */
2804 /* Sneaky stuff here */
2808 tsv = newSVpv(tmpbuf, 0);
2824 len = strlen(tmpbuf);
2826 #ifdef FIXNEGATIVEZERO
2827 if (len == 2 && t[0] == '-' && t[1] == '0') {
2832 (void)SvUPGRADE(sv, SVt_PV);
2834 s = SvGROW(sv, len + 1);
2843 Perl_sv_2pvbyte_nolen(pTHX_ register SV *sv)
2846 return sv_2pvbyte(sv, &n_a);
2850 Perl_sv_2pvbyte(pTHX_ register SV *sv, STRLEN *lp)
2852 return sv_2pv(sv,lp);
2856 Perl_sv_2pvutf8_nolen(pTHX_ register SV *sv)
2859 return sv_2pvutf8(sv, &n_a);
2863 Perl_sv_2pvutf8(pTHX_ register SV *sv, STRLEN *lp)
2865 sv_utf8_upgrade(sv);
2866 return SvPV(sv,*lp);
2869 /* This function is only called on magical items */
2871 Perl_sv_2bool(pTHX_ register SV *sv)
2880 if (SvAMAGIC(sv) && (tmpsv=AMG_CALLun(sv,bool_)) &&
2881 (SvRV(tmpsv) != SvRV(sv)))
2882 return SvTRUE(tmpsv);
2883 return SvRV(sv) != 0;
2886 register XPV* Xpvtmp;
2887 if ((Xpvtmp = (XPV*)SvANY(sv)) &&
2888 (*Xpvtmp->xpv_pv > '0' ||
2889 Xpvtmp->xpv_cur > 1 ||
2890 (Xpvtmp->xpv_cur && *Xpvtmp->xpv_pv != '0')))
2897 return SvIVX(sv) != 0;
2900 return SvNVX(sv) != 0.0;
2908 =for apidoc sv_utf8_upgrade
2910 Convert the PV of an SV to its UTF8-encoded form.
2916 Perl_sv_utf8_upgrade(pTHX_ register SV *sv)
2921 if (!sv || !SvPOK(sv) || SvUTF8(sv))
2924 /* This function could be much more efficient if we had a FLAG in SVs
2925 * to signal if there are any hibit chars in the PV.
2926 * Given that there isn't make loop fast as possible
2932 if ((hibit = *t++ & 0x80))
2938 if (SvREADONLY(sv) && SvFAKE(sv)) {
2939 sv_force_normal(sv);
2942 len = SvCUR(sv) + 1; /* Plus the \0 */
2943 SvPVX(sv) = (char*)bytes_to_utf8((U8*)s, &len);
2944 SvCUR(sv) = len - 1;
2946 Safefree(s); /* No longer using what was there before. */
2947 SvLEN(sv) = len; /* No longer know the real size. */
2953 =for apidoc sv_utf8_downgrade
2955 Attempt to convert the PV of an SV from UTF8-encoded to byte encoding.
2956 This may not be possible if the PV contains non-byte encoding characters;
2957 if this is the case, either returns false or, if C<fail_ok> is not
2964 Perl_sv_utf8_downgrade(pTHX_ register SV* sv, bool fail_ok)
2966 if (SvPOK(sv) && SvUTF8(sv)) {
2968 char *c = SvPVX(sv);
2969 STRLEN len = SvCUR(sv);
2971 if (!utf8_to_bytes((U8*)c, &len)) {
2976 Perl_croak(aTHX_ "Wide character in %s",
2977 PL_op_desc[PL_op->op_type]);
2979 Perl_croak(aTHX_ "Wide character");
2991 =for apidoc sv_utf8_encode
2993 Convert the PV of an SV to UTF8-encoded, but then turn off the C<SvUTF8>
2994 flag so that it looks like bytes again. Nothing calls this.
3000 Perl_sv_utf8_encode(pTHX_ register SV *sv)
3002 sv_utf8_upgrade(sv);
3007 Perl_sv_utf8_decode(pTHX_ register SV *sv)
3012 bool has_utf = FALSE;
3013 if (!sv_utf8_downgrade(sv, TRUE))
3016 /* it is actually just a matter of turning the utf8 flag on, but
3017 * we want to make sure everything inside is valid utf8 first.
3020 if (!is_utf8_string((U8*)c, SvCUR(sv)+1))
3034 /* Note: sv_setsv() should not be called with a source string that needs
3035 * to be reused, since it may destroy the source string if it is marked
3040 =for apidoc sv_setsv
3042 Copies the contents of the source SV C<ssv> into the destination SV C<dsv>.
3043 The source SV may be destroyed if it is mortal. Does not handle 'set'
3044 magic. See the macro forms C<SvSetSV>, C<SvSetSV_nosteal> and
3051 Perl_sv_setsv(pTHX_ SV *dstr, register SV *sstr)
3053 register U32 sflags;
3059 SV_CHECK_THINKFIRST(dstr);
3061 sstr = &PL_sv_undef;
3062 stype = SvTYPE(sstr);
3063 dtype = SvTYPE(dstr);
3067 /* There's a lot of redundancy below but we're going for speed here */
3072 if (dtype != SVt_PVGV) {
3073 (void)SvOK_off(dstr);
3081 sv_upgrade(dstr, SVt_IV);
3084 sv_upgrade(dstr, SVt_PVNV);
3088 sv_upgrade(dstr, SVt_PVIV);
3091 (void)SvIOK_only(dstr);
3092 SvIVX(dstr) = SvIVX(sstr);
3095 if (SvTAINTED(sstr))
3106 sv_upgrade(dstr, SVt_NV);
3111 sv_upgrade(dstr, SVt_PVNV);
3114 SvNVX(dstr) = SvNVX(sstr);
3115 (void)SvNOK_only(dstr);
3116 if (SvTAINTED(sstr))
3124 sv_upgrade(dstr, SVt_RV);
3125 else if (dtype == SVt_PVGV &&
3126 SvTYPE(SvRV(sstr)) == SVt_PVGV) {
3129 if (GvIMPORTED(dstr) != GVf_IMPORTED
3130 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3132 GvIMPORTED_on(dstr);
3143 sv_upgrade(dstr, SVt_PV);
3146 if (dtype < SVt_PVIV)
3147 sv_upgrade(dstr, SVt_PVIV);
3150 if (dtype < SVt_PVNV)
3151 sv_upgrade(dstr, SVt_PVNV);
3158 Perl_croak(aTHX_ "Bizarre copy of %s in %s", sv_reftype(sstr, 0),
3159 PL_op_name[PL_op->op_type]);
3161 Perl_croak(aTHX_ "Bizarre copy of %s", sv_reftype(sstr, 0));
3165 if (dtype <= SVt_PVGV) {
3167 if (dtype != SVt_PVGV) {
3168 char *name = GvNAME(sstr);
3169 STRLEN len = GvNAMELEN(sstr);
3170 sv_upgrade(dstr, SVt_PVGV);
3171 sv_magic(dstr, dstr, '*', Nullch, 0);
3172 GvSTASH(dstr) = (HV*)SvREFCNT_inc(GvSTASH(sstr));
3173 GvNAME(dstr) = savepvn(name, len);
3174 GvNAMELEN(dstr) = len;
3175 SvFAKE_on(dstr); /* can coerce to non-glob */
3177 /* ahem, death to those who redefine active sort subs */
3178 else if (PL_curstackinfo->si_type == PERLSI_SORT
3179 && GvCV(dstr) && PL_sortcop == CvSTART(GvCV(dstr)))
3180 Perl_croak(aTHX_ "Can't redefine active sort subroutine %s",
3182 (void)SvOK_off(dstr);
3183 GvINTRO_off(dstr); /* one-shot flag */
3185 GvGP(dstr) = gp_ref(GvGP(sstr));
3186 if (SvTAINTED(sstr))
3188 if (GvIMPORTED(dstr) != GVf_IMPORTED
3189 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3191 GvIMPORTED_on(dstr);
3199 if (SvGMAGICAL(sstr)) {
3201 if (SvTYPE(sstr) != stype) {
3202 stype = SvTYPE(sstr);
3203 if (stype == SVt_PVGV && dtype <= SVt_PVGV)
3207 if (stype == SVt_PVLV)
3208 (void)SvUPGRADE(dstr, SVt_PVNV);
3210 (void)SvUPGRADE(dstr, stype);
3213 sflags = SvFLAGS(sstr);
3215 if (sflags & SVf_ROK) {
3216 if (dtype >= SVt_PV) {
3217 if (dtype == SVt_PVGV) {
3218 SV *sref = SvREFCNT_inc(SvRV(sstr));
3220 int intro = GvINTRO(dstr);
3225 GvINTRO_off(dstr); /* one-shot flag */
3226 Newz(602,gp, 1, GP);
3227 GvGP(dstr) = gp_ref(gp);
3228 GvSV(dstr) = NEWSV(72,0);
3229 GvLINE(dstr) = CopLINE(PL_curcop);
3230 GvEGV(dstr) = (GV*)dstr;
3233 switch (SvTYPE(sref)) {
3236 SAVESPTR(GvAV(dstr));
3238 dref = (SV*)GvAV(dstr);
3239 GvAV(dstr) = (AV*)sref;
3240 if (!GvIMPORTED_AV(dstr)
3241 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3243 GvIMPORTED_AV_on(dstr);
3248 SAVESPTR(GvHV(dstr));
3250 dref = (SV*)GvHV(dstr);
3251 GvHV(dstr) = (HV*)sref;
3252 if (!GvIMPORTED_HV(dstr)
3253 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3255 GvIMPORTED_HV_on(dstr);
3260 if (GvCVGEN(dstr) && GvCV(dstr) != (CV*)sref) {
3261 SvREFCNT_dec(GvCV(dstr));
3262 GvCV(dstr) = Nullcv;
3263 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3264 PL_sub_generation++;
3266 SAVESPTR(GvCV(dstr));
3269 dref = (SV*)GvCV(dstr);
3270 if (GvCV(dstr) != (CV*)sref) {
3271 CV* cv = GvCV(dstr);
3273 if (!GvCVGEN((GV*)dstr) &&
3274 (CvROOT(cv) || CvXSUB(cv)))
3277 /* ahem, death to those who redefine
3278 * active sort subs */
3279 if (PL_curstackinfo->si_type == PERLSI_SORT &&
3280 PL_sortcop == CvSTART(cv))
3282 "Can't redefine active sort subroutine %s",
3283 GvENAME((GV*)dstr));
3284 /* Redefining a sub - warning is mandatory if
3285 it was a const and its value changed. */
3286 if (ckWARN(WARN_REDEFINE)
3288 && (!CvCONST((CV*)sref)
3289 || sv_cmp(cv_const_sv(cv),
3290 cv_const_sv((CV*)sref)))))
3292 Perl_warner(aTHX_ WARN_REDEFINE,
3294 ? "Constant subroutine %s redefined"
3295 : "Subroutine %s redefined",
3296 GvENAME((GV*)dstr));
3299 cv_ckproto(cv, (GV*)dstr,
3300 SvPOK(sref) ? SvPVX(sref) : Nullch);
3302 GvCV(dstr) = (CV*)sref;
3303 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3304 GvASSUMECV_on(dstr);
3305 PL_sub_generation++;
3307 if (!GvIMPORTED_CV(dstr)
3308 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3310 GvIMPORTED_CV_on(dstr);
3315 SAVESPTR(GvIOp(dstr));
3317 dref = (SV*)GvIOp(dstr);
3318 GvIOp(dstr) = (IO*)sref;
3322 SAVESPTR(GvFORM(dstr));
3324 dref = (SV*)GvFORM(dstr);
3325 GvFORM(dstr) = (CV*)sref;
3329 SAVESPTR(GvSV(dstr));
3331 dref = (SV*)GvSV(dstr);
3333 if (!GvIMPORTED_SV(dstr)
3334 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3336 GvIMPORTED_SV_on(dstr);
3344 if (SvTAINTED(sstr))
3349 (void)SvOOK_off(dstr); /* backoff */
3351 Safefree(SvPVX(dstr));
3352 SvLEN(dstr)=SvCUR(dstr)=0;
3355 (void)SvOK_off(dstr);
3356 SvRV(dstr) = SvREFCNT_inc(SvRV(sstr));
3358 if (sflags & SVp_NOK) {
3360 SvNVX(dstr) = SvNVX(sstr);
3362 if (sflags & SVp_IOK) {
3363 (void)SvIOK_on(dstr);
3364 SvIVX(dstr) = SvIVX(sstr);
3365 if (sflags & SVf_IVisUV)
3368 if (SvAMAGIC(sstr)) {
3372 else if (sflags & SVp_POK) {
3375 * Check to see if we can just swipe the string. If so, it's a
3376 * possible small lose on short strings, but a big win on long ones.
3377 * It might even be a win on short strings if SvPVX(dstr)
3378 * has to be allocated and SvPVX(sstr) has to be freed.
3381 if (SvTEMP(sstr) && /* slated for free anyway? */
3382 SvREFCNT(sstr) == 1 && /* and no other references to it? */
3383 !(sflags & SVf_OOK) && /* and not involved in OOK hack? */
3384 SvLEN(sstr) && /* and really is a string */
3385 !(PL_op && PL_op->op_type == OP_AASSIGN)) /* and won't be needed again, potentially */
3387 if (SvPVX(dstr)) { /* we know that dtype >= SVt_PV */
3389 SvFLAGS(dstr) &= ~SVf_OOK;
3390 Safefree(SvPVX(dstr) - SvIVX(dstr));
3392 else if (SvLEN(dstr))
3393 Safefree(SvPVX(dstr));
3395 (void)SvPOK_only(dstr);
3396 SvPV_set(dstr, SvPVX(sstr));
3397 SvLEN_set(dstr, SvLEN(sstr));
3398 SvCUR_set(dstr, SvCUR(sstr));
3401 (void)SvOK_off(sstr); /* NOTE: nukes most SvFLAGS on sstr */
3402 SvPV_set(sstr, Nullch);
3407 else { /* have to copy actual string */
3408 STRLEN len = SvCUR(sstr);
3410 SvGROW(dstr, len + 1); /* inlined from sv_setpvn */
3411 Move(SvPVX(sstr),SvPVX(dstr),len,char);
3412 SvCUR_set(dstr, len);
3413 *SvEND(dstr) = '\0';
3414 (void)SvPOK_only(dstr);
3416 if ((sflags & SVf_UTF8) && !IN_BYTE)
3419 if (sflags & SVp_NOK) {
3421 SvNVX(dstr) = SvNVX(sstr);
3423 if (sflags & SVp_IOK) {
3424 (void)SvIOK_on(dstr);
3425 SvIVX(dstr) = SvIVX(sstr);
3426 if (sflags & SVf_IVisUV)
3430 else if (sflags & SVp_NOK) {
3431 SvNVX(dstr) = SvNVX(sstr);
3432 (void)SvNOK_only(dstr);
3433 if (sflags & SVf_IOK) {
3434 (void)SvIOK_on(dstr);
3435 SvIVX(dstr) = SvIVX(sstr);
3436 /* XXXX Do we want to set IsUV for IV(ROK)? Be extra safe... */
3437 if (sflags & SVf_IVisUV)
3441 else if (sflags & SVp_IOK) {
3442 (void)SvIOK_only(dstr);
3443 SvIVX(dstr) = SvIVX(sstr);
3444 if (sflags & SVf_IVisUV)
3448 if (dtype == SVt_PVGV) {
3449 if (ckWARN(WARN_MISC))
3450 Perl_warner(aTHX_ WARN_MISC, "Undefined value assigned to typeglob");
3453 (void)SvOK_off(dstr);
3455 if (SvTAINTED(sstr))
3460 =for apidoc sv_setsv_mg
3462 Like C<sv_setsv>, but also handles 'set' magic.
3468 Perl_sv_setsv_mg(pTHX_ SV *dstr, register SV *sstr)
3470 sv_setsv(dstr,sstr);
3475 =for apidoc sv_setpvn
3477 Copies a string into an SV. The C<len> parameter indicates the number of
3478 bytes to be copied. Does not handle 'set' magic. See C<sv_setpvn_mg>.
3484 Perl_sv_setpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3486 register char *dptr;
3488 /* len is STRLEN which is unsigned, need to copy to signed */
3492 SV_CHECK_THINKFIRST(sv);
3497 (void)SvUPGRADE(sv, SVt_PV);
3499 SvGROW(sv, len + 1);
3501 Move(ptr,dptr,len,char);
3504 (void)SvPOK_only(sv); /* validate pointer */
3509 =for apidoc sv_setpvn_mg
3511 Like C<sv_setpvn>, but also handles 'set' magic.
3517 Perl_sv_setpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3519 sv_setpvn(sv,ptr,len);
3524 =for apidoc sv_setpv
3526 Copies a string into an SV. The string must be null-terminated. Does not
3527 handle 'set' magic. See C<sv_setpv_mg>.
3533 Perl_sv_setpv(pTHX_ register SV *sv, register const char *ptr)
3535 register STRLEN len;
3537 SV_CHECK_THINKFIRST(sv);
3543 (void)SvUPGRADE(sv, SVt_PV);
3545 SvGROW(sv, len + 1);
3546 Move(ptr,SvPVX(sv),len+1,char);
3548 (void)SvPOK_only(sv); /* validate pointer */
3553 =for apidoc sv_setpv_mg
3555 Like C<sv_setpv>, but also handles 'set' magic.
3561 Perl_sv_setpv_mg(pTHX_ register SV *sv, register const char *ptr)
3568 =for apidoc sv_usepvn
3570 Tells an SV to use C<ptr> to find its string value. Normally the string is
3571 stored inside the SV but sv_usepvn allows the SV to use an outside string.
3572 The C<ptr> should point to memory that was allocated by C<malloc>. The
3573 string length, C<len>, must be supplied. This function will realloc the
3574 memory pointed to by C<ptr>, so that pointer should not be freed or used by
3575 the programmer after giving it to sv_usepvn. Does not handle 'set' magic.
3576 See C<sv_usepvn_mg>.
3582 Perl_sv_usepvn(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
3584 SV_CHECK_THINKFIRST(sv);
3585 (void)SvUPGRADE(sv, SVt_PV);
3590 (void)SvOOK_off(sv);
3591 if (SvPVX(sv) && SvLEN(sv))
3592 Safefree(SvPVX(sv));
3593 Renew(ptr, len+1, char);
3596 SvLEN_set(sv, len+1);
3598 (void)SvPOK_only(sv); /* validate pointer */
3603 =for apidoc sv_usepvn_mg
3605 Like C<sv_usepvn>, but also handles 'set' magic.
3611 Perl_sv_usepvn_mg(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
3613 sv_usepvn(sv,ptr,len);
3618 Perl_sv_force_normal_flags(pTHX_ register SV *sv, U32 flags)
3620 if (SvREADONLY(sv)) {
3622 char *pvx = SvPVX(sv);
3623 STRLEN len = SvCUR(sv);
3624 U32 hash = SvUVX(sv);
3625 SvGROW(sv, len + 1);
3626 Move(pvx,SvPVX(sv),len,char);
3630 unsharepvn(pvx,SvUTF8(sv)?-len:len,hash);
3632 else if (PL_curcop != &PL_compiling)
3633 Perl_croak(aTHX_ PL_no_modify);
3636 sv_unref_flags(sv, flags);
3637 else if (SvFAKE(sv) && SvTYPE(sv) == SVt_PVGV)
3642 Perl_sv_force_normal(pTHX_ register SV *sv)
3644 sv_force_normal_flags(sv, 0);
3650 Efficient removal of characters from the beginning of the string buffer.
3651 SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
3652 the string buffer. The C<ptr> becomes the first character of the adjusted
3659 Perl_sv_chop(pTHX_ register SV *sv, register char *ptr) /* like set but assuming ptr is in sv */
3663 register STRLEN delta;
3665 if (!ptr || !SvPOKp(sv))
3667 SV_CHECK_THINKFIRST(sv);
3668 if (SvTYPE(sv) < SVt_PVIV)
3669 sv_upgrade(sv,SVt_PVIV);
3672 if (!SvLEN(sv)) { /* make copy of shared string */
3673 char *pvx = SvPVX(sv);
3674 STRLEN len = SvCUR(sv);
3675 SvGROW(sv, len + 1);
3676 Move(pvx,SvPVX(sv),len,char);
3680 SvFLAGS(sv) |= SVf_OOK;
3682 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVp_IOK|SVp_NOK|SVf_IVisUV);
3683 delta = ptr - SvPVX(sv);
3691 =for apidoc sv_catpvn
3693 Concatenates the string onto the end of the string which is in the SV. The
3694 C<len> indicates number of bytes to copy. Handles 'get' magic, but not
3695 'set' magic. See C<sv_catpvn_mg>.
3701 Perl_sv_catpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3706 junk = SvPV_force(sv, tlen);
3707 SvGROW(sv, tlen + len + 1);
3710 Move(ptr,SvPVX(sv)+tlen,len,char);
3713 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3718 =for apidoc sv_catpvn_mg
3720 Like C<sv_catpvn>, but also handles 'set' magic.
3726 Perl_sv_catpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3728 sv_catpvn(sv,ptr,len);
3733 =for apidoc sv_catsv
3735 Concatenates the string from SV C<ssv> onto the end of the string in SV
3736 C<dsv>. Handles 'get' magic, but not 'set' magic. See C<sv_catsv_mg>.
3742 Perl_sv_catsv(pTHX_ SV *dstr, register SV *sstr)
3748 if ((s = SvPV(sstr, len))) {
3749 if (DO_UTF8(sstr)) {
3750 sv_utf8_upgrade(dstr);
3751 sv_catpvn(dstr,s,len);
3755 sv_catpvn(dstr,s,len);
3760 =for apidoc sv_catsv_mg
3762 Like C<sv_catsv>, but also handles 'set' magic.
3768 Perl_sv_catsv_mg(pTHX_ SV *dstr, register SV *sstr)
3770 sv_catsv(dstr,sstr);
3775 =for apidoc sv_catpv
3777 Concatenates the string onto the end of the string which is in the SV.
3778 Handles 'get' magic, but not 'set' magic. See C<sv_catpv_mg>.
3784 Perl_sv_catpv(pTHX_ register SV *sv, register const char *ptr)
3786 register STRLEN len;
3792 junk = SvPV_force(sv, tlen);
3794 SvGROW(sv, tlen + len + 1);
3797 Move(ptr,SvPVX(sv)+tlen,len+1,char);
3799 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3804 =for apidoc sv_catpv_mg
3806 Like C<sv_catpv>, but also handles 'set' magic.
3812 Perl_sv_catpv_mg(pTHX_ register SV *sv, register const char *ptr)
3819 Perl_newSV(pTHX_ STRLEN len)
3825 sv_upgrade(sv, SVt_PV);
3826 SvGROW(sv, len + 1);
3831 /* name is assumed to contain an SV* if (name && namelen == HEf_SVKEY) */
3834 =for apidoc sv_magic
3836 Adds magic to an SV.
3842 Perl_sv_magic(pTHX_ register SV *sv, SV *obj, int how, const char *name, I32 namlen)
3846 if (SvREADONLY(sv)) {
3847 if (PL_curcop != &PL_compiling && !strchr("gBf", how))
3848 Perl_croak(aTHX_ PL_no_modify);
3850 if (SvMAGICAL(sv) || (how == 't' && SvTYPE(sv) >= SVt_PVMG)) {
3851 if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
3858 (void)SvUPGRADE(sv, SVt_PVMG);
3860 Newz(702,mg, 1, MAGIC);
3861 mg->mg_moremagic = SvMAGIC(sv);
3864 if (!obj || obj == sv || how == '#' || how == 'r')
3867 mg->mg_obj = SvREFCNT_inc(obj);
3868 mg->mg_flags |= MGf_REFCOUNTED;
3871 mg->mg_len = namlen;
3874 mg->mg_ptr = savepvn(name, namlen);
3875 else if (namlen == HEf_SVKEY)
3876 mg->mg_ptr = (char*)SvREFCNT_inc((SV*)name);
3880 mg->mg_virtual = &PL_vtbl_sv;
3883 mg->mg_virtual = &PL_vtbl_amagic;
3886 mg->mg_virtual = &PL_vtbl_amagicelem;
3892 mg->mg_virtual = &PL_vtbl_bm;
3895 mg->mg_virtual = &PL_vtbl_regdata;
3898 mg->mg_virtual = &PL_vtbl_regdatum;
3901 mg->mg_virtual = &PL_vtbl_env;
3904 mg->mg_virtual = &PL_vtbl_fm;
3907 mg->mg_virtual = &PL_vtbl_envelem;
3910 mg->mg_virtual = &PL_vtbl_mglob;
3913 mg->mg_virtual = &PL_vtbl_isa;
3916 mg->mg_virtual = &PL_vtbl_isaelem;
3919 mg->mg_virtual = &PL_vtbl_nkeys;
3926 mg->mg_virtual = &PL_vtbl_dbline;
3930 mg->mg_virtual = &PL_vtbl_mutex;
3932 #endif /* USE_THREADS */
3933 #ifdef USE_LOCALE_COLLATE
3935 mg->mg_virtual = &PL_vtbl_collxfrm;
3937 #endif /* USE_LOCALE_COLLATE */
3939 mg->mg_virtual = &PL_vtbl_pack;
3943 mg->mg_virtual = &PL_vtbl_packelem;
3946 mg->mg_virtual = &PL_vtbl_regexp;
3949 mg->mg_virtual = &PL_vtbl_sig;
3952 mg->mg_virtual = &PL_vtbl_sigelem;
3955 mg->mg_virtual = &PL_vtbl_taint;
3959 mg->mg_virtual = &PL_vtbl_uvar;
3962 mg->mg_virtual = &PL_vtbl_vec;
3965 mg->mg_virtual = &PL_vtbl_substr;
3968 mg->mg_virtual = &PL_vtbl_defelem;
3971 mg->mg_virtual = &PL_vtbl_glob;
3974 mg->mg_virtual = &PL_vtbl_arylen;
3977 mg->mg_virtual = &PL_vtbl_pos;
3980 mg->mg_virtual = &PL_vtbl_backref;
3982 case '~': /* Reserved for use by extensions not perl internals. */
3983 /* Useful for attaching extension internal data to perl vars. */
3984 /* Note that multiple extensions may clash if magical scalars */
3985 /* etc holding private data from one are passed to another. */
3989 Perl_croak(aTHX_ "Don't know how to handle magic of type '%c'", how);
3993 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
3997 =for apidoc sv_unmagic
3999 Removes magic from an SV.
4005 Perl_sv_unmagic(pTHX_ SV *sv, int type)
4009 if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
4012 for (mg = *mgp; mg; mg = *mgp) {
4013 if (mg->mg_type == type) {
4014 MGVTBL* vtbl = mg->mg_virtual;
4015 *mgp = mg->mg_moremagic;
4016 if (vtbl && vtbl->svt_free)
4017 CALL_FPTR(vtbl->svt_free)(aTHX_ sv, mg);
4018 if (mg->mg_ptr && mg->mg_type != 'g')
4019 if (mg->mg_len >= 0)
4020 Safefree(mg->mg_ptr);
4021 else if (mg->mg_len == HEf_SVKEY)
4022 SvREFCNT_dec((SV*)mg->mg_ptr);
4023 if (mg->mg_flags & MGf_REFCOUNTED)
4024 SvREFCNT_dec(mg->mg_obj);
4028 mgp = &mg->mg_moremagic;
4032 SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
4039 =for apidoc sv_rvweaken
4047 Perl_sv_rvweaken(pTHX_ SV *sv)
4050 if (!SvOK(sv)) /* let undefs pass */
4053 Perl_croak(aTHX_ "Can't weaken a nonreference");
4054 else if (SvWEAKREF(sv)) {
4055 if (ckWARN(WARN_MISC))
4056 Perl_warner(aTHX_ WARN_MISC, "Reference is already weak");
4060 sv_add_backref(tsv, sv);
4067 S_sv_add_backref(pTHX_ SV *tsv, SV *sv)
4071 if (SvMAGICAL(tsv) && (mg = mg_find(tsv, '<')))
4072 av = (AV*)mg->mg_obj;
4075 sv_magic(tsv, (SV*)av, '<', NULL, 0);
4076 SvREFCNT_dec(av); /* for sv_magic */
4082 S_sv_del_backref(pTHX_ SV *sv)
4089 if (!SvMAGICAL(tsv) || !(mg = mg_find(tsv, '<')))
4090 Perl_croak(aTHX_ "panic: del_backref");
4091 av = (AV *)mg->mg_obj;
4096 svp[i] = &PL_sv_undef; /* XXX */
4103 =for apidoc sv_insert
4105 Inserts a string at the specified offset/length within the SV. Similar to
4106 the Perl substr() function.
4112 Perl_sv_insert(pTHX_ SV *bigstr, STRLEN offset, STRLEN len, char *little, STRLEN littlelen)
4116 register char *midend;
4117 register char *bigend;
4123 Perl_croak(aTHX_ "Can't modify non-existent substring");
4124 SvPV_force(bigstr, curlen);
4125 (void)SvPOK_only_UTF8(bigstr);
4126 if (offset + len > curlen) {
4127 SvGROW(bigstr, offset+len+1);
4128 Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
4129 SvCUR_set(bigstr, offset+len);
4133 i = littlelen - len;
4134 if (i > 0) { /* string might grow */
4135 big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
4136 mid = big + offset + len;
4137 midend = bigend = big + SvCUR(bigstr);
4140 while (midend > mid) /* shove everything down */
4141 *--bigend = *--midend;
4142 Move(little,big+offset,littlelen,char);
4148 Move(little,SvPVX(bigstr)+offset,len,char);
4153 big = SvPVX(bigstr);
4156 bigend = big + SvCUR(bigstr);
4158 if (midend > bigend)
4159 Perl_croak(aTHX_ "panic: sv_insert");
4161 if (mid - big > bigend - midend) { /* faster to shorten from end */
4163 Move(little, mid, littlelen,char);
4166 i = bigend - midend;
4168 Move(midend, mid, i,char);
4172 SvCUR_set(bigstr, mid - big);
4175 else if ((i = mid - big)) { /* faster from front */
4176 midend -= littlelen;
4178 sv_chop(bigstr,midend-i);
4183 Move(little, mid, littlelen,char);
4185 else if (littlelen) {
4186 midend -= littlelen;
4187 sv_chop(bigstr,midend);
4188 Move(little,midend,littlelen,char);
4191 sv_chop(bigstr,midend);
4197 =for apidoc sv_replace
4199 Make the first argument a copy of the second, then delete the original.
4205 Perl_sv_replace(pTHX_ register SV *sv, register SV *nsv)
4207 U32 refcnt = SvREFCNT(sv);
4208 SV_CHECK_THINKFIRST(sv);
4209 if (SvREFCNT(nsv) != 1 && ckWARN_d(WARN_INTERNAL))
4210 Perl_warner(aTHX_ WARN_INTERNAL, "Reference miscount in sv_replace()");
4211 if (SvMAGICAL(sv)) {
4215 sv_upgrade(nsv, SVt_PVMG);
4216 SvMAGIC(nsv) = SvMAGIC(sv);
4217 SvFLAGS(nsv) |= SvMAGICAL(sv);
4223 assert(!SvREFCNT(sv));
4224 StructCopy(nsv,sv,SV);
4225 SvREFCNT(sv) = refcnt;
4226 SvFLAGS(nsv) |= SVTYPEMASK; /* Mark as freed */
4231 =for apidoc sv_clear
4233 Clear an SV, making it empty. Does not free the memory used by the SV
4240 Perl_sv_clear(pTHX_ register SV *sv)
4244 assert(SvREFCNT(sv) == 0);
4247 if (PL_defstash) { /* Still have a symbol table? */
4252 Zero(&tmpref, 1, SV);
4253 sv_upgrade(&tmpref, SVt_RV);
4255 SvREADONLY_on(&tmpref); /* DESTROY() could be naughty */
4256 SvREFCNT(&tmpref) = 1;
4259 stash = SvSTASH(sv);
4260 destructor = StashHANDLER(stash,DESTROY);
4263 PUSHSTACKi(PERLSI_DESTROY);
4264 SvRV(&tmpref) = SvREFCNT_inc(sv);
4269 call_sv((SV*)destructor, G_DISCARD|G_EVAL|G_KEEPERR);
4275 } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
4277 del_XRV(SvANY(&tmpref));
4280 if (PL_in_clean_objs)
4281 Perl_croak(aTHX_ "DESTROY created new reference to dead object '%s'",
4283 /* DESTROY gave object new lease on life */
4289 SvREFCNT_dec(SvSTASH(sv)); /* possibly of changed persuasion */
4290 SvOBJECT_off(sv); /* Curse the object. */
4291 if (SvTYPE(sv) != SVt_PVIO)
4292 --PL_sv_objcount; /* XXX Might want something more general */
4295 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv))
4298 switch (SvTYPE(sv)) {
4301 IoIFP(sv) != PerlIO_stdin() &&
4302 IoIFP(sv) != PerlIO_stdout() &&
4303 IoIFP(sv) != PerlIO_stderr())
4305 io_close((IO*)sv, FALSE);
4307 if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
4308 PerlDir_close(IoDIRP(sv));
4309 IoDIRP(sv) = (DIR*)NULL;
4310 Safefree(IoTOP_NAME(sv));
4311 Safefree(IoFMT_NAME(sv));
4312 Safefree(IoBOTTOM_NAME(sv));
4327 SvREFCNT_dec(LvTARG(sv));
4331 Safefree(GvNAME(sv));
4332 /* cannot decrease stash refcount yet, as we might recursively delete
4333 ourselves when the refcnt drops to zero. Delay SvREFCNT_dec
4334 of stash until current sv is completely gone.
4335 -- JohnPC, 27 Mar 1998 */
4336 stash = GvSTASH(sv);
4342 (void)SvOOK_off(sv);
4350 SvREFCNT_dec(SvRV(sv));
4352 else if (SvPVX(sv) && SvLEN(sv))
4353 Safefree(SvPVX(sv));
4354 else if (SvPVX(sv) && SvREADONLY(sv) && SvFAKE(sv)) {
4355 unsharepvn(SvPVX(sv),SvUTF8(sv)?-SvCUR(sv):SvCUR(sv),SvUVX(sv));
4367 switch (SvTYPE(sv)) {
4383 del_XPVIV(SvANY(sv));
4386 del_XPVNV(SvANY(sv));
4389 del_XPVMG(SvANY(sv));
4392 del_XPVLV(SvANY(sv));
4395 del_XPVAV(SvANY(sv));
4398 del_XPVHV(SvANY(sv));
4401 del_XPVCV(SvANY(sv));
4404 del_XPVGV(SvANY(sv));
4405 /* code duplication for increased performance. */
4406 SvFLAGS(sv) &= SVf_BREAK;
4407 SvFLAGS(sv) |= SVTYPEMASK;
4408 /* decrease refcount of the stash that owns this GV, if any */
4410 SvREFCNT_dec(stash);
4411 return; /* not break, SvFLAGS reset already happened */
4413 del_XPVBM(SvANY(sv));
4416 del_XPVFM(SvANY(sv));
4419 del_XPVIO(SvANY(sv));
4422 SvFLAGS(sv) &= SVf_BREAK;
4423 SvFLAGS(sv) |= SVTYPEMASK;
4427 Perl_sv_newref(pTHX_ SV *sv)
4430 ATOMIC_INC(SvREFCNT(sv));
4437 Free the memory used by an SV.
4443 Perl_sv_free(pTHX_ SV *sv)
4445 int refcount_is_zero;
4449 if (SvREFCNT(sv) == 0) {
4450 if (SvFLAGS(sv) & SVf_BREAK)
4452 if (PL_in_clean_all) /* All is fair */
4454 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
4455 /* make sure SvREFCNT(sv)==0 happens very seldom */
4456 SvREFCNT(sv) = (~(U32)0)/2;
4459 if (ckWARN_d(WARN_INTERNAL))
4460 Perl_warner(aTHX_ WARN_INTERNAL, "Attempt to free unreferenced scalar");
4463 ATOMIC_DEC_AND_TEST(refcount_is_zero, SvREFCNT(sv));
4464 if (!refcount_is_zero)
4468 if (ckWARN_d(WARN_DEBUGGING))
4469 Perl_warner(aTHX_ WARN_DEBUGGING,
4470 "Attempt to free temp prematurely: SV 0x%"UVxf,
4475 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
4476 /* make sure SvREFCNT(sv)==0 happens very seldom */
4477 SvREFCNT(sv) = (~(U32)0)/2;
4488 Returns the length of the string in the SV. See also C<SvCUR>.
4494 Perl_sv_len(pTHX_ register SV *sv)
4503 len = mg_length(sv);
4505 junk = SvPV(sv, len);
4510 =for apidoc sv_len_utf8
4512 Returns the number of characters in the string in an SV, counting wide
4513 UTF8 bytes as a single character.
4519 Perl_sv_len_utf8(pTHX_ register SV *sv)
4525 return mg_length(sv);
4529 U8 *s = (U8*)SvPV(sv, len);
4531 return Perl_utf8_length(aTHX_ s, s + len);
4536 Perl_sv_pos_u2b(pTHX_ register SV *sv, I32* offsetp, I32* lenp)
4541 I32 uoffset = *offsetp;
4547 start = s = (U8*)SvPV(sv, len);
4549 while (s < send && uoffset--)
4553 *offsetp = s - start;
4557 while (s < send && ulen--)
4567 Perl_sv_pos_b2u(pTHX_ register SV *sv, I32* offsetp)
4576 s = (U8*)SvPV(sv, len);
4578 Perl_croak(aTHX_ "panic: bad byte offset");
4579 send = s + *offsetp;
4586 if (ckWARN_d(WARN_UTF8))
4587 Perl_warner(aTHX_ WARN_UTF8, "Malformed UTF-8 character");
4597 Returns a boolean indicating whether the strings in the two SVs are
4604 Perl_sv_eq(pTHX_ register SV *sv1, register SV *sv2)
4611 bool pv1tmp = FALSE;
4612 bool pv2tmp = FALSE;
4619 pv1 = SvPV(sv1, cur1);
4626 pv2 = SvPV(sv2, cur2);
4628 /* do not utf8ize the comparands as a side-effect */
4629 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTE) {
4631 pv2 = (char*)bytes_to_utf8((U8*)pv2, &cur2);
4635 pv1 = (char*)bytes_to_utf8((U8*)pv1, &cur1);
4641 eq = memEQ(pv1, pv2, cur1);
4654 Compares the strings in two SVs. Returns -1, 0, or 1 indicating whether the
4655 string in C<sv1> is less than, equal to, or greater than the string in
4662 Perl_sv_cmp(pTHX_ register SV *sv1, register SV *sv2)
4667 bool pv1tmp = FALSE;
4668 bool pv2tmp = FALSE;
4675 pv1 = SvPV(sv1, cur1);
4682 pv2 = SvPV(sv2, cur2);
4684 /* do not utf8ize the comparands as a side-effect */
4685 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTE) {
4687 pv2 = (char*)bytes_to_utf8((U8*)pv2, &cur2);
4691 pv1 = (char*)bytes_to_utf8((U8*)pv1, &cur1);
4697 cmp = cur2 ? -1 : 0;
4701 I32 retval = memcmp((void*)pv1, (void*)pv2, cur1 < cur2 ? cur1 : cur2);
4704 cmp = retval < 0 ? -1 : 1;
4705 } else if (cur1 == cur2) {
4708 cmp = cur1 < cur2 ? -1 : 1;
4721 =for apidoc sv_cmp_locale
4723 Compares the strings in two SVs in a locale-aware manner. See
4730 Perl_sv_cmp_locale(pTHX_ register SV *sv1, register SV *sv2)
4732 #ifdef USE_LOCALE_COLLATE
4738 if (PL_collation_standard)
4742 pv1 = sv1 ? sv_collxfrm(sv1, &len1) : (char *) NULL;
4744 pv2 = sv2 ? sv_collxfrm(sv2, &len2) : (char *) NULL;
4746 if (!pv1 || !len1) {
4757 retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
4760 return retval < 0 ? -1 : 1;
4763 * When the result of collation is equality, that doesn't mean
4764 * that there are no differences -- some locales exclude some
4765 * characters from consideration. So to avoid false equalities,
4766 * we use the raw string as a tiebreaker.
4772 #endif /* USE_LOCALE_COLLATE */
4774 return sv_cmp(sv1, sv2);
4777 #ifdef USE_LOCALE_COLLATE
4779 * Any scalar variable may carry an 'o' magic that contains the
4780 * scalar data of the variable transformed to such a format that
4781 * a normal memory comparison can be used to compare the data
4782 * according to the locale settings.
4785 Perl_sv_collxfrm(pTHX_ SV *sv, STRLEN *nxp)
4789 mg = SvMAGICAL(sv) ? mg_find(sv, 'o') : (MAGIC *) NULL;
4790 if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
4795 Safefree(mg->mg_ptr);
4797 if ((xf = mem_collxfrm(s, len, &xlen))) {
4798 if (SvREADONLY(sv)) {
4801 return xf + sizeof(PL_collation_ix);
4804 sv_magic(sv, 0, 'o', 0, 0);
4805 mg = mg_find(sv, 'o');
4818 if (mg && mg->mg_ptr) {
4820 return mg->mg_ptr + sizeof(PL_collation_ix);
4828 #endif /* USE_LOCALE_COLLATE */
4833 Get a line from the filehandle and store it into the SV, optionally
4834 appending to the currently-stored string.
4840 Perl_sv_gets(pTHX_ register SV *sv, register PerlIO *fp, I32 append)
4844 register STDCHAR rslast;
4845 register STDCHAR *bp;
4849 SV_CHECK_THINKFIRST(sv);
4850 (void)SvUPGRADE(sv, SVt_PV);
4854 if (RsSNARF(PL_rs)) {
4858 else if (RsRECORD(PL_rs)) {
4859 I32 recsize, bytesread;
4862 /* Grab the size of the record we're getting */
4863 recsize = SvIV(SvRV(PL_rs));
4864 (void)SvPOK_only(sv); /* Validate pointer */
4865 buffer = SvGROW(sv, recsize + 1);
4868 /* VMS wants read instead of fread, because fread doesn't respect */
4869 /* RMS record boundaries. This is not necessarily a good thing to be */
4870 /* doing, but we've got no other real choice */
4871 bytesread = PerlLIO_read(PerlIO_fileno(fp), buffer, recsize);
4873 bytesread = PerlIO_read(fp, buffer, recsize);
4875 SvCUR_set(sv, bytesread);
4876 buffer[bytesread] = '\0';
4877 if (PerlIO_isutf8(fp))
4881 return(SvCUR(sv) ? SvPVX(sv) : Nullch);
4883 else if (RsPARA(PL_rs)) {
4888 /* Get $/ i.e. PL_rs into same encoding as stream wants */
4889 if (PerlIO_isutf8(fp)) {
4890 rsptr = SvPVutf8(PL_rs, rslen);
4893 if (SvUTF8(PL_rs)) {
4894 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
4895 Perl_croak(aTHX_ "Wide character in $/");
4898 rsptr = SvPV(PL_rs, rslen);
4902 rslast = rslen ? rsptr[rslen - 1] : '\0';
4904 if (RsPARA(PL_rs)) { /* have to do this both before and after */
4905 do { /* to make sure file boundaries work right */
4908 i = PerlIO_getc(fp);
4912 PerlIO_ungetc(fp,i);
4918 /* See if we know enough about I/O mechanism to cheat it ! */
4920 /* This used to be #ifdef test - it is made run-time test for ease
4921 of abstracting out stdio interface. One call should be cheap
4922 enough here - and may even be a macro allowing compile
4926 if (PerlIO_fast_gets(fp)) {
4929 * We're going to steal some values from the stdio struct
4930 * and put EVERYTHING in the innermost loop into registers.
4932 register STDCHAR *ptr;
4936 #if defined(VMS) && defined(PERLIO_IS_STDIO)
4937 /* An ungetc()d char is handled separately from the regular
4938 * buffer, so we getc() it back out and stuff it in the buffer.
4940 i = PerlIO_getc(fp);
4941 if (i == EOF) return 0;
4942 *(--((*fp)->_ptr)) = (unsigned char) i;
4946 /* Here is some breathtakingly efficient cheating */
4948 cnt = PerlIO_get_cnt(fp); /* get count into register */
4949 (void)SvPOK_only(sv); /* validate pointer */
4950 if (SvLEN(sv) - append <= cnt + 1) { /* make sure we have the room */
4951 if (cnt > 80 && SvLEN(sv) > append) {
4952 shortbuffered = cnt - SvLEN(sv) + append + 1;
4953 cnt -= shortbuffered;
4957 /* remember that cnt can be negative */
4958 SvGROW(sv, append + (cnt <= 0 ? 2 : (cnt + 1)));
4963 bp = (STDCHAR*)SvPVX(sv) + append; /* move these two too to registers */
4964 ptr = (STDCHAR*)PerlIO_get_ptr(fp);
4965 DEBUG_P(PerlIO_printf(Perl_debug_log,
4966 "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
4967 DEBUG_P(PerlIO_printf(Perl_debug_log,
4968 "Screamer: entering: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
4969 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
4970 PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
4975 while (cnt > 0) { /* this | eat */
4977 if ((*bp++ = *ptr++) == rslast) /* really | dust */
4978 goto thats_all_folks; /* screams | sed :-) */
4982 Copy(ptr, bp, cnt, char); /* this | eat */
4983 bp += cnt; /* screams | dust */
4984 ptr += cnt; /* louder | sed :-) */
4989 if (shortbuffered) { /* oh well, must extend */
4990 cnt = shortbuffered;
4992 bpx = bp - (STDCHAR*)SvPVX(sv); /* box up before relocation */
4994 SvGROW(sv, SvLEN(sv) + append + cnt + 2);
4995 bp = (STDCHAR*)SvPVX(sv) + bpx; /* unbox after relocation */
4999 DEBUG_P(PerlIO_printf(Perl_debug_log,
5000 "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
5001 PTR2UV(ptr),(long)cnt));
5002 PerlIO_set_ptrcnt(fp, ptr, cnt); /* deregisterize cnt and ptr */
5003 DEBUG_P(PerlIO_printf(Perl_debug_log,
5004 "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
5005 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
5006 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
5007 /* This used to call 'filbuf' in stdio form, but as that behaves like
5008 getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
5009 another abstraction. */
5010 i = PerlIO_getc(fp); /* get more characters */
5011 DEBUG_P(PerlIO_printf(Perl_debug_log,
5012 "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
5013 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
5014 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
5015 cnt = PerlIO_get_cnt(fp);
5016 ptr = (STDCHAR*)PerlIO_get_ptr(fp); /* reregisterize cnt and ptr */
5017 DEBUG_P(PerlIO_printf(Perl_debug_log,
5018 "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
5020 if (i == EOF) /* all done for ever? */
5021 goto thats_really_all_folks;
5023 bpx = bp - (STDCHAR*)SvPVX(sv); /* box up before relocation */
5025 SvGROW(sv, bpx + cnt + 2);
5026 bp = (STDCHAR*)SvPVX(sv) + bpx; /* unbox after relocation */
5028 *bp++ = i; /* store character from PerlIO_getc */
5030 if (rslen && (STDCHAR)i == rslast) /* all done for now? */
5031 goto thats_all_folks;
5035 if ((rslen > 1 && (bp - (STDCHAR*)SvPVX(sv) < rslen)) ||
5036 memNE((char*)bp - rslen, rsptr, rslen))
5037 goto screamer; /* go back to the fray */
5038 thats_really_all_folks:
5040 cnt += shortbuffered;
5041 DEBUG_P(PerlIO_printf(Perl_debug_log,
5042 "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
5043 PerlIO_set_ptrcnt(fp, ptr, cnt); /* put these back or we're in trouble */
5044 DEBUG_P(PerlIO_printf(Perl_debug_log,
5045 "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
5046 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
5047 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
5049 SvCUR_set(sv, bp - (STDCHAR*)SvPVX(sv)); /* set length */
5050 DEBUG_P(PerlIO_printf(Perl_debug_log,
5051 "Screamer: done, len=%ld, string=|%.*s|\n",
5052 (long)SvCUR(sv),(int)SvCUR(sv),SvPVX(sv)));
5057 /*The big, slow, and stupid way */
5060 /* Need to work around EPOC SDK features */
5061 /* On WINS: MS VC5 generates calls to _chkstk, */
5062 /* if a `large' stack frame is allocated */
5063 /* gcc on MARM does not generate calls like these */
5069 register STDCHAR *bpe = buf + sizeof(buf);
5071 while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = i) != rslast && bp < bpe)
5072 ; /* keep reading */
5076 cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
5077 /* Accomodate broken VAXC compiler, which applies U8 cast to
5078 * both args of ?: operator, causing EOF to change into 255
5080 if (cnt) { i = (U8)buf[cnt - 1]; } else { i = EOF; }
5084 sv_catpvn(sv, (char *) buf, cnt);
5086 sv_setpvn(sv, (char *) buf, cnt);
5088 if (i != EOF && /* joy */
5090 SvCUR(sv) < rslen ||
5091 memNE(SvPVX(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
5095 * If we're reading from a TTY and we get a short read,
5096 * indicating that the user hit his EOF character, we need
5097 * to notice it now, because if we try to read from the TTY
5098 * again, the EOF condition will disappear.
5100 * The comparison of cnt to sizeof(buf) is an optimization
5101 * that prevents unnecessary calls to feof().
5105 if (!(cnt < sizeof(buf) && PerlIO_eof(fp)))
5110 if (RsPARA(PL_rs)) { /* have to do this both before and after */
5111 while (i != EOF) { /* to make sure file boundaries work right */
5112 i = PerlIO_getc(fp);
5114 PerlIO_ungetc(fp,i);
5120 if (PerlIO_isutf8(fp))
5125 return (SvCUR(sv) - append) ? SvPVX(sv) : Nullch;
5132 Auto-increment of the value in the SV.
5138 Perl_sv_inc(pTHX_ register SV *sv)
5147 if (SvTHINKFIRST(sv)) {
5148 if (SvREADONLY(sv)) {
5149 if (PL_curcop != &PL_compiling)
5150 Perl_croak(aTHX_ PL_no_modify);
5154 if (SvAMAGIC(sv) && AMG_CALLun(sv,inc))
5156 i = PTR2IV(SvRV(sv));
5161 flags = SvFLAGS(sv);
5162 if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
5163 /* It's (privately or publicly) a float, but not tested as an
5164 integer, so test it to see. */
5166 flags = SvFLAGS(sv);
5168 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
5169 /* It's publicly an integer, or privately an integer-not-float */
5172 if (SvUVX(sv) == UV_MAX)
5173 sv_setnv(sv, (NV)UV_MAX + 1.0);
5175 (void)SvIOK_only_UV(sv);
5178 if (SvIVX(sv) == IV_MAX)
5179 sv_setuv(sv, (UV)IV_MAX + 1);
5181 (void)SvIOK_only(sv);
5187 if (flags & SVp_NOK) {
5188 (void)SvNOK_only(sv);
5193 if (!(flags & SVp_POK) || !*SvPVX(sv)) {
5194 if ((flags & SVTYPEMASK) < SVt_PVIV)
5195 sv_upgrade(sv, SVt_IV);
5196 (void)SvIOK_only(sv);
5201 while (isALPHA(*d)) d++;
5202 while (isDIGIT(*d)) d++;
5204 #ifdef PERL_PRESERVE_IVUV
5205 /* Got to punt this an an integer if needs be, but we don't issue
5206 warnings. Probably ought to make the sv_iv_please() that does
5207 the conversion if possible, and silently. */
5208 I32 numtype = looks_like_number(sv);
5209 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
5210 /* Need to try really hard to see if it's an integer.
5211 9.22337203685478e+18 is an integer.
5212 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
5213 so $a="9.22337203685478e+18"; $a+0; $a++
5214 needs to be the same as $a="9.22337203685478e+18"; $a++
5221 /* sv_2iv *should* have made this an NV */
5222 if (flags & SVp_NOK) {
5223 (void)SvNOK_only(sv);
5227 /* I don't think we can get here. Maybe I should assert this
5228 And if we do get here I suspect that sv_setnv will croak. NWC
5230 #if defined(USE_LONG_DOUBLE)
5231 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",
5232 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5234 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%g\n",
5235 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5238 #endif /* PERL_PRESERVE_IVUV */
5239 sv_setnv(sv,Atof(SvPVX(sv)) + 1.0);
5243 while (d >= SvPVX(sv)) {
5251 /* MKS: The original code here died if letters weren't consecutive.
5252 * at least it didn't have to worry about non-C locales. The
5253 * new code assumes that ('z'-'a')==('Z'-'A'), letters are
5254 * arranged in order (although not consecutively) and that only
5255 * [A-Za-z] are accepted by isALPHA in the C locale.
5257 if (*d != 'z' && *d != 'Z') {
5258 do { ++*d; } while (!isALPHA(*d));
5261 *(d--) -= 'z' - 'a';
5266 *(d--) -= 'z' - 'a' + 1;
5270 /* oh,oh, the number grew */
5271 SvGROW(sv, SvCUR(sv) + 2);
5273 for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX(sv); d--)
5284 Auto-decrement of the value in the SV.
5290 Perl_sv_dec(pTHX_ register SV *sv)
5298 if (SvTHINKFIRST(sv)) {
5299 if (SvREADONLY(sv)) {
5300 if (PL_curcop != &PL_compiling)
5301 Perl_croak(aTHX_ PL_no_modify);
5305 if (SvAMAGIC(sv) && AMG_CALLun(sv,dec))
5307 i = PTR2IV(SvRV(sv));
5312 /* Unlike sv_inc we don't have to worry about string-never-numbers
5313 and keeping them magic. But we mustn't warn on punting */
5314 flags = SvFLAGS(sv);
5315 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
5316 /* It's publicly an integer, or privately an integer-not-float */
5319 if (SvUVX(sv) == 0) {
5320 (void)SvIOK_only(sv);
5324 (void)SvIOK_only_UV(sv);
5328 if (SvIVX(sv) == IV_MIN)
5329 sv_setnv(sv, (NV)IV_MIN - 1.0);
5331 (void)SvIOK_only(sv);
5337 if (flags & SVp_NOK) {
5339 (void)SvNOK_only(sv);
5342 if (!(flags & SVp_POK)) {
5343 if ((flags & SVTYPEMASK) < SVt_PVNV)
5344 sv_upgrade(sv, SVt_NV);
5346 (void)SvNOK_only(sv);
5349 #ifdef PERL_PRESERVE_IVUV
5351 I32 numtype = looks_like_number(sv);
5352 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
5353 /* Need to try really hard to see if it's an integer.
5354 9.22337203685478e+18 is an integer.
5355 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
5356 so $a="9.22337203685478e+18"; $a+0; $a--
5357 needs to be the same as $a="9.22337203685478e+18"; $a--
5364 /* sv_2iv *should* have made this an NV */
5365 if (flags & SVp_NOK) {
5366 (void)SvNOK_only(sv);
5370 /* I don't think we can get here. Maybe I should assert this
5371 And if we do get here I suspect that sv_setnv will croak. NWC
5373 #if defined(USE_LONG_DOUBLE)
5374 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",
5375 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5377 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%g\n",
5378 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5382 #endif /* PERL_PRESERVE_IVUV */
5383 sv_setnv(sv,Atof(SvPVX(sv)) - 1.0); /* punt */
5387 =for apidoc sv_mortalcopy
5389 Creates a new SV which is a copy of the original SV. The new SV is marked
5395 /* Make a string that will exist for the duration of the expression
5396 * evaluation. Actually, it may have to last longer than that, but
5397 * hopefully we won't free it until it has been assigned to a
5398 * permanent location. */
5401 Perl_sv_mortalcopy(pTHX_ SV *oldstr)
5406 sv_setsv(sv,oldstr);
5408 PL_tmps_stack[++PL_tmps_ix] = sv;
5414 =for apidoc sv_newmortal
5416 Creates a new SV which is mortal. The reference count of the SV is set to 1.
5422 Perl_sv_newmortal(pTHX)
5427 SvFLAGS(sv) = SVs_TEMP;
5429 PL_tmps_stack[++PL_tmps_ix] = sv;
5434 =for apidoc sv_2mortal
5436 Marks an SV as mortal. The SV will be destroyed when the current context
5442 /* same thing without the copying */
5445 Perl_sv_2mortal(pTHX_ register SV *sv)
5449 if (SvREADONLY(sv) && SvIMMORTAL(sv))
5452 PL_tmps_stack[++PL_tmps_ix] = sv;
5460 Creates a new SV and copies a string into it. The reference count for the
5461 SV is set to 1. If C<len> is zero, Perl will compute the length using
5462 strlen(). For efficiency, consider using C<newSVpvn> instead.
5468 Perl_newSVpv(pTHX_ const char *s, STRLEN len)
5475 sv_setpvn(sv,s,len);
5480 =for apidoc newSVpvn
5482 Creates a new SV and copies a string into it. The reference count for the
5483 SV is set to 1. Note that if C<len> is zero, Perl will create a zero length
5484 string. You are responsible for ensuring that the source string is at least
5491 Perl_newSVpvn(pTHX_ const char *s, STRLEN len)
5496 sv_setpvn(sv,s,len);
5501 =for apidoc newSVpvn_share
5503 Creates a new SV and populates it with a string from
5504 the string table. Turns on READONLY and FAKE.
5505 The idea here is that as string table is used for shared hash
5506 keys these strings will have SvPVX == HeKEY and hash lookup
5507 will avoid string compare.
5513 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
5516 bool is_utf8 = FALSE;
5522 PERL_HASH(hash, src, len);
5524 sv_upgrade(sv, SVt_PVIV);
5525 SvPVX(sv) = sharepvn(src, is_utf8?-len:len, hash);
5537 #if defined(PERL_IMPLICIT_CONTEXT)
5539 Perl_newSVpvf_nocontext(const char* pat, ...)
5544 va_start(args, pat);
5545 sv = vnewSVpvf(pat, &args);
5552 =for apidoc newSVpvf
5554 Creates a new SV an initialize it with the string formatted like
5561 Perl_newSVpvf(pTHX_ const char* pat, ...)
5565 va_start(args, pat);
5566 sv = vnewSVpvf(pat, &args);
5572 Perl_vnewSVpvf(pTHX_ const char* pat, va_list* args)
5576 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
5583 Creates a new SV and copies a floating point value into it.
5584 The reference count for the SV is set to 1.
5590 Perl_newSVnv(pTHX_ NV n)
5602 Creates a new SV and copies an integer into it. The reference count for the
5609 Perl_newSViv(pTHX_ IV i)
5621 Creates a new SV and copies an unsigned integer into it.
5622 The reference count for the SV is set to 1.
5628 Perl_newSVuv(pTHX_ UV u)
5638 =for apidoc newRV_noinc
5640 Creates an RV wrapper for an SV. The reference count for the original
5641 SV is B<not> incremented.
5647 Perl_newRV_noinc(pTHX_ SV *tmpRef)
5652 sv_upgrade(sv, SVt_RV);
5659 /* newRV_inc is #defined to newRV in sv.h */
5661 Perl_newRV(pTHX_ SV *tmpRef)
5663 return newRV_noinc(SvREFCNT_inc(tmpRef));
5669 Creates a new SV which is an exact duplicate of the original SV.
5674 /* make an exact duplicate of old */
5677 Perl_newSVsv(pTHX_ register SV *old)
5683 if (SvTYPE(old) == SVTYPEMASK) {
5684 if (ckWARN_d(WARN_INTERNAL))
5685 Perl_warner(aTHX_ WARN_INTERNAL, "semi-panic: attempt to dup freed string");
5700 Perl_sv_reset(pTHX_ register char *s, HV *stash)
5708 char todo[PERL_UCHAR_MAX+1];
5713 if (!*s) { /* reset ?? searches */
5714 for (pm = HvPMROOT(stash); pm; pm = pm->op_pmnext) {
5715 pm->op_pmdynflags &= ~PMdf_USED;
5720 /* reset variables */
5722 if (!HvARRAY(stash))
5725 Zero(todo, 256, char);
5727 i = (unsigned char)*s;
5731 max = (unsigned char)*s++;
5732 for ( ; i <= max; i++) {
5735 for (i = 0; i <= (I32) HvMAX(stash); i++) {
5736 for (entry = HvARRAY(stash)[i];
5738 entry = HeNEXT(entry))
5740 if (!todo[(U8)*HeKEY(entry)])
5742 gv = (GV*)HeVAL(entry);
5744 if (SvTHINKFIRST(sv)) {
5745 if (!SvREADONLY(sv) && SvROK(sv))
5750 if (SvTYPE(sv) >= SVt_PV) {
5752 if (SvPVX(sv) != Nullch)
5759 if (GvHV(gv) && !HvNAME(GvHV(gv))) {
5761 #ifdef USE_ENVIRON_ARRAY
5763 environ[0] = Nullch;
5772 Perl_sv_2io(pTHX_ SV *sv)
5778 switch (SvTYPE(sv)) {
5786 Perl_croak(aTHX_ "Bad filehandle: %s", GvNAME(gv));
5790 Perl_croak(aTHX_ PL_no_usym, "filehandle");
5792 return sv_2io(SvRV(sv));
5793 gv = gv_fetchpv(SvPV(sv,n_a), FALSE, SVt_PVIO);
5799 Perl_croak(aTHX_ "Bad filehandle: %s", SvPV(sv,n_a));
5806 Perl_sv_2cv(pTHX_ SV *sv, HV **st, GV **gvp, I32 lref)
5813 return *gvp = Nullgv, Nullcv;
5814 switch (SvTYPE(sv)) {
5833 SV **sp = &sv; /* Used in tryAMAGICunDEREF macro. */
5834 tryAMAGICunDEREF(to_cv);
5837 if (SvTYPE(sv) == SVt_PVCV) {
5846 Perl_croak(aTHX_ "Not a subroutine reference");
5851 gv = gv_fetchpv(SvPV(sv, n_a), lref, SVt_PVCV);
5857 if (lref && !GvCVu(gv)) {
5860 tmpsv = NEWSV(704,0);
5861 gv_efullname3(tmpsv, gv, Nullch);
5862 /* XXX this is probably not what they think they're getting.
5863 * It has the same effect as "sub name;", i.e. just a forward
5865 newSUB(start_subparse(FALSE, 0),
5866 newSVOP(OP_CONST, 0, tmpsv),
5871 Perl_croak(aTHX_ "Unable to create sub named \"%s\"", SvPV(sv,n_a));
5880 Returns true if the SV has a true value by Perl's rules.
5886 Perl_sv_true(pTHX_ register SV *sv)
5892 if ((tXpv = (XPV*)SvANY(sv)) &&
5893 (tXpv->xpv_cur > 1 ||
5894 (tXpv->xpv_cur && *tXpv->xpv_pv != '0')))
5901 return SvIVX(sv) != 0;
5904 return SvNVX(sv) != 0.0;
5906 return sv_2bool(sv);
5912 Perl_sv_iv(pTHX_ register SV *sv)
5916 return (IV)SvUVX(sv);
5923 Perl_sv_uv(pTHX_ register SV *sv)
5928 return (UV)SvIVX(sv);
5934 Perl_sv_nv(pTHX_ register SV *sv)
5942 Perl_sv_pv(pTHX_ SV *sv)
5949 return sv_2pv(sv, &n_a);
5953 Perl_sv_pvn(pTHX_ SV *sv, STRLEN *lp)
5959 return sv_2pv(sv, lp);
5963 =for apidoc sv_pvn_force
5965 Get a sensible string out of the SV somehow.
5971 Perl_sv_pvn_force(pTHX_ SV *sv, STRLEN *lp)
5975 if (SvTHINKFIRST(sv) && !SvROK(sv))
5976 sv_force_normal(sv);
5982 if (SvTYPE(sv) > SVt_PVLV && SvTYPE(sv) != SVt_PVFM) {
5983 Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
5984 PL_op_name[PL_op->op_type]);
5988 if (s != SvPVX(sv)) { /* Almost, but not quite, sv_setpvn() */
5993 (void)SvUPGRADE(sv, SVt_PV); /* Never FALSE */
5994 SvGROW(sv, len + 1);
5995 Move(s,SvPVX(sv),len,char);
6000 SvPOK_on(sv); /* validate pointer */
6002 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
6003 PTR2UV(sv),SvPVX(sv)));
6010 Perl_sv_pvbyte(pTHX_ SV *sv)
6016 Perl_sv_pvbyten(pTHX_ SV *sv, STRLEN *lp)
6018 return sv_pvn(sv,lp);
6022 Perl_sv_pvbyten_force(pTHX_ SV *sv, STRLEN *lp)
6024 return sv_pvn_force(sv,lp);
6028 Perl_sv_pvutf8(pTHX_ SV *sv)
6030 sv_utf8_upgrade(sv);
6035 Perl_sv_pvutf8n(pTHX_ SV *sv, STRLEN *lp)
6037 sv_utf8_upgrade(sv);
6038 return sv_pvn(sv,lp);
6042 =for apidoc sv_pvutf8n_force
6044 Get a sensible UTF8-encoded string out of the SV somehow. See
6051 Perl_sv_pvutf8n_force(pTHX_ SV *sv, STRLEN *lp)
6053 sv_utf8_upgrade(sv);
6054 return sv_pvn_force(sv,lp);
6058 =for apidoc sv_reftype
6060 Returns a string describing what the SV is a reference to.
6066 Perl_sv_reftype(pTHX_ SV *sv, int ob)
6068 if (ob && SvOBJECT(sv))
6069 return HvNAME(SvSTASH(sv));
6071 switch (SvTYPE(sv)) {
6085 case SVt_PVLV: return "LVALUE";
6086 case SVt_PVAV: return "ARRAY";
6087 case SVt_PVHV: return "HASH";
6088 case SVt_PVCV: return "CODE";
6089 case SVt_PVGV: return "GLOB";
6090 case SVt_PVFM: return "FORMAT";
6091 case SVt_PVIO: return "IO";
6092 default: return "UNKNOWN";
6098 =for apidoc sv_isobject
6100 Returns a boolean indicating whether the SV is an RV pointing to a blessed
6101 object. If the SV is not an RV, or if the object is not blessed, then this
6108 Perl_sv_isobject(pTHX_ SV *sv)
6125 Returns a boolean indicating whether the SV is blessed into the specified
6126 class. This does not check for subtypes; use C<sv_derived_from> to verify
6127 an inheritance relationship.
6133 Perl_sv_isa(pTHX_ SV *sv, const char *name)
6145 return strEQ(HvNAME(SvSTASH(sv)), name);
6151 Creates a new SV for the RV, C<rv>, to point to. If C<rv> is not an RV then
6152 it will be upgraded to one. If C<classname> is non-null then the new SV will
6153 be blessed in the specified package. The new SV is returned and its
6154 reference count is 1.
6160 Perl_newSVrv(pTHX_ SV *rv, const char *classname)
6166 SV_CHECK_THINKFIRST(rv);
6169 if (SvTYPE(rv) >= SVt_PVMG) {
6170 U32 refcnt = SvREFCNT(rv);
6174 SvREFCNT(rv) = refcnt;
6177 if (SvTYPE(rv) < SVt_RV)
6178 sv_upgrade(rv, SVt_RV);
6179 else if (SvTYPE(rv) > SVt_RV) {
6180 (void)SvOOK_off(rv);
6181 if (SvPVX(rv) && SvLEN(rv))
6182 Safefree(SvPVX(rv));
6192 HV* stash = gv_stashpv(classname, TRUE);
6193 (void)sv_bless(rv, stash);
6199 =for apidoc sv_setref_pv
6201 Copies a pointer into a new SV, optionally blessing the SV. The C<rv>
6202 argument will be upgraded to an RV. That RV will be modified to point to
6203 the new SV. If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
6204 into the SV. The C<classname> argument indicates the package for the
6205 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
6206 will be returned and will have a reference count of 1.
6208 Do not use with other Perl types such as HV, AV, SV, CV, because those
6209 objects will become corrupted by the pointer copy process.
6211 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
6217 Perl_sv_setref_pv(pTHX_ SV *rv, const char *classname, void *pv)
6220 sv_setsv(rv, &PL_sv_undef);
6224 sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
6229 =for apidoc sv_setref_iv
6231 Copies an integer into a new SV, optionally blessing the SV. The C<rv>
6232 argument will be upgraded to an RV. That RV will be modified to point to
6233 the new SV. The C<classname> argument indicates the package for the
6234 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
6235 will be returned and will have a reference count of 1.
6241 Perl_sv_setref_iv(pTHX_ SV *rv, const char *classname, IV iv)
6243 sv_setiv(newSVrv(rv,classname), iv);
6248 =for apidoc sv_setref_nv
6250 Copies a double into a new SV, optionally blessing the SV. The C<rv>
6251 argument will be upgraded to an RV. That RV will be modified to point to
6252 the new SV. The C<classname> argument indicates the package for the
6253 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
6254 will be returned and will have a reference count of 1.
6260 Perl_sv_setref_nv(pTHX_ SV *rv, const char *classname, NV nv)
6262 sv_setnv(newSVrv(rv,classname), nv);
6267 =for apidoc sv_setref_pvn
6269 Copies a string into a new SV, optionally blessing the SV. The length of the
6270 string must be specified with C<n>. The C<rv> argument will be upgraded to
6271 an RV. That RV will be modified to point to the new SV. The C<classname>
6272 argument indicates the package for the blessing. Set C<classname> to
6273 C<Nullch> to avoid the blessing. The new SV will be returned and will have
6274 a reference count of 1.
6276 Note that C<sv_setref_pv> copies the pointer while this copies the string.
6282 Perl_sv_setref_pvn(pTHX_ SV *rv, const char *classname, char *pv, STRLEN n)
6284 sv_setpvn(newSVrv(rv,classname), pv, n);
6289 =for apidoc sv_bless
6291 Blesses an SV into a specified package. The SV must be an RV. The package
6292 must be designated by its stash (see C<gv_stashpv()>). The reference count
6293 of the SV is unaffected.
6299 Perl_sv_bless(pTHX_ SV *sv, HV *stash)
6303 Perl_croak(aTHX_ "Can't bless non-reference value");
6305 if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
6306 if (SvREADONLY(tmpRef))
6307 Perl_croak(aTHX_ PL_no_modify);
6308 if (SvOBJECT(tmpRef)) {
6309 if (SvTYPE(tmpRef) != SVt_PVIO)
6311 SvREFCNT_dec(SvSTASH(tmpRef));
6314 SvOBJECT_on(tmpRef);
6315 if (SvTYPE(tmpRef) != SVt_PVIO)
6317 (void)SvUPGRADE(tmpRef, SVt_PVMG);
6318 SvSTASH(tmpRef) = (HV*)SvREFCNT_inc(stash);
6329 S_sv_unglob(pTHX_ SV *sv)
6333 assert(SvTYPE(sv) == SVt_PVGV);
6338 SvREFCNT_dec(GvSTASH(sv));
6339 GvSTASH(sv) = Nullhv;
6341 sv_unmagic(sv, '*');
6342 Safefree(GvNAME(sv));
6345 /* need to keep SvANY(sv) in the right arena */
6346 xpvmg = new_XPVMG();
6347 StructCopy(SvANY(sv), xpvmg, XPVMG);
6348 del_XPVGV(SvANY(sv));
6351 SvFLAGS(sv) &= ~SVTYPEMASK;
6352 SvFLAGS(sv) |= SVt_PVMG;
6356 =for apidoc sv_unref_flags
6358 Unsets the RV status of the SV, and decrements the reference count of
6359 whatever was being referenced by the RV. This can almost be thought of
6360 as a reversal of C<newSVrv>. The C<cflags> argument can contain
6361 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
6362 (otherwise the decrementing is conditional on the reference count being
6363 different from one or the reference being a readonly SV).
6370 Perl_sv_unref_flags(pTHX_ SV *sv, U32 flags)
6374 if (SvWEAKREF(sv)) {
6382 if (SvREFCNT(rv) != 1 || SvREADONLY(rv) || flags) /* SV_IMMEDIATE_UNREF */
6384 else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
6385 sv_2mortal(rv); /* Schedule for freeing later */
6389 =for apidoc sv_unref
6391 Unsets the RV status of the SV, and decrements the reference count of
6392 whatever was being referenced by the RV. This can almost be thought of
6393 as a reversal of C<newSVrv>. This is C<sv_unref_flags> with the C<flag>
6394 being zero. See C<SvROK_off>.
6400 Perl_sv_unref(pTHX_ SV *sv)
6402 sv_unref_flags(sv, 0);
6406 Perl_sv_taint(pTHX_ SV *sv)
6408 sv_magic((sv), Nullsv, 't', Nullch, 0);
6412 Perl_sv_untaint(pTHX_ SV *sv)
6414 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
6415 MAGIC *mg = mg_find(sv, 't');
6422 Perl_sv_tainted(pTHX_ SV *sv)
6424 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
6425 MAGIC *mg = mg_find(sv, 't');
6426 if (mg && ((mg->mg_len & 1) || ((mg->mg_len & 2) && mg->mg_obj == sv)))
6433 =for apidoc sv_setpviv
6435 Copies an integer into the given SV, also updating its string value.
6436 Does not handle 'set' magic. See C<sv_setpviv_mg>.
6442 Perl_sv_setpviv(pTHX_ SV *sv, IV iv)
6444 char buf[TYPE_CHARS(UV)];
6446 char *ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
6448 sv_setpvn(sv, ptr, ebuf - ptr);
6453 =for apidoc sv_setpviv_mg
6455 Like C<sv_setpviv>, but also handles 'set' magic.
6461 Perl_sv_setpviv_mg(pTHX_ SV *sv, IV iv)
6463 char buf[TYPE_CHARS(UV)];
6465 char *ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
6467 sv_setpvn(sv, ptr, ebuf - ptr);
6471 #if defined(PERL_IMPLICIT_CONTEXT)
6473 Perl_sv_setpvf_nocontext(SV *sv, const char* pat, ...)
6477 va_start(args, pat);
6478 sv_vsetpvf(sv, pat, &args);
6484 Perl_sv_setpvf_mg_nocontext(SV *sv, const char* pat, ...)
6488 va_start(args, pat);
6489 sv_vsetpvf_mg(sv, pat, &args);
6495 =for apidoc sv_setpvf
6497 Processes its arguments like C<sprintf> and sets an SV to the formatted
6498 output. Does not handle 'set' magic. See C<sv_setpvf_mg>.
6504 Perl_sv_setpvf(pTHX_ SV *sv, const char* pat, ...)
6507 va_start(args, pat);
6508 sv_vsetpvf(sv, pat, &args);
6513 Perl_sv_vsetpvf(pTHX_ SV *sv, const char* pat, va_list* args)
6515 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6519 =for apidoc sv_setpvf_mg
6521 Like C<sv_setpvf>, but also handles 'set' magic.
6527 Perl_sv_setpvf_mg(pTHX_ SV *sv, const char* pat, ...)
6530 va_start(args, pat);
6531 sv_vsetpvf_mg(sv, pat, &args);
6536 Perl_sv_vsetpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
6538 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6542 #if defined(PERL_IMPLICIT_CONTEXT)
6544 Perl_sv_catpvf_nocontext(SV *sv, const char* pat, ...)
6548 va_start(args, pat);
6549 sv_vcatpvf(sv, pat, &args);
6554 Perl_sv_catpvf_mg_nocontext(SV *sv, const char* pat, ...)
6558 va_start(args, pat);
6559 sv_vcatpvf_mg(sv, pat, &args);
6565 =for apidoc sv_catpvf
6567 Processes its arguments like C<sprintf> and appends the formatted output
6568 to an SV. Handles 'get' magic, but not 'set' magic. C<SvSETMAGIC()> must
6569 typically be called after calling this function to handle 'set' magic.
6575 Perl_sv_catpvf(pTHX_ SV *sv, const char* pat, ...)
6578 va_start(args, pat);
6579 sv_vcatpvf(sv, pat, &args);
6584 Perl_sv_vcatpvf(pTHX_ SV *sv, const char* pat, va_list* args)
6586 sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6590 =for apidoc sv_catpvf_mg
6592 Like C<sv_catpvf>, but also handles 'set' magic.
6598 Perl_sv_catpvf_mg(pTHX_ SV *sv, const char* pat, ...)
6601 va_start(args, pat);
6602 sv_vcatpvf_mg(sv, pat, &args);
6607 Perl_sv_vcatpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
6609 sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6614 =for apidoc sv_vsetpvfn
6616 Works like C<vcatpvfn> but copies the text into the SV instead of
6623 Perl_sv_vsetpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
6625 sv_setpvn(sv, "", 0);
6626 sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, maybe_tainted);
6630 =for apidoc sv_vcatpvfn
6632 Processes its arguments like C<vsprintf> and appends the formatted output
6633 to an SV. Uses an array of SVs if the C style variable argument list is
6634 missing (NULL). When running with taint checks enabled, indicates via
6635 C<maybe_tainted> if results are untrustworthy (often due to the use of
6642 Perl_sv_vcatpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
6649 static char nullstr[] = "(null)";
6652 /* no matter what, this is a string now */
6653 (void)SvPV_force(sv, origlen);
6655 /* special-case "", "%s", and "%_" */
6658 if (patlen == 2 && pat[0] == '%') {
6662 char *s = va_arg(*args, char*);
6663 sv_catpv(sv, s ? s : nullstr);
6665 else if (svix < svmax) {
6666 sv_catsv(sv, *svargs);
6667 if (DO_UTF8(*svargs))
6673 argsv = va_arg(*args, SV*);
6674 sv_catsv(sv, argsv);
6679 /* See comment on '_' below */
6684 patend = (char*)pat + patlen;
6685 for (p = (char*)pat; p < patend; p = q) {
6688 bool vectorize = FALSE;
6695 bool has_precis = FALSE;
6697 bool is_utf = FALSE;
6700 U8 utf8buf[UTF8_MAXLEN+1];
6701 STRLEN esignlen = 0;
6703 char *eptr = Nullch;
6705 /* Times 4: a decimal digit takes more than 3 binary digits.
6706 * NV_DIG: mantissa takes than many decimal digits.
6707 * Plus 32: Playing safe. */
6708 char ebuf[IV_DIG * 4 + NV_DIG + 32];
6709 /* large enough for "%#.#f" --chip */
6710 /* what about long double NVs? --jhi */
6713 U8 *vecstr = Null(U8*);
6725 STRLEN dotstrlen = 1;
6726 I32 epix = 0; /* explicit parameter index */
6727 I32 ewix = 0; /* explicit width index */
6728 bool asterisk = FALSE;
6730 for (q = p; q < patend && *q != '%'; ++q) ;
6732 sv_catpvn(sv, p, q - p);
6761 case '*': /* printf("%*vX",":",$ipv6addr) */
6766 vecsv = va_arg(*args, SV*);
6767 else if (svix < svmax)
6768 vecsv = svargs[svix++];
6771 dotstr = SvPVx(vecsv,dotstrlen);
6799 case '1': case '2': case '3':
6800 case '4': case '5': case '6':
6801 case '7': case '8': case '9':
6804 width = width * 10 + (*q++ - '0');
6806 if (asterisk && ewix == 0) {
6811 } else if (epix == 0) {
6823 i = va_arg(*args, int);
6825 i = (ewix ? ewix <= svmax : svix < svmax) ?
6826 SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
6828 width = (i < 0) ? -i : i;
6837 i = va_arg(*args, int);
6839 i = (ewix ? ewix <= svmax : svix < svmax)
6840 ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
6841 precis = (i < 0) ? 0 : i;
6847 precis = precis * 10 + (*q++ - '0');
6854 vecsv = va_arg(*args, SV*);
6855 vecstr = (U8*)SvPVx(vecsv,veclen);
6856 utf = DO_UTF8(vecsv);
6858 else if (epix ? epix <= svmax : svix < svmax) {
6859 vecsv = svargs[epix ? epix-1 : svix++];
6860 vecstr = (U8*)SvPVx(vecsv,veclen);
6861 utf = DO_UTF8(vecsv);
6872 #if defined(HAS_QUAD) || (defined(HAS_LONG_DOUBLE) && defined(USE_LONG_DOUBLE))
6883 #if defined(HAS_QUAD) || (defined(HAS_LONG_DOUBLE) && defined(USE_LONG_DOUBLE))
6884 if (*(q + 1) == 'l') { /* lld, llf */
6911 uv = va_arg(*args, int);
6913 uv = (epix ? epix <= svmax : svix < svmax) ?
6914 SvIVx(svargs[epix ? epix-1 : svix++]) : 0;
6915 if ((uv > 255 || (uv > 127 && SvUTF8(sv))) && !IN_BYTE) {
6916 eptr = (char*)utf8buf;
6917 elen = uv_to_utf8((U8*)eptr, uv) - utf8buf;
6929 eptr = va_arg(*args, char*);
6931 #ifdef MACOS_TRADITIONAL
6932 /* On MacOS, %#s format is used for Pascal strings */
6937 elen = strlen(eptr);
6940 elen = sizeof nullstr - 1;
6943 else if (epix ? epix <= svmax : svix < svmax) {
6944 argsv = svargs[epix ? epix-1 : svix++];
6945 eptr = SvPVx(argsv, elen);
6946 if (DO_UTF8(argsv)) {
6947 if (has_precis && precis < elen) {
6949 sv_pos_u2b(argsv, &p, 0); /* sticks at end */
6952 if (width) { /* fudge width (can't fudge elen) */
6953 width += elen - sv_len_utf8(argsv);
6962 * The "%_" hack might have to be changed someday,
6963 * if ISO or ANSI decide to use '_' for something.
6964 * So we keep it hidden from users' code.
6968 argsv = va_arg(*args,SV*);
6969 eptr = SvPVx(argsv, elen);
6975 if (has_precis && elen > precis)
6985 uv = PTR2UV(va_arg(*args, void*));
6987 uv = (epix ? epix <= svmax : svix < svmax) ?
6988 PTR2UV(svargs[epix ? epix-1 : svix++]) : 0;
7008 iv = (IV)utf8_to_uv(vecstr, veclen, &ulen, 0);
7018 case 'h': iv = (short)va_arg(*args, int); break;
7019 default: iv = va_arg(*args, int); break;
7020 case 'l': iv = va_arg(*args, long); break;
7021 case 'V': iv = va_arg(*args, IV); break;
7023 case 'q': iv = va_arg(*args, Quad_t); break;
7028 iv = (epix ? epix <= svmax : svix < svmax) ?
7029 SvIVx(svargs[epix ? epix-1 : svix++]) : 0;
7031 case 'h': iv = (short)iv; break;
7033 case 'l': iv = (long)iv; break;
7036 case 'q': iv = (Quad_t)iv; break;
7043 esignbuf[esignlen++] = plus;
7047 esignbuf[esignlen++] = '-';
7091 uv = utf8_to_uv(vecstr, veclen, &ulen, 0);
7101 case 'h': uv = (unsigned short)va_arg(*args, unsigned); break;
7102 default: uv = va_arg(*args, unsigned); break;
7103 case 'l': uv = va_arg(*args, unsigned long); break;
7104 case 'V': uv = va_arg(*args, UV); break;
7106 case 'q': uv = va_arg(*args, Quad_t); break;
7111 uv = (epix ? epix <= svmax : svix < svmax) ?
7112 SvUVx(svargs[epix ? epix-1 : svix++]) : 0;
7114 case 'h': uv = (unsigned short)uv; break;
7116 case 'l': uv = (unsigned long)uv; break;
7119 case 'q': uv = (Quad_t)uv; break;
7125 eptr = ebuf + sizeof ebuf;
7131 p = (char*)((c == 'X')
7132 ? "0123456789ABCDEF" : "0123456789abcdef");
7138 esignbuf[esignlen++] = '0';
7139 esignbuf[esignlen++] = c; /* 'x' or 'X' */
7145 *--eptr = '0' + dig;
7147 if (alt && *eptr != '0')
7153 *--eptr = '0' + dig;
7156 esignbuf[esignlen++] = '0';
7157 esignbuf[esignlen++] = 'b';
7160 default: /* it had better be ten or less */
7161 #if defined(PERL_Y2KWARN)
7162 if (ckWARN(WARN_Y2K)) {
7164 char *s = SvPV(sv,n);
7165 if (n >= 2 && s[n-2] == '1' && s[n-1] == '9'
7166 && (n == 2 || !isDIGIT(s[n-3])))
7168 Perl_warner(aTHX_ WARN_Y2K,
7169 "Possible Y2K bug: %%%c %s",
7170 c, "format string following '19'");
7176 *--eptr = '0' + dig;
7177 } while (uv /= base);
7180 elen = (ebuf + sizeof ebuf) - eptr;
7183 zeros = precis - elen;
7184 else if (precis == 0 && elen == 1 && *eptr == '0')
7189 /* FLOATING POINT */
7192 c = 'f'; /* maybe %F isn't supported here */
7198 /* This is evil, but floating point is even more evil */
7202 nv = va_arg(*args, NV);
7204 nv = (epix ? epix <= svmax : svix < svmax) ?
7205 SvNVx(svargs[epix ? epix-1 : svix++]) : 0.0;
7208 if (c != 'e' && c != 'E') {
7210 (void)Perl_frexp(nv, &i);
7211 if (i == PERL_INT_MIN)
7212 Perl_die(aTHX_ "panic: frexp");
7214 need = BIT_DIGITS(i);
7216 need += has_precis ? precis : 6; /* known default */
7220 need += 20; /* fudge factor */
7221 if (PL_efloatsize < need) {
7222 Safefree(PL_efloatbuf);
7223 PL_efloatsize = need + 20; /* more fudge */
7224 New(906, PL_efloatbuf, PL_efloatsize, char);
7225 PL_efloatbuf[0] = '\0';
7228 eptr = ebuf + sizeof ebuf;
7231 #if defined(USE_LONG_DOUBLE) && defined(PERL_PRIfldbl)
7233 /* Copy the one or more characters in a long double
7234 * format before the 'base' ([efgEFG]) character to
7235 * the format string. */
7236 static char const prifldbl[] = PERL_PRIfldbl;
7237 char const *p = prifldbl + sizeof(prifldbl) - 3;
7238 while (p >= prifldbl) { *--eptr = *p--; }
7243 do { *--eptr = '0' + (base % 10); } while (base /= 10);
7248 do { *--eptr = '0' + (base % 10); } while (base /= 10);
7260 /* No taint. Otherwise we are in the strange situation
7261 * where printf() taints but print($float) doesn't.
7263 (void)sprintf(PL_efloatbuf, eptr, nv);
7265 eptr = PL_efloatbuf;
7266 elen = strlen(PL_efloatbuf);
7273 i = SvCUR(sv) - origlen;
7276 case 'h': *(va_arg(*args, short*)) = i; break;
7277 default: *(va_arg(*args, int*)) = i; break;
7278 case 'l': *(va_arg(*args, long*)) = i; break;
7279 case 'V': *(va_arg(*args, IV*)) = i; break;
7281 case 'q': *(va_arg(*args, Quad_t*)) = i; break;
7285 else if (epix ? epix <= svmax : svix < svmax)
7286 sv_setuv_mg(svargs[epix ? epix-1 : svix++], (UV)i);
7287 continue; /* not "break" */
7294 if (!args && ckWARN(WARN_PRINTF) &&
7295 (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)) {
7296 SV *msg = sv_newmortal();
7297 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %s: ",
7298 (PL_op->op_type == OP_PRTF) ? "printf" : "sprintf");
7301 Perl_sv_catpvf(aTHX_ msg,
7302 "\"%%%c\"", c & 0xFF);
7304 Perl_sv_catpvf(aTHX_ msg,
7305 "\"%%\\%03"UVof"\"",
7308 sv_catpv(msg, "end of string");
7309 Perl_warner(aTHX_ WARN_PRINTF, "%"SVf, msg); /* yes, this is reentrant */
7312 /* output mangled stuff ... */
7318 /* ... right here, because formatting flags should not apply */
7319 SvGROW(sv, SvCUR(sv) + elen + 1);
7321 memcpy(p, eptr, elen);
7324 SvCUR(sv) = p - SvPVX(sv);
7325 continue; /* not "break" */
7328 have = esignlen + zeros + elen;
7329 need = (have > width ? have : width);
7332 SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
7334 if (esignlen && fill == '0') {
7335 for (i = 0; i < esignlen; i++)
7339 memset(p, fill, gap);
7342 if (esignlen && fill != '0') {
7343 for (i = 0; i < esignlen; i++)
7347 for (i = zeros; i; i--)
7351 memcpy(p, eptr, elen);
7355 memset(p, ' ', gap);
7360 memcpy(p, dotstr, dotstrlen);
7364 vectorize = FALSE; /* done iterating over vecstr */
7369 SvCUR(sv) = p - SvPVX(sv);
7377 #if defined(USE_ITHREADS)
7379 #if defined(USE_THREADS)
7380 # include "error: USE_THREADS and USE_ITHREADS are incompatible"
7383 #ifndef GpREFCNT_inc
7384 # define GpREFCNT_inc(gp) ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
7388 #define sv_dup_inc(s) SvREFCNT_inc(sv_dup(s))
7389 #define av_dup(s) (AV*)sv_dup((SV*)s)
7390 #define av_dup_inc(s) (AV*)SvREFCNT_inc(sv_dup((SV*)s))
7391 #define hv_dup(s) (HV*)sv_dup((SV*)s)
7392 #define hv_dup_inc(s) (HV*)SvREFCNT_inc(sv_dup((SV*)s))
7393 #define cv_dup(s) (CV*)sv_dup((SV*)s)
7394 #define cv_dup_inc(s) (CV*)SvREFCNT_inc(sv_dup((SV*)s))
7395 #define io_dup(s) (IO*)sv_dup((SV*)s)
7396 #define io_dup_inc(s) (IO*)SvREFCNT_inc(sv_dup((SV*)s))
7397 #define gv_dup(s) (GV*)sv_dup((SV*)s)
7398 #define gv_dup_inc(s) (GV*)SvREFCNT_inc(sv_dup((SV*)s))
7399 #define SAVEPV(p) (p ? savepv(p) : Nullch)
7400 #define SAVEPVN(p,n) (p ? savepvn(p,n) : Nullch)
7403 Perl_re_dup(pTHX_ REGEXP *r)
7405 /* XXX fix when pmop->op_pmregexp becomes shared */
7406 return ReREFCNT_inc(r);
7410 Perl_fp_dup(pTHX_ PerlIO *fp, char type)
7414 return (PerlIO*)NULL;
7416 /* look for it in the table first */
7417 ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
7421 /* create anew and remember what it is */
7422 ret = PerlIO_fdupopen(aTHX_ fp);
7423 ptr_table_store(PL_ptr_table, fp, ret);
7428 Perl_dirp_dup(pTHX_ DIR *dp)
7437 Perl_gp_dup(pTHX_ GP *gp)
7442 /* look for it in the table first */
7443 ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
7447 /* create anew and remember what it is */
7448 Newz(0, ret, 1, GP);
7449 ptr_table_store(PL_ptr_table, gp, ret);
7452 ret->gp_refcnt = 0; /* must be before any other dups! */
7453 ret->gp_sv = sv_dup_inc(gp->gp_sv);
7454 ret->gp_io = io_dup_inc(gp->gp_io);
7455 ret->gp_form = cv_dup_inc(gp->gp_form);
7456 ret->gp_av = av_dup_inc(gp->gp_av);
7457 ret->gp_hv = hv_dup_inc(gp->gp_hv);
7458 ret->gp_egv = gv_dup(gp->gp_egv); /* GvEGV is not refcounted */
7459 ret->gp_cv = cv_dup_inc(gp->gp_cv);
7460 ret->gp_cvgen = gp->gp_cvgen;
7461 ret->gp_flags = gp->gp_flags;
7462 ret->gp_line = gp->gp_line;
7463 ret->gp_file = gp->gp_file; /* points to COP.cop_file */
7468 Perl_mg_dup(pTHX_ MAGIC *mg)
7470 MAGIC *mgret = (MAGIC*)NULL;
7473 return (MAGIC*)NULL;
7474 /* look for it in the table first */
7475 mgret = (MAGIC*)ptr_table_fetch(PL_ptr_table, mg);
7479 for (; mg; mg = mg->mg_moremagic) {
7481 Newz(0, nmg, 1, MAGIC);
7485 mgprev->mg_moremagic = nmg;
7486 nmg->mg_virtual = mg->mg_virtual; /* XXX copy dynamic vtable? */
7487 nmg->mg_private = mg->mg_private;
7488 nmg->mg_type = mg->mg_type;
7489 nmg->mg_flags = mg->mg_flags;
7490 if (mg->mg_type == 'r') {
7491 nmg->mg_obj = (SV*)re_dup((REGEXP*)mg->mg_obj);
7494 nmg->mg_obj = (mg->mg_flags & MGf_REFCOUNTED)
7495 ? sv_dup_inc(mg->mg_obj)
7496 : sv_dup(mg->mg_obj);
7498 nmg->mg_len = mg->mg_len;
7499 nmg->mg_ptr = mg->mg_ptr; /* XXX random ptr? */
7500 if (mg->mg_ptr && mg->mg_type != 'g') {
7501 if (mg->mg_len >= 0) {
7502 nmg->mg_ptr = SAVEPVN(mg->mg_ptr, mg->mg_len);
7503 if (mg->mg_type == 'c' && AMT_AMAGIC((AMT*)mg->mg_ptr)) {
7504 AMT *amtp = (AMT*)mg->mg_ptr;
7505 AMT *namtp = (AMT*)nmg->mg_ptr;
7507 for (i = 1; i < NofAMmeth; i++) {
7508 namtp->table[i] = cv_dup_inc(amtp->table[i]);
7512 else if (mg->mg_len == HEf_SVKEY)
7513 nmg->mg_ptr = (char*)sv_dup_inc((SV*)mg->mg_ptr);
7521 Perl_ptr_table_new(pTHX)
7524 Newz(0, tbl, 1, PTR_TBL_t);
7527 Newz(0, tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
7532 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *tbl, void *sv)
7534 PTR_TBL_ENT_t *tblent;
7535 UV hash = PTR2UV(sv);
7537 tblent = tbl->tbl_ary[hash & tbl->tbl_max];
7538 for (; tblent; tblent = tblent->next) {
7539 if (tblent->oldval == sv)
7540 return tblent->newval;
7546 Perl_ptr_table_store(pTHX_ PTR_TBL_t *tbl, void *oldv, void *newv)
7548 PTR_TBL_ENT_t *tblent, **otblent;
7549 /* XXX this may be pessimal on platforms where pointers aren't good
7550 * hash values e.g. if they grow faster in the most significant
7552 UV hash = PTR2UV(oldv);
7556 otblent = &tbl->tbl_ary[hash & tbl->tbl_max];
7557 for (tblent = *otblent; tblent; i=0, tblent = tblent->next) {
7558 if (tblent->oldval == oldv) {
7559 tblent->newval = newv;
7564 Newz(0, tblent, 1, PTR_TBL_ENT_t);
7565 tblent->oldval = oldv;
7566 tblent->newval = newv;
7567 tblent->next = *otblent;
7570 if (i && tbl->tbl_items > tbl->tbl_max)
7571 ptr_table_split(tbl);
7575 Perl_ptr_table_split(pTHX_ PTR_TBL_t *tbl)
7577 PTR_TBL_ENT_t **ary = tbl->tbl_ary;
7578 UV oldsize = tbl->tbl_max + 1;
7579 UV newsize = oldsize * 2;
7582 Renew(ary, newsize, PTR_TBL_ENT_t*);
7583 Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
7584 tbl->tbl_max = --newsize;
7586 for (i=0; i < oldsize; i++, ary++) {
7587 PTR_TBL_ENT_t **curentp, **entp, *ent;
7590 curentp = ary + oldsize;
7591 for (entp = ary, ent = *ary; ent; ent = *entp) {
7592 if ((newsize & PTR2UV(ent->oldval)) != i) {
7594 ent->next = *curentp;
7609 Perl_sv_dup(pTHX_ SV *sstr)
7613 if (!sstr || SvTYPE(sstr) == SVTYPEMASK)
7615 /* look for it in the table first */
7616 dstr = (SV*)ptr_table_fetch(PL_ptr_table, sstr);
7620 /* create anew and remember what it is */
7622 ptr_table_store(PL_ptr_table, sstr, dstr);
7625 SvFLAGS(dstr) = SvFLAGS(sstr);
7626 SvFLAGS(dstr) &= ~SVf_OOK; /* don't propagate OOK hack */
7627 SvREFCNT(dstr) = 0; /* must be before any other dups! */
7630 if (SvANY(sstr) && PL_watch_pvx && SvPVX(sstr) == PL_watch_pvx)
7631 PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
7632 PL_watch_pvx, SvPVX(sstr));
7635 switch (SvTYPE(sstr)) {
7640 SvANY(dstr) = new_XIV();
7641 SvIVX(dstr) = SvIVX(sstr);
7644 SvANY(dstr) = new_XNV();
7645 SvNVX(dstr) = SvNVX(sstr);
7648 SvANY(dstr) = new_XRV();
7649 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7652 SvANY(dstr) = new_XPV();
7653 SvCUR(dstr) = SvCUR(sstr);
7654 SvLEN(dstr) = SvLEN(sstr);
7656 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7657 else if (SvPVX(sstr) && SvLEN(sstr))
7658 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7660 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7663 SvANY(dstr) = new_XPVIV();
7664 SvCUR(dstr) = SvCUR(sstr);
7665 SvLEN(dstr) = SvLEN(sstr);
7666 SvIVX(dstr) = SvIVX(sstr);
7668 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7669 else if (SvPVX(sstr) && SvLEN(sstr))
7670 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7672 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7675 SvANY(dstr) = new_XPVNV();
7676 SvCUR(dstr) = SvCUR(sstr);
7677 SvLEN(dstr) = SvLEN(sstr);
7678 SvIVX(dstr) = SvIVX(sstr);
7679 SvNVX(dstr) = SvNVX(sstr);
7681 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7682 else if (SvPVX(sstr) && SvLEN(sstr))
7683 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7685 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7688 SvANY(dstr) = new_XPVMG();
7689 SvCUR(dstr) = SvCUR(sstr);
7690 SvLEN(dstr) = SvLEN(sstr);
7691 SvIVX(dstr) = SvIVX(sstr);
7692 SvNVX(dstr) = SvNVX(sstr);
7693 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7694 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7696 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7697 else if (SvPVX(sstr) && SvLEN(sstr))
7698 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7700 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7703 SvANY(dstr) = new_XPVBM();
7704 SvCUR(dstr) = SvCUR(sstr);
7705 SvLEN(dstr) = SvLEN(sstr);
7706 SvIVX(dstr) = SvIVX(sstr);
7707 SvNVX(dstr) = SvNVX(sstr);
7708 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7709 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7711 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7712 else if (SvPVX(sstr) && SvLEN(sstr))
7713 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7715 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7716 BmRARE(dstr) = BmRARE(sstr);
7717 BmUSEFUL(dstr) = BmUSEFUL(sstr);
7718 BmPREVIOUS(dstr)= BmPREVIOUS(sstr);
7721 SvANY(dstr) = new_XPVLV();
7722 SvCUR(dstr) = SvCUR(sstr);
7723 SvLEN(dstr) = SvLEN(sstr);
7724 SvIVX(dstr) = SvIVX(sstr);
7725 SvNVX(dstr) = SvNVX(sstr);
7726 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7727 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7729 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7730 else if (SvPVX(sstr) && SvLEN(sstr))
7731 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7733 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7734 LvTARGOFF(dstr) = LvTARGOFF(sstr); /* XXX sometimes holds PMOP* when DEBUGGING */
7735 LvTARGLEN(dstr) = LvTARGLEN(sstr);
7736 LvTARG(dstr) = sv_dup_inc(LvTARG(sstr));
7737 LvTYPE(dstr) = LvTYPE(sstr);
7740 SvANY(dstr) = new_XPVGV();
7741 SvCUR(dstr) = SvCUR(sstr);
7742 SvLEN(dstr) = SvLEN(sstr);
7743 SvIVX(dstr) = SvIVX(sstr);
7744 SvNVX(dstr) = SvNVX(sstr);
7745 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7746 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7748 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7749 else if (SvPVX(sstr) && SvLEN(sstr))
7750 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7752 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7753 GvNAMELEN(dstr) = GvNAMELEN(sstr);
7754 GvNAME(dstr) = SAVEPVN(GvNAME(sstr), GvNAMELEN(sstr));
7755 GvSTASH(dstr) = hv_dup_inc(GvSTASH(sstr));
7756 GvFLAGS(dstr) = GvFLAGS(sstr);
7757 GvGP(dstr) = gp_dup(GvGP(sstr));
7758 (void)GpREFCNT_inc(GvGP(dstr));
7761 SvANY(dstr) = new_XPVIO();
7762 SvCUR(dstr) = SvCUR(sstr);
7763 SvLEN(dstr) = SvLEN(sstr);
7764 SvIVX(dstr) = SvIVX(sstr);
7765 SvNVX(dstr) = SvNVX(sstr);
7766 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7767 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7769 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7770 else if (SvPVX(sstr) && SvLEN(sstr))
7771 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7773 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7774 IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(sstr));
7775 if (IoOFP(sstr) == IoIFP(sstr))
7776 IoOFP(dstr) = IoIFP(dstr);
7778 IoOFP(dstr) = fp_dup(IoOFP(sstr), IoTYPE(sstr));
7779 /* PL_rsfp_filters entries have fake IoDIRP() */
7780 if (IoDIRP(sstr) && !(IoFLAGS(sstr) & IOf_FAKE_DIRP))
7781 IoDIRP(dstr) = dirp_dup(IoDIRP(sstr));
7783 IoDIRP(dstr) = IoDIRP(sstr);
7784 IoLINES(dstr) = IoLINES(sstr);
7785 IoPAGE(dstr) = IoPAGE(sstr);
7786 IoPAGE_LEN(dstr) = IoPAGE_LEN(sstr);
7787 IoLINES_LEFT(dstr) = IoLINES_LEFT(sstr);
7788 IoTOP_NAME(dstr) = SAVEPV(IoTOP_NAME(sstr));
7789 IoTOP_GV(dstr) = gv_dup(IoTOP_GV(sstr));
7790 IoFMT_NAME(dstr) = SAVEPV(IoFMT_NAME(sstr));
7791 IoFMT_GV(dstr) = gv_dup(IoFMT_GV(sstr));
7792 IoBOTTOM_NAME(dstr) = SAVEPV(IoBOTTOM_NAME(sstr));
7793 IoBOTTOM_GV(dstr) = gv_dup(IoBOTTOM_GV(sstr));
7794 IoSUBPROCESS(dstr) = IoSUBPROCESS(sstr);
7795 IoTYPE(dstr) = IoTYPE(sstr);
7796 IoFLAGS(dstr) = IoFLAGS(sstr);
7799 SvANY(dstr) = new_XPVAV();
7800 SvCUR(dstr) = SvCUR(sstr);
7801 SvLEN(dstr) = SvLEN(sstr);
7802 SvIVX(dstr) = SvIVX(sstr);
7803 SvNVX(dstr) = SvNVX(sstr);
7804 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7805 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7806 AvARYLEN((AV*)dstr) = sv_dup_inc(AvARYLEN((AV*)sstr));
7807 AvFLAGS((AV*)dstr) = AvFLAGS((AV*)sstr);
7808 if (AvARRAY((AV*)sstr)) {
7809 SV **dst_ary, **src_ary;
7810 SSize_t items = AvFILLp((AV*)sstr) + 1;
7812 src_ary = AvARRAY((AV*)sstr);
7813 Newz(0, dst_ary, AvMAX((AV*)sstr)+1, SV*);
7814 ptr_table_store(PL_ptr_table, src_ary, dst_ary);
7815 SvPVX(dstr) = (char*)dst_ary;
7816 AvALLOC((AV*)dstr) = dst_ary;
7817 if (AvREAL((AV*)sstr)) {
7819 *dst_ary++ = sv_dup_inc(*src_ary++);
7823 *dst_ary++ = sv_dup(*src_ary++);
7825 items = AvMAX((AV*)sstr) - AvFILLp((AV*)sstr);
7826 while (items-- > 0) {
7827 *dst_ary++ = &PL_sv_undef;
7831 SvPVX(dstr) = Nullch;
7832 AvALLOC((AV*)dstr) = (SV**)NULL;
7836 SvANY(dstr) = new_XPVHV();
7837 SvCUR(dstr) = SvCUR(sstr);
7838 SvLEN(dstr) = SvLEN(sstr);
7839 SvIVX(dstr) = SvIVX(sstr);
7840 SvNVX(dstr) = SvNVX(sstr);
7841 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7842 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7843 HvRITER((HV*)dstr) = HvRITER((HV*)sstr);
7844 if (HvARRAY((HV*)sstr)) {
7846 XPVHV *dxhv = (XPVHV*)SvANY(dstr);
7847 XPVHV *sxhv = (XPVHV*)SvANY(sstr);
7848 Newz(0, dxhv->xhv_array,
7849 PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1), char);
7850 while (i <= sxhv->xhv_max) {
7851 ((HE**)dxhv->xhv_array)[i] = he_dup(((HE**)sxhv->xhv_array)[i],
7852 !!HvSHAREKEYS(sstr));
7855 dxhv->xhv_eiter = he_dup(sxhv->xhv_eiter, !!HvSHAREKEYS(sstr));
7858 SvPVX(dstr) = Nullch;
7859 HvEITER((HV*)dstr) = (HE*)NULL;
7861 HvPMROOT((HV*)dstr) = HvPMROOT((HV*)sstr); /* XXX */
7862 HvNAME((HV*)dstr) = SAVEPV(HvNAME((HV*)sstr));
7865 SvANY(dstr) = new_XPVFM();
7866 FmLINES(dstr) = FmLINES(sstr);
7870 SvANY(dstr) = new_XPVCV();
7872 SvCUR(dstr) = SvCUR(sstr);
7873 SvLEN(dstr) = SvLEN(sstr);
7874 SvIVX(dstr) = SvIVX(sstr);
7875 SvNVX(dstr) = SvNVX(sstr);
7876 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7877 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7878 if (SvPVX(sstr) && SvLEN(sstr))
7879 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7881 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7882 CvSTASH(dstr) = hv_dup(CvSTASH(sstr));/* NOTE: not refcounted */
7883 CvSTART(dstr) = CvSTART(sstr);
7884 CvROOT(dstr) = OpREFCNT_inc(CvROOT(sstr));
7885 CvXSUB(dstr) = CvXSUB(sstr);
7886 CvXSUBANY(dstr) = CvXSUBANY(sstr);
7887 CvGV(dstr) = gv_dup_inc(CvGV(sstr));
7888 CvDEPTH(dstr) = CvDEPTH(sstr);
7889 if (CvPADLIST(sstr) && !AvREAL(CvPADLIST(sstr))) {
7890 /* XXX padlists are real, but pretend to be not */
7891 AvREAL_on(CvPADLIST(sstr));
7892 CvPADLIST(dstr) = av_dup_inc(CvPADLIST(sstr));
7893 AvREAL_off(CvPADLIST(sstr));
7894 AvREAL_off(CvPADLIST(dstr));
7897 CvPADLIST(dstr) = av_dup_inc(CvPADLIST(sstr));
7898 CvOUTSIDE(dstr) = cv_dup_inc(CvOUTSIDE(sstr));
7899 CvFLAGS(dstr) = CvFLAGS(sstr);
7902 Perl_croak(aTHX_ "Bizarre SvTYPE [%d]", SvTYPE(sstr));
7906 if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
7913 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max)
7918 return (PERL_CONTEXT*)NULL;
7920 /* look for it in the table first */
7921 ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
7925 /* create anew and remember what it is */
7926 Newz(56, ncxs, max + 1, PERL_CONTEXT);
7927 ptr_table_store(PL_ptr_table, cxs, ncxs);
7930 PERL_CONTEXT *cx = &cxs[ix];
7931 PERL_CONTEXT *ncx = &ncxs[ix];
7932 ncx->cx_type = cx->cx_type;
7933 if (CxTYPE(cx) == CXt_SUBST) {
7934 Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
7937 ncx->blk_oldsp = cx->blk_oldsp;
7938 ncx->blk_oldcop = cx->blk_oldcop;
7939 ncx->blk_oldretsp = cx->blk_oldretsp;
7940 ncx->blk_oldmarksp = cx->blk_oldmarksp;
7941 ncx->blk_oldscopesp = cx->blk_oldscopesp;
7942 ncx->blk_oldpm = cx->blk_oldpm;
7943 ncx->blk_gimme = cx->blk_gimme;
7944 switch (CxTYPE(cx)) {
7946 ncx->blk_sub.cv = (cx->blk_sub.olddepth == 0
7947 ? cv_dup_inc(cx->blk_sub.cv)
7948 : cv_dup(cx->blk_sub.cv));
7949 ncx->blk_sub.argarray = (cx->blk_sub.hasargs
7950 ? av_dup_inc(cx->blk_sub.argarray)
7952 ncx->blk_sub.savearray = av_dup(cx->blk_sub.savearray);
7953 ncx->blk_sub.olddepth = cx->blk_sub.olddepth;
7954 ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
7955 ncx->blk_sub.lval = cx->blk_sub.lval;
7958 ncx->blk_eval.old_in_eval = cx->blk_eval.old_in_eval;
7959 ncx->blk_eval.old_op_type = cx->blk_eval.old_op_type;
7960 ncx->blk_eval.old_namesv = sv_dup_inc(cx->blk_eval.old_namesv);
7961 ncx->blk_eval.old_eval_root = cx->blk_eval.old_eval_root;
7962 ncx->blk_eval.cur_text = sv_dup(cx->blk_eval.cur_text);
7965 ncx->blk_loop.label = cx->blk_loop.label;
7966 ncx->blk_loop.resetsp = cx->blk_loop.resetsp;
7967 ncx->blk_loop.redo_op = cx->blk_loop.redo_op;
7968 ncx->blk_loop.next_op = cx->blk_loop.next_op;
7969 ncx->blk_loop.last_op = cx->blk_loop.last_op;
7970 ncx->blk_loop.iterdata = (CxPADLOOP(cx)
7971 ? cx->blk_loop.iterdata
7972 : gv_dup((GV*)cx->blk_loop.iterdata));
7973 ncx->blk_loop.oldcurpad
7974 = (SV**)ptr_table_fetch(PL_ptr_table,
7975 cx->blk_loop.oldcurpad);
7976 ncx->blk_loop.itersave = sv_dup_inc(cx->blk_loop.itersave);
7977 ncx->blk_loop.iterlval = sv_dup_inc(cx->blk_loop.iterlval);
7978 ncx->blk_loop.iterary = av_dup_inc(cx->blk_loop.iterary);
7979 ncx->blk_loop.iterix = cx->blk_loop.iterix;
7980 ncx->blk_loop.itermax = cx->blk_loop.itermax;
7983 ncx->blk_sub.cv = cv_dup(cx->blk_sub.cv);
7984 ncx->blk_sub.gv = gv_dup(cx->blk_sub.gv);
7985 ncx->blk_sub.dfoutgv = gv_dup_inc(cx->blk_sub.dfoutgv);
7986 ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
7999 Perl_si_dup(pTHX_ PERL_SI *si)
8004 return (PERL_SI*)NULL;
8006 /* look for it in the table first */
8007 nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
8011 /* create anew and remember what it is */
8012 Newz(56, nsi, 1, PERL_SI);
8013 ptr_table_store(PL_ptr_table, si, nsi);
8015 nsi->si_stack = av_dup_inc(si->si_stack);
8016 nsi->si_cxix = si->si_cxix;
8017 nsi->si_cxmax = si->si_cxmax;
8018 nsi->si_cxstack = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax);
8019 nsi->si_type = si->si_type;
8020 nsi->si_prev = si_dup(si->si_prev);
8021 nsi->si_next = si_dup(si->si_next);
8022 nsi->si_markoff = si->si_markoff;
8027 #define POPINT(ss,ix) ((ss)[--(ix)].any_i32)
8028 #define TOPINT(ss,ix) ((ss)[ix].any_i32)
8029 #define POPLONG(ss,ix) ((ss)[--(ix)].any_long)
8030 #define TOPLONG(ss,ix) ((ss)[ix].any_long)
8031 #define POPIV(ss,ix) ((ss)[--(ix)].any_iv)
8032 #define TOPIV(ss,ix) ((ss)[ix].any_iv)
8033 #define POPPTR(ss,ix) ((ss)[--(ix)].any_ptr)
8034 #define TOPPTR(ss,ix) ((ss)[ix].any_ptr)
8035 #define POPDPTR(ss,ix) ((ss)[--(ix)].any_dptr)
8036 #define TOPDPTR(ss,ix) ((ss)[ix].any_dptr)
8037 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
8038 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
8041 #define pv_dup_inc(p) SAVEPV(p)
8042 #define pv_dup(p) SAVEPV(p)
8043 #define svp_dup_inc(p,pp) any_dup(p,pp)
8046 Perl_any_dup(pTHX_ void *v, PerlInterpreter *proto_perl)
8053 /* look for it in the table first */
8054 ret = ptr_table_fetch(PL_ptr_table, v);
8058 /* see if it is part of the interpreter structure */
8059 if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
8060 ret = (void*)(((char*)aTHXo) + (((char*)v) - (char*)proto_perl));
8068 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl)
8070 ANY *ss = proto_perl->Tsavestack;
8071 I32 ix = proto_perl->Tsavestack_ix;
8072 I32 max = proto_perl->Tsavestack_max;
8085 void (*dptr) (void*);
8086 void (*dxptr) (pTHXo_ void*);
8089 Newz(54, nss, max, ANY);
8095 case SAVEt_ITEM: /* normal string */
8096 sv = (SV*)POPPTR(ss,ix);
8097 TOPPTR(nss,ix) = sv_dup_inc(sv);
8098 sv = (SV*)POPPTR(ss,ix);
8099 TOPPTR(nss,ix) = sv_dup_inc(sv);
8101 case SAVEt_SV: /* scalar reference */
8102 sv = (SV*)POPPTR(ss,ix);
8103 TOPPTR(nss,ix) = sv_dup_inc(sv);
8104 gv = (GV*)POPPTR(ss,ix);
8105 TOPPTR(nss,ix) = gv_dup_inc(gv);
8107 case SAVEt_GENERIC_PVREF: /* generic char* */
8108 c = (char*)POPPTR(ss,ix);
8109 TOPPTR(nss,ix) = pv_dup(c);
8110 ptr = POPPTR(ss,ix);
8111 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8113 case SAVEt_GENERIC_SVREF: /* generic sv */
8114 case SAVEt_SVREF: /* scalar reference */
8115 sv = (SV*)POPPTR(ss,ix);
8116 TOPPTR(nss,ix) = sv_dup_inc(sv);
8117 ptr = POPPTR(ss,ix);
8118 TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
8120 case SAVEt_AV: /* array reference */
8121 av = (AV*)POPPTR(ss,ix);
8122 TOPPTR(nss,ix) = av_dup_inc(av);
8123 gv = (GV*)POPPTR(ss,ix);
8124 TOPPTR(nss,ix) = gv_dup(gv);
8126 case SAVEt_HV: /* hash reference */
8127 hv = (HV*)POPPTR(ss,ix);
8128 TOPPTR(nss,ix) = hv_dup_inc(hv);
8129 gv = (GV*)POPPTR(ss,ix);
8130 TOPPTR(nss,ix) = gv_dup(gv);
8132 case SAVEt_INT: /* int reference */
8133 ptr = POPPTR(ss,ix);
8134 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8135 intval = (int)POPINT(ss,ix);
8136 TOPINT(nss,ix) = intval;
8138 case SAVEt_LONG: /* long reference */
8139 ptr = POPPTR(ss,ix);
8140 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8141 longval = (long)POPLONG(ss,ix);
8142 TOPLONG(nss,ix) = longval;
8144 case SAVEt_I32: /* I32 reference */
8145 case SAVEt_I16: /* I16 reference */
8146 case SAVEt_I8: /* I8 reference */
8147 ptr = POPPTR(ss,ix);
8148 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8152 case SAVEt_IV: /* IV reference */
8153 ptr = POPPTR(ss,ix);
8154 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8158 case SAVEt_SPTR: /* SV* reference */
8159 ptr = POPPTR(ss,ix);
8160 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8161 sv = (SV*)POPPTR(ss,ix);
8162 TOPPTR(nss,ix) = sv_dup(sv);
8164 case SAVEt_VPTR: /* random* reference */
8165 ptr = POPPTR(ss,ix);
8166 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8167 ptr = POPPTR(ss,ix);
8168 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8170 case SAVEt_PPTR: /* char* reference */
8171 ptr = POPPTR(ss,ix);
8172 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8173 c = (char*)POPPTR(ss,ix);
8174 TOPPTR(nss,ix) = pv_dup(c);
8176 case SAVEt_HPTR: /* HV* reference */
8177 ptr = POPPTR(ss,ix);
8178 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8179 hv = (HV*)POPPTR(ss,ix);
8180 TOPPTR(nss,ix) = hv_dup(hv);
8182 case SAVEt_APTR: /* AV* reference */
8183 ptr = POPPTR(ss,ix);
8184 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8185 av = (AV*)POPPTR(ss,ix);
8186 TOPPTR(nss,ix) = av_dup(av);
8189 gv = (GV*)POPPTR(ss,ix);
8190 TOPPTR(nss,ix) = gv_dup(gv);
8192 case SAVEt_GP: /* scalar reference */
8193 gp = (GP*)POPPTR(ss,ix);
8194 TOPPTR(nss,ix) = gp = gp_dup(gp);
8195 (void)GpREFCNT_inc(gp);
8196 gv = (GV*)POPPTR(ss,ix);
8197 TOPPTR(nss,ix) = gv_dup_inc(c);
8198 c = (char*)POPPTR(ss,ix);
8199 TOPPTR(nss,ix) = pv_dup(c);
8206 sv = (SV*)POPPTR(ss,ix);
8207 TOPPTR(nss,ix) = sv_dup_inc(sv);
8210 ptr = POPPTR(ss,ix);
8211 if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
8212 /* these are assumed to be refcounted properly */
8213 switch (((OP*)ptr)->op_type) {
8220 TOPPTR(nss,ix) = ptr;
8225 TOPPTR(nss,ix) = Nullop;
8230 TOPPTR(nss,ix) = Nullop;
8233 c = (char*)POPPTR(ss,ix);
8234 TOPPTR(nss,ix) = pv_dup_inc(c);
8237 longval = POPLONG(ss,ix);
8238 TOPLONG(nss,ix) = longval;
8241 hv = (HV*)POPPTR(ss,ix);
8242 TOPPTR(nss,ix) = hv_dup_inc(hv);
8243 c = (char*)POPPTR(ss,ix);
8244 TOPPTR(nss,ix) = pv_dup_inc(c);
8248 case SAVEt_DESTRUCTOR:
8249 ptr = POPPTR(ss,ix);
8250 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
8251 dptr = POPDPTR(ss,ix);
8252 TOPDPTR(nss,ix) = (void (*)(void*))any_dup((void *)dptr, proto_perl);
8254 case SAVEt_DESTRUCTOR_X:
8255 ptr = POPPTR(ss,ix);
8256 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
8257 dxptr = POPDXPTR(ss,ix);
8258 TOPDXPTR(nss,ix) = (void (*)(pTHXo_ void*))any_dup((void *)dxptr, proto_perl);
8260 case SAVEt_REGCONTEXT:
8266 case SAVEt_STACK_POS: /* Position on Perl stack */
8270 case SAVEt_AELEM: /* array element */
8271 sv = (SV*)POPPTR(ss,ix);
8272 TOPPTR(nss,ix) = sv_dup_inc(sv);
8275 av = (AV*)POPPTR(ss,ix);
8276 TOPPTR(nss,ix) = av_dup_inc(av);
8278 case SAVEt_HELEM: /* hash element */
8279 sv = (SV*)POPPTR(ss,ix);
8280 TOPPTR(nss,ix) = sv_dup_inc(sv);
8281 sv = (SV*)POPPTR(ss,ix);
8282 TOPPTR(nss,ix) = sv_dup_inc(sv);
8283 hv = (HV*)POPPTR(ss,ix);
8284 TOPPTR(nss,ix) = hv_dup_inc(hv);
8287 ptr = POPPTR(ss,ix);
8288 TOPPTR(nss,ix) = ptr;
8295 av = (AV*)POPPTR(ss,ix);
8296 TOPPTR(nss,ix) = av_dup(av);
8299 longval = (long)POPLONG(ss,ix);
8300 TOPLONG(nss,ix) = longval;
8301 ptr = POPPTR(ss,ix);
8302 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8303 sv = (SV*)POPPTR(ss,ix);
8304 TOPPTR(nss,ix) = sv_dup(sv);
8307 Perl_croak(aTHX_ "panic: ss_dup inconsistency");
8319 perl_clone(PerlInterpreter *proto_perl, UV flags)
8322 CPerlObj *pPerl = (CPerlObj*)proto_perl;
8325 #ifdef PERL_IMPLICIT_SYS
8326 return perl_clone_using(proto_perl, flags,
8328 proto_perl->IMemShared,
8329 proto_perl->IMemParse,
8339 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
8340 struct IPerlMem* ipM, struct IPerlMem* ipMS,
8341 struct IPerlMem* ipMP, struct IPerlEnv* ipE,
8342 struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
8343 struct IPerlDir* ipD, struct IPerlSock* ipS,
8344 struct IPerlProc* ipP)
8346 /* XXX many of the string copies here can be optimized if they're
8347 * constants; they need to be allocated as common memory and just
8348 * their pointers copied. */
8352 CPerlObj *pPerl = new(ipM) CPerlObj(ipM, ipMS, ipMP, ipE, ipStd, ipLIO,
8354 PERL_SET_THX(pPerl);
8355 # else /* !PERL_OBJECT */
8356 PerlInterpreter *my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
8357 PERL_SET_THX(my_perl);
8360 memset(my_perl, 0xab, sizeof(PerlInterpreter));
8365 # else /* !DEBUGGING */
8366 Zero(my_perl, 1, PerlInterpreter);
8367 # endif /* DEBUGGING */
8371 PL_MemShared = ipMS;
8379 # endif /* PERL_OBJECT */
8380 #else /* !PERL_IMPLICIT_SYS */
8382 PerlInterpreter *my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
8383 PERL_SET_THX(my_perl);
8386 memset(my_perl, 0xab, sizeof(PerlInterpreter));
8391 # else /* !DEBUGGING */
8392 Zero(my_perl, 1, PerlInterpreter);
8393 # endif /* DEBUGGING */
8394 #endif /* PERL_IMPLICIT_SYS */
8397 PL_xiv_arenaroot = NULL;
8399 PL_xnv_arenaroot = NULL;
8401 PL_xrv_arenaroot = NULL;
8403 PL_xpv_arenaroot = NULL;
8405 PL_xpviv_arenaroot = NULL;
8406 PL_xpviv_root = NULL;
8407 PL_xpvnv_arenaroot = NULL;
8408 PL_xpvnv_root = NULL;
8409 PL_xpvcv_arenaroot = NULL;
8410 PL_xpvcv_root = NULL;
8411 PL_xpvav_arenaroot = NULL;
8412 PL_xpvav_root = NULL;
8413 PL_xpvhv_arenaroot = NULL;
8414 PL_xpvhv_root = NULL;
8415 PL_xpvmg_arenaroot = NULL;
8416 PL_xpvmg_root = NULL;
8417 PL_xpvlv_arenaroot = NULL;
8418 PL_xpvlv_root = NULL;
8419 PL_xpvbm_arenaroot = NULL;
8420 PL_xpvbm_root = NULL;
8421 PL_he_arenaroot = NULL;
8423 PL_nice_chunk = NULL;
8424 PL_nice_chunk_size = 0;
8427 PL_sv_root = Nullsv;
8428 PL_sv_arenaroot = Nullsv;
8430 PL_debug = proto_perl->Idebug;
8432 /* create SV map for pointer relocation */
8433 PL_ptr_table = ptr_table_new();
8435 /* initialize these special pointers as early as possible */
8436 SvANY(&PL_sv_undef) = NULL;
8437 SvREFCNT(&PL_sv_undef) = (~(U32)0)/2;
8438 SvFLAGS(&PL_sv_undef) = SVf_READONLY|SVt_NULL;
8439 ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
8442 SvUPGRADE(&PL_sv_no, SVt_PVNV);
8444 SvANY(&PL_sv_no) = new_XPVNV();
8446 SvREFCNT(&PL_sv_no) = (~(U32)0)/2;
8447 SvFLAGS(&PL_sv_no) = SVp_NOK|SVf_NOK|SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
8448 SvPVX(&PL_sv_no) = SAVEPVN(PL_No, 0);
8449 SvCUR(&PL_sv_no) = 0;
8450 SvLEN(&PL_sv_no) = 1;
8451 SvNVX(&PL_sv_no) = 0;
8452 ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
8455 SvUPGRADE(&PL_sv_yes, SVt_PVNV);
8457 SvANY(&PL_sv_yes) = new_XPVNV();
8459 SvREFCNT(&PL_sv_yes) = (~(U32)0)/2;
8460 SvFLAGS(&PL_sv_yes) = SVp_NOK|SVf_NOK|SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
8461 SvPVX(&PL_sv_yes) = SAVEPVN(PL_Yes, 1);
8462 SvCUR(&PL_sv_yes) = 1;
8463 SvLEN(&PL_sv_yes) = 2;
8464 SvNVX(&PL_sv_yes) = 1;
8465 ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
8467 /* create shared string table */
8468 PL_strtab = newHV();
8469 HvSHAREKEYS_off(PL_strtab);
8470 hv_ksplit(PL_strtab, 512);
8471 ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
8473 PL_compiling = proto_perl->Icompiling;
8474 PL_compiling.cop_stashpv = SAVEPV(PL_compiling.cop_stashpv);
8475 PL_compiling.cop_file = SAVEPV(PL_compiling.cop_file);
8476 ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
8477 if (!specialWARN(PL_compiling.cop_warnings))
8478 PL_compiling.cop_warnings = sv_dup_inc(PL_compiling.cop_warnings);
8479 if (!specialCopIO(PL_compiling.cop_io))
8480 PL_compiling.cop_io = sv_dup_inc(PL_compiling.cop_io);
8481 PL_curcop = (COP*)any_dup(proto_perl->Tcurcop, proto_perl);
8483 /* pseudo environmental stuff */
8484 PL_origargc = proto_perl->Iorigargc;
8486 New(0, PL_origargv, i+1, char*);
8487 PL_origargv[i] = '\0';
8489 PL_origargv[i] = SAVEPV(proto_perl->Iorigargv[i]);
8491 PL_envgv = gv_dup(proto_perl->Ienvgv);
8492 PL_incgv = gv_dup(proto_perl->Iincgv);
8493 PL_hintgv = gv_dup(proto_perl->Ihintgv);
8494 PL_origfilename = SAVEPV(proto_perl->Iorigfilename);
8495 PL_diehook = sv_dup_inc(proto_perl->Idiehook);
8496 PL_warnhook = sv_dup_inc(proto_perl->Iwarnhook);
8499 PL_minus_c = proto_perl->Iminus_c;
8500 PL_patchlevel = sv_dup_inc(proto_perl->Ipatchlevel);
8501 PL_localpatches = proto_perl->Ilocalpatches;
8502 PL_splitstr = proto_perl->Isplitstr;
8503 PL_preprocess = proto_perl->Ipreprocess;
8504 PL_minus_n = proto_perl->Iminus_n;
8505 PL_minus_p = proto_perl->Iminus_p;
8506 PL_minus_l = proto_perl->Iminus_l;
8507 PL_minus_a = proto_perl->Iminus_a;
8508 PL_minus_F = proto_perl->Iminus_F;
8509 PL_doswitches = proto_perl->Idoswitches;
8510 PL_dowarn = proto_perl->Idowarn;
8511 PL_doextract = proto_perl->Idoextract;
8512 PL_sawampersand = proto_perl->Isawampersand;
8513 PL_unsafe = proto_perl->Iunsafe;
8514 PL_inplace = SAVEPV(proto_perl->Iinplace);
8515 PL_e_script = sv_dup_inc(proto_perl->Ie_script);
8516 PL_perldb = proto_perl->Iperldb;
8517 PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
8519 /* magical thingies */
8520 /* XXX time(&PL_basetime) when asked for? */
8521 PL_basetime = proto_perl->Ibasetime;
8522 PL_formfeed = sv_dup(proto_perl->Iformfeed);
8524 PL_maxsysfd = proto_perl->Imaxsysfd;
8525 PL_multiline = proto_perl->Imultiline;
8526 PL_statusvalue = proto_perl->Istatusvalue;
8528 PL_statusvalue_vms = proto_perl->Istatusvalue_vms;
8531 /* shortcuts to various I/O objects */
8532 PL_stdingv = gv_dup(proto_perl->Istdingv);
8533 PL_stderrgv = gv_dup(proto_perl->Istderrgv);
8534 PL_defgv = gv_dup(proto_perl->Idefgv);
8535 PL_argvgv = gv_dup(proto_perl->Iargvgv);
8536 PL_argvoutgv = gv_dup(proto_perl->Iargvoutgv);
8537 PL_argvout_stack = av_dup(proto_perl->Iargvout_stack);
8539 /* shortcuts to regexp stuff */
8540 PL_replgv = gv_dup(proto_perl->Ireplgv);
8542 /* shortcuts to misc objects */
8543 PL_errgv = gv_dup(proto_perl->Ierrgv);
8545 /* shortcuts to debugging objects */
8546 PL_DBgv = gv_dup(proto_perl->IDBgv);
8547 PL_DBline = gv_dup(proto_perl->IDBline);
8548 PL_DBsub = gv_dup(proto_perl->IDBsub);
8549 PL_DBsingle = sv_dup(proto_perl->IDBsingle);
8550 PL_DBtrace = sv_dup(proto_perl->IDBtrace);
8551 PL_DBsignal = sv_dup(proto_perl->IDBsignal);
8552 PL_lineary = av_dup(proto_perl->Ilineary);
8553 PL_dbargs = av_dup(proto_perl->Idbargs);
8556 PL_defstash = hv_dup_inc(proto_perl->Tdefstash);
8557 PL_curstash = hv_dup(proto_perl->Tcurstash);
8558 PL_debstash = hv_dup(proto_perl->Idebstash);
8559 PL_globalstash = hv_dup(proto_perl->Iglobalstash);
8560 PL_curstname = sv_dup_inc(proto_perl->Icurstname);
8562 PL_beginav = av_dup_inc(proto_perl->Ibeginav);
8563 PL_endav = av_dup_inc(proto_perl->Iendav);
8564 PL_checkav = av_dup_inc(proto_perl->Icheckav);
8565 PL_initav = av_dup_inc(proto_perl->Iinitav);
8567 PL_sub_generation = proto_perl->Isub_generation;
8569 /* funky return mechanisms */
8570 PL_forkprocess = proto_perl->Iforkprocess;
8572 /* subprocess state */
8573 PL_fdpid = av_dup_inc(proto_perl->Ifdpid);
8575 /* internal state */
8576 PL_tainting = proto_perl->Itainting;
8577 PL_maxo = proto_perl->Imaxo;
8578 if (proto_perl->Iop_mask)
8579 PL_op_mask = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
8581 PL_op_mask = Nullch;
8583 /* current interpreter roots */
8584 PL_main_cv = cv_dup_inc(proto_perl->Imain_cv);
8585 PL_main_root = OpREFCNT_inc(proto_perl->Imain_root);
8586 PL_main_start = proto_perl->Imain_start;
8587 PL_eval_root = proto_perl->Ieval_root;
8588 PL_eval_start = proto_perl->Ieval_start;
8590 /* runtime control stuff */
8591 PL_curcopdb = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
8592 PL_copline = proto_perl->Icopline;
8594 PL_filemode = proto_perl->Ifilemode;
8595 PL_lastfd = proto_perl->Ilastfd;
8596 PL_oldname = proto_perl->Ioldname; /* XXX not quite right */
8599 PL_gensym = proto_perl->Igensym;
8600 PL_preambled = proto_perl->Ipreambled;
8601 PL_preambleav = av_dup_inc(proto_perl->Ipreambleav);
8602 PL_laststatval = proto_perl->Ilaststatval;
8603 PL_laststype = proto_perl->Ilaststype;
8604 PL_mess_sv = Nullsv;
8606 PL_ors_sv = sv_dup_inc(proto_perl->Iors_sv);
8607 PL_ofmt = SAVEPV(proto_perl->Iofmt);
8609 /* interpreter atexit processing */
8610 PL_exitlistlen = proto_perl->Iexitlistlen;
8611 if (PL_exitlistlen) {
8612 New(0, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
8613 Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
8616 PL_exitlist = (PerlExitListEntry*)NULL;
8617 PL_modglobal = hv_dup_inc(proto_perl->Imodglobal);
8619 PL_profiledata = NULL;
8620 PL_rsfp = fp_dup(proto_perl->Irsfp, '<');
8621 /* PL_rsfp_filters entries have fake IoDIRP() */
8622 PL_rsfp_filters = av_dup_inc(proto_perl->Irsfp_filters);
8624 PL_compcv = cv_dup(proto_perl->Icompcv);
8625 PL_comppad = av_dup(proto_perl->Icomppad);
8626 PL_comppad_name = av_dup(proto_perl->Icomppad_name);
8627 PL_comppad_name_fill = proto_perl->Icomppad_name_fill;
8628 PL_comppad_name_floor = proto_perl->Icomppad_name_floor;
8629 PL_curpad = (SV**)ptr_table_fetch(PL_ptr_table,
8630 proto_perl->Tcurpad);
8632 #ifdef HAVE_INTERP_INTERN
8633 sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
8636 /* more statics moved here */
8637 PL_generation = proto_perl->Igeneration;
8638 PL_DBcv = cv_dup(proto_perl->IDBcv);
8640 PL_in_clean_objs = proto_perl->Iin_clean_objs;
8641 PL_in_clean_all = proto_perl->Iin_clean_all;
8643 PL_uid = proto_perl->Iuid;
8644 PL_euid = proto_perl->Ieuid;
8645 PL_gid = proto_perl->Igid;
8646 PL_egid = proto_perl->Iegid;
8647 PL_nomemok = proto_perl->Inomemok;
8648 PL_an = proto_perl->Ian;
8649 PL_cop_seqmax = proto_perl->Icop_seqmax;
8650 PL_op_seqmax = proto_perl->Iop_seqmax;
8651 PL_evalseq = proto_perl->Ievalseq;
8652 PL_origenviron = proto_perl->Iorigenviron; /* XXX not quite right */
8653 PL_origalen = proto_perl->Iorigalen;
8654 PL_pidstatus = newHV(); /* XXX flag for cloning? */
8655 PL_osname = SAVEPV(proto_perl->Iosname);
8656 PL_sh_path = SAVEPV(proto_perl->Ish_path);
8657 PL_sighandlerp = proto_perl->Isighandlerp;
8660 PL_runops = proto_perl->Irunops;
8662 Copy(proto_perl->Itokenbuf, PL_tokenbuf, 256, char);
8665 PL_cshlen = proto_perl->Icshlen;
8666 PL_cshname = SAVEPVN(proto_perl->Icshname, PL_cshlen);
8669 PL_lex_state = proto_perl->Ilex_state;
8670 PL_lex_defer = proto_perl->Ilex_defer;
8671 PL_lex_expect = proto_perl->Ilex_expect;
8672 PL_lex_formbrack = proto_perl->Ilex_formbrack;
8673 PL_lex_dojoin = proto_perl->Ilex_dojoin;
8674 PL_lex_starts = proto_perl->Ilex_starts;
8675 PL_lex_stuff = sv_dup_inc(proto_perl->Ilex_stuff);
8676 PL_lex_repl = sv_dup_inc(proto_perl->Ilex_repl);
8677 PL_lex_op = proto_perl->Ilex_op;
8678 PL_lex_inpat = proto_perl->Ilex_inpat;
8679 PL_lex_inwhat = proto_perl->Ilex_inwhat;
8680 PL_lex_brackets = proto_perl->Ilex_brackets;
8681 i = (PL_lex_brackets < 120 ? 120 : PL_lex_brackets);
8682 PL_lex_brackstack = SAVEPVN(proto_perl->Ilex_brackstack,i);
8683 PL_lex_casemods = proto_perl->Ilex_casemods;
8684 i = (PL_lex_casemods < 12 ? 12 : PL_lex_casemods);
8685 PL_lex_casestack = SAVEPVN(proto_perl->Ilex_casestack,i);
8687 Copy(proto_perl->Inextval, PL_nextval, 5, YYSTYPE);
8688 Copy(proto_perl->Inexttype, PL_nexttype, 5, I32);
8689 PL_nexttoke = proto_perl->Inexttoke;
8691 PL_linestr = sv_dup_inc(proto_perl->Ilinestr);
8692 i = proto_perl->Ibufptr - SvPVX(proto_perl->Ilinestr);
8693 PL_bufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8694 i = proto_perl->Ioldbufptr - SvPVX(proto_perl->Ilinestr);
8695 PL_oldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8696 i = proto_perl->Ioldoldbufptr - SvPVX(proto_perl->Ilinestr);
8697 PL_oldoldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8698 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
8699 i = proto_perl->Ilinestart - SvPVX(proto_perl->Ilinestr);
8700 PL_linestart = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8701 PL_pending_ident = proto_perl->Ipending_ident;
8702 PL_sublex_info = proto_perl->Isublex_info; /* XXX not quite right */
8704 PL_expect = proto_perl->Iexpect;
8706 PL_multi_start = proto_perl->Imulti_start;
8707 PL_multi_end = proto_perl->Imulti_end;
8708 PL_multi_open = proto_perl->Imulti_open;
8709 PL_multi_close = proto_perl->Imulti_close;
8711 PL_error_count = proto_perl->Ierror_count;
8712 PL_subline = proto_perl->Isubline;
8713 PL_subname = sv_dup_inc(proto_perl->Isubname);
8715 PL_min_intro_pending = proto_perl->Imin_intro_pending;
8716 PL_max_intro_pending = proto_perl->Imax_intro_pending;
8717 PL_padix = proto_perl->Ipadix;
8718 PL_padix_floor = proto_perl->Ipadix_floor;
8719 PL_pad_reset_pending = proto_perl->Ipad_reset_pending;
8721 i = proto_perl->Ilast_uni - SvPVX(proto_perl->Ilinestr);
8722 PL_last_uni = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8723 i = proto_perl->Ilast_lop - SvPVX(proto_perl->Ilinestr);
8724 PL_last_lop = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8725 PL_last_lop_op = proto_perl->Ilast_lop_op;
8726 PL_in_my = proto_perl->Iin_my;
8727 PL_in_my_stash = hv_dup(proto_perl->Iin_my_stash);
8729 PL_cryptseen = proto_perl->Icryptseen;
8732 PL_hints = proto_perl->Ihints;
8734 PL_amagic_generation = proto_perl->Iamagic_generation;
8736 #ifdef USE_LOCALE_COLLATE
8737 PL_collation_ix = proto_perl->Icollation_ix;
8738 PL_collation_name = SAVEPV(proto_perl->Icollation_name);
8739 PL_collation_standard = proto_perl->Icollation_standard;
8740 PL_collxfrm_base = proto_perl->Icollxfrm_base;
8741 PL_collxfrm_mult = proto_perl->Icollxfrm_mult;
8742 #endif /* USE_LOCALE_COLLATE */
8744 #ifdef USE_LOCALE_NUMERIC
8745 PL_numeric_name = SAVEPV(proto_perl->Inumeric_name);
8746 PL_numeric_standard = proto_perl->Inumeric_standard;
8747 PL_numeric_local = proto_perl->Inumeric_local;
8748 PL_numeric_radix = proto_perl->Inumeric_radix;
8749 #endif /* !USE_LOCALE_NUMERIC */
8751 /* utf8 character classes */
8752 PL_utf8_alnum = sv_dup_inc(proto_perl->Iutf8_alnum);
8753 PL_utf8_alnumc = sv_dup_inc(proto_perl->Iutf8_alnumc);
8754 PL_utf8_ascii = sv_dup_inc(proto_perl->Iutf8_ascii);
8755 PL_utf8_alpha = sv_dup_inc(proto_perl->Iutf8_alpha);
8756 PL_utf8_space = sv_dup_inc(proto_perl->Iutf8_space);
8757 PL_utf8_cntrl = sv_dup_inc(proto_perl->Iutf8_cntrl);
8758 PL_utf8_graph = sv_dup_inc(proto_perl->Iutf8_graph);
8759 PL_utf8_digit = sv_dup_inc(proto_perl->Iutf8_digit);
8760 PL_utf8_upper = sv_dup_inc(proto_perl->Iutf8_upper);
8761 PL_utf8_lower = sv_dup_inc(proto_perl->Iutf8_lower);
8762 PL_utf8_print = sv_dup_inc(proto_perl->Iutf8_print);
8763 PL_utf8_punct = sv_dup_inc(proto_perl->Iutf8_punct);
8764 PL_utf8_xdigit = sv_dup_inc(proto_perl->Iutf8_xdigit);
8765 PL_utf8_mark = sv_dup_inc(proto_perl->Iutf8_mark);
8766 PL_utf8_toupper = sv_dup_inc(proto_perl->Iutf8_toupper);
8767 PL_utf8_totitle = sv_dup_inc(proto_perl->Iutf8_totitle);
8768 PL_utf8_tolower = sv_dup_inc(proto_perl->Iutf8_tolower);
8771 PL_last_swash_hv = Nullhv; /* reinits on demand */
8772 PL_last_swash_klen = 0;
8773 PL_last_swash_key[0]= '\0';
8774 PL_last_swash_tmps = (U8*)NULL;
8775 PL_last_swash_slen = 0;
8777 /* perly.c globals */
8778 PL_yydebug = proto_perl->Iyydebug;
8779 PL_yynerrs = proto_perl->Iyynerrs;
8780 PL_yyerrflag = proto_perl->Iyyerrflag;
8781 PL_yychar = proto_perl->Iyychar;
8782 PL_yyval = proto_perl->Iyyval;
8783 PL_yylval = proto_perl->Iyylval;
8785 PL_glob_index = proto_perl->Iglob_index;
8786 PL_srand_called = proto_perl->Isrand_called;
8787 PL_uudmap['M'] = 0; /* reinits on demand */
8788 PL_bitcount = Nullch; /* reinits on demand */
8790 if (proto_perl->Ipsig_ptr) {
8791 int sig_num[] = { SIG_NUM };
8792 Newz(0, PL_psig_ptr, sizeof(sig_num)/sizeof(*sig_num), SV*);
8793 Newz(0, PL_psig_name, sizeof(sig_num)/sizeof(*sig_num), SV*);
8794 for (i = 1; PL_sig_name[i]; i++) {
8795 PL_psig_ptr[i] = sv_dup_inc(proto_perl->Ipsig_ptr[i]);
8796 PL_psig_name[i] = sv_dup_inc(proto_perl->Ipsig_name[i]);
8800 PL_psig_ptr = (SV**)NULL;
8801 PL_psig_name = (SV**)NULL;
8804 /* thrdvar.h stuff */
8807 /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
8808 PL_tmps_ix = proto_perl->Ttmps_ix;
8809 PL_tmps_max = proto_perl->Ttmps_max;
8810 PL_tmps_floor = proto_perl->Ttmps_floor;
8811 Newz(50, PL_tmps_stack, PL_tmps_max, SV*);
8813 while (i <= PL_tmps_ix) {
8814 PL_tmps_stack[i] = sv_dup_inc(proto_perl->Ttmps_stack[i]);
8818 /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
8819 i = proto_perl->Tmarkstack_max - proto_perl->Tmarkstack;
8820 Newz(54, PL_markstack, i, I32);
8821 PL_markstack_max = PL_markstack + (proto_perl->Tmarkstack_max
8822 - proto_perl->Tmarkstack);
8823 PL_markstack_ptr = PL_markstack + (proto_perl->Tmarkstack_ptr
8824 - proto_perl->Tmarkstack);
8825 Copy(proto_perl->Tmarkstack, PL_markstack,
8826 PL_markstack_ptr - PL_markstack + 1, I32);
8828 /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
8829 * NOTE: unlike the others! */
8830 PL_scopestack_ix = proto_perl->Tscopestack_ix;
8831 PL_scopestack_max = proto_perl->Tscopestack_max;
8832 Newz(54, PL_scopestack, PL_scopestack_max, I32);
8833 Copy(proto_perl->Tscopestack, PL_scopestack, PL_scopestack_ix, I32);
8835 /* next push_return() sets PL_retstack[PL_retstack_ix]
8836 * NOTE: unlike the others! */
8837 PL_retstack_ix = proto_perl->Tretstack_ix;
8838 PL_retstack_max = proto_perl->Tretstack_max;
8839 Newz(54, PL_retstack, PL_retstack_max, OP*);
8840 Copy(proto_perl->Tretstack, PL_retstack, PL_retstack_ix, I32);
8842 /* NOTE: si_dup() looks at PL_markstack */
8843 PL_curstackinfo = si_dup(proto_perl->Tcurstackinfo);
8845 /* PL_curstack = PL_curstackinfo->si_stack; */
8846 PL_curstack = av_dup(proto_perl->Tcurstack);
8847 PL_mainstack = av_dup(proto_perl->Tmainstack);
8849 /* next PUSHs() etc. set *(PL_stack_sp+1) */
8850 PL_stack_base = AvARRAY(PL_curstack);
8851 PL_stack_sp = PL_stack_base + (proto_perl->Tstack_sp
8852 - proto_perl->Tstack_base);
8853 PL_stack_max = PL_stack_base + AvMAX(PL_curstack);
8855 /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
8856 * NOTE: unlike the others! */
8857 PL_savestack_ix = proto_perl->Tsavestack_ix;
8858 PL_savestack_max = proto_perl->Tsavestack_max;
8859 /*Newz(54, PL_savestack, PL_savestack_max, ANY);*/
8860 PL_savestack = ss_dup(proto_perl);
8864 ENTER; /* perl_destruct() wants to LEAVE; */
8867 PL_start_env = proto_perl->Tstart_env; /* XXXXXX */
8868 PL_top_env = &PL_start_env;
8870 PL_op = proto_perl->Top;
8873 PL_Xpv = (XPV*)NULL;
8874 PL_na = proto_perl->Tna;
8876 PL_statbuf = proto_perl->Tstatbuf;
8877 PL_statcache = proto_perl->Tstatcache;
8878 PL_statgv = gv_dup(proto_perl->Tstatgv);
8879 PL_statname = sv_dup_inc(proto_perl->Tstatname);
8881 PL_timesbuf = proto_perl->Ttimesbuf;
8884 PL_tainted = proto_perl->Ttainted;
8885 PL_curpm = proto_perl->Tcurpm; /* XXX No PMOP ref count */
8886 PL_nrs = sv_dup_inc(proto_perl->Tnrs);
8887 PL_rs = sv_dup_inc(proto_perl->Trs);
8888 PL_last_in_gv = gv_dup(proto_perl->Tlast_in_gv);
8889 PL_ofs_sv = sv_dup_inc(proto_perl->Tofs_sv);
8890 PL_defoutgv = gv_dup_inc(proto_perl->Tdefoutgv);
8891 PL_chopset = proto_perl->Tchopset; /* XXX never deallocated */
8892 PL_toptarget = sv_dup_inc(proto_perl->Ttoptarget);
8893 PL_bodytarget = sv_dup_inc(proto_perl->Tbodytarget);
8894 PL_formtarget = sv_dup(proto_perl->Tformtarget);
8896 PL_restartop = proto_perl->Trestartop;
8897 PL_in_eval = proto_perl->Tin_eval;
8898 PL_delaymagic = proto_perl->Tdelaymagic;
8899 PL_dirty = proto_perl->Tdirty;
8900 PL_localizing = proto_perl->Tlocalizing;
8902 #ifdef PERL_FLEXIBLE_EXCEPTIONS
8903 PL_protect = proto_perl->Tprotect;
8905 PL_errors = sv_dup_inc(proto_perl->Terrors);
8906 PL_av_fetch_sv = Nullsv;
8907 PL_hv_fetch_sv = Nullsv;
8908 Zero(&PL_hv_fetch_ent_mh, 1, HE); /* XXX */
8909 PL_modcount = proto_perl->Tmodcount;
8910 PL_lastgotoprobe = Nullop;
8911 PL_dumpindent = proto_perl->Tdumpindent;
8913 PL_sortcop = (OP*)any_dup(proto_perl->Tsortcop, proto_perl);
8914 PL_sortstash = hv_dup(proto_perl->Tsortstash);
8915 PL_firstgv = gv_dup(proto_perl->Tfirstgv);
8916 PL_secondgv = gv_dup(proto_perl->Tsecondgv);
8917 PL_sortcxix = proto_perl->Tsortcxix;
8918 PL_efloatbuf = Nullch; /* reinits on demand */
8919 PL_efloatsize = 0; /* reinits on demand */
8923 PL_screamfirst = NULL;
8924 PL_screamnext = NULL;
8925 PL_maxscream = -1; /* reinits on demand */
8926 PL_lastscream = Nullsv;
8928 PL_watchaddr = NULL;
8929 PL_watchok = Nullch;
8931 PL_regdummy = proto_perl->Tregdummy;
8932 PL_regcomp_parse = Nullch;
8933 PL_regxend = Nullch;
8934 PL_regcode = (regnode*)NULL;
8937 PL_regprecomp = Nullch;
8942 PL_seen_zerolen = 0;
8944 PL_regcomp_rx = (regexp*)NULL;
8946 PL_colorset = 0; /* reinits PL_colors[] */
8947 /*PL_colors[6] = {0,0,0,0,0,0};*/
8948 PL_reg_whilem_seen = 0;
8949 PL_reginput = Nullch;
8952 PL_regstartp = (I32*)NULL;
8953 PL_regendp = (I32*)NULL;
8954 PL_reglastparen = (U32*)NULL;
8955 PL_regtill = Nullch;
8957 PL_reg_start_tmp = (char**)NULL;
8958 PL_reg_start_tmpl = 0;
8959 PL_regdata = (struct reg_data*)NULL;
8962 PL_reg_eval_set = 0;
8964 PL_regprogram = (regnode*)NULL;
8966 PL_regcc = (CURCUR*)NULL;
8967 PL_reg_call_cc = (struct re_cc_state*)NULL;
8968 PL_reg_re = (regexp*)NULL;
8969 PL_reg_ganch = Nullch;
8971 PL_reg_magic = (MAGIC*)NULL;
8973 PL_reg_oldcurpm = (PMOP*)NULL;
8974 PL_reg_curpm = (PMOP*)NULL;
8975 PL_reg_oldsaved = Nullch;
8976 PL_reg_oldsavedlen = 0;
8978 PL_reg_leftiter = 0;
8979 PL_reg_poscache = Nullch;
8980 PL_reg_poscache_size= 0;
8982 /* RE engine - function pointers */
8983 PL_regcompp = proto_perl->Tregcompp;
8984 PL_regexecp = proto_perl->Tregexecp;
8985 PL_regint_start = proto_perl->Tregint_start;
8986 PL_regint_string = proto_perl->Tregint_string;
8987 PL_regfree = proto_perl->Tregfree;
8989 PL_reginterp_cnt = 0;
8990 PL_reg_starttry = 0;
8993 return (PerlInterpreter*)pPerl;
8999 #else /* !USE_ITHREADS */
9005 #endif /* USE_ITHREADS */
9008 do_report_used(pTHXo_ SV *sv)
9010 if (SvTYPE(sv) != SVTYPEMASK) {
9011 PerlIO_printf(Perl_debug_log, "****\n");
9017 do_clean_objs(pTHXo_ SV *sv)
9021 if (SvROK(sv) && SvOBJECT(rv = SvRV(sv))) {
9022 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(sv));)
9023 if (SvWEAKREF(sv)) {
9034 /* XXX Might want to check arrays, etc. */
9037 #ifndef DISABLE_DESTRUCTOR_KLUDGE
9039 do_clean_named_objs(pTHXo_ SV *sv)
9041 if (SvTYPE(sv) == SVt_PVGV && GvGP(sv)) {
9042 if ( SvOBJECT(GvSV(sv)) ||
9043 (GvAV(sv) && SvOBJECT(GvAV(sv))) ||
9044 (GvHV(sv) && SvOBJECT(GvHV(sv))) ||
9045 (GvIO(sv) && SvOBJECT(GvIO(sv))) ||
9046 (GvCV(sv) && SvOBJECT(GvCV(sv))) )
9048 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning named glob object:\n "), sv_dump(sv));)
9056 do_clean_all(pTHXo_ SV *sv)
9058 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) );)
9059 SvFLAGS(sv) |= SVf_BREAK;