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;
2456 else if (SvPOKp(sv))
2457 sbegin = SvPV(sv, len);
2460 send = sbegin + len;
2467 numtype = IS_NUMBER_NEG;
2474 * we return IS_NUMBER_TO_INT_BY_ATOL if the number can converted to
2475 * integer with atol() without overflow, IS_NUMBER_TO_INT_BY_STRTOL if
2476 * possibly slightly larger than max int, IS_NUMBER_TO_INT_BY_ATOF if you
2477 * will need (int)atof().
2480 /* next must be digit or the radix separator or beginning of infinity */
2484 } while (isDIGIT(*s));
2486 /* Aaargh. long long really is irritating.
2487 In the gospel according to ANSI 1989, it is an axiom that "long"
2488 is the longest integer type, and that if you don't know how long
2489 something is you can cast it to long, and nothing will be lost
2490 (except possibly speed of execution if long is slower than the
2492 Now, one can't be sure if the old rules apply, or long long
2493 (or some other newfangled thing) is actually longer than the
2494 (formerly) longest thing.
2496 /* This lot will work for 64 bit *as long as* either
2497 either long is 64 bit
2498 or we can find both strtol/strtoq and strtoul/strtouq
2499 If not, we really should refuse to let the user use 64 bit IVs
2500 By "64 bit" I really mean IVs that don't get preserved by NVs
2501 It also should work for 128 bit IVs. Can any lend me a machine to
2504 if (s - nbegin > TYPE_DIGITS(UV)) /* Cannot cache ato[ul]() */
2505 numtype |= IS_NUMBER_TO_INT_BY_ATOF | IS_NUMBER_LONGER_THAN_IV_MAX;
2506 else if (s - nbegin < BIT_DIGITS(((sizeof (IV)>sizeof (long))
2507 ? sizeof(long) : sizeof (IV))*8-1))
2508 numtype |= IS_NUMBER_TO_INT_BY_ATOL;
2510 /* Can't be sure either way. (For 64 bit UV, 63 bit IV is 1 decimal
2511 digit less (IV_MAX= 9223372036854775807,
2512 UV_MAX= 18446744073709551615) so be cautious */
2513 numtype |= IS_NUMBER_TO_INT_BY_STRTOL | IS_NUMBER_AS_LONG_AS_IV_MAX;
2516 #ifdef USE_LOCALE_NUMERIC
2517 || IS_NUMERIC_RADIX(*s)
2521 numtype |= IS_NUMBER_NOT_INT;
2522 while (isDIGIT(*s)) /* optional digits after the radix */
2527 #ifdef USE_LOCALE_NUMERIC
2528 || IS_NUMERIC_RADIX(*s)
2532 numtype |= IS_NUMBER_TO_INT_BY_ATOL | IS_NUMBER_NOT_INT;
2533 /* no digits before the radix means we need digits after it */
2537 } while (isDIGIT(*s));
2542 else if (*s == 'I' || *s == 'i') {
2543 s++; if (*s != 'N' && *s != 'n') return 0;
2544 s++; if (*s != 'F' && *s != 'f') return 0;
2545 s++; if (*s == 'I' || *s == 'i') {
2546 s++; if (*s != 'N' && *s != 'n') return 0;
2547 s++; if (*s != 'I' && *s != 'i') return 0;
2548 s++; if (*s != 'T' && *s != 't') return 0;
2549 s++; if (*s != 'Y' && *s != 'y') return 0;
2558 numtype = (numtype & IS_NUMBER_NEG) /* Keep track of sign */
2559 | IS_NUMBER_INFINITY | IS_NUMBER_NOT_INT;
2561 /* we can have an optional exponent part */
2562 if (*s == 'e' || *s == 'E') {
2563 numtype &= IS_NUMBER_NEG;
2564 numtype |= IS_NUMBER_TO_INT_BY_ATOF | IS_NUMBER_NOT_INT;
2566 if (*s == '+' || *s == '-')
2571 } while (isDIGIT(*s));
2581 if (len == 10 && memEQ(sbegin, "0 but true", 10))
2582 return IS_NUMBER_TO_INT_BY_ATOL;
2587 Perl_sv_2pv_nolen(pTHX_ register SV *sv)
2590 return sv_2pv(sv, &n_a);
2593 /* We assume that buf is at least TYPE_CHARS(UV) long. */
2595 uiv_2buf(char *buf, IV iv, UV uv, int is_uv, char **peob)
2597 char *ptr = buf + TYPE_CHARS(UV);
2611 *--ptr = '0' + (uv % 10);
2620 Perl_sv_2pv(pTHX_ register SV *sv, STRLEN *lp)
2625 char tbuf[64]; /* Must fit sprintf/Gconvert of longest IV/NV */
2626 char *tmpbuf = tbuf;
2632 if (SvGMAGICAL(sv)) {
2640 (void)sprintf(tmpbuf,"%"UVuf, (UV)SvUVX(sv));
2642 (void)sprintf(tmpbuf,"%"IVdf, (IV)SvIVX(sv));
2647 Gconvert(SvNVX(sv), NV_DIG, 0, tmpbuf);
2652 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2653 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2660 if (SvTHINKFIRST(sv)) {
2663 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,string)) &&
2664 (SvRV(tmpstr) != SvRV(sv)))
2665 return SvPV(tmpstr,*lp);
2672 switch (SvTYPE(sv)) {
2674 if ( ((SvFLAGS(sv) &
2675 (SVs_OBJECT|SVf_OK|SVs_GMG|SVs_SMG|SVs_RMG))
2676 == (SVs_OBJECT|SVs_RMG))
2677 && strEQ(s=HvNAME(SvSTASH(sv)), "Regexp")
2678 && (mg = mg_find(sv, 'r'))) {
2679 regexp *re = (regexp *)mg->mg_obj;
2682 char *fptr = "msix";
2687 U16 reganch = (re->reganch & PMf_COMPILETIME) >> 12;
2689 while((ch = *fptr++)) {
2691 reflags[left++] = ch;
2694 reflags[right--] = ch;
2699 reflags[left] = '-';
2703 mg->mg_len = re->prelen + 4 + left;
2704 New(616, mg->mg_ptr, mg->mg_len + 1 + left, char);
2705 Copy("(?", mg->mg_ptr, 2, char);
2706 Copy(reflags, mg->mg_ptr+2, left, char);
2707 Copy(":", mg->mg_ptr+left+2, 1, char);
2708 Copy(re->precomp, mg->mg_ptr+3+left, re->prelen, char);
2709 mg->mg_ptr[mg->mg_len - 1] = ')';
2710 mg->mg_ptr[mg->mg_len] = 0;
2712 PL_reginterp_cnt += re->program[0].next_off;
2724 case SVt_PVBM: if (SvROK(sv))
2727 s = "SCALAR"; break;
2728 case SVt_PVLV: s = "LVALUE"; break;
2729 case SVt_PVAV: s = "ARRAY"; break;
2730 case SVt_PVHV: s = "HASH"; break;
2731 case SVt_PVCV: s = "CODE"; break;
2732 case SVt_PVGV: s = "GLOB"; break;
2733 case SVt_PVFM: s = "FORMAT"; break;
2734 case SVt_PVIO: s = "IO"; break;
2735 default: s = "UNKNOWN"; break;
2739 Perl_sv_setpvf(aTHX_ tsv, "%s=%s", HvNAME(SvSTASH(sv)), s);
2742 Perl_sv_catpvf(aTHX_ tsv, "(0x%"UVxf")", PTR2UV(sv));
2748 if (SvREADONLY(sv) && !SvOK(sv)) {
2749 if (ckWARN(WARN_UNINITIALIZED))
2755 if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
2756 /* I'm assuming that if both IV and NV are equally valid then
2757 converting the IV is going to be more efficient */
2758 U32 isIOK = SvIOK(sv);
2759 U32 isUIOK = SvIsUV(sv);
2760 char buf[TYPE_CHARS(UV)];
2763 if (SvTYPE(sv) < SVt_PVIV)
2764 sv_upgrade(sv, SVt_PVIV);
2766 ptr = uiv_2buf(buf, 0, SvUVX(sv), 1, &ebuf);
2768 ptr = uiv_2buf(buf, SvIVX(sv), 0, 0, &ebuf);
2769 SvGROW(sv, ebuf - ptr + 1); /* inlined from sv_setpvn */
2770 Move(ptr,SvPVX(sv),ebuf - ptr,char);
2771 SvCUR_set(sv, ebuf - ptr);
2781 else if (SvNOKp(sv)) {
2782 if (SvTYPE(sv) < SVt_PVNV)
2783 sv_upgrade(sv, SVt_PVNV);
2784 /* The +20 is pure guesswork. Configure test needed. --jhi */
2785 SvGROW(sv, NV_DIG + 20);
2787 olderrno = errno; /* some Xenix systems wipe out errno here */
2789 if (SvNVX(sv) == 0.0)
2790 (void)strcpy(s,"0");
2794 Gconvert(SvNVX(sv), NV_DIG, 0, s);
2797 #ifdef FIXNEGATIVEZERO
2798 if (*s == '-' && s[1] == '0' && !s[2])
2808 if (ckWARN(WARN_UNINITIALIZED)
2809 && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
2812 if (SvTYPE(sv) < SVt_PV)
2813 /* Typically the caller expects that sv_any is not NULL now. */
2814 sv_upgrade(sv, SVt_PV);
2817 *lp = s - SvPVX(sv);
2820 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
2821 PTR2UV(sv),SvPVX(sv)));
2825 if (SvROK(sv)) { /* XXX Skip this when sv_pvn_force calls */
2826 /* Sneaky stuff here */
2830 tsv = newSVpv(tmpbuf, 0);
2846 len = strlen(tmpbuf);
2848 #ifdef FIXNEGATIVEZERO
2849 if (len == 2 && t[0] == '-' && t[1] == '0') {
2854 (void)SvUPGRADE(sv, SVt_PV);
2856 s = SvGROW(sv, len + 1);
2865 Perl_sv_2pvbyte_nolen(pTHX_ register SV *sv)
2868 return sv_2pvbyte(sv, &n_a);
2872 Perl_sv_2pvbyte(pTHX_ register SV *sv, STRLEN *lp)
2874 return sv_2pv(sv,lp);
2878 Perl_sv_2pvutf8_nolen(pTHX_ register SV *sv)
2881 return sv_2pvutf8(sv, &n_a);
2885 Perl_sv_2pvutf8(pTHX_ register SV *sv, STRLEN *lp)
2887 sv_utf8_upgrade(sv);
2888 return SvPV(sv,*lp);
2891 /* This function is only called on magical items */
2893 Perl_sv_2bool(pTHX_ register SV *sv)
2902 if (SvAMAGIC(sv) && (tmpsv=AMG_CALLun(sv,bool_)) &&
2903 (SvRV(tmpsv) != SvRV(sv)))
2904 return SvTRUE(tmpsv);
2905 return SvRV(sv) != 0;
2908 register XPV* Xpvtmp;
2909 if ((Xpvtmp = (XPV*)SvANY(sv)) &&
2910 (*Xpvtmp->xpv_pv > '0' ||
2911 Xpvtmp->xpv_cur > 1 ||
2912 (Xpvtmp->xpv_cur && *Xpvtmp->xpv_pv != '0')))
2919 return SvIVX(sv) != 0;
2922 return SvNVX(sv) != 0.0;
2930 =for apidoc sv_utf8_upgrade
2932 Convert the PV of an SV to its UTF8-encoded form.
2938 Perl_sv_utf8_upgrade(pTHX_ register SV *sv)
2943 if (!sv || !SvPOK(sv) || SvUTF8(sv))
2946 /* This function could be much more efficient if we had a FLAG in SVs
2947 * to signal if there are any hibit chars in the PV.
2948 * Given that there isn't make loop fast as possible
2954 if ((hibit = UTF8_IS_CONTINUED(*t++)))
2961 if (SvREADONLY(sv) && SvFAKE(sv)) {
2962 sv_force_normal(sv);
2965 len = SvCUR(sv) + 1; /* Plus the \0 */
2966 SvPVX(sv) = (char*)bytes_to_utf8((U8*)s, &len);
2967 SvCUR(sv) = len - 1;
2969 Safefree(s); /* No longer using what was there before. */
2970 SvLEN(sv) = len; /* No longer know the real size. */
2976 =for apidoc sv_utf8_downgrade
2978 Attempt to convert the PV of an SV from UTF8-encoded to byte encoding.
2979 This may not be possible if the PV contains non-byte encoding characters;
2980 if this is the case, either returns false or, if C<fail_ok> is not
2987 Perl_sv_utf8_downgrade(pTHX_ register SV* sv, bool fail_ok)
2989 if (SvPOK(sv) && SvUTF8(sv)) {
2994 if (SvREADONLY(sv) && SvFAKE(sv))
2995 sv_force_normal(sv);
2997 if (!utf8_to_bytes((U8*)s, &len)) {
3002 Perl_croak(aTHX_ "Wide character in %s",
3003 PL_op_desc[PL_op->op_type]);
3005 Perl_croak(aTHX_ "Wide character");
3017 =for apidoc sv_utf8_encode
3019 Convert the PV of an SV to UTF8-encoded, but then turn off the C<SvUTF8>
3020 flag so that it looks like bytes again. Nothing calls this.
3026 Perl_sv_utf8_encode(pTHX_ register SV *sv)
3028 sv_utf8_upgrade(sv);
3033 Perl_sv_utf8_decode(pTHX_ register SV *sv)
3038 bool has_utf = FALSE;
3039 if (!sv_utf8_downgrade(sv, TRUE))
3042 /* it is actually just a matter of turning the utf8 flag on, but
3043 * we want to make sure everything inside is valid utf8 first.
3046 if (!is_utf8_string((U8*)c, SvCUR(sv)+1))
3050 if (UTF8_IS_CONTINUED(*c++)) {
3060 /* Note: sv_setsv() should not be called with a source string that needs
3061 * to be reused, since it may destroy the source string if it is marked
3066 =for apidoc sv_setsv
3068 Copies the contents of the source SV C<ssv> into the destination SV C<dsv>.
3069 The source SV may be destroyed if it is mortal. Does not handle 'set'
3070 magic. See the macro forms C<SvSetSV>, C<SvSetSV_nosteal> and
3077 Perl_sv_setsv(pTHX_ SV *dstr, register SV *sstr)
3079 register U32 sflags;
3085 SV_CHECK_THINKFIRST(dstr);
3087 sstr = &PL_sv_undef;
3088 stype = SvTYPE(sstr);
3089 dtype = SvTYPE(dstr);
3093 /* There's a lot of redundancy below but we're going for speed here */
3098 if (dtype != SVt_PVGV) {
3099 (void)SvOK_off(dstr);
3107 sv_upgrade(dstr, SVt_IV);
3110 sv_upgrade(dstr, SVt_PVNV);
3114 sv_upgrade(dstr, SVt_PVIV);
3117 (void)SvIOK_only(dstr);
3118 SvIVX(dstr) = SvIVX(sstr);
3121 if (SvTAINTED(sstr))
3132 sv_upgrade(dstr, SVt_NV);
3137 sv_upgrade(dstr, SVt_PVNV);
3140 SvNVX(dstr) = SvNVX(sstr);
3141 (void)SvNOK_only(dstr);
3142 if (SvTAINTED(sstr))
3150 sv_upgrade(dstr, SVt_RV);
3151 else if (dtype == SVt_PVGV &&
3152 SvTYPE(SvRV(sstr)) == SVt_PVGV) {
3155 if (GvIMPORTED(dstr) != GVf_IMPORTED
3156 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3158 GvIMPORTED_on(dstr);
3169 sv_upgrade(dstr, SVt_PV);
3172 if (dtype < SVt_PVIV)
3173 sv_upgrade(dstr, SVt_PVIV);
3176 if (dtype < SVt_PVNV)
3177 sv_upgrade(dstr, SVt_PVNV);
3184 Perl_croak(aTHX_ "Bizarre copy of %s in %s", sv_reftype(sstr, 0),
3185 PL_op_name[PL_op->op_type]);
3187 Perl_croak(aTHX_ "Bizarre copy of %s", sv_reftype(sstr, 0));
3191 if (dtype <= SVt_PVGV) {
3193 if (dtype != SVt_PVGV) {
3194 char *name = GvNAME(sstr);
3195 STRLEN len = GvNAMELEN(sstr);
3196 sv_upgrade(dstr, SVt_PVGV);
3197 sv_magic(dstr, dstr, '*', Nullch, 0);
3198 GvSTASH(dstr) = (HV*)SvREFCNT_inc(GvSTASH(sstr));
3199 GvNAME(dstr) = savepvn(name, len);
3200 GvNAMELEN(dstr) = len;
3201 SvFAKE_on(dstr); /* can coerce to non-glob */
3203 /* ahem, death to those who redefine active sort subs */
3204 else if (PL_curstackinfo->si_type == PERLSI_SORT
3205 && GvCV(dstr) && PL_sortcop == CvSTART(GvCV(dstr)))
3206 Perl_croak(aTHX_ "Can't redefine active sort subroutine %s",
3208 (void)SvOK_off(dstr);
3209 GvINTRO_off(dstr); /* one-shot flag */
3211 GvGP(dstr) = gp_ref(GvGP(sstr));
3212 if (SvTAINTED(sstr))
3214 if (GvIMPORTED(dstr) != GVf_IMPORTED
3215 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3217 GvIMPORTED_on(dstr);
3225 if (SvGMAGICAL(sstr)) {
3227 if (SvTYPE(sstr) != stype) {
3228 stype = SvTYPE(sstr);
3229 if (stype == SVt_PVGV && dtype <= SVt_PVGV)
3233 if (stype == SVt_PVLV)
3234 (void)SvUPGRADE(dstr, SVt_PVNV);
3236 (void)SvUPGRADE(dstr, stype);
3239 sflags = SvFLAGS(sstr);
3241 if (sflags & SVf_ROK) {
3242 if (dtype >= SVt_PV) {
3243 if (dtype == SVt_PVGV) {
3244 SV *sref = SvREFCNT_inc(SvRV(sstr));
3246 int intro = GvINTRO(dstr);
3251 GvINTRO_off(dstr); /* one-shot flag */
3252 Newz(602,gp, 1, GP);
3253 GvGP(dstr) = gp_ref(gp);
3254 GvSV(dstr) = NEWSV(72,0);
3255 GvLINE(dstr) = CopLINE(PL_curcop);
3256 GvEGV(dstr) = (GV*)dstr;
3259 switch (SvTYPE(sref)) {
3262 SAVESPTR(GvAV(dstr));
3264 dref = (SV*)GvAV(dstr);
3265 GvAV(dstr) = (AV*)sref;
3266 if (!GvIMPORTED_AV(dstr)
3267 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3269 GvIMPORTED_AV_on(dstr);
3274 SAVESPTR(GvHV(dstr));
3276 dref = (SV*)GvHV(dstr);
3277 GvHV(dstr) = (HV*)sref;
3278 if (!GvIMPORTED_HV(dstr)
3279 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3281 GvIMPORTED_HV_on(dstr);
3286 if (GvCVGEN(dstr) && GvCV(dstr) != (CV*)sref) {
3287 SvREFCNT_dec(GvCV(dstr));
3288 GvCV(dstr) = Nullcv;
3289 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3290 PL_sub_generation++;
3292 SAVESPTR(GvCV(dstr));
3295 dref = (SV*)GvCV(dstr);
3296 if (GvCV(dstr) != (CV*)sref) {
3297 CV* cv = GvCV(dstr);
3299 if (!GvCVGEN((GV*)dstr) &&
3300 (CvROOT(cv) || CvXSUB(cv)))
3303 /* ahem, death to those who redefine
3304 * active sort subs */
3305 if (PL_curstackinfo->si_type == PERLSI_SORT &&
3306 PL_sortcop == CvSTART(cv))
3308 "Can't redefine active sort subroutine %s",
3309 GvENAME((GV*)dstr));
3310 /* Redefining a sub - warning is mandatory if
3311 it was a const and its value changed. */
3312 if (ckWARN(WARN_REDEFINE)
3314 && (!CvCONST((CV*)sref)
3315 || sv_cmp(cv_const_sv(cv),
3316 cv_const_sv((CV*)sref)))))
3318 Perl_warner(aTHX_ WARN_REDEFINE,
3320 ? "Constant subroutine %s redefined"
3321 : "Subroutine %s redefined",
3322 GvENAME((GV*)dstr));
3325 cv_ckproto(cv, (GV*)dstr,
3326 SvPOK(sref) ? SvPVX(sref) : Nullch);
3328 GvCV(dstr) = (CV*)sref;
3329 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3330 GvASSUMECV_on(dstr);
3331 PL_sub_generation++;
3333 if (!GvIMPORTED_CV(dstr)
3334 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3336 GvIMPORTED_CV_on(dstr);
3341 SAVESPTR(GvIOp(dstr));
3343 dref = (SV*)GvIOp(dstr);
3344 GvIOp(dstr) = (IO*)sref;
3348 SAVESPTR(GvFORM(dstr));
3350 dref = (SV*)GvFORM(dstr);
3351 GvFORM(dstr) = (CV*)sref;
3355 SAVESPTR(GvSV(dstr));
3357 dref = (SV*)GvSV(dstr);
3359 if (!GvIMPORTED_SV(dstr)
3360 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3362 GvIMPORTED_SV_on(dstr);
3370 if (SvTAINTED(sstr))
3375 (void)SvOOK_off(dstr); /* backoff */
3377 Safefree(SvPVX(dstr));
3378 SvLEN(dstr)=SvCUR(dstr)=0;
3381 (void)SvOK_off(dstr);
3382 SvRV(dstr) = SvREFCNT_inc(SvRV(sstr));
3384 if (sflags & SVp_NOK) {
3386 /* Only set the public OK flag if the source has public OK. */
3387 if (sflags & SVf_NOK)
3388 SvFLAGS(dstr) |= SVf_NOK;
3389 SvNVX(dstr) = SvNVX(sstr);
3391 if (sflags & SVp_IOK) {
3392 (void)SvIOKp_on(dstr);
3393 if (sflags & SVf_IOK)
3394 SvFLAGS(dstr) |= SVf_IOK;
3395 if (sflags & SVf_IVisUV)
3397 SvIVX(dstr) = SvIVX(sstr);
3399 if (SvAMAGIC(sstr)) {
3403 else if (sflags & SVp_POK) {
3406 * Check to see if we can just swipe the string. If so, it's a
3407 * possible small lose on short strings, but a big win on long ones.
3408 * It might even be a win on short strings if SvPVX(dstr)
3409 * has to be allocated and SvPVX(sstr) has to be freed.
3412 if (SvTEMP(sstr) && /* slated for free anyway? */
3413 SvREFCNT(sstr) == 1 && /* and no other references to it? */
3414 !(sflags & SVf_OOK) && /* and not involved in OOK hack? */
3415 SvLEN(sstr) && /* and really is a string */
3416 !(PL_op && PL_op->op_type == OP_AASSIGN)) /* and won't be needed again, potentially */
3418 if (SvPVX(dstr)) { /* we know that dtype >= SVt_PV */
3420 SvFLAGS(dstr) &= ~SVf_OOK;
3421 Safefree(SvPVX(dstr) - SvIVX(dstr));
3423 else if (SvLEN(dstr))
3424 Safefree(SvPVX(dstr));
3426 (void)SvPOK_only(dstr);
3427 SvPV_set(dstr, SvPVX(sstr));
3428 SvLEN_set(dstr, SvLEN(sstr));
3429 SvCUR_set(dstr, SvCUR(sstr));
3432 (void)SvOK_off(sstr); /* NOTE: nukes most SvFLAGS on sstr */
3433 SvPV_set(sstr, Nullch);
3438 else { /* have to copy actual string */
3439 STRLEN len = SvCUR(sstr);
3441 SvGROW(dstr, len + 1); /* inlined from sv_setpvn */
3442 Move(SvPVX(sstr),SvPVX(dstr),len,char);
3443 SvCUR_set(dstr, len);
3444 *SvEND(dstr) = '\0';
3445 (void)SvPOK_only(dstr);
3447 if (sflags & SVf_UTF8)
3450 if (sflags & SVp_NOK) {
3452 if (sflags & SVf_NOK)
3453 SvFLAGS(dstr) |= SVf_NOK;
3454 SvNVX(dstr) = SvNVX(sstr);
3456 if (sflags & SVp_IOK) {
3457 (void)SvIOKp_on(dstr);
3458 if (sflags & SVf_IOK)
3459 SvFLAGS(dstr) |= SVf_IOK;
3460 if (sflags & SVf_IVisUV)
3462 SvIVX(dstr) = SvIVX(sstr);
3465 else if (sflags & SVp_IOK) {
3466 if (sflags & SVf_IOK)
3467 (void)SvIOK_only(dstr);
3472 /* XXXX Do we want to set IsUV for IV(ROK)? Be extra safe... */
3473 if (sflags & SVf_IVisUV)
3475 SvIVX(dstr) = SvIVX(sstr);
3476 if (sflags & SVp_NOK) {
3477 if (sflags & SVf_NOK)
3478 (void)SvNOK_on(dstr);
3480 (void)SvNOKp_on(dstr);
3481 SvNVX(dstr) = SvNVX(sstr);
3484 else if (sflags & SVp_NOK) {
3485 if (sflags & SVf_NOK)
3486 (void)SvNOK_only(dstr);
3491 SvNVX(dstr) = SvNVX(sstr);
3494 if (dtype == SVt_PVGV) {
3495 if (ckWARN(WARN_MISC))
3496 Perl_warner(aTHX_ WARN_MISC, "Undefined value assigned to typeglob");
3499 (void)SvOK_off(dstr);
3501 if (SvTAINTED(sstr))
3506 =for apidoc sv_setsv_mg
3508 Like C<sv_setsv>, but also handles 'set' magic.
3514 Perl_sv_setsv_mg(pTHX_ SV *dstr, register SV *sstr)
3516 sv_setsv(dstr,sstr);
3521 =for apidoc sv_setpvn
3523 Copies a string into an SV. The C<len> parameter indicates the number of
3524 bytes to be copied. Does not handle 'set' magic. See C<sv_setpvn_mg>.
3530 Perl_sv_setpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3532 register char *dptr;
3534 /* len is STRLEN which is unsigned, need to copy to signed */
3538 SV_CHECK_THINKFIRST(sv);
3543 (void)SvUPGRADE(sv, SVt_PV);
3545 SvGROW(sv, len + 1);
3547 Move(ptr,dptr,len,char);
3550 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3555 =for apidoc sv_setpvn_mg
3557 Like C<sv_setpvn>, but also handles 'set' magic.
3563 Perl_sv_setpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3565 sv_setpvn(sv,ptr,len);
3570 =for apidoc sv_setpv
3572 Copies a string into an SV. The string must be null-terminated. Does not
3573 handle 'set' magic. See C<sv_setpv_mg>.
3579 Perl_sv_setpv(pTHX_ register SV *sv, register const char *ptr)
3581 register STRLEN len;
3583 SV_CHECK_THINKFIRST(sv);
3589 (void)SvUPGRADE(sv, SVt_PV);
3591 SvGROW(sv, len + 1);
3592 Move(ptr,SvPVX(sv),len+1,char);
3594 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3599 =for apidoc sv_setpv_mg
3601 Like C<sv_setpv>, but also handles 'set' magic.
3607 Perl_sv_setpv_mg(pTHX_ register SV *sv, register const char *ptr)
3614 =for apidoc sv_usepvn
3616 Tells an SV to use C<ptr> to find its string value. Normally the string is
3617 stored inside the SV but sv_usepvn allows the SV to use an outside string.
3618 The C<ptr> should point to memory that was allocated by C<malloc>. The
3619 string length, C<len>, must be supplied. This function will realloc the
3620 memory pointed to by C<ptr>, so that pointer should not be freed or used by
3621 the programmer after giving it to sv_usepvn. Does not handle 'set' magic.
3622 See C<sv_usepvn_mg>.
3628 Perl_sv_usepvn(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
3630 SV_CHECK_THINKFIRST(sv);
3631 (void)SvUPGRADE(sv, SVt_PV);
3636 (void)SvOOK_off(sv);
3637 if (SvPVX(sv) && SvLEN(sv))
3638 Safefree(SvPVX(sv));
3639 Renew(ptr, len+1, char);
3642 SvLEN_set(sv, len+1);
3644 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3649 =for apidoc sv_usepvn_mg
3651 Like C<sv_usepvn>, but also handles 'set' magic.
3657 Perl_sv_usepvn_mg(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
3659 sv_usepvn(sv,ptr,len);
3664 Perl_sv_force_normal_flags(pTHX_ register SV *sv, U32 flags)
3666 if (SvREADONLY(sv)) {
3668 char *pvx = SvPVX(sv);
3669 STRLEN len = SvCUR(sv);
3670 U32 hash = SvUVX(sv);
3671 SvGROW(sv, len + 1);
3672 Move(pvx,SvPVX(sv),len,char);
3676 unsharepvn(pvx,SvUTF8(sv)?-len:len,hash);
3678 else if (PL_curcop != &PL_compiling)
3679 Perl_croak(aTHX_ PL_no_modify);
3682 sv_unref_flags(sv, flags);
3683 else if (SvFAKE(sv) && SvTYPE(sv) == SVt_PVGV)
3688 Perl_sv_force_normal(pTHX_ register SV *sv)
3690 sv_force_normal_flags(sv, 0);
3696 Efficient removal of characters from the beginning of the string buffer.
3697 SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
3698 the string buffer. The C<ptr> becomes the first character of the adjusted
3705 Perl_sv_chop(pTHX_ register SV *sv, register char *ptr) /* like set but assuming ptr is in sv */
3709 register STRLEN delta;
3711 if (!ptr || !SvPOKp(sv))
3713 SV_CHECK_THINKFIRST(sv);
3714 if (SvTYPE(sv) < SVt_PVIV)
3715 sv_upgrade(sv,SVt_PVIV);
3718 if (!SvLEN(sv)) { /* make copy of shared string */
3719 char *pvx = SvPVX(sv);
3720 STRLEN len = SvCUR(sv);
3721 SvGROW(sv, len + 1);
3722 Move(pvx,SvPVX(sv),len,char);
3726 SvFLAGS(sv) |= SVf_OOK;
3728 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVp_IOK|SVp_NOK|SVf_IVisUV);
3729 delta = ptr - SvPVX(sv);
3737 =for apidoc sv_catpvn
3739 Concatenates the string onto the end of the string which is in the SV. The
3740 C<len> indicates number of bytes to copy. Handles 'get' magic, but not
3741 'set' magic. See C<sv_catpvn_mg>.
3747 Perl_sv_catpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3752 junk = SvPV_force(sv, tlen);
3753 SvGROW(sv, tlen + len + 1);
3756 Move(ptr,SvPVX(sv)+tlen,len,char);
3759 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3764 =for apidoc sv_catpvn_mg
3766 Like C<sv_catpvn>, but also handles 'set' magic.
3772 Perl_sv_catpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3774 sv_catpvn(sv,ptr,len);
3779 =for apidoc sv_catsv
3781 Concatenates the string from SV C<ssv> onto the end of the string in
3782 SV C<dsv>. Modifies C<dsv> but not C<ssv>. Handles 'get' magic, but
3783 not 'set' magic. See C<sv_catsv_mg>.
3788 Perl_sv_catsv(pTHX_ SV *dsv, register SV *ssv)
3794 if ((spv = SvPV(ssv, slen))) {
3795 bool dutf8 = DO_UTF8(dsv);
3796 bool sutf8 = DO_UTF8(ssv);
3799 sv_catpvn(dsv,spv,slen);
3802 /* Not modifying source SV, so taking a temporary copy. */
3803 SV* csv = sv_2mortal(newSVsv(ssv));
3807 sv_utf8_upgrade(csv);
3808 cpv = SvPV(csv,clen);
3809 sv_catpvn(dsv,cpv,clen);
3812 sv_utf8_upgrade(dsv);
3813 sv_catpvn(dsv,spv,slen);
3814 SvUTF8_on(dsv); /* If dsv has no wide characters. */
3821 =for apidoc sv_catsv_mg
3823 Like C<sv_catsv>, but also handles 'set' magic.
3829 Perl_sv_catsv_mg(pTHX_ SV *dsv, register SV *ssv)
3836 =for apidoc sv_catpv
3838 Concatenates the string onto the end of the string which is in the SV.
3839 Handles 'get' magic, but not 'set' magic. See C<sv_catpv_mg>.
3845 Perl_sv_catpv(pTHX_ register SV *sv, register const char *ptr)
3847 register STRLEN len;
3853 junk = SvPV_force(sv, tlen);
3855 SvGROW(sv, tlen + len + 1);
3858 Move(ptr,SvPVX(sv)+tlen,len+1,char);
3860 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3865 =for apidoc sv_catpv_mg
3867 Like C<sv_catpv>, but also handles 'set' magic.
3873 Perl_sv_catpv_mg(pTHX_ register SV *sv, register const char *ptr)
3880 Perl_newSV(pTHX_ STRLEN len)
3886 sv_upgrade(sv, SVt_PV);
3887 SvGROW(sv, len + 1);
3892 /* name is assumed to contain an SV* if (name && namelen == HEf_SVKEY) */
3895 =for apidoc sv_magic
3897 Adds magic to an SV.
3903 Perl_sv_magic(pTHX_ register SV *sv, SV *obj, int how, const char *name, I32 namlen)
3907 if (SvREADONLY(sv)) {
3908 if (PL_curcop != &PL_compiling && !strchr("gBf", how))
3909 Perl_croak(aTHX_ PL_no_modify);
3911 if (SvMAGICAL(sv) || (how == 't' && SvTYPE(sv) >= SVt_PVMG)) {
3912 if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
3919 (void)SvUPGRADE(sv, SVt_PVMG);
3921 Newz(702,mg, 1, MAGIC);
3922 mg->mg_moremagic = SvMAGIC(sv);
3925 if (!obj || obj == sv || how == '#' || how == 'r')
3928 mg->mg_obj = SvREFCNT_inc(obj);
3929 mg->mg_flags |= MGf_REFCOUNTED;
3932 mg->mg_len = namlen;
3935 mg->mg_ptr = savepvn(name, namlen);
3936 else if (namlen == HEf_SVKEY)
3937 mg->mg_ptr = (char*)SvREFCNT_inc((SV*)name);
3941 mg->mg_virtual = &PL_vtbl_sv;
3944 mg->mg_virtual = &PL_vtbl_amagic;
3947 mg->mg_virtual = &PL_vtbl_amagicelem;
3950 mg->mg_virtual = &PL_vtbl_ovrld;
3953 mg->mg_virtual = &PL_vtbl_bm;
3956 mg->mg_virtual = &PL_vtbl_regdata;
3959 mg->mg_virtual = &PL_vtbl_regdatum;
3962 mg->mg_virtual = &PL_vtbl_env;
3965 mg->mg_virtual = &PL_vtbl_fm;
3968 mg->mg_virtual = &PL_vtbl_envelem;
3971 mg->mg_virtual = &PL_vtbl_mglob;
3974 mg->mg_virtual = &PL_vtbl_isa;
3977 mg->mg_virtual = &PL_vtbl_isaelem;
3980 mg->mg_virtual = &PL_vtbl_nkeys;
3987 mg->mg_virtual = &PL_vtbl_dbline;
3991 mg->mg_virtual = &PL_vtbl_mutex;
3993 #endif /* USE_THREADS */
3994 #ifdef USE_LOCALE_COLLATE
3996 mg->mg_virtual = &PL_vtbl_collxfrm;
3998 #endif /* USE_LOCALE_COLLATE */
4000 mg->mg_virtual = &PL_vtbl_pack;
4004 mg->mg_virtual = &PL_vtbl_packelem;
4007 mg->mg_virtual = &PL_vtbl_regexp;
4010 mg->mg_virtual = &PL_vtbl_sig;
4013 mg->mg_virtual = &PL_vtbl_sigelem;
4016 mg->mg_virtual = &PL_vtbl_taint;
4020 mg->mg_virtual = &PL_vtbl_uvar;
4023 mg->mg_virtual = &PL_vtbl_vec;
4026 mg->mg_virtual = &PL_vtbl_substr;
4029 mg->mg_virtual = &PL_vtbl_defelem;
4032 mg->mg_virtual = &PL_vtbl_glob;
4035 mg->mg_virtual = &PL_vtbl_arylen;
4038 mg->mg_virtual = &PL_vtbl_pos;
4041 mg->mg_virtual = &PL_vtbl_backref;
4043 case '~': /* Reserved for use by extensions not perl internals. */
4044 /* Useful for attaching extension internal data to perl vars. */
4045 /* Note that multiple extensions may clash if magical scalars */
4046 /* etc holding private data from one are passed to another. */
4050 Perl_croak(aTHX_ "Don't know how to handle magic of type '%c'", how);
4054 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
4058 =for apidoc sv_unmagic
4060 Removes magic from an SV.
4066 Perl_sv_unmagic(pTHX_ SV *sv, int type)
4070 if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
4073 for (mg = *mgp; mg; mg = *mgp) {
4074 if (mg->mg_type == type) {
4075 MGVTBL* vtbl = mg->mg_virtual;
4076 *mgp = mg->mg_moremagic;
4077 if (vtbl && vtbl->svt_free)
4078 CALL_FPTR(vtbl->svt_free)(aTHX_ sv, mg);
4079 if (mg->mg_ptr && mg->mg_type != 'g')
4080 if (mg->mg_len >= 0)
4081 Safefree(mg->mg_ptr);
4082 else if (mg->mg_len == HEf_SVKEY)
4083 SvREFCNT_dec((SV*)mg->mg_ptr);
4084 if (mg->mg_flags & MGf_REFCOUNTED)
4085 SvREFCNT_dec(mg->mg_obj);
4089 mgp = &mg->mg_moremagic;
4093 SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
4100 =for apidoc sv_rvweaken
4108 Perl_sv_rvweaken(pTHX_ SV *sv)
4111 if (!SvOK(sv)) /* let undefs pass */
4114 Perl_croak(aTHX_ "Can't weaken a nonreference");
4115 else if (SvWEAKREF(sv)) {
4116 if (ckWARN(WARN_MISC))
4117 Perl_warner(aTHX_ WARN_MISC, "Reference is already weak");
4121 sv_add_backref(tsv, sv);
4128 S_sv_add_backref(pTHX_ SV *tsv, SV *sv)
4132 if (SvMAGICAL(tsv) && (mg = mg_find(tsv, '<')))
4133 av = (AV*)mg->mg_obj;
4136 sv_magic(tsv, (SV*)av, '<', NULL, 0);
4137 SvREFCNT_dec(av); /* for sv_magic */
4143 S_sv_del_backref(pTHX_ SV *sv)
4150 if (!SvMAGICAL(tsv) || !(mg = mg_find(tsv, '<')))
4151 Perl_croak(aTHX_ "panic: del_backref");
4152 av = (AV *)mg->mg_obj;
4157 svp[i] = &PL_sv_undef; /* XXX */
4164 =for apidoc sv_insert
4166 Inserts a string at the specified offset/length within the SV. Similar to
4167 the Perl substr() function.
4173 Perl_sv_insert(pTHX_ SV *bigstr, STRLEN offset, STRLEN len, char *little, STRLEN littlelen)
4177 register char *midend;
4178 register char *bigend;
4184 Perl_croak(aTHX_ "Can't modify non-existent substring");
4185 SvPV_force(bigstr, curlen);
4186 (void)SvPOK_only_UTF8(bigstr);
4187 if (offset + len > curlen) {
4188 SvGROW(bigstr, offset+len+1);
4189 Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
4190 SvCUR_set(bigstr, offset+len);
4194 i = littlelen - len;
4195 if (i > 0) { /* string might grow */
4196 big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
4197 mid = big + offset + len;
4198 midend = bigend = big + SvCUR(bigstr);
4201 while (midend > mid) /* shove everything down */
4202 *--bigend = *--midend;
4203 Move(little,big+offset,littlelen,char);
4209 Move(little,SvPVX(bigstr)+offset,len,char);
4214 big = SvPVX(bigstr);
4217 bigend = big + SvCUR(bigstr);
4219 if (midend > bigend)
4220 Perl_croak(aTHX_ "panic: sv_insert");
4222 if (mid - big > bigend - midend) { /* faster to shorten from end */
4224 Move(little, mid, littlelen,char);
4227 i = bigend - midend;
4229 Move(midend, mid, i,char);
4233 SvCUR_set(bigstr, mid - big);
4236 else if ((i = mid - big)) { /* faster from front */
4237 midend -= littlelen;
4239 sv_chop(bigstr,midend-i);
4244 Move(little, mid, littlelen,char);
4246 else if (littlelen) {
4247 midend -= littlelen;
4248 sv_chop(bigstr,midend);
4249 Move(little,midend,littlelen,char);
4252 sv_chop(bigstr,midend);
4258 =for apidoc sv_replace
4260 Make the first argument a copy of the second, then delete the original.
4266 Perl_sv_replace(pTHX_ register SV *sv, register SV *nsv)
4268 U32 refcnt = SvREFCNT(sv);
4269 SV_CHECK_THINKFIRST(sv);
4270 if (SvREFCNT(nsv) != 1 && ckWARN_d(WARN_INTERNAL))
4271 Perl_warner(aTHX_ WARN_INTERNAL, "Reference miscount in sv_replace()");
4272 if (SvMAGICAL(sv)) {
4276 sv_upgrade(nsv, SVt_PVMG);
4277 SvMAGIC(nsv) = SvMAGIC(sv);
4278 SvFLAGS(nsv) |= SvMAGICAL(sv);
4284 assert(!SvREFCNT(sv));
4285 StructCopy(nsv,sv,SV);
4286 SvREFCNT(sv) = refcnt;
4287 SvFLAGS(nsv) |= SVTYPEMASK; /* Mark as freed */
4292 =for apidoc sv_clear
4294 Clear an SV, making it empty. Does not free the memory used by the SV
4301 Perl_sv_clear(pTHX_ register SV *sv)
4305 assert(SvREFCNT(sv) == 0);
4308 if (PL_defstash) { /* Still have a symbol table? */
4313 Zero(&tmpref, 1, SV);
4314 sv_upgrade(&tmpref, SVt_RV);
4316 SvREADONLY_on(&tmpref); /* DESTROY() could be naughty */
4317 SvREFCNT(&tmpref) = 1;
4320 stash = SvSTASH(sv);
4321 destructor = StashHANDLER(stash,DESTROY);
4324 PUSHSTACKi(PERLSI_DESTROY);
4325 SvRV(&tmpref) = SvREFCNT_inc(sv);
4330 call_sv((SV*)destructor, G_DISCARD|G_EVAL|G_KEEPERR);
4336 } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
4338 del_XRV(SvANY(&tmpref));
4341 if (PL_in_clean_objs)
4342 Perl_croak(aTHX_ "DESTROY created new reference to dead object '%s'",
4344 /* DESTROY gave object new lease on life */
4350 SvREFCNT_dec(SvSTASH(sv)); /* possibly of changed persuasion */
4351 SvOBJECT_off(sv); /* Curse the object. */
4352 if (SvTYPE(sv) != SVt_PVIO)
4353 --PL_sv_objcount; /* XXX Might want something more general */
4356 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv))
4359 switch (SvTYPE(sv)) {
4362 IoIFP(sv) != PerlIO_stdin() &&
4363 IoIFP(sv) != PerlIO_stdout() &&
4364 IoIFP(sv) != PerlIO_stderr())
4366 io_close((IO*)sv, FALSE);
4368 if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
4369 PerlDir_close(IoDIRP(sv));
4370 IoDIRP(sv) = (DIR*)NULL;
4371 Safefree(IoTOP_NAME(sv));
4372 Safefree(IoFMT_NAME(sv));
4373 Safefree(IoBOTTOM_NAME(sv));
4388 SvREFCNT_dec(LvTARG(sv));
4392 Safefree(GvNAME(sv));
4393 /* cannot decrease stash refcount yet, as we might recursively delete
4394 ourselves when the refcnt drops to zero. Delay SvREFCNT_dec
4395 of stash until current sv is completely gone.
4396 -- JohnPC, 27 Mar 1998 */
4397 stash = GvSTASH(sv);
4403 (void)SvOOK_off(sv);
4411 SvREFCNT_dec(SvRV(sv));
4413 else if (SvPVX(sv) && SvLEN(sv))
4414 Safefree(SvPVX(sv));
4415 else if (SvPVX(sv) && SvREADONLY(sv) && SvFAKE(sv)) {
4416 unsharepvn(SvPVX(sv),SvUTF8(sv)?-SvCUR(sv):SvCUR(sv),SvUVX(sv));
4428 switch (SvTYPE(sv)) {
4444 del_XPVIV(SvANY(sv));
4447 del_XPVNV(SvANY(sv));
4450 del_XPVMG(SvANY(sv));
4453 del_XPVLV(SvANY(sv));
4456 del_XPVAV(SvANY(sv));
4459 del_XPVHV(SvANY(sv));
4462 del_XPVCV(SvANY(sv));
4465 del_XPVGV(SvANY(sv));
4466 /* code duplication for increased performance. */
4467 SvFLAGS(sv) &= SVf_BREAK;
4468 SvFLAGS(sv) |= SVTYPEMASK;
4469 /* decrease refcount of the stash that owns this GV, if any */
4471 SvREFCNT_dec(stash);
4472 return; /* not break, SvFLAGS reset already happened */
4474 del_XPVBM(SvANY(sv));
4477 del_XPVFM(SvANY(sv));
4480 del_XPVIO(SvANY(sv));
4483 SvFLAGS(sv) &= SVf_BREAK;
4484 SvFLAGS(sv) |= SVTYPEMASK;
4488 Perl_sv_newref(pTHX_ SV *sv)
4491 ATOMIC_INC(SvREFCNT(sv));
4498 Free the memory used by an SV.
4504 Perl_sv_free(pTHX_ SV *sv)
4506 int refcount_is_zero;
4510 if (SvREFCNT(sv) == 0) {
4511 if (SvFLAGS(sv) & SVf_BREAK)
4513 if (PL_in_clean_all) /* All is fair */
4515 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
4516 /* make sure SvREFCNT(sv)==0 happens very seldom */
4517 SvREFCNT(sv) = (~(U32)0)/2;
4520 if (ckWARN_d(WARN_INTERNAL))
4521 Perl_warner(aTHX_ WARN_INTERNAL, "Attempt to free unreferenced scalar");
4524 ATOMIC_DEC_AND_TEST(refcount_is_zero, SvREFCNT(sv));
4525 if (!refcount_is_zero)
4529 if (ckWARN_d(WARN_DEBUGGING))
4530 Perl_warner(aTHX_ WARN_DEBUGGING,
4531 "Attempt to free temp prematurely: SV 0x%"UVxf,
4536 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
4537 /* make sure SvREFCNT(sv)==0 happens very seldom */
4538 SvREFCNT(sv) = (~(U32)0)/2;
4549 Returns the length of the string in the SV. See also C<SvCUR>.
4555 Perl_sv_len(pTHX_ register SV *sv)
4564 len = mg_length(sv);
4566 junk = SvPV(sv, len);
4571 =for apidoc sv_len_utf8
4573 Returns the number of characters in the string in an SV, counting wide
4574 UTF8 bytes as a single character.
4580 Perl_sv_len_utf8(pTHX_ register SV *sv)
4586 return mg_length(sv);
4590 U8 *s = (U8*)SvPV(sv, len);
4592 return Perl_utf8_length(aTHX_ s, s + len);
4597 Perl_sv_pos_u2b(pTHX_ register SV *sv, I32* offsetp, I32* lenp)
4602 I32 uoffset = *offsetp;
4608 start = s = (U8*)SvPV(sv, len);
4610 while (s < send && uoffset--)
4614 *offsetp = s - start;
4618 while (s < send && ulen--)
4628 Perl_sv_pos_b2u(pTHX_ register SV *sv, I32* offsetp)
4637 s = (U8*)SvPV(sv, len);
4639 Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset");
4640 send = s + *offsetp;
4645 if (utf8_to_uv(s, UTF8SKIP(s), &n, 0)) {
4659 Returns a boolean indicating whether the strings in the two SVs are
4666 Perl_sv_eq(pTHX_ register SV *sv1, register SV *sv2)
4673 bool pv1tmp = FALSE;
4674 bool pv2tmp = FALSE;
4681 pv1 = SvPV(sv1, cur1);
4688 pv2 = SvPV(sv2, cur2);
4690 /* do not utf8ize the comparands as a side-effect */
4691 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTE) {
4692 if (PL_hints & HINT_UTF8_DISTINCT)
4696 (void)utf8_to_bytes((U8*)(pv1 = savepvn(pv1, cur1)), &cur1);
4707 (void)utf8_to_bytes((U8*)(pv2 = savepvn(pv2, cur2)), &cur2);
4720 eq = memEQ(pv1, pv2, cur1);
4733 Compares the strings in two SVs. Returns -1, 0, or 1 indicating whether the
4734 string in C<sv1> is less than, equal to, or greater than the string in
4741 Perl_sv_cmp(pTHX_ register SV *sv1, register SV *sv2)
4746 bool pv1tmp = FALSE;
4747 bool pv2tmp = FALSE;
4754 pv1 = SvPV(sv1, cur1);
4761 pv2 = SvPV(sv2, cur2);
4763 /* do not utf8ize the comparands as a side-effect */
4764 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTE) {
4765 if (PL_hints & HINT_UTF8_DISTINCT)
4766 return SvUTF8(sv1) ? 1 : -1;
4769 pv2 = (char*)bytes_to_utf8((U8*)pv2, &cur2);
4773 pv1 = (char*)bytes_to_utf8((U8*)pv1, &cur1);
4779 cmp = cur2 ? -1 : 0;
4783 I32 retval = memcmp((void*)pv1, (void*)pv2, cur1 < cur2 ? cur1 : cur2);
4786 cmp = retval < 0 ? -1 : 1;
4787 } else if (cur1 == cur2) {
4790 cmp = cur1 < cur2 ? -1 : 1;
4803 =for apidoc sv_cmp_locale
4805 Compares the strings in two SVs in a locale-aware manner. See
4812 Perl_sv_cmp_locale(pTHX_ register SV *sv1, register SV *sv2)
4814 #ifdef USE_LOCALE_COLLATE
4820 if (PL_collation_standard)
4824 pv1 = sv1 ? sv_collxfrm(sv1, &len1) : (char *) NULL;
4826 pv2 = sv2 ? sv_collxfrm(sv2, &len2) : (char *) NULL;
4828 if (!pv1 || !len1) {
4839 retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
4842 return retval < 0 ? -1 : 1;
4845 * When the result of collation is equality, that doesn't mean
4846 * that there are no differences -- some locales exclude some
4847 * characters from consideration. So to avoid false equalities,
4848 * we use the raw string as a tiebreaker.
4854 #endif /* USE_LOCALE_COLLATE */
4856 return sv_cmp(sv1, sv2);
4859 #ifdef USE_LOCALE_COLLATE
4861 * Any scalar variable may carry an 'o' magic that contains the
4862 * scalar data of the variable transformed to such a format that
4863 * a normal memory comparison can be used to compare the data
4864 * according to the locale settings.
4867 Perl_sv_collxfrm(pTHX_ SV *sv, STRLEN *nxp)
4871 mg = SvMAGICAL(sv) ? mg_find(sv, 'o') : (MAGIC *) NULL;
4872 if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
4877 Safefree(mg->mg_ptr);
4879 if ((xf = mem_collxfrm(s, len, &xlen))) {
4880 if (SvREADONLY(sv)) {
4883 return xf + sizeof(PL_collation_ix);
4886 sv_magic(sv, 0, 'o', 0, 0);
4887 mg = mg_find(sv, 'o');
4900 if (mg && mg->mg_ptr) {
4902 return mg->mg_ptr + sizeof(PL_collation_ix);
4910 #endif /* USE_LOCALE_COLLATE */
4915 Get a line from the filehandle and store it into the SV, optionally
4916 appending to the currently-stored string.
4922 Perl_sv_gets(pTHX_ register SV *sv, register PerlIO *fp, I32 append)
4926 register STDCHAR rslast;
4927 register STDCHAR *bp;
4931 SV_CHECK_THINKFIRST(sv);
4932 (void)SvUPGRADE(sv, SVt_PV);
4936 if (RsSNARF(PL_rs)) {
4940 else if (RsRECORD(PL_rs)) {
4941 I32 recsize, bytesread;
4944 /* Grab the size of the record we're getting */
4945 recsize = SvIV(SvRV(PL_rs));
4946 (void)SvPOK_only(sv); /* Validate pointer */
4947 buffer = SvGROW(sv, recsize + 1);
4950 /* VMS wants read instead of fread, because fread doesn't respect */
4951 /* RMS record boundaries. This is not necessarily a good thing to be */
4952 /* doing, but we've got no other real choice */
4953 bytesread = PerlLIO_read(PerlIO_fileno(fp), buffer, recsize);
4955 bytesread = PerlIO_read(fp, buffer, recsize);
4957 SvCUR_set(sv, bytesread);
4958 buffer[bytesread] = '\0';
4959 if (PerlIO_isutf8(fp))
4963 return(SvCUR(sv) ? SvPVX(sv) : Nullch);
4965 else if (RsPARA(PL_rs)) {
4970 /* Get $/ i.e. PL_rs into same encoding as stream wants */
4971 if (PerlIO_isutf8(fp)) {
4972 rsptr = SvPVutf8(PL_rs, rslen);
4975 if (SvUTF8(PL_rs)) {
4976 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
4977 Perl_croak(aTHX_ "Wide character in $/");
4980 rsptr = SvPV(PL_rs, rslen);
4984 rslast = rslen ? rsptr[rslen - 1] : '\0';
4986 if (RsPARA(PL_rs)) { /* have to do this both before and after */
4987 do { /* to make sure file boundaries work right */
4990 i = PerlIO_getc(fp);
4994 PerlIO_ungetc(fp,i);
5000 /* See if we know enough about I/O mechanism to cheat it ! */
5002 /* This used to be #ifdef test - it is made run-time test for ease
5003 of abstracting out stdio interface. One call should be cheap
5004 enough here - and may even be a macro allowing compile
5008 if (PerlIO_fast_gets(fp)) {
5011 * We're going to steal some values from the stdio struct
5012 * and put EVERYTHING in the innermost loop into registers.
5014 register STDCHAR *ptr;
5018 #if defined(VMS) && defined(PERLIO_IS_STDIO)
5019 /* An ungetc()d char is handled separately from the regular
5020 * buffer, so we getc() it back out and stuff it in the buffer.
5022 i = PerlIO_getc(fp);
5023 if (i == EOF) return 0;
5024 *(--((*fp)->_ptr)) = (unsigned char) i;
5028 /* Here is some breathtakingly efficient cheating */
5030 cnt = PerlIO_get_cnt(fp); /* get count into register */
5031 (void)SvPOK_only(sv); /* validate pointer */
5032 if (SvLEN(sv) - append <= cnt + 1) { /* make sure we have the room */
5033 if (cnt > 80 && SvLEN(sv) > append) {
5034 shortbuffered = cnt - SvLEN(sv) + append + 1;
5035 cnt -= shortbuffered;
5039 /* remember that cnt can be negative */
5040 SvGROW(sv, append + (cnt <= 0 ? 2 : (cnt + 1)));
5045 bp = (STDCHAR*)SvPVX(sv) + append; /* move these two too to registers */
5046 ptr = (STDCHAR*)PerlIO_get_ptr(fp);
5047 DEBUG_P(PerlIO_printf(Perl_debug_log,
5048 "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
5049 DEBUG_P(PerlIO_printf(Perl_debug_log,
5050 "Screamer: entering: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
5051 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
5052 PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
5057 while (cnt > 0) { /* this | eat */
5059 if ((*bp++ = *ptr++) == rslast) /* really | dust */
5060 goto thats_all_folks; /* screams | sed :-) */
5064 Copy(ptr, bp, cnt, char); /* this | eat */
5065 bp += cnt; /* screams | dust */
5066 ptr += cnt; /* louder | sed :-) */
5071 if (shortbuffered) { /* oh well, must extend */
5072 cnt = shortbuffered;
5074 bpx = bp - (STDCHAR*)SvPVX(sv); /* box up before relocation */
5076 SvGROW(sv, SvLEN(sv) + append + cnt + 2);
5077 bp = (STDCHAR*)SvPVX(sv) + bpx; /* unbox after relocation */
5081 DEBUG_P(PerlIO_printf(Perl_debug_log,
5082 "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
5083 PTR2UV(ptr),(long)cnt));
5084 PerlIO_set_ptrcnt(fp, ptr, cnt); /* deregisterize cnt and ptr */
5085 DEBUG_P(PerlIO_printf(Perl_debug_log,
5086 "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
5087 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
5088 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
5089 /* This used to call 'filbuf' in stdio form, but as that behaves like
5090 getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
5091 another abstraction. */
5092 i = PerlIO_getc(fp); /* get more characters */
5093 DEBUG_P(PerlIO_printf(Perl_debug_log,
5094 "Screamer: post: 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 cnt = PerlIO_get_cnt(fp);
5098 ptr = (STDCHAR*)PerlIO_get_ptr(fp); /* reregisterize cnt and ptr */
5099 DEBUG_P(PerlIO_printf(Perl_debug_log,
5100 "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
5102 if (i == EOF) /* all done for ever? */
5103 goto thats_really_all_folks;
5105 bpx = bp - (STDCHAR*)SvPVX(sv); /* box up before relocation */
5107 SvGROW(sv, bpx + cnt + 2);
5108 bp = (STDCHAR*)SvPVX(sv) + bpx; /* unbox after relocation */
5110 *bp++ = i; /* store character from PerlIO_getc */
5112 if (rslen && (STDCHAR)i == rslast) /* all done for now? */
5113 goto thats_all_folks;
5117 if ((rslen > 1 && (bp - (STDCHAR*)SvPVX(sv) < rslen)) ||
5118 memNE((char*)bp - rslen, rsptr, rslen))
5119 goto screamer; /* go back to the fray */
5120 thats_really_all_folks:
5122 cnt += shortbuffered;
5123 DEBUG_P(PerlIO_printf(Perl_debug_log,
5124 "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
5125 PerlIO_set_ptrcnt(fp, ptr, cnt); /* put these back or we're in trouble */
5126 DEBUG_P(PerlIO_printf(Perl_debug_log,
5127 "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
5128 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
5129 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
5131 SvCUR_set(sv, bp - (STDCHAR*)SvPVX(sv)); /* set length */
5132 DEBUG_P(PerlIO_printf(Perl_debug_log,
5133 "Screamer: done, len=%ld, string=|%.*s|\n",
5134 (long)SvCUR(sv),(int)SvCUR(sv),SvPVX(sv)));
5139 /*The big, slow, and stupid way */
5142 /* Need to work around EPOC SDK features */
5143 /* On WINS: MS VC5 generates calls to _chkstk, */
5144 /* if a `large' stack frame is allocated */
5145 /* gcc on MARM does not generate calls like these */
5151 register STDCHAR *bpe = buf + sizeof(buf);
5153 while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = i) != rslast && bp < bpe)
5154 ; /* keep reading */
5158 cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
5159 /* Accomodate broken VAXC compiler, which applies U8 cast to
5160 * both args of ?: operator, causing EOF to change into 255
5162 if (cnt) { i = (U8)buf[cnt - 1]; } else { i = EOF; }
5166 sv_catpvn(sv, (char *) buf, cnt);
5168 sv_setpvn(sv, (char *) buf, cnt);
5170 if (i != EOF && /* joy */
5172 SvCUR(sv) < rslen ||
5173 memNE(SvPVX(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
5177 * If we're reading from a TTY and we get a short read,
5178 * indicating that the user hit his EOF character, we need
5179 * to notice it now, because if we try to read from the TTY
5180 * again, the EOF condition will disappear.
5182 * The comparison of cnt to sizeof(buf) is an optimization
5183 * that prevents unnecessary calls to feof().
5187 if (!(cnt < sizeof(buf) && PerlIO_eof(fp)))
5192 if (RsPARA(PL_rs)) { /* have to do this both before and after */
5193 while (i != EOF) { /* to make sure file boundaries work right */
5194 i = PerlIO_getc(fp);
5196 PerlIO_ungetc(fp,i);
5202 if (PerlIO_isutf8(fp))
5207 return (SvCUR(sv) - append) ? SvPVX(sv) : Nullch;
5214 Auto-increment of the value in the SV.
5220 Perl_sv_inc(pTHX_ register SV *sv)
5229 if (SvTHINKFIRST(sv)) {
5230 if (SvREADONLY(sv)) {
5231 if (PL_curcop != &PL_compiling)
5232 Perl_croak(aTHX_ PL_no_modify);
5236 if (SvAMAGIC(sv) && AMG_CALLun(sv,inc))
5238 i = PTR2IV(SvRV(sv));
5243 flags = SvFLAGS(sv);
5244 if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
5245 /* It's (privately or publicly) a float, but not tested as an
5246 integer, so test it to see. */
5248 flags = SvFLAGS(sv);
5250 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
5251 /* It's publicly an integer, or privately an integer-not-float */
5254 if (SvUVX(sv) == UV_MAX)
5255 sv_setnv(sv, (NV)UV_MAX + 1.0);
5257 (void)SvIOK_only_UV(sv);
5260 if (SvIVX(sv) == IV_MAX)
5261 sv_setuv(sv, (UV)IV_MAX + 1);
5263 (void)SvIOK_only(sv);
5269 if (flags & SVp_NOK) {
5270 (void)SvNOK_only(sv);
5275 if (!(flags & SVp_POK) || !*SvPVX(sv)) {
5276 if ((flags & SVTYPEMASK) < SVt_PVIV)
5277 sv_upgrade(sv, SVt_IV);
5278 (void)SvIOK_only(sv);
5283 while (isALPHA(*d)) d++;
5284 while (isDIGIT(*d)) d++;
5286 #ifdef PERL_PRESERVE_IVUV
5287 /* Got to punt this an an integer if needs be, but we don't issue
5288 warnings. Probably ought to make the sv_iv_please() that does
5289 the conversion if possible, and silently. */
5290 I32 numtype = looks_like_number(sv);
5291 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
5292 /* Need to try really hard to see if it's an integer.
5293 9.22337203685478e+18 is an integer.
5294 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
5295 so $a="9.22337203685478e+18"; $a+0; $a++
5296 needs to be the same as $a="9.22337203685478e+18"; $a++
5303 /* sv_2iv *should* have made this an NV */
5304 if (flags & SVp_NOK) {
5305 (void)SvNOK_only(sv);
5309 /* I don't think we can get here. Maybe I should assert this
5310 And if we do get here I suspect that sv_setnv will croak. NWC
5312 #if defined(USE_LONG_DOUBLE)
5313 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",
5314 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5316 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%g\n",
5317 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5320 #endif /* PERL_PRESERVE_IVUV */
5321 sv_setnv(sv,Atof(SvPVX(sv)) + 1.0);
5325 while (d >= SvPVX(sv)) {
5333 /* MKS: The original code here died if letters weren't consecutive.
5334 * at least it didn't have to worry about non-C locales. The
5335 * new code assumes that ('z'-'a')==('Z'-'A'), letters are
5336 * arranged in order (although not consecutively) and that only
5337 * [A-Za-z] are accepted by isALPHA in the C locale.
5339 if (*d != 'z' && *d != 'Z') {
5340 do { ++*d; } while (!isALPHA(*d));
5343 *(d--) -= 'z' - 'a';
5348 *(d--) -= 'z' - 'a' + 1;
5352 /* oh,oh, the number grew */
5353 SvGROW(sv, SvCUR(sv) + 2);
5355 for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX(sv); d--)
5366 Auto-decrement of the value in the SV.
5372 Perl_sv_dec(pTHX_ register SV *sv)
5380 if (SvTHINKFIRST(sv)) {
5381 if (SvREADONLY(sv)) {
5382 if (PL_curcop != &PL_compiling)
5383 Perl_croak(aTHX_ PL_no_modify);
5387 if (SvAMAGIC(sv) && AMG_CALLun(sv,dec))
5389 i = PTR2IV(SvRV(sv));
5394 /* Unlike sv_inc we don't have to worry about string-never-numbers
5395 and keeping them magic. But we mustn't warn on punting */
5396 flags = SvFLAGS(sv);
5397 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
5398 /* It's publicly an integer, or privately an integer-not-float */
5401 if (SvUVX(sv) == 0) {
5402 (void)SvIOK_only(sv);
5406 (void)SvIOK_only_UV(sv);
5410 if (SvIVX(sv) == IV_MIN)
5411 sv_setnv(sv, (NV)IV_MIN - 1.0);
5413 (void)SvIOK_only(sv);
5419 if (flags & SVp_NOK) {
5421 (void)SvNOK_only(sv);
5424 if (!(flags & SVp_POK)) {
5425 if ((flags & SVTYPEMASK) < SVt_PVNV)
5426 sv_upgrade(sv, SVt_NV);
5428 (void)SvNOK_only(sv);
5431 #ifdef PERL_PRESERVE_IVUV
5433 I32 numtype = looks_like_number(sv);
5434 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
5435 /* Need to try really hard to see if it's an integer.
5436 9.22337203685478e+18 is an integer.
5437 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
5438 so $a="9.22337203685478e+18"; $a+0; $a--
5439 needs to be the same as $a="9.22337203685478e+18"; $a--
5446 /* sv_2iv *should* have made this an NV */
5447 if (flags & SVp_NOK) {
5448 (void)SvNOK_only(sv);
5452 /* I don't think we can get here. Maybe I should assert this
5453 And if we do get here I suspect that sv_setnv will croak. NWC
5455 #if defined(USE_LONG_DOUBLE)
5456 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",
5457 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5459 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%g\n",
5460 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5464 #endif /* PERL_PRESERVE_IVUV */
5465 sv_setnv(sv,Atof(SvPVX(sv)) - 1.0); /* punt */
5469 =for apidoc sv_mortalcopy
5471 Creates a new SV which is a copy of the original SV. The new SV is marked
5477 /* Make a string that will exist for the duration of the expression
5478 * evaluation. Actually, it may have to last longer than that, but
5479 * hopefully we won't free it until it has been assigned to a
5480 * permanent location. */
5483 Perl_sv_mortalcopy(pTHX_ SV *oldstr)
5488 sv_setsv(sv,oldstr);
5490 PL_tmps_stack[++PL_tmps_ix] = sv;
5496 =for apidoc sv_newmortal
5498 Creates a new SV which is mortal. The reference count of the SV is set to 1.
5504 Perl_sv_newmortal(pTHX)
5509 SvFLAGS(sv) = SVs_TEMP;
5511 PL_tmps_stack[++PL_tmps_ix] = sv;
5516 =for apidoc sv_2mortal
5518 Marks an SV as mortal. The SV will be destroyed when the current context
5524 /* same thing without the copying */
5527 Perl_sv_2mortal(pTHX_ register SV *sv)
5531 if (SvREADONLY(sv) && SvIMMORTAL(sv))
5534 PL_tmps_stack[++PL_tmps_ix] = sv;
5542 Creates a new SV and copies a string into it. The reference count for the
5543 SV is set to 1. If C<len> is zero, Perl will compute the length using
5544 strlen(). For efficiency, consider using C<newSVpvn> instead.
5550 Perl_newSVpv(pTHX_ const char *s, STRLEN len)
5557 sv_setpvn(sv,s,len);
5562 =for apidoc newSVpvn
5564 Creates a new SV and copies a string into it. The reference count for the
5565 SV is set to 1. Note that if C<len> is zero, Perl will create a zero length
5566 string. You are responsible for ensuring that the source string is at least
5573 Perl_newSVpvn(pTHX_ const char *s, STRLEN len)
5578 sv_setpvn(sv,s,len);
5583 =for apidoc newSVpvn_share
5585 Creates a new SV and populates it with a string from
5586 the string table. Turns on READONLY and FAKE.
5587 The idea here is that as string table is used for shared hash
5588 keys these strings will have SvPVX == HeKEY and hash lookup
5589 will avoid string compare.
5595 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
5598 bool is_utf8 = FALSE;
5604 PERL_HASH(hash, src, len);
5606 sv_upgrade(sv, SVt_PVIV);
5607 SvPVX(sv) = sharepvn(src, is_utf8?-len:len, hash);
5619 #if defined(PERL_IMPLICIT_CONTEXT)
5621 Perl_newSVpvf_nocontext(const char* pat, ...)
5626 va_start(args, pat);
5627 sv = vnewSVpvf(pat, &args);
5634 =for apidoc newSVpvf
5636 Creates a new SV an initialize it with the string formatted like
5643 Perl_newSVpvf(pTHX_ const char* pat, ...)
5647 va_start(args, pat);
5648 sv = vnewSVpvf(pat, &args);
5654 Perl_vnewSVpvf(pTHX_ const char* pat, va_list* args)
5658 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
5665 Creates a new SV and copies a floating point value into it.
5666 The reference count for the SV is set to 1.
5672 Perl_newSVnv(pTHX_ NV n)
5684 Creates a new SV and copies an integer into it. The reference count for the
5691 Perl_newSViv(pTHX_ IV i)
5703 Creates a new SV and copies an unsigned integer into it.
5704 The reference count for the SV is set to 1.
5710 Perl_newSVuv(pTHX_ UV u)
5720 =for apidoc newRV_noinc
5722 Creates an RV wrapper for an SV. The reference count for the original
5723 SV is B<not> incremented.
5729 Perl_newRV_noinc(pTHX_ SV *tmpRef)
5734 sv_upgrade(sv, SVt_RV);
5741 /* newRV_inc is #defined to newRV in sv.h */
5743 Perl_newRV(pTHX_ SV *tmpRef)
5745 return newRV_noinc(SvREFCNT_inc(tmpRef));
5751 Creates a new SV which is an exact duplicate of the original SV.
5756 /* make an exact duplicate of old */
5759 Perl_newSVsv(pTHX_ register SV *old)
5765 if (SvTYPE(old) == SVTYPEMASK) {
5766 if (ckWARN_d(WARN_INTERNAL))
5767 Perl_warner(aTHX_ WARN_INTERNAL, "semi-panic: attempt to dup freed string");
5782 Perl_sv_reset(pTHX_ register char *s, HV *stash)
5790 char todo[PERL_UCHAR_MAX+1];
5795 if (!*s) { /* reset ?? searches */
5796 for (pm = HvPMROOT(stash); pm; pm = pm->op_pmnext) {
5797 pm->op_pmdynflags &= ~PMdf_USED;
5802 /* reset variables */
5804 if (!HvARRAY(stash))
5807 Zero(todo, 256, char);
5809 i = (unsigned char)*s;
5813 max = (unsigned char)*s++;
5814 for ( ; i <= max; i++) {
5817 for (i = 0; i <= (I32) HvMAX(stash); i++) {
5818 for (entry = HvARRAY(stash)[i];
5820 entry = HeNEXT(entry))
5822 if (!todo[(U8)*HeKEY(entry)])
5824 gv = (GV*)HeVAL(entry);
5826 if (SvTHINKFIRST(sv)) {
5827 if (!SvREADONLY(sv) && SvROK(sv))
5832 if (SvTYPE(sv) >= SVt_PV) {
5834 if (SvPVX(sv) != Nullch)
5841 if (GvHV(gv) && !HvNAME(GvHV(gv))) {
5843 #ifdef USE_ENVIRON_ARRAY
5845 environ[0] = Nullch;
5854 Perl_sv_2io(pTHX_ SV *sv)
5860 switch (SvTYPE(sv)) {
5868 Perl_croak(aTHX_ "Bad filehandle: %s", GvNAME(gv));
5872 Perl_croak(aTHX_ PL_no_usym, "filehandle");
5874 return sv_2io(SvRV(sv));
5875 gv = gv_fetchpv(SvPV(sv,n_a), FALSE, SVt_PVIO);
5881 Perl_croak(aTHX_ "Bad filehandle: %s", SvPV(sv,n_a));
5888 Perl_sv_2cv(pTHX_ SV *sv, HV **st, GV **gvp, I32 lref)
5895 return *gvp = Nullgv, Nullcv;
5896 switch (SvTYPE(sv)) {
5915 SV **sp = &sv; /* Used in tryAMAGICunDEREF macro. */
5916 tryAMAGICunDEREF(to_cv);
5919 if (SvTYPE(sv) == SVt_PVCV) {
5928 Perl_croak(aTHX_ "Not a subroutine reference");
5933 gv = gv_fetchpv(SvPV(sv, n_a), lref, SVt_PVCV);
5939 if (lref && !GvCVu(gv)) {
5942 tmpsv = NEWSV(704,0);
5943 gv_efullname3(tmpsv, gv, Nullch);
5944 /* XXX this is probably not what they think they're getting.
5945 * It has the same effect as "sub name;", i.e. just a forward
5947 newSUB(start_subparse(FALSE, 0),
5948 newSVOP(OP_CONST, 0, tmpsv),
5953 Perl_croak(aTHX_ "Unable to create sub named \"%s\"", SvPV(sv,n_a));
5962 Returns true if the SV has a true value by Perl's rules.
5968 Perl_sv_true(pTHX_ register SV *sv)
5974 if ((tXpv = (XPV*)SvANY(sv)) &&
5975 (tXpv->xpv_cur > 1 ||
5976 (tXpv->xpv_cur && *tXpv->xpv_pv != '0')))
5983 return SvIVX(sv) != 0;
5986 return SvNVX(sv) != 0.0;
5988 return sv_2bool(sv);
5994 Perl_sv_iv(pTHX_ register SV *sv)
5998 return (IV)SvUVX(sv);
6005 Perl_sv_uv(pTHX_ register SV *sv)
6010 return (UV)SvIVX(sv);
6016 Perl_sv_nv(pTHX_ register SV *sv)
6024 Perl_sv_pv(pTHX_ SV *sv)
6031 return sv_2pv(sv, &n_a);
6035 Perl_sv_pvn(pTHX_ SV *sv, STRLEN *lp)
6041 return sv_2pv(sv, lp);
6045 =for apidoc sv_pvn_force
6047 Get a sensible string out of the SV somehow.
6053 Perl_sv_pvn_force(pTHX_ SV *sv, STRLEN *lp)
6057 if (SvTHINKFIRST(sv) && !SvROK(sv))
6058 sv_force_normal(sv);
6064 if (SvTYPE(sv) > SVt_PVLV && SvTYPE(sv) != SVt_PVFM) {
6065 Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
6066 PL_op_name[PL_op->op_type]);
6070 if (s != SvPVX(sv)) { /* Almost, but not quite, sv_setpvn() */
6075 (void)SvUPGRADE(sv, SVt_PV); /* Never FALSE */
6076 SvGROW(sv, len + 1);
6077 Move(s,SvPVX(sv),len,char);
6082 SvPOK_on(sv); /* validate pointer */
6084 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
6085 PTR2UV(sv),SvPVX(sv)));
6092 Perl_sv_pvbyte(pTHX_ SV *sv)
6098 Perl_sv_pvbyten(pTHX_ SV *sv, STRLEN *lp)
6100 return sv_pvn(sv,lp);
6104 Perl_sv_pvbyten_force(pTHX_ SV *sv, STRLEN *lp)
6106 return sv_pvn_force(sv,lp);
6110 Perl_sv_pvutf8(pTHX_ SV *sv)
6112 sv_utf8_upgrade(sv);
6117 Perl_sv_pvutf8n(pTHX_ SV *sv, STRLEN *lp)
6119 sv_utf8_upgrade(sv);
6120 return sv_pvn(sv,lp);
6124 =for apidoc sv_pvutf8n_force
6126 Get a sensible UTF8-encoded string out of the SV somehow. See
6133 Perl_sv_pvutf8n_force(pTHX_ SV *sv, STRLEN *lp)
6135 sv_utf8_upgrade(sv);
6136 return sv_pvn_force(sv,lp);
6140 =for apidoc sv_reftype
6142 Returns a string describing what the SV is a reference to.
6148 Perl_sv_reftype(pTHX_ SV *sv, int ob)
6150 if (ob && SvOBJECT(sv))
6151 return HvNAME(SvSTASH(sv));
6153 switch (SvTYPE(sv)) {
6167 case SVt_PVLV: return "LVALUE";
6168 case SVt_PVAV: return "ARRAY";
6169 case SVt_PVHV: return "HASH";
6170 case SVt_PVCV: return "CODE";
6171 case SVt_PVGV: return "GLOB";
6172 case SVt_PVFM: return "FORMAT";
6173 case SVt_PVIO: return "IO";
6174 default: return "UNKNOWN";
6180 =for apidoc sv_isobject
6182 Returns a boolean indicating whether the SV is an RV pointing to a blessed
6183 object. If the SV is not an RV, or if the object is not blessed, then this
6190 Perl_sv_isobject(pTHX_ SV *sv)
6207 Returns a boolean indicating whether the SV is blessed into the specified
6208 class. This does not check for subtypes; use C<sv_derived_from> to verify
6209 an inheritance relationship.
6215 Perl_sv_isa(pTHX_ SV *sv, const char *name)
6227 return strEQ(HvNAME(SvSTASH(sv)), name);
6233 Creates a new SV for the RV, C<rv>, to point to. If C<rv> is not an RV then
6234 it will be upgraded to one. If C<classname> is non-null then the new SV will
6235 be blessed in the specified package. The new SV is returned and its
6236 reference count is 1.
6242 Perl_newSVrv(pTHX_ SV *rv, const char *classname)
6248 SV_CHECK_THINKFIRST(rv);
6251 if (SvTYPE(rv) >= SVt_PVMG) {
6252 U32 refcnt = SvREFCNT(rv);
6256 SvREFCNT(rv) = refcnt;
6259 if (SvTYPE(rv) < SVt_RV)
6260 sv_upgrade(rv, SVt_RV);
6261 else if (SvTYPE(rv) > SVt_RV) {
6262 (void)SvOOK_off(rv);
6263 if (SvPVX(rv) && SvLEN(rv))
6264 Safefree(SvPVX(rv));
6274 HV* stash = gv_stashpv(classname, TRUE);
6275 (void)sv_bless(rv, stash);
6281 =for apidoc sv_setref_pv
6283 Copies a pointer into a new SV, optionally blessing the SV. The C<rv>
6284 argument will be upgraded to an RV. That RV will be modified to point to
6285 the new SV. If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
6286 into the SV. The C<classname> argument indicates the package for the
6287 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
6288 will be returned and will have a reference count of 1.
6290 Do not use with other Perl types such as HV, AV, SV, CV, because those
6291 objects will become corrupted by the pointer copy process.
6293 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
6299 Perl_sv_setref_pv(pTHX_ SV *rv, const char *classname, void *pv)
6302 sv_setsv(rv, &PL_sv_undef);
6306 sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
6311 =for apidoc sv_setref_iv
6313 Copies an integer into a new SV, optionally blessing the SV. The C<rv>
6314 argument will be upgraded to an RV. That RV will be modified to point to
6315 the new SV. The C<classname> argument indicates the package for the
6316 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
6317 will be returned and will have a reference count of 1.
6323 Perl_sv_setref_iv(pTHX_ SV *rv, const char *classname, IV iv)
6325 sv_setiv(newSVrv(rv,classname), iv);
6330 =for apidoc sv_setref_nv
6332 Copies a double into a new SV, optionally blessing the SV. The C<rv>
6333 argument will be upgraded to an RV. That RV will be modified to point to
6334 the new SV. The C<classname> argument indicates the package for the
6335 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
6336 will be returned and will have a reference count of 1.
6342 Perl_sv_setref_nv(pTHX_ SV *rv, const char *classname, NV nv)
6344 sv_setnv(newSVrv(rv,classname), nv);
6349 =for apidoc sv_setref_pvn
6351 Copies a string into a new SV, optionally blessing the SV. The length of the
6352 string must be specified with C<n>. The C<rv> argument will be upgraded to
6353 an RV. That RV will be modified to point to the new SV. The C<classname>
6354 argument indicates the package for the blessing. Set C<classname> to
6355 C<Nullch> to avoid the blessing. The new SV will be returned and will have
6356 a reference count of 1.
6358 Note that C<sv_setref_pv> copies the pointer while this copies the string.
6364 Perl_sv_setref_pvn(pTHX_ SV *rv, const char *classname, char *pv, STRLEN n)
6366 sv_setpvn(newSVrv(rv,classname), pv, n);
6371 =for apidoc sv_bless
6373 Blesses an SV into a specified package. The SV must be an RV. The package
6374 must be designated by its stash (see C<gv_stashpv()>). The reference count
6375 of the SV is unaffected.
6381 Perl_sv_bless(pTHX_ SV *sv, HV *stash)
6385 Perl_croak(aTHX_ "Can't bless non-reference value");
6387 if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
6388 if (SvREADONLY(tmpRef))
6389 Perl_croak(aTHX_ PL_no_modify);
6390 if (SvOBJECT(tmpRef)) {
6391 if (SvTYPE(tmpRef) != SVt_PVIO)
6393 SvREFCNT_dec(SvSTASH(tmpRef));
6396 SvOBJECT_on(tmpRef);
6397 if (SvTYPE(tmpRef) != SVt_PVIO)
6399 (void)SvUPGRADE(tmpRef, SVt_PVMG);
6400 SvSTASH(tmpRef) = (HV*)SvREFCNT_inc(stash);
6411 S_sv_unglob(pTHX_ SV *sv)
6415 assert(SvTYPE(sv) == SVt_PVGV);
6420 SvREFCNT_dec(GvSTASH(sv));
6421 GvSTASH(sv) = Nullhv;
6423 sv_unmagic(sv, '*');
6424 Safefree(GvNAME(sv));
6427 /* need to keep SvANY(sv) in the right arena */
6428 xpvmg = new_XPVMG();
6429 StructCopy(SvANY(sv), xpvmg, XPVMG);
6430 del_XPVGV(SvANY(sv));
6433 SvFLAGS(sv) &= ~SVTYPEMASK;
6434 SvFLAGS(sv) |= SVt_PVMG;
6438 =for apidoc sv_unref_flags
6440 Unsets the RV status of the SV, and decrements the reference count of
6441 whatever was being referenced by the RV. This can almost be thought of
6442 as a reversal of C<newSVrv>. The C<cflags> argument can contain
6443 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
6444 (otherwise the decrementing is conditional on the reference count being
6445 different from one or the reference being a readonly SV).
6452 Perl_sv_unref_flags(pTHX_ SV *sv, U32 flags)
6456 if (SvWEAKREF(sv)) {
6464 if (SvREFCNT(rv) != 1 || SvREADONLY(rv) || flags) /* SV_IMMEDIATE_UNREF */
6466 else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
6467 sv_2mortal(rv); /* Schedule for freeing later */
6471 =for apidoc sv_unref
6473 Unsets the RV status of the SV, and decrements the reference count of
6474 whatever was being referenced by the RV. This can almost be thought of
6475 as a reversal of C<newSVrv>. This is C<sv_unref_flags> with the C<flag>
6476 being zero. See C<SvROK_off>.
6482 Perl_sv_unref(pTHX_ SV *sv)
6484 sv_unref_flags(sv, 0);
6488 Perl_sv_taint(pTHX_ SV *sv)
6490 sv_magic((sv), Nullsv, 't', Nullch, 0);
6494 Perl_sv_untaint(pTHX_ SV *sv)
6496 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
6497 MAGIC *mg = mg_find(sv, 't');
6504 Perl_sv_tainted(pTHX_ SV *sv)
6506 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
6507 MAGIC *mg = mg_find(sv, 't');
6508 if (mg && ((mg->mg_len & 1) || ((mg->mg_len & 2) && mg->mg_obj == sv)))
6515 =for apidoc sv_setpviv
6517 Copies an integer into the given SV, also updating its string value.
6518 Does not handle 'set' magic. See C<sv_setpviv_mg>.
6524 Perl_sv_setpviv(pTHX_ SV *sv, IV iv)
6526 char buf[TYPE_CHARS(UV)];
6528 char *ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
6530 sv_setpvn(sv, ptr, ebuf - ptr);
6535 =for apidoc sv_setpviv_mg
6537 Like C<sv_setpviv>, but also handles 'set' magic.
6543 Perl_sv_setpviv_mg(pTHX_ SV *sv, IV iv)
6545 char buf[TYPE_CHARS(UV)];
6547 char *ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
6549 sv_setpvn(sv, ptr, ebuf - ptr);
6553 #if defined(PERL_IMPLICIT_CONTEXT)
6555 Perl_sv_setpvf_nocontext(SV *sv, const char* pat, ...)
6559 va_start(args, pat);
6560 sv_vsetpvf(sv, pat, &args);
6566 Perl_sv_setpvf_mg_nocontext(SV *sv, const char* pat, ...)
6570 va_start(args, pat);
6571 sv_vsetpvf_mg(sv, pat, &args);
6577 =for apidoc sv_setpvf
6579 Processes its arguments like C<sprintf> and sets an SV to the formatted
6580 output. Does not handle 'set' magic. See C<sv_setpvf_mg>.
6586 Perl_sv_setpvf(pTHX_ SV *sv, const char* pat, ...)
6589 va_start(args, pat);
6590 sv_vsetpvf(sv, pat, &args);
6595 Perl_sv_vsetpvf(pTHX_ SV *sv, const char* pat, va_list* args)
6597 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6601 =for apidoc sv_setpvf_mg
6603 Like C<sv_setpvf>, but also handles 'set' magic.
6609 Perl_sv_setpvf_mg(pTHX_ SV *sv, const char* pat, ...)
6612 va_start(args, pat);
6613 sv_vsetpvf_mg(sv, pat, &args);
6618 Perl_sv_vsetpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
6620 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6624 #if defined(PERL_IMPLICIT_CONTEXT)
6626 Perl_sv_catpvf_nocontext(SV *sv, const char* pat, ...)
6630 va_start(args, pat);
6631 sv_vcatpvf(sv, pat, &args);
6636 Perl_sv_catpvf_mg_nocontext(SV *sv, const char* pat, ...)
6640 va_start(args, pat);
6641 sv_vcatpvf_mg(sv, pat, &args);
6647 =for apidoc sv_catpvf
6649 Processes its arguments like C<sprintf> and appends the formatted output
6650 to an SV. Handles 'get' magic, but not 'set' magic. C<SvSETMAGIC()> must
6651 typically be called after calling this function to handle 'set' magic.
6657 Perl_sv_catpvf(pTHX_ SV *sv, const char* pat, ...)
6660 va_start(args, pat);
6661 sv_vcatpvf(sv, pat, &args);
6666 Perl_sv_vcatpvf(pTHX_ SV *sv, const char* pat, va_list* args)
6668 sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6672 =for apidoc sv_catpvf_mg
6674 Like C<sv_catpvf>, but also handles 'set' magic.
6680 Perl_sv_catpvf_mg(pTHX_ SV *sv, const char* pat, ...)
6683 va_start(args, pat);
6684 sv_vcatpvf_mg(sv, pat, &args);
6689 Perl_sv_vcatpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
6691 sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6696 =for apidoc sv_vsetpvfn
6698 Works like C<vcatpvfn> but copies the text into the SV instead of
6705 Perl_sv_vsetpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
6707 sv_setpvn(sv, "", 0);
6708 sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, maybe_tainted);
6712 S_expect_number(pTHX_ char** pattern)
6715 switch (**pattern) {
6716 case '1': case '2': case '3':
6717 case '4': case '5': case '6':
6718 case '7': case '8': case '9':
6719 while (isDIGIT(**pattern))
6720 var = var * 10 + (*(*pattern)++ - '0');
6724 #define EXPECT_NUMBER(pattern, var) (var = S_expect_number(aTHX_ &pattern))
6727 =for apidoc sv_vcatpvfn
6729 Processes its arguments like C<vsprintf> and appends the formatted output
6730 to an SV. Uses an array of SVs if the C style variable argument list is
6731 missing (NULL). When running with taint checks enabled, indicates via
6732 C<maybe_tainted> if results are untrustworthy (often due to the use of
6739 Perl_sv_vcatpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
6746 static char nullstr[] = "(null)";
6749 /* no matter what, this is a string now */
6750 (void)SvPV_force(sv, origlen);
6752 /* special-case "", "%s", and "%_" */
6755 if (patlen == 2 && pat[0] == '%') {
6759 char *s = va_arg(*args, char*);
6760 sv_catpv(sv, s ? s : nullstr);
6762 else if (svix < svmax) {
6763 sv_catsv(sv, *svargs);
6764 if (DO_UTF8(*svargs))
6770 argsv = va_arg(*args, SV*);
6771 sv_catsv(sv, argsv);
6776 /* See comment on '_' below */
6781 patend = (char*)pat + patlen;
6782 for (p = (char*)pat; p < patend; p = q) {
6785 bool vectorize = FALSE;
6786 bool vectorarg = FALSE;
6787 bool vec_utf = FALSE;
6793 bool has_precis = FALSE;
6795 bool is_utf = FALSE;
6798 U8 utf8buf[UTF8_MAXLEN+1];
6799 STRLEN esignlen = 0;
6801 char *eptr = Nullch;
6803 /* Times 4: a decimal digit takes more than 3 binary digits.
6804 * NV_DIG: mantissa takes than many decimal digits.
6805 * Plus 32: Playing safe. */
6806 char ebuf[IV_DIG * 4 + NV_DIG + 32];
6807 /* large enough for "%#.#f" --chip */
6808 /* what about long double NVs? --jhi */
6811 U8 *vecstr = Null(U8*);
6823 STRLEN dotstrlen = 1;
6824 I32 efix = 0; /* explicit format parameter index */
6825 I32 ewix = 0; /* explicit width index */
6826 I32 epix = 0; /* explicit precision index */
6827 I32 evix = 0; /* explicit vector index */
6828 bool asterisk = FALSE;
6830 /* echo everything up to the next format specification */
6831 for (q = p; q < patend && *q != '%'; ++q) ;
6833 sv_catpvn(sv, p, q - p);
6840 We allow format specification elements in this order:
6841 \d+\$ explicit format parameter index
6843 \*?(\d+\$)?v vector with optional (optionally specified) arg
6844 \d+|\*(\d+\$)? width using optional (optionally specified) arg
6845 \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
6847 [%bcdefginopsux_DFOUX] format (mandatory)
6849 if (EXPECT_NUMBER(q, width)) {
6890 if (EXPECT_NUMBER(q, ewix))
6899 if (vectorarg = asterisk) {
6909 EXPECT_NUMBER(q, width);
6914 vecsv = va_arg(*args, SV*);
6916 vecsv = (evix ? evix <= svmax : svix < svmax) ?
6917 svargs[ewix ? ewix-1 : svix++] : &PL_sv_undef;
6918 dotstr = SvPVx(vecsv, dotstrlen);
6923 vecsv = va_arg(*args, SV*);
6924 vecstr = (U8*)SvPVx(vecsv,veclen);
6925 vec_utf = DO_UTF8(vecsv);
6927 else if (efix ? efix <= svmax : svix < svmax) {
6928 vecsv = svargs[efix ? efix-1 : svix++];
6929 vecstr = (U8*)SvPVx(vecsv,veclen);
6930 vec_utf = DO_UTF8(vecsv);
6940 i = va_arg(*args, int);
6942 i = (ewix ? ewix <= svmax : svix < svmax) ?
6943 SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
6945 width = (i < 0) ? -i : i;
6955 if (EXPECT_NUMBER(q, epix) && *q++ != '$')
6958 i = va_arg(*args, int);
6960 i = (ewix ? ewix <= svmax : svix < svmax)
6961 ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
6962 precis = (i < 0) ? 0 : i;
6967 precis = precis * 10 + (*q++ - '0');
6975 #if defined(HAS_QUAD) || (defined(HAS_LONG_DOUBLE) && defined(USE_LONG_DOUBLE))
6986 #if defined(HAS_QUAD) || (defined(HAS_LONG_DOUBLE) && defined(USE_LONG_DOUBLE))
6987 if (*(q + 1) == 'l') { /* lld, llf */
7010 argsv = (efix ? efix <= svmax : svix < svmax) ?
7011 svargs[efix ? efix-1 : svix++] : &PL_sv_undef;
7018 uv = args ? va_arg(*args, int) : SvIVx(argsv);
7019 if ((uv > 255 || (uv > 127 && SvUTF8(sv))) && !IN_BYTE) {
7020 eptr = (char*)utf8buf;
7021 elen = uv_to_utf8((U8*)eptr, uv) - utf8buf;
7033 eptr = va_arg(*args, char*);
7035 #ifdef MACOS_TRADITIONAL
7036 /* On MacOS, %#s format is used for Pascal strings */
7041 elen = strlen(eptr);
7044 elen = sizeof nullstr - 1;
7048 eptr = SvPVx(argsv, elen);
7049 if (DO_UTF8(argsv)) {
7050 if (has_precis && precis < elen) {
7052 sv_pos_u2b(argsv, &p, 0); /* sticks at end */
7055 if (width) { /* fudge width (can't fudge elen) */
7056 width += elen - sv_len_utf8(argsv);
7065 * The "%_" hack might have to be changed someday,
7066 * if ISO or ANSI decide to use '_' for something.
7067 * So we keep it hidden from users' code.
7071 argsv = va_arg(*args, SV*);
7072 eptr = SvPVx(argsv, elen);
7078 if (has_precis && elen > precis)
7087 uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
7105 iv = (IV)utf8_to_uv(vecstr, veclen, &ulen, 0);
7115 case 'h': iv = (short)va_arg(*args, int); break;
7116 default: iv = va_arg(*args, int); break;
7117 case 'l': iv = va_arg(*args, long); break;
7118 case 'V': iv = va_arg(*args, IV); break;
7120 case 'q': iv = va_arg(*args, Quad_t); break;
7127 case 'h': iv = (short)iv; break;
7129 case 'l': iv = (long)iv; break;
7132 case 'q': iv = (Quad_t)iv; break;
7139 esignbuf[esignlen++] = plus;
7143 esignbuf[esignlen++] = '-';
7185 uv = utf8_to_uv(vecstr, veclen, &ulen, 0);
7195 case 'h': uv = (unsigned short)va_arg(*args, unsigned); break;
7196 default: uv = va_arg(*args, unsigned); break;
7197 case 'l': uv = va_arg(*args, unsigned long); break;
7198 case 'V': uv = va_arg(*args, UV); break;
7200 case 'q': uv = va_arg(*args, Quad_t); break;
7207 case 'h': uv = (unsigned short)uv; break;
7209 case 'l': uv = (unsigned long)uv; break;
7212 case 'q': uv = (Quad_t)uv; break;
7218 eptr = ebuf + sizeof ebuf;
7224 p = (char*)((c == 'X')
7225 ? "0123456789ABCDEF" : "0123456789abcdef");
7231 esignbuf[esignlen++] = '0';
7232 esignbuf[esignlen++] = c; /* 'x' or 'X' */
7238 *--eptr = '0' + dig;
7240 if (alt && *eptr != '0')
7246 *--eptr = '0' + dig;
7249 esignbuf[esignlen++] = '0';
7250 esignbuf[esignlen++] = 'b';
7253 default: /* it had better be ten or less */
7254 #if defined(PERL_Y2KWARN)
7255 if (ckWARN(WARN_Y2K)) {
7257 char *s = SvPV(sv,n);
7258 if (n >= 2 && s[n-2] == '1' && s[n-1] == '9'
7259 && (n == 2 || !isDIGIT(s[n-3])))
7261 Perl_warner(aTHX_ WARN_Y2K,
7262 "Possible Y2K bug: %%%c %s",
7263 c, "format string following '19'");
7269 *--eptr = '0' + dig;
7270 } while (uv /= base);
7273 elen = (ebuf + sizeof ebuf) - eptr;
7276 zeros = precis - elen;
7277 else if (precis == 0 && elen == 1 && *eptr == '0')
7282 /* FLOATING POINT */
7285 c = 'f'; /* maybe %F isn't supported here */
7291 /* This is evil, but floating point is even more evil */
7294 nv = args ? va_arg(*args, NV) : SvNVx(argsv);
7297 if (c != 'e' && c != 'E') {
7299 (void)Perl_frexp(nv, &i);
7300 if (i == PERL_INT_MIN)
7301 Perl_die(aTHX_ "panic: frexp");
7303 need = BIT_DIGITS(i);
7305 need += has_precis ? precis : 6; /* known default */
7309 need += 20; /* fudge factor */
7310 if (PL_efloatsize < need) {
7311 Safefree(PL_efloatbuf);
7312 PL_efloatsize = need + 20; /* more fudge */
7313 New(906, PL_efloatbuf, PL_efloatsize, char);
7314 PL_efloatbuf[0] = '\0';
7317 eptr = ebuf + sizeof ebuf;
7320 #if defined(USE_LONG_DOUBLE) && defined(PERL_PRIfldbl)
7322 /* Copy the one or more characters in a long double
7323 * format before the 'base' ([efgEFG]) character to
7324 * the format string. */
7325 static char const prifldbl[] = PERL_PRIfldbl;
7326 char const *p = prifldbl + sizeof(prifldbl) - 3;
7327 while (p >= prifldbl) { *--eptr = *p--; }
7332 do { *--eptr = '0' + (base % 10); } while (base /= 10);
7337 do { *--eptr = '0' + (base % 10); } while (base /= 10);
7349 /* No taint. Otherwise we are in the strange situation
7350 * where printf() taints but print($float) doesn't.
7352 (void)sprintf(PL_efloatbuf, eptr, nv);
7354 eptr = PL_efloatbuf;
7355 elen = strlen(PL_efloatbuf);
7362 i = SvCUR(sv) - origlen;
7365 case 'h': *(va_arg(*args, short*)) = i; break;
7366 default: *(va_arg(*args, int*)) = i; break;
7367 case 'l': *(va_arg(*args, long*)) = i; break;
7368 case 'V': *(va_arg(*args, IV*)) = i; break;
7370 case 'q': *(va_arg(*args, Quad_t*)) = i; break;
7375 sv_setuv_mg(argsv, (UV)i);
7376 continue; /* not "break" */
7383 if (!args && ckWARN(WARN_PRINTF) &&
7384 (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)) {
7385 SV *msg = sv_newmortal();
7386 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %s: ",
7387 (PL_op->op_type == OP_PRTF) ? "printf" : "sprintf");
7390 Perl_sv_catpvf(aTHX_ msg,
7391 "\"%%%c\"", c & 0xFF);
7393 Perl_sv_catpvf(aTHX_ msg,
7394 "\"%%\\%03"UVof"\"",
7397 sv_catpv(msg, "end of string");
7398 Perl_warner(aTHX_ WARN_PRINTF, "%"SVf, msg); /* yes, this is reentrant */
7401 /* output mangled stuff ... */
7407 /* ... right here, because formatting flags should not apply */
7408 SvGROW(sv, SvCUR(sv) + elen + 1);
7410 Copy(eptr, p, elen, char);
7413 SvCUR(sv) = p - SvPVX(sv);
7414 continue; /* not "break" */
7417 have = esignlen + zeros + elen;
7418 need = (have > width ? have : width);
7421 SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
7423 if (esignlen && fill == '0') {
7424 for (i = 0; i < esignlen; i++)
7428 memset(p, fill, gap);
7431 if (esignlen && fill != '0') {
7432 for (i = 0; i < esignlen; i++)
7436 for (i = zeros; i; i--)
7440 Copy(eptr, p, elen, char);
7444 memset(p, ' ', gap);
7449 Copy(dotstr, p, dotstrlen, char);
7453 vectorize = FALSE; /* done iterating over vecstr */
7458 SvCUR(sv) = p - SvPVX(sv);
7466 #if defined(USE_ITHREADS)
7468 #if defined(USE_THREADS)
7469 # include "error: USE_THREADS and USE_ITHREADS are incompatible"
7472 #ifndef GpREFCNT_inc
7473 # define GpREFCNT_inc(gp) ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
7477 #define sv_dup_inc(s) SvREFCNT_inc(sv_dup(s))
7478 #define av_dup(s) (AV*)sv_dup((SV*)s)
7479 #define av_dup_inc(s) (AV*)SvREFCNT_inc(sv_dup((SV*)s))
7480 #define hv_dup(s) (HV*)sv_dup((SV*)s)
7481 #define hv_dup_inc(s) (HV*)SvREFCNT_inc(sv_dup((SV*)s))
7482 #define cv_dup(s) (CV*)sv_dup((SV*)s)
7483 #define cv_dup_inc(s) (CV*)SvREFCNT_inc(sv_dup((SV*)s))
7484 #define io_dup(s) (IO*)sv_dup((SV*)s)
7485 #define io_dup_inc(s) (IO*)SvREFCNT_inc(sv_dup((SV*)s))
7486 #define gv_dup(s) (GV*)sv_dup((SV*)s)
7487 #define gv_dup_inc(s) (GV*)SvREFCNT_inc(sv_dup((SV*)s))
7488 #define SAVEPV(p) (p ? savepv(p) : Nullch)
7489 #define SAVEPVN(p,n) (p ? savepvn(p,n) : Nullch)
7492 Perl_re_dup(pTHX_ REGEXP *r)
7494 /* XXX fix when pmop->op_pmregexp becomes shared */
7495 return ReREFCNT_inc(r);
7499 Perl_fp_dup(pTHX_ PerlIO *fp, char type)
7503 return (PerlIO*)NULL;
7505 /* look for it in the table first */
7506 ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
7510 /* create anew and remember what it is */
7511 ret = PerlIO_fdupopen(aTHX_ fp);
7512 ptr_table_store(PL_ptr_table, fp, ret);
7517 Perl_dirp_dup(pTHX_ DIR *dp)
7526 Perl_gp_dup(pTHX_ GP *gp)
7531 /* look for it in the table first */
7532 ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
7536 /* create anew and remember what it is */
7537 Newz(0, ret, 1, GP);
7538 ptr_table_store(PL_ptr_table, gp, ret);
7541 ret->gp_refcnt = 0; /* must be before any other dups! */
7542 ret->gp_sv = sv_dup_inc(gp->gp_sv);
7543 ret->gp_io = io_dup_inc(gp->gp_io);
7544 ret->gp_form = cv_dup_inc(gp->gp_form);
7545 ret->gp_av = av_dup_inc(gp->gp_av);
7546 ret->gp_hv = hv_dup_inc(gp->gp_hv);
7547 ret->gp_egv = gv_dup(gp->gp_egv); /* GvEGV is not refcounted */
7548 ret->gp_cv = cv_dup_inc(gp->gp_cv);
7549 ret->gp_cvgen = gp->gp_cvgen;
7550 ret->gp_flags = gp->gp_flags;
7551 ret->gp_line = gp->gp_line;
7552 ret->gp_file = gp->gp_file; /* points to COP.cop_file */
7557 Perl_mg_dup(pTHX_ MAGIC *mg)
7559 MAGIC *mgret = (MAGIC*)NULL;
7562 return (MAGIC*)NULL;
7563 /* look for it in the table first */
7564 mgret = (MAGIC*)ptr_table_fetch(PL_ptr_table, mg);
7568 for (; mg; mg = mg->mg_moremagic) {
7570 Newz(0, nmg, 1, MAGIC);
7574 mgprev->mg_moremagic = nmg;
7575 nmg->mg_virtual = mg->mg_virtual; /* XXX copy dynamic vtable? */
7576 nmg->mg_private = mg->mg_private;
7577 nmg->mg_type = mg->mg_type;
7578 nmg->mg_flags = mg->mg_flags;
7579 if (mg->mg_type == 'r') {
7580 nmg->mg_obj = (SV*)re_dup((REGEXP*)mg->mg_obj);
7583 nmg->mg_obj = (mg->mg_flags & MGf_REFCOUNTED)
7584 ? sv_dup_inc(mg->mg_obj)
7585 : sv_dup(mg->mg_obj);
7587 nmg->mg_len = mg->mg_len;
7588 nmg->mg_ptr = mg->mg_ptr; /* XXX random ptr? */
7589 if (mg->mg_ptr && mg->mg_type != 'g') {
7590 if (mg->mg_len >= 0) {
7591 nmg->mg_ptr = SAVEPVN(mg->mg_ptr, mg->mg_len);
7592 if (mg->mg_type == 'c' && AMT_AMAGIC((AMT*)mg->mg_ptr)) {
7593 AMT *amtp = (AMT*)mg->mg_ptr;
7594 AMT *namtp = (AMT*)nmg->mg_ptr;
7596 for (i = 1; i < NofAMmeth; i++) {
7597 namtp->table[i] = cv_dup_inc(amtp->table[i]);
7601 else if (mg->mg_len == HEf_SVKEY)
7602 nmg->mg_ptr = (char*)sv_dup_inc((SV*)mg->mg_ptr);
7610 Perl_ptr_table_new(pTHX)
7613 Newz(0, tbl, 1, PTR_TBL_t);
7616 Newz(0, tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
7621 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *tbl, void *sv)
7623 PTR_TBL_ENT_t *tblent;
7624 UV hash = PTR2UV(sv);
7626 tblent = tbl->tbl_ary[hash & tbl->tbl_max];
7627 for (; tblent; tblent = tblent->next) {
7628 if (tblent->oldval == sv)
7629 return tblent->newval;
7635 Perl_ptr_table_store(pTHX_ PTR_TBL_t *tbl, void *oldv, void *newv)
7637 PTR_TBL_ENT_t *tblent, **otblent;
7638 /* XXX this may be pessimal on platforms where pointers aren't good
7639 * hash values e.g. if they grow faster in the most significant
7641 UV hash = PTR2UV(oldv);
7645 otblent = &tbl->tbl_ary[hash & tbl->tbl_max];
7646 for (tblent = *otblent; tblent; i=0, tblent = tblent->next) {
7647 if (tblent->oldval == oldv) {
7648 tblent->newval = newv;
7653 Newz(0, tblent, 1, PTR_TBL_ENT_t);
7654 tblent->oldval = oldv;
7655 tblent->newval = newv;
7656 tblent->next = *otblent;
7659 if (i && tbl->tbl_items > tbl->tbl_max)
7660 ptr_table_split(tbl);
7664 Perl_ptr_table_split(pTHX_ PTR_TBL_t *tbl)
7666 PTR_TBL_ENT_t **ary = tbl->tbl_ary;
7667 UV oldsize = tbl->tbl_max + 1;
7668 UV newsize = oldsize * 2;
7671 Renew(ary, newsize, PTR_TBL_ENT_t*);
7672 Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
7673 tbl->tbl_max = --newsize;
7675 for (i=0; i < oldsize; i++, ary++) {
7676 PTR_TBL_ENT_t **curentp, **entp, *ent;
7679 curentp = ary + oldsize;
7680 for (entp = ary, ent = *ary; ent; ent = *entp) {
7681 if ((newsize & PTR2UV(ent->oldval)) != i) {
7683 ent->next = *curentp;
7698 Perl_sv_dup(pTHX_ SV *sstr)
7702 if (!sstr || SvTYPE(sstr) == SVTYPEMASK)
7704 /* look for it in the table first */
7705 dstr = (SV*)ptr_table_fetch(PL_ptr_table, sstr);
7709 /* create anew and remember what it is */
7711 ptr_table_store(PL_ptr_table, sstr, dstr);
7714 SvFLAGS(dstr) = SvFLAGS(sstr);
7715 SvFLAGS(dstr) &= ~SVf_OOK; /* don't propagate OOK hack */
7716 SvREFCNT(dstr) = 0; /* must be before any other dups! */
7719 if (SvANY(sstr) && PL_watch_pvx && SvPVX(sstr) == PL_watch_pvx)
7720 PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
7721 PL_watch_pvx, SvPVX(sstr));
7724 switch (SvTYPE(sstr)) {
7729 SvANY(dstr) = new_XIV();
7730 SvIVX(dstr) = SvIVX(sstr);
7733 SvANY(dstr) = new_XNV();
7734 SvNVX(dstr) = SvNVX(sstr);
7737 SvANY(dstr) = new_XRV();
7738 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7741 SvANY(dstr) = new_XPV();
7742 SvCUR(dstr) = SvCUR(sstr);
7743 SvLEN(dstr) = SvLEN(sstr);
7745 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7746 else if (SvPVX(sstr) && SvLEN(sstr))
7747 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7749 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7752 SvANY(dstr) = new_XPVIV();
7753 SvCUR(dstr) = SvCUR(sstr);
7754 SvLEN(dstr) = SvLEN(sstr);
7755 SvIVX(dstr) = SvIVX(sstr);
7757 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7758 else if (SvPVX(sstr) && SvLEN(sstr))
7759 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7761 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7764 SvANY(dstr) = new_XPVNV();
7765 SvCUR(dstr) = SvCUR(sstr);
7766 SvLEN(dstr) = SvLEN(sstr);
7767 SvIVX(dstr) = SvIVX(sstr);
7768 SvNVX(dstr) = SvNVX(sstr);
7770 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7771 else if (SvPVX(sstr) && SvLEN(sstr))
7772 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7774 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7777 SvANY(dstr) = new_XPVMG();
7778 SvCUR(dstr) = SvCUR(sstr);
7779 SvLEN(dstr) = SvLEN(sstr);
7780 SvIVX(dstr) = SvIVX(sstr);
7781 SvNVX(dstr) = SvNVX(sstr);
7782 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7783 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7785 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7786 else if (SvPVX(sstr) && SvLEN(sstr))
7787 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7789 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7792 SvANY(dstr) = new_XPVBM();
7793 SvCUR(dstr) = SvCUR(sstr);
7794 SvLEN(dstr) = SvLEN(sstr);
7795 SvIVX(dstr) = SvIVX(sstr);
7796 SvNVX(dstr) = SvNVX(sstr);
7797 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7798 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7800 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7801 else if (SvPVX(sstr) && SvLEN(sstr))
7802 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7804 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7805 BmRARE(dstr) = BmRARE(sstr);
7806 BmUSEFUL(dstr) = BmUSEFUL(sstr);
7807 BmPREVIOUS(dstr)= BmPREVIOUS(sstr);
7810 SvANY(dstr) = new_XPVLV();
7811 SvCUR(dstr) = SvCUR(sstr);
7812 SvLEN(dstr) = SvLEN(sstr);
7813 SvIVX(dstr) = SvIVX(sstr);
7814 SvNVX(dstr) = SvNVX(sstr);
7815 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7816 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7818 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7819 else if (SvPVX(sstr) && SvLEN(sstr))
7820 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7822 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7823 LvTARGOFF(dstr) = LvTARGOFF(sstr); /* XXX sometimes holds PMOP* when DEBUGGING */
7824 LvTARGLEN(dstr) = LvTARGLEN(sstr);
7825 LvTARG(dstr) = sv_dup_inc(LvTARG(sstr));
7826 LvTYPE(dstr) = LvTYPE(sstr);
7829 SvANY(dstr) = new_XPVGV();
7830 SvCUR(dstr) = SvCUR(sstr);
7831 SvLEN(dstr) = SvLEN(sstr);
7832 SvIVX(dstr) = SvIVX(sstr);
7833 SvNVX(dstr) = SvNVX(sstr);
7834 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7835 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7837 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7838 else if (SvPVX(sstr) && SvLEN(sstr))
7839 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7841 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7842 GvNAMELEN(dstr) = GvNAMELEN(sstr);
7843 GvNAME(dstr) = SAVEPVN(GvNAME(sstr), GvNAMELEN(sstr));
7844 GvSTASH(dstr) = hv_dup_inc(GvSTASH(sstr));
7845 GvFLAGS(dstr) = GvFLAGS(sstr);
7846 GvGP(dstr) = gp_dup(GvGP(sstr));
7847 (void)GpREFCNT_inc(GvGP(dstr));
7850 SvANY(dstr) = new_XPVIO();
7851 SvCUR(dstr) = SvCUR(sstr);
7852 SvLEN(dstr) = SvLEN(sstr);
7853 SvIVX(dstr) = SvIVX(sstr);
7854 SvNVX(dstr) = SvNVX(sstr);
7855 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7856 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7858 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7859 else if (SvPVX(sstr) && SvLEN(sstr))
7860 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7862 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7863 IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(sstr));
7864 if (IoOFP(sstr) == IoIFP(sstr))
7865 IoOFP(dstr) = IoIFP(dstr);
7867 IoOFP(dstr) = fp_dup(IoOFP(sstr), IoTYPE(sstr));
7868 /* PL_rsfp_filters entries have fake IoDIRP() */
7869 if (IoDIRP(sstr) && !(IoFLAGS(sstr) & IOf_FAKE_DIRP))
7870 IoDIRP(dstr) = dirp_dup(IoDIRP(sstr));
7872 IoDIRP(dstr) = IoDIRP(sstr);
7873 IoLINES(dstr) = IoLINES(sstr);
7874 IoPAGE(dstr) = IoPAGE(sstr);
7875 IoPAGE_LEN(dstr) = IoPAGE_LEN(sstr);
7876 IoLINES_LEFT(dstr) = IoLINES_LEFT(sstr);
7877 IoTOP_NAME(dstr) = SAVEPV(IoTOP_NAME(sstr));
7878 IoTOP_GV(dstr) = gv_dup(IoTOP_GV(sstr));
7879 IoFMT_NAME(dstr) = SAVEPV(IoFMT_NAME(sstr));
7880 IoFMT_GV(dstr) = gv_dup(IoFMT_GV(sstr));
7881 IoBOTTOM_NAME(dstr) = SAVEPV(IoBOTTOM_NAME(sstr));
7882 IoBOTTOM_GV(dstr) = gv_dup(IoBOTTOM_GV(sstr));
7883 IoSUBPROCESS(dstr) = IoSUBPROCESS(sstr);
7884 IoTYPE(dstr) = IoTYPE(sstr);
7885 IoFLAGS(dstr) = IoFLAGS(sstr);
7888 SvANY(dstr) = new_XPVAV();
7889 SvCUR(dstr) = SvCUR(sstr);
7890 SvLEN(dstr) = SvLEN(sstr);
7891 SvIVX(dstr) = SvIVX(sstr);
7892 SvNVX(dstr) = SvNVX(sstr);
7893 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7894 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7895 AvARYLEN((AV*)dstr) = sv_dup_inc(AvARYLEN((AV*)sstr));
7896 AvFLAGS((AV*)dstr) = AvFLAGS((AV*)sstr);
7897 if (AvARRAY((AV*)sstr)) {
7898 SV **dst_ary, **src_ary;
7899 SSize_t items = AvFILLp((AV*)sstr) + 1;
7901 src_ary = AvARRAY((AV*)sstr);
7902 Newz(0, dst_ary, AvMAX((AV*)sstr)+1, SV*);
7903 ptr_table_store(PL_ptr_table, src_ary, dst_ary);
7904 SvPVX(dstr) = (char*)dst_ary;
7905 AvALLOC((AV*)dstr) = dst_ary;
7906 if (AvREAL((AV*)sstr)) {
7908 *dst_ary++ = sv_dup_inc(*src_ary++);
7912 *dst_ary++ = sv_dup(*src_ary++);
7914 items = AvMAX((AV*)sstr) - AvFILLp((AV*)sstr);
7915 while (items-- > 0) {
7916 *dst_ary++ = &PL_sv_undef;
7920 SvPVX(dstr) = Nullch;
7921 AvALLOC((AV*)dstr) = (SV**)NULL;
7925 SvANY(dstr) = new_XPVHV();
7926 SvCUR(dstr) = SvCUR(sstr);
7927 SvLEN(dstr) = SvLEN(sstr);
7928 SvIVX(dstr) = SvIVX(sstr);
7929 SvNVX(dstr) = SvNVX(sstr);
7930 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7931 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7932 HvRITER((HV*)dstr) = HvRITER((HV*)sstr);
7933 if (HvARRAY((HV*)sstr)) {
7935 XPVHV *dxhv = (XPVHV*)SvANY(dstr);
7936 XPVHV *sxhv = (XPVHV*)SvANY(sstr);
7937 Newz(0, dxhv->xhv_array,
7938 PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1), char);
7939 while (i <= sxhv->xhv_max) {
7940 ((HE**)dxhv->xhv_array)[i] = he_dup(((HE**)sxhv->xhv_array)[i],
7941 !!HvSHAREKEYS(sstr));
7944 dxhv->xhv_eiter = he_dup(sxhv->xhv_eiter, !!HvSHAREKEYS(sstr));
7947 SvPVX(dstr) = Nullch;
7948 HvEITER((HV*)dstr) = (HE*)NULL;
7950 HvPMROOT((HV*)dstr) = HvPMROOT((HV*)sstr); /* XXX */
7951 HvNAME((HV*)dstr) = SAVEPV(HvNAME((HV*)sstr));
7954 SvANY(dstr) = new_XPVFM();
7955 FmLINES(dstr) = FmLINES(sstr);
7959 SvANY(dstr) = new_XPVCV();
7961 SvCUR(dstr) = SvCUR(sstr);
7962 SvLEN(dstr) = SvLEN(sstr);
7963 SvIVX(dstr) = SvIVX(sstr);
7964 SvNVX(dstr) = SvNVX(sstr);
7965 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7966 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7967 if (SvPVX(sstr) && SvLEN(sstr))
7968 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7970 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7971 CvSTASH(dstr) = hv_dup(CvSTASH(sstr));/* NOTE: not refcounted */
7972 CvSTART(dstr) = CvSTART(sstr);
7973 CvROOT(dstr) = OpREFCNT_inc(CvROOT(sstr));
7974 CvXSUB(dstr) = CvXSUB(sstr);
7975 CvXSUBANY(dstr) = CvXSUBANY(sstr);
7976 CvGV(dstr) = gv_dup_inc(CvGV(sstr));
7977 CvDEPTH(dstr) = CvDEPTH(sstr);
7978 if (CvPADLIST(sstr) && !AvREAL(CvPADLIST(sstr))) {
7979 /* XXX padlists are real, but pretend to be not */
7980 AvREAL_on(CvPADLIST(sstr));
7981 CvPADLIST(dstr) = av_dup_inc(CvPADLIST(sstr));
7982 AvREAL_off(CvPADLIST(sstr));
7983 AvREAL_off(CvPADLIST(dstr));
7986 CvPADLIST(dstr) = av_dup_inc(CvPADLIST(sstr));
7987 CvOUTSIDE(dstr) = cv_dup_inc(CvOUTSIDE(sstr));
7988 CvFLAGS(dstr) = CvFLAGS(sstr);
7991 Perl_croak(aTHX_ "Bizarre SvTYPE [%d]", SvTYPE(sstr));
7995 if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
8002 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max)
8007 return (PERL_CONTEXT*)NULL;
8009 /* look for it in the table first */
8010 ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
8014 /* create anew and remember what it is */
8015 Newz(56, ncxs, max + 1, PERL_CONTEXT);
8016 ptr_table_store(PL_ptr_table, cxs, ncxs);
8019 PERL_CONTEXT *cx = &cxs[ix];
8020 PERL_CONTEXT *ncx = &ncxs[ix];
8021 ncx->cx_type = cx->cx_type;
8022 if (CxTYPE(cx) == CXt_SUBST) {
8023 Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
8026 ncx->blk_oldsp = cx->blk_oldsp;
8027 ncx->blk_oldcop = cx->blk_oldcop;
8028 ncx->blk_oldretsp = cx->blk_oldretsp;
8029 ncx->blk_oldmarksp = cx->blk_oldmarksp;
8030 ncx->blk_oldscopesp = cx->blk_oldscopesp;
8031 ncx->blk_oldpm = cx->blk_oldpm;
8032 ncx->blk_gimme = cx->blk_gimme;
8033 switch (CxTYPE(cx)) {
8035 ncx->blk_sub.cv = (cx->blk_sub.olddepth == 0
8036 ? cv_dup_inc(cx->blk_sub.cv)
8037 : cv_dup(cx->blk_sub.cv));
8038 ncx->blk_sub.argarray = (cx->blk_sub.hasargs
8039 ? av_dup_inc(cx->blk_sub.argarray)
8041 ncx->blk_sub.savearray = av_dup(cx->blk_sub.savearray);
8042 ncx->blk_sub.olddepth = cx->blk_sub.olddepth;
8043 ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
8044 ncx->blk_sub.lval = cx->blk_sub.lval;
8047 ncx->blk_eval.old_in_eval = cx->blk_eval.old_in_eval;
8048 ncx->blk_eval.old_op_type = cx->blk_eval.old_op_type;
8049 ncx->blk_eval.old_namesv = sv_dup_inc(cx->blk_eval.old_namesv);
8050 ncx->blk_eval.old_eval_root = cx->blk_eval.old_eval_root;
8051 ncx->blk_eval.cur_text = sv_dup(cx->blk_eval.cur_text);
8054 ncx->blk_loop.label = cx->blk_loop.label;
8055 ncx->blk_loop.resetsp = cx->blk_loop.resetsp;
8056 ncx->blk_loop.redo_op = cx->blk_loop.redo_op;
8057 ncx->blk_loop.next_op = cx->blk_loop.next_op;
8058 ncx->blk_loop.last_op = cx->blk_loop.last_op;
8059 ncx->blk_loop.iterdata = (CxPADLOOP(cx)
8060 ? cx->blk_loop.iterdata
8061 : gv_dup((GV*)cx->blk_loop.iterdata));
8062 ncx->blk_loop.oldcurpad
8063 = (SV**)ptr_table_fetch(PL_ptr_table,
8064 cx->blk_loop.oldcurpad);
8065 ncx->blk_loop.itersave = sv_dup_inc(cx->blk_loop.itersave);
8066 ncx->blk_loop.iterlval = sv_dup_inc(cx->blk_loop.iterlval);
8067 ncx->blk_loop.iterary = av_dup_inc(cx->blk_loop.iterary);
8068 ncx->blk_loop.iterix = cx->blk_loop.iterix;
8069 ncx->blk_loop.itermax = cx->blk_loop.itermax;
8072 ncx->blk_sub.cv = cv_dup(cx->blk_sub.cv);
8073 ncx->blk_sub.gv = gv_dup(cx->blk_sub.gv);
8074 ncx->blk_sub.dfoutgv = gv_dup_inc(cx->blk_sub.dfoutgv);
8075 ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
8088 Perl_si_dup(pTHX_ PERL_SI *si)
8093 return (PERL_SI*)NULL;
8095 /* look for it in the table first */
8096 nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
8100 /* create anew and remember what it is */
8101 Newz(56, nsi, 1, PERL_SI);
8102 ptr_table_store(PL_ptr_table, si, nsi);
8104 nsi->si_stack = av_dup_inc(si->si_stack);
8105 nsi->si_cxix = si->si_cxix;
8106 nsi->si_cxmax = si->si_cxmax;
8107 nsi->si_cxstack = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax);
8108 nsi->si_type = si->si_type;
8109 nsi->si_prev = si_dup(si->si_prev);
8110 nsi->si_next = si_dup(si->si_next);
8111 nsi->si_markoff = si->si_markoff;
8116 #define POPINT(ss,ix) ((ss)[--(ix)].any_i32)
8117 #define TOPINT(ss,ix) ((ss)[ix].any_i32)
8118 #define POPLONG(ss,ix) ((ss)[--(ix)].any_long)
8119 #define TOPLONG(ss,ix) ((ss)[ix].any_long)
8120 #define POPIV(ss,ix) ((ss)[--(ix)].any_iv)
8121 #define TOPIV(ss,ix) ((ss)[ix].any_iv)
8122 #define POPPTR(ss,ix) ((ss)[--(ix)].any_ptr)
8123 #define TOPPTR(ss,ix) ((ss)[ix].any_ptr)
8124 #define POPDPTR(ss,ix) ((ss)[--(ix)].any_dptr)
8125 #define TOPDPTR(ss,ix) ((ss)[ix].any_dptr)
8126 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
8127 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
8130 #define pv_dup_inc(p) SAVEPV(p)
8131 #define pv_dup(p) SAVEPV(p)
8132 #define svp_dup_inc(p,pp) any_dup(p,pp)
8135 Perl_any_dup(pTHX_ void *v, PerlInterpreter *proto_perl)
8142 /* look for it in the table first */
8143 ret = ptr_table_fetch(PL_ptr_table, v);
8147 /* see if it is part of the interpreter structure */
8148 if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
8149 ret = (void*)(((char*)aTHXo) + (((char*)v) - (char*)proto_perl));
8157 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl)
8159 ANY *ss = proto_perl->Tsavestack;
8160 I32 ix = proto_perl->Tsavestack_ix;
8161 I32 max = proto_perl->Tsavestack_max;
8174 void (*dptr) (void*);
8175 void (*dxptr) (pTHXo_ void*);
8178 Newz(54, nss, max, ANY);
8184 case SAVEt_ITEM: /* normal string */
8185 sv = (SV*)POPPTR(ss,ix);
8186 TOPPTR(nss,ix) = sv_dup_inc(sv);
8187 sv = (SV*)POPPTR(ss,ix);
8188 TOPPTR(nss,ix) = sv_dup_inc(sv);
8190 case SAVEt_SV: /* scalar reference */
8191 sv = (SV*)POPPTR(ss,ix);
8192 TOPPTR(nss,ix) = sv_dup_inc(sv);
8193 gv = (GV*)POPPTR(ss,ix);
8194 TOPPTR(nss,ix) = gv_dup_inc(gv);
8196 case SAVEt_GENERIC_PVREF: /* generic char* */
8197 c = (char*)POPPTR(ss,ix);
8198 TOPPTR(nss,ix) = pv_dup(c);
8199 ptr = POPPTR(ss,ix);
8200 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8202 case SAVEt_GENERIC_SVREF: /* generic sv */
8203 case SAVEt_SVREF: /* scalar reference */
8204 sv = (SV*)POPPTR(ss,ix);
8205 TOPPTR(nss,ix) = sv_dup_inc(sv);
8206 ptr = POPPTR(ss,ix);
8207 TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
8209 case SAVEt_AV: /* array reference */
8210 av = (AV*)POPPTR(ss,ix);
8211 TOPPTR(nss,ix) = av_dup_inc(av);
8212 gv = (GV*)POPPTR(ss,ix);
8213 TOPPTR(nss,ix) = gv_dup(gv);
8215 case SAVEt_HV: /* hash reference */
8216 hv = (HV*)POPPTR(ss,ix);
8217 TOPPTR(nss,ix) = hv_dup_inc(hv);
8218 gv = (GV*)POPPTR(ss,ix);
8219 TOPPTR(nss,ix) = gv_dup(gv);
8221 case SAVEt_INT: /* int reference */
8222 ptr = POPPTR(ss,ix);
8223 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8224 intval = (int)POPINT(ss,ix);
8225 TOPINT(nss,ix) = intval;
8227 case SAVEt_LONG: /* long reference */
8228 ptr = POPPTR(ss,ix);
8229 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8230 longval = (long)POPLONG(ss,ix);
8231 TOPLONG(nss,ix) = longval;
8233 case SAVEt_I32: /* I32 reference */
8234 case SAVEt_I16: /* I16 reference */
8235 case SAVEt_I8: /* I8 reference */
8236 ptr = POPPTR(ss,ix);
8237 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8241 case SAVEt_IV: /* IV reference */
8242 ptr = POPPTR(ss,ix);
8243 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8247 case SAVEt_SPTR: /* SV* reference */
8248 ptr = POPPTR(ss,ix);
8249 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8250 sv = (SV*)POPPTR(ss,ix);
8251 TOPPTR(nss,ix) = sv_dup(sv);
8253 case SAVEt_VPTR: /* random* reference */
8254 ptr = POPPTR(ss,ix);
8255 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8256 ptr = POPPTR(ss,ix);
8257 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8259 case SAVEt_PPTR: /* char* reference */
8260 ptr = POPPTR(ss,ix);
8261 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8262 c = (char*)POPPTR(ss,ix);
8263 TOPPTR(nss,ix) = pv_dup(c);
8265 case SAVEt_HPTR: /* HV* reference */
8266 ptr = POPPTR(ss,ix);
8267 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8268 hv = (HV*)POPPTR(ss,ix);
8269 TOPPTR(nss,ix) = hv_dup(hv);
8271 case SAVEt_APTR: /* AV* reference */
8272 ptr = POPPTR(ss,ix);
8273 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8274 av = (AV*)POPPTR(ss,ix);
8275 TOPPTR(nss,ix) = av_dup(av);
8278 gv = (GV*)POPPTR(ss,ix);
8279 TOPPTR(nss,ix) = gv_dup(gv);
8281 case SAVEt_GP: /* scalar reference */
8282 gp = (GP*)POPPTR(ss,ix);
8283 TOPPTR(nss,ix) = gp = gp_dup(gp);
8284 (void)GpREFCNT_inc(gp);
8285 gv = (GV*)POPPTR(ss,ix);
8286 TOPPTR(nss,ix) = gv_dup_inc(c);
8287 c = (char*)POPPTR(ss,ix);
8288 TOPPTR(nss,ix) = pv_dup(c);
8295 sv = (SV*)POPPTR(ss,ix);
8296 TOPPTR(nss,ix) = sv_dup_inc(sv);
8299 ptr = POPPTR(ss,ix);
8300 if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
8301 /* these are assumed to be refcounted properly */
8302 switch (((OP*)ptr)->op_type) {
8309 TOPPTR(nss,ix) = ptr;
8314 TOPPTR(nss,ix) = Nullop;
8319 TOPPTR(nss,ix) = Nullop;
8322 c = (char*)POPPTR(ss,ix);
8323 TOPPTR(nss,ix) = pv_dup_inc(c);
8326 longval = POPLONG(ss,ix);
8327 TOPLONG(nss,ix) = longval;
8330 hv = (HV*)POPPTR(ss,ix);
8331 TOPPTR(nss,ix) = hv_dup_inc(hv);
8332 c = (char*)POPPTR(ss,ix);
8333 TOPPTR(nss,ix) = pv_dup_inc(c);
8337 case SAVEt_DESTRUCTOR:
8338 ptr = POPPTR(ss,ix);
8339 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
8340 dptr = POPDPTR(ss,ix);
8341 TOPDPTR(nss,ix) = (void (*)(void*))any_dup((void *)dptr, proto_perl);
8343 case SAVEt_DESTRUCTOR_X:
8344 ptr = POPPTR(ss,ix);
8345 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
8346 dxptr = POPDXPTR(ss,ix);
8347 TOPDXPTR(nss,ix) = (void (*)(pTHXo_ void*))any_dup((void *)dxptr, proto_perl);
8349 case SAVEt_REGCONTEXT:
8355 case SAVEt_STACK_POS: /* Position on Perl stack */
8359 case SAVEt_AELEM: /* array element */
8360 sv = (SV*)POPPTR(ss,ix);
8361 TOPPTR(nss,ix) = sv_dup_inc(sv);
8364 av = (AV*)POPPTR(ss,ix);
8365 TOPPTR(nss,ix) = av_dup_inc(av);
8367 case SAVEt_HELEM: /* hash element */
8368 sv = (SV*)POPPTR(ss,ix);
8369 TOPPTR(nss,ix) = sv_dup_inc(sv);
8370 sv = (SV*)POPPTR(ss,ix);
8371 TOPPTR(nss,ix) = sv_dup_inc(sv);
8372 hv = (HV*)POPPTR(ss,ix);
8373 TOPPTR(nss,ix) = hv_dup_inc(hv);
8376 ptr = POPPTR(ss,ix);
8377 TOPPTR(nss,ix) = ptr;
8384 av = (AV*)POPPTR(ss,ix);
8385 TOPPTR(nss,ix) = av_dup(av);
8388 longval = (long)POPLONG(ss,ix);
8389 TOPLONG(nss,ix) = longval;
8390 ptr = POPPTR(ss,ix);
8391 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8392 sv = (SV*)POPPTR(ss,ix);
8393 TOPPTR(nss,ix) = sv_dup(sv);
8396 Perl_croak(aTHX_ "panic: ss_dup inconsistency");
8408 perl_clone(PerlInterpreter *proto_perl, UV flags)
8411 CPerlObj *pPerl = (CPerlObj*)proto_perl;
8414 #ifdef PERL_IMPLICIT_SYS
8415 return perl_clone_using(proto_perl, flags,
8417 proto_perl->IMemShared,
8418 proto_perl->IMemParse,
8428 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
8429 struct IPerlMem* ipM, struct IPerlMem* ipMS,
8430 struct IPerlMem* ipMP, struct IPerlEnv* ipE,
8431 struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
8432 struct IPerlDir* ipD, struct IPerlSock* ipS,
8433 struct IPerlProc* ipP)
8435 /* XXX many of the string copies here can be optimized if they're
8436 * constants; they need to be allocated as common memory and just
8437 * their pointers copied. */
8441 CPerlObj *pPerl = new(ipM) CPerlObj(ipM, ipMS, ipMP, ipE, ipStd, ipLIO,
8443 PERL_SET_THX(pPerl);
8444 # else /* !PERL_OBJECT */
8445 PerlInterpreter *my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
8446 PERL_SET_THX(my_perl);
8449 memset(my_perl, 0xab, sizeof(PerlInterpreter));
8455 # else /* !DEBUGGING */
8456 Zero(my_perl, 1, PerlInterpreter);
8457 # endif /* DEBUGGING */
8461 PL_MemShared = ipMS;
8469 # endif /* PERL_OBJECT */
8470 #else /* !PERL_IMPLICIT_SYS */
8472 PerlInterpreter *my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
8473 PERL_SET_THX(my_perl);
8476 memset(my_perl, 0xab, sizeof(PerlInterpreter));
8482 # else /* !DEBUGGING */
8483 Zero(my_perl, 1, PerlInterpreter);
8484 # endif /* DEBUGGING */
8485 #endif /* PERL_IMPLICIT_SYS */
8488 PL_xiv_arenaroot = NULL;
8490 PL_xnv_arenaroot = NULL;
8492 PL_xrv_arenaroot = NULL;
8494 PL_xpv_arenaroot = NULL;
8496 PL_xpviv_arenaroot = NULL;
8497 PL_xpviv_root = NULL;
8498 PL_xpvnv_arenaroot = NULL;
8499 PL_xpvnv_root = NULL;
8500 PL_xpvcv_arenaroot = NULL;
8501 PL_xpvcv_root = NULL;
8502 PL_xpvav_arenaroot = NULL;
8503 PL_xpvav_root = NULL;
8504 PL_xpvhv_arenaroot = NULL;
8505 PL_xpvhv_root = NULL;
8506 PL_xpvmg_arenaroot = NULL;
8507 PL_xpvmg_root = NULL;
8508 PL_xpvlv_arenaroot = NULL;
8509 PL_xpvlv_root = NULL;
8510 PL_xpvbm_arenaroot = NULL;
8511 PL_xpvbm_root = NULL;
8512 PL_he_arenaroot = NULL;
8514 PL_nice_chunk = NULL;
8515 PL_nice_chunk_size = 0;
8518 PL_sv_root = Nullsv;
8519 PL_sv_arenaroot = Nullsv;
8521 PL_debug = proto_perl->Idebug;
8523 /* create SV map for pointer relocation */
8524 PL_ptr_table = ptr_table_new();
8526 /* initialize these special pointers as early as possible */
8527 SvANY(&PL_sv_undef) = NULL;
8528 SvREFCNT(&PL_sv_undef) = (~(U32)0)/2;
8529 SvFLAGS(&PL_sv_undef) = SVf_READONLY|SVt_NULL;
8530 ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
8533 SvUPGRADE(&PL_sv_no, SVt_PVNV);
8535 SvANY(&PL_sv_no) = new_XPVNV();
8537 SvREFCNT(&PL_sv_no) = (~(U32)0)/2;
8538 SvFLAGS(&PL_sv_no) = SVp_NOK|SVf_NOK|SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
8539 SvPVX(&PL_sv_no) = SAVEPVN(PL_No, 0);
8540 SvCUR(&PL_sv_no) = 0;
8541 SvLEN(&PL_sv_no) = 1;
8542 SvNVX(&PL_sv_no) = 0;
8543 ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
8546 SvUPGRADE(&PL_sv_yes, SVt_PVNV);
8548 SvANY(&PL_sv_yes) = new_XPVNV();
8550 SvREFCNT(&PL_sv_yes) = (~(U32)0)/2;
8551 SvFLAGS(&PL_sv_yes) = SVp_NOK|SVf_NOK|SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
8552 SvPVX(&PL_sv_yes) = SAVEPVN(PL_Yes, 1);
8553 SvCUR(&PL_sv_yes) = 1;
8554 SvLEN(&PL_sv_yes) = 2;
8555 SvNVX(&PL_sv_yes) = 1;
8556 ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
8558 /* create shared string table */
8559 PL_strtab = newHV();
8560 HvSHAREKEYS_off(PL_strtab);
8561 hv_ksplit(PL_strtab, 512);
8562 ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
8564 PL_compiling = proto_perl->Icompiling;
8565 PL_compiling.cop_stashpv = SAVEPV(PL_compiling.cop_stashpv);
8566 PL_compiling.cop_file = SAVEPV(PL_compiling.cop_file);
8567 ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
8568 if (!specialWARN(PL_compiling.cop_warnings))
8569 PL_compiling.cop_warnings = sv_dup_inc(PL_compiling.cop_warnings);
8570 if (!specialCopIO(PL_compiling.cop_io))
8571 PL_compiling.cop_io = sv_dup_inc(PL_compiling.cop_io);
8572 PL_curcop = (COP*)any_dup(proto_perl->Tcurcop, proto_perl);
8574 /* pseudo environmental stuff */
8575 PL_origargc = proto_perl->Iorigargc;
8577 New(0, PL_origargv, i+1, char*);
8578 PL_origargv[i] = '\0';
8580 PL_origargv[i] = SAVEPV(proto_perl->Iorigargv[i]);
8582 PL_envgv = gv_dup(proto_perl->Ienvgv);
8583 PL_incgv = gv_dup(proto_perl->Iincgv);
8584 PL_hintgv = gv_dup(proto_perl->Ihintgv);
8585 PL_origfilename = SAVEPV(proto_perl->Iorigfilename);
8586 PL_diehook = sv_dup_inc(proto_perl->Idiehook);
8587 PL_warnhook = sv_dup_inc(proto_perl->Iwarnhook);
8590 PL_minus_c = proto_perl->Iminus_c;
8591 PL_patchlevel = sv_dup_inc(proto_perl->Ipatchlevel);
8592 PL_localpatches = proto_perl->Ilocalpatches;
8593 PL_splitstr = proto_perl->Isplitstr;
8594 PL_preprocess = proto_perl->Ipreprocess;
8595 PL_minus_n = proto_perl->Iminus_n;
8596 PL_minus_p = proto_perl->Iminus_p;
8597 PL_minus_l = proto_perl->Iminus_l;
8598 PL_minus_a = proto_perl->Iminus_a;
8599 PL_minus_F = proto_perl->Iminus_F;
8600 PL_doswitches = proto_perl->Idoswitches;
8601 PL_dowarn = proto_perl->Idowarn;
8602 PL_doextract = proto_perl->Idoextract;
8603 PL_sawampersand = proto_perl->Isawampersand;
8604 PL_unsafe = proto_perl->Iunsafe;
8605 PL_inplace = SAVEPV(proto_perl->Iinplace);
8606 PL_e_script = sv_dup_inc(proto_perl->Ie_script);
8607 PL_perldb = proto_perl->Iperldb;
8608 PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
8610 /* magical thingies */
8611 /* XXX time(&PL_basetime) when asked for? */
8612 PL_basetime = proto_perl->Ibasetime;
8613 PL_formfeed = sv_dup(proto_perl->Iformfeed);
8615 PL_maxsysfd = proto_perl->Imaxsysfd;
8616 PL_multiline = proto_perl->Imultiline;
8617 PL_statusvalue = proto_perl->Istatusvalue;
8619 PL_statusvalue_vms = proto_perl->Istatusvalue_vms;
8622 /* shortcuts to various I/O objects */
8623 PL_stdingv = gv_dup(proto_perl->Istdingv);
8624 PL_stderrgv = gv_dup(proto_perl->Istderrgv);
8625 PL_defgv = gv_dup(proto_perl->Idefgv);
8626 PL_argvgv = gv_dup(proto_perl->Iargvgv);
8627 PL_argvoutgv = gv_dup(proto_perl->Iargvoutgv);
8628 PL_argvout_stack = av_dup(proto_perl->Iargvout_stack);
8630 /* shortcuts to regexp stuff */
8631 PL_replgv = gv_dup(proto_perl->Ireplgv);
8633 /* shortcuts to misc objects */
8634 PL_errgv = gv_dup(proto_perl->Ierrgv);
8636 /* shortcuts to debugging objects */
8637 PL_DBgv = gv_dup(proto_perl->IDBgv);
8638 PL_DBline = gv_dup(proto_perl->IDBline);
8639 PL_DBsub = gv_dup(proto_perl->IDBsub);
8640 PL_DBsingle = sv_dup(proto_perl->IDBsingle);
8641 PL_DBtrace = sv_dup(proto_perl->IDBtrace);
8642 PL_DBsignal = sv_dup(proto_perl->IDBsignal);
8643 PL_lineary = av_dup(proto_perl->Ilineary);
8644 PL_dbargs = av_dup(proto_perl->Idbargs);
8647 PL_defstash = hv_dup_inc(proto_perl->Tdefstash);
8648 PL_curstash = hv_dup(proto_perl->Tcurstash);
8649 PL_debstash = hv_dup(proto_perl->Idebstash);
8650 PL_globalstash = hv_dup(proto_perl->Iglobalstash);
8651 PL_curstname = sv_dup_inc(proto_perl->Icurstname);
8653 PL_beginav = av_dup_inc(proto_perl->Ibeginav);
8654 PL_endav = av_dup_inc(proto_perl->Iendav);
8655 PL_checkav = av_dup_inc(proto_perl->Icheckav);
8656 PL_initav = av_dup_inc(proto_perl->Iinitav);
8658 PL_sub_generation = proto_perl->Isub_generation;
8660 /* funky return mechanisms */
8661 PL_forkprocess = proto_perl->Iforkprocess;
8663 /* subprocess state */
8664 PL_fdpid = av_dup_inc(proto_perl->Ifdpid);
8666 /* internal state */
8667 PL_tainting = proto_perl->Itainting;
8668 PL_maxo = proto_perl->Imaxo;
8669 if (proto_perl->Iop_mask)
8670 PL_op_mask = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
8672 PL_op_mask = Nullch;
8674 /* current interpreter roots */
8675 PL_main_cv = cv_dup_inc(proto_perl->Imain_cv);
8676 PL_main_root = OpREFCNT_inc(proto_perl->Imain_root);
8677 PL_main_start = proto_perl->Imain_start;
8678 PL_eval_root = proto_perl->Ieval_root;
8679 PL_eval_start = proto_perl->Ieval_start;
8681 /* runtime control stuff */
8682 PL_curcopdb = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
8683 PL_copline = proto_perl->Icopline;
8685 PL_filemode = proto_perl->Ifilemode;
8686 PL_lastfd = proto_perl->Ilastfd;
8687 PL_oldname = proto_perl->Ioldname; /* XXX not quite right */
8690 PL_gensym = proto_perl->Igensym;
8691 PL_preambled = proto_perl->Ipreambled;
8692 PL_preambleav = av_dup_inc(proto_perl->Ipreambleav);
8693 PL_laststatval = proto_perl->Ilaststatval;
8694 PL_laststype = proto_perl->Ilaststype;
8695 PL_mess_sv = Nullsv;
8697 PL_ors_sv = sv_dup_inc(proto_perl->Iors_sv);
8698 PL_ofmt = SAVEPV(proto_perl->Iofmt);
8700 /* interpreter atexit processing */
8701 PL_exitlistlen = proto_perl->Iexitlistlen;
8702 if (PL_exitlistlen) {
8703 New(0, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
8704 Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
8707 PL_exitlist = (PerlExitListEntry*)NULL;
8708 PL_modglobal = hv_dup_inc(proto_perl->Imodglobal);
8710 PL_profiledata = NULL;
8711 PL_rsfp = fp_dup(proto_perl->Irsfp, '<');
8712 /* PL_rsfp_filters entries have fake IoDIRP() */
8713 PL_rsfp_filters = av_dup_inc(proto_perl->Irsfp_filters);
8715 PL_compcv = cv_dup(proto_perl->Icompcv);
8716 PL_comppad = av_dup(proto_perl->Icomppad);
8717 PL_comppad_name = av_dup(proto_perl->Icomppad_name);
8718 PL_comppad_name_fill = proto_perl->Icomppad_name_fill;
8719 PL_comppad_name_floor = proto_perl->Icomppad_name_floor;
8720 PL_curpad = (SV**)ptr_table_fetch(PL_ptr_table,
8721 proto_perl->Tcurpad);
8723 #ifdef HAVE_INTERP_INTERN
8724 sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
8727 /* more statics moved here */
8728 PL_generation = proto_perl->Igeneration;
8729 PL_DBcv = cv_dup(proto_perl->IDBcv);
8731 PL_in_clean_objs = proto_perl->Iin_clean_objs;
8732 PL_in_clean_all = proto_perl->Iin_clean_all;
8734 PL_uid = proto_perl->Iuid;
8735 PL_euid = proto_perl->Ieuid;
8736 PL_gid = proto_perl->Igid;
8737 PL_egid = proto_perl->Iegid;
8738 PL_nomemok = proto_perl->Inomemok;
8739 PL_an = proto_perl->Ian;
8740 PL_cop_seqmax = proto_perl->Icop_seqmax;
8741 PL_op_seqmax = proto_perl->Iop_seqmax;
8742 PL_evalseq = proto_perl->Ievalseq;
8743 PL_origenviron = proto_perl->Iorigenviron; /* XXX not quite right */
8744 PL_origalen = proto_perl->Iorigalen;
8745 PL_pidstatus = newHV(); /* XXX flag for cloning? */
8746 PL_osname = SAVEPV(proto_perl->Iosname);
8747 PL_sh_path = SAVEPV(proto_perl->Ish_path);
8748 PL_sighandlerp = proto_perl->Isighandlerp;
8751 PL_runops = proto_perl->Irunops;
8753 Copy(proto_perl->Itokenbuf, PL_tokenbuf, 256, char);
8756 PL_cshlen = proto_perl->Icshlen;
8757 PL_cshname = SAVEPVN(proto_perl->Icshname, PL_cshlen);
8760 PL_lex_state = proto_perl->Ilex_state;
8761 PL_lex_defer = proto_perl->Ilex_defer;
8762 PL_lex_expect = proto_perl->Ilex_expect;
8763 PL_lex_formbrack = proto_perl->Ilex_formbrack;
8764 PL_lex_dojoin = proto_perl->Ilex_dojoin;
8765 PL_lex_starts = proto_perl->Ilex_starts;
8766 PL_lex_stuff = sv_dup_inc(proto_perl->Ilex_stuff);
8767 PL_lex_repl = sv_dup_inc(proto_perl->Ilex_repl);
8768 PL_lex_op = proto_perl->Ilex_op;
8769 PL_lex_inpat = proto_perl->Ilex_inpat;
8770 PL_lex_inwhat = proto_perl->Ilex_inwhat;
8771 PL_lex_brackets = proto_perl->Ilex_brackets;
8772 i = (PL_lex_brackets < 120 ? 120 : PL_lex_brackets);
8773 PL_lex_brackstack = SAVEPVN(proto_perl->Ilex_brackstack,i);
8774 PL_lex_casemods = proto_perl->Ilex_casemods;
8775 i = (PL_lex_casemods < 12 ? 12 : PL_lex_casemods);
8776 PL_lex_casestack = SAVEPVN(proto_perl->Ilex_casestack,i);
8778 Copy(proto_perl->Inextval, PL_nextval, 5, YYSTYPE);
8779 Copy(proto_perl->Inexttype, PL_nexttype, 5, I32);
8780 PL_nexttoke = proto_perl->Inexttoke;
8782 PL_linestr = sv_dup_inc(proto_perl->Ilinestr);
8783 i = proto_perl->Ibufptr - SvPVX(proto_perl->Ilinestr);
8784 PL_bufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8785 i = proto_perl->Ioldbufptr - SvPVX(proto_perl->Ilinestr);
8786 PL_oldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8787 i = proto_perl->Ioldoldbufptr - SvPVX(proto_perl->Ilinestr);
8788 PL_oldoldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8789 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
8790 i = proto_perl->Ilinestart - SvPVX(proto_perl->Ilinestr);
8791 PL_linestart = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8792 PL_pending_ident = proto_perl->Ipending_ident;
8793 PL_sublex_info = proto_perl->Isublex_info; /* XXX not quite right */
8795 PL_expect = proto_perl->Iexpect;
8797 PL_multi_start = proto_perl->Imulti_start;
8798 PL_multi_end = proto_perl->Imulti_end;
8799 PL_multi_open = proto_perl->Imulti_open;
8800 PL_multi_close = proto_perl->Imulti_close;
8802 PL_error_count = proto_perl->Ierror_count;
8803 PL_subline = proto_perl->Isubline;
8804 PL_subname = sv_dup_inc(proto_perl->Isubname);
8806 PL_min_intro_pending = proto_perl->Imin_intro_pending;
8807 PL_max_intro_pending = proto_perl->Imax_intro_pending;
8808 PL_padix = proto_perl->Ipadix;
8809 PL_padix_floor = proto_perl->Ipadix_floor;
8810 PL_pad_reset_pending = proto_perl->Ipad_reset_pending;
8812 i = proto_perl->Ilast_uni - SvPVX(proto_perl->Ilinestr);
8813 PL_last_uni = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8814 i = proto_perl->Ilast_lop - SvPVX(proto_perl->Ilinestr);
8815 PL_last_lop = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8816 PL_last_lop_op = proto_perl->Ilast_lop_op;
8817 PL_in_my = proto_perl->Iin_my;
8818 PL_in_my_stash = hv_dup(proto_perl->Iin_my_stash);
8820 PL_cryptseen = proto_perl->Icryptseen;
8823 PL_hints = proto_perl->Ihints;
8825 PL_amagic_generation = proto_perl->Iamagic_generation;
8827 #ifdef USE_LOCALE_COLLATE
8828 PL_collation_ix = proto_perl->Icollation_ix;
8829 PL_collation_name = SAVEPV(proto_perl->Icollation_name);
8830 PL_collation_standard = proto_perl->Icollation_standard;
8831 PL_collxfrm_base = proto_perl->Icollxfrm_base;
8832 PL_collxfrm_mult = proto_perl->Icollxfrm_mult;
8833 #endif /* USE_LOCALE_COLLATE */
8835 #ifdef USE_LOCALE_NUMERIC
8836 PL_numeric_name = SAVEPV(proto_perl->Inumeric_name);
8837 PL_numeric_standard = proto_perl->Inumeric_standard;
8838 PL_numeric_local = proto_perl->Inumeric_local;
8839 PL_numeric_radix = proto_perl->Inumeric_radix;
8840 #endif /* !USE_LOCALE_NUMERIC */
8842 /* utf8 character classes */
8843 PL_utf8_alnum = sv_dup_inc(proto_perl->Iutf8_alnum);
8844 PL_utf8_alnumc = sv_dup_inc(proto_perl->Iutf8_alnumc);
8845 PL_utf8_ascii = sv_dup_inc(proto_perl->Iutf8_ascii);
8846 PL_utf8_alpha = sv_dup_inc(proto_perl->Iutf8_alpha);
8847 PL_utf8_space = sv_dup_inc(proto_perl->Iutf8_space);
8848 PL_utf8_cntrl = sv_dup_inc(proto_perl->Iutf8_cntrl);
8849 PL_utf8_graph = sv_dup_inc(proto_perl->Iutf8_graph);
8850 PL_utf8_digit = sv_dup_inc(proto_perl->Iutf8_digit);
8851 PL_utf8_upper = sv_dup_inc(proto_perl->Iutf8_upper);
8852 PL_utf8_lower = sv_dup_inc(proto_perl->Iutf8_lower);
8853 PL_utf8_print = sv_dup_inc(proto_perl->Iutf8_print);
8854 PL_utf8_punct = sv_dup_inc(proto_perl->Iutf8_punct);
8855 PL_utf8_xdigit = sv_dup_inc(proto_perl->Iutf8_xdigit);
8856 PL_utf8_mark = sv_dup_inc(proto_perl->Iutf8_mark);
8857 PL_utf8_toupper = sv_dup_inc(proto_perl->Iutf8_toupper);
8858 PL_utf8_totitle = sv_dup_inc(proto_perl->Iutf8_totitle);
8859 PL_utf8_tolower = sv_dup_inc(proto_perl->Iutf8_tolower);
8862 PL_last_swash_hv = Nullhv; /* reinits on demand */
8863 PL_last_swash_klen = 0;
8864 PL_last_swash_key[0]= '\0';
8865 PL_last_swash_tmps = (U8*)NULL;
8866 PL_last_swash_slen = 0;
8868 /* perly.c globals */
8869 PL_yydebug = proto_perl->Iyydebug;
8870 PL_yynerrs = proto_perl->Iyynerrs;
8871 PL_yyerrflag = proto_perl->Iyyerrflag;
8872 PL_yychar = proto_perl->Iyychar;
8873 PL_yyval = proto_perl->Iyyval;
8874 PL_yylval = proto_perl->Iyylval;
8876 PL_glob_index = proto_perl->Iglob_index;
8877 PL_srand_called = proto_perl->Isrand_called;
8878 PL_uudmap['M'] = 0; /* reinits on demand */
8879 PL_bitcount = Nullch; /* reinits on demand */
8881 if (proto_perl->Ipsig_pend) {
8882 Newz(0, PL_psig_pend, SIG_SIZE, int);
8885 PL_psig_pend = (int*)NULL;
8888 if (proto_perl->Ipsig_ptr) {
8889 Newz(0, PL_psig_ptr, SIG_SIZE, SV*);
8890 Newz(0, PL_psig_name, SIG_SIZE, SV*);
8891 for (i = 1; i < SIG_SIZE; i++) {
8892 PL_psig_ptr[i] = sv_dup_inc(proto_perl->Ipsig_ptr[i]);
8893 PL_psig_name[i] = sv_dup_inc(proto_perl->Ipsig_name[i]);
8897 PL_psig_ptr = (SV**)NULL;
8898 PL_psig_name = (SV**)NULL;
8901 /* thrdvar.h stuff */
8904 /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
8905 PL_tmps_ix = proto_perl->Ttmps_ix;
8906 PL_tmps_max = proto_perl->Ttmps_max;
8907 PL_tmps_floor = proto_perl->Ttmps_floor;
8908 Newz(50, PL_tmps_stack, PL_tmps_max, SV*);
8910 while (i <= PL_tmps_ix) {
8911 PL_tmps_stack[i] = sv_dup_inc(proto_perl->Ttmps_stack[i]);
8915 /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
8916 i = proto_perl->Tmarkstack_max - proto_perl->Tmarkstack;
8917 Newz(54, PL_markstack, i, I32);
8918 PL_markstack_max = PL_markstack + (proto_perl->Tmarkstack_max
8919 - proto_perl->Tmarkstack);
8920 PL_markstack_ptr = PL_markstack + (proto_perl->Tmarkstack_ptr
8921 - proto_perl->Tmarkstack);
8922 Copy(proto_perl->Tmarkstack, PL_markstack,
8923 PL_markstack_ptr - PL_markstack + 1, I32);
8925 /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
8926 * NOTE: unlike the others! */
8927 PL_scopestack_ix = proto_perl->Tscopestack_ix;
8928 PL_scopestack_max = proto_perl->Tscopestack_max;
8929 Newz(54, PL_scopestack, PL_scopestack_max, I32);
8930 Copy(proto_perl->Tscopestack, PL_scopestack, PL_scopestack_ix, I32);
8932 /* next push_return() sets PL_retstack[PL_retstack_ix]
8933 * NOTE: unlike the others! */
8934 PL_retstack_ix = proto_perl->Tretstack_ix;
8935 PL_retstack_max = proto_perl->Tretstack_max;
8936 Newz(54, PL_retstack, PL_retstack_max, OP*);
8937 Copy(proto_perl->Tretstack, PL_retstack, PL_retstack_ix, I32);
8939 /* NOTE: si_dup() looks at PL_markstack */
8940 PL_curstackinfo = si_dup(proto_perl->Tcurstackinfo);
8942 /* PL_curstack = PL_curstackinfo->si_stack; */
8943 PL_curstack = av_dup(proto_perl->Tcurstack);
8944 PL_mainstack = av_dup(proto_perl->Tmainstack);
8946 /* next PUSHs() etc. set *(PL_stack_sp+1) */
8947 PL_stack_base = AvARRAY(PL_curstack);
8948 PL_stack_sp = PL_stack_base + (proto_perl->Tstack_sp
8949 - proto_perl->Tstack_base);
8950 PL_stack_max = PL_stack_base + AvMAX(PL_curstack);
8952 /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
8953 * NOTE: unlike the others! */
8954 PL_savestack_ix = proto_perl->Tsavestack_ix;
8955 PL_savestack_max = proto_perl->Tsavestack_max;
8956 /*Newz(54, PL_savestack, PL_savestack_max, ANY);*/
8957 PL_savestack = ss_dup(proto_perl);
8961 ENTER; /* perl_destruct() wants to LEAVE; */
8964 PL_start_env = proto_perl->Tstart_env; /* XXXXXX */
8965 PL_top_env = &PL_start_env;
8967 PL_op = proto_perl->Top;
8970 PL_Xpv = (XPV*)NULL;
8971 PL_na = proto_perl->Tna;
8973 PL_statbuf = proto_perl->Tstatbuf;
8974 PL_statcache = proto_perl->Tstatcache;
8975 PL_statgv = gv_dup(proto_perl->Tstatgv);
8976 PL_statname = sv_dup_inc(proto_perl->Tstatname);
8978 PL_timesbuf = proto_perl->Ttimesbuf;
8981 PL_tainted = proto_perl->Ttainted;
8982 PL_curpm = proto_perl->Tcurpm; /* XXX No PMOP ref count */
8983 PL_nrs = sv_dup_inc(proto_perl->Tnrs);
8984 PL_rs = sv_dup_inc(proto_perl->Trs);
8985 PL_last_in_gv = gv_dup(proto_perl->Tlast_in_gv);
8986 PL_ofs_sv = sv_dup_inc(proto_perl->Tofs_sv);
8987 PL_defoutgv = gv_dup_inc(proto_perl->Tdefoutgv);
8988 PL_chopset = proto_perl->Tchopset; /* XXX never deallocated */
8989 PL_toptarget = sv_dup_inc(proto_perl->Ttoptarget);
8990 PL_bodytarget = sv_dup_inc(proto_perl->Tbodytarget);
8991 PL_formtarget = sv_dup(proto_perl->Tformtarget);
8993 PL_restartop = proto_perl->Trestartop;
8994 PL_in_eval = proto_perl->Tin_eval;
8995 PL_delaymagic = proto_perl->Tdelaymagic;
8996 PL_dirty = proto_perl->Tdirty;
8997 PL_localizing = proto_perl->Tlocalizing;
8999 #ifdef PERL_FLEXIBLE_EXCEPTIONS
9000 PL_protect = proto_perl->Tprotect;
9002 PL_errors = sv_dup_inc(proto_perl->Terrors);
9003 PL_av_fetch_sv = Nullsv;
9004 PL_hv_fetch_sv = Nullsv;
9005 Zero(&PL_hv_fetch_ent_mh, 1, HE); /* XXX */
9006 PL_modcount = proto_perl->Tmodcount;
9007 PL_lastgotoprobe = Nullop;
9008 PL_dumpindent = proto_perl->Tdumpindent;
9010 PL_sortcop = (OP*)any_dup(proto_perl->Tsortcop, proto_perl);
9011 PL_sortstash = hv_dup(proto_perl->Tsortstash);
9012 PL_firstgv = gv_dup(proto_perl->Tfirstgv);
9013 PL_secondgv = gv_dup(proto_perl->Tsecondgv);
9014 PL_sortcxix = proto_perl->Tsortcxix;
9015 PL_efloatbuf = Nullch; /* reinits on demand */
9016 PL_efloatsize = 0; /* reinits on demand */
9020 PL_screamfirst = NULL;
9021 PL_screamnext = NULL;
9022 PL_maxscream = -1; /* reinits on demand */
9023 PL_lastscream = Nullsv;
9025 PL_watchaddr = NULL;
9026 PL_watchok = Nullch;
9028 PL_regdummy = proto_perl->Tregdummy;
9029 PL_regcomp_parse = Nullch;
9030 PL_regxend = Nullch;
9031 PL_regcode = (regnode*)NULL;
9034 PL_regprecomp = Nullch;
9039 PL_seen_zerolen = 0;
9041 PL_regcomp_rx = (regexp*)NULL;
9043 PL_colorset = 0; /* reinits PL_colors[] */
9044 /*PL_colors[6] = {0,0,0,0,0,0};*/
9045 PL_reg_whilem_seen = 0;
9046 PL_reginput = Nullch;
9049 PL_regstartp = (I32*)NULL;
9050 PL_regendp = (I32*)NULL;
9051 PL_reglastparen = (U32*)NULL;
9052 PL_regtill = Nullch;
9054 PL_reg_start_tmp = (char**)NULL;
9055 PL_reg_start_tmpl = 0;
9056 PL_regdata = (struct reg_data*)NULL;
9059 PL_reg_eval_set = 0;
9061 PL_regprogram = (regnode*)NULL;
9063 PL_regcc = (CURCUR*)NULL;
9064 PL_reg_call_cc = (struct re_cc_state*)NULL;
9065 PL_reg_re = (regexp*)NULL;
9066 PL_reg_ganch = Nullch;
9068 PL_reg_magic = (MAGIC*)NULL;
9070 PL_reg_oldcurpm = (PMOP*)NULL;
9071 PL_reg_curpm = (PMOP*)NULL;
9072 PL_reg_oldsaved = Nullch;
9073 PL_reg_oldsavedlen = 0;
9075 PL_reg_leftiter = 0;
9076 PL_reg_poscache = Nullch;
9077 PL_reg_poscache_size= 0;
9079 /* RE engine - function pointers */
9080 PL_regcompp = proto_perl->Tregcompp;
9081 PL_regexecp = proto_perl->Tregexecp;
9082 PL_regint_start = proto_perl->Tregint_start;
9083 PL_regint_string = proto_perl->Tregint_string;
9084 PL_regfree = proto_perl->Tregfree;
9086 PL_reginterp_cnt = 0;
9087 PL_reg_starttry = 0;
9090 return (PerlInterpreter*)pPerl;
9096 #else /* !USE_ITHREADS */
9102 #endif /* USE_ITHREADS */
9105 do_report_used(pTHXo_ SV *sv)
9107 if (SvTYPE(sv) != SVTYPEMASK) {
9108 PerlIO_printf(Perl_debug_log, "****\n");
9114 do_clean_objs(pTHXo_ SV *sv)
9118 if (SvROK(sv) && SvOBJECT(rv = SvRV(sv))) {
9119 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(sv));)
9120 if (SvWEAKREF(sv)) {
9131 /* XXX Might want to check arrays, etc. */
9134 #ifndef DISABLE_DESTRUCTOR_KLUDGE
9136 do_clean_named_objs(pTHXo_ SV *sv)
9138 if (SvTYPE(sv) == SVt_PVGV && GvGP(sv)) {
9139 if ( SvOBJECT(GvSV(sv)) ||
9140 (GvAV(sv) && SvOBJECT(GvAV(sv))) ||
9141 (GvHV(sv) && SvOBJECT(GvHV(sv))) ||
9142 (GvIO(sv) && SvOBJECT(GvIO(sv))) ||
9143 (GvCV(sv) && SvOBJECT(GvCV(sv))) )
9145 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning named glob object:\n "), sv_dump(sv));)
9153 do_clean_all(pTHXo_ SV *sv)
9155 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) );)
9156 SvFLAGS(sv) |= SVf_BREAK;