3 * Copyright (c) 1991-2001, Larry Wall
5 * You may distribute under the terms of either the GNU General Public
6 * License or the Artistic License, as specified in the README file.
11 * "I wonder what the Entish is for 'yes' and 'no'," he thought.
19 #define SV_CHECK_THINKFIRST(sv) if (SvTHINKFIRST(sv)) sv_force_normal(sv)
21 static void do_report_used(pTHXo_ SV *sv);
22 static void do_clean_objs(pTHXo_ SV *sv);
23 #ifndef DISABLE_DESTRUCTOR_KLUDGE
24 static void do_clean_named_objs(pTHXo_ SV *sv);
26 static void do_clean_all(pTHXo_ SV *sv);
29 * "A time to plant, and a time to uproot what was planted..."
34 SvANY(p) = (void *)PL_sv_root; \
35 SvFLAGS(p) = SVTYPEMASK; \
40 /* sv_mutex must be held while calling uproot_SV() */
41 #define uproot_SV(p) \
44 PL_sv_root = (SV*)SvANY(p); \
66 if (PL_debug & 32768) \
76 if (PL_debug & 32768) {
81 for (sva = PL_sv_arenaroot; sva; sva = (SV *) SvANY(sva)) {
83 svend = &sva[SvREFCNT(sva)];
84 if (p >= sv && p < svend)
88 if (ckWARN_d(WARN_INTERNAL))
89 Perl_warner(aTHX_ WARN_INTERNAL,
90 "Attempt to free non-arena SV: 0x%"UVxf,
98 #else /* ! DEBUGGING */
100 #define del_SV(p) plant_SV(p)
102 #endif /* DEBUGGING */
105 Perl_sv_add_arena(pTHX_ char *ptr, U32 size, U32 flags)
110 Zero(ptr, size, char);
112 /* The first SV in an arena isn't an SV. */
113 SvANY(sva) = (void *) PL_sv_arenaroot; /* ptr to next arena */
114 SvREFCNT(sva) = size / sizeof(SV); /* number of SV slots */
115 SvFLAGS(sva) = flags; /* FAKE if not to be freed */
117 PL_sv_arenaroot = sva;
118 PL_sv_root = sva + 1;
120 svend = &sva[SvREFCNT(sva) - 1];
123 SvANY(sv) = (void *)(SV*)(sv + 1);
124 SvFLAGS(sv) = SVTYPEMASK;
128 SvFLAGS(sv) = SVTYPEMASK;
131 /* sv_mutex must be held while calling more_sv() */
138 sv_add_arena(PL_nice_chunk, PL_nice_chunk_size, 0);
139 PL_nice_chunk = Nullch;
142 char *chunk; /* must use New here to match call to */
143 New(704,chunk,1008,char); /* Safefree() in sv_free_arenas() */
144 sv_add_arena(chunk, 1008, 0);
151 S_visit(pTHX_ SVFUNC_t f)
157 for (sva = PL_sv_arenaroot; sva; sva = (SV*)SvANY(sva)) {
158 svend = &sva[SvREFCNT(sva)];
159 for (sv = sva + 1; sv < svend; ++sv) {
160 if (SvTYPE(sv) != SVTYPEMASK)
167 Perl_sv_report_used(pTHX)
169 visit(do_report_used);
173 Perl_sv_clean_objs(pTHX)
175 PL_in_clean_objs = TRUE;
176 visit(do_clean_objs);
177 #ifndef DISABLE_DESTRUCTOR_KLUDGE
178 /* some barnacles may yet remain, clinging to typeglobs */
179 visit(do_clean_named_objs);
181 PL_in_clean_objs = FALSE;
185 Perl_sv_clean_all(pTHX)
187 PL_in_clean_all = TRUE;
189 PL_in_clean_all = FALSE;
193 Perl_sv_free_arenas(pTHX)
197 XPV *arena, *arenanext;
199 /* Free arenas here, but be careful about fake ones. (We assume
200 contiguity of the fake ones with the corresponding real ones.) */
202 for (sva = PL_sv_arenaroot; sva; sva = svanext) {
203 svanext = (SV*) SvANY(sva);
204 while (svanext && SvFAKE(svanext))
205 svanext = (SV*) SvANY(svanext);
208 Safefree((void *)sva);
211 for (arena = PL_xiv_arenaroot; arena; arena = arenanext) {
212 arenanext = (XPV*)arena->xpv_pv;
215 PL_xiv_arenaroot = 0;
217 for (arena = PL_xnv_arenaroot; arena; arena = arenanext) {
218 arenanext = (XPV*)arena->xpv_pv;
221 PL_xnv_arenaroot = 0;
223 for (arena = PL_xrv_arenaroot; arena; arena = arenanext) {
224 arenanext = (XPV*)arena->xpv_pv;
227 PL_xrv_arenaroot = 0;
229 for (arena = PL_xpv_arenaroot; arena; arena = arenanext) {
230 arenanext = (XPV*)arena->xpv_pv;
233 PL_xpv_arenaroot = 0;
235 for (arena = (XPV*)PL_xpviv_arenaroot; arena; arena = arenanext) {
236 arenanext = (XPV*)arena->xpv_pv;
239 PL_xpviv_arenaroot = 0;
241 for (arena = (XPV*)PL_xpvnv_arenaroot; arena; arena = arenanext) {
242 arenanext = (XPV*)arena->xpv_pv;
245 PL_xpvnv_arenaroot = 0;
247 for (arena = (XPV*)PL_xpvcv_arenaroot; arena; arena = arenanext) {
248 arenanext = (XPV*)arena->xpv_pv;
251 PL_xpvcv_arenaroot = 0;
253 for (arena = (XPV*)PL_xpvav_arenaroot; arena; arena = arenanext) {
254 arenanext = (XPV*)arena->xpv_pv;
257 PL_xpvav_arenaroot = 0;
259 for (arena = (XPV*)PL_xpvhv_arenaroot; arena; arena = arenanext) {
260 arenanext = (XPV*)arena->xpv_pv;
263 PL_xpvhv_arenaroot = 0;
265 for (arena = (XPV*)PL_xpvmg_arenaroot; arena; arena = arenanext) {
266 arenanext = (XPV*)arena->xpv_pv;
269 PL_xpvmg_arenaroot = 0;
271 for (arena = (XPV*)PL_xpvlv_arenaroot; arena; arena = arenanext) {
272 arenanext = (XPV*)arena->xpv_pv;
275 PL_xpvlv_arenaroot = 0;
277 for (arena = (XPV*)PL_xpvbm_arenaroot; arena; arena = arenanext) {
278 arenanext = (XPV*)arena->xpv_pv;
281 PL_xpvbm_arenaroot = 0;
283 for (arena = (XPV*)PL_he_arenaroot; arena; arena = arenanext) {
284 arenanext = (XPV*)arena->xpv_pv;
290 Safefree(PL_nice_chunk);
291 PL_nice_chunk = Nullch;
292 PL_nice_chunk_size = 0;
298 Perl_report_uninit(pTHX)
301 Perl_warner(aTHX_ WARN_UNINITIALIZED, PL_warn_uninit,
302 " in ", PL_op_desc[PL_op->op_type]);
304 Perl_warner(aTHX_ WARN_UNINITIALIZED, PL_warn_uninit, "", "");
316 * See comment in more_xiv() -- RAM.
318 PL_xiv_root = *(IV**)xiv;
320 return (XPVIV*)((char*)xiv - STRUCT_OFFSET(XPVIV, xiv_iv));
324 S_del_xiv(pTHX_ XPVIV *p)
326 IV* xiv = (IV*)((char*)(p) + STRUCT_OFFSET(XPVIV, xiv_iv));
328 *(IV**)xiv = PL_xiv_root;
339 New(705, ptr, 1008/sizeof(XPV), XPV);
340 ptr->xpv_pv = (char*)PL_xiv_arenaroot; /* linked list of xiv arenas */
341 PL_xiv_arenaroot = ptr; /* to keep Purify happy */
344 xivend = &xiv[1008 / sizeof(IV) - 1];
345 xiv += (sizeof(XPV) - 1) / sizeof(IV) + 1; /* fudge by size of XPV */
347 while (xiv < xivend) {
348 *(IV**)xiv = (IV *)(xiv + 1);
362 PL_xnv_root = *(NV**)xnv;
364 return (XPVNV*)((char*)xnv - STRUCT_OFFSET(XPVNV, xnv_nv));
368 S_del_xnv(pTHX_ XPVNV *p)
370 NV* xnv = (NV*)((char*)(p) + STRUCT_OFFSET(XPVNV, xnv_nv));
372 *(NV**)xnv = PL_xnv_root;
383 New(711, ptr, 1008/sizeof(XPV), XPV);
384 ptr->xpv_pv = (char*)PL_xnv_arenaroot;
385 PL_xnv_arenaroot = ptr;
388 xnvend = &xnv[1008 / sizeof(NV) - 1];
389 xnv += (sizeof(XPVIV) - 1) / sizeof(NV) + 1; /* fudge by sizeof XPVIV */
391 while (xnv < xnvend) {
392 *(NV**)xnv = (NV*)(xnv + 1);
406 PL_xrv_root = (XRV*)xrv->xrv_rv;
412 S_del_xrv(pTHX_ XRV *p)
415 p->xrv_rv = (SV*)PL_xrv_root;
424 register XRV* xrvend;
426 New(712, ptr, 1008/sizeof(XPV), XPV);
427 ptr->xpv_pv = (char*)PL_xrv_arenaroot;
428 PL_xrv_arenaroot = ptr;
431 xrvend = &xrv[1008 / sizeof(XRV) - 1];
432 xrv += (sizeof(XPV) - 1) / sizeof(XRV) + 1;
434 while (xrv < xrvend) {
435 xrv->xrv_rv = (SV*)(xrv + 1);
449 PL_xpv_root = (XPV*)xpv->xpv_pv;
455 S_del_xpv(pTHX_ XPV *p)
458 p->xpv_pv = (char*)PL_xpv_root;
467 register XPV* xpvend;
468 New(713, xpv, 1008/sizeof(XPV), XPV);
469 xpv->xpv_pv = (char*)PL_xpv_arenaroot;
470 PL_xpv_arenaroot = xpv;
472 xpvend = &xpv[1008 / sizeof(XPV) - 1];
474 while (xpv < xpvend) {
475 xpv->xpv_pv = (char*)(xpv + 1);
488 xpviv = PL_xpviv_root;
489 PL_xpviv_root = (XPVIV*)xpviv->xpv_pv;
495 S_del_xpviv(pTHX_ XPVIV *p)
498 p->xpv_pv = (char*)PL_xpviv_root;
506 register XPVIV* xpviv;
507 register XPVIV* xpvivend;
508 New(714, xpviv, 1008/sizeof(XPVIV), XPVIV);
509 xpviv->xpv_pv = (char*)PL_xpviv_arenaroot;
510 PL_xpviv_arenaroot = xpviv;
512 xpvivend = &xpviv[1008 / sizeof(XPVIV) - 1];
513 PL_xpviv_root = ++xpviv;
514 while (xpviv < xpvivend) {
515 xpviv->xpv_pv = (char*)(xpviv + 1);
528 xpvnv = PL_xpvnv_root;
529 PL_xpvnv_root = (XPVNV*)xpvnv->xpv_pv;
535 S_del_xpvnv(pTHX_ XPVNV *p)
538 p->xpv_pv = (char*)PL_xpvnv_root;
546 register XPVNV* xpvnv;
547 register XPVNV* xpvnvend;
548 New(715, xpvnv, 1008/sizeof(XPVNV), XPVNV);
549 xpvnv->xpv_pv = (char*)PL_xpvnv_arenaroot;
550 PL_xpvnv_arenaroot = xpvnv;
552 xpvnvend = &xpvnv[1008 / sizeof(XPVNV) - 1];
553 PL_xpvnv_root = ++xpvnv;
554 while (xpvnv < xpvnvend) {
555 xpvnv->xpv_pv = (char*)(xpvnv + 1);
568 xpvcv = PL_xpvcv_root;
569 PL_xpvcv_root = (XPVCV*)xpvcv->xpv_pv;
575 S_del_xpvcv(pTHX_ XPVCV *p)
578 p->xpv_pv = (char*)PL_xpvcv_root;
586 register XPVCV* xpvcv;
587 register XPVCV* xpvcvend;
588 New(716, xpvcv, 1008/sizeof(XPVCV), XPVCV);
589 xpvcv->xpv_pv = (char*)PL_xpvcv_arenaroot;
590 PL_xpvcv_arenaroot = xpvcv;
592 xpvcvend = &xpvcv[1008 / sizeof(XPVCV) - 1];
593 PL_xpvcv_root = ++xpvcv;
594 while (xpvcv < xpvcvend) {
595 xpvcv->xpv_pv = (char*)(xpvcv + 1);
608 xpvav = PL_xpvav_root;
609 PL_xpvav_root = (XPVAV*)xpvav->xav_array;
615 S_del_xpvav(pTHX_ XPVAV *p)
618 p->xav_array = (char*)PL_xpvav_root;
626 register XPVAV* xpvav;
627 register XPVAV* xpvavend;
628 New(717, xpvav, 1008/sizeof(XPVAV), XPVAV);
629 xpvav->xav_array = (char*)PL_xpvav_arenaroot;
630 PL_xpvav_arenaroot = xpvav;
632 xpvavend = &xpvav[1008 / sizeof(XPVAV) - 1];
633 PL_xpvav_root = ++xpvav;
634 while (xpvav < xpvavend) {
635 xpvav->xav_array = (char*)(xpvav + 1);
638 xpvav->xav_array = 0;
648 xpvhv = PL_xpvhv_root;
649 PL_xpvhv_root = (XPVHV*)xpvhv->xhv_array;
655 S_del_xpvhv(pTHX_ XPVHV *p)
658 p->xhv_array = (char*)PL_xpvhv_root;
666 register XPVHV* xpvhv;
667 register XPVHV* xpvhvend;
668 New(718, xpvhv, 1008/sizeof(XPVHV), XPVHV);
669 xpvhv->xhv_array = (char*)PL_xpvhv_arenaroot;
670 PL_xpvhv_arenaroot = xpvhv;
672 xpvhvend = &xpvhv[1008 / sizeof(XPVHV) - 1];
673 PL_xpvhv_root = ++xpvhv;
674 while (xpvhv < xpvhvend) {
675 xpvhv->xhv_array = (char*)(xpvhv + 1);
678 xpvhv->xhv_array = 0;
688 xpvmg = PL_xpvmg_root;
689 PL_xpvmg_root = (XPVMG*)xpvmg->xpv_pv;
695 S_del_xpvmg(pTHX_ XPVMG *p)
698 p->xpv_pv = (char*)PL_xpvmg_root;
706 register XPVMG* xpvmg;
707 register XPVMG* xpvmgend;
708 New(719, xpvmg, 1008/sizeof(XPVMG), XPVMG);
709 xpvmg->xpv_pv = (char*)PL_xpvmg_arenaroot;
710 PL_xpvmg_arenaroot = xpvmg;
712 xpvmgend = &xpvmg[1008 / sizeof(XPVMG) - 1];
713 PL_xpvmg_root = ++xpvmg;
714 while (xpvmg < xpvmgend) {
715 xpvmg->xpv_pv = (char*)(xpvmg + 1);
728 xpvlv = PL_xpvlv_root;
729 PL_xpvlv_root = (XPVLV*)xpvlv->xpv_pv;
735 S_del_xpvlv(pTHX_ XPVLV *p)
738 p->xpv_pv = (char*)PL_xpvlv_root;
746 register XPVLV* xpvlv;
747 register XPVLV* xpvlvend;
748 New(720, xpvlv, 1008/sizeof(XPVLV), XPVLV);
749 xpvlv->xpv_pv = (char*)PL_xpvlv_arenaroot;
750 PL_xpvlv_arenaroot = xpvlv;
752 xpvlvend = &xpvlv[1008 / sizeof(XPVLV) - 1];
753 PL_xpvlv_root = ++xpvlv;
754 while (xpvlv < xpvlvend) {
755 xpvlv->xpv_pv = (char*)(xpvlv + 1);
768 xpvbm = PL_xpvbm_root;
769 PL_xpvbm_root = (XPVBM*)xpvbm->xpv_pv;
775 S_del_xpvbm(pTHX_ XPVBM *p)
778 p->xpv_pv = (char*)PL_xpvbm_root;
786 register XPVBM* xpvbm;
787 register XPVBM* xpvbmend;
788 New(721, xpvbm, 1008/sizeof(XPVBM), XPVBM);
789 xpvbm->xpv_pv = (char*)PL_xpvbm_arenaroot;
790 PL_xpvbm_arenaroot = xpvbm;
792 xpvbmend = &xpvbm[1008 / sizeof(XPVBM) - 1];
793 PL_xpvbm_root = ++xpvbm;
794 while (xpvbm < xpvbmend) {
795 xpvbm->xpv_pv = (char*)(xpvbm + 1);
802 # define my_safemalloc(s) (void*)safexmalloc(717,s)
803 # define my_safefree(p) safexfree((char*)p)
805 # define my_safemalloc(s) (void*)safemalloc(s)
806 # define my_safefree(p) safefree((char*)p)
811 #define new_XIV() my_safemalloc(sizeof(XPVIV))
812 #define del_XIV(p) my_safefree(p)
814 #define new_XNV() my_safemalloc(sizeof(XPVNV))
815 #define del_XNV(p) my_safefree(p)
817 #define new_XRV() my_safemalloc(sizeof(XRV))
818 #define del_XRV(p) my_safefree(p)
820 #define new_XPV() my_safemalloc(sizeof(XPV))
821 #define del_XPV(p) my_safefree(p)
823 #define new_XPVIV() my_safemalloc(sizeof(XPVIV))
824 #define del_XPVIV(p) my_safefree(p)
826 #define new_XPVNV() my_safemalloc(sizeof(XPVNV))
827 #define del_XPVNV(p) my_safefree(p)
829 #define new_XPVCV() my_safemalloc(sizeof(XPVCV))
830 #define del_XPVCV(p) my_safefree(p)
832 #define new_XPVAV() my_safemalloc(sizeof(XPVAV))
833 #define del_XPVAV(p) my_safefree(p)
835 #define new_XPVHV() my_safemalloc(sizeof(XPVHV))
836 #define del_XPVHV(p) my_safefree(p)
838 #define new_XPVMG() my_safemalloc(sizeof(XPVMG))
839 #define del_XPVMG(p) my_safefree(p)
841 #define new_XPVLV() my_safemalloc(sizeof(XPVLV))
842 #define del_XPVLV(p) my_safefree(p)
844 #define new_XPVBM() my_safemalloc(sizeof(XPVBM))
845 #define del_XPVBM(p) my_safefree(p)
849 #define new_XIV() (void*)new_xiv()
850 #define del_XIV(p) del_xiv((XPVIV*) p)
852 #define new_XNV() (void*)new_xnv()
853 #define del_XNV(p) del_xnv((XPVNV*) p)
855 #define new_XRV() (void*)new_xrv()
856 #define del_XRV(p) del_xrv((XRV*) p)
858 #define new_XPV() (void*)new_xpv()
859 #define del_XPV(p) del_xpv((XPV *)p)
861 #define new_XPVIV() (void*)new_xpviv()
862 #define del_XPVIV(p) del_xpviv((XPVIV *)p)
864 #define new_XPVNV() (void*)new_xpvnv()
865 #define del_XPVNV(p) del_xpvnv((XPVNV *)p)
867 #define new_XPVCV() (void*)new_xpvcv()
868 #define del_XPVCV(p) del_xpvcv((XPVCV *)p)
870 #define new_XPVAV() (void*)new_xpvav()
871 #define del_XPVAV(p) del_xpvav((XPVAV *)p)
873 #define new_XPVHV() (void*)new_xpvhv()
874 #define del_XPVHV(p) del_xpvhv((XPVHV *)p)
876 #define new_XPVMG() (void*)new_xpvmg()
877 #define del_XPVMG(p) del_xpvmg((XPVMG *)p)
879 #define new_XPVLV() (void*)new_xpvlv()
880 #define del_XPVLV(p) del_xpvlv((XPVLV *)p)
882 #define new_XPVBM() (void*)new_xpvbm()
883 #define del_XPVBM(p) del_xpvbm((XPVBM *)p)
887 #define new_XPVGV() my_safemalloc(sizeof(XPVGV))
888 #define del_XPVGV(p) my_safefree(p)
890 #define new_XPVFM() my_safemalloc(sizeof(XPVFM))
891 #define del_XPVFM(p) my_safefree(p)
893 #define new_XPVIO() my_safemalloc(sizeof(XPVIO))
894 #define del_XPVIO(p) my_safefree(p)
897 =for apidoc sv_upgrade
899 Upgrade an SV to a more complex form. Use C<SvUPGRADE>. See
906 Perl_sv_upgrade(pTHX_ register SV *sv, U32 mt)
916 if (mt != SVt_PV && SvREADONLY(sv) && SvFAKE(sv)) {
920 if (SvTYPE(sv) == mt)
926 switch (SvTYPE(sv)) {
947 else if (mt < SVt_PVIV)
964 pv = (char*)SvRV(sv);
984 else if (mt == SVt_NV)
995 del_XPVIV(SvANY(sv));
1005 del_XPVNV(SvANY(sv));
1013 magic = SvMAGIC(sv);
1014 stash = SvSTASH(sv);
1015 del_XPVMG(SvANY(sv));
1018 Perl_croak(aTHX_ "Can't upgrade that kind of scalar");
1023 Perl_croak(aTHX_ "Can't upgrade to undef");
1025 SvANY(sv) = new_XIV();
1029 SvANY(sv) = new_XNV();
1033 SvANY(sv) = new_XRV();
1037 SvANY(sv) = new_XPV();
1043 SvANY(sv) = new_XPVIV();
1053 SvANY(sv) = new_XPVNV();
1061 SvANY(sv) = new_XPVMG();
1067 SvMAGIC(sv) = magic;
1068 SvSTASH(sv) = stash;
1071 SvANY(sv) = new_XPVLV();
1077 SvMAGIC(sv) = magic;
1078 SvSTASH(sv) = stash;
1085 SvANY(sv) = new_XPVAV();
1093 SvMAGIC(sv) = magic;
1094 SvSTASH(sv) = stash;
1100 SvANY(sv) = new_XPVHV();
1108 SvMAGIC(sv) = magic;
1109 SvSTASH(sv) = stash;
1116 SvANY(sv) = new_XPVCV();
1117 Zero(SvANY(sv), 1, XPVCV);
1123 SvMAGIC(sv) = magic;
1124 SvSTASH(sv) = stash;
1127 SvANY(sv) = new_XPVGV();
1133 SvMAGIC(sv) = magic;
1134 SvSTASH(sv) = stash;
1142 SvANY(sv) = new_XPVBM();
1148 SvMAGIC(sv) = magic;
1149 SvSTASH(sv) = stash;
1155 SvANY(sv) = new_XPVFM();
1156 Zero(SvANY(sv), 1, XPVFM);
1162 SvMAGIC(sv) = magic;
1163 SvSTASH(sv) = stash;
1166 SvANY(sv) = new_XPVIO();
1167 Zero(SvANY(sv), 1, XPVIO);
1173 SvMAGIC(sv) = magic;
1174 SvSTASH(sv) = stash;
1175 IoPAGE_LEN(sv) = 60;
1178 SvFLAGS(sv) &= ~SVTYPEMASK;
1184 Perl_sv_backoff(pTHX_ register SV *sv)
1188 char *s = SvPVX(sv);
1189 SvLEN(sv) += SvIVX(sv);
1190 SvPVX(sv) -= SvIVX(sv);
1192 Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1194 SvFLAGS(sv) &= ~SVf_OOK;
1201 Expands the character buffer in the SV. This will use C<sv_unref> and will
1202 upgrade the SV to C<SVt_PV>. Returns a pointer to the character buffer.
1209 Perl_sv_grow(pTHX_ register SV *sv, register STRLEN newlen)
1213 #ifdef HAS_64K_LIMIT
1214 if (newlen >= 0x10000) {
1215 PerlIO_printf(Perl_debug_log,
1216 "Allocation too large: %"UVxf"\n", (UV)newlen);
1219 #endif /* HAS_64K_LIMIT */
1222 if (SvTYPE(sv) < SVt_PV) {
1223 sv_upgrade(sv, SVt_PV);
1226 else if (SvOOK(sv)) { /* pv is offset? */
1229 if (newlen > SvLEN(sv))
1230 newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1231 #ifdef HAS_64K_LIMIT
1232 if (newlen >= 0x10000)
1238 if (newlen > SvLEN(sv)) { /* need more room? */
1239 if (SvLEN(sv) && s) {
1240 #if defined(MYMALLOC) && !defined(LEAKTEST)
1241 STRLEN l = malloced_size((void*)SvPVX(sv));
1247 Renew(s,newlen,char);
1250 New(703,s,newlen,char);
1252 SvLEN_set(sv, newlen);
1258 =for apidoc sv_setiv
1260 Copies an integer into the given SV. Does not handle 'set' magic. See
1267 Perl_sv_setiv(pTHX_ register SV *sv, IV i)
1269 SV_CHECK_THINKFIRST(sv);
1270 switch (SvTYPE(sv)) {
1272 sv_upgrade(sv, SVt_IV);
1275 sv_upgrade(sv, SVt_PVNV);
1279 sv_upgrade(sv, SVt_PVIV);
1288 Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1289 PL_op_desc[PL_op->op_type]);
1291 (void)SvIOK_only(sv); /* validate number */
1297 =for apidoc sv_setiv_mg
1299 Like C<sv_setiv>, but also handles 'set' magic.
1305 Perl_sv_setiv_mg(pTHX_ register SV *sv, IV i)
1312 =for apidoc sv_setuv
1314 Copies an unsigned integer into the given SV. Does not handle 'set' magic.
1321 Perl_sv_setuv(pTHX_ register SV *sv, UV u)
1323 /* With these two if statements:
1324 u=1.49 s=0.52 cu=72.49 cs=10.64 scripts=270 tests=20865
1327 u=1.35 s=0.47 cu=73.45 cs=11.43 scripts=270 tests=20865
1329 If you wish to remove them, please benchmark to see what the effect is
1331 if (u <= (UV)IV_MAX) {
1332 sv_setiv(sv, (IV)u);
1341 =for apidoc sv_setuv_mg
1343 Like C<sv_setuv>, but also handles 'set' magic.
1349 Perl_sv_setuv_mg(pTHX_ register SV *sv, UV u)
1351 /* With these two if statements:
1352 u=1.49 s=0.52 cu=72.49 cs=10.64 scripts=270 tests=20865
1355 u=1.35 s=0.47 cu=73.45 cs=11.43 scripts=270 tests=20865
1357 If you wish to remove them, please benchmark to see what the effect is
1359 if (u <= (UV)IV_MAX) {
1360 sv_setiv(sv, (IV)u);
1370 =for apidoc sv_setnv
1372 Copies a double into the given SV. Does not handle 'set' magic. See
1379 Perl_sv_setnv(pTHX_ register SV *sv, NV num)
1381 SV_CHECK_THINKFIRST(sv);
1382 switch (SvTYPE(sv)) {
1385 sv_upgrade(sv, SVt_NV);
1390 sv_upgrade(sv, SVt_PVNV);
1399 Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1400 PL_op_name[PL_op->op_type]);
1403 (void)SvNOK_only(sv); /* validate number */
1408 =for apidoc sv_setnv_mg
1410 Like C<sv_setnv>, but also handles 'set' magic.
1416 Perl_sv_setnv_mg(pTHX_ register SV *sv, NV num)
1423 S_not_a_number(pTHX_ SV *sv)
1428 char *limit = tmpbuf + sizeof(tmpbuf) - 8;
1429 /* each *s can expand to 4 chars + "...\0",
1430 i.e. need room for 8 chars */
1432 for (s = SvPVX(sv); *s && d < limit; s++) {
1434 if (ch & 128 && !isPRINT_LC(ch)) {
1443 else if (ch == '\r') {
1447 else if (ch == '\f') {
1451 else if (ch == '\\') {
1455 else if (isPRINT_LC(ch))
1470 Perl_warner(aTHX_ WARN_NUMERIC,
1471 "Argument \"%s\" isn't numeric in %s", tmpbuf,
1472 PL_op_desc[PL_op->op_type]);
1474 Perl_warner(aTHX_ WARN_NUMERIC,
1475 "Argument \"%s\" isn't numeric", tmpbuf);
1478 /* the number can be converted to integer with atol() or atoll() although */
1479 #define IS_NUMBER_TO_INT_BY_ATOL 0x01 /* integer (may have decimals) */
1480 #define IS_NUMBER_TO_INT_BY_STRTOL 0x02 /* it may exceed IV_MAX */
1481 #define IS_NUMBER_TO_INT_BY_ATOF 0x04 /* seen something like 123e4 */
1482 #define IS_NUMBER_LONGER_THAN_IV_MAX 0x08 /* more digits than IV_MAX */
1483 #define IS_NUMBER_AS_LONG_AS_IV_MAX 0x10 /* may(be not) larger than IV_MAX */
1484 #define IS_NUMBER_NOT_INT 0x20 /* seen a decimal point or e */
1485 #define IS_NUMBER_NEG 0x40 /* seen a leading - */
1486 #define IS_NUMBER_INFINITY 0x80 /* /^\s*-?Infinity\s*$/i */
1488 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1489 until proven guilty, assume that things are not that bad... */
1491 /* As 64 bit platforms often have an NV that doesn't preserve all bits of
1492 an IV (an assumption perl has been based on to date) it becomes necessary
1493 to remove the assumption that the NV always carries enough precision to
1494 recreate the IV whenever needed, and that the NV is the canonical form.
1495 Instead, IV/UV and NV need to be given equal rights. So as to not lose
1496 precision as an side effect of conversion (which would lead to insanity
1497 and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1498 1) to distinguish between IV/UV/NV slots that have cached a valid
1499 conversion where precision was lost and IV/UV/NV slots that have a
1500 valid conversion which has lost no precision
1501 2) to ensure that if a numeric conversion to one form is request that
1502 would lose precision, the precise conversion (or differently
1503 imprecise conversion) is also performed and cached, to prevent
1504 requests for different numeric formats on the same SV causing
1505 lossy conversion chains. (lossless conversion chains are perfectly
1510 SvIOKp is true if the IV slot contains a valid value
1511 SvIOK is true only if the IV value is accurate (UV if SvIOK_UV true)
1512 SvNOKp is true if the NV slot contains a valid value
1513 SvNOK is true only if the NV value is accurate
1516 while converting from PV to NV check to see if converting that NV to an
1517 IV(or UV) would lose accuracy over a direct conversion from PV to
1518 IV(or UV). If it would, cache both conversions, return NV, but mark
1519 SV as IOK NOKp (ie not NOK).
1521 while converting from PV to IV check to see if converting that IV to an
1522 NV would lose accuracy over a direct conversion from PV to NV. If it
1523 would, cache both conversions, flag similarly.
1525 Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1526 correctly because if IV & NV were set NV *always* overruled.
1527 Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flags meaning
1528 changes - now IV and NV together means that the two are interchangeable
1529 SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1531 The benefit of this is operations such as pp_add know that if SvIOK is
1532 true for both left and right operands, then integer addition can be
1533 used instead of floating point. (for cases where the result won't
1534 overflow) Before, floating point was always used, which could lead to
1535 loss of precision compared with integer addition.
1537 * making IV and NV equal status should make maths accurate on 64 bit
1539 * may speed up maths somewhat if pp_add and friends start to use
1540 integers when possible instead of fp. (hopefully the overhead in
1541 looking for SvIOK and checking for overflow will not outweigh the
1542 fp to integer speedup)
1543 * will slow down integer operations (callers of SvIV) on "inaccurate"
1544 values, as the change from SvIOK to SvIOKp will cause a call into
1545 sv_2iv each time rather than a macro access direct to the IV slot
1546 * should speed up number->string conversion on integers as IV is
1547 favoured when IV and NV equally accurate
1549 ####################################################################
1550 You had better be using SvIOK_notUV if you want an IV for arithmetic
1551 SvIOK is true if (IV or UV), so you might be getting (IV)SvUV
1552 SvUOK is true iff UV.
1553 ####################################################################
1555 Your mileage will vary depending your CPUs relative fp to integer
1559 #ifndef NV_PRESERVES_UV
1560 #define IS_NUMBER_UNDERFLOW_IV 1
1561 #define IS_NUMBER_UNDERFLOW_UV 2
1562 #define IS_NUMBER_IV_AND_UV 2
1563 #define IS_NUMBER_OVERFLOW_IV 4
1564 #define IS_NUMBER_OVERFLOW_UV 5
1565 /* Hopefully your optimiser will consider inlining these two functions. */
1567 S_sv_2inuv_non_preserve (pTHX_ register SV *sv, I32 numtype) {
1568 NV nv = SvNVX(sv); /* Code simpler and had compiler problems if */
1569 UV nv_as_uv = U_V(nv); /* these are not in simple variables. */
1570 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_2inuv_non '%s', IV=0x%"UVxf" NV=%g inttype=%"UVXf"\n", SvPVX(sv), SvIVX(sv), nv, (UV)numtype));
1571 if (nv_as_uv <= (UV)IV_MAX) {
1572 (void)SvIOKp_on(sv);
1573 (void)SvNOKp_on(sv);
1574 /* Within suitable range to fit in an IV, atol won't overflow */
1575 /* XXX quite sure? Is that your final answer? not really, I'm
1576 trusting that nv_as_uv to round down if NV is (IV_MAX + 1) */
1577 SvIVX(sv) = (IV)Atol(SvPVX(sv));
1578 if (numtype & IS_NUMBER_NOT_INT) {
1579 /* I believe that even if the original PV had decimals, they
1580 are lost beyond the limit of the FP precision.
1581 However, neither is canonical, so both only get p flags.
1583 /* Both already have p flags, so do nothing */
1584 } else if (SvIVX(sv) == I_V(nv)) {
1589 /* It had no "." so it must be integer. assert (get in here from
1590 sv_2iv and sv_2uv only for ndef HAS_STRTOL and
1591 IS_NUMBER_AS_LONG_AS_IV_MAX) or my logic is faulty and all
1592 conversion routines need audit. */
1594 return nv < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
1596 /* between IV_MAX and NV(UV_MAX). Could be slightly> UV_MAX */
1597 (void)SvIOKp_on(sv);
1598 (void)SvNOKp_on(sv);
1601 int save_errno = errno;
1603 SvUVX(sv) = Strtoul(SvPVX(sv), Null(char**), 10);
1605 if (numtype & IS_NUMBER_NOT_INT) {
1606 /* UV and NV both imprecise. */
1608 } else if (SvUVX(sv) == nv_as_uv && SvUVX(sv) != UV_MAX) {
1617 return IS_NUMBER_OVERFLOW_IV;
1621 /* Must have just overflowed UV, but not enough that an NV could spot
1623 return IS_NUMBER_OVERFLOW_UV;
1626 /* We've just lost integer precision, nothing we could do. */
1627 SvUVX(sv) = nv_as_uv;
1628 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_2niuv_non UV? '%s', UV=0x%"UVxf" NV=%g U_V(NV)=0x%"UVxf" inttype=%"UVXf"\n", SvPVX(sv), SvIVX(sv), nv, nv_as_uv, (UV)numtype));
1629 /* UV and NV slots equally valid only if we have casting symmetry. */
1630 if (numtype & IS_NUMBER_NOT_INT) {
1632 } else if (SvUVX(sv) == nv_as_uv && SvUVX(sv) != UV_MAX) {
1633 /* UV_MAX can cast up to NV (UV_MAX+1), that NV casts down to UV_MAX
1634 UV_MAX ought to be 0xFF...FFF which won't preserve (We only
1635 get to this point if NVs don't preserve UVs) */
1640 /* As above, I believe UV at least as good as NV */
1643 #endif /* HAS_STRTOUL */
1644 return IS_NUMBER_OVERFLOW_IV;
1647 /* For sv_2nv these three cases are "SvNOK and don't bother casting" */
1649 S_sv_2iuv_non_preserve (pTHX_ register SV *sv, I32 numtype)
1651 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_2iuv_non '%s', IV=0x%"UVxf" NV=%g inttype=%"UVXf"\n", SvPVX(sv), SvIVX(sv), SvNVX(sv), (UV)numtype));
1652 if (SvNVX(sv) < (NV)IV_MIN) {
1653 (void)SvIOKp_on(sv);
1656 return IS_NUMBER_UNDERFLOW_IV;
1658 if (SvNVX(sv) > (NV)UV_MAX) {
1659 (void)SvIOKp_on(sv);
1663 return IS_NUMBER_OVERFLOW_UV;
1665 if (!(numtype & (IS_NUMBER_TO_INT_BY_ATOL | IS_NUMBER_TO_INT_BY_STRTOL))) {
1666 (void)SvIOKp_on(sv);
1668 /* Can't use strtol etc to convert this string */
1669 if (SvNVX(sv) <= (UV)IV_MAX) {
1670 SvIVX(sv) = I_V(SvNVX(sv));
1671 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1672 SvIOK_on(sv); /* Integer is precise. NOK, IOK */
1674 /* Integer is imprecise. NOK, IOKp */
1676 return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
1679 SvUVX(sv) = U_V(SvNVX(sv));
1680 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
1681 if (SvUVX(sv) == UV_MAX) {
1682 /* As we know that NVs don't preserve UVs, UV_MAX cannot
1683 possibly be preserved by NV. Hence, it must be overflow.
1685 return IS_NUMBER_OVERFLOW_UV;
1687 SvIOK_on(sv); /* Integer is precise. NOK, UOK */
1689 /* Integer is imprecise. NOK, IOKp */
1691 return IS_NUMBER_OVERFLOW_IV;
1693 return S_sv_2inuv_non_preserve(aTHX_ sv, numtype);
1695 #endif /* NV_PRESERVES_UV*/
1698 Perl_sv_2iv(pTHX_ register SV *sv)
1702 if (SvGMAGICAL(sv)) {
1707 return I_V(SvNVX(sv));
1709 if (SvPOKp(sv) && SvLEN(sv))
1712 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
1713 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
1719 if (SvTHINKFIRST(sv)) {
1722 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
1723 (SvRV(tmpstr) != SvRV(sv)))
1724 return SvIV(tmpstr);
1725 return PTR2IV(SvRV(sv));
1727 if (SvREADONLY(sv) && SvFAKE(sv)) {
1728 sv_force_normal(sv);
1730 if (SvREADONLY(sv) && !SvOK(sv)) {
1731 if (ckWARN(WARN_UNINITIALIZED))
1738 return (IV)(SvUVX(sv));
1745 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
1746 * without also getting a cached IV/UV from it at the same time
1747 * (ie PV->NV conversion should detect loss of accuracy and cache
1748 * IV or UV at same time to avoid this. NWC */
1750 if (SvTYPE(sv) == SVt_NV)
1751 sv_upgrade(sv, SVt_PVNV);
1753 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
1754 /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
1755 certainly cast into the IV range at IV_MAX, whereas the correct
1756 answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
1758 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
1759 SvIVX(sv) = I_V(SvNVX(sv));
1760 if (SvNVX(sv) == (NV) SvIVX(sv)
1761 #ifndef NV_PRESERVES_UV
1762 && (((UV)1 << NV_PRESERVES_UV_BITS) >
1763 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
1764 /* Don't flag it as "accurately an integer" if the number
1765 came from a (by definition imprecise) NV operation, and
1766 we're outside the range of NV integer precision */
1769 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
1770 DEBUG_c(PerlIO_printf(Perl_debug_log,
1771 "0x%"UVxf" iv(%g => %"IVdf") (precise)\n",
1777 /* IV not precise. No need to convert from PV, as NV
1778 conversion would already have cached IV if it detected
1779 that PV->IV would be better than PV->NV->IV
1780 flags already correct - don't set public IOK. */
1781 DEBUG_c(PerlIO_printf(Perl_debug_log,
1782 "0x%"UVxf" iv(%g => %"IVdf") (imprecise)\n",
1787 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
1788 but the cast (NV)IV_MIN rounds to a the value less (more
1789 negative) than IV_MIN which happens to be equal to SvNVX ??
1790 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
1791 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
1792 (NV)UVX == NVX are both true, but the values differ. :-(
1793 Hopefully for 2s complement IV_MIN is something like
1794 0x8000000000000000 which will be exact. NWC */
1797 SvUVX(sv) = U_V(SvNVX(sv));
1799 (SvNVX(sv) == (NV) SvUVX(sv))
1800 #ifndef NV_PRESERVES_UV
1801 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
1802 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
1803 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
1804 /* Don't flag it as "accurately an integer" if the number
1805 came from a (by definition imprecise) NV operation, and
1806 we're outside the range of NV integer precision */
1812 DEBUG_c(PerlIO_printf(Perl_debug_log,
1813 "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
1817 return (IV)SvUVX(sv);
1820 else if (SvPOKp(sv) && SvLEN(sv)) {
1821 I32 numtype = looks_like_number(sv);
1823 /* We want to avoid a possible problem when we cache an IV which
1824 may be later translated to an NV, and the resulting NV is not
1825 the translation of the initial data.
1827 This means that if we cache such an IV, we need to cache the
1828 NV as well. Moreover, we trade speed for space, and do not
1829 cache the NV if we are sure it's not needed.
1832 if ((numtype & ~IS_NUMBER_NEG) == IS_NUMBER_TO_INT_BY_ATOL) {
1833 /* The NV may be reconstructed from IV - safe to cache IV,
1834 which may be calculated by atol(). */
1835 if (SvTYPE(sv) < SVt_PVIV)
1836 sv_upgrade(sv, SVt_PVIV);
1838 SvIVX(sv) = Atol(SvPVX(sv));
1842 int save_errno = errno;
1843 /* Is it an integer that we could convert with strtol?
1844 So try it, and if it doesn't set errno then it's pukka.
1845 This should be faster than going atof and then thinking. */
1846 if (((numtype & (IS_NUMBER_TO_INT_BY_STRTOL | IS_NUMBER_NOT_INT))
1847 == IS_NUMBER_TO_INT_BY_STRTOL)
1848 /* && is a sequence point. Without it not sure if I'm trying
1849 to do too much between sequence points and hence going
1851 && ((errno = 0), 1) /* , 1 so always true */
1852 && ((i = Strtol(SvPVX(sv), Null(char**), 10)), 1)
1854 if (SvTYPE(sv) < SVt_PVIV)
1855 sv_upgrade(sv, SVt_PVIV);
1864 /* Hopefully trace flow will optimise this away where possible
1868 /* It wasn't an integer, or it overflowed, or we don't have
1869 strtol. Do things the slow way - check if it's a UV etc. */
1870 d = Atof(SvPVX(sv));
1872 if (SvTYPE(sv) < SVt_PVNV)
1873 sv_upgrade(sv, SVt_PVNV);
1876 if (! numtype && ckWARN(WARN_NUMERIC))
1879 #if defined(USE_LONG_DOUBLE)
1880 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
1881 PTR2UV(sv), SvNVX(sv)));
1883 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%g)\n",
1884 PTR2UV(sv), SvNVX(sv)));
1888 #ifdef NV_PRESERVES_UV
1889 (void)SvIOKp_on(sv);
1891 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
1892 SvIVX(sv) = I_V(SvNVX(sv));
1893 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1896 /* Integer is imprecise. NOK, IOKp */
1898 /* UV will not work better than IV */
1900 if (SvNVX(sv) > (NV)UV_MAX) {
1902 /* Integer is inaccurate. NOK, IOKp, is UV */
1906 SvUVX(sv) = U_V(SvNVX(sv));
1907 /* 0xFFFFFFFFFFFFFFFF not an issue in here */
1908 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
1912 /* Integer is imprecise. NOK, IOKp, is UV */
1918 #else /* NV_PRESERVES_UV */
1919 if (((UV)1 << NV_PRESERVES_UV_BITS) >
1920 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
1921 /* Small enough to preserve all bits. */
1922 (void)SvIOKp_on(sv);
1924 SvIVX(sv) = I_V(SvNVX(sv));
1925 if ((NV)(SvIVX(sv)) == SvNVX(sv))
1927 /* Assumption: first non-preserved integer is < IV_MAX,
1928 this NV is in the preserved range, therefore: */
1929 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
1931 Perl_croak(aTHX_ "sv_2iv assumed (U_V(fabs(SvNVX(sv))) < (UV)IV_MAX) but SvNVX(sv)=%g U_V is 0x%"UVxf", IV_MAX is 0x%"UVxf"\n", SvNVX(sv), U_V(SvNVX(sv)), (UV)IV_MAX);
1933 } else if (sv_2iuv_non_preserve (sv, numtype)
1934 >= IS_NUMBER_OVERFLOW_IV)
1936 #endif /* NV_PRESERVES_UV */
1940 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
1942 if (SvTYPE(sv) < SVt_IV)
1943 /* Typically the caller expects that sv_any is not NULL now. */
1944 sv_upgrade(sv, SVt_IV);
1947 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
1948 PTR2UV(sv),SvIVX(sv)));
1949 return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
1953 Perl_sv_2uv(pTHX_ register SV *sv)
1957 if (SvGMAGICAL(sv)) {
1962 return U_V(SvNVX(sv));
1963 if (SvPOKp(sv) && SvLEN(sv))
1966 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
1967 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
1973 if (SvTHINKFIRST(sv)) {
1976 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
1977 (SvRV(tmpstr) != SvRV(sv)))
1978 return SvUV(tmpstr);
1979 return PTR2UV(SvRV(sv));
1981 if (SvREADONLY(sv) && SvFAKE(sv)) {
1982 sv_force_normal(sv);
1984 if (SvREADONLY(sv) && !SvOK(sv)) {
1985 if (ckWARN(WARN_UNINITIALIZED))
1995 return (UV)SvIVX(sv);
1999 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2000 * without also getting a cached IV/UV from it at the same time
2001 * (ie PV->NV conversion should detect loss of accuracy and cache
2002 * IV or UV at same time to avoid this. */
2003 /* IV-over-UV optimisation - choose to cache IV if possible */
2005 if (SvTYPE(sv) == SVt_NV)
2006 sv_upgrade(sv, SVt_PVNV);
2008 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
2009 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2010 SvIVX(sv) = I_V(SvNVX(sv));
2011 if (SvNVX(sv) == (NV) SvIVX(sv)
2012 #ifndef NV_PRESERVES_UV
2013 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2014 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2015 /* Don't flag it as "accurately an integer" if the number
2016 came from a (by definition imprecise) NV operation, and
2017 we're outside the range of NV integer precision */
2020 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
2021 DEBUG_c(PerlIO_printf(Perl_debug_log,
2022 "0x%"UVxf" uv(%g => %"IVdf") (precise)\n",
2028 /* IV not precise. No need to convert from PV, as NV
2029 conversion would already have cached IV if it detected
2030 that PV->IV would be better than PV->NV->IV
2031 flags already correct - don't set public IOK. */
2032 DEBUG_c(PerlIO_printf(Perl_debug_log,
2033 "0x%"UVxf" uv(%g => %"IVdf") (imprecise)\n",
2038 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2039 but the cast (NV)IV_MIN rounds to a the value less (more
2040 negative) than IV_MIN which happens to be equal to SvNVX ??
2041 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2042 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2043 (NV)UVX == NVX are both true, but the values differ. :-(
2044 Hopefully for 2s complement IV_MIN is something like
2045 0x8000000000000000 which will be exact. NWC */
2048 SvUVX(sv) = U_V(SvNVX(sv));
2050 (SvNVX(sv) == (NV) SvUVX(sv))
2051 #ifndef NV_PRESERVES_UV
2052 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2053 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2054 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2055 /* Don't flag it as "accurately an integer" if the number
2056 came from a (by definition imprecise) NV operation, and
2057 we're outside the range of NV integer precision */
2062 DEBUG_c(PerlIO_printf(Perl_debug_log,
2063 "0x%"UVxf" 2uv(%"UVuf" => %"IVdf") (as unsigned)\n",
2069 else if (SvPOKp(sv) && SvLEN(sv)) {
2070 I32 numtype = looks_like_number(sv);
2072 /* We want to avoid a possible problem when we cache a UV which
2073 may be later translated to an NV, and the resulting NV is not
2074 the translation of the initial data.
2076 This means that if we cache such a UV, we need to cache the
2077 NV as well. Moreover, we trade speed for space, and do not
2078 cache the NV if not needed.
2081 if ((numtype & ~IS_NUMBER_NEG) == IS_NUMBER_TO_INT_BY_ATOL) {
2082 /* The NV may be reconstructed from IV - safe to cache IV,
2083 which may be calculated by atol(). */
2084 if (SvTYPE(sv) < SVt_PVIV)
2085 sv_upgrade(sv, SVt_PVIV);
2087 SvIVX(sv) = Atol(SvPVX(sv));
2091 char *num_begin = SvPVX(sv);
2092 int save_errno = errno;
2094 /* seems that strtoul taking numbers that start with - is
2095 implementation dependant, and can't be relied upon. */
2096 if (numtype & IS_NUMBER_NEG) {
2097 /* Not totally defensive. assumine that looks_like_num
2098 didn't lie about a - sign */
2099 while (isSPACE(*num_begin))
2101 if (*num_begin == '-')
2105 /* Is it an integer that we could convert with strtoul?
2106 So try it, and if it doesn't set errno then it's pukka.
2107 This should be faster than going atof and then thinking. */
2108 if (((numtype & (IS_NUMBER_TO_INT_BY_STRTOL | IS_NUMBER_NOT_INT))
2109 == IS_NUMBER_TO_INT_BY_STRTOL)
2110 && ((errno = 0), 1) /* always true */
2111 && ((u = Strtoul(num_begin, Null(char**), 10)), 1) /* ditto */
2113 /* If known to be negative, check it didn't undeflow IV
2114 XXX possibly we should put more negative values as NVs
2115 direct rather than go via atof below */
2116 && ((numtype & IS_NUMBER_NEG) ? (u <= (UV)IV_MIN) : 1)) {
2119 if (SvTYPE(sv) < SVt_PVIV)
2120 sv_upgrade(sv, SVt_PVIV);
2123 /* If it's negative must use IV.
2124 IV-over-UV optimisation */
2125 if (numtype & IS_NUMBER_NEG) {
2127 } else if (u <= (UV) IV_MAX) {
2130 /* it didn't overflow, and it was positive. */
2139 /* Hopefully trace flow will optimise this away where possible
2143 /* It wasn't an integer, or it overflowed, or we don't have
2144 strtol. Do things the slow way - check if it's a IV etc. */
2145 d = Atof(SvPVX(sv));
2147 if (SvTYPE(sv) < SVt_PVNV)
2148 sv_upgrade(sv, SVt_PVNV);
2151 if (! numtype && ckWARN(WARN_NUMERIC))
2154 #if defined(USE_LONG_DOUBLE)
2155 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%" PERL_PRIgldbl ")\n",
2156 PTR2UV(sv), SvNVX(sv)));
2158 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%g)\n",
2159 PTR2UV(sv), SvNVX(sv)));
2162 #ifdef NV_PRESERVES_UV
2163 (void)SvIOKp_on(sv);
2165 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2166 SvIVX(sv) = I_V(SvNVX(sv));
2167 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2170 /* Integer is imprecise. NOK, IOKp */
2172 /* UV will not work better than IV */
2174 if (SvNVX(sv) > (NV)UV_MAX) {
2176 /* Integer is inaccurate. NOK, IOKp, is UV */
2180 SvUVX(sv) = U_V(SvNVX(sv));
2181 /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2182 NV preservse UV so can do correct comparison. */
2183 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2187 /* Integer is imprecise. NOK, IOKp, is UV */
2192 #else /* NV_PRESERVES_UV */
2193 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2194 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2195 /* Small enough to preserve all bits. */
2196 (void)SvIOKp_on(sv);
2198 SvIVX(sv) = I_V(SvNVX(sv));
2199 if ((NV)(SvIVX(sv)) == SvNVX(sv))
2201 /* Assumption: first non-preserved integer is < IV_MAX,
2202 this NV is in the preserved range, therefore: */
2203 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2205 Perl_croak(aTHX_ "sv_2uv assumed (U_V(fabs(SvNVX(sv))) < (UV)IV_MAX) but SvNVX(sv)=%g U_V is 0x%"UVxf", IV_MAX is 0x%"UVxf"\n", SvNVX(sv), U_V(SvNVX(sv)), (UV)IV_MAX);
2208 sv_2iuv_non_preserve (sv, numtype);
2209 #endif /* NV_PRESERVES_UV */
2214 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2215 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2218 if (SvTYPE(sv) < SVt_IV)
2219 /* Typically the caller expects that sv_any is not NULL now. */
2220 sv_upgrade(sv, SVt_IV);
2224 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2225 PTR2UV(sv),SvUVX(sv)));
2226 return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2230 Perl_sv_2nv(pTHX_ register SV *sv)
2234 if (SvGMAGICAL(sv)) {
2238 if (SvPOKp(sv) && SvLEN(sv)) {
2239 if (ckWARN(WARN_NUMERIC) && !SvIOKp(sv) && !looks_like_number(sv))
2241 return Atof(SvPVX(sv));
2245 return (NV)SvUVX(sv);
2247 return (NV)SvIVX(sv);
2250 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2251 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2257 if (SvTHINKFIRST(sv)) {
2260 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
2261 (SvRV(tmpstr) != SvRV(sv)))
2262 return SvNV(tmpstr);
2263 return PTR2NV(SvRV(sv));
2265 if (SvREADONLY(sv) && SvFAKE(sv)) {
2266 sv_force_normal(sv);
2268 if (SvREADONLY(sv) && !SvOK(sv)) {
2269 if (ckWARN(WARN_UNINITIALIZED))
2274 if (SvTYPE(sv) < SVt_NV) {
2275 if (SvTYPE(sv) == SVt_IV)
2276 sv_upgrade(sv, SVt_PVNV);
2278 sv_upgrade(sv, SVt_NV);
2279 #if defined(USE_LONG_DOUBLE)
2281 STORE_NUMERIC_LOCAL_SET_STANDARD();
2282 PerlIO_printf(Perl_debug_log,
2283 "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2284 PTR2UV(sv), SvNVX(sv));
2285 RESTORE_NUMERIC_LOCAL();
2289 STORE_NUMERIC_LOCAL_SET_STANDARD();
2290 PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%g)\n",
2291 PTR2UV(sv), SvNVX(sv));
2292 RESTORE_NUMERIC_LOCAL();
2296 else if (SvTYPE(sv) < SVt_PVNV)
2297 sv_upgrade(sv, SVt_PVNV);
2299 (!SvPOKp(sv) || !strchr(SvPVX(sv),'.') || !looks_like_number(sv)))
2301 SvNVX(sv) = SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv);
2302 #ifdef NV_PRESERVES_UV
2305 /* Only set the public NV OK flag if this NV preserves the IV */
2306 /* Check it's not 0xFFFFFFFFFFFFFFFF */
2307 if (SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2308 : (SvIVX(sv) == I_V(SvNVX(sv))))
2314 else if (SvPOKp(sv) && SvLEN(sv)) {
2315 if (ckWARN(WARN_NUMERIC) && !SvIOKp(sv) && !looks_like_number(sv))
2317 SvNVX(sv) = Atof(SvPVX(sv));
2318 #ifdef NV_PRESERVES_UV
2321 /* Only set the public NV OK flag if this NV preserves the value in
2322 the PV at least as well as an IV/UV would.
2323 Not sure how to do this 100% reliably. */
2324 /* if that shift count is out of range then Configure's test is
2325 wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2327 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2328 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv)))
2329 SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2330 else if (SvNVX(sv) < (NV)IV_MIN || SvNVX(sv) > (NV)UV_MAX) {
2331 /* Definitely too large/small to fit in an integer, so no loss
2332 of precision going to integer in the future via NV */
2335 /* Is it something we can run through strtol etc (ie no
2336 trailing exponent part)? */
2337 int numtype = looks_like_number(sv);
2338 /* XXX probably should cache this if called above */
2341 (IS_NUMBER_TO_INT_BY_ATOL | IS_NUMBER_TO_INT_BY_STRTOL))) {
2342 /* Can't use strtol etc to convert this string, so don't try */
2345 sv_2inuv_non_preserve (sv, numtype);
2347 #endif /* NV_PRESERVES_UV */
2350 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
2352 if (SvTYPE(sv) < SVt_NV)
2353 /* Typically the caller expects that sv_any is not NULL now. */
2354 /* XXX Ilya implies that this is a bug in callers that assume this
2355 and ideally should be fixed. */
2356 sv_upgrade(sv, SVt_NV);
2359 #if defined(USE_LONG_DOUBLE)
2361 STORE_NUMERIC_LOCAL_SET_STANDARD();
2362 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2363 PTR2UV(sv), SvNVX(sv));
2364 RESTORE_NUMERIC_LOCAL();
2368 STORE_NUMERIC_LOCAL_SET_STANDARD();
2369 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%g)\n",
2370 PTR2UV(sv), SvNVX(sv));
2371 RESTORE_NUMERIC_LOCAL();
2378 S_asIV(pTHX_ SV *sv)
2380 I32 numtype = looks_like_number(sv);
2383 if (numtype & IS_NUMBER_TO_INT_BY_ATOL)
2384 return Atol(SvPVX(sv));
2386 if (ckWARN(WARN_NUMERIC))
2389 d = Atof(SvPVX(sv));
2394 S_asUV(pTHX_ SV *sv)
2396 I32 numtype = looks_like_number(sv);
2399 if (numtype & IS_NUMBER_TO_INT_BY_ATOL)
2400 return Strtoul(SvPVX(sv), Null(char**), 10);
2403 if (ckWARN(WARN_NUMERIC))
2406 return U_V(Atof(SvPVX(sv)));
2410 * Returns a combination of (advisory only - can get false negatives)
2411 * IS_NUMBER_TO_INT_BY_ATOL, IS_NUMBER_TO_INT_BY_ATOF
2412 * IS_NUMBER_LONGER_THAN_IV_MAX, IS_NUMBER_AS_LONG_AS_IV_MAX
2413 * IS_NUMBER_NOT_INT, IS_NUMBER_NEG, IS_NUMBER_INFINITY
2414 * 0 if does not look like number.
2416 * (atol and strtol stop when they hit a decimal point. strtol will return
2417 * LONG_MAX and LONG_MIN when given out of range values. ANSI says they should
2418 * do this, and vendors have had 11 years to get it right.
2419 * However, will try to make it still work with only atol
2421 * IS_NUMBER_TO_INT_BY_ATOL 123456789 or 123456789.3 definitely < IV_MAX
2422 * IS_NUMBER_TO_INT_BY_STRTOL 123456789 or 123456789.3 if digits = IV_MAX
2423 * IS_NUMBER_TO_INT_BY_ATOF 123456789e0 or >> IV_MAX
2424 * IS_NUMBER_LONGER_THAN_IV_MAX lots of digits, don't bother with atol
2425 * IS_NUMBER_AS_LONG_AS_IV_MAX atol might hit LONG_MAX, might not.
2426 * IS_NUMBER_NOT_INT saw "." or "e"
2428 * IS_NUMBER_INFINITY
2432 =for apidoc looks_like_number
2434 Test if an the content of an SV looks like a number (or is a
2435 number). C<Inf> and C<Infinity> are treated as numbers (so will not
2436 issue a non-numeric warning), even if your atof() doesn't grok them.
2442 Perl_looks_like_number(pTHX_ SV *sv)
2445 register char *send;
2446 register char *sbegin;
2447 register char *nbegin;
2451 #ifdef USE_LOCALE_NUMERIC
2452 bool specialradix = FALSE;
2459 else if (SvPOKp(sv))
2460 sbegin = SvPV(sv, len);
2463 send = sbegin + len;
2470 numtype = IS_NUMBER_NEG;
2477 * we return IS_NUMBER_TO_INT_BY_ATOL if the number can converted to
2478 * integer with atol() without overflow, IS_NUMBER_TO_INT_BY_STRTOL if
2479 * possibly slightly larger than max int, IS_NUMBER_TO_INT_BY_ATOF if you
2480 * will need (int)atof().
2483 /* next must be digit or the radix separator or beginning of infinity */
2487 } while (isDIGIT(*s));
2489 /* Aaargh. long long really is irritating.
2490 In the gospel according to ANSI 1989, it is an axiom that "long"
2491 is the longest integer type, and that if you don't know how long
2492 something is you can cast it to long, and nothing will be lost
2493 (except possibly speed of execution if long is slower than the
2495 Now, one can't be sure if the old rules apply, or long long
2496 (or some other newfangled thing) is actually longer than the
2497 (formerly) longest thing.
2499 /* This lot will work for 64 bit *as long as* either
2500 either long is 64 bit
2501 or we can find both strtol/strtoq and strtoul/strtouq
2502 If not, we really should refuse to let the user use 64 bit IVs
2503 By "64 bit" I really mean IVs that don't get preserved by NVs
2504 It also should work for 128 bit IVs. Can any lend me a machine to
2507 if (s - nbegin > TYPE_DIGITS(UV)) /* Cannot cache ato[ul]() */
2508 numtype |= IS_NUMBER_TO_INT_BY_ATOF | IS_NUMBER_LONGER_THAN_IV_MAX;
2509 else if (s - nbegin < BIT_DIGITS(((sizeof (IV)>sizeof (long))
2510 ? sizeof(long) : sizeof (IV))*8-1))
2511 numtype |= IS_NUMBER_TO_INT_BY_ATOL;
2513 /* Can't be sure either way. (For 64 bit UV, 63 bit IV is 1 decimal
2514 digit less (IV_MAX= 9223372036854775807,
2515 UV_MAX= 18446744073709551615) so be cautious */
2516 numtype |= IS_NUMBER_TO_INT_BY_STRTOL | IS_NUMBER_AS_LONG_AS_IV_MAX;
2519 #ifdef USE_LOCALE_NUMERIC
2520 || (specialradix = IS_NUMERIC_RADIX(s))
2523 #ifdef USE_LOCALE_NUMERIC
2525 s += SvCUR(PL_numeric_radix);
2529 numtype |= IS_NUMBER_NOT_INT;
2530 while (isDIGIT(*s)) /* optional digits after the radix */
2535 #ifdef USE_LOCALE_NUMERIC
2536 || (specialradix = IS_NUMERIC_RADIX(s))
2539 #ifdef USE_LOCALE_NUMERIC
2541 s += SvCUR(PL_numeric_radix);
2545 numtype |= IS_NUMBER_TO_INT_BY_ATOL | IS_NUMBER_NOT_INT;
2546 /* no digits before the radix means we need digits after it */
2550 } while (isDIGIT(*s));
2555 else if (*s == 'I' || *s == 'i') {
2556 s++; if (*s != 'N' && *s != 'n') return 0;
2557 s++; if (*s != 'F' && *s != 'f') return 0;
2558 s++; if (*s == 'I' || *s == 'i') {
2559 s++; if (*s != 'N' && *s != 'n') return 0;
2560 s++; if (*s != 'I' && *s != 'i') return 0;
2561 s++; if (*s != 'T' && *s != 't') return 0;
2562 s++; if (*s != 'Y' && *s != 'y') return 0;
2571 numtype = (numtype & IS_NUMBER_NEG) /* Keep track of sign */
2572 | IS_NUMBER_INFINITY | IS_NUMBER_NOT_INT;
2574 /* we can have an optional exponent part */
2575 if (*s == 'e' || *s == 'E') {
2576 numtype &= IS_NUMBER_NEG;
2577 numtype |= IS_NUMBER_TO_INT_BY_ATOF | IS_NUMBER_NOT_INT;
2579 if (*s == '+' || *s == '-')
2584 } while (isDIGIT(*s));
2594 if (len == 10 && memEQ(sbegin, "0 but true", 10))
2595 return IS_NUMBER_TO_INT_BY_ATOL;
2600 Perl_sv_2pv_nolen(pTHX_ register SV *sv)
2603 return sv_2pv(sv, &n_a);
2606 /* We assume that buf is at least TYPE_CHARS(UV) long. */
2608 uiv_2buf(char *buf, IV iv, UV uv, int is_uv, char **peob)
2610 char *ptr = buf + TYPE_CHARS(UV);
2624 *--ptr = '0' + (uv % 10);
2633 Perl_sv_2pv(pTHX_ register SV *sv, STRLEN *lp)
2638 char tbuf[64]; /* Must fit sprintf/Gconvert of longest IV/NV */
2639 char *tmpbuf = tbuf;
2645 if (SvGMAGICAL(sv)) {
2653 (void)sprintf(tmpbuf,"%"UVuf, (UV)SvUVX(sv));
2655 (void)sprintf(tmpbuf,"%"IVdf, (IV)SvIVX(sv));
2660 Gconvert(SvNVX(sv), NV_DIG, 0, tmpbuf);
2665 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2666 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2673 if (SvTHINKFIRST(sv)) {
2676 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,string)) &&
2677 (SvRV(tmpstr) != SvRV(sv)))
2678 return SvPV(tmpstr,*lp);
2685 switch (SvTYPE(sv)) {
2687 if ( ((SvFLAGS(sv) &
2688 (SVs_OBJECT|SVf_OK|SVs_GMG|SVs_SMG|SVs_RMG))
2689 == (SVs_OBJECT|SVs_RMG))
2690 && strEQ(s=HvNAME(SvSTASH(sv)), "Regexp")
2691 && (mg = mg_find(sv, 'r'))) {
2692 regexp *re = (regexp *)mg->mg_obj;
2695 char *fptr = "msix";
2700 U16 reganch = (re->reganch & PMf_COMPILETIME) >> 12;
2702 while((ch = *fptr++)) {
2704 reflags[left++] = ch;
2707 reflags[right--] = ch;
2712 reflags[left] = '-';
2716 mg->mg_len = re->prelen + 4 + left;
2717 New(616, mg->mg_ptr, mg->mg_len + 1 + left, char);
2718 Copy("(?", mg->mg_ptr, 2, char);
2719 Copy(reflags, mg->mg_ptr+2, left, char);
2720 Copy(":", mg->mg_ptr+left+2, 1, char);
2721 Copy(re->precomp, mg->mg_ptr+3+left, re->prelen, char);
2722 mg->mg_ptr[mg->mg_len - 1] = ')';
2723 mg->mg_ptr[mg->mg_len] = 0;
2725 PL_reginterp_cnt += re->program[0].next_off;
2737 case SVt_PVBM: if (SvROK(sv))
2740 s = "SCALAR"; break;
2741 case SVt_PVLV: s = "LVALUE"; break;
2742 case SVt_PVAV: s = "ARRAY"; break;
2743 case SVt_PVHV: s = "HASH"; break;
2744 case SVt_PVCV: s = "CODE"; break;
2745 case SVt_PVGV: s = "GLOB"; break;
2746 case SVt_PVFM: s = "FORMAT"; break;
2747 case SVt_PVIO: s = "IO"; break;
2748 default: s = "UNKNOWN"; break;
2752 Perl_sv_setpvf(aTHX_ tsv, "%s=%s", HvNAME(SvSTASH(sv)), s);
2755 Perl_sv_catpvf(aTHX_ tsv, "(0x%"UVxf")", PTR2UV(sv));
2761 if (SvREADONLY(sv) && !SvOK(sv)) {
2762 if (ckWARN(WARN_UNINITIALIZED))
2768 if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
2769 /* I'm assuming that if both IV and NV are equally valid then
2770 converting the IV is going to be more efficient */
2771 U32 isIOK = SvIOK(sv);
2772 U32 isUIOK = SvIsUV(sv);
2773 char buf[TYPE_CHARS(UV)];
2776 if (SvTYPE(sv) < SVt_PVIV)
2777 sv_upgrade(sv, SVt_PVIV);
2779 ptr = uiv_2buf(buf, 0, SvUVX(sv), 1, &ebuf);
2781 ptr = uiv_2buf(buf, SvIVX(sv), 0, 0, &ebuf);
2782 SvGROW(sv, ebuf - ptr + 1); /* inlined from sv_setpvn */
2783 Move(ptr,SvPVX(sv),ebuf - ptr,char);
2784 SvCUR_set(sv, ebuf - ptr);
2794 else if (SvNOKp(sv)) {
2795 if (SvTYPE(sv) < SVt_PVNV)
2796 sv_upgrade(sv, SVt_PVNV);
2797 /* The +20 is pure guesswork. Configure test needed. --jhi */
2798 SvGROW(sv, NV_DIG + 20);
2800 olderrno = errno; /* some Xenix systems wipe out errno here */
2802 if (SvNVX(sv) == 0.0)
2803 (void)strcpy(s,"0");
2807 Gconvert(SvNVX(sv), NV_DIG, 0, s);
2810 #ifdef FIXNEGATIVEZERO
2811 if (*s == '-' && s[1] == '0' && !s[2])
2821 if (ckWARN(WARN_UNINITIALIZED)
2822 && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
2825 if (SvTYPE(sv) < SVt_PV)
2826 /* Typically the caller expects that sv_any is not NULL now. */
2827 sv_upgrade(sv, SVt_PV);
2830 *lp = s - SvPVX(sv);
2833 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
2834 PTR2UV(sv),SvPVX(sv)));
2838 if (SvROK(sv)) { /* XXX Skip this when sv_pvn_force calls */
2839 /* Sneaky stuff here */
2843 tsv = newSVpv(tmpbuf, 0);
2859 len = strlen(tmpbuf);
2861 #ifdef FIXNEGATIVEZERO
2862 if (len == 2 && t[0] == '-' && t[1] == '0') {
2867 (void)SvUPGRADE(sv, SVt_PV);
2869 s = SvGROW(sv, len + 1);
2878 Perl_sv_2pvbyte_nolen(pTHX_ register SV *sv)
2881 return sv_2pvbyte(sv, &n_a);
2885 Perl_sv_2pvbyte(pTHX_ register SV *sv, STRLEN *lp)
2887 return sv_2pv(sv,lp);
2891 Perl_sv_2pvutf8_nolen(pTHX_ register SV *sv)
2894 return sv_2pvutf8(sv, &n_a);
2898 Perl_sv_2pvutf8(pTHX_ register SV *sv, STRLEN *lp)
2900 sv_utf8_upgrade(sv);
2901 return SvPV(sv,*lp);
2904 /* This function is only called on magical items */
2906 Perl_sv_2bool(pTHX_ register SV *sv)
2915 if (SvAMAGIC(sv) && (tmpsv=AMG_CALLun(sv,bool_)) &&
2916 (SvRV(tmpsv) != SvRV(sv)))
2917 return SvTRUE(tmpsv);
2918 return SvRV(sv) != 0;
2921 register XPV* Xpvtmp;
2922 if ((Xpvtmp = (XPV*)SvANY(sv)) &&
2923 (*Xpvtmp->xpv_pv > '0' ||
2924 Xpvtmp->xpv_cur > 1 ||
2925 (Xpvtmp->xpv_cur && *Xpvtmp->xpv_pv != '0')))
2932 return SvIVX(sv) != 0;
2935 return SvNVX(sv) != 0.0;
2943 =for apidoc sv_utf8_upgrade
2945 Convert the PV of an SV to its UTF8-encoded form.
2951 Perl_sv_utf8_upgrade(pTHX_ register SV *sv)
2956 if (!sv || !SvPOK(sv) || SvUTF8(sv))
2959 /* This function could be much more efficient if we had a FLAG in SVs
2960 * to signal if there are any hibit chars in the PV.
2961 * Given that there isn't make loop fast as possible
2967 if ((hibit = UTF8_IS_CONTINUED(*t++)))
2974 if (SvREADONLY(sv) && SvFAKE(sv)) {
2975 sv_force_normal(sv);
2978 len = SvCUR(sv) + 1; /* Plus the \0 */
2979 SvPVX(sv) = (char*)bytes_to_utf8((U8*)s, &len);
2980 SvCUR(sv) = len - 1;
2982 Safefree(s); /* No longer using what was there before. */
2983 SvLEN(sv) = len; /* No longer know the real size. */
2989 =for apidoc sv_utf8_downgrade
2991 Attempt to convert the PV of an SV from UTF8-encoded to byte encoding.
2992 This may not be possible if the PV contains non-byte encoding characters;
2993 if this is the case, either returns false or, if C<fail_ok> is not
3000 Perl_sv_utf8_downgrade(pTHX_ register SV* sv, bool fail_ok)
3002 if (SvPOK(sv) && SvUTF8(sv)) {
3007 if (SvREADONLY(sv) && SvFAKE(sv))
3008 sv_force_normal(sv);
3010 if (!utf8_to_bytes((U8*)s, &len)) {
3015 Perl_croak(aTHX_ "Wide character in %s",
3016 PL_op_desc[PL_op->op_type]);
3018 Perl_croak(aTHX_ "Wide character");
3030 =for apidoc sv_utf8_encode
3032 Convert the PV of an SV to UTF8-encoded, but then turn off the C<SvUTF8>
3033 flag so that it looks like bytes again. Nothing calls this.
3039 Perl_sv_utf8_encode(pTHX_ register SV *sv)
3041 sv_utf8_upgrade(sv);
3046 Perl_sv_utf8_decode(pTHX_ register SV *sv)
3051 bool has_utf = FALSE;
3052 if (!sv_utf8_downgrade(sv, TRUE))
3055 /* it is actually just a matter of turning the utf8 flag on, but
3056 * we want to make sure everything inside is valid utf8 first.
3059 if (!is_utf8_string((U8*)c, SvCUR(sv)+1))
3063 if (UTF8_IS_CONTINUED(*c++)) {
3073 /* Note: sv_setsv() should not be called with a source string that needs
3074 * to be reused, since it may destroy the source string if it is marked
3079 =for apidoc sv_setsv
3081 Copies the contents of the source SV C<ssv> into the destination SV C<dsv>.
3082 The source SV may be destroyed if it is mortal. Does not handle 'set'
3083 magic. See the macro forms C<SvSetSV>, C<SvSetSV_nosteal> and
3090 Perl_sv_setsv(pTHX_ SV *dstr, register SV *sstr)
3092 register U32 sflags;
3098 SV_CHECK_THINKFIRST(dstr);
3100 sstr = &PL_sv_undef;
3101 stype = SvTYPE(sstr);
3102 dtype = SvTYPE(dstr);
3106 /* There's a lot of redundancy below but we're going for speed here */
3111 if (dtype != SVt_PVGV) {
3112 (void)SvOK_off(dstr);
3120 sv_upgrade(dstr, SVt_IV);
3123 sv_upgrade(dstr, SVt_PVNV);
3127 sv_upgrade(dstr, SVt_PVIV);
3130 (void)SvIOK_only(dstr);
3131 SvIVX(dstr) = SvIVX(sstr);
3134 if (SvTAINTED(sstr))
3145 sv_upgrade(dstr, SVt_NV);
3150 sv_upgrade(dstr, SVt_PVNV);
3153 SvNVX(dstr) = SvNVX(sstr);
3154 (void)SvNOK_only(dstr);
3155 if (SvTAINTED(sstr))
3163 sv_upgrade(dstr, SVt_RV);
3164 else if (dtype == SVt_PVGV &&
3165 SvTYPE(SvRV(sstr)) == SVt_PVGV) {
3168 if (GvIMPORTED(dstr) != GVf_IMPORTED
3169 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3171 GvIMPORTED_on(dstr);
3182 sv_upgrade(dstr, SVt_PV);
3185 if (dtype < SVt_PVIV)
3186 sv_upgrade(dstr, SVt_PVIV);
3189 if (dtype < SVt_PVNV)
3190 sv_upgrade(dstr, SVt_PVNV);
3197 Perl_croak(aTHX_ "Bizarre copy of %s in %s", sv_reftype(sstr, 0),
3198 PL_op_name[PL_op->op_type]);
3200 Perl_croak(aTHX_ "Bizarre copy of %s", sv_reftype(sstr, 0));
3204 if (dtype <= SVt_PVGV) {
3206 if (dtype != SVt_PVGV) {
3207 char *name = GvNAME(sstr);
3208 STRLEN len = GvNAMELEN(sstr);
3209 sv_upgrade(dstr, SVt_PVGV);
3210 sv_magic(dstr, dstr, '*', Nullch, 0);
3211 GvSTASH(dstr) = (HV*)SvREFCNT_inc(GvSTASH(sstr));
3212 GvNAME(dstr) = savepvn(name, len);
3213 GvNAMELEN(dstr) = len;
3214 SvFAKE_on(dstr); /* can coerce to non-glob */
3216 /* ahem, death to those who redefine active sort subs */
3217 else if (PL_curstackinfo->si_type == PERLSI_SORT
3218 && GvCV(dstr) && PL_sortcop == CvSTART(GvCV(dstr)))
3219 Perl_croak(aTHX_ "Can't redefine active sort subroutine %s",
3221 (void)SvOK_off(dstr);
3222 GvINTRO_off(dstr); /* one-shot flag */
3224 GvGP(dstr) = gp_ref(GvGP(sstr));
3225 if (SvTAINTED(sstr))
3227 if (GvIMPORTED(dstr) != GVf_IMPORTED
3228 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3230 GvIMPORTED_on(dstr);
3238 if (SvGMAGICAL(sstr)) {
3240 if (SvTYPE(sstr) != stype) {
3241 stype = SvTYPE(sstr);
3242 if (stype == SVt_PVGV && dtype <= SVt_PVGV)
3246 if (stype == SVt_PVLV)
3247 (void)SvUPGRADE(dstr, SVt_PVNV);
3249 (void)SvUPGRADE(dstr, stype);
3252 sflags = SvFLAGS(sstr);
3254 if (sflags & SVf_ROK) {
3255 if (dtype >= SVt_PV) {
3256 if (dtype == SVt_PVGV) {
3257 SV *sref = SvREFCNT_inc(SvRV(sstr));
3259 int intro = GvINTRO(dstr);
3264 GvINTRO_off(dstr); /* one-shot flag */
3265 Newz(602,gp, 1, GP);
3266 GvGP(dstr) = gp_ref(gp);
3267 GvSV(dstr) = NEWSV(72,0);
3268 GvLINE(dstr) = CopLINE(PL_curcop);
3269 GvEGV(dstr) = (GV*)dstr;
3272 switch (SvTYPE(sref)) {
3275 SAVESPTR(GvAV(dstr));
3277 dref = (SV*)GvAV(dstr);
3278 GvAV(dstr) = (AV*)sref;
3279 if (!GvIMPORTED_AV(dstr)
3280 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3282 GvIMPORTED_AV_on(dstr);
3287 SAVESPTR(GvHV(dstr));
3289 dref = (SV*)GvHV(dstr);
3290 GvHV(dstr) = (HV*)sref;
3291 if (!GvIMPORTED_HV(dstr)
3292 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3294 GvIMPORTED_HV_on(dstr);
3299 if (GvCVGEN(dstr) && GvCV(dstr) != (CV*)sref) {
3300 SvREFCNT_dec(GvCV(dstr));
3301 GvCV(dstr) = Nullcv;
3302 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3303 PL_sub_generation++;
3305 SAVESPTR(GvCV(dstr));
3308 dref = (SV*)GvCV(dstr);
3309 if (GvCV(dstr) != (CV*)sref) {
3310 CV* cv = GvCV(dstr);
3312 if (!GvCVGEN((GV*)dstr) &&
3313 (CvROOT(cv) || CvXSUB(cv)))
3316 /* ahem, death to those who redefine
3317 * active sort subs */
3318 if (PL_curstackinfo->si_type == PERLSI_SORT &&
3319 PL_sortcop == CvSTART(cv))
3321 "Can't redefine active sort subroutine %s",
3322 GvENAME((GV*)dstr));
3323 /* Redefining a sub - warning is mandatory if
3324 it was a const and its value changed. */
3325 if (ckWARN(WARN_REDEFINE)
3327 && (!CvCONST((CV*)sref)
3328 || sv_cmp(cv_const_sv(cv),
3329 cv_const_sv((CV*)sref)))))
3331 Perl_warner(aTHX_ WARN_REDEFINE,
3333 ? "Constant subroutine %s redefined"
3334 : "Subroutine %s redefined",
3335 GvENAME((GV*)dstr));
3338 cv_ckproto(cv, (GV*)dstr,
3339 SvPOK(sref) ? SvPVX(sref) : Nullch);
3341 GvCV(dstr) = (CV*)sref;
3342 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3343 GvASSUMECV_on(dstr);
3344 PL_sub_generation++;
3346 if (!GvIMPORTED_CV(dstr)
3347 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3349 GvIMPORTED_CV_on(dstr);
3354 SAVESPTR(GvIOp(dstr));
3356 dref = (SV*)GvIOp(dstr);
3357 GvIOp(dstr) = (IO*)sref;
3361 SAVESPTR(GvFORM(dstr));
3363 dref = (SV*)GvFORM(dstr);
3364 GvFORM(dstr) = (CV*)sref;
3368 SAVESPTR(GvSV(dstr));
3370 dref = (SV*)GvSV(dstr);
3372 if (!GvIMPORTED_SV(dstr)
3373 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3375 GvIMPORTED_SV_on(dstr);
3383 if (SvTAINTED(sstr))
3388 (void)SvOOK_off(dstr); /* backoff */
3390 Safefree(SvPVX(dstr));
3391 SvLEN(dstr)=SvCUR(dstr)=0;
3394 (void)SvOK_off(dstr);
3395 SvRV(dstr) = SvREFCNT_inc(SvRV(sstr));
3397 if (sflags & SVp_NOK) {
3399 /* Only set the public OK flag if the source has public OK. */
3400 if (sflags & SVf_NOK)
3401 SvFLAGS(dstr) |= SVf_NOK;
3402 SvNVX(dstr) = SvNVX(sstr);
3404 if (sflags & SVp_IOK) {
3405 (void)SvIOKp_on(dstr);
3406 if (sflags & SVf_IOK)
3407 SvFLAGS(dstr) |= SVf_IOK;
3408 if (sflags & SVf_IVisUV)
3410 SvIVX(dstr) = SvIVX(sstr);
3412 if (SvAMAGIC(sstr)) {
3416 else if (sflags & SVp_POK) {
3419 * Check to see if we can just swipe the string. If so, it's a
3420 * possible small lose on short strings, but a big win on long ones.
3421 * It might even be a win on short strings if SvPVX(dstr)
3422 * has to be allocated and SvPVX(sstr) has to be freed.
3425 if (SvTEMP(sstr) && /* slated for free anyway? */
3426 SvREFCNT(sstr) == 1 && /* and no other references to it? */
3427 !(sflags & SVf_OOK) && /* and not involved in OOK hack? */
3428 SvLEN(sstr) && /* and really is a string */
3429 !(PL_op && PL_op->op_type == OP_AASSIGN)) /* and won't be needed again, potentially */
3431 if (SvPVX(dstr)) { /* we know that dtype >= SVt_PV */
3433 SvFLAGS(dstr) &= ~SVf_OOK;
3434 Safefree(SvPVX(dstr) - SvIVX(dstr));
3436 else if (SvLEN(dstr))
3437 Safefree(SvPVX(dstr));
3439 (void)SvPOK_only(dstr);
3440 SvPV_set(dstr, SvPVX(sstr));
3441 SvLEN_set(dstr, SvLEN(sstr));
3442 SvCUR_set(dstr, SvCUR(sstr));
3445 (void)SvOK_off(sstr); /* NOTE: nukes most SvFLAGS on sstr */
3446 SvPV_set(sstr, Nullch);
3451 else { /* have to copy actual string */
3452 STRLEN len = SvCUR(sstr);
3454 SvGROW(dstr, len + 1); /* inlined from sv_setpvn */
3455 Move(SvPVX(sstr),SvPVX(dstr),len,char);
3456 SvCUR_set(dstr, len);
3457 *SvEND(dstr) = '\0';
3458 (void)SvPOK_only(dstr);
3460 if (sflags & SVf_UTF8)
3463 if (sflags & SVp_NOK) {
3465 if (sflags & SVf_NOK)
3466 SvFLAGS(dstr) |= SVf_NOK;
3467 SvNVX(dstr) = SvNVX(sstr);
3469 if (sflags & SVp_IOK) {
3470 (void)SvIOKp_on(dstr);
3471 if (sflags & SVf_IOK)
3472 SvFLAGS(dstr) |= SVf_IOK;
3473 if (sflags & SVf_IVisUV)
3475 SvIVX(dstr) = SvIVX(sstr);
3478 else if (sflags & SVp_IOK) {
3479 if (sflags & SVf_IOK)
3480 (void)SvIOK_only(dstr);
3485 /* XXXX Do we want to set IsUV for IV(ROK)? Be extra safe... */
3486 if (sflags & SVf_IVisUV)
3488 SvIVX(dstr) = SvIVX(sstr);
3489 if (sflags & SVp_NOK) {
3490 if (sflags & SVf_NOK)
3491 (void)SvNOK_on(dstr);
3493 (void)SvNOKp_on(dstr);
3494 SvNVX(dstr) = SvNVX(sstr);
3497 else if (sflags & SVp_NOK) {
3498 if (sflags & SVf_NOK)
3499 (void)SvNOK_only(dstr);
3504 SvNVX(dstr) = SvNVX(sstr);
3507 if (dtype == SVt_PVGV) {
3508 if (ckWARN(WARN_MISC))
3509 Perl_warner(aTHX_ WARN_MISC, "Undefined value assigned to typeglob");
3512 (void)SvOK_off(dstr);
3514 if (SvTAINTED(sstr))
3519 =for apidoc sv_setsv_mg
3521 Like C<sv_setsv>, but also handles 'set' magic.
3527 Perl_sv_setsv_mg(pTHX_ SV *dstr, register SV *sstr)
3529 sv_setsv(dstr,sstr);
3534 =for apidoc sv_setpvn
3536 Copies a string into an SV. The C<len> parameter indicates the number of
3537 bytes to be copied. Does not handle 'set' magic. See C<sv_setpvn_mg>.
3543 Perl_sv_setpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3545 register char *dptr;
3547 SV_CHECK_THINKFIRST(sv);
3553 /* len is STRLEN which is unsigned, need to copy to signed */
3557 (void)SvUPGRADE(sv, SVt_PV);
3559 SvGROW(sv, len + 1);
3561 Move(ptr,dptr,len,char);
3564 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3569 =for apidoc sv_setpvn_mg
3571 Like C<sv_setpvn>, but also handles 'set' magic.
3577 Perl_sv_setpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3579 sv_setpvn(sv,ptr,len);
3584 =for apidoc sv_setpv
3586 Copies a string into an SV. The string must be null-terminated. Does not
3587 handle 'set' magic. See C<sv_setpv_mg>.
3593 Perl_sv_setpv(pTHX_ register SV *sv, register const char *ptr)
3595 register STRLEN len;
3597 SV_CHECK_THINKFIRST(sv);
3603 (void)SvUPGRADE(sv, SVt_PV);
3605 SvGROW(sv, len + 1);
3606 Move(ptr,SvPVX(sv),len+1,char);
3608 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3613 =for apidoc sv_setpv_mg
3615 Like C<sv_setpv>, but also handles 'set' magic.
3621 Perl_sv_setpv_mg(pTHX_ register SV *sv, register const char *ptr)
3628 =for apidoc sv_usepvn
3630 Tells an SV to use C<ptr> to find its string value. Normally the string is
3631 stored inside the SV but sv_usepvn allows the SV to use an outside string.
3632 The C<ptr> should point to memory that was allocated by C<malloc>. The
3633 string length, C<len>, must be supplied. This function will realloc the
3634 memory pointed to by C<ptr>, so that pointer should not be freed or used by
3635 the programmer after giving it to sv_usepvn. Does not handle 'set' magic.
3636 See C<sv_usepvn_mg>.
3642 Perl_sv_usepvn(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
3644 SV_CHECK_THINKFIRST(sv);
3645 (void)SvUPGRADE(sv, SVt_PV);
3650 (void)SvOOK_off(sv);
3651 if (SvPVX(sv) && SvLEN(sv))
3652 Safefree(SvPVX(sv));
3653 Renew(ptr, len+1, char);
3656 SvLEN_set(sv, len+1);
3658 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3663 =for apidoc sv_usepvn_mg
3665 Like C<sv_usepvn>, but also handles 'set' magic.
3671 Perl_sv_usepvn_mg(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
3673 sv_usepvn(sv,ptr,len);
3678 Perl_sv_force_normal_flags(pTHX_ register SV *sv, U32 flags)
3680 if (SvREADONLY(sv)) {
3682 char *pvx = SvPVX(sv);
3683 STRLEN len = SvCUR(sv);
3684 U32 hash = SvUVX(sv);
3685 SvGROW(sv, len + 1);
3686 Move(pvx,SvPVX(sv),len,char);
3690 unsharepvn(pvx,SvUTF8(sv)?-len:len,hash);
3692 else if (PL_curcop != &PL_compiling)
3693 Perl_croak(aTHX_ PL_no_modify);
3696 sv_unref_flags(sv, flags);
3697 else if (SvFAKE(sv) && SvTYPE(sv) == SVt_PVGV)
3702 Perl_sv_force_normal(pTHX_ register SV *sv)
3704 sv_force_normal_flags(sv, 0);
3710 Efficient removal of characters from the beginning of the string buffer.
3711 SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
3712 the string buffer. The C<ptr> becomes the first character of the adjusted
3719 Perl_sv_chop(pTHX_ register SV *sv, register char *ptr) /* like set but assuming ptr is in sv */
3723 register STRLEN delta;
3725 if (!ptr || !SvPOKp(sv))
3727 SV_CHECK_THINKFIRST(sv);
3728 if (SvTYPE(sv) < SVt_PVIV)
3729 sv_upgrade(sv,SVt_PVIV);
3732 if (!SvLEN(sv)) { /* make copy of shared string */
3733 char *pvx = SvPVX(sv);
3734 STRLEN len = SvCUR(sv);
3735 SvGROW(sv, len + 1);
3736 Move(pvx,SvPVX(sv),len,char);
3740 SvFLAGS(sv) |= SVf_OOK;
3742 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVp_IOK|SVp_NOK|SVf_IVisUV);
3743 delta = ptr - SvPVX(sv);
3751 =for apidoc sv_catpvn
3753 Concatenates the string onto the end of the string which is in the SV. The
3754 C<len> indicates number of bytes to copy. Handles 'get' magic, but not
3755 'set' magic. See C<sv_catpvn_mg>.
3761 Perl_sv_catpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3766 junk = SvPV_force(sv, tlen);
3767 SvGROW(sv, tlen + len + 1);
3770 Move(ptr,SvPVX(sv)+tlen,len,char);
3773 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3778 =for apidoc sv_catpvn_mg
3780 Like C<sv_catpvn>, but also handles 'set' magic.
3786 Perl_sv_catpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3788 sv_catpvn(sv,ptr,len);
3793 =for apidoc sv_catsv
3795 Concatenates the string from SV C<ssv> onto the end of the string in
3796 SV C<dsv>. Modifies C<dsv> but not C<ssv>. Handles 'get' magic, but
3797 not 'set' magic. See C<sv_catsv_mg>.
3802 Perl_sv_catsv(pTHX_ SV *dsv, register SV *ssv)
3808 if ((spv = SvPV(ssv, slen))) {
3809 bool dutf8 = DO_UTF8(dsv);
3810 bool sutf8 = DO_UTF8(ssv);
3813 sv_catpvn(dsv,spv,slen);
3816 /* Not modifying source SV, so taking a temporary copy. */
3817 SV* csv = sv_2mortal(newSVsv(ssv));
3821 sv_utf8_upgrade(csv);
3822 cpv = SvPV(csv,clen);
3823 sv_catpvn(dsv,cpv,clen);
3826 sv_utf8_upgrade(dsv);
3827 sv_catpvn(dsv,spv,slen);
3828 SvUTF8_on(dsv); /* If dsv has no wide characters. */
3835 =for apidoc sv_catsv_mg
3837 Like C<sv_catsv>, but also handles 'set' magic.
3843 Perl_sv_catsv_mg(pTHX_ SV *dsv, register SV *ssv)
3850 =for apidoc sv_catpv
3852 Concatenates the string onto the end of the string which is in the SV.
3853 Handles 'get' magic, but not 'set' magic. See C<sv_catpv_mg>.
3859 Perl_sv_catpv(pTHX_ register SV *sv, register const char *ptr)
3861 register STRLEN len;
3867 junk = SvPV_force(sv, tlen);
3869 SvGROW(sv, tlen + len + 1);
3872 Move(ptr,SvPVX(sv)+tlen,len+1,char);
3874 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3879 =for apidoc sv_catpv_mg
3881 Like C<sv_catpv>, but also handles 'set' magic.
3887 Perl_sv_catpv_mg(pTHX_ register SV *sv, register const char *ptr)
3894 Perl_newSV(pTHX_ STRLEN len)
3900 sv_upgrade(sv, SVt_PV);
3901 SvGROW(sv, len + 1);
3906 /* name is assumed to contain an SV* if (name && namelen == HEf_SVKEY) */
3909 =for apidoc sv_magic
3911 Adds magic to an SV.
3917 Perl_sv_magic(pTHX_ register SV *sv, SV *obj, int how, const char *name, I32 namlen)
3921 if (SvREADONLY(sv)) {
3922 if (PL_curcop != &PL_compiling && !strchr("gBf", how))
3923 Perl_croak(aTHX_ PL_no_modify);
3925 if (SvMAGICAL(sv) || (how == 't' && SvTYPE(sv) >= SVt_PVMG)) {
3926 if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
3933 (void)SvUPGRADE(sv, SVt_PVMG);
3935 Newz(702,mg, 1, MAGIC);
3936 mg->mg_moremagic = SvMAGIC(sv);
3939 if (!obj || obj == sv || how == '#' || how == 'r')
3942 mg->mg_obj = SvREFCNT_inc(obj);
3943 mg->mg_flags |= MGf_REFCOUNTED;
3946 mg->mg_len = namlen;
3949 mg->mg_ptr = savepvn(name, namlen);
3950 else if (namlen == HEf_SVKEY)
3951 mg->mg_ptr = (char*)SvREFCNT_inc((SV*)name);
3955 mg->mg_virtual = &PL_vtbl_sv;
3958 mg->mg_virtual = &PL_vtbl_amagic;
3961 mg->mg_virtual = &PL_vtbl_amagicelem;
3964 mg->mg_virtual = &PL_vtbl_ovrld;
3967 mg->mg_virtual = &PL_vtbl_bm;
3970 mg->mg_virtual = &PL_vtbl_regdata;
3973 mg->mg_virtual = &PL_vtbl_regdatum;
3976 mg->mg_virtual = &PL_vtbl_env;
3979 mg->mg_virtual = &PL_vtbl_fm;
3982 mg->mg_virtual = &PL_vtbl_envelem;
3985 mg->mg_virtual = &PL_vtbl_mglob;
3988 mg->mg_virtual = &PL_vtbl_isa;
3991 mg->mg_virtual = &PL_vtbl_isaelem;
3994 mg->mg_virtual = &PL_vtbl_nkeys;
4001 mg->mg_virtual = &PL_vtbl_dbline;
4005 mg->mg_virtual = &PL_vtbl_mutex;
4007 #endif /* USE_THREADS */
4008 #ifdef USE_LOCALE_COLLATE
4010 mg->mg_virtual = &PL_vtbl_collxfrm;
4012 #endif /* USE_LOCALE_COLLATE */
4014 mg->mg_virtual = &PL_vtbl_pack;
4018 mg->mg_virtual = &PL_vtbl_packelem;
4021 mg->mg_virtual = &PL_vtbl_regexp;
4024 mg->mg_virtual = &PL_vtbl_sig;
4027 mg->mg_virtual = &PL_vtbl_sigelem;
4030 mg->mg_virtual = &PL_vtbl_taint;
4034 mg->mg_virtual = &PL_vtbl_uvar;
4037 mg->mg_virtual = &PL_vtbl_vec;
4040 mg->mg_virtual = &PL_vtbl_substr;
4043 mg->mg_virtual = &PL_vtbl_defelem;
4046 mg->mg_virtual = &PL_vtbl_glob;
4049 mg->mg_virtual = &PL_vtbl_arylen;
4052 mg->mg_virtual = &PL_vtbl_pos;
4055 mg->mg_virtual = &PL_vtbl_backref;
4057 case '~': /* Reserved for use by extensions not perl internals. */
4058 /* Useful for attaching extension internal data to perl vars. */
4059 /* Note that multiple extensions may clash if magical scalars */
4060 /* etc holding private data from one are passed to another. */
4064 Perl_croak(aTHX_ "Don't know how to handle magic of type '%c'", how);
4068 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
4072 =for apidoc sv_unmagic
4074 Removes magic from an SV.
4080 Perl_sv_unmagic(pTHX_ SV *sv, int type)
4084 if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
4087 for (mg = *mgp; mg; mg = *mgp) {
4088 if (mg->mg_type == type) {
4089 MGVTBL* vtbl = mg->mg_virtual;
4090 *mgp = mg->mg_moremagic;
4091 if (vtbl && vtbl->svt_free)
4092 CALL_FPTR(vtbl->svt_free)(aTHX_ sv, mg);
4093 if (mg->mg_ptr && mg->mg_type != 'g')
4094 if (mg->mg_len >= 0)
4095 Safefree(mg->mg_ptr);
4096 else if (mg->mg_len == HEf_SVKEY)
4097 SvREFCNT_dec((SV*)mg->mg_ptr);
4098 if (mg->mg_flags & MGf_REFCOUNTED)
4099 SvREFCNT_dec(mg->mg_obj);
4103 mgp = &mg->mg_moremagic;
4107 SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
4114 =for apidoc sv_rvweaken
4122 Perl_sv_rvweaken(pTHX_ SV *sv)
4125 if (!SvOK(sv)) /* let undefs pass */
4128 Perl_croak(aTHX_ "Can't weaken a nonreference");
4129 else if (SvWEAKREF(sv)) {
4130 if (ckWARN(WARN_MISC))
4131 Perl_warner(aTHX_ WARN_MISC, "Reference is already weak");
4135 sv_add_backref(tsv, sv);
4142 S_sv_add_backref(pTHX_ SV *tsv, SV *sv)
4146 if (SvMAGICAL(tsv) && (mg = mg_find(tsv, '<')))
4147 av = (AV*)mg->mg_obj;
4150 sv_magic(tsv, (SV*)av, '<', NULL, 0);
4151 SvREFCNT_dec(av); /* for sv_magic */
4157 S_sv_del_backref(pTHX_ SV *sv)
4164 if (!SvMAGICAL(tsv) || !(mg = mg_find(tsv, '<')))
4165 Perl_croak(aTHX_ "panic: del_backref");
4166 av = (AV *)mg->mg_obj;
4171 svp[i] = &PL_sv_undef; /* XXX */
4178 =for apidoc sv_insert
4180 Inserts a string at the specified offset/length within the SV. Similar to
4181 the Perl substr() function.
4187 Perl_sv_insert(pTHX_ SV *bigstr, STRLEN offset, STRLEN len, char *little, STRLEN littlelen)
4191 register char *midend;
4192 register char *bigend;
4198 Perl_croak(aTHX_ "Can't modify non-existent substring");
4199 SvPV_force(bigstr, curlen);
4200 (void)SvPOK_only_UTF8(bigstr);
4201 if (offset + len > curlen) {
4202 SvGROW(bigstr, offset+len+1);
4203 Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
4204 SvCUR_set(bigstr, offset+len);
4208 i = littlelen - len;
4209 if (i > 0) { /* string might grow */
4210 big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
4211 mid = big + offset + len;
4212 midend = bigend = big + SvCUR(bigstr);
4215 while (midend > mid) /* shove everything down */
4216 *--bigend = *--midend;
4217 Move(little,big+offset,littlelen,char);
4223 Move(little,SvPVX(bigstr)+offset,len,char);
4228 big = SvPVX(bigstr);
4231 bigend = big + SvCUR(bigstr);
4233 if (midend > bigend)
4234 Perl_croak(aTHX_ "panic: sv_insert");
4236 if (mid - big > bigend - midend) { /* faster to shorten from end */
4238 Move(little, mid, littlelen,char);
4241 i = bigend - midend;
4243 Move(midend, mid, i,char);
4247 SvCUR_set(bigstr, mid - big);
4250 else if ((i = mid - big)) { /* faster from front */
4251 midend -= littlelen;
4253 sv_chop(bigstr,midend-i);
4258 Move(little, mid, littlelen,char);
4260 else if (littlelen) {
4261 midend -= littlelen;
4262 sv_chop(bigstr,midend);
4263 Move(little,midend,littlelen,char);
4266 sv_chop(bigstr,midend);
4272 =for apidoc sv_replace
4274 Make the first argument a copy of the second, then delete the original.
4280 Perl_sv_replace(pTHX_ register SV *sv, register SV *nsv)
4282 U32 refcnt = SvREFCNT(sv);
4283 SV_CHECK_THINKFIRST(sv);
4284 if (SvREFCNT(nsv) != 1 && ckWARN_d(WARN_INTERNAL))
4285 Perl_warner(aTHX_ WARN_INTERNAL, "Reference miscount in sv_replace()");
4286 if (SvMAGICAL(sv)) {
4290 sv_upgrade(nsv, SVt_PVMG);
4291 SvMAGIC(nsv) = SvMAGIC(sv);
4292 SvFLAGS(nsv) |= SvMAGICAL(sv);
4298 assert(!SvREFCNT(sv));
4299 StructCopy(nsv,sv,SV);
4300 SvREFCNT(sv) = refcnt;
4301 SvFLAGS(nsv) |= SVTYPEMASK; /* Mark as freed */
4306 =for apidoc sv_clear
4308 Clear an SV, making it empty. Does not free the memory used by the SV
4315 Perl_sv_clear(pTHX_ register SV *sv)
4319 assert(SvREFCNT(sv) == 0);
4322 if (PL_defstash) { /* Still have a symbol table? */
4327 Zero(&tmpref, 1, SV);
4328 sv_upgrade(&tmpref, SVt_RV);
4330 SvREADONLY_on(&tmpref); /* DESTROY() could be naughty */
4331 SvREFCNT(&tmpref) = 1;
4334 stash = SvSTASH(sv);
4335 destructor = StashHANDLER(stash,DESTROY);
4338 PUSHSTACKi(PERLSI_DESTROY);
4339 SvRV(&tmpref) = SvREFCNT_inc(sv);
4344 call_sv((SV*)destructor, G_DISCARD|G_EVAL|G_KEEPERR);
4350 } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
4352 del_XRV(SvANY(&tmpref));
4355 if (PL_in_clean_objs)
4356 Perl_croak(aTHX_ "DESTROY created new reference to dead object '%s'",
4358 /* DESTROY gave object new lease on life */
4364 SvREFCNT_dec(SvSTASH(sv)); /* possibly of changed persuasion */
4365 SvOBJECT_off(sv); /* Curse the object. */
4366 if (SvTYPE(sv) != SVt_PVIO)
4367 --PL_sv_objcount; /* XXX Might want something more general */
4370 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv))
4373 switch (SvTYPE(sv)) {
4376 IoIFP(sv) != PerlIO_stdin() &&
4377 IoIFP(sv) != PerlIO_stdout() &&
4378 IoIFP(sv) != PerlIO_stderr())
4380 io_close((IO*)sv, FALSE);
4382 if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
4383 PerlDir_close(IoDIRP(sv));
4384 IoDIRP(sv) = (DIR*)NULL;
4385 Safefree(IoTOP_NAME(sv));
4386 Safefree(IoFMT_NAME(sv));
4387 Safefree(IoBOTTOM_NAME(sv));
4402 SvREFCNT_dec(LvTARG(sv));
4406 Safefree(GvNAME(sv));
4407 /* cannot decrease stash refcount yet, as we might recursively delete
4408 ourselves when the refcnt drops to zero. Delay SvREFCNT_dec
4409 of stash until current sv is completely gone.
4410 -- JohnPC, 27 Mar 1998 */
4411 stash = GvSTASH(sv);
4417 (void)SvOOK_off(sv);
4425 SvREFCNT_dec(SvRV(sv));
4427 else if (SvPVX(sv) && SvLEN(sv))
4428 Safefree(SvPVX(sv));
4429 else if (SvPVX(sv) && SvREADONLY(sv) && SvFAKE(sv)) {
4430 unsharepvn(SvPVX(sv),SvUTF8(sv)?-SvCUR(sv):SvCUR(sv),SvUVX(sv));
4442 switch (SvTYPE(sv)) {
4458 del_XPVIV(SvANY(sv));
4461 del_XPVNV(SvANY(sv));
4464 del_XPVMG(SvANY(sv));
4467 del_XPVLV(SvANY(sv));
4470 del_XPVAV(SvANY(sv));
4473 del_XPVHV(SvANY(sv));
4476 del_XPVCV(SvANY(sv));
4479 del_XPVGV(SvANY(sv));
4480 /* code duplication for increased performance. */
4481 SvFLAGS(sv) &= SVf_BREAK;
4482 SvFLAGS(sv) |= SVTYPEMASK;
4483 /* decrease refcount of the stash that owns this GV, if any */
4485 SvREFCNT_dec(stash);
4486 return; /* not break, SvFLAGS reset already happened */
4488 del_XPVBM(SvANY(sv));
4491 del_XPVFM(SvANY(sv));
4494 del_XPVIO(SvANY(sv));
4497 SvFLAGS(sv) &= SVf_BREAK;
4498 SvFLAGS(sv) |= SVTYPEMASK;
4502 Perl_sv_newref(pTHX_ SV *sv)
4505 ATOMIC_INC(SvREFCNT(sv));
4512 Free the memory used by an SV.
4518 Perl_sv_free(pTHX_ SV *sv)
4520 int refcount_is_zero;
4524 if (SvREFCNT(sv) == 0) {
4525 if (SvFLAGS(sv) & SVf_BREAK)
4527 if (PL_in_clean_all) /* All is fair */
4529 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
4530 /* make sure SvREFCNT(sv)==0 happens very seldom */
4531 SvREFCNT(sv) = (~(U32)0)/2;
4534 if (ckWARN_d(WARN_INTERNAL))
4535 Perl_warner(aTHX_ WARN_INTERNAL, "Attempt to free unreferenced scalar");
4538 ATOMIC_DEC_AND_TEST(refcount_is_zero, SvREFCNT(sv));
4539 if (!refcount_is_zero)
4543 if (ckWARN_d(WARN_DEBUGGING))
4544 Perl_warner(aTHX_ WARN_DEBUGGING,
4545 "Attempt to free temp prematurely: SV 0x%"UVxf,
4550 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
4551 /* make sure SvREFCNT(sv)==0 happens very seldom */
4552 SvREFCNT(sv) = (~(U32)0)/2;
4563 Returns the length of the string in the SV. See also C<SvCUR>.
4569 Perl_sv_len(pTHX_ register SV *sv)
4578 len = mg_length(sv);
4580 junk = SvPV(sv, len);
4585 =for apidoc sv_len_utf8
4587 Returns the number of characters in the string in an SV, counting wide
4588 UTF8 bytes as a single character.
4594 Perl_sv_len_utf8(pTHX_ register SV *sv)
4600 return mg_length(sv);
4604 U8 *s = (U8*)SvPV(sv, len);
4606 return Perl_utf8_length(aTHX_ s, s + len);
4611 Perl_sv_pos_u2b(pTHX_ register SV *sv, I32* offsetp, I32* lenp)
4616 I32 uoffset = *offsetp;
4622 start = s = (U8*)SvPV(sv, len);
4624 while (s < send && uoffset--)
4628 *offsetp = s - start;
4632 while (s < send && ulen--)
4642 Perl_sv_pos_b2u(pTHX_ register SV *sv, I32* offsetp)
4651 s = (U8*)SvPV(sv, len);
4653 Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset");
4654 send = s + *offsetp;
4659 if (utf8_to_uv(s, UTF8SKIP(s), &n, 0)) {
4673 Returns a boolean indicating whether the strings in the two SVs are
4680 Perl_sv_eq(pTHX_ register SV *sv1, register SV *sv2)
4687 bool pv1tmp = FALSE;
4688 bool pv2tmp = FALSE;
4695 pv1 = SvPV(sv1, cur1);
4702 pv2 = SvPV(sv2, cur2);
4704 /* do not utf8ize the comparands as a side-effect */
4705 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTE) {
4706 bool is_utf8 = TRUE;
4708 if (PL_hints & HINT_UTF8_DISTINCT)
4712 char *pv = (char*)bytes_from_utf8((U8*)pv1, &cur1, &is_utf8);
4715 pv1tmp = (pv != pv1);
4719 char *pv = (char *)bytes_from_utf8((U8*)pv2, &cur2, &is_utf8);
4722 pv2tmp = (pv != pv2);
4728 eq = memEQ(pv1, pv2, cur1);
4741 Compares the strings in two SVs. Returns -1, 0, or 1 indicating whether the
4742 string in C<sv1> is less than, equal to, or greater than the string in
4749 Perl_sv_cmp(pTHX_ register SV *sv1, register SV *sv2)
4754 bool pv1tmp = FALSE;
4755 bool pv2tmp = FALSE;
4762 pv1 = SvPV(sv1, cur1);
4769 pv2 = SvPV(sv2, cur2);
4771 /* do not utf8ize the comparands as a side-effect */
4772 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTE) {
4773 if (PL_hints & HINT_UTF8_DISTINCT)
4774 return SvUTF8(sv1) ? 1 : -1;
4777 pv2 = (char*)bytes_to_utf8((U8*)pv2, &cur2);
4781 pv1 = (char*)bytes_to_utf8((U8*)pv1, &cur1);
4787 cmp = cur2 ? -1 : 0;
4791 I32 retval = memcmp((void*)pv1, (void*)pv2, cur1 < cur2 ? cur1 : cur2);
4794 cmp = retval < 0 ? -1 : 1;
4795 } else if (cur1 == cur2) {
4798 cmp = cur1 < cur2 ? -1 : 1;
4811 =for apidoc sv_cmp_locale
4813 Compares the strings in two SVs in a locale-aware manner. See
4820 Perl_sv_cmp_locale(pTHX_ register SV *sv1, register SV *sv2)
4822 #ifdef USE_LOCALE_COLLATE
4828 if (PL_collation_standard)
4832 pv1 = sv1 ? sv_collxfrm(sv1, &len1) : (char *) NULL;
4834 pv2 = sv2 ? sv_collxfrm(sv2, &len2) : (char *) NULL;
4836 if (!pv1 || !len1) {
4847 retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
4850 return retval < 0 ? -1 : 1;
4853 * When the result of collation is equality, that doesn't mean
4854 * that there are no differences -- some locales exclude some
4855 * characters from consideration. So to avoid false equalities,
4856 * we use the raw string as a tiebreaker.
4862 #endif /* USE_LOCALE_COLLATE */
4864 return sv_cmp(sv1, sv2);
4867 #ifdef USE_LOCALE_COLLATE
4869 * Any scalar variable may carry an 'o' magic that contains the
4870 * scalar data of the variable transformed to such a format that
4871 * a normal memory comparison can be used to compare the data
4872 * according to the locale settings.
4875 Perl_sv_collxfrm(pTHX_ SV *sv, STRLEN *nxp)
4879 mg = SvMAGICAL(sv) ? mg_find(sv, 'o') : (MAGIC *) NULL;
4880 if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
4885 Safefree(mg->mg_ptr);
4887 if ((xf = mem_collxfrm(s, len, &xlen))) {
4888 if (SvREADONLY(sv)) {
4891 return xf + sizeof(PL_collation_ix);
4894 sv_magic(sv, 0, 'o', 0, 0);
4895 mg = mg_find(sv, 'o');
4908 if (mg && mg->mg_ptr) {
4910 return mg->mg_ptr + sizeof(PL_collation_ix);
4918 #endif /* USE_LOCALE_COLLATE */
4923 Get a line from the filehandle and store it into the SV, optionally
4924 appending to the currently-stored string.
4930 Perl_sv_gets(pTHX_ register SV *sv, register PerlIO *fp, I32 append)
4934 register STDCHAR rslast;
4935 register STDCHAR *bp;
4939 SV_CHECK_THINKFIRST(sv);
4940 (void)SvUPGRADE(sv, SVt_PV);
4944 if (RsSNARF(PL_rs)) {
4948 else if (RsRECORD(PL_rs)) {
4949 I32 recsize, bytesread;
4952 /* Grab the size of the record we're getting */
4953 recsize = SvIV(SvRV(PL_rs));
4954 (void)SvPOK_only(sv); /* Validate pointer */
4955 buffer = SvGROW(sv, recsize + 1);
4958 /* VMS wants read instead of fread, because fread doesn't respect */
4959 /* RMS record boundaries. This is not necessarily a good thing to be */
4960 /* doing, but we've got no other real choice */
4961 bytesread = PerlLIO_read(PerlIO_fileno(fp), buffer, recsize);
4963 bytesread = PerlIO_read(fp, buffer, recsize);
4965 SvCUR_set(sv, bytesread);
4966 buffer[bytesread] = '\0';
4967 if (PerlIO_isutf8(fp))
4971 return(SvCUR(sv) ? SvPVX(sv) : Nullch);
4973 else if (RsPARA(PL_rs)) {
4978 /* Get $/ i.e. PL_rs into same encoding as stream wants */
4979 if (PerlIO_isutf8(fp)) {
4980 rsptr = SvPVutf8(PL_rs, rslen);
4983 if (SvUTF8(PL_rs)) {
4984 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
4985 Perl_croak(aTHX_ "Wide character in $/");
4988 rsptr = SvPV(PL_rs, rslen);
4992 rslast = rslen ? rsptr[rslen - 1] : '\0';
4994 if (RsPARA(PL_rs)) { /* have to do this both before and after */
4995 do { /* to make sure file boundaries work right */
4998 i = PerlIO_getc(fp);
5002 PerlIO_ungetc(fp,i);
5008 /* See if we know enough about I/O mechanism to cheat it ! */
5010 /* This used to be #ifdef test - it is made run-time test for ease
5011 of abstracting out stdio interface. One call should be cheap
5012 enough here - and may even be a macro allowing compile
5016 if (PerlIO_fast_gets(fp)) {
5019 * We're going to steal some values from the stdio struct
5020 * and put EVERYTHING in the innermost loop into registers.
5022 register STDCHAR *ptr;
5026 #if defined(VMS) && defined(PERLIO_IS_STDIO)
5027 /* An ungetc()d char is handled separately from the regular
5028 * buffer, so we getc() it back out and stuff it in the buffer.
5030 i = PerlIO_getc(fp);
5031 if (i == EOF) return 0;
5032 *(--((*fp)->_ptr)) = (unsigned char) i;
5036 /* Here is some breathtakingly efficient cheating */
5038 cnt = PerlIO_get_cnt(fp); /* get count into register */
5039 (void)SvPOK_only(sv); /* validate pointer */
5040 if (SvLEN(sv) - append <= cnt + 1) { /* make sure we have the room */
5041 if (cnt > 80 && SvLEN(sv) > append) {
5042 shortbuffered = cnt - SvLEN(sv) + append + 1;
5043 cnt -= shortbuffered;
5047 /* remember that cnt can be negative */
5048 SvGROW(sv, append + (cnt <= 0 ? 2 : (cnt + 1)));
5053 bp = (STDCHAR*)SvPVX(sv) + append; /* move these two too to registers */
5054 ptr = (STDCHAR*)PerlIO_get_ptr(fp);
5055 DEBUG_P(PerlIO_printf(Perl_debug_log,
5056 "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
5057 DEBUG_P(PerlIO_printf(Perl_debug_log,
5058 "Screamer: entering: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
5059 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
5060 PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
5065 while (cnt > 0) { /* this | eat */
5067 if ((*bp++ = *ptr++) == rslast) /* really | dust */
5068 goto thats_all_folks; /* screams | sed :-) */
5072 Copy(ptr, bp, cnt, char); /* this | eat */
5073 bp += cnt; /* screams | dust */
5074 ptr += cnt; /* louder | sed :-) */
5079 if (shortbuffered) { /* oh well, must extend */
5080 cnt = shortbuffered;
5082 bpx = bp - (STDCHAR*)SvPVX(sv); /* box up before relocation */
5084 SvGROW(sv, SvLEN(sv) + append + cnt + 2);
5085 bp = (STDCHAR*)SvPVX(sv) + bpx; /* unbox after relocation */
5089 DEBUG_P(PerlIO_printf(Perl_debug_log,
5090 "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
5091 PTR2UV(ptr),(long)cnt));
5092 PerlIO_set_ptrcnt(fp, ptr, cnt); /* deregisterize cnt and ptr */
5093 DEBUG_P(PerlIO_printf(Perl_debug_log,
5094 "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
5095 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
5096 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
5097 /* This used to call 'filbuf' in stdio form, but as that behaves like
5098 getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
5099 another abstraction. */
5100 i = PerlIO_getc(fp); /* get more characters */
5101 DEBUG_P(PerlIO_printf(Perl_debug_log,
5102 "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
5103 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
5104 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
5105 cnt = PerlIO_get_cnt(fp);
5106 ptr = (STDCHAR*)PerlIO_get_ptr(fp); /* reregisterize cnt and ptr */
5107 DEBUG_P(PerlIO_printf(Perl_debug_log,
5108 "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
5110 if (i == EOF) /* all done for ever? */
5111 goto thats_really_all_folks;
5113 bpx = bp - (STDCHAR*)SvPVX(sv); /* box up before relocation */
5115 SvGROW(sv, bpx + cnt + 2);
5116 bp = (STDCHAR*)SvPVX(sv) + bpx; /* unbox after relocation */
5118 *bp++ = i; /* store character from PerlIO_getc */
5120 if (rslen && (STDCHAR)i == rslast) /* all done for now? */
5121 goto thats_all_folks;
5125 if ((rslen > 1 && (bp - (STDCHAR*)SvPVX(sv) < rslen)) ||
5126 memNE((char*)bp - rslen, rsptr, rslen))
5127 goto screamer; /* go back to the fray */
5128 thats_really_all_folks:
5130 cnt += shortbuffered;
5131 DEBUG_P(PerlIO_printf(Perl_debug_log,
5132 "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
5133 PerlIO_set_ptrcnt(fp, ptr, cnt); /* put these back or we're in trouble */
5134 DEBUG_P(PerlIO_printf(Perl_debug_log,
5135 "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
5136 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
5137 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
5139 SvCUR_set(sv, bp - (STDCHAR*)SvPVX(sv)); /* set length */
5140 DEBUG_P(PerlIO_printf(Perl_debug_log,
5141 "Screamer: done, len=%ld, string=|%.*s|\n",
5142 (long)SvCUR(sv),(int)SvCUR(sv),SvPVX(sv)));
5147 /*The big, slow, and stupid way */
5150 /* Need to work around EPOC SDK features */
5151 /* On WINS: MS VC5 generates calls to _chkstk, */
5152 /* if a `large' stack frame is allocated */
5153 /* gcc on MARM does not generate calls like these */
5159 register STDCHAR *bpe = buf + sizeof(buf);
5161 while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = i) != rslast && bp < bpe)
5162 ; /* keep reading */
5166 cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
5167 /* Accomodate broken VAXC compiler, which applies U8 cast to
5168 * both args of ?: operator, causing EOF to change into 255
5170 if (cnt) { i = (U8)buf[cnt - 1]; } else { i = EOF; }
5174 sv_catpvn(sv, (char *) buf, cnt);
5176 sv_setpvn(sv, (char *) buf, cnt);
5178 if (i != EOF && /* joy */
5180 SvCUR(sv) < rslen ||
5181 memNE(SvPVX(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
5185 * If we're reading from a TTY and we get a short read,
5186 * indicating that the user hit his EOF character, we need
5187 * to notice it now, because if we try to read from the TTY
5188 * again, the EOF condition will disappear.
5190 * The comparison of cnt to sizeof(buf) is an optimization
5191 * that prevents unnecessary calls to feof().
5195 if (!(cnt < sizeof(buf) && PerlIO_eof(fp)))
5200 if (RsPARA(PL_rs)) { /* have to do this both before and after */
5201 while (i != EOF) { /* to make sure file boundaries work right */
5202 i = PerlIO_getc(fp);
5204 PerlIO_ungetc(fp,i);
5210 if (PerlIO_isutf8(fp))
5215 return (SvCUR(sv) - append) ? SvPVX(sv) : Nullch;
5222 Auto-increment of the value in the SV.
5228 Perl_sv_inc(pTHX_ register SV *sv)
5237 if (SvTHINKFIRST(sv)) {
5238 if (SvREADONLY(sv)) {
5239 if (PL_curcop != &PL_compiling)
5240 Perl_croak(aTHX_ PL_no_modify);
5244 if (SvAMAGIC(sv) && AMG_CALLun(sv,inc))
5246 i = PTR2IV(SvRV(sv));
5251 flags = SvFLAGS(sv);
5252 if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
5253 /* It's (privately or publicly) a float, but not tested as an
5254 integer, so test it to see. */
5256 flags = SvFLAGS(sv);
5258 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
5259 /* It's publicly an integer, or privately an integer-not-float */
5262 if (SvUVX(sv) == UV_MAX)
5263 sv_setnv(sv, (NV)UV_MAX + 1.0);
5265 (void)SvIOK_only_UV(sv);
5268 if (SvIVX(sv) == IV_MAX)
5269 sv_setuv(sv, (UV)IV_MAX + 1);
5271 (void)SvIOK_only(sv);
5277 if (flags & SVp_NOK) {
5278 (void)SvNOK_only(sv);
5283 if (!(flags & SVp_POK) || !*SvPVX(sv)) {
5284 if ((flags & SVTYPEMASK) < SVt_PVIV)
5285 sv_upgrade(sv, SVt_IV);
5286 (void)SvIOK_only(sv);
5291 while (isALPHA(*d)) d++;
5292 while (isDIGIT(*d)) d++;
5294 #ifdef PERL_PRESERVE_IVUV
5295 /* Got to punt this an an integer if needs be, but we don't issue
5296 warnings. Probably ought to make the sv_iv_please() that does
5297 the conversion if possible, and silently. */
5298 I32 numtype = looks_like_number(sv);
5299 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
5300 /* Need to try really hard to see if it's an integer.
5301 9.22337203685478e+18 is an integer.
5302 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
5303 so $a="9.22337203685478e+18"; $a+0; $a++
5304 needs to be the same as $a="9.22337203685478e+18"; $a++
5311 /* sv_2iv *should* have made this an NV */
5312 if (flags & SVp_NOK) {
5313 (void)SvNOK_only(sv);
5317 /* I don't think we can get here. Maybe I should assert this
5318 And if we do get here I suspect that sv_setnv will croak. NWC
5320 #if defined(USE_LONG_DOUBLE)
5321 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",
5322 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5324 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%g\n",
5325 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5328 #endif /* PERL_PRESERVE_IVUV */
5329 sv_setnv(sv,Atof(SvPVX(sv)) + 1.0);
5333 while (d >= SvPVX(sv)) {
5341 /* MKS: The original code here died if letters weren't consecutive.
5342 * at least it didn't have to worry about non-C locales. The
5343 * new code assumes that ('z'-'a')==('Z'-'A'), letters are
5344 * arranged in order (although not consecutively) and that only
5345 * [A-Za-z] are accepted by isALPHA in the C locale.
5347 if (*d != 'z' && *d != 'Z') {
5348 do { ++*d; } while (!isALPHA(*d));
5351 *(d--) -= 'z' - 'a';
5356 *(d--) -= 'z' - 'a' + 1;
5360 /* oh,oh, the number grew */
5361 SvGROW(sv, SvCUR(sv) + 2);
5363 for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX(sv); d--)
5374 Auto-decrement of the value in the SV.
5380 Perl_sv_dec(pTHX_ register SV *sv)
5388 if (SvTHINKFIRST(sv)) {
5389 if (SvREADONLY(sv)) {
5390 if (PL_curcop != &PL_compiling)
5391 Perl_croak(aTHX_ PL_no_modify);
5395 if (SvAMAGIC(sv) && AMG_CALLun(sv,dec))
5397 i = PTR2IV(SvRV(sv));
5402 /* Unlike sv_inc we don't have to worry about string-never-numbers
5403 and keeping them magic. But we mustn't warn on punting */
5404 flags = SvFLAGS(sv);
5405 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
5406 /* It's publicly an integer, or privately an integer-not-float */
5409 if (SvUVX(sv) == 0) {
5410 (void)SvIOK_only(sv);
5414 (void)SvIOK_only_UV(sv);
5418 if (SvIVX(sv) == IV_MIN)
5419 sv_setnv(sv, (NV)IV_MIN - 1.0);
5421 (void)SvIOK_only(sv);
5427 if (flags & SVp_NOK) {
5429 (void)SvNOK_only(sv);
5432 if (!(flags & SVp_POK)) {
5433 if ((flags & SVTYPEMASK) < SVt_PVNV)
5434 sv_upgrade(sv, SVt_NV);
5436 (void)SvNOK_only(sv);
5439 #ifdef PERL_PRESERVE_IVUV
5441 I32 numtype = looks_like_number(sv);
5442 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
5443 /* Need to try really hard to see if it's an integer.
5444 9.22337203685478e+18 is an integer.
5445 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
5446 so $a="9.22337203685478e+18"; $a+0; $a--
5447 needs to be the same as $a="9.22337203685478e+18"; $a--
5454 /* sv_2iv *should* have made this an NV */
5455 if (flags & SVp_NOK) {
5456 (void)SvNOK_only(sv);
5460 /* I don't think we can get here. Maybe I should assert this
5461 And if we do get here I suspect that sv_setnv will croak. NWC
5463 #if defined(USE_LONG_DOUBLE)
5464 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",
5465 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5467 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%g\n",
5468 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5472 #endif /* PERL_PRESERVE_IVUV */
5473 sv_setnv(sv,Atof(SvPVX(sv)) - 1.0); /* punt */
5477 =for apidoc sv_mortalcopy
5479 Creates a new SV which is a copy of the original SV. The new SV is marked
5485 /* Make a string that will exist for the duration of the expression
5486 * evaluation. Actually, it may have to last longer than that, but
5487 * hopefully we won't free it until it has been assigned to a
5488 * permanent location. */
5491 Perl_sv_mortalcopy(pTHX_ SV *oldstr)
5496 sv_setsv(sv,oldstr);
5498 PL_tmps_stack[++PL_tmps_ix] = sv;
5504 =for apidoc sv_newmortal
5506 Creates a new SV which is mortal. The reference count of the SV is set to 1.
5512 Perl_sv_newmortal(pTHX)
5517 SvFLAGS(sv) = SVs_TEMP;
5519 PL_tmps_stack[++PL_tmps_ix] = sv;
5524 =for apidoc sv_2mortal
5526 Marks an SV as mortal. The SV will be destroyed when the current context
5532 /* same thing without the copying */
5535 Perl_sv_2mortal(pTHX_ register SV *sv)
5539 if (SvREADONLY(sv) && SvIMMORTAL(sv))
5542 PL_tmps_stack[++PL_tmps_ix] = sv;
5550 Creates a new SV and copies a string into it. The reference count for the
5551 SV is set to 1. If C<len> is zero, Perl will compute the length using
5552 strlen(). For efficiency, consider using C<newSVpvn> instead.
5558 Perl_newSVpv(pTHX_ const char *s, STRLEN len)
5565 sv_setpvn(sv,s,len);
5570 =for apidoc newSVpvn
5572 Creates a new SV and copies a string into it. The reference count for the
5573 SV is set to 1. Note that if C<len> is zero, Perl will create a zero length
5574 string. You are responsible for ensuring that the source string is at least
5581 Perl_newSVpvn(pTHX_ const char *s, STRLEN len)
5586 sv_setpvn(sv,s,len);
5591 =for apidoc newSVpvn_share
5593 Creates a new SV and populates it with a string from
5594 the string table. Turns on READONLY and FAKE.
5595 The idea here is that as string table is used for shared hash
5596 keys these strings will have SvPVX == HeKEY and hash lookup
5597 will avoid string compare.
5603 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
5606 bool is_utf8 = FALSE;
5611 if (is_utf8 && !(PL_hints & HINT_UTF8_DISTINCT))
5612 src = (char*)bytes_from_utf8((U8*)src, (STRLEN*)&len, &is_utf8);
5614 PERL_HASH(hash, src, len);
5616 sv_upgrade(sv, SVt_PVIV);
5617 SvPVX(sv) = sharepvn(src, is_utf8?-len:len, hash);
5629 #if defined(PERL_IMPLICIT_CONTEXT)
5631 Perl_newSVpvf_nocontext(const char* pat, ...)
5636 va_start(args, pat);
5637 sv = vnewSVpvf(pat, &args);
5644 =for apidoc newSVpvf
5646 Creates a new SV an initialize it with the string formatted like
5653 Perl_newSVpvf(pTHX_ const char* pat, ...)
5657 va_start(args, pat);
5658 sv = vnewSVpvf(pat, &args);
5664 Perl_vnewSVpvf(pTHX_ const char* pat, va_list* args)
5668 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
5675 Creates a new SV and copies a floating point value into it.
5676 The reference count for the SV is set to 1.
5682 Perl_newSVnv(pTHX_ NV n)
5694 Creates a new SV and copies an integer into it. The reference count for the
5701 Perl_newSViv(pTHX_ IV i)
5713 Creates a new SV and copies an unsigned integer into it.
5714 The reference count for the SV is set to 1.
5720 Perl_newSVuv(pTHX_ UV u)
5730 =for apidoc newRV_noinc
5732 Creates an RV wrapper for an SV. The reference count for the original
5733 SV is B<not> incremented.
5739 Perl_newRV_noinc(pTHX_ SV *tmpRef)
5744 sv_upgrade(sv, SVt_RV);
5751 /* newRV_inc is #defined to newRV in sv.h */
5753 Perl_newRV(pTHX_ SV *tmpRef)
5755 return newRV_noinc(SvREFCNT_inc(tmpRef));
5761 Creates a new SV which is an exact duplicate of the original SV.
5766 /* make an exact duplicate of old */
5769 Perl_newSVsv(pTHX_ register SV *old)
5775 if (SvTYPE(old) == SVTYPEMASK) {
5776 if (ckWARN_d(WARN_INTERNAL))
5777 Perl_warner(aTHX_ WARN_INTERNAL, "semi-panic: attempt to dup freed string");
5792 Perl_sv_reset(pTHX_ register char *s, HV *stash)
5800 char todo[PERL_UCHAR_MAX+1];
5805 if (!*s) { /* reset ?? searches */
5806 for (pm = HvPMROOT(stash); pm; pm = pm->op_pmnext) {
5807 pm->op_pmdynflags &= ~PMdf_USED;
5812 /* reset variables */
5814 if (!HvARRAY(stash))
5817 Zero(todo, 256, char);
5819 i = (unsigned char)*s;
5823 max = (unsigned char)*s++;
5824 for ( ; i <= max; i++) {
5827 for (i = 0; i <= (I32) HvMAX(stash); i++) {
5828 for (entry = HvARRAY(stash)[i];
5830 entry = HeNEXT(entry))
5832 if (!todo[(U8)*HeKEY(entry)])
5834 gv = (GV*)HeVAL(entry);
5836 if (SvTHINKFIRST(sv)) {
5837 if (!SvREADONLY(sv) && SvROK(sv))
5842 if (SvTYPE(sv) >= SVt_PV) {
5844 if (SvPVX(sv) != Nullch)
5851 if (GvHV(gv) && !HvNAME(GvHV(gv))) {
5853 #ifdef USE_ENVIRON_ARRAY
5855 environ[0] = Nullch;
5864 Perl_sv_2io(pTHX_ SV *sv)
5870 switch (SvTYPE(sv)) {
5878 Perl_croak(aTHX_ "Bad filehandle: %s", GvNAME(gv));
5882 Perl_croak(aTHX_ PL_no_usym, "filehandle");
5884 return sv_2io(SvRV(sv));
5885 gv = gv_fetchpv(SvPV(sv,n_a), FALSE, SVt_PVIO);
5891 Perl_croak(aTHX_ "Bad filehandle: %s", SvPV(sv,n_a));
5898 Perl_sv_2cv(pTHX_ SV *sv, HV **st, GV **gvp, I32 lref)
5905 return *gvp = Nullgv, Nullcv;
5906 switch (SvTYPE(sv)) {
5925 SV **sp = &sv; /* Used in tryAMAGICunDEREF macro. */
5926 tryAMAGICunDEREF(to_cv);
5929 if (SvTYPE(sv) == SVt_PVCV) {
5938 Perl_croak(aTHX_ "Not a subroutine reference");
5943 gv = gv_fetchpv(SvPV(sv, n_a), lref, SVt_PVCV);
5949 if (lref && !GvCVu(gv)) {
5952 tmpsv = NEWSV(704,0);
5953 gv_efullname3(tmpsv, gv, Nullch);
5954 /* XXX this is probably not what they think they're getting.
5955 * It has the same effect as "sub name;", i.e. just a forward
5957 newSUB(start_subparse(FALSE, 0),
5958 newSVOP(OP_CONST, 0, tmpsv),
5963 Perl_croak(aTHX_ "Unable to create sub named \"%s\"", SvPV(sv,n_a));
5972 Returns true if the SV has a true value by Perl's rules.
5978 Perl_sv_true(pTHX_ register SV *sv)
5984 if ((tXpv = (XPV*)SvANY(sv)) &&
5985 (tXpv->xpv_cur > 1 ||
5986 (tXpv->xpv_cur && *tXpv->xpv_pv != '0')))
5993 return SvIVX(sv) != 0;
5996 return SvNVX(sv) != 0.0;
5998 return sv_2bool(sv);
6004 Perl_sv_iv(pTHX_ register SV *sv)
6008 return (IV)SvUVX(sv);
6015 Perl_sv_uv(pTHX_ register SV *sv)
6020 return (UV)SvIVX(sv);
6026 Perl_sv_nv(pTHX_ register SV *sv)
6034 Perl_sv_pv(pTHX_ SV *sv)
6041 return sv_2pv(sv, &n_a);
6045 Perl_sv_pvn(pTHX_ SV *sv, STRLEN *lp)
6051 return sv_2pv(sv, lp);
6055 =for apidoc sv_pvn_force
6057 Get a sensible string out of the SV somehow.
6063 Perl_sv_pvn_force(pTHX_ SV *sv, STRLEN *lp)
6067 if (SvTHINKFIRST(sv) && !SvROK(sv))
6068 sv_force_normal(sv);
6074 if (SvTYPE(sv) > SVt_PVLV && SvTYPE(sv) != SVt_PVFM) {
6075 Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
6076 PL_op_name[PL_op->op_type]);
6080 if (s != SvPVX(sv)) { /* Almost, but not quite, sv_setpvn() */
6085 (void)SvUPGRADE(sv, SVt_PV); /* Never FALSE */
6086 SvGROW(sv, len + 1);
6087 Move(s,SvPVX(sv),len,char);
6092 SvPOK_on(sv); /* validate pointer */
6094 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
6095 PTR2UV(sv),SvPVX(sv)));
6102 Perl_sv_pvbyte(pTHX_ SV *sv)
6108 Perl_sv_pvbyten(pTHX_ SV *sv, STRLEN *lp)
6110 return sv_pvn(sv,lp);
6114 Perl_sv_pvbyten_force(pTHX_ SV *sv, STRLEN *lp)
6116 return sv_pvn_force(sv,lp);
6120 Perl_sv_pvutf8(pTHX_ SV *sv)
6122 sv_utf8_upgrade(sv);
6127 Perl_sv_pvutf8n(pTHX_ SV *sv, STRLEN *lp)
6129 sv_utf8_upgrade(sv);
6130 return sv_pvn(sv,lp);
6134 =for apidoc sv_pvutf8n_force
6136 Get a sensible UTF8-encoded string out of the SV somehow. See
6143 Perl_sv_pvutf8n_force(pTHX_ SV *sv, STRLEN *lp)
6145 sv_utf8_upgrade(sv);
6146 return sv_pvn_force(sv,lp);
6150 =for apidoc sv_reftype
6152 Returns a string describing what the SV is a reference to.
6158 Perl_sv_reftype(pTHX_ SV *sv, int ob)
6160 if (ob && SvOBJECT(sv))
6161 return HvNAME(SvSTASH(sv));
6163 switch (SvTYPE(sv)) {
6177 case SVt_PVLV: return "LVALUE";
6178 case SVt_PVAV: return "ARRAY";
6179 case SVt_PVHV: return "HASH";
6180 case SVt_PVCV: return "CODE";
6181 case SVt_PVGV: return "GLOB";
6182 case SVt_PVFM: return "FORMAT";
6183 case SVt_PVIO: return "IO";
6184 default: return "UNKNOWN";
6190 =for apidoc sv_isobject
6192 Returns a boolean indicating whether the SV is an RV pointing to a blessed
6193 object. If the SV is not an RV, or if the object is not blessed, then this
6200 Perl_sv_isobject(pTHX_ SV *sv)
6217 Returns a boolean indicating whether the SV is blessed into the specified
6218 class. This does not check for subtypes; use C<sv_derived_from> to verify
6219 an inheritance relationship.
6225 Perl_sv_isa(pTHX_ SV *sv, const char *name)
6237 return strEQ(HvNAME(SvSTASH(sv)), name);
6243 Creates a new SV for the RV, C<rv>, to point to. If C<rv> is not an RV then
6244 it will be upgraded to one. If C<classname> is non-null then the new SV will
6245 be blessed in the specified package. The new SV is returned and its
6246 reference count is 1.
6252 Perl_newSVrv(pTHX_ SV *rv, const char *classname)
6258 SV_CHECK_THINKFIRST(rv);
6261 if (SvTYPE(rv) >= SVt_PVMG) {
6262 U32 refcnt = SvREFCNT(rv);
6266 SvREFCNT(rv) = refcnt;
6269 if (SvTYPE(rv) < SVt_RV)
6270 sv_upgrade(rv, SVt_RV);
6271 else if (SvTYPE(rv) > SVt_RV) {
6272 (void)SvOOK_off(rv);
6273 if (SvPVX(rv) && SvLEN(rv))
6274 Safefree(SvPVX(rv));
6284 HV* stash = gv_stashpv(classname, TRUE);
6285 (void)sv_bless(rv, stash);
6291 =for apidoc sv_setref_pv
6293 Copies a pointer into a new SV, optionally blessing the SV. The C<rv>
6294 argument will be upgraded to an RV. That RV will be modified to point to
6295 the new SV. If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
6296 into the SV. The C<classname> argument indicates the package for the
6297 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
6298 will be returned and will have a reference count of 1.
6300 Do not use with other Perl types such as HV, AV, SV, CV, because those
6301 objects will become corrupted by the pointer copy process.
6303 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
6309 Perl_sv_setref_pv(pTHX_ SV *rv, const char *classname, void *pv)
6312 sv_setsv(rv, &PL_sv_undef);
6316 sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
6321 =for apidoc sv_setref_iv
6323 Copies an integer into a new SV, optionally blessing the SV. The C<rv>
6324 argument will be upgraded to an RV. That RV will be modified to point to
6325 the new SV. The C<classname> argument indicates the package for the
6326 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
6327 will be returned and will have a reference count of 1.
6333 Perl_sv_setref_iv(pTHX_ SV *rv, const char *classname, IV iv)
6335 sv_setiv(newSVrv(rv,classname), iv);
6340 =for apidoc sv_setref_nv
6342 Copies a double into a new SV, optionally blessing the SV. The C<rv>
6343 argument will be upgraded to an RV. That RV will be modified to point to
6344 the new SV. The C<classname> argument indicates the package for the
6345 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
6346 will be returned and will have a reference count of 1.
6352 Perl_sv_setref_nv(pTHX_ SV *rv, const char *classname, NV nv)
6354 sv_setnv(newSVrv(rv,classname), nv);
6359 =for apidoc sv_setref_pvn
6361 Copies a string into a new SV, optionally blessing the SV. The length of the
6362 string must be specified with C<n>. The C<rv> argument will be upgraded to
6363 an RV. That RV will be modified to point to the new SV. The C<classname>
6364 argument indicates the package for the blessing. Set C<classname> to
6365 C<Nullch> to avoid the blessing. The new SV will be returned and will have
6366 a reference count of 1.
6368 Note that C<sv_setref_pv> copies the pointer while this copies the string.
6374 Perl_sv_setref_pvn(pTHX_ SV *rv, const char *classname, char *pv, STRLEN n)
6376 sv_setpvn(newSVrv(rv,classname), pv, n);
6381 =for apidoc sv_bless
6383 Blesses an SV into a specified package. The SV must be an RV. The package
6384 must be designated by its stash (see C<gv_stashpv()>). The reference count
6385 of the SV is unaffected.
6391 Perl_sv_bless(pTHX_ SV *sv, HV *stash)
6395 Perl_croak(aTHX_ "Can't bless non-reference value");
6397 if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
6398 if (SvREADONLY(tmpRef))
6399 Perl_croak(aTHX_ PL_no_modify);
6400 if (SvOBJECT(tmpRef)) {
6401 if (SvTYPE(tmpRef) != SVt_PVIO)
6403 SvREFCNT_dec(SvSTASH(tmpRef));
6406 SvOBJECT_on(tmpRef);
6407 if (SvTYPE(tmpRef) != SVt_PVIO)
6409 (void)SvUPGRADE(tmpRef, SVt_PVMG);
6410 SvSTASH(tmpRef) = (HV*)SvREFCNT_inc(stash);
6421 S_sv_unglob(pTHX_ SV *sv)
6425 assert(SvTYPE(sv) == SVt_PVGV);
6430 SvREFCNT_dec(GvSTASH(sv));
6431 GvSTASH(sv) = Nullhv;
6433 sv_unmagic(sv, '*');
6434 Safefree(GvNAME(sv));
6437 /* need to keep SvANY(sv) in the right arena */
6438 xpvmg = new_XPVMG();
6439 StructCopy(SvANY(sv), xpvmg, XPVMG);
6440 del_XPVGV(SvANY(sv));
6443 SvFLAGS(sv) &= ~SVTYPEMASK;
6444 SvFLAGS(sv) |= SVt_PVMG;
6448 =for apidoc sv_unref_flags
6450 Unsets the RV status of the SV, and decrements the reference count of
6451 whatever was being referenced by the RV. This can almost be thought of
6452 as a reversal of C<newSVrv>. The C<cflags> argument can contain
6453 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
6454 (otherwise the decrementing is conditional on the reference count being
6455 different from one or the reference being a readonly SV).
6462 Perl_sv_unref_flags(pTHX_ SV *sv, U32 flags)
6466 if (SvWEAKREF(sv)) {
6474 if (SvREFCNT(rv) != 1 || SvREADONLY(rv) || flags) /* SV_IMMEDIATE_UNREF */
6476 else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
6477 sv_2mortal(rv); /* Schedule for freeing later */
6481 =for apidoc sv_unref
6483 Unsets the RV status of the SV, and decrements the reference count of
6484 whatever was being referenced by the RV. This can almost be thought of
6485 as a reversal of C<newSVrv>. This is C<sv_unref_flags> with the C<flag>
6486 being zero. See C<SvROK_off>.
6492 Perl_sv_unref(pTHX_ SV *sv)
6494 sv_unref_flags(sv, 0);
6498 Perl_sv_taint(pTHX_ SV *sv)
6500 sv_magic((sv), Nullsv, 't', Nullch, 0);
6504 Perl_sv_untaint(pTHX_ SV *sv)
6506 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
6507 MAGIC *mg = mg_find(sv, 't');
6514 Perl_sv_tainted(pTHX_ SV *sv)
6516 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
6517 MAGIC *mg = mg_find(sv, 't');
6518 if (mg && ((mg->mg_len & 1) || ((mg->mg_len & 2) && mg->mg_obj == sv)))
6525 =for apidoc sv_setpviv
6527 Copies an integer into the given SV, also updating its string value.
6528 Does not handle 'set' magic. See C<sv_setpviv_mg>.
6534 Perl_sv_setpviv(pTHX_ SV *sv, IV iv)
6536 char buf[TYPE_CHARS(UV)];
6538 char *ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
6540 sv_setpvn(sv, ptr, ebuf - ptr);
6545 =for apidoc sv_setpviv_mg
6547 Like C<sv_setpviv>, but also handles 'set' magic.
6553 Perl_sv_setpviv_mg(pTHX_ SV *sv, IV iv)
6555 char buf[TYPE_CHARS(UV)];
6557 char *ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
6559 sv_setpvn(sv, ptr, ebuf - ptr);
6563 #if defined(PERL_IMPLICIT_CONTEXT)
6565 Perl_sv_setpvf_nocontext(SV *sv, const char* pat, ...)
6569 va_start(args, pat);
6570 sv_vsetpvf(sv, pat, &args);
6576 Perl_sv_setpvf_mg_nocontext(SV *sv, const char* pat, ...)
6580 va_start(args, pat);
6581 sv_vsetpvf_mg(sv, pat, &args);
6587 =for apidoc sv_setpvf
6589 Processes its arguments like C<sprintf> and sets an SV to the formatted
6590 output. Does not handle 'set' magic. See C<sv_setpvf_mg>.
6596 Perl_sv_setpvf(pTHX_ SV *sv, const char* pat, ...)
6599 va_start(args, pat);
6600 sv_vsetpvf(sv, pat, &args);
6605 Perl_sv_vsetpvf(pTHX_ SV *sv, const char* pat, va_list* args)
6607 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6611 =for apidoc sv_setpvf_mg
6613 Like C<sv_setpvf>, but also handles 'set' magic.
6619 Perl_sv_setpvf_mg(pTHX_ SV *sv, const char* pat, ...)
6622 va_start(args, pat);
6623 sv_vsetpvf_mg(sv, pat, &args);
6628 Perl_sv_vsetpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
6630 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6634 #if defined(PERL_IMPLICIT_CONTEXT)
6636 Perl_sv_catpvf_nocontext(SV *sv, const char* pat, ...)
6640 va_start(args, pat);
6641 sv_vcatpvf(sv, pat, &args);
6646 Perl_sv_catpvf_mg_nocontext(SV *sv, const char* pat, ...)
6650 va_start(args, pat);
6651 sv_vcatpvf_mg(sv, pat, &args);
6657 =for apidoc sv_catpvf
6659 Processes its arguments like C<sprintf> and appends the formatted output
6660 to an SV. Handles 'get' magic, but not 'set' magic. C<SvSETMAGIC()> must
6661 typically be called after calling this function to handle 'set' magic.
6667 Perl_sv_catpvf(pTHX_ SV *sv, const char* pat, ...)
6670 va_start(args, pat);
6671 sv_vcatpvf(sv, pat, &args);
6676 Perl_sv_vcatpvf(pTHX_ SV *sv, const char* pat, va_list* args)
6678 sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6682 =for apidoc sv_catpvf_mg
6684 Like C<sv_catpvf>, but also handles 'set' magic.
6690 Perl_sv_catpvf_mg(pTHX_ SV *sv, const char* pat, ...)
6693 va_start(args, pat);
6694 sv_vcatpvf_mg(sv, pat, &args);
6699 Perl_sv_vcatpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
6701 sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6706 =for apidoc sv_vsetpvfn
6708 Works like C<vcatpvfn> but copies the text into the SV instead of
6715 Perl_sv_vsetpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
6717 sv_setpvn(sv, "", 0);
6718 sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, maybe_tainted);
6722 S_expect_number(pTHX_ char** pattern)
6725 switch (**pattern) {
6726 case '1': case '2': case '3':
6727 case '4': case '5': case '6':
6728 case '7': case '8': case '9':
6729 while (isDIGIT(**pattern))
6730 var = var * 10 + (*(*pattern)++ - '0');
6734 #define EXPECT_NUMBER(pattern, var) (var = S_expect_number(aTHX_ &pattern))
6737 =for apidoc sv_vcatpvfn
6739 Processes its arguments like C<vsprintf> and appends the formatted output
6740 to an SV. Uses an array of SVs if the C style variable argument list is
6741 missing (NULL). When running with taint checks enabled, indicates via
6742 C<maybe_tainted> if results are untrustworthy (often due to the use of
6749 Perl_sv_vcatpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
6756 static char nullstr[] = "(null)";
6759 /* no matter what, this is a string now */
6760 (void)SvPV_force(sv, origlen);
6762 /* special-case "", "%s", and "%_" */
6765 if (patlen == 2 && pat[0] == '%') {
6769 char *s = va_arg(*args, char*);
6770 sv_catpv(sv, s ? s : nullstr);
6772 else if (svix < svmax) {
6773 sv_catsv(sv, *svargs);
6774 if (DO_UTF8(*svargs))
6780 argsv = va_arg(*args, SV*);
6781 sv_catsv(sv, argsv);
6786 /* See comment on '_' below */
6791 patend = (char*)pat + patlen;
6792 for (p = (char*)pat; p < patend; p = q) {
6795 bool vectorize = FALSE;
6796 bool vectorarg = FALSE;
6797 bool vec_utf = FALSE;
6803 bool has_precis = FALSE;
6805 bool is_utf = FALSE;
6808 U8 utf8buf[UTF8_MAXLEN+1];
6809 STRLEN esignlen = 0;
6811 char *eptr = Nullch;
6813 /* Times 4: a decimal digit takes more than 3 binary digits.
6814 * NV_DIG: mantissa takes than many decimal digits.
6815 * Plus 32: Playing safe. */
6816 char ebuf[IV_DIG * 4 + NV_DIG + 32];
6817 /* large enough for "%#.#f" --chip */
6818 /* what about long double NVs? --jhi */
6821 U8 *vecstr = Null(U8*);
6833 STRLEN dotstrlen = 1;
6834 I32 efix = 0; /* explicit format parameter index */
6835 I32 ewix = 0; /* explicit width index */
6836 I32 epix = 0; /* explicit precision index */
6837 I32 evix = 0; /* explicit vector index */
6838 bool asterisk = FALSE;
6840 /* echo everything up to the next format specification */
6841 for (q = p; q < patend && *q != '%'; ++q) ;
6843 sv_catpvn(sv, p, q - p);
6850 We allow format specification elements in this order:
6851 \d+\$ explicit format parameter index
6853 \*?(\d+\$)?v vector with optional (optionally specified) arg
6854 \d+|\*(\d+\$)? width using optional (optionally specified) arg
6855 \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
6857 [%bcdefginopsux_DFOUX] format (mandatory)
6859 if (EXPECT_NUMBER(q, width)) {
6900 if (EXPECT_NUMBER(q, ewix))
6909 if (vectorarg = asterisk) {
6919 EXPECT_NUMBER(q, width);
6924 vecsv = va_arg(*args, SV*);
6926 vecsv = (evix ? evix <= svmax : svix < svmax) ?
6927 svargs[ewix ? ewix-1 : svix++] : &PL_sv_undef;
6928 dotstr = SvPVx(vecsv, dotstrlen);
6933 vecsv = va_arg(*args, SV*);
6934 vecstr = (U8*)SvPVx(vecsv,veclen);
6935 vec_utf = DO_UTF8(vecsv);
6937 else if (efix ? efix <= svmax : svix < svmax) {
6938 vecsv = svargs[efix ? efix-1 : svix++];
6939 vecstr = (U8*)SvPVx(vecsv,veclen);
6940 vec_utf = DO_UTF8(vecsv);
6950 i = va_arg(*args, int);
6952 i = (ewix ? ewix <= svmax : svix < svmax) ?
6953 SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
6955 width = (i < 0) ? -i : i;
6965 if (EXPECT_NUMBER(q, epix) && *q++ != '$')
6968 i = va_arg(*args, int);
6970 i = (ewix ? ewix <= svmax : svix < svmax)
6971 ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
6972 precis = (i < 0) ? 0 : i;
6977 precis = precis * 10 + (*q++ - '0');
6985 #if defined(HAS_QUAD) || (defined(HAS_LONG_DOUBLE) && defined(USE_LONG_DOUBLE))
6996 #if defined(HAS_QUAD) || (defined(HAS_LONG_DOUBLE) && defined(USE_LONG_DOUBLE))
6997 if (*(q + 1) == 'l') { /* lld, llf */
7020 argsv = (efix ? efix <= svmax : svix < svmax) ?
7021 svargs[efix ? efix-1 : svix++] : &PL_sv_undef;
7028 uv = args ? va_arg(*args, int) : SvIVx(argsv);
7029 if ((uv > 255 || (uv > 127 && SvUTF8(sv))) && !IN_BYTE) {
7030 eptr = (char*)utf8buf;
7031 elen = uv_to_utf8((U8*)eptr, uv) - utf8buf;
7043 eptr = va_arg(*args, char*);
7045 #ifdef MACOS_TRADITIONAL
7046 /* On MacOS, %#s format is used for Pascal strings */
7051 elen = strlen(eptr);
7054 elen = sizeof nullstr - 1;
7058 eptr = SvPVx(argsv, elen);
7059 if (DO_UTF8(argsv)) {
7060 if (has_precis && precis < elen) {
7062 sv_pos_u2b(argsv, &p, 0); /* sticks at end */
7065 if (width) { /* fudge width (can't fudge elen) */
7066 width += elen - sv_len_utf8(argsv);
7075 * The "%_" hack might have to be changed someday,
7076 * if ISO or ANSI decide to use '_' for something.
7077 * So we keep it hidden from users' code.
7081 argsv = va_arg(*args, SV*);
7082 eptr = SvPVx(argsv, elen);
7088 if (has_precis && elen > precis)
7097 uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
7115 iv = (IV)utf8_to_uv(vecstr, veclen, &ulen, 0);
7125 case 'h': iv = (short)va_arg(*args, int); break;
7126 default: iv = va_arg(*args, int); break;
7127 case 'l': iv = va_arg(*args, long); break;
7128 case 'V': iv = va_arg(*args, IV); break;
7130 case 'q': iv = va_arg(*args, Quad_t); break;
7137 case 'h': iv = (short)iv; break;
7139 case 'l': iv = (long)iv; break;
7142 case 'q': iv = (Quad_t)iv; break;
7149 esignbuf[esignlen++] = plus;
7153 esignbuf[esignlen++] = '-';
7195 uv = utf8_to_uv(vecstr, veclen, &ulen, 0);
7205 case 'h': uv = (unsigned short)va_arg(*args, unsigned); break;
7206 default: uv = va_arg(*args, unsigned); break;
7207 case 'l': uv = va_arg(*args, unsigned long); break;
7208 case 'V': uv = va_arg(*args, UV); break;
7210 case 'q': uv = va_arg(*args, Quad_t); break;
7217 case 'h': uv = (unsigned short)uv; break;
7219 case 'l': uv = (unsigned long)uv; break;
7222 case 'q': uv = (Quad_t)uv; break;
7228 eptr = ebuf + sizeof ebuf;
7234 p = (char*)((c == 'X')
7235 ? "0123456789ABCDEF" : "0123456789abcdef");
7241 esignbuf[esignlen++] = '0';
7242 esignbuf[esignlen++] = c; /* 'x' or 'X' */
7248 *--eptr = '0' + dig;
7250 if (alt && *eptr != '0')
7256 *--eptr = '0' + dig;
7259 esignbuf[esignlen++] = '0';
7260 esignbuf[esignlen++] = 'b';
7263 default: /* it had better be ten or less */
7264 #if defined(PERL_Y2KWARN)
7265 if (ckWARN(WARN_Y2K)) {
7267 char *s = SvPV(sv,n);
7268 if (n >= 2 && s[n-2] == '1' && s[n-1] == '9'
7269 && (n == 2 || !isDIGIT(s[n-3])))
7271 Perl_warner(aTHX_ WARN_Y2K,
7272 "Possible Y2K bug: %%%c %s",
7273 c, "format string following '19'");
7279 *--eptr = '0' + dig;
7280 } while (uv /= base);
7283 elen = (ebuf + sizeof ebuf) - eptr;
7286 zeros = precis - elen;
7287 else if (precis == 0 && elen == 1 && *eptr == '0')
7292 /* FLOATING POINT */
7295 c = 'f'; /* maybe %F isn't supported here */
7301 /* This is evil, but floating point is even more evil */
7304 nv = args ? va_arg(*args, NV) : SvNVx(argsv);
7307 if (c != 'e' && c != 'E') {
7309 (void)Perl_frexp(nv, &i);
7310 if (i == PERL_INT_MIN)
7311 Perl_die(aTHX_ "panic: frexp");
7313 need = BIT_DIGITS(i);
7315 need += has_precis ? precis : 6; /* known default */
7319 need += 20; /* fudge factor */
7320 if (PL_efloatsize < need) {
7321 Safefree(PL_efloatbuf);
7322 PL_efloatsize = need + 20; /* more fudge */
7323 New(906, PL_efloatbuf, PL_efloatsize, char);
7324 PL_efloatbuf[0] = '\0';
7327 eptr = ebuf + sizeof ebuf;
7330 #if defined(USE_LONG_DOUBLE) && defined(PERL_PRIfldbl)
7332 /* Copy the one or more characters in a long double
7333 * format before the 'base' ([efgEFG]) character to
7334 * the format string. */
7335 static char const prifldbl[] = PERL_PRIfldbl;
7336 char const *p = prifldbl + sizeof(prifldbl) - 3;
7337 while (p >= prifldbl) { *--eptr = *p--; }
7342 do { *--eptr = '0' + (base % 10); } while (base /= 10);
7347 do { *--eptr = '0' + (base % 10); } while (base /= 10);
7359 /* No taint. Otherwise we are in the strange situation
7360 * where printf() taints but print($float) doesn't.
7362 (void)sprintf(PL_efloatbuf, eptr, nv);
7364 eptr = PL_efloatbuf;
7365 elen = strlen(PL_efloatbuf);
7372 i = SvCUR(sv) - origlen;
7375 case 'h': *(va_arg(*args, short*)) = i; break;
7376 default: *(va_arg(*args, int*)) = i; break;
7377 case 'l': *(va_arg(*args, long*)) = i; break;
7378 case 'V': *(va_arg(*args, IV*)) = i; break;
7380 case 'q': *(va_arg(*args, Quad_t*)) = i; break;
7385 sv_setuv_mg(argsv, (UV)i);
7386 continue; /* not "break" */
7393 if (!args && ckWARN(WARN_PRINTF) &&
7394 (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)) {
7395 SV *msg = sv_newmortal();
7396 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %s: ",
7397 (PL_op->op_type == OP_PRTF) ? "printf" : "sprintf");
7400 Perl_sv_catpvf(aTHX_ msg,
7401 "\"%%%c\"", c & 0xFF);
7403 Perl_sv_catpvf(aTHX_ msg,
7404 "\"%%\\%03"UVof"\"",
7407 sv_catpv(msg, "end of string");
7408 Perl_warner(aTHX_ WARN_PRINTF, "%"SVf, msg); /* yes, this is reentrant */
7411 /* output mangled stuff ... */
7417 /* ... right here, because formatting flags should not apply */
7418 SvGROW(sv, SvCUR(sv) + elen + 1);
7420 Copy(eptr, p, elen, char);
7423 SvCUR(sv) = p - SvPVX(sv);
7424 continue; /* not "break" */
7427 have = esignlen + zeros + elen;
7428 need = (have > width ? have : width);
7431 SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
7433 if (esignlen && fill == '0') {
7434 for (i = 0; i < esignlen; i++)
7438 memset(p, fill, gap);
7441 if (esignlen && fill != '0') {
7442 for (i = 0; i < esignlen; i++)
7446 for (i = zeros; i; i--)
7450 Copy(eptr, p, elen, char);
7454 memset(p, ' ', gap);
7459 Copy(dotstr, p, dotstrlen, char);
7463 vectorize = FALSE; /* done iterating over vecstr */
7468 SvCUR(sv) = p - SvPVX(sv);
7476 #if defined(USE_ITHREADS)
7478 #if defined(USE_THREADS)
7479 # include "error: USE_THREADS and USE_ITHREADS are incompatible"
7482 #ifndef GpREFCNT_inc
7483 # define GpREFCNT_inc(gp) ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
7487 #define sv_dup_inc(s) SvREFCNT_inc(sv_dup(s))
7488 #define av_dup(s) (AV*)sv_dup((SV*)s)
7489 #define av_dup_inc(s) (AV*)SvREFCNT_inc(sv_dup((SV*)s))
7490 #define hv_dup(s) (HV*)sv_dup((SV*)s)
7491 #define hv_dup_inc(s) (HV*)SvREFCNT_inc(sv_dup((SV*)s))
7492 #define cv_dup(s) (CV*)sv_dup((SV*)s)
7493 #define cv_dup_inc(s) (CV*)SvREFCNT_inc(sv_dup((SV*)s))
7494 #define io_dup(s) (IO*)sv_dup((SV*)s)
7495 #define io_dup_inc(s) (IO*)SvREFCNT_inc(sv_dup((SV*)s))
7496 #define gv_dup(s) (GV*)sv_dup((SV*)s)
7497 #define gv_dup_inc(s) (GV*)SvREFCNT_inc(sv_dup((SV*)s))
7498 #define SAVEPV(p) (p ? savepv(p) : Nullch)
7499 #define SAVEPVN(p,n) (p ? savepvn(p,n) : Nullch)
7502 Perl_re_dup(pTHX_ REGEXP *r)
7504 /* XXX fix when pmop->op_pmregexp becomes shared */
7505 return ReREFCNT_inc(r);
7509 Perl_fp_dup(pTHX_ PerlIO *fp, char type)
7513 return (PerlIO*)NULL;
7515 /* look for it in the table first */
7516 ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
7520 /* create anew and remember what it is */
7521 ret = PerlIO_fdupopen(aTHX_ fp);
7522 ptr_table_store(PL_ptr_table, fp, ret);
7527 Perl_dirp_dup(pTHX_ DIR *dp)
7536 Perl_gp_dup(pTHX_ GP *gp)
7541 /* look for it in the table first */
7542 ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
7546 /* create anew and remember what it is */
7547 Newz(0, ret, 1, GP);
7548 ptr_table_store(PL_ptr_table, gp, ret);
7551 ret->gp_refcnt = 0; /* must be before any other dups! */
7552 ret->gp_sv = sv_dup_inc(gp->gp_sv);
7553 ret->gp_io = io_dup_inc(gp->gp_io);
7554 ret->gp_form = cv_dup_inc(gp->gp_form);
7555 ret->gp_av = av_dup_inc(gp->gp_av);
7556 ret->gp_hv = hv_dup_inc(gp->gp_hv);
7557 ret->gp_egv = gv_dup(gp->gp_egv); /* GvEGV is not refcounted */
7558 ret->gp_cv = cv_dup_inc(gp->gp_cv);
7559 ret->gp_cvgen = gp->gp_cvgen;
7560 ret->gp_flags = gp->gp_flags;
7561 ret->gp_line = gp->gp_line;
7562 ret->gp_file = gp->gp_file; /* points to COP.cop_file */
7567 Perl_mg_dup(pTHX_ MAGIC *mg)
7569 MAGIC *mgret = (MAGIC*)NULL;
7572 return (MAGIC*)NULL;
7573 /* look for it in the table first */
7574 mgret = (MAGIC*)ptr_table_fetch(PL_ptr_table, mg);
7578 for (; mg; mg = mg->mg_moremagic) {
7580 Newz(0, nmg, 1, MAGIC);
7584 mgprev->mg_moremagic = nmg;
7585 nmg->mg_virtual = mg->mg_virtual; /* XXX copy dynamic vtable? */
7586 nmg->mg_private = mg->mg_private;
7587 nmg->mg_type = mg->mg_type;
7588 nmg->mg_flags = mg->mg_flags;
7589 if (mg->mg_type == 'r') {
7590 nmg->mg_obj = (SV*)re_dup((REGEXP*)mg->mg_obj);
7593 nmg->mg_obj = (mg->mg_flags & MGf_REFCOUNTED)
7594 ? sv_dup_inc(mg->mg_obj)
7595 : sv_dup(mg->mg_obj);
7597 nmg->mg_len = mg->mg_len;
7598 nmg->mg_ptr = mg->mg_ptr; /* XXX random ptr? */
7599 if (mg->mg_ptr && mg->mg_type != 'g') {
7600 if (mg->mg_len >= 0) {
7601 nmg->mg_ptr = SAVEPVN(mg->mg_ptr, mg->mg_len);
7602 if (mg->mg_type == 'c' && AMT_AMAGIC((AMT*)mg->mg_ptr)) {
7603 AMT *amtp = (AMT*)mg->mg_ptr;
7604 AMT *namtp = (AMT*)nmg->mg_ptr;
7606 for (i = 1; i < NofAMmeth; i++) {
7607 namtp->table[i] = cv_dup_inc(amtp->table[i]);
7611 else if (mg->mg_len == HEf_SVKEY)
7612 nmg->mg_ptr = (char*)sv_dup_inc((SV*)mg->mg_ptr);
7620 Perl_ptr_table_new(pTHX)
7623 Newz(0, tbl, 1, PTR_TBL_t);
7626 Newz(0, tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
7631 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *tbl, void *sv)
7633 PTR_TBL_ENT_t *tblent;
7634 UV hash = PTR2UV(sv);
7636 tblent = tbl->tbl_ary[hash & tbl->tbl_max];
7637 for (; tblent; tblent = tblent->next) {
7638 if (tblent->oldval == sv)
7639 return tblent->newval;
7645 Perl_ptr_table_store(pTHX_ PTR_TBL_t *tbl, void *oldv, void *newv)
7647 PTR_TBL_ENT_t *tblent, **otblent;
7648 /* XXX this may be pessimal on platforms where pointers aren't good
7649 * hash values e.g. if they grow faster in the most significant
7651 UV hash = PTR2UV(oldv);
7655 otblent = &tbl->tbl_ary[hash & tbl->tbl_max];
7656 for (tblent = *otblent; tblent; i=0, tblent = tblent->next) {
7657 if (tblent->oldval == oldv) {
7658 tblent->newval = newv;
7663 Newz(0, tblent, 1, PTR_TBL_ENT_t);
7664 tblent->oldval = oldv;
7665 tblent->newval = newv;
7666 tblent->next = *otblent;
7669 if (i && tbl->tbl_items > tbl->tbl_max)
7670 ptr_table_split(tbl);
7674 Perl_ptr_table_split(pTHX_ PTR_TBL_t *tbl)
7676 PTR_TBL_ENT_t **ary = tbl->tbl_ary;
7677 UV oldsize = tbl->tbl_max + 1;
7678 UV newsize = oldsize * 2;
7681 Renew(ary, newsize, PTR_TBL_ENT_t*);
7682 Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
7683 tbl->tbl_max = --newsize;
7685 for (i=0; i < oldsize; i++, ary++) {
7686 PTR_TBL_ENT_t **curentp, **entp, *ent;
7689 curentp = ary + oldsize;
7690 for (entp = ary, ent = *ary; ent; ent = *entp) {
7691 if ((newsize & PTR2UV(ent->oldval)) != i) {
7693 ent->next = *curentp;
7708 Perl_sv_dup(pTHX_ SV *sstr)
7712 if (!sstr || SvTYPE(sstr) == SVTYPEMASK)
7714 /* look for it in the table first */
7715 dstr = (SV*)ptr_table_fetch(PL_ptr_table, sstr);
7719 /* create anew and remember what it is */
7721 ptr_table_store(PL_ptr_table, sstr, dstr);
7724 SvFLAGS(dstr) = SvFLAGS(sstr);
7725 SvFLAGS(dstr) &= ~SVf_OOK; /* don't propagate OOK hack */
7726 SvREFCNT(dstr) = 0; /* must be before any other dups! */
7729 if (SvANY(sstr) && PL_watch_pvx && SvPVX(sstr) == PL_watch_pvx)
7730 PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
7731 PL_watch_pvx, SvPVX(sstr));
7734 switch (SvTYPE(sstr)) {
7739 SvANY(dstr) = new_XIV();
7740 SvIVX(dstr) = SvIVX(sstr);
7743 SvANY(dstr) = new_XNV();
7744 SvNVX(dstr) = SvNVX(sstr);
7747 SvANY(dstr) = new_XRV();
7748 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7751 SvANY(dstr) = new_XPV();
7752 SvCUR(dstr) = SvCUR(sstr);
7753 SvLEN(dstr) = SvLEN(sstr);
7755 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7756 else if (SvPVX(sstr) && SvLEN(sstr))
7757 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7759 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7762 SvANY(dstr) = new_XPVIV();
7763 SvCUR(dstr) = SvCUR(sstr);
7764 SvLEN(dstr) = SvLEN(sstr);
7765 SvIVX(dstr) = SvIVX(sstr);
7767 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7768 else if (SvPVX(sstr) && SvLEN(sstr))
7769 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7771 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7774 SvANY(dstr) = new_XPVNV();
7775 SvCUR(dstr) = SvCUR(sstr);
7776 SvLEN(dstr) = SvLEN(sstr);
7777 SvIVX(dstr) = SvIVX(sstr);
7778 SvNVX(dstr) = SvNVX(sstr);
7780 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7781 else if (SvPVX(sstr) && SvLEN(sstr))
7782 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7784 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7787 SvANY(dstr) = new_XPVMG();
7788 SvCUR(dstr) = SvCUR(sstr);
7789 SvLEN(dstr) = SvLEN(sstr);
7790 SvIVX(dstr) = SvIVX(sstr);
7791 SvNVX(dstr) = SvNVX(sstr);
7792 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7793 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7795 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7796 else if (SvPVX(sstr) && SvLEN(sstr))
7797 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7799 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7802 SvANY(dstr) = new_XPVBM();
7803 SvCUR(dstr) = SvCUR(sstr);
7804 SvLEN(dstr) = SvLEN(sstr);
7805 SvIVX(dstr) = SvIVX(sstr);
7806 SvNVX(dstr) = SvNVX(sstr);
7807 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7808 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7810 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7811 else if (SvPVX(sstr) && SvLEN(sstr))
7812 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7814 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7815 BmRARE(dstr) = BmRARE(sstr);
7816 BmUSEFUL(dstr) = BmUSEFUL(sstr);
7817 BmPREVIOUS(dstr)= BmPREVIOUS(sstr);
7820 SvANY(dstr) = new_XPVLV();
7821 SvCUR(dstr) = SvCUR(sstr);
7822 SvLEN(dstr) = SvLEN(sstr);
7823 SvIVX(dstr) = SvIVX(sstr);
7824 SvNVX(dstr) = SvNVX(sstr);
7825 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7826 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7828 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7829 else if (SvPVX(sstr) && SvLEN(sstr))
7830 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7832 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7833 LvTARGOFF(dstr) = LvTARGOFF(sstr); /* XXX sometimes holds PMOP* when DEBUGGING */
7834 LvTARGLEN(dstr) = LvTARGLEN(sstr);
7835 LvTARG(dstr) = sv_dup_inc(LvTARG(sstr));
7836 LvTYPE(dstr) = LvTYPE(sstr);
7839 SvANY(dstr) = new_XPVGV();
7840 SvCUR(dstr) = SvCUR(sstr);
7841 SvLEN(dstr) = SvLEN(sstr);
7842 SvIVX(dstr) = SvIVX(sstr);
7843 SvNVX(dstr) = SvNVX(sstr);
7844 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7845 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7847 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7848 else if (SvPVX(sstr) && SvLEN(sstr))
7849 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7851 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7852 GvNAMELEN(dstr) = GvNAMELEN(sstr);
7853 GvNAME(dstr) = SAVEPVN(GvNAME(sstr), GvNAMELEN(sstr));
7854 GvSTASH(dstr) = hv_dup_inc(GvSTASH(sstr));
7855 GvFLAGS(dstr) = GvFLAGS(sstr);
7856 GvGP(dstr) = gp_dup(GvGP(sstr));
7857 (void)GpREFCNT_inc(GvGP(dstr));
7860 SvANY(dstr) = new_XPVIO();
7861 SvCUR(dstr) = SvCUR(sstr);
7862 SvLEN(dstr) = SvLEN(sstr);
7863 SvIVX(dstr) = SvIVX(sstr);
7864 SvNVX(dstr) = SvNVX(sstr);
7865 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7866 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7868 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7869 else if (SvPVX(sstr) && SvLEN(sstr))
7870 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7872 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7873 IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(sstr));
7874 if (IoOFP(sstr) == IoIFP(sstr))
7875 IoOFP(dstr) = IoIFP(dstr);
7877 IoOFP(dstr) = fp_dup(IoOFP(sstr), IoTYPE(sstr));
7878 /* PL_rsfp_filters entries have fake IoDIRP() */
7879 if (IoDIRP(sstr) && !(IoFLAGS(sstr) & IOf_FAKE_DIRP))
7880 IoDIRP(dstr) = dirp_dup(IoDIRP(sstr));
7882 IoDIRP(dstr) = IoDIRP(sstr);
7883 IoLINES(dstr) = IoLINES(sstr);
7884 IoPAGE(dstr) = IoPAGE(sstr);
7885 IoPAGE_LEN(dstr) = IoPAGE_LEN(sstr);
7886 IoLINES_LEFT(dstr) = IoLINES_LEFT(sstr);
7887 IoTOP_NAME(dstr) = SAVEPV(IoTOP_NAME(sstr));
7888 IoTOP_GV(dstr) = gv_dup(IoTOP_GV(sstr));
7889 IoFMT_NAME(dstr) = SAVEPV(IoFMT_NAME(sstr));
7890 IoFMT_GV(dstr) = gv_dup(IoFMT_GV(sstr));
7891 IoBOTTOM_NAME(dstr) = SAVEPV(IoBOTTOM_NAME(sstr));
7892 IoBOTTOM_GV(dstr) = gv_dup(IoBOTTOM_GV(sstr));
7893 IoSUBPROCESS(dstr) = IoSUBPROCESS(sstr);
7894 IoTYPE(dstr) = IoTYPE(sstr);
7895 IoFLAGS(dstr) = IoFLAGS(sstr);
7898 SvANY(dstr) = new_XPVAV();
7899 SvCUR(dstr) = SvCUR(sstr);
7900 SvLEN(dstr) = SvLEN(sstr);
7901 SvIVX(dstr) = SvIVX(sstr);
7902 SvNVX(dstr) = SvNVX(sstr);
7903 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7904 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7905 AvARYLEN((AV*)dstr) = sv_dup_inc(AvARYLEN((AV*)sstr));
7906 AvFLAGS((AV*)dstr) = AvFLAGS((AV*)sstr);
7907 if (AvARRAY((AV*)sstr)) {
7908 SV **dst_ary, **src_ary;
7909 SSize_t items = AvFILLp((AV*)sstr) + 1;
7911 src_ary = AvARRAY((AV*)sstr);
7912 Newz(0, dst_ary, AvMAX((AV*)sstr)+1, SV*);
7913 ptr_table_store(PL_ptr_table, src_ary, dst_ary);
7914 SvPVX(dstr) = (char*)dst_ary;
7915 AvALLOC((AV*)dstr) = dst_ary;
7916 if (AvREAL((AV*)sstr)) {
7918 *dst_ary++ = sv_dup_inc(*src_ary++);
7922 *dst_ary++ = sv_dup(*src_ary++);
7924 items = AvMAX((AV*)sstr) - AvFILLp((AV*)sstr);
7925 while (items-- > 0) {
7926 *dst_ary++ = &PL_sv_undef;
7930 SvPVX(dstr) = Nullch;
7931 AvALLOC((AV*)dstr) = (SV**)NULL;
7935 SvANY(dstr) = new_XPVHV();
7936 SvCUR(dstr) = SvCUR(sstr);
7937 SvLEN(dstr) = SvLEN(sstr);
7938 SvIVX(dstr) = SvIVX(sstr);
7939 SvNVX(dstr) = SvNVX(sstr);
7940 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7941 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7942 HvRITER((HV*)dstr) = HvRITER((HV*)sstr);
7943 if (HvARRAY((HV*)sstr)) {
7945 XPVHV *dxhv = (XPVHV*)SvANY(dstr);
7946 XPVHV *sxhv = (XPVHV*)SvANY(sstr);
7947 Newz(0, dxhv->xhv_array,
7948 PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1), char);
7949 while (i <= sxhv->xhv_max) {
7950 ((HE**)dxhv->xhv_array)[i] = he_dup(((HE**)sxhv->xhv_array)[i],
7951 !!HvSHAREKEYS(sstr));
7954 dxhv->xhv_eiter = he_dup(sxhv->xhv_eiter, !!HvSHAREKEYS(sstr));
7957 SvPVX(dstr) = Nullch;
7958 HvEITER((HV*)dstr) = (HE*)NULL;
7960 HvPMROOT((HV*)dstr) = HvPMROOT((HV*)sstr); /* XXX */
7961 HvNAME((HV*)dstr) = SAVEPV(HvNAME((HV*)sstr));
7964 SvANY(dstr) = new_XPVFM();
7965 FmLINES(dstr) = FmLINES(sstr);
7969 SvANY(dstr) = new_XPVCV();
7971 SvCUR(dstr) = SvCUR(sstr);
7972 SvLEN(dstr) = SvLEN(sstr);
7973 SvIVX(dstr) = SvIVX(sstr);
7974 SvNVX(dstr) = SvNVX(sstr);
7975 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7976 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7977 if (SvPVX(sstr) && SvLEN(sstr))
7978 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7980 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7981 CvSTASH(dstr) = hv_dup(CvSTASH(sstr));/* NOTE: not refcounted */
7982 CvSTART(dstr) = CvSTART(sstr);
7983 CvROOT(dstr) = OpREFCNT_inc(CvROOT(sstr));
7984 CvXSUB(dstr) = CvXSUB(sstr);
7985 CvXSUBANY(dstr) = CvXSUBANY(sstr);
7986 CvGV(dstr) = gv_dup_inc(CvGV(sstr));
7987 CvDEPTH(dstr) = CvDEPTH(sstr);
7988 if (CvPADLIST(sstr) && !AvREAL(CvPADLIST(sstr))) {
7989 /* XXX padlists are real, but pretend to be not */
7990 AvREAL_on(CvPADLIST(sstr));
7991 CvPADLIST(dstr) = av_dup_inc(CvPADLIST(sstr));
7992 AvREAL_off(CvPADLIST(sstr));
7993 AvREAL_off(CvPADLIST(dstr));
7996 CvPADLIST(dstr) = av_dup_inc(CvPADLIST(sstr));
7997 CvOUTSIDE(dstr) = cv_dup_inc(CvOUTSIDE(sstr));
7998 CvFLAGS(dstr) = CvFLAGS(sstr);
8001 Perl_croak(aTHX_ "Bizarre SvTYPE [%d]", SvTYPE(sstr));
8005 if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
8012 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max)
8017 return (PERL_CONTEXT*)NULL;
8019 /* look for it in the table first */
8020 ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
8024 /* create anew and remember what it is */
8025 Newz(56, ncxs, max + 1, PERL_CONTEXT);
8026 ptr_table_store(PL_ptr_table, cxs, ncxs);
8029 PERL_CONTEXT *cx = &cxs[ix];
8030 PERL_CONTEXT *ncx = &ncxs[ix];
8031 ncx->cx_type = cx->cx_type;
8032 if (CxTYPE(cx) == CXt_SUBST) {
8033 Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
8036 ncx->blk_oldsp = cx->blk_oldsp;
8037 ncx->blk_oldcop = cx->blk_oldcop;
8038 ncx->blk_oldretsp = cx->blk_oldretsp;
8039 ncx->blk_oldmarksp = cx->blk_oldmarksp;
8040 ncx->blk_oldscopesp = cx->blk_oldscopesp;
8041 ncx->blk_oldpm = cx->blk_oldpm;
8042 ncx->blk_gimme = cx->blk_gimme;
8043 switch (CxTYPE(cx)) {
8045 ncx->blk_sub.cv = (cx->blk_sub.olddepth == 0
8046 ? cv_dup_inc(cx->blk_sub.cv)
8047 : cv_dup(cx->blk_sub.cv));
8048 ncx->blk_sub.argarray = (cx->blk_sub.hasargs
8049 ? av_dup_inc(cx->blk_sub.argarray)
8051 ncx->blk_sub.savearray = av_dup(cx->blk_sub.savearray);
8052 ncx->blk_sub.olddepth = cx->blk_sub.olddepth;
8053 ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
8054 ncx->blk_sub.lval = cx->blk_sub.lval;
8057 ncx->blk_eval.old_in_eval = cx->blk_eval.old_in_eval;
8058 ncx->blk_eval.old_op_type = cx->blk_eval.old_op_type;
8059 ncx->blk_eval.old_namesv = sv_dup_inc(cx->blk_eval.old_namesv);
8060 ncx->blk_eval.old_eval_root = cx->blk_eval.old_eval_root;
8061 ncx->blk_eval.cur_text = sv_dup(cx->blk_eval.cur_text);
8064 ncx->blk_loop.label = cx->blk_loop.label;
8065 ncx->blk_loop.resetsp = cx->blk_loop.resetsp;
8066 ncx->blk_loop.redo_op = cx->blk_loop.redo_op;
8067 ncx->blk_loop.next_op = cx->blk_loop.next_op;
8068 ncx->blk_loop.last_op = cx->blk_loop.last_op;
8069 ncx->blk_loop.iterdata = (CxPADLOOP(cx)
8070 ? cx->blk_loop.iterdata
8071 : gv_dup((GV*)cx->blk_loop.iterdata));
8072 ncx->blk_loop.oldcurpad
8073 = (SV**)ptr_table_fetch(PL_ptr_table,
8074 cx->blk_loop.oldcurpad);
8075 ncx->blk_loop.itersave = sv_dup_inc(cx->blk_loop.itersave);
8076 ncx->blk_loop.iterlval = sv_dup_inc(cx->blk_loop.iterlval);
8077 ncx->blk_loop.iterary = av_dup_inc(cx->blk_loop.iterary);
8078 ncx->blk_loop.iterix = cx->blk_loop.iterix;
8079 ncx->blk_loop.itermax = cx->blk_loop.itermax;
8082 ncx->blk_sub.cv = cv_dup(cx->blk_sub.cv);
8083 ncx->blk_sub.gv = gv_dup(cx->blk_sub.gv);
8084 ncx->blk_sub.dfoutgv = gv_dup_inc(cx->blk_sub.dfoutgv);
8085 ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
8098 Perl_si_dup(pTHX_ PERL_SI *si)
8103 return (PERL_SI*)NULL;
8105 /* look for it in the table first */
8106 nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
8110 /* create anew and remember what it is */
8111 Newz(56, nsi, 1, PERL_SI);
8112 ptr_table_store(PL_ptr_table, si, nsi);
8114 nsi->si_stack = av_dup_inc(si->si_stack);
8115 nsi->si_cxix = si->si_cxix;
8116 nsi->si_cxmax = si->si_cxmax;
8117 nsi->si_cxstack = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax);
8118 nsi->si_type = si->si_type;
8119 nsi->si_prev = si_dup(si->si_prev);
8120 nsi->si_next = si_dup(si->si_next);
8121 nsi->si_markoff = si->si_markoff;
8126 #define POPINT(ss,ix) ((ss)[--(ix)].any_i32)
8127 #define TOPINT(ss,ix) ((ss)[ix].any_i32)
8128 #define POPLONG(ss,ix) ((ss)[--(ix)].any_long)
8129 #define TOPLONG(ss,ix) ((ss)[ix].any_long)
8130 #define POPIV(ss,ix) ((ss)[--(ix)].any_iv)
8131 #define TOPIV(ss,ix) ((ss)[ix].any_iv)
8132 #define POPPTR(ss,ix) ((ss)[--(ix)].any_ptr)
8133 #define TOPPTR(ss,ix) ((ss)[ix].any_ptr)
8134 #define POPDPTR(ss,ix) ((ss)[--(ix)].any_dptr)
8135 #define TOPDPTR(ss,ix) ((ss)[ix].any_dptr)
8136 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
8137 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
8140 #define pv_dup_inc(p) SAVEPV(p)
8141 #define pv_dup(p) SAVEPV(p)
8142 #define svp_dup_inc(p,pp) any_dup(p,pp)
8145 Perl_any_dup(pTHX_ void *v, PerlInterpreter *proto_perl)
8152 /* look for it in the table first */
8153 ret = ptr_table_fetch(PL_ptr_table, v);
8157 /* see if it is part of the interpreter structure */
8158 if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
8159 ret = (void*)(((char*)aTHXo) + (((char*)v) - (char*)proto_perl));
8167 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl)
8169 ANY *ss = proto_perl->Tsavestack;
8170 I32 ix = proto_perl->Tsavestack_ix;
8171 I32 max = proto_perl->Tsavestack_max;
8184 void (*dptr) (void*);
8185 void (*dxptr) (pTHXo_ void*);
8188 Newz(54, nss, max, ANY);
8194 case SAVEt_ITEM: /* normal string */
8195 sv = (SV*)POPPTR(ss,ix);
8196 TOPPTR(nss,ix) = sv_dup_inc(sv);
8197 sv = (SV*)POPPTR(ss,ix);
8198 TOPPTR(nss,ix) = sv_dup_inc(sv);
8200 case SAVEt_SV: /* scalar reference */
8201 sv = (SV*)POPPTR(ss,ix);
8202 TOPPTR(nss,ix) = sv_dup_inc(sv);
8203 gv = (GV*)POPPTR(ss,ix);
8204 TOPPTR(nss,ix) = gv_dup_inc(gv);
8206 case SAVEt_GENERIC_PVREF: /* generic char* */
8207 c = (char*)POPPTR(ss,ix);
8208 TOPPTR(nss,ix) = pv_dup(c);
8209 ptr = POPPTR(ss,ix);
8210 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8212 case SAVEt_GENERIC_SVREF: /* generic sv */
8213 case SAVEt_SVREF: /* scalar reference */
8214 sv = (SV*)POPPTR(ss,ix);
8215 TOPPTR(nss,ix) = sv_dup_inc(sv);
8216 ptr = POPPTR(ss,ix);
8217 TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
8219 case SAVEt_AV: /* array reference */
8220 av = (AV*)POPPTR(ss,ix);
8221 TOPPTR(nss,ix) = av_dup_inc(av);
8222 gv = (GV*)POPPTR(ss,ix);
8223 TOPPTR(nss,ix) = gv_dup(gv);
8225 case SAVEt_HV: /* hash reference */
8226 hv = (HV*)POPPTR(ss,ix);
8227 TOPPTR(nss,ix) = hv_dup_inc(hv);
8228 gv = (GV*)POPPTR(ss,ix);
8229 TOPPTR(nss,ix) = gv_dup(gv);
8231 case SAVEt_INT: /* int reference */
8232 ptr = POPPTR(ss,ix);
8233 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8234 intval = (int)POPINT(ss,ix);
8235 TOPINT(nss,ix) = intval;
8237 case SAVEt_LONG: /* long reference */
8238 ptr = POPPTR(ss,ix);
8239 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8240 longval = (long)POPLONG(ss,ix);
8241 TOPLONG(nss,ix) = longval;
8243 case SAVEt_I32: /* I32 reference */
8244 case SAVEt_I16: /* I16 reference */
8245 case SAVEt_I8: /* I8 reference */
8246 ptr = POPPTR(ss,ix);
8247 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8251 case SAVEt_IV: /* IV reference */
8252 ptr = POPPTR(ss,ix);
8253 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8257 case SAVEt_SPTR: /* SV* reference */
8258 ptr = POPPTR(ss,ix);
8259 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8260 sv = (SV*)POPPTR(ss,ix);
8261 TOPPTR(nss,ix) = sv_dup(sv);
8263 case SAVEt_VPTR: /* random* reference */
8264 ptr = POPPTR(ss,ix);
8265 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8266 ptr = POPPTR(ss,ix);
8267 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8269 case SAVEt_PPTR: /* char* reference */
8270 ptr = POPPTR(ss,ix);
8271 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8272 c = (char*)POPPTR(ss,ix);
8273 TOPPTR(nss,ix) = pv_dup(c);
8275 case SAVEt_HPTR: /* HV* reference */
8276 ptr = POPPTR(ss,ix);
8277 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8278 hv = (HV*)POPPTR(ss,ix);
8279 TOPPTR(nss,ix) = hv_dup(hv);
8281 case SAVEt_APTR: /* AV* reference */
8282 ptr = POPPTR(ss,ix);
8283 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8284 av = (AV*)POPPTR(ss,ix);
8285 TOPPTR(nss,ix) = av_dup(av);
8288 gv = (GV*)POPPTR(ss,ix);
8289 TOPPTR(nss,ix) = gv_dup(gv);
8291 case SAVEt_GP: /* scalar reference */
8292 gp = (GP*)POPPTR(ss,ix);
8293 TOPPTR(nss,ix) = gp = gp_dup(gp);
8294 (void)GpREFCNT_inc(gp);
8295 gv = (GV*)POPPTR(ss,ix);
8296 TOPPTR(nss,ix) = gv_dup_inc(c);
8297 c = (char*)POPPTR(ss,ix);
8298 TOPPTR(nss,ix) = pv_dup(c);
8305 sv = (SV*)POPPTR(ss,ix);
8306 TOPPTR(nss,ix) = sv_dup_inc(sv);
8309 ptr = POPPTR(ss,ix);
8310 if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
8311 /* these are assumed to be refcounted properly */
8312 switch (((OP*)ptr)->op_type) {
8319 TOPPTR(nss,ix) = ptr;
8324 TOPPTR(nss,ix) = Nullop;
8329 TOPPTR(nss,ix) = Nullop;
8332 c = (char*)POPPTR(ss,ix);
8333 TOPPTR(nss,ix) = pv_dup_inc(c);
8336 longval = POPLONG(ss,ix);
8337 TOPLONG(nss,ix) = longval;
8340 hv = (HV*)POPPTR(ss,ix);
8341 TOPPTR(nss,ix) = hv_dup_inc(hv);
8342 c = (char*)POPPTR(ss,ix);
8343 TOPPTR(nss,ix) = pv_dup_inc(c);
8347 case SAVEt_DESTRUCTOR:
8348 ptr = POPPTR(ss,ix);
8349 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
8350 dptr = POPDPTR(ss,ix);
8351 TOPDPTR(nss,ix) = (void (*)(void*))any_dup((void *)dptr, proto_perl);
8353 case SAVEt_DESTRUCTOR_X:
8354 ptr = POPPTR(ss,ix);
8355 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
8356 dxptr = POPDXPTR(ss,ix);
8357 TOPDXPTR(nss,ix) = (void (*)(pTHXo_ void*))any_dup((void *)dxptr, proto_perl);
8359 case SAVEt_REGCONTEXT:
8365 case SAVEt_STACK_POS: /* Position on Perl stack */
8369 case SAVEt_AELEM: /* array element */
8370 sv = (SV*)POPPTR(ss,ix);
8371 TOPPTR(nss,ix) = sv_dup_inc(sv);
8374 av = (AV*)POPPTR(ss,ix);
8375 TOPPTR(nss,ix) = av_dup_inc(av);
8377 case SAVEt_HELEM: /* hash element */
8378 sv = (SV*)POPPTR(ss,ix);
8379 TOPPTR(nss,ix) = sv_dup_inc(sv);
8380 sv = (SV*)POPPTR(ss,ix);
8381 TOPPTR(nss,ix) = sv_dup_inc(sv);
8382 hv = (HV*)POPPTR(ss,ix);
8383 TOPPTR(nss,ix) = hv_dup_inc(hv);
8386 ptr = POPPTR(ss,ix);
8387 TOPPTR(nss,ix) = ptr;
8394 av = (AV*)POPPTR(ss,ix);
8395 TOPPTR(nss,ix) = av_dup(av);
8398 longval = (long)POPLONG(ss,ix);
8399 TOPLONG(nss,ix) = longval;
8400 ptr = POPPTR(ss,ix);
8401 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8402 sv = (SV*)POPPTR(ss,ix);
8403 TOPPTR(nss,ix) = sv_dup(sv);
8406 Perl_croak(aTHX_ "panic: ss_dup inconsistency");
8418 perl_clone(PerlInterpreter *proto_perl, UV flags)
8421 CPerlObj *pPerl = (CPerlObj*)proto_perl;
8424 #ifdef PERL_IMPLICIT_SYS
8425 return perl_clone_using(proto_perl, flags,
8427 proto_perl->IMemShared,
8428 proto_perl->IMemParse,
8438 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
8439 struct IPerlMem* ipM, struct IPerlMem* ipMS,
8440 struct IPerlMem* ipMP, struct IPerlEnv* ipE,
8441 struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
8442 struct IPerlDir* ipD, struct IPerlSock* ipS,
8443 struct IPerlProc* ipP)
8445 /* XXX many of the string copies here can be optimized if they're
8446 * constants; they need to be allocated as common memory and just
8447 * their pointers copied. */
8451 CPerlObj *pPerl = new(ipM) CPerlObj(ipM, ipMS, ipMP, ipE, ipStd, ipLIO,
8453 PERL_SET_THX(pPerl);
8454 # else /* !PERL_OBJECT */
8455 PerlInterpreter *my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
8456 PERL_SET_THX(my_perl);
8459 memset(my_perl, 0xab, sizeof(PerlInterpreter));
8465 # else /* !DEBUGGING */
8466 Zero(my_perl, 1, PerlInterpreter);
8467 # endif /* DEBUGGING */
8471 PL_MemShared = ipMS;
8479 # endif /* PERL_OBJECT */
8480 #else /* !PERL_IMPLICIT_SYS */
8482 PerlInterpreter *my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
8483 PERL_SET_THX(my_perl);
8486 memset(my_perl, 0xab, sizeof(PerlInterpreter));
8492 # else /* !DEBUGGING */
8493 Zero(my_perl, 1, PerlInterpreter);
8494 # endif /* DEBUGGING */
8495 #endif /* PERL_IMPLICIT_SYS */
8498 PL_xiv_arenaroot = NULL;
8500 PL_xnv_arenaroot = NULL;
8502 PL_xrv_arenaroot = NULL;
8504 PL_xpv_arenaroot = NULL;
8506 PL_xpviv_arenaroot = NULL;
8507 PL_xpviv_root = NULL;
8508 PL_xpvnv_arenaroot = NULL;
8509 PL_xpvnv_root = NULL;
8510 PL_xpvcv_arenaroot = NULL;
8511 PL_xpvcv_root = NULL;
8512 PL_xpvav_arenaroot = NULL;
8513 PL_xpvav_root = NULL;
8514 PL_xpvhv_arenaroot = NULL;
8515 PL_xpvhv_root = NULL;
8516 PL_xpvmg_arenaroot = NULL;
8517 PL_xpvmg_root = NULL;
8518 PL_xpvlv_arenaroot = NULL;
8519 PL_xpvlv_root = NULL;
8520 PL_xpvbm_arenaroot = NULL;
8521 PL_xpvbm_root = NULL;
8522 PL_he_arenaroot = NULL;
8524 PL_nice_chunk = NULL;
8525 PL_nice_chunk_size = 0;
8528 PL_sv_root = Nullsv;
8529 PL_sv_arenaroot = Nullsv;
8531 PL_debug = proto_perl->Idebug;
8533 /* create SV map for pointer relocation */
8534 PL_ptr_table = ptr_table_new();
8536 /* initialize these special pointers as early as possible */
8537 SvANY(&PL_sv_undef) = NULL;
8538 SvREFCNT(&PL_sv_undef) = (~(U32)0)/2;
8539 SvFLAGS(&PL_sv_undef) = SVf_READONLY|SVt_NULL;
8540 ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
8543 SvUPGRADE(&PL_sv_no, SVt_PVNV);
8545 SvANY(&PL_sv_no) = new_XPVNV();
8547 SvREFCNT(&PL_sv_no) = (~(U32)0)/2;
8548 SvFLAGS(&PL_sv_no) = SVp_NOK|SVf_NOK|SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
8549 SvPVX(&PL_sv_no) = SAVEPVN(PL_No, 0);
8550 SvCUR(&PL_sv_no) = 0;
8551 SvLEN(&PL_sv_no) = 1;
8552 SvNVX(&PL_sv_no) = 0;
8553 ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
8556 SvUPGRADE(&PL_sv_yes, SVt_PVNV);
8558 SvANY(&PL_sv_yes) = new_XPVNV();
8560 SvREFCNT(&PL_sv_yes) = (~(U32)0)/2;
8561 SvFLAGS(&PL_sv_yes) = SVp_NOK|SVf_NOK|SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
8562 SvPVX(&PL_sv_yes) = SAVEPVN(PL_Yes, 1);
8563 SvCUR(&PL_sv_yes) = 1;
8564 SvLEN(&PL_sv_yes) = 2;
8565 SvNVX(&PL_sv_yes) = 1;
8566 ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
8568 /* create shared string table */
8569 PL_strtab = newHV();
8570 HvSHAREKEYS_off(PL_strtab);
8571 hv_ksplit(PL_strtab, 512);
8572 ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
8574 PL_compiling = proto_perl->Icompiling;
8575 PL_compiling.cop_stashpv = SAVEPV(PL_compiling.cop_stashpv);
8576 PL_compiling.cop_file = SAVEPV(PL_compiling.cop_file);
8577 ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
8578 if (!specialWARN(PL_compiling.cop_warnings))
8579 PL_compiling.cop_warnings = sv_dup_inc(PL_compiling.cop_warnings);
8580 if (!specialCopIO(PL_compiling.cop_io))
8581 PL_compiling.cop_io = sv_dup_inc(PL_compiling.cop_io);
8582 PL_curcop = (COP*)any_dup(proto_perl->Tcurcop, proto_perl);
8584 /* pseudo environmental stuff */
8585 PL_origargc = proto_perl->Iorigargc;
8587 New(0, PL_origargv, i+1, char*);
8588 PL_origargv[i] = '\0';
8590 PL_origargv[i] = SAVEPV(proto_perl->Iorigargv[i]);
8592 PL_envgv = gv_dup(proto_perl->Ienvgv);
8593 PL_incgv = gv_dup(proto_perl->Iincgv);
8594 PL_hintgv = gv_dup(proto_perl->Ihintgv);
8595 PL_origfilename = SAVEPV(proto_perl->Iorigfilename);
8596 PL_diehook = sv_dup_inc(proto_perl->Idiehook);
8597 PL_warnhook = sv_dup_inc(proto_perl->Iwarnhook);
8600 PL_minus_c = proto_perl->Iminus_c;
8601 PL_patchlevel = sv_dup_inc(proto_perl->Ipatchlevel);
8602 PL_localpatches = proto_perl->Ilocalpatches;
8603 PL_splitstr = proto_perl->Isplitstr;
8604 PL_preprocess = proto_perl->Ipreprocess;
8605 PL_minus_n = proto_perl->Iminus_n;
8606 PL_minus_p = proto_perl->Iminus_p;
8607 PL_minus_l = proto_perl->Iminus_l;
8608 PL_minus_a = proto_perl->Iminus_a;
8609 PL_minus_F = proto_perl->Iminus_F;
8610 PL_doswitches = proto_perl->Idoswitches;
8611 PL_dowarn = proto_perl->Idowarn;
8612 PL_doextract = proto_perl->Idoextract;
8613 PL_sawampersand = proto_perl->Isawampersand;
8614 PL_unsafe = proto_perl->Iunsafe;
8615 PL_inplace = SAVEPV(proto_perl->Iinplace);
8616 PL_e_script = sv_dup_inc(proto_perl->Ie_script);
8617 PL_perldb = proto_perl->Iperldb;
8618 PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
8620 /* magical thingies */
8621 /* XXX time(&PL_basetime) when asked for? */
8622 PL_basetime = proto_perl->Ibasetime;
8623 PL_formfeed = sv_dup(proto_perl->Iformfeed);
8625 PL_maxsysfd = proto_perl->Imaxsysfd;
8626 PL_multiline = proto_perl->Imultiline;
8627 PL_statusvalue = proto_perl->Istatusvalue;
8629 PL_statusvalue_vms = proto_perl->Istatusvalue_vms;
8632 /* shortcuts to various I/O objects */
8633 PL_stdingv = gv_dup(proto_perl->Istdingv);
8634 PL_stderrgv = gv_dup(proto_perl->Istderrgv);
8635 PL_defgv = gv_dup(proto_perl->Idefgv);
8636 PL_argvgv = gv_dup(proto_perl->Iargvgv);
8637 PL_argvoutgv = gv_dup(proto_perl->Iargvoutgv);
8638 PL_argvout_stack = av_dup(proto_perl->Iargvout_stack);
8640 /* shortcuts to regexp stuff */
8641 PL_replgv = gv_dup(proto_perl->Ireplgv);
8643 /* shortcuts to misc objects */
8644 PL_errgv = gv_dup(proto_perl->Ierrgv);
8646 /* shortcuts to debugging objects */
8647 PL_DBgv = gv_dup(proto_perl->IDBgv);
8648 PL_DBline = gv_dup(proto_perl->IDBline);
8649 PL_DBsub = gv_dup(proto_perl->IDBsub);
8650 PL_DBsingle = sv_dup(proto_perl->IDBsingle);
8651 PL_DBtrace = sv_dup(proto_perl->IDBtrace);
8652 PL_DBsignal = sv_dup(proto_perl->IDBsignal);
8653 PL_lineary = av_dup(proto_perl->Ilineary);
8654 PL_dbargs = av_dup(proto_perl->Idbargs);
8657 PL_defstash = hv_dup_inc(proto_perl->Tdefstash);
8658 PL_curstash = hv_dup(proto_perl->Tcurstash);
8659 PL_debstash = hv_dup(proto_perl->Idebstash);
8660 PL_globalstash = hv_dup(proto_perl->Iglobalstash);
8661 PL_curstname = sv_dup_inc(proto_perl->Icurstname);
8663 PL_beginav = av_dup_inc(proto_perl->Ibeginav);
8664 PL_endav = av_dup_inc(proto_perl->Iendav);
8665 PL_checkav = av_dup_inc(proto_perl->Icheckav);
8666 PL_initav = av_dup_inc(proto_perl->Iinitav);
8668 PL_sub_generation = proto_perl->Isub_generation;
8670 /* funky return mechanisms */
8671 PL_forkprocess = proto_perl->Iforkprocess;
8673 /* subprocess state */
8674 PL_fdpid = av_dup_inc(proto_perl->Ifdpid);
8676 /* internal state */
8677 PL_tainting = proto_perl->Itainting;
8678 PL_maxo = proto_perl->Imaxo;
8679 if (proto_perl->Iop_mask)
8680 PL_op_mask = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
8682 PL_op_mask = Nullch;
8684 /* current interpreter roots */
8685 PL_main_cv = cv_dup_inc(proto_perl->Imain_cv);
8686 PL_main_root = OpREFCNT_inc(proto_perl->Imain_root);
8687 PL_main_start = proto_perl->Imain_start;
8688 PL_eval_root = proto_perl->Ieval_root;
8689 PL_eval_start = proto_perl->Ieval_start;
8691 /* runtime control stuff */
8692 PL_curcopdb = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
8693 PL_copline = proto_perl->Icopline;
8695 PL_filemode = proto_perl->Ifilemode;
8696 PL_lastfd = proto_perl->Ilastfd;
8697 PL_oldname = proto_perl->Ioldname; /* XXX not quite right */
8700 PL_gensym = proto_perl->Igensym;
8701 PL_preambled = proto_perl->Ipreambled;
8702 PL_preambleav = av_dup_inc(proto_perl->Ipreambleav);
8703 PL_laststatval = proto_perl->Ilaststatval;
8704 PL_laststype = proto_perl->Ilaststype;
8705 PL_mess_sv = Nullsv;
8707 PL_ors_sv = sv_dup_inc(proto_perl->Iors_sv);
8708 PL_ofmt = SAVEPV(proto_perl->Iofmt);
8710 /* interpreter atexit processing */
8711 PL_exitlistlen = proto_perl->Iexitlistlen;
8712 if (PL_exitlistlen) {
8713 New(0, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
8714 Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
8717 PL_exitlist = (PerlExitListEntry*)NULL;
8718 PL_modglobal = hv_dup_inc(proto_perl->Imodglobal);
8720 PL_profiledata = NULL;
8721 PL_rsfp = fp_dup(proto_perl->Irsfp, '<');
8722 /* PL_rsfp_filters entries have fake IoDIRP() */
8723 PL_rsfp_filters = av_dup_inc(proto_perl->Irsfp_filters);
8725 PL_compcv = cv_dup(proto_perl->Icompcv);
8726 PL_comppad = av_dup(proto_perl->Icomppad);
8727 PL_comppad_name = av_dup(proto_perl->Icomppad_name);
8728 PL_comppad_name_fill = proto_perl->Icomppad_name_fill;
8729 PL_comppad_name_floor = proto_perl->Icomppad_name_floor;
8730 PL_curpad = (SV**)ptr_table_fetch(PL_ptr_table,
8731 proto_perl->Tcurpad);
8733 #ifdef HAVE_INTERP_INTERN
8734 sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
8737 /* more statics moved here */
8738 PL_generation = proto_perl->Igeneration;
8739 PL_DBcv = cv_dup(proto_perl->IDBcv);
8741 PL_in_clean_objs = proto_perl->Iin_clean_objs;
8742 PL_in_clean_all = proto_perl->Iin_clean_all;
8744 PL_uid = proto_perl->Iuid;
8745 PL_euid = proto_perl->Ieuid;
8746 PL_gid = proto_perl->Igid;
8747 PL_egid = proto_perl->Iegid;
8748 PL_nomemok = proto_perl->Inomemok;
8749 PL_an = proto_perl->Ian;
8750 PL_cop_seqmax = proto_perl->Icop_seqmax;
8751 PL_op_seqmax = proto_perl->Iop_seqmax;
8752 PL_evalseq = proto_perl->Ievalseq;
8753 PL_origenviron = proto_perl->Iorigenviron; /* XXX not quite right */
8754 PL_origalen = proto_perl->Iorigalen;
8755 PL_pidstatus = newHV(); /* XXX flag for cloning? */
8756 PL_osname = SAVEPV(proto_perl->Iosname);
8757 PL_sh_path = SAVEPV(proto_perl->Ish_path);
8758 PL_sighandlerp = proto_perl->Isighandlerp;
8761 PL_runops = proto_perl->Irunops;
8763 Copy(proto_perl->Itokenbuf, PL_tokenbuf, 256, char);
8766 PL_cshlen = proto_perl->Icshlen;
8767 PL_cshname = SAVEPVN(proto_perl->Icshname, PL_cshlen);
8770 PL_lex_state = proto_perl->Ilex_state;
8771 PL_lex_defer = proto_perl->Ilex_defer;
8772 PL_lex_expect = proto_perl->Ilex_expect;
8773 PL_lex_formbrack = proto_perl->Ilex_formbrack;
8774 PL_lex_dojoin = proto_perl->Ilex_dojoin;
8775 PL_lex_starts = proto_perl->Ilex_starts;
8776 PL_lex_stuff = sv_dup_inc(proto_perl->Ilex_stuff);
8777 PL_lex_repl = sv_dup_inc(proto_perl->Ilex_repl);
8778 PL_lex_op = proto_perl->Ilex_op;
8779 PL_lex_inpat = proto_perl->Ilex_inpat;
8780 PL_lex_inwhat = proto_perl->Ilex_inwhat;
8781 PL_lex_brackets = proto_perl->Ilex_brackets;
8782 i = (PL_lex_brackets < 120 ? 120 : PL_lex_brackets);
8783 PL_lex_brackstack = SAVEPVN(proto_perl->Ilex_brackstack,i);
8784 PL_lex_casemods = proto_perl->Ilex_casemods;
8785 i = (PL_lex_casemods < 12 ? 12 : PL_lex_casemods);
8786 PL_lex_casestack = SAVEPVN(proto_perl->Ilex_casestack,i);
8788 Copy(proto_perl->Inextval, PL_nextval, 5, YYSTYPE);
8789 Copy(proto_perl->Inexttype, PL_nexttype, 5, I32);
8790 PL_nexttoke = proto_perl->Inexttoke;
8792 PL_linestr = sv_dup_inc(proto_perl->Ilinestr);
8793 i = proto_perl->Ibufptr - SvPVX(proto_perl->Ilinestr);
8794 PL_bufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8795 i = proto_perl->Ioldbufptr - SvPVX(proto_perl->Ilinestr);
8796 PL_oldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8797 i = proto_perl->Ioldoldbufptr - SvPVX(proto_perl->Ilinestr);
8798 PL_oldoldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8799 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
8800 i = proto_perl->Ilinestart - SvPVX(proto_perl->Ilinestr);
8801 PL_linestart = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8802 PL_pending_ident = proto_perl->Ipending_ident;
8803 PL_sublex_info = proto_perl->Isublex_info; /* XXX not quite right */
8805 PL_expect = proto_perl->Iexpect;
8807 PL_multi_start = proto_perl->Imulti_start;
8808 PL_multi_end = proto_perl->Imulti_end;
8809 PL_multi_open = proto_perl->Imulti_open;
8810 PL_multi_close = proto_perl->Imulti_close;
8812 PL_error_count = proto_perl->Ierror_count;
8813 PL_subline = proto_perl->Isubline;
8814 PL_subname = sv_dup_inc(proto_perl->Isubname);
8816 PL_min_intro_pending = proto_perl->Imin_intro_pending;
8817 PL_max_intro_pending = proto_perl->Imax_intro_pending;
8818 PL_padix = proto_perl->Ipadix;
8819 PL_padix_floor = proto_perl->Ipadix_floor;
8820 PL_pad_reset_pending = proto_perl->Ipad_reset_pending;
8822 i = proto_perl->Ilast_uni - SvPVX(proto_perl->Ilinestr);
8823 PL_last_uni = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8824 i = proto_perl->Ilast_lop - SvPVX(proto_perl->Ilinestr);
8825 PL_last_lop = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8826 PL_last_lop_op = proto_perl->Ilast_lop_op;
8827 PL_in_my = proto_perl->Iin_my;
8828 PL_in_my_stash = hv_dup(proto_perl->Iin_my_stash);
8830 PL_cryptseen = proto_perl->Icryptseen;
8833 PL_hints = proto_perl->Ihints;
8835 PL_amagic_generation = proto_perl->Iamagic_generation;
8837 #ifdef USE_LOCALE_COLLATE
8838 PL_collation_ix = proto_perl->Icollation_ix;
8839 PL_collation_name = SAVEPV(proto_perl->Icollation_name);
8840 PL_collation_standard = proto_perl->Icollation_standard;
8841 PL_collxfrm_base = proto_perl->Icollxfrm_base;
8842 PL_collxfrm_mult = proto_perl->Icollxfrm_mult;
8843 #endif /* USE_LOCALE_COLLATE */
8845 #ifdef USE_LOCALE_NUMERIC
8846 PL_numeric_name = SAVEPV(proto_perl->Inumeric_name);
8847 PL_numeric_standard = proto_perl->Inumeric_standard;
8848 PL_numeric_local = proto_perl->Inumeric_local;
8849 PL_numeric_radix = sv_dup_inc(proto_perl->Inumeric_radix);
8850 #endif /* !USE_LOCALE_NUMERIC */
8852 /* utf8 character classes */
8853 PL_utf8_alnum = sv_dup_inc(proto_perl->Iutf8_alnum);
8854 PL_utf8_alnumc = sv_dup_inc(proto_perl->Iutf8_alnumc);
8855 PL_utf8_ascii = sv_dup_inc(proto_perl->Iutf8_ascii);
8856 PL_utf8_alpha = sv_dup_inc(proto_perl->Iutf8_alpha);
8857 PL_utf8_space = sv_dup_inc(proto_perl->Iutf8_space);
8858 PL_utf8_cntrl = sv_dup_inc(proto_perl->Iutf8_cntrl);
8859 PL_utf8_graph = sv_dup_inc(proto_perl->Iutf8_graph);
8860 PL_utf8_digit = sv_dup_inc(proto_perl->Iutf8_digit);
8861 PL_utf8_upper = sv_dup_inc(proto_perl->Iutf8_upper);
8862 PL_utf8_lower = sv_dup_inc(proto_perl->Iutf8_lower);
8863 PL_utf8_print = sv_dup_inc(proto_perl->Iutf8_print);
8864 PL_utf8_punct = sv_dup_inc(proto_perl->Iutf8_punct);
8865 PL_utf8_xdigit = sv_dup_inc(proto_perl->Iutf8_xdigit);
8866 PL_utf8_mark = sv_dup_inc(proto_perl->Iutf8_mark);
8867 PL_utf8_toupper = sv_dup_inc(proto_perl->Iutf8_toupper);
8868 PL_utf8_totitle = sv_dup_inc(proto_perl->Iutf8_totitle);
8869 PL_utf8_tolower = sv_dup_inc(proto_perl->Iutf8_tolower);
8872 PL_last_swash_hv = Nullhv; /* reinits on demand */
8873 PL_last_swash_klen = 0;
8874 PL_last_swash_key[0]= '\0';
8875 PL_last_swash_tmps = (U8*)NULL;
8876 PL_last_swash_slen = 0;
8878 /* perly.c globals */
8879 PL_yydebug = proto_perl->Iyydebug;
8880 PL_yynerrs = proto_perl->Iyynerrs;
8881 PL_yyerrflag = proto_perl->Iyyerrflag;
8882 PL_yychar = proto_perl->Iyychar;
8883 PL_yyval = proto_perl->Iyyval;
8884 PL_yylval = proto_perl->Iyylval;
8886 PL_glob_index = proto_perl->Iglob_index;
8887 PL_srand_called = proto_perl->Isrand_called;
8888 PL_uudmap['M'] = 0; /* reinits on demand */
8889 PL_bitcount = Nullch; /* reinits on demand */
8891 if (proto_perl->Ipsig_pend) {
8892 Newz(0, PL_psig_pend, SIG_SIZE, int);
8895 PL_psig_pend = (int*)NULL;
8898 if (proto_perl->Ipsig_ptr) {
8899 Newz(0, PL_psig_ptr, SIG_SIZE, SV*);
8900 Newz(0, PL_psig_name, SIG_SIZE, SV*);
8901 for (i = 1; i < SIG_SIZE; i++) {
8902 PL_psig_ptr[i] = sv_dup_inc(proto_perl->Ipsig_ptr[i]);
8903 PL_psig_name[i] = sv_dup_inc(proto_perl->Ipsig_name[i]);
8907 PL_psig_ptr = (SV**)NULL;
8908 PL_psig_name = (SV**)NULL;
8911 /* thrdvar.h stuff */
8914 /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
8915 PL_tmps_ix = proto_perl->Ttmps_ix;
8916 PL_tmps_max = proto_perl->Ttmps_max;
8917 PL_tmps_floor = proto_perl->Ttmps_floor;
8918 Newz(50, PL_tmps_stack, PL_tmps_max, SV*);
8920 while (i <= PL_tmps_ix) {
8921 PL_tmps_stack[i] = sv_dup_inc(proto_perl->Ttmps_stack[i]);
8925 /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
8926 i = proto_perl->Tmarkstack_max - proto_perl->Tmarkstack;
8927 Newz(54, PL_markstack, i, I32);
8928 PL_markstack_max = PL_markstack + (proto_perl->Tmarkstack_max
8929 - proto_perl->Tmarkstack);
8930 PL_markstack_ptr = PL_markstack + (proto_perl->Tmarkstack_ptr
8931 - proto_perl->Tmarkstack);
8932 Copy(proto_perl->Tmarkstack, PL_markstack,
8933 PL_markstack_ptr - PL_markstack + 1, I32);
8935 /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
8936 * NOTE: unlike the others! */
8937 PL_scopestack_ix = proto_perl->Tscopestack_ix;
8938 PL_scopestack_max = proto_perl->Tscopestack_max;
8939 Newz(54, PL_scopestack, PL_scopestack_max, I32);
8940 Copy(proto_perl->Tscopestack, PL_scopestack, PL_scopestack_ix, I32);
8942 /* next push_return() sets PL_retstack[PL_retstack_ix]
8943 * NOTE: unlike the others! */
8944 PL_retstack_ix = proto_perl->Tretstack_ix;
8945 PL_retstack_max = proto_perl->Tretstack_max;
8946 Newz(54, PL_retstack, PL_retstack_max, OP*);
8947 Copy(proto_perl->Tretstack, PL_retstack, PL_retstack_ix, I32);
8949 /* NOTE: si_dup() looks at PL_markstack */
8950 PL_curstackinfo = si_dup(proto_perl->Tcurstackinfo);
8952 /* PL_curstack = PL_curstackinfo->si_stack; */
8953 PL_curstack = av_dup(proto_perl->Tcurstack);
8954 PL_mainstack = av_dup(proto_perl->Tmainstack);
8956 /* next PUSHs() etc. set *(PL_stack_sp+1) */
8957 PL_stack_base = AvARRAY(PL_curstack);
8958 PL_stack_sp = PL_stack_base + (proto_perl->Tstack_sp
8959 - proto_perl->Tstack_base);
8960 PL_stack_max = PL_stack_base + AvMAX(PL_curstack);
8962 /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
8963 * NOTE: unlike the others! */
8964 PL_savestack_ix = proto_perl->Tsavestack_ix;
8965 PL_savestack_max = proto_perl->Tsavestack_max;
8966 /*Newz(54, PL_savestack, PL_savestack_max, ANY);*/
8967 PL_savestack = ss_dup(proto_perl);
8971 ENTER; /* perl_destruct() wants to LEAVE; */
8974 PL_start_env = proto_perl->Tstart_env; /* XXXXXX */
8975 PL_top_env = &PL_start_env;
8977 PL_op = proto_perl->Top;
8980 PL_Xpv = (XPV*)NULL;
8981 PL_na = proto_perl->Tna;
8983 PL_statbuf = proto_perl->Tstatbuf;
8984 PL_statcache = proto_perl->Tstatcache;
8985 PL_statgv = gv_dup(proto_perl->Tstatgv);
8986 PL_statname = sv_dup_inc(proto_perl->Tstatname);
8988 PL_timesbuf = proto_perl->Ttimesbuf;
8991 PL_tainted = proto_perl->Ttainted;
8992 PL_curpm = proto_perl->Tcurpm; /* XXX No PMOP ref count */
8993 PL_nrs = sv_dup_inc(proto_perl->Tnrs);
8994 PL_rs = sv_dup_inc(proto_perl->Trs);
8995 PL_last_in_gv = gv_dup(proto_perl->Tlast_in_gv);
8996 PL_ofs_sv = sv_dup_inc(proto_perl->Tofs_sv);
8997 PL_defoutgv = gv_dup_inc(proto_perl->Tdefoutgv);
8998 PL_chopset = proto_perl->Tchopset; /* XXX never deallocated */
8999 PL_toptarget = sv_dup_inc(proto_perl->Ttoptarget);
9000 PL_bodytarget = sv_dup_inc(proto_perl->Tbodytarget);
9001 PL_formtarget = sv_dup(proto_perl->Tformtarget);
9003 PL_restartop = proto_perl->Trestartop;
9004 PL_in_eval = proto_perl->Tin_eval;
9005 PL_delaymagic = proto_perl->Tdelaymagic;
9006 PL_dirty = proto_perl->Tdirty;
9007 PL_localizing = proto_perl->Tlocalizing;
9009 #ifdef PERL_FLEXIBLE_EXCEPTIONS
9010 PL_protect = proto_perl->Tprotect;
9012 PL_errors = sv_dup_inc(proto_perl->Terrors);
9013 PL_av_fetch_sv = Nullsv;
9014 PL_hv_fetch_sv = Nullsv;
9015 Zero(&PL_hv_fetch_ent_mh, 1, HE); /* XXX */
9016 PL_modcount = proto_perl->Tmodcount;
9017 PL_lastgotoprobe = Nullop;
9018 PL_dumpindent = proto_perl->Tdumpindent;
9020 PL_sortcop = (OP*)any_dup(proto_perl->Tsortcop, proto_perl);
9021 PL_sortstash = hv_dup(proto_perl->Tsortstash);
9022 PL_firstgv = gv_dup(proto_perl->Tfirstgv);
9023 PL_secondgv = gv_dup(proto_perl->Tsecondgv);
9024 PL_sortcxix = proto_perl->Tsortcxix;
9025 PL_efloatbuf = Nullch; /* reinits on demand */
9026 PL_efloatsize = 0; /* reinits on demand */
9030 PL_screamfirst = NULL;
9031 PL_screamnext = NULL;
9032 PL_maxscream = -1; /* reinits on demand */
9033 PL_lastscream = Nullsv;
9035 PL_watchaddr = NULL;
9036 PL_watchok = Nullch;
9038 PL_regdummy = proto_perl->Tregdummy;
9039 PL_regcomp_parse = Nullch;
9040 PL_regxend = Nullch;
9041 PL_regcode = (regnode*)NULL;
9044 PL_regprecomp = Nullch;
9049 PL_seen_zerolen = 0;
9051 PL_regcomp_rx = (regexp*)NULL;
9053 PL_colorset = 0; /* reinits PL_colors[] */
9054 /*PL_colors[6] = {0,0,0,0,0,0};*/
9055 PL_reg_whilem_seen = 0;
9056 PL_reginput = Nullch;
9059 PL_regstartp = (I32*)NULL;
9060 PL_regendp = (I32*)NULL;
9061 PL_reglastparen = (U32*)NULL;
9062 PL_regtill = Nullch;
9064 PL_reg_start_tmp = (char**)NULL;
9065 PL_reg_start_tmpl = 0;
9066 PL_regdata = (struct reg_data*)NULL;
9069 PL_reg_eval_set = 0;
9071 PL_regprogram = (regnode*)NULL;
9073 PL_regcc = (CURCUR*)NULL;
9074 PL_reg_call_cc = (struct re_cc_state*)NULL;
9075 PL_reg_re = (regexp*)NULL;
9076 PL_reg_ganch = Nullch;
9078 PL_reg_magic = (MAGIC*)NULL;
9080 PL_reg_oldcurpm = (PMOP*)NULL;
9081 PL_reg_curpm = (PMOP*)NULL;
9082 PL_reg_oldsaved = Nullch;
9083 PL_reg_oldsavedlen = 0;
9085 PL_reg_leftiter = 0;
9086 PL_reg_poscache = Nullch;
9087 PL_reg_poscache_size= 0;
9089 /* RE engine - function pointers */
9090 PL_regcompp = proto_perl->Tregcompp;
9091 PL_regexecp = proto_perl->Tregexecp;
9092 PL_regint_start = proto_perl->Tregint_start;
9093 PL_regint_string = proto_perl->Tregint_string;
9094 PL_regfree = proto_perl->Tregfree;
9096 PL_reginterp_cnt = 0;
9097 PL_reg_starttry = 0;
9100 return (PerlInterpreter*)pPerl;
9106 #else /* !USE_ITHREADS */
9112 #endif /* USE_ITHREADS */
9115 do_report_used(pTHXo_ SV *sv)
9117 if (SvTYPE(sv) != SVTYPEMASK) {
9118 PerlIO_printf(Perl_debug_log, "****\n");
9124 do_clean_objs(pTHXo_ SV *sv)
9128 if (SvROK(sv) && SvOBJECT(rv = SvRV(sv))) {
9129 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(sv));)
9130 if (SvWEAKREF(sv)) {
9141 /* XXX Might want to check arrays, etc. */
9144 #ifndef DISABLE_DESTRUCTOR_KLUDGE
9146 do_clean_named_objs(pTHXo_ SV *sv)
9148 if (SvTYPE(sv) == SVt_PVGV && GvGP(sv)) {
9149 if ( SvOBJECT(GvSV(sv)) ||
9150 (GvAV(sv) && SvOBJECT(GvAV(sv))) ||
9151 (GvHV(sv) && SvOBJECT(GvHV(sv))) ||
9152 (GvIO(sv) && SvOBJECT(GvIO(sv))) ||
9153 (GvCV(sv) && SvOBJECT(GvCV(sv))) )
9155 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning named glob object:\n "), sv_dump(sv));)
9163 do_clean_all(pTHXo_ SV *sv)
9165 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) );)
9166 SvFLAGS(sv) |= SVf_BREAK;