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=%X\n", SvPVX(sv), SvIVX(sv), nv, 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=%X\n", SvPVX(sv), SvIVX(sv), nv, nv_as_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=%X\n", SvPVX(sv), SvIVX(sv), SvNVX(sv), 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++)))
2960 if (SvREADONLY(sv) && SvFAKE(sv)) {
2961 sv_force_normal(sv);
2964 len = SvCUR(sv) + 1; /* Plus the \0 */
2965 SvPVX(sv) = (char*)bytes_to_utf8((U8*)s, &len);
2966 SvCUR(sv) = len - 1;
2968 Safefree(s); /* No longer using what was there before. */
2969 SvLEN(sv) = len; /* No longer know the real size. */
2975 =for apidoc sv_utf8_downgrade
2977 Attempt to convert the PV of an SV from UTF8-encoded to byte encoding.
2978 This may not be possible if the PV contains non-byte encoding characters;
2979 if this is the case, either returns false or, if C<fail_ok> is not
2986 Perl_sv_utf8_downgrade(pTHX_ register SV* sv, bool fail_ok)
2988 if (SvPOK(sv) && SvUTF8(sv)) {
2990 char *c = SvPVX(sv);
2991 STRLEN len = SvCUR(sv);
2993 if (!utf8_to_bytes((U8*)c, &len)) {
2998 Perl_croak(aTHX_ "Wide character in %s",
2999 PL_op_desc[PL_op->op_type]);
3001 Perl_croak(aTHX_ "Wide character");
3013 =for apidoc sv_utf8_encode
3015 Convert the PV of an SV to UTF8-encoded, but then turn off the C<SvUTF8>
3016 flag so that it looks like bytes again. Nothing calls this.
3022 Perl_sv_utf8_encode(pTHX_ register SV *sv)
3024 sv_utf8_upgrade(sv);
3029 Perl_sv_utf8_decode(pTHX_ register SV *sv)
3034 bool has_utf = FALSE;
3035 if (!sv_utf8_downgrade(sv, TRUE))
3038 /* it is actually just a matter of turning the utf8 flag on, but
3039 * we want to make sure everything inside is valid utf8 first.
3042 if (!is_utf8_string((U8*)c, SvCUR(sv)+1))
3046 if (UTF8_IS_CONTINUED(*c++)) {
3056 /* Note: sv_setsv() should not be called with a source string that needs
3057 * to be reused, since it may destroy the source string if it is marked
3062 =for apidoc sv_setsv
3064 Copies the contents of the source SV C<ssv> into the destination SV C<dsv>.
3065 The source SV may be destroyed if it is mortal. Does not handle 'set'
3066 magic. See the macro forms C<SvSetSV>, C<SvSetSV_nosteal> and
3073 Perl_sv_setsv(pTHX_ SV *dstr, register SV *sstr)
3075 register U32 sflags;
3081 SV_CHECK_THINKFIRST(dstr);
3083 sstr = &PL_sv_undef;
3084 stype = SvTYPE(sstr);
3085 dtype = SvTYPE(dstr);
3089 /* There's a lot of redundancy below but we're going for speed here */
3094 if (dtype != SVt_PVGV) {
3095 (void)SvOK_off(dstr);
3103 sv_upgrade(dstr, SVt_IV);
3106 sv_upgrade(dstr, SVt_PVNV);
3110 sv_upgrade(dstr, SVt_PVIV);
3113 (void)SvIOK_only(dstr);
3114 SvIVX(dstr) = SvIVX(sstr);
3117 if (SvTAINTED(sstr))
3128 sv_upgrade(dstr, SVt_NV);
3133 sv_upgrade(dstr, SVt_PVNV);
3136 SvNVX(dstr) = SvNVX(sstr);
3137 (void)SvNOK_only(dstr);
3138 if (SvTAINTED(sstr))
3146 sv_upgrade(dstr, SVt_RV);
3147 else if (dtype == SVt_PVGV &&
3148 SvTYPE(SvRV(sstr)) == SVt_PVGV) {
3151 if (GvIMPORTED(dstr) != GVf_IMPORTED
3152 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3154 GvIMPORTED_on(dstr);
3165 sv_upgrade(dstr, SVt_PV);
3168 if (dtype < SVt_PVIV)
3169 sv_upgrade(dstr, SVt_PVIV);
3172 if (dtype < SVt_PVNV)
3173 sv_upgrade(dstr, SVt_PVNV);
3180 Perl_croak(aTHX_ "Bizarre copy of %s in %s", sv_reftype(sstr, 0),
3181 PL_op_name[PL_op->op_type]);
3183 Perl_croak(aTHX_ "Bizarre copy of %s", sv_reftype(sstr, 0));
3187 if (dtype <= SVt_PVGV) {
3189 if (dtype != SVt_PVGV) {
3190 char *name = GvNAME(sstr);
3191 STRLEN len = GvNAMELEN(sstr);
3192 sv_upgrade(dstr, SVt_PVGV);
3193 sv_magic(dstr, dstr, '*', Nullch, 0);
3194 GvSTASH(dstr) = (HV*)SvREFCNT_inc(GvSTASH(sstr));
3195 GvNAME(dstr) = savepvn(name, len);
3196 GvNAMELEN(dstr) = len;
3197 SvFAKE_on(dstr); /* can coerce to non-glob */
3199 /* ahem, death to those who redefine active sort subs */
3200 else if (PL_curstackinfo->si_type == PERLSI_SORT
3201 && GvCV(dstr) && PL_sortcop == CvSTART(GvCV(dstr)))
3202 Perl_croak(aTHX_ "Can't redefine active sort subroutine %s",
3204 (void)SvOK_off(dstr);
3205 GvINTRO_off(dstr); /* one-shot flag */
3207 GvGP(dstr) = gp_ref(GvGP(sstr));
3208 if (SvTAINTED(sstr))
3210 if (GvIMPORTED(dstr) != GVf_IMPORTED
3211 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3213 GvIMPORTED_on(dstr);
3221 if (SvGMAGICAL(sstr)) {
3223 if (SvTYPE(sstr) != stype) {
3224 stype = SvTYPE(sstr);
3225 if (stype == SVt_PVGV && dtype <= SVt_PVGV)
3229 if (stype == SVt_PVLV)
3230 (void)SvUPGRADE(dstr, SVt_PVNV);
3232 (void)SvUPGRADE(dstr, stype);
3235 sflags = SvFLAGS(sstr);
3237 if (sflags & SVf_ROK) {
3238 if (dtype >= SVt_PV) {
3239 if (dtype == SVt_PVGV) {
3240 SV *sref = SvREFCNT_inc(SvRV(sstr));
3242 int intro = GvINTRO(dstr);
3247 GvINTRO_off(dstr); /* one-shot flag */
3248 Newz(602,gp, 1, GP);
3249 GvGP(dstr) = gp_ref(gp);
3250 GvSV(dstr) = NEWSV(72,0);
3251 GvLINE(dstr) = CopLINE(PL_curcop);
3252 GvEGV(dstr) = (GV*)dstr;
3255 switch (SvTYPE(sref)) {
3258 SAVESPTR(GvAV(dstr));
3260 dref = (SV*)GvAV(dstr);
3261 GvAV(dstr) = (AV*)sref;
3262 if (!GvIMPORTED_AV(dstr)
3263 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3265 GvIMPORTED_AV_on(dstr);
3270 SAVESPTR(GvHV(dstr));
3272 dref = (SV*)GvHV(dstr);
3273 GvHV(dstr) = (HV*)sref;
3274 if (!GvIMPORTED_HV(dstr)
3275 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3277 GvIMPORTED_HV_on(dstr);
3282 if (GvCVGEN(dstr) && GvCV(dstr) != (CV*)sref) {
3283 SvREFCNT_dec(GvCV(dstr));
3284 GvCV(dstr) = Nullcv;
3285 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3286 PL_sub_generation++;
3288 SAVESPTR(GvCV(dstr));
3291 dref = (SV*)GvCV(dstr);
3292 if (GvCV(dstr) != (CV*)sref) {
3293 CV* cv = GvCV(dstr);
3295 if (!GvCVGEN((GV*)dstr) &&
3296 (CvROOT(cv) || CvXSUB(cv)))
3299 /* ahem, death to those who redefine
3300 * active sort subs */
3301 if (PL_curstackinfo->si_type == PERLSI_SORT &&
3302 PL_sortcop == CvSTART(cv))
3304 "Can't redefine active sort subroutine %s",
3305 GvENAME((GV*)dstr));
3306 /* Redefining a sub - warning is mandatory if
3307 it was a const and its value changed. */
3308 if (ckWARN(WARN_REDEFINE)
3310 && (!CvCONST((CV*)sref)
3311 || sv_cmp(cv_const_sv(cv),
3312 cv_const_sv((CV*)sref)))))
3314 Perl_warner(aTHX_ WARN_REDEFINE,
3316 ? "Constant subroutine %s redefined"
3317 : "Subroutine %s redefined",
3318 GvENAME((GV*)dstr));
3321 cv_ckproto(cv, (GV*)dstr,
3322 SvPOK(sref) ? SvPVX(sref) : Nullch);
3324 GvCV(dstr) = (CV*)sref;
3325 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3326 GvASSUMECV_on(dstr);
3327 PL_sub_generation++;
3329 if (!GvIMPORTED_CV(dstr)
3330 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3332 GvIMPORTED_CV_on(dstr);
3337 SAVESPTR(GvIOp(dstr));
3339 dref = (SV*)GvIOp(dstr);
3340 GvIOp(dstr) = (IO*)sref;
3344 SAVESPTR(GvFORM(dstr));
3346 dref = (SV*)GvFORM(dstr);
3347 GvFORM(dstr) = (CV*)sref;
3351 SAVESPTR(GvSV(dstr));
3353 dref = (SV*)GvSV(dstr);
3355 if (!GvIMPORTED_SV(dstr)
3356 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3358 GvIMPORTED_SV_on(dstr);
3366 if (SvTAINTED(sstr))
3371 (void)SvOOK_off(dstr); /* backoff */
3373 Safefree(SvPVX(dstr));
3374 SvLEN(dstr)=SvCUR(dstr)=0;
3377 (void)SvOK_off(dstr);
3378 SvRV(dstr) = SvREFCNT_inc(SvRV(sstr));
3380 if (sflags & SVp_NOK) {
3382 SvNVX(dstr) = SvNVX(sstr);
3384 if (sflags & SVp_IOK) {
3385 (void)SvIOK_on(dstr);
3386 SvIVX(dstr) = SvIVX(sstr);
3387 if (sflags & SVf_IVisUV)
3390 if (SvAMAGIC(sstr)) {
3394 else if (sflags & SVp_POK) {
3397 * Check to see if we can just swipe the string. If so, it's a
3398 * possible small lose on short strings, but a big win on long ones.
3399 * It might even be a win on short strings if SvPVX(dstr)
3400 * has to be allocated and SvPVX(sstr) has to be freed.
3403 if (SvTEMP(sstr) && /* slated for free anyway? */
3404 SvREFCNT(sstr) == 1 && /* and no other references to it? */
3405 !(sflags & SVf_OOK) && /* and not involved in OOK hack? */
3406 SvLEN(sstr) && /* and really is a string */
3407 !(PL_op && PL_op->op_type == OP_AASSIGN)) /* and won't be needed again, potentially */
3409 if (SvPVX(dstr)) { /* we know that dtype >= SVt_PV */
3411 SvFLAGS(dstr) &= ~SVf_OOK;
3412 Safefree(SvPVX(dstr) - SvIVX(dstr));
3414 else if (SvLEN(dstr))
3415 Safefree(SvPVX(dstr));
3417 (void)SvPOK_only(dstr);
3418 SvPV_set(dstr, SvPVX(sstr));
3419 SvLEN_set(dstr, SvLEN(sstr));
3420 SvCUR_set(dstr, SvCUR(sstr));
3423 (void)SvOK_off(sstr); /* NOTE: nukes most SvFLAGS on sstr */
3424 SvPV_set(sstr, Nullch);
3429 else { /* have to copy actual string */
3430 STRLEN len = SvCUR(sstr);
3432 SvGROW(dstr, len + 1); /* inlined from sv_setpvn */
3433 Move(SvPVX(sstr),SvPVX(dstr),len,char);
3434 SvCUR_set(dstr, len);
3435 *SvEND(dstr) = '\0';
3436 (void)SvPOK_only(dstr);
3438 if ((sflags & SVf_UTF8) && !IN_BYTE)
3441 if (sflags & SVp_NOK) {
3443 SvNVX(dstr) = SvNVX(sstr);
3445 if (sflags & SVp_IOK) {
3446 (void)SvIOK_on(dstr);
3447 SvIVX(dstr) = SvIVX(sstr);
3448 if (sflags & SVf_IVisUV)
3452 else if (sflags & SVp_NOK) {
3453 SvNVX(dstr) = SvNVX(sstr);
3454 (void)SvNOK_only(dstr);
3455 if (sflags & SVf_IOK) {
3456 (void)SvIOK_on(dstr);
3457 SvIVX(dstr) = SvIVX(sstr);
3458 /* XXXX Do we want to set IsUV for IV(ROK)? Be extra safe... */
3459 if (sflags & SVf_IVisUV)
3463 else if (sflags & SVp_IOK) {
3464 (void)SvIOK_only(dstr);
3465 SvIVX(dstr) = SvIVX(sstr);
3466 if (sflags & SVf_IVisUV)
3470 if (dtype == SVt_PVGV) {
3471 if (ckWARN(WARN_MISC))
3472 Perl_warner(aTHX_ WARN_MISC, "Undefined value assigned to typeglob");
3475 (void)SvOK_off(dstr);
3477 if (SvTAINTED(sstr))
3482 =for apidoc sv_setsv_mg
3484 Like C<sv_setsv>, but also handles 'set' magic.
3490 Perl_sv_setsv_mg(pTHX_ SV *dstr, register SV *sstr)
3492 sv_setsv(dstr,sstr);
3497 =for apidoc sv_setpvn
3499 Copies a string into an SV. The C<len> parameter indicates the number of
3500 bytes to be copied. Does not handle 'set' magic. See C<sv_setpvn_mg>.
3506 Perl_sv_setpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3508 register char *dptr;
3510 /* len is STRLEN which is unsigned, need to copy to signed */
3514 SV_CHECK_THINKFIRST(sv);
3519 (void)SvUPGRADE(sv, SVt_PV);
3521 SvGROW(sv, len + 1);
3523 Move(ptr,dptr,len,char);
3526 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3531 =for apidoc sv_setpvn_mg
3533 Like C<sv_setpvn>, but also handles 'set' magic.
3539 Perl_sv_setpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3541 sv_setpvn(sv,ptr,len);
3546 =for apidoc sv_setpv
3548 Copies a string into an SV. The string must be null-terminated. Does not
3549 handle 'set' magic. See C<sv_setpv_mg>.
3555 Perl_sv_setpv(pTHX_ register SV *sv, register const char *ptr)
3557 register STRLEN len;
3559 SV_CHECK_THINKFIRST(sv);
3565 (void)SvUPGRADE(sv, SVt_PV);
3567 SvGROW(sv, len + 1);
3568 Move(ptr,SvPVX(sv),len+1,char);
3570 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3575 =for apidoc sv_setpv_mg
3577 Like C<sv_setpv>, but also handles 'set' magic.
3583 Perl_sv_setpv_mg(pTHX_ register SV *sv, register const char *ptr)
3590 =for apidoc sv_usepvn
3592 Tells an SV to use C<ptr> to find its string value. Normally the string is
3593 stored inside the SV but sv_usepvn allows the SV to use an outside string.
3594 The C<ptr> should point to memory that was allocated by C<malloc>. The
3595 string length, C<len>, must be supplied. This function will realloc the
3596 memory pointed to by C<ptr>, so that pointer should not be freed or used by
3597 the programmer after giving it to sv_usepvn. Does not handle 'set' magic.
3598 See C<sv_usepvn_mg>.
3604 Perl_sv_usepvn(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
3606 SV_CHECK_THINKFIRST(sv);
3607 (void)SvUPGRADE(sv, SVt_PV);
3612 (void)SvOOK_off(sv);
3613 if (SvPVX(sv) && SvLEN(sv))
3614 Safefree(SvPVX(sv));
3615 Renew(ptr, len+1, char);
3618 SvLEN_set(sv, len+1);
3620 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3625 =for apidoc sv_usepvn_mg
3627 Like C<sv_usepvn>, but also handles 'set' magic.
3633 Perl_sv_usepvn_mg(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
3635 sv_usepvn(sv,ptr,len);
3640 Perl_sv_force_normal_flags(pTHX_ register SV *sv, U32 flags)
3642 if (SvREADONLY(sv)) {
3644 char *pvx = SvPVX(sv);
3645 STRLEN len = SvCUR(sv);
3646 U32 hash = SvUVX(sv);
3647 SvGROW(sv, len + 1);
3648 Move(pvx,SvPVX(sv),len,char);
3652 unsharepvn(pvx,SvUTF8(sv)?-len:len,hash);
3654 else if (PL_curcop != &PL_compiling)
3655 Perl_croak(aTHX_ PL_no_modify);
3658 sv_unref_flags(sv, flags);
3659 else if (SvFAKE(sv) && SvTYPE(sv) == SVt_PVGV)
3664 Perl_sv_force_normal(pTHX_ register SV *sv)
3666 sv_force_normal_flags(sv, 0);
3672 Efficient removal of characters from the beginning of the string buffer.
3673 SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
3674 the string buffer. The C<ptr> becomes the first character of the adjusted
3681 Perl_sv_chop(pTHX_ register SV *sv, register char *ptr) /* like set but assuming ptr is in sv */
3685 register STRLEN delta;
3687 if (!ptr || !SvPOKp(sv))
3689 SV_CHECK_THINKFIRST(sv);
3690 if (SvTYPE(sv) < SVt_PVIV)
3691 sv_upgrade(sv,SVt_PVIV);
3694 if (!SvLEN(sv)) { /* make copy of shared string */
3695 char *pvx = SvPVX(sv);
3696 STRLEN len = SvCUR(sv);
3697 SvGROW(sv, len + 1);
3698 Move(pvx,SvPVX(sv),len,char);
3702 SvFLAGS(sv) |= SVf_OOK;
3704 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVp_IOK|SVp_NOK|SVf_IVisUV);
3705 delta = ptr - SvPVX(sv);
3713 =for apidoc sv_catpvn
3715 Concatenates the string onto the end of the string which is in the SV. The
3716 C<len> indicates number of bytes to copy. Handles 'get' magic, but not
3717 'set' magic. See C<sv_catpvn_mg>.
3723 Perl_sv_catpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3728 junk = SvPV_force(sv, tlen);
3729 SvGROW(sv, tlen + len + 1);
3732 Move(ptr,SvPVX(sv)+tlen,len,char);
3735 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3740 =for apidoc sv_catpvn_mg
3742 Like C<sv_catpvn>, but also handles 'set' magic.
3748 Perl_sv_catpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3750 sv_catpvn(sv,ptr,len);
3755 =for apidoc sv_catsv
3757 Concatenates the string from SV C<ssv> onto the end of the string in
3758 SV C<dsv>. Modifies C<dsv> but not C<ssv>. Handles 'get' magic, but
3759 not 'set' magic. See C<sv_catsv_mg>.
3764 Perl_sv_catsv(pTHX_ SV *dsv, register SV *ssv)
3770 if ((spv = SvPV(ssv, slen))) {
3771 bool dutf8 = DO_UTF8(dsv);
3772 bool sutf8 = DO_UTF8(ssv);
3775 sv_catpvn(dsv,spv,slen);
3778 /* Not modifying source SV, so taking a temporary copy. */
3779 SV* csv = sv_2mortal(newSVsv(ssv));
3783 sv_utf8_upgrade(csv);
3784 cpv = SvPV(csv,clen);
3785 sv_catpvn(dsv,cpv,clen);
3788 sv_utf8_upgrade(dsv);
3789 sv_catpvn(dsv,spv,slen);
3790 SvUTF8_on(dsv); /* If dsv has no wide characters. */
3797 =for apidoc sv_catsv_mg
3799 Like C<sv_catsv>, but also handles 'set' magic.
3805 Perl_sv_catsv_mg(pTHX_ SV *dsv, register SV *ssv)
3812 =for apidoc sv_catpv
3814 Concatenates the string onto the end of the string which is in the SV.
3815 Handles 'get' magic, but not 'set' magic. See C<sv_catpv_mg>.
3821 Perl_sv_catpv(pTHX_ register SV *sv, register const char *ptr)
3823 register STRLEN len;
3829 junk = SvPV_force(sv, tlen);
3831 SvGROW(sv, tlen + len + 1);
3834 Move(ptr,SvPVX(sv)+tlen,len+1,char);
3836 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3841 =for apidoc sv_catpv_mg
3843 Like C<sv_catpv>, but also handles 'set' magic.
3849 Perl_sv_catpv_mg(pTHX_ register SV *sv, register const char *ptr)
3856 Perl_newSV(pTHX_ STRLEN len)
3862 sv_upgrade(sv, SVt_PV);
3863 SvGROW(sv, len + 1);
3868 /* name is assumed to contain an SV* if (name && namelen == HEf_SVKEY) */
3871 =for apidoc sv_magic
3873 Adds magic to an SV.
3879 Perl_sv_magic(pTHX_ register SV *sv, SV *obj, int how, const char *name, I32 namlen)
3883 if (SvREADONLY(sv)) {
3884 if (PL_curcop != &PL_compiling && !strchr("gBf", how))
3885 Perl_croak(aTHX_ PL_no_modify);
3887 if (SvMAGICAL(sv) || (how == 't' && SvTYPE(sv) >= SVt_PVMG)) {
3888 if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
3895 (void)SvUPGRADE(sv, SVt_PVMG);
3897 Newz(702,mg, 1, MAGIC);
3898 mg->mg_moremagic = SvMAGIC(sv);
3901 if (!obj || obj == sv || how == '#' || how == 'r')
3904 mg->mg_obj = SvREFCNT_inc(obj);
3905 mg->mg_flags |= MGf_REFCOUNTED;
3908 mg->mg_len = namlen;
3911 mg->mg_ptr = savepvn(name, namlen);
3912 else if (namlen == HEf_SVKEY)
3913 mg->mg_ptr = (char*)SvREFCNT_inc((SV*)name);
3917 mg->mg_virtual = &PL_vtbl_sv;
3920 mg->mg_virtual = &PL_vtbl_amagic;
3923 mg->mg_virtual = &PL_vtbl_amagicelem;
3926 mg->mg_virtual = &PL_vtbl_ovrld;
3929 mg->mg_virtual = &PL_vtbl_bm;
3932 mg->mg_virtual = &PL_vtbl_regdata;
3935 mg->mg_virtual = &PL_vtbl_regdatum;
3938 mg->mg_virtual = &PL_vtbl_env;
3941 mg->mg_virtual = &PL_vtbl_fm;
3944 mg->mg_virtual = &PL_vtbl_envelem;
3947 mg->mg_virtual = &PL_vtbl_mglob;
3950 mg->mg_virtual = &PL_vtbl_isa;
3953 mg->mg_virtual = &PL_vtbl_isaelem;
3956 mg->mg_virtual = &PL_vtbl_nkeys;
3963 mg->mg_virtual = &PL_vtbl_dbline;
3967 mg->mg_virtual = &PL_vtbl_mutex;
3969 #endif /* USE_THREADS */
3970 #ifdef USE_LOCALE_COLLATE
3972 mg->mg_virtual = &PL_vtbl_collxfrm;
3974 #endif /* USE_LOCALE_COLLATE */
3976 mg->mg_virtual = &PL_vtbl_pack;
3980 mg->mg_virtual = &PL_vtbl_packelem;
3983 mg->mg_virtual = &PL_vtbl_regexp;
3986 mg->mg_virtual = &PL_vtbl_sig;
3989 mg->mg_virtual = &PL_vtbl_sigelem;
3992 mg->mg_virtual = &PL_vtbl_taint;
3996 mg->mg_virtual = &PL_vtbl_uvar;
3999 mg->mg_virtual = &PL_vtbl_vec;
4002 mg->mg_virtual = &PL_vtbl_substr;
4005 mg->mg_virtual = &PL_vtbl_defelem;
4008 mg->mg_virtual = &PL_vtbl_glob;
4011 mg->mg_virtual = &PL_vtbl_arylen;
4014 mg->mg_virtual = &PL_vtbl_pos;
4017 mg->mg_virtual = &PL_vtbl_backref;
4019 case '~': /* Reserved for use by extensions not perl internals. */
4020 /* Useful for attaching extension internal data to perl vars. */
4021 /* Note that multiple extensions may clash if magical scalars */
4022 /* etc holding private data from one are passed to another. */
4026 Perl_croak(aTHX_ "Don't know how to handle magic of type '%c'", how);
4030 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
4034 =for apidoc sv_unmagic
4036 Removes magic from an SV.
4042 Perl_sv_unmagic(pTHX_ SV *sv, int type)
4046 if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
4049 for (mg = *mgp; mg; mg = *mgp) {
4050 if (mg->mg_type == type) {
4051 MGVTBL* vtbl = mg->mg_virtual;
4052 *mgp = mg->mg_moremagic;
4053 if (vtbl && vtbl->svt_free)
4054 CALL_FPTR(vtbl->svt_free)(aTHX_ sv, mg);
4055 if (mg->mg_ptr && mg->mg_type != 'g')
4056 if (mg->mg_len >= 0)
4057 Safefree(mg->mg_ptr);
4058 else if (mg->mg_len == HEf_SVKEY)
4059 SvREFCNT_dec((SV*)mg->mg_ptr);
4060 if (mg->mg_flags & MGf_REFCOUNTED)
4061 SvREFCNT_dec(mg->mg_obj);
4065 mgp = &mg->mg_moremagic;
4069 SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
4076 =for apidoc sv_rvweaken
4084 Perl_sv_rvweaken(pTHX_ SV *sv)
4087 if (!SvOK(sv)) /* let undefs pass */
4090 Perl_croak(aTHX_ "Can't weaken a nonreference");
4091 else if (SvWEAKREF(sv)) {
4092 if (ckWARN(WARN_MISC))
4093 Perl_warner(aTHX_ WARN_MISC, "Reference is already weak");
4097 sv_add_backref(tsv, sv);
4104 S_sv_add_backref(pTHX_ SV *tsv, SV *sv)
4108 if (SvMAGICAL(tsv) && (mg = mg_find(tsv, '<')))
4109 av = (AV*)mg->mg_obj;
4112 sv_magic(tsv, (SV*)av, '<', NULL, 0);
4113 SvREFCNT_dec(av); /* for sv_magic */
4119 S_sv_del_backref(pTHX_ SV *sv)
4126 if (!SvMAGICAL(tsv) || !(mg = mg_find(tsv, '<')))
4127 Perl_croak(aTHX_ "panic: del_backref");
4128 av = (AV *)mg->mg_obj;
4133 svp[i] = &PL_sv_undef; /* XXX */
4140 =for apidoc sv_insert
4142 Inserts a string at the specified offset/length within the SV. Similar to
4143 the Perl substr() function.
4149 Perl_sv_insert(pTHX_ SV *bigstr, STRLEN offset, STRLEN len, char *little, STRLEN littlelen)
4153 register char *midend;
4154 register char *bigend;
4160 Perl_croak(aTHX_ "Can't modify non-existent substring");
4161 SvPV_force(bigstr, curlen);
4162 (void)SvPOK_only_UTF8(bigstr);
4163 if (offset + len > curlen) {
4164 SvGROW(bigstr, offset+len+1);
4165 Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
4166 SvCUR_set(bigstr, offset+len);
4170 i = littlelen - len;
4171 if (i > 0) { /* string might grow */
4172 big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
4173 mid = big + offset + len;
4174 midend = bigend = big + SvCUR(bigstr);
4177 while (midend > mid) /* shove everything down */
4178 *--bigend = *--midend;
4179 Move(little,big+offset,littlelen,char);
4185 Move(little,SvPVX(bigstr)+offset,len,char);
4190 big = SvPVX(bigstr);
4193 bigend = big + SvCUR(bigstr);
4195 if (midend > bigend)
4196 Perl_croak(aTHX_ "panic: sv_insert");
4198 if (mid - big > bigend - midend) { /* faster to shorten from end */
4200 Move(little, mid, littlelen,char);
4203 i = bigend - midend;
4205 Move(midend, mid, i,char);
4209 SvCUR_set(bigstr, mid - big);
4212 else if ((i = mid - big)) { /* faster from front */
4213 midend -= littlelen;
4215 sv_chop(bigstr,midend-i);
4220 Move(little, mid, littlelen,char);
4222 else if (littlelen) {
4223 midend -= littlelen;
4224 sv_chop(bigstr,midend);
4225 Move(little,midend,littlelen,char);
4228 sv_chop(bigstr,midend);
4234 =for apidoc sv_replace
4236 Make the first argument a copy of the second, then delete the original.
4242 Perl_sv_replace(pTHX_ register SV *sv, register SV *nsv)
4244 U32 refcnt = SvREFCNT(sv);
4245 SV_CHECK_THINKFIRST(sv);
4246 if (SvREFCNT(nsv) != 1 && ckWARN_d(WARN_INTERNAL))
4247 Perl_warner(aTHX_ WARN_INTERNAL, "Reference miscount in sv_replace()");
4248 if (SvMAGICAL(sv)) {
4252 sv_upgrade(nsv, SVt_PVMG);
4253 SvMAGIC(nsv) = SvMAGIC(sv);
4254 SvFLAGS(nsv) |= SvMAGICAL(sv);
4260 assert(!SvREFCNT(sv));
4261 StructCopy(nsv,sv,SV);
4262 SvREFCNT(sv) = refcnt;
4263 SvFLAGS(nsv) |= SVTYPEMASK; /* Mark as freed */
4268 =for apidoc sv_clear
4270 Clear an SV, making it empty. Does not free the memory used by the SV
4277 Perl_sv_clear(pTHX_ register SV *sv)
4281 assert(SvREFCNT(sv) == 0);
4284 if (PL_defstash) { /* Still have a symbol table? */
4289 Zero(&tmpref, 1, SV);
4290 sv_upgrade(&tmpref, SVt_RV);
4292 SvREADONLY_on(&tmpref); /* DESTROY() could be naughty */
4293 SvREFCNT(&tmpref) = 1;
4296 stash = SvSTASH(sv);
4297 destructor = StashHANDLER(stash,DESTROY);
4300 PUSHSTACKi(PERLSI_DESTROY);
4301 SvRV(&tmpref) = SvREFCNT_inc(sv);
4306 call_sv((SV*)destructor, G_DISCARD|G_EVAL|G_KEEPERR);
4312 } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
4314 del_XRV(SvANY(&tmpref));
4317 if (PL_in_clean_objs)
4318 Perl_croak(aTHX_ "DESTROY created new reference to dead object '%s'",
4320 /* DESTROY gave object new lease on life */
4326 SvREFCNT_dec(SvSTASH(sv)); /* possibly of changed persuasion */
4327 SvOBJECT_off(sv); /* Curse the object. */
4328 if (SvTYPE(sv) != SVt_PVIO)
4329 --PL_sv_objcount; /* XXX Might want something more general */
4332 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv))
4335 switch (SvTYPE(sv)) {
4338 IoIFP(sv) != PerlIO_stdin() &&
4339 IoIFP(sv) != PerlIO_stdout() &&
4340 IoIFP(sv) != PerlIO_stderr())
4342 io_close((IO*)sv, FALSE);
4344 if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
4345 PerlDir_close(IoDIRP(sv));
4346 IoDIRP(sv) = (DIR*)NULL;
4347 Safefree(IoTOP_NAME(sv));
4348 Safefree(IoFMT_NAME(sv));
4349 Safefree(IoBOTTOM_NAME(sv));
4364 SvREFCNT_dec(LvTARG(sv));
4368 Safefree(GvNAME(sv));
4369 /* cannot decrease stash refcount yet, as we might recursively delete
4370 ourselves when the refcnt drops to zero. Delay SvREFCNT_dec
4371 of stash until current sv is completely gone.
4372 -- JohnPC, 27 Mar 1998 */
4373 stash = GvSTASH(sv);
4379 (void)SvOOK_off(sv);
4387 SvREFCNT_dec(SvRV(sv));
4389 else if (SvPVX(sv) && SvLEN(sv))
4390 Safefree(SvPVX(sv));
4391 else if (SvPVX(sv) && SvREADONLY(sv) && SvFAKE(sv)) {
4392 unsharepvn(SvPVX(sv),SvUTF8(sv)?-SvCUR(sv):SvCUR(sv),SvUVX(sv));
4404 switch (SvTYPE(sv)) {
4420 del_XPVIV(SvANY(sv));
4423 del_XPVNV(SvANY(sv));
4426 del_XPVMG(SvANY(sv));
4429 del_XPVLV(SvANY(sv));
4432 del_XPVAV(SvANY(sv));
4435 del_XPVHV(SvANY(sv));
4438 del_XPVCV(SvANY(sv));
4441 del_XPVGV(SvANY(sv));
4442 /* code duplication for increased performance. */
4443 SvFLAGS(sv) &= SVf_BREAK;
4444 SvFLAGS(sv) |= SVTYPEMASK;
4445 /* decrease refcount of the stash that owns this GV, if any */
4447 SvREFCNT_dec(stash);
4448 return; /* not break, SvFLAGS reset already happened */
4450 del_XPVBM(SvANY(sv));
4453 del_XPVFM(SvANY(sv));
4456 del_XPVIO(SvANY(sv));
4459 SvFLAGS(sv) &= SVf_BREAK;
4460 SvFLAGS(sv) |= SVTYPEMASK;
4464 Perl_sv_newref(pTHX_ SV *sv)
4467 ATOMIC_INC(SvREFCNT(sv));
4474 Free the memory used by an SV.
4480 Perl_sv_free(pTHX_ SV *sv)
4482 int refcount_is_zero;
4486 if (SvREFCNT(sv) == 0) {
4487 if (SvFLAGS(sv) & SVf_BREAK)
4489 if (PL_in_clean_all) /* All is fair */
4491 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
4492 /* make sure SvREFCNT(sv)==0 happens very seldom */
4493 SvREFCNT(sv) = (~(U32)0)/2;
4496 if (ckWARN_d(WARN_INTERNAL))
4497 Perl_warner(aTHX_ WARN_INTERNAL, "Attempt to free unreferenced scalar");
4500 ATOMIC_DEC_AND_TEST(refcount_is_zero, SvREFCNT(sv));
4501 if (!refcount_is_zero)
4505 if (ckWARN_d(WARN_DEBUGGING))
4506 Perl_warner(aTHX_ WARN_DEBUGGING,
4507 "Attempt to free temp prematurely: SV 0x%"UVxf,
4512 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
4513 /* make sure SvREFCNT(sv)==0 happens very seldom */
4514 SvREFCNT(sv) = (~(U32)0)/2;
4525 Returns the length of the string in the SV. See also C<SvCUR>.
4531 Perl_sv_len(pTHX_ register SV *sv)
4540 len = mg_length(sv);
4542 junk = SvPV(sv, len);
4547 =for apidoc sv_len_utf8
4549 Returns the number of characters in the string in an SV, counting wide
4550 UTF8 bytes as a single character.
4556 Perl_sv_len_utf8(pTHX_ register SV *sv)
4562 return mg_length(sv);
4566 U8 *s = (U8*)SvPV(sv, len);
4568 return Perl_utf8_length(aTHX_ s, s + len);
4573 Perl_sv_pos_u2b(pTHX_ register SV *sv, I32* offsetp, I32* lenp)
4578 I32 uoffset = *offsetp;
4584 start = s = (U8*)SvPV(sv, len);
4586 while (s < send && uoffset--)
4590 *offsetp = s - start;
4594 while (s < send && ulen--)
4604 Perl_sv_pos_b2u(pTHX_ register SV *sv, I32* offsetp)
4613 s = (U8*)SvPV(sv, len);
4615 Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset");
4616 send = s + *offsetp;
4621 if (utf8_to_uv(s, UTF8SKIP(s), &n, 0)) {
4635 Returns a boolean indicating whether the strings in the two SVs are
4642 Perl_sv_eq(pTHX_ register SV *sv1, register SV *sv2)
4649 bool pv1tmp = FALSE;
4650 bool pv2tmp = FALSE;
4657 pv1 = SvPV(sv1, cur1);
4664 pv2 = SvPV(sv2, cur2);
4666 /* do not utf8ize the comparands as a side-effect */
4667 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTE) {
4668 if (PL_hints & HINT_UTF8_DISTINCT)
4672 (void)utf8_to_bytes((U8*)(pv1 = savepvn(pv1, cur1)), &cur1);
4683 (void)utf8_to_bytes((U8*)(pv2 = savepvn(pv2, cur2)), &cur2);
4696 eq = memEQ(pv1, pv2, cur1);
4709 Compares the strings in two SVs. Returns -1, 0, or 1 indicating whether the
4710 string in C<sv1> is less than, equal to, or greater than the string in
4717 Perl_sv_cmp(pTHX_ register SV *sv1, register SV *sv2)
4722 bool pv1tmp = FALSE;
4723 bool pv2tmp = FALSE;
4730 pv1 = SvPV(sv1, cur1);
4737 pv2 = SvPV(sv2, cur2);
4739 /* do not utf8ize the comparands as a side-effect */
4740 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTE) {
4741 if (PL_hints & HINT_UTF8_DISTINCT)
4742 return SvUTF8(sv1) ? 1 : -1;
4745 pv2 = (char*)bytes_to_utf8((U8*)pv2, &cur2);
4749 pv1 = (char*)bytes_to_utf8((U8*)pv1, &cur1);
4755 cmp = cur2 ? -1 : 0;
4759 I32 retval = memcmp((void*)pv1, (void*)pv2, cur1 < cur2 ? cur1 : cur2);
4762 cmp = retval < 0 ? -1 : 1;
4763 } else if (cur1 == cur2) {
4766 cmp = cur1 < cur2 ? -1 : 1;
4779 =for apidoc sv_cmp_locale
4781 Compares the strings in two SVs in a locale-aware manner. See
4788 Perl_sv_cmp_locale(pTHX_ register SV *sv1, register SV *sv2)
4790 #ifdef USE_LOCALE_COLLATE
4796 if (PL_collation_standard)
4800 pv1 = sv1 ? sv_collxfrm(sv1, &len1) : (char *) NULL;
4802 pv2 = sv2 ? sv_collxfrm(sv2, &len2) : (char *) NULL;
4804 if (!pv1 || !len1) {
4815 retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
4818 return retval < 0 ? -1 : 1;
4821 * When the result of collation is equality, that doesn't mean
4822 * that there are no differences -- some locales exclude some
4823 * characters from consideration. So to avoid false equalities,
4824 * we use the raw string as a tiebreaker.
4830 #endif /* USE_LOCALE_COLLATE */
4832 return sv_cmp(sv1, sv2);
4835 #ifdef USE_LOCALE_COLLATE
4837 * Any scalar variable may carry an 'o' magic that contains the
4838 * scalar data of the variable transformed to such a format that
4839 * a normal memory comparison can be used to compare the data
4840 * according to the locale settings.
4843 Perl_sv_collxfrm(pTHX_ SV *sv, STRLEN *nxp)
4847 mg = SvMAGICAL(sv) ? mg_find(sv, 'o') : (MAGIC *) NULL;
4848 if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
4853 Safefree(mg->mg_ptr);
4855 if ((xf = mem_collxfrm(s, len, &xlen))) {
4856 if (SvREADONLY(sv)) {
4859 return xf + sizeof(PL_collation_ix);
4862 sv_magic(sv, 0, 'o', 0, 0);
4863 mg = mg_find(sv, 'o');
4876 if (mg && mg->mg_ptr) {
4878 return mg->mg_ptr + sizeof(PL_collation_ix);
4886 #endif /* USE_LOCALE_COLLATE */
4891 Get a line from the filehandle and store it into the SV, optionally
4892 appending to the currently-stored string.
4898 Perl_sv_gets(pTHX_ register SV *sv, register PerlIO *fp, I32 append)
4902 register STDCHAR rslast;
4903 register STDCHAR *bp;
4907 SV_CHECK_THINKFIRST(sv);
4908 (void)SvUPGRADE(sv, SVt_PV);
4912 if (RsSNARF(PL_rs)) {
4916 else if (RsRECORD(PL_rs)) {
4917 I32 recsize, bytesread;
4920 /* Grab the size of the record we're getting */
4921 recsize = SvIV(SvRV(PL_rs));
4922 (void)SvPOK_only(sv); /* Validate pointer */
4923 buffer = SvGROW(sv, recsize + 1);
4926 /* VMS wants read instead of fread, because fread doesn't respect */
4927 /* RMS record boundaries. This is not necessarily a good thing to be */
4928 /* doing, but we've got no other real choice */
4929 bytesread = PerlLIO_read(PerlIO_fileno(fp), buffer, recsize);
4931 bytesread = PerlIO_read(fp, buffer, recsize);
4933 SvCUR_set(sv, bytesread);
4934 buffer[bytesread] = '\0';
4935 if (PerlIO_isutf8(fp))
4939 return(SvCUR(sv) ? SvPVX(sv) : Nullch);
4941 else if (RsPARA(PL_rs)) {
4946 /* Get $/ i.e. PL_rs into same encoding as stream wants */
4947 if (PerlIO_isutf8(fp)) {
4948 rsptr = SvPVutf8(PL_rs, rslen);
4951 if (SvUTF8(PL_rs)) {
4952 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
4953 Perl_croak(aTHX_ "Wide character in $/");
4956 rsptr = SvPV(PL_rs, rslen);
4960 rslast = rslen ? rsptr[rslen - 1] : '\0';
4962 if (RsPARA(PL_rs)) { /* have to do this both before and after */
4963 do { /* to make sure file boundaries work right */
4966 i = PerlIO_getc(fp);
4970 PerlIO_ungetc(fp,i);
4976 /* See if we know enough about I/O mechanism to cheat it ! */
4978 /* This used to be #ifdef test - it is made run-time test for ease
4979 of abstracting out stdio interface. One call should be cheap
4980 enough here - and may even be a macro allowing compile
4984 if (PerlIO_fast_gets(fp)) {
4987 * We're going to steal some values from the stdio struct
4988 * and put EVERYTHING in the innermost loop into registers.
4990 register STDCHAR *ptr;
4994 #if defined(VMS) && defined(PERLIO_IS_STDIO)
4995 /* An ungetc()d char is handled separately from the regular
4996 * buffer, so we getc() it back out and stuff it in the buffer.
4998 i = PerlIO_getc(fp);
4999 if (i == EOF) return 0;
5000 *(--((*fp)->_ptr)) = (unsigned char) i;
5004 /* Here is some breathtakingly efficient cheating */
5006 cnt = PerlIO_get_cnt(fp); /* get count into register */
5007 (void)SvPOK_only(sv); /* validate pointer */
5008 if (SvLEN(sv) - append <= cnt + 1) { /* make sure we have the room */
5009 if (cnt > 80 && SvLEN(sv) > append) {
5010 shortbuffered = cnt - SvLEN(sv) + append + 1;
5011 cnt -= shortbuffered;
5015 /* remember that cnt can be negative */
5016 SvGROW(sv, append + (cnt <= 0 ? 2 : (cnt + 1)));
5021 bp = (STDCHAR*)SvPVX(sv) + append; /* move these two too to registers */
5022 ptr = (STDCHAR*)PerlIO_get_ptr(fp);
5023 DEBUG_P(PerlIO_printf(Perl_debug_log,
5024 "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
5025 DEBUG_P(PerlIO_printf(Perl_debug_log,
5026 "Screamer: entering: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
5027 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
5028 PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
5033 while (cnt > 0) { /* this | eat */
5035 if ((*bp++ = *ptr++) == rslast) /* really | dust */
5036 goto thats_all_folks; /* screams | sed :-) */
5040 Copy(ptr, bp, cnt, char); /* this | eat */
5041 bp += cnt; /* screams | dust */
5042 ptr += cnt; /* louder | sed :-) */
5047 if (shortbuffered) { /* oh well, must extend */
5048 cnt = shortbuffered;
5050 bpx = bp - (STDCHAR*)SvPVX(sv); /* box up before relocation */
5052 SvGROW(sv, SvLEN(sv) + append + cnt + 2);
5053 bp = (STDCHAR*)SvPVX(sv) + bpx; /* unbox after relocation */
5057 DEBUG_P(PerlIO_printf(Perl_debug_log,
5058 "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
5059 PTR2UV(ptr),(long)cnt));
5060 PerlIO_set_ptrcnt(fp, ptr, cnt); /* deregisterize cnt and ptr */
5061 DEBUG_P(PerlIO_printf(Perl_debug_log,
5062 "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
5063 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
5064 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
5065 /* This used to call 'filbuf' in stdio form, but as that behaves like
5066 getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
5067 another abstraction. */
5068 i = PerlIO_getc(fp); /* get more characters */
5069 DEBUG_P(PerlIO_printf(Perl_debug_log,
5070 "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
5071 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
5072 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
5073 cnt = PerlIO_get_cnt(fp);
5074 ptr = (STDCHAR*)PerlIO_get_ptr(fp); /* reregisterize cnt and ptr */
5075 DEBUG_P(PerlIO_printf(Perl_debug_log,
5076 "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
5078 if (i == EOF) /* all done for ever? */
5079 goto thats_really_all_folks;
5081 bpx = bp - (STDCHAR*)SvPVX(sv); /* box up before relocation */
5083 SvGROW(sv, bpx + cnt + 2);
5084 bp = (STDCHAR*)SvPVX(sv) + bpx; /* unbox after relocation */
5086 *bp++ = i; /* store character from PerlIO_getc */
5088 if (rslen && (STDCHAR)i == rslast) /* all done for now? */
5089 goto thats_all_folks;
5093 if ((rslen > 1 && (bp - (STDCHAR*)SvPVX(sv) < rslen)) ||
5094 memNE((char*)bp - rslen, rsptr, rslen))
5095 goto screamer; /* go back to the fray */
5096 thats_really_all_folks:
5098 cnt += shortbuffered;
5099 DEBUG_P(PerlIO_printf(Perl_debug_log,
5100 "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
5101 PerlIO_set_ptrcnt(fp, ptr, cnt); /* put these back or we're in trouble */
5102 DEBUG_P(PerlIO_printf(Perl_debug_log,
5103 "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
5104 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
5105 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
5107 SvCUR_set(sv, bp - (STDCHAR*)SvPVX(sv)); /* set length */
5108 DEBUG_P(PerlIO_printf(Perl_debug_log,
5109 "Screamer: done, len=%ld, string=|%.*s|\n",
5110 (long)SvCUR(sv),(int)SvCUR(sv),SvPVX(sv)));
5115 /*The big, slow, and stupid way */
5118 /* Need to work around EPOC SDK features */
5119 /* On WINS: MS VC5 generates calls to _chkstk, */
5120 /* if a `large' stack frame is allocated */
5121 /* gcc on MARM does not generate calls like these */
5127 register STDCHAR *bpe = buf + sizeof(buf);
5129 while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = i) != rslast && bp < bpe)
5130 ; /* keep reading */
5134 cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
5135 /* Accomodate broken VAXC compiler, which applies U8 cast to
5136 * both args of ?: operator, causing EOF to change into 255
5138 if (cnt) { i = (U8)buf[cnt - 1]; } else { i = EOF; }
5142 sv_catpvn(sv, (char *) buf, cnt);
5144 sv_setpvn(sv, (char *) buf, cnt);
5146 if (i != EOF && /* joy */
5148 SvCUR(sv) < rslen ||
5149 memNE(SvPVX(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
5153 * If we're reading from a TTY and we get a short read,
5154 * indicating that the user hit his EOF character, we need
5155 * to notice it now, because if we try to read from the TTY
5156 * again, the EOF condition will disappear.
5158 * The comparison of cnt to sizeof(buf) is an optimization
5159 * that prevents unnecessary calls to feof().
5163 if (!(cnt < sizeof(buf) && PerlIO_eof(fp)))
5168 if (RsPARA(PL_rs)) { /* have to do this both before and after */
5169 while (i != EOF) { /* to make sure file boundaries work right */
5170 i = PerlIO_getc(fp);
5172 PerlIO_ungetc(fp,i);
5178 if (PerlIO_isutf8(fp))
5183 return (SvCUR(sv) - append) ? SvPVX(sv) : Nullch;
5190 Auto-increment of the value in the SV.
5196 Perl_sv_inc(pTHX_ register SV *sv)
5205 if (SvTHINKFIRST(sv)) {
5206 if (SvREADONLY(sv)) {
5207 if (PL_curcop != &PL_compiling)
5208 Perl_croak(aTHX_ PL_no_modify);
5212 if (SvAMAGIC(sv) && AMG_CALLun(sv,inc))
5214 i = PTR2IV(SvRV(sv));
5219 flags = SvFLAGS(sv);
5220 if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
5221 /* It's (privately or publicly) a float, but not tested as an
5222 integer, so test it to see. */
5224 flags = SvFLAGS(sv);
5226 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
5227 /* It's publicly an integer, or privately an integer-not-float */
5230 if (SvUVX(sv) == UV_MAX)
5231 sv_setnv(sv, (NV)UV_MAX + 1.0);
5233 (void)SvIOK_only_UV(sv);
5236 if (SvIVX(sv) == IV_MAX)
5237 sv_setuv(sv, (UV)IV_MAX + 1);
5239 (void)SvIOK_only(sv);
5245 if (flags & SVp_NOK) {
5246 (void)SvNOK_only(sv);
5251 if (!(flags & SVp_POK) || !*SvPVX(sv)) {
5252 if ((flags & SVTYPEMASK) < SVt_PVIV)
5253 sv_upgrade(sv, SVt_IV);
5254 (void)SvIOK_only(sv);
5259 while (isALPHA(*d)) d++;
5260 while (isDIGIT(*d)) d++;
5262 #ifdef PERL_PRESERVE_IVUV
5263 /* Got to punt this an an integer if needs be, but we don't issue
5264 warnings. Probably ought to make the sv_iv_please() that does
5265 the conversion if possible, and silently. */
5266 I32 numtype = looks_like_number(sv);
5267 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
5268 /* Need to try really hard to see if it's an integer.
5269 9.22337203685478e+18 is an integer.
5270 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
5271 so $a="9.22337203685478e+18"; $a+0; $a++
5272 needs to be the same as $a="9.22337203685478e+18"; $a++
5279 /* sv_2iv *should* have made this an NV */
5280 if (flags & SVp_NOK) {
5281 (void)SvNOK_only(sv);
5285 /* I don't think we can get here. Maybe I should assert this
5286 And if we do get here I suspect that sv_setnv will croak. NWC
5288 #if defined(USE_LONG_DOUBLE)
5289 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",
5290 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5292 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%g\n",
5293 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5296 #endif /* PERL_PRESERVE_IVUV */
5297 sv_setnv(sv,Atof(SvPVX(sv)) + 1.0);
5301 while (d >= SvPVX(sv)) {
5309 /* MKS: The original code here died if letters weren't consecutive.
5310 * at least it didn't have to worry about non-C locales. The
5311 * new code assumes that ('z'-'a')==('Z'-'A'), letters are
5312 * arranged in order (although not consecutively) and that only
5313 * [A-Za-z] are accepted by isALPHA in the C locale.
5315 if (*d != 'z' && *d != 'Z') {
5316 do { ++*d; } while (!isALPHA(*d));
5319 *(d--) -= 'z' - 'a';
5324 *(d--) -= 'z' - 'a' + 1;
5328 /* oh,oh, the number grew */
5329 SvGROW(sv, SvCUR(sv) + 2);
5331 for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX(sv); d--)
5342 Auto-decrement of the value in the SV.
5348 Perl_sv_dec(pTHX_ register SV *sv)
5356 if (SvTHINKFIRST(sv)) {
5357 if (SvREADONLY(sv)) {
5358 if (PL_curcop != &PL_compiling)
5359 Perl_croak(aTHX_ PL_no_modify);
5363 if (SvAMAGIC(sv) && AMG_CALLun(sv,dec))
5365 i = PTR2IV(SvRV(sv));
5370 /* Unlike sv_inc we don't have to worry about string-never-numbers
5371 and keeping them magic. But we mustn't warn on punting */
5372 flags = SvFLAGS(sv);
5373 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
5374 /* It's publicly an integer, or privately an integer-not-float */
5377 if (SvUVX(sv) == 0) {
5378 (void)SvIOK_only(sv);
5382 (void)SvIOK_only_UV(sv);
5386 if (SvIVX(sv) == IV_MIN)
5387 sv_setnv(sv, (NV)IV_MIN - 1.0);
5389 (void)SvIOK_only(sv);
5395 if (flags & SVp_NOK) {
5397 (void)SvNOK_only(sv);
5400 if (!(flags & SVp_POK)) {
5401 if ((flags & SVTYPEMASK) < SVt_PVNV)
5402 sv_upgrade(sv, SVt_NV);
5404 (void)SvNOK_only(sv);
5407 #ifdef PERL_PRESERVE_IVUV
5409 I32 numtype = looks_like_number(sv);
5410 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
5411 /* Need to try really hard to see if it's an integer.
5412 9.22337203685478e+18 is an integer.
5413 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
5414 so $a="9.22337203685478e+18"; $a+0; $a--
5415 needs to be the same as $a="9.22337203685478e+18"; $a--
5422 /* sv_2iv *should* have made this an NV */
5423 if (flags & SVp_NOK) {
5424 (void)SvNOK_only(sv);
5428 /* I don't think we can get here. Maybe I should assert this
5429 And if we do get here I suspect that sv_setnv will croak. NWC
5431 #if defined(USE_LONG_DOUBLE)
5432 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",
5433 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5435 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%g\n",
5436 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5440 #endif /* PERL_PRESERVE_IVUV */
5441 sv_setnv(sv,Atof(SvPVX(sv)) - 1.0); /* punt */
5445 =for apidoc sv_mortalcopy
5447 Creates a new SV which is a copy of the original SV. The new SV is marked
5453 /* Make a string that will exist for the duration of the expression
5454 * evaluation. Actually, it may have to last longer than that, but
5455 * hopefully we won't free it until it has been assigned to a
5456 * permanent location. */
5459 Perl_sv_mortalcopy(pTHX_ SV *oldstr)
5464 sv_setsv(sv,oldstr);
5466 PL_tmps_stack[++PL_tmps_ix] = sv;
5472 =for apidoc sv_newmortal
5474 Creates a new SV which is mortal. The reference count of the SV is set to 1.
5480 Perl_sv_newmortal(pTHX)
5485 SvFLAGS(sv) = SVs_TEMP;
5487 PL_tmps_stack[++PL_tmps_ix] = sv;
5492 =for apidoc sv_2mortal
5494 Marks an SV as mortal. The SV will be destroyed when the current context
5500 /* same thing without the copying */
5503 Perl_sv_2mortal(pTHX_ register SV *sv)
5507 if (SvREADONLY(sv) && SvIMMORTAL(sv))
5510 PL_tmps_stack[++PL_tmps_ix] = sv;
5518 Creates a new SV and copies a string into it. The reference count for the
5519 SV is set to 1. If C<len> is zero, Perl will compute the length using
5520 strlen(). For efficiency, consider using C<newSVpvn> instead.
5526 Perl_newSVpv(pTHX_ const char *s, STRLEN len)
5533 sv_setpvn(sv,s,len);
5538 =for apidoc newSVpvn
5540 Creates a new SV and copies a string into it. The reference count for the
5541 SV is set to 1. Note that if C<len> is zero, Perl will create a zero length
5542 string. You are responsible for ensuring that the source string is at least
5549 Perl_newSVpvn(pTHX_ const char *s, STRLEN len)
5554 sv_setpvn(sv,s,len);
5559 =for apidoc newSVpvn_share
5561 Creates a new SV and populates it with a string from
5562 the string table. Turns on READONLY and FAKE.
5563 The idea here is that as string table is used for shared hash
5564 keys these strings will have SvPVX == HeKEY and hash lookup
5565 will avoid string compare.
5571 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
5574 bool is_utf8 = FALSE;
5580 PERL_HASH(hash, src, len);
5582 sv_upgrade(sv, SVt_PVIV);
5583 SvPVX(sv) = sharepvn(src, is_utf8?-len:len, hash);
5595 #if defined(PERL_IMPLICIT_CONTEXT)
5597 Perl_newSVpvf_nocontext(const char* pat, ...)
5602 va_start(args, pat);
5603 sv = vnewSVpvf(pat, &args);
5610 =for apidoc newSVpvf
5612 Creates a new SV an initialize it with the string formatted like
5619 Perl_newSVpvf(pTHX_ const char* pat, ...)
5623 va_start(args, pat);
5624 sv = vnewSVpvf(pat, &args);
5630 Perl_vnewSVpvf(pTHX_ const char* pat, va_list* args)
5634 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
5641 Creates a new SV and copies a floating point value into it.
5642 The reference count for the SV is set to 1.
5648 Perl_newSVnv(pTHX_ NV n)
5660 Creates a new SV and copies an integer into it. The reference count for the
5667 Perl_newSViv(pTHX_ IV i)
5679 Creates a new SV and copies an unsigned integer into it.
5680 The reference count for the SV is set to 1.
5686 Perl_newSVuv(pTHX_ UV u)
5696 =for apidoc newRV_noinc
5698 Creates an RV wrapper for an SV. The reference count for the original
5699 SV is B<not> incremented.
5705 Perl_newRV_noinc(pTHX_ SV *tmpRef)
5710 sv_upgrade(sv, SVt_RV);
5717 /* newRV_inc is #defined to newRV in sv.h */
5719 Perl_newRV(pTHX_ SV *tmpRef)
5721 return newRV_noinc(SvREFCNT_inc(tmpRef));
5727 Creates a new SV which is an exact duplicate of the original SV.
5732 /* make an exact duplicate of old */
5735 Perl_newSVsv(pTHX_ register SV *old)
5741 if (SvTYPE(old) == SVTYPEMASK) {
5742 if (ckWARN_d(WARN_INTERNAL))
5743 Perl_warner(aTHX_ WARN_INTERNAL, "semi-panic: attempt to dup freed string");
5758 Perl_sv_reset(pTHX_ register char *s, HV *stash)
5766 char todo[PERL_UCHAR_MAX+1];
5771 if (!*s) { /* reset ?? searches */
5772 for (pm = HvPMROOT(stash); pm; pm = pm->op_pmnext) {
5773 pm->op_pmdynflags &= ~PMdf_USED;
5778 /* reset variables */
5780 if (!HvARRAY(stash))
5783 Zero(todo, 256, char);
5785 i = (unsigned char)*s;
5789 max = (unsigned char)*s++;
5790 for ( ; i <= max; i++) {
5793 for (i = 0; i <= (I32) HvMAX(stash); i++) {
5794 for (entry = HvARRAY(stash)[i];
5796 entry = HeNEXT(entry))
5798 if (!todo[(U8)*HeKEY(entry)])
5800 gv = (GV*)HeVAL(entry);
5802 if (SvTHINKFIRST(sv)) {
5803 if (!SvREADONLY(sv) && SvROK(sv))
5808 if (SvTYPE(sv) >= SVt_PV) {
5810 if (SvPVX(sv) != Nullch)
5817 if (GvHV(gv) && !HvNAME(GvHV(gv))) {
5819 #ifdef USE_ENVIRON_ARRAY
5821 environ[0] = Nullch;
5830 Perl_sv_2io(pTHX_ SV *sv)
5836 switch (SvTYPE(sv)) {
5844 Perl_croak(aTHX_ "Bad filehandle: %s", GvNAME(gv));
5848 Perl_croak(aTHX_ PL_no_usym, "filehandle");
5850 return sv_2io(SvRV(sv));
5851 gv = gv_fetchpv(SvPV(sv,n_a), FALSE, SVt_PVIO);
5857 Perl_croak(aTHX_ "Bad filehandle: %s", SvPV(sv,n_a));
5864 Perl_sv_2cv(pTHX_ SV *sv, HV **st, GV **gvp, I32 lref)
5871 return *gvp = Nullgv, Nullcv;
5872 switch (SvTYPE(sv)) {
5891 SV **sp = &sv; /* Used in tryAMAGICunDEREF macro. */
5892 tryAMAGICunDEREF(to_cv);
5895 if (SvTYPE(sv) == SVt_PVCV) {
5904 Perl_croak(aTHX_ "Not a subroutine reference");
5909 gv = gv_fetchpv(SvPV(sv, n_a), lref, SVt_PVCV);
5915 if (lref && !GvCVu(gv)) {
5918 tmpsv = NEWSV(704,0);
5919 gv_efullname3(tmpsv, gv, Nullch);
5920 /* XXX this is probably not what they think they're getting.
5921 * It has the same effect as "sub name;", i.e. just a forward
5923 newSUB(start_subparse(FALSE, 0),
5924 newSVOP(OP_CONST, 0, tmpsv),
5929 Perl_croak(aTHX_ "Unable to create sub named \"%s\"", SvPV(sv,n_a));
5938 Returns true if the SV has a true value by Perl's rules.
5944 Perl_sv_true(pTHX_ register SV *sv)
5950 if ((tXpv = (XPV*)SvANY(sv)) &&
5951 (tXpv->xpv_cur > 1 ||
5952 (tXpv->xpv_cur && *tXpv->xpv_pv != '0')))
5959 return SvIVX(sv) != 0;
5962 return SvNVX(sv) != 0.0;
5964 return sv_2bool(sv);
5970 Perl_sv_iv(pTHX_ register SV *sv)
5974 return (IV)SvUVX(sv);
5981 Perl_sv_uv(pTHX_ register SV *sv)
5986 return (UV)SvIVX(sv);
5992 Perl_sv_nv(pTHX_ register SV *sv)
6000 Perl_sv_pv(pTHX_ SV *sv)
6007 return sv_2pv(sv, &n_a);
6011 Perl_sv_pvn(pTHX_ SV *sv, STRLEN *lp)
6017 return sv_2pv(sv, lp);
6021 =for apidoc sv_pvn_force
6023 Get a sensible string out of the SV somehow.
6029 Perl_sv_pvn_force(pTHX_ SV *sv, STRLEN *lp)
6033 if (SvTHINKFIRST(sv) && !SvROK(sv))
6034 sv_force_normal(sv);
6040 if (SvTYPE(sv) > SVt_PVLV && SvTYPE(sv) != SVt_PVFM) {
6041 Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
6042 PL_op_name[PL_op->op_type]);
6046 if (s != SvPVX(sv)) { /* Almost, but not quite, sv_setpvn() */
6051 (void)SvUPGRADE(sv, SVt_PV); /* Never FALSE */
6052 SvGROW(sv, len + 1);
6053 Move(s,SvPVX(sv),len,char);
6058 SvPOK_on(sv); /* validate pointer */
6060 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
6061 PTR2UV(sv),SvPVX(sv)));
6068 Perl_sv_pvbyte(pTHX_ SV *sv)
6074 Perl_sv_pvbyten(pTHX_ SV *sv, STRLEN *lp)
6076 return sv_pvn(sv,lp);
6080 Perl_sv_pvbyten_force(pTHX_ SV *sv, STRLEN *lp)
6082 return sv_pvn_force(sv,lp);
6086 Perl_sv_pvutf8(pTHX_ SV *sv)
6088 sv_utf8_upgrade(sv);
6093 Perl_sv_pvutf8n(pTHX_ SV *sv, STRLEN *lp)
6095 sv_utf8_upgrade(sv);
6096 return sv_pvn(sv,lp);
6100 =for apidoc sv_pvutf8n_force
6102 Get a sensible UTF8-encoded string out of the SV somehow. See
6109 Perl_sv_pvutf8n_force(pTHX_ SV *sv, STRLEN *lp)
6111 sv_utf8_upgrade(sv);
6112 return sv_pvn_force(sv,lp);
6116 =for apidoc sv_reftype
6118 Returns a string describing what the SV is a reference to.
6124 Perl_sv_reftype(pTHX_ SV *sv, int ob)
6126 if (ob && SvOBJECT(sv))
6127 return HvNAME(SvSTASH(sv));
6129 switch (SvTYPE(sv)) {
6143 case SVt_PVLV: return "LVALUE";
6144 case SVt_PVAV: return "ARRAY";
6145 case SVt_PVHV: return "HASH";
6146 case SVt_PVCV: return "CODE";
6147 case SVt_PVGV: return "GLOB";
6148 case SVt_PVFM: return "FORMAT";
6149 case SVt_PVIO: return "IO";
6150 default: return "UNKNOWN";
6156 =for apidoc sv_isobject
6158 Returns a boolean indicating whether the SV is an RV pointing to a blessed
6159 object. If the SV is not an RV, or if the object is not blessed, then this
6166 Perl_sv_isobject(pTHX_ SV *sv)
6183 Returns a boolean indicating whether the SV is blessed into the specified
6184 class. This does not check for subtypes; use C<sv_derived_from> to verify
6185 an inheritance relationship.
6191 Perl_sv_isa(pTHX_ SV *sv, const char *name)
6203 return strEQ(HvNAME(SvSTASH(sv)), name);
6209 Creates a new SV for the RV, C<rv>, to point to. If C<rv> is not an RV then
6210 it will be upgraded to one. If C<classname> is non-null then the new SV will
6211 be blessed in the specified package. The new SV is returned and its
6212 reference count is 1.
6218 Perl_newSVrv(pTHX_ SV *rv, const char *classname)
6224 SV_CHECK_THINKFIRST(rv);
6227 if (SvTYPE(rv) >= SVt_PVMG) {
6228 U32 refcnt = SvREFCNT(rv);
6232 SvREFCNT(rv) = refcnt;
6235 if (SvTYPE(rv) < SVt_RV)
6236 sv_upgrade(rv, SVt_RV);
6237 else if (SvTYPE(rv) > SVt_RV) {
6238 (void)SvOOK_off(rv);
6239 if (SvPVX(rv) && SvLEN(rv))
6240 Safefree(SvPVX(rv));
6250 HV* stash = gv_stashpv(classname, TRUE);
6251 (void)sv_bless(rv, stash);
6257 =for apidoc sv_setref_pv
6259 Copies a pointer into a new SV, optionally blessing the SV. The C<rv>
6260 argument will be upgraded to an RV. That RV will be modified to point to
6261 the new SV. If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
6262 into the SV. The C<classname> argument indicates the package for the
6263 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
6264 will be returned and will have a reference count of 1.
6266 Do not use with other Perl types such as HV, AV, SV, CV, because those
6267 objects will become corrupted by the pointer copy process.
6269 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
6275 Perl_sv_setref_pv(pTHX_ SV *rv, const char *classname, void *pv)
6278 sv_setsv(rv, &PL_sv_undef);
6282 sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
6287 =for apidoc sv_setref_iv
6289 Copies an integer into a new SV, optionally blessing the SV. The C<rv>
6290 argument will be upgraded to an RV. That RV will be modified to point to
6291 the new SV. The C<classname> argument indicates the package for the
6292 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
6293 will be returned and will have a reference count of 1.
6299 Perl_sv_setref_iv(pTHX_ SV *rv, const char *classname, IV iv)
6301 sv_setiv(newSVrv(rv,classname), iv);
6306 =for apidoc sv_setref_nv
6308 Copies a double into a new SV, optionally blessing the SV. The C<rv>
6309 argument will be upgraded to an RV. That RV will be modified to point to
6310 the new SV. The C<classname> argument indicates the package for the
6311 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
6312 will be returned and will have a reference count of 1.
6318 Perl_sv_setref_nv(pTHX_ SV *rv, const char *classname, NV nv)
6320 sv_setnv(newSVrv(rv,classname), nv);
6325 =for apidoc sv_setref_pvn
6327 Copies a string into a new SV, optionally blessing the SV. The length of the
6328 string must be specified with C<n>. The C<rv> argument will be upgraded to
6329 an RV. That RV will be modified to point to the new SV. The C<classname>
6330 argument indicates the package for the blessing. Set C<classname> to
6331 C<Nullch> to avoid the blessing. The new SV will be returned and will have
6332 a reference count of 1.
6334 Note that C<sv_setref_pv> copies the pointer while this copies the string.
6340 Perl_sv_setref_pvn(pTHX_ SV *rv, const char *classname, char *pv, STRLEN n)
6342 sv_setpvn(newSVrv(rv,classname), pv, n);
6347 =for apidoc sv_bless
6349 Blesses an SV into a specified package. The SV must be an RV. The package
6350 must be designated by its stash (see C<gv_stashpv()>). The reference count
6351 of the SV is unaffected.
6357 Perl_sv_bless(pTHX_ SV *sv, HV *stash)
6361 Perl_croak(aTHX_ "Can't bless non-reference value");
6363 if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
6364 if (SvREADONLY(tmpRef))
6365 Perl_croak(aTHX_ PL_no_modify);
6366 if (SvOBJECT(tmpRef)) {
6367 if (SvTYPE(tmpRef) != SVt_PVIO)
6369 SvREFCNT_dec(SvSTASH(tmpRef));
6372 SvOBJECT_on(tmpRef);
6373 if (SvTYPE(tmpRef) != SVt_PVIO)
6375 (void)SvUPGRADE(tmpRef, SVt_PVMG);
6376 SvSTASH(tmpRef) = (HV*)SvREFCNT_inc(stash);
6387 S_sv_unglob(pTHX_ SV *sv)
6391 assert(SvTYPE(sv) == SVt_PVGV);
6396 SvREFCNT_dec(GvSTASH(sv));
6397 GvSTASH(sv) = Nullhv;
6399 sv_unmagic(sv, '*');
6400 Safefree(GvNAME(sv));
6403 /* need to keep SvANY(sv) in the right arena */
6404 xpvmg = new_XPVMG();
6405 StructCopy(SvANY(sv), xpvmg, XPVMG);
6406 del_XPVGV(SvANY(sv));
6409 SvFLAGS(sv) &= ~SVTYPEMASK;
6410 SvFLAGS(sv) |= SVt_PVMG;
6414 =for apidoc sv_unref_flags
6416 Unsets the RV status of the SV, and decrements the reference count of
6417 whatever was being referenced by the RV. This can almost be thought of
6418 as a reversal of C<newSVrv>. The C<cflags> argument can contain
6419 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
6420 (otherwise the decrementing is conditional on the reference count being
6421 different from one or the reference being a readonly SV).
6428 Perl_sv_unref_flags(pTHX_ SV *sv, U32 flags)
6432 if (SvWEAKREF(sv)) {
6440 if (SvREFCNT(rv) != 1 || SvREADONLY(rv) || flags) /* SV_IMMEDIATE_UNREF */
6442 else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
6443 sv_2mortal(rv); /* Schedule for freeing later */
6447 =for apidoc sv_unref
6449 Unsets the RV status of the SV, and decrements the reference count of
6450 whatever was being referenced by the RV. This can almost be thought of
6451 as a reversal of C<newSVrv>. This is C<sv_unref_flags> with the C<flag>
6452 being zero. See C<SvROK_off>.
6458 Perl_sv_unref(pTHX_ SV *sv)
6460 sv_unref_flags(sv, 0);
6464 Perl_sv_taint(pTHX_ SV *sv)
6466 sv_magic((sv), Nullsv, 't', Nullch, 0);
6470 Perl_sv_untaint(pTHX_ SV *sv)
6472 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
6473 MAGIC *mg = mg_find(sv, 't');
6480 Perl_sv_tainted(pTHX_ SV *sv)
6482 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
6483 MAGIC *mg = mg_find(sv, 't');
6484 if (mg && ((mg->mg_len & 1) || ((mg->mg_len & 2) && mg->mg_obj == sv)))
6491 =for apidoc sv_setpviv
6493 Copies an integer into the given SV, also updating its string value.
6494 Does not handle 'set' magic. See C<sv_setpviv_mg>.
6500 Perl_sv_setpviv(pTHX_ SV *sv, IV iv)
6502 char buf[TYPE_CHARS(UV)];
6504 char *ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
6506 sv_setpvn(sv, ptr, ebuf - ptr);
6511 =for apidoc sv_setpviv_mg
6513 Like C<sv_setpviv>, but also handles 'set' magic.
6519 Perl_sv_setpviv_mg(pTHX_ SV *sv, IV iv)
6521 char buf[TYPE_CHARS(UV)];
6523 char *ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
6525 sv_setpvn(sv, ptr, ebuf - ptr);
6529 #if defined(PERL_IMPLICIT_CONTEXT)
6531 Perl_sv_setpvf_nocontext(SV *sv, const char* pat, ...)
6535 va_start(args, pat);
6536 sv_vsetpvf(sv, pat, &args);
6542 Perl_sv_setpvf_mg_nocontext(SV *sv, const char* pat, ...)
6546 va_start(args, pat);
6547 sv_vsetpvf_mg(sv, pat, &args);
6553 =for apidoc sv_setpvf
6555 Processes its arguments like C<sprintf> and sets an SV to the formatted
6556 output. Does not handle 'set' magic. See C<sv_setpvf_mg>.
6562 Perl_sv_setpvf(pTHX_ SV *sv, const char* pat, ...)
6565 va_start(args, pat);
6566 sv_vsetpvf(sv, pat, &args);
6571 Perl_sv_vsetpvf(pTHX_ SV *sv, const char* pat, va_list* args)
6573 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6577 =for apidoc sv_setpvf_mg
6579 Like C<sv_setpvf>, but also handles 'set' magic.
6585 Perl_sv_setpvf_mg(pTHX_ SV *sv, const char* pat, ...)
6588 va_start(args, pat);
6589 sv_vsetpvf_mg(sv, pat, &args);
6594 Perl_sv_vsetpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
6596 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6600 #if defined(PERL_IMPLICIT_CONTEXT)
6602 Perl_sv_catpvf_nocontext(SV *sv, const char* pat, ...)
6606 va_start(args, pat);
6607 sv_vcatpvf(sv, pat, &args);
6612 Perl_sv_catpvf_mg_nocontext(SV *sv, const char* pat, ...)
6616 va_start(args, pat);
6617 sv_vcatpvf_mg(sv, pat, &args);
6623 =for apidoc sv_catpvf
6625 Processes its arguments like C<sprintf> and appends the formatted output
6626 to an SV. Handles 'get' magic, but not 'set' magic. C<SvSETMAGIC()> must
6627 typically be called after calling this function to handle 'set' magic.
6633 Perl_sv_catpvf(pTHX_ SV *sv, const char* pat, ...)
6636 va_start(args, pat);
6637 sv_vcatpvf(sv, pat, &args);
6642 Perl_sv_vcatpvf(pTHX_ SV *sv, const char* pat, va_list* args)
6644 sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6648 =for apidoc sv_catpvf_mg
6650 Like C<sv_catpvf>, but also handles 'set' magic.
6656 Perl_sv_catpvf_mg(pTHX_ SV *sv, const char* pat, ...)
6659 va_start(args, pat);
6660 sv_vcatpvf_mg(sv, pat, &args);
6665 Perl_sv_vcatpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
6667 sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6672 =for apidoc sv_vsetpvfn
6674 Works like C<vcatpvfn> but copies the text into the SV instead of
6681 Perl_sv_vsetpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
6683 sv_setpvn(sv, "", 0);
6684 sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, maybe_tainted);
6688 =for apidoc sv_vcatpvfn
6690 Processes its arguments like C<vsprintf> and appends the formatted output
6691 to an SV. Uses an array of SVs if the C style variable argument list is
6692 missing (NULL). When running with taint checks enabled, indicates via
6693 C<maybe_tainted> if results are untrustworthy (often due to the use of
6700 Perl_sv_vcatpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
6707 static char nullstr[] = "(null)";
6710 /* no matter what, this is a string now */
6711 (void)SvPV_force(sv, origlen);
6713 /* special-case "", "%s", and "%_" */
6716 if (patlen == 2 && pat[0] == '%') {
6720 char *s = va_arg(*args, char*);
6721 sv_catpv(sv, s ? s : nullstr);
6723 else if (svix < svmax) {
6724 sv_catsv(sv, *svargs);
6725 if (DO_UTF8(*svargs))
6731 argsv = va_arg(*args, SV*);
6732 sv_catsv(sv, argsv);
6737 /* See comment on '_' below */
6742 patend = (char*)pat + patlen;
6743 for (p = (char*)pat; p < patend; p = q) {
6746 bool vectorize = FALSE;
6753 bool has_precis = FALSE;
6755 bool is_utf = FALSE;
6758 U8 utf8buf[UTF8_MAXLEN+1];
6759 STRLEN esignlen = 0;
6761 char *eptr = Nullch;
6763 /* Times 4: a decimal digit takes more than 3 binary digits.
6764 * NV_DIG: mantissa takes than many decimal digits.
6765 * Plus 32: Playing safe. */
6766 char ebuf[IV_DIG * 4 + NV_DIG + 32];
6767 /* large enough for "%#.#f" --chip */
6768 /* what about long double NVs? --jhi */
6771 U8 *vecstr = Null(U8*);
6783 STRLEN dotstrlen = 1;
6784 I32 epix = 0; /* explicit parameter index */
6785 I32 ewix = 0; /* explicit width index */
6786 bool asterisk = FALSE;
6788 for (q = p; q < patend && *q != '%'; ++q) ;
6790 sv_catpvn(sv, p, q - p);
6819 case '*': /* printf("%*vX",":",$ipv6addr) */
6824 vecsv = va_arg(*args, SV*);
6825 else if (svix < svmax)
6826 vecsv = svargs[svix++];
6829 dotstr = SvPVx(vecsv,dotstrlen);
6857 case '1': case '2': case '3':
6858 case '4': case '5': case '6':
6859 case '7': case '8': case '9':
6862 width = width * 10 + (*q++ - '0');
6864 if (asterisk && ewix == 0) {
6869 } else if (epix == 0) {
6881 i = va_arg(*args, int);
6883 i = (ewix ? ewix <= svmax : svix < svmax) ?
6884 SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
6886 width = (i < 0) ? -i : i;
6895 i = va_arg(*args, int);
6897 i = (ewix ? ewix <= svmax : svix < svmax)
6898 ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
6899 precis = (i < 0) ? 0 : i;
6905 precis = precis * 10 + (*q++ - '0');
6912 vecsv = va_arg(*args, SV*);
6913 vecstr = (U8*)SvPVx(vecsv,veclen);
6914 utf = DO_UTF8(vecsv);
6916 else if (epix ? epix <= svmax : svix < svmax) {
6917 vecsv = svargs[epix ? epix-1 : svix++];
6918 vecstr = (U8*)SvPVx(vecsv,veclen);
6919 utf = DO_UTF8(vecsv);
6930 #if defined(HAS_QUAD) || (defined(HAS_LONG_DOUBLE) && defined(USE_LONG_DOUBLE))
6941 #if defined(HAS_QUAD) || (defined(HAS_LONG_DOUBLE) && defined(USE_LONG_DOUBLE))
6942 if (*(q + 1) == 'l') { /* lld, llf */
6969 uv = va_arg(*args, int);
6971 uv = (epix ? epix <= svmax : svix < svmax) ?
6972 SvIVx(svargs[epix ? epix-1 : svix++]) : 0;
6973 if ((uv > 255 || (uv > 127 && SvUTF8(sv))) && !IN_BYTE) {
6974 eptr = (char*)utf8buf;
6975 elen = uv_to_utf8((U8*)eptr, uv) - utf8buf;
6987 eptr = va_arg(*args, char*);
6989 #ifdef MACOS_TRADITIONAL
6990 /* On MacOS, %#s format is used for Pascal strings */
6995 elen = strlen(eptr);
6998 elen = sizeof nullstr - 1;
7001 else if (epix ? epix <= svmax : svix < svmax) {
7002 argsv = svargs[epix ? epix-1 : svix++];
7003 eptr = SvPVx(argsv, elen);
7004 if (DO_UTF8(argsv)) {
7005 if (has_precis && precis < elen) {
7007 sv_pos_u2b(argsv, &p, 0); /* sticks at end */
7010 if (width) { /* fudge width (can't fudge elen) */
7011 width += elen - sv_len_utf8(argsv);
7020 * The "%_" hack might have to be changed someday,
7021 * if ISO or ANSI decide to use '_' for something.
7022 * So we keep it hidden from users' code.
7026 argsv = va_arg(*args,SV*);
7027 eptr = SvPVx(argsv, elen);
7033 if (has_precis && elen > precis)
7043 uv = PTR2UV(va_arg(*args, void*));
7045 uv = (epix ? epix <= svmax : svix < svmax) ?
7046 PTR2UV(svargs[epix ? epix-1 : svix++]) : 0;
7066 iv = (IV)utf8_to_uv(vecstr, veclen, &ulen, 0);
7076 case 'h': iv = (short)va_arg(*args, int); break;
7077 default: iv = va_arg(*args, int); break;
7078 case 'l': iv = va_arg(*args, long); break;
7079 case 'V': iv = va_arg(*args, IV); break;
7081 case 'q': iv = va_arg(*args, Quad_t); break;
7086 iv = (epix ? epix <= svmax : svix < svmax) ?
7087 SvIVx(svargs[epix ? epix-1 : svix++]) : 0;
7089 case 'h': iv = (short)iv; break;
7091 case 'l': iv = (long)iv; break;
7094 case 'q': iv = (Quad_t)iv; break;
7101 esignbuf[esignlen++] = plus;
7105 esignbuf[esignlen++] = '-';
7149 uv = utf8_to_uv(vecstr, veclen, &ulen, 0);
7159 case 'h': uv = (unsigned short)va_arg(*args, unsigned); break;
7160 default: uv = va_arg(*args, unsigned); break;
7161 case 'l': uv = va_arg(*args, unsigned long); break;
7162 case 'V': uv = va_arg(*args, UV); break;
7164 case 'q': uv = va_arg(*args, Quad_t); break;
7169 uv = (epix ? epix <= svmax : svix < svmax) ?
7170 SvUVx(svargs[epix ? epix-1 : svix++]) : 0;
7172 case 'h': uv = (unsigned short)uv; break;
7174 case 'l': uv = (unsigned long)uv; break;
7177 case 'q': uv = (Quad_t)uv; break;
7183 eptr = ebuf + sizeof ebuf;
7189 p = (char*)((c == 'X')
7190 ? "0123456789ABCDEF" : "0123456789abcdef");
7196 esignbuf[esignlen++] = '0';
7197 esignbuf[esignlen++] = c; /* 'x' or 'X' */
7203 *--eptr = '0' + dig;
7205 if (alt && *eptr != '0')
7211 *--eptr = '0' + dig;
7214 esignbuf[esignlen++] = '0';
7215 esignbuf[esignlen++] = 'b';
7218 default: /* it had better be ten or less */
7219 #if defined(PERL_Y2KWARN)
7220 if (ckWARN(WARN_Y2K)) {
7222 char *s = SvPV(sv,n);
7223 if (n >= 2 && s[n-2] == '1' && s[n-1] == '9'
7224 && (n == 2 || !isDIGIT(s[n-3])))
7226 Perl_warner(aTHX_ WARN_Y2K,
7227 "Possible Y2K bug: %%%c %s",
7228 c, "format string following '19'");
7234 *--eptr = '0' + dig;
7235 } while (uv /= base);
7238 elen = (ebuf + sizeof ebuf) - eptr;
7241 zeros = precis - elen;
7242 else if (precis == 0 && elen == 1 && *eptr == '0')
7247 /* FLOATING POINT */
7250 c = 'f'; /* maybe %F isn't supported here */
7256 /* This is evil, but floating point is even more evil */
7260 nv = va_arg(*args, NV);
7262 nv = (epix ? epix <= svmax : svix < svmax) ?
7263 SvNVx(svargs[epix ? epix-1 : svix++]) : 0.0;
7266 if (c != 'e' && c != 'E') {
7268 (void)Perl_frexp(nv, &i);
7269 if (i == PERL_INT_MIN)
7270 Perl_die(aTHX_ "panic: frexp");
7272 need = BIT_DIGITS(i);
7274 need += has_precis ? precis : 6; /* known default */
7278 need += 20; /* fudge factor */
7279 if (PL_efloatsize < need) {
7280 Safefree(PL_efloatbuf);
7281 PL_efloatsize = need + 20; /* more fudge */
7282 New(906, PL_efloatbuf, PL_efloatsize, char);
7283 PL_efloatbuf[0] = '\0';
7286 eptr = ebuf + sizeof ebuf;
7289 #if defined(USE_LONG_DOUBLE) && defined(PERL_PRIfldbl)
7291 /* Copy the one or more characters in a long double
7292 * format before the 'base' ([efgEFG]) character to
7293 * the format string. */
7294 static char const prifldbl[] = PERL_PRIfldbl;
7295 char const *p = prifldbl + sizeof(prifldbl) - 3;
7296 while (p >= prifldbl) { *--eptr = *p--; }
7301 do { *--eptr = '0' + (base % 10); } while (base /= 10);
7306 do { *--eptr = '0' + (base % 10); } while (base /= 10);
7318 /* No taint. Otherwise we are in the strange situation
7319 * where printf() taints but print($float) doesn't.
7321 (void)sprintf(PL_efloatbuf, eptr, nv);
7323 eptr = PL_efloatbuf;
7324 elen = strlen(PL_efloatbuf);
7331 i = SvCUR(sv) - origlen;
7334 case 'h': *(va_arg(*args, short*)) = i; break;
7335 default: *(va_arg(*args, int*)) = i; break;
7336 case 'l': *(va_arg(*args, long*)) = i; break;
7337 case 'V': *(va_arg(*args, IV*)) = i; break;
7339 case 'q': *(va_arg(*args, Quad_t*)) = i; break;
7343 else if (epix ? epix <= svmax : svix < svmax)
7344 sv_setuv_mg(svargs[epix ? epix-1 : svix++], (UV)i);
7345 continue; /* not "break" */
7352 if (!args && ckWARN(WARN_PRINTF) &&
7353 (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)) {
7354 SV *msg = sv_newmortal();
7355 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %s: ",
7356 (PL_op->op_type == OP_PRTF) ? "printf" : "sprintf");
7359 Perl_sv_catpvf(aTHX_ msg,
7360 "\"%%%c\"", c & 0xFF);
7362 Perl_sv_catpvf(aTHX_ msg,
7363 "\"%%\\%03"UVof"\"",
7366 sv_catpv(msg, "end of string");
7367 Perl_warner(aTHX_ WARN_PRINTF, "%"SVf, msg); /* yes, this is reentrant */
7370 /* output mangled stuff ... */
7376 /* ... right here, because formatting flags should not apply */
7377 SvGROW(sv, SvCUR(sv) + elen + 1);
7379 memcpy(p, eptr, elen);
7382 SvCUR(sv) = p - SvPVX(sv);
7383 continue; /* not "break" */
7386 have = esignlen + zeros + elen;
7387 need = (have > width ? have : width);
7390 SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
7392 if (esignlen && fill == '0') {
7393 for (i = 0; i < esignlen; i++)
7397 memset(p, fill, gap);
7400 if (esignlen && fill != '0') {
7401 for (i = 0; i < esignlen; i++)
7405 for (i = zeros; i; i--)
7409 memcpy(p, eptr, elen);
7413 memset(p, ' ', gap);
7418 memcpy(p, dotstr, dotstrlen);
7422 vectorize = FALSE; /* done iterating over vecstr */
7427 SvCUR(sv) = p - SvPVX(sv);
7435 #if defined(USE_ITHREADS)
7437 #if defined(USE_THREADS)
7438 # include "error: USE_THREADS and USE_ITHREADS are incompatible"
7441 #ifndef GpREFCNT_inc
7442 # define GpREFCNT_inc(gp) ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
7446 #define sv_dup_inc(s) SvREFCNT_inc(sv_dup(s))
7447 #define av_dup(s) (AV*)sv_dup((SV*)s)
7448 #define av_dup_inc(s) (AV*)SvREFCNT_inc(sv_dup((SV*)s))
7449 #define hv_dup(s) (HV*)sv_dup((SV*)s)
7450 #define hv_dup_inc(s) (HV*)SvREFCNT_inc(sv_dup((SV*)s))
7451 #define cv_dup(s) (CV*)sv_dup((SV*)s)
7452 #define cv_dup_inc(s) (CV*)SvREFCNT_inc(sv_dup((SV*)s))
7453 #define io_dup(s) (IO*)sv_dup((SV*)s)
7454 #define io_dup_inc(s) (IO*)SvREFCNT_inc(sv_dup((SV*)s))
7455 #define gv_dup(s) (GV*)sv_dup((SV*)s)
7456 #define gv_dup_inc(s) (GV*)SvREFCNT_inc(sv_dup((SV*)s))
7457 #define SAVEPV(p) (p ? savepv(p) : Nullch)
7458 #define SAVEPVN(p,n) (p ? savepvn(p,n) : Nullch)
7461 Perl_re_dup(pTHX_ REGEXP *r)
7463 /* XXX fix when pmop->op_pmregexp becomes shared */
7464 return ReREFCNT_inc(r);
7468 Perl_fp_dup(pTHX_ PerlIO *fp, char type)
7472 return (PerlIO*)NULL;
7474 /* look for it in the table first */
7475 ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
7479 /* create anew and remember what it is */
7480 ret = PerlIO_fdupopen(aTHX_ fp);
7481 ptr_table_store(PL_ptr_table, fp, ret);
7486 Perl_dirp_dup(pTHX_ DIR *dp)
7495 Perl_gp_dup(pTHX_ GP *gp)
7500 /* look for it in the table first */
7501 ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
7505 /* create anew and remember what it is */
7506 Newz(0, ret, 1, GP);
7507 ptr_table_store(PL_ptr_table, gp, ret);
7510 ret->gp_refcnt = 0; /* must be before any other dups! */
7511 ret->gp_sv = sv_dup_inc(gp->gp_sv);
7512 ret->gp_io = io_dup_inc(gp->gp_io);
7513 ret->gp_form = cv_dup_inc(gp->gp_form);
7514 ret->gp_av = av_dup_inc(gp->gp_av);
7515 ret->gp_hv = hv_dup_inc(gp->gp_hv);
7516 ret->gp_egv = gv_dup(gp->gp_egv); /* GvEGV is not refcounted */
7517 ret->gp_cv = cv_dup_inc(gp->gp_cv);
7518 ret->gp_cvgen = gp->gp_cvgen;
7519 ret->gp_flags = gp->gp_flags;
7520 ret->gp_line = gp->gp_line;
7521 ret->gp_file = gp->gp_file; /* points to COP.cop_file */
7526 Perl_mg_dup(pTHX_ MAGIC *mg)
7528 MAGIC *mgret = (MAGIC*)NULL;
7531 return (MAGIC*)NULL;
7532 /* look for it in the table first */
7533 mgret = (MAGIC*)ptr_table_fetch(PL_ptr_table, mg);
7537 for (; mg; mg = mg->mg_moremagic) {
7539 Newz(0, nmg, 1, MAGIC);
7543 mgprev->mg_moremagic = nmg;
7544 nmg->mg_virtual = mg->mg_virtual; /* XXX copy dynamic vtable? */
7545 nmg->mg_private = mg->mg_private;
7546 nmg->mg_type = mg->mg_type;
7547 nmg->mg_flags = mg->mg_flags;
7548 if (mg->mg_type == 'r') {
7549 nmg->mg_obj = (SV*)re_dup((REGEXP*)mg->mg_obj);
7552 nmg->mg_obj = (mg->mg_flags & MGf_REFCOUNTED)
7553 ? sv_dup_inc(mg->mg_obj)
7554 : sv_dup(mg->mg_obj);
7556 nmg->mg_len = mg->mg_len;
7557 nmg->mg_ptr = mg->mg_ptr; /* XXX random ptr? */
7558 if (mg->mg_ptr && mg->mg_type != 'g') {
7559 if (mg->mg_len >= 0) {
7560 nmg->mg_ptr = SAVEPVN(mg->mg_ptr, mg->mg_len);
7561 if (mg->mg_type == 'c' && AMT_AMAGIC((AMT*)mg->mg_ptr)) {
7562 AMT *amtp = (AMT*)mg->mg_ptr;
7563 AMT *namtp = (AMT*)nmg->mg_ptr;
7565 for (i = 1; i < NofAMmeth; i++) {
7566 namtp->table[i] = cv_dup_inc(amtp->table[i]);
7570 else if (mg->mg_len == HEf_SVKEY)
7571 nmg->mg_ptr = (char*)sv_dup_inc((SV*)mg->mg_ptr);
7579 Perl_ptr_table_new(pTHX)
7582 Newz(0, tbl, 1, PTR_TBL_t);
7585 Newz(0, tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
7590 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *tbl, void *sv)
7592 PTR_TBL_ENT_t *tblent;
7593 UV hash = PTR2UV(sv);
7595 tblent = tbl->tbl_ary[hash & tbl->tbl_max];
7596 for (; tblent; tblent = tblent->next) {
7597 if (tblent->oldval == sv)
7598 return tblent->newval;
7604 Perl_ptr_table_store(pTHX_ PTR_TBL_t *tbl, void *oldv, void *newv)
7606 PTR_TBL_ENT_t *tblent, **otblent;
7607 /* XXX this may be pessimal on platforms where pointers aren't good
7608 * hash values e.g. if they grow faster in the most significant
7610 UV hash = PTR2UV(oldv);
7614 otblent = &tbl->tbl_ary[hash & tbl->tbl_max];
7615 for (tblent = *otblent; tblent; i=0, tblent = tblent->next) {
7616 if (tblent->oldval == oldv) {
7617 tblent->newval = newv;
7622 Newz(0, tblent, 1, PTR_TBL_ENT_t);
7623 tblent->oldval = oldv;
7624 tblent->newval = newv;
7625 tblent->next = *otblent;
7628 if (i && tbl->tbl_items > tbl->tbl_max)
7629 ptr_table_split(tbl);
7633 Perl_ptr_table_split(pTHX_ PTR_TBL_t *tbl)
7635 PTR_TBL_ENT_t **ary = tbl->tbl_ary;
7636 UV oldsize = tbl->tbl_max + 1;
7637 UV newsize = oldsize * 2;
7640 Renew(ary, newsize, PTR_TBL_ENT_t*);
7641 Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
7642 tbl->tbl_max = --newsize;
7644 for (i=0; i < oldsize; i++, ary++) {
7645 PTR_TBL_ENT_t **curentp, **entp, *ent;
7648 curentp = ary + oldsize;
7649 for (entp = ary, ent = *ary; ent; ent = *entp) {
7650 if ((newsize & PTR2UV(ent->oldval)) != i) {
7652 ent->next = *curentp;
7667 Perl_sv_dup(pTHX_ SV *sstr)
7671 if (!sstr || SvTYPE(sstr) == SVTYPEMASK)
7673 /* look for it in the table first */
7674 dstr = (SV*)ptr_table_fetch(PL_ptr_table, sstr);
7678 /* create anew and remember what it is */
7680 ptr_table_store(PL_ptr_table, sstr, dstr);
7683 SvFLAGS(dstr) = SvFLAGS(sstr);
7684 SvFLAGS(dstr) &= ~SVf_OOK; /* don't propagate OOK hack */
7685 SvREFCNT(dstr) = 0; /* must be before any other dups! */
7688 if (SvANY(sstr) && PL_watch_pvx && SvPVX(sstr) == PL_watch_pvx)
7689 PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
7690 PL_watch_pvx, SvPVX(sstr));
7693 switch (SvTYPE(sstr)) {
7698 SvANY(dstr) = new_XIV();
7699 SvIVX(dstr) = SvIVX(sstr);
7702 SvANY(dstr) = new_XNV();
7703 SvNVX(dstr) = SvNVX(sstr);
7706 SvANY(dstr) = new_XRV();
7707 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7710 SvANY(dstr) = new_XPV();
7711 SvCUR(dstr) = SvCUR(sstr);
7712 SvLEN(dstr) = SvLEN(sstr);
7714 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7715 else if (SvPVX(sstr) && SvLEN(sstr))
7716 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7718 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7721 SvANY(dstr) = new_XPVIV();
7722 SvCUR(dstr) = SvCUR(sstr);
7723 SvLEN(dstr) = SvLEN(sstr);
7724 SvIVX(dstr) = SvIVX(sstr);
7726 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7727 else if (SvPVX(sstr) && SvLEN(sstr))
7728 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7730 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7733 SvANY(dstr) = new_XPVNV();
7734 SvCUR(dstr) = SvCUR(sstr);
7735 SvLEN(dstr) = SvLEN(sstr);
7736 SvIVX(dstr) = SvIVX(sstr);
7737 SvNVX(dstr) = SvNVX(sstr);
7739 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7740 else if (SvPVX(sstr) && SvLEN(sstr))
7741 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7743 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7746 SvANY(dstr) = new_XPVMG();
7747 SvCUR(dstr) = SvCUR(sstr);
7748 SvLEN(dstr) = SvLEN(sstr);
7749 SvIVX(dstr) = SvIVX(sstr);
7750 SvNVX(dstr) = SvNVX(sstr);
7751 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7752 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7754 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7755 else if (SvPVX(sstr) && SvLEN(sstr))
7756 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7758 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7761 SvANY(dstr) = new_XPVBM();
7762 SvCUR(dstr) = SvCUR(sstr);
7763 SvLEN(dstr) = SvLEN(sstr);
7764 SvIVX(dstr) = SvIVX(sstr);
7765 SvNVX(dstr) = SvNVX(sstr);
7766 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7767 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7769 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7770 else if (SvPVX(sstr) && SvLEN(sstr))
7771 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7773 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7774 BmRARE(dstr) = BmRARE(sstr);
7775 BmUSEFUL(dstr) = BmUSEFUL(sstr);
7776 BmPREVIOUS(dstr)= BmPREVIOUS(sstr);
7779 SvANY(dstr) = new_XPVLV();
7780 SvCUR(dstr) = SvCUR(sstr);
7781 SvLEN(dstr) = SvLEN(sstr);
7782 SvIVX(dstr) = SvIVX(sstr);
7783 SvNVX(dstr) = SvNVX(sstr);
7784 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7785 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7787 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7788 else if (SvPVX(sstr) && SvLEN(sstr))
7789 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7791 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7792 LvTARGOFF(dstr) = LvTARGOFF(sstr); /* XXX sometimes holds PMOP* when DEBUGGING */
7793 LvTARGLEN(dstr) = LvTARGLEN(sstr);
7794 LvTARG(dstr) = sv_dup_inc(LvTARG(sstr));
7795 LvTYPE(dstr) = LvTYPE(sstr);
7798 SvANY(dstr) = new_XPVGV();
7799 SvCUR(dstr) = SvCUR(sstr);
7800 SvLEN(dstr) = SvLEN(sstr);
7801 SvIVX(dstr) = SvIVX(sstr);
7802 SvNVX(dstr) = SvNVX(sstr);
7803 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7804 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7806 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7807 else if (SvPVX(sstr) && SvLEN(sstr))
7808 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7810 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7811 GvNAMELEN(dstr) = GvNAMELEN(sstr);
7812 GvNAME(dstr) = SAVEPVN(GvNAME(sstr), GvNAMELEN(sstr));
7813 GvSTASH(dstr) = hv_dup_inc(GvSTASH(sstr));
7814 GvFLAGS(dstr) = GvFLAGS(sstr);
7815 GvGP(dstr) = gp_dup(GvGP(sstr));
7816 (void)GpREFCNT_inc(GvGP(dstr));
7819 SvANY(dstr) = new_XPVIO();
7820 SvCUR(dstr) = SvCUR(sstr);
7821 SvLEN(dstr) = SvLEN(sstr);
7822 SvIVX(dstr) = SvIVX(sstr);
7823 SvNVX(dstr) = SvNVX(sstr);
7824 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7825 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7827 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7828 else if (SvPVX(sstr) && SvLEN(sstr))
7829 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7831 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7832 IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(sstr));
7833 if (IoOFP(sstr) == IoIFP(sstr))
7834 IoOFP(dstr) = IoIFP(dstr);
7836 IoOFP(dstr) = fp_dup(IoOFP(sstr), IoTYPE(sstr));
7837 /* PL_rsfp_filters entries have fake IoDIRP() */
7838 if (IoDIRP(sstr) && !(IoFLAGS(sstr) & IOf_FAKE_DIRP))
7839 IoDIRP(dstr) = dirp_dup(IoDIRP(sstr));
7841 IoDIRP(dstr) = IoDIRP(sstr);
7842 IoLINES(dstr) = IoLINES(sstr);
7843 IoPAGE(dstr) = IoPAGE(sstr);
7844 IoPAGE_LEN(dstr) = IoPAGE_LEN(sstr);
7845 IoLINES_LEFT(dstr) = IoLINES_LEFT(sstr);
7846 IoTOP_NAME(dstr) = SAVEPV(IoTOP_NAME(sstr));
7847 IoTOP_GV(dstr) = gv_dup(IoTOP_GV(sstr));
7848 IoFMT_NAME(dstr) = SAVEPV(IoFMT_NAME(sstr));
7849 IoFMT_GV(dstr) = gv_dup(IoFMT_GV(sstr));
7850 IoBOTTOM_NAME(dstr) = SAVEPV(IoBOTTOM_NAME(sstr));
7851 IoBOTTOM_GV(dstr) = gv_dup(IoBOTTOM_GV(sstr));
7852 IoSUBPROCESS(dstr) = IoSUBPROCESS(sstr);
7853 IoTYPE(dstr) = IoTYPE(sstr);
7854 IoFLAGS(dstr) = IoFLAGS(sstr);
7857 SvANY(dstr) = new_XPVAV();
7858 SvCUR(dstr) = SvCUR(sstr);
7859 SvLEN(dstr) = SvLEN(sstr);
7860 SvIVX(dstr) = SvIVX(sstr);
7861 SvNVX(dstr) = SvNVX(sstr);
7862 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7863 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7864 AvARYLEN((AV*)dstr) = sv_dup_inc(AvARYLEN((AV*)sstr));
7865 AvFLAGS((AV*)dstr) = AvFLAGS((AV*)sstr);
7866 if (AvARRAY((AV*)sstr)) {
7867 SV **dst_ary, **src_ary;
7868 SSize_t items = AvFILLp((AV*)sstr) + 1;
7870 src_ary = AvARRAY((AV*)sstr);
7871 Newz(0, dst_ary, AvMAX((AV*)sstr)+1, SV*);
7872 ptr_table_store(PL_ptr_table, src_ary, dst_ary);
7873 SvPVX(dstr) = (char*)dst_ary;
7874 AvALLOC((AV*)dstr) = dst_ary;
7875 if (AvREAL((AV*)sstr)) {
7877 *dst_ary++ = sv_dup_inc(*src_ary++);
7881 *dst_ary++ = sv_dup(*src_ary++);
7883 items = AvMAX((AV*)sstr) - AvFILLp((AV*)sstr);
7884 while (items-- > 0) {
7885 *dst_ary++ = &PL_sv_undef;
7889 SvPVX(dstr) = Nullch;
7890 AvALLOC((AV*)dstr) = (SV**)NULL;
7894 SvANY(dstr) = new_XPVHV();
7895 SvCUR(dstr) = SvCUR(sstr);
7896 SvLEN(dstr) = SvLEN(sstr);
7897 SvIVX(dstr) = SvIVX(sstr);
7898 SvNVX(dstr) = SvNVX(sstr);
7899 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7900 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7901 HvRITER((HV*)dstr) = HvRITER((HV*)sstr);
7902 if (HvARRAY((HV*)sstr)) {
7904 XPVHV *dxhv = (XPVHV*)SvANY(dstr);
7905 XPVHV *sxhv = (XPVHV*)SvANY(sstr);
7906 Newz(0, dxhv->xhv_array,
7907 PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1), char);
7908 while (i <= sxhv->xhv_max) {
7909 ((HE**)dxhv->xhv_array)[i] = he_dup(((HE**)sxhv->xhv_array)[i],
7910 !!HvSHAREKEYS(sstr));
7913 dxhv->xhv_eiter = he_dup(sxhv->xhv_eiter, !!HvSHAREKEYS(sstr));
7916 SvPVX(dstr) = Nullch;
7917 HvEITER((HV*)dstr) = (HE*)NULL;
7919 HvPMROOT((HV*)dstr) = HvPMROOT((HV*)sstr); /* XXX */
7920 HvNAME((HV*)dstr) = SAVEPV(HvNAME((HV*)sstr));
7923 SvANY(dstr) = new_XPVFM();
7924 FmLINES(dstr) = FmLINES(sstr);
7928 SvANY(dstr) = new_XPVCV();
7930 SvCUR(dstr) = SvCUR(sstr);
7931 SvLEN(dstr) = SvLEN(sstr);
7932 SvIVX(dstr) = SvIVX(sstr);
7933 SvNVX(dstr) = SvNVX(sstr);
7934 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7935 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7936 if (SvPVX(sstr) && SvLEN(sstr))
7937 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7939 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7940 CvSTASH(dstr) = hv_dup(CvSTASH(sstr));/* NOTE: not refcounted */
7941 CvSTART(dstr) = CvSTART(sstr);
7942 CvROOT(dstr) = OpREFCNT_inc(CvROOT(sstr));
7943 CvXSUB(dstr) = CvXSUB(sstr);
7944 CvXSUBANY(dstr) = CvXSUBANY(sstr);
7945 CvGV(dstr) = gv_dup_inc(CvGV(sstr));
7946 CvDEPTH(dstr) = CvDEPTH(sstr);
7947 if (CvPADLIST(sstr) && !AvREAL(CvPADLIST(sstr))) {
7948 /* XXX padlists are real, but pretend to be not */
7949 AvREAL_on(CvPADLIST(sstr));
7950 CvPADLIST(dstr) = av_dup_inc(CvPADLIST(sstr));
7951 AvREAL_off(CvPADLIST(sstr));
7952 AvREAL_off(CvPADLIST(dstr));
7955 CvPADLIST(dstr) = av_dup_inc(CvPADLIST(sstr));
7956 CvOUTSIDE(dstr) = cv_dup_inc(CvOUTSIDE(sstr));
7957 CvFLAGS(dstr) = CvFLAGS(sstr);
7960 Perl_croak(aTHX_ "Bizarre SvTYPE [%d]", SvTYPE(sstr));
7964 if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
7971 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max)
7976 return (PERL_CONTEXT*)NULL;
7978 /* look for it in the table first */
7979 ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
7983 /* create anew and remember what it is */
7984 Newz(56, ncxs, max + 1, PERL_CONTEXT);
7985 ptr_table_store(PL_ptr_table, cxs, ncxs);
7988 PERL_CONTEXT *cx = &cxs[ix];
7989 PERL_CONTEXT *ncx = &ncxs[ix];
7990 ncx->cx_type = cx->cx_type;
7991 if (CxTYPE(cx) == CXt_SUBST) {
7992 Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
7995 ncx->blk_oldsp = cx->blk_oldsp;
7996 ncx->blk_oldcop = cx->blk_oldcop;
7997 ncx->blk_oldretsp = cx->blk_oldretsp;
7998 ncx->blk_oldmarksp = cx->blk_oldmarksp;
7999 ncx->blk_oldscopesp = cx->blk_oldscopesp;
8000 ncx->blk_oldpm = cx->blk_oldpm;
8001 ncx->blk_gimme = cx->blk_gimme;
8002 switch (CxTYPE(cx)) {
8004 ncx->blk_sub.cv = (cx->blk_sub.olddepth == 0
8005 ? cv_dup_inc(cx->blk_sub.cv)
8006 : cv_dup(cx->blk_sub.cv));
8007 ncx->blk_sub.argarray = (cx->blk_sub.hasargs
8008 ? av_dup_inc(cx->blk_sub.argarray)
8010 ncx->blk_sub.savearray = av_dup(cx->blk_sub.savearray);
8011 ncx->blk_sub.olddepth = cx->blk_sub.olddepth;
8012 ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
8013 ncx->blk_sub.lval = cx->blk_sub.lval;
8016 ncx->blk_eval.old_in_eval = cx->blk_eval.old_in_eval;
8017 ncx->blk_eval.old_op_type = cx->blk_eval.old_op_type;
8018 ncx->blk_eval.old_namesv = sv_dup_inc(cx->blk_eval.old_namesv);
8019 ncx->blk_eval.old_eval_root = cx->blk_eval.old_eval_root;
8020 ncx->blk_eval.cur_text = sv_dup(cx->blk_eval.cur_text);
8023 ncx->blk_loop.label = cx->blk_loop.label;
8024 ncx->blk_loop.resetsp = cx->blk_loop.resetsp;
8025 ncx->blk_loop.redo_op = cx->blk_loop.redo_op;
8026 ncx->blk_loop.next_op = cx->blk_loop.next_op;
8027 ncx->blk_loop.last_op = cx->blk_loop.last_op;
8028 ncx->blk_loop.iterdata = (CxPADLOOP(cx)
8029 ? cx->blk_loop.iterdata
8030 : gv_dup((GV*)cx->blk_loop.iterdata));
8031 ncx->blk_loop.oldcurpad
8032 = (SV**)ptr_table_fetch(PL_ptr_table,
8033 cx->blk_loop.oldcurpad);
8034 ncx->blk_loop.itersave = sv_dup_inc(cx->blk_loop.itersave);
8035 ncx->blk_loop.iterlval = sv_dup_inc(cx->blk_loop.iterlval);
8036 ncx->blk_loop.iterary = av_dup_inc(cx->blk_loop.iterary);
8037 ncx->blk_loop.iterix = cx->blk_loop.iterix;
8038 ncx->blk_loop.itermax = cx->blk_loop.itermax;
8041 ncx->blk_sub.cv = cv_dup(cx->blk_sub.cv);
8042 ncx->blk_sub.gv = gv_dup(cx->blk_sub.gv);
8043 ncx->blk_sub.dfoutgv = gv_dup_inc(cx->blk_sub.dfoutgv);
8044 ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
8057 Perl_si_dup(pTHX_ PERL_SI *si)
8062 return (PERL_SI*)NULL;
8064 /* look for it in the table first */
8065 nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
8069 /* create anew and remember what it is */
8070 Newz(56, nsi, 1, PERL_SI);
8071 ptr_table_store(PL_ptr_table, si, nsi);
8073 nsi->si_stack = av_dup_inc(si->si_stack);
8074 nsi->si_cxix = si->si_cxix;
8075 nsi->si_cxmax = si->si_cxmax;
8076 nsi->si_cxstack = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax);
8077 nsi->si_type = si->si_type;
8078 nsi->si_prev = si_dup(si->si_prev);
8079 nsi->si_next = si_dup(si->si_next);
8080 nsi->si_markoff = si->si_markoff;
8085 #define POPINT(ss,ix) ((ss)[--(ix)].any_i32)
8086 #define TOPINT(ss,ix) ((ss)[ix].any_i32)
8087 #define POPLONG(ss,ix) ((ss)[--(ix)].any_long)
8088 #define TOPLONG(ss,ix) ((ss)[ix].any_long)
8089 #define POPIV(ss,ix) ((ss)[--(ix)].any_iv)
8090 #define TOPIV(ss,ix) ((ss)[ix].any_iv)
8091 #define POPPTR(ss,ix) ((ss)[--(ix)].any_ptr)
8092 #define TOPPTR(ss,ix) ((ss)[ix].any_ptr)
8093 #define POPDPTR(ss,ix) ((ss)[--(ix)].any_dptr)
8094 #define TOPDPTR(ss,ix) ((ss)[ix].any_dptr)
8095 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
8096 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
8099 #define pv_dup_inc(p) SAVEPV(p)
8100 #define pv_dup(p) SAVEPV(p)
8101 #define svp_dup_inc(p,pp) any_dup(p,pp)
8104 Perl_any_dup(pTHX_ void *v, PerlInterpreter *proto_perl)
8111 /* look for it in the table first */
8112 ret = ptr_table_fetch(PL_ptr_table, v);
8116 /* see if it is part of the interpreter structure */
8117 if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
8118 ret = (void*)(((char*)aTHXo) + (((char*)v) - (char*)proto_perl));
8126 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl)
8128 ANY *ss = proto_perl->Tsavestack;
8129 I32 ix = proto_perl->Tsavestack_ix;
8130 I32 max = proto_perl->Tsavestack_max;
8143 void (*dptr) (void*);
8144 void (*dxptr) (pTHXo_ void*);
8147 Newz(54, nss, max, ANY);
8153 case SAVEt_ITEM: /* normal string */
8154 sv = (SV*)POPPTR(ss,ix);
8155 TOPPTR(nss,ix) = sv_dup_inc(sv);
8156 sv = (SV*)POPPTR(ss,ix);
8157 TOPPTR(nss,ix) = sv_dup_inc(sv);
8159 case SAVEt_SV: /* scalar reference */
8160 sv = (SV*)POPPTR(ss,ix);
8161 TOPPTR(nss,ix) = sv_dup_inc(sv);
8162 gv = (GV*)POPPTR(ss,ix);
8163 TOPPTR(nss,ix) = gv_dup_inc(gv);
8165 case SAVEt_GENERIC_PVREF: /* generic char* */
8166 c = (char*)POPPTR(ss,ix);
8167 TOPPTR(nss,ix) = pv_dup(c);
8168 ptr = POPPTR(ss,ix);
8169 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8171 case SAVEt_GENERIC_SVREF: /* generic sv */
8172 case SAVEt_SVREF: /* scalar reference */
8173 sv = (SV*)POPPTR(ss,ix);
8174 TOPPTR(nss,ix) = sv_dup_inc(sv);
8175 ptr = POPPTR(ss,ix);
8176 TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
8178 case SAVEt_AV: /* array reference */
8179 av = (AV*)POPPTR(ss,ix);
8180 TOPPTR(nss,ix) = av_dup_inc(av);
8181 gv = (GV*)POPPTR(ss,ix);
8182 TOPPTR(nss,ix) = gv_dup(gv);
8184 case SAVEt_HV: /* hash reference */
8185 hv = (HV*)POPPTR(ss,ix);
8186 TOPPTR(nss,ix) = hv_dup_inc(hv);
8187 gv = (GV*)POPPTR(ss,ix);
8188 TOPPTR(nss,ix) = gv_dup(gv);
8190 case SAVEt_INT: /* int reference */
8191 ptr = POPPTR(ss,ix);
8192 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8193 intval = (int)POPINT(ss,ix);
8194 TOPINT(nss,ix) = intval;
8196 case SAVEt_LONG: /* long reference */
8197 ptr = POPPTR(ss,ix);
8198 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8199 longval = (long)POPLONG(ss,ix);
8200 TOPLONG(nss,ix) = longval;
8202 case SAVEt_I32: /* I32 reference */
8203 case SAVEt_I16: /* I16 reference */
8204 case SAVEt_I8: /* I8 reference */
8205 ptr = POPPTR(ss,ix);
8206 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8210 case SAVEt_IV: /* IV reference */
8211 ptr = POPPTR(ss,ix);
8212 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8216 case SAVEt_SPTR: /* SV* reference */
8217 ptr = POPPTR(ss,ix);
8218 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8219 sv = (SV*)POPPTR(ss,ix);
8220 TOPPTR(nss,ix) = sv_dup(sv);
8222 case SAVEt_VPTR: /* random* reference */
8223 ptr = POPPTR(ss,ix);
8224 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8225 ptr = POPPTR(ss,ix);
8226 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8228 case SAVEt_PPTR: /* char* reference */
8229 ptr = POPPTR(ss,ix);
8230 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8231 c = (char*)POPPTR(ss,ix);
8232 TOPPTR(nss,ix) = pv_dup(c);
8234 case SAVEt_HPTR: /* HV* reference */
8235 ptr = POPPTR(ss,ix);
8236 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8237 hv = (HV*)POPPTR(ss,ix);
8238 TOPPTR(nss,ix) = hv_dup(hv);
8240 case SAVEt_APTR: /* AV* reference */
8241 ptr = POPPTR(ss,ix);
8242 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8243 av = (AV*)POPPTR(ss,ix);
8244 TOPPTR(nss,ix) = av_dup(av);
8247 gv = (GV*)POPPTR(ss,ix);
8248 TOPPTR(nss,ix) = gv_dup(gv);
8250 case SAVEt_GP: /* scalar reference */
8251 gp = (GP*)POPPTR(ss,ix);
8252 TOPPTR(nss,ix) = gp = gp_dup(gp);
8253 (void)GpREFCNT_inc(gp);
8254 gv = (GV*)POPPTR(ss,ix);
8255 TOPPTR(nss,ix) = gv_dup_inc(c);
8256 c = (char*)POPPTR(ss,ix);
8257 TOPPTR(nss,ix) = pv_dup(c);
8264 sv = (SV*)POPPTR(ss,ix);
8265 TOPPTR(nss,ix) = sv_dup_inc(sv);
8268 ptr = POPPTR(ss,ix);
8269 if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
8270 /* these are assumed to be refcounted properly */
8271 switch (((OP*)ptr)->op_type) {
8278 TOPPTR(nss,ix) = ptr;
8283 TOPPTR(nss,ix) = Nullop;
8288 TOPPTR(nss,ix) = Nullop;
8291 c = (char*)POPPTR(ss,ix);
8292 TOPPTR(nss,ix) = pv_dup_inc(c);
8295 longval = POPLONG(ss,ix);
8296 TOPLONG(nss,ix) = longval;
8299 hv = (HV*)POPPTR(ss,ix);
8300 TOPPTR(nss,ix) = hv_dup_inc(hv);
8301 c = (char*)POPPTR(ss,ix);
8302 TOPPTR(nss,ix) = pv_dup_inc(c);
8306 case SAVEt_DESTRUCTOR:
8307 ptr = POPPTR(ss,ix);
8308 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
8309 dptr = POPDPTR(ss,ix);
8310 TOPDPTR(nss,ix) = (void (*)(void*))any_dup((void *)dptr, proto_perl);
8312 case SAVEt_DESTRUCTOR_X:
8313 ptr = POPPTR(ss,ix);
8314 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
8315 dxptr = POPDXPTR(ss,ix);
8316 TOPDXPTR(nss,ix) = (void (*)(pTHXo_ void*))any_dup((void *)dxptr, proto_perl);
8318 case SAVEt_REGCONTEXT:
8324 case SAVEt_STACK_POS: /* Position on Perl stack */
8328 case SAVEt_AELEM: /* array element */
8329 sv = (SV*)POPPTR(ss,ix);
8330 TOPPTR(nss,ix) = sv_dup_inc(sv);
8333 av = (AV*)POPPTR(ss,ix);
8334 TOPPTR(nss,ix) = av_dup_inc(av);
8336 case SAVEt_HELEM: /* hash element */
8337 sv = (SV*)POPPTR(ss,ix);
8338 TOPPTR(nss,ix) = sv_dup_inc(sv);
8339 sv = (SV*)POPPTR(ss,ix);
8340 TOPPTR(nss,ix) = sv_dup_inc(sv);
8341 hv = (HV*)POPPTR(ss,ix);
8342 TOPPTR(nss,ix) = hv_dup_inc(hv);
8345 ptr = POPPTR(ss,ix);
8346 TOPPTR(nss,ix) = ptr;
8353 av = (AV*)POPPTR(ss,ix);
8354 TOPPTR(nss,ix) = av_dup(av);
8357 longval = (long)POPLONG(ss,ix);
8358 TOPLONG(nss,ix) = longval;
8359 ptr = POPPTR(ss,ix);
8360 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8361 sv = (SV*)POPPTR(ss,ix);
8362 TOPPTR(nss,ix) = sv_dup(sv);
8365 Perl_croak(aTHX_ "panic: ss_dup inconsistency");
8377 perl_clone(PerlInterpreter *proto_perl, UV flags)
8380 CPerlObj *pPerl = (CPerlObj*)proto_perl;
8383 #ifdef PERL_IMPLICIT_SYS
8384 return perl_clone_using(proto_perl, flags,
8386 proto_perl->IMemShared,
8387 proto_perl->IMemParse,
8397 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
8398 struct IPerlMem* ipM, struct IPerlMem* ipMS,
8399 struct IPerlMem* ipMP, struct IPerlEnv* ipE,
8400 struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
8401 struct IPerlDir* ipD, struct IPerlSock* ipS,
8402 struct IPerlProc* ipP)
8404 /* XXX many of the string copies here can be optimized if they're
8405 * constants; they need to be allocated as common memory and just
8406 * their pointers copied. */
8410 CPerlObj *pPerl = new(ipM) CPerlObj(ipM, ipMS, ipMP, ipE, ipStd, ipLIO,
8412 PERL_SET_THX(pPerl);
8413 # else /* !PERL_OBJECT */
8414 PerlInterpreter *my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
8415 PERL_SET_THX(my_perl);
8418 memset(my_perl, 0xab, sizeof(PerlInterpreter));
8423 # else /* !DEBUGGING */
8424 Zero(my_perl, 1, PerlInterpreter);
8425 # endif /* DEBUGGING */
8429 PL_MemShared = ipMS;
8437 # endif /* PERL_OBJECT */
8438 #else /* !PERL_IMPLICIT_SYS */
8440 PerlInterpreter *my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
8441 PERL_SET_THX(my_perl);
8444 memset(my_perl, 0xab, sizeof(PerlInterpreter));
8449 # else /* !DEBUGGING */
8450 Zero(my_perl, 1, PerlInterpreter);
8451 # endif /* DEBUGGING */
8452 #endif /* PERL_IMPLICIT_SYS */
8455 PL_xiv_arenaroot = NULL;
8457 PL_xnv_arenaroot = NULL;
8459 PL_xrv_arenaroot = NULL;
8461 PL_xpv_arenaroot = NULL;
8463 PL_xpviv_arenaroot = NULL;
8464 PL_xpviv_root = NULL;
8465 PL_xpvnv_arenaroot = NULL;
8466 PL_xpvnv_root = NULL;
8467 PL_xpvcv_arenaroot = NULL;
8468 PL_xpvcv_root = NULL;
8469 PL_xpvav_arenaroot = NULL;
8470 PL_xpvav_root = NULL;
8471 PL_xpvhv_arenaroot = NULL;
8472 PL_xpvhv_root = NULL;
8473 PL_xpvmg_arenaroot = NULL;
8474 PL_xpvmg_root = NULL;
8475 PL_xpvlv_arenaroot = NULL;
8476 PL_xpvlv_root = NULL;
8477 PL_xpvbm_arenaroot = NULL;
8478 PL_xpvbm_root = NULL;
8479 PL_he_arenaroot = NULL;
8481 PL_nice_chunk = NULL;
8482 PL_nice_chunk_size = 0;
8485 PL_sv_root = Nullsv;
8486 PL_sv_arenaroot = Nullsv;
8488 PL_debug = proto_perl->Idebug;
8490 /* create SV map for pointer relocation */
8491 PL_ptr_table = ptr_table_new();
8493 /* initialize these special pointers as early as possible */
8494 SvANY(&PL_sv_undef) = NULL;
8495 SvREFCNT(&PL_sv_undef) = (~(U32)0)/2;
8496 SvFLAGS(&PL_sv_undef) = SVf_READONLY|SVt_NULL;
8497 ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
8500 SvUPGRADE(&PL_sv_no, SVt_PVNV);
8502 SvANY(&PL_sv_no) = new_XPVNV();
8504 SvREFCNT(&PL_sv_no) = (~(U32)0)/2;
8505 SvFLAGS(&PL_sv_no) = SVp_NOK|SVf_NOK|SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
8506 SvPVX(&PL_sv_no) = SAVEPVN(PL_No, 0);
8507 SvCUR(&PL_sv_no) = 0;
8508 SvLEN(&PL_sv_no) = 1;
8509 SvNVX(&PL_sv_no) = 0;
8510 ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
8513 SvUPGRADE(&PL_sv_yes, SVt_PVNV);
8515 SvANY(&PL_sv_yes) = new_XPVNV();
8517 SvREFCNT(&PL_sv_yes) = (~(U32)0)/2;
8518 SvFLAGS(&PL_sv_yes) = SVp_NOK|SVf_NOK|SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
8519 SvPVX(&PL_sv_yes) = SAVEPVN(PL_Yes, 1);
8520 SvCUR(&PL_sv_yes) = 1;
8521 SvLEN(&PL_sv_yes) = 2;
8522 SvNVX(&PL_sv_yes) = 1;
8523 ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
8525 /* create shared string table */
8526 PL_strtab = newHV();
8527 HvSHAREKEYS_off(PL_strtab);
8528 hv_ksplit(PL_strtab, 512);
8529 ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
8531 PL_compiling = proto_perl->Icompiling;
8532 PL_compiling.cop_stashpv = SAVEPV(PL_compiling.cop_stashpv);
8533 PL_compiling.cop_file = SAVEPV(PL_compiling.cop_file);
8534 ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
8535 if (!specialWARN(PL_compiling.cop_warnings))
8536 PL_compiling.cop_warnings = sv_dup_inc(PL_compiling.cop_warnings);
8537 if (!specialCopIO(PL_compiling.cop_io))
8538 PL_compiling.cop_io = sv_dup_inc(PL_compiling.cop_io);
8539 PL_curcop = (COP*)any_dup(proto_perl->Tcurcop, proto_perl);
8541 /* pseudo environmental stuff */
8542 PL_origargc = proto_perl->Iorigargc;
8544 New(0, PL_origargv, i+1, char*);
8545 PL_origargv[i] = '\0';
8547 PL_origargv[i] = SAVEPV(proto_perl->Iorigargv[i]);
8549 PL_envgv = gv_dup(proto_perl->Ienvgv);
8550 PL_incgv = gv_dup(proto_perl->Iincgv);
8551 PL_hintgv = gv_dup(proto_perl->Ihintgv);
8552 PL_origfilename = SAVEPV(proto_perl->Iorigfilename);
8553 PL_diehook = sv_dup_inc(proto_perl->Idiehook);
8554 PL_warnhook = sv_dup_inc(proto_perl->Iwarnhook);
8557 PL_minus_c = proto_perl->Iminus_c;
8558 PL_patchlevel = sv_dup_inc(proto_perl->Ipatchlevel);
8559 PL_localpatches = proto_perl->Ilocalpatches;
8560 PL_splitstr = proto_perl->Isplitstr;
8561 PL_preprocess = proto_perl->Ipreprocess;
8562 PL_minus_n = proto_perl->Iminus_n;
8563 PL_minus_p = proto_perl->Iminus_p;
8564 PL_minus_l = proto_perl->Iminus_l;
8565 PL_minus_a = proto_perl->Iminus_a;
8566 PL_minus_F = proto_perl->Iminus_F;
8567 PL_doswitches = proto_perl->Idoswitches;
8568 PL_dowarn = proto_perl->Idowarn;
8569 PL_doextract = proto_perl->Idoextract;
8570 PL_sawampersand = proto_perl->Isawampersand;
8571 PL_unsafe = proto_perl->Iunsafe;
8572 PL_inplace = SAVEPV(proto_perl->Iinplace);
8573 PL_e_script = sv_dup_inc(proto_perl->Ie_script);
8574 PL_perldb = proto_perl->Iperldb;
8575 PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
8577 /* magical thingies */
8578 /* XXX time(&PL_basetime) when asked for? */
8579 PL_basetime = proto_perl->Ibasetime;
8580 PL_formfeed = sv_dup(proto_perl->Iformfeed);
8582 PL_maxsysfd = proto_perl->Imaxsysfd;
8583 PL_multiline = proto_perl->Imultiline;
8584 PL_statusvalue = proto_perl->Istatusvalue;
8586 PL_statusvalue_vms = proto_perl->Istatusvalue_vms;
8589 /* shortcuts to various I/O objects */
8590 PL_stdingv = gv_dup(proto_perl->Istdingv);
8591 PL_stderrgv = gv_dup(proto_perl->Istderrgv);
8592 PL_defgv = gv_dup(proto_perl->Idefgv);
8593 PL_argvgv = gv_dup(proto_perl->Iargvgv);
8594 PL_argvoutgv = gv_dup(proto_perl->Iargvoutgv);
8595 PL_argvout_stack = av_dup(proto_perl->Iargvout_stack);
8597 /* shortcuts to regexp stuff */
8598 PL_replgv = gv_dup(proto_perl->Ireplgv);
8600 /* shortcuts to misc objects */
8601 PL_errgv = gv_dup(proto_perl->Ierrgv);
8603 /* shortcuts to debugging objects */
8604 PL_DBgv = gv_dup(proto_perl->IDBgv);
8605 PL_DBline = gv_dup(proto_perl->IDBline);
8606 PL_DBsub = gv_dup(proto_perl->IDBsub);
8607 PL_DBsingle = sv_dup(proto_perl->IDBsingle);
8608 PL_DBtrace = sv_dup(proto_perl->IDBtrace);
8609 PL_DBsignal = sv_dup(proto_perl->IDBsignal);
8610 PL_lineary = av_dup(proto_perl->Ilineary);
8611 PL_dbargs = av_dup(proto_perl->Idbargs);
8614 PL_defstash = hv_dup_inc(proto_perl->Tdefstash);
8615 PL_curstash = hv_dup(proto_perl->Tcurstash);
8616 PL_debstash = hv_dup(proto_perl->Idebstash);
8617 PL_globalstash = hv_dup(proto_perl->Iglobalstash);
8618 PL_curstname = sv_dup_inc(proto_perl->Icurstname);
8620 PL_beginav = av_dup_inc(proto_perl->Ibeginav);
8621 PL_endav = av_dup_inc(proto_perl->Iendav);
8622 PL_checkav = av_dup_inc(proto_perl->Icheckav);
8623 PL_initav = av_dup_inc(proto_perl->Iinitav);
8625 PL_sub_generation = proto_perl->Isub_generation;
8627 /* funky return mechanisms */
8628 PL_forkprocess = proto_perl->Iforkprocess;
8630 /* subprocess state */
8631 PL_fdpid = av_dup_inc(proto_perl->Ifdpid);
8633 /* internal state */
8634 PL_tainting = proto_perl->Itainting;
8635 PL_maxo = proto_perl->Imaxo;
8636 if (proto_perl->Iop_mask)
8637 PL_op_mask = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
8639 PL_op_mask = Nullch;
8641 /* current interpreter roots */
8642 PL_main_cv = cv_dup_inc(proto_perl->Imain_cv);
8643 PL_main_root = OpREFCNT_inc(proto_perl->Imain_root);
8644 PL_main_start = proto_perl->Imain_start;
8645 PL_eval_root = proto_perl->Ieval_root;
8646 PL_eval_start = proto_perl->Ieval_start;
8648 /* runtime control stuff */
8649 PL_curcopdb = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
8650 PL_copline = proto_perl->Icopline;
8652 PL_filemode = proto_perl->Ifilemode;
8653 PL_lastfd = proto_perl->Ilastfd;
8654 PL_oldname = proto_perl->Ioldname; /* XXX not quite right */
8657 PL_gensym = proto_perl->Igensym;
8658 PL_preambled = proto_perl->Ipreambled;
8659 PL_preambleav = av_dup_inc(proto_perl->Ipreambleav);
8660 PL_laststatval = proto_perl->Ilaststatval;
8661 PL_laststype = proto_perl->Ilaststype;
8662 PL_mess_sv = Nullsv;
8664 PL_ors_sv = sv_dup_inc(proto_perl->Iors_sv);
8665 PL_ofmt = SAVEPV(proto_perl->Iofmt);
8667 /* interpreter atexit processing */
8668 PL_exitlistlen = proto_perl->Iexitlistlen;
8669 if (PL_exitlistlen) {
8670 New(0, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
8671 Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
8674 PL_exitlist = (PerlExitListEntry*)NULL;
8675 PL_modglobal = hv_dup_inc(proto_perl->Imodglobal);
8677 PL_profiledata = NULL;
8678 PL_rsfp = fp_dup(proto_perl->Irsfp, '<');
8679 /* PL_rsfp_filters entries have fake IoDIRP() */
8680 PL_rsfp_filters = av_dup_inc(proto_perl->Irsfp_filters);
8682 PL_compcv = cv_dup(proto_perl->Icompcv);
8683 PL_comppad = av_dup(proto_perl->Icomppad);
8684 PL_comppad_name = av_dup(proto_perl->Icomppad_name);
8685 PL_comppad_name_fill = proto_perl->Icomppad_name_fill;
8686 PL_comppad_name_floor = proto_perl->Icomppad_name_floor;
8687 PL_curpad = (SV**)ptr_table_fetch(PL_ptr_table,
8688 proto_perl->Tcurpad);
8690 #ifdef HAVE_INTERP_INTERN
8691 sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
8694 /* more statics moved here */
8695 PL_generation = proto_perl->Igeneration;
8696 PL_DBcv = cv_dup(proto_perl->IDBcv);
8698 PL_in_clean_objs = proto_perl->Iin_clean_objs;
8699 PL_in_clean_all = proto_perl->Iin_clean_all;
8701 PL_uid = proto_perl->Iuid;
8702 PL_euid = proto_perl->Ieuid;
8703 PL_gid = proto_perl->Igid;
8704 PL_egid = proto_perl->Iegid;
8705 PL_nomemok = proto_perl->Inomemok;
8706 PL_an = proto_perl->Ian;
8707 PL_cop_seqmax = proto_perl->Icop_seqmax;
8708 PL_op_seqmax = proto_perl->Iop_seqmax;
8709 PL_evalseq = proto_perl->Ievalseq;
8710 PL_origenviron = proto_perl->Iorigenviron; /* XXX not quite right */
8711 PL_origalen = proto_perl->Iorigalen;
8712 PL_pidstatus = newHV(); /* XXX flag for cloning? */
8713 PL_osname = SAVEPV(proto_perl->Iosname);
8714 PL_sh_path = SAVEPV(proto_perl->Ish_path);
8715 PL_sighandlerp = proto_perl->Isighandlerp;
8718 PL_runops = proto_perl->Irunops;
8720 Copy(proto_perl->Itokenbuf, PL_tokenbuf, 256, char);
8723 PL_cshlen = proto_perl->Icshlen;
8724 PL_cshname = SAVEPVN(proto_perl->Icshname, PL_cshlen);
8727 PL_lex_state = proto_perl->Ilex_state;
8728 PL_lex_defer = proto_perl->Ilex_defer;
8729 PL_lex_expect = proto_perl->Ilex_expect;
8730 PL_lex_formbrack = proto_perl->Ilex_formbrack;
8731 PL_lex_dojoin = proto_perl->Ilex_dojoin;
8732 PL_lex_starts = proto_perl->Ilex_starts;
8733 PL_lex_stuff = sv_dup_inc(proto_perl->Ilex_stuff);
8734 PL_lex_repl = sv_dup_inc(proto_perl->Ilex_repl);
8735 PL_lex_op = proto_perl->Ilex_op;
8736 PL_lex_inpat = proto_perl->Ilex_inpat;
8737 PL_lex_inwhat = proto_perl->Ilex_inwhat;
8738 PL_lex_brackets = proto_perl->Ilex_brackets;
8739 i = (PL_lex_brackets < 120 ? 120 : PL_lex_brackets);
8740 PL_lex_brackstack = SAVEPVN(proto_perl->Ilex_brackstack,i);
8741 PL_lex_casemods = proto_perl->Ilex_casemods;
8742 i = (PL_lex_casemods < 12 ? 12 : PL_lex_casemods);
8743 PL_lex_casestack = SAVEPVN(proto_perl->Ilex_casestack,i);
8745 Copy(proto_perl->Inextval, PL_nextval, 5, YYSTYPE);
8746 Copy(proto_perl->Inexttype, PL_nexttype, 5, I32);
8747 PL_nexttoke = proto_perl->Inexttoke;
8749 PL_linestr = sv_dup_inc(proto_perl->Ilinestr);
8750 i = proto_perl->Ibufptr - SvPVX(proto_perl->Ilinestr);
8751 PL_bufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8752 i = proto_perl->Ioldbufptr - SvPVX(proto_perl->Ilinestr);
8753 PL_oldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8754 i = proto_perl->Ioldoldbufptr - SvPVX(proto_perl->Ilinestr);
8755 PL_oldoldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8756 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
8757 i = proto_perl->Ilinestart - SvPVX(proto_perl->Ilinestr);
8758 PL_linestart = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8759 PL_pending_ident = proto_perl->Ipending_ident;
8760 PL_sublex_info = proto_perl->Isublex_info; /* XXX not quite right */
8762 PL_expect = proto_perl->Iexpect;
8764 PL_multi_start = proto_perl->Imulti_start;
8765 PL_multi_end = proto_perl->Imulti_end;
8766 PL_multi_open = proto_perl->Imulti_open;
8767 PL_multi_close = proto_perl->Imulti_close;
8769 PL_error_count = proto_perl->Ierror_count;
8770 PL_subline = proto_perl->Isubline;
8771 PL_subname = sv_dup_inc(proto_perl->Isubname);
8773 PL_min_intro_pending = proto_perl->Imin_intro_pending;
8774 PL_max_intro_pending = proto_perl->Imax_intro_pending;
8775 PL_padix = proto_perl->Ipadix;
8776 PL_padix_floor = proto_perl->Ipadix_floor;
8777 PL_pad_reset_pending = proto_perl->Ipad_reset_pending;
8779 i = proto_perl->Ilast_uni - SvPVX(proto_perl->Ilinestr);
8780 PL_last_uni = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8781 i = proto_perl->Ilast_lop - SvPVX(proto_perl->Ilinestr);
8782 PL_last_lop = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8783 PL_last_lop_op = proto_perl->Ilast_lop_op;
8784 PL_in_my = proto_perl->Iin_my;
8785 PL_in_my_stash = hv_dup(proto_perl->Iin_my_stash);
8787 PL_cryptseen = proto_perl->Icryptseen;
8790 PL_hints = proto_perl->Ihints;
8792 PL_amagic_generation = proto_perl->Iamagic_generation;
8794 #ifdef USE_LOCALE_COLLATE
8795 PL_collation_ix = proto_perl->Icollation_ix;
8796 PL_collation_name = SAVEPV(proto_perl->Icollation_name);
8797 PL_collation_standard = proto_perl->Icollation_standard;
8798 PL_collxfrm_base = proto_perl->Icollxfrm_base;
8799 PL_collxfrm_mult = proto_perl->Icollxfrm_mult;
8800 #endif /* USE_LOCALE_COLLATE */
8802 #ifdef USE_LOCALE_NUMERIC
8803 PL_numeric_name = SAVEPV(proto_perl->Inumeric_name);
8804 PL_numeric_standard = proto_perl->Inumeric_standard;
8805 PL_numeric_local = proto_perl->Inumeric_local;
8806 PL_numeric_radix = proto_perl->Inumeric_radix;
8807 #endif /* !USE_LOCALE_NUMERIC */
8809 /* utf8 character classes */
8810 PL_utf8_alnum = sv_dup_inc(proto_perl->Iutf8_alnum);
8811 PL_utf8_alnumc = sv_dup_inc(proto_perl->Iutf8_alnumc);
8812 PL_utf8_ascii = sv_dup_inc(proto_perl->Iutf8_ascii);
8813 PL_utf8_alpha = sv_dup_inc(proto_perl->Iutf8_alpha);
8814 PL_utf8_space = sv_dup_inc(proto_perl->Iutf8_space);
8815 PL_utf8_cntrl = sv_dup_inc(proto_perl->Iutf8_cntrl);
8816 PL_utf8_graph = sv_dup_inc(proto_perl->Iutf8_graph);
8817 PL_utf8_digit = sv_dup_inc(proto_perl->Iutf8_digit);
8818 PL_utf8_upper = sv_dup_inc(proto_perl->Iutf8_upper);
8819 PL_utf8_lower = sv_dup_inc(proto_perl->Iutf8_lower);
8820 PL_utf8_print = sv_dup_inc(proto_perl->Iutf8_print);
8821 PL_utf8_punct = sv_dup_inc(proto_perl->Iutf8_punct);
8822 PL_utf8_xdigit = sv_dup_inc(proto_perl->Iutf8_xdigit);
8823 PL_utf8_mark = sv_dup_inc(proto_perl->Iutf8_mark);
8824 PL_utf8_toupper = sv_dup_inc(proto_perl->Iutf8_toupper);
8825 PL_utf8_totitle = sv_dup_inc(proto_perl->Iutf8_totitle);
8826 PL_utf8_tolower = sv_dup_inc(proto_perl->Iutf8_tolower);
8829 PL_last_swash_hv = Nullhv; /* reinits on demand */
8830 PL_last_swash_klen = 0;
8831 PL_last_swash_key[0]= '\0';
8832 PL_last_swash_tmps = (U8*)NULL;
8833 PL_last_swash_slen = 0;
8835 /* perly.c globals */
8836 PL_yydebug = proto_perl->Iyydebug;
8837 PL_yynerrs = proto_perl->Iyynerrs;
8838 PL_yyerrflag = proto_perl->Iyyerrflag;
8839 PL_yychar = proto_perl->Iyychar;
8840 PL_yyval = proto_perl->Iyyval;
8841 PL_yylval = proto_perl->Iyylval;
8843 PL_glob_index = proto_perl->Iglob_index;
8844 PL_srand_called = proto_perl->Isrand_called;
8845 PL_uudmap['M'] = 0; /* reinits on demand */
8846 PL_bitcount = Nullch; /* reinits on demand */
8848 if (proto_perl->Ipsig_ptr) {
8849 int sig_num[] = { SIG_NUM };
8850 Newz(0, PL_psig_ptr, sizeof(sig_num)/sizeof(*sig_num), SV*);
8851 Newz(0, PL_psig_name, sizeof(sig_num)/sizeof(*sig_num), SV*);
8852 for (i = 1; PL_sig_name[i]; i++) {
8853 PL_psig_ptr[i] = sv_dup_inc(proto_perl->Ipsig_ptr[i]);
8854 PL_psig_name[i] = sv_dup_inc(proto_perl->Ipsig_name[i]);
8858 PL_psig_ptr = (SV**)NULL;
8859 PL_psig_name = (SV**)NULL;
8862 /* thrdvar.h stuff */
8865 /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
8866 PL_tmps_ix = proto_perl->Ttmps_ix;
8867 PL_tmps_max = proto_perl->Ttmps_max;
8868 PL_tmps_floor = proto_perl->Ttmps_floor;
8869 Newz(50, PL_tmps_stack, PL_tmps_max, SV*);
8871 while (i <= PL_tmps_ix) {
8872 PL_tmps_stack[i] = sv_dup_inc(proto_perl->Ttmps_stack[i]);
8876 /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
8877 i = proto_perl->Tmarkstack_max - proto_perl->Tmarkstack;
8878 Newz(54, PL_markstack, i, I32);
8879 PL_markstack_max = PL_markstack + (proto_perl->Tmarkstack_max
8880 - proto_perl->Tmarkstack);
8881 PL_markstack_ptr = PL_markstack + (proto_perl->Tmarkstack_ptr
8882 - proto_perl->Tmarkstack);
8883 Copy(proto_perl->Tmarkstack, PL_markstack,
8884 PL_markstack_ptr - PL_markstack + 1, I32);
8886 /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
8887 * NOTE: unlike the others! */
8888 PL_scopestack_ix = proto_perl->Tscopestack_ix;
8889 PL_scopestack_max = proto_perl->Tscopestack_max;
8890 Newz(54, PL_scopestack, PL_scopestack_max, I32);
8891 Copy(proto_perl->Tscopestack, PL_scopestack, PL_scopestack_ix, I32);
8893 /* next push_return() sets PL_retstack[PL_retstack_ix]
8894 * NOTE: unlike the others! */
8895 PL_retstack_ix = proto_perl->Tretstack_ix;
8896 PL_retstack_max = proto_perl->Tretstack_max;
8897 Newz(54, PL_retstack, PL_retstack_max, OP*);
8898 Copy(proto_perl->Tretstack, PL_retstack, PL_retstack_ix, I32);
8900 /* NOTE: si_dup() looks at PL_markstack */
8901 PL_curstackinfo = si_dup(proto_perl->Tcurstackinfo);
8903 /* PL_curstack = PL_curstackinfo->si_stack; */
8904 PL_curstack = av_dup(proto_perl->Tcurstack);
8905 PL_mainstack = av_dup(proto_perl->Tmainstack);
8907 /* next PUSHs() etc. set *(PL_stack_sp+1) */
8908 PL_stack_base = AvARRAY(PL_curstack);
8909 PL_stack_sp = PL_stack_base + (proto_perl->Tstack_sp
8910 - proto_perl->Tstack_base);
8911 PL_stack_max = PL_stack_base + AvMAX(PL_curstack);
8913 /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
8914 * NOTE: unlike the others! */
8915 PL_savestack_ix = proto_perl->Tsavestack_ix;
8916 PL_savestack_max = proto_perl->Tsavestack_max;
8917 /*Newz(54, PL_savestack, PL_savestack_max, ANY);*/
8918 PL_savestack = ss_dup(proto_perl);
8922 ENTER; /* perl_destruct() wants to LEAVE; */
8925 PL_start_env = proto_perl->Tstart_env; /* XXXXXX */
8926 PL_top_env = &PL_start_env;
8928 PL_op = proto_perl->Top;
8931 PL_Xpv = (XPV*)NULL;
8932 PL_na = proto_perl->Tna;
8934 PL_statbuf = proto_perl->Tstatbuf;
8935 PL_statcache = proto_perl->Tstatcache;
8936 PL_statgv = gv_dup(proto_perl->Tstatgv);
8937 PL_statname = sv_dup_inc(proto_perl->Tstatname);
8939 PL_timesbuf = proto_perl->Ttimesbuf;
8942 PL_tainted = proto_perl->Ttainted;
8943 PL_curpm = proto_perl->Tcurpm; /* XXX No PMOP ref count */
8944 PL_nrs = sv_dup_inc(proto_perl->Tnrs);
8945 PL_rs = sv_dup_inc(proto_perl->Trs);
8946 PL_last_in_gv = gv_dup(proto_perl->Tlast_in_gv);
8947 PL_ofs_sv = sv_dup_inc(proto_perl->Tofs_sv);
8948 PL_defoutgv = gv_dup_inc(proto_perl->Tdefoutgv);
8949 PL_chopset = proto_perl->Tchopset; /* XXX never deallocated */
8950 PL_toptarget = sv_dup_inc(proto_perl->Ttoptarget);
8951 PL_bodytarget = sv_dup_inc(proto_perl->Tbodytarget);
8952 PL_formtarget = sv_dup(proto_perl->Tformtarget);
8954 PL_restartop = proto_perl->Trestartop;
8955 PL_in_eval = proto_perl->Tin_eval;
8956 PL_delaymagic = proto_perl->Tdelaymagic;
8957 PL_dirty = proto_perl->Tdirty;
8958 PL_localizing = proto_perl->Tlocalizing;
8960 #ifdef PERL_FLEXIBLE_EXCEPTIONS
8961 PL_protect = proto_perl->Tprotect;
8963 PL_errors = sv_dup_inc(proto_perl->Terrors);
8964 PL_av_fetch_sv = Nullsv;
8965 PL_hv_fetch_sv = Nullsv;
8966 Zero(&PL_hv_fetch_ent_mh, 1, HE); /* XXX */
8967 PL_modcount = proto_perl->Tmodcount;
8968 PL_lastgotoprobe = Nullop;
8969 PL_dumpindent = proto_perl->Tdumpindent;
8971 PL_sortcop = (OP*)any_dup(proto_perl->Tsortcop, proto_perl);
8972 PL_sortstash = hv_dup(proto_perl->Tsortstash);
8973 PL_firstgv = gv_dup(proto_perl->Tfirstgv);
8974 PL_secondgv = gv_dup(proto_perl->Tsecondgv);
8975 PL_sortcxix = proto_perl->Tsortcxix;
8976 PL_efloatbuf = Nullch; /* reinits on demand */
8977 PL_efloatsize = 0; /* reinits on demand */
8981 PL_screamfirst = NULL;
8982 PL_screamnext = NULL;
8983 PL_maxscream = -1; /* reinits on demand */
8984 PL_lastscream = Nullsv;
8986 PL_watchaddr = NULL;
8987 PL_watchok = Nullch;
8989 PL_regdummy = proto_perl->Tregdummy;
8990 PL_regcomp_parse = Nullch;
8991 PL_regxend = Nullch;
8992 PL_regcode = (regnode*)NULL;
8995 PL_regprecomp = Nullch;
9000 PL_seen_zerolen = 0;
9002 PL_regcomp_rx = (regexp*)NULL;
9004 PL_colorset = 0; /* reinits PL_colors[] */
9005 /*PL_colors[6] = {0,0,0,0,0,0};*/
9006 PL_reg_whilem_seen = 0;
9007 PL_reginput = Nullch;
9010 PL_regstartp = (I32*)NULL;
9011 PL_regendp = (I32*)NULL;
9012 PL_reglastparen = (U32*)NULL;
9013 PL_regtill = Nullch;
9015 PL_reg_start_tmp = (char**)NULL;
9016 PL_reg_start_tmpl = 0;
9017 PL_regdata = (struct reg_data*)NULL;
9020 PL_reg_eval_set = 0;
9022 PL_regprogram = (regnode*)NULL;
9024 PL_regcc = (CURCUR*)NULL;
9025 PL_reg_call_cc = (struct re_cc_state*)NULL;
9026 PL_reg_re = (regexp*)NULL;
9027 PL_reg_ganch = Nullch;
9029 PL_reg_magic = (MAGIC*)NULL;
9031 PL_reg_oldcurpm = (PMOP*)NULL;
9032 PL_reg_curpm = (PMOP*)NULL;
9033 PL_reg_oldsaved = Nullch;
9034 PL_reg_oldsavedlen = 0;
9036 PL_reg_leftiter = 0;
9037 PL_reg_poscache = Nullch;
9038 PL_reg_poscache_size= 0;
9040 /* RE engine - function pointers */
9041 PL_regcompp = proto_perl->Tregcompp;
9042 PL_regexecp = proto_perl->Tregexecp;
9043 PL_regint_start = proto_perl->Tregint_start;
9044 PL_regint_string = proto_perl->Tregint_string;
9045 PL_regfree = proto_perl->Tregfree;
9047 PL_reginterp_cnt = 0;
9048 PL_reg_starttry = 0;
9051 return (PerlInterpreter*)pPerl;
9057 #else /* !USE_ITHREADS */
9063 #endif /* USE_ITHREADS */
9066 do_report_used(pTHXo_ SV *sv)
9068 if (SvTYPE(sv) != SVTYPEMASK) {
9069 PerlIO_printf(Perl_debug_log, "****\n");
9075 do_clean_objs(pTHXo_ SV *sv)
9079 if (SvROK(sv) && SvOBJECT(rv = SvRV(sv))) {
9080 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(sv));)
9081 if (SvWEAKREF(sv)) {
9092 /* XXX Might want to check arrays, etc. */
9095 #ifndef DISABLE_DESTRUCTOR_KLUDGE
9097 do_clean_named_objs(pTHXo_ SV *sv)
9099 if (SvTYPE(sv) == SVt_PVGV && GvGP(sv)) {
9100 if ( SvOBJECT(GvSV(sv)) ||
9101 (GvAV(sv) && SvOBJECT(GvAV(sv))) ||
9102 (GvHV(sv) && SvOBJECT(GvHV(sv))) ||
9103 (GvIO(sv) && SvOBJECT(GvIO(sv))) ||
9104 (GvCV(sv) && SvOBJECT(GvCV(sv))) )
9106 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning named glob object:\n "), sv_dump(sv));)
9114 do_clean_all(pTHXo_ SV *sv)
9116 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) );)
9117 SvFLAGS(sv) |= SVf_BREAK;