3 * Copyright (c) 1991-2000, 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 if (u <= (UV)IV_MAX) {
1324 sv_setiv(sv, (IV)u);
1333 =for apidoc sv_setuv_mg
1335 Like C<sv_setuv>, but also handles 'set' magic.
1341 Perl_sv_setuv_mg(pTHX_ register SV *sv, UV u)
1343 if (u <= (UV)IV_MAX) {
1344 sv_setiv(sv, (IV)u);
1354 =for apidoc sv_setnv
1356 Copies a double into the given SV. Does not handle 'set' magic. See
1363 Perl_sv_setnv(pTHX_ register SV *sv, NV num)
1365 SV_CHECK_THINKFIRST(sv);
1366 switch (SvTYPE(sv)) {
1369 sv_upgrade(sv, SVt_NV);
1374 sv_upgrade(sv, SVt_PVNV);
1383 Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1384 PL_op_name[PL_op->op_type]);
1387 (void)SvNOK_only(sv); /* validate number */
1392 =for apidoc sv_setnv_mg
1394 Like C<sv_setnv>, but also handles 'set' magic.
1400 Perl_sv_setnv_mg(pTHX_ register SV *sv, NV num)
1407 S_not_a_number(pTHX_ SV *sv)
1412 char *limit = tmpbuf + sizeof(tmpbuf) - 8;
1413 /* each *s can expand to 4 chars + "...\0",
1414 i.e. need room for 8 chars */
1416 for (s = SvPVX(sv); *s && d < limit; s++) {
1418 if (ch & 128 && !isPRINT_LC(ch)) {
1427 else if (ch == '\r') {
1431 else if (ch == '\f') {
1435 else if (ch == '\\') {
1439 else if (isPRINT_LC(ch))
1454 Perl_warner(aTHX_ WARN_NUMERIC,
1455 "Argument \"%s\" isn't numeric in %s", tmpbuf,
1456 PL_op_desc[PL_op->op_type]);
1458 Perl_warner(aTHX_ WARN_NUMERIC,
1459 "Argument \"%s\" isn't numeric", tmpbuf);
1462 /* the number can be converted to integer with atol() or atoll() although */
1463 #define IS_NUMBER_TO_INT_BY_ATOL 0x01 /* integer (may have decimals) */
1464 #define IS_NUMBER_TO_INT_BY_STRTOL 0x02 /* it may exceed IV_MAX */
1465 #define IS_NUMBER_TO_INT_BY_ATOF 0x04 /* seen something like 123e4 */
1466 #define IS_NUMBER_LONGER_THAN_IV_MAX 0x08 /* more digits than IV_MAX */
1467 #define IS_NUMBER_AS_LONG_AS_IV_MAX 0x10 /* may(be not) larger than IV_MAX */
1468 #define IS_NUMBER_NOT_INT 0x20 /* seen a decimal point or e */
1469 #define IS_NUMBER_NEG 0x40 /* seen a leading - */
1470 #define IS_NUMBER_INFINITY 0x80 /* /^\s*-?Infinity\s*$/i */
1472 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1473 until proven guilty, assume that things are not that bad... */
1475 /* As 64 bit platforms often have an NV that doesn't preserve all bits of
1476 an IV (an assumption perl has been based on to date) it becomes necessary
1477 to remove the assumption that the NV always carries enough precision to
1478 recreate the IV whenever needed, and that the NV is the canonical form.
1479 Instead, IV/UV and NV need to be given equal rights. So as to not lose
1480 precision as an side effect of conversion (which would lead to insanity
1481 and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1482 1) to distinguish between IV/UV/NV slots that have cached a valid
1483 conversion where precision was lost and IV/UV/NV slots that have a
1484 valid conversion which has lost no precision
1485 2) to ensure that if a numeric conversion to one form is request that
1486 would lose precision, the precise conversion (or differently
1487 imprecise conversion) is also performed and cached, to prevent
1488 requests for different numeric formats on the same SV causing
1489 lossy conversion chains. (lossless conversion chains are perfectly
1494 SvIOKp is true if the IV slot contains a valid value
1495 SvIOK is true only if the IV value is accurate (UV if SvIOK_UV true)
1496 SvNOKp is true if the NV slot contains a valid value
1497 SvNOK is true only if the NV value is accurate
1500 while converting from PV to NV check to see if converting that NV to an
1501 IV(or UV) would lose accuracy over a direct conversion from PV to
1502 IV(or UV). If it would, cache both conversions, return NV, but mark
1503 SV as IOK NOKp (ie not NOK).
1505 while converting from PV to IV check to see if converting that IV to an
1506 NV would lose accuracy over a direct conversion from PV to NV. If it
1507 would, cache both conversions, flag similarly.
1509 Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1510 correctly because if IV & NV were set NV *always* overruled.
1511 Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flags meaning
1512 changes - now IV and NV together means that the two are interchangeable
1513 SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1515 The benefit of this is operations such as pp_add know that if SvIOK is
1516 true for both left and right operands, then integer addition can be
1517 used instead of floating point. (for cases where the result won't
1518 overflow) Before, floating point was always used, which could lead to
1519 loss of precision compared with integer addition.
1521 * making IV and NV equal status should make maths accurate on 64 bit
1523 * may speed up maths somewhat if pp_add and friends start to use
1524 integers when possible instead of fp. (hopefully the overhead in
1525 looking for SvIOK and checking for overflow will not outweigh the
1526 fp to integer speedup)
1527 * will slow down integer operations (callers of SvIV) on "inaccurate"
1528 values, as the change from SvIOK to SvIOKp will cause a call into
1529 sv_2iv each time rather than a macro access direct to the IV slot
1530 * should speed up number->string conversion on integers as IV is
1531 favoured when IV and NV equally accurate
1533 ####################################################################
1534 You had better be using SvIOK_notUV if you want an IV for arithmetic
1535 SvIOK is true if (IV or UV), so you might be getting (IV)SvUV
1536 SvUOK is true iff UV.
1537 ####################################################################
1539 Your mileage will vary depending your CPUs relative fp to integer
1543 #ifndef NV_PRESERVES_UV
1544 #define IS_NUMBER_UNDERFLOW_IV 1
1545 #define IS_NUMBER_UNDERFLOW_UV 2
1546 #define IS_NUMBER_IV_AND_UV 2
1547 #define IS_NUMBER_OVERFLOW_IV 4
1548 #define IS_NUMBER_OVERFLOW_UV 5
1549 /* Hopefully your optimiser will consider inlining these two functions. */
1551 S_sv_2inuv_non_preserve (pTHX_ register SV *sv, I32 numtype) {
1552 NV nv = SvNVX(sv); /* Code simpler and had compiler problems if */
1553 UV nv_as_uv = U_V(nv); /* these are not in simple variables. */
1554 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));
1555 if (nv_as_uv <= (UV)IV_MAX) {
1556 (void)SvIOKp_on(sv);
1557 (void)SvNOKp_on(sv);
1558 /* Within suitable range to fit in an IV, atol won't overflow */
1559 /* XXX quite sure? Is that your final answer? not really, I'm
1560 trusting that nv_as_uv to round down if NV is (IV_MAX + 1) */
1561 SvIVX(sv) = (IV)Atol(SvPVX(sv));
1562 if (numtype & IS_NUMBER_NOT_INT) {
1563 /* I believe that even if the original PV had decimals, they
1564 are lost beyond the limit of the FP precision.
1565 However, neither is canonical, so both only get p flags.
1567 /* Both already have p flags, so do nothing */
1568 } else if (SvIVX(sv) == I_V(nv)) {
1573 /* It had no "." so it must be integer. assert (get in here from
1574 sv_2iv and sv_2uv only for ndef HAS_STRTOL and
1575 IS_NUMBER_AS_LONG_AS_IV_MAX) or my logic is faulty and all
1576 conversion routines need audit. */
1578 return nv < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
1580 /* between IV_MAX and NV(UV_MAX). Could be slightly> UV_MAX */
1581 (void)SvIOKp_on(sv);
1582 (void)SvNOKp_on(sv);
1585 int save_errno = errno;
1587 SvUVX(sv) = Strtoul(SvPVX(sv), Null(char**), 10);
1589 if (numtype & IS_NUMBER_NOT_INT) {
1590 /* UV and NV both imprecise. */
1592 } else if (SvUVX(sv) == nv_as_uv && SvUVX(sv) != UV_MAX) {
1601 return IS_NUMBER_OVERFLOW_IV;
1605 /* Must have just overflowed UV, but not enough that an NV could spot
1607 return IS_NUMBER_OVERFLOW_UV;
1610 /* We've just lost integer precision, nothing we could do. */
1611 SvUVX(sv) = nv_as_uv;
1612 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));
1613 /* UV and NV slots equally valid only if we have casting symmetry. */
1614 if (numtype & IS_NUMBER_NOT_INT) {
1616 } else if (SvUVX(sv) == nv_as_uv && SvUVX(sv) != UV_MAX) {
1617 /* UV_MAX can cast up to NV (UV_MAX+1), that NV casts down to UV_MAX
1618 UV_MAX ought to be 0xFF...FFF which won't preserve (We only
1619 get to this point if NVs don't preserve UVs) */
1624 /* As above, I believe UV at least as good as NV */
1627 #endif /* HAS_STRTOUL */
1628 return IS_NUMBER_OVERFLOW_IV;
1631 /* For sv_2nv these three cases are "SvNOK and don't bother casting" */
1633 S_sv_2iuv_non_preserve (pTHX_ register SV *sv, I32 numtype)
1635 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));
1636 if (SvNVX(sv) < (NV)IV_MIN) {
1637 (void)SvIOKp_on(sv);
1640 return IS_NUMBER_UNDERFLOW_IV;
1642 if (SvNVX(sv) > (NV)UV_MAX) {
1643 (void)SvIOKp_on(sv);
1647 return IS_NUMBER_OVERFLOW_UV;
1649 if (!(numtype & (IS_NUMBER_TO_INT_BY_ATOL | IS_NUMBER_TO_INT_BY_STRTOL))) {
1650 (void)SvIOKp_on(sv);
1652 /* Can't use strtol etc to convert this string */
1653 if (SvNVX(sv) <= (UV)IV_MAX) {
1654 SvIVX(sv) = I_V(SvNVX(sv));
1655 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1656 SvIOK_on(sv); /* Integer is precise. NOK, IOK */
1658 /* Integer is imprecise. NOK, IOKp */
1660 return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
1663 SvUVX(sv) = U_V(SvNVX(sv));
1664 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
1665 SvIOK_on(sv); /* Integer is precise. NOK, UOK */
1667 /* Integer is imprecise. NOK, IOKp */
1669 return IS_NUMBER_OVERFLOW_IV;
1671 return S_sv_2inuv_non_preserve (sv, numtype);
1673 #endif /* NV_PRESERVES_UV*/
1677 Perl_sv_2iv(pTHX_ register SV *sv)
1681 if (SvGMAGICAL(sv)) {
1686 return I_V(SvNVX(sv));
1688 if (SvPOKp(sv) && SvLEN(sv))
1691 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
1692 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
1698 if (SvTHINKFIRST(sv)) {
1701 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
1702 (SvRV(tmpstr) != SvRV(sv)))
1703 return SvIV(tmpstr);
1704 return PTR2IV(SvRV(sv));
1706 if (SvREADONLY(sv) && SvFAKE(sv)) {
1707 sv_force_normal(sv);
1709 if (SvREADONLY(sv) && !SvOK(sv)) {
1710 if (ckWARN(WARN_UNINITIALIZED))
1717 return (IV)(SvUVX(sv));
1724 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
1725 * without also getting a cached IV/UV from it at the same time
1726 * (ie PV->NV conversion should detect loss of accuracy and cache
1727 * IV or UV at same time to avoid this. NWC */
1729 if (SvTYPE(sv) == SVt_NV)
1730 sv_upgrade(sv, SVt_PVNV);
1732 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
1733 /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
1734 certainly cast into the IV range at IV_MAX, whereas the correct
1735 answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
1737 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
1738 SvIVX(sv) = I_V(SvNVX(sv));
1739 if (SvNVX(sv) == (NV) SvIVX(sv)
1740 #ifndef NV_PRESERVES_UV
1741 && (((UV)1 << NV_PRESERVES_UV_BITS) >
1742 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
1743 /* Don't flag it as "accurately an integer" if the number
1744 came from a (by definition imprecise) NV operation, and
1745 we're outside the range of NV integer precision */
1748 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
1749 DEBUG_c(PerlIO_printf(Perl_debug_log,
1750 "0x%"UVxf" iv(%g => %"IVdf") (precise)\n",
1756 /* IV not precise. No need to convert from PV, as NV
1757 conversion would already have cached IV if it detected
1758 that PV->IV would be better than PV->NV->IV
1759 flags already correct - don't set public IOK. */
1760 DEBUG_c(PerlIO_printf(Perl_debug_log,
1761 "0x%"UVxf" iv(%g => %"IVdf") (imprecise)\n",
1766 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
1767 but the cast (NV)IV_MIN rounds to a the value less (more
1768 negative) than IV_MIN which happens to be equal to SvNVX ??
1769 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
1770 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
1771 (NV)UVX == NVX are both true, but the values differ. :-(
1772 Hopefully for 2s complement IV_MIN is something like
1773 0x8000000000000000 which will be exact. NWC */
1776 SvUVX(sv) = U_V(SvNVX(sv));
1778 (SvNVX(sv) == (NV) SvUVX(sv))
1779 #ifndef NV_PRESERVES_UV
1780 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
1781 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
1782 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
1783 /* Don't flag it as "accurately an integer" if the number
1784 came from a (by definition imprecise) NV operation, and
1785 we're outside the range of NV integer precision */
1791 DEBUG_c(PerlIO_printf(Perl_debug_log,
1792 "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
1796 return (IV)SvUVX(sv);
1799 else if (SvPOKp(sv) && SvLEN(sv)) {
1800 I32 numtype = looks_like_number(sv);
1802 /* We want to avoid a possible problem when we cache an IV which
1803 may be later translated to an NV, and the resulting NV is not
1804 the translation of the initial data.
1806 This means that if we cache such an IV, we need to cache the
1807 NV as well. Moreover, we trade speed for space, and do not
1808 cache the NV if we are sure it's not needed.
1811 if ((numtype & ~IS_NUMBER_NEG) == IS_NUMBER_TO_INT_BY_ATOL) {
1812 /* The NV may be reconstructed from IV - safe to cache IV,
1813 which may be calculated by atol(). */
1814 if (SvTYPE(sv) < SVt_PVIV)
1815 sv_upgrade(sv, SVt_PVIV);
1817 SvIVX(sv) = Atol(SvPVX(sv));
1821 int save_errno = errno;
1822 /* Is it an integer that we could convert with strtol?
1823 So try it, and if it doesn't set errno then it's pukka.
1824 This should be faster than going atof and then thinking. */
1825 if (((numtype & (IS_NUMBER_TO_INT_BY_STRTOL | IS_NUMBER_NOT_INT))
1826 == IS_NUMBER_TO_INT_BY_STRTOL)
1827 /* && is a sequence point. Without it not sure if I'm trying
1828 to do too much between sequence points and hence going
1830 && ((errno = 0), 1) /* , 1 so always true */
1831 && ((i = Strtol(SvPVX(sv), Null(char**), 10)), 1)
1833 if (SvTYPE(sv) < SVt_PVIV)
1834 sv_upgrade(sv, SVt_PVIV);
1840 /* Hopefully trace flow will optimise this away where possible
1846 /* It wasn't an integer, or it overflowed, or we don't have
1847 strtol. Do things the slow way - check if it's a UV etc. */
1848 d = Atof(SvPVX(sv));
1850 if (SvTYPE(sv) < SVt_PVNV)
1851 sv_upgrade(sv, SVt_PVNV);
1854 if (! numtype && ckWARN(WARN_NUMERIC))
1857 #if defined(USE_LONG_DOUBLE)
1858 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
1859 PTR2UV(sv), SvNVX(sv)));
1861 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%g)\n",
1862 PTR2UV(sv), SvNVX(sv)));
1866 #ifdef NV_PRESERVES_UV
1867 (void)SvIOKp_on(sv);
1869 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
1870 SvIVX(sv) = I_V(SvNVX(sv));
1871 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1874 /* Integer is imprecise. NOK, IOKp */
1876 /* UV will not work better than IV */
1878 if (SvNVX(sv) > (NV)UV_MAX) {
1880 /* Integer is inaccurate. NOK, IOKp, is UV */
1884 SvUVX(sv) = U_V(SvNVX(sv));
1885 /* 0xFFFFFFFFFFFFFFFF not an issue in here */
1886 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
1890 /* Integer is imprecise. NOK, IOKp, is UV */
1896 #else /* NV_PRESERVES_UV */
1897 if (((UV)1 << NV_PRESERVES_UV_BITS) >
1898 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
1899 /* Small enough to preserve all bits. */
1900 (void)SvIOKp_on(sv);
1902 SvIVX(sv) = I_V(SvNVX(sv));
1903 if ((NV)(SvIVX(sv)) == SvNVX(sv))
1905 /* Assumption: first non-preserved integer is < IV_MAX,
1906 this NV is in the preserved range, therefore: */
1907 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
1909 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);
1911 } else if (sv_2iuv_non_preserve (sv, numtype)
1912 >= IS_NUMBER_OVERFLOW_IV)
1914 #endif /* NV_PRESERVES_UV */
1918 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
1920 if (SvTYPE(sv) < SVt_IV)
1921 /* Typically the caller expects that sv_any is not NULL now. */
1922 sv_upgrade(sv, SVt_IV);
1925 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
1926 PTR2UV(sv),SvIVX(sv)));
1927 return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
1931 Perl_sv_2uv(pTHX_ register SV *sv)
1935 if (SvGMAGICAL(sv)) {
1940 return U_V(SvNVX(sv));
1941 if (SvPOKp(sv) && SvLEN(sv))
1944 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
1945 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
1951 if (SvTHINKFIRST(sv)) {
1954 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
1955 (SvRV(tmpstr) != SvRV(sv)))
1956 return SvUV(tmpstr);
1957 return PTR2UV(SvRV(sv));
1959 if (SvREADONLY(sv) && SvFAKE(sv)) {
1960 sv_force_normal(sv);
1962 if (SvREADONLY(sv) && !SvOK(sv)) {
1963 if (ckWARN(WARN_UNINITIALIZED))
1973 return (UV)SvIVX(sv);
1977 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
1978 * without also getting a cached IV/UV from it at the same time
1979 * (ie PV->NV conversion should detect loss of accuracy and cache
1980 * IV or UV at same time to avoid this. */
1981 /* IV-over-UV optimisation - choose to cache IV if possible */
1983 if (SvTYPE(sv) == SVt_NV)
1984 sv_upgrade(sv, SVt_PVNV);
1986 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
1987 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
1988 SvIVX(sv) = I_V(SvNVX(sv));
1989 if (SvNVX(sv) == (NV) SvIVX(sv)
1990 #ifndef NV_PRESERVES_UV
1991 && (((UV)1 << NV_PRESERVES_UV_BITS) >
1992 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
1993 /* Don't flag it as "accurately an integer" if the number
1994 came from a (by definition imprecise) NV operation, and
1995 we're outside the range of NV integer precision */
1998 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
1999 DEBUG_c(PerlIO_printf(Perl_debug_log,
2000 "0x%"UVxf" uv(%g => %"IVdf") (precise)\n",
2006 /* IV not precise. No need to convert from PV, as NV
2007 conversion would already have cached IV if it detected
2008 that PV->IV would be better than PV->NV->IV
2009 flags already correct - don't set public IOK. */
2010 DEBUG_c(PerlIO_printf(Perl_debug_log,
2011 "0x%"UVxf" uv(%g => %"IVdf") (imprecise)\n",
2016 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2017 but the cast (NV)IV_MIN rounds to a the value less (more
2018 negative) than IV_MIN which happens to be equal to SvNVX ??
2019 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2020 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2021 (NV)UVX == NVX are both true, but the values differ. :-(
2022 Hopefully for 2s complement IV_MIN is something like
2023 0x8000000000000000 which will be exact. NWC */
2026 SvUVX(sv) = U_V(SvNVX(sv));
2028 (SvNVX(sv) == (NV) SvUVX(sv))
2029 #ifndef NV_PRESERVES_UV
2030 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2031 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2032 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2033 /* Don't flag it as "accurately an integer" if the number
2034 came from a (by definition imprecise) NV operation, and
2035 we're outside the range of NV integer precision */
2040 DEBUG_c(PerlIO_printf(Perl_debug_log,
2041 "0x%"UVxf" 2uv(%"UVuf" => %"IVdf") (as unsigned)\n",
2047 else if (SvPOKp(sv) && SvLEN(sv)) {
2048 I32 numtype = looks_like_number(sv);
2050 /* We want to avoid a possible problem when we cache a UV which
2051 may be later translated to an NV, and the resulting NV is not
2052 the translation of the initial data.
2054 This means that if we cache such a UV, we need to cache the
2055 NV as well. Moreover, we trade speed for space, and do not
2056 cache the NV if not needed.
2059 if ((numtype & ~IS_NUMBER_NEG) == IS_NUMBER_TO_INT_BY_ATOL) {
2060 /* The NV may be reconstructed from IV - safe to cache IV,
2061 which may be calculated by atol(). */
2062 if (SvTYPE(sv) < SVt_PVIV)
2063 sv_upgrade(sv, SVt_PVIV);
2065 SvIVX(sv) = Atol(SvPVX(sv));
2069 int save_errno = errno;
2070 /* Is it an integer that we could convert with strtoul?
2071 So try it, and if it doesn't set errno then it's pukka.
2072 This should be faster than going atof and then thinking. */
2073 if (((numtype & (IS_NUMBER_TO_INT_BY_STRTOL | IS_NUMBER_NOT_INT))
2074 == IS_NUMBER_TO_INT_BY_STRTOL)
2075 && ((errno = 0), 1) /* always true */
2076 && ((u = Strtoul(SvPVX(sv), Null(char**), 10)), 1) /* ditto */
2078 /* If known to be negative, check it didn't undeflow IV */
2079 && ((numtype & IS_NUMBER_NEG) ? ((IV)u <= 0) : 1)) {
2082 if (SvTYPE(sv) < SVt_PVIV)
2083 sv_upgrade(sv, SVt_PVIV);
2086 /* If it's negative must use IV.
2087 IV-over-UV optimisation */
2088 if (numtype & IS_NUMBER_NEG || u <= (UV) IV_MAX) {
2089 /* strtoul is defined to return negated value if the
2090 number starts with a minus sign. Assuming 2s
2091 complement, this value will be in range for a negative
2092 IV if casting the bit pattern to IV doesn't produce
2093 a positive value. Allow -0 by checking it's <= 0
2094 hence (numtype & IS_NUMBER_NEG) test above
2098 /* it didn't overflow, and it was positive. */
2104 /* Hopefully trace flow will optimise this away where possible
2110 /* It wasn't an integer, or it overflowed, or we don't have
2111 strtol. Do things the slow way - check if it's a IV etc. */
2112 d = Atof(SvPVX(sv));
2114 if (SvTYPE(sv) < SVt_PVNV)
2115 sv_upgrade(sv, SVt_PVNV);
2118 if (! numtype && ckWARN(WARN_NUMERIC))
2121 #if defined(USE_LONG_DOUBLE)
2122 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%" PERL_PRIgldbl ")\n",
2123 PTR2UV(sv), SvNVX(sv)));
2125 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%g)\n",
2126 PTR2UV(sv), SvNVX(sv)));
2129 #ifdef NV_PRESERVES_UV
2130 (void)SvIOKp_on(sv);
2132 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2133 SvIVX(sv) = I_V(SvNVX(sv));
2134 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2137 /* Integer is imprecise. NOK, IOKp */
2139 /* UV will not work better than IV */
2141 if (SvNVX(sv) > (NV)UV_MAX) {
2143 /* Integer is inaccurate. NOK, IOKp, is UV */
2147 SvUVX(sv) = U_V(SvNVX(sv));
2148 /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2149 NV preservse UV so can do correct comparison. */
2150 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2154 /* Integer is imprecise. NOK, IOKp, is UV */
2159 #else /* NV_PRESERVES_UV */
2160 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2161 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2162 /* Small enough to preserve all bits. */
2163 (void)SvIOKp_on(sv);
2165 SvIVX(sv) = I_V(SvNVX(sv));
2166 if ((NV)(SvIVX(sv)) == SvNVX(sv))
2168 /* Assumption: first non-preserved integer is < IV_MAX,
2169 this NV is in the preserved range, therefore: */
2170 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2172 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);
2175 sv_2iuv_non_preserve (sv, numtype);
2176 #endif /* NV_PRESERVES_UV */
2181 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2182 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2185 if (SvTYPE(sv) < SVt_IV)
2186 /* Typically the caller expects that sv_any is not NULL now. */
2187 sv_upgrade(sv, SVt_IV);
2191 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2192 PTR2UV(sv),SvUVX(sv)));
2193 return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2197 Perl_sv_2nv(pTHX_ register SV *sv)
2201 if (SvGMAGICAL(sv)) {
2205 if (SvPOKp(sv) && SvLEN(sv)) {
2206 if (ckWARN(WARN_NUMERIC) && !SvIOKp(sv) && !looks_like_number(sv))
2208 return Atof(SvPVX(sv));
2212 return (NV)SvUVX(sv);
2214 return (NV)SvIVX(sv);
2217 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2218 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2224 if (SvTHINKFIRST(sv)) {
2227 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
2228 (SvRV(tmpstr) != SvRV(sv)))
2229 return SvNV(tmpstr);
2230 return PTR2NV(SvRV(sv));
2232 if (SvREADONLY(sv) && SvFAKE(sv)) {
2233 sv_force_normal(sv);
2235 if (SvREADONLY(sv) && !SvOK(sv)) {
2236 if (ckWARN(WARN_UNINITIALIZED))
2241 if (SvTYPE(sv) < SVt_NV) {
2242 if (SvTYPE(sv) == SVt_IV)
2243 sv_upgrade(sv, SVt_PVNV);
2245 sv_upgrade(sv, SVt_NV);
2246 #if defined(USE_LONG_DOUBLE)
2248 STORE_NUMERIC_LOCAL_SET_STANDARD();
2249 PerlIO_printf(Perl_debug_log,
2250 "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2251 PTR2UV(sv), SvNVX(sv));
2252 RESTORE_NUMERIC_LOCAL();
2256 STORE_NUMERIC_LOCAL_SET_STANDARD();
2257 PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%g)\n",
2258 PTR2UV(sv), SvNVX(sv));
2259 RESTORE_NUMERIC_LOCAL();
2263 else if (SvTYPE(sv) < SVt_PVNV)
2264 sv_upgrade(sv, SVt_PVNV);
2266 (!SvPOKp(sv) || !strchr(SvPVX(sv),'.') || !looks_like_number(sv)))
2268 SvNVX(sv) = SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv);
2269 #ifdef NV_PRESERVES_UV
2272 /* Only set the public NV OK flag if this NV preserves the IV */
2273 /* Check it's not 0xFFFFFFFFFFFFFFFF */
2274 if (SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2275 : (SvIVX(sv) == I_V(SvNVX(sv))))
2281 else if (SvPOKp(sv) && SvLEN(sv)) {
2282 if (ckWARN(WARN_NUMERIC) && !SvIOKp(sv) && !looks_like_number(sv))
2284 SvNVX(sv) = Atof(SvPVX(sv));
2285 #ifdef NV_PRESERVES_UV
2288 /* Only set the public NV OK flag if this NV preserves the value in
2289 the PV at least as well as an IV/UV would.
2290 Not sure how to do this 100% reliably. */
2291 /* if that shift count is out of range then Configure's test is
2292 wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2294 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2295 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv)))
2296 SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2297 else if (SvNVX(sv) < (NV)IV_MIN || SvNVX(sv) > (NV)UV_MAX) {
2298 /* Definitely too large/small to fit in an integer, so no loss
2299 of precision going to integer in the future via NV */
2302 /* Is it something we can run through strtol etc (ie no
2303 trailing exponent part)? */
2304 int numtype = looks_like_number(sv);
2305 /* XXX probably should cache this if called above */
2308 (IS_NUMBER_TO_INT_BY_ATOL | IS_NUMBER_TO_INT_BY_STRTOL))) {
2309 /* Can't use strtol etc to convert this string, so don't try */
2312 sv_2inuv_non_preserve (sv, numtype);
2314 #endif /* NV_PRESERVES_UV */
2317 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
2319 if (SvTYPE(sv) < SVt_NV)
2320 /* Typically the caller expects that sv_any is not NULL now. */
2321 /* XXX Ilya implies that this is a bug in callers that assume this
2322 and ideally should be fixed. */
2323 sv_upgrade(sv, SVt_NV);
2326 #if defined(USE_LONG_DOUBLE)
2328 STORE_NUMERIC_LOCAL_SET_STANDARD();
2329 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2330 PTR2UV(sv), SvNVX(sv));
2331 RESTORE_NUMERIC_LOCAL();
2335 STORE_NUMERIC_LOCAL_SET_STANDARD();
2336 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%g)\n",
2337 PTR2UV(sv), SvNVX(sv));
2338 RESTORE_NUMERIC_LOCAL();
2345 S_asIV(pTHX_ SV *sv)
2347 I32 numtype = looks_like_number(sv);
2350 if (numtype & IS_NUMBER_TO_INT_BY_ATOL)
2351 return Atol(SvPVX(sv));
2353 if (ckWARN(WARN_NUMERIC))
2356 d = Atof(SvPVX(sv));
2361 S_asUV(pTHX_ SV *sv)
2363 I32 numtype = looks_like_number(sv);
2366 if (numtype & IS_NUMBER_TO_INT_BY_ATOL)
2367 return Strtoul(SvPVX(sv), Null(char**), 10);
2370 if (ckWARN(WARN_NUMERIC))
2373 return U_V(Atof(SvPVX(sv)));
2377 * Returns a combination of (advisory only - can get false negatives)
2378 * IS_NUMBER_TO_INT_BY_ATOL, IS_NUMBER_TO_INT_BY_ATOF
2379 * IS_NUMBER_LONGER_THAN_IV_MAX, IS_NUMBER_AS_LONG_AS_IV_MAX
2380 * IS_NUMBER_NOT_INT, IS_NUMBER_NEG, IS_NUMBER_INFINITY
2381 * 0 if does not look like number.
2383 * (atol and strtol stop when they hit a decimal point. strtol will return
2384 * LONG_MAX and LONG_MIN when given out of range values. ANSI says they should
2385 * do this, and vendors have had 11 years to get it right.
2386 * However, will try to make it still work with only atol
2388 * IS_NUMBER_TO_INT_BY_ATOL 123456789 or 123456789.3 definitely < IV_MAX
2389 * IS_NUMBER_TO_INT_BY_STRTOL 123456789 or 123456789.3 if digits = IV_MAX
2390 * IS_NUMBER_TO_INT_BY_ATOF 123456789e0 or >> IV_MAX
2391 * IS_NUMBER_LONGER_THAN_IV_MAX lots of digits, don't bother with atol
2392 * IS_NUMBER_AS_LONG_AS_IV_MAX atol might hit LONG_MAX, might not.
2393 * IS_NUMBER_NOT_INT saw "." or "e"
2395 * IS_NUMBER_INFINITY
2399 =for apidoc looks_like_number
2401 Test if an the content of an SV looks like a number (or is a
2402 number). C<Inf> and C<Infinity> are treated as numbers (so will not
2403 issue a non-numeric warning), even if your atof() doesn't grok them.
2409 Perl_looks_like_number(pTHX_ SV *sv)
2412 register char *send;
2413 register char *sbegin;
2414 register char *nbegin;
2423 else if (SvPOKp(sv))
2424 sbegin = SvPV(sv, len);
2427 send = sbegin + len;
2434 numtype = IS_NUMBER_NEG;
2441 * we return IS_NUMBER_TO_INT_BY_ATOL if the number can converted to
2442 * integer with atol() without overflow, IS_NUMBER_TO_INT_BY_STRTOL if
2443 * possibly slightly larger than max int, IS_NUMBER_TO_INT_BY_ATOF if you
2444 * will need (int)atof().
2447 /* next must be digit or the radix separator or beginning of infinity */
2451 } while (isDIGIT(*s));
2453 /* Aaargh. long long really is irritating.
2454 In the gospel according to ANSI 1989, it is an axiom that "long"
2455 is the longest integer type, and that if you don't know how long
2456 something is you can cast it to long, and nothing will be lost
2457 (except possibly speed of execution if long is slower than the
2459 Now, one can't be sure if the old rules apply, or long long
2460 (or some other newfangled thing) is actually longer than the
2461 (formerly) longest thing.
2463 /* This lot will work for 64 bit *as long as* either
2464 either long is 64 bit
2465 or we can find both strtol/strtoq and strtoul/strtouq
2466 If not, we really should refuse to let the user use 64 bit IVs
2467 By "64 bit" I really mean IVs that don't get preserved by NVs
2468 It also should work for 128 bit IVs. Can any lend me a machine to
2471 if (s - nbegin > TYPE_DIGITS(UV)) /* Cannot cache ato[ul]() */
2472 numtype |= IS_NUMBER_TO_INT_BY_ATOF | IS_NUMBER_LONGER_THAN_IV_MAX;
2473 else if (s - nbegin < BIT_DIGITS(((sizeof (IV)>sizeof (long))
2474 ? sizeof(long) : sizeof (IV))*8-1))
2475 numtype |= IS_NUMBER_TO_INT_BY_ATOL;
2477 /* Can't be sure either way. (For 64 bit UV, 63 bit IV is 1 decimal
2478 digit less (IV_MAX= 9223372036854775807,
2479 UV_MAX= 18446744073709551615) so be cautious */
2480 numtype |= IS_NUMBER_TO_INT_BY_STRTOL | IS_NUMBER_AS_LONG_AS_IV_MAX;
2483 #ifdef USE_LOCALE_NUMERIC
2484 || IS_NUMERIC_RADIX(*s)
2488 numtype |= IS_NUMBER_NOT_INT;
2489 while (isDIGIT(*s)) /* optional digits after the radix */
2494 #ifdef USE_LOCALE_NUMERIC
2495 || IS_NUMERIC_RADIX(*s)
2499 numtype |= IS_NUMBER_TO_INT_BY_ATOL | IS_NUMBER_NOT_INT;
2500 /* no digits before the radix means we need digits after it */
2504 } while (isDIGIT(*s));
2509 else if (*s == 'I' || *s == 'i') {
2510 s++; if (*s != 'N' && *s != 'n') return 0;
2511 s++; if (*s != 'F' && *s != 'f') return 0;
2512 s++; if (*s == 'I' || *s == 'i') {
2513 s++; if (*s != 'N' && *s != 'n') return 0;
2514 s++; if (*s != 'I' && *s != 'i') return 0;
2515 s++; if (*s != 'T' && *s != 't') return 0;
2516 s++; if (*s != 'Y' && *s != 'y') return 0;
2525 numtype = (numtype & IS_NUMBER_NEG) /* Keep track of sign */
2526 | IS_NUMBER_INFINITY | IS_NUMBER_NOT_INT;
2528 /* we can have an optional exponent part */
2529 if (*s == 'e' || *s == 'E') {
2530 numtype &= IS_NUMBER_NEG;
2531 numtype |= IS_NUMBER_TO_INT_BY_ATOF | IS_NUMBER_NOT_INT;
2533 if (*s == '+' || *s == '-')
2538 } while (isDIGIT(*s));
2548 if (len == 10 && memEQ(sbegin, "0 but true", 10))
2549 return IS_NUMBER_TO_INT_BY_ATOL;
2554 Perl_sv_2pv_nolen(pTHX_ register SV *sv)
2557 return sv_2pv(sv, &n_a);
2560 /* We assume that buf is at least TYPE_CHARS(UV) long. */
2562 uiv_2buf(char *buf, IV iv, UV uv, int is_uv, char **peob)
2564 char *ptr = buf + TYPE_CHARS(UV);
2578 *--ptr = '0' + (uv % 10);
2587 Perl_sv_2pv(pTHX_ register SV *sv, STRLEN *lp)
2592 char tbuf[64]; /* Must fit sprintf/Gconvert of longest IV/NV */
2593 char *tmpbuf = tbuf;
2599 if (SvGMAGICAL(sv)) {
2607 (void)sprintf(tmpbuf,"%"UVuf, (UV)SvUVX(sv));
2609 (void)sprintf(tmpbuf,"%"IVdf, (IV)SvIVX(sv));
2614 Gconvert(SvNVX(sv), NV_DIG, 0, tmpbuf);
2619 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2620 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2627 if (SvTHINKFIRST(sv)) {
2630 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,string)) &&
2631 (SvRV(tmpstr) != SvRV(sv)))
2632 return SvPV(tmpstr,*lp);
2639 switch (SvTYPE(sv)) {
2641 if ( ((SvFLAGS(sv) &
2642 (SVs_OBJECT|SVf_OK|SVs_GMG|SVs_SMG|SVs_RMG))
2643 == (SVs_OBJECT|SVs_RMG))
2644 && strEQ(s=HvNAME(SvSTASH(sv)), "Regexp")
2645 && (mg = mg_find(sv, 'r'))) {
2646 regexp *re = (regexp *)mg->mg_obj;
2649 char *fptr = "msix";
2654 U16 reganch = (re->reganch & PMf_COMPILETIME) >> 12;
2656 while((ch = *fptr++)) {
2658 reflags[left++] = ch;
2661 reflags[right--] = ch;
2666 reflags[left] = '-';
2670 mg->mg_len = re->prelen + 4 + left;
2671 New(616, mg->mg_ptr, mg->mg_len + 1 + left, char);
2672 Copy("(?", mg->mg_ptr, 2, char);
2673 Copy(reflags, mg->mg_ptr+2, left, char);
2674 Copy(":", mg->mg_ptr+left+2, 1, char);
2675 Copy(re->precomp, mg->mg_ptr+3+left, re->prelen, char);
2676 mg->mg_ptr[mg->mg_len - 1] = ')';
2677 mg->mg_ptr[mg->mg_len] = 0;
2679 PL_reginterp_cnt += re->program[0].next_off;
2691 case SVt_PVBM: if (SvROK(sv))
2694 s = "SCALAR"; break;
2695 case SVt_PVLV: s = "LVALUE"; break;
2696 case SVt_PVAV: s = "ARRAY"; break;
2697 case SVt_PVHV: s = "HASH"; break;
2698 case SVt_PVCV: s = "CODE"; break;
2699 case SVt_PVGV: s = "GLOB"; break;
2700 case SVt_PVFM: s = "FORMAT"; break;
2701 case SVt_PVIO: s = "IO"; break;
2702 default: s = "UNKNOWN"; break;
2706 Perl_sv_setpvf(aTHX_ tsv, "%s=%s", HvNAME(SvSTASH(sv)), s);
2709 Perl_sv_catpvf(aTHX_ tsv, "(0x%"UVxf")", PTR2UV(sv));
2715 if (SvREADONLY(sv) && !SvOK(sv)) {
2716 if (ckWARN(WARN_UNINITIALIZED))
2722 if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
2723 /* I'm assuming that if both IV and NV are equally valid then
2724 converting the IV is going to be more efficient */
2725 U32 isIOK = SvIOK(sv);
2726 U32 isUIOK = SvIsUV(sv);
2727 char buf[TYPE_CHARS(UV)];
2730 if (SvTYPE(sv) < SVt_PVIV)
2731 sv_upgrade(sv, SVt_PVIV);
2733 ptr = uiv_2buf(buf, 0, SvUVX(sv), 1, &ebuf);
2735 ptr = uiv_2buf(buf, SvIVX(sv), 0, 0, &ebuf);
2736 SvGROW(sv, ebuf - ptr + 1); /* inlined from sv_setpvn */
2737 Move(ptr,SvPVX(sv),ebuf - ptr,char);
2738 SvCUR_set(sv, ebuf - ptr);
2748 else if (SvNOKp(sv)) {
2749 if (SvTYPE(sv) < SVt_PVNV)
2750 sv_upgrade(sv, SVt_PVNV);
2751 /* The +20 is pure guesswork. Configure test needed. --jhi */
2752 SvGROW(sv, NV_DIG + 20);
2754 olderrno = errno; /* some Xenix systems wipe out errno here */
2756 if (SvNVX(sv) == 0.0)
2757 (void)strcpy(s,"0");
2761 Gconvert(SvNVX(sv), NV_DIG, 0, s);
2764 #ifdef FIXNEGATIVEZERO
2765 if (*s == '-' && s[1] == '0' && !s[2])
2775 if (ckWARN(WARN_UNINITIALIZED)
2776 && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
2779 if (SvTYPE(sv) < SVt_PV)
2780 /* Typically the caller expects that sv_any is not NULL now. */
2781 sv_upgrade(sv, SVt_PV);
2784 *lp = s - SvPVX(sv);
2787 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
2788 PTR2UV(sv),SvPVX(sv)));
2792 if (SvROK(sv)) { /* XXX Skip this when sv_pvn_force calls */
2793 /* Sneaky stuff here */
2797 tsv = newSVpv(tmpbuf, 0);
2813 len = strlen(tmpbuf);
2815 #ifdef FIXNEGATIVEZERO
2816 if (len == 2 && t[0] == '-' && t[1] == '0') {
2821 (void)SvUPGRADE(sv, SVt_PV);
2823 s = SvGROW(sv, len + 1);
2832 Perl_sv_2pvbyte_nolen(pTHX_ register SV *sv)
2835 return sv_2pvbyte(sv, &n_a);
2839 Perl_sv_2pvbyte(pTHX_ register SV *sv, STRLEN *lp)
2841 return sv_2pv(sv,lp);
2845 Perl_sv_2pvutf8_nolen(pTHX_ register SV *sv)
2848 return sv_2pvutf8(sv, &n_a);
2852 Perl_sv_2pvutf8(pTHX_ register SV *sv, STRLEN *lp)
2854 sv_utf8_upgrade(sv);
2855 return SvPV(sv,*lp);
2858 /* This function is only called on magical items */
2860 Perl_sv_2bool(pTHX_ register SV *sv)
2869 if (SvAMAGIC(sv) && (tmpsv=AMG_CALLun(sv,bool_)) &&
2870 (SvRV(tmpsv) != SvRV(sv)))
2871 return SvTRUE(tmpsv);
2872 return SvRV(sv) != 0;
2875 register XPV* Xpvtmp;
2876 if ((Xpvtmp = (XPV*)SvANY(sv)) &&
2877 (*Xpvtmp->xpv_pv > '0' ||
2878 Xpvtmp->xpv_cur > 1 ||
2879 (Xpvtmp->xpv_cur && *Xpvtmp->xpv_pv != '0')))
2886 return SvIVX(sv) != 0;
2889 return SvNVX(sv) != 0.0;
2897 =for apidoc sv_utf8_upgrade
2899 Convert the PV of an SV to its UTF8-encoded form.
2905 Perl_sv_utf8_upgrade(pTHX_ register SV *sv)
2910 if (!sv || !SvPOK(sv) || SvUTF8(sv))
2913 /* This function could be much more efficient if we had a FLAG in SVs
2914 * to signal if there are any hibit chars in the PV.
2915 * Given that there isn't make loop fast as possible
2921 if ((hibit = *t++ & 0x80))
2927 if (SvREADONLY(sv) && SvFAKE(sv)) {
2928 sv_force_normal(sv);
2931 len = SvCUR(sv) + 1; /* Plus the \0 */
2932 SvPVX(sv) = (char*)bytes_to_utf8((U8*)s, &len);
2933 SvCUR(sv) = len - 1;
2935 Safefree(s); /* No longer using what was there before. */
2936 SvLEN(sv) = len; /* No longer know the real size. */
2942 =for apidoc sv_utf8_downgrade
2944 Attempt to convert the PV of an SV from UTF8-encoded to byte encoding.
2945 This may not be possible if the PV contains non-byte encoding characters;
2946 if this is the case, either returns false or, if C<fail_ok> is not
2953 Perl_sv_utf8_downgrade(pTHX_ register SV* sv, bool fail_ok)
2955 if (SvPOK(sv) && SvUTF8(sv)) {
2957 char *c = SvPVX(sv);
2958 STRLEN len = SvCUR(sv);
2960 if (!utf8_to_bytes((U8*)c, &len)) {
2965 Perl_croak(aTHX_ "Wide character in %s",
2966 PL_op_desc[PL_op->op_type]);
2968 Perl_croak(aTHX_ "Wide character");
2980 =for apidoc sv_utf8_encode
2982 Convert the PV of an SV to UTF8-encoded, but then turn off the C<SvUTF8>
2983 flag so that it looks like bytes again. Nothing calls this.
2989 Perl_sv_utf8_encode(pTHX_ register SV *sv)
2991 sv_utf8_upgrade(sv);
2996 Perl_sv_utf8_decode(pTHX_ register SV *sv)
3001 bool has_utf = FALSE;
3002 if (!sv_utf8_downgrade(sv, TRUE))
3005 /* it is actually just a matter of turning the utf8 flag on, but
3006 * we want to make sure everything inside is valid utf8 first.
3009 if (!is_utf8_string((U8*)c, SvCUR(sv)+1))
3023 /* Note: sv_setsv() should not be called with a source string that needs
3024 * to be reused, since it may destroy the source string if it is marked
3029 =for apidoc sv_setsv
3031 Copies the contents of the source SV C<ssv> into the destination SV C<dsv>.
3032 The source SV may be destroyed if it is mortal. Does not handle 'set'
3033 magic. See the macro forms C<SvSetSV>, C<SvSetSV_nosteal> and
3040 Perl_sv_setsv(pTHX_ SV *dstr, register SV *sstr)
3042 register U32 sflags;
3048 SV_CHECK_THINKFIRST(dstr);
3050 sstr = &PL_sv_undef;
3051 stype = SvTYPE(sstr);
3052 dtype = SvTYPE(dstr);
3056 /* There's a lot of redundancy below but we're going for speed here */
3061 if (dtype != SVt_PVGV) {
3062 (void)SvOK_off(dstr);
3070 sv_upgrade(dstr, SVt_IV);
3073 sv_upgrade(dstr, SVt_PVNV);
3077 sv_upgrade(dstr, SVt_PVIV);
3080 (void)SvIOK_only(dstr);
3081 SvIVX(dstr) = SvIVX(sstr);
3084 if (SvTAINTED(sstr))
3095 sv_upgrade(dstr, SVt_NV);
3100 sv_upgrade(dstr, SVt_PVNV);
3103 SvNVX(dstr) = SvNVX(sstr);
3104 (void)SvNOK_only(dstr);
3105 if (SvTAINTED(sstr))
3113 sv_upgrade(dstr, SVt_RV);
3114 else if (dtype == SVt_PVGV &&
3115 SvTYPE(SvRV(sstr)) == SVt_PVGV) {
3118 if (GvIMPORTED(dstr) != GVf_IMPORTED
3119 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3121 GvIMPORTED_on(dstr);
3132 sv_upgrade(dstr, SVt_PV);
3135 if (dtype < SVt_PVIV)
3136 sv_upgrade(dstr, SVt_PVIV);
3139 if (dtype < SVt_PVNV)
3140 sv_upgrade(dstr, SVt_PVNV);
3147 Perl_croak(aTHX_ "Bizarre copy of %s in %s", sv_reftype(sstr, 0),
3148 PL_op_name[PL_op->op_type]);
3150 Perl_croak(aTHX_ "Bizarre copy of %s", sv_reftype(sstr, 0));
3154 if (dtype <= SVt_PVGV) {
3156 if (dtype != SVt_PVGV) {
3157 char *name = GvNAME(sstr);
3158 STRLEN len = GvNAMELEN(sstr);
3159 sv_upgrade(dstr, SVt_PVGV);
3160 sv_magic(dstr, dstr, '*', Nullch, 0);
3161 GvSTASH(dstr) = (HV*)SvREFCNT_inc(GvSTASH(sstr));
3162 GvNAME(dstr) = savepvn(name, len);
3163 GvNAMELEN(dstr) = len;
3164 SvFAKE_on(dstr); /* can coerce to non-glob */
3166 /* ahem, death to those who redefine active sort subs */
3167 else if (PL_curstackinfo->si_type == PERLSI_SORT
3168 && GvCV(dstr) && PL_sortcop == CvSTART(GvCV(dstr)))
3169 Perl_croak(aTHX_ "Can't redefine active sort subroutine %s",
3171 (void)SvOK_off(dstr);
3172 GvINTRO_off(dstr); /* one-shot flag */
3174 GvGP(dstr) = gp_ref(GvGP(sstr));
3175 if (SvTAINTED(sstr))
3177 if (GvIMPORTED(dstr) != GVf_IMPORTED
3178 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3180 GvIMPORTED_on(dstr);
3188 if (SvGMAGICAL(sstr)) {
3190 if (SvTYPE(sstr) != stype) {
3191 stype = SvTYPE(sstr);
3192 if (stype == SVt_PVGV && dtype <= SVt_PVGV)
3196 if (stype == SVt_PVLV)
3197 (void)SvUPGRADE(dstr, SVt_PVNV);
3199 (void)SvUPGRADE(dstr, stype);
3202 sflags = SvFLAGS(sstr);
3204 if (sflags & SVf_ROK) {
3205 if (dtype >= SVt_PV) {
3206 if (dtype == SVt_PVGV) {
3207 SV *sref = SvREFCNT_inc(SvRV(sstr));
3209 int intro = GvINTRO(dstr);
3214 GvINTRO_off(dstr); /* one-shot flag */
3215 Newz(602,gp, 1, GP);
3216 GvGP(dstr) = gp_ref(gp);
3217 GvSV(dstr) = NEWSV(72,0);
3218 GvLINE(dstr) = CopLINE(PL_curcop);
3219 GvEGV(dstr) = (GV*)dstr;
3222 switch (SvTYPE(sref)) {
3225 SAVESPTR(GvAV(dstr));
3227 dref = (SV*)GvAV(dstr);
3228 GvAV(dstr) = (AV*)sref;
3229 if (!GvIMPORTED_AV(dstr)
3230 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3232 GvIMPORTED_AV_on(dstr);
3237 SAVESPTR(GvHV(dstr));
3239 dref = (SV*)GvHV(dstr);
3240 GvHV(dstr) = (HV*)sref;
3241 if (!GvIMPORTED_HV(dstr)
3242 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3244 GvIMPORTED_HV_on(dstr);
3249 if (GvCVGEN(dstr) && GvCV(dstr) != (CV*)sref) {
3250 SvREFCNT_dec(GvCV(dstr));
3251 GvCV(dstr) = Nullcv;
3252 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3253 PL_sub_generation++;
3255 SAVESPTR(GvCV(dstr));
3258 dref = (SV*)GvCV(dstr);
3259 if (GvCV(dstr) != (CV*)sref) {
3260 CV* cv = GvCV(dstr);
3262 if (!GvCVGEN((GV*)dstr) &&
3263 (CvROOT(cv) || CvXSUB(cv)))
3266 /* ahem, death to those who redefine
3267 * active sort subs */
3268 if (PL_curstackinfo->si_type == PERLSI_SORT &&
3269 PL_sortcop == CvSTART(cv))
3271 "Can't redefine active sort subroutine %s",
3272 GvENAME((GV*)dstr));
3273 /* Redefining a sub - warning is mandatory if
3274 it was a const and its value changed. */
3275 if (ckWARN(WARN_REDEFINE)
3277 && (!CvCONST((CV*)sref)
3278 || sv_cmp(cv_const_sv(cv),
3279 cv_const_sv((CV*)sref)))))
3281 Perl_warner(aTHX_ WARN_REDEFINE,
3283 ? "Constant subroutine %s redefined"
3284 : "Subroutine %s redefined",
3285 GvENAME((GV*)dstr));
3288 cv_ckproto(cv, (GV*)dstr,
3289 SvPOK(sref) ? SvPVX(sref) : Nullch);
3291 GvCV(dstr) = (CV*)sref;
3292 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3293 GvASSUMECV_on(dstr);
3294 PL_sub_generation++;
3296 if (!GvIMPORTED_CV(dstr)
3297 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3299 GvIMPORTED_CV_on(dstr);
3304 SAVESPTR(GvIOp(dstr));
3306 dref = (SV*)GvIOp(dstr);
3307 GvIOp(dstr) = (IO*)sref;
3311 SAVESPTR(GvFORM(dstr));
3313 dref = (SV*)GvFORM(dstr);
3314 GvFORM(dstr) = (CV*)sref;
3318 SAVESPTR(GvSV(dstr));
3320 dref = (SV*)GvSV(dstr);
3322 if (!GvIMPORTED_SV(dstr)
3323 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3325 GvIMPORTED_SV_on(dstr);
3333 if (SvTAINTED(sstr))
3338 (void)SvOOK_off(dstr); /* backoff */
3340 Safefree(SvPVX(dstr));
3341 SvLEN(dstr)=SvCUR(dstr)=0;
3344 (void)SvOK_off(dstr);
3345 SvRV(dstr) = SvREFCNT_inc(SvRV(sstr));
3347 if (sflags & SVp_NOK) {
3349 SvNVX(dstr) = SvNVX(sstr);
3351 if (sflags & SVp_IOK) {
3352 (void)SvIOK_on(dstr);
3353 SvIVX(dstr) = SvIVX(sstr);
3354 if (sflags & SVf_IVisUV)
3357 if (SvAMAGIC(sstr)) {
3361 else if (sflags & SVp_POK) {
3364 * Check to see if we can just swipe the string. If so, it's a
3365 * possible small lose on short strings, but a big win on long ones.
3366 * It might even be a win on short strings if SvPVX(dstr)
3367 * has to be allocated and SvPVX(sstr) has to be freed.
3370 if (SvTEMP(sstr) && /* slated for free anyway? */
3371 SvREFCNT(sstr) == 1 && /* and no other references to it? */
3372 !(sflags & SVf_OOK) && /* and not involved in OOK hack? */
3373 SvLEN(sstr) && /* and really is a string */
3374 !(PL_op && PL_op->op_type == OP_AASSIGN)) /* and won't be needed again, potentially */
3376 if (SvPVX(dstr)) { /* we know that dtype >= SVt_PV */
3378 SvFLAGS(dstr) &= ~SVf_OOK;
3379 Safefree(SvPVX(dstr) - SvIVX(dstr));
3381 else if (SvLEN(dstr))
3382 Safefree(SvPVX(dstr));
3384 (void)SvPOK_only(dstr);
3385 SvPV_set(dstr, SvPVX(sstr));
3386 SvLEN_set(dstr, SvLEN(sstr));
3387 SvCUR_set(dstr, SvCUR(sstr));
3390 (void)SvOK_off(sstr); /* NOTE: nukes most SvFLAGS on sstr */
3391 SvPV_set(sstr, Nullch);
3396 else { /* have to copy actual string */
3397 STRLEN len = SvCUR(sstr);
3399 SvGROW(dstr, len + 1); /* inlined from sv_setpvn */
3400 Move(SvPVX(sstr),SvPVX(dstr),len,char);
3401 SvCUR_set(dstr, len);
3402 *SvEND(dstr) = '\0';
3403 (void)SvPOK_only(dstr);
3405 if ((sflags & SVf_UTF8) && !IN_BYTE)
3408 if (sflags & SVp_NOK) {
3410 SvNVX(dstr) = SvNVX(sstr);
3412 if (sflags & SVp_IOK) {
3413 (void)SvIOK_on(dstr);
3414 SvIVX(dstr) = SvIVX(sstr);
3415 if (sflags & SVf_IVisUV)
3419 else if (sflags & SVp_NOK) {
3420 SvNVX(dstr) = SvNVX(sstr);
3421 (void)SvNOK_only(dstr);
3422 if (sflags & SVf_IOK) {
3423 (void)SvIOK_on(dstr);
3424 SvIVX(dstr) = SvIVX(sstr);
3425 /* XXXX Do we want to set IsUV for IV(ROK)? Be extra safe... */
3426 if (sflags & SVf_IVisUV)
3430 else if (sflags & SVp_IOK) {
3431 (void)SvIOK_only(dstr);
3432 SvIVX(dstr) = SvIVX(sstr);
3433 if (sflags & SVf_IVisUV)
3437 if (dtype == SVt_PVGV) {
3438 if (ckWARN(WARN_MISC))
3439 Perl_warner(aTHX_ WARN_MISC, "Undefined value assigned to typeglob");
3442 (void)SvOK_off(dstr);
3444 if (SvTAINTED(sstr))
3449 =for apidoc sv_setsv_mg
3451 Like C<sv_setsv>, but also handles 'set' magic.
3457 Perl_sv_setsv_mg(pTHX_ SV *dstr, register SV *sstr)
3459 sv_setsv(dstr,sstr);
3464 =for apidoc sv_setpvn
3466 Copies a string into an SV. The C<len> parameter indicates the number of
3467 bytes to be copied. Does not handle 'set' magic. See C<sv_setpvn_mg>.
3473 Perl_sv_setpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3475 register char *dptr;
3477 /* len is STRLEN which is unsigned, need to copy to signed */
3481 SV_CHECK_THINKFIRST(sv);
3486 (void)SvUPGRADE(sv, SVt_PV);
3488 SvGROW(sv, len + 1);
3490 Move(ptr,dptr,len,char);
3493 (void)SvPOK_only(sv); /* validate pointer */
3498 =for apidoc sv_setpvn_mg
3500 Like C<sv_setpvn>, but also handles 'set' magic.
3506 Perl_sv_setpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3508 sv_setpvn(sv,ptr,len);
3513 =for apidoc sv_setpv
3515 Copies a string into an SV. The string must be null-terminated. Does not
3516 handle 'set' magic. See C<sv_setpv_mg>.
3522 Perl_sv_setpv(pTHX_ register SV *sv, register const char *ptr)
3524 register STRLEN len;
3526 SV_CHECK_THINKFIRST(sv);
3532 (void)SvUPGRADE(sv, SVt_PV);
3534 SvGROW(sv, len + 1);
3535 Move(ptr,SvPVX(sv),len+1,char);
3537 (void)SvPOK_only(sv); /* validate pointer */
3542 =for apidoc sv_setpv_mg
3544 Like C<sv_setpv>, but also handles 'set' magic.
3550 Perl_sv_setpv_mg(pTHX_ register SV *sv, register const char *ptr)
3557 =for apidoc sv_usepvn
3559 Tells an SV to use C<ptr> to find its string value. Normally the string is
3560 stored inside the SV but sv_usepvn allows the SV to use an outside string.
3561 The C<ptr> should point to memory that was allocated by C<malloc>. The
3562 string length, C<len>, must be supplied. This function will realloc the
3563 memory pointed to by C<ptr>, so that pointer should not be freed or used by
3564 the programmer after giving it to sv_usepvn. Does not handle 'set' magic.
3565 See C<sv_usepvn_mg>.
3571 Perl_sv_usepvn(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
3573 SV_CHECK_THINKFIRST(sv);
3574 (void)SvUPGRADE(sv, SVt_PV);
3579 (void)SvOOK_off(sv);
3580 if (SvPVX(sv) && SvLEN(sv))
3581 Safefree(SvPVX(sv));
3582 Renew(ptr, len+1, char);
3585 SvLEN_set(sv, len+1);
3587 (void)SvPOK_only(sv); /* validate pointer */
3592 =for apidoc sv_usepvn_mg
3594 Like C<sv_usepvn>, but also handles 'set' magic.
3600 Perl_sv_usepvn_mg(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
3602 sv_usepvn(sv,ptr,len);
3607 Perl_sv_force_normal_flags(pTHX_ register SV *sv, U32 flags)
3609 if (SvREADONLY(sv)) {
3611 char *pvx = SvPVX(sv);
3612 STRLEN len = SvCUR(sv);
3613 U32 hash = SvUVX(sv);
3614 SvGROW(sv, len + 1);
3615 Move(pvx,SvPVX(sv),len,char);
3619 unsharepvn(pvx,SvUTF8(sv)?-len:len,hash);
3621 else if (PL_curcop != &PL_compiling)
3622 Perl_croak(aTHX_ PL_no_modify);
3625 sv_unref_flags(sv, flags);
3626 else if (SvFAKE(sv) && SvTYPE(sv) == SVt_PVGV)
3631 Perl_sv_force_normal(pTHX_ register SV *sv)
3633 sv_force_normal_flags(sv, 0);
3639 Efficient removal of characters from the beginning of the string buffer.
3640 SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
3641 the string buffer. The C<ptr> becomes the first character of the adjusted
3648 Perl_sv_chop(pTHX_ register SV *sv, register char *ptr) /* like set but assuming ptr is in sv */
3652 register STRLEN delta;
3654 if (!ptr || !SvPOKp(sv))
3656 SV_CHECK_THINKFIRST(sv);
3657 if (SvTYPE(sv) < SVt_PVIV)
3658 sv_upgrade(sv,SVt_PVIV);
3661 if (!SvLEN(sv)) { /* make copy of shared string */
3662 char *pvx = SvPVX(sv);
3663 STRLEN len = SvCUR(sv);
3664 SvGROW(sv, len + 1);
3665 Move(pvx,SvPVX(sv),len,char);
3669 SvFLAGS(sv) |= SVf_OOK;
3671 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVp_IOK|SVp_NOK|SVf_IVisUV);
3672 delta = ptr - SvPVX(sv);
3680 =for apidoc sv_catpvn
3682 Concatenates the string onto the end of the string which is in the SV. The
3683 C<len> indicates number of bytes to copy. Handles 'get' magic, but not
3684 'set' magic. See C<sv_catpvn_mg>.
3690 Perl_sv_catpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3695 junk = SvPV_force(sv, tlen);
3696 SvGROW(sv, tlen + len + 1);
3699 Move(ptr,SvPVX(sv)+tlen,len,char);
3702 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3707 =for apidoc sv_catpvn_mg
3709 Like C<sv_catpvn>, but also handles 'set' magic.
3715 Perl_sv_catpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3717 sv_catpvn(sv,ptr,len);
3722 =for apidoc sv_catsv
3724 Concatenates the string from SV C<ssv> onto the end of the string in SV
3725 C<dsv>. Handles 'get' magic, but not 'set' magic. See C<sv_catsv_mg>.
3731 Perl_sv_catsv(pTHX_ SV *dstr, register SV *sstr)
3737 if ((s = SvPV(sstr, len))) {
3738 if (DO_UTF8(sstr)) {
3739 sv_utf8_upgrade(dstr);
3740 sv_catpvn(dstr,s,len);
3744 sv_catpvn(dstr,s,len);
3749 =for apidoc sv_catsv_mg
3751 Like C<sv_catsv>, but also handles 'set' magic.
3757 Perl_sv_catsv_mg(pTHX_ SV *dstr, register SV *sstr)
3759 sv_catsv(dstr,sstr);
3764 =for apidoc sv_catpv
3766 Concatenates the string onto the end of the string which is in the SV.
3767 Handles 'get' magic, but not 'set' magic. See C<sv_catpv_mg>.
3773 Perl_sv_catpv(pTHX_ register SV *sv, register const char *ptr)
3775 register STRLEN len;
3781 junk = SvPV_force(sv, tlen);
3783 SvGROW(sv, tlen + len + 1);
3786 Move(ptr,SvPVX(sv)+tlen,len+1,char);
3788 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3793 =for apidoc sv_catpv_mg
3795 Like C<sv_catpv>, but also handles 'set' magic.
3801 Perl_sv_catpv_mg(pTHX_ register SV *sv, register const char *ptr)
3808 Perl_newSV(pTHX_ STRLEN len)
3814 sv_upgrade(sv, SVt_PV);
3815 SvGROW(sv, len + 1);
3820 /* name is assumed to contain an SV* if (name && namelen == HEf_SVKEY) */
3823 =for apidoc sv_magic
3825 Adds magic to an SV.
3831 Perl_sv_magic(pTHX_ register SV *sv, SV *obj, int how, const char *name, I32 namlen)
3835 if (SvREADONLY(sv)) {
3836 if (PL_curcop != &PL_compiling && !strchr("gBf", how))
3837 Perl_croak(aTHX_ PL_no_modify);
3839 if (SvMAGICAL(sv) || (how == 't' && SvTYPE(sv) >= SVt_PVMG)) {
3840 if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
3847 (void)SvUPGRADE(sv, SVt_PVMG);
3849 Newz(702,mg, 1, MAGIC);
3850 mg->mg_moremagic = SvMAGIC(sv);
3853 if (!obj || obj == sv || how == '#' || how == 'r')
3856 mg->mg_obj = SvREFCNT_inc(obj);
3857 mg->mg_flags |= MGf_REFCOUNTED;
3860 mg->mg_len = namlen;
3863 mg->mg_ptr = savepvn(name, namlen);
3864 else if (namlen == HEf_SVKEY)
3865 mg->mg_ptr = (char*)SvREFCNT_inc((SV*)name);
3869 mg->mg_virtual = &PL_vtbl_sv;
3872 mg->mg_virtual = &PL_vtbl_amagic;
3875 mg->mg_virtual = &PL_vtbl_amagicelem;
3881 mg->mg_virtual = &PL_vtbl_bm;
3884 mg->mg_virtual = &PL_vtbl_regdata;
3887 mg->mg_virtual = &PL_vtbl_regdatum;
3890 mg->mg_virtual = &PL_vtbl_env;
3893 mg->mg_virtual = &PL_vtbl_fm;
3896 mg->mg_virtual = &PL_vtbl_envelem;
3899 mg->mg_virtual = &PL_vtbl_mglob;
3902 mg->mg_virtual = &PL_vtbl_isa;
3905 mg->mg_virtual = &PL_vtbl_isaelem;
3908 mg->mg_virtual = &PL_vtbl_nkeys;
3915 mg->mg_virtual = &PL_vtbl_dbline;
3919 mg->mg_virtual = &PL_vtbl_mutex;
3921 #endif /* USE_THREADS */
3922 #ifdef USE_LOCALE_COLLATE
3924 mg->mg_virtual = &PL_vtbl_collxfrm;
3926 #endif /* USE_LOCALE_COLLATE */
3928 mg->mg_virtual = &PL_vtbl_pack;
3932 mg->mg_virtual = &PL_vtbl_packelem;
3935 mg->mg_virtual = &PL_vtbl_regexp;
3938 mg->mg_virtual = &PL_vtbl_sig;
3941 mg->mg_virtual = &PL_vtbl_sigelem;
3944 mg->mg_virtual = &PL_vtbl_taint;
3948 mg->mg_virtual = &PL_vtbl_uvar;
3951 mg->mg_virtual = &PL_vtbl_vec;
3954 mg->mg_virtual = &PL_vtbl_substr;
3957 mg->mg_virtual = &PL_vtbl_defelem;
3960 mg->mg_virtual = &PL_vtbl_glob;
3963 mg->mg_virtual = &PL_vtbl_arylen;
3966 mg->mg_virtual = &PL_vtbl_pos;
3969 mg->mg_virtual = &PL_vtbl_backref;
3971 case '~': /* Reserved for use by extensions not perl internals. */
3972 /* Useful for attaching extension internal data to perl vars. */
3973 /* Note that multiple extensions may clash if magical scalars */
3974 /* etc holding private data from one are passed to another. */
3978 Perl_croak(aTHX_ "Don't know how to handle magic of type '%c'", how);
3982 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
3986 =for apidoc sv_unmagic
3988 Removes magic from an SV.
3994 Perl_sv_unmagic(pTHX_ SV *sv, int type)
3998 if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
4001 for (mg = *mgp; mg; mg = *mgp) {
4002 if (mg->mg_type == type) {
4003 MGVTBL* vtbl = mg->mg_virtual;
4004 *mgp = mg->mg_moremagic;
4005 if (vtbl && vtbl->svt_free)
4006 CALL_FPTR(vtbl->svt_free)(aTHX_ sv, mg);
4007 if (mg->mg_ptr && mg->mg_type != 'g')
4008 if (mg->mg_len >= 0)
4009 Safefree(mg->mg_ptr);
4010 else if (mg->mg_len == HEf_SVKEY)
4011 SvREFCNT_dec((SV*)mg->mg_ptr);
4012 if (mg->mg_flags & MGf_REFCOUNTED)
4013 SvREFCNT_dec(mg->mg_obj);
4017 mgp = &mg->mg_moremagic;
4021 SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
4028 =for apidoc sv_rvweaken
4036 Perl_sv_rvweaken(pTHX_ SV *sv)
4039 if (!SvOK(sv)) /* let undefs pass */
4042 Perl_croak(aTHX_ "Can't weaken a nonreference");
4043 else if (SvWEAKREF(sv)) {
4044 if (ckWARN(WARN_MISC))
4045 Perl_warner(aTHX_ WARN_MISC, "Reference is already weak");
4049 sv_add_backref(tsv, sv);
4056 S_sv_add_backref(pTHX_ SV *tsv, SV *sv)
4060 if (SvMAGICAL(tsv) && (mg = mg_find(tsv, '<')))
4061 av = (AV*)mg->mg_obj;
4064 sv_magic(tsv, (SV*)av, '<', NULL, 0);
4065 SvREFCNT_dec(av); /* for sv_magic */
4071 S_sv_del_backref(pTHX_ SV *sv)
4078 if (!SvMAGICAL(tsv) || !(mg = mg_find(tsv, '<')))
4079 Perl_croak(aTHX_ "panic: del_backref");
4080 av = (AV *)mg->mg_obj;
4085 svp[i] = &PL_sv_undef; /* XXX */
4092 =for apidoc sv_insert
4094 Inserts a string at the specified offset/length within the SV. Similar to
4095 the Perl substr() function.
4101 Perl_sv_insert(pTHX_ SV *bigstr, STRLEN offset, STRLEN len, char *little, STRLEN littlelen)
4105 register char *midend;
4106 register char *bigend;
4112 Perl_croak(aTHX_ "Can't modify non-existent substring");
4113 SvPV_force(bigstr, curlen);
4114 (void)SvPOK_only_UTF8(bigstr);
4115 if (offset + len > curlen) {
4116 SvGROW(bigstr, offset+len+1);
4117 Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
4118 SvCUR_set(bigstr, offset+len);
4122 i = littlelen - len;
4123 if (i > 0) { /* string might grow */
4124 big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
4125 mid = big + offset + len;
4126 midend = bigend = big + SvCUR(bigstr);
4129 while (midend > mid) /* shove everything down */
4130 *--bigend = *--midend;
4131 Move(little,big+offset,littlelen,char);
4137 Move(little,SvPVX(bigstr)+offset,len,char);
4142 big = SvPVX(bigstr);
4145 bigend = big + SvCUR(bigstr);
4147 if (midend > bigend)
4148 Perl_croak(aTHX_ "panic: sv_insert");
4150 if (mid - big > bigend - midend) { /* faster to shorten from end */
4152 Move(little, mid, littlelen,char);
4155 i = bigend - midend;
4157 Move(midend, mid, i,char);
4161 SvCUR_set(bigstr, mid - big);
4164 else if ((i = mid - big)) { /* faster from front */
4165 midend -= littlelen;
4167 sv_chop(bigstr,midend-i);
4172 Move(little, mid, littlelen,char);
4174 else if (littlelen) {
4175 midend -= littlelen;
4176 sv_chop(bigstr,midend);
4177 Move(little,midend,littlelen,char);
4180 sv_chop(bigstr,midend);
4186 =for apidoc sv_replace
4188 Make the first argument a copy of the second, then delete the original.
4194 Perl_sv_replace(pTHX_ register SV *sv, register SV *nsv)
4196 U32 refcnt = SvREFCNT(sv);
4197 SV_CHECK_THINKFIRST(sv);
4198 if (SvREFCNT(nsv) != 1 && ckWARN_d(WARN_INTERNAL))
4199 Perl_warner(aTHX_ WARN_INTERNAL, "Reference miscount in sv_replace()");
4200 if (SvMAGICAL(sv)) {
4204 sv_upgrade(nsv, SVt_PVMG);
4205 SvMAGIC(nsv) = SvMAGIC(sv);
4206 SvFLAGS(nsv) |= SvMAGICAL(sv);
4212 assert(!SvREFCNT(sv));
4213 StructCopy(nsv,sv,SV);
4214 SvREFCNT(sv) = refcnt;
4215 SvFLAGS(nsv) |= SVTYPEMASK; /* Mark as freed */
4220 =for apidoc sv_clear
4222 Clear an SV, making it empty. Does not free the memory used by the SV
4229 Perl_sv_clear(pTHX_ register SV *sv)
4233 assert(SvREFCNT(sv) == 0);
4236 if (PL_defstash) { /* Still have a symbol table? */
4241 Zero(&tmpref, 1, SV);
4242 sv_upgrade(&tmpref, SVt_RV);
4244 SvREADONLY_on(&tmpref); /* DESTROY() could be naughty */
4245 SvREFCNT(&tmpref) = 1;
4248 stash = SvSTASH(sv);
4249 destructor = gv_fetchmethod(SvSTASH(sv), "DESTROY");
4252 PUSHSTACKi(PERLSI_DESTROY);
4253 SvRV(&tmpref) = SvREFCNT_inc(sv);
4258 call_sv((SV*)GvCV(destructor),
4259 G_DISCARD|G_EVAL|G_KEEPERR);
4265 } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
4267 del_XRV(SvANY(&tmpref));
4270 if (PL_in_clean_objs)
4271 Perl_croak(aTHX_ "DESTROY created new reference to dead object '%s'",
4273 /* DESTROY gave object new lease on life */
4279 SvREFCNT_dec(SvSTASH(sv)); /* possibly of changed persuasion */
4280 SvOBJECT_off(sv); /* Curse the object. */
4281 if (SvTYPE(sv) != SVt_PVIO)
4282 --PL_sv_objcount; /* XXX Might want something more general */
4285 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv))
4288 switch (SvTYPE(sv)) {
4291 IoIFP(sv) != PerlIO_stdin() &&
4292 IoIFP(sv) != PerlIO_stdout() &&
4293 IoIFP(sv) != PerlIO_stderr())
4295 io_close((IO*)sv, FALSE);
4297 if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
4298 PerlDir_close(IoDIRP(sv));
4299 IoDIRP(sv) = (DIR*)NULL;
4300 Safefree(IoTOP_NAME(sv));
4301 Safefree(IoFMT_NAME(sv));
4302 Safefree(IoBOTTOM_NAME(sv));
4317 SvREFCNT_dec(LvTARG(sv));
4321 Safefree(GvNAME(sv));
4322 /* cannot decrease stash refcount yet, as we might recursively delete
4323 ourselves when the refcnt drops to zero. Delay SvREFCNT_dec
4324 of stash until current sv is completely gone.
4325 -- JohnPC, 27 Mar 1998 */
4326 stash = GvSTASH(sv);
4332 (void)SvOOK_off(sv);
4340 SvREFCNT_dec(SvRV(sv));
4342 else if (SvPVX(sv) && SvLEN(sv))
4343 Safefree(SvPVX(sv));
4344 else if (SvPVX(sv) && SvREADONLY(sv) && SvFAKE(sv)) {
4345 unsharepvn(SvPVX(sv),SvUTF8(sv)?-SvCUR(sv):SvCUR(sv),SvUVX(sv));
4357 switch (SvTYPE(sv)) {
4373 del_XPVIV(SvANY(sv));
4376 del_XPVNV(SvANY(sv));
4379 del_XPVMG(SvANY(sv));
4382 del_XPVLV(SvANY(sv));
4385 del_XPVAV(SvANY(sv));
4388 del_XPVHV(SvANY(sv));
4391 del_XPVCV(SvANY(sv));
4394 del_XPVGV(SvANY(sv));
4395 /* code duplication for increased performance. */
4396 SvFLAGS(sv) &= SVf_BREAK;
4397 SvFLAGS(sv) |= SVTYPEMASK;
4398 /* decrease refcount of the stash that owns this GV, if any */
4400 SvREFCNT_dec(stash);
4401 return; /* not break, SvFLAGS reset already happened */
4403 del_XPVBM(SvANY(sv));
4406 del_XPVFM(SvANY(sv));
4409 del_XPVIO(SvANY(sv));
4412 SvFLAGS(sv) &= SVf_BREAK;
4413 SvFLAGS(sv) |= SVTYPEMASK;
4417 Perl_sv_newref(pTHX_ SV *sv)
4420 ATOMIC_INC(SvREFCNT(sv));
4427 Free the memory used by an SV.
4433 Perl_sv_free(pTHX_ SV *sv)
4435 int refcount_is_zero;
4439 if (SvREFCNT(sv) == 0) {
4440 if (SvFLAGS(sv) & SVf_BREAK)
4442 if (PL_in_clean_all) /* All is fair */
4444 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
4445 /* make sure SvREFCNT(sv)==0 happens very seldom */
4446 SvREFCNT(sv) = (~(U32)0)/2;
4449 if (ckWARN_d(WARN_INTERNAL))
4450 Perl_warner(aTHX_ WARN_INTERNAL, "Attempt to free unreferenced scalar");
4453 ATOMIC_DEC_AND_TEST(refcount_is_zero, SvREFCNT(sv));
4454 if (!refcount_is_zero)
4458 if (ckWARN_d(WARN_DEBUGGING))
4459 Perl_warner(aTHX_ WARN_DEBUGGING,
4460 "Attempt to free temp prematurely: SV 0x%"UVxf,
4465 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
4466 /* make sure SvREFCNT(sv)==0 happens very seldom */
4467 SvREFCNT(sv) = (~(U32)0)/2;
4478 Returns the length of the string in the SV. See also C<SvCUR>.
4484 Perl_sv_len(pTHX_ register SV *sv)
4493 len = mg_length(sv);
4495 junk = SvPV(sv, len);
4500 =for apidoc sv_len_utf8
4502 Returns the number of characters in the string in an SV, counting wide
4503 UTF8 bytes as a single character.
4509 Perl_sv_len_utf8(pTHX_ register SV *sv)
4516 return mg_length(sv);
4521 U8 *s = (U8*)SvPV(sv, len);
4523 return Perl_utf8_length(aTHX_ s, s + len);
4528 Perl_sv_pos_u2b(pTHX_ register SV *sv, I32* offsetp, I32* lenp)
4533 I32 uoffset = *offsetp;
4539 start = s = (U8*)SvPV(sv, len);
4541 while (s < send && uoffset--)
4545 *offsetp = s - start;
4549 while (s < send && ulen--)
4559 Perl_sv_pos_b2u(pTHX_ register SV *sv, I32* offsetp)
4568 s = (U8*)SvPV(sv, len);
4570 Perl_croak(aTHX_ "panic: bad byte offset");
4571 send = s + *offsetp;
4578 if (ckWARN_d(WARN_UTF8))
4579 Perl_warner(aTHX_ WARN_UTF8, "Malformed UTF-8 character");
4589 Returns a boolean indicating whether the strings in the two SVs are
4596 Perl_sv_eq(pTHX_ register SV *sv1, register SV *sv2)
4603 bool pv1tmp = FALSE;
4604 bool pv2tmp = FALSE;
4611 pv1 = SvPV(sv1, cur1);
4618 pv2 = SvPV(sv2, cur2);
4620 /* do not utf8ize the comparands as a side-effect */
4621 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTE) {
4623 pv2 = (char*)bytes_to_utf8((U8*)pv2, &cur2);
4627 pv1 = (char*)bytes_to_utf8((U8*)pv1, &cur1);
4633 eq = memEQ(pv1, pv2, cur1);
4646 Compares the strings in two SVs. Returns -1, 0, or 1 indicating whether the
4647 string in C<sv1> is less than, equal to, or greater than the string in
4654 Perl_sv_cmp(pTHX_ register SV *sv1, register SV *sv2)
4659 bool pv1tmp = FALSE;
4660 bool pv2tmp = FALSE;
4667 pv1 = SvPV(sv1, cur1);
4674 pv2 = SvPV(sv2, cur2);
4676 /* do not utf8ize the comparands as a side-effect */
4677 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTE) {
4679 pv2 = (char*)bytes_to_utf8((U8*)pv2, &cur2);
4683 pv1 = (char*)bytes_to_utf8((U8*)pv1, &cur1);
4689 cmp = cur2 ? -1 : 0;
4693 I32 retval = memcmp((void*)pv1, (void*)pv2, cur1 < cur2 ? cur1 : cur2);
4696 cmp = retval < 0 ? -1 : 1;
4697 } else if (cur1 == cur2) {
4700 cmp = cur1 < cur2 ? -1 : 1;
4713 =for apidoc sv_cmp_locale
4715 Compares the strings in two SVs in a locale-aware manner. See
4722 Perl_sv_cmp_locale(pTHX_ register SV *sv1, register SV *sv2)
4724 #ifdef USE_LOCALE_COLLATE
4730 if (PL_collation_standard)
4734 pv1 = sv1 ? sv_collxfrm(sv1, &len1) : (char *) NULL;
4736 pv2 = sv2 ? sv_collxfrm(sv2, &len2) : (char *) NULL;
4738 if (!pv1 || !len1) {
4749 retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
4752 return retval < 0 ? -1 : 1;
4755 * When the result of collation is equality, that doesn't mean
4756 * that there are no differences -- some locales exclude some
4757 * characters from consideration. So to avoid false equalities,
4758 * we use the raw string as a tiebreaker.
4764 #endif /* USE_LOCALE_COLLATE */
4766 return sv_cmp(sv1, sv2);
4769 #ifdef USE_LOCALE_COLLATE
4771 * Any scalar variable may carry an 'o' magic that contains the
4772 * scalar data of the variable transformed to such a format that
4773 * a normal memory comparison can be used to compare the data
4774 * according to the locale settings.
4777 Perl_sv_collxfrm(pTHX_ SV *sv, STRLEN *nxp)
4781 mg = SvMAGICAL(sv) ? mg_find(sv, 'o') : (MAGIC *) NULL;
4782 if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
4787 Safefree(mg->mg_ptr);
4789 if ((xf = mem_collxfrm(s, len, &xlen))) {
4790 if (SvREADONLY(sv)) {
4793 return xf + sizeof(PL_collation_ix);
4796 sv_magic(sv, 0, 'o', 0, 0);
4797 mg = mg_find(sv, 'o');
4810 if (mg && mg->mg_ptr) {
4812 return mg->mg_ptr + sizeof(PL_collation_ix);
4820 #endif /* USE_LOCALE_COLLATE */
4825 Get a line from the filehandle and store it into the SV, optionally
4826 appending to the currently-stored string.
4832 Perl_sv_gets(pTHX_ register SV *sv, register PerlIO *fp, I32 append)
4836 register STDCHAR rslast;
4837 register STDCHAR *bp;
4841 SV_CHECK_THINKFIRST(sv);
4842 (void)SvUPGRADE(sv, SVt_PV);
4846 if (RsSNARF(PL_rs)) {
4850 else if (RsRECORD(PL_rs)) {
4851 I32 recsize, bytesread;
4854 /* Grab the size of the record we're getting */
4855 recsize = SvIV(SvRV(PL_rs));
4856 (void)SvPOK_only(sv); /* Validate pointer */
4857 buffer = SvGROW(sv, recsize + 1);
4860 /* VMS wants read instead of fread, because fread doesn't respect */
4861 /* RMS record boundaries. This is not necessarily a good thing to be */
4862 /* doing, but we've got no other real choice */
4863 bytesread = PerlLIO_read(PerlIO_fileno(fp), buffer, recsize);
4865 bytesread = PerlIO_read(fp, buffer, recsize);
4867 SvCUR_set(sv, bytesread);
4868 buffer[bytesread] = '\0';
4869 if (PerlIO_isutf8(fp))
4873 return(SvCUR(sv) ? SvPVX(sv) : Nullch);
4875 else if (RsPARA(PL_rs)) {
4880 /* Get $/ i.e. PL_rs into same encoding as stream wants */
4881 if (PerlIO_isutf8(fp)) {
4882 rsptr = SvPVutf8(PL_rs, rslen);
4885 if (SvUTF8(PL_rs)) {
4886 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
4887 Perl_croak(aTHX_ "Wide character in $/");
4890 rsptr = SvPV(PL_rs, rslen);
4894 rslast = rslen ? rsptr[rslen - 1] : '\0';
4896 if (RsPARA(PL_rs)) { /* have to do this both before and after */
4897 do { /* to make sure file boundaries work right */
4900 i = PerlIO_getc(fp);
4904 PerlIO_ungetc(fp,i);
4910 /* See if we know enough about I/O mechanism to cheat it ! */
4912 /* This used to be #ifdef test - it is made run-time test for ease
4913 of abstracting out stdio interface. One call should be cheap
4914 enough here - and may even be a macro allowing compile
4918 if (PerlIO_fast_gets(fp)) {
4921 * We're going to steal some values from the stdio struct
4922 * and put EVERYTHING in the innermost loop into registers.
4924 register STDCHAR *ptr;
4928 #if defined(VMS) && defined(PERLIO_IS_STDIO)
4929 /* An ungetc()d char is handled separately from the regular
4930 * buffer, so we getc() it back out and stuff it in the buffer.
4932 i = PerlIO_getc(fp);
4933 if (i == EOF) return 0;
4934 *(--((*fp)->_ptr)) = (unsigned char) i;
4938 /* Here is some breathtakingly efficient cheating */
4940 cnt = PerlIO_get_cnt(fp); /* get count into register */
4941 (void)SvPOK_only(sv); /* validate pointer */
4942 if (SvLEN(sv) - append <= cnt + 1) { /* make sure we have the room */
4943 if (cnt > 80 && SvLEN(sv) > append) {
4944 shortbuffered = cnt - SvLEN(sv) + append + 1;
4945 cnt -= shortbuffered;
4949 /* remember that cnt can be negative */
4950 SvGROW(sv, append + (cnt <= 0 ? 2 : (cnt + 1)));
4955 bp = (STDCHAR*)SvPVX(sv) + append; /* move these two too to registers */
4956 ptr = (STDCHAR*)PerlIO_get_ptr(fp);
4957 DEBUG_P(PerlIO_printf(Perl_debug_log,
4958 "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
4959 DEBUG_P(PerlIO_printf(Perl_debug_log,
4960 "Screamer: entering: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
4961 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
4962 PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
4967 while (cnt > 0) { /* this | eat */
4969 if ((*bp++ = *ptr++) == rslast) /* really | dust */
4970 goto thats_all_folks; /* screams | sed :-) */
4974 Copy(ptr, bp, cnt, char); /* this | eat */
4975 bp += cnt; /* screams | dust */
4976 ptr += cnt; /* louder | sed :-) */
4981 if (shortbuffered) { /* oh well, must extend */
4982 cnt = shortbuffered;
4984 bpx = bp - (STDCHAR*)SvPVX(sv); /* box up before relocation */
4986 SvGROW(sv, SvLEN(sv) + append + cnt + 2);
4987 bp = (STDCHAR*)SvPVX(sv) + bpx; /* unbox after relocation */
4991 DEBUG_P(PerlIO_printf(Perl_debug_log,
4992 "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
4993 PTR2UV(ptr),(long)cnt));
4994 PerlIO_set_ptrcnt(fp, ptr, cnt); /* deregisterize cnt and ptr */
4995 DEBUG_P(PerlIO_printf(Perl_debug_log,
4996 "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
4997 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
4998 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
4999 /* This used to call 'filbuf' in stdio form, but as that behaves like
5000 getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
5001 another abstraction. */
5002 i = PerlIO_getc(fp); /* get more characters */
5003 DEBUG_P(PerlIO_printf(Perl_debug_log,
5004 "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
5005 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
5006 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
5007 cnt = PerlIO_get_cnt(fp);
5008 ptr = (STDCHAR*)PerlIO_get_ptr(fp); /* reregisterize cnt and ptr */
5009 DEBUG_P(PerlIO_printf(Perl_debug_log,
5010 "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
5012 if (i == EOF) /* all done for ever? */
5013 goto thats_really_all_folks;
5015 bpx = bp - (STDCHAR*)SvPVX(sv); /* box up before relocation */
5017 SvGROW(sv, bpx + cnt + 2);
5018 bp = (STDCHAR*)SvPVX(sv) + bpx; /* unbox after relocation */
5020 *bp++ = i; /* store character from PerlIO_getc */
5022 if (rslen && (STDCHAR)i == rslast) /* all done for now? */
5023 goto thats_all_folks;
5027 if ((rslen > 1 && (bp - (STDCHAR*)SvPVX(sv) < rslen)) ||
5028 memNE((char*)bp - rslen, rsptr, rslen))
5029 goto screamer; /* go back to the fray */
5030 thats_really_all_folks:
5032 cnt += shortbuffered;
5033 DEBUG_P(PerlIO_printf(Perl_debug_log,
5034 "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
5035 PerlIO_set_ptrcnt(fp, ptr, cnt); /* put these back or we're in trouble */
5036 DEBUG_P(PerlIO_printf(Perl_debug_log,
5037 "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
5038 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
5039 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
5041 SvCUR_set(sv, bp - (STDCHAR*)SvPVX(sv)); /* set length */
5042 DEBUG_P(PerlIO_printf(Perl_debug_log,
5043 "Screamer: done, len=%ld, string=|%.*s|\n",
5044 (long)SvCUR(sv),(int)SvCUR(sv),SvPVX(sv)));
5049 /*The big, slow, and stupid way */
5052 /* Need to work around EPOC SDK features */
5053 /* On WINS: MS VC5 generates calls to _chkstk, */
5054 /* if a `large' stack frame is allocated */
5055 /* gcc on MARM does not generate calls like these */
5061 register STDCHAR *bpe = buf + sizeof(buf);
5063 while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = i) != rslast && bp < bpe)
5064 ; /* keep reading */
5068 cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
5069 /* Accomodate broken VAXC compiler, which applies U8 cast to
5070 * both args of ?: operator, causing EOF to change into 255
5072 if (cnt) { i = (U8)buf[cnt - 1]; } else { i = EOF; }
5076 sv_catpvn(sv, (char *) buf, cnt);
5078 sv_setpvn(sv, (char *) buf, cnt);
5080 if (i != EOF && /* joy */
5082 SvCUR(sv) < rslen ||
5083 memNE(SvPVX(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
5087 * If we're reading from a TTY and we get a short read,
5088 * indicating that the user hit his EOF character, we need
5089 * to notice it now, because if we try to read from the TTY
5090 * again, the EOF condition will disappear.
5092 * The comparison of cnt to sizeof(buf) is an optimization
5093 * that prevents unnecessary calls to feof().
5097 if (!(cnt < sizeof(buf) && PerlIO_eof(fp)))
5102 if (RsPARA(PL_rs)) { /* have to do this both before and after */
5103 while (i != EOF) { /* to make sure file boundaries work right */
5104 i = PerlIO_getc(fp);
5106 PerlIO_ungetc(fp,i);
5112 if (PerlIO_isutf8(fp))
5117 return (SvCUR(sv) - append) ? SvPVX(sv) : Nullch;
5124 Auto-increment of the value in the SV.
5130 Perl_sv_inc(pTHX_ register SV *sv)
5139 if (SvTHINKFIRST(sv)) {
5140 if (SvREADONLY(sv)) {
5141 if (PL_curcop != &PL_compiling)
5142 Perl_croak(aTHX_ PL_no_modify);
5146 if (SvAMAGIC(sv) && AMG_CALLun(sv,inc))
5148 i = PTR2IV(SvRV(sv));
5153 flags = SvFLAGS(sv);
5154 if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
5155 /* It's (privately or publicly) a float, but not tested as an
5156 integer, so test it to see. */
5158 flags = SvFLAGS(sv);
5160 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
5161 /* It's publicly an integer, or privately an integer-not-float */
5164 if (SvUVX(sv) == UV_MAX)
5165 sv_setnv(sv, (NV)UV_MAX + 1.0);
5167 (void)SvIOK_only_UV(sv);
5170 if (SvIVX(sv) == IV_MAX)
5171 sv_setuv(sv, (UV)IV_MAX + 1);
5173 (void)SvIOK_only(sv);
5179 if (flags & SVp_NOK) {
5180 (void)SvNOK_only(sv);
5185 if (!(flags & SVp_POK) || !*SvPVX(sv)) {
5186 if ((flags & SVTYPEMASK) < SVt_PVIV)
5187 sv_upgrade(sv, SVt_IV);
5188 (void)SvIOK_only(sv);
5193 while (isALPHA(*d)) d++;
5194 while (isDIGIT(*d)) d++;
5196 #ifdef PERL_PRESERVE_IVUV
5197 /* Got to punt this an an integer if needs be, but we don't issue
5198 warnings. Probably ought to make the sv_iv_please() that does
5199 the conversion if possible, and silently. */
5200 I32 numtype = looks_like_number(sv);
5201 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
5202 /* Need to try really hard to see if it's an integer.
5203 9.22337203685478e+18 is an integer.
5204 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
5205 so $a="9.22337203685478e+18"; $a+0; $a++
5206 needs to be the same as $a="9.22337203685478e+18"; $a++
5213 /* sv_2iv *should* have made this an NV */
5214 if (flags & SVp_NOK) {
5215 (void)SvNOK_only(sv);
5219 /* I don't think we can get here. Maybe I should assert this
5220 And if we do get here I suspect that sv_setnv will croak. NWC
5222 #if defined(USE_LONG_DOUBLE)
5223 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",
5224 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5226 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%g\n",
5227 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5230 #endif /* PERL_PRESERVE_IVUV */
5231 sv_setnv(sv,Atof(SvPVX(sv)) + 1.0);
5235 while (d >= SvPVX(sv)) {
5243 /* MKS: The original code here died if letters weren't consecutive.
5244 * at least it didn't have to worry about non-C locales. The
5245 * new code assumes that ('z'-'a')==('Z'-'A'), letters are
5246 * arranged in order (although not consecutively) and that only
5247 * [A-Za-z] are accepted by isALPHA in the C locale.
5249 if (*d != 'z' && *d != 'Z') {
5250 do { ++*d; } while (!isALPHA(*d));
5253 *(d--) -= 'z' - 'a';
5258 *(d--) -= 'z' - 'a' + 1;
5262 /* oh,oh, the number grew */
5263 SvGROW(sv, SvCUR(sv) + 2);
5265 for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX(sv); d--)
5276 Auto-decrement of the value in the SV.
5282 Perl_sv_dec(pTHX_ register SV *sv)
5290 if (SvTHINKFIRST(sv)) {
5291 if (SvREADONLY(sv)) {
5292 if (PL_curcop != &PL_compiling)
5293 Perl_croak(aTHX_ PL_no_modify);
5297 if (SvAMAGIC(sv) && AMG_CALLun(sv,dec))
5299 i = PTR2IV(SvRV(sv));
5304 /* Unlike sv_inc we don't have to worry about string-never-numbers
5305 and keeping them magic. But we mustn't warn on punting */
5306 flags = SvFLAGS(sv);
5307 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
5308 /* It's publicly an integer, or privately an integer-not-float */
5311 if (SvUVX(sv) == 0) {
5312 (void)SvIOK_only(sv);
5316 (void)SvIOK_only_UV(sv);
5320 if (SvIVX(sv) == IV_MIN)
5321 sv_setnv(sv, (NV)IV_MIN - 1.0);
5323 (void)SvIOK_only(sv);
5329 if (flags & SVp_NOK) {
5331 (void)SvNOK_only(sv);
5334 if (!(flags & SVp_POK)) {
5335 if ((flags & SVTYPEMASK) < SVt_PVNV)
5336 sv_upgrade(sv, SVt_NV);
5338 (void)SvNOK_only(sv);
5341 #ifdef PERL_PRESERVE_IVUV
5343 I32 numtype = looks_like_number(sv);
5344 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
5345 /* Need to try really hard to see if it's an integer.
5346 9.22337203685478e+18 is an integer.
5347 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
5348 so $a="9.22337203685478e+18"; $a+0; $a--
5349 needs to be the same as $a="9.22337203685478e+18"; $a--
5356 /* sv_2iv *should* have made this an NV */
5357 if (flags & SVp_NOK) {
5358 (void)SvNOK_only(sv);
5362 /* I don't think we can get here. Maybe I should assert this
5363 And if we do get here I suspect that sv_setnv will croak. NWC
5365 #if defined(USE_LONG_DOUBLE)
5366 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",
5367 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5369 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%g\n",
5370 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5374 #endif /* PERL_PRESERVE_IVUV */
5375 sv_setnv(sv,Atof(SvPVX(sv)) - 1.0); /* punt */
5379 =for apidoc sv_mortalcopy
5381 Creates a new SV which is a copy of the original SV. The new SV is marked
5387 /* Make a string that will exist for the duration of the expression
5388 * evaluation. Actually, it may have to last longer than that, but
5389 * hopefully we won't free it until it has been assigned to a
5390 * permanent location. */
5393 Perl_sv_mortalcopy(pTHX_ SV *oldstr)
5398 sv_setsv(sv,oldstr);
5400 PL_tmps_stack[++PL_tmps_ix] = sv;
5406 =for apidoc sv_newmortal
5408 Creates a new SV which is mortal. The reference count of the SV is set to 1.
5414 Perl_sv_newmortal(pTHX)
5419 SvFLAGS(sv) = SVs_TEMP;
5421 PL_tmps_stack[++PL_tmps_ix] = sv;
5426 =for apidoc sv_2mortal
5428 Marks an SV as mortal. The SV will be destroyed when the current context
5434 /* same thing without the copying */
5437 Perl_sv_2mortal(pTHX_ register SV *sv)
5441 if (SvREADONLY(sv) && SvIMMORTAL(sv))
5444 PL_tmps_stack[++PL_tmps_ix] = sv;
5452 Creates a new SV and copies a string into it. The reference count for the
5453 SV is set to 1. If C<len> is zero, Perl will compute the length using
5454 strlen(). For efficiency, consider using C<newSVpvn> instead.
5460 Perl_newSVpv(pTHX_ const char *s, STRLEN len)
5467 sv_setpvn(sv,s,len);
5472 =for apidoc newSVpvn
5474 Creates a new SV and copies a string into it. The reference count for the
5475 SV is set to 1. Note that if C<len> is zero, Perl will create a zero length
5476 string. You are responsible for ensuring that the source string is at least
5483 Perl_newSVpvn(pTHX_ const char *s, STRLEN len)
5488 sv_setpvn(sv,s,len);
5493 =for apidoc newSVpvn_share
5495 Creates a new SV and populates it with a string from
5496 the string table. Turns on READONLY and FAKE.
5497 The idea here is that as string table is used for shared hash
5498 keys these strings will have SvPVX == HeKEY and hash lookup
5499 will avoid string compare.
5505 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
5508 bool is_utf8 = FALSE;
5514 PERL_HASH(hash, src, len);
5516 sv_upgrade(sv, SVt_PVIV);
5517 SvPVX(sv) = sharepvn(src, is_utf8?-len:len, hash);
5529 #if defined(PERL_IMPLICIT_CONTEXT)
5531 Perl_newSVpvf_nocontext(const char* pat, ...)
5536 va_start(args, pat);
5537 sv = vnewSVpvf(pat, &args);
5544 =for apidoc newSVpvf
5546 Creates a new SV an initialize it with the string formatted like
5553 Perl_newSVpvf(pTHX_ const char* pat, ...)
5557 va_start(args, pat);
5558 sv = vnewSVpvf(pat, &args);
5564 Perl_vnewSVpvf(pTHX_ const char* pat, va_list* args)
5568 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
5575 Creates a new SV and copies a floating point value into it.
5576 The reference count for the SV is set to 1.
5582 Perl_newSVnv(pTHX_ NV n)
5594 Creates a new SV and copies an integer into it. The reference count for the
5601 Perl_newSViv(pTHX_ IV i)
5613 Creates a new SV and copies an unsigned integer into it.
5614 The reference count for the SV is set to 1.
5620 Perl_newSVuv(pTHX_ UV u)
5630 =for apidoc newRV_noinc
5632 Creates an RV wrapper for an SV. The reference count for the original
5633 SV is B<not> incremented.
5639 Perl_newRV_noinc(pTHX_ SV *tmpRef)
5644 sv_upgrade(sv, SVt_RV);
5651 /* newRV_inc is #defined to newRV in sv.h */
5653 Perl_newRV(pTHX_ SV *tmpRef)
5655 return newRV_noinc(SvREFCNT_inc(tmpRef));
5661 Creates a new SV which is an exact duplicate of the original SV.
5666 /* make an exact duplicate of old */
5669 Perl_newSVsv(pTHX_ register SV *old)
5675 if (SvTYPE(old) == SVTYPEMASK) {
5676 if (ckWARN_d(WARN_INTERNAL))
5677 Perl_warner(aTHX_ WARN_INTERNAL, "semi-panic: attempt to dup freed string");
5692 Perl_sv_reset(pTHX_ register char *s, HV *stash)
5700 char todo[PERL_UCHAR_MAX+1];
5705 if (!*s) { /* reset ?? searches */
5706 for (pm = HvPMROOT(stash); pm; pm = pm->op_pmnext) {
5707 pm->op_pmdynflags &= ~PMdf_USED;
5712 /* reset variables */
5714 if (!HvARRAY(stash))
5717 Zero(todo, 256, char);
5719 i = (unsigned char)*s;
5723 max = (unsigned char)*s++;
5724 for ( ; i <= max; i++) {
5727 for (i = 0; i <= (I32) HvMAX(stash); i++) {
5728 for (entry = HvARRAY(stash)[i];
5730 entry = HeNEXT(entry))
5732 if (!todo[(U8)*HeKEY(entry)])
5734 gv = (GV*)HeVAL(entry);
5736 if (SvTHINKFIRST(sv)) {
5737 if (!SvREADONLY(sv) && SvROK(sv))
5742 if (SvTYPE(sv) >= SVt_PV) {
5744 if (SvPVX(sv) != Nullch)
5751 if (GvHV(gv) && !HvNAME(GvHV(gv))) {
5753 #ifdef USE_ENVIRON_ARRAY
5755 environ[0] = Nullch;
5764 Perl_sv_2io(pTHX_ SV *sv)
5770 switch (SvTYPE(sv)) {
5778 Perl_croak(aTHX_ "Bad filehandle: %s", GvNAME(gv));
5782 Perl_croak(aTHX_ PL_no_usym, "filehandle");
5784 return sv_2io(SvRV(sv));
5785 gv = gv_fetchpv(SvPV(sv,n_a), FALSE, SVt_PVIO);
5791 Perl_croak(aTHX_ "Bad filehandle: %s", SvPV(sv,n_a));
5798 Perl_sv_2cv(pTHX_ SV *sv, HV **st, GV **gvp, I32 lref)
5805 return *gvp = Nullgv, Nullcv;
5806 switch (SvTYPE(sv)) {
5825 SV **sp = &sv; /* Used in tryAMAGICunDEREF macro. */
5826 tryAMAGICunDEREF(to_cv);
5829 if (SvTYPE(sv) == SVt_PVCV) {
5838 Perl_croak(aTHX_ "Not a subroutine reference");
5843 gv = gv_fetchpv(SvPV(sv, n_a), lref, SVt_PVCV);
5849 if (lref && !GvCVu(gv)) {
5852 tmpsv = NEWSV(704,0);
5853 gv_efullname3(tmpsv, gv, Nullch);
5854 /* XXX this is probably not what they think they're getting.
5855 * It has the same effect as "sub name;", i.e. just a forward
5857 newSUB(start_subparse(FALSE, 0),
5858 newSVOP(OP_CONST, 0, tmpsv),
5863 Perl_croak(aTHX_ "Unable to create sub named \"%s\"", SvPV(sv,n_a));
5872 Returns true if the SV has a true value by Perl's rules.
5878 Perl_sv_true(pTHX_ register SV *sv)
5884 if ((tXpv = (XPV*)SvANY(sv)) &&
5885 (tXpv->xpv_cur > 1 ||
5886 (tXpv->xpv_cur && *tXpv->xpv_pv != '0')))
5893 return SvIVX(sv) != 0;
5896 return SvNVX(sv) != 0.0;
5898 return sv_2bool(sv);
5904 Perl_sv_iv(pTHX_ register SV *sv)
5908 return (IV)SvUVX(sv);
5915 Perl_sv_uv(pTHX_ register SV *sv)
5920 return (UV)SvIVX(sv);
5926 Perl_sv_nv(pTHX_ register SV *sv)
5934 Perl_sv_pv(pTHX_ SV *sv)
5941 return sv_2pv(sv, &n_a);
5945 Perl_sv_pvn(pTHX_ SV *sv, STRLEN *lp)
5951 return sv_2pv(sv, lp);
5955 =for apidoc sv_pvn_force
5957 Get a sensible string out of the SV somehow.
5963 Perl_sv_pvn_force(pTHX_ SV *sv, STRLEN *lp)
5967 if (SvTHINKFIRST(sv) && !SvROK(sv))
5968 sv_force_normal(sv);
5974 if (SvTYPE(sv) > SVt_PVLV && SvTYPE(sv) != SVt_PVFM) {
5975 Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
5976 PL_op_name[PL_op->op_type]);
5980 if (s != SvPVX(sv)) { /* Almost, but not quite, sv_setpvn() */
5985 (void)SvUPGRADE(sv, SVt_PV); /* Never FALSE */
5986 SvGROW(sv, len + 1);
5987 Move(s,SvPVX(sv),len,char);
5992 SvPOK_on(sv); /* validate pointer */
5994 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
5995 PTR2UV(sv),SvPVX(sv)));
6002 Perl_sv_pvbyte(pTHX_ SV *sv)
6008 Perl_sv_pvbyten(pTHX_ SV *sv, STRLEN *lp)
6010 return sv_pvn(sv,lp);
6014 Perl_sv_pvbyten_force(pTHX_ SV *sv, STRLEN *lp)
6016 return sv_pvn_force(sv,lp);
6020 Perl_sv_pvutf8(pTHX_ SV *sv)
6022 sv_utf8_upgrade(sv);
6027 Perl_sv_pvutf8n(pTHX_ SV *sv, STRLEN *lp)
6029 sv_utf8_upgrade(sv);
6030 return sv_pvn(sv,lp);
6034 =for apidoc sv_pvutf8n_force
6036 Get a sensible UTF8-encoded string out of the SV somehow. See
6043 Perl_sv_pvutf8n_force(pTHX_ SV *sv, STRLEN *lp)
6045 sv_utf8_upgrade(sv);
6046 return sv_pvn_force(sv,lp);
6050 =for apidoc sv_reftype
6052 Returns a string describing what the SV is a reference to.
6058 Perl_sv_reftype(pTHX_ SV *sv, int ob)
6060 if (ob && SvOBJECT(sv))
6061 return HvNAME(SvSTASH(sv));
6063 switch (SvTYPE(sv)) {
6077 case SVt_PVLV: return "LVALUE";
6078 case SVt_PVAV: return "ARRAY";
6079 case SVt_PVHV: return "HASH";
6080 case SVt_PVCV: return "CODE";
6081 case SVt_PVGV: return "GLOB";
6082 case SVt_PVFM: return "FORMAT";
6083 case SVt_PVIO: return "IO";
6084 default: return "UNKNOWN";
6090 =for apidoc sv_isobject
6092 Returns a boolean indicating whether the SV is an RV pointing to a blessed
6093 object. If the SV is not an RV, or if the object is not blessed, then this
6100 Perl_sv_isobject(pTHX_ SV *sv)
6117 Returns a boolean indicating whether the SV is blessed into the specified
6118 class. This does not check for subtypes; use C<sv_derived_from> to verify
6119 an inheritance relationship.
6125 Perl_sv_isa(pTHX_ SV *sv, const char *name)
6137 return strEQ(HvNAME(SvSTASH(sv)), name);
6143 Creates a new SV for the RV, C<rv>, to point to. If C<rv> is not an RV then
6144 it will be upgraded to one. If C<classname> is non-null then the new SV will
6145 be blessed in the specified package. The new SV is returned and its
6146 reference count is 1.
6152 Perl_newSVrv(pTHX_ SV *rv, const char *classname)
6158 SV_CHECK_THINKFIRST(rv);
6161 if (SvTYPE(rv) >= SVt_PVMG) {
6162 U32 refcnt = SvREFCNT(rv);
6166 SvREFCNT(rv) = refcnt;
6169 if (SvTYPE(rv) < SVt_RV)
6170 sv_upgrade(rv, SVt_RV);
6171 else if (SvTYPE(rv) > SVt_RV) {
6172 (void)SvOOK_off(rv);
6173 if (SvPVX(rv) && SvLEN(rv))
6174 Safefree(SvPVX(rv));
6184 HV* stash = gv_stashpv(classname, TRUE);
6185 (void)sv_bless(rv, stash);
6191 =for apidoc sv_setref_pv
6193 Copies a pointer into a new SV, optionally blessing the SV. The C<rv>
6194 argument will be upgraded to an RV. That RV will be modified to point to
6195 the new SV. If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
6196 into the SV. The C<classname> argument indicates the package for the
6197 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
6198 will be returned and will have a reference count of 1.
6200 Do not use with other Perl types such as HV, AV, SV, CV, because those
6201 objects will become corrupted by the pointer copy process.
6203 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
6209 Perl_sv_setref_pv(pTHX_ SV *rv, const char *classname, void *pv)
6212 sv_setsv(rv, &PL_sv_undef);
6216 sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
6221 =for apidoc sv_setref_iv
6223 Copies an integer into a new SV, optionally blessing the SV. The C<rv>
6224 argument will be upgraded to an RV. That RV will be modified to point to
6225 the new SV. The C<classname> argument indicates the package for the
6226 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
6227 will be returned and will have a reference count of 1.
6233 Perl_sv_setref_iv(pTHX_ SV *rv, const char *classname, IV iv)
6235 sv_setiv(newSVrv(rv,classname), iv);
6240 =for apidoc sv_setref_nv
6242 Copies a double into a new SV, optionally blessing the SV. The C<rv>
6243 argument will be upgraded to an RV. That RV will be modified to point to
6244 the new SV. The C<classname> argument indicates the package for the
6245 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
6246 will be returned and will have a reference count of 1.
6252 Perl_sv_setref_nv(pTHX_ SV *rv, const char *classname, NV nv)
6254 sv_setnv(newSVrv(rv,classname), nv);
6259 =for apidoc sv_setref_pvn
6261 Copies a string into a new SV, optionally blessing the SV. The length of the
6262 string must be specified with C<n>. The C<rv> argument will be upgraded to
6263 an RV. That RV will be modified to point to the new SV. The C<classname>
6264 argument indicates the package for the blessing. Set C<classname> to
6265 C<Nullch> to avoid the blessing. The new SV will be returned and will have
6266 a reference count of 1.
6268 Note that C<sv_setref_pv> copies the pointer while this copies the string.
6274 Perl_sv_setref_pvn(pTHX_ SV *rv, const char *classname, char *pv, STRLEN n)
6276 sv_setpvn(newSVrv(rv,classname), pv, n);
6281 =for apidoc sv_bless
6283 Blesses an SV into a specified package. The SV must be an RV. The package
6284 must be designated by its stash (see C<gv_stashpv()>). The reference count
6285 of the SV is unaffected.
6291 Perl_sv_bless(pTHX_ SV *sv, HV *stash)
6295 Perl_croak(aTHX_ "Can't bless non-reference value");
6297 if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
6298 if (SvREADONLY(tmpRef))
6299 Perl_croak(aTHX_ PL_no_modify);
6300 if (SvOBJECT(tmpRef)) {
6301 if (SvTYPE(tmpRef) != SVt_PVIO)
6303 SvREFCNT_dec(SvSTASH(tmpRef));
6306 SvOBJECT_on(tmpRef);
6307 if (SvTYPE(tmpRef) != SVt_PVIO)
6309 (void)SvUPGRADE(tmpRef, SVt_PVMG);
6310 SvSTASH(tmpRef) = (HV*)SvREFCNT_inc(stash);
6321 S_sv_unglob(pTHX_ SV *sv)
6325 assert(SvTYPE(sv) == SVt_PVGV);
6330 SvREFCNT_dec(GvSTASH(sv));
6331 GvSTASH(sv) = Nullhv;
6333 sv_unmagic(sv, '*');
6334 Safefree(GvNAME(sv));
6337 /* need to keep SvANY(sv) in the right arena */
6338 xpvmg = new_XPVMG();
6339 StructCopy(SvANY(sv), xpvmg, XPVMG);
6340 del_XPVGV(SvANY(sv));
6343 SvFLAGS(sv) &= ~SVTYPEMASK;
6344 SvFLAGS(sv) |= SVt_PVMG;
6348 =for apidoc sv_unref_flags
6350 Unsets the RV status of the SV, and decrements the reference count of
6351 whatever was being referenced by the RV. This can almost be thought of
6352 as a reversal of C<newSVrv>. The C<cflags> argument can contain
6353 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
6354 (otherwise the decrementing is conditional on the reference count being
6355 different from one or the reference being a readonly SV).
6362 Perl_sv_unref_flags(pTHX_ SV *sv, U32 flags)
6366 if (SvWEAKREF(sv)) {
6374 if (SvREFCNT(rv) != 1 || SvREADONLY(rv) || flags) /* SV_IMMEDIATE_UNREF */
6376 else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
6377 sv_2mortal(rv); /* Schedule for freeing later */
6381 =for apidoc sv_unref
6383 Unsets the RV status of the SV, and decrements the reference count of
6384 whatever was being referenced by the RV. This can almost be thought of
6385 as a reversal of C<newSVrv>. This is C<sv_unref_flags> with the C<flag>
6386 being zero. See C<SvROK_off>.
6392 Perl_sv_unref(pTHX_ SV *sv)
6394 sv_unref_flags(sv, 0);
6398 Perl_sv_taint(pTHX_ SV *sv)
6400 sv_magic((sv), Nullsv, 't', Nullch, 0);
6404 Perl_sv_untaint(pTHX_ SV *sv)
6406 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
6407 MAGIC *mg = mg_find(sv, 't');
6414 Perl_sv_tainted(pTHX_ SV *sv)
6416 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
6417 MAGIC *mg = mg_find(sv, 't');
6418 if (mg && ((mg->mg_len & 1) || ((mg->mg_len & 2) && mg->mg_obj == sv)))
6425 =for apidoc sv_setpviv
6427 Copies an integer into the given SV, also updating its string value.
6428 Does not handle 'set' magic. See C<sv_setpviv_mg>.
6434 Perl_sv_setpviv(pTHX_ SV *sv, IV iv)
6436 char buf[TYPE_CHARS(UV)];
6438 char *ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
6440 sv_setpvn(sv, ptr, ebuf - ptr);
6445 =for apidoc sv_setpviv_mg
6447 Like C<sv_setpviv>, but also handles 'set' magic.
6453 Perl_sv_setpviv_mg(pTHX_ SV *sv, IV iv)
6455 char buf[TYPE_CHARS(UV)];
6457 char *ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
6459 sv_setpvn(sv, ptr, ebuf - ptr);
6463 #if defined(PERL_IMPLICIT_CONTEXT)
6465 Perl_sv_setpvf_nocontext(SV *sv, const char* pat, ...)
6469 va_start(args, pat);
6470 sv_vsetpvf(sv, pat, &args);
6476 Perl_sv_setpvf_mg_nocontext(SV *sv, const char* pat, ...)
6480 va_start(args, pat);
6481 sv_vsetpvf_mg(sv, pat, &args);
6487 =for apidoc sv_setpvf
6489 Processes its arguments like C<sprintf> and sets an SV to the formatted
6490 output. Does not handle 'set' magic. See C<sv_setpvf_mg>.
6496 Perl_sv_setpvf(pTHX_ SV *sv, const char* pat, ...)
6499 va_start(args, pat);
6500 sv_vsetpvf(sv, pat, &args);
6505 Perl_sv_vsetpvf(pTHX_ SV *sv, const char* pat, va_list* args)
6507 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6511 =for apidoc sv_setpvf_mg
6513 Like C<sv_setpvf>, but also handles 'set' magic.
6519 Perl_sv_setpvf_mg(pTHX_ SV *sv, const char* pat, ...)
6522 va_start(args, pat);
6523 sv_vsetpvf_mg(sv, pat, &args);
6528 Perl_sv_vsetpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
6530 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6534 #if defined(PERL_IMPLICIT_CONTEXT)
6536 Perl_sv_catpvf_nocontext(SV *sv, const char* pat, ...)
6540 va_start(args, pat);
6541 sv_vcatpvf(sv, pat, &args);
6546 Perl_sv_catpvf_mg_nocontext(SV *sv, const char* pat, ...)
6550 va_start(args, pat);
6551 sv_vcatpvf_mg(sv, pat, &args);
6557 =for apidoc sv_catpvf
6559 Processes its arguments like C<sprintf> and appends the formatted output
6560 to an SV. Handles 'get' magic, but not 'set' magic. C<SvSETMAGIC()> must
6561 typically be called after calling this function to handle 'set' magic.
6567 Perl_sv_catpvf(pTHX_ SV *sv, const char* pat, ...)
6570 va_start(args, pat);
6571 sv_vcatpvf(sv, pat, &args);
6576 Perl_sv_vcatpvf(pTHX_ SV *sv, const char* pat, va_list* args)
6578 sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6582 =for apidoc sv_catpvf_mg
6584 Like C<sv_catpvf>, but also handles 'set' magic.
6590 Perl_sv_catpvf_mg(pTHX_ SV *sv, const char* pat, ...)
6593 va_start(args, pat);
6594 sv_vcatpvf_mg(sv, pat, &args);
6599 Perl_sv_vcatpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
6601 sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6606 =for apidoc sv_vsetpvfn
6608 Works like C<vcatpvfn> but copies the text into the SV instead of
6615 Perl_sv_vsetpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
6617 sv_setpvn(sv, "", 0);
6618 sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, maybe_tainted);
6622 =for apidoc sv_vcatpvfn
6624 Processes its arguments like C<vsprintf> and appends the formatted output
6625 to an SV. Uses an array of SVs if the C style variable argument list is
6626 missing (NULL). When running with taint checks enabled, indicates via
6627 C<maybe_tainted> if results are untrustworthy (often due to the use of
6634 Perl_sv_vcatpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
6641 static char nullstr[] = "(null)";
6644 /* no matter what, this is a string now */
6645 (void)SvPV_force(sv, origlen);
6647 /* special-case "", "%s", and "%_" */
6650 if (patlen == 2 && pat[0] == '%') {
6654 char *s = va_arg(*args, char*);
6655 sv_catpv(sv, s ? s : nullstr);
6657 else if (svix < svmax) {
6658 sv_catsv(sv, *svargs);
6659 if (DO_UTF8(*svargs))
6665 argsv = va_arg(*args, SV*);
6666 sv_catsv(sv, argsv);
6671 /* See comment on '_' below */
6676 patend = (char*)pat + patlen;
6677 for (p = (char*)pat; p < patend; p = q) {
6680 bool vectorize = FALSE;
6687 bool has_precis = FALSE;
6689 bool is_utf = FALSE;
6692 U8 utf8buf[UTF8_MAXLEN+1];
6693 STRLEN esignlen = 0;
6695 char *eptr = Nullch;
6697 /* Times 4: a decimal digit takes more than 3 binary digits.
6698 * NV_DIG: mantissa takes than many decimal digits.
6699 * Plus 32: Playing safe. */
6700 char ebuf[IV_DIG * 4 + NV_DIG + 32];
6701 /* large enough for "%#.#f" --chip */
6702 /* what about long double NVs? --jhi */
6705 U8 *vecstr = Null(U8*);
6717 STRLEN dotstrlen = 1;
6718 I32 epix = 0; /* explicit parameter index */
6719 I32 ewix = 0; /* explicit width index */
6720 bool asterisk = FALSE;
6722 for (q = p; q < patend && *q != '%'; ++q) ;
6724 sv_catpvn(sv, p, q - p);
6753 case '*': /* printf("%*vX",":",$ipv6addr) */
6758 vecsv = va_arg(*args, SV*);
6759 else if (svix < svmax)
6760 vecsv = svargs[svix++];
6763 dotstr = SvPVx(vecsv,dotstrlen);
6791 case '1': case '2': case '3':
6792 case '4': case '5': case '6':
6793 case '7': case '8': case '9':
6796 width = width * 10 + (*q++ - '0');
6798 if (asterisk && ewix == 0) {
6803 } else if (epix == 0) {
6815 i = va_arg(*args, int);
6817 i = (ewix ? ewix <= svmax : svix < svmax) ?
6818 SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
6820 width = (i < 0) ? -i : i;
6829 i = va_arg(*args, int);
6831 i = (ewix ? ewix <= svmax : svix < svmax)
6832 ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
6833 precis = (i < 0) ? 0 : i;
6839 precis = precis * 10 + (*q++ - '0');
6846 vecsv = va_arg(*args, SV*);
6847 vecstr = (U8*)SvPVx(vecsv,veclen);
6848 utf = DO_UTF8(vecsv);
6850 else if (epix ? epix <= svmax : svix < svmax) {
6851 vecsv = svargs[epix ? epix-1 : svix++];
6852 vecstr = (U8*)SvPVx(vecsv,veclen);
6853 utf = DO_UTF8(vecsv);
6864 #if defined(HAS_QUAD) || (defined(HAS_LONG_DOUBLE) && defined(USE_LONG_DOUBLE))
6875 #if defined(HAS_QUAD) || (defined(HAS_LONG_DOUBLE) && defined(USE_LONG_DOUBLE))
6876 if (*(q + 1) == 'l') { /* lld, llf */
6903 uv = va_arg(*args, int);
6905 uv = (epix ? epix <= svmax : svix < svmax) ?
6906 SvIVx(svargs[epix ? epix-1 : svix++]) : 0;
6907 if ((uv > 255 || (uv > 127 && SvUTF8(sv))) && !IN_BYTE) {
6908 eptr = (char*)utf8buf;
6909 elen = uv_to_utf8((U8*)eptr, uv) - utf8buf;
6921 eptr = va_arg(*args, char*);
6923 #ifdef MACOS_TRADITIONAL
6924 /* On MacOS, %#s format is used for Pascal strings */
6929 elen = strlen(eptr);
6932 elen = sizeof nullstr - 1;
6935 else if (epix ? epix <= svmax : svix < svmax) {
6936 argsv = svargs[epix ? epix-1 : svix++];
6937 eptr = SvPVx(argsv, elen);
6938 if (DO_UTF8(argsv)) {
6939 if (has_precis && precis < elen) {
6941 sv_pos_u2b(argsv, &p, 0); /* sticks at end */
6944 if (width) { /* fudge width (can't fudge elen) */
6945 width += elen - sv_len_utf8(argsv);
6954 * The "%_" hack might have to be changed someday,
6955 * if ISO or ANSI decide to use '_' for something.
6956 * So we keep it hidden from users' code.
6960 argsv = va_arg(*args,SV*);
6961 eptr = SvPVx(argsv, elen);
6967 if (has_precis && elen > precis)
6977 uv = PTR2UV(va_arg(*args, void*));
6979 uv = (epix ? epix <= svmax : svix < svmax) ?
6980 PTR2UV(svargs[epix ? epix-1 : svix++]) : 0;
7000 iv = (IV)utf8_to_uv(vecstr, veclen, &ulen, 0);
7010 case 'h': iv = (short)va_arg(*args, int); break;
7011 default: iv = va_arg(*args, int); break;
7012 case 'l': iv = va_arg(*args, long); break;
7013 case 'V': iv = va_arg(*args, IV); break;
7015 case 'q': iv = va_arg(*args, Quad_t); break;
7020 iv = (epix ? epix <= svmax : svix < svmax) ?
7021 SvIVx(svargs[epix ? epix-1 : svix++]) : 0;
7023 case 'h': iv = (short)iv; break;
7025 case 'l': iv = (long)iv; break;
7028 case 'q': iv = (Quad_t)iv; break;
7035 esignbuf[esignlen++] = plus;
7039 esignbuf[esignlen++] = '-';
7083 uv = utf8_to_uv(vecstr, veclen, &ulen, 0);
7093 case 'h': uv = (unsigned short)va_arg(*args, unsigned); break;
7094 default: uv = va_arg(*args, unsigned); break;
7095 case 'l': uv = va_arg(*args, unsigned long); break;
7096 case 'V': uv = va_arg(*args, UV); break;
7098 case 'q': uv = va_arg(*args, Quad_t); break;
7103 uv = (epix ? epix <= svmax : svix < svmax) ?
7104 SvUVx(svargs[epix ? epix-1 : svix++]) : 0;
7106 case 'h': uv = (unsigned short)uv; break;
7108 case 'l': uv = (unsigned long)uv; break;
7111 case 'q': uv = (Quad_t)uv; break;
7117 eptr = ebuf + sizeof ebuf;
7123 p = (char*)((c == 'X')
7124 ? "0123456789ABCDEF" : "0123456789abcdef");
7130 esignbuf[esignlen++] = '0';
7131 esignbuf[esignlen++] = c; /* 'x' or 'X' */
7137 *--eptr = '0' + dig;
7139 if (alt && *eptr != '0')
7145 *--eptr = '0' + dig;
7148 esignbuf[esignlen++] = '0';
7149 esignbuf[esignlen++] = 'b';
7152 default: /* it had better be ten or less */
7153 #if defined(PERL_Y2KWARN)
7154 if (ckWARN(WARN_Y2K)) {
7156 char *s = SvPV(sv,n);
7157 if (n >= 2 && s[n-2] == '1' && s[n-1] == '9'
7158 && (n == 2 || !isDIGIT(s[n-3])))
7160 Perl_warner(aTHX_ WARN_Y2K,
7161 "Possible Y2K bug: %%%c %s",
7162 c, "format string following '19'");
7168 *--eptr = '0' + dig;
7169 } while (uv /= base);
7172 elen = (ebuf + sizeof ebuf) - eptr;
7175 zeros = precis - elen;
7176 else if (precis == 0 && elen == 1 && *eptr == '0')
7181 /* FLOATING POINT */
7184 c = 'f'; /* maybe %F isn't supported here */
7190 /* This is evil, but floating point is even more evil */
7194 nv = va_arg(*args, NV);
7196 nv = (epix ? epix <= svmax : svix < svmax) ?
7197 SvNVx(svargs[epix ? epix-1 : svix++]) : 0.0;
7200 if (c != 'e' && c != 'E') {
7202 (void)Perl_frexp(nv, &i);
7203 if (i == PERL_INT_MIN)
7204 Perl_die(aTHX_ "panic: frexp");
7206 need = BIT_DIGITS(i);
7208 need += has_precis ? precis : 6; /* known default */
7212 need += 20; /* fudge factor */
7213 if (PL_efloatsize < need) {
7214 Safefree(PL_efloatbuf);
7215 PL_efloatsize = need + 20; /* more fudge */
7216 New(906, PL_efloatbuf, PL_efloatsize, char);
7217 PL_efloatbuf[0] = '\0';
7220 eptr = ebuf + sizeof ebuf;
7223 #if defined(USE_LONG_DOUBLE) && defined(PERL_PRIfldbl)
7225 /* Copy the one or more characters in a long double
7226 * format before the 'base' ([efgEFG]) character to
7227 * the format string. */
7228 static char const prifldbl[] = PERL_PRIfldbl;
7229 char const *p = prifldbl + sizeof(prifldbl) - 3;
7230 while (p >= prifldbl) { *--eptr = *p--; }
7235 do { *--eptr = '0' + (base % 10); } while (base /= 10);
7240 do { *--eptr = '0' + (base % 10); } while (base /= 10);
7252 /* No taint. Otherwise we are in the strange situation
7253 * where printf() taints but print($float) doesn't.
7255 (void)sprintf(PL_efloatbuf, eptr, nv);
7257 eptr = PL_efloatbuf;
7258 elen = strlen(PL_efloatbuf);
7265 i = SvCUR(sv) - origlen;
7268 case 'h': *(va_arg(*args, short*)) = i; break;
7269 default: *(va_arg(*args, int*)) = i; break;
7270 case 'l': *(va_arg(*args, long*)) = i; break;
7271 case 'V': *(va_arg(*args, IV*)) = i; break;
7273 case 'q': *(va_arg(*args, Quad_t*)) = i; break;
7277 else if (epix ? epix <= svmax : svix < svmax)
7278 sv_setuv_mg(svargs[epix ? epix-1 : svix++], (UV)i);
7279 continue; /* not "break" */
7286 if (!args && ckWARN(WARN_PRINTF) &&
7287 (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)) {
7288 SV *msg = sv_newmortal();
7289 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %s: ",
7290 (PL_op->op_type == OP_PRTF) ? "printf" : "sprintf");
7293 Perl_sv_catpvf(aTHX_ msg,
7294 "\"%%%c\"", c & 0xFF);
7296 Perl_sv_catpvf(aTHX_ msg,
7297 "\"%%\\%03"UVof"\"",
7300 sv_catpv(msg, "end of string");
7301 Perl_warner(aTHX_ WARN_PRINTF, "%"SVf, msg); /* yes, this is reentrant */
7304 /* output mangled stuff ... */
7310 /* ... right here, because formatting flags should not apply */
7311 SvGROW(sv, SvCUR(sv) + elen + 1);
7313 memcpy(p, eptr, elen);
7316 SvCUR(sv) = p - SvPVX(sv);
7317 continue; /* not "break" */
7320 have = esignlen + zeros + elen;
7321 need = (have > width ? have : width);
7324 SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
7326 if (esignlen && fill == '0') {
7327 for (i = 0; i < esignlen; i++)
7331 memset(p, fill, gap);
7334 if (esignlen && fill != '0') {
7335 for (i = 0; i < esignlen; i++)
7339 for (i = zeros; i; i--)
7343 memcpy(p, eptr, elen);
7347 memset(p, ' ', gap);
7352 memcpy(p, dotstr, dotstrlen);
7356 vectorize = FALSE; /* done iterating over vecstr */
7361 SvCUR(sv) = p - SvPVX(sv);
7369 #if defined(USE_ITHREADS)
7371 #if defined(USE_THREADS)
7372 # include "error: USE_THREADS and USE_ITHREADS are incompatible"
7375 #ifndef GpREFCNT_inc
7376 # define GpREFCNT_inc(gp) ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
7380 #define sv_dup_inc(s) SvREFCNT_inc(sv_dup(s))
7381 #define av_dup(s) (AV*)sv_dup((SV*)s)
7382 #define av_dup_inc(s) (AV*)SvREFCNT_inc(sv_dup((SV*)s))
7383 #define hv_dup(s) (HV*)sv_dup((SV*)s)
7384 #define hv_dup_inc(s) (HV*)SvREFCNT_inc(sv_dup((SV*)s))
7385 #define cv_dup(s) (CV*)sv_dup((SV*)s)
7386 #define cv_dup_inc(s) (CV*)SvREFCNT_inc(sv_dup((SV*)s))
7387 #define io_dup(s) (IO*)sv_dup((SV*)s)
7388 #define io_dup_inc(s) (IO*)SvREFCNT_inc(sv_dup((SV*)s))
7389 #define gv_dup(s) (GV*)sv_dup((SV*)s)
7390 #define gv_dup_inc(s) (GV*)SvREFCNT_inc(sv_dup((SV*)s))
7391 #define SAVEPV(p) (p ? savepv(p) : Nullch)
7392 #define SAVEPVN(p,n) (p ? savepvn(p,n) : Nullch)
7395 Perl_re_dup(pTHX_ REGEXP *r)
7397 /* XXX fix when pmop->op_pmregexp becomes shared */
7398 return ReREFCNT_inc(r);
7402 Perl_fp_dup(pTHX_ PerlIO *fp, char type)
7406 return (PerlIO*)NULL;
7408 /* look for it in the table first */
7409 ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
7413 /* create anew and remember what it is */
7414 ret = PerlIO_fdupopen(aTHX_ fp);
7415 ptr_table_store(PL_ptr_table, fp, ret);
7420 Perl_dirp_dup(pTHX_ DIR *dp)
7429 Perl_gp_dup(pTHX_ GP *gp)
7434 /* look for it in the table first */
7435 ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
7439 /* create anew and remember what it is */
7440 Newz(0, ret, 1, GP);
7441 ptr_table_store(PL_ptr_table, gp, ret);
7444 ret->gp_refcnt = 0; /* must be before any other dups! */
7445 ret->gp_sv = sv_dup_inc(gp->gp_sv);
7446 ret->gp_io = io_dup_inc(gp->gp_io);
7447 ret->gp_form = cv_dup_inc(gp->gp_form);
7448 ret->gp_av = av_dup_inc(gp->gp_av);
7449 ret->gp_hv = hv_dup_inc(gp->gp_hv);
7450 ret->gp_egv = gv_dup(gp->gp_egv); /* GvEGV is not refcounted */
7451 ret->gp_cv = cv_dup_inc(gp->gp_cv);
7452 ret->gp_cvgen = gp->gp_cvgen;
7453 ret->gp_flags = gp->gp_flags;
7454 ret->gp_line = gp->gp_line;
7455 ret->gp_file = gp->gp_file; /* points to COP.cop_file */
7460 Perl_mg_dup(pTHX_ MAGIC *mg)
7462 MAGIC *mgret = (MAGIC*)NULL;
7465 return (MAGIC*)NULL;
7466 /* look for it in the table first */
7467 mgret = (MAGIC*)ptr_table_fetch(PL_ptr_table, mg);
7471 for (; mg; mg = mg->mg_moremagic) {
7473 Newz(0, nmg, 1, MAGIC);
7477 mgprev->mg_moremagic = nmg;
7478 nmg->mg_virtual = mg->mg_virtual; /* XXX copy dynamic vtable? */
7479 nmg->mg_private = mg->mg_private;
7480 nmg->mg_type = mg->mg_type;
7481 nmg->mg_flags = mg->mg_flags;
7482 if (mg->mg_type == 'r') {
7483 nmg->mg_obj = (SV*)re_dup((REGEXP*)mg->mg_obj);
7486 nmg->mg_obj = (mg->mg_flags & MGf_REFCOUNTED)
7487 ? sv_dup_inc(mg->mg_obj)
7488 : sv_dup(mg->mg_obj);
7490 nmg->mg_len = mg->mg_len;
7491 nmg->mg_ptr = mg->mg_ptr; /* XXX random ptr? */
7492 if (mg->mg_ptr && mg->mg_type != 'g') {
7493 if (mg->mg_len >= 0) {
7494 nmg->mg_ptr = SAVEPVN(mg->mg_ptr, mg->mg_len);
7495 if (mg->mg_type == 'c' && AMT_AMAGIC((AMT*)mg->mg_ptr)) {
7496 AMT *amtp = (AMT*)mg->mg_ptr;
7497 AMT *namtp = (AMT*)nmg->mg_ptr;
7499 for (i = 1; i < NofAMmeth; i++) {
7500 namtp->table[i] = cv_dup_inc(amtp->table[i]);
7504 else if (mg->mg_len == HEf_SVKEY)
7505 nmg->mg_ptr = (char*)sv_dup_inc((SV*)mg->mg_ptr);
7513 Perl_ptr_table_new(pTHX)
7516 Newz(0, tbl, 1, PTR_TBL_t);
7519 Newz(0, tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
7524 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *tbl, void *sv)
7526 PTR_TBL_ENT_t *tblent;
7527 UV hash = PTR2UV(sv);
7529 tblent = tbl->tbl_ary[hash & tbl->tbl_max];
7530 for (; tblent; tblent = tblent->next) {
7531 if (tblent->oldval == sv)
7532 return tblent->newval;
7538 Perl_ptr_table_store(pTHX_ PTR_TBL_t *tbl, void *oldv, void *newv)
7540 PTR_TBL_ENT_t *tblent, **otblent;
7541 /* XXX this may be pessimal on platforms where pointers aren't good
7542 * hash values e.g. if they grow faster in the most significant
7544 UV hash = PTR2UV(oldv);
7548 otblent = &tbl->tbl_ary[hash & tbl->tbl_max];
7549 for (tblent = *otblent; tblent; i=0, tblent = tblent->next) {
7550 if (tblent->oldval == oldv) {
7551 tblent->newval = newv;
7556 Newz(0, tblent, 1, PTR_TBL_ENT_t);
7557 tblent->oldval = oldv;
7558 tblent->newval = newv;
7559 tblent->next = *otblent;
7562 if (i && tbl->tbl_items > tbl->tbl_max)
7563 ptr_table_split(tbl);
7567 Perl_ptr_table_split(pTHX_ PTR_TBL_t *tbl)
7569 PTR_TBL_ENT_t **ary = tbl->tbl_ary;
7570 UV oldsize = tbl->tbl_max + 1;
7571 UV newsize = oldsize * 2;
7574 Renew(ary, newsize, PTR_TBL_ENT_t*);
7575 Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
7576 tbl->tbl_max = --newsize;
7578 for (i=0; i < oldsize; i++, ary++) {
7579 PTR_TBL_ENT_t **curentp, **entp, *ent;
7582 curentp = ary + oldsize;
7583 for (entp = ary, ent = *ary; ent; ent = *entp) {
7584 if ((newsize & PTR2UV(ent->oldval)) != i) {
7586 ent->next = *curentp;
7601 Perl_sv_dup(pTHX_ SV *sstr)
7605 if (!sstr || SvTYPE(sstr) == SVTYPEMASK)
7607 /* look for it in the table first */
7608 dstr = (SV*)ptr_table_fetch(PL_ptr_table, sstr);
7612 /* create anew and remember what it is */
7614 ptr_table_store(PL_ptr_table, sstr, dstr);
7617 SvFLAGS(dstr) = SvFLAGS(sstr);
7618 SvFLAGS(dstr) &= ~SVf_OOK; /* don't propagate OOK hack */
7619 SvREFCNT(dstr) = 0; /* must be before any other dups! */
7622 if (SvANY(sstr) && PL_watch_pvx && SvPVX(sstr) == PL_watch_pvx)
7623 PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
7624 PL_watch_pvx, SvPVX(sstr));
7627 switch (SvTYPE(sstr)) {
7632 SvANY(dstr) = new_XIV();
7633 SvIVX(dstr) = SvIVX(sstr);
7636 SvANY(dstr) = new_XNV();
7637 SvNVX(dstr) = SvNVX(sstr);
7640 SvANY(dstr) = new_XRV();
7641 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7644 SvANY(dstr) = new_XPV();
7645 SvCUR(dstr) = SvCUR(sstr);
7646 SvLEN(dstr) = SvLEN(sstr);
7648 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7649 else if (SvPVX(sstr) && SvLEN(sstr))
7650 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7652 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7655 SvANY(dstr) = new_XPVIV();
7656 SvCUR(dstr) = SvCUR(sstr);
7657 SvLEN(dstr) = SvLEN(sstr);
7658 SvIVX(dstr) = SvIVX(sstr);
7660 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7661 else if (SvPVX(sstr) && SvLEN(sstr))
7662 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7664 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7667 SvANY(dstr) = new_XPVNV();
7668 SvCUR(dstr) = SvCUR(sstr);
7669 SvLEN(dstr) = SvLEN(sstr);
7670 SvIVX(dstr) = SvIVX(sstr);
7671 SvNVX(dstr) = SvNVX(sstr);
7673 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7674 else if (SvPVX(sstr) && SvLEN(sstr))
7675 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7677 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7680 SvANY(dstr) = new_XPVMG();
7681 SvCUR(dstr) = SvCUR(sstr);
7682 SvLEN(dstr) = SvLEN(sstr);
7683 SvIVX(dstr) = SvIVX(sstr);
7684 SvNVX(dstr) = SvNVX(sstr);
7685 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7686 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7688 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7689 else if (SvPVX(sstr) && SvLEN(sstr))
7690 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7692 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7695 SvANY(dstr) = new_XPVBM();
7696 SvCUR(dstr) = SvCUR(sstr);
7697 SvLEN(dstr) = SvLEN(sstr);
7698 SvIVX(dstr) = SvIVX(sstr);
7699 SvNVX(dstr) = SvNVX(sstr);
7700 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7701 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7703 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7704 else if (SvPVX(sstr) && SvLEN(sstr))
7705 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7707 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7708 BmRARE(dstr) = BmRARE(sstr);
7709 BmUSEFUL(dstr) = BmUSEFUL(sstr);
7710 BmPREVIOUS(dstr)= BmPREVIOUS(sstr);
7713 SvANY(dstr) = new_XPVLV();
7714 SvCUR(dstr) = SvCUR(sstr);
7715 SvLEN(dstr) = SvLEN(sstr);
7716 SvIVX(dstr) = SvIVX(sstr);
7717 SvNVX(dstr) = SvNVX(sstr);
7718 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7719 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7721 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7722 else if (SvPVX(sstr) && SvLEN(sstr))
7723 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7725 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7726 LvTARGOFF(dstr) = LvTARGOFF(sstr); /* XXX sometimes holds PMOP* when DEBUGGING */
7727 LvTARGLEN(dstr) = LvTARGLEN(sstr);
7728 LvTARG(dstr) = sv_dup_inc(LvTARG(sstr));
7729 LvTYPE(dstr) = LvTYPE(sstr);
7732 SvANY(dstr) = new_XPVGV();
7733 SvCUR(dstr) = SvCUR(sstr);
7734 SvLEN(dstr) = SvLEN(sstr);
7735 SvIVX(dstr) = SvIVX(sstr);
7736 SvNVX(dstr) = SvNVX(sstr);
7737 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7738 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7740 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7741 else if (SvPVX(sstr) && SvLEN(sstr))
7742 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7744 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7745 GvNAMELEN(dstr) = GvNAMELEN(sstr);
7746 GvNAME(dstr) = SAVEPVN(GvNAME(sstr), GvNAMELEN(sstr));
7747 GvSTASH(dstr) = hv_dup_inc(GvSTASH(sstr));
7748 GvFLAGS(dstr) = GvFLAGS(sstr);
7749 GvGP(dstr) = gp_dup(GvGP(sstr));
7750 (void)GpREFCNT_inc(GvGP(dstr));
7753 SvANY(dstr) = new_XPVIO();
7754 SvCUR(dstr) = SvCUR(sstr);
7755 SvLEN(dstr) = SvLEN(sstr);
7756 SvIVX(dstr) = SvIVX(sstr);
7757 SvNVX(dstr) = SvNVX(sstr);
7758 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7759 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7761 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
7762 else if (SvPVX(sstr) && SvLEN(sstr))
7763 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7765 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7766 IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(sstr));
7767 if (IoOFP(sstr) == IoIFP(sstr))
7768 IoOFP(dstr) = IoIFP(dstr);
7770 IoOFP(dstr) = fp_dup(IoOFP(sstr), IoTYPE(sstr));
7771 /* PL_rsfp_filters entries have fake IoDIRP() */
7772 if (IoDIRP(sstr) && !(IoFLAGS(sstr) & IOf_FAKE_DIRP))
7773 IoDIRP(dstr) = dirp_dup(IoDIRP(sstr));
7775 IoDIRP(dstr) = IoDIRP(sstr);
7776 IoLINES(dstr) = IoLINES(sstr);
7777 IoPAGE(dstr) = IoPAGE(sstr);
7778 IoPAGE_LEN(dstr) = IoPAGE_LEN(sstr);
7779 IoLINES_LEFT(dstr) = IoLINES_LEFT(sstr);
7780 IoTOP_NAME(dstr) = SAVEPV(IoTOP_NAME(sstr));
7781 IoTOP_GV(dstr) = gv_dup(IoTOP_GV(sstr));
7782 IoFMT_NAME(dstr) = SAVEPV(IoFMT_NAME(sstr));
7783 IoFMT_GV(dstr) = gv_dup(IoFMT_GV(sstr));
7784 IoBOTTOM_NAME(dstr) = SAVEPV(IoBOTTOM_NAME(sstr));
7785 IoBOTTOM_GV(dstr) = gv_dup(IoBOTTOM_GV(sstr));
7786 IoSUBPROCESS(dstr) = IoSUBPROCESS(sstr);
7787 IoTYPE(dstr) = IoTYPE(sstr);
7788 IoFLAGS(dstr) = IoFLAGS(sstr);
7791 SvANY(dstr) = new_XPVAV();
7792 SvCUR(dstr) = SvCUR(sstr);
7793 SvLEN(dstr) = SvLEN(sstr);
7794 SvIVX(dstr) = SvIVX(sstr);
7795 SvNVX(dstr) = SvNVX(sstr);
7796 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7797 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7798 AvARYLEN((AV*)dstr) = sv_dup_inc(AvARYLEN((AV*)sstr));
7799 AvFLAGS((AV*)dstr) = AvFLAGS((AV*)sstr);
7800 if (AvARRAY((AV*)sstr)) {
7801 SV **dst_ary, **src_ary;
7802 SSize_t items = AvFILLp((AV*)sstr) + 1;
7804 src_ary = AvARRAY((AV*)sstr);
7805 Newz(0, dst_ary, AvMAX((AV*)sstr)+1, SV*);
7806 ptr_table_store(PL_ptr_table, src_ary, dst_ary);
7807 SvPVX(dstr) = (char*)dst_ary;
7808 AvALLOC((AV*)dstr) = dst_ary;
7809 if (AvREAL((AV*)sstr)) {
7811 *dst_ary++ = sv_dup_inc(*src_ary++);
7815 *dst_ary++ = sv_dup(*src_ary++);
7817 items = AvMAX((AV*)sstr) - AvFILLp((AV*)sstr);
7818 while (items-- > 0) {
7819 *dst_ary++ = &PL_sv_undef;
7823 SvPVX(dstr) = Nullch;
7824 AvALLOC((AV*)dstr) = (SV**)NULL;
7828 SvANY(dstr) = new_XPVHV();
7829 SvCUR(dstr) = SvCUR(sstr);
7830 SvLEN(dstr) = SvLEN(sstr);
7831 SvIVX(dstr) = SvIVX(sstr);
7832 SvNVX(dstr) = SvNVX(sstr);
7833 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7834 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7835 HvRITER((HV*)dstr) = HvRITER((HV*)sstr);
7836 if (HvARRAY((HV*)sstr)) {
7838 XPVHV *dxhv = (XPVHV*)SvANY(dstr);
7839 XPVHV *sxhv = (XPVHV*)SvANY(sstr);
7840 Newz(0, dxhv->xhv_array,
7841 PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1), char);
7842 while (i <= sxhv->xhv_max) {
7843 ((HE**)dxhv->xhv_array)[i] = he_dup(((HE**)sxhv->xhv_array)[i],
7844 !!HvSHAREKEYS(sstr));
7847 dxhv->xhv_eiter = he_dup(sxhv->xhv_eiter, !!HvSHAREKEYS(sstr));
7850 SvPVX(dstr) = Nullch;
7851 HvEITER((HV*)dstr) = (HE*)NULL;
7853 HvPMROOT((HV*)dstr) = HvPMROOT((HV*)sstr); /* XXX */
7854 HvNAME((HV*)dstr) = SAVEPV(HvNAME((HV*)sstr));
7857 SvANY(dstr) = new_XPVFM();
7858 FmLINES(dstr) = FmLINES(sstr);
7862 SvANY(dstr) = new_XPVCV();
7864 SvCUR(dstr) = SvCUR(sstr);
7865 SvLEN(dstr) = SvLEN(sstr);
7866 SvIVX(dstr) = SvIVX(sstr);
7867 SvNVX(dstr) = SvNVX(sstr);
7868 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
7869 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
7870 if (SvPVX(sstr) && SvLEN(sstr))
7871 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
7873 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
7874 CvSTASH(dstr) = hv_dup(CvSTASH(sstr));/* NOTE: not refcounted */
7875 CvSTART(dstr) = CvSTART(sstr);
7876 CvROOT(dstr) = OpREFCNT_inc(CvROOT(sstr));
7877 CvXSUB(dstr) = CvXSUB(sstr);
7878 CvXSUBANY(dstr) = CvXSUBANY(sstr);
7879 CvGV(dstr) = gv_dup_inc(CvGV(sstr));
7880 CvDEPTH(dstr) = CvDEPTH(sstr);
7881 if (CvPADLIST(sstr) && !AvREAL(CvPADLIST(sstr))) {
7882 /* XXX padlists are real, but pretend to be not */
7883 AvREAL_on(CvPADLIST(sstr));
7884 CvPADLIST(dstr) = av_dup_inc(CvPADLIST(sstr));
7885 AvREAL_off(CvPADLIST(sstr));
7886 AvREAL_off(CvPADLIST(dstr));
7889 CvPADLIST(dstr) = av_dup_inc(CvPADLIST(sstr));
7890 CvOUTSIDE(dstr) = cv_dup_inc(CvOUTSIDE(sstr));
7891 CvFLAGS(dstr) = CvFLAGS(sstr);
7894 Perl_croak(aTHX_ "Bizarre SvTYPE [%d]", SvTYPE(sstr));
7898 if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
7905 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max)
7910 return (PERL_CONTEXT*)NULL;
7912 /* look for it in the table first */
7913 ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
7917 /* create anew and remember what it is */
7918 Newz(56, ncxs, max + 1, PERL_CONTEXT);
7919 ptr_table_store(PL_ptr_table, cxs, ncxs);
7922 PERL_CONTEXT *cx = &cxs[ix];
7923 PERL_CONTEXT *ncx = &ncxs[ix];
7924 ncx->cx_type = cx->cx_type;
7925 if (CxTYPE(cx) == CXt_SUBST) {
7926 Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
7929 ncx->blk_oldsp = cx->blk_oldsp;
7930 ncx->blk_oldcop = cx->blk_oldcop;
7931 ncx->blk_oldretsp = cx->blk_oldretsp;
7932 ncx->blk_oldmarksp = cx->blk_oldmarksp;
7933 ncx->blk_oldscopesp = cx->blk_oldscopesp;
7934 ncx->blk_oldpm = cx->blk_oldpm;
7935 ncx->blk_gimme = cx->blk_gimme;
7936 switch (CxTYPE(cx)) {
7938 ncx->blk_sub.cv = (cx->blk_sub.olddepth == 0
7939 ? cv_dup_inc(cx->blk_sub.cv)
7940 : cv_dup(cx->blk_sub.cv));
7941 ncx->blk_sub.argarray = (cx->blk_sub.hasargs
7942 ? av_dup_inc(cx->blk_sub.argarray)
7944 ncx->blk_sub.savearray = av_dup(cx->blk_sub.savearray);
7945 ncx->blk_sub.olddepth = cx->blk_sub.olddepth;
7946 ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
7947 ncx->blk_sub.lval = cx->blk_sub.lval;
7950 ncx->blk_eval.old_in_eval = cx->blk_eval.old_in_eval;
7951 ncx->blk_eval.old_op_type = cx->blk_eval.old_op_type;
7952 ncx->blk_eval.old_namesv = sv_dup_inc(cx->blk_eval.old_namesv);
7953 ncx->blk_eval.old_eval_root = cx->blk_eval.old_eval_root;
7954 ncx->blk_eval.cur_text = sv_dup(cx->blk_eval.cur_text);
7957 ncx->blk_loop.label = cx->blk_loop.label;
7958 ncx->blk_loop.resetsp = cx->blk_loop.resetsp;
7959 ncx->blk_loop.redo_op = cx->blk_loop.redo_op;
7960 ncx->blk_loop.next_op = cx->blk_loop.next_op;
7961 ncx->blk_loop.last_op = cx->blk_loop.last_op;
7962 ncx->blk_loop.iterdata = (CxPADLOOP(cx)
7963 ? cx->blk_loop.iterdata
7964 : gv_dup((GV*)cx->blk_loop.iterdata));
7965 ncx->blk_loop.oldcurpad
7966 = (SV**)ptr_table_fetch(PL_ptr_table,
7967 cx->blk_loop.oldcurpad);
7968 ncx->blk_loop.itersave = sv_dup_inc(cx->blk_loop.itersave);
7969 ncx->blk_loop.iterlval = sv_dup_inc(cx->blk_loop.iterlval);
7970 ncx->blk_loop.iterary = av_dup_inc(cx->blk_loop.iterary);
7971 ncx->blk_loop.iterix = cx->blk_loop.iterix;
7972 ncx->blk_loop.itermax = cx->blk_loop.itermax;
7975 ncx->blk_sub.cv = cv_dup(cx->blk_sub.cv);
7976 ncx->blk_sub.gv = gv_dup(cx->blk_sub.gv);
7977 ncx->blk_sub.dfoutgv = gv_dup_inc(cx->blk_sub.dfoutgv);
7978 ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
7991 Perl_si_dup(pTHX_ PERL_SI *si)
7996 return (PERL_SI*)NULL;
7998 /* look for it in the table first */
7999 nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
8003 /* create anew and remember what it is */
8004 Newz(56, nsi, 1, PERL_SI);
8005 ptr_table_store(PL_ptr_table, si, nsi);
8007 nsi->si_stack = av_dup_inc(si->si_stack);
8008 nsi->si_cxix = si->si_cxix;
8009 nsi->si_cxmax = si->si_cxmax;
8010 nsi->si_cxstack = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax);
8011 nsi->si_type = si->si_type;
8012 nsi->si_prev = si_dup(si->si_prev);
8013 nsi->si_next = si_dup(si->si_next);
8014 nsi->si_markoff = si->si_markoff;
8019 #define POPINT(ss,ix) ((ss)[--(ix)].any_i32)
8020 #define TOPINT(ss,ix) ((ss)[ix].any_i32)
8021 #define POPLONG(ss,ix) ((ss)[--(ix)].any_long)
8022 #define TOPLONG(ss,ix) ((ss)[ix].any_long)
8023 #define POPIV(ss,ix) ((ss)[--(ix)].any_iv)
8024 #define TOPIV(ss,ix) ((ss)[ix].any_iv)
8025 #define POPPTR(ss,ix) ((ss)[--(ix)].any_ptr)
8026 #define TOPPTR(ss,ix) ((ss)[ix].any_ptr)
8027 #define POPDPTR(ss,ix) ((ss)[--(ix)].any_dptr)
8028 #define TOPDPTR(ss,ix) ((ss)[ix].any_dptr)
8029 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
8030 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
8033 #define pv_dup_inc(p) SAVEPV(p)
8034 #define pv_dup(p) SAVEPV(p)
8035 #define svp_dup_inc(p,pp) any_dup(p,pp)
8038 Perl_any_dup(pTHX_ void *v, PerlInterpreter *proto_perl)
8045 /* look for it in the table first */
8046 ret = ptr_table_fetch(PL_ptr_table, v);
8050 /* see if it is part of the interpreter structure */
8051 if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
8052 ret = (void*)(((char*)aTHXo) + (((char*)v) - (char*)proto_perl));
8060 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl)
8062 ANY *ss = proto_perl->Tsavestack;
8063 I32 ix = proto_perl->Tsavestack_ix;
8064 I32 max = proto_perl->Tsavestack_max;
8077 void (*dptr) (void*);
8078 void (*dxptr) (pTHXo_ void*);
8081 Newz(54, nss, max, ANY);
8087 case SAVEt_ITEM: /* normal string */
8088 sv = (SV*)POPPTR(ss,ix);
8089 TOPPTR(nss,ix) = sv_dup_inc(sv);
8090 sv = (SV*)POPPTR(ss,ix);
8091 TOPPTR(nss,ix) = sv_dup_inc(sv);
8093 case SAVEt_SV: /* scalar reference */
8094 sv = (SV*)POPPTR(ss,ix);
8095 TOPPTR(nss,ix) = sv_dup_inc(sv);
8096 gv = (GV*)POPPTR(ss,ix);
8097 TOPPTR(nss,ix) = gv_dup_inc(gv);
8099 case SAVEt_GENERIC_PVREF: /* generic char* */
8100 c = (char*)POPPTR(ss,ix);
8101 TOPPTR(nss,ix) = pv_dup(c);
8102 ptr = POPPTR(ss,ix);
8103 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8105 case SAVEt_GENERIC_SVREF: /* generic sv */
8106 case SAVEt_SVREF: /* scalar reference */
8107 sv = (SV*)POPPTR(ss,ix);
8108 TOPPTR(nss,ix) = sv_dup_inc(sv);
8109 ptr = POPPTR(ss,ix);
8110 TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
8112 case SAVEt_AV: /* array reference */
8113 av = (AV*)POPPTR(ss,ix);
8114 TOPPTR(nss,ix) = av_dup_inc(av);
8115 gv = (GV*)POPPTR(ss,ix);
8116 TOPPTR(nss,ix) = gv_dup(gv);
8118 case SAVEt_HV: /* hash reference */
8119 hv = (HV*)POPPTR(ss,ix);
8120 TOPPTR(nss,ix) = hv_dup_inc(hv);
8121 gv = (GV*)POPPTR(ss,ix);
8122 TOPPTR(nss,ix) = gv_dup(gv);
8124 case SAVEt_INT: /* int reference */
8125 ptr = POPPTR(ss,ix);
8126 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8127 intval = (int)POPINT(ss,ix);
8128 TOPINT(nss,ix) = intval;
8130 case SAVEt_LONG: /* long reference */
8131 ptr = POPPTR(ss,ix);
8132 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8133 longval = (long)POPLONG(ss,ix);
8134 TOPLONG(nss,ix) = longval;
8136 case SAVEt_I32: /* I32 reference */
8137 case SAVEt_I16: /* I16 reference */
8138 case SAVEt_I8: /* I8 reference */
8139 ptr = POPPTR(ss,ix);
8140 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8144 case SAVEt_IV: /* IV reference */
8145 ptr = POPPTR(ss,ix);
8146 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8150 case SAVEt_SPTR: /* SV* reference */
8151 ptr = POPPTR(ss,ix);
8152 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8153 sv = (SV*)POPPTR(ss,ix);
8154 TOPPTR(nss,ix) = sv_dup(sv);
8156 case SAVEt_VPTR: /* random* reference */
8157 ptr = POPPTR(ss,ix);
8158 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8159 ptr = POPPTR(ss,ix);
8160 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8162 case SAVEt_PPTR: /* char* reference */
8163 ptr = POPPTR(ss,ix);
8164 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8165 c = (char*)POPPTR(ss,ix);
8166 TOPPTR(nss,ix) = pv_dup(c);
8168 case SAVEt_HPTR: /* HV* reference */
8169 ptr = POPPTR(ss,ix);
8170 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8171 hv = (HV*)POPPTR(ss,ix);
8172 TOPPTR(nss,ix) = hv_dup(hv);
8174 case SAVEt_APTR: /* AV* reference */
8175 ptr = POPPTR(ss,ix);
8176 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8177 av = (AV*)POPPTR(ss,ix);
8178 TOPPTR(nss,ix) = av_dup(av);
8181 gv = (GV*)POPPTR(ss,ix);
8182 TOPPTR(nss,ix) = gv_dup(gv);
8184 case SAVEt_GP: /* scalar reference */
8185 gp = (GP*)POPPTR(ss,ix);
8186 TOPPTR(nss,ix) = gp = gp_dup(gp);
8187 (void)GpREFCNT_inc(gp);
8188 gv = (GV*)POPPTR(ss,ix);
8189 TOPPTR(nss,ix) = gv_dup_inc(c);
8190 c = (char*)POPPTR(ss,ix);
8191 TOPPTR(nss,ix) = pv_dup(c);
8198 sv = (SV*)POPPTR(ss,ix);
8199 TOPPTR(nss,ix) = sv_dup_inc(sv);
8202 ptr = POPPTR(ss,ix);
8203 if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
8204 /* these are assumed to be refcounted properly */
8205 switch (((OP*)ptr)->op_type) {
8212 TOPPTR(nss,ix) = ptr;
8217 TOPPTR(nss,ix) = Nullop;
8222 TOPPTR(nss,ix) = Nullop;
8225 c = (char*)POPPTR(ss,ix);
8226 TOPPTR(nss,ix) = pv_dup_inc(c);
8229 longval = POPLONG(ss,ix);
8230 TOPLONG(nss,ix) = longval;
8233 hv = (HV*)POPPTR(ss,ix);
8234 TOPPTR(nss,ix) = hv_dup_inc(hv);
8235 c = (char*)POPPTR(ss,ix);
8236 TOPPTR(nss,ix) = pv_dup_inc(c);
8240 case SAVEt_DESTRUCTOR:
8241 ptr = POPPTR(ss,ix);
8242 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
8243 dptr = POPDPTR(ss,ix);
8244 TOPDPTR(nss,ix) = (void (*)(void*))any_dup((void *)dptr, proto_perl);
8246 case SAVEt_DESTRUCTOR_X:
8247 ptr = POPPTR(ss,ix);
8248 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
8249 dxptr = POPDXPTR(ss,ix);
8250 TOPDXPTR(nss,ix) = (void (*)(pTHXo_ void*))any_dup((void *)dxptr, proto_perl);
8252 case SAVEt_REGCONTEXT:
8258 case SAVEt_STACK_POS: /* Position on Perl stack */
8262 case SAVEt_AELEM: /* array element */
8263 sv = (SV*)POPPTR(ss,ix);
8264 TOPPTR(nss,ix) = sv_dup_inc(sv);
8267 av = (AV*)POPPTR(ss,ix);
8268 TOPPTR(nss,ix) = av_dup_inc(av);
8270 case SAVEt_HELEM: /* hash element */
8271 sv = (SV*)POPPTR(ss,ix);
8272 TOPPTR(nss,ix) = sv_dup_inc(sv);
8273 sv = (SV*)POPPTR(ss,ix);
8274 TOPPTR(nss,ix) = sv_dup_inc(sv);
8275 hv = (HV*)POPPTR(ss,ix);
8276 TOPPTR(nss,ix) = hv_dup_inc(hv);
8279 ptr = POPPTR(ss,ix);
8280 TOPPTR(nss,ix) = ptr;
8287 av = (AV*)POPPTR(ss,ix);
8288 TOPPTR(nss,ix) = av_dup(av);
8291 longval = (long)POPLONG(ss,ix);
8292 TOPLONG(nss,ix) = longval;
8293 ptr = POPPTR(ss,ix);
8294 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8295 sv = (SV*)POPPTR(ss,ix);
8296 TOPPTR(nss,ix) = sv_dup(sv);
8299 Perl_croak(aTHX_ "panic: ss_dup inconsistency");
8311 perl_clone(PerlInterpreter *proto_perl, UV flags)
8314 CPerlObj *pPerl = (CPerlObj*)proto_perl;
8317 #ifdef PERL_IMPLICIT_SYS
8318 return perl_clone_using(proto_perl, flags,
8320 proto_perl->IMemShared,
8321 proto_perl->IMemParse,
8331 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
8332 struct IPerlMem* ipM, struct IPerlMem* ipMS,
8333 struct IPerlMem* ipMP, struct IPerlEnv* ipE,
8334 struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
8335 struct IPerlDir* ipD, struct IPerlSock* ipS,
8336 struct IPerlProc* ipP)
8338 /* XXX many of the string copies here can be optimized if they're
8339 * constants; they need to be allocated as common memory and just
8340 * their pointers copied. */
8344 CPerlObj *pPerl = new(ipM) CPerlObj(ipM, ipMS, ipMP, ipE, ipStd, ipLIO,
8346 PERL_SET_THX(pPerl);
8347 # else /* !PERL_OBJECT */
8348 PerlInterpreter *my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
8349 PERL_SET_THX(my_perl);
8352 memset(my_perl, 0xab, sizeof(PerlInterpreter));
8357 # else /* !DEBUGGING */
8358 Zero(my_perl, 1, PerlInterpreter);
8359 # endif /* DEBUGGING */
8363 PL_MemShared = ipMS;
8371 # endif /* PERL_OBJECT */
8372 #else /* !PERL_IMPLICIT_SYS */
8374 PerlInterpreter *my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
8375 PERL_SET_THX(my_perl);
8378 memset(my_perl, 0xab, sizeof(PerlInterpreter));
8383 # else /* !DEBUGGING */
8384 Zero(my_perl, 1, PerlInterpreter);
8385 # endif /* DEBUGGING */
8386 #endif /* PERL_IMPLICIT_SYS */
8389 PL_xiv_arenaroot = NULL;
8391 PL_xnv_arenaroot = NULL;
8393 PL_xrv_arenaroot = NULL;
8395 PL_xpv_arenaroot = NULL;
8397 PL_xpviv_arenaroot = NULL;
8398 PL_xpviv_root = NULL;
8399 PL_xpvnv_arenaroot = NULL;
8400 PL_xpvnv_root = NULL;
8401 PL_xpvcv_arenaroot = NULL;
8402 PL_xpvcv_root = NULL;
8403 PL_xpvav_arenaroot = NULL;
8404 PL_xpvav_root = NULL;
8405 PL_xpvhv_arenaroot = NULL;
8406 PL_xpvhv_root = NULL;
8407 PL_xpvmg_arenaroot = NULL;
8408 PL_xpvmg_root = NULL;
8409 PL_xpvlv_arenaroot = NULL;
8410 PL_xpvlv_root = NULL;
8411 PL_xpvbm_arenaroot = NULL;
8412 PL_xpvbm_root = NULL;
8413 PL_he_arenaroot = NULL;
8415 PL_nice_chunk = NULL;
8416 PL_nice_chunk_size = 0;
8419 PL_sv_root = Nullsv;
8420 PL_sv_arenaroot = Nullsv;
8422 PL_debug = proto_perl->Idebug;
8424 /* create SV map for pointer relocation */
8425 PL_ptr_table = ptr_table_new();
8427 /* initialize these special pointers as early as possible */
8428 SvANY(&PL_sv_undef) = NULL;
8429 SvREFCNT(&PL_sv_undef) = (~(U32)0)/2;
8430 SvFLAGS(&PL_sv_undef) = SVf_READONLY|SVt_NULL;
8431 ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
8434 SvUPGRADE(&PL_sv_no, SVt_PVNV);
8436 SvANY(&PL_sv_no) = new_XPVNV();
8438 SvREFCNT(&PL_sv_no) = (~(U32)0)/2;
8439 SvFLAGS(&PL_sv_no) = SVp_NOK|SVf_NOK|SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
8440 SvPVX(&PL_sv_no) = SAVEPVN(PL_No, 0);
8441 SvCUR(&PL_sv_no) = 0;
8442 SvLEN(&PL_sv_no) = 1;
8443 SvNVX(&PL_sv_no) = 0;
8444 ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
8447 SvUPGRADE(&PL_sv_yes, SVt_PVNV);
8449 SvANY(&PL_sv_yes) = new_XPVNV();
8451 SvREFCNT(&PL_sv_yes) = (~(U32)0)/2;
8452 SvFLAGS(&PL_sv_yes) = SVp_NOK|SVf_NOK|SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
8453 SvPVX(&PL_sv_yes) = SAVEPVN(PL_Yes, 1);
8454 SvCUR(&PL_sv_yes) = 1;
8455 SvLEN(&PL_sv_yes) = 2;
8456 SvNVX(&PL_sv_yes) = 1;
8457 ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
8459 /* create shared string table */
8460 PL_strtab = newHV();
8461 HvSHAREKEYS_off(PL_strtab);
8462 hv_ksplit(PL_strtab, 512);
8463 ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
8465 PL_compiling = proto_perl->Icompiling;
8466 PL_compiling.cop_stashpv = SAVEPV(PL_compiling.cop_stashpv);
8467 PL_compiling.cop_file = SAVEPV(PL_compiling.cop_file);
8468 ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
8469 if (!specialWARN(PL_compiling.cop_warnings))
8470 PL_compiling.cop_warnings = sv_dup_inc(PL_compiling.cop_warnings);
8471 if (!specialCopIO(PL_compiling.cop_io))
8472 PL_compiling.cop_io = sv_dup_inc(PL_compiling.cop_io);
8473 PL_curcop = (COP*)any_dup(proto_perl->Tcurcop, proto_perl);
8475 /* pseudo environmental stuff */
8476 PL_origargc = proto_perl->Iorigargc;
8478 New(0, PL_origargv, i+1, char*);
8479 PL_origargv[i] = '\0';
8481 PL_origargv[i] = SAVEPV(proto_perl->Iorigargv[i]);
8483 PL_envgv = gv_dup(proto_perl->Ienvgv);
8484 PL_incgv = gv_dup(proto_perl->Iincgv);
8485 PL_hintgv = gv_dup(proto_perl->Ihintgv);
8486 PL_origfilename = SAVEPV(proto_perl->Iorigfilename);
8487 PL_diehook = sv_dup_inc(proto_perl->Idiehook);
8488 PL_warnhook = sv_dup_inc(proto_perl->Iwarnhook);
8491 PL_minus_c = proto_perl->Iminus_c;
8492 PL_patchlevel = sv_dup_inc(proto_perl->Ipatchlevel);
8493 PL_localpatches = proto_perl->Ilocalpatches;
8494 PL_splitstr = proto_perl->Isplitstr;
8495 PL_preprocess = proto_perl->Ipreprocess;
8496 PL_minus_n = proto_perl->Iminus_n;
8497 PL_minus_p = proto_perl->Iminus_p;
8498 PL_minus_l = proto_perl->Iminus_l;
8499 PL_minus_a = proto_perl->Iminus_a;
8500 PL_minus_F = proto_perl->Iminus_F;
8501 PL_doswitches = proto_perl->Idoswitches;
8502 PL_dowarn = proto_perl->Idowarn;
8503 PL_doextract = proto_perl->Idoextract;
8504 PL_sawampersand = proto_perl->Isawampersand;
8505 PL_unsafe = proto_perl->Iunsafe;
8506 PL_inplace = SAVEPV(proto_perl->Iinplace);
8507 PL_e_script = sv_dup_inc(proto_perl->Ie_script);
8508 PL_perldb = proto_perl->Iperldb;
8509 PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
8511 /* magical thingies */
8512 /* XXX time(&PL_basetime) when asked for? */
8513 PL_basetime = proto_perl->Ibasetime;
8514 PL_formfeed = sv_dup(proto_perl->Iformfeed);
8516 PL_maxsysfd = proto_perl->Imaxsysfd;
8517 PL_multiline = proto_perl->Imultiline;
8518 PL_statusvalue = proto_perl->Istatusvalue;
8520 PL_statusvalue_vms = proto_perl->Istatusvalue_vms;
8523 /* shortcuts to various I/O objects */
8524 PL_stdingv = gv_dup(proto_perl->Istdingv);
8525 PL_stderrgv = gv_dup(proto_perl->Istderrgv);
8526 PL_defgv = gv_dup(proto_perl->Idefgv);
8527 PL_argvgv = gv_dup(proto_perl->Iargvgv);
8528 PL_argvoutgv = gv_dup(proto_perl->Iargvoutgv);
8529 PL_argvout_stack = av_dup(proto_perl->Iargvout_stack);
8531 /* shortcuts to regexp stuff */
8532 PL_replgv = gv_dup(proto_perl->Ireplgv);
8534 /* shortcuts to misc objects */
8535 PL_errgv = gv_dup(proto_perl->Ierrgv);
8537 /* shortcuts to debugging objects */
8538 PL_DBgv = gv_dup(proto_perl->IDBgv);
8539 PL_DBline = gv_dup(proto_perl->IDBline);
8540 PL_DBsub = gv_dup(proto_perl->IDBsub);
8541 PL_DBsingle = sv_dup(proto_perl->IDBsingle);
8542 PL_DBtrace = sv_dup(proto_perl->IDBtrace);
8543 PL_DBsignal = sv_dup(proto_perl->IDBsignal);
8544 PL_lineary = av_dup(proto_perl->Ilineary);
8545 PL_dbargs = av_dup(proto_perl->Idbargs);
8548 PL_defstash = hv_dup_inc(proto_perl->Tdefstash);
8549 PL_curstash = hv_dup(proto_perl->Tcurstash);
8550 PL_debstash = hv_dup(proto_perl->Idebstash);
8551 PL_globalstash = hv_dup(proto_perl->Iglobalstash);
8552 PL_curstname = sv_dup_inc(proto_perl->Icurstname);
8554 PL_beginav = av_dup_inc(proto_perl->Ibeginav);
8555 PL_endav = av_dup_inc(proto_perl->Iendav);
8556 PL_checkav = av_dup_inc(proto_perl->Icheckav);
8557 PL_initav = av_dup_inc(proto_perl->Iinitav);
8559 PL_sub_generation = proto_perl->Isub_generation;
8561 /* funky return mechanisms */
8562 PL_forkprocess = proto_perl->Iforkprocess;
8564 /* subprocess state */
8565 PL_fdpid = av_dup_inc(proto_perl->Ifdpid);
8567 /* internal state */
8568 PL_tainting = proto_perl->Itainting;
8569 PL_maxo = proto_perl->Imaxo;
8570 if (proto_perl->Iop_mask)
8571 PL_op_mask = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
8573 PL_op_mask = Nullch;
8575 /* current interpreter roots */
8576 PL_main_cv = cv_dup_inc(proto_perl->Imain_cv);
8577 PL_main_root = OpREFCNT_inc(proto_perl->Imain_root);
8578 PL_main_start = proto_perl->Imain_start;
8579 PL_eval_root = proto_perl->Ieval_root;
8580 PL_eval_start = proto_perl->Ieval_start;
8582 /* runtime control stuff */
8583 PL_curcopdb = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
8584 PL_copline = proto_perl->Icopline;
8586 PL_filemode = proto_perl->Ifilemode;
8587 PL_lastfd = proto_perl->Ilastfd;
8588 PL_oldname = proto_perl->Ioldname; /* XXX not quite right */
8591 PL_gensym = proto_perl->Igensym;
8592 PL_preambled = proto_perl->Ipreambled;
8593 PL_preambleav = av_dup_inc(proto_perl->Ipreambleav);
8594 PL_laststatval = proto_perl->Ilaststatval;
8595 PL_laststype = proto_perl->Ilaststype;
8596 PL_mess_sv = Nullsv;
8598 PL_ors_sv = sv_dup_inc(proto_perl->Iors_sv);
8599 PL_ofmt = SAVEPV(proto_perl->Iofmt);
8601 /* interpreter atexit processing */
8602 PL_exitlistlen = proto_perl->Iexitlistlen;
8603 if (PL_exitlistlen) {
8604 New(0, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
8605 Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
8608 PL_exitlist = (PerlExitListEntry*)NULL;
8609 PL_modglobal = hv_dup_inc(proto_perl->Imodglobal);
8611 PL_profiledata = NULL;
8612 PL_rsfp = fp_dup(proto_perl->Irsfp, '<');
8613 /* PL_rsfp_filters entries have fake IoDIRP() */
8614 PL_rsfp_filters = av_dup_inc(proto_perl->Irsfp_filters);
8616 PL_compcv = cv_dup(proto_perl->Icompcv);
8617 PL_comppad = av_dup(proto_perl->Icomppad);
8618 PL_comppad_name = av_dup(proto_perl->Icomppad_name);
8619 PL_comppad_name_fill = proto_perl->Icomppad_name_fill;
8620 PL_comppad_name_floor = proto_perl->Icomppad_name_floor;
8621 PL_curpad = (SV**)ptr_table_fetch(PL_ptr_table,
8622 proto_perl->Tcurpad);
8624 #ifdef HAVE_INTERP_INTERN
8625 sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
8628 /* more statics moved here */
8629 PL_generation = proto_perl->Igeneration;
8630 PL_DBcv = cv_dup(proto_perl->IDBcv);
8632 PL_in_clean_objs = proto_perl->Iin_clean_objs;
8633 PL_in_clean_all = proto_perl->Iin_clean_all;
8635 PL_uid = proto_perl->Iuid;
8636 PL_euid = proto_perl->Ieuid;
8637 PL_gid = proto_perl->Igid;
8638 PL_egid = proto_perl->Iegid;
8639 PL_nomemok = proto_perl->Inomemok;
8640 PL_an = proto_perl->Ian;
8641 PL_cop_seqmax = proto_perl->Icop_seqmax;
8642 PL_op_seqmax = proto_perl->Iop_seqmax;
8643 PL_evalseq = proto_perl->Ievalseq;
8644 PL_origenviron = proto_perl->Iorigenviron; /* XXX not quite right */
8645 PL_origalen = proto_perl->Iorigalen;
8646 PL_pidstatus = newHV(); /* XXX flag for cloning? */
8647 PL_osname = SAVEPV(proto_perl->Iosname);
8648 PL_sh_path = SAVEPV(proto_perl->Ish_path);
8649 PL_sighandlerp = proto_perl->Isighandlerp;
8652 PL_runops = proto_perl->Irunops;
8654 Copy(proto_perl->Itokenbuf, PL_tokenbuf, 256, char);
8657 PL_cshlen = proto_perl->Icshlen;
8658 PL_cshname = SAVEPVN(proto_perl->Icshname, PL_cshlen);
8661 PL_lex_state = proto_perl->Ilex_state;
8662 PL_lex_defer = proto_perl->Ilex_defer;
8663 PL_lex_expect = proto_perl->Ilex_expect;
8664 PL_lex_formbrack = proto_perl->Ilex_formbrack;
8665 PL_lex_dojoin = proto_perl->Ilex_dojoin;
8666 PL_lex_starts = proto_perl->Ilex_starts;
8667 PL_lex_stuff = sv_dup_inc(proto_perl->Ilex_stuff);
8668 PL_lex_repl = sv_dup_inc(proto_perl->Ilex_repl);
8669 PL_lex_op = proto_perl->Ilex_op;
8670 PL_lex_inpat = proto_perl->Ilex_inpat;
8671 PL_lex_inwhat = proto_perl->Ilex_inwhat;
8672 PL_lex_brackets = proto_perl->Ilex_brackets;
8673 i = (PL_lex_brackets < 120 ? 120 : PL_lex_brackets);
8674 PL_lex_brackstack = SAVEPVN(proto_perl->Ilex_brackstack,i);
8675 PL_lex_casemods = proto_perl->Ilex_casemods;
8676 i = (PL_lex_casemods < 12 ? 12 : PL_lex_casemods);
8677 PL_lex_casestack = SAVEPVN(proto_perl->Ilex_casestack,i);
8679 Copy(proto_perl->Inextval, PL_nextval, 5, YYSTYPE);
8680 Copy(proto_perl->Inexttype, PL_nexttype, 5, I32);
8681 PL_nexttoke = proto_perl->Inexttoke;
8683 PL_linestr = sv_dup_inc(proto_perl->Ilinestr);
8684 i = proto_perl->Ibufptr - SvPVX(proto_perl->Ilinestr);
8685 PL_bufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8686 i = proto_perl->Ioldbufptr - SvPVX(proto_perl->Ilinestr);
8687 PL_oldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8688 i = proto_perl->Ioldoldbufptr - SvPVX(proto_perl->Ilinestr);
8689 PL_oldoldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8690 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
8691 i = proto_perl->Ilinestart - SvPVX(proto_perl->Ilinestr);
8692 PL_linestart = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8693 PL_pending_ident = proto_perl->Ipending_ident;
8694 PL_sublex_info = proto_perl->Isublex_info; /* XXX not quite right */
8696 PL_expect = proto_perl->Iexpect;
8698 PL_multi_start = proto_perl->Imulti_start;
8699 PL_multi_end = proto_perl->Imulti_end;
8700 PL_multi_open = proto_perl->Imulti_open;
8701 PL_multi_close = proto_perl->Imulti_close;
8703 PL_error_count = proto_perl->Ierror_count;
8704 PL_subline = proto_perl->Isubline;
8705 PL_subname = sv_dup_inc(proto_perl->Isubname);
8707 PL_min_intro_pending = proto_perl->Imin_intro_pending;
8708 PL_max_intro_pending = proto_perl->Imax_intro_pending;
8709 PL_padix = proto_perl->Ipadix;
8710 PL_padix_floor = proto_perl->Ipadix_floor;
8711 PL_pad_reset_pending = proto_perl->Ipad_reset_pending;
8713 i = proto_perl->Ilast_uni - SvPVX(proto_perl->Ilinestr);
8714 PL_last_uni = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8715 i = proto_perl->Ilast_lop - SvPVX(proto_perl->Ilinestr);
8716 PL_last_lop = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
8717 PL_last_lop_op = proto_perl->Ilast_lop_op;
8718 PL_in_my = proto_perl->Iin_my;
8719 PL_in_my_stash = hv_dup(proto_perl->Iin_my_stash);
8721 PL_cryptseen = proto_perl->Icryptseen;
8724 PL_hints = proto_perl->Ihints;
8726 PL_amagic_generation = proto_perl->Iamagic_generation;
8728 #ifdef USE_LOCALE_COLLATE
8729 PL_collation_ix = proto_perl->Icollation_ix;
8730 PL_collation_name = SAVEPV(proto_perl->Icollation_name);
8731 PL_collation_standard = proto_perl->Icollation_standard;
8732 PL_collxfrm_base = proto_perl->Icollxfrm_base;
8733 PL_collxfrm_mult = proto_perl->Icollxfrm_mult;
8734 #endif /* USE_LOCALE_COLLATE */
8736 #ifdef USE_LOCALE_NUMERIC
8737 PL_numeric_name = SAVEPV(proto_perl->Inumeric_name);
8738 PL_numeric_standard = proto_perl->Inumeric_standard;
8739 PL_numeric_local = proto_perl->Inumeric_local;
8740 PL_numeric_radix = proto_perl->Inumeric_radix;
8741 #endif /* !USE_LOCALE_NUMERIC */
8743 /* utf8 character classes */
8744 PL_utf8_alnum = sv_dup_inc(proto_perl->Iutf8_alnum);
8745 PL_utf8_alnumc = sv_dup_inc(proto_perl->Iutf8_alnumc);
8746 PL_utf8_ascii = sv_dup_inc(proto_perl->Iutf8_ascii);
8747 PL_utf8_alpha = sv_dup_inc(proto_perl->Iutf8_alpha);
8748 PL_utf8_space = sv_dup_inc(proto_perl->Iutf8_space);
8749 PL_utf8_cntrl = sv_dup_inc(proto_perl->Iutf8_cntrl);
8750 PL_utf8_graph = sv_dup_inc(proto_perl->Iutf8_graph);
8751 PL_utf8_digit = sv_dup_inc(proto_perl->Iutf8_digit);
8752 PL_utf8_upper = sv_dup_inc(proto_perl->Iutf8_upper);
8753 PL_utf8_lower = sv_dup_inc(proto_perl->Iutf8_lower);
8754 PL_utf8_print = sv_dup_inc(proto_perl->Iutf8_print);
8755 PL_utf8_punct = sv_dup_inc(proto_perl->Iutf8_punct);
8756 PL_utf8_xdigit = sv_dup_inc(proto_perl->Iutf8_xdigit);
8757 PL_utf8_mark = sv_dup_inc(proto_perl->Iutf8_mark);
8758 PL_utf8_toupper = sv_dup_inc(proto_perl->Iutf8_toupper);
8759 PL_utf8_totitle = sv_dup_inc(proto_perl->Iutf8_totitle);
8760 PL_utf8_tolower = sv_dup_inc(proto_perl->Iutf8_tolower);
8763 PL_last_swash_hv = Nullhv; /* reinits on demand */
8764 PL_last_swash_klen = 0;
8765 PL_last_swash_key[0]= '\0';
8766 PL_last_swash_tmps = (U8*)NULL;
8767 PL_last_swash_slen = 0;
8769 /* perly.c globals */
8770 PL_yydebug = proto_perl->Iyydebug;
8771 PL_yynerrs = proto_perl->Iyynerrs;
8772 PL_yyerrflag = proto_perl->Iyyerrflag;
8773 PL_yychar = proto_perl->Iyychar;
8774 PL_yyval = proto_perl->Iyyval;
8775 PL_yylval = proto_perl->Iyylval;
8777 PL_glob_index = proto_perl->Iglob_index;
8778 PL_srand_called = proto_perl->Isrand_called;
8779 PL_uudmap['M'] = 0; /* reinits on demand */
8780 PL_bitcount = Nullch; /* reinits on demand */
8782 if (proto_perl->Ipsig_ptr) {
8783 int sig_num[] = { SIG_NUM };
8784 Newz(0, PL_psig_ptr, sizeof(sig_num)/sizeof(*sig_num), SV*);
8785 Newz(0, PL_psig_name, sizeof(sig_num)/sizeof(*sig_num), SV*);
8786 for (i = 1; PL_sig_name[i]; i++) {
8787 PL_psig_ptr[i] = sv_dup_inc(proto_perl->Ipsig_ptr[i]);
8788 PL_psig_name[i] = sv_dup_inc(proto_perl->Ipsig_name[i]);
8792 PL_psig_ptr = (SV**)NULL;
8793 PL_psig_name = (SV**)NULL;
8796 /* thrdvar.h stuff */
8799 /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
8800 PL_tmps_ix = proto_perl->Ttmps_ix;
8801 PL_tmps_max = proto_perl->Ttmps_max;
8802 PL_tmps_floor = proto_perl->Ttmps_floor;
8803 Newz(50, PL_tmps_stack, PL_tmps_max, SV*);
8805 while (i <= PL_tmps_ix) {
8806 PL_tmps_stack[i] = sv_dup_inc(proto_perl->Ttmps_stack[i]);
8810 /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
8811 i = proto_perl->Tmarkstack_max - proto_perl->Tmarkstack;
8812 Newz(54, PL_markstack, i, I32);
8813 PL_markstack_max = PL_markstack + (proto_perl->Tmarkstack_max
8814 - proto_perl->Tmarkstack);
8815 PL_markstack_ptr = PL_markstack + (proto_perl->Tmarkstack_ptr
8816 - proto_perl->Tmarkstack);
8817 Copy(proto_perl->Tmarkstack, PL_markstack,
8818 PL_markstack_ptr - PL_markstack + 1, I32);
8820 /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
8821 * NOTE: unlike the others! */
8822 PL_scopestack_ix = proto_perl->Tscopestack_ix;
8823 PL_scopestack_max = proto_perl->Tscopestack_max;
8824 Newz(54, PL_scopestack, PL_scopestack_max, I32);
8825 Copy(proto_perl->Tscopestack, PL_scopestack, PL_scopestack_ix, I32);
8827 /* next push_return() sets PL_retstack[PL_retstack_ix]
8828 * NOTE: unlike the others! */
8829 PL_retstack_ix = proto_perl->Tretstack_ix;
8830 PL_retstack_max = proto_perl->Tretstack_max;
8831 Newz(54, PL_retstack, PL_retstack_max, OP*);
8832 Copy(proto_perl->Tretstack, PL_retstack, PL_retstack_ix, I32);
8834 /* NOTE: si_dup() looks at PL_markstack */
8835 PL_curstackinfo = si_dup(proto_perl->Tcurstackinfo);
8837 /* PL_curstack = PL_curstackinfo->si_stack; */
8838 PL_curstack = av_dup(proto_perl->Tcurstack);
8839 PL_mainstack = av_dup(proto_perl->Tmainstack);
8841 /* next PUSHs() etc. set *(PL_stack_sp+1) */
8842 PL_stack_base = AvARRAY(PL_curstack);
8843 PL_stack_sp = PL_stack_base + (proto_perl->Tstack_sp
8844 - proto_perl->Tstack_base);
8845 PL_stack_max = PL_stack_base + AvMAX(PL_curstack);
8847 /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
8848 * NOTE: unlike the others! */
8849 PL_savestack_ix = proto_perl->Tsavestack_ix;
8850 PL_savestack_max = proto_perl->Tsavestack_max;
8851 /*Newz(54, PL_savestack, PL_savestack_max, ANY);*/
8852 PL_savestack = ss_dup(proto_perl);
8856 ENTER; /* perl_destruct() wants to LEAVE; */
8859 PL_start_env = proto_perl->Tstart_env; /* XXXXXX */
8860 PL_top_env = &PL_start_env;
8862 PL_op = proto_perl->Top;
8865 PL_Xpv = (XPV*)NULL;
8866 PL_na = proto_perl->Tna;
8868 PL_statbuf = proto_perl->Tstatbuf;
8869 PL_statcache = proto_perl->Tstatcache;
8870 PL_statgv = gv_dup(proto_perl->Tstatgv);
8871 PL_statname = sv_dup_inc(proto_perl->Tstatname);
8873 PL_timesbuf = proto_perl->Ttimesbuf;
8876 PL_tainted = proto_perl->Ttainted;
8877 PL_curpm = proto_perl->Tcurpm; /* XXX No PMOP ref count */
8878 PL_nrs = sv_dup_inc(proto_perl->Tnrs);
8879 PL_rs = sv_dup_inc(proto_perl->Trs);
8880 PL_last_in_gv = gv_dup(proto_perl->Tlast_in_gv);
8881 PL_ofs_sv = sv_dup_inc(proto_perl->Tofs_sv);
8882 PL_defoutgv = gv_dup_inc(proto_perl->Tdefoutgv);
8883 PL_chopset = proto_perl->Tchopset; /* XXX never deallocated */
8884 PL_toptarget = sv_dup_inc(proto_perl->Ttoptarget);
8885 PL_bodytarget = sv_dup_inc(proto_perl->Tbodytarget);
8886 PL_formtarget = sv_dup(proto_perl->Tformtarget);
8888 PL_restartop = proto_perl->Trestartop;
8889 PL_in_eval = proto_perl->Tin_eval;
8890 PL_delaymagic = proto_perl->Tdelaymagic;
8891 PL_dirty = proto_perl->Tdirty;
8892 PL_localizing = proto_perl->Tlocalizing;
8894 #ifdef PERL_FLEXIBLE_EXCEPTIONS
8895 PL_protect = proto_perl->Tprotect;
8897 PL_errors = sv_dup_inc(proto_perl->Terrors);
8898 PL_av_fetch_sv = Nullsv;
8899 PL_hv_fetch_sv = Nullsv;
8900 Zero(&PL_hv_fetch_ent_mh, 1, HE); /* XXX */
8901 PL_modcount = proto_perl->Tmodcount;
8902 PL_lastgotoprobe = Nullop;
8903 PL_dumpindent = proto_perl->Tdumpindent;
8905 PL_sortcop = (OP*)any_dup(proto_perl->Tsortcop, proto_perl);
8906 PL_sortstash = hv_dup(proto_perl->Tsortstash);
8907 PL_firstgv = gv_dup(proto_perl->Tfirstgv);
8908 PL_secondgv = gv_dup(proto_perl->Tsecondgv);
8909 PL_sortcxix = proto_perl->Tsortcxix;
8910 PL_efloatbuf = Nullch; /* reinits on demand */
8911 PL_efloatsize = 0; /* reinits on demand */
8915 PL_screamfirst = NULL;
8916 PL_screamnext = NULL;
8917 PL_maxscream = -1; /* reinits on demand */
8918 PL_lastscream = Nullsv;
8920 PL_watchaddr = NULL;
8921 PL_watchok = Nullch;
8923 PL_regdummy = proto_perl->Tregdummy;
8924 PL_regcomp_parse = Nullch;
8925 PL_regxend = Nullch;
8926 PL_regcode = (regnode*)NULL;
8929 PL_regprecomp = Nullch;
8934 PL_seen_zerolen = 0;
8936 PL_regcomp_rx = (regexp*)NULL;
8938 PL_colorset = 0; /* reinits PL_colors[] */
8939 /*PL_colors[6] = {0,0,0,0,0,0};*/
8940 PL_reg_whilem_seen = 0;
8941 PL_reginput = Nullch;
8944 PL_regstartp = (I32*)NULL;
8945 PL_regendp = (I32*)NULL;
8946 PL_reglastparen = (U32*)NULL;
8947 PL_regtill = Nullch;
8949 PL_reg_start_tmp = (char**)NULL;
8950 PL_reg_start_tmpl = 0;
8951 PL_regdata = (struct reg_data*)NULL;
8954 PL_reg_eval_set = 0;
8956 PL_regprogram = (regnode*)NULL;
8958 PL_regcc = (CURCUR*)NULL;
8959 PL_reg_call_cc = (struct re_cc_state*)NULL;
8960 PL_reg_re = (regexp*)NULL;
8961 PL_reg_ganch = Nullch;
8963 PL_reg_magic = (MAGIC*)NULL;
8965 PL_reg_oldcurpm = (PMOP*)NULL;
8966 PL_reg_curpm = (PMOP*)NULL;
8967 PL_reg_oldsaved = Nullch;
8968 PL_reg_oldsavedlen = 0;
8970 PL_reg_leftiter = 0;
8971 PL_reg_poscache = Nullch;
8972 PL_reg_poscache_size= 0;
8974 /* RE engine - function pointers */
8975 PL_regcompp = proto_perl->Tregcompp;
8976 PL_regexecp = proto_perl->Tregexecp;
8977 PL_regint_start = proto_perl->Tregint_start;
8978 PL_regint_string = proto_perl->Tregint_string;
8979 PL_regfree = proto_perl->Tregfree;
8981 PL_reginterp_cnt = 0;
8982 PL_reg_starttry = 0;
8985 return (PerlInterpreter*)pPerl;
8991 #else /* !USE_ITHREADS */
8997 #endif /* USE_ITHREADS */
9000 do_report_used(pTHXo_ SV *sv)
9002 if (SvTYPE(sv) != SVTYPEMASK) {
9003 PerlIO_printf(Perl_debug_log, "****\n");
9009 do_clean_objs(pTHXo_ SV *sv)
9013 if (SvROK(sv) && SvOBJECT(rv = SvRV(sv))) {
9014 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(sv));)
9015 if (SvWEAKREF(sv)) {
9026 /* XXX Might want to check arrays, etc. */
9029 #ifndef DISABLE_DESTRUCTOR_KLUDGE
9031 do_clean_named_objs(pTHXo_ SV *sv)
9033 if (SvTYPE(sv) == SVt_PVGV && GvGP(sv)) {
9034 if ( SvOBJECT(GvSV(sv)) ||
9035 (GvAV(sv) && SvOBJECT(GvAV(sv))) ||
9036 (GvHV(sv) && SvOBJECT(GvHV(sv))) ||
9037 (GvIO(sv) && SvOBJECT(GvIO(sv))) ||
9038 (GvCV(sv) && SvOBJECT(GvCV(sv))) )
9040 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning named glob object:\n "), sv_dump(sv));)
9048 do_clean_all(pTHXo_ SV *sv)
9050 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) );)
9051 SvFLAGS(sv) |= SVf_BREAK;