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 sv_utf8_downgrade(sv,0);
2888 return SvPV(sv,*lp);
2892 Perl_sv_2pvutf8_nolen(pTHX_ register SV *sv)
2895 return sv_2pvutf8(sv, &n_a);
2899 Perl_sv_2pvutf8(pTHX_ register SV *sv, STRLEN *lp)
2901 sv_utf8_upgrade(sv);
2902 return SvPV(sv,*lp);
2905 /* This function is only called on magical items */
2907 Perl_sv_2bool(pTHX_ register SV *sv)
2916 if (SvAMAGIC(sv) && (tmpsv=AMG_CALLun(sv,bool_)) &&
2917 (SvRV(tmpsv) != SvRV(sv)))
2918 return SvTRUE(tmpsv);
2919 return SvRV(sv) != 0;
2922 register XPV* Xpvtmp;
2923 if ((Xpvtmp = (XPV*)SvANY(sv)) &&
2924 (*Xpvtmp->xpv_pv > '0' ||
2925 Xpvtmp->xpv_cur > 1 ||
2926 (Xpvtmp->xpv_cur && *Xpvtmp->xpv_pv != '0')))
2933 return SvIVX(sv) != 0;
2936 return SvNVX(sv) != 0.0;
2944 =for apidoc sv_utf8_upgrade
2946 Convert the PV of an SV to its UTF8-encoded form.
2947 Forces the SV to string form it it is not already.
2948 Always sets the SvUTF8 flag to avoid future validity checks even
2949 if all the bytes have hibit clear.
2955 Perl_sv_utf8_upgrade(pTHX_ register SV *sv)
2964 (void) SvPV_nolen(sv);
2969 /* This function could be much more efficient if we had a FLAG in SVs
2970 * to signal if there are any hibit chars in the PV.
2971 * Given that there isn't make loop fast as possible
2977 if ((hibit = UTF8_IS_CONTINUED(*t++)))
2984 if (SvREADONLY(sv) && SvFAKE(sv)) {
2985 sv_force_normal(sv);
2988 len = SvCUR(sv) + 1; /* Plus the \0 */
2989 SvPVX(sv) = (char*)bytes_to_utf8((U8*)s, &len);
2990 SvCUR(sv) = len - 1;
2992 Safefree(s); /* No longer using what was there before. */
2993 SvLEN(sv) = len; /* No longer know the real size. */
2995 /* Mark as UTF-8 even if no hibit - saves scanning loop */
3001 =for apidoc sv_utf8_downgrade
3003 Attempt to convert the PV of an SV from UTF8-encoded to byte encoding.
3004 This may not be possible if the PV contains non-byte encoding characters;
3005 if this is the case, either returns false or, if C<fail_ok> is not
3012 Perl_sv_utf8_downgrade(pTHX_ register SV* sv, bool fail_ok)
3014 if (SvPOK(sv) && SvUTF8(sv)) {
3019 if (SvREADONLY(sv) && SvFAKE(sv))
3020 sv_force_normal(sv);
3022 if (!utf8_to_bytes((U8*)s, &len)) {
3027 Perl_croak(aTHX_ "Wide character in %s",
3028 PL_op_desc[PL_op->op_type]);
3030 Perl_croak(aTHX_ "Wide character");
3042 =for apidoc sv_utf8_encode
3044 Convert the PV of an SV to UTF8-encoded, but then turn off the C<SvUTF8>
3045 flag so that it looks like octets again. Used as a building block
3046 for encode_utf8 in Encode.xs
3052 Perl_sv_utf8_encode(pTHX_ register SV *sv)
3054 (void) sv_utf8_upgrade(sv);
3059 =for apidoc sv_utf8_decode
3061 Convert the octets in the PV from UTF-8 to chars. Scan for validity and then
3062 turn of SvUTF8 if needed so that we see characters. Used as a building block
3063 for decode_utf8 in Encode.xs
3071 Perl_sv_utf8_decode(pTHX_ register SV *sv)
3077 /* The octets may have got themselves encoded - get them back as bytes */
3078 if (!sv_utf8_downgrade(sv, TRUE))
3081 /* it is actually just a matter of turning the utf8 flag on, but
3082 * we want to make sure everything inside is valid utf8 first.
3085 if (!is_utf8_string((U8*)c, SvCUR(sv)+1))
3089 if (UTF8_IS_CONTINUED(*c++)) {
3099 /* Note: sv_setsv() should not be called with a source string that needs
3100 * to be reused, since it may destroy the source string if it is marked
3105 =for apidoc sv_setsv
3107 Copies the contents of the source SV C<ssv> into the destination SV C<dsv>.
3108 The source SV may be destroyed if it is mortal. Does not handle 'set'
3109 magic. See the macro forms C<SvSetSV>, C<SvSetSV_nosteal> and
3116 Perl_sv_setsv(pTHX_ SV *dstr, register SV *sstr)
3118 register U32 sflags;
3124 SV_CHECK_THINKFIRST(dstr);
3126 sstr = &PL_sv_undef;
3127 stype = SvTYPE(sstr);
3128 dtype = SvTYPE(dstr);
3132 /* There's a lot of redundancy below but we're going for speed here */
3137 if (dtype != SVt_PVGV) {
3138 (void)SvOK_off(dstr);
3146 sv_upgrade(dstr, SVt_IV);
3149 sv_upgrade(dstr, SVt_PVNV);
3153 sv_upgrade(dstr, SVt_PVIV);
3156 (void)SvIOK_only(dstr);
3157 SvIVX(dstr) = SvIVX(sstr);
3160 if (SvTAINTED(sstr))
3171 sv_upgrade(dstr, SVt_NV);
3176 sv_upgrade(dstr, SVt_PVNV);
3179 SvNVX(dstr) = SvNVX(sstr);
3180 (void)SvNOK_only(dstr);
3181 if (SvTAINTED(sstr))
3189 sv_upgrade(dstr, SVt_RV);
3190 else if (dtype == SVt_PVGV &&
3191 SvTYPE(SvRV(sstr)) == SVt_PVGV) {
3194 if (GvIMPORTED(dstr) != GVf_IMPORTED
3195 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3197 GvIMPORTED_on(dstr);
3208 sv_upgrade(dstr, SVt_PV);
3211 if (dtype < SVt_PVIV)
3212 sv_upgrade(dstr, SVt_PVIV);
3215 if (dtype < SVt_PVNV)
3216 sv_upgrade(dstr, SVt_PVNV);
3223 Perl_croak(aTHX_ "Bizarre copy of %s in %s", sv_reftype(sstr, 0),
3224 PL_op_name[PL_op->op_type]);
3226 Perl_croak(aTHX_ "Bizarre copy of %s", sv_reftype(sstr, 0));
3230 if (dtype <= SVt_PVGV) {
3232 if (dtype != SVt_PVGV) {
3233 char *name = GvNAME(sstr);
3234 STRLEN len = GvNAMELEN(sstr);
3235 sv_upgrade(dstr, SVt_PVGV);
3236 sv_magic(dstr, dstr, '*', Nullch, 0);
3237 GvSTASH(dstr) = (HV*)SvREFCNT_inc(GvSTASH(sstr));
3238 GvNAME(dstr) = savepvn(name, len);
3239 GvNAMELEN(dstr) = len;
3240 SvFAKE_on(dstr); /* can coerce to non-glob */
3242 /* ahem, death to those who redefine active sort subs */
3243 else if (PL_curstackinfo->si_type == PERLSI_SORT
3244 && GvCV(dstr) && PL_sortcop == CvSTART(GvCV(dstr)))
3245 Perl_croak(aTHX_ "Can't redefine active sort subroutine %s",
3248 #ifdef GV_SHARED_CHECK
3249 if (GvSHARED((GV*)dstr)) {
3250 Perl_croak(aTHX_ PL_no_modify);
3254 (void)SvOK_off(dstr);
3255 GvINTRO_off(dstr); /* one-shot flag */
3257 GvGP(dstr) = gp_ref(GvGP(sstr));
3258 if (SvTAINTED(sstr))
3260 if (GvIMPORTED(dstr) != GVf_IMPORTED
3261 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3263 GvIMPORTED_on(dstr);
3271 if (SvGMAGICAL(sstr)) {
3273 if (SvTYPE(sstr) != stype) {
3274 stype = SvTYPE(sstr);
3275 if (stype == SVt_PVGV && dtype <= SVt_PVGV)
3279 if (stype == SVt_PVLV)
3280 (void)SvUPGRADE(dstr, SVt_PVNV);
3282 (void)SvUPGRADE(dstr, stype);
3285 sflags = SvFLAGS(sstr);
3287 if (sflags & SVf_ROK) {
3288 if (dtype >= SVt_PV) {
3289 if (dtype == SVt_PVGV) {
3290 SV *sref = SvREFCNT_inc(SvRV(sstr));
3292 int intro = GvINTRO(dstr);
3294 #ifdef GV_SHARED_CHECK
3295 if (GvSHARED((GV*)dstr)) {
3296 Perl_croak(aTHX_ PL_no_modify);
3303 GvINTRO_off(dstr); /* one-shot flag */
3304 Newz(602,gp, 1, GP);
3305 GvGP(dstr) = gp_ref(gp);
3306 GvSV(dstr) = NEWSV(72,0);
3307 GvLINE(dstr) = CopLINE(PL_curcop);
3308 GvEGV(dstr) = (GV*)dstr;
3311 switch (SvTYPE(sref)) {
3314 SAVESPTR(GvAV(dstr));
3316 dref = (SV*)GvAV(dstr);
3317 GvAV(dstr) = (AV*)sref;
3318 if (!GvIMPORTED_AV(dstr)
3319 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3321 GvIMPORTED_AV_on(dstr);
3326 SAVESPTR(GvHV(dstr));
3328 dref = (SV*)GvHV(dstr);
3329 GvHV(dstr) = (HV*)sref;
3330 if (!GvIMPORTED_HV(dstr)
3331 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3333 GvIMPORTED_HV_on(dstr);
3338 if (GvCVGEN(dstr) && GvCV(dstr) != (CV*)sref) {
3339 SvREFCNT_dec(GvCV(dstr));
3340 GvCV(dstr) = Nullcv;
3341 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3342 PL_sub_generation++;
3344 SAVESPTR(GvCV(dstr));
3347 dref = (SV*)GvCV(dstr);
3348 if (GvCV(dstr) != (CV*)sref) {
3349 CV* cv = GvCV(dstr);
3351 if (!GvCVGEN((GV*)dstr) &&
3352 (CvROOT(cv) || CvXSUB(cv)))
3354 /* ahem, death to those who redefine
3355 * active sort subs */
3356 if (PL_curstackinfo->si_type == PERLSI_SORT &&
3357 PL_sortcop == CvSTART(cv))
3359 "Can't redefine active sort subroutine %s",
3360 GvENAME((GV*)dstr));
3361 /* Redefining a sub - warning is mandatory if
3362 it was a const and its value changed. */
3363 if (ckWARN(WARN_REDEFINE)
3365 && (!CvCONST((CV*)sref)
3366 || sv_cmp(cv_const_sv(cv),
3367 cv_const_sv((CV*)sref)))))
3369 Perl_warner(aTHX_ WARN_REDEFINE,
3371 ? "Constant subroutine %s redefined"
3372 : "Subroutine %s redefined",
3373 GvENAME((GV*)dstr));
3376 cv_ckproto(cv, (GV*)dstr,
3377 SvPOK(sref) ? SvPVX(sref) : Nullch);
3379 GvCV(dstr) = (CV*)sref;
3380 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3381 GvASSUMECV_on(dstr);
3382 PL_sub_generation++;
3384 if (!GvIMPORTED_CV(dstr)
3385 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3387 GvIMPORTED_CV_on(dstr);
3392 SAVESPTR(GvIOp(dstr));
3394 dref = (SV*)GvIOp(dstr);
3395 GvIOp(dstr) = (IO*)sref;
3399 SAVESPTR(GvFORM(dstr));
3401 dref = (SV*)GvFORM(dstr);
3402 GvFORM(dstr) = (CV*)sref;
3406 SAVESPTR(GvSV(dstr));
3408 dref = (SV*)GvSV(dstr);
3410 if (!GvIMPORTED_SV(dstr)
3411 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3413 GvIMPORTED_SV_on(dstr);
3421 if (SvTAINTED(sstr))
3426 (void)SvOOK_off(dstr); /* backoff */
3428 Safefree(SvPVX(dstr));
3429 SvLEN(dstr)=SvCUR(dstr)=0;
3432 (void)SvOK_off(dstr);
3433 SvRV(dstr) = SvREFCNT_inc(SvRV(sstr));
3435 if (sflags & SVp_NOK) {
3437 /* Only set the public OK flag if the source has public OK. */
3438 if (sflags & SVf_NOK)
3439 SvFLAGS(dstr) |= SVf_NOK;
3440 SvNVX(dstr) = SvNVX(sstr);
3442 if (sflags & SVp_IOK) {
3443 (void)SvIOKp_on(dstr);
3444 if (sflags & SVf_IOK)
3445 SvFLAGS(dstr) |= SVf_IOK;
3446 if (sflags & SVf_IVisUV)
3448 SvIVX(dstr) = SvIVX(sstr);
3450 if (SvAMAGIC(sstr)) {
3454 else if (sflags & SVp_POK) {
3457 * Check to see if we can just swipe the string. If so, it's a
3458 * possible small lose on short strings, but a big win on long ones.
3459 * It might even be a win on short strings if SvPVX(dstr)
3460 * has to be allocated and SvPVX(sstr) has to be freed.
3463 if (SvTEMP(sstr) && /* slated for free anyway? */
3464 SvREFCNT(sstr) == 1 && /* and no other references to it? */
3465 !(sflags & SVf_OOK) && /* and not involved in OOK hack? */
3466 SvLEN(sstr) && /* and really is a string */
3467 !(PL_op && PL_op->op_type == OP_AASSIGN)) /* and won't be needed again, potentially */
3469 if (SvPVX(dstr)) { /* we know that dtype >= SVt_PV */
3471 SvFLAGS(dstr) &= ~SVf_OOK;
3472 Safefree(SvPVX(dstr) - SvIVX(dstr));
3474 else if (SvLEN(dstr))
3475 Safefree(SvPVX(dstr));
3477 (void)SvPOK_only(dstr);
3478 SvPV_set(dstr, SvPVX(sstr));
3479 SvLEN_set(dstr, SvLEN(sstr));
3480 SvCUR_set(dstr, SvCUR(sstr));
3483 (void)SvOK_off(sstr); /* NOTE: nukes most SvFLAGS on sstr */
3484 SvPV_set(sstr, Nullch);
3489 else { /* have to copy actual string */
3490 STRLEN len = SvCUR(sstr);
3492 SvGROW(dstr, len + 1); /* inlined from sv_setpvn */
3493 Move(SvPVX(sstr),SvPVX(dstr),len,char);
3494 SvCUR_set(dstr, len);
3495 *SvEND(dstr) = '\0';
3496 (void)SvPOK_only(dstr);
3498 if (sflags & SVf_UTF8)
3501 if (sflags & SVp_NOK) {
3503 if (sflags & SVf_NOK)
3504 SvFLAGS(dstr) |= SVf_NOK;
3505 SvNVX(dstr) = SvNVX(sstr);
3507 if (sflags & SVp_IOK) {
3508 (void)SvIOKp_on(dstr);
3509 if (sflags & SVf_IOK)
3510 SvFLAGS(dstr) |= SVf_IOK;
3511 if (sflags & SVf_IVisUV)
3513 SvIVX(dstr) = SvIVX(sstr);
3516 else if (sflags & SVp_IOK) {
3517 if (sflags & SVf_IOK)
3518 (void)SvIOK_only(dstr);
3520 (void)SvOK_off(dstr);
3521 (void)SvIOKp_on(dstr);
3523 /* XXXX Do we want to set IsUV for IV(ROK)? Be extra safe... */
3524 if (sflags & SVf_IVisUV)
3526 SvIVX(dstr) = SvIVX(sstr);
3527 if (sflags & SVp_NOK) {
3528 if (sflags & SVf_NOK)
3529 (void)SvNOK_on(dstr);
3531 (void)SvNOKp_on(dstr);
3532 SvNVX(dstr) = SvNVX(sstr);
3535 else if (sflags & SVp_NOK) {
3536 if (sflags & SVf_NOK)
3537 (void)SvNOK_only(dstr);
3539 (void)SvOK_off(dstr);
3542 SvNVX(dstr) = SvNVX(sstr);
3545 if (dtype == SVt_PVGV) {
3546 if (ckWARN(WARN_MISC))
3547 Perl_warner(aTHX_ WARN_MISC, "Undefined value assigned to typeglob");
3550 (void)SvOK_off(dstr);
3552 if (SvTAINTED(sstr))
3557 =for apidoc sv_setsv_mg
3559 Like C<sv_setsv>, but also handles 'set' magic.
3565 Perl_sv_setsv_mg(pTHX_ SV *dstr, register SV *sstr)
3567 sv_setsv(dstr,sstr);
3572 =for apidoc sv_setpvn
3574 Copies a string into an SV. The C<len> parameter indicates the number of
3575 bytes to be copied. Does not handle 'set' magic. See C<sv_setpvn_mg>.
3581 Perl_sv_setpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3583 register char *dptr;
3585 SV_CHECK_THINKFIRST(sv);
3591 /* len is STRLEN which is unsigned, need to copy to signed */
3595 (void)SvUPGRADE(sv, SVt_PV);
3597 SvGROW(sv, len + 1);
3599 Move(ptr,dptr,len,char);
3602 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3607 =for apidoc sv_setpvn_mg
3609 Like C<sv_setpvn>, but also handles 'set' magic.
3615 Perl_sv_setpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3617 sv_setpvn(sv,ptr,len);
3622 =for apidoc sv_setpv
3624 Copies a string into an SV. The string must be null-terminated. Does not
3625 handle 'set' magic. See C<sv_setpv_mg>.
3631 Perl_sv_setpv(pTHX_ register SV *sv, register const char *ptr)
3633 register STRLEN len;
3635 SV_CHECK_THINKFIRST(sv);
3641 (void)SvUPGRADE(sv, SVt_PV);
3643 SvGROW(sv, len + 1);
3644 Move(ptr,SvPVX(sv),len+1,char);
3646 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3651 =for apidoc sv_setpv_mg
3653 Like C<sv_setpv>, but also handles 'set' magic.
3659 Perl_sv_setpv_mg(pTHX_ register SV *sv, register const char *ptr)
3666 =for apidoc sv_usepvn
3668 Tells an SV to use C<ptr> to find its string value. Normally the string is
3669 stored inside the SV but sv_usepvn allows the SV to use an outside string.
3670 The C<ptr> should point to memory that was allocated by C<malloc>. The
3671 string length, C<len>, must be supplied. This function will realloc the
3672 memory pointed to by C<ptr>, so that pointer should not be freed or used by
3673 the programmer after giving it to sv_usepvn. Does not handle 'set' magic.
3674 See C<sv_usepvn_mg>.
3680 Perl_sv_usepvn(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
3682 SV_CHECK_THINKFIRST(sv);
3683 (void)SvUPGRADE(sv, SVt_PV);
3688 (void)SvOOK_off(sv);
3689 if (SvPVX(sv) && SvLEN(sv))
3690 Safefree(SvPVX(sv));
3691 Renew(ptr, len+1, char);
3694 SvLEN_set(sv, len+1);
3696 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3701 =for apidoc sv_usepvn_mg
3703 Like C<sv_usepvn>, but also handles 'set' magic.
3709 Perl_sv_usepvn_mg(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
3711 sv_usepvn(sv,ptr,len);
3716 Perl_sv_force_normal_flags(pTHX_ register SV *sv, U32 flags)
3718 if (SvREADONLY(sv)) {
3720 char *pvx = SvPVX(sv);
3721 STRLEN len = SvCUR(sv);
3722 U32 hash = SvUVX(sv);
3723 SvGROW(sv, len + 1);
3724 Move(pvx,SvPVX(sv),len,char);
3728 unsharepvn(pvx,SvUTF8(sv)?-len:len,hash);
3730 else if (PL_curcop != &PL_compiling)
3731 Perl_croak(aTHX_ PL_no_modify);
3734 sv_unref_flags(sv, flags);
3735 else if (SvFAKE(sv) && SvTYPE(sv) == SVt_PVGV)
3740 Perl_sv_force_normal(pTHX_ register SV *sv)
3742 sv_force_normal_flags(sv, 0);
3748 Efficient removal of characters from the beginning of the string buffer.
3749 SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
3750 the string buffer. The C<ptr> becomes the first character of the adjusted
3757 Perl_sv_chop(pTHX_ register SV *sv, register char *ptr) /* like set but assuming ptr is in sv */
3761 register STRLEN delta;
3763 if (!ptr || !SvPOKp(sv))
3765 SV_CHECK_THINKFIRST(sv);
3766 if (SvTYPE(sv) < SVt_PVIV)
3767 sv_upgrade(sv,SVt_PVIV);
3770 if (!SvLEN(sv)) { /* make copy of shared string */
3771 char *pvx = SvPVX(sv);
3772 STRLEN len = SvCUR(sv);
3773 SvGROW(sv, len + 1);
3774 Move(pvx,SvPVX(sv),len,char);
3778 SvFLAGS(sv) |= SVf_OOK;
3780 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVp_IOK|SVp_NOK|SVf_IVisUV);
3781 delta = ptr - SvPVX(sv);
3789 =for apidoc sv_catpvn
3791 Concatenates the string onto the end of the string which is in the SV. The
3792 C<len> indicates number of bytes to copy. Handles 'get' magic, but not
3793 'set' magic. See C<sv_catpvn_mg>.
3799 Perl_sv_catpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3804 junk = SvPV_force(sv, tlen);
3805 SvGROW(sv, tlen + len + 1);
3808 Move(ptr,SvPVX(sv)+tlen,len,char);
3811 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3816 =for apidoc sv_catpvn_mg
3818 Like C<sv_catpvn>, but also handles 'set' magic.
3824 Perl_sv_catpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3826 sv_catpvn(sv,ptr,len);
3831 =for apidoc sv_catsv
3833 Concatenates the string from SV C<ssv> onto the end of the string in
3834 SV C<dsv>. Modifies C<dsv> but not C<ssv>. Handles 'get' magic, but
3835 not 'set' magic. See C<sv_catsv_mg>.
3840 Perl_sv_catsv(pTHX_ SV *dsv, register SV *ssv)
3846 if ((spv = SvPV(ssv, slen))) {
3847 bool dutf8 = DO_UTF8(dsv);
3848 bool sutf8 = DO_UTF8(ssv);
3851 sv_catpvn(dsv,spv,slen);
3854 /* Not modifying source SV, so taking a temporary copy. */
3855 SV* csv = sv_2mortal(newSVsv(ssv));
3859 sv_utf8_upgrade(csv);
3860 cpv = SvPV(csv,clen);
3861 sv_catpvn(dsv,cpv,clen);
3864 sv_utf8_upgrade(dsv);
3865 sv_catpvn(dsv,spv,slen);
3866 SvUTF8_on(dsv); /* If dsv has no wide characters. */
3873 =for apidoc sv_catsv_mg
3875 Like C<sv_catsv>, but also handles 'set' magic.
3881 Perl_sv_catsv_mg(pTHX_ SV *dsv, register SV *ssv)
3888 =for apidoc sv_catpv
3890 Concatenates the string onto the end of the string which is in the SV.
3891 Handles 'get' magic, but not 'set' magic. See C<sv_catpv_mg>.
3897 Perl_sv_catpv(pTHX_ register SV *sv, register const char *ptr)
3899 register STRLEN len;
3905 junk = SvPV_force(sv, tlen);
3907 SvGROW(sv, tlen + len + 1);
3910 Move(ptr,SvPVX(sv)+tlen,len+1,char);
3912 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3917 =for apidoc sv_catpv_mg
3919 Like C<sv_catpv>, but also handles 'set' magic.
3925 Perl_sv_catpv_mg(pTHX_ register SV *sv, register const char *ptr)
3932 Perl_newSV(pTHX_ STRLEN len)
3938 sv_upgrade(sv, SVt_PV);
3939 SvGROW(sv, len + 1);
3944 /* name is assumed to contain an SV* if (name && namelen == HEf_SVKEY) */
3947 =for apidoc sv_magic
3949 Adds magic to an SV.
3955 Perl_sv_magic(pTHX_ register SV *sv, SV *obj, int how, const char *name, I32 namlen)
3959 if (SvREADONLY(sv)) {
3960 if (PL_curcop != &PL_compiling && !strchr("gBf", how))
3961 Perl_croak(aTHX_ PL_no_modify);
3963 if (SvMAGICAL(sv) || (how == 't' && SvTYPE(sv) >= SVt_PVMG)) {
3964 if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
3971 (void)SvUPGRADE(sv, SVt_PVMG);
3973 Newz(702,mg, 1, MAGIC);
3974 mg->mg_moremagic = SvMAGIC(sv);
3977 /* Some magic sontains a reference loop, where the sv and object refer to
3978 each other. To prevent a avoid a reference loop that would prevent such
3979 objects being freed, we look for such loops and if we find one we avoid
3980 incrementing the object refcount. */
3981 if (!obj || obj == sv || how == '#' || how == 'r' ||
3982 (SvTYPE(obj) == SVt_PVGV &&
3983 (GvSV(obj) == sv || GvHV(obj) == (HV*)sv || GvAV(obj) == (AV*)sv ||
3984 GvCV(obj) == (CV*)sv || GvIOp(obj) == (IO*)sv ||
3985 GvFORM(obj) == (CV*)sv)))
3990 mg->mg_obj = SvREFCNT_inc(obj);
3991 mg->mg_flags |= MGf_REFCOUNTED;
3994 mg->mg_len = namlen;
3997 mg->mg_ptr = savepvn(name, namlen);
3998 else if (namlen == HEf_SVKEY)
3999 mg->mg_ptr = (char*)SvREFCNT_inc((SV*)name);
4004 mg->mg_virtual = &PL_vtbl_sv;
4007 mg->mg_virtual = &PL_vtbl_amagic;
4010 mg->mg_virtual = &PL_vtbl_amagicelem;
4013 mg->mg_virtual = &PL_vtbl_ovrld;
4016 mg->mg_virtual = &PL_vtbl_bm;
4019 mg->mg_virtual = &PL_vtbl_regdata;
4022 mg->mg_virtual = &PL_vtbl_regdatum;
4025 mg->mg_virtual = &PL_vtbl_env;
4028 mg->mg_virtual = &PL_vtbl_fm;
4031 mg->mg_virtual = &PL_vtbl_envelem;
4034 mg->mg_virtual = &PL_vtbl_mglob;
4037 mg->mg_virtual = &PL_vtbl_isa;
4040 mg->mg_virtual = &PL_vtbl_isaelem;
4043 mg->mg_virtual = &PL_vtbl_nkeys;
4050 mg->mg_virtual = &PL_vtbl_dbline;
4054 mg->mg_virtual = &PL_vtbl_mutex;
4056 #endif /* USE_THREADS */
4057 #ifdef USE_LOCALE_COLLATE
4059 mg->mg_virtual = &PL_vtbl_collxfrm;
4061 #endif /* USE_LOCALE_COLLATE */
4063 mg->mg_virtual = &PL_vtbl_pack;
4067 mg->mg_virtual = &PL_vtbl_packelem;
4070 mg->mg_virtual = &PL_vtbl_regexp;
4073 mg->mg_virtual = &PL_vtbl_sig;
4076 mg->mg_virtual = &PL_vtbl_sigelem;
4079 mg->mg_virtual = &PL_vtbl_taint;
4083 mg->mg_virtual = &PL_vtbl_uvar;
4086 mg->mg_virtual = &PL_vtbl_vec;
4089 mg->mg_virtual = &PL_vtbl_substr;
4092 mg->mg_virtual = &PL_vtbl_defelem;
4095 mg->mg_virtual = &PL_vtbl_glob;
4098 mg->mg_virtual = &PL_vtbl_arylen;
4101 mg->mg_virtual = &PL_vtbl_pos;
4104 mg->mg_virtual = &PL_vtbl_backref;
4106 case '~': /* Reserved for use by extensions not perl internals. */
4107 /* Useful for attaching extension internal data to perl vars. */
4108 /* Note that multiple extensions may clash if magical scalars */
4109 /* etc holding private data from one are passed to another. */
4113 Perl_croak(aTHX_ "Don't know how to handle magic of type '%c'", how);
4117 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
4121 =for apidoc sv_unmagic
4123 Removes magic from an SV.
4129 Perl_sv_unmagic(pTHX_ SV *sv, int type)
4133 if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
4136 for (mg = *mgp; mg; mg = *mgp) {
4137 if (mg->mg_type == type) {
4138 MGVTBL* vtbl = mg->mg_virtual;
4139 *mgp = mg->mg_moremagic;
4140 if (vtbl && vtbl->svt_free)
4141 CALL_FPTR(vtbl->svt_free)(aTHX_ sv, mg);
4142 if (mg->mg_ptr && mg->mg_type != 'g') {
4143 if (mg->mg_len >= 0)
4144 Safefree(mg->mg_ptr);
4145 else if (mg->mg_len == HEf_SVKEY)
4146 SvREFCNT_dec((SV*)mg->mg_ptr);
4148 if (mg->mg_flags & MGf_REFCOUNTED)
4149 SvREFCNT_dec(mg->mg_obj);
4153 mgp = &mg->mg_moremagic;
4157 SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
4164 =for apidoc sv_rvweaken
4172 Perl_sv_rvweaken(pTHX_ SV *sv)
4175 if (!SvOK(sv)) /* let undefs pass */
4178 Perl_croak(aTHX_ "Can't weaken a nonreference");
4179 else if (SvWEAKREF(sv)) {
4180 if (ckWARN(WARN_MISC))
4181 Perl_warner(aTHX_ WARN_MISC, "Reference is already weak");
4185 sv_add_backref(tsv, sv);
4192 S_sv_add_backref(pTHX_ SV *tsv, SV *sv)
4196 if (SvMAGICAL(tsv) && (mg = mg_find(tsv, '<')))
4197 av = (AV*)mg->mg_obj;
4200 sv_magic(tsv, (SV*)av, '<', NULL, 0);
4201 SvREFCNT_dec(av); /* for sv_magic */
4207 S_sv_del_backref(pTHX_ SV *sv)
4214 if (!SvMAGICAL(tsv) || !(mg = mg_find(tsv, '<')))
4215 Perl_croak(aTHX_ "panic: del_backref");
4216 av = (AV *)mg->mg_obj;
4221 svp[i] = &PL_sv_undef; /* XXX */
4228 =for apidoc sv_insert
4230 Inserts a string at the specified offset/length within the SV. Similar to
4231 the Perl substr() function.
4237 Perl_sv_insert(pTHX_ SV *bigstr, STRLEN offset, STRLEN len, char *little, STRLEN littlelen)
4241 register char *midend;
4242 register char *bigend;
4248 Perl_croak(aTHX_ "Can't modify non-existent substring");
4249 SvPV_force(bigstr, curlen);
4250 (void)SvPOK_only_UTF8(bigstr);
4251 if (offset + len > curlen) {
4252 SvGROW(bigstr, offset+len+1);
4253 Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
4254 SvCUR_set(bigstr, offset+len);
4258 i = littlelen - len;
4259 if (i > 0) { /* string might grow */
4260 big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
4261 mid = big + offset + len;
4262 midend = bigend = big + SvCUR(bigstr);
4265 while (midend > mid) /* shove everything down */
4266 *--bigend = *--midend;
4267 Move(little,big+offset,littlelen,char);
4273 Move(little,SvPVX(bigstr)+offset,len,char);
4278 big = SvPVX(bigstr);
4281 bigend = big + SvCUR(bigstr);
4283 if (midend > bigend)
4284 Perl_croak(aTHX_ "panic: sv_insert");
4286 if (mid - big > bigend - midend) { /* faster to shorten from end */
4288 Move(little, mid, littlelen,char);
4291 i = bigend - midend;
4293 Move(midend, mid, i,char);
4297 SvCUR_set(bigstr, mid - big);
4300 else if ((i = mid - big)) { /* faster from front */
4301 midend -= littlelen;
4303 sv_chop(bigstr,midend-i);
4308 Move(little, mid, littlelen,char);
4310 else if (littlelen) {
4311 midend -= littlelen;
4312 sv_chop(bigstr,midend);
4313 Move(little,midend,littlelen,char);
4316 sv_chop(bigstr,midend);
4322 =for apidoc sv_replace
4324 Make the first argument a copy of the second, then delete the original.
4330 Perl_sv_replace(pTHX_ register SV *sv, register SV *nsv)
4332 U32 refcnt = SvREFCNT(sv);
4333 SV_CHECK_THINKFIRST(sv);
4334 if (SvREFCNT(nsv) != 1 && ckWARN_d(WARN_INTERNAL))
4335 Perl_warner(aTHX_ WARN_INTERNAL, "Reference miscount in sv_replace()");
4336 if (SvMAGICAL(sv)) {
4340 sv_upgrade(nsv, SVt_PVMG);
4341 SvMAGIC(nsv) = SvMAGIC(sv);
4342 SvFLAGS(nsv) |= SvMAGICAL(sv);
4348 assert(!SvREFCNT(sv));
4349 StructCopy(nsv,sv,SV);
4350 SvREFCNT(sv) = refcnt;
4351 SvFLAGS(nsv) |= SVTYPEMASK; /* Mark as freed */
4356 =for apidoc sv_clear
4358 Clear an SV, making it empty. Does not free the memory used by the SV
4365 Perl_sv_clear(pTHX_ register SV *sv)
4369 assert(SvREFCNT(sv) == 0);
4372 if (PL_defstash) { /* Still have a symbol table? */
4377 Zero(&tmpref, 1, SV);
4378 sv_upgrade(&tmpref, SVt_RV);
4380 SvREADONLY_on(&tmpref); /* DESTROY() could be naughty */
4381 SvREFCNT(&tmpref) = 1;
4384 stash = SvSTASH(sv);
4385 destructor = StashHANDLER(stash,DESTROY);
4388 PUSHSTACKi(PERLSI_DESTROY);
4389 SvRV(&tmpref) = SvREFCNT_inc(sv);
4394 call_sv((SV*)destructor, G_DISCARD|G_EVAL|G_KEEPERR);
4400 } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
4402 del_XRV(SvANY(&tmpref));
4405 if (PL_in_clean_objs)
4406 Perl_croak(aTHX_ "DESTROY created new reference to dead object '%s'",
4408 /* DESTROY gave object new lease on life */
4414 SvREFCNT_dec(SvSTASH(sv)); /* possibly of changed persuasion */
4415 SvOBJECT_off(sv); /* Curse the object. */
4416 if (SvTYPE(sv) != SVt_PVIO)
4417 --PL_sv_objcount; /* XXX Might want something more general */
4420 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv))
4423 switch (SvTYPE(sv)) {
4426 IoIFP(sv) != PerlIO_stdin() &&
4427 IoIFP(sv) != PerlIO_stdout() &&
4428 IoIFP(sv) != PerlIO_stderr())
4430 io_close((IO*)sv, FALSE);
4432 if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
4433 PerlDir_close(IoDIRP(sv));
4434 IoDIRP(sv) = (DIR*)NULL;
4435 Safefree(IoTOP_NAME(sv));
4436 Safefree(IoFMT_NAME(sv));
4437 Safefree(IoBOTTOM_NAME(sv));
4452 SvREFCNT_dec(LvTARG(sv));
4456 Safefree(GvNAME(sv));
4457 /* cannot decrease stash refcount yet, as we might recursively delete
4458 ourselves when the refcnt drops to zero. Delay SvREFCNT_dec
4459 of stash until current sv is completely gone.
4460 -- JohnPC, 27 Mar 1998 */
4461 stash = GvSTASH(sv);
4467 (void)SvOOK_off(sv);
4475 SvREFCNT_dec(SvRV(sv));
4477 else if (SvPVX(sv) && SvLEN(sv))
4478 Safefree(SvPVX(sv));
4479 else if (SvPVX(sv) && SvREADONLY(sv) && SvFAKE(sv)) {
4480 unsharepvn(SvPVX(sv),SvUTF8(sv)?-SvCUR(sv):SvCUR(sv),SvUVX(sv));
4492 switch (SvTYPE(sv)) {
4508 del_XPVIV(SvANY(sv));
4511 del_XPVNV(SvANY(sv));
4514 del_XPVMG(SvANY(sv));
4517 del_XPVLV(SvANY(sv));
4520 del_XPVAV(SvANY(sv));
4523 del_XPVHV(SvANY(sv));
4526 del_XPVCV(SvANY(sv));
4529 del_XPVGV(SvANY(sv));
4530 /* code duplication for increased performance. */
4531 SvFLAGS(sv) &= SVf_BREAK;
4532 SvFLAGS(sv) |= SVTYPEMASK;
4533 /* decrease refcount of the stash that owns this GV, if any */
4535 SvREFCNT_dec(stash);
4536 return; /* not break, SvFLAGS reset already happened */
4538 del_XPVBM(SvANY(sv));
4541 del_XPVFM(SvANY(sv));
4544 del_XPVIO(SvANY(sv));
4547 SvFLAGS(sv) &= SVf_BREAK;
4548 SvFLAGS(sv) |= SVTYPEMASK;
4552 Perl_sv_newref(pTHX_ SV *sv)
4555 ATOMIC_INC(SvREFCNT(sv));
4562 Free the memory used by an SV.
4568 Perl_sv_free(pTHX_ SV *sv)
4570 int refcount_is_zero;
4574 if (SvREFCNT(sv) == 0) {
4575 if (SvFLAGS(sv) & SVf_BREAK)
4577 if (PL_in_clean_all) /* All is fair */
4579 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
4580 /* make sure SvREFCNT(sv)==0 happens very seldom */
4581 SvREFCNT(sv) = (~(U32)0)/2;
4584 if (ckWARN_d(WARN_INTERNAL))
4585 Perl_warner(aTHX_ WARN_INTERNAL, "Attempt to free unreferenced scalar");
4588 ATOMIC_DEC_AND_TEST(refcount_is_zero, SvREFCNT(sv));
4589 if (!refcount_is_zero)
4593 if (ckWARN_d(WARN_DEBUGGING))
4594 Perl_warner(aTHX_ WARN_DEBUGGING,
4595 "Attempt to free temp prematurely: SV 0x%"UVxf,
4600 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
4601 /* make sure SvREFCNT(sv)==0 happens very seldom */
4602 SvREFCNT(sv) = (~(U32)0)/2;
4613 Returns the length of the string in the SV. See also C<SvCUR>.
4619 Perl_sv_len(pTHX_ register SV *sv)
4628 len = mg_length(sv);
4630 junk = SvPV(sv, len);
4635 =for apidoc sv_len_utf8
4637 Returns the number of characters in the string in an SV, counting wide
4638 UTF8 bytes as a single character.
4644 Perl_sv_len_utf8(pTHX_ register SV *sv)
4650 return mg_length(sv);
4654 U8 *s = (U8*)SvPV(sv, len);
4656 return Perl_utf8_length(aTHX_ s, s + len);
4661 Perl_sv_pos_u2b(pTHX_ register SV *sv, I32* offsetp, I32* lenp)
4666 I32 uoffset = *offsetp;
4672 start = s = (U8*)SvPV(sv, len);
4674 while (s < send && uoffset--)
4678 *offsetp = s - start;
4682 while (s < send && ulen--)
4692 Perl_sv_pos_b2u(pTHX_ register SV *sv, I32* offsetp)
4701 s = (U8*)SvPV(sv, len);
4703 Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset");
4704 send = s + *offsetp;
4709 if (utf8_to_uv(s, UTF8SKIP(s), &n, 0)) {
4723 Returns a boolean indicating whether the strings in the two SVs are
4730 Perl_sv_eq(pTHX_ register SV *sv1, register SV *sv2)
4737 bool pv1tmp = FALSE;
4738 bool pv2tmp = FALSE;
4745 pv1 = SvPV(sv1, cur1);
4752 pv2 = SvPV(sv2, cur2);
4754 /* do not utf8ize the comparands as a side-effect */
4755 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTE) {
4756 bool is_utf8 = TRUE;
4758 if (PL_hints & HINT_UTF8_DISTINCT)
4762 char *pv = (char*)bytes_from_utf8((U8*)pv1, &cur1, &is_utf8);
4764 if ((pv1tmp = (pv != pv1)))
4768 char *pv = (char *)bytes_from_utf8((U8*)pv2, &cur2, &is_utf8);
4770 if ((pv2tmp = (pv != pv2)))
4776 eq = memEQ(pv1, pv2, cur1);
4789 Compares the strings in two SVs. Returns -1, 0, or 1 indicating whether the
4790 string in C<sv1> is less than, equal to, or greater than the string in
4797 Perl_sv_cmp(pTHX_ register SV *sv1, register SV *sv2)
4802 bool pv1tmp = FALSE;
4803 bool pv2tmp = FALSE;
4810 pv1 = SvPV(sv1, cur1);
4817 pv2 = SvPV(sv2, cur2);
4819 /* do not utf8ize the comparands as a side-effect */
4820 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTE) {
4821 if (PL_hints & HINT_UTF8_DISTINCT)
4822 return SvUTF8(sv1) ? 1 : -1;
4825 pv2 = (char*)bytes_to_utf8((U8*)pv2, &cur2);
4829 pv1 = (char*)bytes_to_utf8((U8*)pv1, &cur1);
4835 cmp = cur2 ? -1 : 0;
4839 I32 retval = memcmp((void*)pv1, (void*)pv2, cur1 < cur2 ? cur1 : cur2);
4842 cmp = retval < 0 ? -1 : 1;
4843 } else if (cur1 == cur2) {
4846 cmp = cur1 < cur2 ? -1 : 1;
4859 =for apidoc sv_cmp_locale
4861 Compares the strings in two SVs in a locale-aware manner. See
4868 Perl_sv_cmp_locale(pTHX_ register SV *sv1, register SV *sv2)
4870 #ifdef USE_LOCALE_COLLATE
4876 if (PL_collation_standard)
4880 pv1 = sv1 ? sv_collxfrm(sv1, &len1) : (char *) NULL;
4882 pv2 = sv2 ? sv_collxfrm(sv2, &len2) : (char *) NULL;
4884 if (!pv1 || !len1) {
4895 retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
4898 return retval < 0 ? -1 : 1;
4901 * When the result of collation is equality, that doesn't mean
4902 * that there are no differences -- some locales exclude some
4903 * characters from consideration. So to avoid false equalities,
4904 * we use the raw string as a tiebreaker.
4910 #endif /* USE_LOCALE_COLLATE */
4912 return sv_cmp(sv1, sv2);
4915 #ifdef USE_LOCALE_COLLATE
4917 * Any scalar variable may carry an 'o' magic that contains the
4918 * scalar data of the variable transformed to such a format that
4919 * a normal memory comparison can be used to compare the data
4920 * according to the locale settings.
4923 Perl_sv_collxfrm(pTHX_ SV *sv, STRLEN *nxp)
4927 mg = SvMAGICAL(sv) ? mg_find(sv, 'o') : (MAGIC *) NULL;
4928 if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
4933 Safefree(mg->mg_ptr);
4935 if ((xf = mem_collxfrm(s, len, &xlen))) {
4936 if (SvREADONLY(sv)) {
4939 return xf + sizeof(PL_collation_ix);
4942 sv_magic(sv, 0, 'o', 0, 0);
4943 mg = mg_find(sv, 'o');
4956 if (mg && mg->mg_ptr) {
4958 return mg->mg_ptr + sizeof(PL_collation_ix);
4966 #endif /* USE_LOCALE_COLLATE */
4971 Get a line from the filehandle and store it into the SV, optionally
4972 appending to the currently-stored string.
4978 Perl_sv_gets(pTHX_ register SV *sv, register PerlIO *fp, I32 append)
4982 register STDCHAR rslast;
4983 register STDCHAR *bp;
4987 SV_CHECK_THINKFIRST(sv);
4988 (void)SvUPGRADE(sv, SVt_PV);
4992 if (RsSNARF(PL_rs)) {
4996 else if (RsRECORD(PL_rs)) {
4997 I32 recsize, bytesread;
5000 /* Grab the size of the record we're getting */
5001 recsize = SvIV(SvRV(PL_rs));
5002 (void)SvPOK_only(sv); /* Validate pointer */
5003 buffer = SvGROW(sv, recsize + 1);
5006 /* VMS wants read instead of fread, because fread doesn't respect */
5007 /* RMS record boundaries. This is not necessarily a good thing to be */
5008 /* doing, but we've got no other real choice */
5009 bytesread = PerlLIO_read(PerlIO_fileno(fp), buffer, recsize);
5011 bytesread = PerlIO_read(fp, buffer, recsize);
5013 SvCUR_set(sv, bytesread);
5014 buffer[bytesread] = '\0';
5015 if (PerlIO_isutf8(fp))
5019 return(SvCUR(sv) ? SvPVX(sv) : Nullch);
5021 else if (RsPARA(PL_rs)) {
5026 /* Get $/ i.e. PL_rs into same encoding as stream wants */
5027 if (PerlIO_isutf8(fp)) {
5028 rsptr = SvPVutf8(PL_rs, rslen);
5031 if (SvUTF8(PL_rs)) {
5032 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
5033 Perl_croak(aTHX_ "Wide character in $/");
5036 rsptr = SvPV(PL_rs, rslen);
5040 rslast = rslen ? rsptr[rslen - 1] : '\0';
5042 if (RsPARA(PL_rs)) { /* have to do this both before and after */
5043 do { /* to make sure file boundaries work right */
5046 i = PerlIO_getc(fp);
5050 PerlIO_ungetc(fp,i);
5056 /* See if we know enough about I/O mechanism to cheat it ! */
5058 /* This used to be #ifdef test - it is made run-time test for ease
5059 of abstracting out stdio interface. One call should be cheap
5060 enough here - and may even be a macro allowing compile
5064 if (PerlIO_fast_gets(fp)) {
5067 * We're going to steal some values from the stdio struct
5068 * and put EVERYTHING in the innermost loop into registers.
5070 register STDCHAR *ptr;
5074 #if defined(VMS) && defined(PERLIO_IS_STDIO)
5075 /* An ungetc()d char is handled separately from the regular
5076 * buffer, so we getc() it back out and stuff it in the buffer.
5078 i = PerlIO_getc(fp);
5079 if (i == EOF) return 0;
5080 *(--((*fp)->_ptr)) = (unsigned char) i;
5084 /* Here is some breathtakingly efficient cheating */
5086 cnt = PerlIO_get_cnt(fp); /* get count into register */
5087 (void)SvPOK_only(sv); /* validate pointer */
5088 if (SvLEN(sv) - append <= cnt + 1) { /* make sure we have the room */
5089 if (cnt > 80 && SvLEN(sv) > append) {
5090 shortbuffered = cnt - SvLEN(sv) + append + 1;
5091 cnt -= shortbuffered;
5095 /* remember that cnt can be negative */
5096 SvGROW(sv, append + (cnt <= 0 ? 2 : (cnt + 1)));
5101 bp = (STDCHAR*)SvPVX(sv) + append; /* move these two too to registers */
5102 ptr = (STDCHAR*)PerlIO_get_ptr(fp);
5103 DEBUG_P(PerlIO_printf(Perl_debug_log,
5104 "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
5105 DEBUG_P(PerlIO_printf(Perl_debug_log,
5106 "Screamer: entering: 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)));
5113 while (cnt > 0) { /* this | eat */
5115 if ((*bp++ = *ptr++) == rslast) /* really | dust */
5116 goto thats_all_folks; /* screams | sed :-) */
5120 Copy(ptr, bp, cnt, char); /* this | eat */
5121 bp += cnt; /* screams | dust */
5122 ptr += cnt; /* louder | sed :-) */
5127 if (shortbuffered) { /* oh well, must extend */
5128 cnt = shortbuffered;
5130 bpx = bp - (STDCHAR*)SvPVX(sv); /* box up before relocation */
5132 SvGROW(sv, SvLEN(sv) + append + cnt + 2);
5133 bp = (STDCHAR*)SvPVX(sv) + bpx; /* unbox after relocation */
5137 DEBUG_P(PerlIO_printf(Perl_debug_log,
5138 "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
5139 PTR2UV(ptr),(long)cnt));
5140 PerlIO_set_ptrcnt(fp, ptr, cnt); /* deregisterize cnt and ptr */
5141 DEBUG_P(PerlIO_printf(Perl_debug_log,
5142 "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
5143 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
5144 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
5145 /* This used to call 'filbuf' in stdio form, but as that behaves like
5146 getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
5147 another abstraction. */
5148 i = PerlIO_getc(fp); /* get more characters */
5149 DEBUG_P(PerlIO_printf(Perl_debug_log,
5150 "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
5151 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
5152 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
5153 cnt = PerlIO_get_cnt(fp);
5154 ptr = (STDCHAR*)PerlIO_get_ptr(fp); /* reregisterize cnt and ptr */
5155 DEBUG_P(PerlIO_printf(Perl_debug_log,
5156 "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
5158 if (i == EOF) /* all done for ever? */
5159 goto thats_really_all_folks;
5161 bpx = bp - (STDCHAR*)SvPVX(sv); /* box up before relocation */
5163 SvGROW(sv, bpx + cnt + 2);
5164 bp = (STDCHAR*)SvPVX(sv) + bpx; /* unbox after relocation */
5166 *bp++ = i; /* store character from PerlIO_getc */
5168 if (rslen && (STDCHAR)i == rslast) /* all done for now? */
5169 goto thats_all_folks;
5173 if ((rslen > 1 && (bp - (STDCHAR*)SvPVX(sv) < rslen)) ||
5174 memNE((char*)bp - rslen, rsptr, rslen))
5175 goto screamer; /* go back to the fray */
5176 thats_really_all_folks:
5178 cnt += shortbuffered;
5179 DEBUG_P(PerlIO_printf(Perl_debug_log,
5180 "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
5181 PerlIO_set_ptrcnt(fp, ptr, cnt); /* put these back or we're in trouble */
5182 DEBUG_P(PerlIO_printf(Perl_debug_log,
5183 "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
5184 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
5185 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
5187 SvCUR_set(sv, bp - (STDCHAR*)SvPVX(sv)); /* set length */
5188 DEBUG_P(PerlIO_printf(Perl_debug_log,
5189 "Screamer: done, len=%ld, string=|%.*s|\n",
5190 (long)SvCUR(sv),(int)SvCUR(sv),SvPVX(sv)));
5195 /*The big, slow, and stupid way */
5198 /* Need to work around EPOC SDK features */
5199 /* On WINS: MS VC5 generates calls to _chkstk, */
5200 /* if a `large' stack frame is allocated */
5201 /* gcc on MARM does not generate calls like these */
5207 register STDCHAR *bpe = buf + sizeof(buf);
5209 while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = i) != rslast && bp < bpe)
5210 ; /* keep reading */
5214 cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
5215 /* Accomodate broken VAXC compiler, which applies U8 cast to
5216 * both args of ?: operator, causing EOF to change into 255
5218 if (cnt) { i = (U8)buf[cnt - 1]; } else { i = EOF; }
5222 sv_catpvn(sv, (char *) buf, cnt);
5224 sv_setpvn(sv, (char *) buf, cnt);
5226 if (i != EOF && /* joy */
5228 SvCUR(sv) < rslen ||
5229 memNE(SvPVX(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
5233 * If we're reading from a TTY and we get a short read,
5234 * indicating that the user hit his EOF character, we need
5235 * to notice it now, because if we try to read from the TTY
5236 * again, the EOF condition will disappear.
5238 * The comparison of cnt to sizeof(buf) is an optimization
5239 * that prevents unnecessary calls to feof().
5243 if (!(cnt < sizeof(buf) && PerlIO_eof(fp)))
5248 if (RsPARA(PL_rs)) { /* have to do this both before and after */
5249 while (i != EOF) { /* to make sure file boundaries work right */
5250 i = PerlIO_getc(fp);
5252 PerlIO_ungetc(fp,i);
5258 if (PerlIO_isutf8(fp))
5263 return (SvCUR(sv) - append) ? SvPVX(sv) : Nullch;
5270 Auto-increment of the value in the SV.
5276 Perl_sv_inc(pTHX_ register SV *sv)
5285 if (SvTHINKFIRST(sv)) {
5286 if (SvREADONLY(sv)) {
5287 if (PL_curcop != &PL_compiling)
5288 Perl_croak(aTHX_ PL_no_modify);
5292 if (SvAMAGIC(sv) && AMG_CALLun(sv,inc))
5294 i = PTR2IV(SvRV(sv));
5299 flags = SvFLAGS(sv);
5300 if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
5301 /* It's (privately or publicly) a float, but not tested as an
5302 integer, so test it to see. */
5304 flags = SvFLAGS(sv);
5306 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
5307 /* It's publicly an integer, or privately an integer-not-float */
5310 if (SvUVX(sv) == UV_MAX)
5311 sv_setnv(sv, (NV)UV_MAX + 1.0);
5313 (void)SvIOK_only_UV(sv);
5316 if (SvIVX(sv) == IV_MAX)
5317 sv_setuv(sv, (UV)IV_MAX + 1);
5319 (void)SvIOK_only(sv);
5325 if (flags & SVp_NOK) {
5326 (void)SvNOK_only(sv);
5331 if (!(flags & SVp_POK) || !*SvPVX(sv)) {
5332 if ((flags & SVTYPEMASK) < SVt_PVIV)
5333 sv_upgrade(sv, SVt_IV);
5334 (void)SvIOK_only(sv);
5339 while (isALPHA(*d)) d++;
5340 while (isDIGIT(*d)) d++;
5342 #ifdef PERL_PRESERVE_IVUV
5343 /* Got to punt this an an integer if needs be, but we don't issue
5344 warnings. Probably ought to make the sv_iv_please() that does
5345 the conversion if possible, and silently. */
5346 I32 numtype = looks_like_number(sv);
5347 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
5348 /* Need to try really hard to see if it's an integer.
5349 9.22337203685478e+18 is an integer.
5350 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
5351 so $a="9.22337203685478e+18"; $a+0; $a++
5352 needs to be the same as $a="9.22337203685478e+18"; $a++
5359 /* sv_2iv *should* have made this an NV */
5360 if (flags & SVp_NOK) {
5361 (void)SvNOK_only(sv);
5365 /* I don't think we can get here. Maybe I should assert this
5366 And if we do get here I suspect that sv_setnv will croak. NWC
5368 #if defined(USE_LONG_DOUBLE)
5369 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",
5370 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5372 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%g\n",
5373 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5376 #endif /* PERL_PRESERVE_IVUV */
5377 sv_setnv(sv,Atof(SvPVX(sv)) + 1.0);
5381 while (d >= SvPVX(sv)) {
5389 /* MKS: The original code here died if letters weren't consecutive.
5390 * at least it didn't have to worry about non-C locales. The
5391 * new code assumes that ('z'-'a')==('Z'-'A'), letters are
5392 * arranged in order (although not consecutively) and that only
5393 * [A-Za-z] are accepted by isALPHA in the C locale.
5395 if (*d != 'z' && *d != 'Z') {
5396 do { ++*d; } while (!isALPHA(*d));
5399 *(d--) -= 'z' - 'a';
5404 *(d--) -= 'z' - 'a' + 1;
5408 /* oh,oh, the number grew */
5409 SvGROW(sv, SvCUR(sv) + 2);
5411 for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX(sv); d--)
5422 Auto-decrement of the value in the SV.
5428 Perl_sv_dec(pTHX_ register SV *sv)
5436 if (SvTHINKFIRST(sv)) {
5437 if (SvREADONLY(sv)) {
5438 if (PL_curcop != &PL_compiling)
5439 Perl_croak(aTHX_ PL_no_modify);
5443 if (SvAMAGIC(sv) && AMG_CALLun(sv,dec))
5445 i = PTR2IV(SvRV(sv));
5450 /* Unlike sv_inc we don't have to worry about string-never-numbers
5451 and keeping them magic. But we mustn't warn on punting */
5452 flags = SvFLAGS(sv);
5453 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
5454 /* It's publicly an integer, or privately an integer-not-float */
5457 if (SvUVX(sv) == 0) {
5458 (void)SvIOK_only(sv);
5462 (void)SvIOK_only_UV(sv);
5466 if (SvIVX(sv) == IV_MIN)
5467 sv_setnv(sv, (NV)IV_MIN - 1.0);
5469 (void)SvIOK_only(sv);
5475 if (flags & SVp_NOK) {
5477 (void)SvNOK_only(sv);
5480 if (!(flags & SVp_POK)) {
5481 if ((flags & SVTYPEMASK) < SVt_PVNV)
5482 sv_upgrade(sv, SVt_NV);
5484 (void)SvNOK_only(sv);
5487 #ifdef PERL_PRESERVE_IVUV
5489 I32 numtype = looks_like_number(sv);
5490 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
5491 /* Need to try really hard to see if it's an integer.
5492 9.22337203685478e+18 is an integer.
5493 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
5494 so $a="9.22337203685478e+18"; $a+0; $a--
5495 needs to be the same as $a="9.22337203685478e+18"; $a--
5502 /* sv_2iv *should* have made this an NV */
5503 if (flags & SVp_NOK) {
5504 (void)SvNOK_only(sv);
5508 /* I don't think we can get here. Maybe I should assert this
5509 And if we do get here I suspect that sv_setnv will croak. NWC
5511 #if defined(USE_LONG_DOUBLE)
5512 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",
5513 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5515 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%g\n",
5516 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5520 #endif /* PERL_PRESERVE_IVUV */
5521 sv_setnv(sv,Atof(SvPVX(sv)) - 1.0); /* punt */
5525 =for apidoc sv_mortalcopy
5527 Creates a new SV which is a copy of the original SV. The new SV is marked
5533 /* Make a string that will exist for the duration of the expression
5534 * evaluation. Actually, it may have to last longer than that, but
5535 * hopefully we won't free it until it has been assigned to a
5536 * permanent location. */
5539 Perl_sv_mortalcopy(pTHX_ SV *oldstr)
5544 sv_setsv(sv,oldstr);
5546 PL_tmps_stack[++PL_tmps_ix] = sv;
5552 =for apidoc sv_newmortal
5554 Creates a new SV which is mortal. The reference count of the SV is set to 1.
5560 Perl_sv_newmortal(pTHX)
5565 SvFLAGS(sv) = SVs_TEMP;
5567 PL_tmps_stack[++PL_tmps_ix] = sv;
5572 =for apidoc sv_2mortal
5574 Marks an SV as mortal. The SV will be destroyed when the current context
5580 /* same thing without the copying */
5583 Perl_sv_2mortal(pTHX_ register SV *sv)
5587 if (SvREADONLY(sv) && SvIMMORTAL(sv))
5590 PL_tmps_stack[++PL_tmps_ix] = sv;
5598 Creates a new SV and copies a string into it. The reference count for the
5599 SV is set to 1. If C<len> is zero, Perl will compute the length using
5600 strlen(). For efficiency, consider using C<newSVpvn> instead.
5606 Perl_newSVpv(pTHX_ const char *s, STRLEN len)
5613 sv_setpvn(sv,s,len);
5618 =for apidoc newSVpvn
5620 Creates a new SV and copies a string into it. The reference count for the
5621 SV is set to 1. Note that if C<len> is zero, Perl will create a zero length
5622 string. You are responsible for ensuring that the source string is at least
5629 Perl_newSVpvn(pTHX_ const char *s, STRLEN len)
5634 sv_setpvn(sv,s,len);
5639 =for apidoc newSVpvn_share
5641 Creates a new SV and populates it with a string from
5642 the string table. Turns on READONLY and FAKE.
5643 The idea here is that as string table is used for shared hash
5644 keys these strings will have SvPVX == HeKEY and hash lookup
5645 will avoid string compare.
5651 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
5654 bool is_utf8 = FALSE;
5659 if (is_utf8 && !(PL_hints & HINT_UTF8_DISTINCT)) {
5660 STRLEN tmplen = len;
5661 /* See the note in hv.c:hv_fetch() --jhi */
5662 src = (char*)bytes_from_utf8((U8*)src, &tmplen, &is_utf8);
5666 PERL_HASH(hash, src, len);
5668 sv_upgrade(sv, SVt_PVIV);
5669 SvPVX(sv) = sharepvn(src, is_utf8?-len:len, hash);
5681 #if defined(PERL_IMPLICIT_CONTEXT)
5683 Perl_newSVpvf_nocontext(const char* pat, ...)
5688 va_start(args, pat);
5689 sv = vnewSVpvf(pat, &args);
5696 =for apidoc newSVpvf
5698 Creates a new SV an initialize it with the string formatted like
5705 Perl_newSVpvf(pTHX_ const char* pat, ...)
5709 va_start(args, pat);
5710 sv = vnewSVpvf(pat, &args);
5716 Perl_vnewSVpvf(pTHX_ const char* pat, va_list* args)
5720 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
5727 Creates a new SV and copies a floating point value into it.
5728 The reference count for the SV is set to 1.
5734 Perl_newSVnv(pTHX_ NV n)
5746 Creates a new SV and copies an integer into it. The reference count for the
5753 Perl_newSViv(pTHX_ IV i)
5765 Creates a new SV and copies an unsigned integer into it.
5766 The reference count for the SV is set to 1.
5772 Perl_newSVuv(pTHX_ UV u)
5782 =for apidoc newRV_noinc
5784 Creates an RV wrapper for an SV. The reference count for the original
5785 SV is B<not> incremented.
5791 Perl_newRV_noinc(pTHX_ SV *tmpRef)
5796 sv_upgrade(sv, SVt_RV);
5803 /* newRV_inc is #defined to newRV in sv.h */
5805 Perl_newRV(pTHX_ SV *tmpRef)
5807 return newRV_noinc(SvREFCNT_inc(tmpRef));
5813 Creates a new SV which is an exact duplicate of the original SV.
5818 /* make an exact duplicate of old */
5821 Perl_newSVsv(pTHX_ register SV *old)
5827 if (SvTYPE(old) == SVTYPEMASK) {
5828 if (ckWARN_d(WARN_INTERNAL))
5829 Perl_warner(aTHX_ WARN_INTERNAL, "semi-panic: attempt to dup freed string");
5844 Perl_sv_reset(pTHX_ register char *s, HV *stash)
5852 char todo[PERL_UCHAR_MAX+1];
5857 if (!*s) { /* reset ?? searches */
5858 for (pm = HvPMROOT(stash); pm; pm = pm->op_pmnext) {
5859 pm->op_pmdynflags &= ~PMdf_USED;
5864 /* reset variables */
5866 if (!HvARRAY(stash))
5869 Zero(todo, 256, char);
5871 i = (unsigned char)*s;
5875 max = (unsigned char)*s++;
5876 for ( ; i <= max; i++) {
5879 for (i = 0; i <= (I32) HvMAX(stash); i++) {
5880 for (entry = HvARRAY(stash)[i];
5882 entry = HeNEXT(entry))
5884 if (!todo[(U8)*HeKEY(entry)])
5886 gv = (GV*)HeVAL(entry);
5888 if (SvTHINKFIRST(sv)) {
5889 if (!SvREADONLY(sv) && SvROK(sv))
5894 if (SvTYPE(sv) >= SVt_PV) {
5896 if (SvPVX(sv) != Nullch)
5903 if (GvHV(gv) && !HvNAME(GvHV(gv))) {
5905 #ifdef USE_ENVIRON_ARRAY
5907 environ[0] = Nullch;
5916 Perl_sv_2io(pTHX_ SV *sv)
5922 switch (SvTYPE(sv)) {
5930 Perl_croak(aTHX_ "Bad filehandle: %s", GvNAME(gv));
5934 Perl_croak(aTHX_ PL_no_usym, "filehandle");
5936 return sv_2io(SvRV(sv));
5937 gv = gv_fetchpv(SvPV(sv,n_a), FALSE, SVt_PVIO);
5943 Perl_croak(aTHX_ "Bad filehandle: %s", SvPV(sv,n_a));
5950 Perl_sv_2cv(pTHX_ SV *sv, HV **st, GV **gvp, I32 lref)
5957 return *gvp = Nullgv, Nullcv;
5958 switch (SvTYPE(sv)) {
5977 SV **sp = &sv; /* Used in tryAMAGICunDEREF macro. */
5978 tryAMAGICunDEREF(to_cv);
5981 if (SvTYPE(sv) == SVt_PVCV) {
5990 Perl_croak(aTHX_ "Not a subroutine reference");
5995 gv = gv_fetchpv(SvPV(sv, n_a), lref, SVt_PVCV);
6001 if (lref && !GvCVu(gv)) {
6004 tmpsv = NEWSV(704,0);
6005 gv_efullname3(tmpsv, gv, Nullch);
6006 /* XXX this is probably not what they think they're getting.
6007 * It has the same effect as "sub name;", i.e. just a forward
6009 newSUB(start_subparse(FALSE, 0),
6010 newSVOP(OP_CONST, 0, tmpsv),
6015 Perl_croak(aTHX_ "Unable to create sub named \"%s\"", SvPV(sv,n_a));
6024 Returns true if the SV has a true value by Perl's rules.
6030 Perl_sv_true(pTHX_ register SV *sv)
6036 if ((tXpv = (XPV*)SvANY(sv)) &&
6037 (tXpv->xpv_cur > 1 ||
6038 (tXpv->xpv_cur && *tXpv->xpv_pv != '0')))
6045 return SvIVX(sv) != 0;
6048 return SvNVX(sv) != 0.0;
6050 return sv_2bool(sv);
6056 Perl_sv_iv(pTHX_ register SV *sv)
6060 return (IV)SvUVX(sv);
6067 Perl_sv_uv(pTHX_ register SV *sv)
6072 return (UV)SvIVX(sv);
6078 Perl_sv_nv(pTHX_ register SV *sv)
6086 Perl_sv_pv(pTHX_ SV *sv)
6093 return sv_2pv(sv, &n_a);
6097 Perl_sv_pvn(pTHX_ SV *sv, STRLEN *lp)
6103 return sv_2pv(sv, lp);
6107 =for apidoc sv_pvn_force
6109 Get a sensible string out of the SV somehow.
6115 Perl_sv_pvn_force(pTHX_ SV *sv, STRLEN *lp)
6119 if (SvTHINKFIRST(sv) && !SvROK(sv))
6120 sv_force_normal(sv);
6126 if (SvTYPE(sv) > SVt_PVLV && SvTYPE(sv) != SVt_PVFM) {
6127 Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
6128 PL_op_name[PL_op->op_type]);
6132 if (s != SvPVX(sv)) { /* Almost, but not quite, sv_setpvn() */
6137 (void)SvUPGRADE(sv, SVt_PV); /* Never FALSE */
6138 SvGROW(sv, len + 1);
6139 Move(s,SvPVX(sv),len,char);
6144 SvPOK_on(sv); /* validate pointer */
6146 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
6147 PTR2UV(sv),SvPVX(sv)));
6154 Perl_sv_pvbyte(pTHX_ SV *sv)
6160 Perl_sv_pvbyten(pTHX_ SV *sv, STRLEN *lp)
6162 return sv_pvn(sv,lp);
6166 Perl_sv_pvbyten_force(pTHX_ SV *sv, STRLEN *lp)
6168 return sv_pvn_force(sv,lp);
6172 Perl_sv_pvutf8(pTHX_ SV *sv)
6174 sv_utf8_upgrade(sv);
6179 Perl_sv_pvutf8n(pTHX_ SV *sv, STRLEN *lp)
6181 sv_utf8_upgrade(sv);
6182 return sv_pvn(sv,lp);
6186 =for apidoc sv_pvutf8n_force
6188 Get a sensible UTF8-encoded string out of the SV somehow. See
6195 Perl_sv_pvutf8n_force(pTHX_ SV *sv, STRLEN *lp)
6197 sv_utf8_upgrade(sv);
6198 return sv_pvn_force(sv,lp);
6202 =for apidoc sv_reftype
6204 Returns a string describing what the SV is a reference to.
6210 Perl_sv_reftype(pTHX_ SV *sv, int ob)
6212 if (ob && SvOBJECT(sv))
6213 return HvNAME(SvSTASH(sv));
6215 switch (SvTYPE(sv)) {
6229 case SVt_PVLV: return "LVALUE";
6230 case SVt_PVAV: return "ARRAY";
6231 case SVt_PVHV: return "HASH";
6232 case SVt_PVCV: return "CODE";
6233 case SVt_PVGV: return "GLOB";
6234 case SVt_PVFM: return "FORMAT";
6235 case SVt_PVIO: return "IO";
6236 default: return "UNKNOWN";
6242 =for apidoc sv_isobject
6244 Returns a boolean indicating whether the SV is an RV pointing to a blessed
6245 object. If the SV is not an RV, or if the object is not blessed, then this
6252 Perl_sv_isobject(pTHX_ SV *sv)
6269 Returns a boolean indicating whether the SV is blessed into the specified
6270 class. This does not check for subtypes; use C<sv_derived_from> to verify
6271 an inheritance relationship.
6277 Perl_sv_isa(pTHX_ SV *sv, const char *name)
6289 return strEQ(HvNAME(SvSTASH(sv)), name);
6295 Creates a new SV for the RV, C<rv>, to point to. If C<rv> is not an RV then
6296 it will be upgraded to one. If C<classname> is non-null then the new SV will
6297 be blessed in the specified package. The new SV is returned and its
6298 reference count is 1.
6304 Perl_newSVrv(pTHX_ SV *rv, const char *classname)
6310 SV_CHECK_THINKFIRST(rv);
6313 if (SvTYPE(rv) >= SVt_PVMG) {
6314 U32 refcnt = SvREFCNT(rv);
6318 SvREFCNT(rv) = refcnt;
6321 if (SvTYPE(rv) < SVt_RV)
6322 sv_upgrade(rv, SVt_RV);
6323 else if (SvTYPE(rv) > SVt_RV) {
6324 (void)SvOOK_off(rv);
6325 if (SvPVX(rv) && SvLEN(rv))
6326 Safefree(SvPVX(rv));
6336 HV* stash = gv_stashpv(classname, TRUE);
6337 (void)sv_bless(rv, stash);
6343 =for apidoc sv_setref_pv
6345 Copies a pointer into a new SV, optionally blessing the SV. The C<rv>
6346 argument will be upgraded to an RV. That RV will be modified to point to
6347 the new SV. If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
6348 into the SV. The C<classname> argument indicates the package for the
6349 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
6350 will be returned and will have a reference count of 1.
6352 Do not use with other Perl types such as HV, AV, SV, CV, because those
6353 objects will become corrupted by the pointer copy process.
6355 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
6361 Perl_sv_setref_pv(pTHX_ SV *rv, const char *classname, void *pv)
6364 sv_setsv(rv, &PL_sv_undef);
6368 sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
6373 =for apidoc sv_setref_iv
6375 Copies an integer into a new SV, optionally blessing the SV. The C<rv>
6376 argument will be upgraded to an RV. That RV will be modified to point to
6377 the new SV. The C<classname> argument indicates the package for the
6378 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
6379 will be returned and will have a reference count of 1.
6385 Perl_sv_setref_iv(pTHX_ SV *rv, const char *classname, IV iv)
6387 sv_setiv(newSVrv(rv,classname), iv);
6392 =for apidoc sv_setref_uv
6394 Copies an unsigned integer into a new SV, optionally blessing the SV. The C<rv>
6395 argument will be upgraded to an RV. That RV will be modified to point to
6396 the new SV. The C<classname> argument indicates the package for the
6397 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
6398 will be returned and will have a reference count of 1.
6404 Perl_sv_setref_uv(pTHX_ SV *rv, const char *classname, UV uv)
6406 sv_setuv(newSVrv(rv,classname), uv);
6411 =for apidoc sv_setref_nv
6413 Copies a double into a new SV, optionally blessing the SV. The C<rv>
6414 argument will be upgraded to an RV. That RV will be modified to point to
6415 the new SV. The C<classname> argument indicates the package for the
6416 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
6417 will be returned and will have a reference count of 1.
6423 Perl_sv_setref_nv(pTHX_ SV *rv, const char *classname, NV nv)
6425 sv_setnv(newSVrv(rv,classname), nv);
6430 =for apidoc sv_setref_pvn
6432 Copies a string into a new SV, optionally blessing the SV. The length of the
6433 string must be specified with C<n>. The C<rv> argument will be upgraded to
6434 an RV. That RV will be modified to point to the new SV. The C<classname>
6435 argument indicates the package for the blessing. Set C<classname> to
6436 C<Nullch> to avoid the blessing. The new SV will be returned and will have
6437 a reference count of 1.
6439 Note that C<sv_setref_pv> copies the pointer while this copies the string.
6445 Perl_sv_setref_pvn(pTHX_ SV *rv, const char *classname, char *pv, STRLEN n)
6447 sv_setpvn(newSVrv(rv,classname), pv, n);
6452 =for apidoc sv_bless
6454 Blesses an SV into a specified package. The SV must be an RV. The package
6455 must be designated by its stash (see C<gv_stashpv()>). The reference count
6456 of the SV is unaffected.
6462 Perl_sv_bless(pTHX_ SV *sv, HV *stash)
6466 Perl_croak(aTHX_ "Can't bless non-reference value");
6468 if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
6469 if (SvREADONLY(tmpRef))
6470 Perl_croak(aTHX_ PL_no_modify);
6471 if (SvOBJECT(tmpRef)) {
6472 if (SvTYPE(tmpRef) != SVt_PVIO)
6474 SvREFCNT_dec(SvSTASH(tmpRef));
6477 SvOBJECT_on(tmpRef);
6478 if (SvTYPE(tmpRef) != SVt_PVIO)
6480 (void)SvUPGRADE(tmpRef, SVt_PVMG);
6481 SvSTASH(tmpRef) = (HV*)SvREFCNT_inc(stash);
6492 S_sv_unglob(pTHX_ SV *sv)
6496 assert(SvTYPE(sv) == SVt_PVGV);
6501 SvREFCNT_dec(GvSTASH(sv));
6502 GvSTASH(sv) = Nullhv;
6504 sv_unmagic(sv, '*');
6505 Safefree(GvNAME(sv));
6508 /* need to keep SvANY(sv) in the right arena */
6509 xpvmg = new_XPVMG();
6510 StructCopy(SvANY(sv), xpvmg, XPVMG);
6511 del_XPVGV(SvANY(sv));
6514 SvFLAGS(sv) &= ~SVTYPEMASK;
6515 SvFLAGS(sv) |= SVt_PVMG;
6519 =for apidoc sv_unref_flags
6521 Unsets the RV status of the SV, and decrements the reference count of
6522 whatever was being referenced by the RV. This can almost be thought of
6523 as a reversal of C<newSVrv>. The C<cflags> argument can contain
6524 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
6525 (otherwise the decrementing is conditional on the reference count being
6526 different from one or the reference being a readonly SV).
6533 Perl_sv_unref_flags(pTHX_ SV *sv, U32 flags)
6537 if (SvWEAKREF(sv)) {
6545 if (SvREFCNT(rv) != 1 || SvREADONLY(rv) || flags) /* SV_IMMEDIATE_UNREF */
6547 else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
6548 sv_2mortal(rv); /* Schedule for freeing later */
6552 =for apidoc sv_unref
6554 Unsets the RV status of the SV, and decrements the reference count of
6555 whatever was being referenced by the RV. This can almost be thought of
6556 as a reversal of C<newSVrv>. This is C<sv_unref_flags> with the C<flag>
6557 being zero. See C<SvROK_off>.
6563 Perl_sv_unref(pTHX_ SV *sv)
6565 sv_unref_flags(sv, 0);
6569 Perl_sv_taint(pTHX_ SV *sv)
6571 sv_magic((sv), Nullsv, 't', Nullch, 0);
6575 Perl_sv_untaint(pTHX_ SV *sv)
6577 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
6578 MAGIC *mg = mg_find(sv, 't');
6585 Perl_sv_tainted(pTHX_ SV *sv)
6587 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
6588 MAGIC *mg = mg_find(sv, 't');
6589 if (mg && ((mg->mg_len & 1) || ((mg->mg_len & 2) && mg->mg_obj == sv)))
6596 =for apidoc sv_setpviv
6598 Copies an integer into the given SV, also updating its string value.
6599 Does not handle 'set' magic. See C<sv_setpviv_mg>.
6605 Perl_sv_setpviv(pTHX_ SV *sv, IV iv)
6607 char buf[TYPE_CHARS(UV)];
6609 char *ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
6611 sv_setpvn(sv, ptr, ebuf - ptr);
6616 =for apidoc sv_setpviv_mg
6618 Like C<sv_setpviv>, but also handles 'set' magic.
6624 Perl_sv_setpviv_mg(pTHX_ SV *sv, IV iv)
6626 char buf[TYPE_CHARS(UV)];
6628 char *ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
6630 sv_setpvn(sv, ptr, ebuf - ptr);
6634 #if defined(PERL_IMPLICIT_CONTEXT)
6636 Perl_sv_setpvf_nocontext(SV *sv, const char* pat, ...)
6640 va_start(args, pat);
6641 sv_vsetpvf(sv, pat, &args);
6647 Perl_sv_setpvf_mg_nocontext(SV *sv, const char* pat, ...)
6651 va_start(args, pat);
6652 sv_vsetpvf_mg(sv, pat, &args);
6658 =for apidoc sv_setpvf
6660 Processes its arguments like C<sprintf> and sets an SV to the formatted
6661 output. Does not handle 'set' magic. See C<sv_setpvf_mg>.
6667 Perl_sv_setpvf(pTHX_ SV *sv, const char* pat, ...)
6670 va_start(args, pat);
6671 sv_vsetpvf(sv, pat, &args);
6676 Perl_sv_vsetpvf(pTHX_ SV *sv, const char* pat, va_list* args)
6678 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6682 =for apidoc sv_setpvf_mg
6684 Like C<sv_setpvf>, but also handles 'set' magic.
6690 Perl_sv_setpvf_mg(pTHX_ SV *sv, const char* pat, ...)
6693 va_start(args, pat);
6694 sv_vsetpvf_mg(sv, pat, &args);
6699 Perl_sv_vsetpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
6701 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6705 #if defined(PERL_IMPLICIT_CONTEXT)
6707 Perl_sv_catpvf_nocontext(SV *sv, const char* pat, ...)
6711 va_start(args, pat);
6712 sv_vcatpvf(sv, pat, &args);
6717 Perl_sv_catpvf_mg_nocontext(SV *sv, const char* pat, ...)
6721 va_start(args, pat);
6722 sv_vcatpvf_mg(sv, pat, &args);
6728 =for apidoc sv_catpvf
6730 Processes its arguments like C<sprintf> and appends the formatted output
6731 to an SV. Handles 'get' magic, but not 'set' magic. C<SvSETMAGIC()> must
6732 typically be called after calling this function to handle 'set' magic.
6738 Perl_sv_catpvf(pTHX_ SV *sv, const char* pat, ...)
6741 va_start(args, pat);
6742 sv_vcatpvf(sv, pat, &args);
6747 Perl_sv_vcatpvf(pTHX_ SV *sv, const char* pat, va_list* args)
6749 sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6753 =for apidoc sv_catpvf_mg
6755 Like C<sv_catpvf>, but also handles 'set' magic.
6761 Perl_sv_catpvf_mg(pTHX_ SV *sv, const char* pat, ...)
6764 va_start(args, pat);
6765 sv_vcatpvf_mg(sv, pat, &args);
6770 Perl_sv_vcatpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
6772 sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6777 =for apidoc sv_vsetpvfn
6779 Works like C<vcatpvfn> but copies the text into the SV instead of
6786 Perl_sv_vsetpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
6788 sv_setpvn(sv, "", 0);
6789 sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, maybe_tainted);
6793 S_expect_number(pTHX_ char** pattern)
6796 switch (**pattern) {
6797 case '1': case '2': case '3':
6798 case '4': case '5': case '6':
6799 case '7': case '8': case '9':
6800 while (isDIGIT(**pattern))
6801 var = var * 10 + (*(*pattern)++ - '0');
6805 #define EXPECT_NUMBER(pattern, var) (var = S_expect_number(aTHX_ &pattern))
6808 =for apidoc sv_vcatpvfn
6810 Processes its arguments like C<vsprintf> and appends the formatted output
6811 to an SV. Uses an array of SVs if the C style variable argument list is
6812 missing (NULL). When running with taint checks enabled, indicates via
6813 C<maybe_tainted> if results are untrustworthy (often due to the use of
6820 Perl_sv_vcatpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
6827 static char nullstr[] = "(null)";
6830 /* no matter what, this is a string now */
6831 (void)SvPV_force(sv, origlen);
6833 /* special-case "", "%s", and "%_" */
6836 if (patlen == 2 && pat[0] == '%') {
6840 char *s = va_arg(*args, char*);
6841 sv_catpv(sv, s ? s : nullstr);
6843 else if (svix < svmax) {
6844 sv_catsv(sv, *svargs);
6845 if (DO_UTF8(*svargs))
6851 argsv = va_arg(*args, SV*);
6852 sv_catsv(sv, argsv);
6857 /* See comment on '_' below */
6862 patend = (char*)pat + patlen;
6863 for (p = (char*)pat; p < patend; p = q) {
6866 bool vectorize = FALSE;
6867 bool vectorarg = FALSE;
6868 bool vec_utf = FALSE;
6874 bool has_precis = FALSE;
6876 bool is_utf = FALSE;
6879 U8 utf8buf[UTF8_MAXLEN+1];
6880 STRLEN esignlen = 0;
6882 char *eptr = Nullch;
6884 /* Times 4: a decimal digit takes more than 3 binary digits.
6885 * NV_DIG: mantissa takes than many decimal digits.
6886 * Plus 32: Playing safe. */
6887 char ebuf[IV_DIG * 4 + NV_DIG + 32];
6888 /* large enough for "%#.#f" --chip */
6889 /* what about long double NVs? --jhi */
6892 U8 *vecstr = Null(U8*);
6904 STRLEN dotstrlen = 1;
6905 I32 efix = 0; /* explicit format parameter index */
6906 I32 ewix = 0; /* explicit width index */
6907 I32 epix = 0; /* explicit precision index */
6908 I32 evix = 0; /* explicit vector index */
6909 bool asterisk = FALSE;
6911 /* echo everything up to the next format specification */
6912 for (q = p; q < patend && *q != '%'; ++q) ;
6914 sv_catpvn(sv, p, q - p);
6921 We allow format specification elements in this order:
6922 \d+\$ explicit format parameter index
6924 \*?(\d+\$)?v vector with optional (optionally specified) arg
6925 \d+|\*(\d+\$)? width using optional (optionally specified) arg
6926 \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
6928 [%bcdefginopsux_DFOUX] format (mandatory)
6930 if (EXPECT_NUMBER(q, width)) {
6971 if (EXPECT_NUMBER(q, ewix))
6980 if ((vectorarg = asterisk)) {
6990 EXPECT_NUMBER(q, width);
6995 vecsv = va_arg(*args, SV*);
6997 vecsv = (evix ? evix <= svmax : svix < svmax) ?
6998 svargs[ewix ? ewix-1 : svix++] : &PL_sv_undef;
6999 dotstr = SvPVx(vecsv, dotstrlen);
7004 vecsv = va_arg(*args, SV*);
7005 vecstr = (U8*)SvPVx(vecsv,veclen);
7006 vec_utf = DO_UTF8(vecsv);
7008 else if (efix ? efix <= svmax : svix < svmax) {
7009 vecsv = svargs[efix ? efix-1 : svix++];
7010 vecstr = (U8*)SvPVx(vecsv,veclen);
7011 vec_utf = DO_UTF8(vecsv);
7021 i = va_arg(*args, int);
7023 i = (ewix ? ewix <= svmax : svix < svmax) ?
7024 SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
7026 width = (i < 0) ? -i : i;
7036 if (EXPECT_NUMBER(q, epix) && *q++ != '$')
7039 i = va_arg(*args, int);
7041 i = (ewix ? ewix <= svmax : svix < svmax)
7042 ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
7043 precis = (i < 0) ? 0 : i;
7048 precis = precis * 10 + (*q++ - '0');
7056 #if defined(HAS_QUAD) || (defined(HAS_LONG_DOUBLE) && defined(USE_LONG_DOUBLE))
7067 #if defined(HAS_QUAD) || (defined(HAS_LONG_DOUBLE) && defined(USE_LONG_DOUBLE))
7068 if (*(q + 1) == 'l') { /* lld, llf */
7091 argsv = (efix ? efix <= svmax : svix < svmax) ?
7092 svargs[efix ? efix-1 : svix++] : &PL_sv_undef;
7099 uv = args ? va_arg(*args, int) : SvIVx(argsv);
7100 if ((uv > 255 || (uv > 127 && SvUTF8(sv))) && !IN_BYTE) {
7101 eptr = (char*)utf8buf;
7102 elen = uv_to_utf8((U8*)eptr, uv) - utf8buf;
7114 eptr = va_arg(*args, char*);
7116 #ifdef MACOS_TRADITIONAL
7117 /* On MacOS, %#s format is used for Pascal strings */
7122 elen = strlen(eptr);
7125 elen = sizeof nullstr - 1;
7129 eptr = SvPVx(argsv, elen);
7130 if (DO_UTF8(argsv)) {
7131 if (has_precis && precis < elen) {
7133 sv_pos_u2b(argsv, &p, 0); /* sticks at end */
7136 if (width) { /* fudge width (can't fudge elen) */
7137 width += elen - sv_len_utf8(argsv);
7146 * The "%_" hack might have to be changed someday,
7147 * if ISO or ANSI decide to use '_' for something.
7148 * So we keep it hidden from users' code.
7152 argsv = va_arg(*args, SV*);
7153 eptr = SvPVx(argsv, elen);
7159 if (has_precis && elen > precis)
7168 uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
7186 iv = (IV)utf8_to_uv(vecstr, veclen, &ulen, 0);
7192 iv = NATIVE_TO_ASCII(iv); /* v-strings are codepoints */
7198 case 'h': iv = (short)va_arg(*args, int); break;
7199 default: iv = va_arg(*args, int); break;
7200 case 'l': iv = va_arg(*args, long); break;
7201 case 'V': iv = va_arg(*args, IV); break;
7203 case 'q': iv = va_arg(*args, Quad_t); break;
7210 case 'h': iv = (short)iv; break;
7212 case 'l': iv = (long)iv; break;
7215 case 'q': iv = (Quad_t)iv; break;
7222 esignbuf[esignlen++] = plus;
7226 esignbuf[esignlen++] = '-';
7268 uv = utf8_to_uv(vecstr, veclen, &ulen, 0);
7274 uv = NATIVE_TO_ASCII(uv); /* v-strings are codepoints */
7280 case 'h': uv = (unsigned short)va_arg(*args, unsigned); break;
7281 default: uv = va_arg(*args, unsigned); break;
7282 case 'l': uv = va_arg(*args, unsigned long); break;
7283 case 'V': uv = va_arg(*args, UV); break;
7285 case 'q': uv = va_arg(*args, Quad_t); break;
7292 case 'h': uv = (unsigned short)uv; break;
7294 case 'l': uv = (unsigned long)uv; break;
7297 case 'q': uv = (Quad_t)uv; break;
7303 eptr = ebuf + sizeof ebuf;
7309 p = (char*)((c == 'X')
7310 ? "0123456789ABCDEF" : "0123456789abcdef");
7316 esignbuf[esignlen++] = '0';
7317 esignbuf[esignlen++] = c; /* 'x' or 'X' */
7323 *--eptr = '0' + dig;
7325 if (alt && *eptr != '0')
7331 *--eptr = '0' + dig;
7334 esignbuf[esignlen++] = '0';
7335 esignbuf[esignlen++] = 'b';
7338 default: /* it had better be ten or less */
7339 #if defined(PERL_Y2KWARN)
7340 if (ckWARN(WARN_Y2K)) {
7342 char *s = SvPV(sv,n);
7343 if (n >= 2 && s[n-2] == '1' && s[n-1] == '9'
7344 && (n == 2 || !isDIGIT(s[n-3])))
7346 Perl_warner(aTHX_ WARN_Y2K,
7347 "Possible Y2K bug: %%%c %s",
7348 c, "format string following '19'");
7354 *--eptr = '0' + dig;
7355 } while (uv /= base);
7358 elen = (ebuf + sizeof ebuf) - eptr;
7361 zeros = precis - elen;
7362 else if (precis == 0 && elen == 1 && *eptr == '0')
7367 /* FLOATING POINT */
7370 c = 'f'; /* maybe %F isn't supported here */
7376 /* This is evil, but floating point is even more evil */
7379 nv = args ? va_arg(*args, NV) : SvNVx(argsv);
7382 if (c != 'e' && c != 'E') {
7384 (void)Perl_frexp(nv, &i);
7385 if (i == PERL_INT_MIN)
7386 Perl_die(aTHX_ "panic: frexp");
7388 need = BIT_DIGITS(i);
7390 need += has_precis ? precis : 6; /* known default */
7394 need += 20; /* fudge factor */
7395 if (PL_efloatsize < need) {
7396 Safefree(PL_efloatbuf);
7397 PL_efloatsize = need + 20; /* more fudge */
7398 New(906, PL_efloatbuf, PL_efloatsize, char);
7399 PL_efloatbuf[0] = '\0';
7402 eptr = ebuf + sizeof ebuf;
7405 #if defined(USE_LONG_DOUBLE) && defined(PERL_PRIfldbl)
7407 /* Copy the one or more characters in a long double
7408 * format before the 'base' ([efgEFG]) character to
7409 * the format string. */
7410 static char const prifldbl[] = PERL_PRIfldbl;
7411 char const *p = prifldbl + sizeof(prifldbl) - 3;
7412 while (p >= prifldbl) { *--eptr = *p--; }
7417 do { *--eptr = '0' + (base % 10); } while (base /= 10);
7422 do { *--eptr = '0' + (base % 10); } while (base /= 10);
7434 /* No taint. Otherwise we are in the strange situation
7435 * where printf() taints but print($float) doesn't.
7437 (void)sprintf(PL_efloatbuf, eptr, nv);
7439 eptr = PL_efloatbuf;
7440 elen = strlen(PL_efloatbuf);
7447 i = SvCUR(sv) - origlen;
7450 case 'h': *(va_arg(*args, short*)) = i; break;
7451 default: *(va_arg(*args, int*)) = i; break;
7452 case 'l': *(va_arg(*args, long*)) = i; break;
7453 case 'V': *(va_arg(*args, IV*)) = i; break;
7455 case 'q': *(va_arg(*args, Quad_t*)) = i; break;
7460 sv_setuv_mg(argsv, (UV)i);
7461 continue; /* not "break" */
7468 if (!args && ckWARN(WARN_PRINTF) &&
7469 (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)) {
7470 SV *msg = sv_newmortal();
7471 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %s: ",
7472 (PL_op->op_type == OP_PRTF) ? "printf" : "sprintf");
7475 Perl_sv_catpvf(aTHX_ msg,
7476 "\"%%%c\"", c & 0xFF);
7478 Perl_sv_catpvf(aTHX_ msg,
7479 "\"%%\\%03"UVof"\"",
7482 sv_catpv(msg, "end of string");
7483 Perl_warner(aTHX_ WARN_PRINTF, "%"SVf, msg); /* yes, this is reentrant */
7486 /* output mangled stuff ... */
7492 /* ... right here, because formatting flags should not apply */
7493 SvGROW(sv, SvCUR(sv) + elen + 1);
7495 Copy(eptr, p, elen, char);
7498 SvCUR(sv) = p - SvPVX(sv);
7499 continue; /* not "break" */
7502 have = esignlen + zeros + elen;
7503 need = (have > width ? have : width);
7506 SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
7508 if (esignlen && fill == '0') {
7509 for (i = 0; i < esignlen; i++)
7513 memset(p, fill, gap);
7516 if (esignlen && fill != '0') {
7517 for (i = 0; i < esignlen; i++)
7521 for (i = zeros; i; i--)
7525 Copy(eptr, p, elen, char);
7529 memset(p, ' ', gap);
7534 Copy(dotstr, p, dotstrlen, char);
7538 vectorize = FALSE; /* done iterating over vecstr */
7543 SvCUR(sv) = p - SvPVX(sv);
7551 #if defined(USE_ITHREADS)
7553 #if defined(USE_THREADS)
7554 # include "error: USE_THREADS and USE_ITHREADS are incompatible"
7557 #ifndef GpREFCNT_inc
7558 # define GpREFCNT_inc(gp) ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
7562 #define sv_dup_inc(s) SvREFCNT_inc(sv_dup(s))
7563 #define av_dup(s) (AV*)sv_dup((SV*)s)
7564 #define av_dup_inc(s) (AV*)SvREFCNT_inc(sv_dup((SV*)s))
7565 #define hv_dup(s) (HV*)sv_dup((SV*)s)
7566 #define hv_dup_inc(s) (HV*)SvREFCNT_inc(sv_dup((SV*)s))
7567 #define cv_dup(s) (CV*)sv_dup((SV*)s)
7568 #define cv_dup_inc(s) (CV*)SvREFCNT_inc(sv_dup((SV*)s))
7569 #define io_dup(s) (IO*)sv_dup((SV*)s)
7570 #define io_dup_inc(s) (IO*)SvREFCNT_inc(sv_dup((SV*)s))
7571 #define gv_dup(s) (GV*)sv_dup((SV*)s)
7572 #define gv_dup_inc(s) (GV*)SvREFCNT_inc(sv_dup((SV*)s))
7573 #define SAVEPV(p) (p ? savepv(p) : Nullch)
7574 #define SAVEPVN(p,n) (p ? savepvn(p,n) : Nullch)
7577 Perl_re_dup(pTHX_ REGEXP *r)
7579 /* XXX fix when pmop->op_pmregexp becomes shared */
7580 return ReREFCNT_inc(r);
7584 Perl_fp_dup(pTHX_ PerlIO *fp, char type)
7588 return (PerlIO*)NULL;
7590 /* look for it in the table first */
7591 ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
7595 /* create anew and remember what it is */
7596 ret = PerlIO_fdupopen(aTHX_ fp);
7597 ptr_table_store(PL_ptr_table, fp, ret);
7602 Perl_dirp_dup(pTHX_ DIR *dp)
7611 Perl_gp_dup(pTHX_ GP *gp)
7616 /* look for it in the table first */
7617 ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
7621 /* create anew and remember what it is */
7622 Newz(0, ret, 1, GP);
7623 ptr_table_store(PL_ptr_table, gp, ret);
7626 ret->gp_refcnt = 0; /* must be before any other dups! */
7627 ret->gp_sv = sv_dup_inc(gp->gp_sv);
7628 ret->gp_io = io_dup_inc(gp->gp_io);
7629 ret->gp_form = cv_dup_inc(gp->gp_form);
7630 ret->gp_av = av_dup_inc(gp->gp_av);
7631 ret->gp_hv = hv_dup_inc(gp->gp_hv);
7632 ret->gp_egv = gv_dup(gp->gp_egv); /* GvEGV is not refcounted */
7633 ret->gp_cv = cv_dup_inc(gp->gp_cv);
7634 ret->gp_cvgen = gp->gp_cvgen;
7635 ret->gp_flags = gp->gp_flags;
7636 ret->gp_line = gp->gp_line;
7637 ret->gp_file = gp->gp_file; /* points to COP.cop_file */
7642 Perl_mg_dup(pTHX_ MAGIC *mg)
7644 MAGIC *mgret = (MAGIC*)NULL;
7647 return (MAGIC*)NULL;
7648 /* look for it in the table first */
7649 mgret = (MAGIC*)ptr_table_fetch(PL_ptr_table, mg);
7653 for (; mg; mg = mg->mg_moremagic) {
7655 Newz(0, nmg, 1, MAGIC);
7659 mgprev->mg_moremagic = nmg;
7660 nmg->mg_virtual = mg->mg_virtual; /* XXX copy dynamic vtable? */
7661 nmg->mg_private = mg->mg_private;
7662 nmg->mg_type = mg->mg_type;
7663 nmg->mg_flags = mg->mg_flags;
7664 if (mg->mg_type == 'r') {
7665 nmg->mg_obj = (SV*)re_dup((REGEXP*)mg->mg_obj);
7668 nmg->mg_obj = (mg->mg_flags & MGf_REFCOUNTED)
7669 ? sv_dup_inc(mg->mg_obj)
7670 : sv_dup(mg->mg_obj);
7672 nmg->mg_len = mg->mg_len;
7673 nmg->mg_ptr = mg->mg_ptr; /* XXX random ptr? */
7674 if (mg->mg_ptr && mg->mg_type != 'g') {
7675 if (mg->mg_len >= 0) {
7676 nmg->mg_ptr = SAVEPVN(mg->mg_ptr, mg->mg_len);
7677 if (mg->mg_type == 'c' && AMT_AMAGIC((AMT*)mg->mg_ptr)) {
7678 AMT *amtp = (AMT*)mg->mg_ptr;
7679 AMT *namtp = (AMT*)nmg->mg_ptr;
7681 for (i = 1; i < NofAMmeth; i++) {
7682 namtp->table[i] = cv_dup_inc(amtp->table[i]);
7686 else if (mg->mg_len == HEf_SVKEY)
7687 nmg->mg_ptr = (char*)sv_dup_inc((SV*)mg->mg_ptr);
7695 Perl_ptr_table_new(pTHX)
7698 Newz(0, tbl, 1, PTR_TBL_t);
7701 Newz(0, tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
7706 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *tbl, void *sv)
7708 PTR_TBL_ENT_t *tblent;
7709 UV hash = PTR2UV(sv);
7711 tblent = tbl->tbl_ary[hash & tbl->tbl_max];
7712 for (; tblent; tblent = tblent->next) {
7713 if (tblent->oldval == sv)
7714 return tblent->newval;
7720 Perl_ptr_table_store(pTHX_ PTR_TBL_t *tbl, void *oldv, void *newv)
7722 PTR_TBL_ENT_t *tblent, **otblent;
7723 /* XXX this may be pessimal on platforms where pointers aren't good
7724 * hash values e.g. if they grow faster in the most significant
7726 UV hash = PTR2UV(oldv);
7730 otblent = &tbl->tbl_ary[hash & tbl->tbl_max];
7731 for (tblent = *otblent; tblent; i=0, tblent = tblent->next) {
7732 if (tblent->oldval == oldv) {
7733 tblent->newval = newv;
7738 Newz(0, tblent, 1, PTR_TBL_ENT_t);
7739 tblent->oldval = oldv;
7740 tblent->newval = newv;
7741 tblent->next = *otblent;
7744 if (i && tbl->tbl_items > tbl->tbl_max)
7745 ptr_table_split(tbl);
7749 Perl_ptr_table_split(pTHX_ PTR_TBL_t *tbl)
7751 PTR_TBL_ENT_t **ary = tbl->tbl_ary;
7752 UV oldsize = tbl->tbl_max + 1;
7753 UV newsize = oldsize * 2;
7756 Renew(ary, newsize, PTR_TBL_ENT_t*);
7757 Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
7758 tbl->tbl_max = --newsize;
7760 for (i=0; i < oldsize; i++, ary++) {
7761 PTR_TBL_ENT_t **curentp, **entp, *ent;
7764 curentp = ary + oldsize;
7765 for (entp = ary, ent = *ary; ent; ent = *entp) {
7766 if ((newsize & PTR2UV(ent->oldval)) != i) {
7768 ent->next = *curentp;
7779 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *tbl)
7781 register PTR_TBL_ENT_t **array;
7782 register PTR_TBL_ENT_t *entry;
7783 register PTR_TBL_ENT_t *oentry = Null(PTR_TBL_ENT_t*);
7787 if (!tbl || !tbl->tbl_items) {
7791 array = tbl->tbl_ary;
7798 entry = entry->next;
7802 if (++riter > max) {
7805 entry = array[riter];
7813 Perl_ptr_table_free(pTHX_ PTR_TBL_t *tbl)
7818 ptr_table_clear(tbl);
7819 Safefree(tbl->tbl_ary);
7828 S_gv_share(pTHX_ SV *sstr)
7831 SV *sv = &PL_sv_no; /* just need SvREADONLY-ness */
7833 if (GvIO(gv) || GvFORM(gv)) {
7834 GvSHARED_off(gv); /* GvIOs cannot be shared. nor can GvFORMs */
7836 else if (!GvCV(gv)) {
7840 /* CvPADLISTs cannot be shared */
7841 if (!CvXSUB(GvCV(gv))) {
7846 if (!GvSHARED(gv)) {
7848 PerlIO_printf(Perl_debug_log, "gv_share: unable to share %s::%s\n",
7849 HvNAME(GvSTASH(gv)), GvNAME(gv));
7855 * write attempts will die with
7856 * "Modification of a read-only value attempted"
7862 SvREADONLY_on(GvSV(gv));
7869 SvREADONLY_on(GvAV(gv));
7876 SvREADONLY_on(GvAV(gv));
7879 return sstr; /* he_dup() will SvREFCNT_inc() */
7883 Perl_sv_dup(pTHX_ SV *sstr)
7887 if (!sstr || SvTYPE(sstr) == SVTYPEMASK)
7889 /* look for it in the table first */
7890 dstr = (SV*)ptr_table_fetch(PL_ptr_table, sstr);
7894 /* create anew and remember what it is */
7896 ptr_table_store(PL_ptr_table, sstr, dstr);
7899 SvFLAGS(dstr) = SvFLAGS(sstr);
7900 SvFLAGS(dstr) &= ~SVf_OOK; /* don't propagate OOK hack */
7901 SvREFCNT(dstr) = 0; /* must be before any other dups! */
7904 if (SvANY(sstr) && PL_watch_pvx && SvPVX(sstr) == PL_watch_pvx)
7905 PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
7906 PL_watch_pvx, SvPVX(sstr));
7909 switch (SvTYPE(sstr)) {
7914 SvANY(dstr) = new_XIV();
7915 SvIVX(dstr) = SvIVX(sstr);
7918 SvANY(dstr) = new_XNV();
7919 SvNVX(dstr) = SvNVX(sstr);
7922 SvANY(dstr) = new_XRV();
7923 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7926 SvANY(dstr) = new_XPV();
7927 SvCUR(dstr) = SvCUR(sstr);
7928 SvLEN(dstr) = SvLEN(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_XPVIV();
7938 SvCUR(dstr) = SvCUR(sstr);
7939 SvLEN(dstr) = SvLEN(sstr);
7940 SvIVX(dstr) = SvIVX(sstr);
7942 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7943 else if (SvPVX(sstr) && SvLEN(sstr))
7944 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7946 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7949 SvANY(dstr) = new_XPVNV();
7950 SvCUR(dstr) = SvCUR(sstr);
7951 SvLEN(dstr) = SvLEN(sstr);
7952 SvIVX(dstr) = SvIVX(sstr);
7953 SvNVX(dstr) = SvNVX(sstr);
7955 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7956 else if (SvPVX(sstr) && SvLEN(sstr))
7957 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7959 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7962 SvANY(dstr) = new_XPVMG();
7963 SvCUR(dstr) = SvCUR(sstr);
7964 SvLEN(dstr) = SvLEN(sstr);
7965 SvIVX(dstr) = SvIVX(sstr);
7966 SvNVX(dstr) = SvNVX(sstr);
7967 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7968 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7970 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7971 else if (SvPVX(sstr) && SvLEN(sstr))
7972 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7974 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7977 SvANY(dstr) = new_XPVBM();
7978 SvCUR(dstr) = SvCUR(sstr);
7979 SvLEN(dstr) = SvLEN(sstr);
7980 SvIVX(dstr) = SvIVX(sstr);
7981 SvNVX(dstr) = SvNVX(sstr);
7982 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7983 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7985 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7986 else if (SvPVX(sstr) && SvLEN(sstr))
7987 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7989 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7990 BmRARE(dstr) = BmRARE(sstr);
7991 BmUSEFUL(dstr) = BmUSEFUL(sstr);
7992 BmPREVIOUS(dstr)= BmPREVIOUS(sstr);
7995 SvANY(dstr) = new_XPVLV();
7996 SvCUR(dstr) = SvCUR(sstr);
7997 SvLEN(dstr) = SvLEN(sstr);
7998 SvIVX(dstr) = SvIVX(sstr);
7999 SvNVX(dstr) = SvNVX(sstr);
8000 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
8001 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
8003 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
8004 else if (SvPVX(sstr) && SvLEN(sstr))
8005 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
8007 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
8008 LvTARGOFF(dstr) = LvTARGOFF(sstr); /* XXX sometimes holds PMOP* when DEBUGGING */
8009 LvTARGLEN(dstr) = LvTARGLEN(sstr);
8010 LvTARG(dstr) = sv_dup_inc(LvTARG(sstr));
8011 LvTYPE(dstr) = LvTYPE(sstr);
8014 if (GvSHARED((GV*)sstr)) {
8016 if ((share = gv_share(sstr))) {
8020 PerlIO_printf(Perl_debug_log, "sv_dup: sharing %s::%s\n",
8021 HvNAME(GvSTASH(share)), GvNAME(share));
8026 SvANY(dstr) = new_XPVGV();
8027 SvCUR(dstr) = SvCUR(sstr);
8028 SvLEN(dstr) = SvLEN(sstr);
8029 SvIVX(dstr) = SvIVX(sstr);
8030 SvNVX(dstr) = SvNVX(sstr);
8031 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
8032 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
8034 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
8035 else if (SvPVX(sstr) && SvLEN(sstr))
8036 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
8038 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
8039 GvNAMELEN(dstr) = GvNAMELEN(sstr);
8040 GvNAME(dstr) = SAVEPVN(GvNAME(sstr), GvNAMELEN(sstr));
8041 GvSTASH(dstr) = hv_dup_inc(GvSTASH(sstr));
8042 GvFLAGS(dstr) = GvFLAGS(sstr);
8043 GvGP(dstr) = gp_dup(GvGP(sstr));
8044 (void)GpREFCNT_inc(GvGP(dstr));
8047 SvANY(dstr) = new_XPVIO();
8048 SvCUR(dstr) = SvCUR(sstr);
8049 SvLEN(dstr) = SvLEN(sstr);
8050 SvIVX(dstr) = SvIVX(sstr);
8051 SvNVX(dstr) = SvNVX(sstr);
8052 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
8053 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
8055 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
8056 else if (SvPVX(sstr) && SvLEN(sstr))
8057 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
8059 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
8060 IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(sstr));
8061 if (IoOFP(sstr) == IoIFP(sstr))
8062 IoOFP(dstr) = IoIFP(dstr);
8064 IoOFP(dstr) = fp_dup(IoOFP(sstr), IoTYPE(sstr));
8065 /* PL_rsfp_filters entries have fake IoDIRP() */
8066 if (IoDIRP(sstr) && !(IoFLAGS(sstr) & IOf_FAKE_DIRP))
8067 IoDIRP(dstr) = dirp_dup(IoDIRP(sstr));
8069 IoDIRP(dstr) = IoDIRP(sstr);
8070 IoLINES(dstr) = IoLINES(sstr);
8071 IoPAGE(dstr) = IoPAGE(sstr);
8072 IoPAGE_LEN(dstr) = IoPAGE_LEN(sstr);
8073 IoLINES_LEFT(dstr) = IoLINES_LEFT(sstr);
8074 IoTOP_NAME(dstr) = SAVEPV(IoTOP_NAME(sstr));
8075 IoTOP_GV(dstr) = gv_dup(IoTOP_GV(sstr));
8076 IoFMT_NAME(dstr) = SAVEPV(IoFMT_NAME(sstr));
8077 IoFMT_GV(dstr) = gv_dup(IoFMT_GV(sstr));
8078 IoBOTTOM_NAME(dstr) = SAVEPV(IoBOTTOM_NAME(sstr));
8079 IoBOTTOM_GV(dstr) = gv_dup(IoBOTTOM_GV(sstr));
8080 IoSUBPROCESS(dstr) = IoSUBPROCESS(sstr);
8081 IoTYPE(dstr) = IoTYPE(sstr);
8082 IoFLAGS(dstr) = IoFLAGS(sstr);
8085 SvANY(dstr) = new_XPVAV();
8086 SvCUR(dstr) = SvCUR(sstr);
8087 SvLEN(dstr) = SvLEN(sstr);
8088 SvIVX(dstr) = SvIVX(sstr);
8089 SvNVX(dstr) = SvNVX(sstr);
8090 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
8091 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
8092 AvARYLEN((AV*)dstr) = sv_dup_inc(AvARYLEN((AV*)sstr));
8093 AvFLAGS((AV*)dstr) = AvFLAGS((AV*)sstr);
8094 if (AvARRAY((AV*)sstr)) {
8095 SV **dst_ary, **src_ary;
8096 SSize_t items = AvFILLp((AV*)sstr) + 1;
8098 src_ary = AvARRAY((AV*)sstr);
8099 Newz(0, dst_ary, AvMAX((AV*)sstr)+1, SV*);
8100 ptr_table_store(PL_ptr_table, src_ary, dst_ary);
8101 SvPVX(dstr) = (char*)dst_ary;
8102 AvALLOC((AV*)dstr) = dst_ary;
8103 if (AvREAL((AV*)sstr)) {
8105 *dst_ary++ = sv_dup_inc(*src_ary++);
8109 *dst_ary++ = sv_dup(*src_ary++);
8111 items = AvMAX((AV*)sstr) - AvFILLp((AV*)sstr);
8112 while (items-- > 0) {
8113 *dst_ary++ = &PL_sv_undef;
8117 SvPVX(dstr) = Nullch;
8118 AvALLOC((AV*)dstr) = (SV**)NULL;
8122 SvANY(dstr) = new_XPVHV();
8123 SvCUR(dstr) = SvCUR(sstr);
8124 SvLEN(dstr) = SvLEN(sstr);
8125 SvIVX(dstr) = SvIVX(sstr);
8126 SvNVX(dstr) = SvNVX(sstr);
8127 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
8128 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
8129 HvRITER((HV*)dstr) = HvRITER((HV*)sstr);
8130 if (HvARRAY((HV*)sstr)) {
8132 XPVHV *dxhv = (XPVHV*)SvANY(dstr);
8133 XPVHV *sxhv = (XPVHV*)SvANY(sstr);
8134 Newz(0, dxhv->xhv_array,
8135 PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1), char);
8136 while (i <= sxhv->xhv_max) {
8137 ((HE**)dxhv->xhv_array)[i] = he_dup(((HE**)sxhv->xhv_array)[i],
8138 !!HvSHAREKEYS(sstr));
8141 dxhv->xhv_eiter = he_dup(sxhv->xhv_eiter, !!HvSHAREKEYS(sstr));
8144 SvPVX(dstr) = Nullch;
8145 HvEITER((HV*)dstr) = (HE*)NULL;
8147 HvPMROOT((HV*)dstr) = HvPMROOT((HV*)sstr); /* XXX */
8148 HvNAME((HV*)dstr) = SAVEPV(HvNAME((HV*)sstr));
8151 SvANY(dstr) = new_XPVFM();
8152 FmLINES(dstr) = FmLINES(sstr);
8156 SvANY(dstr) = new_XPVCV();
8158 SvCUR(dstr) = SvCUR(sstr);
8159 SvLEN(dstr) = SvLEN(sstr);
8160 SvIVX(dstr) = SvIVX(sstr);
8161 SvNVX(dstr) = SvNVX(sstr);
8162 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
8163 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
8164 if (SvPVX(sstr) && SvLEN(sstr))
8165 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
8167 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
8168 CvSTASH(dstr) = hv_dup(CvSTASH(sstr));/* NOTE: not refcounted */
8169 CvSTART(dstr) = CvSTART(sstr);
8170 CvROOT(dstr) = OpREFCNT_inc(CvROOT(sstr));
8171 CvXSUB(dstr) = CvXSUB(sstr);
8172 CvXSUBANY(dstr) = CvXSUBANY(sstr);
8173 CvGV(dstr) = gv_dup_inc(CvGV(sstr));
8174 CvDEPTH(dstr) = CvDEPTH(sstr);
8175 if (CvPADLIST(sstr) && !AvREAL(CvPADLIST(sstr))) {
8176 /* XXX padlists are real, but pretend to be not */
8177 AvREAL_on(CvPADLIST(sstr));
8178 CvPADLIST(dstr) = av_dup_inc(CvPADLIST(sstr));
8179 AvREAL_off(CvPADLIST(sstr));
8180 AvREAL_off(CvPADLIST(dstr));
8183 CvPADLIST(dstr) = av_dup_inc(CvPADLIST(sstr));
8184 CvOUTSIDE(dstr) = cv_dup_inc(CvOUTSIDE(sstr));
8185 CvFLAGS(dstr) = CvFLAGS(sstr);
8188 Perl_croak(aTHX_ "Bizarre SvTYPE [%d]", SvTYPE(sstr));
8192 if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
8199 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max)
8204 return (PERL_CONTEXT*)NULL;
8206 /* look for it in the table first */
8207 ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
8211 /* create anew and remember what it is */
8212 Newz(56, ncxs, max + 1, PERL_CONTEXT);
8213 ptr_table_store(PL_ptr_table, cxs, ncxs);
8216 PERL_CONTEXT *cx = &cxs[ix];
8217 PERL_CONTEXT *ncx = &ncxs[ix];
8218 ncx->cx_type = cx->cx_type;
8219 if (CxTYPE(cx) == CXt_SUBST) {
8220 Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
8223 ncx->blk_oldsp = cx->blk_oldsp;
8224 ncx->blk_oldcop = cx->blk_oldcop;
8225 ncx->blk_oldretsp = cx->blk_oldretsp;
8226 ncx->blk_oldmarksp = cx->blk_oldmarksp;
8227 ncx->blk_oldscopesp = cx->blk_oldscopesp;
8228 ncx->blk_oldpm = cx->blk_oldpm;
8229 ncx->blk_gimme = cx->blk_gimme;
8230 switch (CxTYPE(cx)) {
8232 ncx->blk_sub.cv = (cx->blk_sub.olddepth == 0
8233 ? cv_dup_inc(cx->blk_sub.cv)
8234 : cv_dup(cx->blk_sub.cv));
8235 ncx->blk_sub.argarray = (cx->blk_sub.hasargs
8236 ? av_dup_inc(cx->blk_sub.argarray)
8238 ncx->blk_sub.savearray = av_dup(cx->blk_sub.savearray);
8239 ncx->blk_sub.olddepth = cx->blk_sub.olddepth;
8240 ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
8241 ncx->blk_sub.lval = cx->blk_sub.lval;
8244 ncx->blk_eval.old_in_eval = cx->blk_eval.old_in_eval;
8245 ncx->blk_eval.old_op_type = cx->blk_eval.old_op_type;
8246 ncx->blk_eval.old_namesv = sv_dup_inc(cx->blk_eval.old_namesv);
8247 ncx->blk_eval.old_eval_root = cx->blk_eval.old_eval_root;
8248 ncx->blk_eval.cur_text = sv_dup(cx->blk_eval.cur_text);
8251 ncx->blk_loop.label = cx->blk_loop.label;
8252 ncx->blk_loop.resetsp = cx->blk_loop.resetsp;
8253 ncx->blk_loop.redo_op = cx->blk_loop.redo_op;
8254 ncx->blk_loop.next_op = cx->blk_loop.next_op;
8255 ncx->blk_loop.last_op = cx->blk_loop.last_op;
8256 ncx->blk_loop.iterdata = (CxPADLOOP(cx)
8257 ? cx->blk_loop.iterdata
8258 : gv_dup((GV*)cx->blk_loop.iterdata));
8259 ncx->blk_loop.oldcurpad
8260 = (SV**)ptr_table_fetch(PL_ptr_table,
8261 cx->blk_loop.oldcurpad);
8262 ncx->blk_loop.itersave = sv_dup_inc(cx->blk_loop.itersave);
8263 ncx->blk_loop.iterlval = sv_dup_inc(cx->blk_loop.iterlval);
8264 ncx->blk_loop.iterary = av_dup_inc(cx->blk_loop.iterary);
8265 ncx->blk_loop.iterix = cx->blk_loop.iterix;
8266 ncx->blk_loop.itermax = cx->blk_loop.itermax;
8269 ncx->blk_sub.cv = cv_dup(cx->blk_sub.cv);
8270 ncx->blk_sub.gv = gv_dup(cx->blk_sub.gv);
8271 ncx->blk_sub.dfoutgv = gv_dup_inc(cx->blk_sub.dfoutgv);
8272 ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
8285 Perl_si_dup(pTHX_ PERL_SI *si)
8290 return (PERL_SI*)NULL;
8292 /* look for it in the table first */
8293 nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
8297 /* create anew and remember what it is */
8298 Newz(56, nsi, 1, PERL_SI);
8299 ptr_table_store(PL_ptr_table, si, nsi);
8301 nsi->si_stack = av_dup_inc(si->si_stack);
8302 nsi->si_cxix = si->si_cxix;
8303 nsi->si_cxmax = si->si_cxmax;
8304 nsi->si_cxstack = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax);
8305 nsi->si_type = si->si_type;
8306 nsi->si_prev = si_dup(si->si_prev);
8307 nsi->si_next = si_dup(si->si_next);
8308 nsi->si_markoff = si->si_markoff;
8313 #define POPINT(ss,ix) ((ss)[--(ix)].any_i32)
8314 #define TOPINT(ss,ix) ((ss)[ix].any_i32)
8315 #define POPLONG(ss,ix) ((ss)[--(ix)].any_long)
8316 #define TOPLONG(ss,ix) ((ss)[ix].any_long)
8317 #define POPIV(ss,ix) ((ss)[--(ix)].any_iv)
8318 #define TOPIV(ss,ix) ((ss)[ix].any_iv)
8319 #define POPPTR(ss,ix) ((ss)[--(ix)].any_ptr)
8320 #define TOPPTR(ss,ix) ((ss)[ix].any_ptr)
8321 #define POPDPTR(ss,ix) ((ss)[--(ix)].any_dptr)
8322 #define TOPDPTR(ss,ix) ((ss)[ix].any_dptr)
8323 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
8324 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
8327 #define pv_dup_inc(p) SAVEPV(p)
8328 #define pv_dup(p) SAVEPV(p)
8329 #define svp_dup_inc(p,pp) any_dup(p,pp)
8332 Perl_any_dup(pTHX_ void *v, PerlInterpreter *proto_perl)
8339 /* look for it in the table first */
8340 ret = ptr_table_fetch(PL_ptr_table, v);
8344 /* see if it is part of the interpreter structure */
8345 if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
8346 ret = (void*)(((char*)aTHXo) + (((char*)v) - (char*)proto_perl));
8354 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl)
8356 ANY *ss = proto_perl->Tsavestack;
8357 I32 ix = proto_perl->Tsavestack_ix;
8358 I32 max = proto_perl->Tsavestack_max;
8371 void (*dptr) (void*);
8372 void (*dxptr) (pTHXo_ void*);
8375 Newz(54, nss, max, ANY);
8381 case SAVEt_ITEM: /* normal string */
8382 sv = (SV*)POPPTR(ss,ix);
8383 TOPPTR(nss,ix) = sv_dup_inc(sv);
8384 sv = (SV*)POPPTR(ss,ix);
8385 TOPPTR(nss,ix) = sv_dup_inc(sv);
8387 case SAVEt_SV: /* scalar reference */
8388 sv = (SV*)POPPTR(ss,ix);
8389 TOPPTR(nss,ix) = sv_dup_inc(sv);
8390 gv = (GV*)POPPTR(ss,ix);
8391 TOPPTR(nss,ix) = gv_dup_inc(gv);
8393 case SAVEt_GENERIC_PVREF: /* generic char* */
8394 c = (char*)POPPTR(ss,ix);
8395 TOPPTR(nss,ix) = pv_dup(c);
8396 ptr = POPPTR(ss,ix);
8397 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8399 case SAVEt_GENERIC_SVREF: /* generic sv */
8400 case SAVEt_SVREF: /* scalar reference */
8401 sv = (SV*)POPPTR(ss,ix);
8402 TOPPTR(nss,ix) = sv_dup_inc(sv);
8403 ptr = POPPTR(ss,ix);
8404 TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
8406 case SAVEt_AV: /* array reference */
8407 av = (AV*)POPPTR(ss,ix);
8408 TOPPTR(nss,ix) = av_dup_inc(av);
8409 gv = (GV*)POPPTR(ss,ix);
8410 TOPPTR(nss,ix) = gv_dup(gv);
8412 case SAVEt_HV: /* hash reference */
8413 hv = (HV*)POPPTR(ss,ix);
8414 TOPPTR(nss,ix) = hv_dup_inc(hv);
8415 gv = (GV*)POPPTR(ss,ix);
8416 TOPPTR(nss,ix) = gv_dup(gv);
8418 case SAVEt_INT: /* int reference */
8419 ptr = POPPTR(ss,ix);
8420 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8421 intval = (int)POPINT(ss,ix);
8422 TOPINT(nss,ix) = intval;
8424 case SAVEt_LONG: /* long reference */
8425 ptr = POPPTR(ss,ix);
8426 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8427 longval = (long)POPLONG(ss,ix);
8428 TOPLONG(nss,ix) = longval;
8430 case SAVEt_I32: /* I32 reference */
8431 case SAVEt_I16: /* I16 reference */
8432 case SAVEt_I8: /* I8 reference */
8433 ptr = POPPTR(ss,ix);
8434 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8438 case SAVEt_IV: /* IV reference */
8439 ptr = POPPTR(ss,ix);
8440 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8444 case SAVEt_SPTR: /* SV* reference */
8445 ptr = POPPTR(ss,ix);
8446 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8447 sv = (SV*)POPPTR(ss,ix);
8448 TOPPTR(nss,ix) = sv_dup(sv);
8450 case SAVEt_VPTR: /* random* reference */
8451 ptr = POPPTR(ss,ix);
8452 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8453 ptr = POPPTR(ss,ix);
8454 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8456 case SAVEt_PPTR: /* char* reference */
8457 ptr = POPPTR(ss,ix);
8458 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8459 c = (char*)POPPTR(ss,ix);
8460 TOPPTR(nss,ix) = pv_dup(c);
8462 case SAVEt_HPTR: /* HV* reference */
8463 ptr = POPPTR(ss,ix);
8464 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8465 hv = (HV*)POPPTR(ss,ix);
8466 TOPPTR(nss,ix) = hv_dup(hv);
8468 case SAVEt_APTR: /* AV* reference */
8469 ptr = POPPTR(ss,ix);
8470 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8471 av = (AV*)POPPTR(ss,ix);
8472 TOPPTR(nss,ix) = av_dup(av);
8475 gv = (GV*)POPPTR(ss,ix);
8476 TOPPTR(nss,ix) = gv_dup(gv);
8478 case SAVEt_GP: /* scalar reference */
8479 gp = (GP*)POPPTR(ss,ix);
8480 TOPPTR(nss,ix) = gp = gp_dup(gp);
8481 (void)GpREFCNT_inc(gp);
8482 gv = (GV*)POPPTR(ss,ix);
8483 TOPPTR(nss,ix) = gv_dup_inc(c);
8484 c = (char*)POPPTR(ss,ix);
8485 TOPPTR(nss,ix) = pv_dup(c);
8492 sv = (SV*)POPPTR(ss,ix);
8493 TOPPTR(nss,ix) = sv_dup_inc(sv);
8496 ptr = POPPTR(ss,ix);
8497 if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
8498 /* these are assumed to be refcounted properly */
8499 switch (((OP*)ptr)->op_type) {
8506 TOPPTR(nss,ix) = ptr;
8511 TOPPTR(nss,ix) = Nullop;
8516 TOPPTR(nss,ix) = Nullop;
8519 c = (char*)POPPTR(ss,ix);
8520 TOPPTR(nss,ix) = pv_dup_inc(c);
8523 longval = POPLONG(ss,ix);
8524 TOPLONG(nss,ix) = longval;
8527 hv = (HV*)POPPTR(ss,ix);
8528 TOPPTR(nss,ix) = hv_dup_inc(hv);
8529 c = (char*)POPPTR(ss,ix);
8530 TOPPTR(nss,ix) = pv_dup_inc(c);
8534 case SAVEt_DESTRUCTOR:
8535 ptr = POPPTR(ss,ix);
8536 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
8537 dptr = POPDPTR(ss,ix);
8538 TOPDPTR(nss,ix) = (void (*)(void*))any_dup((void *)dptr, proto_perl);
8540 case SAVEt_DESTRUCTOR_X:
8541 ptr = POPPTR(ss,ix);
8542 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
8543 dxptr = POPDXPTR(ss,ix);
8544 TOPDXPTR(nss,ix) = (void (*)(pTHXo_ void*))any_dup((void *)dxptr, proto_perl);
8546 case SAVEt_REGCONTEXT:
8552 case SAVEt_STACK_POS: /* Position on Perl stack */
8556 case SAVEt_AELEM: /* array element */
8557 sv = (SV*)POPPTR(ss,ix);
8558 TOPPTR(nss,ix) = sv_dup_inc(sv);
8561 av = (AV*)POPPTR(ss,ix);
8562 TOPPTR(nss,ix) = av_dup_inc(av);
8564 case SAVEt_HELEM: /* hash element */
8565 sv = (SV*)POPPTR(ss,ix);
8566 TOPPTR(nss,ix) = sv_dup_inc(sv);
8567 sv = (SV*)POPPTR(ss,ix);
8568 TOPPTR(nss,ix) = sv_dup_inc(sv);
8569 hv = (HV*)POPPTR(ss,ix);
8570 TOPPTR(nss,ix) = hv_dup_inc(hv);
8573 ptr = POPPTR(ss,ix);
8574 TOPPTR(nss,ix) = ptr;
8581 av = (AV*)POPPTR(ss,ix);
8582 TOPPTR(nss,ix) = av_dup(av);
8585 longval = (long)POPLONG(ss,ix);
8586 TOPLONG(nss,ix) = longval;
8587 ptr = POPPTR(ss,ix);
8588 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8589 sv = (SV*)POPPTR(ss,ix);
8590 TOPPTR(nss,ix) = sv_dup(sv);
8593 Perl_croak(aTHX_ "panic: ss_dup inconsistency");
8605 perl_clone(PerlInterpreter *proto_perl, UV flags)
8608 CPerlObj *pPerl = (CPerlObj*)proto_perl;
8611 #ifdef PERL_IMPLICIT_SYS
8612 return perl_clone_using(proto_perl, flags,
8614 proto_perl->IMemShared,
8615 proto_perl->IMemParse,
8625 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
8626 struct IPerlMem* ipM, struct IPerlMem* ipMS,
8627 struct IPerlMem* ipMP, struct IPerlEnv* ipE,
8628 struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
8629 struct IPerlDir* ipD, struct IPerlSock* ipS,
8630 struct IPerlProc* ipP)
8632 /* XXX many of the string copies here can be optimized if they're
8633 * constants; they need to be allocated as common memory and just
8634 * their pointers copied. */
8638 CPerlObj *pPerl = new(ipM) CPerlObj(ipM, ipMS, ipMP, ipE, ipStd, ipLIO,
8640 PERL_SET_THX(pPerl);
8641 # else /* !PERL_OBJECT */
8642 PerlInterpreter *my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
8643 PERL_SET_THX(my_perl);
8646 memset(my_perl, 0xab, sizeof(PerlInterpreter));
8652 # else /* !DEBUGGING */
8653 Zero(my_perl, 1, PerlInterpreter);
8654 # endif /* DEBUGGING */
8658 PL_MemShared = ipMS;
8666 # endif /* PERL_OBJECT */
8667 #else /* !PERL_IMPLICIT_SYS */
8669 PerlInterpreter *my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
8670 PERL_SET_THX(my_perl);
8673 memset(my_perl, 0xab, sizeof(PerlInterpreter));
8679 # else /* !DEBUGGING */
8680 Zero(my_perl, 1, PerlInterpreter);
8681 # endif /* DEBUGGING */
8682 #endif /* PERL_IMPLICIT_SYS */
8685 PL_xiv_arenaroot = NULL;
8687 PL_xnv_arenaroot = NULL;
8689 PL_xrv_arenaroot = NULL;
8691 PL_xpv_arenaroot = NULL;
8693 PL_xpviv_arenaroot = NULL;
8694 PL_xpviv_root = NULL;
8695 PL_xpvnv_arenaroot = NULL;
8696 PL_xpvnv_root = NULL;
8697 PL_xpvcv_arenaroot = NULL;
8698 PL_xpvcv_root = NULL;
8699 PL_xpvav_arenaroot = NULL;
8700 PL_xpvav_root = NULL;
8701 PL_xpvhv_arenaroot = NULL;
8702 PL_xpvhv_root = NULL;
8703 PL_xpvmg_arenaroot = NULL;
8704 PL_xpvmg_root = NULL;
8705 PL_xpvlv_arenaroot = NULL;
8706 PL_xpvlv_root = NULL;
8707 PL_xpvbm_arenaroot = NULL;
8708 PL_xpvbm_root = NULL;
8709 PL_he_arenaroot = NULL;
8711 PL_nice_chunk = NULL;
8712 PL_nice_chunk_size = 0;
8715 PL_sv_root = Nullsv;
8716 PL_sv_arenaroot = Nullsv;
8718 PL_debug = proto_perl->Idebug;
8720 /* create SV map for pointer relocation */
8721 PL_ptr_table = ptr_table_new();
8723 /* initialize these special pointers as early as possible */
8724 SvANY(&PL_sv_undef) = NULL;
8725 SvREFCNT(&PL_sv_undef) = (~(U32)0)/2;
8726 SvFLAGS(&PL_sv_undef) = SVf_READONLY|SVt_NULL;
8727 ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
8730 SvUPGRADE(&PL_sv_no, SVt_PVNV);
8732 SvANY(&PL_sv_no) = new_XPVNV();
8734 SvREFCNT(&PL_sv_no) = (~(U32)0)/2;
8735 SvFLAGS(&PL_sv_no) = SVp_NOK|SVf_NOK|SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
8736 SvPVX(&PL_sv_no) = SAVEPVN(PL_No, 0);
8737 SvCUR(&PL_sv_no) = 0;
8738 SvLEN(&PL_sv_no) = 1;
8739 SvNVX(&PL_sv_no) = 0;
8740 ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
8743 SvUPGRADE(&PL_sv_yes, SVt_PVNV);
8745 SvANY(&PL_sv_yes) = new_XPVNV();
8747 SvREFCNT(&PL_sv_yes) = (~(U32)0)/2;
8748 SvFLAGS(&PL_sv_yes) = SVp_NOK|SVf_NOK|SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
8749 SvPVX(&PL_sv_yes) = SAVEPVN(PL_Yes, 1);
8750 SvCUR(&PL_sv_yes) = 1;
8751 SvLEN(&PL_sv_yes) = 2;
8752 SvNVX(&PL_sv_yes) = 1;
8753 ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
8755 /* create shared string table */
8756 PL_strtab = newHV();
8757 HvSHAREKEYS_off(PL_strtab);
8758 hv_ksplit(PL_strtab, 512);
8759 ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
8761 PL_compiling = proto_perl->Icompiling;
8762 PL_compiling.cop_stashpv = SAVEPV(PL_compiling.cop_stashpv);
8763 PL_compiling.cop_file = SAVEPV(PL_compiling.cop_file);
8764 ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
8765 if (!specialWARN(PL_compiling.cop_warnings))
8766 PL_compiling.cop_warnings = sv_dup_inc(PL_compiling.cop_warnings);
8767 if (!specialCopIO(PL_compiling.cop_io))
8768 PL_compiling.cop_io = sv_dup_inc(PL_compiling.cop_io);
8769 PL_curcop = (COP*)any_dup(proto_perl->Tcurcop, proto_perl);
8771 /* pseudo environmental stuff */
8772 PL_origargc = proto_perl->Iorigargc;
8774 New(0, PL_origargv, i+1, char*);
8775 PL_origargv[i] = '\0';
8777 PL_origargv[i] = SAVEPV(proto_perl->Iorigargv[i]);
8779 PL_envgv = gv_dup(proto_perl->Ienvgv);
8780 PL_incgv = gv_dup(proto_perl->Iincgv);
8781 PL_hintgv = gv_dup(proto_perl->Ihintgv);
8782 PL_origfilename = SAVEPV(proto_perl->Iorigfilename);
8783 PL_diehook = sv_dup_inc(proto_perl->Idiehook);
8784 PL_warnhook = sv_dup_inc(proto_perl->Iwarnhook);
8787 PL_minus_c = proto_perl->Iminus_c;
8788 PL_patchlevel = sv_dup_inc(proto_perl->Ipatchlevel);
8789 PL_localpatches = proto_perl->Ilocalpatches;
8790 PL_splitstr = proto_perl->Isplitstr;
8791 PL_preprocess = proto_perl->Ipreprocess;
8792 PL_minus_n = proto_perl->Iminus_n;
8793 PL_minus_p = proto_perl->Iminus_p;
8794 PL_minus_l = proto_perl->Iminus_l;
8795 PL_minus_a = proto_perl->Iminus_a;
8796 PL_minus_F = proto_perl->Iminus_F;
8797 PL_doswitches = proto_perl->Idoswitches;
8798 PL_dowarn = proto_perl->Idowarn;
8799 PL_doextract = proto_perl->Idoextract;
8800 PL_sawampersand = proto_perl->Isawampersand;
8801 PL_unsafe = proto_perl->Iunsafe;
8802 PL_inplace = SAVEPV(proto_perl->Iinplace);
8803 PL_e_script = sv_dup_inc(proto_perl->Ie_script);
8804 PL_perldb = proto_perl->Iperldb;
8805 PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
8807 /* magical thingies */
8808 /* XXX time(&PL_basetime) when asked for? */
8809 PL_basetime = proto_perl->Ibasetime;
8810 PL_formfeed = sv_dup(proto_perl->Iformfeed);
8812 PL_maxsysfd = proto_perl->Imaxsysfd;
8813 PL_multiline = proto_perl->Imultiline;
8814 PL_statusvalue = proto_perl->Istatusvalue;
8816 PL_statusvalue_vms = proto_perl->Istatusvalue_vms;
8819 /* shortcuts to various I/O objects */
8820 PL_stdingv = gv_dup(proto_perl->Istdingv);
8821 PL_stderrgv = gv_dup(proto_perl->Istderrgv);
8822 PL_defgv = gv_dup(proto_perl->Idefgv);
8823 PL_argvgv = gv_dup(proto_perl->Iargvgv);
8824 PL_argvoutgv = gv_dup(proto_perl->Iargvoutgv);
8825 PL_argvout_stack = av_dup(proto_perl->Iargvout_stack);
8827 /* shortcuts to regexp stuff */
8828 PL_replgv = gv_dup(proto_perl->Ireplgv);
8830 /* shortcuts to misc objects */
8831 PL_errgv = gv_dup(proto_perl->Ierrgv);
8833 /* shortcuts to debugging objects */
8834 PL_DBgv = gv_dup(proto_perl->IDBgv);
8835 PL_DBline = gv_dup(proto_perl->IDBline);
8836 PL_DBsub = gv_dup(proto_perl->IDBsub);
8837 PL_DBsingle = sv_dup(proto_perl->IDBsingle);
8838 PL_DBtrace = sv_dup(proto_perl->IDBtrace);
8839 PL_DBsignal = sv_dup(proto_perl->IDBsignal);
8840 PL_lineary = av_dup(proto_perl->Ilineary);
8841 PL_dbargs = av_dup(proto_perl->Idbargs);
8844 PL_defstash = hv_dup_inc(proto_perl->Tdefstash);
8845 PL_curstash = hv_dup(proto_perl->Tcurstash);
8846 PL_debstash = hv_dup(proto_perl->Idebstash);
8847 PL_globalstash = hv_dup(proto_perl->Iglobalstash);
8848 PL_curstname = sv_dup_inc(proto_perl->Icurstname);
8850 PL_beginav = av_dup_inc(proto_perl->Ibeginav);
8851 PL_endav = av_dup_inc(proto_perl->Iendav);
8852 PL_checkav = av_dup_inc(proto_perl->Icheckav);
8853 PL_initav = av_dup_inc(proto_perl->Iinitav);
8855 PL_sub_generation = proto_perl->Isub_generation;
8857 /* funky return mechanisms */
8858 PL_forkprocess = proto_perl->Iforkprocess;
8860 /* subprocess state */
8861 PL_fdpid = av_dup_inc(proto_perl->Ifdpid);
8863 /* internal state */
8864 PL_tainting = proto_perl->Itainting;
8865 PL_maxo = proto_perl->Imaxo;
8866 if (proto_perl->Iop_mask)
8867 PL_op_mask = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
8869 PL_op_mask = Nullch;
8871 /* current interpreter roots */
8872 PL_main_cv = cv_dup_inc(proto_perl->Imain_cv);
8873 PL_main_root = OpREFCNT_inc(proto_perl->Imain_root);
8874 PL_main_start = proto_perl->Imain_start;
8875 PL_eval_root = proto_perl->Ieval_root;
8876 PL_eval_start = proto_perl->Ieval_start;
8878 /* runtime control stuff */
8879 PL_curcopdb = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
8880 PL_copline = proto_perl->Icopline;
8882 PL_filemode = proto_perl->Ifilemode;
8883 PL_lastfd = proto_perl->Ilastfd;
8884 PL_oldname = proto_perl->Ioldname; /* XXX not quite right */
8887 PL_gensym = proto_perl->Igensym;
8888 PL_preambled = proto_perl->Ipreambled;
8889 PL_preambleav = av_dup_inc(proto_perl->Ipreambleav);
8890 PL_laststatval = proto_perl->Ilaststatval;
8891 PL_laststype = proto_perl->Ilaststype;
8892 PL_mess_sv = Nullsv;
8894 PL_ors_sv = sv_dup_inc(proto_perl->Iors_sv);
8895 PL_ofmt = SAVEPV(proto_perl->Iofmt);
8897 /* interpreter atexit processing */
8898 PL_exitlistlen = proto_perl->Iexitlistlen;
8899 if (PL_exitlistlen) {
8900 New(0, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
8901 Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
8904 PL_exitlist = (PerlExitListEntry*)NULL;
8905 PL_modglobal = hv_dup_inc(proto_perl->Imodglobal);
8907 PL_profiledata = NULL;
8908 PL_rsfp = fp_dup(proto_perl->Irsfp, '<');
8909 /* PL_rsfp_filters entries have fake IoDIRP() */
8910 PL_rsfp_filters = av_dup_inc(proto_perl->Irsfp_filters);
8912 PL_compcv = cv_dup(proto_perl->Icompcv);
8913 PL_comppad = av_dup(proto_perl->Icomppad);
8914 PL_comppad_name = av_dup(proto_perl->Icomppad_name);
8915 PL_comppad_name_fill = proto_perl->Icomppad_name_fill;
8916 PL_comppad_name_floor = proto_perl->Icomppad_name_floor;
8917 PL_curpad = (SV**)ptr_table_fetch(PL_ptr_table,
8918 proto_perl->Tcurpad);
8920 #ifdef HAVE_INTERP_INTERN
8921 sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
8924 /* more statics moved here */
8925 PL_generation = proto_perl->Igeneration;
8926 PL_DBcv = cv_dup(proto_perl->IDBcv);
8928 PL_in_clean_objs = proto_perl->Iin_clean_objs;
8929 PL_in_clean_all = proto_perl->Iin_clean_all;
8931 PL_uid = proto_perl->Iuid;
8932 PL_euid = proto_perl->Ieuid;
8933 PL_gid = proto_perl->Igid;
8934 PL_egid = proto_perl->Iegid;
8935 PL_nomemok = proto_perl->Inomemok;
8936 PL_an = proto_perl->Ian;
8937 PL_cop_seqmax = proto_perl->Icop_seqmax;
8938 PL_op_seqmax = proto_perl->Iop_seqmax;
8939 PL_evalseq = proto_perl->Ievalseq;
8940 PL_origenviron = proto_perl->Iorigenviron; /* XXX not quite right */
8941 PL_origalen = proto_perl->Iorigalen;
8942 PL_pidstatus = newHV(); /* XXX flag for cloning? */
8943 PL_osname = SAVEPV(proto_perl->Iosname);
8944 PL_sh_path = SAVEPV(proto_perl->Ish_path);
8945 PL_sighandlerp = proto_perl->Isighandlerp;
8948 PL_runops = proto_perl->Irunops;
8950 Copy(proto_perl->Itokenbuf, PL_tokenbuf, 256, char);
8953 PL_cshlen = proto_perl->Icshlen;
8954 PL_cshname = SAVEPVN(proto_perl->Icshname, PL_cshlen);
8957 PL_lex_state = proto_perl->Ilex_state;
8958 PL_lex_defer = proto_perl->Ilex_defer;
8959 PL_lex_expect = proto_perl->Ilex_expect;
8960 PL_lex_formbrack = proto_perl->Ilex_formbrack;
8961 PL_lex_dojoin = proto_perl->Ilex_dojoin;
8962 PL_lex_starts = proto_perl->Ilex_starts;
8963 PL_lex_stuff = sv_dup_inc(proto_perl->Ilex_stuff);
8964 PL_lex_repl = sv_dup_inc(proto_perl->Ilex_repl);
8965 PL_lex_op = proto_perl->Ilex_op;
8966 PL_lex_inpat = proto_perl->Ilex_inpat;
8967 PL_lex_inwhat = proto_perl->Ilex_inwhat;
8968 PL_lex_brackets = proto_perl->Ilex_brackets;
8969 i = (PL_lex_brackets < 120 ? 120 : PL_lex_brackets);
8970 PL_lex_brackstack = SAVEPVN(proto_perl->Ilex_brackstack,i);
8971 PL_lex_casemods = proto_perl->Ilex_casemods;
8972 i = (PL_lex_casemods < 12 ? 12 : PL_lex_casemods);
8973 PL_lex_casestack = SAVEPVN(proto_perl->Ilex_casestack,i);
8975 Copy(proto_perl->Inextval, PL_nextval, 5, YYSTYPE);
8976 Copy(proto_perl->Inexttype, PL_nexttype, 5, I32);
8977 PL_nexttoke = proto_perl->Inexttoke;
8979 PL_linestr = sv_dup_inc(proto_perl->Ilinestr);
8980 i = proto_perl->Ibufptr - SvPVX(proto_perl->Ilinestr);
8981 PL_bufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8982 i = proto_perl->Ioldbufptr - SvPVX(proto_perl->Ilinestr);
8983 PL_oldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8984 i = proto_perl->Ioldoldbufptr - SvPVX(proto_perl->Ilinestr);
8985 PL_oldoldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8986 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
8987 i = proto_perl->Ilinestart - SvPVX(proto_perl->Ilinestr);
8988 PL_linestart = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8989 PL_pending_ident = proto_perl->Ipending_ident;
8990 PL_sublex_info = proto_perl->Isublex_info; /* XXX not quite right */
8992 PL_expect = proto_perl->Iexpect;
8994 PL_multi_start = proto_perl->Imulti_start;
8995 PL_multi_end = proto_perl->Imulti_end;
8996 PL_multi_open = proto_perl->Imulti_open;
8997 PL_multi_close = proto_perl->Imulti_close;
8999 PL_error_count = proto_perl->Ierror_count;
9000 PL_subline = proto_perl->Isubline;
9001 PL_subname = sv_dup_inc(proto_perl->Isubname);
9003 PL_min_intro_pending = proto_perl->Imin_intro_pending;
9004 PL_max_intro_pending = proto_perl->Imax_intro_pending;
9005 PL_padix = proto_perl->Ipadix;
9006 PL_padix_floor = proto_perl->Ipadix_floor;
9007 PL_pad_reset_pending = proto_perl->Ipad_reset_pending;
9009 i = proto_perl->Ilast_uni - SvPVX(proto_perl->Ilinestr);
9010 PL_last_uni = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
9011 i = proto_perl->Ilast_lop - SvPVX(proto_perl->Ilinestr);
9012 PL_last_lop = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
9013 PL_last_lop_op = proto_perl->Ilast_lop_op;
9014 PL_in_my = proto_perl->Iin_my;
9015 PL_in_my_stash = hv_dup(proto_perl->Iin_my_stash);
9017 PL_cryptseen = proto_perl->Icryptseen;
9020 PL_hints = proto_perl->Ihints;
9022 PL_amagic_generation = proto_perl->Iamagic_generation;
9024 #ifdef USE_LOCALE_COLLATE
9025 PL_collation_ix = proto_perl->Icollation_ix;
9026 PL_collation_name = SAVEPV(proto_perl->Icollation_name);
9027 PL_collation_standard = proto_perl->Icollation_standard;
9028 PL_collxfrm_base = proto_perl->Icollxfrm_base;
9029 PL_collxfrm_mult = proto_perl->Icollxfrm_mult;
9030 #endif /* USE_LOCALE_COLLATE */
9032 #ifdef USE_LOCALE_NUMERIC
9033 PL_numeric_name = SAVEPV(proto_perl->Inumeric_name);
9034 PL_numeric_standard = proto_perl->Inumeric_standard;
9035 PL_numeric_local = proto_perl->Inumeric_local;
9036 PL_numeric_radix = sv_dup_inc(proto_perl->Inumeric_radix);
9037 #endif /* !USE_LOCALE_NUMERIC */
9039 /* utf8 character classes */
9040 PL_utf8_alnum = sv_dup_inc(proto_perl->Iutf8_alnum);
9041 PL_utf8_alnumc = sv_dup_inc(proto_perl->Iutf8_alnumc);
9042 PL_utf8_ascii = sv_dup_inc(proto_perl->Iutf8_ascii);
9043 PL_utf8_alpha = sv_dup_inc(proto_perl->Iutf8_alpha);
9044 PL_utf8_space = sv_dup_inc(proto_perl->Iutf8_space);
9045 PL_utf8_cntrl = sv_dup_inc(proto_perl->Iutf8_cntrl);
9046 PL_utf8_graph = sv_dup_inc(proto_perl->Iutf8_graph);
9047 PL_utf8_digit = sv_dup_inc(proto_perl->Iutf8_digit);
9048 PL_utf8_upper = sv_dup_inc(proto_perl->Iutf8_upper);
9049 PL_utf8_lower = sv_dup_inc(proto_perl->Iutf8_lower);
9050 PL_utf8_print = sv_dup_inc(proto_perl->Iutf8_print);
9051 PL_utf8_punct = sv_dup_inc(proto_perl->Iutf8_punct);
9052 PL_utf8_xdigit = sv_dup_inc(proto_perl->Iutf8_xdigit);
9053 PL_utf8_mark = sv_dup_inc(proto_perl->Iutf8_mark);
9054 PL_utf8_toupper = sv_dup_inc(proto_perl->Iutf8_toupper);
9055 PL_utf8_totitle = sv_dup_inc(proto_perl->Iutf8_totitle);
9056 PL_utf8_tolower = sv_dup_inc(proto_perl->Iutf8_tolower);
9059 PL_last_swash_hv = Nullhv; /* reinits on demand */
9060 PL_last_swash_klen = 0;
9061 PL_last_swash_key[0]= '\0';
9062 PL_last_swash_tmps = (U8*)NULL;
9063 PL_last_swash_slen = 0;
9065 /* perly.c globals */
9066 PL_yydebug = proto_perl->Iyydebug;
9067 PL_yynerrs = proto_perl->Iyynerrs;
9068 PL_yyerrflag = proto_perl->Iyyerrflag;
9069 PL_yychar = proto_perl->Iyychar;
9070 PL_yyval = proto_perl->Iyyval;
9071 PL_yylval = proto_perl->Iyylval;
9073 PL_glob_index = proto_perl->Iglob_index;
9074 PL_srand_called = proto_perl->Isrand_called;
9075 PL_uudmap['M'] = 0; /* reinits on demand */
9076 PL_bitcount = Nullch; /* reinits on demand */
9078 if (proto_perl->Ipsig_pend) {
9079 Newz(0, PL_psig_pend, SIG_SIZE, int);
9082 PL_psig_pend = (int*)NULL;
9085 if (proto_perl->Ipsig_ptr) {
9086 Newz(0, PL_psig_ptr, SIG_SIZE, SV*);
9087 Newz(0, PL_psig_name, SIG_SIZE, SV*);
9088 for (i = 1; i < SIG_SIZE; i++) {
9089 PL_psig_ptr[i] = sv_dup_inc(proto_perl->Ipsig_ptr[i]);
9090 PL_psig_name[i] = sv_dup_inc(proto_perl->Ipsig_name[i]);
9094 PL_psig_ptr = (SV**)NULL;
9095 PL_psig_name = (SV**)NULL;
9098 /* thrdvar.h stuff */
9100 if (flags & CLONEf_COPY_STACKS) {
9101 /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
9102 PL_tmps_ix = proto_perl->Ttmps_ix;
9103 PL_tmps_max = proto_perl->Ttmps_max;
9104 PL_tmps_floor = proto_perl->Ttmps_floor;
9105 Newz(50, PL_tmps_stack, PL_tmps_max, SV*);
9107 while (i <= PL_tmps_ix) {
9108 PL_tmps_stack[i] = sv_dup_inc(proto_perl->Ttmps_stack[i]);
9112 /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
9113 i = proto_perl->Tmarkstack_max - proto_perl->Tmarkstack;
9114 Newz(54, PL_markstack, i, I32);
9115 PL_markstack_max = PL_markstack + (proto_perl->Tmarkstack_max
9116 - proto_perl->Tmarkstack);
9117 PL_markstack_ptr = PL_markstack + (proto_perl->Tmarkstack_ptr
9118 - proto_perl->Tmarkstack);
9119 Copy(proto_perl->Tmarkstack, PL_markstack,
9120 PL_markstack_ptr - PL_markstack + 1, I32);
9122 /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
9123 * NOTE: unlike the others! */
9124 PL_scopestack_ix = proto_perl->Tscopestack_ix;
9125 PL_scopestack_max = proto_perl->Tscopestack_max;
9126 Newz(54, PL_scopestack, PL_scopestack_max, I32);
9127 Copy(proto_perl->Tscopestack, PL_scopestack, PL_scopestack_ix, I32);
9129 /* next push_return() sets PL_retstack[PL_retstack_ix]
9130 * NOTE: unlike the others! */
9131 PL_retstack_ix = proto_perl->Tretstack_ix;
9132 PL_retstack_max = proto_perl->Tretstack_max;
9133 Newz(54, PL_retstack, PL_retstack_max, OP*);
9134 Copy(proto_perl->Tretstack, PL_retstack, PL_retstack_ix, I32);
9136 /* NOTE: si_dup() looks at PL_markstack */
9137 PL_curstackinfo = si_dup(proto_perl->Tcurstackinfo);
9139 /* PL_curstack = PL_curstackinfo->si_stack; */
9140 PL_curstack = av_dup(proto_perl->Tcurstack);
9141 PL_mainstack = av_dup(proto_perl->Tmainstack);
9143 /* next PUSHs() etc. set *(PL_stack_sp+1) */
9144 PL_stack_base = AvARRAY(PL_curstack);
9145 PL_stack_sp = PL_stack_base + (proto_perl->Tstack_sp
9146 - proto_perl->Tstack_base);
9147 PL_stack_max = PL_stack_base + AvMAX(PL_curstack);
9149 /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
9150 * NOTE: unlike the others! */
9151 PL_savestack_ix = proto_perl->Tsavestack_ix;
9152 PL_savestack_max = proto_perl->Tsavestack_max;
9153 /*Newz(54, PL_savestack, PL_savestack_max, ANY);*/
9154 PL_savestack = ss_dup(proto_perl);
9158 ENTER; /* perl_destruct() wants to LEAVE; */
9161 PL_start_env = proto_perl->Tstart_env; /* XXXXXX */
9162 PL_top_env = &PL_start_env;
9164 PL_op = proto_perl->Top;
9167 PL_Xpv = (XPV*)NULL;
9168 PL_na = proto_perl->Tna;
9170 PL_statbuf = proto_perl->Tstatbuf;
9171 PL_statcache = proto_perl->Tstatcache;
9172 PL_statgv = gv_dup(proto_perl->Tstatgv);
9173 PL_statname = sv_dup_inc(proto_perl->Tstatname);
9175 PL_timesbuf = proto_perl->Ttimesbuf;
9178 PL_tainted = proto_perl->Ttainted;
9179 PL_curpm = proto_perl->Tcurpm; /* XXX No PMOP ref count */
9180 PL_nrs = sv_dup_inc(proto_perl->Tnrs);
9181 PL_rs = sv_dup_inc(proto_perl->Trs);
9182 PL_last_in_gv = gv_dup(proto_perl->Tlast_in_gv);
9183 PL_ofs_sv = sv_dup_inc(proto_perl->Tofs_sv);
9184 PL_defoutgv = gv_dup_inc(proto_perl->Tdefoutgv);
9185 PL_chopset = proto_perl->Tchopset; /* XXX never deallocated */
9186 PL_toptarget = sv_dup_inc(proto_perl->Ttoptarget);
9187 PL_bodytarget = sv_dup_inc(proto_perl->Tbodytarget);
9188 PL_formtarget = sv_dup(proto_perl->Tformtarget);
9190 PL_restartop = proto_perl->Trestartop;
9191 PL_in_eval = proto_perl->Tin_eval;
9192 PL_delaymagic = proto_perl->Tdelaymagic;
9193 PL_dirty = proto_perl->Tdirty;
9194 PL_localizing = proto_perl->Tlocalizing;
9196 #ifdef PERL_FLEXIBLE_EXCEPTIONS
9197 PL_protect = proto_perl->Tprotect;
9199 PL_errors = sv_dup_inc(proto_perl->Terrors);
9200 PL_av_fetch_sv = Nullsv;
9201 PL_hv_fetch_sv = Nullsv;
9202 Zero(&PL_hv_fetch_ent_mh, 1, HE); /* XXX */
9203 PL_modcount = proto_perl->Tmodcount;
9204 PL_lastgotoprobe = Nullop;
9205 PL_dumpindent = proto_perl->Tdumpindent;
9207 PL_sortcop = (OP*)any_dup(proto_perl->Tsortcop, proto_perl);
9208 PL_sortstash = hv_dup(proto_perl->Tsortstash);
9209 PL_firstgv = gv_dup(proto_perl->Tfirstgv);
9210 PL_secondgv = gv_dup(proto_perl->Tsecondgv);
9211 PL_sortcxix = proto_perl->Tsortcxix;
9212 PL_efloatbuf = Nullch; /* reinits on demand */
9213 PL_efloatsize = 0; /* reinits on demand */
9217 PL_screamfirst = NULL;
9218 PL_screamnext = NULL;
9219 PL_maxscream = -1; /* reinits on demand */
9220 PL_lastscream = Nullsv;
9222 PL_watchaddr = NULL;
9223 PL_watchok = Nullch;
9225 PL_regdummy = proto_perl->Tregdummy;
9226 PL_regcomp_parse = Nullch;
9227 PL_regxend = Nullch;
9228 PL_regcode = (regnode*)NULL;
9231 PL_regprecomp = Nullch;
9236 PL_seen_zerolen = 0;
9238 PL_regcomp_rx = (regexp*)NULL;
9240 PL_colorset = 0; /* reinits PL_colors[] */
9241 /*PL_colors[6] = {0,0,0,0,0,0};*/
9242 PL_reg_whilem_seen = 0;
9243 PL_reginput = Nullch;
9246 PL_regstartp = (I32*)NULL;
9247 PL_regendp = (I32*)NULL;
9248 PL_reglastparen = (U32*)NULL;
9249 PL_regtill = Nullch;
9251 PL_reg_start_tmp = (char**)NULL;
9252 PL_reg_start_tmpl = 0;
9253 PL_regdata = (struct reg_data*)NULL;
9256 PL_reg_eval_set = 0;
9258 PL_regprogram = (regnode*)NULL;
9260 PL_regcc = (CURCUR*)NULL;
9261 PL_reg_call_cc = (struct re_cc_state*)NULL;
9262 PL_reg_re = (regexp*)NULL;
9263 PL_reg_ganch = Nullch;
9265 PL_reg_magic = (MAGIC*)NULL;
9267 PL_reg_oldcurpm = (PMOP*)NULL;
9268 PL_reg_curpm = (PMOP*)NULL;
9269 PL_reg_oldsaved = Nullch;
9270 PL_reg_oldsavedlen = 0;
9272 PL_reg_leftiter = 0;
9273 PL_reg_poscache = Nullch;
9274 PL_reg_poscache_size= 0;
9276 /* RE engine - function pointers */
9277 PL_regcompp = proto_perl->Tregcompp;
9278 PL_regexecp = proto_perl->Tregexecp;
9279 PL_regint_start = proto_perl->Tregint_start;
9280 PL_regint_string = proto_perl->Tregint_string;
9281 PL_regfree = proto_perl->Tregfree;
9283 PL_reginterp_cnt = 0;
9284 PL_reg_starttry = 0;
9286 if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
9287 ptr_table_free(PL_ptr_table);
9288 PL_ptr_table = NULL;
9292 return (PerlInterpreter*)pPerl;
9298 #else /* !USE_ITHREADS */
9304 #endif /* USE_ITHREADS */
9307 do_report_used(pTHXo_ SV *sv)
9309 if (SvTYPE(sv) != SVTYPEMASK) {
9310 PerlIO_printf(Perl_debug_log, "****\n");
9316 do_clean_objs(pTHXo_ SV *sv)
9320 if (SvROK(sv) && SvOBJECT(rv = SvRV(sv))) {
9321 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(sv));)
9322 if (SvWEAKREF(sv)) {
9333 /* XXX Might want to check arrays, etc. */
9336 #ifndef DISABLE_DESTRUCTOR_KLUDGE
9338 do_clean_named_objs(pTHXo_ SV *sv)
9340 if (SvTYPE(sv) == SVt_PVGV && GvGP(sv)) {
9341 if ( SvOBJECT(GvSV(sv)) ||
9342 (GvAV(sv) && SvOBJECT(GvAV(sv))) ||
9343 (GvHV(sv) && SvOBJECT(GvHV(sv))) ||
9344 (GvIO(sv) && SvOBJECT(GvIO(sv))) ||
9345 (GvCV(sv) && SvOBJECT(GvCV(sv))) )
9347 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning named glob object:\n "), sv_dump(sv));)
9355 do_clean_all(pTHXo_ SV *sv)
9357 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) );)
9358 SvFLAGS(sv) |= SVf_BREAK;