3 * Copyright (c) 1991-2001, Larry Wall
5 * You may distribute under the terms of either the GNU General Public
6 * License or the Artistic License, as specified in the README file.
11 * "I wonder what the Entish is for 'yes' and 'no'," he thought.
19 #define SV_CHECK_THINKFIRST(sv) if (SvTHINKFIRST(sv)) sv_force_normal(sv)
21 static void do_report_used(pTHXo_ SV *sv);
22 static void do_clean_objs(pTHXo_ SV *sv);
23 #ifndef DISABLE_DESTRUCTOR_KLUDGE
24 static void do_clean_named_objs(pTHXo_ SV *sv);
26 static void do_clean_all(pTHXo_ SV *sv);
29 * "A time to plant, and a time to uproot what was planted..."
34 SvANY(p) = (void *)PL_sv_root; \
35 SvFLAGS(p) = SVTYPEMASK; \
40 /* sv_mutex must be held while calling uproot_SV() */
41 #define uproot_SV(p) \
44 PL_sv_root = (SV*)SvANY(p); \
66 if (PL_debug & 32768) \
76 if (PL_debug & 32768) {
81 for (sva = PL_sv_arenaroot; sva; sva = (SV *) SvANY(sva)) {
83 svend = &sva[SvREFCNT(sva)];
84 if (p >= sv && p < svend)
88 if (ckWARN_d(WARN_INTERNAL))
89 Perl_warner(aTHX_ WARN_INTERNAL,
90 "Attempt to free non-arena SV: 0x%"UVxf,
98 #else /* ! DEBUGGING */
100 #define del_SV(p) plant_SV(p)
102 #endif /* DEBUGGING */
105 Perl_sv_add_arena(pTHX_ char *ptr, U32 size, U32 flags)
110 Zero(ptr, size, char);
112 /* The first SV in an arena isn't an SV. */
113 SvANY(sva) = (void *) PL_sv_arenaroot; /* ptr to next arena */
114 SvREFCNT(sva) = size / sizeof(SV); /* number of SV slots */
115 SvFLAGS(sva) = flags; /* FAKE if not to be freed */
117 PL_sv_arenaroot = sva;
118 PL_sv_root = sva + 1;
120 svend = &sva[SvREFCNT(sva) - 1];
123 SvANY(sv) = (void *)(SV*)(sv + 1);
124 SvFLAGS(sv) = SVTYPEMASK;
128 SvFLAGS(sv) = SVTYPEMASK;
131 /* sv_mutex must be held while calling more_sv() */
138 sv_add_arena(PL_nice_chunk, PL_nice_chunk_size, 0);
139 PL_nice_chunk = Nullch;
142 char *chunk; /* must use New here to match call to */
143 New(704,chunk,1008,char); /* Safefree() in sv_free_arenas() */
144 sv_add_arena(chunk, 1008, 0);
151 S_visit(pTHX_ SVFUNC_t f)
157 for (sva = PL_sv_arenaroot; sva; sva = (SV*)SvANY(sva)) {
158 svend = &sva[SvREFCNT(sva)];
159 for (sv = sva + 1; sv < svend; ++sv) {
160 if (SvTYPE(sv) != SVTYPEMASK)
167 Perl_sv_report_used(pTHX)
169 visit(do_report_used);
173 Perl_sv_clean_objs(pTHX)
175 PL_in_clean_objs = TRUE;
176 visit(do_clean_objs);
177 #ifndef DISABLE_DESTRUCTOR_KLUDGE
178 /* some barnacles may yet remain, clinging to typeglobs */
179 visit(do_clean_named_objs);
181 PL_in_clean_objs = FALSE;
185 Perl_sv_clean_all(pTHX)
187 PL_in_clean_all = TRUE;
189 PL_in_clean_all = FALSE;
193 Perl_sv_free_arenas(pTHX)
197 XPV *arena, *arenanext;
199 /* Free arenas here, but be careful about fake ones. (We assume
200 contiguity of the fake ones with the corresponding real ones.) */
202 for (sva = PL_sv_arenaroot; sva; sva = svanext) {
203 svanext = (SV*) SvANY(sva);
204 while (svanext && SvFAKE(svanext))
205 svanext = (SV*) SvANY(svanext);
208 Safefree((void *)sva);
211 for (arena = PL_xiv_arenaroot; arena; arena = arenanext) {
212 arenanext = (XPV*)arena->xpv_pv;
215 PL_xiv_arenaroot = 0;
217 for (arena = PL_xnv_arenaroot; arena; arena = arenanext) {
218 arenanext = (XPV*)arena->xpv_pv;
221 PL_xnv_arenaroot = 0;
223 for (arena = PL_xrv_arenaroot; arena; arena = arenanext) {
224 arenanext = (XPV*)arena->xpv_pv;
227 PL_xrv_arenaroot = 0;
229 for (arena = PL_xpv_arenaroot; arena; arena = arenanext) {
230 arenanext = (XPV*)arena->xpv_pv;
233 PL_xpv_arenaroot = 0;
235 for (arena = (XPV*)PL_xpviv_arenaroot; arena; arena = arenanext) {
236 arenanext = (XPV*)arena->xpv_pv;
239 PL_xpviv_arenaroot = 0;
241 for (arena = (XPV*)PL_xpvnv_arenaroot; arena; arena = arenanext) {
242 arenanext = (XPV*)arena->xpv_pv;
245 PL_xpvnv_arenaroot = 0;
247 for (arena = (XPV*)PL_xpvcv_arenaroot; arena; arena = arenanext) {
248 arenanext = (XPV*)arena->xpv_pv;
251 PL_xpvcv_arenaroot = 0;
253 for (arena = (XPV*)PL_xpvav_arenaroot; arena; arena = arenanext) {
254 arenanext = (XPV*)arena->xpv_pv;
257 PL_xpvav_arenaroot = 0;
259 for (arena = (XPV*)PL_xpvhv_arenaroot; arena; arena = arenanext) {
260 arenanext = (XPV*)arena->xpv_pv;
263 PL_xpvhv_arenaroot = 0;
265 for (arena = (XPV*)PL_xpvmg_arenaroot; arena; arena = arenanext) {
266 arenanext = (XPV*)arena->xpv_pv;
269 PL_xpvmg_arenaroot = 0;
271 for (arena = (XPV*)PL_xpvlv_arenaroot; arena; arena = arenanext) {
272 arenanext = (XPV*)arena->xpv_pv;
275 PL_xpvlv_arenaroot = 0;
277 for (arena = (XPV*)PL_xpvbm_arenaroot; arena; arena = arenanext) {
278 arenanext = (XPV*)arena->xpv_pv;
281 PL_xpvbm_arenaroot = 0;
283 for (arena = (XPV*)PL_he_arenaroot; arena; arena = arenanext) {
284 arenanext = (XPV*)arena->xpv_pv;
290 Safefree(PL_nice_chunk);
291 PL_nice_chunk = Nullch;
292 PL_nice_chunk_size = 0;
298 Perl_report_uninit(pTHX)
301 Perl_warner(aTHX_ WARN_UNINITIALIZED, PL_warn_uninit,
302 " in ", PL_op_desc[PL_op->op_type]);
304 Perl_warner(aTHX_ WARN_UNINITIALIZED, PL_warn_uninit, "", "");
316 * See comment in more_xiv() -- RAM.
318 PL_xiv_root = *(IV**)xiv;
320 return (XPVIV*)((char*)xiv - STRUCT_OFFSET(XPVIV, xiv_iv));
324 S_del_xiv(pTHX_ XPVIV *p)
326 IV* xiv = (IV*)((char*)(p) + STRUCT_OFFSET(XPVIV, xiv_iv));
328 *(IV**)xiv = PL_xiv_root;
339 New(705, ptr, 1008/sizeof(XPV), XPV);
340 ptr->xpv_pv = (char*)PL_xiv_arenaroot; /* linked list of xiv arenas */
341 PL_xiv_arenaroot = ptr; /* to keep Purify happy */
344 xivend = &xiv[1008 / sizeof(IV) - 1];
345 xiv += (sizeof(XPV) - 1) / sizeof(IV) + 1; /* fudge by size of XPV */
347 while (xiv < xivend) {
348 *(IV**)xiv = (IV *)(xiv + 1);
362 PL_xnv_root = *(NV**)xnv;
364 return (XPVNV*)((char*)xnv - STRUCT_OFFSET(XPVNV, xnv_nv));
368 S_del_xnv(pTHX_ XPVNV *p)
370 NV* xnv = (NV*)((char*)(p) + STRUCT_OFFSET(XPVNV, xnv_nv));
372 *(NV**)xnv = PL_xnv_root;
383 New(711, ptr, 1008/sizeof(XPV), XPV);
384 ptr->xpv_pv = (char*)PL_xnv_arenaroot;
385 PL_xnv_arenaroot = ptr;
388 xnvend = &xnv[1008 / sizeof(NV) - 1];
389 xnv += (sizeof(XPVIV) - 1) / sizeof(NV) + 1; /* fudge by sizeof XPVIV */
391 while (xnv < xnvend) {
392 *(NV**)xnv = (NV*)(xnv + 1);
406 PL_xrv_root = (XRV*)xrv->xrv_rv;
412 S_del_xrv(pTHX_ XRV *p)
415 p->xrv_rv = (SV*)PL_xrv_root;
424 register XRV* xrvend;
426 New(712, ptr, 1008/sizeof(XPV), XPV);
427 ptr->xpv_pv = (char*)PL_xrv_arenaroot;
428 PL_xrv_arenaroot = ptr;
431 xrvend = &xrv[1008 / sizeof(XRV) - 1];
432 xrv += (sizeof(XPV) - 1) / sizeof(XRV) + 1;
434 while (xrv < xrvend) {
435 xrv->xrv_rv = (SV*)(xrv + 1);
449 PL_xpv_root = (XPV*)xpv->xpv_pv;
455 S_del_xpv(pTHX_ XPV *p)
458 p->xpv_pv = (char*)PL_xpv_root;
467 register XPV* xpvend;
468 New(713, xpv, 1008/sizeof(XPV), XPV);
469 xpv->xpv_pv = (char*)PL_xpv_arenaroot;
470 PL_xpv_arenaroot = xpv;
472 xpvend = &xpv[1008 / sizeof(XPV) - 1];
474 while (xpv < xpvend) {
475 xpv->xpv_pv = (char*)(xpv + 1);
488 xpviv = PL_xpviv_root;
489 PL_xpviv_root = (XPVIV*)xpviv->xpv_pv;
495 S_del_xpviv(pTHX_ XPVIV *p)
498 p->xpv_pv = (char*)PL_xpviv_root;
506 register XPVIV* xpviv;
507 register XPVIV* xpvivend;
508 New(714, xpviv, 1008/sizeof(XPVIV), XPVIV);
509 xpviv->xpv_pv = (char*)PL_xpviv_arenaroot;
510 PL_xpviv_arenaroot = xpviv;
512 xpvivend = &xpviv[1008 / sizeof(XPVIV) - 1];
513 PL_xpviv_root = ++xpviv;
514 while (xpviv < xpvivend) {
515 xpviv->xpv_pv = (char*)(xpviv + 1);
528 xpvnv = PL_xpvnv_root;
529 PL_xpvnv_root = (XPVNV*)xpvnv->xpv_pv;
535 S_del_xpvnv(pTHX_ XPVNV *p)
538 p->xpv_pv = (char*)PL_xpvnv_root;
546 register XPVNV* xpvnv;
547 register XPVNV* xpvnvend;
548 New(715, xpvnv, 1008/sizeof(XPVNV), XPVNV);
549 xpvnv->xpv_pv = (char*)PL_xpvnv_arenaroot;
550 PL_xpvnv_arenaroot = xpvnv;
552 xpvnvend = &xpvnv[1008 / sizeof(XPVNV) - 1];
553 PL_xpvnv_root = ++xpvnv;
554 while (xpvnv < xpvnvend) {
555 xpvnv->xpv_pv = (char*)(xpvnv + 1);
568 xpvcv = PL_xpvcv_root;
569 PL_xpvcv_root = (XPVCV*)xpvcv->xpv_pv;
575 S_del_xpvcv(pTHX_ XPVCV *p)
578 p->xpv_pv = (char*)PL_xpvcv_root;
586 register XPVCV* xpvcv;
587 register XPVCV* xpvcvend;
588 New(716, xpvcv, 1008/sizeof(XPVCV), XPVCV);
589 xpvcv->xpv_pv = (char*)PL_xpvcv_arenaroot;
590 PL_xpvcv_arenaroot = xpvcv;
592 xpvcvend = &xpvcv[1008 / sizeof(XPVCV) - 1];
593 PL_xpvcv_root = ++xpvcv;
594 while (xpvcv < xpvcvend) {
595 xpvcv->xpv_pv = (char*)(xpvcv + 1);
608 xpvav = PL_xpvav_root;
609 PL_xpvav_root = (XPVAV*)xpvav->xav_array;
615 S_del_xpvav(pTHX_ XPVAV *p)
618 p->xav_array = (char*)PL_xpvav_root;
626 register XPVAV* xpvav;
627 register XPVAV* xpvavend;
628 New(717, xpvav, 1008/sizeof(XPVAV), XPVAV);
629 xpvav->xav_array = (char*)PL_xpvav_arenaroot;
630 PL_xpvav_arenaroot = xpvav;
632 xpvavend = &xpvav[1008 / sizeof(XPVAV) - 1];
633 PL_xpvav_root = ++xpvav;
634 while (xpvav < xpvavend) {
635 xpvav->xav_array = (char*)(xpvav + 1);
638 xpvav->xav_array = 0;
648 xpvhv = PL_xpvhv_root;
649 PL_xpvhv_root = (XPVHV*)xpvhv->xhv_array;
655 S_del_xpvhv(pTHX_ XPVHV *p)
658 p->xhv_array = (char*)PL_xpvhv_root;
666 register XPVHV* xpvhv;
667 register XPVHV* xpvhvend;
668 New(718, xpvhv, 1008/sizeof(XPVHV), XPVHV);
669 xpvhv->xhv_array = (char*)PL_xpvhv_arenaroot;
670 PL_xpvhv_arenaroot = xpvhv;
672 xpvhvend = &xpvhv[1008 / sizeof(XPVHV) - 1];
673 PL_xpvhv_root = ++xpvhv;
674 while (xpvhv < xpvhvend) {
675 xpvhv->xhv_array = (char*)(xpvhv + 1);
678 xpvhv->xhv_array = 0;
688 xpvmg = PL_xpvmg_root;
689 PL_xpvmg_root = (XPVMG*)xpvmg->xpv_pv;
695 S_del_xpvmg(pTHX_ XPVMG *p)
698 p->xpv_pv = (char*)PL_xpvmg_root;
706 register XPVMG* xpvmg;
707 register XPVMG* xpvmgend;
708 New(719, xpvmg, 1008/sizeof(XPVMG), XPVMG);
709 xpvmg->xpv_pv = (char*)PL_xpvmg_arenaroot;
710 PL_xpvmg_arenaroot = xpvmg;
712 xpvmgend = &xpvmg[1008 / sizeof(XPVMG) - 1];
713 PL_xpvmg_root = ++xpvmg;
714 while (xpvmg < xpvmgend) {
715 xpvmg->xpv_pv = (char*)(xpvmg + 1);
728 xpvlv = PL_xpvlv_root;
729 PL_xpvlv_root = (XPVLV*)xpvlv->xpv_pv;
735 S_del_xpvlv(pTHX_ XPVLV *p)
738 p->xpv_pv = (char*)PL_xpvlv_root;
746 register XPVLV* xpvlv;
747 register XPVLV* xpvlvend;
748 New(720, xpvlv, 1008/sizeof(XPVLV), XPVLV);
749 xpvlv->xpv_pv = (char*)PL_xpvlv_arenaroot;
750 PL_xpvlv_arenaroot = xpvlv;
752 xpvlvend = &xpvlv[1008 / sizeof(XPVLV) - 1];
753 PL_xpvlv_root = ++xpvlv;
754 while (xpvlv < xpvlvend) {
755 xpvlv->xpv_pv = (char*)(xpvlv + 1);
768 xpvbm = PL_xpvbm_root;
769 PL_xpvbm_root = (XPVBM*)xpvbm->xpv_pv;
775 S_del_xpvbm(pTHX_ XPVBM *p)
778 p->xpv_pv = (char*)PL_xpvbm_root;
786 register XPVBM* xpvbm;
787 register XPVBM* xpvbmend;
788 New(721, xpvbm, 1008/sizeof(XPVBM), XPVBM);
789 xpvbm->xpv_pv = (char*)PL_xpvbm_arenaroot;
790 PL_xpvbm_arenaroot = xpvbm;
792 xpvbmend = &xpvbm[1008 / sizeof(XPVBM) - 1];
793 PL_xpvbm_root = ++xpvbm;
794 while (xpvbm < xpvbmend) {
795 xpvbm->xpv_pv = (char*)(xpvbm + 1);
802 # define my_safemalloc(s) (void*)safexmalloc(717,s)
803 # define my_safefree(p) safexfree((char*)p)
805 # define my_safemalloc(s) (void*)safemalloc(s)
806 # define my_safefree(p) safefree((char*)p)
811 #define new_XIV() my_safemalloc(sizeof(XPVIV))
812 #define del_XIV(p) my_safefree(p)
814 #define new_XNV() my_safemalloc(sizeof(XPVNV))
815 #define del_XNV(p) my_safefree(p)
817 #define new_XRV() my_safemalloc(sizeof(XRV))
818 #define del_XRV(p) my_safefree(p)
820 #define new_XPV() my_safemalloc(sizeof(XPV))
821 #define del_XPV(p) my_safefree(p)
823 #define new_XPVIV() my_safemalloc(sizeof(XPVIV))
824 #define del_XPVIV(p) my_safefree(p)
826 #define new_XPVNV() my_safemalloc(sizeof(XPVNV))
827 #define del_XPVNV(p) my_safefree(p)
829 #define new_XPVCV() my_safemalloc(sizeof(XPVCV))
830 #define del_XPVCV(p) my_safefree(p)
832 #define new_XPVAV() my_safemalloc(sizeof(XPVAV))
833 #define del_XPVAV(p) my_safefree(p)
835 #define new_XPVHV() my_safemalloc(sizeof(XPVHV))
836 #define del_XPVHV(p) my_safefree(p)
838 #define new_XPVMG() my_safemalloc(sizeof(XPVMG))
839 #define del_XPVMG(p) my_safefree(p)
841 #define new_XPVLV() my_safemalloc(sizeof(XPVLV))
842 #define del_XPVLV(p) my_safefree(p)
844 #define new_XPVBM() my_safemalloc(sizeof(XPVBM))
845 #define del_XPVBM(p) my_safefree(p)
849 #define new_XIV() (void*)new_xiv()
850 #define del_XIV(p) del_xiv((XPVIV*) p)
852 #define new_XNV() (void*)new_xnv()
853 #define del_XNV(p) del_xnv((XPVNV*) p)
855 #define new_XRV() (void*)new_xrv()
856 #define del_XRV(p) del_xrv((XRV*) p)
858 #define new_XPV() (void*)new_xpv()
859 #define del_XPV(p) del_xpv((XPV *)p)
861 #define new_XPVIV() (void*)new_xpviv()
862 #define del_XPVIV(p) del_xpviv((XPVIV *)p)
864 #define new_XPVNV() (void*)new_xpvnv()
865 #define del_XPVNV(p) del_xpvnv((XPVNV *)p)
867 #define new_XPVCV() (void*)new_xpvcv()
868 #define del_XPVCV(p) del_xpvcv((XPVCV *)p)
870 #define new_XPVAV() (void*)new_xpvav()
871 #define del_XPVAV(p) del_xpvav((XPVAV *)p)
873 #define new_XPVHV() (void*)new_xpvhv()
874 #define del_XPVHV(p) del_xpvhv((XPVHV *)p)
876 #define new_XPVMG() (void*)new_xpvmg()
877 #define del_XPVMG(p) del_xpvmg((XPVMG *)p)
879 #define new_XPVLV() (void*)new_xpvlv()
880 #define del_XPVLV(p) del_xpvlv((XPVLV *)p)
882 #define new_XPVBM() (void*)new_xpvbm()
883 #define del_XPVBM(p) del_xpvbm((XPVBM *)p)
887 #define new_XPVGV() my_safemalloc(sizeof(XPVGV))
888 #define del_XPVGV(p) my_safefree(p)
890 #define new_XPVFM() my_safemalloc(sizeof(XPVFM))
891 #define del_XPVFM(p) my_safefree(p)
893 #define new_XPVIO() my_safemalloc(sizeof(XPVIO))
894 #define del_XPVIO(p) my_safefree(p)
897 =for apidoc sv_upgrade
899 Upgrade an SV to a more complex form. Use C<SvUPGRADE>. See
906 Perl_sv_upgrade(pTHX_ register SV *sv, U32 mt)
916 if (mt != SVt_PV && SvREADONLY(sv) && SvFAKE(sv)) {
920 if (SvTYPE(sv) == mt)
926 switch (SvTYPE(sv)) {
947 else if (mt < SVt_PVIV)
964 pv = (char*)SvRV(sv);
984 else if (mt == SVt_NV)
995 del_XPVIV(SvANY(sv));
1005 del_XPVNV(SvANY(sv));
1013 magic = SvMAGIC(sv);
1014 stash = SvSTASH(sv);
1015 del_XPVMG(SvANY(sv));
1018 Perl_croak(aTHX_ "Can't upgrade that kind of scalar");
1023 Perl_croak(aTHX_ "Can't upgrade to undef");
1025 SvANY(sv) = new_XIV();
1029 SvANY(sv) = new_XNV();
1033 SvANY(sv) = new_XRV();
1037 SvANY(sv) = new_XPV();
1043 SvANY(sv) = new_XPVIV();
1053 SvANY(sv) = new_XPVNV();
1061 SvANY(sv) = new_XPVMG();
1067 SvMAGIC(sv) = magic;
1068 SvSTASH(sv) = stash;
1071 SvANY(sv) = new_XPVLV();
1077 SvMAGIC(sv) = magic;
1078 SvSTASH(sv) = stash;
1085 SvANY(sv) = new_XPVAV();
1093 SvMAGIC(sv) = magic;
1094 SvSTASH(sv) = stash;
1100 SvANY(sv) = new_XPVHV();
1108 SvMAGIC(sv) = magic;
1109 SvSTASH(sv) = stash;
1116 SvANY(sv) = new_XPVCV();
1117 Zero(SvANY(sv), 1, XPVCV);
1123 SvMAGIC(sv) = magic;
1124 SvSTASH(sv) = stash;
1127 SvANY(sv) = new_XPVGV();
1133 SvMAGIC(sv) = magic;
1134 SvSTASH(sv) = stash;
1142 SvANY(sv) = new_XPVBM();
1148 SvMAGIC(sv) = magic;
1149 SvSTASH(sv) = stash;
1155 SvANY(sv) = new_XPVFM();
1156 Zero(SvANY(sv), 1, XPVFM);
1162 SvMAGIC(sv) = magic;
1163 SvSTASH(sv) = stash;
1166 SvANY(sv) = new_XPVIO();
1167 Zero(SvANY(sv), 1, XPVIO);
1173 SvMAGIC(sv) = magic;
1174 SvSTASH(sv) = stash;
1175 IoPAGE_LEN(sv) = 60;
1178 SvFLAGS(sv) &= ~SVTYPEMASK;
1184 Perl_sv_backoff(pTHX_ register SV *sv)
1188 char *s = SvPVX(sv);
1189 SvLEN(sv) += SvIVX(sv);
1190 SvPVX(sv) -= SvIVX(sv);
1192 Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1194 SvFLAGS(sv) &= ~SVf_OOK;
1201 Expands the character buffer in the SV. This will use C<sv_unref> and will
1202 upgrade the SV to C<SVt_PV>. Returns a pointer to the character buffer.
1209 Perl_sv_grow(pTHX_ register SV *sv, register STRLEN newlen)
1213 #ifdef HAS_64K_LIMIT
1214 if (newlen >= 0x10000) {
1215 PerlIO_printf(Perl_debug_log,
1216 "Allocation too large: %"UVxf"\n", (UV)newlen);
1219 #endif /* HAS_64K_LIMIT */
1222 if (SvTYPE(sv) < SVt_PV) {
1223 sv_upgrade(sv, SVt_PV);
1226 else if (SvOOK(sv)) { /* pv is offset? */
1229 if (newlen > SvLEN(sv))
1230 newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1231 #ifdef HAS_64K_LIMIT
1232 if (newlen >= 0x10000)
1238 if (newlen > SvLEN(sv)) { /* need more room? */
1239 if (SvLEN(sv) && s) {
1240 #if defined(MYMALLOC) && !defined(LEAKTEST)
1241 STRLEN l = malloced_size((void*)SvPVX(sv));
1247 Renew(s,newlen,char);
1250 New(703,s,newlen,char);
1252 SvLEN_set(sv, newlen);
1258 =for apidoc sv_setiv
1260 Copies an integer into the given SV. Does not handle 'set' magic. See
1267 Perl_sv_setiv(pTHX_ register SV *sv, IV i)
1269 SV_CHECK_THINKFIRST(sv);
1270 switch (SvTYPE(sv)) {
1272 sv_upgrade(sv, SVt_IV);
1275 sv_upgrade(sv, SVt_PVNV);
1279 sv_upgrade(sv, SVt_PVIV);
1288 Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1289 PL_op_desc[PL_op->op_type]);
1291 (void)SvIOK_only(sv); /* validate number */
1297 =for apidoc sv_setiv_mg
1299 Like C<sv_setiv>, but also handles 'set' magic.
1305 Perl_sv_setiv_mg(pTHX_ register SV *sv, IV i)
1312 =for apidoc sv_setuv
1314 Copies an unsigned integer into the given SV. Does not handle 'set' magic.
1321 Perl_sv_setuv(pTHX_ register SV *sv, UV u)
1323 /* With these two if statements:
1324 u=1.49 s=0.52 cu=72.49 cs=10.64 scripts=270 tests=20865
1327 u=1.35 s=0.47 cu=73.45 cs=11.43 scripts=270 tests=20865
1329 If you wish to remove them, please benchmark to see what the effect is
1331 if (u <= (UV)IV_MAX) {
1332 sv_setiv(sv, (IV)u);
1341 =for apidoc sv_setuv_mg
1343 Like C<sv_setuv>, but also handles 'set' magic.
1349 Perl_sv_setuv_mg(pTHX_ register SV *sv, UV u)
1351 /* With these two if statements:
1352 u=1.49 s=0.52 cu=72.49 cs=10.64 scripts=270 tests=20865
1355 u=1.35 s=0.47 cu=73.45 cs=11.43 scripts=270 tests=20865
1357 If you wish to remove them, please benchmark to see what the effect is
1359 if (u <= (UV)IV_MAX) {
1360 sv_setiv(sv, (IV)u);
1370 =for apidoc sv_setnv
1372 Copies a double into the given SV. Does not handle 'set' magic. See
1379 Perl_sv_setnv(pTHX_ register SV *sv, NV num)
1381 SV_CHECK_THINKFIRST(sv);
1382 switch (SvTYPE(sv)) {
1385 sv_upgrade(sv, SVt_NV);
1390 sv_upgrade(sv, SVt_PVNV);
1399 Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1400 PL_op_name[PL_op->op_type]);
1403 (void)SvNOK_only(sv); /* validate number */
1408 =for apidoc sv_setnv_mg
1410 Like C<sv_setnv>, but also handles 'set' magic.
1416 Perl_sv_setnv_mg(pTHX_ register SV *sv, NV num)
1423 S_not_a_number(pTHX_ SV *sv)
1428 char *limit = tmpbuf + sizeof(tmpbuf) - 8;
1429 /* each *s can expand to 4 chars + "...\0",
1430 i.e. need room for 8 chars */
1432 for (s = SvPVX(sv); *s && d < limit; s++) {
1434 if (ch & 128 && !isPRINT_LC(ch)) {
1443 else if (ch == '\r') {
1447 else if (ch == '\f') {
1451 else if (ch == '\\') {
1455 else if (isPRINT_LC(ch))
1470 Perl_warner(aTHX_ WARN_NUMERIC,
1471 "Argument \"%s\" isn't numeric in %s", tmpbuf,
1472 PL_op_desc[PL_op->op_type]);
1474 Perl_warner(aTHX_ WARN_NUMERIC,
1475 "Argument \"%s\" isn't numeric", tmpbuf);
1478 /* the number can be converted to integer with atol() or atoll() although */
1479 #define IS_NUMBER_TO_INT_BY_ATOL 0x01 /* integer (may have decimals) */
1480 #define IS_NUMBER_TO_INT_BY_STRTOL 0x02 /* it may exceed IV_MAX */
1481 #define IS_NUMBER_TO_INT_BY_ATOF 0x04 /* seen something like 123e4 */
1482 #define IS_NUMBER_LONGER_THAN_IV_MAX 0x08 /* more digits than IV_MAX */
1483 #define IS_NUMBER_AS_LONG_AS_IV_MAX 0x10 /* may(be not) larger than IV_MAX */
1484 #define IS_NUMBER_NOT_INT 0x20 /* seen a decimal point or e */
1485 #define IS_NUMBER_NEG 0x40 /* seen a leading - */
1486 #define IS_NUMBER_INFINITY 0x80 /* /^\s*-?Infinity\s*$/i */
1488 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1489 until proven guilty, assume that things are not that bad... */
1491 /* As 64 bit platforms often have an NV that doesn't preserve all bits of
1492 an IV (an assumption perl has been based on to date) it becomes necessary
1493 to remove the assumption that the NV always carries enough precision to
1494 recreate the IV whenever needed, and that the NV is the canonical form.
1495 Instead, IV/UV and NV need to be given equal rights. So as to not lose
1496 precision as an side effect of conversion (which would lead to insanity
1497 and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1498 1) to distinguish between IV/UV/NV slots that have cached a valid
1499 conversion where precision was lost and IV/UV/NV slots that have a
1500 valid conversion which has lost no precision
1501 2) to ensure that if a numeric conversion to one form is request that
1502 would lose precision, the precise conversion (or differently
1503 imprecise conversion) is also performed and cached, to prevent
1504 requests for different numeric formats on the same SV causing
1505 lossy conversion chains. (lossless conversion chains are perfectly
1510 SvIOKp is true if the IV slot contains a valid value
1511 SvIOK is true only if the IV value is accurate (UV if SvIOK_UV true)
1512 SvNOKp is true if the NV slot contains a valid value
1513 SvNOK is true only if the NV value is accurate
1516 while converting from PV to NV check to see if converting that NV to an
1517 IV(or UV) would lose accuracy over a direct conversion from PV to
1518 IV(or UV). If it would, cache both conversions, return NV, but mark
1519 SV as IOK NOKp (ie not NOK).
1521 while converting from PV to IV check to see if converting that IV to an
1522 NV would lose accuracy over a direct conversion from PV to NV. If it
1523 would, cache both conversions, flag similarly.
1525 Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1526 correctly because if IV & NV were set NV *always* overruled.
1527 Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flags meaning
1528 changes - now IV and NV together means that the two are interchangeable
1529 SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1531 The benefit of this is operations such as pp_add know that if SvIOK is
1532 true for both left and right operands, then integer addition can be
1533 used instead of floating point. (for cases where the result won't
1534 overflow) Before, floating point was always used, which could lead to
1535 loss of precision compared with integer addition.
1537 * making IV and NV equal status should make maths accurate on 64 bit
1539 * may speed up maths somewhat if pp_add and friends start to use
1540 integers when possible instead of fp. (hopefully the overhead in
1541 looking for SvIOK and checking for overflow will not outweigh the
1542 fp to integer speedup)
1543 * will slow down integer operations (callers of SvIV) on "inaccurate"
1544 values, as the change from SvIOK to SvIOKp will cause a call into
1545 sv_2iv each time rather than a macro access direct to the IV slot
1546 * should speed up number->string conversion on integers as IV is
1547 favoured when IV and NV equally accurate
1549 ####################################################################
1550 You had better be using SvIOK_notUV if you want an IV for arithmetic
1551 SvIOK is true if (IV or UV), so you might be getting (IV)SvUV
1552 SvUOK is true iff UV.
1553 ####################################################################
1555 Your mileage will vary depending your CPUs relative fp to integer
1559 #ifndef NV_PRESERVES_UV
1560 #define IS_NUMBER_UNDERFLOW_IV 1
1561 #define IS_NUMBER_UNDERFLOW_UV 2
1562 #define IS_NUMBER_IV_AND_UV 2
1563 #define IS_NUMBER_OVERFLOW_IV 4
1564 #define IS_NUMBER_OVERFLOW_UV 5
1565 /* Hopefully your optimiser will consider inlining these two functions. */
1567 S_sv_2inuv_non_preserve (pTHX_ register SV *sv, I32 numtype) {
1568 NV nv = SvNVX(sv); /* Code simpler and had compiler problems if */
1569 UV nv_as_uv = U_V(nv); /* these are not in simple variables. */
1570 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_2inuv_non '%s', IV=0x%"UVxf" NV=%g inttype=%"UVXf"\n", SvPVX(sv), SvIVX(sv), nv, (UV)numtype));
1571 if (nv_as_uv <= (UV)IV_MAX) {
1572 (void)SvIOKp_on(sv);
1573 (void)SvNOKp_on(sv);
1574 /* Within suitable range to fit in an IV, atol won't overflow */
1575 /* XXX quite sure? Is that your final answer? not really, I'm
1576 trusting that nv_as_uv to round down if NV is (IV_MAX + 1) */
1577 SvIVX(sv) = (IV)Atol(SvPVX(sv));
1578 if (numtype & IS_NUMBER_NOT_INT) {
1579 /* I believe that even if the original PV had decimals, they
1580 are lost beyond the limit of the FP precision.
1581 However, neither is canonical, so both only get p flags.
1583 /* Both already have p flags, so do nothing */
1584 } else if (SvIVX(sv) == I_V(nv)) {
1589 /* It had no "." so it must be integer. assert (get in here from
1590 sv_2iv and sv_2uv only for ndef HAS_STRTOL and
1591 IS_NUMBER_AS_LONG_AS_IV_MAX) or my logic is faulty and all
1592 conversion routines need audit. */
1594 return nv < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
1596 /* between IV_MAX and NV(UV_MAX). Could be slightly> UV_MAX */
1597 (void)SvIOKp_on(sv);
1598 (void)SvNOKp_on(sv);
1601 int save_errno = errno;
1603 SvUVX(sv) = Strtoul(SvPVX(sv), Null(char**), 10);
1605 if (numtype & IS_NUMBER_NOT_INT) {
1606 /* UV and NV both imprecise. */
1608 } else if (SvUVX(sv) == nv_as_uv && SvUVX(sv) != UV_MAX) {
1617 return IS_NUMBER_OVERFLOW_IV;
1621 /* Must have just overflowed UV, but not enough that an NV could spot
1623 return IS_NUMBER_OVERFLOW_UV;
1626 /* We've just lost integer precision, nothing we could do. */
1627 SvUVX(sv) = nv_as_uv;
1628 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_2niuv_non UV? '%s', UV=0x%"UVxf" NV=%g U_V(NV)=0x%"UVxf" inttype=%"UVXf"\n", SvPVX(sv), SvIVX(sv), nv, nv_as_uv, (UV)numtype));
1629 /* UV and NV slots equally valid only if we have casting symmetry. */
1630 if (numtype & IS_NUMBER_NOT_INT) {
1632 } else if (SvUVX(sv) == nv_as_uv && SvUVX(sv) != UV_MAX) {
1633 /* UV_MAX can cast up to NV (UV_MAX+1), that NV casts down to UV_MAX
1634 UV_MAX ought to be 0xFF...FFF which won't preserve (We only
1635 get to this point if NVs don't preserve UVs) */
1640 /* As above, I believe UV at least as good as NV */
1643 #endif /* HAS_STRTOUL */
1644 return IS_NUMBER_OVERFLOW_IV;
1647 /* For sv_2nv these three cases are "SvNOK and don't bother casting" */
1649 S_sv_2iuv_non_preserve (pTHX_ register SV *sv, I32 numtype)
1651 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_2iuv_non '%s', IV=0x%"UVxf" NV=%g inttype=%"UVXf"\n", SvPVX(sv), SvIVX(sv), SvNVX(sv), (UV)numtype));
1652 if (SvNVX(sv) < (NV)IV_MIN) {
1653 (void)SvIOKp_on(sv);
1656 return IS_NUMBER_UNDERFLOW_IV;
1658 if (SvNVX(sv) > (NV)UV_MAX) {
1659 (void)SvIOKp_on(sv);
1663 return IS_NUMBER_OVERFLOW_UV;
1665 if (!(numtype & (IS_NUMBER_TO_INT_BY_ATOL | IS_NUMBER_TO_INT_BY_STRTOL))) {
1666 (void)SvIOKp_on(sv);
1668 /* Can't use strtol etc to convert this string */
1669 if (SvNVX(sv) <= (UV)IV_MAX) {
1670 SvIVX(sv) = I_V(SvNVX(sv));
1671 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1672 SvIOK_on(sv); /* Integer is precise. NOK, IOK */
1674 /* Integer is imprecise. NOK, IOKp */
1676 return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
1679 SvUVX(sv) = U_V(SvNVX(sv));
1680 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
1681 if (SvUVX(sv) == UV_MAX) {
1682 /* As we know that NVs don't preserve UVs, UV_MAX cannot
1683 possibly be preserved by NV. Hence, it must be overflow.
1685 return IS_NUMBER_OVERFLOW_UV;
1687 SvIOK_on(sv); /* Integer is precise. NOK, UOK */
1689 /* Integer is imprecise. NOK, IOKp */
1691 return IS_NUMBER_OVERFLOW_IV;
1693 return S_sv_2inuv_non_preserve(aTHX_ sv, numtype);
1695 #endif /* NV_PRESERVES_UV*/
1698 Perl_sv_2iv(pTHX_ register SV *sv)
1702 if (SvGMAGICAL(sv)) {
1707 return I_V(SvNVX(sv));
1709 if (SvPOKp(sv) && SvLEN(sv))
1712 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
1713 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
1719 if (SvTHINKFIRST(sv)) {
1722 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
1723 (SvRV(tmpstr) != SvRV(sv)))
1724 return SvIV(tmpstr);
1725 return PTR2IV(SvRV(sv));
1727 if (SvREADONLY(sv) && SvFAKE(sv)) {
1728 sv_force_normal(sv);
1730 if (SvREADONLY(sv) && !SvOK(sv)) {
1731 if (ckWARN(WARN_UNINITIALIZED))
1738 return (IV)(SvUVX(sv));
1745 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
1746 * without also getting a cached IV/UV from it at the same time
1747 * (ie PV->NV conversion should detect loss of accuracy and cache
1748 * IV or UV at same time to avoid this. NWC */
1750 if (SvTYPE(sv) == SVt_NV)
1751 sv_upgrade(sv, SVt_PVNV);
1753 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
1754 /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
1755 certainly cast into the IV range at IV_MAX, whereas the correct
1756 answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
1758 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
1759 SvIVX(sv) = I_V(SvNVX(sv));
1760 if (SvNVX(sv) == (NV) SvIVX(sv)
1761 #ifndef NV_PRESERVES_UV
1762 && (((UV)1 << NV_PRESERVES_UV_BITS) >
1763 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
1764 /* Don't flag it as "accurately an integer" if the number
1765 came from a (by definition imprecise) NV operation, and
1766 we're outside the range of NV integer precision */
1769 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
1770 DEBUG_c(PerlIO_printf(Perl_debug_log,
1771 "0x%"UVxf" iv(%g => %"IVdf") (precise)\n",
1777 /* IV not precise. No need to convert from PV, as NV
1778 conversion would already have cached IV if it detected
1779 that PV->IV would be better than PV->NV->IV
1780 flags already correct - don't set public IOK. */
1781 DEBUG_c(PerlIO_printf(Perl_debug_log,
1782 "0x%"UVxf" iv(%g => %"IVdf") (imprecise)\n",
1787 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
1788 but the cast (NV)IV_MIN rounds to a the value less (more
1789 negative) than IV_MIN which happens to be equal to SvNVX ??
1790 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
1791 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
1792 (NV)UVX == NVX are both true, but the values differ. :-(
1793 Hopefully for 2s complement IV_MIN is something like
1794 0x8000000000000000 which will be exact. NWC */
1797 SvUVX(sv) = U_V(SvNVX(sv));
1799 (SvNVX(sv) == (NV) SvUVX(sv))
1800 #ifndef NV_PRESERVES_UV
1801 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
1802 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
1803 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
1804 /* Don't flag it as "accurately an integer" if the number
1805 came from a (by definition imprecise) NV operation, and
1806 we're outside the range of NV integer precision */
1812 DEBUG_c(PerlIO_printf(Perl_debug_log,
1813 "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
1817 return (IV)SvUVX(sv);
1820 else if (SvPOKp(sv) && SvLEN(sv)) {
1821 I32 numtype = looks_like_number(sv);
1823 /* We want to avoid a possible problem when we cache an IV which
1824 may be later translated to an NV, and the resulting NV is not
1825 the translation of the initial data.
1827 This means that if we cache such an IV, we need to cache the
1828 NV as well. Moreover, we trade speed for space, and do not
1829 cache the NV if we are sure it's not needed.
1832 if ((numtype & ~IS_NUMBER_NEG) == IS_NUMBER_TO_INT_BY_ATOL) {
1833 /* The NV may be reconstructed from IV - safe to cache IV,
1834 which may be calculated by atol(). */
1835 if (SvTYPE(sv) < SVt_PVIV)
1836 sv_upgrade(sv, SVt_PVIV);
1838 SvIVX(sv) = Atol(SvPVX(sv));
1842 int save_errno = errno;
1843 /* Is it an integer that we could convert with strtol?
1844 So try it, and if it doesn't set errno then it's pukka.
1845 This should be faster than going atof and then thinking. */
1846 if (((numtype & (IS_NUMBER_TO_INT_BY_STRTOL | IS_NUMBER_NOT_INT))
1847 == IS_NUMBER_TO_INT_BY_STRTOL)
1848 /* && is a sequence point. Without it not sure if I'm trying
1849 to do too much between sequence points and hence going
1851 && ((errno = 0), 1) /* , 1 so always true */
1852 && ((i = Strtol(SvPVX(sv), Null(char**), 10)), 1)
1854 if (SvTYPE(sv) < SVt_PVIV)
1855 sv_upgrade(sv, SVt_PVIV);
1864 /* Hopefully trace flow will optimise this away where possible
1868 /* It wasn't an integer, or it overflowed, or we don't have
1869 strtol. Do things the slow way - check if it's a UV etc. */
1870 d = Atof(SvPVX(sv));
1872 if (SvTYPE(sv) < SVt_PVNV)
1873 sv_upgrade(sv, SVt_PVNV);
1876 if (! numtype && ckWARN(WARN_NUMERIC))
1879 #if defined(USE_LONG_DOUBLE)
1880 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
1881 PTR2UV(sv), SvNVX(sv)));
1883 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%g)\n",
1884 PTR2UV(sv), SvNVX(sv)));
1888 #ifdef NV_PRESERVES_UV
1889 (void)SvIOKp_on(sv);
1891 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
1892 SvIVX(sv) = I_V(SvNVX(sv));
1893 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1896 /* Integer is imprecise. NOK, IOKp */
1898 /* UV will not work better than IV */
1900 if (SvNVX(sv) > (NV)UV_MAX) {
1902 /* Integer is inaccurate. NOK, IOKp, is UV */
1906 SvUVX(sv) = U_V(SvNVX(sv));
1907 /* 0xFFFFFFFFFFFFFFFF not an issue in here */
1908 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
1912 /* Integer is imprecise. NOK, IOKp, is UV */
1918 #else /* NV_PRESERVES_UV */
1919 if (((UV)1 << NV_PRESERVES_UV_BITS) >
1920 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
1921 /* Small enough to preserve all bits. */
1922 (void)SvIOKp_on(sv);
1924 SvIVX(sv) = I_V(SvNVX(sv));
1925 if ((NV)(SvIVX(sv)) == SvNVX(sv))
1927 /* Assumption: first non-preserved integer is < IV_MAX,
1928 this NV is in the preserved range, therefore: */
1929 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
1931 Perl_croak(aTHX_ "sv_2iv assumed (U_V(fabs(SvNVX(sv))) < (UV)IV_MAX) but SvNVX(sv)=%g U_V is 0x%"UVxf", IV_MAX is 0x%"UVxf"\n", SvNVX(sv), U_V(SvNVX(sv)), (UV)IV_MAX);
1933 } else if (sv_2iuv_non_preserve (sv, numtype)
1934 >= IS_NUMBER_OVERFLOW_IV)
1936 #endif /* NV_PRESERVES_UV */
1940 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
1942 if (SvTYPE(sv) < SVt_IV)
1943 /* Typically the caller expects that sv_any is not NULL now. */
1944 sv_upgrade(sv, SVt_IV);
1947 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
1948 PTR2UV(sv),SvIVX(sv)));
1949 return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
1953 Perl_sv_2uv(pTHX_ register SV *sv)
1957 if (SvGMAGICAL(sv)) {
1962 return U_V(SvNVX(sv));
1963 if (SvPOKp(sv) && SvLEN(sv))
1966 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
1967 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
1973 if (SvTHINKFIRST(sv)) {
1976 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
1977 (SvRV(tmpstr) != SvRV(sv)))
1978 return SvUV(tmpstr);
1979 return PTR2UV(SvRV(sv));
1981 if (SvREADONLY(sv) && SvFAKE(sv)) {
1982 sv_force_normal(sv);
1984 if (SvREADONLY(sv) && !SvOK(sv)) {
1985 if (ckWARN(WARN_UNINITIALIZED))
1995 return (UV)SvIVX(sv);
1999 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2000 * without also getting a cached IV/UV from it at the same time
2001 * (ie PV->NV conversion should detect loss of accuracy and cache
2002 * IV or UV at same time to avoid this. */
2003 /* IV-over-UV optimisation - choose to cache IV if possible */
2005 if (SvTYPE(sv) == SVt_NV)
2006 sv_upgrade(sv, SVt_PVNV);
2008 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
2009 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2010 SvIVX(sv) = I_V(SvNVX(sv));
2011 if (SvNVX(sv) == (NV) SvIVX(sv)
2012 #ifndef NV_PRESERVES_UV
2013 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2014 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2015 /* Don't flag it as "accurately an integer" if the number
2016 came from a (by definition imprecise) NV operation, and
2017 we're outside the range of NV integer precision */
2020 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
2021 DEBUG_c(PerlIO_printf(Perl_debug_log,
2022 "0x%"UVxf" uv(%g => %"IVdf") (precise)\n",
2028 /* IV not precise. No need to convert from PV, as NV
2029 conversion would already have cached IV if it detected
2030 that PV->IV would be better than PV->NV->IV
2031 flags already correct - don't set public IOK. */
2032 DEBUG_c(PerlIO_printf(Perl_debug_log,
2033 "0x%"UVxf" uv(%g => %"IVdf") (imprecise)\n",
2038 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2039 but the cast (NV)IV_MIN rounds to a the value less (more
2040 negative) than IV_MIN which happens to be equal to SvNVX ??
2041 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2042 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2043 (NV)UVX == NVX are both true, but the values differ. :-(
2044 Hopefully for 2s complement IV_MIN is something like
2045 0x8000000000000000 which will be exact. NWC */
2048 SvUVX(sv) = U_V(SvNVX(sv));
2050 (SvNVX(sv) == (NV) SvUVX(sv))
2051 #ifndef NV_PRESERVES_UV
2052 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2053 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2054 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2055 /* Don't flag it as "accurately an integer" if the number
2056 came from a (by definition imprecise) NV operation, and
2057 we're outside the range of NV integer precision */
2062 DEBUG_c(PerlIO_printf(Perl_debug_log,
2063 "0x%"UVxf" 2uv(%"UVuf" => %"IVdf") (as unsigned)\n",
2069 else if (SvPOKp(sv) && SvLEN(sv)) {
2070 I32 numtype = looks_like_number(sv);
2072 /* We want to avoid a possible problem when we cache a UV which
2073 may be later translated to an NV, and the resulting NV is not
2074 the translation of the initial data.
2076 This means that if we cache such a UV, we need to cache the
2077 NV as well. Moreover, we trade speed for space, and do not
2078 cache the NV if not needed.
2081 if ((numtype & ~IS_NUMBER_NEG) == IS_NUMBER_TO_INT_BY_ATOL) {
2082 /* The NV may be reconstructed from IV - safe to cache IV,
2083 which may be calculated by atol(). */
2084 if (SvTYPE(sv) < SVt_PVIV)
2085 sv_upgrade(sv, SVt_PVIV);
2087 SvIVX(sv) = Atol(SvPVX(sv));
2091 char *num_begin = SvPVX(sv);
2092 int save_errno = errno;
2094 /* seems that strtoul taking numbers that start with - is
2095 implementation dependant, and can't be relied upon. */
2096 if (numtype & IS_NUMBER_NEG) {
2097 /* Not totally defensive. assumine that looks_like_num
2098 didn't lie about a - sign */
2099 while (isSPACE(*num_begin))
2101 if (*num_begin == '-')
2105 /* Is it an integer that we could convert with strtoul?
2106 So try it, and if it doesn't set errno then it's pukka.
2107 This should be faster than going atof and then thinking. */
2108 if (((numtype & (IS_NUMBER_TO_INT_BY_STRTOL | IS_NUMBER_NOT_INT))
2109 == IS_NUMBER_TO_INT_BY_STRTOL)
2110 && ((errno = 0), 1) /* always true */
2111 && ((u = Strtoul(num_begin, Null(char**), 10)), 1) /* ditto */
2113 /* If known to be negative, check it didn't undeflow IV
2114 XXX possibly we should put more negative values as NVs
2115 direct rather than go via atof below */
2116 && ((numtype & IS_NUMBER_NEG) ? (u <= (UV)IV_MIN) : 1)) {
2119 if (SvTYPE(sv) < SVt_PVIV)
2120 sv_upgrade(sv, SVt_PVIV);
2123 /* If it's negative must use IV.
2124 IV-over-UV optimisation */
2125 if (numtype & IS_NUMBER_NEG) {
2127 } else if (u <= (UV) IV_MAX) {
2130 /* it didn't overflow, and it was positive. */
2139 /* Hopefully trace flow will optimise this away where possible
2143 /* It wasn't an integer, or it overflowed, or we don't have
2144 strtol. Do things the slow way - check if it's a IV etc. */
2145 d = Atof(SvPVX(sv));
2147 if (SvTYPE(sv) < SVt_PVNV)
2148 sv_upgrade(sv, SVt_PVNV);
2151 if (! numtype && ckWARN(WARN_NUMERIC))
2154 #if defined(USE_LONG_DOUBLE)
2155 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%" PERL_PRIgldbl ")\n",
2156 PTR2UV(sv), SvNVX(sv)));
2158 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%g)\n",
2159 PTR2UV(sv), SvNVX(sv)));
2162 #ifdef NV_PRESERVES_UV
2163 (void)SvIOKp_on(sv);
2165 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2166 SvIVX(sv) = I_V(SvNVX(sv));
2167 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2170 /* Integer is imprecise. NOK, IOKp */
2172 /* UV will not work better than IV */
2174 if (SvNVX(sv) > (NV)UV_MAX) {
2176 /* Integer is inaccurate. NOK, IOKp, is UV */
2180 SvUVX(sv) = U_V(SvNVX(sv));
2181 /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2182 NV preservse UV so can do correct comparison. */
2183 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2187 /* Integer is imprecise. NOK, IOKp, is UV */
2192 #else /* NV_PRESERVES_UV */
2193 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2194 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2195 /* Small enough to preserve all bits. */
2196 (void)SvIOKp_on(sv);
2198 SvIVX(sv) = I_V(SvNVX(sv));
2199 if ((NV)(SvIVX(sv)) == SvNVX(sv))
2201 /* Assumption: first non-preserved integer is < IV_MAX,
2202 this NV is in the preserved range, therefore: */
2203 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2205 Perl_croak(aTHX_ "sv_2uv assumed (U_V(fabs(SvNVX(sv))) < (UV)IV_MAX) but SvNVX(sv)=%g U_V is 0x%"UVxf", IV_MAX is 0x%"UVxf"\n", SvNVX(sv), U_V(SvNVX(sv)), (UV)IV_MAX);
2208 sv_2iuv_non_preserve (sv, numtype);
2209 #endif /* NV_PRESERVES_UV */
2214 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2215 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2218 if (SvTYPE(sv) < SVt_IV)
2219 /* Typically the caller expects that sv_any is not NULL now. */
2220 sv_upgrade(sv, SVt_IV);
2224 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2225 PTR2UV(sv),SvUVX(sv)));
2226 return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2230 Perl_sv_2nv(pTHX_ register SV *sv)
2234 if (SvGMAGICAL(sv)) {
2238 if (SvPOKp(sv) && SvLEN(sv)) {
2239 if (ckWARN(WARN_NUMERIC) && !SvIOKp(sv) && !looks_like_number(sv))
2241 return Atof(SvPVX(sv));
2245 return (NV)SvUVX(sv);
2247 return (NV)SvIVX(sv);
2250 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2251 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2257 if (SvTHINKFIRST(sv)) {
2260 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
2261 (SvRV(tmpstr) != SvRV(sv)))
2262 return SvNV(tmpstr);
2263 return PTR2NV(SvRV(sv));
2265 if (SvREADONLY(sv) && SvFAKE(sv)) {
2266 sv_force_normal(sv);
2268 if (SvREADONLY(sv) && !SvOK(sv)) {
2269 if (ckWARN(WARN_UNINITIALIZED))
2274 if (SvTYPE(sv) < SVt_NV) {
2275 if (SvTYPE(sv) == SVt_IV)
2276 sv_upgrade(sv, SVt_PVNV);
2278 sv_upgrade(sv, SVt_NV);
2279 #if defined(USE_LONG_DOUBLE)
2281 STORE_NUMERIC_LOCAL_SET_STANDARD();
2282 PerlIO_printf(Perl_debug_log,
2283 "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2284 PTR2UV(sv), SvNVX(sv));
2285 RESTORE_NUMERIC_LOCAL();
2289 STORE_NUMERIC_LOCAL_SET_STANDARD();
2290 PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%g)\n",
2291 PTR2UV(sv), SvNVX(sv));
2292 RESTORE_NUMERIC_LOCAL();
2296 else if (SvTYPE(sv) < SVt_PVNV)
2297 sv_upgrade(sv, SVt_PVNV);
2299 (!SvPOKp(sv) || !strchr(SvPVX(sv),'.') || !looks_like_number(sv)))
2301 SvNVX(sv) = SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv);
2302 #ifdef NV_PRESERVES_UV
2305 /* Only set the public NV OK flag if this NV preserves the IV */
2306 /* Check it's not 0xFFFFFFFFFFFFFFFF */
2307 if (SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2308 : (SvIVX(sv) == I_V(SvNVX(sv))))
2314 else if (SvPOKp(sv) && SvLEN(sv)) {
2315 if (ckWARN(WARN_NUMERIC) && !SvIOKp(sv) && !looks_like_number(sv))
2317 SvNVX(sv) = Atof(SvPVX(sv));
2318 #ifdef NV_PRESERVES_UV
2321 /* Only set the public NV OK flag if this NV preserves the value in
2322 the PV at least as well as an IV/UV would.
2323 Not sure how to do this 100% reliably. */
2324 /* if that shift count is out of range then Configure's test is
2325 wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2327 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2328 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv)))
2329 SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2330 else if (SvNVX(sv) < (NV)IV_MIN || SvNVX(sv) > (NV)UV_MAX) {
2331 /* Definitely too large/small to fit in an integer, so no loss
2332 of precision going to integer in the future via NV */
2335 /* Is it something we can run through strtol etc (ie no
2336 trailing exponent part)? */
2337 int numtype = looks_like_number(sv);
2338 /* XXX probably should cache this if called above */
2341 (IS_NUMBER_TO_INT_BY_ATOL | IS_NUMBER_TO_INT_BY_STRTOL))) {
2342 /* Can't use strtol etc to convert this string, so don't try */
2345 sv_2inuv_non_preserve (sv, numtype);
2347 #endif /* NV_PRESERVES_UV */
2350 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
2352 if (SvTYPE(sv) < SVt_NV)
2353 /* Typically the caller expects that sv_any is not NULL now. */
2354 /* XXX Ilya implies that this is a bug in callers that assume this
2355 and ideally should be fixed. */
2356 sv_upgrade(sv, SVt_NV);
2359 #if defined(USE_LONG_DOUBLE)
2361 STORE_NUMERIC_LOCAL_SET_STANDARD();
2362 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2363 PTR2UV(sv), SvNVX(sv));
2364 RESTORE_NUMERIC_LOCAL();
2368 STORE_NUMERIC_LOCAL_SET_STANDARD();
2369 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%g)\n",
2370 PTR2UV(sv), SvNVX(sv));
2371 RESTORE_NUMERIC_LOCAL();
2378 S_asIV(pTHX_ SV *sv)
2380 I32 numtype = looks_like_number(sv);
2383 if (numtype & IS_NUMBER_TO_INT_BY_ATOL)
2384 return Atol(SvPVX(sv));
2386 if (ckWARN(WARN_NUMERIC))
2389 d = Atof(SvPVX(sv));
2394 S_asUV(pTHX_ SV *sv)
2396 I32 numtype = looks_like_number(sv);
2399 if (numtype & IS_NUMBER_TO_INT_BY_ATOL)
2400 return Strtoul(SvPVX(sv), Null(char**), 10);
2403 if (ckWARN(WARN_NUMERIC))
2406 return U_V(Atof(SvPVX(sv)));
2410 * Returns a combination of (advisory only - can get false negatives)
2411 * IS_NUMBER_TO_INT_BY_ATOL, IS_NUMBER_TO_INT_BY_ATOF
2412 * IS_NUMBER_LONGER_THAN_IV_MAX, IS_NUMBER_AS_LONG_AS_IV_MAX
2413 * IS_NUMBER_NOT_INT, IS_NUMBER_NEG, IS_NUMBER_INFINITY
2414 * 0 if does not look like number.
2416 * (atol and strtol stop when they hit a decimal point. strtol will return
2417 * LONG_MAX and LONG_MIN when given out of range values. ANSI says they should
2418 * do this, and vendors have had 11 years to get it right.
2419 * However, will try to make it still work with only atol
2421 * IS_NUMBER_TO_INT_BY_ATOL 123456789 or 123456789.3 definitely < IV_MAX
2422 * IS_NUMBER_TO_INT_BY_STRTOL 123456789 or 123456789.3 if digits = IV_MAX
2423 * IS_NUMBER_TO_INT_BY_ATOF 123456789e0 or >> IV_MAX
2424 * IS_NUMBER_LONGER_THAN_IV_MAX lots of digits, don't bother with atol
2425 * IS_NUMBER_AS_LONG_AS_IV_MAX atol might hit LONG_MAX, might not.
2426 * IS_NUMBER_NOT_INT saw "." or "e"
2428 * IS_NUMBER_INFINITY
2432 =for apidoc looks_like_number
2434 Test if an the content of an SV looks like a number (or is a
2435 number). C<Inf> and C<Infinity> are treated as numbers (so will not
2436 issue a non-numeric warning), even if your atof() doesn't grok them.
2442 Perl_looks_like_number(pTHX_ SV *sv)
2445 register char *send;
2446 register char *sbegin;
2447 register char *nbegin;
2451 #ifdef USE_LOCALE_NUMERIC
2452 bool specialradix = FALSE;
2459 else if (SvPOKp(sv))
2460 sbegin = SvPV(sv, len);
2463 send = sbegin + len;
2470 numtype = IS_NUMBER_NEG;
2477 * we return IS_NUMBER_TO_INT_BY_ATOL if the number can converted to
2478 * integer with atol() without overflow, IS_NUMBER_TO_INT_BY_STRTOL if
2479 * possibly slightly larger than max int, IS_NUMBER_TO_INT_BY_ATOF if you
2480 * will need (int)atof().
2483 /* next must be digit or the radix separator or beginning of infinity */
2487 } while (isDIGIT(*s));
2489 /* Aaargh. long long really is irritating.
2490 In the gospel according to ANSI 1989, it is an axiom that "long"
2491 is the longest integer type, and that if you don't know how long
2492 something is you can cast it to long, and nothing will be lost
2493 (except possibly speed of execution if long is slower than the
2495 Now, one can't be sure if the old rules apply, or long long
2496 (or some other newfangled thing) is actually longer than the
2497 (formerly) longest thing.
2499 /* This lot will work for 64 bit *as long as* either
2500 either long is 64 bit
2501 or we can find both strtol/strtoq and strtoul/strtouq
2502 If not, we really should refuse to let the user use 64 bit IVs
2503 By "64 bit" I really mean IVs that don't get preserved by NVs
2504 It also should work for 128 bit IVs. Can any lend me a machine to
2507 if (s - nbegin > TYPE_DIGITS(UV)) /* Cannot cache ato[ul]() */
2508 numtype |= IS_NUMBER_TO_INT_BY_ATOF | IS_NUMBER_LONGER_THAN_IV_MAX;
2509 else if (s - nbegin < BIT_DIGITS(((sizeof (IV)>sizeof (long))
2510 ? sizeof(long) : sizeof (IV))*8-1))
2511 numtype |= IS_NUMBER_TO_INT_BY_ATOL;
2513 /* Can't be sure either way. (For 64 bit UV, 63 bit IV is 1 decimal
2514 digit less (IV_MAX= 9223372036854775807,
2515 UV_MAX= 18446744073709551615) so be cautious */
2516 numtype |= IS_NUMBER_TO_INT_BY_STRTOL | IS_NUMBER_AS_LONG_AS_IV_MAX;
2519 #ifdef USE_LOCALE_NUMERIC
2520 || (specialradix = IS_NUMERIC_RADIX(s))
2523 #ifdef USE_LOCALE_NUMERIC
2525 s += SvCUR(PL_numeric_radix);
2529 numtype |= IS_NUMBER_NOT_INT;
2530 while (isDIGIT(*s)) /* optional digits after the radix */
2535 #ifdef USE_LOCALE_NUMERIC
2536 || (specialradix = IS_NUMERIC_RADIX(s))
2539 #ifdef USE_LOCALE_NUMERIC
2541 s += SvCUR(PL_numeric_radix);
2545 numtype |= IS_NUMBER_TO_INT_BY_ATOL | IS_NUMBER_NOT_INT;
2546 /* no digits before the radix means we need digits after it */
2550 } while (isDIGIT(*s));
2555 else if (*s == 'I' || *s == 'i') {
2556 s++; if (*s != 'N' && *s != 'n') return 0;
2557 s++; if (*s != 'F' && *s != 'f') return 0;
2558 s++; if (*s == 'I' || *s == 'i') {
2559 s++; if (*s != 'N' && *s != 'n') return 0;
2560 s++; if (*s != 'I' && *s != 'i') return 0;
2561 s++; if (*s != 'T' && *s != 't') return 0;
2562 s++; if (*s != 'Y' && *s != 'y') return 0;
2571 numtype = (numtype & IS_NUMBER_NEG) /* Keep track of sign */
2572 | IS_NUMBER_INFINITY | IS_NUMBER_NOT_INT;
2574 /* we can have an optional exponent part */
2575 if (*s == 'e' || *s == 'E') {
2576 numtype &= IS_NUMBER_NEG;
2577 numtype |= IS_NUMBER_TO_INT_BY_ATOF | IS_NUMBER_NOT_INT;
2579 if (*s == '+' || *s == '-')
2584 } while (isDIGIT(*s));
2594 if (len == 10 && memEQ(sbegin, "0 but true", 10))
2595 return IS_NUMBER_TO_INT_BY_ATOL;
2600 Perl_sv_2pv_nolen(pTHX_ register SV *sv)
2603 return sv_2pv(sv, &n_a);
2606 /* We assume that buf is at least TYPE_CHARS(UV) long. */
2608 uiv_2buf(char *buf, IV iv, UV uv, int is_uv, char **peob)
2610 char *ptr = buf + TYPE_CHARS(UV);
2624 *--ptr = '0' + (uv % 10);
2633 Perl_sv_2pv(pTHX_ register SV *sv, STRLEN *lp)
2638 char tbuf[64]; /* Must fit sprintf/Gconvert of longest IV/NV */
2639 char *tmpbuf = tbuf;
2645 if (SvGMAGICAL(sv)) {
2653 (void)sprintf(tmpbuf,"%"UVuf, (UV)SvUVX(sv));
2655 (void)sprintf(tmpbuf,"%"IVdf, (IV)SvIVX(sv));
2660 Gconvert(SvNVX(sv), NV_DIG, 0, tmpbuf);
2665 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2666 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2673 if (SvTHINKFIRST(sv)) {
2676 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,string)) &&
2677 (SvRV(tmpstr) != SvRV(sv)))
2678 return SvPV(tmpstr,*lp);
2685 switch (SvTYPE(sv)) {
2687 if ( ((SvFLAGS(sv) &
2688 (SVs_OBJECT|SVf_OK|SVs_GMG|SVs_SMG|SVs_RMG))
2689 == (SVs_OBJECT|SVs_RMG))
2690 && strEQ(s=HvNAME(SvSTASH(sv)), "Regexp")
2691 && (mg = mg_find(sv, 'r'))) {
2692 regexp *re = (regexp *)mg->mg_obj;
2695 char *fptr = "msix";
2700 U16 reganch = (re->reganch & PMf_COMPILETIME) >> 12;
2702 while((ch = *fptr++)) {
2704 reflags[left++] = ch;
2707 reflags[right--] = ch;
2712 reflags[left] = '-';
2716 mg->mg_len = re->prelen + 4 + left;
2717 New(616, mg->mg_ptr, mg->mg_len + 1 + left, char);
2718 Copy("(?", mg->mg_ptr, 2, char);
2719 Copy(reflags, mg->mg_ptr+2, left, char);
2720 Copy(":", mg->mg_ptr+left+2, 1, char);
2721 Copy(re->precomp, mg->mg_ptr+3+left, re->prelen, char);
2722 mg->mg_ptr[mg->mg_len - 1] = ')';
2723 mg->mg_ptr[mg->mg_len] = 0;
2725 PL_reginterp_cnt += re->program[0].next_off;
2737 case SVt_PVBM: if (SvROK(sv))
2740 s = "SCALAR"; break;
2741 case SVt_PVLV: s = "LVALUE"; break;
2742 case SVt_PVAV: s = "ARRAY"; break;
2743 case SVt_PVHV: s = "HASH"; break;
2744 case SVt_PVCV: s = "CODE"; break;
2745 case SVt_PVGV: s = "GLOB"; break;
2746 case SVt_PVFM: s = "FORMAT"; break;
2747 case SVt_PVIO: s = "IO"; break;
2748 default: s = "UNKNOWN"; break;
2752 Perl_sv_setpvf(aTHX_ tsv, "%s=%s", HvNAME(SvSTASH(sv)), s);
2755 Perl_sv_catpvf(aTHX_ tsv, "(0x%"UVxf")", PTR2UV(sv));
2761 if (SvREADONLY(sv) && !SvOK(sv)) {
2762 if (ckWARN(WARN_UNINITIALIZED))
2768 if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
2769 /* I'm assuming that if both IV and NV are equally valid then
2770 converting the IV is going to be more efficient */
2771 U32 isIOK = SvIOK(sv);
2772 U32 isUIOK = SvIsUV(sv);
2773 char buf[TYPE_CHARS(UV)];
2776 if (SvTYPE(sv) < SVt_PVIV)
2777 sv_upgrade(sv, SVt_PVIV);
2779 ptr = uiv_2buf(buf, 0, SvUVX(sv), 1, &ebuf);
2781 ptr = uiv_2buf(buf, SvIVX(sv), 0, 0, &ebuf);
2782 SvGROW(sv, ebuf - ptr + 1); /* inlined from sv_setpvn */
2783 Move(ptr,SvPVX(sv),ebuf - ptr,char);
2784 SvCUR_set(sv, ebuf - ptr);
2794 else if (SvNOKp(sv)) {
2795 if (SvTYPE(sv) < SVt_PVNV)
2796 sv_upgrade(sv, SVt_PVNV);
2797 /* The +20 is pure guesswork. Configure test needed. --jhi */
2798 SvGROW(sv, NV_DIG + 20);
2800 olderrno = errno; /* some Xenix systems wipe out errno here */
2802 if (SvNVX(sv) == 0.0)
2803 (void)strcpy(s,"0");
2807 Gconvert(SvNVX(sv), NV_DIG, 0, s);
2810 #ifdef FIXNEGATIVEZERO
2811 if (*s == '-' && s[1] == '0' && !s[2])
2821 if (ckWARN(WARN_UNINITIALIZED)
2822 && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
2825 if (SvTYPE(sv) < SVt_PV)
2826 /* Typically the caller expects that sv_any is not NULL now. */
2827 sv_upgrade(sv, SVt_PV);
2830 *lp = s - SvPVX(sv);
2833 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
2834 PTR2UV(sv),SvPVX(sv)));
2838 if (SvROK(sv)) { /* XXX Skip this when sv_pvn_force calls */
2839 /* Sneaky stuff here */
2843 tsv = newSVpv(tmpbuf, 0);
2859 len = strlen(tmpbuf);
2861 #ifdef FIXNEGATIVEZERO
2862 if (len == 2 && t[0] == '-' && t[1] == '0') {
2867 (void)SvUPGRADE(sv, SVt_PV);
2869 s = SvGROW(sv, len + 1);
2878 Perl_sv_2pvbyte_nolen(pTHX_ register SV *sv)
2881 return sv_2pvbyte(sv, &n_a);
2885 Perl_sv_2pvbyte(pTHX_ register SV *sv, STRLEN *lp)
2887 return sv_2pv(sv,lp);
2891 Perl_sv_2pvutf8_nolen(pTHX_ register SV *sv)
2894 return sv_2pvutf8(sv, &n_a);
2898 Perl_sv_2pvutf8(pTHX_ register SV *sv, STRLEN *lp)
2900 sv_utf8_upgrade(sv);
2901 return SvPV(sv,*lp);
2904 /* This function is only called on magical items */
2906 Perl_sv_2bool(pTHX_ register SV *sv)
2915 if (SvAMAGIC(sv) && (tmpsv=AMG_CALLun(sv,bool_)) &&
2916 (SvRV(tmpsv) != SvRV(sv)))
2917 return SvTRUE(tmpsv);
2918 return SvRV(sv) != 0;
2921 register XPV* Xpvtmp;
2922 if ((Xpvtmp = (XPV*)SvANY(sv)) &&
2923 (*Xpvtmp->xpv_pv > '0' ||
2924 Xpvtmp->xpv_cur > 1 ||
2925 (Xpvtmp->xpv_cur && *Xpvtmp->xpv_pv != '0')))
2932 return SvIVX(sv) != 0;
2935 return SvNVX(sv) != 0.0;
2943 =for apidoc sv_utf8_upgrade
2945 Convert the PV of an SV to its UTF8-encoded form.
2951 Perl_sv_utf8_upgrade(pTHX_ register SV *sv)
2956 if (!sv || !SvPOK(sv) || SvUTF8(sv))
2959 /* This function could be much more efficient if we had a FLAG in SVs
2960 * to signal if there are any hibit chars in the PV.
2961 * Given that there isn't make loop fast as possible
2967 if ((hibit = UTF8_IS_CONTINUED(*t++)))
2974 if (SvREADONLY(sv) && SvFAKE(sv)) {
2975 sv_force_normal(sv);
2978 len = SvCUR(sv) + 1; /* Plus the \0 */
2979 SvPVX(sv) = (char*)bytes_to_utf8((U8*)s, &len);
2980 SvCUR(sv) = len - 1;
2982 Safefree(s); /* No longer using what was there before. */
2983 SvLEN(sv) = len; /* No longer know the real size. */
2989 =for apidoc sv_utf8_downgrade
2991 Attempt to convert the PV of an SV from UTF8-encoded to byte encoding.
2992 This may not be possible if the PV contains non-byte encoding characters;
2993 if this is the case, either returns false or, if C<fail_ok> is not
3000 Perl_sv_utf8_downgrade(pTHX_ register SV* sv, bool fail_ok)
3002 if (SvPOK(sv) && SvUTF8(sv)) {
3007 if (SvREADONLY(sv) && SvFAKE(sv))
3008 sv_force_normal(sv);
3010 if (!utf8_to_bytes((U8*)s, &len)) {
3015 Perl_croak(aTHX_ "Wide character in %s",
3016 PL_op_desc[PL_op->op_type]);
3018 Perl_croak(aTHX_ "Wide character");
3030 =for apidoc sv_utf8_encode
3032 Convert the PV of an SV to UTF8-encoded, but then turn off the C<SvUTF8>
3033 flag so that it looks like bytes again. Nothing calls this.
3039 Perl_sv_utf8_encode(pTHX_ register SV *sv)
3041 sv_utf8_upgrade(sv);
3046 Perl_sv_utf8_decode(pTHX_ register SV *sv)
3052 if (!sv_utf8_downgrade(sv, TRUE))
3055 /* it is actually just a matter of turning the utf8 flag on, but
3056 * we want to make sure everything inside is valid utf8 first.
3059 if (!is_utf8_string((U8*)c, SvCUR(sv)+1))
3063 if (UTF8_IS_CONTINUED(*c++)) {
3073 /* Note: sv_setsv() should not be called with a source string that needs
3074 * to be reused, since it may destroy the source string if it is marked
3079 =for apidoc sv_setsv
3081 Copies the contents of the source SV C<ssv> into the destination SV C<dsv>.
3082 The source SV may be destroyed if it is mortal. Does not handle 'set'
3083 magic. See the macro forms C<SvSetSV>, C<SvSetSV_nosteal> and
3090 Perl_sv_setsv(pTHX_ SV *dstr, register SV *sstr)
3092 register U32 sflags;
3098 SV_CHECK_THINKFIRST(dstr);
3100 sstr = &PL_sv_undef;
3101 stype = SvTYPE(sstr);
3102 dtype = SvTYPE(dstr);
3106 /* There's a lot of redundancy below but we're going for speed here */
3111 if (dtype != SVt_PVGV) {
3112 (void)SvOK_off(dstr);
3120 sv_upgrade(dstr, SVt_IV);
3123 sv_upgrade(dstr, SVt_PVNV);
3127 sv_upgrade(dstr, SVt_PVIV);
3130 (void)SvIOK_only(dstr);
3131 SvIVX(dstr) = SvIVX(sstr);
3134 if (SvTAINTED(sstr))
3145 sv_upgrade(dstr, SVt_NV);
3150 sv_upgrade(dstr, SVt_PVNV);
3153 SvNVX(dstr) = SvNVX(sstr);
3154 (void)SvNOK_only(dstr);
3155 if (SvTAINTED(sstr))
3163 sv_upgrade(dstr, SVt_RV);
3164 else if (dtype == SVt_PVGV &&
3165 SvTYPE(SvRV(sstr)) == SVt_PVGV) {
3168 if (GvIMPORTED(dstr) != GVf_IMPORTED
3169 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3171 GvIMPORTED_on(dstr);
3182 sv_upgrade(dstr, SVt_PV);
3185 if (dtype < SVt_PVIV)
3186 sv_upgrade(dstr, SVt_PVIV);
3189 if (dtype < SVt_PVNV)
3190 sv_upgrade(dstr, SVt_PVNV);
3197 Perl_croak(aTHX_ "Bizarre copy of %s in %s", sv_reftype(sstr, 0),
3198 PL_op_name[PL_op->op_type]);
3200 Perl_croak(aTHX_ "Bizarre copy of %s", sv_reftype(sstr, 0));
3204 if (dtype <= SVt_PVGV) {
3206 if (dtype != SVt_PVGV) {
3207 char *name = GvNAME(sstr);
3208 STRLEN len = GvNAMELEN(sstr);
3209 sv_upgrade(dstr, SVt_PVGV);
3210 sv_magic(dstr, dstr, '*', Nullch, 0);
3211 GvSTASH(dstr) = (HV*)SvREFCNT_inc(GvSTASH(sstr));
3212 GvNAME(dstr) = savepvn(name, len);
3213 GvNAMELEN(dstr) = len;
3214 SvFAKE_on(dstr); /* can coerce to non-glob */
3216 /* ahem, death to those who redefine active sort subs */
3217 else if (PL_curstackinfo->si_type == PERLSI_SORT
3218 && GvCV(dstr) && PL_sortcop == CvSTART(GvCV(dstr)))
3219 Perl_croak(aTHX_ "Can't redefine active sort subroutine %s",
3222 #ifdef GV_SHARED_CHECK
3223 if (GvSHARED((GV*)dstr)) {
3224 Perl_croak(aTHX_ PL_no_modify);
3228 (void)SvOK_off(dstr);
3229 GvINTRO_off(dstr); /* one-shot flag */
3231 GvGP(dstr) = gp_ref(GvGP(sstr));
3232 if (SvTAINTED(sstr))
3234 if (GvIMPORTED(dstr) != GVf_IMPORTED
3235 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3237 GvIMPORTED_on(dstr);
3245 if (SvGMAGICAL(sstr)) {
3247 if (SvTYPE(sstr) != stype) {
3248 stype = SvTYPE(sstr);
3249 if (stype == SVt_PVGV && dtype <= SVt_PVGV)
3253 if (stype == SVt_PVLV)
3254 (void)SvUPGRADE(dstr, SVt_PVNV);
3256 (void)SvUPGRADE(dstr, stype);
3259 sflags = SvFLAGS(sstr);
3261 if (sflags & SVf_ROK) {
3262 if (dtype >= SVt_PV) {
3263 if (dtype == SVt_PVGV) {
3264 SV *sref = SvREFCNT_inc(SvRV(sstr));
3266 int intro = GvINTRO(dstr);
3268 #ifdef GV_SHARED_CHECK
3269 if (GvSHARED((GV*)dstr)) {
3270 Perl_croak(aTHX_ PL_no_modify);
3277 GvINTRO_off(dstr); /* one-shot flag */
3278 Newz(602,gp, 1, GP);
3279 GvGP(dstr) = gp_ref(gp);
3280 GvSV(dstr) = NEWSV(72,0);
3281 GvLINE(dstr) = CopLINE(PL_curcop);
3282 GvEGV(dstr) = (GV*)dstr;
3285 switch (SvTYPE(sref)) {
3288 SAVESPTR(GvAV(dstr));
3290 dref = (SV*)GvAV(dstr);
3291 GvAV(dstr) = (AV*)sref;
3292 if (!GvIMPORTED_AV(dstr)
3293 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3295 GvIMPORTED_AV_on(dstr);
3300 SAVESPTR(GvHV(dstr));
3302 dref = (SV*)GvHV(dstr);
3303 GvHV(dstr) = (HV*)sref;
3304 if (!GvIMPORTED_HV(dstr)
3305 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3307 GvIMPORTED_HV_on(dstr);
3312 if (GvCVGEN(dstr) && GvCV(dstr) != (CV*)sref) {
3313 SvREFCNT_dec(GvCV(dstr));
3314 GvCV(dstr) = Nullcv;
3315 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3316 PL_sub_generation++;
3318 SAVESPTR(GvCV(dstr));
3321 dref = (SV*)GvCV(dstr);
3322 if (GvCV(dstr) != (CV*)sref) {
3323 CV* cv = GvCV(dstr);
3325 if (!GvCVGEN((GV*)dstr) &&
3326 (CvROOT(cv) || CvXSUB(cv)))
3328 /* ahem, death to those who redefine
3329 * active sort subs */
3330 if (PL_curstackinfo->si_type == PERLSI_SORT &&
3331 PL_sortcop == CvSTART(cv))
3333 "Can't redefine active sort subroutine %s",
3334 GvENAME((GV*)dstr));
3335 /* Redefining a sub - warning is mandatory if
3336 it was a const and its value changed. */
3337 if (ckWARN(WARN_REDEFINE)
3339 && (!CvCONST((CV*)sref)
3340 || sv_cmp(cv_const_sv(cv),
3341 cv_const_sv((CV*)sref)))))
3343 Perl_warner(aTHX_ WARN_REDEFINE,
3345 ? "Constant subroutine %s redefined"
3346 : "Subroutine %s redefined",
3347 GvENAME((GV*)dstr));
3350 cv_ckproto(cv, (GV*)dstr,
3351 SvPOK(sref) ? SvPVX(sref) : Nullch);
3353 GvCV(dstr) = (CV*)sref;
3354 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3355 GvASSUMECV_on(dstr);
3356 PL_sub_generation++;
3358 if (!GvIMPORTED_CV(dstr)
3359 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3361 GvIMPORTED_CV_on(dstr);
3366 SAVESPTR(GvIOp(dstr));
3368 dref = (SV*)GvIOp(dstr);
3369 GvIOp(dstr) = (IO*)sref;
3373 SAVESPTR(GvFORM(dstr));
3375 dref = (SV*)GvFORM(dstr);
3376 GvFORM(dstr) = (CV*)sref;
3380 SAVESPTR(GvSV(dstr));
3382 dref = (SV*)GvSV(dstr);
3384 if (!GvIMPORTED_SV(dstr)
3385 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3387 GvIMPORTED_SV_on(dstr);
3395 if (SvTAINTED(sstr))
3400 (void)SvOOK_off(dstr); /* backoff */
3402 Safefree(SvPVX(dstr));
3403 SvLEN(dstr)=SvCUR(dstr)=0;
3406 (void)SvOK_off(dstr);
3407 SvRV(dstr) = SvREFCNT_inc(SvRV(sstr));
3409 if (sflags & SVp_NOK) {
3411 /* Only set the public OK flag if the source has public OK. */
3412 if (sflags & SVf_NOK)
3413 SvFLAGS(dstr) |= SVf_NOK;
3414 SvNVX(dstr) = SvNVX(sstr);
3416 if (sflags & SVp_IOK) {
3417 (void)SvIOKp_on(dstr);
3418 if (sflags & SVf_IOK)
3419 SvFLAGS(dstr) |= SVf_IOK;
3420 if (sflags & SVf_IVisUV)
3422 SvIVX(dstr) = SvIVX(sstr);
3424 if (SvAMAGIC(sstr)) {
3428 else if (sflags & SVp_POK) {
3431 * Check to see if we can just swipe the string. If so, it's a
3432 * possible small lose on short strings, but a big win on long ones.
3433 * It might even be a win on short strings if SvPVX(dstr)
3434 * has to be allocated and SvPVX(sstr) has to be freed.
3437 if (SvTEMP(sstr) && /* slated for free anyway? */
3438 SvREFCNT(sstr) == 1 && /* and no other references to it? */
3439 !(sflags & SVf_OOK) && /* and not involved in OOK hack? */
3440 SvLEN(sstr) && /* and really is a string */
3441 !(PL_op && PL_op->op_type == OP_AASSIGN)) /* and won't be needed again, potentially */
3443 if (SvPVX(dstr)) { /* we know that dtype >= SVt_PV */
3445 SvFLAGS(dstr) &= ~SVf_OOK;
3446 Safefree(SvPVX(dstr) - SvIVX(dstr));
3448 else if (SvLEN(dstr))
3449 Safefree(SvPVX(dstr));
3451 (void)SvPOK_only(dstr);
3452 SvPV_set(dstr, SvPVX(sstr));
3453 SvLEN_set(dstr, SvLEN(sstr));
3454 SvCUR_set(dstr, SvCUR(sstr));
3457 (void)SvOK_off(sstr); /* NOTE: nukes most SvFLAGS on sstr */
3458 SvPV_set(sstr, Nullch);
3463 else { /* have to copy actual string */
3464 STRLEN len = SvCUR(sstr);
3466 SvGROW(dstr, len + 1); /* inlined from sv_setpvn */
3467 Move(SvPVX(sstr),SvPVX(dstr),len,char);
3468 SvCUR_set(dstr, len);
3469 *SvEND(dstr) = '\0';
3470 (void)SvPOK_only(dstr);
3472 if (sflags & SVf_UTF8)
3475 if (sflags & SVp_NOK) {
3477 if (sflags & SVf_NOK)
3478 SvFLAGS(dstr) |= SVf_NOK;
3479 SvNVX(dstr) = SvNVX(sstr);
3481 if (sflags & SVp_IOK) {
3482 (void)SvIOKp_on(dstr);
3483 if (sflags & SVf_IOK)
3484 SvFLAGS(dstr) |= SVf_IOK;
3485 if (sflags & SVf_IVisUV)
3487 SvIVX(dstr) = SvIVX(sstr);
3490 else if (sflags & SVp_IOK) {
3491 if (sflags & SVf_IOK)
3492 (void)SvIOK_only(dstr);
3494 (void)SvOK_off(dstr);
3495 (void)SvIOKp_on(dstr);
3497 /* XXXX Do we want to set IsUV for IV(ROK)? Be extra safe... */
3498 if (sflags & SVf_IVisUV)
3500 SvIVX(dstr) = SvIVX(sstr);
3501 if (sflags & SVp_NOK) {
3502 if (sflags & SVf_NOK)
3503 (void)SvNOK_on(dstr);
3505 (void)SvNOKp_on(dstr);
3506 SvNVX(dstr) = SvNVX(sstr);
3509 else if (sflags & SVp_NOK) {
3510 if (sflags & SVf_NOK)
3511 (void)SvNOK_only(dstr);
3513 (void)SvOK_off(dstr);
3516 SvNVX(dstr) = SvNVX(sstr);
3519 if (dtype == SVt_PVGV) {
3520 if (ckWARN(WARN_MISC))
3521 Perl_warner(aTHX_ WARN_MISC, "Undefined value assigned to typeglob");
3524 (void)SvOK_off(dstr);
3526 if (SvTAINTED(sstr))
3531 =for apidoc sv_setsv_mg
3533 Like C<sv_setsv>, but also handles 'set' magic.
3539 Perl_sv_setsv_mg(pTHX_ SV *dstr, register SV *sstr)
3541 sv_setsv(dstr,sstr);
3546 =for apidoc sv_setpvn
3548 Copies a string into an SV. The C<len> parameter indicates the number of
3549 bytes to be copied. Does not handle 'set' magic. See C<sv_setpvn_mg>.
3555 Perl_sv_setpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3557 register char *dptr;
3559 SV_CHECK_THINKFIRST(sv);
3565 /* len is STRLEN which is unsigned, need to copy to signed */
3569 (void)SvUPGRADE(sv, SVt_PV);
3571 SvGROW(sv, len + 1);
3573 Move(ptr,dptr,len,char);
3576 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3581 =for apidoc sv_setpvn_mg
3583 Like C<sv_setpvn>, but also handles 'set' magic.
3589 Perl_sv_setpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3591 sv_setpvn(sv,ptr,len);
3596 =for apidoc sv_setpv
3598 Copies a string into an SV. The string must be null-terminated. Does not
3599 handle 'set' magic. See C<sv_setpv_mg>.
3605 Perl_sv_setpv(pTHX_ register SV *sv, register const char *ptr)
3607 register STRLEN len;
3609 SV_CHECK_THINKFIRST(sv);
3615 (void)SvUPGRADE(sv, SVt_PV);
3617 SvGROW(sv, len + 1);
3618 Move(ptr,SvPVX(sv),len+1,char);
3620 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3625 =for apidoc sv_setpv_mg
3627 Like C<sv_setpv>, but also handles 'set' magic.
3633 Perl_sv_setpv_mg(pTHX_ register SV *sv, register const char *ptr)
3640 =for apidoc sv_usepvn
3642 Tells an SV to use C<ptr> to find its string value. Normally the string is
3643 stored inside the SV but sv_usepvn allows the SV to use an outside string.
3644 The C<ptr> should point to memory that was allocated by C<malloc>. The
3645 string length, C<len>, must be supplied. This function will realloc the
3646 memory pointed to by C<ptr>, so that pointer should not be freed or used by
3647 the programmer after giving it to sv_usepvn. Does not handle 'set' magic.
3648 See C<sv_usepvn_mg>.
3654 Perl_sv_usepvn(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
3656 SV_CHECK_THINKFIRST(sv);
3657 (void)SvUPGRADE(sv, SVt_PV);
3662 (void)SvOOK_off(sv);
3663 if (SvPVX(sv) && SvLEN(sv))
3664 Safefree(SvPVX(sv));
3665 Renew(ptr, len+1, char);
3668 SvLEN_set(sv, len+1);
3670 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3675 =for apidoc sv_usepvn_mg
3677 Like C<sv_usepvn>, but also handles 'set' magic.
3683 Perl_sv_usepvn_mg(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
3685 sv_usepvn(sv,ptr,len);
3690 Perl_sv_force_normal_flags(pTHX_ register SV *sv, U32 flags)
3692 if (SvREADONLY(sv)) {
3694 char *pvx = SvPVX(sv);
3695 STRLEN len = SvCUR(sv);
3696 U32 hash = SvUVX(sv);
3697 SvGROW(sv, len + 1);
3698 Move(pvx,SvPVX(sv),len,char);
3702 unsharepvn(pvx,SvUTF8(sv)?-len:len,hash);
3704 else if (PL_curcop != &PL_compiling)
3705 Perl_croak(aTHX_ PL_no_modify);
3708 sv_unref_flags(sv, flags);
3709 else if (SvFAKE(sv) && SvTYPE(sv) == SVt_PVGV)
3714 Perl_sv_force_normal(pTHX_ register SV *sv)
3716 sv_force_normal_flags(sv, 0);
3722 Efficient removal of characters from the beginning of the string buffer.
3723 SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
3724 the string buffer. The C<ptr> becomes the first character of the adjusted
3731 Perl_sv_chop(pTHX_ register SV *sv, register char *ptr) /* like set but assuming ptr is in sv */
3735 register STRLEN delta;
3737 if (!ptr || !SvPOKp(sv))
3739 SV_CHECK_THINKFIRST(sv);
3740 if (SvTYPE(sv) < SVt_PVIV)
3741 sv_upgrade(sv,SVt_PVIV);
3744 if (!SvLEN(sv)) { /* make copy of shared string */
3745 char *pvx = SvPVX(sv);
3746 STRLEN len = SvCUR(sv);
3747 SvGROW(sv, len + 1);
3748 Move(pvx,SvPVX(sv),len,char);
3752 SvFLAGS(sv) |= SVf_OOK;
3754 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVp_IOK|SVp_NOK|SVf_IVisUV);
3755 delta = ptr - SvPVX(sv);
3763 =for apidoc sv_catpvn
3765 Concatenates the string onto the end of the string which is in the SV. The
3766 C<len> indicates number of bytes to copy. Handles 'get' magic, but not
3767 'set' magic. See C<sv_catpvn_mg>.
3773 Perl_sv_catpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3778 junk = SvPV_force(sv, tlen);
3779 SvGROW(sv, tlen + len + 1);
3782 Move(ptr,SvPVX(sv)+tlen,len,char);
3785 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3790 =for apidoc sv_catpvn_mg
3792 Like C<sv_catpvn>, but also handles 'set' magic.
3798 Perl_sv_catpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3800 sv_catpvn(sv,ptr,len);
3805 =for apidoc sv_catsv
3807 Concatenates the string from SV C<ssv> onto the end of the string in
3808 SV C<dsv>. Modifies C<dsv> but not C<ssv>. Handles 'get' magic, but
3809 not 'set' magic. See C<sv_catsv_mg>.
3814 Perl_sv_catsv(pTHX_ SV *dsv, register SV *ssv)
3820 if ((spv = SvPV(ssv, slen))) {
3821 bool dutf8 = DO_UTF8(dsv);
3822 bool sutf8 = DO_UTF8(ssv);
3825 sv_catpvn(dsv,spv,slen);
3828 /* Not modifying source SV, so taking a temporary copy. */
3829 SV* csv = sv_2mortal(newSVsv(ssv));
3833 sv_utf8_upgrade(csv);
3834 cpv = SvPV(csv,clen);
3835 sv_catpvn(dsv,cpv,clen);
3838 sv_utf8_upgrade(dsv);
3839 sv_catpvn(dsv,spv,slen);
3840 SvUTF8_on(dsv); /* If dsv has no wide characters. */
3847 =for apidoc sv_catsv_mg
3849 Like C<sv_catsv>, but also handles 'set' magic.
3855 Perl_sv_catsv_mg(pTHX_ SV *dsv, register SV *ssv)
3862 =for apidoc sv_catpv
3864 Concatenates the string onto the end of the string which is in the SV.
3865 Handles 'get' magic, but not 'set' magic. See C<sv_catpv_mg>.
3871 Perl_sv_catpv(pTHX_ register SV *sv, register const char *ptr)
3873 register STRLEN len;
3879 junk = SvPV_force(sv, tlen);
3881 SvGROW(sv, tlen + len + 1);
3884 Move(ptr,SvPVX(sv)+tlen,len+1,char);
3886 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3891 =for apidoc sv_catpv_mg
3893 Like C<sv_catpv>, but also handles 'set' magic.
3899 Perl_sv_catpv_mg(pTHX_ register SV *sv, register const char *ptr)
3906 Perl_newSV(pTHX_ STRLEN len)
3912 sv_upgrade(sv, SVt_PV);
3913 SvGROW(sv, len + 1);
3918 /* name is assumed to contain an SV* if (name && namelen == HEf_SVKEY) */
3921 =for apidoc sv_magic
3923 Adds magic to an SV.
3929 Perl_sv_magic(pTHX_ register SV *sv, SV *obj, int how, const char *name, I32 namlen)
3933 if (SvREADONLY(sv)) {
3934 if (PL_curcop != &PL_compiling && !strchr("gBf", how))
3935 Perl_croak(aTHX_ PL_no_modify);
3937 if (SvMAGICAL(sv) || (how == 't' && SvTYPE(sv) >= SVt_PVMG)) {
3938 if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
3945 (void)SvUPGRADE(sv, SVt_PVMG);
3947 Newz(702,mg, 1, MAGIC);
3948 mg->mg_moremagic = SvMAGIC(sv);
3951 if (!obj || obj == sv || how == '#' || how == 'r')
3954 mg->mg_obj = SvREFCNT_inc(obj);
3955 mg->mg_flags |= MGf_REFCOUNTED;
3958 mg->mg_len = namlen;
3961 mg->mg_ptr = savepvn(name, namlen);
3962 else if (namlen == HEf_SVKEY)
3963 mg->mg_ptr = (char*)SvREFCNT_inc((SV*)name);
3968 mg->mg_virtual = &PL_vtbl_sv;
3971 mg->mg_virtual = &PL_vtbl_amagic;
3974 mg->mg_virtual = &PL_vtbl_amagicelem;
3977 mg->mg_virtual = &PL_vtbl_ovrld;
3980 mg->mg_virtual = &PL_vtbl_bm;
3983 mg->mg_virtual = &PL_vtbl_regdata;
3986 mg->mg_virtual = &PL_vtbl_regdatum;
3989 mg->mg_virtual = &PL_vtbl_env;
3992 mg->mg_virtual = &PL_vtbl_fm;
3995 mg->mg_virtual = &PL_vtbl_envelem;
3998 mg->mg_virtual = &PL_vtbl_mglob;
4001 mg->mg_virtual = &PL_vtbl_isa;
4004 mg->mg_virtual = &PL_vtbl_isaelem;
4007 mg->mg_virtual = &PL_vtbl_nkeys;
4014 mg->mg_virtual = &PL_vtbl_dbline;
4018 mg->mg_virtual = &PL_vtbl_mutex;
4020 #endif /* USE_THREADS */
4021 #ifdef USE_LOCALE_COLLATE
4023 mg->mg_virtual = &PL_vtbl_collxfrm;
4025 #endif /* USE_LOCALE_COLLATE */
4027 mg->mg_virtual = &PL_vtbl_pack;
4031 mg->mg_virtual = &PL_vtbl_packelem;
4034 mg->mg_virtual = &PL_vtbl_regexp;
4037 mg->mg_virtual = &PL_vtbl_sig;
4040 mg->mg_virtual = &PL_vtbl_sigelem;
4043 mg->mg_virtual = &PL_vtbl_taint;
4047 mg->mg_virtual = &PL_vtbl_uvar;
4050 mg->mg_virtual = &PL_vtbl_vec;
4053 mg->mg_virtual = &PL_vtbl_substr;
4056 mg->mg_virtual = &PL_vtbl_defelem;
4059 mg->mg_virtual = &PL_vtbl_glob;
4062 mg->mg_virtual = &PL_vtbl_arylen;
4065 mg->mg_virtual = &PL_vtbl_pos;
4068 mg->mg_virtual = &PL_vtbl_backref;
4070 case '~': /* Reserved for use by extensions not perl internals. */
4071 /* Useful for attaching extension internal data to perl vars. */
4072 /* Note that multiple extensions may clash if magical scalars */
4073 /* etc holding private data from one are passed to another. */
4077 Perl_croak(aTHX_ "Don't know how to handle magic of type '%c'", how);
4081 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
4085 =for apidoc sv_unmagic
4087 Removes magic from an SV.
4093 Perl_sv_unmagic(pTHX_ SV *sv, int type)
4097 if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
4100 for (mg = *mgp; mg; mg = *mgp) {
4101 if (mg->mg_type == type) {
4102 MGVTBL* vtbl = mg->mg_virtual;
4103 *mgp = mg->mg_moremagic;
4104 if (vtbl && vtbl->svt_free)
4105 CALL_FPTR(vtbl->svt_free)(aTHX_ sv, mg);
4106 if (mg->mg_ptr && mg->mg_type != 'g') {
4107 if (mg->mg_len >= 0)
4108 Safefree(mg->mg_ptr);
4109 else if (mg->mg_len == HEf_SVKEY)
4110 SvREFCNT_dec((SV*)mg->mg_ptr);
4112 if (mg->mg_flags & MGf_REFCOUNTED)
4113 SvREFCNT_dec(mg->mg_obj);
4117 mgp = &mg->mg_moremagic;
4121 SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
4128 =for apidoc sv_rvweaken
4136 Perl_sv_rvweaken(pTHX_ SV *sv)
4139 if (!SvOK(sv)) /* let undefs pass */
4142 Perl_croak(aTHX_ "Can't weaken a nonreference");
4143 else if (SvWEAKREF(sv)) {
4144 if (ckWARN(WARN_MISC))
4145 Perl_warner(aTHX_ WARN_MISC, "Reference is already weak");
4149 sv_add_backref(tsv, sv);
4156 S_sv_add_backref(pTHX_ SV *tsv, SV *sv)
4160 if (SvMAGICAL(tsv) && (mg = mg_find(tsv, '<')))
4161 av = (AV*)mg->mg_obj;
4164 sv_magic(tsv, (SV*)av, '<', NULL, 0);
4165 SvREFCNT_dec(av); /* for sv_magic */
4171 S_sv_del_backref(pTHX_ SV *sv)
4178 if (!SvMAGICAL(tsv) || !(mg = mg_find(tsv, '<')))
4179 Perl_croak(aTHX_ "panic: del_backref");
4180 av = (AV *)mg->mg_obj;
4185 svp[i] = &PL_sv_undef; /* XXX */
4192 =for apidoc sv_insert
4194 Inserts a string at the specified offset/length within the SV. Similar to
4195 the Perl substr() function.
4201 Perl_sv_insert(pTHX_ SV *bigstr, STRLEN offset, STRLEN len, char *little, STRLEN littlelen)
4205 register char *midend;
4206 register char *bigend;
4212 Perl_croak(aTHX_ "Can't modify non-existent substring");
4213 SvPV_force(bigstr, curlen);
4214 (void)SvPOK_only_UTF8(bigstr);
4215 if (offset + len > curlen) {
4216 SvGROW(bigstr, offset+len+1);
4217 Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
4218 SvCUR_set(bigstr, offset+len);
4222 i = littlelen - len;
4223 if (i > 0) { /* string might grow */
4224 big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
4225 mid = big + offset + len;
4226 midend = bigend = big + SvCUR(bigstr);
4229 while (midend > mid) /* shove everything down */
4230 *--bigend = *--midend;
4231 Move(little,big+offset,littlelen,char);
4237 Move(little,SvPVX(bigstr)+offset,len,char);
4242 big = SvPVX(bigstr);
4245 bigend = big + SvCUR(bigstr);
4247 if (midend > bigend)
4248 Perl_croak(aTHX_ "panic: sv_insert");
4250 if (mid - big > bigend - midend) { /* faster to shorten from end */
4252 Move(little, mid, littlelen,char);
4255 i = bigend - midend;
4257 Move(midend, mid, i,char);
4261 SvCUR_set(bigstr, mid - big);
4264 else if ((i = mid - big)) { /* faster from front */
4265 midend -= littlelen;
4267 sv_chop(bigstr,midend-i);
4272 Move(little, mid, littlelen,char);
4274 else if (littlelen) {
4275 midend -= littlelen;
4276 sv_chop(bigstr,midend);
4277 Move(little,midend,littlelen,char);
4280 sv_chop(bigstr,midend);
4286 =for apidoc sv_replace
4288 Make the first argument a copy of the second, then delete the original.
4294 Perl_sv_replace(pTHX_ register SV *sv, register SV *nsv)
4296 U32 refcnt = SvREFCNT(sv);
4297 SV_CHECK_THINKFIRST(sv);
4298 if (SvREFCNT(nsv) != 1 && ckWARN_d(WARN_INTERNAL))
4299 Perl_warner(aTHX_ WARN_INTERNAL, "Reference miscount in sv_replace()");
4300 if (SvMAGICAL(sv)) {
4304 sv_upgrade(nsv, SVt_PVMG);
4305 SvMAGIC(nsv) = SvMAGIC(sv);
4306 SvFLAGS(nsv) |= SvMAGICAL(sv);
4312 assert(!SvREFCNT(sv));
4313 StructCopy(nsv,sv,SV);
4314 SvREFCNT(sv) = refcnt;
4315 SvFLAGS(nsv) |= SVTYPEMASK; /* Mark as freed */
4320 =for apidoc sv_clear
4322 Clear an SV, making it empty. Does not free the memory used by the SV
4329 Perl_sv_clear(pTHX_ register SV *sv)
4333 assert(SvREFCNT(sv) == 0);
4336 if (PL_defstash) { /* Still have a symbol table? */
4341 Zero(&tmpref, 1, SV);
4342 sv_upgrade(&tmpref, SVt_RV);
4344 SvREADONLY_on(&tmpref); /* DESTROY() could be naughty */
4345 SvREFCNT(&tmpref) = 1;
4348 stash = SvSTASH(sv);
4349 destructor = StashHANDLER(stash,DESTROY);
4352 PUSHSTACKi(PERLSI_DESTROY);
4353 SvRV(&tmpref) = SvREFCNT_inc(sv);
4358 call_sv((SV*)destructor, G_DISCARD|G_EVAL|G_KEEPERR);
4364 } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
4366 del_XRV(SvANY(&tmpref));
4369 if (PL_in_clean_objs)
4370 Perl_croak(aTHX_ "DESTROY created new reference to dead object '%s'",
4372 /* DESTROY gave object new lease on life */
4378 SvREFCNT_dec(SvSTASH(sv)); /* possibly of changed persuasion */
4379 SvOBJECT_off(sv); /* Curse the object. */
4380 if (SvTYPE(sv) != SVt_PVIO)
4381 --PL_sv_objcount; /* XXX Might want something more general */
4384 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv))
4387 switch (SvTYPE(sv)) {
4390 IoIFP(sv) != PerlIO_stdin() &&
4391 IoIFP(sv) != PerlIO_stdout() &&
4392 IoIFP(sv) != PerlIO_stderr())
4394 io_close((IO*)sv, FALSE);
4396 if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
4397 PerlDir_close(IoDIRP(sv));
4398 IoDIRP(sv) = (DIR*)NULL;
4399 Safefree(IoTOP_NAME(sv));
4400 Safefree(IoFMT_NAME(sv));
4401 Safefree(IoBOTTOM_NAME(sv));
4416 SvREFCNT_dec(LvTARG(sv));
4420 Safefree(GvNAME(sv));
4421 /* cannot decrease stash refcount yet, as we might recursively delete
4422 ourselves when the refcnt drops to zero. Delay SvREFCNT_dec
4423 of stash until current sv is completely gone.
4424 -- JohnPC, 27 Mar 1998 */
4425 stash = GvSTASH(sv);
4431 (void)SvOOK_off(sv);
4439 SvREFCNT_dec(SvRV(sv));
4441 else if (SvPVX(sv) && SvLEN(sv))
4442 Safefree(SvPVX(sv));
4443 else if (SvPVX(sv) && SvREADONLY(sv) && SvFAKE(sv)) {
4444 unsharepvn(SvPVX(sv),SvUTF8(sv)?-SvCUR(sv):SvCUR(sv),SvUVX(sv));
4456 switch (SvTYPE(sv)) {
4472 del_XPVIV(SvANY(sv));
4475 del_XPVNV(SvANY(sv));
4478 del_XPVMG(SvANY(sv));
4481 del_XPVLV(SvANY(sv));
4484 del_XPVAV(SvANY(sv));
4487 del_XPVHV(SvANY(sv));
4490 del_XPVCV(SvANY(sv));
4493 del_XPVGV(SvANY(sv));
4494 /* code duplication for increased performance. */
4495 SvFLAGS(sv) &= SVf_BREAK;
4496 SvFLAGS(sv) |= SVTYPEMASK;
4497 /* decrease refcount of the stash that owns this GV, if any */
4499 SvREFCNT_dec(stash);
4500 return; /* not break, SvFLAGS reset already happened */
4502 del_XPVBM(SvANY(sv));
4505 del_XPVFM(SvANY(sv));
4508 del_XPVIO(SvANY(sv));
4511 SvFLAGS(sv) &= SVf_BREAK;
4512 SvFLAGS(sv) |= SVTYPEMASK;
4516 Perl_sv_newref(pTHX_ SV *sv)
4519 ATOMIC_INC(SvREFCNT(sv));
4526 Free the memory used by an SV.
4532 Perl_sv_free(pTHX_ SV *sv)
4534 int refcount_is_zero;
4538 if (SvREFCNT(sv) == 0) {
4539 if (SvFLAGS(sv) & SVf_BREAK)
4541 if (PL_in_clean_all) /* All is fair */
4543 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
4544 /* make sure SvREFCNT(sv)==0 happens very seldom */
4545 SvREFCNT(sv) = (~(U32)0)/2;
4548 if (ckWARN_d(WARN_INTERNAL))
4549 Perl_warner(aTHX_ WARN_INTERNAL, "Attempt to free unreferenced scalar");
4552 ATOMIC_DEC_AND_TEST(refcount_is_zero, SvREFCNT(sv));
4553 if (!refcount_is_zero)
4557 if (ckWARN_d(WARN_DEBUGGING))
4558 Perl_warner(aTHX_ WARN_DEBUGGING,
4559 "Attempt to free temp prematurely: SV 0x%"UVxf,
4564 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
4565 /* make sure SvREFCNT(sv)==0 happens very seldom */
4566 SvREFCNT(sv) = (~(U32)0)/2;
4577 Returns the length of the string in the SV. See also C<SvCUR>.
4583 Perl_sv_len(pTHX_ register SV *sv)
4592 len = mg_length(sv);
4594 junk = SvPV(sv, len);
4599 =for apidoc sv_len_utf8
4601 Returns the number of characters in the string in an SV, counting wide
4602 UTF8 bytes as a single character.
4608 Perl_sv_len_utf8(pTHX_ register SV *sv)
4614 return mg_length(sv);
4618 U8 *s = (U8*)SvPV(sv, len);
4620 return Perl_utf8_length(aTHX_ s, s + len);
4625 Perl_sv_pos_u2b(pTHX_ register SV *sv, I32* offsetp, I32* lenp)
4630 I32 uoffset = *offsetp;
4636 start = s = (U8*)SvPV(sv, len);
4638 while (s < send && uoffset--)
4642 *offsetp = s - start;
4646 while (s < send && ulen--)
4656 Perl_sv_pos_b2u(pTHX_ register SV *sv, I32* offsetp)
4665 s = (U8*)SvPV(sv, len);
4667 Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset");
4668 send = s + *offsetp;
4673 if (utf8_to_uv(s, UTF8SKIP(s), &n, 0)) {
4687 Returns a boolean indicating whether the strings in the two SVs are
4694 Perl_sv_eq(pTHX_ register SV *sv1, register SV *sv2)
4701 bool pv1tmp = FALSE;
4702 bool pv2tmp = FALSE;
4709 pv1 = SvPV(sv1, cur1);
4716 pv2 = SvPV(sv2, cur2);
4718 /* do not utf8ize the comparands as a side-effect */
4719 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTE) {
4720 bool is_utf8 = TRUE;
4722 if (PL_hints & HINT_UTF8_DISTINCT)
4726 char *pv = (char*)bytes_from_utf8((U8*)pv1, &cur1, &is_utf8);
4728 if ((pv1tmp = (pv != pv1)))
4732 char *pv = (char *)bytes_from_utf8((U8*)pv2, &cur2, &is_utf8);
4734 if ((pv2tmp = (pv != pv2)))
4740 eq = memEQ(pv1, pv2, cur1);
4753 Compares the strings in two SVs. Returns -1, 0, or 1 indicating whether the
4754 string in C<sv1> is less than, equal to, or greater than the string in
4761 Perl_sv_cmp(pTHX_ register SV *sv1, register SV *sv2)
4766 bool pv1tmp = FALSE;
4767 bool pv2tmp = FALSE;
4774 pv1 = SvPV(sv1, cur1);
4781 pv2 = SvPV(sv2, cur2);
4783 /* do not utf8ize the comparands as a side-effect */
4784 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTE) {
4785 if (PL_hints & HINT_UTF8_DISTINCT)
4786 return SvUTF8(sv1) ? 1 : -1;
4789 pv2 = (char*)bytes_to_utf8((U8*)pv2, &cur2);
4793 pv1 = (char*)bytes_to_utf8((U8*)pv1, &cur1);
4799 cmp = cur2 ? -1 : 0;
4803 I32 retval = memcmp((void*)pv1, (void*)pv2, cur1 < cur2 ? cur1 : cur2);
4806 cmp = retval < 0 ? -1 : 1;
4807 } else if (cur1 == cur2) {
4810 cmp = cur1 < cur2 ? -1 : 1;
4823 =for apidoc sv_cmp_locale
4825 Compares the strings in two SVs in a locale-aware manner. See
4832 Perl_sv_cmp_locale(pTHX_ register SV *sv1, register SV *sv2)
4834 #ifdef USE_LOCALE_COLLATE
4840 if (PL_collation_standard)
4844 pv1 = sv1 ? sv_collxfrm(sv1, &len1) : (char *) NULL;
4846 pv2 = sv2 ? sv_collxfrm(sv2, &len2) : (char *) NULL;
4848 if (!pv1 || !len1) {
4859 retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
4862 return retval < 0 ? -1 : 1;
4865 * When the result of collation is equality, that doesn't mean
4866 * that there are no differences -- some locales exclude some
4867 * characters from consideration. So to avoid false equalities,
4868 * we use the raw string as a tiebreaker.
4874 #endif /* USE_LOCALE_COLLATE */
4876 return sv_cmp(sv1, sv2);
4879 #ifdef USE_LOCALE_COLLATE
4881 * Any scalar variable may carry an 'o' magic that contains the
4882 * scalar data of the variable transformed to such a format that
4883 * a normal memory comparison can be used to compare the data
4884 * according to the locale settings.
4887 Perl_sv_collxfrm(pTHX_ SV *sv, STRLEN *nxp)
4891 mg = SvMAGICAL(sv) ? mg_find(sv, 'o') : (MAGIC *) NULL;
4892 if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
4897 Safefree(mg->mg_ptr);
4899 if ((xf = mem_collxfrm(s, len, &xlen))) {
4900 if (SvREADONLY(sv)) {
4903 return xf + sizeof(PL_collation_ix);
4906 sv_magic(sv, 0, 'o', 0, 0);
4907 mg = mg_find(sv, 'o');
4920 if (mg && mg->mg_ptr) {
4922 return mg->mg_ptr + sizeof(PL_collation_ix);
4930 #endif /* USE_LOCALE_COLLATE */
4935 Get a line from the filehandle and store it into the SV, optionally
4936 appending to the currently-stored string.
4942 Perl_sv_gets(pTHX_ register SV *sv, register PerlIO *fp, I32 append)
4946 register STDCHAR rslast;
4947 register STDCHAR *bp;
4951 SV_CHECK_THINKFIRST(sv);
4952 (void)SvUPGRADE(sv, SVt_PV);
4956 if (RsSNARF(PL_rs)) {
4960 else if (RsRECORD(PL_rs)) {
4961 I32 recsize, bytesread;
4964 /* Grab the size of the record we're getting */
4965 recsize = SvIV(SvRV(PL_rs));
4966 (void)SvPOK_only(sv); /* Validate pointer */
4967 buffer = SvGROW(sv, recsize + 1);
4970 /* VMS wants read instead of fread, because fread doesn't respect */
4971 /* RMS record boundaries. This is not necessarily a good thing to be */
4972 /* doing, but we've got no other real choice */
4973 bytesread = PerlLIO_read(PerlIO_fileno(fp), buffer, recsize);
4975 bytesread = PerlIO_read(fp, buffer, recsize);
4977 SvCUR_set(sv, bytesread);
4978 buffer[bytesread] = '\0';
4979 if (PerlIO_isutf8(fp))
4983 return(SvCUR(sv) ? SvPVX(sv) : Nullch);
4985 else if (RsPARA(PL_rs)) {
4990 /* Get $/ i.e. PL_rs into same encoding as stream wants */
4991 if (PerlIO_isutf8(fp)) {
4992 rsptr = SvPVutf8(PL_rs, rslen);
4995 if (SvUTF8(PL_rs)) {
4996 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
4997 Perl_croak(aTHX_ "Wide character in $/");
5000 rsptr = SvPV(PL_rs, rslen);
5004 rslast = rslen ? rsptr[rslen - 1] : '\0';
5006 if (RsPARA(PL_rs)) { /* have to do this both before and after */
5007 do { /* to make sure file boundaries work right */
5010 i = PerlIO_getc(fp);
5014 PerlIO_ungetc(fp,i);
5020 /* See if we know enough about I/O mechanism to cheat it ! */
5022 /* This used to be #ifdef test - it is made run-time test for ease
5023 of abstracting out stdio interface. One call should be cheap
5024 enough here - and may even be a macro allowing compile
5028 if (PerlIO_fast_gets(fp)) {
5031 * We're going to steal some values from the stdio struct
5032 * and put EVERYTHING in the innermost loop into registers.
5034 register STDCHAR *ptr;
5038 #if defined(VMS) && defined(PERLIO_IS_STDIO)
5039 /* An ungetc()d char is handled separately from the regular
5040 * buffer, so we getc() it back out and stuff it in the buffer.
5042 i = PerlIO_getc(fp);
5043 if (i == EOF) return 0;
5044 *(--((*fp)->_ptr)) = (unsigned char) i;
5048 /* Here is some breathtakingly efficient cheating */
5050 cnt = PerlIO_get_cnt(fp); /* get count into register */
5051 (void)SvPOK_only(sv); /* validate pointer */
5052 if (SvLEN(sv) - append <= cnt + 1) { /* make sure we have the room */
5053 if (cnt > 80 && SvLEN(sv) > append) {
5054 shortbuffered = cnt - SvLEN(sv) + append + 1;
5055 cnt -= shortbuffered;
5059 /* remember that cnt can be negative */
5060 SvGROW(sv, append + (cnt <= 0 ? 2 : (cnt + 1)));
5065 bp = (STDCHAR*)SvPVX(sv) + append; /* move these two too to registers */
5066 ptr = (STDCHAR*)PerlIO_get_ptr(fp);
5067 DEBUG_P(PerlIO_printf(Perl_debug_log,
5068 "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
5069 DEBUG_P(PerlIO_printf(Perl_debug_log,
5070 "Screamer: entering: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
5071 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
5072 PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
5077 while (cnt > 0) { /* this | eat */
5079 if ((*bp++ = *ptr++) == rslast) /* really | dust */
5080 goto thats_all_folks; /* screams | sed :-) */
5084 Copy(ptr, bp, cnt, char); /* this | eat */
5085 bp += cnt; /* screams | dust */
5086 ptr += cnt; /* louder | sed :-) */
5091 if (shortbuffered) { /* oh well, must extend */
5092 cnt = shortbuffered;
5094 bpx = bp - (STDCHAR*)SvPVX(sv); /* box up before relocation */
5096 SvGROW(sv, SvLEN(sv) + append + cnt + 2);
5097 bp = (STDCHAR*)SvPVX(sv) + bpx; /* unbox after relocation */
5101 DEBUG_P(PerlIO_printf(Perl_debug_log,
5102 "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
5103 PTR2UV(ptr),(long)cnt));
5104 PerlIO_set_ptrcnt(fp, ptr, cnt); /* deregisterize cnt and ptr */
5105 DEBUG_P(PerlIO_printf(Perl_debug_log,
5106 "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
5107 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
5108 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
5109 /* This used to call 'filbuf' in stdio form, but as that behaves like
5110 getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
5111 another abstraction. */
5112 i = PerlIO_getc(fp); /* get more characters */
5113 DEBUG_P(PerlIO_printf(Perl_debug_log,
5114 "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
5115 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
5116 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
5117 cnt = PerlIO_get_cnt(fp);
5118 ptr = (STDCHAR*)PerlIO_get_ptr(fp); /* reregisterize cnt and ptr */
5119 DEBUG_P(PerlIO_printf(Perl_debug_log,
5120 "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
5122 if (i == EOF) /* all done for ever? */
5123 goto thats_really_all_folks;
5125 bpx = bp - (STDCHAR*)SvPVX(sv); /* box up before relocation */
5127 SvGROW(sv, bpx + cnt + 2);
5128 bp = (STDCHAR*)SvPVX(sv) + bpx; /* unbox after relocation */
5130 *bp++ = i; /* store character from PerlIO_getc */
5132 if (rslen && (STDCHAR)i == rslast) /* all done for now? */
5133 goto thats_all_folks;
5137 if ((rslen > 1 && (bp - (STDCHAR*)SvPVX(sv) < rslen)) ||
5138 memNE((char*)bp - rslen, rsptr, rslen))
5139 goto screamer; /* go back to the fray */
5140 thats_really_all_folks:
5142 cnt += shortbuffered;
5143 DEBUG_P(PerlIO_printf(Perl_debug_log,
5144 "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
5145 PerlIO_set_ptrcnt(fp, ptr, cnt); /* put these back or we're in trouble */
5146 DEBUG_P(PerlIO_printf(Perl_debug_log,
5147 "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
5148 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
5149 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
5151 SvCUR_set(sv, bp - (STDCHAR*)SvPVX(sv)); /* set length */
5152 DEBUG_P(PerlIO_printf(Perl_debug_log,
5153 "Screamer: done, len=%ld, string=|%.*s|\n",
5154 (long)SvCUR(sv),(int)SvCUR(sv),SvPVX(sv)));
5159 /*The big, slow, and stupid way */
5162 /* Need to work around EPOC SDK features */
5163 /* On WINS: MS VC5 generates calls to _chkstk, */
5164 /* if a `large' stack frame is allocated */
5165 /* gcc on MARM does not generate calls like these */
5171 register STDCHAR *bpe = buf + sizeof(buf);
5173 while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = i) != rslast && bp < bpe)
5174 ; /* keep reading */
5178 cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
5179 /* Accomodate broken VAXC compiler, which applies U8 cast to
5180 * both args of ?: operator, causing EOF to change into 255
5182 if (cnt) { i = (U8)buf[cnt - 1]; } else { i = EOF; }
5186 sv_catpvn(sv, (char *) buf, cnt);
5188 sv_setpvn(sv, (char *) buf, cnt);
5190 if (i != EOF && /* joy */
5192 SvCUR(sv) < rslen ||
5193 memNE(SvPVX(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
5197 * If we're reading from a TTY and we get a short read,
5198 * indicating that the user hit his EOF character, we need
5199 * to notice it now, because if we try to read from the TTY
5200 * again, the EOF condition will disappear.
5202 * The comparison of cnt to sizeof(buf) is an optimization
5203 * that prevents unnecessary calls to feof().
5207 if (!(cnt < sizeof(buf) && PerlIO_eof(fp)))
5212 if (RsPARA(PL_rs)) { /* have to do this both before and after */
5213 while (i != EOF) { /* to make sure file boundaries work right */
5214 i = PerlIO_getc(fp);
5216 PerlIO_ungetc(fp,i);
5222 if (PerlIO_isutf8(fp))
5227 return (SvCUR(sv) - append) ? SvPVX(sv) : Nullch;
5234 Auto-increment of the value in the SV.
5240 Perl_sv_inc(pTHX_ register SV *sv)
5249 if (SvTHINKFIRST(sv)) {
5250 if (SvREADONLY(sv)) {
5251 if (PL_curcop != &PL_compiling)
5252 Perl_croak(aTHX_ PL_no_modify);
5256 if (SvAMAGIC(sv) && AMG_CALLun(sv,inc))
5258 i = PTR2IV(SvRV(sv));
5263 flags = SvFLAGS(sv);
5264 if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
5265 /* It's (privately or publicly) a float, but not tested as an
5266 integer, so test it to see. */
5268 flags = SvFLAGS(sv);
5270 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
5271 /* It's publicly an integer, or privately an integer-not-float */
5274 if (SvUVX(sv) == UV_MAX)
5275 sv_setnv(sv, (NV)UV_MAX + 1.0);
5277 (void)SvIOK_only_UV(sv);
5280 if (SvIVX(sv) == IV_MAX)
5281 sv_setuv(sv, (UV)IV_MAX + 1);
5283 (void)SvIOK_only(sv);
5289 if (flags & SVp_NOK) {
5290 (void)SvNOK_only(sv);
5295 if (!(flags & SVp_POK) || !*SvPVX(sv)) {
5296 if ((flags & SVTYPEMASK) < SVt_PVIV)
5297 sv_upgrade(sv, SVt_IV);
5298 (void)SvIOK_only(sv);
5303 while (isALPHA(*d)) d++;
5304 while (isDIGIT(*d)) d++;
5306 #ifdef PERL_PRESERVE_IVUV
5307 /* Got to punt this an an integer if needs be, but we don't issue
5308 warnings. Probably ought to make the sv_iv_please() that does
5309 the conversion if possible, and silently. */
5310 I32 numtype = looks_like_number(sv);
5311 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
5312 /* Need to try really hard to see if it's an integer.
5313 9.22337203685478e+18 is an integer.
5314 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
5315 so $a="9.22337203685478e+18"; $a+0; $a++
5316 needs to be the same as $a="9.22337203685478e+18"; $a++
5323 /* sv_2iv *should* have made this an NV */
5324 if (flags & SVp_NOK) {
5325 (void)SvNOK_only(sv);
5329 /* I don't think we can get here. Maybe I should assert this
5330 And if we do get here I suspect that sv_setnv will croak. NWC
5332 #if defined(USE_LONG_DOUBLE)
5333 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",
5334 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5336 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%g\n",
5337 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5340 #endif /* PERL_PRESERVE_IVUV */
5341 sv_setnv(sv,Atof(SvPVX(sv)) + 1.0);
5345 while (d >= SvPVX(sv)) {
5353 /* MKS: The original code here died if letters weren't consecutive.
5354 * at least it didn't have to worry about non-C locales. The
5355 * new code assumes that ('z'-'a')==('Z'-'A'), letters are
5356 * arranged in order (although not consecutively) and that only
5357 * [A-Za-z] are accepted by isALPHA in the C locale.
5359 if (*d != 'z' && *d != 'Z') {
5360 do { ++*d; } while (!isALPHA(*d));
5363 *(d--) -= 'z' - 'a';
5368 *(d--) -= 'z' - 'a' + 1;
5372 /* oh,oh, the number grew */
5373 SvGROW(sv, SvCUR(sv) + 2);
5375 for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX(sv); d--)
5386 Auto-decrement of the value in the SV.
5392 Perl_sv_dec(pTHX_ register SV *sv)
5400 if (SvTHINKFIRST(sv)) {
5401 if (SvREADONLY(sv)) {
5402 if (PL_curcop != &PL_compiling)
5403 Perl_croak(aTHX_ PL_no_modify);
5407 if (SvAMAGIC(sv) && AMG_CALLun(sv,dec))
5409 i = PTR2IV(SvRV(sv));
5414 /* Unlike sv_inc we don't have to worry about string-never-numbers
5415 and keeping them magic. But we mustn't warn on punting */
5416 flags = SvFLAGS(sv);
5417 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
5418 /* It's publicly an integer, or privately an integer-not-float */
5421 if (SvUVX(sv) == 0) {
5422 (void)SvIOK_only(sv);
5426 (void)SvIOK_only_UV(sv);
5430 if (SvIVX(sv) == IV_MIN)
5431 sv_setnv(sv, (NV)IV_MIN - 1.0);
5433 (void)SvIOK_only(sv);
5439 if (flags & SVp_NOK) {
5441 (void)SvNOK_only(sv);
5444 if (!(flags & SVp_POK)) {
5445 if ((flags & SVTYPEMASK) < SVt_PVNV)
5446 sv_upgrade(sv, SVt_NV);
5448 (void)SvNOK_only(sv);
5451 #ifdef PERL_PRESERVE_IVUV
5453 I32 numtype = looks_like_number(sv);
5454 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
5455 /* Need to try really hard to see if it's an integer.
5456 9.22337203685478e+18 is an integer.
5457 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
5458 so $a="9.22337203685478e+18"; $a+0; $a--
5459 needs to be the same as $a="9.22337203685478e+18"; $a--
5466 /* sv_2iv *should* have made this an NV */
5467 if (flags & SVp_NOK) {
5468 (void)SvNOK_only(sv);
5472 /* I don't think we can get here. Maybe I should assert this
5473 And if we do get here I suspect that sv_setnv will croak. NWC
5475 #if defined(USE_LONG_DOUBLE)
5476 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",
5477 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5479 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%g\n",
5480 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5484 #endif /* PERL_PRESERVE_IVUV */
5485 sv_setnv(sv,Atof(SvPVX(sv)) - 1.0); /* punt */
5489 =for apidoc sv_mortalcopy
5491 Creates a new SV which is a copy of the original SV. The new SV is marked
5497 /* Make a string that will exist for the duration of the expression
5498 * evaluation. Actually, it may have to last longer than that, but
5499 * hopefully we won't free it until it has been assigned to a
5500 * permanent location. */
5503 Perl_sv_mortalcopy(pTHX_ SV *oldstr)
5508 sv_setsv(sv,oldstr);
5510 PL_tmps_stack[++PL_tmps_ix] = sv;
5516 =for apidoc sv_newmortal
5518 Creates a new SV which is mortal. The reference count of the SV is set to 1.
5524 Perl_sv_newmortal(pTHX)
5529 SvFLAGS(sv) = SVs_TEMP;
5531 PL_tmps_stack[++PL_tmps_ix] = sv;
5536 =for apidoc sv_2mortal
5538 Marks an SV as mortal. The SV will be destroyed when the current context
5544 /* same thing without the copying */
5547 Perl_sv_2mortal(pTHX_ register SV *sv)
5551 if (SvREADONLY(sv) && SvIMMORTAL(sv))
5554 PL_tmps_stack[++PL_tmps_ix] = sv;
5562 Creates a new SV and copies a string into it. The reference count for the
5563 SV is set to 1. If C<len> is zero, Perl will compute the length using
5564 strlen(). For efficiency, consider using C<newSVpvn> instead.
5570 Perl_newSVpv(pTHX_ const char *s, STRLEN len)
5577 sv_setpvn(sv,s,len);
5582 =for apidoc newSVpvn
5584 Creates a new SV and copies a string into it. The reference count for the
5585 SV is set to 1. Note that if C<len> is zero, Perl will create a zero length
5586 string. You are responsible for ensuring that the source string is at least
5593 Perl_newSVpvn(pTHX_ const char *s, STRLEN len)
5598 sv_setpvn(sv,s,len);
5603 =for apidoc newSVpvn_share
5605 Creates a new SV and populates it with a string from
5606 the string table. Turns on READONLY and FAKE.
5607 The idea here is that as string table is used for shared hash
5608 keys these strings will have SvPVX == HeKEY and hash lookup
5609 will avoid string compare.
5615 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
5618 bool is_utf8 = FALSE;
5623 if (is_utf8 && !(PL_hints & HINT_UTF8_DISTINCT)) {
5624 STRLEN tmplen = len;
5625 /* See the note in hv.c:hv_fetch() --jhi */
5626 src = (char*)bytes_from_utf8((U8*)src, &tmplen, &is_utf8);
5630 PERL_HASH(hash, src, len);
5632 sv_upgrade(sv, SVt_PVIV);
5633 SvPVX(sv) = sharepvn(src, is_utf8?-len:len, hash);
5645 #if defined(PERL_IMPLICIT_CONTEXT)
5647 Perl_newSVpvf_nocontext(const char* pat, ...)
5652 va_start(args, pat);
5653 sv = vnewSVpvf(pat, &args);
5660 =for apidoc newSVpvf
5662 Creates a new SV an initialize it with the string formatted like
5669 Perl_newSVpvf(pTHX_ const char* pat, ...)
5673 va_start(args, pat);
5674 sv = vnewSVpvf(pat, &args);
5680 Perl_vnewSVpvf(pTHX_ const char* pat, va_list* args)
5684 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
5691 Creates a new SV and copies a floating point value into it.
5692 The reference count for the SV is set to 1.
5698 Perl_newSVnv(pTHX_ NV n)
5710 Creates a new SV and copies an integer into it. The reference count for the
5717 Perl_newSViv(pTHX_ IV i)
5729 Creates a new SV and copies an unsigned integer into it.
5730 The reference count for the SV is set to 1.
5736 Perl_newSVuv(pTHX_ UV u)
5746 =for apidoc newRV_noinc
5748 Creates an RV wrapper for an SV. The reference count for the original
5749 SV is B<not> incremented.
5755 Perl_newRV_noinc(pTHX_ SV *tmpRef)
5760 sv_upgrade(sv, SVt_RV);
5767 /* newRV_inc is #defined to newRV in sv.h */
5769 Perl_newRV(pTHX_ SV *tmpRef)
5771 return newRV_noinc(SvREFCNT_inc(tmpRef));
5777 Creates a new SV which is an exact duplicate of the original SV.
5782 /* make an exact duplicate of old */
5785 Perl_newSVsv(pTHX_ register SV *old)
5791 if (SvTYPE(old) == SVTYPEMASK) {
5792 if (ckWARN_d(WARN_INTERNAL))
5793 Perl_warner(aTHX_ WARN_INTERNAL, "semi-panic: attempt to dup freed string");
5808 Perl_sv_reset(pTHX_ register char *s, HV *stash)
5816 char todo[PERL_UCHAR_MAX+1];
5821 if (!*s) { /* reset ?? searches */
5822 for (pm = HvPMROOT(stash); pm; pm = pm->op_pmnext) {
5823 pm->op_pmdynflags &= ~PMdf_USED;
5828 /* reset variables */
5830 if (!HvARRAY(stash))
5833 Zero(todo, 256, char);
5835 i = (unsigned char)*s;
5839 max = (unsigned char)*s++;
5840 for ( ; i <= max; i++) {
5843 for (i = 0; i <= (I32) HvMAX(stash); i++) {
5844 for (entry = HvARRAY(stash)[i];
5846 entry = HeNEXT(entry))
5848 if (!todo[(U8)*HeKEY(entry)])
5850 gv = (GV*)HeVAL(entry);
5852 if (SvTHINKFIRST(sv)) {
5853 if (!SvREADONLY(sv) && SvROK(sv))
5858 if (SvTYPE(sv) >= SVt_PV) {
5860 if (SvPVX(sv) != Nullch)
5867 if (GvHV(gv) && !HvNAME(GvHV(gv))) {
5869 #ifdef USE_ENVIRON_ARRAY
5871 environ[0] = Nullch;
5880 Perl_sv_2io(pTHX_ SV *sv)
5886 switch (SvTYPE(sv)) {
5894 Perl_croak(aTHX_ "Bad filehandle: %s", GvNAME(gv));
5898 Perl_croak(aTHX_ PL_no_usym, "filehandle");
5900 return sv_2io(SvRV(sv));
5901 gv = gv_fetchpv(SvPV(sv,n_a), FALSE, SVt_PVIO);
5907 Perl_croak(aTHX_ "Bad filehandle: %s", SvPV(sv,n_a));
5914 Perl_sv_2cv(pTHX_ SV *sv, HV **st, GV **gvp, I32 lref)
5921 return *gvp = Nullgv, Nullcv;
5922 switch (SvTYPE(sv)) {
5941 SV **sp = &sv; /* Used in tryAMAGICunDEREF macro. */
5942 tryAMAGICunDEREF(to_cv);
5945 if (SvTYPE(sv) == SVt_PVCV) {
5954 Perl_croak(aTHX_ "Not a subroutine reference");
5959 gv = gv_fetchpv(SvPV(sv, n_a), lref, SVt_PVCV);
5965 if (lref && !GvCVu(gv)) {
5968 tmpsv = NEWSV(704,0);
5969 gv_efullname3(tmpsv, gv, Nullch);
5970 /* XXX this is probably not what they think they're getting.
5971 * It has the same effect as "sub name;", i.e. just a forward
5973 newSUB(start_subparse(FALSE, 0),
5974 newSVOP(OP_CONST, 0, tmpsv),
5979 Perl_croak(aTHX_ "Unable to create sub named \"%s\"", SvPV(sv,n_a));
5988 Returns true if the SV has a true value by Perl's rules.
5994 Perl_sv_true(pTHX_ register SV *sv)
6000 if ((tXpv = (XPV*)SvANY(sv)) &&
6001 (tXpv->xpv_cur > 1 ||
6002 (tXpv->xpv_cur && *tXpv->xpv_pv != '0')))
6009 return SvIVX(sv) != 0;
6012 return SvNVX(sv) != 0.0;
6014 return sv_2bool(sv);
6020 Perl_sv_iv(pTHX_ register SV *sv)
6024 return (IV)SvUVX(sv);
6031 Perl_sv_uv(pTHX_ register SV *sv)
6036 return (UV)SvIVX(sv);
6042 Perl_sv_nv(pTHX_ register SV *sv)
6050 Perl_sv_pv(pTHX_ SV *sv)
6057 return sv_2pv(sv, &n_a);
6061 Perl_sv_pvn(pTHX_ SV *sv, STRLEN *lp)
6067 return sv_2pv(sv, lp);
6071 =for apidoc sv_pvn_force
6073 Get a sensible string out of the SV somehow.
6079 Perl_sv_pvn_force(pTHX_ SV *sv, STRLEN *lp)
6083 if (SvTHINKFIRST(sv) && !SvROK(sv))
6084 sv_force_normal(sv);
6090 if (SvTYPE(sv) > SVt_PVLV && SvTYPE(sv) != SVt_PVFM) {
6091 Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
6092 PL_op_name[PL_op->op_type]);
6096 if (s != SvPVX(sv)) { /* Almost, but not quite, sv_setpvn() */
6101 (void)SvUPGRADE(sv, SVt_PV); /* Never FALSE */
6102 SvGROW(sv, len + 1);
6103 Move(s,SvPVX(sv),len,char);
6108 SvPOK_on(sv); /* validate pointer */
6110 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
6111 PTR2UV(sv),SvPVX(sv)));
6118 Perl_sv_pvbyte(pTHX_ SV *sv)
6124 Perl_sv_pvbyten(pTHX_ SV *sv, STRLEN *lp)
6126 return sv_pvn(sv,lp);
6130 Perl_sv_pvbyten_force(pTHX_ SV *sv, STRLEN *lp)
6132 return sv_pvn_force(sv,lp);
6136 Perl_sv_pvutf8(pTHX_ SV *sv)
6138 sv_utf8_upgrade(sv);
6143 Perl_sv_pvutf8n(pTHX_ SV *sv, STRLEN *lp)
6145 sv_utf8_upgrade(sv);
6146 return sv_pvn(sv,lp);
6150 =for apidoc sv_pvutf8n_force
6152 Get a sensible UTF8-encoded string out of the SV somehow. See
6159 Perl_sv_pvutf8n_force(pTHX_ SV *sv, STRLEN *lp)
6161 sv_utf8_upgrade(sv);
6162 return sv_pvn_force(sv,lp);
6166 =for apidoc sv_reftype
6168 Returns a string describing what the SV is a reference to.
6174 Perl_sv_reftype(pTHX_ SV *sv, int ob)
6176 if (ob && SvOBJECT(sv))
6177 return HvNAME(SvSTASH(sv));
6179 switch (SvTYPE(sv)) {
6193 case SVt_PVLV: return "LVALUE";
6194 case SVt_PVAV: return "ARRAY";
6195 case SVt_PVHV: return "HASH";
6196 case SVt_PVCV: return "CODE";
6197 case SVt_PVGV: return "GLOB";
6198 case SVt_PVFM: return "FORMAT";
6199 case SVt_PVIO: return "IO";
6200 default: return "UNKNOWN";
6206 =for apidoc sv_isobject
6208 Returns a boolean indicating whether the SV is an RV pointing to a blessed
6209 object. If the SV is not an RV, or if the object is not blessed, then this
6216 Perl_sv_isobject(pTHX_ SV *sv)
6233 Returns a boolean indicating whether the SV is blessed into the specified
6234 class. This does not check for subtypes; use C<sv_derived_from> to verify
6235 an inheritance relationship.
6241 Perl_sv_isa(pTHX_ SV *sv, const char *name)
6253 return strEQ(HvNAME(SvSTASH(sv)), name);
6259 Creates a new SV for the RV, C<rv>, to point to. If C<rv> is not an RV then
6260 it will be upgraded to one. If C<classname> is non-null then the new SV will
6261 be blessed in the specified package. The new SV is returned and its
6262 reference count is 1.
6268 Perl_newSVrv(pTHX_ SV *rv, const char *classname)
6274 SV_CHECK_THINKFIRST(rv);
6277 if (SvTYPE(rv) >= SVt_PVMG) {
6278 U32 refcnt = SvREFCNT(rv);
6282 SvREFCNT(rv) = refcnt;
6285 if (SvTYPE(rv) < SVt_RV)
6286 sv_upgrade(rv, SVt_RV);
6287 else if (SvTYPE(rv) > SVt_RV) {
6288 (void)SvOOK_off(rv);
6289 if (SvPVX(rv) && SvLEN(rv))
6290 Safefree(SvPVX(rv));
6300 HV* stash = gv_stashpv(classname, TRUE);
6301 (void)sv_bless(rv, stash);
6307 =for apidoc sv_setref_pv
6309 Copies a pointer into a new SV, optionally blessing the SV. The C<rv>
6310 argument will be upgraded to an RV. That RV will be modified to point to
6311 the new SV. If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
6312 into the SV. The C<classname> argument indicates the package for the
6313 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
6314 will be returned and will have a reference count of 1.
6316 Do not use with other Perl types such as HV, AV, SV, CV, because those
6317 objects will become corrupted by the pointer copy process.
6319 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
6325 Perl_sv_setref_pv(pTHX_ SV *rv, const char *classname, void *pv)
6328 sv_setsv(rv, &PL_sv_undef);
6332 sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
6337 =for apidoc sv_setref_iv
6339 Copies an integer into a new SV, optionally blessing the SV. The C<rv>
6340 argument will be upgraded to an RV. That RV will be modified to point to
6341 the new SV. The C<classname> argument indicates the package for the
6342 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
6343 will be returned and will have a reference count of 1.
6349 Perl_sv_setref_iv(pTHX_ SV *rv, const char *classname, IV iv)
6351 sv_setiv(newSVrv(rv,classname), iv);
6356 =for apidoc sv_setref_uv
6358 Copies an unsigned integer into a new SV, optionally blessing the SV. The C<rv>
6359 argument will be upgraded to an RV. That RV will be modified to point to
6360 the new SV. The C<classname> argument indicates the package for the
6361 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
6362 will be returned and will have a reference count of 1.
6368 Perl_sv_setref_uv(pTHX_ SV *rv, const char *classname, UV uv)
6370 sv_setuv(newSVrv(rv,classname), uv);
6375 =for apidoc sv_setref_nv
6377 Copies a double into a new SV, optionally blessing the SV. The C<rv>
6378 argument will be upgraded to an RV. That RV will be modified to point to
6379 the new SV. The C<classname> argument indicates the package for the
6380 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
6381 will be returned and will have a reference count of 1.
6387 Perl_sv_setref_nv(pTHX_ SV *rv, const char *classname, NV nv)
6389 sv_setnv(newSVrv(rv,classname), nv);
6394 =for apidoc sv_setref_pvn
6396 Copies a string into a new SV, optionally blessing the SV. The length of the
6397 string must be specified with C<n>. The C<rv> argument will be upgraded to
6398 an RV. That RV will be modified to point to the new SV. The C<classname>
6399 argument indicates the package for the blessing. Set C<classname> to
6400 C<Nullch> to avoid the blessing. The new SV will be returned and will have
6401 a reference count of 1.
6403 Note that C<sv_setref_pv> copies the pointer while this copies the string.
6409 Perl_sv_setref_pvn(pTHX_ SV *rv, const char *classname, char *pv, STRLEN n)
6411 sv_setpvn(newSVrv(rv,classname), pv, n);
6416 =for apidoc sv_bless
6418 Blesses an SV into a specified package. The SV must be an RV. The package
6419 must be designated by its stash (see C<gv_stashpv()>). The reference count
6420 of the SV is unaffected.
6426 Perl_sv_bless(pTHX_ SV *sv, HV *stash)
6430 Perl_croak(aTHX_ "Can't bless non-reference value");
6432 if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
6433 if (SvREADONLY(tmpRef))
6434 Perl_croak(aTHX_ PL_no_modify);
6435 if (SvOBJECT(tmpRef)) {
6436 if (SvTYPE(tmpRef) != SVt_PVIO)
6438 SvREFCNT_dec(SvSTASH(tmpRef));
6441 SvOBJECT_on(tmpRef);
6442 if (SvTYPE(tmpRef) != SVt_PVIO)
6444 (void)SvUPGRADE(tmpRef, SVt_PVMG);
6445 SvSTASH(tmpRef) = (HV*)SvREFCNT_inc(stash);
6456 S_sv_unglob(pTHX_ SV *sv)
6460 assert(SvTYPE(sv) == SVt_PVGV);
6465 SvREFCNT_dec(GvSTASH(sv));
6466 GvSTASH(sv) = Nullhv;
6468 sv_unmagic(sv, '*');
6469 Safefree(GvNAME(sv));
6472 /* need to keep SvANY(sv) in the right arena */
6473 xpvmg = new_XPVMG();
6474 StructCopy(SvANY(sv), xpvmg, XPVMG);
6475 del_XPVGV(SvANY(sv));
6478 SvFLAGS(sv) &= ~SVTYPEMASK;
6479 SvFLAGS(sv) |= SVt_PVMG;
6483 =for apidoc sv_unref_flags
6485 Unsets the RV status of the SV, and decrements the reference count of
6486 whatever was being referenced by the RV. This can almost be thought of
6487 as a reversal of C<newSVrv>. The C<cflags> argument can contain
6488 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
6489 (otherwise the decrementing is conditional on the reference count being
6490 different from one or the reference being a readonly SV).
6497 Perl_sv_unref_flags(pTHX_ SV *sv, U32 flags)
6501 if (SvWEAKREF(sv)) {
6509 if (SvREFCNT(rv) != 1 || SvREADONLY(rv) || flags) /* SV_IMMEDIATE_UNREF */
6511 else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
6512 sv_2mortal(rv); /* Schedule for freeing later */
6516 =for apidoc sv_unref
6518 Unsets the RV status of the SV, and decrements the reference count of
6519 whatever was being referenced by the RV. This can almost be thought of
6520 as a reversal of C<newSVrv>. This is C<sv_unref_flags> with the C<flag>
6521 being zero. See C<SvROK_off>.
6527 Perl_sv_unref(pTHX_ SV *sv)
6529 sv_unref_flags(sv, 0);
6533 Perl_sv_taint(pTHX_ SV *sv)
6535 sv_magic((sv), Nullsv, 't', Nullch, 0);
6539 Perl_sv_untaint(pTHX_ SV *sv)
6541 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
6542 MAGIC *mg = mg_find(sv, 't');
6549 Perl_sv_tainted(pTHX_ SV *sv)
6551 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
6552 MAGIC *mg = mg_find(sv, 't');
6553 if (mg && ((mg->mg_len & 1) || ((mg->mg_len & 2) && mg->mg_obj == sv)))
6560 =for apidoc sv_setpviv
6562 Copies an integer into the given SV, also updating its string value.
6563 Does not handle 'set' magic. See C<sv_setpviv_mg>.
6569 Perl_sv_setpviv(pTHX_ SV *sv, IV iv)
6571 char buf[TYPE_CHARS(UV)];
6573 char *ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
6575 sv_setpvn(sv, ptr, ebuf - ptr);
6580 =for apidoc sv_setpviv_mg
6582 Like C<sv_setpviv>, but also handles 'set' magic.
6588 Perl_sv_setpviv_mg(pTHX_ SV *sv, IV iv)
6590 char buf[TYPE_CHARS(UV)];
6592 char *ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
6594 sv_setpvn(sv, ptr, ebuf - ptr);
6598 #if defined(PERL_IMPLICIT_CONTEXT)
6600 Perl_sv_setpvf_nocontext(SV *sv, const char* pat, ...)
6604 va_start(args, pat);
6605 sv_vsetpvf(sv, pat, &args);
6611 Perl_sv_setpvf_mg_nocontext(SV *sv, const char* pat, ...)
6615 va_start(args, pat);
6616 sv_vsetpvf_mg(sv, pat, &args);
6622 =for apidoc sv_setpvf
6624 Processes its arguments like C<sprintf> and sets an SV to the formatted
6625 output. Does not handle 'set' magic. See C<sv_setpvf_mg>.
6631 Perl_sv_setpvf(pTHX_ SV *sv, const char* pat, ...)
6634 va_start(args, pat);
6635 sv_vsetpvf(sv, pat, &args);
6640 Perl_sv_vsetpvf(pTHX_ SV *sv, const char* pat, va_list* args)
6642 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6646 =for apidoc sv_setpvf_mg
6648 Like C<sv_setpvf>, but also handles 'set' magic.
6654 Perl_sv_setpvf_mg(pTHX_ SV *sv, const char* pat, ...)
6657 va_start(args, pat);
6658 sv_vsetpvf_mg(sv, pat, &args);
6663 Perl_sv_vsetpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
6665 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6669 #if defined(PERL_IMPLICIT_CONTEXT)
6671 Perl_sv_catpvf_nocontext(SV *sv, const char* pat, ...)
6675 va_start(args, pat);
6676 sv_vcatpvf(sv, pat, &args);
6681 Perl_sv_catpvf_mg_nocontext(SV *sv, const char* pat, ...)
6685 va_start(args, pat);
6686 sv_vcatpvf_mg(sv, pat, &args);
6692 =for apidoc sv_catpvf
6694 Processes its arguments like C<sprintf> and appends the formatted output
6695 to an SV. Handles 'get' magic, but not 'set' magic. C<SvSETMAGIC()> must
6696 typically be called after calling this function to handle 'set' magic.
6702 Perl_sv_catpvf(pTHX_ SV *sv, const char* pat, ...)
6705 va_start(args, pat);
6706 sv_vcatpvf(sv, pat, &args);
6711 Perl_sv_vcatpvf(pTHX_ SV *sv, const char* pat, va_list* args)
6713 sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6717 =for apidoc sv_catpvf_mg
6719 Like C<sv_catpvf>, but also handles 'set' magic.
6725 Perl_sv_catpvf_mg(pTHX_ SV *sv, const char* pat, ...)
6728 va_start(args, pat);
6729 sv_vcatpvf_mg(sv, pat, &args);
6734 Perl_sv_vcatpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
6736 sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6741 =for apidoc sv_vsetpvfn
6743 Works like C<vcatpvfn> but copies the text into the SV instead of
6750 Perl_sv_vsetpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
6752 sv_setpvn(sv, "", 0);
6753 sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, maybe_tainted);
6757 S_expect_number(pTHX_ char** pattern)
6760 switch (**pattern) {
6761 case '1': case '2': case '3':
6762 case '4': case '5': case '6':
6763 case '7': case '8': case '9':
6764 while (isDIGIT(**pattern))
6765 var = var * 10 + (*(*pattern)++ - '0');
6769 #define EXPECT_NUMBER(pattern, var) (var = S_expect_number(aTHX_ &pattern))
6772 =for apidoc sv_vcatpvfn
6774 Processes its arguments like C<vsprintf> and appends the formatted output
6775 to an SV. Uses an array of SVs if the C style variable argument list is
6776 missing (NULL). When running with taint checks enabled, indicates via
6777 C<maybe_tainted> if results are untrustworthy (often due to the use of
6784 Perl_sv_vcatpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
6791 static char nullstr[] = "(null)";
6794 /* no matter what, this is a string now */
6795 (void)SvPV_force(sv, origlen);
6797 /* special-case "", "%s", and "%_" */
6800 if (patlen == 2 && pat[0] == '%') {
6804 char *s = va_arg(*args, char*);
6805 sv_catpv(sv, s ? s : nullstr);
6807 else if (svix < svmax) {
6808 sv_catsv(sv, *svargs);
6809 if (DO_UTF8(*svargs))
6815 argsv = va_arg(*args, SV*);
6816 sv_catsv(sv, argsv);
6821 /* See comment on '_' below */
6826 patend = (char*)pat + patlen;
6827 for (p = (char*)pat; p < patend; p = q) {
6830 bool vectorize = FALSE;
6831 bool vectorarg = FALSE;
6832 bool vec_utf = FALSE;
6838 bool has_precis = FALSE;
6840 bool is_utf = FALSE;
6843 U8 utf8buf[UTF8_MAXLEN+1];
6844 STRLEN esignlen = 0;
6846 char *eptr = Nullch;
6848 /* Times 4: a decimal digit takes more than 3 binary digits.
6849 * NV_DIG: mantissa takes than many decimal digits.
6850 * Plus 32: Playing safe. */
6851 char ebuf[IV_DIG * 4 + NV_DIG + 32];
6852 /* large enough for "%#.#f" --chip */
6853 /* what about long double NVs? --jhi */
6856 U8 *vecstr = Null(U8*);
6868 STRLEN dotstrlen = 1;
6869 I32 efix = 0; /* explicit format parameter index */
6870 I32 ewix = 0; /* explicit width index */
6871 I32 epix = 0; /* explicit precision index */
6872 I32 evix = 0; /* explicit vector index */
6873 bool asterisk = FALSE;
6875 /* echo everything up to the next format specification */
6876 for (q = p; q < patend && *q != '%'; ++q) ;
6878 sv_catpvn(sv, p, q - p);
6885 We allow format specification elements in this order:
6886 \d+\$ explicit format parameter index
6888 \*?(\d+\$)?v vector with optional (optionally specified) arg
6889 \d+|\*(\d+\$)? width using optional (optionally specified) arg
6890 \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
6892 [%bcdefginopsux_DFOUX] format (mandatory)
6894 if (EXPECT_NUMBER(q, width)) {
6935 if (EXPECT_NUMBER(q, ewix))
6944 if ((vectorarg = asterisk)) {
6954 EXPECT_NUMBER(q, width);
6959 vecsv = va_arg(*args, SV*);
6961 vecsv = (evix ? evix <= svmax : svix < svmax) ?
6962 svargs[ewix ? ewix-1 : svix++] : &PL_sv_undef;
6963 dotstr = SvPVx(vecsv, dotstrlen);
6968 vecsv = va_arg(*args, SV*);
6969 vecstr = (U8*)SvPVx(vecsv,veclen);
6970 vec_utf = DO_UTF8(vecsv);
6972 else if (efix ? efix <= svmax : svix < svmax) {
6973 vecsv = svargs[efix ? efix-1 : svix++];
6974 vecstr = (U8*)SvPVx(vecsv,veclen);
6975 vec_utf = DO_UTF8(vecsv);
6985 i = va_arg(*args, int);
6987 i = (ewix ? ewix <= svmax : svix < svmax) ?
6988 SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
6990 width = (i < 0) ? -i : i;
7000 if (EXPECT_NUMBER(q, epix) && *q++ != '$')
7003 i = va_arg(*args, int);
7005 i = (ewix ? ewix <= svmax : svix < svmax)
7006 ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
7007 precis = (i < 0) ? 0 : i;
7012 precis = precis * 10 + (*q++ - '0');
7020 #if defined(HAS_QUAD) || (defined(HAS_LONG_DOUBLE) && defined(USE_LONG_DOUBLE))
7031 #if defined(HAS_QUAD) || (defined(HAS_LONG_DOUBLE) && defined(USE_LONG_DOUBLE))
7032 if (*(q + 1) == 'l') { /* lld, llf */
7055 argsv = (efix ? efix <= svmax : svix < svmax) ?
7056 svargs[efix ? efix-1 : svix++] : &PL_sv_undef;
7063 uv = args ? va_arg(*args, int) : SvIVx(argsv);
7064 if ((uv > 255 || (uv > 127 && SvUTF8(sv))) && !IN_BYTE) {
7065 eptr = (char*)utf8buf;
7066 elen = uv_to_utf8((U8*)eptr, uv) - utf8buf;
7078 eptr = va_arg(*args, char*);
7080 #ifdef MACOS_TRADITIONAL
7081 /* On MacOS, %#s format is used for Pascal strings */
7086 elen = strlen(eptr);
7089 elen = sizeof nullstr - 1;
7093 eptr = SvPVx(argsv, elen);
7094 if (DO_UTF8(argsv)) {
7095 if (has_precis && precis < elen) {
7097 sv_pos_u2b(argsv, &p, 0); /* sticks at end */
7100 if (width) { /* fudge width (can't fudge elen) */
7101 width += elen - sv_len_utf8(argsv);
7110 * The "%_" hack might have to be changed someday,
7111 * if ISO or ANSI decide to use '_' for something.
7112 * So we keep it hidden from users' code.
7116 argsv = va_arg(*args, SV*);
7117 eptr = SvPVx(argsv, elen);
7123 if (has_precis && elen > precis)
7132 uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
7150 iv = (IV)utf8_to_uv(vecstr, veclen, &ulen, 0);
7160 case 'h': iv = (short)va_arg(*args, int); break;
7161 default: iv = va_arg(*args, int); break;
7162 case 'l': iv = va_arg(*args, long); break;
7163 case 'V': iv = va_arg(*args, IV); break;
7165 case 'q': iv = va_arg(*args, Quad_t); break;
7172 case 'h': iv = (short)iv; break;
7174 case 'l': iv = (long)iv; break;
7177 case 'q': iv = (Quad_t)iv; break;
7184 esignbuf[esignlen++] = plus;
7188 esignbuf[esignlen++] = '-';
7230 uv = utf8_to_uv(vecstr, veclen, &ulen, 0);
7240 case 'h': uv = (unsigned short)va_arg(*args, unsigned); break;
7241 default: uv = va_arg(*args, unsigned); break;
7242 case 'l': uv = va_arg(*args, unsigned long); break;
7243 case 'V': uv = va_arg(*args, UV); break;
7245 case 'q': uv = va_arg(*args, Quad_t); break;
7252 case 'h': uv = (unsigned short)uv; break;
7254 case 'l': uv = (unsigned long)uv; break;
7257 case 'q': uv = (Quad_t)uv; break;
7263 eptr = ebuf + sizeof ebuf;
7269 p = (char*)((c == 'X')
7270 ? "0123456789ABCDEF" : "0123456789abcdef");
7276 esignbuf[esignlen++] = '0';
7277 esignbuf[esignlen++] = c; /* 'x' or 'X' */
7283 *--eptr = '0' + dig;
7285 if (alt && *eptr != '0')
7291 *--eptr = '0' + dig;
7294 esignbuf[esignlen++] = '0';
7295 esignbuf[esignlen++] = 'b';
7298 default: /* it had better be ten or less */
7299 #if defined(PERL_Y2KWARN)
7300 if (ckWARN(WARN_Y2K)) {
7302 char *s = SvPV(sv,n);
7303 if (n >= 2 && s[n-2] == '1' && s[n-1] == '9'
7304 && (n == 2 || !isDIGIT(s[n-3])))
7306 Perl_warner(aTHX_ WARN_Y2K,
7307 "Possible Y2K bug: %%%c %s",
7308 c, "format string following '19'");
7314 *--eptr = '0' + dig;
7315 } while (uv /= base);
7318 elen = (ebuf + sizeof ebuf) - eptr;
7321 zeros = precis - elen;
7322 else if (precis == 0 && elen == 1 && *eptr == '0')
7327 /* FLOATING POINT */
7330 c = 'f'; /* maybe %F isn't supported here */
7336 /* This is evil, but floating point is even more evil */
7339 nv = args ? va_arg(*args, NV) : SvNVx(argsv);
7342 if (c != 'e' && c != 'E') {
7344 (void)Perl_frexp(nv, &i);
7345 if (i == PERL_INT_MIN)
7346 Perl_die(aTHX_ "panic: frexp");
7348 need = BIT_DIGITS(i);
7350 need += has_precis ? precis : 6; /* known default */
7354 need += 20; /* fudge factor */
7355 if (PL_efloatsize < need) {
7356 Safefree(PL_efloatbuf);
7357 PL_efloatsize = need + 20; /* more fudge */
7358 New(906, PL_efloatbuf, PL_efloatsize, char);
7359 PL_efloatbuf[0] = '\0';
7362 eptr = ebuf + sizeof ebuf;
7365 #if defined(USE_LONG_DOUBLE) && defined(PERL_PRIfldbl)
7367 /* Copy the one or more characters in a long double
7368 * format before the 'base' ([efgEFG]) character to
7369 * the format string. */
7370 static char const prifldbl[] = PERL_PRIfldbl;
7371 char const *p = prifldbl + sizeof(prifldbl) - 3;
7372 while (p >= prifldbl) { *--eptr = *p--; }
7377 do { *--eptr = '0' + (base % 10); } while (base /= 10);
7382 do { *--eptr = '0' + (base % 10); } while (base /= 10);
7394 /* No taint. Otherwise we are in the strange situation
7395 * where printf() taints but print($float) doesn't.
7397 (void)sprintf(PL_efloatbuf, eptr, nv);
7399 eptr = PL_efloatbuf;
7400 elen = strlen(PL_efloatbuf);
7407 i = SvCUR(sv) - origlen;
7410 case 'h': *(va_arg(*args, short*)) = i; break;
7411 default: *(va_arg(*args, int*)) = i; break;
7412 case 'l': *(va_arg(*args, long*)) = i; break;
7413 case 'V': *(va_arg(*args, IV*)) = i; break;
7415 case 'q': *(va_arg(*args, Quad_t*)) = i; break;
7420 sv_setuv_mg(argsv, (UV)i);
7421 continue; /* not "break" */
7428 if (!args && ckWARN(WARN_PRINTF) &&
7429 (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)) {
7430 SV *msg = sv_newmortal();
7431 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %s: ",
7432 (PL_op->op_type == OP_PRTF) ? "printf" : "sprintf");
7435 Perl_sv_catpvf(aTHX_ msg,
7436 "\"%%%c\"", c & 0xFF);
7438 Perl_sv_catpvf(aTHX_ msg,
7439 "\"%%\\%03"UVof"\"",
7442 sv_catpv(msg, "end of string");
7443 Perl_warner(aTHX_ WARN_PRINTF, "%"SVf, msg); /* yes, this is reentrant */
7446 /* output mangled stuff ... */
7452 /* ... right here, because formatting flags should not apply */
7453 SvGROW(sv, SvCUR(sv) + elen + 1);
7455 Copy(eptr, p, elen, char);
7458 SvCUR(sv) = p - SvPVX(sv);
7459 continue; /* not "break" */
7462 have = esignlen + zeros + elen;
7463 need = (have > width ? have : width);
7466 SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
7468 if (esignlen && fill == '0') {
7469 for (i = 0; i < esignlen; i++)
7473 memset(p, fill, gap);
7476 if (esignlen && fill != '0') {
7477 for (i = 0; i < esignlen; i++)
7481 for (i = zeros; i; i--)
7485 Copy(eptr, p, elen, char);
7489 memset(p, ' ', gap);
7494 Copy(dotstr, p, dotstrlen, char);
7498 vectorize = FALSE; /* done iterating over vecstr */
7503 SvCUR(sv) = p - SvPVX(sv);
7511 #if defined(USE_ITHREADS)
7513 #if defined(USE_THREADS)
7514 # include "error: USE_THREADS and USE_ITHREADS are incompatible"
7517 #ifndef GpREFCNT_inc
7518 # define GpREFCNT_inc(gp) ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
7522 #define sv_dup_inc(s) SvREFCNT_inc(sv_dup(s))
7523 #define av_dup(s) (AV*)sv_dup((SV*)s)
7524 #define av_dup_inc(s) (AV*)SvREFCNT_inc(sv_dup((SV*)s))
7525 #define hv_dup(s) (HV*)sv_dup((SV*)s)
7526 #define hv_dup_inc(s) (HV*)SvREFCNT_inc(sv_dup((SV*)s))
7527 #define cv_dup(s) (CV*)sv_dup((SV*)s)
7528 #define cv_dup_inc(s) (CV*)SvREFCNT_inc(sv_dup((SV*)s))
7529 #define io_dup(s) (IO*)sv_dup((SV*)s)
7530 #define io_dup_inc(s) (IO*)SvREFCNT_inc(sv_dup((SV*)s))
7531 #define gv_dup(s) (GV*)sv_dup((SV*)s)
7532 #define gv_dup_inc(s) (GV*)SvREFCNT_inc(sv_dup((SV*)s))
7533 #define SAVEPV(p) (p ? savepv(p) : Nullch)
7534 #define SAVEPVN(p,n) (p ? savepvn(p,n) : Nullch)
7537 Perl_re_dup(pTHX_ REGEXP *r)
7539 /* XXX fix when pmop->op_pmregexp becomes shared */
7540 return ReREFCNT_inc(r);
7544 Perl_fp_dup(pTHX_ PerlIO *fp, char type)
7548 return (PerlIO*)NULL;
7550 /* look for it in the table first */
7551 ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
7555 /* create anew and remember what it is */
7556 ret = PerlIO_fdupopen(aTHX_ fp);
7557 ptr_table_store(PL_ptr_table, fp, ret);
7562 Perl_dirp_dup(pTHX_ DIR *dp)
7571 Perl_gp_dup(pTHX_ GP *gp)
7576 /* look for it in the table first */
7577 ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
7581 /* create anew and remember what it is */
7582 Newz(0, ret, 1, GP);
7583 ptr_table_store(PL_ptr_table, gp, ret);
7586 ret->gp_refcnt = 0; /* must be before any other dups! */
7587 ret->gp_sv = sv_dup_inc(gp->gp_sv);
7588 ret->gp_io = io_dup_inc(gp->gp_io);
7589 ret->gp_form = cv_dup_inc(gp->gp_form);
7590 ret->gp_av = av_dup_inc(gp->gp_av);
7591 ret->gp_hv = hv_dup_inc(gp->gp_hv);
7592 ret->gp_egv = gv_dup(gp->gp_egv); /* GvEGV is not refcounted */
7593 ret->gp_cv = cv_dup_inc(gp->gp_cv);
7594 ret->gp_cvgen = gp->gp_cvgen;
7595 ret->gp_flags = gp->gp_flags;
7596 ret->gp_line = gp->gp_line;
7597 ret->gp_file = gp->gp_file; /* points to COP.cop_file */
7602 Perl_mg_dup(pTHX_ MAGIC *mg)
7604 MAGIC *mgret = (MAGIC*)NULL;
7607 return (MAGIC*)NULL;
7608 /* look for it in the table first */
7609 mgret = (MAGIC*)ptr_table_fetch(PL_ptr_table, mg);
7613 for (; mg; mg = mg->mg_moremagic) {
7615 Newz(0, nmg, 1, MAGIC);
7619 mgprev->mg_moremagic = nmg;
7620 nmg->mg_virtual = mg->mg_virtual; /* XXX copy dynamic vtable? */
7621 nmg->mg_private = mg->mg_private;
7622 nmg->mg_type = mg->mg_type;
7623 nmg->mg_flags = mg->mg_flags;
7624 if (mg->mg_type == 'r') {
7625 nmg->mg_obj = (SV*)re_dup((REGEXP*)mg->mg_obj);
7628 nmg->mg_obj = (mg->mg_flags & MGf_REFCOUNTED)
7629 ? sv_dup_inc(mg->mg_obj)
7630 : sv_dup(mg->mg_obj);
7632 nmg->mg_len = mg->mg_len;
7633 nmg->mg_ptr = mg->mg_ptr; /* XXX random ptr? */
7634 if (mg->mg_ptr && mg->mg_type != 'g') {
7635 if (mg->mg_len >= 0) {
7636 nmg->mg_ptr = SAVEPVN(mg->mg_ptr, mg->mg_len);
7637 if (mg->mg_type == 'c' && AMT_AMAGIC((AMT*)mg->mg_ptr)) {
7638 AMT *amtp = (AMT*)mg->mg_ptr;
7639 AMT *namtp = (AMT*)nmg->mg_ptr;
7641 for (i = 1; i < NofAMmeth; i++) {
7642 namtp->table[i] = cv_dup_inc(amtp->table[i]);
7646 else if (mg->mg_len == HEf_SVKEY)
7647 nmg->mg_ptr = (char*)sv_dup_inc((SV*)mg->mg_ptr);
7655 Perl_ptr_table_new(pTHX)
7658 Newz(0, tbl, 1, PTR_TBL_t);
7661 Newz(0, tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
7666 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *tbl, void *sv)
7668 PTR_TBL_ENT_t *tblent;
7669 UV hash = PTR2UV(sv);
7671 tblent = tbl->tbl_ary[hash & tbl->tbl_max];
7672 for (; tblent; tblent = tblent->next) {
7673 if (tblent->oldval == sv)
7674 return tblent->newval;
7680 Perl_ptr_table_store(pTHX_ PTR_TBL_t *tbl, void *oldv, void *newv)
7682 PTR_TBL_ENT_t *tblent, **otblent;
7683 /* XXX this may be pessimal on platforms where pointers aren't good
7684 * hash values e.g. if they grow faster in the most significant
7686 UV hash = PTR2UV(oldv);
7690 otblent = &tbl->tbl_ary[hash & tbl->tbl_max];
7691 for (tblent = *otblent; tblent; i=0, tblent = tblent->next) {
7692 if (tblent->oldval == oldv) {
7693 tblent->newval = newv;
7698 Newz(0, tblent, 1, PTR_TBL_ENT_t);
7699 tblent->oldval = oldv;
7700 tblent->newval = newv;
7701 tblent->next = *otblent;
7704 if (i && tbl->tbl_items > tbl->tbl_max)
7705 ptr_table_split(tbl);
7709 Perl_ptr_table_split(pTHX_ PTR_TBL_t *tbl)
7711 PTR_TBL_ENT_t **ary = tbl->tbl_ary;
7712 UV oldsize = tbl->tbl_max + 1;
7713 UV newsize = oldsize * 2;
7716 Renew(ary, newsize, PTR_TBL_ENT_t*);
7717 Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
7718 tbl->tbl_max = --newsize;
7720 for (i=0; i < oldsize; i++, ary++) {
7721 PTR_TBL_ENT_t **curentp, **entp, *ent;
7724 curentp = ary + oldsize;
7725 for (entp = ary, ent = *ary; ent; ent = *entp) {
7726 if ((newsize & PTR2UV(ent->oldval)) != i) {
7728 ent->next = *curentp;
7739 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *tbl)
7741 register PTR_TBL_ENT_t **array;
7742 register PTR_TBL_ENT_t *entry;
7743 register PTR_TBL_ENT_t *oentry = Null(PTR_TBL_ENT_t*);
7747 if (!tbl || !tbl->tbl_items) {
7751 array = tbl->tbl_ary;
7758 entry = entry->next;
7762 if (++riter > max) {
7765 entry = array[riter];
7773 Perl_ptr_table_free(pTHX_ PTR_TBL_t *tbl)
7778 ptr_table_clear(tbl);
7779 Safefree(tbl->tbl_ary);
7788 S_gv_share(pTHX_ SV *sstr)
7791 SV *sv = &PL_sv_no; /* just need SvREADONLY-ness */
7793 if (GvIO(gv) || GvFORM(gv)) {
7794 GvSHARED_off(gv); /* GvIOs cannot be shared. nor can GvFORMs */
7796 else if (!GvCV(gv)) {
7800 /* CvPADLISTs cannot be shared */
7801 if (!CvXSUB(GvCV(gv))) {
7806 if (!GvSHARED(gv)) {
7808 PerlIO_printf(Perl_debug_log, "gv_share: unable to share %s::%s\n",
7809 HvNAME(GvSTASH(gv)), GvNAME(gv));
7815 * write attempts will die with
7816 * "Modification of a read-only value attempted"
7822 SvREADONLY_on(GvSV(gv));
7829 SvREADONLY_on(GvAV(gv));
7836 SvREADONLY_on(GvAV(gv));
7839 return sstr; /* he_dup() will SvREFCNT_inc() */
7843 Perl_sv_dup(pTHX_ SV *sstr)
7847 if (!sstr || SvTYPE(sstr) == SVTYPEMASK)
7849 /* look for it in the table first */
7850 dstr = (SV*)ptr_table_fetch(PL_ptr_table, sstr);
7854 /* create anew and remember what it is */
7856 ptr_table_store(PL_ptr_table, sstr, dstr);
7859 SvFLAGS(dstr) = SvFLAGS(sstr);
7860 SvFLAGS(dstr) &= ~SVf_OOK; /* don't propagate OOK hack */
7861 SvREFCNT(dstr) = 0; /* must be before any other dups! */
7864 if (SvANY(sstr) && PL_watch_pvx && SvPVX(sstr) == PL_watch_pvx)
7865 PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
7866 PL_watch_pvx, SvPVX(sstr));
7869 switch (SvTYPE(sstr)) {
7874 SvANY(dstr) = new_XIV();
7875 SvIVX(dstr) = SvIVX(sstr);
7878 SvANY(dstr) = new_XNV();
7879 SvNVX(dstr) = SvNVX(sstr);
7882 SvANY(dstr) = new_XRV();
7883 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7886 SvANY(dstr) = new_XPV();
7887 SvCUR(dstr) = SvCUR(sstr);
7888 SvLEN(dstr) = SvLEN(sstr);
7890 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7891 else if (SvPVX(sstr) && SvLEN(sstr))
7892 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7894 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7897 SvANY(dstr) = new_XPVIV();
7898 SvCUR(dstr) = SvCUR(sstr);
7899 SvLEN(dstr) = SvLEN(sstr);
7900 SvIVX(dstr) = SvIVX(sstr);
7902 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7903 else if (SvPVX(sstr) && SvLEN(sstr))
7904 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7906 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7909 SvANY(dstr) = new_XPVNV();
7910 SvCUR(dstr) = SvCUR(sstr);
7911 SvLEN(dstr) = SvLEN(sstr);
7912 SvIVX(dstr) = SvIVX(sstr);
7913 SvNVX(dstr) = SvNVX(sstr);
7915 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7916 else if (SvPVX(sstr) && SvLEN(sstr))
7917 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7919 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7922 SvANY(dstr) = new_XPVMG();
7923 SvCUR(dstr) = SvCUR(sstr);
7924 SvLEN(dstr) = SvLEN(sstr);
7925 SvIVX(dstr) = SvIVX(sstr);
7926 SvNVX(dstr) = SvNVX(sstr);
7927 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7928 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7930 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7931 else if (SvPVX(sstr) && SvLEN(sstr))
7932 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7934 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7937 SvANY(dstr) = new_XPVBM();
7938 SvCUR(dstr) = SvCUR(sstr);
7939 SvLEN(dstr) = SvLEN(sstr);
7940 SvIVX(dstr) = SvIVX(sstr);
7941 SvNVX(dstr) = SvNVX(sstr);
7942 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7943 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7945 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7946 else if (SvPVX(sstr) && SvLEN(sstr))
7947 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7949 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7950 BmRARE(dstr) = BmRARE(sstr);
7951 BmUSEFUL(dstr) = BmUSEFUL(sstr);
7952 BmPREVIOUS(dstr)= BmPREVIOUS(sstr);
7955 SvANY(dstr) = new_XPVLV();
7956 SvCUR(dstr) = SvCUR(sstr);
7957 SvLEN(dstr) = SvLEN(sstr);
7958 SvIVX(dstr) = SvIVX(sstr);
7959 SvNVX(dstr) = SvNVX(sstr);
7960 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7961 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7963 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7964 else if (SvPVX(sstr) && SvLEN(sstr))
7965 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7967 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7968 LvTARGOFF(dstr) = LvTARGOFF(sstr); /* XXX sometimes holds PMOP* when DEBUGGING */
7969 LvTARGLEN(dstr) = LvTARGLEN(sstr);
7970 LvTARG(dstr) = sv_dup_inc(LvTARG(sstr));
7971 LvTYPE(dstr) = LvTYPE(sstr);
7974 if (GvSHARED((GV*)sstr)) {
7976 if ((share = gv_share(sstr))) {
7980 PerlIO_printf(Perl_debug_log, "sv_dup: sharing %s::%s\n",
7981 HvNAME(GvSTASH(share)), GvNAME(share));
7986 SvANY(dstr) = new_XPVGV();
7987 SvCUR(dstr) = SvCUR(sstr);
7988 SvLEN(dstr) = SvLEN(sstr);
7989 SvIVX(dstr) = SvIVX(sstr);
7990 SvNVX(dstr) = SvNVX(sstr);
7991 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7992 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7994 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7995 else if (SvPVX(sstr) && SvLEN(sstr))
7996 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7998 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7999 GvNAMELEN(dstr) = GvNAMELEN(sstr);
8000 GvNAME(dstr) = SAVEPVN(GvNAME(sstr), GvNAMELEN(sstr));
8001 GvSTASH(dstr) = hv_dup_inc(GvSTASH(sstr));
8002 GvFLAGS(dstr) = GvFLAGS(sstr);
8003 GvGP(dstr) = gp_dup(GvGP(sstr));
8004 (void)GpREFCNT_inc(GvGP(dstr));
8007 SvANY(dstr) = new_XPVIO();
8008 SvCUR(dstr) = SvCUR(sstr);
8009 SvLEN(dstr) = SvLEN(sstr);
8010 SvIVX(dstr) = SvIVX(sstr);
8011 SvNVX(dstr) = SvNVX(sstr);
8012 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
8013 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
8015 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
8016 else if (SvPVX(sstr) && SvLEN(sstr))
8017 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
8019 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
8020 IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(sstr));
8021 if (IoOFP(sstr) == IoIFP(sstr))
8022 IoOFP(dstr) = IoIFP(dstr);
8024 IoOFP(dstr) = fp_dup(IoOFP(sstr), IoTYPE(sstr));
8025 /* PL_rsfp_filters entries have fake IoDIRP() */
8026 if (IoDIRP(sstr) && !(IoFLAGS(sstr) & IOf_FAKE_DIRP))
8027 IoDIRP(dstr) = dirp_dup(IoDIRP(sstr));
8029 IoDIRP(dstr) = IoDIRP(sstr);
8030 IoLINES(dstr) = IoLINES(sstr);
8031 IoPAGE(dstr) = IoPAGE(sstr);
8032 IoPAGE_LEN(dstr) = IoPAGE_LEN(sstr);
8033 IoLINES_LEFT(dstr) = IoLINES_LEFT(sstr);
8034 IoTOP_NAME(dstr) = SAVEPV(IoTOP_NAME(sstr));
8035 IoTOP_GV(dstr) = gv_dup(IoTOP_GV(sstr));
8036 IoFMT_NAME(dstr) = SAVEPV(IoFMT_NAME(sstr));
8037 IoFMT_GV(dstr) = gv_dup(IoFMT_GV(sstr));
8038 IoBOTTOM_NAME(dstr) = SAVEPV(IoBOTTOM_NAME(sstr));
8039 IoBOTTOM_GV(dstr) = gv_dup(IoBOTTOM_GV(sstr));
8040 IoSUBPROCESS(dstr) = IoSUBPROCESS(sstr);
8041 IoTYPE(dstr) = IoTYPE(sstr);
8042 IoFLAGS(dstr) = IoFLAGS(sstr);
8045 SvANY(dstr) = new_XPVAV();
8046 SvCUR(dstr) = SvCUR(sstr);
8047 SvLEN(dstr) = SvLEN(sstr);
8048 SvIVX(dstr) = SvIVX(sstr);
8049 SvNVX(dstr) = SvNVX(sstr);
8050 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
8051 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
8052 AvARYLEN((AV*)dstr) = sv_dup_inc(AvARYLEN((AV*)sstr));
8053 AvFLAGS((AV*)dstr) = AvFLAGS((AV*)sstr);
8054 if (AvARRAY((AV*)sstr)) {
8055 SV **dst_ary, **src_ary;
8056 SSize_t items = AvFILLp((AV*)sstr) + 1;
8058 src_ary = AvARRAY((AV*)sstr);
8059 Newz(0, dst_ary, AvMAX((AV*)sstr)+1, SV*);
8060 ptr_table_store(PL_ptr_table, src_ary, dst_ary);
8061 SvPVX(dstr) = (char*)dst_ary;
8062 AvALLOC((AV*)dstr) = dst_ary;
8063 if (AvREAL((AV*)sstr)) {
8065 *dst_ary++ = sv_dup_inc(*src_ary++);
8069 *dst_ary++ = sv_dup(*src_ary++);
8071 items = AvMAX((AV*)sstr) - AvFILLp((AV*)sstr);
8072 while (items-- > 0) {
8073 *dst_ary++ = &PL_sv_undef;
8077 SvPVX(dstr) = Nullch;
8078 AvALLOC((AV*)dstr) = (SV**)NULL;
8082 SvANY(dstr) = new_XPVHV();
8083 SvCUR(dstr) = SvCUR(sstr);
8084 SvLEN(dstr) = SvLEN(sstr);
8085 SvIVX(dstr) = SvIVX(sstr);
8086 SvNVX(dstr) = SvNVX(sstr);
8087 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
8088 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
8089 HvRITER((HV*)dstr) = HvRITER((HV*)sstr);
8090 if (HvARRAY((HV*)sstr)) {
8092 XPVHV *dxhv = (XPVHV*)SvANY(dstr);
8093 XPVHV *sxhv = (XPVHV*)SvANY(sstr);
8094 Newz(0, dxhv->xhv_array,
8095 PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1), char);
8096 while (i <= sxhv->xhv_max) {
8097 ((HE**)dxhv->xhv_array)[i] = he_dup(((HE**)sxhv->xhv_array)[i],
8098 !!HvSHAREKEYS(sstr));
8101 dxhv->xhv_eiter = he_dup(sxhv->xhv_eiter, !!HvSHAREKEYS(sstr));
8104 SvPVX(dstr) = Nullch;
8105 HvEITER((HV*)dstr) = (HE*)NULL;
8107 HvPMROOT((HV*)dstr) = HvPMROOT((HV*)sstr); /* XXX */
8108 HvNAME((HV*)dstr) = SAVEPV(HvNAME((HV*)sstr));
8111 SvANY(dstr) = new_XPVFM();
8112 FmLINES(dstr) = FmLINES(sstr);
8116 SvANY(dstr) = new_XPVCV();
8118 SvCUR(dstr) = SvCUR(sstr);
8119 SvLEN(dstr) = SvLEN(sstr);
8120 SvIVX(dstr) = SvIVX(sstr);
8121 SvNVX(dstr) = SvNVX(sstr);
8122 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
8123 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
8124 if (SvPVX(sstr) && SvLEN(sstr))
8125 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
8127 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
8128 CvSTASH(dstr) = hv_dup(CvSTASH(sstr));/* NOTE: not refcounted */
8129 CvSTART(dstr) = CvSTART(sstr);
8130 CvROOT(dstr) = OpREFCNT_inc(CvROOT(sstr));
8131 CvXSUB(dstr) = CvXSUB(sstr);
8132 CvXSUBANY(dstr) = CvXSUBANY(sstr);
8133 CvGV(dstr) = gv_dup_inc(CvGV(sstr));
8134 CvDEPTH(dstr) = CvDEPTH(sstr);
8135 if (CvPADLIST(sstr) && !AvREAL(CvPADLIST(sstr))) {
8136 /* XXX padlists are real, but pretend to be not */
8137 AvREAL_on(CvPADLIST(sstr));
8138 CvPADLIST(dstr) = av_dup_inc(CvPADLIST(sstr));
8139 AvREAL_off(CvPADLIST(sstr));
8140 AvREAL_off(CvPADLIST(dstr));
8143 CvPADLIST(dstr) = av_dup_inc(CvPADLIST(sstr));
8144 CvOUTSIDE(dstr) = cv_dup_inc(CvOUTSIDE(sstr));
8145 CvFLAGS(dstr) = CvFLAGS(sstr);
8148 Perl_croak(aTHX_ "Bizarre SvTYPE [%d]", SvTYPE(sstr));
8152 if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
8159 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max)
8164 return (PERL_CONTEXT*)NULL;
8166 /* look for it in the table first */
8167 ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
8171 /* create anew and remember what it is */
8172 Newz(56, ncxs, max + 1, PERL_CONTEXT);
8173 ptr_table_store(PL_ptr_table, cxs, ncxs);
8176 PERL_CONTEXT *cx = &cxs[ix];
8177 PERL_CONTEXT *ncx = &ncxs[ix];
8178 ncx->cx_type = cx->cx_type;
8179 if (CxTYPE(cx) == CXt_SUBST) {
8180 Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
8183 ncx->blk_oldsp = cx->blk_oldsp;
8184 ncx->blk_oldcop = cx->blk_oldcop;
8185 ncx->blk_oldretsp = cx->blk_oldretsp;
8186 ncx->blk_oldmarksp = cx->blk_oldmarksp;
8187 ncx->blk_oldscopesp = cx->blk_oldscopesp;
8188 ncx->blk_oldpm = cx->blk_oldpm;
8189 ncx->blk_gimme = cx->blk_gimme;
8190 switch (CxTYPE(cx)) {
8192 ncx->blk_sub.cv = (cx->blk_sub.olddepth == 0
8193 ? cv_dup_inc(cx->blk_sub.cv)
8194 : cv_dup(cx->blk_sub.cv));
8195 ncx->blk_sub.argarray = (cx->blk_sub.hasargs
8196 ? av_dup_inc(cx->blk_sub.argarray)
8198 ncx->blk_sub.savearray = av_dup(cx->blk_sub.savearray);
8199 ncx->blk_sub.olddepth = cx->blk_sub.olddepth;
8200 ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
8201 ncx->blk_sub.lval = cx->blk_sub.lval;
8204 ncx->blk_eval.old_in_eval = cx->blk_eval.old_in_eval;
8205 ncx->blk_eval.old_op_type = cx->blk_eval.old_op_type;
8206 ncx->blk_eval.old_namesv = sv_dup_inc(cx->blk_eval.old_namesv);
8207 ncx->blk_eval.old_eval_root = cx->blk_eval.old_eval_root;
8208 ncx->blk_eval.cur_text = sv_dup(cx->blk_eval.cur_text);
8211 ncx->blk_loop.label = cx->blk_loop.label;
8212 ncx->blk_loop.resetsp = cx->blk_loop.resetsp;
8213 ncx->blk_loop.redo_op = cx->blk_loop.redo_op;
8214 ncx->blk_loop.next_op = cx->blk_loop.next_op;
8215 ncx->blk_loop.last_op = cx->blk_loop.last_op;
8216 ncx->blk_loop.iterdata = (CxPADLOOP(cx)
8217 ? cx->blk_loop.iterdata
8218 : gv_dup((GV*)cx->blk_loop.iterdata));
8219 ncx->blk_loop.oldcurpad
8220 = (SV**)ptr_table_fetch(PL_ptr_table,
8221 cx->blk_loop.oldcurpad);
8222 ncx->blk_loop.itersave = sv_dup_inc(cx->blk_loop.itersave);
8223 ncx->blk_loop.iterlval = sv_dup_inc(cx->blk_loop.iterlval);
8224 ncx->blk_loop.iterary = av_dup_inc(cx->blk_loop.iterary);
8225 ncx->blk_loop.iterix = cx->blk_loop.iterix;
8226 ncx->blk_loop.itermax = cx->blk_loop.itermax;
8229 ncx->blk_sub.cv = cv_dup(cx->blk_sub.cv);
8230 ncx->blk_sub.gv = gv_dup(cx->blk_sub.gv);
8231 ncx->blk_sub.dfoutgv = gv_dup_inc(cx->blk_sub.dfoutgv);
8232 ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
8245 Perl_si_dup(pTHX_ PERL_SI *si)
8250 return (PERL_SI*)NULL;
8252 /* look for it in the table first */
8253 nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
8257 /* create anew and remember what it is */
8258 Newz(56, nsi, 1, PERL_SI);
8259 ptr_table_store(PL_ptr_table, si, nsi);
8261 nsi->si_stack = av_dup_inc(si->si_stack);
8262 nsi->si_cxix = si->si_cxix;
8263 nsi->si_cxmax = si->si_cxmax;
8264 nsi->si_cxstack = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax);
8265 nsi->si_type = si->si_type;
8266 nsi->si_prev = si_dup(si->si_prev);
8267 nsi->si_next = si_dup(si->si_next);
8268 nsi->si_markoff = si->si_markoff;
8273 #define POPINT(ss,ix) ((ss)[--(ix)].any_i32)
8274 #define TOPINT(ss,ix) ((ss)[ix].any_i32)
8275 #define POPLONG(ss,ix) ((ss)[--(ix)].any_long)
8276 #define TOPLONG(ss,ix) ((ss)[ix].any_long)
8277 #define POPIV(ss,ix) ((ss)[--(ix)].any_iv)
8278 #define TOPIV(ss,ix) ((ss)[ix].any_iv)
8279 #define POPPTR(ss,ix) ((ss)[--(ix)].any_ptr)
8280 #define TOPPTR(ss,ix) ((ss)[ix].any_ptr)
8281 #define POPDPTR(ss,ix) ((ss)[--(ix)].any_dptr)
8282 #define TOPDPTR(ss,ix) ((ss)[ix].any_dptr)
8283 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
8284 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
8287 #define pv_dup_inc(p) SAVEPV(p)
8288 #define pv_dup(p) SAVEPV(p)
8289 #define svp_dup_inc(p,pp) any_dup(p,pp)
8292 Perl_any_dup(pTHX_ void *v, PerlInterpreter *proto_perl)
8299 /* look for it in the table first */
8300 ret = ptr_table_fetch(PL_ptr_table, v);
8304 /* see if it is part of the interpreter structure */
8305 if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
8306 ret = (void*)(((char*)aTHXo) + (((char*)v) - (char*)proto_perl));
8314 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl)
8316 ANY *ss = proto_perl->Tsavestack;
8317 I32 ix = proto_perl->Tsavestack_ix;
8318 I32 max = proto_perl->Tsavestack_max;
8331 void (*dptr) (void*);
8332 void (*dxptr) (pTHXo_ void*);
8335 Newz(54, nss, max, ANY);
8341 case SAVEt_ITEM: /* normal string */
8342 sv = (SV*)POPPTR(ss,ix);
8343 TOPPTR(nss,ix) = sv_dup_inc(sv);
8344 sv = (SV*)POPPTR(ss,ix);
8345 TOPPTR(nss,ix) = sv_dup_inc(sv);
8347 case SAVEt_SV: /* scalar reference */
8348 sv = (SV*)POPPTR(ss,ix);
8349 TOPPTR(nss,ix) = sv_dup_inc(sv);
8350 gv = (GV*)POPPTR(ss,ix);
8351 TOPPTR(nss,ix) = gv_dup_inc(gv);
8353 case SAVEt_GENERIC_PVREF: /* generic char* */
8354 c = (char*)POPPTR(ss,ix);
8355 TOPPTR(nss,ix) = pv_dup(c);
8356 ptr = POPPTR(ss,ix);
8357 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8359 case SAVEt_GENERIC_SVREF: /* generic sv */
8360 case SAVEt_SVREF: /* scalar reference */
8361 sv = (SV*)POPPTR(ss,ix);
8362 TOPPTR(nss,ix) = sv_dup_inc(sv);
8363 ptr = POPPTR(ss,ix);
8364 TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
8366 case SAVEt_AV: /* array reference */
8367 av = (AV*)POPPTR(ss,ix);
8368 TOPPTR(nss,ix) = av_dup_inc(av);
8369 gv = (GV*)POPPTR(ss,ix);
8370 TOPPTR(nss,ix) = gv_dup(gv);
8372 case SAVEt_HV: /* hash reference */
8373 hv = (HV*)POPPTR(ss,ix);
8374 TOPPTR(nss,ix) = hv_dup_inc(hv);
8375 gv = (GV*)POPPTR(ss,ix);
8376 TOPPTR(nss,ix) = gv_dup(gv);
8378 case SAVEt_INT: /* int reference */
8379 ptr = POPPTR(ss,ix);
8380 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8381 intval = (int)POPINT(ss,ix);
8382 TOPINT(nss,ix) = intval;
8384 case SAVEt_LONG: /* long reference */
8385 ptr = POPPTR(ss,ix);
8386 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8387 longval = (long)POPLONG(ss,ix);
8388 TOPLONG(nss,ix) = longval;
8390 case SAVEt_I32: /* I32 reference */
8391 case SAVEt_I16: /* I16 reference */
8392 case SAVEt_I8: /* I8 reference */
8393 ptr = POPPTR(ss,ix);
8394 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8398 case SAVEt_IV: /* IV reference */
8399 ptr = POPPTR(ss,ix);
8400 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8404 case SAVEt_SPTR: /* SV* reference */
8405 ptr = POPPTR(ss,ix);
8406 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8407 sv = (SV*)POPPTR(ss,ix);
8408 TOPPTR(nss,ix) = sv_dup(sv);
8410 case SAVEt_VPTR: /* random* reference */
8411 ptr = POPPTR(ss,ix);
8412 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8413 ptr = POPPTR(ss,ix);
8414 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8416 case SAVEt_PPTR: /* char* reference */
8417 ptr = POPPTR(ss,ix);
8418 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8419 c = (char*)POPPTR(ss,ix);
8420 TOPPTR(nss,ix) = pv_dup(c);
8422 case SAVEt_HPTR: /* HV* reference */
8423 ptr = POPPTR(ss,ix);
8424 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8425 hv = (HV*)POPPTR(ss,ix);
8426 TOPPTR(nss,ix) = hv_dup(hv);
8428 case SAVEt_APTR: /* AV* reference */
8429 ptr = POPPTR(ss,ix);
8430 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8431 av = (AV*)POPPTR(ss,ix);
8432 TOPPTR(nss,ix) = av_dup(av);
8435 gv = (GV*)POPPTR(ss,ix);
8436 TOPPTR(nss,ix) = gv_dup(gv);
8438 case SAVEt_GP: /* scalar reference */
8439 gp = (GP*)POPPTR(ss,ix);
8440 TOPPTR(nss,ix) = gp = gp_dup(gp);
8441 (void)GpREFCNT_inc(gp);
8442 gv = (GV*)POPPTR(ss,ix);
8443 TOPPTR(nss,ix) = gv_dup_inc(c);
8444 c = (char*)POPPTR(ss,ix);
8445 TOPPTR(nss,ix) = pv_dup(c);
8452 sv = (SV*)POPPTR(ss,ix);
8453 TOPPTR(nss,ix) = sv_dup_inc(sv);
8456 ptr = POPPTR(ss,ix);
8457 if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
8458 /* these are assumed to be refcounted properly */
8459 switch (((OP*)ptr)->op_type) {
8466 TOPPTR(nss,ix) = ptr;
8471 TOPPTR(nss,ix) = Nullop;
8476 TOPPTR(nss,ix) = Nullop;
8479 c = (char*)POPPTR(ss,ix);
8480 TOPPTR(nss,ix) = pv_dup_inc(c);
8483 longval = POPLONG(ss,ix);
8484 TOPLONG(nss,ix) = longval;
8487 hv = (HV*)POPPTR(ss,ix);
8488 TOPPTR(nss,ix) = hv_dup_inc(hv);
8489 c = (char*)POPPTR(ss,ix);
8490 TOPPTR(nss,ix) = pv_dup_inc(c);
8494 case SAVEt_DESTRUCTOR:
8495 ptr = POPPTR(ss,ix);
8496 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
8497 dptr = POPDPTR(ss,ix);
8498 TOPDPTR(nss,ix) = (void (*)(void*))any_dup((void *)dptr, proto_perl);
8500 case SAVEt_DESTRUCTOR_X:
8501 ptr = POPPTR(ss,ix);
8502 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
8503 dxptr = POPDXPTR(ss,ix);
8504 TOPDXPTR(nss,ix) = (void (*)(pTHXo_ void*))any_dup((void *)dxptr, proto_perl);
8506 case SAVEt_REGCONTEXT:
8512 case SAVEt_STACK_POS: /* Position on Perl stack */
8516 case SAVEt_AELEM: /* array element */
8517 sv = (SV*)POPPTR(ss,ix);
8518 TOPPTR(nss,ix) = sv_dup_inc(sv);
8521 av = (AV*)POPPTR(ss,ix);
8522 TOPPTR(nss,ix) = av_dup_inc(av);
8524 case SAVEt_HELEM: /* hash element */
8525 sv = (SV*)POPPTR(ss,ix);
8526 TOPPTR(nss,ix) = sv_dup_inc(sv);
8527 sv = (SV*)POPPTR(ss,ix);
8528 TOPPTR(nss,ix) = sv_dup_inc(sv);
8529 hv = (HV*)POPPTR(ss,ix);
8530 TOPPTR(nss,ix) = hv_dup_inc(hv);
8533 ptr = POPPTR(ss,ix);
8534 TOPPTR(nss,ix) = ptr;
8541 av = (AV*)POPPTR(ss,ix);
8542 TOPPTR(nss,ix) = av_dup(av);
8545 longval = (long)POPLONG(ss,ix);
8546 TOPLONG(nss,ix) = longval;
8547 ptr = POPPTR(ss,ix);
8548 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8549 sv = (SV*)POPPTR(ss,ix);
8550 TOPPTR(nss,ix) = sv_dup(sv);
8553 Perl_croak(aTHX_ "panic: ss_dup inconsistency");
8565 perl_clone(PerlInterpreter *proto_perl, UV flags)
8568 CPerlObj *pPerl = (CPerlObj*)proto_perl;
8571 #ifdef PERL_IMPLICIT_SYS
8572 return perl_clone_using(proto_perl, flags,
8574 proto_perl->IMemShared,
8575 proto_perl->IMemParse,
8585 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
8586 struct IPerlMem* ipM, struct IPerlMem* ipMS,
8587 struct IPerlMem* ipMP, struct IPerlEnv* ipE,
8588 struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
8589 struct IPerlDir* ipD, struct IPerlSock* ipS,
8590 struct IPerlProc* ipP)
8592 /* XXX many of the string copies here can be optimized if they're
8593 * constants; they need to be allocated as common memory and just
8594 * their pointers copied. */
8598 CPerlObj *pPerl = new(ipM) CPerlObj(ipM, ipMS, ipMP, ipE, ipStd, ipLIO,
8600 PERL_SET_THX(pPerl);
8601 # else /* !PERL_OBJECT */
8602 PerlInterpreter *my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
8603 PERL_SET_THX(my_perl);
8606 memset(my_perl, 0xab, sizeof(PerlInterpreter));
8612 # else /* !DEBUGGING */
8613 Zero(my_perl, 1, PerlInterpreter);
8614 # endif /* DEBUGGING */
8618 PL_MemShared = ipMS;
8626 # endif /* PERL_OBJECT */
8627 #else /* !PERL_IMPLICIT_SYS */
8629 PerlInterpreter *my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
8630 PERL_SET_THX(my_perl);
8633 memset(my_perl, 0xab, sizeof(PerlInterpreter));
8639 # else /* !DEBUGGING */
8640 Zero(my_perl, 1, PerlInterpreter);
8641 # endif /* DEBUGGING */
8642 #endif /* PERL_IMPLICIT_SYS */
8645 PL_xiv_arenaroot = NULL;
8647 PL_xnv_arenaroot = NULL;
8649 PL_xrv_arenaroot = NULL;
8651 PL_xpv_arenaroot = NULL;
8653 PL_xpviv_arenaroot = NULL;
8654 PL_xpviv_root = NULL;
8655 PL_xpvnv_arenaroot = NULL;
8656 PL_xpvnv_root = NULL;
8657 PL_xpvcv_arenaroot = NULL;
8658 PL_xpvcv_root = NULL;
8659 PL_xpvav_arenaroot = NULL;
8660 PL_xpvav_root = NULL;
8661 PL_xpvhv_arenaroot = NULL;
8662 PL_xpvhv_root = NULL;
8663 PL_xpvmg_arenaroot = NULL;
8664 PL_xpvmg_root = NULL;
8665 PL_xpvlv_arenaroot = NULL;
8666 PL_xpvlv_root = NULL;
8667 PL_xpvbm_arenaroot = NULL;
8668 PL_xpvbm_root = NULL;
8669 PL_he_arenaroot = NULL;
8671 PL_nice_chunk = NULL;
8672 PL_nice_chunk_size = 0;
8675 PL_sv_root = Nullsv;
8676 PL_sv_arenaroot = Nullsv;
8678 PL_debug = proto_perl->Idebug;
8680 /* create SV map for pointer relocation */
8681 PL_ptr_table = ptr_table_new();
8683 /* initialize these special pointers as early as possible */
8684 SvANY(&PL_sv_undef) = NULL;
8685 SvREFCNT(&PL_sv_undef) = (~(U32)0)/2;
8686 SvFLAGS(&PL_sv_undef) = SVf_READONLY|SVt_NULL;
8687 ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
8690 SvUPGRADE(&PL_sv_no, SVt_PVNV);
8692 SvANY(&PL_sv_no) = new_XPVNV();
8694 SvREFCNT(&PL_sv_no) = (~(U32)0)/2;
8695 SvFLAGS(&PL_sv_no) = SVp_NOK|SVf_NOK|SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
8696 SvPVX(&PL_sv_no) = SAVEPVN(PL_No, 0);
8697 SvCUR(&PL_sv_no) = 0;
8698 SvLEN(&PL_sv_no) = 1;
8699 SvNVX(&PL_sv_no) = 0;
8700 ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
8703 SvUPGRADE(&PL_sv_yes, SVt_PVNV);
8705 SvANY(&PL_sv_yes) = new_XPVNV();
8707 SvREFCNT(&PL_sv_yes) = (~(U32)0)/2;
8708 SvFLAGS(&PL_sv_yes) = SVp_NOK|SVf_NOK|SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
8709 SvPVX(&PL_sv_yes) = SAVEPVN(PL_Yes, 1);
8710 SvCUR(&PL_sv_yes) = 1;
8711 SvLEN(&PL_sv_yes) = 2;
8712 SvNVX(&PL_sv_yes) = 1;
8713 ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
8715 /* create shared string table */
8716 PL_strtab = newHV();
8717 HvSHAREKEYS_off(PL_strtab);
8718 hv_ksplit(PL_strtab, 512);
8719 ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
8721 PL_compiling = proto_perl->Icompiling;
8722 PL_compiling.cop_stashpv = SAVEPV(PL_compiling.cop_stashpv);
8723 PL_compiling.cop_file = SAVEPV(PL_compiling.cop_file);
8724 ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
8725 if (!specialWARN(PL_compiling.cop_warnings))
8726 PL_compiling.cop_warnings = sv_dup_inc(PL_compiling.cop_warnings);
8727 if (!specialCopIO(PL_compiling.cop_io))
8728 PL_compiling.cop_io = sv_dup_inc(PL_compiling.cop_io);
8729 PL_curcop = (COP*)any_dup(proto_perl->Tcurcop, proto_perl);
8731 /* pseudo environmental stuff */
8732 PL_origargc = proto_perl->Iorigargc;
8734 New(0, PL_origargv, i+1, char*);
8735 PL_origargv[i] = '\0';
8737 PL_origargv[i] = SAVEPV(proto_perl->Iorigargv[i]);
8739 PL_envgv = gv_dup(proto_perl->Ienvgv);
8740 PL_incgv = gv_dup(proto_perl->Iincgv);
8741 PL_hintgv = gv_dup(proto_perl->Ihintgv);
8742 PL_origfilename = SAVEPV(proto_perl->Iorigfilename);
8743 PL_diehook = sv_dup_inc(proto_perl->Idiehook);
8744 PL_warnhook = sv_dup_inc(proto_perl->Iwarnhook);
8747 PL_minus_c = proto_perl->Iminus_c;
8748 PL_patchlevel = sv_dup_inc(proto_perl->Ipatchlevel);
8749 PL_localpatches = proto_perl->Ilocalpatches;
8750 PL_splitstr = proto_perl->Isplitstr;
8751 PL_preprocess = proto_perl->Ipreprocess;
8752 PL_minus_n = proto_perl->Iminus_n;
8753 PL_minus_p = proto_perl->Iminus_p;
8754 PL_minus_l = proto_perl->Iminus_l;
8755 PL_minus_a = proto_perl->Iminus_a;
8756 PL_minus_F = proto_perl->Iminus_F;
8757 PL_doswitches = proto_perl->Idoswitches;
8758 PL_dowarn = proto_perl->Idowarn;
8759 PL_doextract = proto_perl->Idoextract;
8760 PL_sawampersand = proto_perl->Isawampersand;
8761 PL_unsafe = proto_perl->Iunsafe;
8762 PL_inplace = SAVEPV(proto_perl->Iinplace);
8763 PL_e_script = sv_dup_inc(proto_perl->Ie_script);
8764 PL_perldb = proto_perl->Iperldb;
8765 PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
8767 /* magical thingies */
8768 /* XXX time(&PL_basetime) when asked for? */
8769 PL_basetime = proto_perl->Ibasetime;
8770 PL_formfeed = sv_dup(proto_perl->Iformfeed);
8772 PL_maxsysfd = proto_perl->Imaxsysfd;
8773 PL_multiline = proto_perl->Imultiline;
8774 PL_statusvalue = proto_perl->Istatusvalue;
8776 PL_statusvalue_vms = proto_perl->Istatusvalue_vms;
8779 /* shortcuts to various I/O objects */
8780 PL_stdingv = gv_dup(proto_perl->Istdingv);
8781 PL_stderrgv = gv_dup(proto_perl->Istderrgv);
8782 PL_defgv = gv_dup(proto_perl->Idefgv);
8783 PL_argvgv = gv_dup(proto_perl->Iargvgv);
8784 PL_argvoutgv = gv_dup(proto_perl->Iargvoutgv);
8785 PL_argvout_stack = av_dup(proto_perl->Iargvout_stack);
8787 /* shortcuts to regexp stuff */
8788 PL_replgv = gv_dup(proto_perl->Ireplgv);
8790 /* shortcuts to misc objects */
8791 PL_errgv = gv_dup(proto_perl->Ierrgv);
8793 /* shortcuts to debugging objects */
8794 PL_DBgv = gv_dup(proto_perl->IDBgv);
8795 PL_DBline = gv_dup(proto_perl->IDBline);
8796 PL_DBsub = gv_dup(proto_perl->IDBsub);
8797 PL_DBsingle = sv_dup(proto_perl->IDBsingle);
8798 PL_DBtrace = sv_dup(proto_perl->IDBtrace);
8799 PL_DBsignal = sv_dup(proto_perl->IDBsignal);
8800 PL_lineary = av_dup(proto_perl->Ilineary);
8801 PL_dbargs = av_dup(proto_perl->Idbargs);
8804 PL_defstash = hv_dup_inc(proto_perl->Tdefstash);
8805 PL_curstash = hv_dup(proto_perl->Tcurstash);
8806 PL_debstash = hv_dup(proto_perl->Idebstash);
8807 PL_globalstash = hv_dup(proto_perl->Iglobalstash);
8808 PL_curstname = sv_dup_inc(proto_perl->Icurstname);
8810 PL_beginav = av_dup_inc(proto_perl->Ibeginav);
8811 PL_endav = av_dup_inc(proto_perl->Iendav);
8812 PL_checkav = av_dup_inc(proto_perl->Icheckav);
8813 PL_initav = av_dup_inc(proto_perl->Iinitav);
8815 PL_sub_generation = proto_perl->Isub_generation;
8817 /* funky return mechanisms */
8818 PL_forkprocess = proto_perl->Iforkprocess;
8820 /* subprocess state */
8821 PL_fdpid = av_dup_inc(proto_perl->Ifdpid);
8823 /* internal state */
8824 PL_tainting = proto_perl->Itainting;
8825 PL_maxo = proto_perl->Imaxo;
8826 if (proto_perl->Iop_mask)
8827 PL_op_mask = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
8829 PL_op_mask = Nullch;
8831 /* current interpreter roots */
8832 PL_main_cv = cv_dup_inc(proto_perl->Imain_cv);
8833 PL_main_root = OpREFCNT_inc(proto_perl->Imain_root);
8834 PL_main_start = proto_perl->Imain_start;
8835 PL_eval_root = proto_perl->Ieval_root;
8836 PL_eval_start = proto_perl->Ieval_start;
8838 /* runtime control stuff */
8839 PL_curcopdb = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
8840 PL_copline = proto_perl->Icopline;
8842 PL_filemode = proto_perl->Ifilemode;
8843 PL_lastfd = proto_perl->Ilastfd;
8844 PL_oldname = proto_perl->Ioldname; /* XXX not quite right */
8847 PL_gensym = proto_perl->Igensym;
8848 PL_preambled = proto_perl->Ipreambled;
8849 PL_preambleav = av_dup_inc(proto_perl->Ipreambleav);
8850 PL_laststatval = proto_perl->Ilaststatval;
8851 PL_laststype = proto_perl->Ilaststype;
8852 PL_mess_sv = Nullsv;
8854 PL_ors_sv = sv_dup_inc(proto_perl->Iors_sv);
8855 PL_ofmt = SAVEPV(proto_perl->Iofmt);
8857 /* interpreter atexit processing */
8858 PL_exitlistlen = proto_perl->Iexitlistlen;
8859 if (PL_exitlistlen) {
8860 New(0, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
8861 Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
8864 PL_exitlist = (PerlExitListEntry*)NULL;
8865 PL_modglobal = hv_dup_inc(proto_perl->Imodglobal);
8867 PL_profiledata = NULL;
8868 PL_rsfp = fp_dup(proto_perl->Irsfp, '<');
8869 /* PL_rsfp_filters entries have fake IoDIRP() */
8870 PL_rsfp_filters = av_dup_inc(proto_perl->Irsfp_filters);
8872 PL_compcv = cv_dup(proto_perl->Icompcv);
8873 PL_comppad = av_dup(proto_perl->Icomppad);
8874 PL_comppad_name = av_dup(proto_perl->Icomppad_name);
8875 PL_comppad_name_fill = proto_perl->Icomppad_name_fill;
8876 PL_comppad_name_floor = proto_perl->Icomppad_name_floor;
8877 PL_curpad = (SV**)ptr_table_fetch(PL_ptr_table,
8878 proto_perl->Tcurpad);
8880 #ifdef HAVE_INTERP_INTERN
8881 sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
8884 /* more statics moved here */
8885 PL_generation = proto_perl->Igeneration;
8886 PL_DBcv = cv_dup(proto_perl->IDBcv);
8888 PL_in_clean_objs = proto_perl->Iin_clean_objs;
8889 PL_in_clean_all = proto_perl->Iin_clean_all;
8891 PL_uid = proto_perl->Iuid;
8892 PL_euid = proto_perl->Ieuid;
8893 PL_gid = proto_perl->Igid;
8894 PL_egid = proto_perl->Iegid;
8895 PL_nomemok = proto_perl->Inomemok;
8896 PL_an = proto_perl->Ian;
8897 PL_cop_seqmax = proto_perl->Icop_seqmax;
8898 PL_op_seqmax = proto_perl->Iop_seqmax;
8899 PL_evalseq = proto_perl->Ievalseq;
8900 PL_origenviron = proto_perl->Iorigenviron; /* XXX not quite right */
8901 PL_origalen = proto_perl->Iorigalen;
8902 PL_pidstatus = newHV(); /* XXX flag for cloning? */
8903 PL_osname = SAVEPV(proto_perl->Iosname);
8904 PL_sh_path = SAVEPV(proto_perl->Ish_path);
8905 PL_sighandlerp = proto_perl->Isighandlerp;
8908 PL_runops = proto_perl->Irunops;
8910 Copy(proto_perl->Itokenbuf, PL_tokenbuf, 256, char);
8913 PL_cshlen = proto_perl->Icshlen;
8914 PL_cshname = SAVEPVN(proto_perl->Icshname, PL_cshlen);
8917 PL_lex_state = proto_perl->Ilex_state;
8918 PL_lex_defer = proto_perl->Ilex_defer;
8919 PL_lex_expect = proto_perl->Ilex_expect;
8920 PL_lex_formbrack = proto_perl->Ilex_formbrack;
8921 PL_lex_dojoin = proto_perl->Ilex_dojoin;
8922 PL_lex_starts = proto_perl->Ilex_starts;
8923 PL_lex_stuff = sv_dup_inc(proto_perl->Ilex_stuff);
8924 PL_lex_repl = sv_dup_inc(proto_perl->Ilex_repl);
8925 PL_lex_op = proto_perl->Ilex_op;
8926 PL_lex_inpat = proto_perl->Ilex_inpat;
8927 PL_lex_inwhat = proto_perl->Ilex_inwhat;
8928 PL_lex_brackets = proto_perl->Ilex_brackets;
8929 i = (PL_lex_brackets < 120 ? 120 : PL_lex_brackets);
8930 PL_lex_brackstack = SAVEPVN(proto_perl->Ilex_brackstack,i);
8931 PL_lex_casemods = proto_perl->Ilex_casemods;
8932 i = (PL_lex_casemods < 12 ? 12 : PL_lex_casemods);
8933 PL_lex_casestack = SAVEPVN(proto_perl->Ilex_casestack,i);
8935 Copy(proto_perl->Inextval, PL_nextval, 5, YYSTYPE);
8936 Copy(proto_perl->Inexttype, PL_nexttype, 5, I32);
8937 PL_nexttoke = proto_perl->Inexttoke;
8939 PL_linestr = sv_dup_inc(proto_perl->Ilinestr);
8940 i = proto_perl->Ibufptr - SvPVX(proto_perl->Ilinestr);
8941 PL_bufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8942 i = proto_perl->Ioldbufptr - SvPVX(proto_perl->Ilinestr);
8943 PL_oldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8944 i = proto_perl->Ioldoldbufptr - SvPVX(proto_perl->Ilinestr);
8945 PL_oldoldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8946 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
8947 i = proto_perl->Ilinestart - SvPVX(proto_perl->Ilinestr);
8948 PL_linestart = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8949 PL_pending_ident = proto_perl->Ipending_ident;
8950 PL_sublex_info = proto_perl->Isublex_info; /* XXX not quite right */
8952 PL_expect = proto_perl->Iexpect;
8954 PL_multi_start = proto_perl->Imulti_start;
8955 PL_multi_end = proto_perl->Imulti_end;
8956 PL_multi_open = proto_perl->Imulti_open;
8957 PL_multi_close = proto_perl->Imulti_close;
8959 PL_error_count = proto_perl->Ierror_count;
8960 PL_subline = proto_perl->Isubline;
8961 PL_subname = sv_dup_inc(proto_perl->Isubname);
8963 PL_min_intro_pending = proto_perl->Imin_intro_pending;
8964 PL_max_intro_pending = proto_perl->Imax_intro_pending;
8965 PL_padix = proto_perl->Ipadix;
8966 PL_padix_floor = proto_perl->Ipadix_floor;
8967 PL_pad_reset_pending = proto_perl->Ipad_reset_pending;
8969 i = proto_perl->Ilast_uni - SvPVX(proto_perl->Ilinestr);
8970 PL_last_uni = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8971 i = proto_perl->Ilast_lop - SvPVX(proto_perl->Ilinestr);
8972 PL_last_lop = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8973 PL_last_lop_op = proto_perl->Ilast_lop_op;
8974 PL_in_my = proto_perl->Iin_my;
8975 PL_in_my_stash = hv_dup(proto_perl->Iin_my_stash);
8977 PL_cryptseen = proto_perl->Icryptseen;
8980 PL_hints = proto_perl->Ihints;
8982 PL_amagic_generation = proto_perl->Iamagic_generation;
8984 #ifdef USE_LOCALE_COLLATE
8985 PL_collation_ix = proto_perl->Icollation_ix;
8986 PL_collation_name = SAVEPV(proto_perl->Icollation_name);
8987 PL_collation_standard = proto_perl->Icollation_standard;
8988 PL_collxfrm_base = proto_perl->Icollxfrm_base;
8989 PL_collxfrm_mult = proto_perl->Icollxfrm_mult;
8990 #endif /* USE_LOCALE_COLLATE */
8992 #ifdef USE_LOCALE_NUMERIC
8993 PL_numeric_name = SAVEPV(proto_perl->Inumeric_name);
8994 PL_numeric_standard = proto_perl->Inumeric_standard;
8995 PL_numeric_local = proto_perl->Inumeric_local;
8996 PL_numeric_radix = sv_dup_inc(proto_perl->Inumeric_radix);
8997 #endif /* !USE_LOCALE_NUMERIC */
8999 /* utf8 character classes */
9000 PL_utf8_alnum = sv_dup_inc(proto_perl->Iutf8_alnum);
9001 PL_utf8_alnumc = sv_dup_inc(proto_perl->Iutf8_alnumc);
9002 PL_utf8_ascii = sv_dup_inc(proto_perl->Iutf8_ascii);
9003 PL_utf8_alpha = sv_dup_inc(proto_perl->Iutf8_alpha);
9004 PL_utf8_space = sv_dup_inc(proto_perl->Iutf8_space);
9005 PL_utf8_cntrl = sv_dup_inc(proto_perl->Iutf8_cntrl);
9006 PL_utf8_graph = sv_dup_inc(proto_perl->Iutf8_graph);
9007 PL_utf8_digit = sv_dup_inc(proto_perl->Iutf8_digit);
9008 PL_utf8_upper = sv_dup_inc(proto_perl->Iutf8_upper);
9009 PL_utf8_lower = sv_dup_inc(proto_perl->Iutf8_lower);
9010 PL_utf8_print = sv_dup_inc(proto_perl->Iutf8_print);
9011 PL_utf8_punct = sv_dup_inc(proto_perl->Iutf8_punct);
9012 PL_utf8_xdigit = sv_dup_inc(proto_perl->Iutf8_xdigit);
9013 PL_utf8_mark = sv_dup_inc(proto_perl->Iutf8_mark);
9014 PL_utf8_toupper = sv_dup_inc(proto_perl->Iutf8_toupper);
9015 PL_utf8_totitle = sv_dup_inc(proto_perl->Iutf8_totitle);
9016 PL_utf8_tolower = sv_dup_inc(proto_perl->Iutf8_tolower);
9019 PL_last_swash_hv = Nullhv; /* reinits on demand */
9020 PL_last_swash_klen = 0;
9021 PL_last_swash_key[0]= '\0';
9022 PL_last_swash_tmps = (U8*)NULL;
9023 PL_last_swash_slen = 0;
9025 /* perly.c globals */
9026 PL_yydebug = proto_perl->Iyydebug;
9027 PL_yynerrs = proto_perl->Iyynerrs;
9028 PL_yyerrflag = proto_perl->Iyyerrflag;
9029 PL_yychar = proto_perl->Iyychar;
9030 PL_yyval = proto_perl->Iyyval;
9031 PL_yylval = proto_perl->Iyylval;
9033 PL_glob_index = proto_perl->Iglob_index;
9034 PL_srand_called = proto_perl->Isrand_called;
9035 PL_uudmap['M'] = 0; /* reinits on demand */
9036 PL_bitcount = Nullch; /* reinits on demand */
9038 if (proto_perl->Ipsig_pend) {
9039 Newz(0, PL_psig_pend, SIG_SIZE, int);
9042 PL_psig_pend = (int*)NULL;
9045 if (proto_perl->Ipsig_ptr) {
9046 Newz(0, PL_psig_ptr, SIG_SIZE, SV*);
9047 Newz(0, PL_psig_name, SIG_SIZE, SV*);
9048 for (i = 1; i < SIG_SIZE; i++) {
9049 PL_psig_ptr[i] = sv_dup_inc(proto_perl->Ipsig_ptr[i]);
9050 PL_psig_name[i] = sv_dup_inc(proto_perl->Ipsig_name[i]);
9054 PL_psig_ptr = (SV**)NULL;
9055 PL_psig_name = (SV**)NULL;
9058 /* thrdvar.h stuff */
9060 if (flags & CLONEf_COPY_STACKS) {
9061 /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
9062 PL_tmps_ix = proto_perl->Ttmps_ix;
9063 PL_tmps_max = proto_perl->Ttmps_max;
9064 PL_tmps_floor = proto_perl->Ttmps_floor;
9065 Newz(50, PL_tmps_stack, PL_tmps_max, SV*);
9067 while (i <= PL_tmps_ix) {
9068 PL_tmps_stack[i] = sv_dup_inc(proto_perl->Ttmps_stack[i]);
9072 /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
9073 i = proto_perl->Tmarkstack_max - proto_perl->Tmarkstack;
9074 Newz(54, PL_markstack, i, I32);
9075 PL_markstack_max = PL_markstack + (proto_perl->Tmarkstack_max
9076 - proto_perl->Tmarkstack);
9077 PL_markstack_ptr = PL_markstack + (proto_perl->Tmarkstack_ptr
9078 - proto_perl->Tmarkstack);
9079 Copy(proto_perl->Tmarkstack, PL_markstack,
9080 PL_markstack_ptr - PL_markstack + 1, I32);
9082 /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
9083 * NOTE: unlike the others! */
9084 PL_scopestack_ix = proto_perl->Tscopestack_ix;
9085 PL_scopestack_max = proto_perl->Tscopestack_max;
9086 Newz(54, PL_scopestack, PL_scopestack_max, I32);
9087 Copy(proto_perl->Tscopestack, PL_scopestack, PL_scopestack_ix, I32);
9089 /* next push_return() sets PL_retstack[PL_retstack_ix]
9090 * NOTE: unlike the others! */
9091 PL_retstack_ix = proto_perl->Tretstack_ix;
9092 PL_retstack_max = proto_perl->Tretstack_max;
9093 Newz(54, PL_retstack, PL_retstack_max, OP*);
9094 Copy(proto_perl->Tretstack, PL_retstack, PL_retstack_ix, I32);
9096 /* NOTE: si_dup() looks at PL_markstack */
9097 PL_curstackinfo = si_dup(proto_perl->Tcurstackinfo);
9099 /* PL_curstack = PL_curstackinfo->si_stack; */
9100 PL_curstack = av_dup(proto_perl->Tcurstack);
9101 PL_mainstack = av_dup(proto_perl->Tmainstack);
9103 /* next PUSHs() etc. set *(PL_stack_sp+1) */
9104 PL_stack_base = AvARRAY(PL_curstack);
9105 PL_stack_sp = PL_stack_base + (proto_perl->Tstack_sp
9106 - proto_perl->Tstack_base);
9107 PL_stack_max = PL_stack_base + AvMAX(PL_curstack);
9109 /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
9110 * NOTE: unlike the others! */
9111 PL_savestack_ix = proto_perl->Tsavestack_ix;
9112 PL_savestack_max = proto_perl->Tsavestack_max;
9113 /*Newz(54, PL_savestack, PL_savestack_max, ANY);*/
9114 PL_savestack = ss_dup(proto_perl);
9118 ENTER; /* perl_destruct() wants to LEAVE; */
9121 PL_start_env = proto_perl->Tstart_env; /* XXXXXX */
9122 PL_top_env = &PL_start_env;
9124 PL_op = proto_perl->Top;
9127 PL_Xpv = (XPV*)NULL;
9128 PL_na = proto_perl->Tna;
9130 PL_statbuf = proto_perl->Tstatbuf;
9131 PL_statcache = proto_perl->Tstatcache;
9132 PL_statgv = gv_dup(proto_perl->Tstatgv);
9133 PL_statname = sv_dup_inc(proto_perl->Tstatname);
9135 PL_timesbuf = proto_perl->Ttimesbuf;
9138 PL_tainted = proto_perl->Ttainted;
9139 PL_curpm = proto_perl->Tcurpm; /* XXX No PMOP ref count */
9140 PL_nrs = sv_dup_inc(proto_perl->Tnrs);
9141 PL_rs = sv_dup_inc(proto_perl->Trs);
9142 PL_last_in_gv = gv_dup(proto_perl->Tlast_in_gv);
9143 PL_ofs_sv = sv_dup_inc(proto_perl->Tofs_sv);
9144 PL_defoutgv = gv_dup_inc(proto_perl->Tdefoutgv);
9145 PL_chopset = proto_perl->Tchopset; /* XXX never deallocated */
9146 PL_toptarget = sv_dup_inc(proto_perl->Ttoptarget);
9147 PL_bodytarget = sv_dup_inc(proto_perl->Tbodytarget);
9148 PL_formtarget = sv_dup(proto_perl->Tformtarget);
9150 PL_restartop = proto_perl->Trestartop;
9151 PL_in_eval = proto_perl->Tin_eval;
9152 PL_delaymagic = proto_perl->Tdelaymagic;
9153 PL_dirty = proto_perl->Tdirty;
9154 PL_localizing = proto_perl->Tlocalizing;
9156 #ifdef PERL_FLEXIBLE_EXCEPTIONS
9157 PL_protect = proto_perl->Tprotect;
9159 PL_errors = sv_dup_inc(proto_perl->Terrors);
9160 PL_av_fetch_sv = Nullsv;
9161 PL_hv_fetch_sv = Nullsv;
9162 Zero(&PL_hv_fetch_ent_mh, 1, HE); /* XXX */
9163 PL_modcount = proto_perl->Tmodcount;
9164 PL_lastgotoprobe = Nullop;
9165 PL_dumpindent = proto_perl->Tdumpindent;
9167 PL_sortcop = (OP*)any_dup(proto_perl->Tsortcop, proto_perl);
9168 PL_sortstash = hv_dup(proto_perl->Tsortstash);
9169 PL_firstgv = gv_dup(proto_perl->Tfirstgv);
9170 PL_secondgv = gv_dup(proto_perl->Tsecondgv);
9171 PL_sortcxix = proto_perl->Tsortcxix;
9172 PL_efloatbuf = Nullch; /* reinits on demand */
9173 PL_efloatsize = 0; /* reinits on demand */
9177 PL_screamfirst = NULL;
9178 PL_screamnext = NULL;
9179 PL_maxscream = -1; /* reinits on demand */
9180 PL_lastscream = Nullsv;
9182 PL_watchaddr = NULL;
9183 PL_watchok = Nullch;
9185 PL_regdummy = proto_perl->Tregdummy;
9186 PL_regcomp_parse = Nullch;
9187 PL_regxend = Nullch;
9188 PL_regcode = (regnode*)NULL;
9191 PL_regprecomp = Nullch;
9196 PL_seen_zerolen = 0;
9198 PL_regcomp_rx = (regexp*)NULL;
9200 PL_colorset = 0; /* reinits PL_colors[] */
9201 /*PL_colors[6] = {0,0,0,0,0,0};*/
9202 PL_reg_whilem_seen = 0;
9203 PL_reginput = Nullch;
9206 PL_regstartp = (I32*)NULL;
9207 PL_regendp = (I32*)NULL;
9208 PL_reglastparen = (U32*)NULL;
9209 PL_regtill = Nullch;
9211 PL_reg_start_tmp = (char**)NULL;
9212 PL_reg_start_tmpl = 0;
9213 PL_regdata = (struct reg_data*)NULL;
9216 PL_reg_eval_set = 0;
9218 PL_regprogram = (regnode*)NULL;
9220 PL_regcc = (CURCUR*)NULL;
9221 PL_reg_call_cc = (struct re_cc_state*)NULL;
9222 PL_reg_re = (regexp*)NULL;
9223 PL_reg_ganch = Nullch;
9225 PL_reg_magic = (MAGIC*)NULL;
9227 PL_reg_oldcurpm = (PMOP*)NULL;
9228 PL_reg_curpm = (PMOP*)NULL;
9229 PL_reg_oldsaved = Nullch;
9230 PL_reg_oldsavedlen = 0;
9232 PL_reg_leftiter = 0;
9233 PL_reg_poscache = Nullch;
9234 PL_reg_poscache_size= 0;
9236 /* RE engine - function pointers */
9237 PL_regcompp = proto_perl->Tregcompp;
9238 PL_regexecp = proto_perl->Tregexecp;
9239 PL_regint_start = proto_perl->Tregint_start;
9240 PL_regint_string = proto_perl->Tregint_string;
9241 PL_regfree = proto_perl->Tregfree;
9243 PL_reginterp_cnt = 0;
9244 PL_reg_starttry = 0;
9246 if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
9247 ptr_table_free(PL_ptr_table);
9248 PL_ptr_table = NULL;
9252 return (PerlInterpreter*)pPerl;
9258 #else /* !USE_ITHREADS */
9264 #endif /* USE_ITHREADS */
9267 do_report_used(pTHXo_ SV *sv)
9269 if (SvTYPE(sv) != SVTYPEMASK) {
9270 PerlIO_printf(Perl_debug_log, "****\n");
9276 do_clean_objs(pTHXo_ SV *sv)
9280 if (SvROK(sv) && SvOBJECT(rv = SvRV(sv))) {
9281 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(sv));)
9282 if (SvWEAKREF(sv)) {
9293 /* XXX Might want to check arrays, etc. */
9296 #ifndef DISABLE_DESTRUCTOR_KLUDGE
9298 do_clean_named_objs(pTHXo_ SV *sv)
9300 if (SvTYPE(sv) == SVt_PVGV && GvGP(sv)) {
9301 if ( SvOBJECT(GvSV(sv)) ||
9302 (GvAV(sv) && SvOBJECT(GvAV(sv))) ||
9303 (GvHV(sv) && SvOBJECT(GvHV(sv))) ||
9304 (GvIO(sv) && SvOBJECT(GvIO(sv))) ||
9305 (GvCV(sv) && SvOBJECT(GvCV(sv))) )
9307 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning named glob object:\n "), sv_dump(sv));)
9315 do_clean_all(pTHXo_ SV *sv)
9317 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) );)
9318 SvFLAGS(sv) |= SVf_BREAK;