3 * Copyright (c) 1991-2001, Larry Wall
5 * You may distribute under the terms of either the GNU General Public
6 * License or the Artistic License, as specified in the README file.
11 * "I wonder what the Entish is for 'yes' and 'no'," he thought.
19 #define SV_CHECK_THINKFIRST(sv) if (SvTHINKFIRST(sv)) sv_force_normal(sv)
21 static void do_report_used(pTHXo_ SV *sv);
22 static void do_clean_objs(pTHXo_ SV *sv);
23 #ifndef DISABLE_DESTRUCTOR_KLUDGE
24 static void do_clean_named_objs(pTHXo_ SV *sv);
26 static void do_clean_all(pTHXo_ SV *sv);
29 * "A time to plant, and a time to uproot what was planted..."
34 SvANY(p) = (void *)PL_sv_root; \
35 SvFLAGS(p) = SVTYPEMASK; \
40 /* sv_mutex must be held while calling uproot_SV() */
41 #define uproot_SV(p) \
44 PL_sv_root = (SV*)SvANY(p); \
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;
140 PL_nice_chunk_size = 0;
143 char *chunk; /* must use New here to match call to */
144 New(704,chunk,1008,char); /* Safefree() in sv_free_arenas() */
145 sv_add_arena(chunk, 1008, 0);
152 S_visit(pTHX_ SVFUNC_t f)
159 for (sva = PL_sv_arenaroot; sva; sva = (SV*)SvANY(sva)) {
160 svend = &sva[SvREFCNT(sva)];
161 for (sv = sva + 1; sv < svend; ++sv) {
162 if (SvTYPE(sv) != SVTYPEMASK && SvREFCNT(sv)) {
172 Perl_sv_report_used(pTHX)
174 visit(do_report_used);
178 Perl_sv_clean_objs(pTHX)
180 PL_in_clean_objs = TRUE;
181 visit(do_clean_objs);
182 #ifndef DISABLE_DESTRUCTOR_KLUDGE
183 /* some barnacles may yet remain, clinging to typeglobs */
184 visit(do_clean_named_objs);
186 PL_in_clean_objs = FALSE;
190 Perl_sv_clean_all(pTHX)
193 PL_in_clean_all = TRUE;
194 cleaned = visit(do_clean_all);
195 PL_in_clean_all = FALSE;
200 Perl_sv_free_arenas(pTHX)
204 XPV *arena, *arenanext;
206 /* Free arenas here, but be careful about fake ones. (We assume
207 contiguity of the fake ones with the corresponding real ones.) */
209 for (sva = PL_sv_arenaroot; sva; sva = svanext) {
210 svanext = (SV*) SvANY(sva);
211 while (svanext && SvFAKE(svanext))
212 svanext = (SV*) SvANY(svanext);
215 Safefree((void *)sva);
218 for (arena = PL_xiv_arenaroot; arena; arena = arenanext) {
219 arenanext = (XPV*)arena->xpv_pv;
222 PL_xiv_arenaroot = 0;
224 for (arena = PL_xnv_arenaroot; arena; arena = arenanext) {
225 arenanext = (XPV*)arena->xpv_pv;
228 PL_xnv_arenaroot = 0;
230 for (arena = PL_xrv_arenaroot; arena; arena = arenanext) {
231 arenanext = (XPV*)arena->xpv_pv;
234 PL_xrv_arenaroot = 0;
236 for (arena = PL_xpv_arenaroot; arena; arena = arenanext) {
237 arenanext = (XPV*)arena->xpv_pv;
240 PL_xpv_arenaroot = 0;
242 for (arena = (XPV*)PL_xpviv_arenaroot; arena; arena = arenanext) {
243 arenanext = (XPV*)arena->xpv_pv;
246 PL_xpviv_arenaroot = 0;
248 for (arena = (XPV*)PL_xpvnv_arenaroot; arena; arena = arenanext) {
249 arenanext = (XPV*)arena->xpv_pv;
252 PL_xpvnv_arenaroot = 0;
254 for (arena = (XPV*)PL_xpvcv_arenaroot; arena; arena = arenanext) {
255 arenanext = (XPV*)arena->xpv_pv;
258 PL_xpvcv_arenaroot = 0;
260 for (arena = (XPV*)PL_xpvav_arenaroot; arena; arena = arenanext) {
261 arenanext = (XPV*)arena->xpv_pv;
264 PL_xpvav_arenaroot = 0;
266 for (arena = (XPV*)PL_xpvhv_arenaroot; arena; arena = arenanext) {
267 arenanext = (XPV*)arena->xpv_pv;
270 PL_xpvhv_arenaroot = 0;
272 for (arena = (XPV*)PL_xpvmg_arenaroot; arena; arena = arenanext) {
273 arenanext = (XPV*)arena->xpv_pv;
276 PL_xpvmg_arenaroot = 0;
278 for (arena = (XPV*)PL_xpvlv_arenaroot; arena; arena = arenanext) {
279 arenanext = (XPV*)arena->xpv_pv;
282 PL_xpvlv_arenaroot = 0;
284 for (arena = (XPV*)PL_xpvbm_arenaroot; arena; arena = arenanext) {
285 arenanext = (XPV*)arena->xpv_pv;
288 PL_xpvbm_arenaroot = 0;
290 for (arena = (XPV*)PL_he_arenaroot; arena; arena = arenanext) {
291 arenanext = (XPV*)arena->xpv_pv;
297 Safefree(PL_nice_chunk);
298 PL_nice_chunk = Nullch;
299 PL_nice_chunk_size = 0;
305 Perl_report_uninit(pTHX)
308 Perl_warner(aTHX_ WARN_UNINITIALIZED, PL_warn_uninit,
309 " in ", PL_op_desc[PL_op->op_type]);
311 Perl_warner(aTHX_ WARN_UNINITIALIZED, PL_warn_uninit, "", "");
323 * See comment in more_xiv() -- RAM.
325 PL_xiv_root = *(IV**)xiv;
327 return (XPVIV*)((char*)xiv - STRUCT_OFFSET(XPVIV, xiv_iv));
331 S_del_xiv(pTHX_ XPVIV *p)
333 IV* xiv = (IV*)((char*)(p) + STRUCT_OFFSET(XPVIV, xiv_iv));
335 *(IV**)xiv = PL_xiv_root;
346 New(705, ptr, 1008/sizeof(XPV), XPV);
347 ptr->xpv_pv = (char*)PL_xiv_arenaroot; /* linked list of xiv arenas */
348 PL_xiv_arenaroot = ptr; /* to keep Purify happy */
351 xivend = &xiv[1008 / sizeof(IV) - 1];
352 xiv += (sizeof(XPV) - 1) / sizeof(IV) + 1; /* fudge by size of XPV */
354 while (xiv < xivend) {
355 *(IV**)xiv = (IV *)(xiv + 1);
369 PL_xnv_root = *(NV**)xnv;
371 return (XPVNV*)((char*)xnv - STRUCT_OFFSET(XPVNV, xnv_nv));
375 S_del_xnv(pTHX_ XPVNV *p)
377 NV* xnv = (NV*)((char*)(p) + STRUCT_OFFSET(XPVNV, xnv_nv));
379 *(NV**)xnv = PL_xnv_root;
390 New(711, ptr, 1008/sizeof(XPV), XPV);
391 ptr->xpv_pv = (char*)PL_xnv_arenaroot;
392 PL_xnv_arenaroot = ptr;
395 xnvend = &xnv[1008 / sizeof(NV) - 1];
396 xnv += (sizeof(XPVIV) - 1) / sizeof(NV) + 1; /* fudge by sizeof XPVIV */
398 while (xnv < xnvend) {
399 *(NV**)xnv = (NV*)(xnv + 1);
413 PL_xrv_root = (XRV*)xrv->xrv_rv;
419 S_del_xrv(pTHX_ XRV *p)
422 p->xrv_rv = (SV*)PL_xrv_root;
431 register XRV* xrvend;
433 New(712, ptr, 1008/sizeof(XPV), XPV);
434 ptr->xpv_pv = (char*)PL_xrv_arenaroot;
435 PL_xrv_arenaroot = ptr;
438 xrvend = &xrv[1008 / sizeof(XRV) - 1];
439 xrv += (sizeof(XPV) - 1) / sizeof(XRV) + 1;
441 while (xrv < xrvend) {
442 xrv->xrv_rv = (SV*)(xrv + 1);
456 PL_xpv_root = (XPV*)xpv->xpv_pv;
462 S_del_xpv(pTHX_ XPV *p)
465 p->xpv_pv = (char*)PL_xpv_root;
474 register XPV* xpvend;
475 New(713, xpv, 1008/sizeof(XPV), XPV);
476 xpv->xpv_pv = (char*)PL_xpv_arenaroot;
477 PL_xpv_arenaroot = xpv;
479 xpvend = &xpv[1008 / sizeof(XPV) - 1];
481 while (xpv < xpvend) {
482 xpv->xpv_pv = (char*)(xpv + 1);
495 xpviv = PL_xpviv_root;
496 PL_xpviv_root = (XPVIV*)xpviv->xpv_pv;
502 S_del_xpviv(pTHX_ XPVIV *p)
505 p->xpv_pv = (char*)PL_xpviv_root;
513 register XPVIV* xpviv;
514 register XPVIV* xpvivend;
515 New(714, xpviv, 1008/sizeof(XPVIV), XPVIV);
516 xpviv->xpv_pv = (char*)PL_xpviv_arenaroot;
517 PL_xpviv_arenaroot = xpviv;
519 xpvivend = &xpviv[1008 / sizeof(XPVIV) - 1];
520 PL_xpviv_root = ++xpviv;
521 while (xpviv < xpvivend) {
522 xpviv->xpv_pv = (char*)(xpviv + 1);
535 xpvnv = PL_xpvnv_root;
536 PL_xpvnv_root = (XPVNV*)xpvnv->xpv_pv;
542 S_del_xpvnv(pTHX_ XPVNV *p)
545 p->xpv_pv = (char*)PL_xpvnv_root;
553 register XPVNV* xpvnv;
554 register XPVNV* xpvnvend;
555 New(715, xpvnv, 1008/sizeof(XPVNV), XPVNV);
556 xpvnv->xpv_pv = (char*)PL_xpvnv_arenaroot;
557 PL_xpvnv_arenaroot = xpvnv;
559 xpvnvend = &xpvnv[1008 / sizeof(XPVNV) - 1];
560 PL_xpvnv_root = ++xpvnv;
561 while (xpvnv < xpvnvend) {
562 xpvnv->xpv_pv = (char*)(xpvnv + 1);
575 xpvcv = PL_xpvcv_root;
576 PL_xpvcv_root = (XPVCV*)xpvcv->xpv_pv;
582 S_del_xpvcv(pTHX_ XPVCV *p)
585 p->xpv_pv = (char*)PL_xpvcv_root;
593 register XPVCV* xpvcv;
594 register XPVCV* xpvcvend;
595 New(716, xpvcv, 1008/sizeof(XPVCV), XPVCV);
596 xpvcv->xpv_pv = (char*)PL_xpvcv_arenaroot;
597 PL_xpvcv_arenaroot = xpvcv;
599 xpvcvend = &xpvcv[1008 / sizeof(XPVCV) - 1];
600 PL_xpvcv_root = ++xpvcv;
601 while (xpvcv < xpvcvend) {
602 xpvcv->xpv_pv = (char*)(xpvcv + 1);
615 xpvav = PL_xpvav_root;
616 PL_xpvav_root = (XPVAV*)xpvav->xav_array;
622 S_del_xpvav(pTHX_ XPVAV *p)
625 p->xav_array = (char*)PL_xpvav_root;
633 register XPVAV* xpvav;
634 register XPVAV* xpvavend;
635 New(717, xpvav, 1008/sizeof(XPVAV), XPVAV);
636 xpvav->xav_array = (char*)PL_xpvav_arenaroot;
637 PL_xpvav_arenaroot = xpvav;
639 xpvavend = &xpvav[1008 / sizeof(XPVAV) - 1];
640 PL_xpvav_root = ++xpvav;
641 while (xpvav < xpvavend) {
642 xpvav->xav_array = (char*)(xpvav + 1);
645 xpvav->xav_array = 0;
655 xpvhv = PL_xpvhv_root;
656 PL_xpvhv_root = (XPVHV*)xpvhv->xhv_array;
662 S_del_xpvhv(pTHX_ XPVHV *p)
665 p->xhv_array = (char*)PL_xpvhv_root;
673 register XPVHV* xpvhv;
674 register XPVHV* xpvhvend;
675 New(718, xpvhv, 1008/sizeof(XPVHV), XPVHV);
676 xpvhv->xhv_array = (char*)PL_xpvhv_arenaroot;
677 PL_xpvhv_arenaroot = xpvhv;
679 xpvhvend = &xpvhv[1008 / sizeof(XPVHV) - 1];
680 PL_xpvhv_root = ++xpvhv;
681 while (xpvhv < xpvhvend) {
682 xpvhv->xhv_array = (char*)(xpvhv + 1);
685 xpvhv->xhv_array = 0;
695 xpvmg = PL_xpvmg_root;
696 PL_xpvmg_root = (XPVMG*)xpvmg->xpv_pv;
702 S_del_xpvmg(pTHX_ XPVMG *p)
705 p->xpv_pv = (char*)PL_xpvmg_root;
713 register XPVMG* xpvmg;
714 register XPVMG* xpvmgend;
715 New(719, xpvmg, 1008/sizeof(XPVMG), XPVMG);
716 xpvmg->xpv_pv = (char*)PL_xpvmg_arenaroot;
717 PL_xpvmg_arenaroot = xpvmg;
719 xpvmgend = &xpvmg[1008 / sizeof(XPVMG) - 1];
720 PL_xpvmg_root = ++xpvmg;
721 while (xpvmg < xpvmgend) {
722 xpvmg->xpv_pv = (char*)(xpvmg + 1);
735 xpvlv = PL_xpvlv_root;
736 PL_xpvlv_root = (XPVLV*)xpvlv->xpv_pv;
742 S_del_xpvlv(pTHX_ XPVLV *p)
745 p->xpv_pv = (char*)PL_xpvlv_root;
753 register XPVLV* xpvlv;
754 register XPVLV* xpvlvend;
755 New(720, xpvlv, 1008/sizeof(XPVLV), XPVLV);
756 xpvlv->xpv_pv = (char*)PL_xpvlv_arenaroot;
757 PL_xpvlv_arenaroot = xpvlv;
759 xpvlvend = &xpvlv[1008 / sizeof(XPVLV) - 1];
760 PL_xpvlv_root = ++xpvlv;
761 while (xpvlv < xpvlvend) {
762 xpvlv->xpv_pv = (char*)(xpvlv + 1);
775 xpvbm = PL_xpvbm_root;
776 PL_xpvbm_root = (XPVBM*)xpvbm->xpv_pv;
782 S_del_xpvbm(pTHX_ XPVBM *p)
785 p->xpv_pv = (char*)PL_xpvbm_root;
793 register XPVBM* xpvbm;
794 register XPVBM* xpvbmend;
795 New(721, xpvbm, 1008/sizeof(XPVBM), XPVBM);
796 xpvbm->xpv_pv = (char*)PL_xpvbm_arenaroot;
797 PL_xpvbm_arenaroot = xpvbm;
799 xpvbmend = &xpvbm[1008 / sizeof(XPVBM) - 1];
800 PL_xpvbm_root = ++xpvbm;
801 while (xpvbm < xpvbmend) {
802 xpvbm->xpv_pv = (char*)(xpvbm + 1);
809 # define my_safemalloc(s) (void*)safexmalloc(717,s)
810 # define my_safefree(p) safexfree((char*)p)
812 # define my_safemalloc(s) (void*)safemalloc(s)
813 # define my_safefree(p) safefree((char*)p)
818 #define new_XIV() my_safemalloc(sizeof(XPVIV))
819 #define del_XIV(p) my_safefree(p)
821 #define new_XNV() my_safemalloc(sizeof(XPVNV))
822 #define del_XNV(p) my_safefree(p)
824 #define new_XRV() my_safemalloc(sizeof(XRV))
825 #define del_XRV(p) my_safefree(p)
827 #define new_XPV() my_safemalloc(sizeof(XPV))
828 #define del_XPV(p) my_safefree(p)
830 #define new_XPVIV() my_safemalloc(sizeof(XPVIV))
831 #define del_XPVIV(p) my_safefree(p)
833 #define new_XPVNV() my_safemalloc(sizeof(XPVNV))
834 #define del_XPVNV(p) my_safefree(p)
836 #define new_XPVCV() my_safemalloc(sizeof(XPVCV))
837 #define del_XPVCV(p) my_safefree(p)
839 #define new_XPVAV() my_safemalloc(sizeof(XPVAV))
840 #define del_XPVAV(p) my_safefree(p)
842 #define new_XPVHV() my_safemalloc(sizeof(XPVHV))
843 #define del_XPVHV(p) my_safefree(p)
845 #define new_XPVMG() my_safemalloc(sizeof(XPVMG))
846 #define del_XPVMG(p) my_safefree(p)
848 #define new_XPVLV() my_safemalloc(sizeof(XPVLV))
849 #define del_XPVLV(p) my_safefree(p)
851 #define new_XPVBM() my_safemalloc(sizeof(XPVBM))
852 #define del_XPVBM(p) my_safefree(p)
856 #define new_XIV() (void*)new_xiv()
857 #define del_XIV(p) del_xiv((XPVIV*) p)
859 #define new_XNV() (void*)new_xnv()
860 #define del_XNV(p) del_xnv((XPVNV*) p)
862 #define new_XRV() (void*)new_xrv()
863 #define del_XRV(p) del_xrv((XRV*) p)
865 #define new_XPV() (void*)new_xpv()
866 #define del_XPV(p) del_xpv((XPV *)p)
868 #define new_XPVIV() (void*)new_xpviv()
869 #define del_XPVIV(p) del_xpviv((XPVIV *)p)
871 #define new_XPVNV() (void*)new_xpvnv()
872 #define del_XPVNV(p) del_xpvnv((XPVNV *)p)
874 #define new_XPVCV() (void*)new_xpvcv()
875 #define del_XPVCV(p) del_xpvcv((XPVCV *)p)
877 #define new_XPVAV() (void*)new_xpvav()
878 #define del_XPVAV(p) del_xpvav((XPVAV *)p)
880 #define new_XPVHV() (void*)new_xpvhv()
881 #define del_XPVHV(p) del_xpvhv((XPVHV *)p)
883 #define new_XPVMG() (void*)new_xpvmg()
884 #define del_XPVMG(p) del_xpvmg((XPVMG *)p)
886 #define new_XPVLV() (void*)new_xpvlv()
887 #define del_XPVLV(p) del_xpvlv((XPVLV *)p)
889 #define new_XPVBM() (void*)new_xpvbm()
890 #define del_XPVBM(p) del_xpvbm((XPVBM *)p)
894 #define new_XPVGV() my_safemalloc(sizeof(XPVGV))
895 #define del_XPVGV(p) my_safefree(p)
897 #define new_XPVFM() my_safemalloc(sizeof(XPVFM))
898 #define del_XPVFM(p) my_safefree(p)
900 #define new_XPVIO() my_safemalloc(sizeof(XPVIO))
901 #define del_XPVIO(p) my_safefree(p)
904 =for apidoc sv_upgrade
906 Upgrade an SV to a more complex form. Use C<SvUPGRADE>. See
913 Perl_sv_upgrade(pTHX_ register SV *sv, U32 mt)
923 if (mt != SVt_PV && SvREADONLY(sv) && SvFAKE(sv)) {
927 if (SvTYPE(sv) == mt)
933 switch (SvTYPE(sv)) {
954 else if (mt < SVt_PVIV)
971 pv = (char*)SvRV(sv);
991 else if (mt == SVt_NV)
1002 del_XPVIV(SvANY(sv));
1012 del_XPVNV(SvANY(sv));
1020 magic = SvMAGIC(sv);
1021 stash = SvSTASH(sv);
1022 del_XPVMG(SvANY(sv));
1025 Perl_croak(aTHX_ "Can't upgrade that kind of scalar");
1030 Perl_croak(aTHX_ "Can't upgrade to undef");
1032 SvANY(sv) = new_XIV();
1036 SvANY(sv) = new_XNV();
1040 SvANY(sv) = new_XRV();
1044 SvANY(sv) = new_XPV();
1050 SvANY(sv) = new_XPVIV();
1060 SvANY(sv) = new_XPVNV();
1068 SvANY(sv) = new_XPVMG();
1074 SvMAGIC(sv) = magic;
1075 SvSTASH(sv) = stash;
1078 SvANY(sv) = new_XPVLV();
1084 SvMAGIC(sv) = magic;
1085 SvSTASH(sv) = stash;
1092 SvANY(sv) = new_XPVAV();
1100 SvMAGIC(sv) = magic;
1101 SvSTASH(sv) = stash;
1107 SvANY(sv) = new_XPVHV();
1115 SvMAGIC(sv) = magic;
1116 SvSTASH(sv) = stash;
1123 SvANY(sv) = new_XPVCV();
1124 Zero(SvANY(sv), 1, XPVCV);
1130 SvMAGIC(sv) = magic;
1131 SvSTASH(sv) = stash;
1134 SvANY(sv) = new_XPVGV();
1140 SvMAGIC(sv) = magic;
1141 SvSTASH(sv) = stash;
1149 SvANY(sv) = new_XPVBM();
1155 SvMAGIC(sv) = magic;
1156 SvSTASH(sv) = stash;
1162 SvANY(sv) = new_XPVFM();
1163 Zero(SvANY(sv), 1, XPVFM);
1169 SvMAGIC(sv) = magic;
1170 SvSTASH(sv) = stash;
1173 SvANY(sv) = new_XPVIO();
1174 Zero(SvANY(sv), 1, XPVIO);
1180 SvMAGIC(sv) = magic;
1181 SvSTASH(sv) = stash;
1182 IoPAGE_LEN(sv) = 60;
1185 SvFLAGS(sv) &= ~SVTYPEMASK;
1191 Perl_sv_backoff(pTHX_ register SV *sv)
1195 char *s = SvPVX(sv);
1196 SvLEN(sv) += SvIVX(sv);
1197 SvPVX(sv) -= SvIVX(sv);
1199 Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1201 SvFLAGS(sv) &= ~SVf_OOK;
1208 Expands the character buffer in the SV. This will use C<sv_unref> and will
1209 upgrade the SV to C<SVt_PV>. Returns a pointer to the character buffer.
1216 Perl_sv_grow(pTHX_ register SV *sv, register STRLEN newlen)
1220 #ifdef HAS_64K_LIMIT
1221 if (newlen >= 0x10000) {
1222 PerlIO_printf(Perl_debug_log,
1223 "Allocation too large: %"UVxf"\n", (UV)newlen);
1226 #endif /* HAS_64K_LIMIT */
1229 if (SvTYPE(sv) < SVt_PV) {
1230 sv_upgrade(sv, SVt_PV);
1233 else if (SvOOK(sv)) { /* pv is offset? */
1236 if (newlen > SvLEN(sv))
1237 newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1238 #ifdef HAS_64K_LIMIT
1239 if (newlen >= 0x10000)
1245 if (newlen > SvLEN(sv)) { /* need more room? */
1246 if (SvLEN(sv) && s) {
1247 #if defined(MYMALLOC) && !defined(LEAKTEST)
1248 STRLEN l = malloced_size((void*)SvPVX(sv));
1254 Renew(s,newlen,char);
1257 New(703,s,newlen,char);
1259 SvLEN_set(sv, newlen);
1265 =for apidoc sv_setiv
1267 Copies an integer into the given SV. Does not handle 'set' magic. See
1274 Perl_sv_setiv(pTHX_ register SV *sv, IV i)
1276 SV_CHECK_THINKFIRST(sv);
1277 switch (SvTYPE(sv)) {
1279 sv_upgrade(sv, SVt_IV);
1282 sv_upgrade(sv, SVt_PVNV);
1286 sv_upgrade(sv, SVt_PVIV);
1295 Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1296 PL_op_desc[PL_op->op_type]);
1298 (void)SvIOK_only(sv); /* validate number */
1304 =for apidoc sv_setiv_mg
1306 Like C<sv_setiv>, but also handles 'set' magic.
1312 Perl_sv_setiv_mg(pTHX_ register SV *sv, IV i)
1319 =for apidoc sv_setuv
1321 Copies an unsigned integer into the given SV. Does not handle 'set' magic.
1328 Perl_sv_setuv(pTHX_ register SV *sv, UV u)
1330 /* With these two if statements:
1331 u=1.49 s=0.52 cu=72.49 cs=10.64 scripts=270 tests=20865
1334 u=1.35 s=0.47 cu=73.45 cs=11.43 scripts=270 tests=20865
1336 If you wish to remove them, please benchmark to see what the effect is
1338 if (u <= (UV)IV_MAX) {
1339 sv_setiv(sv, (IV)u);
1348 =for apidoc sv_setuv_mg
1350 Like C<sv_setuv>, but also handles 'set' magic.
1356 Perl_sv_setuv_mg(pTHX_ register SV *sv, UV u)
1358 /* With these two if statements:
1359 u=1.49 s=0.52 cu=72.49 cs=10.64 scripts=270 tests=20865
1362 u=1.35 s=0.47 cu=73.45 cs=11.43 scripts=270 tests=20865
1364 If you wish to remove them, please benchmark to see what the effect is
1366 if (u <= (UV)IV_MAX) {
1367 sv_setiv(sv, (IV)u);
1377 =for apidoc sv_setnv
1379 Copies a double into the given SV. Does not handle 'set' magic. See
1386 Perl_sv_setnv(pTHX_ register SV *sv, NV num)
1388 SV_CHECK_THINKFIRST(sv);
1389 switch (SvTYPE(sv)) {
1392 sv_upgrade(sv, SVt_NV);
1397 sv_upgrade(sv, SVt_PVNV);
1406 Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1407 PL_op_name[PL_op->op_type]);
1410 (void)SvNOK_only(sv); /* validate number */
1415 =for apidoc sv_setnv_mg
1417 Like C<sv_setnv>, but also handles 'set' magic.
1423 Perl_sv_setnv_mg(pTHX_ register SV *sv, NV num)
1430 S_not_a_number(pTHX_ SV *sv)
1434 char *limit = tmpbuf + sizeof(tmpbuf) - 8;
1435 /* each *s can expand to 4 chars + "...\0",
1436 i.e. need room for 8 chars */
1439 for (s = SvPVX(sv), end = s + SvCUR(sv); s < end && d < limit; s++) {
1441 if (ch & 128 && !isPRINT_LC(ch)) {
1450 else if (ch == '\r') {
1454 else if (ch == '\f') {
1458 else if (ch == '\\') {
1462 else if (ch == '\0') {
1466 else if (isPRINT_LC(ch))
1481 Perl_warner(aTHX_ WARN_NUMERIC,
1482 "Argument \"%s\" isn't numeric in %s", tmpbuf,
1483 PL_op_desc[PL_op->op_type]);
1485 Perl_warner(aTHX_ WARN_NUMERIC,
1486 "Argument \"%s\" isn't numeric", tmpbuf);
1489 #define IS_NUMBER_IN_UV 0x01 /* number within UV range (maybe not
1490 int). value returned in pointed-
1492 #define IS_NUMBER_GREATER_THAN_UV_MAX 0x02 /* pointed to UV undefined */
1493 #define IS_NUMBER_NOT_INT 0x04 /* saw . or E notation */
1494 #define IS_NUMBER_NEG 0x08 /* leading minus sign */
1495 #define IS_NUMBER_INFINITY 0x10 /* this is big */
1498 S_grok_number(pTHX_ const char *pv, STRLEN len, UV *valuep)
1501 const char *send = pv + len;
1502 const UV max_div_10 = UV_MAX / 10;
1503 const char max_mod_10 = UV_MAX % 10 + '0';
1506 #ifdef USE_LOCALE_NUMERIC
1507 bool specialradix = FALSE;
1514 numtype = IS_NUMBER_NEG;
1519 /* next must be digit or the radix separator or beginning of infinity */
1521 /* UVs are at least 32 bits, so the first 9 decimal digits cannot
1523 UV value = *s - '0';
1524 /* This construction seems to be more optimiser friendly.
1525 (without it gcc does the isDIGIT test and the *s - '0' separately)
1526 With it gcc on arm is managing 6 instructions (6 cycles) per digit.
1527 In theory the optimiser could deduce how far to unroll the loop
1528 before checking for overflow. */
1529 int digit = *++s - '0';
1530 if (digit >= 0 && digit <= 9) {
1531 value = value * 10 + digit;
1533 if (digit >= 0 && digit <= 9) {
1534 value = value * 10 + digit;
1536 if (digit >= 0 && digit <= 9) {
1537 value = value * 10 + digit;
1539 if (digit >= 0 && digit <= 9) {
1540 value = value * 10 + digit;
1542 if (digit >= 0 && digit <= 9) {
1543 value = value * 10 + digit;
1545 if (digit >= 0 && digit <= 9) {
1546 value = value * 10 + digit;
1548 if (digit >= 0 && digit <= 9) {
1549 value = value * 10 + digit;
1551 if (digit >= 0 && digit <= 9) {
1552 value = value * 10 + digit;
1553 /* Now got 9 digits, so need to check
1554 each time for overflow. */
1556 while (digit >= 0 && digit <= 9
1557 && (value < max_div_10
1558 || (value == max_div_10
1559 && *s <= max_mod_10))) {
1560 value = value * 10 + digit;
1563 if (digit >= 0 && digit <= 9) {
1564 /* value overflowed.
1565 skip the remaining digits, don't
1566 worry about setting *valuep. */
1569 } while (isDIGIT(*s));
1571 IS_NUMBER_GREATER_THAN_UV_MAX;
1582 numtype |= IS_NUMBER_IN_UV;
1588 #ifdef USE_LOCALE_NUMERIC
1589 (specialradix = IS_NUMERIC_RADIX(s, send)) ||
1592 #ifdef USE_LOCALE_NUMERIC
1594 s += SvCUR(PL_numeric_radix_sv);
1598 numtype |= IS_NUMBER_NOT_INT;
1599 while (isDIGIT(*s)) /* optional digits after the radix */
1604 #ifdef USE_LOCALE_NUMERIC
1605 (specialradix = IS_NUMERIC_RADIX(s, send)) ||
1609 #ifdef USE_LOCALE_NUMERIC
1611 s += SvCUR(PL_numeric_radix_sv);
1615 numtype |= IS_NUMBER_NOT_INT;
1616 /* no digits before the radix means we need digits after it */
1620 } while (isDIGIT(*s));
1621 numtype |= IS_NUMBER_IN_UV;
1623 /* integer approximation is valid - it's 0. */
1630 else if (*s == 'I' || *s == 'i') {
1631 s++; if (*s != 'N' && *s != 'n') return 0;
1632 s++; if (*s != 'F' && *s != 'f') return 0;
1633 s++; if (*s == 'I' || *s == 'i') {
1634 s++; if (*s != 'N' && *s != 'n') return 0;
1635 s++; if (*s != 'I' && *s != 'i') return 0;
1636 s++; if (*s != 'T' && *s != 't') return 0;
1637 s++; if (*s != 'Y' && *s != 'y') return 0;
1642 else /* Add test for NaN here. */
1646 numtype &= IS_NUMBER_NEG; /* Keep track of sign */
1647 numtype |= IS_NUMBER_INFINITY | IS_NUMBER_NOT_INT;
1649 /* we can have an optional exponent part */
1650 if (*s == 'e' || *s == 'E') {
1651 /* The only flag we keep is sign. Blow away any "it's UV" */
1652 numtype &= IS_NUMBER_NEG;
1653 numtype |= IS_NUMBER_NOT_INT;
1655 if (*s == '-' || *s == '+')
1660 } while (isDIGIT(*s));
1670 if (len == 10 && memEQ(pv, "0 but true", 10)) {
1673 return IS_NUMBER_IN_UV;
1679 =for apidoc looks_like_number
1681 Test if an the content of an SV looks like a number (or is a
1682 number). C<Inf> and C<Infinity> are treated as numbers (so will not
1683 issue a non-numeric warning), even if your atof() doesn't grok them.
1689 Perl_looks_like_number(pTHX_ SV *sv)
1691 register char *sbegin;
1698 else if (SvPOKp(sv))
1699 sbegin = SvPV(sv, len);
1701 return 1; /* Historic. Wrong? */
1702 return grok_number(sbegin, len, NULL);
1705 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1706 until proven guilty, assume that things are not that bad... */
1708 /* As 64 bit platforms often have an NV that doesn't preserve all bits of
1709 an IV (an assumption perl has been based on to date) it becomes necessary
1710 to remove the assumption that the NV always carries enough precision to
1711 recreate the IV whenever needed, and that the NV is the canonical form.
1712 Instead, IV/UV and NV need to be given equal rights. So as to not lose
1713 precision as an side effect of conversion (which would lead to insanity
1714 and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1715 1) to distinguish between IV/UV/NV slots that have cached a valid
1716 conversion where precision was lost and IV/UV/NV slots that have a
1717 valid conversion which has lost no precision
1718 2) to ensure that if a numeric conversion to one form is request that
1719 would lose precision, the precise conversion (or differently
1720 imprecise conversion) is also performed and cached, to prevent
1721 requests for different numeric formats on the same SV causing
1722 lossy conversion chains. (lossless conversion chains are perfectly
1727 SvIOKp is true if the IV slot contains a valid value
1728 SvIOK is true only if the IV value is accurate (UV if SvIOK_UV true)
1729 SvNOKp is true if the NV slot contains a valid value
1730 SvNOK is true only if the NV value is accurate
1733 while converting from PV to NV check to see if converting that NV to an
1734 IV(or UV) would lose accuracy over a direct conversion from PV to
1735 IV(or UV). If it would, cache both conversions, return NV, but mark
1736 SV as IOK NOKp (ie not NOK).
1738 while converting from PV to IV check to see if converting that IV to an
1739 NV would lose accuracy over a direct conversion from PV to NV. If it
1740 would, cache both conversions, flag similarly.
1742 Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1743 correctly because if IV & NV were set NV *always* overruled.
1744 Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flags meaning
1745 changes - now IV and NV together means that the two are interchangeable
1746 SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1748 The benefit of this is operations such as pp_add know that if SvIOK is
1749 true for both left and right operands, then integer addition can be
1750 used instead of floating point. (for cases where the result won't
1751 overflow) Before, floating point was always used, which could lead to
1752 loss of precision compared with integer addition.
1754 * making IV and NV equal status should make maths accurate on 64 bit
1756 * may speed up maths somewhat if pp_add and friends start to use
1757 integers when possible instead of fp. (hopefully the overhead in
1758 looking for SvIOK and checking for overflow will not outweigh the
1759 fp to integer speedup)
1760 * will slow down integer operations (callers of SvIV) on "inaccurate"
1761 values, as the change from SvIOK to SvIOKp will cause a call into
1762 sv_2iv each time rather than a macro access direct to the IV slot
1763 * should speed up number->string conversion on integers as IV is
1764 favoured when IV and NV equally accurate
1766 ####################################################################
1767 You had better be using SvIOK_notUV if you want an IV for arithmetic
1768 SvIOK is true if (IV or UV), so you might be getting (IV)SvUV
1769 SvUOK is true iff UV.
1770 ####################################################################
1772 Your mileage will vary depending your CPUs relative fp to integer
1776 #ifndef NV_PRESERVES_UV
1777 #define IS_NUMBER_UNDERFLOW_IV 1
1778 #define IS_NUMBER_UNDERFLOW_UV 2
1779 #define IS_NUMBER_IV_AND_UV 2
1780 #define IS_NUMBER_OVERFLOW_IV 4
1781 #define IS_NUMBER_OVERFLOW_UV 5
1783 /* For sv_2nv these three cases are "SvNOK and don't bother casting" */
1785 S_sv_2iuv_non_preserve (pTHX_ register SV *sv, I32 numtype)
1787 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_2iuv_non '%s', IV=0x%"UVxf" NV=%g inttype=%"UVXf"\n", SvPVX(sv), SvIVX(sv), SvNVX(sv), (UV)numtype));
1788 if (SvNVX(sv) < (NV)IV_MIN) {
1789 (void)SvIOKp_on(sv);
1792 return IS_NUMBER_UNDERFLOW_IV;
1794 if (SvNVX(sv) > (NV)UV_MAX) {
1795 (void)SvIOKp_on(sv);
1799 return IS_NUMBER_OVERFLOW_UV;
1801 (void)SvIOKp_on(sv);
1803 /* Can't use strtol etc to convert this string. (See truth table in
1805 if (SvNVX(sv) <= (UV)IV_MAX) {
1806 SvIVX(sv) = I_V(SvNVX(sv));
1807 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1808 SvIOK_on(sv); /* Integer is precise. NOK, IOK */
1810 /* Integer is imprecise. NOK, IOKp */
1812 return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
1815 SvUVX(sv) = U_V(SvNVX(sv));
1816 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
1817 if (SvUVX(sv) == UV_MAX) {
1818 /* As we know that NVs don't preserve UVs, UV_MAX cannot
1819 possibly be preserved by NV. Hence, it must be overflow.
1821 return IS_NUMBER_OVERFLOW_UV;
1823 SvIOK_on(sv); /* Integer is precise. NOK, UOK */
1825 /* Integer is imprecise. NOK, IOKp */
1827 return IS_NUMBER_OVERFLOW_IV;
1829 #endif /* NV_PRESERVES_UV*/
1832 Perl_sv_2iv(pTHX_ register SV *sv)
1836 if (SvGMAGICAL(sv)) {
1841 return I_V(SvNVX(sv));
1843 if (SvPOKp(sv) && SvLEN(sv))
1846 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
1847 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
1853 if (SvTHINKFIRST(sv)) {
1856 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
1857 (SvTYPE(tmpstr) != SVt_RV || (SvRV(tmpstr) != SvRV(sv))))
1858 return SvIV(tmpstr);
1859 return PTR2IV(SvRV(sv));
1861 if (SvREADONLY(sv) && SvFAKE(sv)) {
1862 sv_force_normal(sv);
1864 if (SvREADONLY(sv) && !SvOK(sv)) {
1865 if (ckWARN(WARN_UNINITIALIZED))
1872 return (IV)(SvUVX(sv));
1879 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
1880 * without also getting a cached IV/UV from it at the same time
1881 * (ie PV->NV conversion should detect loss of accuracy and cache
1882 * IV or UV at same time to avoid this. NWC */
1884 if (SvTYPE(sv) == SVt_NV)
1885 sv_upgrade(sv, SVt_PVNV);
1887 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
1888 /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
1889 certainly cast into the IV range at IV_MAX, whereas the correct
1890 answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
1892 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
1893 SvIVX(sv) = I_V(SvNVX(sv));
1894 if (SvNVX(sv) == (NV) SvIVX(sv)
1895 #ifndef NV_PRESERVES_UV
1896 && (((UV)1 << NV_PRESERVES_UV_BITS) >
1897 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
1898 /* Don't flag it as "accurately an integer" if the number
1899 came from a (by definition imprecise) NV operation, and
1900 we're outside the range of NV integer precision */
1903 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
1904 DEBUG_c(PerlIO_printf(Perl_debug_log,
1905 "0x%"UVxf" iv(%g => %"IVdf") (precise)\n",
1911 /* IV not precise. No need to convert from PV, as NV
1912 conversion would already have cached IV if it detected
1913 that PV->IV would be better than PV->NV->IV
1914 flags already correct - don't set public IOK. */
1915 DEBUG_c(PerlIO_printf(Perl_debug_log,
1916 "0x%"UVxf" iv(%g => %"IVdf") (imprecise)\n",
1921 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
1922 but the cast (NV)IV_MIN rounds to a the value less (more
1923 negative) than IV_MIN which happens to be equal to SvNVX ??
1924 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
1925 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
1926 (NV)UVX == NVX are both true, but the values differ. :-(
1927 Hopefully for 2s complement IV_MIN is something like
1928 0x8000000000000000 which will be exact. NWC */
1931 SvUVX(sv) = U_V(SvNVX(sv));
1933 (SvNVX(sv) == (NV) SvUVX(sv))
1934 #ifndef NV_PRESERVES_UV
1935 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
1936 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
1937 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
1938 /* Don't flag it as "accurately an integer" if the number
1939 came from a (by definition imprecise) NV operation, and
1940 we're outside the range of NV integer precision */
1946 DEBUG_c(PerlIO_printf(Perl_debug_log,
1947 "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
1951 return (IV)SvUVX(sv);
1954 else if (SvPOKp(sv) && SvLEN(sv)) {
1956 int numtype = grok_number(SvPVX(sv), SvCUR(sv), &value);
1957 /* We want to avoid a possible problem when we cache an IV which
1958 may be later translated to an NV, and the resulting NV is not
1959 the same as the direct translation of the initial string
1960 (eg 123.456 can shortcut to the IV 123 with atol(), but we must
1961 be careful to ensure that the value with the .456 is around if the
1962 NV value is requested in the future).
1964 This means that if we cache such an IV, we need to cache the
1965 NV as well. Moreover, we trade speed for space, and do not
1966 cache the NV if we are sure it's not needed.
1969 /* SVt_PVNV is one higher than SVt_PVIV, hence this order */
1970 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
1971 == IS_NUMBER_IN_UV) {
1972 /* It's defintately an integer, only upgrade to PVIV */
1973 if (SvTYPE(sv) < SVt_PVIV)
1974 sv_upgrade(sv, SVt_PVIV);
1976 } else if (SvTYPE(sv) < SVt_PVNV)
1977 sv_upgrade(sv, SVt_PVNV);
1979 /* If NV preserves UV then we only use the UV value if we know that
1980 we aren't going to call atof() below. If NVs don't preserve UVs
1981 then the value returned may have more precision than atof() will
1982 return, even though value isn't perfectly accurate. */
1983 if ((numtype & (IS_NUMBER_IN_UV
1984 #ifdef NV_PRESERVES_UV
1987 )) == IS_NUMBER_IN_UV) {
1988 /* This won't turn off the public IOK flag if it was set above */
1989 (void)SvIOKp_on(sv);
1991 if (!(numtype & IS_NUMBER_NEG)) {
1993 if (value <= (UV)IV_MAX) {
1994 SvIVX(sv) = (IV)value;
2000 /* 2s complement assumption */
2001 if (value <= (UV)IV_MIN) {
2002 SvIVX(sv) = -(IV)value;
2004 /* Too negative for an IV. This is a double upgrade, but
2005 I'm assuming it will be be rare. */
2006 if (SvTYPE(sv) < SVt_PVNV)
2007 sv_upgrade(sv, SVt_PVNV);
2011 SvNVX(sv) = -(NV)value;
2016 /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2017 will be in the previous block to set the IV slot, and the next
2018 block to set the NV slot. So no else here. */
2020 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2021 != IS_NUMBER_IN_UV) {
2022 /* It wasn't an (integer that doesn't overflow the UV). */
2023 SvNVX(sv) = Atof(SvPVX(sv));
2025 if (! numtype && ckWARN(WARN_NUMERIC))
2028 #if defined(USE_LONG_DOUBLE)
2029 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
2030 PTR2UV(sv), SvNVX(sv)));
2032 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%g)\n",
2033 PTR2UV(sv), SvNVX(sv)));
2037 #ifdef NV_PRESERVES_UV
2038 (void)SvIOKp_on(sv);
2040 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2041 SvIVX(sv) = I_V(SvNVX(sv));
2042 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2045 /* Integer is imprecise. NOK, IOKp */
2047 /* UV will not work better than IV */
2049 if (SvNVX(sv) > (NV)UV_MAX) {
2051 /* Integer is inaccurate. NOK, IOKp, is UV */
2055 SvUVX(sv) = U_V(SvNVX(sv));
2056 /* 0xFFFFFFFFFFFFFFFF not an issue in here */
2057 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2061 /* Integer is imprecise. NOK, IOKp, is UV */
2067 #else /* NV_PRESERVES_UV */
2068 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2069 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2070 /* The IV slot will have been set from value returned by
2071 grok_number above. The NV slot has just been set using
2074 assert (SvIOKp(sv));
2076 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2077 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2078 /* Small enough to preserve all bits. */
2079 (void)SvIOKp_on(sv);
2081 SvIVX(sv) = I_V(SvNVX(sv));
2082 if ((NV)(SvIVX(sv)) == SvNVX(sv))
2084 /* Assumption: first non-preserved integer is < IV_MAX,
2085 this NV is in the preserved range, therefore: */
2086 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2088 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);
2092 0 0 already failed to read UV.
2093 0 1 already failed to read UV.
2094 1 0 you won't get here in this case. IV/UV
2095 slot set, public IOK, Atof() unneeded.
2096 1 1 already read UV.
2097 so there's no point in sv_2iuv_non_preserve() attempting
2098 to use atol, strtol, strtoul etc. */
2099 if (sv_2iuv_non_preserve (sv, numtype)
2100 >= IS_NUMBER_OVERFLOW_IV)
2104 #endif /* NV_PRESERVES_UV */
2107 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
2109 if (SvTYPE(sv) < SVt_IV)
2110 /* Typically the caller expects that sv_any is not NULL now. */
2111 sv_upgrade(sv, SVt_IV);
2114 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2115 PTR2UV(sv),SvIVX(sv)));
2116 return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2120 Perl_sv_2uv(pTHX_ register SV *sv)
2124 if (SvGMAGICAL(sv)) {
2129 return U_V(SvNVX(sv));
2130 if (SvPOKp(sv) && SvLEN(sv))
2133 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2134 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2140 if (SvTHINKFIRST(sv)) {
2143 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
2144 (SvTYPE(tmpstr) != SVt_RV || (SvRV(tmpstr) != SvRV(sv))))
2145 return SvUV(tmpstr);
2146 return PTR2UV(SvRV(sv));
2148 if (SvREADONLY(sv) && SvFAKE(sv)) {
2149 sv_force_normal(sv);
2151 if (SvREADONLY(sv) && !SvOK(sv)) {
2152 if (ckWARN(WARN_UNINITIALIZED))
2162 return (UV)SvIVX(sv);
2166 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2167 * without also getting a cached IV/UV from it at the same time
2168 * (ie PV->NV conversion should detect loss of accuracy and cache
2169 * IV or UV at same time to avoid this. */
2170 /* IV-over-UV optimisation - choose to cache IV if possible */
2172 if (SvTYPE(sv) == SVt_NV)
2173 sv_upgrade(sv, SVt_PVNV);
2175 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
2176 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2177 SvIVX(sv) = I_V(SvNVX(sv));
2178 if (SvNVX(sv) == (NV) SvIVX(sv)
2179 #ifndef NV_PRESERVES_UV
2180 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2181 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2182 /* Don't flag it as "accurately an integer" if the number
2183 came from a (by definition imprecise) NV operation, and
2184 we're outside the range of NV integer precision */
2187 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
2188 DEBUG_c(PerlIO_printf(Perl_debug_log,
2189 "0x%"UVxf" uv(%g => %"IVdf") (precise)\n",
2195 /* IV not precise. No need to convert from PV, as NV
2196 conversion would already have cached IV if it detected
2197 that PV->IV would be better than PV->NV->IV
2198 flags already correct - don't set public IOK. */
2199 DEBUG_c(PerlIO_printf(Perl_debug_log,
2200 "0x%"UVxf" uv(%g => %"IVdf") (imprecise)\n",
2205 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2206 but the cast (NV)IV_MIN rounds to a the value less (more
2207 negative) than IV_MIN which happens to be equal to SvNVX ??
2208 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2209 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2210 (NV)UVX == NVX are both true, but the values differ. :-(
2211 Hopefully for 2s complement IV_MIN is something like
2212 0x8000000000000000 which will be exact. NWC */
2215 SvUVX(sv) = U_V(SvNVX(sv));
2217 (SvNVX(sv) == (NV) SvUVX(sv))
2218 #ifndef NV_PRESERVES_UV
2219 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2220 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2221 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2222 /* Don't flag it as "accurately an integer" if the number
2223 came from a (by definition imprecise) NV operation, and
2224 we're outside the range of NV integer precision */
2229 DEBUG_c(PerlIO_printf(Perl_debug_log,
2230 "0x%"UVxf" 2uv(%"UVuf" => %"IVdf") (as unsigned)\n",
2236 else if (SvPOKp(sv) && SvLEN(sv)) {
2238 int numtype = grok_number(SvPVX(sv), SvCUR(sv), &value);
2240 /* We want to avoid a possible problem when we cache a UV which
2241 may be later translated to an NV, and the resulting NV is not
2242 the translation of the initial data.
2244 This means that if we cache such a UV, we need to cache the
2245 NV as well. Moreover, we trade speed for space, and do not
2246 cache the NV if not needed.
2249 /* SVt_PVNV is one higher than SVt_PVIV, hence this order */
2250 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2251 == IS_NUMBER_IN_UV) {
2252 /* It's defintately an integer, only upgrade to PVIV */
2253 if (SvTYPE(sv) < SVt_PVIV)
2254 sv_upgrade(sv, SVt_PVIV);
2256 } else if (SvTYPE(sv) < SVt_PVNV)
2257 sv_upgrade(sv, SVt_PVNV);
2259 /* If NV preserves UV then we only use the UV value if we know that
2260 we aren't going to call atof() below. If NVs don't preserve UVs
2261 then the value returned may have more precision than atof() will
2262 return, even though it isn't accurate. */
2263 if ((numtype & (IS_NUMBER_IN_UV
2264 #ifdef NV_PRESERVES_UV
2267 )) == IS_NUMBER_IN_UV) {
2268 /* This won't turn off the public IOK flag if it was set above */
2269 (void)SvIOKp_on(sv);
2271 if (!(numtype & IS_NUMBER_NEG)) {
2273 if (value <= (UV)IV_MAX) {
2274 SvIVX(sv) = (IV)value;
2276 /* it didn't overflow, and it was positive. */
2281 /* 2s complement assumption */
2282 if (value <= (UV)IV_MIN) {
2283 SvIVX(sv) = -(IV)value;
2285 /* Too negative for an IV. This is a double upgrade, but
2286 I'm assuming it will be be rare. */
2287 if (SvTYPE(sv) < SVt_PVNV)
2288 sv_upgrade(sv, SVt_PVNV);
2292 SvNVX(sv) = -(NV)value;
2298 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2299 != IS_NUMBER_IN_UV) {
2300 /* It wasn't an integer, or it overflowed the UV. */
2301 SvNVX(sv) = Atof(SvPVX(sv));
2303 if (! numtype && ckWARN(WARN_NUMERIC))
2306 #if defined(USE_LONG_DOUBLE)
2307 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%" PERL_PRIgldbl ")\n",
2308 PTR2UV(sv), SvNVX(sv)));
2310 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%g)\n",
2311 PTR2UV(sv), SvNVX(sv)));
2314 #ifdef NV_PRESERVES_UV
2315 (void)SvIOKp_on(sv);
2317 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2318 SvIVX(sv) = I_V(SvNVX(sv));
2319 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2322 /* Integer is imprecise. NOK, IOKp */
2324 /* UV will not work better than IV */
2326 if (SvNVX(sv) > (NV)UV_MAX) {
2328 /* Integer is inaccurate. NOK, IOKp, is UV */
2332 SvUVX(sv) = U_V(SvNVX(sv));
2333 /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2334 NV preservse UV so can do correct comparison. */
2335 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2339 /* Integer is imprecise. NOK, IOKp, is UV */
2344 #else /* NV_PRESERVES_UV */
2345 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2346 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2347 /* The UV slot will have been set from value returned by
2348 grok_number above. The NV slot has just been set using
2351 assert (SvIOKp(sv));
2353 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2354 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2355 /* Small enough to preserve all bits. */
2356 (void)SvIOKp_on(sv);
2358 SvIVX(sv) = I_V(SvNVX(sv));
2359 if ((NV)(SvIVX(sv)) == SvNVX(sv))
2361 /* Assumption: first non-preserved integer is < IV_MAX,
2362 this NV is in the preserved range, therefore: */
2363 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2365 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);
2368 sv_2iuv_non_preserve (sv, numtype);
2370 #endif /* NV_PRESERVES_UV */
2374 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2375 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2378 if (SvTYPE(sv) < SVt_IV)
2379 /* Typically the caller expects that sv_any is not NULL now. */
2380 sv_upgrade(sv, SVt_IV);
2384 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2385 PTR2UV(sv),SvUVX(sv)));
2386 return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2390 Perl_sv_2nv(pTHX_ register SV *sv)
2394 if (SvGMAGICAL(sv)) {
2398 if (SvPOKp(sv) && SvLEN(sv)) {
2399 if (ckWARN(WARN_NUMERIC) && !SvIOKp(sv) &&
2400 !grok_number(SvPVX(sv), SvCUR(sv), NULL))
2402 return Atof(SvPVX(sv));
2406 return (NV)SvUVX(sv);
2408 return (NV)SvIVX(sv);
2411 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2412 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2418 if (SvTHINKFIRST(sv)) {
2421 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
2422 (SvTYPE(tmpstr) != SVt_RV || (SvRV(tmpstr) != SvRV(sv))))
2423 return SvNV(tmpstr);
2424 return PTR2NV(SvRV(sv));
2426 if (SvREADONLY(sv) && SvFAKE(sv)) {
2427 sv_force_normal(sv);
2429 if (SvREADONLY(sv) && !SvOK(sv)) {
2430 if (ckWARN(WARN_UNINITIALIZED))
2435 if (SvTYPE(sv) < SVt_NV) {
2436 if (SvTYPE(sv) == SVt_IV)
2437 sv_upgrade(sv, SVt_PVNV);
2439 sv_upgrade(sv, SVt_NV);
2440 #if defined(USE_LONG_DOUBLE)
2442 STORE_NUMERIC_LOCAL_SET_STANDARD();
2443 PerlIO_printf(Perl_debug_log,
2444 "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2445 PTR2UV(sv), SvNVX(sv));
2446 RESTORE_NUMERIC_LOCAL();
2450 STORE_NUMERIC_LOCAL_SET_STANDARD();
2451 PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%g)\n",
2452 PTR2UV(sv), SvNVX(sv));
2453 RESTORE_NUMERIC_LOCAL();
2457 else if (SvTYPE(sv) < SVt_PVNV)
2458 sv_upgrade(sv, SVt_PVNV);
2459 if (SvNOKp(sv) && !(SvIOK(sv) || SvPOK(sv))) {
2462 else if (SvIOKp(sv) &&
2463 (!SvPOKp(sv) || !strchr(SvPVX(sv),'.') || /* XXX check this logic */
2464 !grok_number(SvPVX(sv), SvCUR(sv),NULL)))
2466 SvNVX(sv) = SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv);
2467 #ifdef NV_PRESERVES_UV
2470 /* Only set the public NV OK flag if this NV preserves the IV */
2471 /* Check it's not 0xFFFFFFFFFFFFFFFF */
2472 if (SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2473 : (SvIVX(sv) == I_V(SvNVX(sv))))
2479 else if (SvPOKp(sv) && SvLEN(sv)) {
2481 int numtype = grok_number(SvPVX(sv), SvCUR(sv), &value);
2482 if (ckWARN(WARN_NUMERIC) && !SvIOKp(sv) && !numtype)
2484 #ifdef NV_PRESERVES_UV
2485 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2486 == IS_NUMBER_IN_UV) {
2487 /* It's defintately an integer */
2488 SvNVX(sv) = (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value;
2490 SvNVX(sv) = Atof(SvPVX(sv));
2493 SvNVX(sv) = Atof(SvPVX(sv));
2494 /* Only set the public NV OK flag if this NV preserves the value in
2495 the PV at least as well as an IV/UV would.
2496 Not sure how to do this 100% reliably. */
2497 /* if that shift count is out of range then Configure's test is
2498 wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2500 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2501 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2502 SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2503 } else if (!(numtype & IS_NUMBER_IN_UV)) {
2504 /* Can't use strtol etc to convert this string, so don't try.
2505 sv_2iv and sv_2uv will use the NV to convert, not the PV. */
2508 /* value has been set. It may not be precise. */
2509 if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2510 /* 2s complement assumption for (UV)IV_MIN */
2511 SvNOK_on(sv); /* Integer is too negative. */
2516 if (numtype & IS_NUMBER_NEG) {
2517 SvIVX(sv) = -(IV)value;
2518 } else if (value <= (UV)IV_MAX) {
2519 SvIVX(sv) = (IV)value;
2525 if (numtype & IS_NUMBER_NOT_INT) {
2526 /* I believe that even if the original PV had decimals,
2527 they are lost beyond the limit of the FP precision.
2528 However, neither is canonical, so both only get p
2529 flags. NWC, 2000/11/25 */
2530 /* Both already have p flags, so do nothing */
2533 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2534 if (SvIVX(sv) == I_V(nv)) {
2539 /* It had no "." so it must be integer. */
2542 /* between IV_MAX and NV(UV_MAX).
2543 Could be slightly > UV_MAX */
2545 if (numtype & IS_NUMBER_NOT_INT) {
2546 /* UV and NV both imprecise. */
2548 UV nv_as_uv = U_V(nv);
2550 if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2561 #endif /* NV_PRESERVES_UV */
2564 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
2566 if (SvTYPE(sv) < SVt_NV)
2567 /* Typically the caller expects that sv_any is not NULL now. */
2568 /* XXX Ilya implies that this is a bug in callers that assume this
2569 and ideally should be fixed. */
2570 sv_upgrade(sv, SVt_NV);
2573 #if defined(USE_LONG_DOUBLE)
2575 STORE_NUMERIC_LOCAL_SET_STANDARD();
2576 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2577 PTR2UV(sv), SvNVX(sv));
2578 RESTORE_NUMERIC_LOCAL();
2582 STORE_NUMERIC_LOCAL_SET_STANDARD();
2583 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%g)\n",
2584 PTR2UV(sv), SvNVX(sv));
2585 RESTORE_NUMERIC_LOCAL();
2591 /* Caller must validate PVX */
2593 S_asIV(pTHX_ SV *sv)
2596 int numtype = grok_number(SvPVX(sv), SvCUR(sv), &value);
2598 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2599 == IS_NUMBER_IN_UV) {
2600 /* It's defintately an integer */
2601 if (numtype & IS_NUMBER_NEG) {
2602 if (value < (UV)IV_MIN)
2605 if (value < (UV)IV_MAX)
2610 if (ckWARN(WARN_NUMERIC))
2613 return I_V(Atof(SvPVX(sv)));
2617 S_asUV(pTHX_ SV *sv)
2620 int numtype = grok_number(SvPVX(sv), SvCUR(sv), &value);
2622 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2623 == IS_NUMBER_IN_UV) {
2624 /* It's defintately an integer */
2625 if (!(numtype & IS_NUMBER_NEG))
2629 if (ckWARN(WARN_NUMERIC))
2632 return U_V(Atof(SvPVX(sv)));
2636 Perl_sv_2pv_nolen(pTHX_ register SV *sv)
2639 return sv_2pv(sv, &n_a);
2642 /* We assume that buf is at least TYPE_CHARS(UV) long. */
2644 uiv_2buf(char *buf, IV iv, UV uv, int is_uv, char **peob)
2646 char *ptr = buf + TYPE_CHARS(UV);
2660 *--ptr = '0' + (uv % 10);
2669 Perl_sv_2pv(pTHX_ register SV *sv, STRLEN *lp)
2671 return sv_2pv_flags(sv, lp, SV_GMAGIC);
2675 Perl_sv_2pv_flags(pTHX_ register SV *sv, STRLEN *lp, I32 flags)
2680 char tbuf[64]; /* Must fit sprintf/Gconvert of longest IV/NV */
2681 char *tmpbuf = tbuf;
2687 if (SvGMAGICAL(sv)) {
2688 if (flags & SV_GMAGIC)
2696 (void)sprintf(tmpbuf,"%"UVuf, (UV)SvUVX(sv));
2698 (void)sprintf(tmpbuf,"%"IVdf, (IV)SvIVX(sv));
2703 Gconvert(SvNVX(sv), NV_DIG, 0, tmpbuf);
2708 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2709 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2716 if (SvTHINKFIRST(sv)) {
2719 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,string)) &&
2720 (SvTYPE(tmpstr) != SVt_RV || (SvRV(tmpstr) != SvRV(sv))))
2721 return SvPV(tmpstr,*lp);
2728 switch (SvTYPE(sv)) {
2730 if ( ((SvFLAGS(sv) &
2731 (SVs_OBJECT|SVf_OK|SVs_GMG|SVs_SMG|SVs_RMG))
2732 == (SVs_OBJECT|SVs_RMG))
2733 && strEQ(s=HvNAME(SvSTASH(sv)), "Regexp")
2734 && (mg = mg_find(sv, PERL_MAGIC_qr))) {
2735 regexp *re = (regexp *)mg->mg_obj;
2738 char *fptr = "msix";
2743 U16 reganch = (re->reganch & PMf_COMPILETIME) >> 12;
2745 while((ch = *fptr++)) {
2747 reflags[left++] = ch;
2750 reflags[right--] = ch;
2755 reflags[left] = '-';
2759 mg->mg_len = re->prelen + 4 + left;
2760 New(616, mg->mg_ptr, mg->mg_len + 1 + left, char);
2761 Copy("(?", mg->mg_ptr, 2, char);
2762 Copy(reflags, mg->mg_ptr+2, left, char);
2763 Copy(":", mg->mg_ptr+left+2, 1, char);
2764 Copy(re->precomp, mg->mg_ptr+3+left, re->prelen, char);
2765 mg->mg_ptr[mg->mg_len - 1] = ')';
2766 mg->mg_ptr[mg->mg_len] = 0;
2768 PL_reginterp_cnt += re->program[0].next_off;
2780 case SVt_PVBM: if (SvROK(sv))
2783 s = "SCALAR"; break;
2784 case SVt_PVLV: s = "LVALUE"; break;
2785 case SVt_PVAV: s = "ARRAY"; break;
2786 case SVt_PVHV: s = "HASH"; break;
2787 case SVt_PVCV: s = "CODE"; break;
2788 case SVt_PVGV: s = "GLOB"; break;
2789 case SVt_PVFM: s = "FORMAT"; break;
2790 case SVt_PVIO: s = "IO"; break;
2791 default: s = "UNKNOWN"; break;
2795 Perl_sv_setpvf(aTHX_ tsv, "%s=%s", HvNAME(SvSTASH(sv)), s);
2798 Perl_sv_catpvf(aTHX_ tsv, "(0x%"UVxf")", PTR2UV(sv));
2804 if (SvREADONLY(sv) && !SvOK(sv)) {
2805 if (ckWARN(WARN_UNINITIALIZED))
2811 if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
2812 /* I'm assuming that if both IV and NV are equally valid then
2813 converting the IV is going to be more efficient */
2814 U32 isIOK = SvIOK(sv);
2815 U32 isUIOK = SvIsUV(sv);
2816 char buf[TYPE_CHARS(UV)];
2819 if (SvTYPE(sv) < SVt_PVIV)
2820 sv_upgrade(sv, SVt_PVIV);
2822 ptr = uiv_2buf(buf, 0, SvUVX(sv), 1, &ebuf);
2824 ptr = uiv_2buf(buf, SvIVX(sv), 0, 0, &ebuf);
2825 SvGROW(sv, ebuf - ptr + 1); /* inlined from sv_setpvn */
2826 Move(ptr,SvPVX(sv),ebuf - ptr,char);
2827 SvCUR_set(sv, ebuf - ptr);
2837 else if (SvNOKp(sv)) {
2838 if (SvTYPE(sv) < SVt_PVNV)
2839 sv_upgrade(sv, SVt_PVNV);
2840 /* The +20 is pure guesswork. Configure test needed. --jhi */
2841 SvGROW(sv, NV_DIG + 20);
2843 olderrno = errno; /* some Xenix systems wipe out errno here */
2845 if (SvNVX(sv) == 0.0)
2846 (void)strcpy(s,"0");
2850 Gconvert(SvNVX(sv), NV_DIG, 0, s);
2853 #ifdef FIXNEGATIVEZERO
2854 if (*s == '-' && s[1] == '0' && !s[2])
2864 if (ckWARN(WARN_UNINITIALIZED)
2865 && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
2868 if (SvTYPE(sv) < SVt_PV)
2869 /* Typically the caller expects that sv_any is not NULL now. */
2870 sv_upgrade(sv, SVt_PV);
2873 *lp = s - SvPVX(sv);
2876 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
2877 PTR2UV(sv),SvPVX(sv)));
2881 if (SvROK(sv)) { /* XXX Skip this when sv_pvn_force calls */
2882 /* Sneaky stuff here */
2886 tsv = newSVpv(tmpbuf, 0);
2902 len = strlen(tmpbuf);
2904 #ifdef FIXNEGATIVEZERO
2905 if (len == 2 && t[0] == '-' && t[1] == '0') {
2910 (void)SvUPGRADE(sv, SVt_PV);
2912 s = SvGROW(sv, len + 1);
2921 Perl_sv_2pvbyte_nolen(pTHX_ register SV *sv)
2924 return sv_2pvbyte(sv, &n_a);
2928 Perl_sv_2pvbyte(pTHX_ register SV *sv, STRLEN *lp)
2930 sv_utf8_downgrade(sv,0);
2931 return SvPV(sv,*lp);
2935 Perl_sv_2pvutf8_nolen(pTHX_ register SV *sv)
2938 return sv_2pvutf8(sv, &n_a);
2942 Perl_sv_2pvutf8(pTHX_ register SV *sv, STRLEN *lp)
2944 sv_utf8_upgrade(sv);
2945 return SvPV(sv,*lp);
2948 /* This function is only called on magical items */
2950 Perl_sv_2bool(pTHX_ register SV *sv)
2959 if (SvAMAGIC(sv) && (tmpsv=AMG_CALLun(sv,bool_)) &&
2960 (SvTYPE(tmpsv) != SVt_RV || (SvRV(tmpsv) != SvRV(sv))))
2961 return SvTRUE(tmpsv);
2962 return SvRV(sv) != 0;
2965 register XPV* Xpvtmp;
2966 if ((Xpvtmp = (XPV*)SvANY(sv)) &&
2967 (*Xpvtmp->xpv_pv > '0' ||
2968 Xpvtmp->xpv_cur > 1 ||
2969 (Xpvtmp->xpv_cur && *Xpvtmp->xpv_pv != '0')))
2976 return SvIVX(sv) != 0;
2979 return SvNVX(sv) != 0.0;
2987 =for apidoc sv_utf8_upgrade
2989 Convert the PV of an SV to its UTF8-encoded form.
2990 Forces the SV to string form it it is not already.
2991 Always sets the SvUTF8 flag to avoid future validity checks even
2992 if all the bytes have hibit clear.
2998 Perl_sv_utf8_upgrade(pTHX_ register SV *sv)
3000 return sv_utf8_upgrade_flags(sv, SV_GMAGIC);
3004 =for apidoc sv_utf8_upgrade_flags
3006 Convert the PV of an SV to its UTF8-encoded form.
3007 Forces the SV to string form it it is not already.
3008 Always sets the SvUTF8 flag to avoid future validity checks even
3009 if all the bytes have hibit clear. If C<flags> has C<SV_GMAGIC> bit set,
3010 will C<mg_get> on C<sv> if appropriate, else not. C<sv_utf8_upgrade> and
3011 C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
3017 Perl_sv_utf8_upgrade_flags(pTHX_ register SV *sv, I32 flags)
3027 (void) sv_2pv_flags(sv,&len, flags);
3035 if (SvREADONLY(sv) && SvFAKE(sv)) {
3036 sv_force_normal(sv);
3039 /* This function could be much more efficient if we had a FLAG in SVs
3040 * to signal if there are any hibit chars in the PV.
3041 * Given that there isn't make loop fast as possible
3043 s = (U8 *) SvPVX(sv);
3044 e = (U8 *) SvEND(sv);
3048 if ((hibit = !NATIVE_IS_INVARIANT(ch)))
3054 len = SvCUR(sv) + 1; /* Plus the \0 */
3055 SvPVX(sv) = (char*)bytes_to_utf8((U8*)s, &len);
3056 SvCUR(sv) = len - 1;
3058 Safefree(s); /* No longer using what was there before. */
3059 SvLEN(sv) = len; /* No longer know the real size. */
3061 /* Mark as UTF-8 even if no hibit - saves scanning loop */
3067 =for apidoc sv_utf8_downgrade
3069 Attempt to convert the PV of an SV from UTF8-encoded to byte encoding.
3070 This may not be possible if the PV contains non-byte encoding characters;
3071 if this is the case, either returns false or, if C<fail_ok> is not
3078 Perl_sv_utf8_downgrade(pTHX_ register SV* sv, bool fail_ok)
3080 if (SvPOK(sv) && SvUTF8(sv)) {
3085 if (SvREADONLY(sv) && SvFAKE(sv))
3086 sv_force_normal(sv);
3087 s = (U8 *) SvPV(sv, len);
3088 if (!utf8_to_bytes(s, &len)) {
3091 #ifdef USE_BYTES_DOWNGRADES
3092 else if (IN_BYTES) {
3094 U8 *e = (U8 *) SvEND(sv);
3097 UV ch = utf8n_to_uvchr(s,(e-s),&len,0);
3098 if (first && ch > 255) {
3100 Perl_warner(aTHX_ WARN_UTF8, "Wide character in byte %s",
3101 PL_op_desc[PL_op->op_type]);
3103 Perl_warner(aTHX_ WARN_UTF8, "Wide character in byte");
3110 len = (d - (U8 *) SvPVX(sv));
3115 Perl_croak(aTHX_ "Wide character in %s",
3116 PL_op_desc[PL_op->op_type]);
3118 Perl_croak(aTHX_ "Wide character");
3129 =for apidoc sv_utf8_encode
3131 Convert the PV of an SV to UTF8-encoded, but then turn off the C<SvUTF8>
3132 flag so that it looks like octets again. Used as a building block
3133 for encode_utf8 in Encode.xs
3139 Perl_sv_utf8_encode(pTHX_ register SV *sv)
3141 (void) sv_utf8_upgrade(sv);
3146 =for apidoc sv_utf8_decode
3148 Convert the octets in the PV from UTF-8 to chars. Scan for validity and then
3149 turn of SvUTF8 if needed so that we see characters. Used as a building block
3150 for decode_utf8 in Encode.xs
3158 Perl_sv_utf8_decode(pTHX_ register SV *sv)
3164 /* The octets may have got themselves encoded - get them back as bytes */
3165 if (!sv_utf8_downgrade(sv, TRUE))
3168 /* it is actually just a matter of turning the utf8 flag on, but
3169 * we want to make sure everything inside is valid utf8 first.
3171 c = (U8 *) SvPVX(sv);
3172 if (!is_utf8_string(c, SvCUR(sv)+1))
3174 e = (U8 *) SvEND(sv);
3177 if (!UTF8_IS_INVARIANT(ch)) {
3187 /* Note: sv_setsv() should not be called with a source string that needs
3188 * to be reused, since it may destroy the source string if it is marked
3193 =for apidoc sv_setsv
3195 Copies the contents of the source SV C<ssv> into the destination SV C<dsv>.
3196 The source SV may be destroyed if it is mortal. Does not handle 'set'
3197 magic. See the macro forms C<SvSetSV>, C<SvSetSV_nosteal> and
3203 /* sv_setsv() is aliased to Perl_sv_setsv_macro; this function provided
3204 for binary compatibility only
3207 Perl_sv_setsv(pTHX_ SV *dstr, register SV *sstr)
3209 sv_setsv_flags(dstr, sstr, SV_GMAGIC);
3213 =for apidoc sv_setsv_flags
3215 Copies the contents of the source SV C<ssv> into the destination SV C<dsv>.
3216 The source SV may be destroyed if it is mortal. Does not handle 'set'
3217 magic. If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<ssv> if
3218 appropriate, else not. C<sv_setsv> and C<sv_setsv_nomg> are implemented
3219 in terms of this function.
3225 Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV *sstr, I32 flags)
3227 register U32 sflags;
3233 SV_CHECK_THINKFIRST(dstr);
3235 sstr = &PL_sv_undef;
3236 stype = SvTYPE(sstr);
3237 dtype = SvTYPE(dstr);
3241 /* There's a lot of redundancy below but we're going for speed here */
3246 if (dtype != SVt_PVGV) {
3247 (void)SvOK_off(dstr);
3255 sv_upgrade(dstr, SVt_IV);
3258 sv_upgrade(dstr, SVt_PVNV);
3262 sv_upgrade(dstr, SVt_PVIV);
3265 (void)SvIOK_only(dstr);
3266 SvIVX(dstr) = SvIVX(sstr);
3269 if (SvTAINTED(sstr))
3280 sv_upgrade(dstr, SVt_NV);
3285 sv_upgrade(dstr, SVt_PVNV);
3288 SvNVX(dstr) = SvNVX(sstr);
3289 (void)SvNOK_only(dstr);
3290 if (SvTAINTED(sstr))
3298 sv_upgrade(dstr, SVt_RV);
3299 else if (dtype == SVt_PVGV &&
3300 SvTYPE(SvRV(sstr)) == SVt_PVGV) {
3303 if (GvIMPORTED(dstr) != GVf_IMPORTED
3304 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3306 GvIMPORTED_on(dstr);
3317 sv_upgrade(dstr, SVt_PV);
3320 if (dtype < SVt_PVIV)
3321 sv_upgrade(dstr, SVt_PVIV);
3324 if (dtype < SVt_PVNV)
3325 sv_upgrade(dstr, SVt_PVNV);
3332 Perl_croak(aTHX_ "Bizarre copy of %s in %s", sv_reftype(sstr, 0),
3333 PL_op_name[PL_op->op_type]);
3335 Perl_croak(aTHX_ "Bizarre copy of %s", sv_reftype(sstr, 0));
3339 if (dtype <= SVt_PVGV) {
3341 if (dtype != SVt_PVGV) {
3342 char *name = GvNAME(sstr);
3343 STRLEN len = GvNAMELEN(sstr);
3344 sv_upgrade(dstr, SVt_PVGV);
3345 sv_magic(dstr, dstr, PERL_MAGIC_glob, Nullch, 0);
3346 GvSTASH(dstr) = (HV*)SvREFCNT_inc(GvSTASH(sstr));
3347 GvNAME(dstr) = savepvn(name, len);
3348 GvNAMELEN(dstr) = len;
3349 SvFAKE_on(dstr); /* can coerce to non-glob */
3351 /* ahem, death to those who redefine active sort subs */
3352 else if (PL_curstackinfo->si_type == PERLSI_SORT
3353 && GvCV(dstr) && PL_sortcop == CvSTART(GvCV(dstr)))
3354 Perl_croak(aTHX_ "Can't redefine active sort subroutine %s",
3357 #ifdef GV_SHARED_CHECK
3358 if (GvSHARED((GV*)dstr)) {
3359 Perl_croak(aTHX_ PL_no_modify);
3363 (void)SvOK_off(dstr);
3364 GvINTRO_off(dstr); /* one-shot flag */
3366 GvGP(dstr) = gp_ref(GvGP(sstr));
3367 if (SvTAINTED(sstr))
3369 if (GvIMPORTED(dstr) != GVf_IMPORTED
3370 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3372 GvIMPORTED_on(dstr);
3380 if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
3382 if (SvTYPE(sstr) != stype) {
3383 stype = SvTYPE(sstr);
3384 if (stype == SVt_PVGV && dtype <= SVt_PVGV)
3388 if (stype == SVt_PVLV)
3389 (void)SvUPGRADE(dstr, SVt_PVNV);
3391 (void)SvUPGRADE(dstr, stype);
3394 sflags = SvFLAGS(sstr);
3396 if (sflags & SVf_ROK) {
3397 if (dtype >= SVt_PV) {
3398 if (dtype == SVt_PVGV) {
3399 SV *sref = SvREFCNT_inc(SvRV(sstr));
3401 int intro = GvINTRO(dstr);
3403 #ifdef GV_SHARED_CHECK
3404 if (GvSHARED((GV*)dstr)) {
3405 Perl_croak(aTHX_ PL_no_modify);
3412 GvINTRO_off(dstr); /* one-shot flag */
3413 Newz(602,gp, 1, GP);
3414 GvGP(dstr) = gp_ref(gp);
3415 GvSV(dstr) = NEWSV(72,0);
3416 GvLINE(dstr) = CopLINE(PL_curcop);
3417 GvEGV(dstr) = (GV*)dstr;
3420 switch (SvTYPE(sref)) {
3423 SAVESPTR(GvAV(dstr));
3425 dref = (SV*)GvAV(dstr);
3426 GvAV(dstr) = (AV*)sref;
3427 if (!GvIMPORTED_AV(dstr)
3428 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3430 GvIMPORTED_AV_on(dstr);
3435 SAVESPTR(GvHV(dstr));
3437 dref = (SV*)GvHV(dstr);
3438 GvHV(dstr) = (HV*)sref;
3439 if (!GvIMPORTED_HV(dstr)
3440 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3442 GvIMPORTED_HV_on(dstr);
3447 if (GvCVGEN(dstr) && GvCV(dstr) != (CV*)sref) {
3448 SvREFCNT_dec(GvCV(dstr));
3449 GvCV(dstr) = Nullcv;
3450 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3451 PL_sub_generation++;
3453 SAVESPTR(GvCV(dstr));
3456 dref = (SV*)GvCV(dstr);
3457 if (GvCV(dstr) != (CV*)sref) {
3458 CV* cv = GvCV(dstr);
3460 if (!GvCVGEN((GV*)dstr) &&
3461 (CvROOT(cv) || CvXSUB(cv)))
3463 /* ahem, death to those who redefine
3464 * active sort subs */
3465 if (PL_curstackinfo->si_type == PERLSI_SORT &&
3466 PL_sortcop == CvSTART(cv))
3468 "Can't redefine active sort subroutine %s",
3469 GvENAME((GV*)dstr));
3470 /* Redefining a sub - warning is mandatory if
3471 it was a const and its value changed. */
3472 if (ckWARN(WARN_REDEFINE)
3474 && (!CvCONST((CV*)sref)
3475 || sv_cmp(cv_const_sv(cv),
3476 cv_const_sv((CV*)sref)))))
3478 Perl_warner(aTHX_ WARN_REDEFINE,
3480 ? "Constant subroutine %s redefined"
3481 : "Subroutine %s redefined",
3482 GvENAME((GV*)dstr));
3485 cv_ckproto(cv, (GV*)dstr,
3486 SvPOK(sref) ? SvPVX(sref) : Nullch);
3488 GvCV(dstr) = (CV*)sref;
3489 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3490 GvASSUMECV_on(dstr);
3491 PL_sub_generation++;
3493 if (!GvIMPORTED_CV(dstr)
3494 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3496 GvIMPORTED_CV_on(dstr);
3501 SAVESPTR(GvIOp(dstr));
3503 dref = (SV*)GvIOp(dstr);
3504 GvIOp(dstr) = (IO*)sref;
3508 SAVESPTR(GvFORM(dstr));
3510 dref = (SV*)GvFORM(dstr);
3511 GvFORM(dstr) = (CV*)sref;
3515 SAVESPTR(GvSV(dstr));
3517 dref = (SV*)GvSV(dstr);
3519 if (!GvIMPORTED_SV(dstr)
3520 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3522 GvIMPORTED_SV_on(dstr);
3530 if (SvTAINTED(sstr))
3535 (void)SvOOK_off(dstr); /* backoff */
3537 Safefree(SvPVX(dstr));
3538 SvLEN(dstr)=SvCUR(dstr)=0;
3541 (void)SvOK_off(dstr);
3542 SvRV(dstr) = SvREFCNT_inc(SvRV(sstr));
3544 if (sflags & SVp_NOK) {
3546 /* Only set the public OK flag if the source has public OK. */
3547 if (sflags & SVf_NOK)
3548 SvFLAGS(dstr) |= SVf_NOK;
3549 SvNVX(dstr) = SvNVX(sstr);
3551 if (sflags & SVp_IOK) {
3552 (void)SvIOKp_on(dstr);
3553 if (sflags & SVf_IOK)
3554 SvFLAGS(dstr) |= SVf_IOK;
3555 if (sflags & SVf_IVisUV)
3557 SvIVX(dstr) = SvIVX(sstr);
3559 if (SvAMAGIC(sstr)) {
3563 else if (sflags & SVp_POK) {
3566 * Check to see if we can just swipe the string. If so, it's a
3567 * possible small lose on short strings, but a big win on long ones.
3568 * It might even be a win on short strings if SvPVX(dstr)
3569 * has to be allocated and SvPVX(sstr) has to be freed.
3572 if (SvTEMP(sstr) && /* slated for free anyway? */
3573 SvREFCNT(sstr) == 1 && /* and no other references to it? */
3574 !(sflags & SVf_OOK) && /* and not involved in OOK hack? */
3575 SvLEN(sstr) && /* and really is a string */
3576 !(PL_op && PL_op->op_type == OP_AASSIGN)) /* and won't be needed again, potentially */
3578 if (SvPVX(dstr)) { /* we know that dtype >= SVt_PV */
3580 SvFLAGS(dstr) &= ~SVf_OOK;
3581 Safefree(SvPVX(dstr) - SvIVX(dstr));
3583 else if (SvLEN(dstr))
3584 Safefree(SvPVX(dstr));
3586 (void)SvPOK_only(dstr);
3587 SvPV_set(dstr, SvPVX(sstr));
3588 SvLEN_set(dstr, SvLEN(sstr));
3589 SvCUR_set(dstr, SvCUR(sstr));
3592 (void)SvOK_off(sstr); /* NOTE: nukes most SvFLAGS on sstr */
3593 SvPV_set(sstr, Nullch);
3598 else { /* have to copy actual string */
3599 STRLEN len = SvCUR(sstr);
3601 SvGROW(dstr, len + 1); /* inlined from sv_setpvn */
3602 Move(SvPVX(sstr),SvPVX(dstr),len,char);
3603 SvCUR_set(dstr, len);
3604 *SvEND(dstr) = '\0';
3605 (void)SvPOK_only(dstr);
3607 if (sflags & SVf_UTF8)
3610 if (sflags & SVp_NOK) {
3612 if (sflags & SVf_NOK)
3613 SvFLAGS(dstr) |= SVf_NOK;
3614 SvNVX(dstr) = SvNVX(sstr);
3616 if (sflags & SVp_IOK) {
3617 (void)SvIOKp_on(dstr);
3618 if (sflags & SVf_IOK)
3619 SvFLAGS(dstr) |= SVf_IOK;
3620 if (sflags & SVf_IVisUV)
3622 SvIVX(dstr) = SvIVX(sstr);
3625 else if (sflags & SVp_IOK) {
3626 if (sflags & SVf_IOK)
3627 (void)SvIOK_only(dstr);
3629 (void)SvOK_off(dstr);
3630 (void)SvIOKp_on(dstr);
3632 /* XXXX Do we want to set IsUV for IV(ROK)? Be extra safe... */
3633 if (sflags & SVf_IVisUV)
3635 SvIVX(dstr) = SvIVX(sstr);
3636 if (sflags & SVp_NOK) {
3637 if (sflags & SVf_NOK)
3638 (void)SvNOK_on(dstr);
3640 (void)SvNOKp_on(dstr);
3641 SvNVX(dstr) = SvNVX(sstr);
3644 else if (sflags & SVp_NOK) {
3645 if (sflags & SVf_NOK)
3646 (void)SvNOK_only(dstr);
3648 (void)SvOK_off(dstr);
3651 SvNVX(dstr) = SvNVX(sstr);
3654 if (dtype == SVt_PVGV) {
3655 if (ckWARN(WARN_MISC))
3656 Perl_warner(aTHX_ WARN_MISC, "Undefined value assigned to typeglob");
3659 (void)SvOK_off(dstr);
3661 if (SvTAINTED(sstr))
3666 =for apidoc sv_setsv_mg
3668 Like C<sv_setsv>, but also handles 'set' magic.
3674 Perl_sv_setsv_mg(pTHX_ SV *dstr, register SV *sstr)
3676 sv_setsv(dstr,sstr);
3681 =for apidoc sv_setpvn
3683 Copies a string into an SV. The C<len> parameter indicates the number of
3684 bytes to be copied. Does not handle 'set' magic. See C<sv_setpvn_mg>.
3690 Perl_sv_setpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3692 register char *dptr;
3694 SV_CHECK_THINKFIRST(sv);
3700 /* len is STRLEN which is unsigned, need to copy to signed */
3703 Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen");
3705 (void)SvUPGRADE(sv, SVt_PV);
3707 SvGROW(sv, len + 1);
3709 Move(ptr,dptr,len,char);
3712 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3717 =for apidoc sv_setpvn_mg
3719 Like C<sv_setpvn>, but also handles 'set' magic.
3725 Perl_sv_setpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3727 sv_setpvn(sv,ptr,len);
3732 =for apidoc sv_setpv
3734 Copies a string into an SV. The string must be null-terminated. Does not
3735 handle 'set' magic. See C<sv_setpv_mg>.
3741 Perl_sv_setpv(pTHX_ register SV *sv, register const char *ptr)
3743 register STRLEN len;
3745 SV_CHECK_THINKFIRST(sv);
3751 (void)SvUPGRADE(sv, SVt_PV);
3753 SvGROW(sv, len + 1);
3754 Move(ptr,SvPVX(sv),len+1,char);
3756 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3761 =for apidoc sv_setpv_mg
3763 Like C<sv_setpv>, but also handles 'set' magic.
3769 Perl_sv_setpv_mg(pTHX_ register SV *sv, register const char *ptr)
3776 =for apidoc sv_usepvn
3778 Tells an SV to use C<ptr> to find its string value. Normally the string is
3779 stored inside the SV but sv_usepvn allows the SV to use an outside string.
3780 The C<ptr> should point to memory that was allocated by C<malloc>. The
3781 string length, C<len>, must be supplied. This function will realloc the
3782 memory pointed to by C<ptr>, so that pointer should not be freed or used by
3783 the programmer after giving it to sv_usepvn. Does not handle 'set' magic.
3784 See C<sv_usepvn_mg>.
3790 Perl_sv_usepvn(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
3792 SV_CHECK_THINKFIRST(sv);
3793 (void)SvUPGRADE(sv, SVt_PV);
3798 (void)SvOOK_off(sv);
3799 if (SvPVX(sv) && SvLEN(sv))
3800 Safefree(SvPVX(sv));
3801 Renew(ptr, len+1, char);
3804 SvLEN_set(sv, len+1);
3806 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3811 =for apidoc sv_usepvn_mg
3813 Like C<sv_usepvn>, but also handles 'set' magic.
3819 Perl_sv_usepvn_mg(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
3821 sv_usepvn(sv,ptr,len);
3826 Perl_sv_force_normal_flags(pTHX_ register SV *sv, U32 flags)
3828 if (SvREADONLY(sv)) {
3830 char *pvx = SvPVX(sv);
3831 STRLEN len = SvCUR(sv);
3832 U32 hash = SvUVX(sv);
3833 SvGROW(sv, len + 1);
3834 Move(pvx,SvPVX(sv),len,char);
3838 unsharepvn(pvx,SvUTF8(sv)?-len:len,hash);
3840 else if (PL_curcop != &PL_compiling)
3841 Perl_croak(aTHX_ PL_no_modify);
3844 sv_unref_flags(sv, flags);
3845 else if (SvFAKE(sv) && SvTYPE(sv) == SVt_PVGV)
3850 Perl_sv_force_normal(pTHX_ register SV *sv)
3852 sv_force_normal_flags(sv, 0);
3858 Efficient removal of characters from the beginning of the string buffer.
3859 SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
3860 the string buffer. The C<ptr> becomes the first character of the adjusted
3867 Perl_sv_chop(pTHX_ register SV *sv, register char *ptr) /* like set but assuming ptr is in sv */
3871 register STRLEN delta;
3873 if (!ptr || !SvPOKp(sv))
3875 SV_CHECK_THINKFIRST(sv);
3876 if (SvTYPE(sv) < SVt_PVIV)
3877 sv_upgrade(sv,SVt_PVIV);
3880 if (!SvLEN(sv)) { /* make copy of shared string */
3881 char *pvx = SvPVX(sv);
3882 STRLEN len = SvCUR(sv);
3883 SvGROW(sv, len + 1);
3884 Move(pvx,SvPVX(sv),len,char);
3888 SvFLAGS(sv) |= SVf_OOK;
3890 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVp_IOK|SVp_NOK|SVf_IVisUV);
3891 delta = ptr - SvPVX(sv);
3899 =for apidoc sv_catpvn
3901 Concatenates the string onto the end of the string which is in the SV. The
3902 C<len> indicates number of bytes to copy. If the SV has the UTF8
3903 status set, then the bytes appended should be valid UTF8.
3904 Handles 'get' magic, but not 'set' magic. See C<sv_catpvn_mg>.
3909 /* sv_catpvn() is aliased to Perl_sv_catpvn_macro; this function provided
3910 for binary compatibility only
3913 Perl_sv_catpvn(pTHX_ SV *dsv, const char* sstr, STRLEN slen)
3915 sv_catpvn_flags(dsv, sstr, slen, SV_GMAGIC);
3919 =for apidoc sv_catpvn_flags
3921 Concatenates the string onto the end of the string which is in the SV. The
3922 C<len> indicates number of bytes to copy. If the SV has the UTF8
3923 status set, then the bytes appended should be valid UTF8.
3924 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<dsv> if
3925 appropriate, else not. C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
3926 in terms of this function.
3932 Perl_sv_catpvn_flags(pTHX_ register SV *dsv, register const char *sstr, register STRLEN slen, I32 flags)
3937 dstr = SvPV_force_flags(dsv, dlen, flags);
3938 SvGROW(dsv, dlen + slen + 1);
3941 Move(sstr, SvPVX(dsv) + dlen, slen, char);
3944 (void)SvPOK_only_UTF8(dsv); /* validate pointer */
3949 =for apidoc sv_catpvn_mg
3951 Like C<sv_catpvn>, but also handles 'set' magic.
3957 Perl_sv_catpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3959 sv_catpvn(sv,ptr,len);
3964 =for apidoc sv_catsv
3966 Concatenates the string from SV C<ssv> onto the end of the string in
3967 SV C<dsv>. Modifies C<dsv> but not C<ssv>. Handles 'get' magic, but
3968 not 'set' magic. See C<sv_catsv_mg>.
3972 /* sv_catsv() is aliased to Perl_sv_catsv_macro; this function provided
3973 for binary compatibility only
3976 Perl_sv_catsv(pTHX_ SV *dstr, register SV *sstr)
3978 sv_catsv_flags(dstr, sstr, SV_GMAGIC);
3982 =for apidoc sv_catsv_flags
3984 Concatenates the string from SV C<ssv> onto the end of the string in
3985 SV C<dsv>. Modifies C<dsv> but not C<ssv>. If C<flags> has C<SV_GMAGIC>
3986 bit set, will C<mg_get> on the SVs if appropriate, else not. C<sv_catsv>
3987 and C<sv_catsv_nomg> are implemented in terms of this function.
3992 Perl_sv_catsv_flags(pTHX_ SV *dsv, register SV *ssv, I32 flags)
3998 if ((spv = SvPV(ssv, slen))) {
3999 bool sutf8 = DO_UTF8(ssv);
4002 if (SvGMAGICAL(dsv) && (flags & SV_GMAGIC))
4004 dutf8 = DO_UTF8(dsv);
4006 if (dutf8 != sutf8) {
4008 /* Not modifying source SV, so taking a temporary copy. */
4009 SV* csv = sv_2mortal(newSVpvn(spv, slen));
4011 sv_utf8_upgrade(csv);
4012 spv = SvPV(csv, slen);
4015 sv_utf8_upgrade_nomg(dsv);
4017 sv_catpvn_nomg(dsv, spv, slen);
4022 =for apidoc sv_catsv_mg
4024 Like C<sv_catsv>, but also handles 'set' magic.
4030 Perl_sv_catsv_mg(pTHX_ SV *dsv, register SV *ssv)
4037 =for apidoc sv_catpv
4039 Concatenates the string onto the end of the string which is in the SV.
4040 If the SV has the UTF8 status set, then the bytes appended should be
4041 valid UTF8. Handles 'get' magic, but not 'set' magic. See C<sv_catpv_mg>.
4046 Perl_sv_catpv(pTHX_ register SV *sv, register const char *ptr)
4048 register STRLEN len;
4054 junk = SvPV_force(sv, tlen);
4056 SvGROW(sv, tlen + len + 1);
4059 Move(ptr,SvPVX(sv)+tlen,len+1,char);
4061 (void)SvPOK_only_UTF8(sv); /* validate pointer */
4066 =for apidoc sv_catpv_mg
4068 Like C<sv_catpv>, but also handles 'set' magic.
4074 Perl_sv_catpv_mg(pTHX_ register SV *sv, register const char *ptr)
4081 Perl_newSV(pTHX_ STRLEN len)
4087 sv_upgrade(sv, SVt_PV);
4088 SvGROW(sv, len + 1);
4093 /* name is assumed to contain an SV* if (name && namelen == HEf_SVKEY) */
4096 =for apidoc sv_magic
4098 Adds magic to an SV.
4104 Perl_sv_magic(pTHX_ register SV *sv, SV *obj, int how, const char *name, I32 namlen)
4108 if (SvREADONLY(sv)) {
4109 if (PL_curcop != &PL_compiling
4110 /* XXX this used to be !strchr("gBf", how), which seems to
4111 * implicity be equal to !strchr("gBf\0", how), ie \0 matches
4112 * too. I find this suprising, but have hadded PERL_MAGIC_sv
4113 * to the list of things to check - DAPM 19-May-01 */
4114 && how != PERL_MAGIC_regex_global
4115 && how != PERL_MAGIC_bm
4116 && how != PERL_MAGIC_fm
4117 && how != PERL_MAGIC_sv
4120 Perl_croak(aTHX_ PL_no_modify);
4123 if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
4124 if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
4125 if (how == PERL_MAGIC_taint)
4131 (void)SvUPGRADE(sv, SVt_PVMG);
4133 Newz(702,mg, 1, MAGIC);
4134 mg->mg_moremagic = SvMAGIC(sv);
4137 /* Some magic sontains a reference loop, where the sv and object refer to
4138 each other. To prevent a avoid a reference loop that would prevent such
4139 objects being freed, we look for such loops and if we find one we avoid
4140 incrementing the object refcount. */
4141 if (!obj || obj == sv ||
4142 how == PERL_MAGIC_arylen ||
4143 how == PERL_MAGIC_qr ||
4144 (SvTYPE(obj) == SVt_PVGV &&
4145 (GvSV(obj) == sv || GvHV(obj) == (HV*)sv || GvAV(obj) == (AV*)sv ||
4146 GvCV(obj) == (CV*)sv || GvIOp(obj) == (IO*)sv ||
4147 GvFORM(obj) == (CV*)sv)))
4152 mg->mg_obj = SvREFCNT_inc(obj);
4153 mg->mg_flags |= MGf_REFCOUNTED;
4156 mg->mg_len = namlen;
4159 mg->mg_ptr = savepvn(name, namlen);
4160 else if (namlen == HEf_SVKEY)
4161 mg->mg_ptr = (char*)SvREFCNT_inc((SV*)name);
4166 mg->mg_virtual = &PL_vtbl_sv;
4168 case PERL_MAGIC_overload:
4169 mg->mg_virtual = &PL_vtbl_amagic;
4171 case PERL_MAGIC_overload_elem:
4172 mg->mg_virtual = &PL_vtbl_amagicelem;
4174 case PERL_MAGIC_overload_table:
4175 mg->mg_virtual = &PL_vtbl_ovrld;
4178 mg->mg_virtual = &PL_vtbl_bm;
4180 case PERL_MAGIC_regdata:
4181 mg->mg_virtual = &PL_vtbl_regdata;
4183 case PERL_MAGIC_regdatum:
4184 mg->mg_virtual = &PL_vtbl_regdatum;
4186 case PERL_MAGIC_env:
4187 mg->mg_virtual = &PL_vtbl_env;
4190 mg->mg_virtual = &PL_vtbl_fm;
4192 case PERL_MAGIC_envelem:
4193 mg->mg_virtual = &PL_vtbl_envelem;
4195 case PERL_MAGIC_regex_global:
4196 mg->mg_virtual = &PL_vtbl_mglob;
4198 case PERL_MAGIC_isa:
4199 mg->mg_virtual = &PL_vtbl_isa;
4201 case PERL_MAGIC_isaelem:
4202 mg->mg_virtual = &PL_vtbl_isaelem;
4204 case PERL_MAGIC_nkeys:
4205 mg->mg_virtual = &PL_vtbl_nkeys;
4207 case PERL_MAGIC_dbfile:
4211 case PERL_MAGIC_dbline:
4212 mg->mg_virtual = &PL_vtbl_dbline;
4215 case PERL_MAGIC_mutex:
4216 mg->mg_virtual = &PL_vtbl_mutex;
4218 #endif /* USE_THREADS */
4219 #ifdef USE_LOCALE_COLLATE
4220 case PERL_MAGIC_collxfrm:
4221 mg->mg_virtual = &PL_vtbl_collxfrm;
4223 #endif /* USE_LOCALE_COLLATE */
4224 case PERL_MAGIC_tied:
4225 mg->mg_virtual = &PL_vtbl_pack;
4227 case PERL_MAGIC_tiedelem:
4228 case PERL_MAGIC_tiedscalar:
4229 mg->mg_virtual = &PL_vtbl_packelem;
4232 mg->mg_virtual = &PL_vtbl_regexp;
4234 case PERL_MAGIC_sig:
4235 mg->mg_virtual = &PL_vtbl_sig;
4237 case PERL_MAGIC_sigelem:
4238 mg->mg_virtual = &PL_vtbl_sigelem;
4240 case PERL_MAGIC_taint:
4241 mg->mg_virtual = &PL_vtbl_taint;
4244 case PERL_MAGIC_uvar:
4245 mg->mg_virtual = &PL_vtbl_uvar;
4247 case PERL_MAGIC_vec:
4248 mg->mg_virtual = &PL_vtbl_vec;
4250 case PERL_MAGIC_substr:
4251 mg->mg_virtual = &PL_vtbl_substr;
4253 case PERL_MAGIC_defelem:
4254 mg->mg_virtual = &PL_vtbl_defelem;
4256 case PERL_MAGIC_glob:
4257 mg->mg_virtual = &PL_vtbl_glob;
4259 case PERL_MAGIC_arylen:
4260 mg->mg_virtual = &PL_vtbl_arylen;
4262 case PERL_MAGIC_pos:
4263 mg->mg_virtual = &PL_vtbl_pos;
4265 case PERL_MAGIC_backref:
4266 mg->mg_virtual = &PL_vtbl_backref;
4268 case PERL_MAGIC_ext:
4269 /* Reserved for use by extensions not perl internals. */
4270 /* Useful for attaching extension internal data to perl vars. */
4271 /* Note that multiple extensions may clash if magical scalars */
4272 /* etc holding private data from one are passed to another. */
4276 Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
4280 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
4284 =for apidoc sv_unmagic
4286 Removes magic from an SV.
4292 Perl_sv_unmagic(pTHX_ SV *sv, int type)
4296 if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
4299 for (mg = *mgp; mg; mg = *mgp) {
4300 if (mg->mg_type == type) {
4301 MGVTBL* vtbl = mg->mg_virtual;
4302 *mgp = mg->mg_moremagic;
4303 if (vtbl && vtbl->svt_free)
4304 CALL_FPTR(vtbl->svt_free)(aTHX_ sv, mg);
4305 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
4306 if (mg->mg_len >= 0)
4307 Safefree(mg->mg_ptr);
4308 else if (mg->mg_len == HEf_SVKEY)
4309 SvREFCNT_dec((SV*)mg->mg_ptr);
4311 if (mg->mg_flags & MGf_REFCOUNTED)
4312 SvREFCNT_dec(mg->mg_obj);
4316 mgp = &mg->mg_moremagic;
4320 SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_NOK|SVp_POK)) >> PRIVSHIFT;
4327 =for apidoc sv_rvweaken
4335 Perl_sv_rvweaken(pTHX_ SV *sv)
4338 if (!SvOK(sv)) /* let undefs pass */
4341 Perl_croak(aTHX_ "Can't weaken a nonreference");
4342 else if (SvWEAKREF(sv)) {
4343 if (ckWARN(WARN_MISC))
4344 Perl_warner(aTHX_ WARN_MISC, "Reference is already weak");
4348 sv_add_backref(tsv, sv);
4355 S_sv_add_backref(pTHX_ SV *tsv, SV *sv)
4359 if (SvMAGICAL(tsv) && (mg = mg_find(tsv, PERL_MAGIC_backref)))
4360 av = (AV*)mg->mg_obj;
4363 sv_magic(tsv, (SV*)av, PERL_MAGIC_backref, NULL, 0);
4364 SvREFCNT_dec(av); /* for sv_magic */
4370 S_sv_del_backref(pTHX_ SV *sv)
4377 if (!SvMAGICAL(tsv) || !(mg = mg_find(tsv, PERL_MAGIC_backref)))
4378 Perl_croak(aTHX_ "panic: del_backref");
4379 av = (AV *)mg->mg_obj;
4384 svp[i] = &PL_sv_undef; /* XXX */
4391 =for apidoc sv_insert
4393 Inserts a string at the specified offset/length within the SV. Similar to
4394 the Perl substr() function.
4400 Perl_sv_insert(pTHX_ SV *bigstr, STRLEN offset, STRLEN len, char *little, STRLEN littlelen)
4404 register char *midend;
4405 register char *bigend;
4411 Perl_croak(aTHX_ "Can't modify non-existent substring");
4412 SvPV_force(bigstr, curlen);
4413 (void)SvPOK_only_UTF8(bigstr);
4414 if (offset + len > curlen) {
4415 SvGROW(bigstr, offset+len+1);
4416 Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
4417 SvCUR_set(bigstr, offset+len);
4421 i = littlelen - len;
4422 if (i > 0) { /* string might grow */
4423 big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
4424 mid = big + offset + len;
4425 midend = bigend = big + SvCUR(bigstr);
4428 while (midend > mid) /* shove everything down */
4429 *--bigend = *--midend;
4430 Move(little,big+offset,littlelen,char);
4436 Move(little,SvPVX(bigstr)+offset,len,char);
4441 big = SvPVX(bigstr);
4444 bigend = big + SvCUR(bigstr);
4446 if (midend > bigend)
4447 Perl_croak(aTHX_ "panic: sv_insert");
4449 if (mid - big > bigend - midend) { /* faster to shorten from end */
4451 Move(little, mid, littlelen,char);
4454 i = bigend - midend;
4456 Move(midend, mid, i,char);
4460 SvCUR_set(bigstr, mid - big);
4463 else if ((i = mid - big)) { /* faster from front */
4464 midend -= littlelen;
4466 sv_chop(bigstr,midend-i);
4471 Move(little, mid, littlelen,char);
4473 else if (littlelen) {
4474 midend -= littlelen;
4475 sv_chop(bigstr,midend);
4476 Move(little,midend,littlelen,char);
4479 sv_chop(bigstr,midend);
4485 =for apidoc sv_replace
4487 Make the first argument a copy of the second, then delete the original.
4493 Perl_sv_replace(pTHX_ register SV *sv, register SV *nsv)
4495 U32 refcnt = SvREFCNT(sv);
4496 SV_CHECK_THINKFIRST(sv);
4497 if (SvREFCNT(nsv) != 1 && ckWARN_d(WARN_INTERNAL))
4498 Perl_warner(aTHX_ WARN_INTERNAL, "Reference miscount in sv_replace()");
4499 if (SvMAGICAL(sv)) {
4503 sv_upgrade(nsv, SVt_PVMG);
4504 SvMAGIC(nsv) = SvMAGIC(sv);
4505 SvFLAGS(nsv) |= SvMAGICAL(sv);
4511 assert(!SvREFCNT(sv));
4512 StructCopy(nsv,sv,SV);
4513 SvREFCNT(sv) = refcnt;
4514 SvFLAGS(nsv) |= SVTYPEMASK; /* Mark as freed */
4519 =for apidoc sv_clear
4521 Clear an SV, making it empty. Does not free the memory used by the SV
4528 Perl_sv_clear(pTHX_ register SV *sv)
4532 assert(SvREFCNT(sv) == 0);
4535 if (PL_defstash) { /* Still have a symbol table? */
4540 Zero(&tmpref, 1, SV);
4541 sv_upgrade(&tmpref, SVt_RV);
4543 SvREADONLY_on(&tmpref); /* DESTROY() could be naughty */
4544 SvREFCNT(&tmpref) = 1;
4547 stash = SvSTASH(sv);
4548 destructor = StashHANDLER(stash,DESTROY);
4551 PUSHSTACKi(PERLSI_DESTROY);
4552 SvRV(&tmpref) = SvREFCNT_inc(sv);
4557 call_sv((SV*)destructor, G_DISCARD|G_EVAL|G_KEEPERR);
4563 } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
4565 del_XRV(SvANY(&tmpref));
4568 if (PL_in_clean_objs)
4569 Perl_croak(aTHX_ "DESTROY created new reference to dead object '%s'",
4571 /* DESTROY gave object new lease on life */
4577 SvREFCNT_dec(SvSTASH(sv)); /* possibly of changed persuasion */
4578 SvOBJECT_off(sv); /* Curse the object. */
4579 if (SvTYPE(sv) != SVt_PVIO)
4580 --PL_sv_objcount; /* XXX Might want something more general */
4583 if (SvTYPE(sv) >= SVt_PVMG) {
4586 if (SvFLAGS(sv) & SVpad_TYPED)
4587 SvREFCNT_dec(SvSTASH(sv));
4590 switch (SvTYPE(sv)) {
4593 IoIFP(sv) != PerlIO_stdin() &&
4594 IoIFP(sv) != PerlIO_stdout() &&
4595 IoIFP(sv) != PerlIO_stderr())
4597 io_close((IO*)sv, FALSE);
4599 if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
4600 PerlDir_close(IoDIRP(sv));
4601 IoDIRP(sv) = (DIR*)NULL;
4602 Safefree(IoTOP_NAME(sv));
4603 Safefree(IoFMT_NAME(sv));
4604 Safefree(IoBOTTOM_NAME(sv));
4619 SvREFCNT_dec(LvTARG(sv));
4623 Safefree(GvNAME(sv));
4624 /* cannot decrease stash refcount yet, as we might recursively delete
4625 ourselves when the refcnt drops to zero. Delay SvREFCNT_dec
4626 of stash until current sv is completely gone.
4627 -- JohnPC, 27 Mar 1998 */
4628 stash = GvSTASH(sv);
4634 (void)SvOOK_off(sv);
4642 SvREFCNT_dec(SvRV(sv));
4644 else if (SvPVX(sv) && SvLEN(sv))
4645 Safefree(SvPVX(sv));
4646 else if (SvPVX(sv) && SvREADONLY(sv) && SvFAKE(sv)) {
4647 unsharepvn(SvPVX(sv),SvUTF8(sv)?-SvCUR(sv):SvCUR(sv),SvUVX(sv));
4659 switch (SvTYPE(sv)) {
4675 del_XPVIV(SvANY(sv));
4678 del_XPVNV(SvANY(sv));
4681 del_XPVMG(SvANY(sv));
4684 del_XPVLV(SvANY(sv));
4687 del_XPVAV(SvANY(sv));
4690 del_XPVHV(SvANY(sv));
4693 del_XPVCV(SvANY(sv));
4696 del_XPVGV(SvANY(sv));
4697 /* code duplication for increased performance. */
4698 SvFLAGS(sv) &= SVf_BREAK;
4699 SvFLAGS(sv) |= SVTYPEMASK;
4700 /* decrease refcount of the stash that owns this GV, if any */
4702 SvREFCNT_dec(stash);
4703 return; /* not break, SvFLAGS reset already happened */
4705 del_XPVBM(SvANY(sv));
4708 del_XPVFM(SvANY(sv));
4711 del_XPVIO(SvANY(sv));
4714 SvFLAGS(sv) &= SVf_BREAK;
4715 SvFLAGS(sv) |= SVTYPEMASK;
4719 Perl_sv_newref(pTHX_ SV *sv)
4722 ATOMIC_INC(SvREFCNT(sv));
4729 Free the memory used by an SV.
4735 Perl_sv_free(pTHX_ SV *sv)
4737 int refcount_is_zero;
4741 if (SvREFCNT(sv) == 0) {
4742 if (SvFLAGS(sv) & SVf_BREAK)
4744 if (PL_in_clean_all) /* All is fair */
4746 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
4747 /* make sure SvREFCNT(sv)==0 happens very seldom */
4748 SvREFCNT(sv) = (~(U32)0)/2;
4751 if (ckWARN_d(WARN_INTERNAL))
4752 Perl_warner(aTHX_ WARN_INTERNAL, "Attempt to free unreferenced scalar");
4755 ATOMIC_DEC_AND_TEST(refcount_is_zero, SvREFCNT(sv));
4756 if (!refcount_is_zero)
4760 if (ckWARN_d(WARN_DEBUGGING))
4761 Perl_warner(aTHX_ WARN_DEBUGGING,
4762 "Attempt to free temp prematurely: SV 0x%"UVxf,
4767 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
4768 /* make sure SvREFCNT(sv)==0 happens very seldom */
4769 SvREFCNT(sv) = (~(U32)0)/2;
4780 Returns the length of the string in the SV. See also C<SvCUR>.
4786 Perl_sv_len(pTHX_ register SV *sv)
4795 len = mg_length(sv);
4797 junk = SvPV(sv, len);
4802 =for apidoc sv_len_utf8
4804 Returns the number of characters in the string in an SV, counting wide
4805 UTF8 bytes as a single character.
4811 Perl_sv_len_utf8(pTHX_ register SV *sv)
4817 return mg_length(sv);
4821 U8 *s = (U8*)SvPV(sv, len);
4823 return Perl_utf8_length(aTHX_ s, s + len);
4828 Perl_sv_pos_u2b(pTHX_ register SV *sv, I32* offsetp, I32* lenp)
4833 I32 uoffset = *offsetp;
4839 start = s = (U8*)SvPV(sv, len);
4841 while (s < send && uoffset--)
4845 *offsetp = s - start;
4849 while (s < send && ulen--)
4859 Perl_sv_pos_b2u(pTHX_ register SV *sv, I32* offsetp)
4868 s = (U8*)SvPV(sv, len);
4870 Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset");
4871 send = s + *offsetp;
4875 /* Call utf8n_to_uvchr() to validate the sequence */
4876 utf8n_to_uvchr(s, UTF8SKIP(s), &n, 0);
4891 Returns a boolean indicating whether the strings in the two SVs are
4898 Perl_sv_eq(pTHX_ register SV *sv1, register SV *sv2)
4912 pv1 = SvPV(sv1, cur1);
4919 pv2 = SvPV(sv2, cur2);
4921 /* do not utf8ize the comparands as a side-effect */
4922 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
4923 bool is_utf8 = TRUE;
4924 /* UTF-8ness differs */
4925 if (PL_hints & HINT_UTF8_DISTINCT)
4929 /* sv1 is the UTF-8 one , If is equal it must be downgrade-able */
4930 char *pv = (char*)bytes_from_utf8((U8*)pv1, &cur1, &is_utf8);
4935 /* sv2 is the UTF-8 one , If is equal it must be downgrade-able */
4936 char *pv = (char *)bytes_from_utf8((U8*)pv2, &cur2, &is_utf8);
4941 /* Downgrade not possible - cannot be eq */
4947 eq = memEQ(pv1, pv2, cur1);
4958 Compares the strings in two SVs. Returns -1, 0, or 1 indicating whether the
4959 string in C<sv1> is less than, equal to, or greater than the string in
4966 Perl_sv_cmp(pTHX_ register SV *sv1, register SV *sv2)
4971 bool pv1tmp = FALSE;
4972 bool pv2tmp = FALSE;
4979 pv1 = SvPV(sv1, cur1);
4986 pv2 = SvPV(sv2, cur2);
4988 /* do not utf8ize the comparands as a side-effect */
4989 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
4990 if (PL_hints & HINT_UTF8_DISTINCT)
4991 return SvUTF8(sv1) ? 1 : -1;
4994 pv2 = (char*)bytes_to_utf8((U8*)pv2, &cur2);
4998 pv1 = (char*)bytes_to_utf8((U8*)pv1, &cur1);
5004 cmp = cur2 ? -1 : 0;
5008 I32 retval = memcmp((void*)pv1, (void*)pv2, cur1 < cur2 ? cur1 : cur2);
5011 cmp = retval < 0 ? -1 : 1;
5012 } else if (cur1 == cur2) {
5015 cmp = cur1 < cur2 ? -1 : 1;
5028 =for apidoc sv_cmp_locale
5030 Compares the strings in two SVs in a locale-aware manner. See
5037 Perl_sv_cmp_locale(pTHX_ register SV *sv1, register SV *sv2)
5039 #ifdef USE_LOCALE_COLLATE
5045 if (PL_collation_standard)
5049 pv1 = sv1 ? sv_collxfrm(sv1, &len1) : (char *) NULL;
5051 pv2 = sv2 ? sv_collxfrm(sv2, &len2) : (char *) NULL;
5053 if (!pv1 || !len1) {
5064 retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
5067 return retval < 0 ? -1 : 1;
5070 * When the result of collation is equality, that doesn't mean
5071 * that there are no differences -- some locales exclude some
5072 * characters from consideration. So to avoid false equalities,
5073 * we use the raw string as a tiebreaker.
5079 #endif /* USE_LOCALE_COLLATE */
5081 return sv_cmp(sv1, sv2);
5084 #ifdef USE_LOCALE_COLLATE
5086 * Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
5087 * scalar data of the variable transformed to such a format that
5088 * a normal memory comparison can be used to compare the data
5089 * according to the locale settings.
5092 Perl_sv_collxfrm(pTHX_ SV *sv, STRLEN *nxp)
5096 mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
5097 if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
5102 Safefree(mg->mg_ptr);
5104 if ((xf = mem_collxfrm(s, len, &xlen))) {
5105 if (SvREADONLY(sv)) {
5108 return xf + sizeof(PL_collation_ix);
5111 sv_magic(sv, 0, PERL_MAGIC_collxfrm, 0, 0);
5112 mg = mg_find(sv, PERL_MAGIC_collxfrm);
5125 if (mg && mg->mg_ptr) {
5127 return mg->mg_ptr + sizeof(PL_collation_ix);
5135 #endif /* USE_LOCALE_COLLATE */
5140 Get a line from the filehandle and store it into the SV, optionally
5141 appending to the currently-stored string.
5147 Perl_sv_gets(pTHX_ register SV *sv, register PerlIO *fp, I32 append)
5151 register STDCHAR rslast;
5152 register STDCHAR *bp;
5156 SV_CHECK_THINKFIRST(sv);
5157 (void)SvUPGRADE(sv, SVt_PV);
5161 if (RsSNARF(PL_rs)) {
5165 else if (RsRECORD(PL_rs)) {
5166 I32 recsize, bytesread;
5169 /* Grab the size of the record we're getting */
5170 recsize = SvIV(SvRV(PL_rs));
5171 (void)SvPOK_only(sv); /* Validate pointer */
5172 buffer = SvGROW(sv, recsize + 1);
5175 /* VMS wants read instead of fread, because fread doesn't respect */
5176 /* RMS record boundaries. This is not necessarily a good thing to be */
5177 /* doing, but we've got no other real choice */
5178 bytesread = PerlLIO_read(PerlIO_fileno(fp), buffer, recsize);
5180 bytesread = PerlIO_read(fp, buffer, recsize);
5182 SvCUR_set(sv, bytesread);
5183 buffer[bytesread] = '\0';
5184 if (PerlIO_isutf8(fp))
5188 return(SvCUR(sv) ? SvPVX(sv) : Nullch);
5190 else if (RsPARA(PL_rs)) {
5195 /* Get $/ i.e. PL_rs into same encoding as stream wants */
5196 if (PerlIO_isutf8(fp)) {
5197 rsptr = SvPVutf8(PL_rs, rslen);
5200 if (SvUTF8(PL_rs)) {
5201 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
5202 Perl_croak(aTHX_ "Wide character in $/");
5205 rsptr = SvPV(PL_rs, rslen);
5209 rslast = rslen ? rsptr[rslen - 1] : '\0';
5211 if (RsPARA(PL_rs)) { /* have to do this both before and after */
5212 do { /* to make sure file boundaries work right */
5215 i = PerlIO_getc(fp);
5219 PerlIO_ungetc(fp,i);
5225 /* See if we know enough about I/O mechanism to cheat it ! */
5227 /* This used to be #ifdef test - it is made run-time test for ease
5228 of abstracting out stdio interface. One call should be cheap
5229 enough here - and may even be a macro allowing compile
5233 if (PerlIO_fast_gets(fp)) {
5236 * We're going to steal some values from the stdio struct
5237 * and put EVERYTHING in the innermost loop into registers.
5239 register STDCHAR *ptr;
5243 #if defined(VMS) && defined(PERLIO_IS_STDIO)
5244 /* An ungetc()d char is handled separately from the regular
5245 * buffer, so we getc() it back out and stuff it in the buffer.
5247 i = PerlIO_getc(fp);
5248 if (i == EOF) return 0;
5249 *(--((*fp)->_ptr)) = (unsigned char) i;
5253 /* Here is some breathtakingly efficient cheating */
5255 cnt = PerlIO_get_cnt(fp); /* get count into register */
5256 (void)SvPOK_only(sv); /* validate pointer */
5257 if (SvLEN(sv) - append <= cnt + 1) { /* make sure we have the room */
5258 if (cnt > 80 && SvLEN(sv) > append) {
5259 shortbuffered = cnt - SvLEN(sv) + append + 1;
5260 cnt -= shortbuffered;
5264 /* remember that cnt can be negative */
5265 SvGROW(sv, append + (cnt <= 0 ? 2 : (cnt + 1)));
5270 bp = (STDCHAR*)SvPVX(sv) + append; /* move these two too to registers */
5271 ptr = (STDCHAR*)PerlIO_get_ptr(fp);
5272 DEBUG_P(PerlIO_printf(Perl_debug_log,
5273 "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
5274 DEBUG_P(PerlIO_printf(Perl_debug_log,
5275 "Screamer: entering: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
5276 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
5277 PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
5282 while (cnt > 0) { /* this | eat */
5284 if ((*bp++ = *ptr++) == rslast) /* really | dust */
5285 goto thats_all_folks; /* screams | sed :-) */
5289 Copy(ptr, bp, cnt, char); /* this | eat */
5290 bp += cnt; /* screams | dust */
5291 ptr += cnt; /* louder | sed :-) */
5296 if (shortbuffered) { /* oh well, must extend */
5297 cnt = shortbuffered;
5299 bpx = bp - (STDCHAR*)SvPVX(sv); /* box up before relocation */
5301 SvGROW(sv, SvLEN(sv) + append + cnt + 2);
5302 bp = (STDCHAR*)SvPVX(sv) + bpx; /* unbox after relocation */
5306 DEBUG_P(PerlIO_printf(Perl_debug_log,
5307 "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
5308 PTR2UV(ptr),(long)cnt));
5309 PerlIO_set_ptrcnt(fp, ptr, cnt); /* deregisterize cnt and ptr */
5310 DEBUG_P(PerlIO_printf(Perl_debug_log,
5311 "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
5312 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
5313 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
5314 /* This used to call 'filbuf' in stdio form, but as that behaves like
5315 getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
5316 another abstraction. */
5317 i = PerlIO_getc(fp); /* get more characters */
5318 DEBUG_P(PerlIO_printf(Perl_debug_log,
5319 "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
5320 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
5321 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
5322 cnt = PerlIO_get_cnt(fp);
5323 ptr = (STDCHAR*)PerlIO_get_ptr(fp); /* reregisterize cnt and ptr */
5324 DEBUG_P(PerlIO_printf(Perl_debug_log,
5325 "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
5327 if (i == EOF) /* all done for ever? */
5328 goto thats_really_all_folks;
5330 bpx = bp - (STDCHAR*)SvPVX(sv); /* box up before relocation */
5332 SvGROW(sv, bpx + cnt + 2);
5333 bp = (STDCHAR*)SvPVX(sv) + bpx; /* unbox after relocation */
5335 *bp++ = i; /* store character from PerlIO_getc */
5337 if (rslen && (STDCHAR)i == rslast) /* all done for now? */
5338 goto thats_all_folks;
5342 if ((rslen > 1 && (bp - (STDCHAR*)SvPVX(sv) < rslen)) ||
5343 memNE((char*)bp - rslen, rsptr, rslen))
5344 goto screamer; /* go back to the fray */
5345 thats_really_all_folks:
5347 cnt += shortbuffered;
5348 DEBUG_P(PerlIO_printf(Perl_debug_log,
5349 "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
5350 PerlIO_set_ptrcnt(fp, ptr, cnt); /* put these back or we're in trouble */
5351 DEBUG_P(PerlIO_printf(Perl_debug_log,
5352 "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
5353 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
5354 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
5356 SvCUR_set(sv, bp - (STDCHAR*)SvPVX(sv)); /* set length */
5357 DEBUG_P(PerlIO_printf(Perl_debug_log,
5358 "Screamer: done, len=%ld, string=|%.*s|\n",
5359 (long)SvCUR(sv),(int)SvCUR(sv),SvPVX(sv)));
5364 /*The big, slow, and stupid way */
5367 /* Need to work around EPOC SDK features */
5368 /* On WINS: MS VC5 generates calls to _chkstk, */
5369 /* if a `large' stack frame is allocated */
5370 /* gcc on MARM does not generate calls like these */
5376 register STDCHAR *bpe = buf + sizeof(buf);
5378 while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = i) != rslast && bp < bpe)
5379 ; /* keep reading */
5383 cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
5384 /* Accomodate broken VAXC compiler, which applies U8 cast to
5385 * both args of ?: operator, causing EOF to change into 255
5387 if (cnt) { i = (U8)buf[cnt - 1]; } else { i = EOF; }
5391 sv_catpvn(sv, (char *) buf, cnt);
5393 sv_setpvn(sv, (char *) buf, cnt);
5395 if (i != EOF && /* joy */
5397 SvCUR(sv) < rslen ||
5398 memNE(SvPVX(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
5402 * If we're reading from a TTY and we get a short read,
5403 * indicating that the user hit his EOF character, we need
5404 * to notice it now, because if we try to read from the TTY
5405 * again, the EOF condition will disappear.
5407 * The comparison of cnt to sizeof(buf) is an optimization
5408 * that prevents unnecessary calls to feof().
5412 if (!(cnt < sizeof(buf) && PerlIO_eof(fp)))
5417 if (RsPARA(PL_rs)) { /* have to do this both before and after */
5418 while (i != EOF) { /* to make sure file boundaries work right */
5419 i = PerlIO_getc(fp);
5421 PerlIO_ungetc(fp,i);
5427 if (PerlIO_isutf8(fp))
5432 return (SvCUR(sv) - append) ? SvPVX(sv) : Nullch;
5439 Auto-increment of the value in the SV.
5445 Perl_sv_inc(pTHX_ register SV *sv)
5454 if (SvTHINKFIRST(sv)) {
5455 if (SvREADONLY(sv)) {
5456 if (PL_curcop != &PL_compiling)
5457 Perl_croak(aTHX_ PL_no_modify);
5461 if (SvAMAGIC(sv) && AMG_CALLun(sv,inc))
5463 i = PTR2IV(SvRV(sv));
5468 flags = SvFLAGS(sv);
5469 if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
5470 /* It's (privately or publicly) a float, but not tested as an
5471 integer, so test it to see. */
5473 flags = SvFLAGS(sv);
5475 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
5476 /* It's publicly an integer, or privately an integer-not-float */
5479 if (SvUVX(sv) == UV_MAX)
5480 sv_setnv(sv, (NV)UV_MAX + 1.0);
5482 (void)SvIOK_only_UV(sv);
5485 if (SvIVX(sv) == IV_MAX)
5486 sv_setuv(sv, (UV)IV_MAX + 1);
5488 (void)SvIOK_only(sv);
5494 if (flags & SVp_NOK) {
5495 (void)SvNOK_only(sv);
5500 if (!(flags & SVp_POK) || !*SvPVX(sv)) {
5501 if ((flags & SVTYPEMASK) < SVt_PVIV)
5502 sv_upgrade(sv, SVt_IV);
5503 (void)SvIOK_only(sv);
5508 while (isALPHA(*d)) d++;
5509 while (isDIGIT(*d)) d++;
5511 #ifdef PERL_PRESERVE_IVUV
5512 /* Got to punt this an an integer if needs be, but we don't issue
5513 warnings. Probably ought to make the sv_iv_please() that does
5514 the conversion if possible, and silently. */
5515 int numtype = grok_number(SvPVX(sv), SvCUR(sv), NULL);
5516 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
5517 /* Need to try really hard to see if it's an integer.
5518 9.22337203685478e+18 is an integer.
5519 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
5520 so $a="9.22337203685478e+18"; $a+0; $a++
5521 needs to be the same as $a="9.22337203685478e+18"; $a++
5528 /* sv_2iv *should* have made this an NV */
5529 if (flags & SVp_NOK) {
5530 (void)SvNOK_only(sv);
5534 /* I don't think we can get here. Maybe I should assert this
5535 And if we do get here I suspect that sv_setnv will croak. NWC
5537 #if defined(USE_LONG_DOUBLE)
5538 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",
5539 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5541 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%g\n",
5542 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5545 #endif /* PERL_PRESERVE_IVUV */
5546 sv_setnv(sv,Atof(SvPVX(sv)) + 1.0);
5550 while (d >= SvPVX(sv)) {
5558 /* MKS: The original code here died if letters weren't consecutive.
5559 * at least it didn't have to worry about non-C locales. The
5560 * new code assumes that ('z'-'a')==('Z'-'A'), letters are
5561 * arranged in order (although not consecutively) and that only
5562 * [A-Za-z] are accepted by isALPHA in the C locale.
5564 if (*d != 'z' && *d != 'Z') {
5565 do { ++*d; } while (!isALPHA(*d));
5568 *(d--) -= 'z' - 'a';
5573 *(d--) -= 'z' - 'a' + 1;
5577 /* oh,oh, the number grew */
5578 SvGROW(sv, SvCUR(sv) + 2);
5580 for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX(sv); d--)
5591 Auto-decrement of the value in the SV.
5597 Perl_sv_dec(pTHX_ register SV *sv)
5605 if (SvTHINKFIRST(sv)) {
5606 if (SvREADONLY(sv)) {
5607 if (PL_curcop != &PL_compiling)
5608 Perl_croak(aTHX_ PL_no_modify);
5612 if (SvAMAGIC(sv) && AMG_CALLun(sv,dec))
5614 i = PTR2IV(SvRV(sv));
5619 /* Unlike sv_inc we don't have to worry about string-never-numbers
5620 and keeping them magic. But we mustn't warn on punting */
5621 flags = SvFLAGS(sv);
5622 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
5623 /* It's publicly an integer, or privately an integer-not-float */
5626 if (SvUVX(sv) == 0) {
5627 (void)SvIOK_only(sv);
5631 (void)SvIOK_only_UV(sv);
5635 if (SvIVX(sv) == IV_MIN)
5636 sv_setnv(sv, (NV)IV_MIN - 1.0);
5638 (void)SvIOK_only(sv);
5644 if (flags & SVp_NOK) {
5646 (void)SvNOK_only(sv);
5649 if (!(flags & SVp_POK)) {
5650 if ((flags & SVTYPEMASK) < SVt_PVNV)
5651 sv_upgrade(sv, SVt_NV);
5653 (void)SvNOK_only(sv);
5656 #ifdef PERL_PRESERVE_IVUV
5658 int numtype = grok_number(SvPVX(sv), SvCUR(sv), NULL);
5659 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
5660 /* Need to try really hard to see if it's an integer.
5661 9.22337203685478e+18 is an integer.
5662 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
5663 so $a="9.22337203685478e+18"; $a+0; $a--
5664 needs to be the same as $a="9.22337203685478e+18"; $a--
5671 /* sv_2iv *should* have made this an NV */
5672 if (flags & SVp_NOK) {
5673 (void)SvNOK_only(sv);
5677 /* I don't think we can get here. Maybe I should assert this
5678 And if we do get here I suspect that sv_setnv will croak. NWC
5680 #if defined(USE_LONG_DOUBLE)
5681 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",
5682 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5684 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%g\n",
5685 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5689 #endif /* PERL_PRESERVE_IVUV */
5690 sv_setnv(sv,Atof(SvPVX(sv)) - 1.0); /* punt */
5694 =for apidoc sv_mortalcopy
5696 Creates a new SV which is a copy of the original SV. The new SV is marked
5702 /* Make a string that will exist for the duration of the expression
5703 * evaluation. Actually, it may have to last longer than that, but
5704 * hopefully we won't free it until it has been assigned to a
5705 * permanent location. */
5708 Perl_sv_mortalcopy(pTHX_ SV *oldstr)
5713 sv_setsv(sv,oldstr);
5715 PL_tmps_stack[++PL_tmps_ix] = sv;
5721 =for apidoc sv_newmortal
5723 Creates a new SV which is mortal. The reference count of the SV is set to 1.
5729 Perl_sv_newmortal(pTHX)
5734 SvFLAGS(sv) = SVs_TEMP;
5736 PL_tmps_stack[++PL_tmps_ix] = sv;
5741 =for apidoc sv_2mortal
5743 Marks an SV as mortal. The SV will be destroyed when the current context
5749 /* same thing without the copying */
5752 Perl_sv_2mortal(pTHX_ register SV *sv)
5756 if (SvREADONLY(sv) && SvIMMORTAL(sv))
5759 PL_tmps_stack[++PL_tmps_ix] = sv;
5767 Creates a new SV and copies a string into it. The reference count for the
5768 SV is set to 1. If C<len> is zero, Perl will compute the length using
5769 strlen(). For efficiency, consider using C<newSVpvn> instead.
5775 Perl_newSVpv(pTHX_ const char *s, STRLEN len)
5782 sv_setpvn(sv,s,len);
5787 =for apidoc newSVpvn
5789 Creates a new SV and copies a string into it. The reference count for the
5790 SV is set to 1. Note that if C<len> is zero, Perl will create a zero length
5791 string. You are responsible for ensuring that the source string is at least
5798 Perl_newSVpvn(pTHX_ const char *s, STRLEN len)
5803 sv_setpvn(sv,s,len);
5808 =for apidoc newSVpvn_share
5810 Creates a new SV and populates it with a string from
5811 the string table. Turns on READONLY and FAKE.
5812 The idea here is that as string table is used for shared hash
5813 keys these strings will have SvPVX == HeKEY and hash lookup
5814 will avoid string compare.
5820 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
5823 bool is_utf8 = FALSE;
5828 if (is_utf8 && !(PL_hints & HINT_UTF8_DISTINCT)) {
5829 STRLEN tmplen = len;
5830 /* See the note in hv.c:hv_fetch() --jhi */
5831 src = (char*)bytes_from_utf8((U8*)src, &tmplen, &is_utf8);
5835 PERL_HASH(hash, src, len);
5837 sv_upgrade(sv, SVt_PVIV);
5838 SvPVX(sv) = sharepvn(src, is_utf8?-len:len, hash);
5850 #if defined(PERL_IMPLICIT_CONTEXT)
5852 Perl_newSVpvf_nocontext(const char* pat, ...)
5857 va_start(args, pat);
5858 sv = vnewSVpvf(pat, &args);
5865 =for apidoc newSVpvf
5867 Creates a new SV an initialize it with the string formatted like
5874 Perl_newSVpvf(pTHX_ const char* pat, ...)
5878 va_start(args, pat);
5879 sv = vnewSVpvf(pat, &args);
5885 Perl_vnewSVpvf(pTHX_ const char* pat, va_list* args)
5889 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
5896 Creates a new SV and copies a floating point value into it.
5897 The reference count for the SV is set to 1.
5903 Perl_newSVnv(pTHX_ NV n)
5915 Creates a new SV and copies an integer into it. The reference count for the
5922 Perl_newSViv(pTHX_ IV i)
5934 Creates a new SV and copies an unsigned integer into it.
5935 The reference count for the SV is set to 1.
5941 Perl_newSVuv(pTHX_ UV u)
5951 =for apidoc newRV_noinc
5953 Creates an RV wrapper for an SV. The reference count for the original
5954 SV is B<not> incremented.
5960 Perl_newRV_noinc(pTHX_ SV *tmpRef)
5965 sv_upgrade(sv, SVt_RV);
5972 /* newRV_inc is #defined to newRV in sv.h */
5974 Perl_newRV(pTHX_ SV *tmpRef)
5976 return newRV_noinc(SvREFCNT_inc(tmpRef));
5982 Creates a new SV which is an exact duplicate of the original SV.
5987 /* make an exact duplicate of old */
5990 Perl_newSVsv(pTHX_ register SV *old)
5996 if (SvTYPE(old) == SVTYPEMASK) {
5997 if (ckWARN_d(WARN_INTERNAL))
5998 Perl_warner(aTHX_ WARN_INTERNAL, "semi-panic: attempt to dup freed string");
6013 Perl_sv_reset(pTHX_ register char *s, HV *stash)
6021 char todo[PERL_UCHAR_MAX+1];
6026 if (!*s) { /* reset ?? searches */
6027 for (pm = HvPMROOT(stash); pm; pm = pm->op_pmnext) {
6028 pm->op_pmdynflags &= ~PMdf_USED;
6033 /* reset variables */
6035 if (!HvARRAY(stash))
6038 Zero(todo, 256, char);
6040 i = (unsigned char)*s;
6044 max = (unsigned char)*s++;
6045 for ( ; i <= max; i++) {
6048 for (i = 0; i <= (I32) HvMAX(stash); i++) {
6049 for (entry = HvARRAY(stash)[i];
6051 entry = HeNEXT(entry))
6053 if (!todo[(U8)*HeKEY(entry)])
6055 gv = (GV*)HeVAL(entry);
6057 if (SvTHINKFIRST(sv)) {
6058 if (!SvREADONLY(sv) && SvROK(sv))
6063 if (SvTYPE(sv) >= SVt_PV) {
6065 if (SvPVX(sv) != Nullch)
6072 if (GvHV(gv) && !HvNAME(GvHV(gv))) {
6074 #ifdef USE_ENVIRON_ARRAY
6076 environ[0] = Nullch;
6085 Perl_sv_2io(pTHX_ SV *sv)
6091 switch (SvTYPE(sv)) {
6099 Perl_croak(aTHX_ "Bad filehandle: %s", GvNAME(gv));
6103 Perl_croak(aTHX_ PL_no_usym, "filehandle");
6105 return sv_2io(SvRV(sv));
6106 gv = gv_fetchpv(SvPV(sv,n_a), FALSE, SVt_PVIO);
6112 Perl_croak(aTHX_ "Bad filehandle: %s", SvPV(sv,n_a));
6119 Perl_sv_2cv(pTHX_ SV *sv, HV **st, GV **gvp, I32 lref)
6126 return *gvp = Nullgv, Nullcv;
6127 switch (SvTYPE(sv)) {
6146 SV **sp = &sv; /* Used in tryAMAGICunDEREF macro. */
6147 tryAMAGICunDEREF(to_cv);
6150 if (SvTYPE(sv) == SVt_PVCV) {
6159 Perl_croak(aTHX_ "Not a subroutine reference");
6164 gv = gv_fetchpv(SvPV(sv, n_a), lref, SVt_PVCV);
6170 if (lref && !GvCVu(gv)) {
6173 tmpsv = NEWSV(704,0);
6174 gv_efullname3(tmpsv, gv, Nullch);
6175 /* XXX this is probably not what they think they're getting.
6176 * It has the same effect as "sub name;", i.e. just a forward
6178 newSUB(start_subparse(FALSE, 0),
6179 newSVOP(OP_CONST, 0, tmpsv),
6184 Perl_croak(aTHX_ "Unable to create sub named \"%s\"", SvPV(sv,n_a));
6193 Returns true if the SV has a true value by Perl's rules.
6199 Perl_sv_true(pTHX_ register SV *sv)
6205 if ((tXpv = (XPV*)SvANY(sv)) &&
6206 (tXpv->xpv_cur > 1 ||
6207 (tXpv->xpv_cur && *tXpv->xpv_pv != '0')))
6214 return SvIVX(sv) != 0;
6217 return SvNVX(sv) != 0.0;
6219 return sv_2bool(sv);
6225 Perl_sv_iv(pTHX_ register SV *sv)
6229 return (IV)SvUVX(sv);
6236 Perl_sv_uv(pTHX_ register SV *sv)
6241 return (UV)SvIVX(sv);
6247 Perl_sv_nv(pTHX_ register SV *sv)
6255 Perl_sv_pv(pTHX_ SV *sv)
6262 return sv_2pv(sv, &n_a);
6266 Perl_sv_pvn(pTHX_ SV *sv, STRLEN *lp)
6272 return sv_2pv(sv, lp);
6276 =for apidoc sv_pvn_force
6278 Get a sensible string out of the SV somehow.
6284 Perl_sv_pvn_force(pTHX_ SV *sv, STRLEN *lp)
6286 return sv_pvn_force_flags(sv, lp, SV_GMAGIC);
6290 =for apidoc sv_pvn_force_flags
6292 Get a sensible string out of the SV somehow.
6293 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
6294 appropriate, else not. C<sv_pvn_force> and C<sv_pvn_force_nomg> are
6295 implemented in terms of this function.
6301 Perl_sv_pvn_force_flags(pTHX_ SV *sv, STRLEN *lp, I32 flags)
6305 if (SvTHINKFIRST(sv) && !SvROK(sv))
6306 sv_force_normal(sv);
6312 if (SvTYPE(sv) > SVt_PVLV && SvTYPE(sv) != SVt_PVFM) {
6313 Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
6314 PL_op_name[PL_op->op_type]);
6317 s = sv_2pv_flags(sv, lp, flags);
6318 if (s != SvPVX(sv)) { /* Almost, but not quite, sv_setpvn() */
6323 (void)SvUPGRADE(sv, SVt_PV); /* Never FALSE */
6324 SvGROW(sv, len + 1);
6325 Move(s,SvPVX(sv),len,char);
6330 SvPOK_on(sv); /* validate pointer */
6332 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
6333 PTR2UV(sv),SvPVX(sv)));
6340 Perl_sv_pvbyte(pTHX_ SV *sv)
6342 sv_utf8_downgrade(sv,0);
6347 Perl_sv_pvbyten(pTHX_ SV *sv, STRLEN *lp)
6349 sv_utf8_downgrade(sv,0);
6350 return sv_pvn(sv,lp);
6354 Perl_sv_pvbyten_force(pTHX_ SV *sv, STRLEN *lp)
6356 sv_utf8_downgrade(sv,0);
6357 return sv_pvn_force(sv,lp);
6361 Perl_sv_pvutf8(pTHX_ SV *sv)
6363 sv_utf8_upgrade(sv);
6368 Perl_sv_pvutf8n(pTHX_ SV *sv, STRLEN *lp)
6370 sv_utf8_upgrade(sv);
6371 return sv_pvn(sv,lp);
6375 =for apidoc sv_pvutf8n_force
6377 Get a sensible UTF8-encoded string out of the SV somehow. See
6384 Perl_sv_pvutf8n_force(pTHX_ SV *sv, STRLEN *lp)
6386 sv_utf8_upgrade(sv);
6387 return sv_pvn_force(sv,lp);
6391 =for apidoc sv_reftype
6393 Returns a string describing what the SV is a reference to.
6399 Perl_sv_reftype(pTHX_ SV *sv, int ob)
6401 if (ob && SvOBJECT(sv))
6402 return HvNAME(SvSTASH(sv));
6404 switch (SvTYPE(sv)) {
6418 case SVt_PVLV: return "LVALUE";
6419 case SVt_PVAV: return "ARRAY";
6420 case SVt_PVHV: return "HASH";
6421 case SVt_PVCV: return "CODE";
6422 case SVt_PVGV: return "GLOB";
6423 case SVt_PVFM: return "FORMAT";
6424 case SVt_PVIO: return "IO";
6425 default: return "UNKNOWN";
6431 =for apidoc sv_isobject
6433 Returns a boolean indicating whether the SV is an RV pointing to a blessed
6434 object. If the SV is not an RV, or if the object is not blessed, then this
6441 Perl_sv_isobject(pTHX_ SV *sv)
6458 Returns a boolean indicating whether the SV is blessed into the specified
6459 class. This does not check for subtypes; use C<sv_derived_from> to verify
6460 an inheritance relationship.
6466 Perl_sv_isa(pTHX_ SV *sv, const char *name)
6478 return strEQ(HvNAME(SvSTASH(sv)), name);
6484 Creates a new SV for the RV, C<rv>, to point to. If C<rv> is not an RV then
6485 it will be upgraded to one. If C<classname> is non-null then the new SV will
6486 be blessed in the specified package. The new SV is returned and its
6487 reference count is 1.
6493 Perl_newSVrv(pTHX_ SV *rv, const char *classname)
6499 SV_CHECK_THINKFIRST(rv);
6502 if (SvTYPE(rv) >= SVt_PVMG) {
6503 U32 refcnt = SvREFCNT(rv);
6507 SvREFCNT(rv) = refcnt;
6510 if (SvTYPE(rv) < SVt_RV)
6511 sv_upgrade(rv, SVt_RV);
6512 else if (SvTYPE(rv) > SVt_RV) {
6513 (void)SvOOK_off(rv);
6514 if (SvPVX(rv) && SvLEN(rv))
6515 Safefree(SvPVX(rv));
6525 HV* stash = gv_stashpv(classname, TRUE);
6526 (void)sv_bless(rv, stash);
6532 =for apidoc sv_setref_pv
6534 Copies a pointer into a new SV, optionally blessing the SV. The C<rv>
6535 argument will be upgraded to an RV. That RV will be modified to point to
6536 the new SV. If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
6537 into the SV. The C<classname> argument indicates the package for the
6538 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
6539 will be returned and will have a reference count of 1.
6541 Do not use with other Perl types such as HV, AV, SV, CV, because those
6542 objects will become corrupted by the pointer copy process.
6544 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
6550 Perl_sv_setref_pv(pTHX_ SV *rv, const char *classname, void *pv)
6553 sv_setsv(rv, &PL_sv_undef);
6557 sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
6562 =for apidoc sv_setref_iv
6564 Copies an integer into a new SV, optionally blessing the SV. The C<rv>
6565 argument will be upgraded to an RV. That RV will be modified to point to
6566 the new SV. The C<classname> argument indicates the package for the
6567 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
6568 will be returned and will have a reference count of 1.
6574 Perl_sv_setref_iv(pTHX_ SV *rv, const char *classname, IV iv)
6576 sv_setiv(newSVrv(rv,classname), iv);
6581 =for apidoc sv_setref_uv
6583 Copies an unsigned integer into a new SV, optionally blessing the SV. The C<rv>
6584 argument will be upgraded to an RV. That RV will be modified to point to
6585 the new SV. The C<classname> argument indicates the package for the
6586 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
6587 will be returned and will have a reference count of 1.
6593 Perl_sv_setref_uv(pTHX_ SV *rv, const char *classname, UV uv)
6595 sv_setuv(newSVrv(rv,classname), uv);
6600 =for apidoc sv_setref_nv
6602 Copies a double into a new SV, optionally blessing the SV. The C<rv>
6603 argument will be upgraded to an RV. That RV will be modified to point to
6604 the new SV. The C<classname> argument indicates the package for the
6605 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
6606 will be returned and will have a reference count of 1.
6612 Perl_sv_setref_nv(pTHX_ SV *rv, const char *classname, NV nv)
6614 sv_setnv(newSVrv(rv,classname), nv);
6619 =for apidoc sv_setref_pvn
6621 Copies a string into a new SV, optionally blessing the SV. The length of the
6622 string must be specified with C<n>. The C<rv> argument will be upgraded to
6623 an RV. That RV will be modified to point to the new SV. The C<classname>
6624 argument indicates the package for the blessing. Set C<classname> to
6625 C<Nullch> to avoid the blessing. The new SV will be returned and will have
6626 a reference count of 1.
6628 Note that C<sv_setref_pv> copies the pointer while this copies the string.
6634 Perl_sv_setref_pvn(pTHX_ SV *rv, const char *classname, char *pv, STRLEN n)
6636 sv_setpvn(newSVrv(rv,classname), pv, n);
6641 =for apidoc sv_bless
6643 Blesses an SV into a specified package. The SV must be an RV. The package
6644 must be designated by its stash (see C<gv_stashpv()>). The reference count
6645 of the SV is unaffected.
6651 Perl_sv_bless(pTHX_ SV *sv, HV *stash)
6655 Perl_croak(aTHX_ "Can't bless non-reference value");
6657 if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
6658 if (SvREADONLY(tmpRef))
6659 Perl_croak(aTHX_ PL_no_modify);
6660 if (SvOBJECT(tmpRef)) {
6661 if (SvTYPE(tmpRef) != SVt_PVIO)
6663 SvREFCNT_dec(SvSTASH(tmpRef));
6666 SvOBJECT_on(tmpRef);
6667 if (SvTYPE(tmpRef) != SVt_PVIO)
6669 (void)SvUPGRADE(tmpRef, SVt_PVMG);
6670 SvSTASH(tmpRef) = (HV*)SvREFCNT_inc(stash);
6681 S_sv_unglob(pTHX_ SV *sv)
6685 assert(SvTYPE(sv) == SVt_PVGV);
6690 SvREFCNT_dec(GvSTASH(sv));
6691 GvSTASH(sv) = Nullhv;
6693 sv_unmagic(sv, PERL_MAGIC_glob);
6694 Safefree(GvNAME(sv));
6697 /* need to keep SvANY(sv) in the right arena */
6698 xpvmg = new_XPVMG();
6699 StructCopy(SvANY(sv), xpvmg, XPVMG);
6700 del_XPVGV(SvANY(sv));
6703 SvFLAGS(sv) &= ~SVTYPEMASK;
6704 SvFLAGS(sv) |= SVt_PVMG;
6708 =for apidoc sv_unref_flags
6710 Unsets the RV status of the SV, and decrements the reference count of
6711 whatever was being referenced by the RV. This can almost be thought of
6712 as a reversal of C<newSVrv>. The C<cflags> argument can contain
6713 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
6714 (otherwise the decrementing is conditional on the reference count being
6715 different from one or the reference being a readonly SV).
6722 Perl_sv_unref_flags(pTHX_ SV *sv, U32 flags)
6726 if (SvWEAKREF(sv)) {
6734 if (SvREFCNT(rv) != 1 || SvREADONLY(rv) || flags) /* SV_IMMEDIATE_UNREF */
6736 else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
6737 sv_2mortal(rv); /* Schedule for freeing later */
6741 =for apidoc sv_unref
6743 Unsets the RV status of the SV, and decrements the reference count of
6744 whatever was being referenced by the RV. This can almost be thought of
6745 as a reversal of C<newSVrv>. This is C<sv_unref_flags> with the C<flag>
6746 being zero. See C<SvROK_off>.
6752 Perl_sv_unref(pTHX_ SV *sv)
6754 sv_unref_flags(sv, 0);
6758 Perl_sv_taint(pTHX_ SV *sv)
6760 sv_magic((sv), Nullsv, PERL_MAGIC_taint, Nullch, 0);
6764 Perl_sv_untaint(pTHX_ SV *sv)
6766 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
6767 MAGIC *mg = mg_find(sv, PERL_MAGIC_taint);
6774 Perl_sv_tainted(pTHX_ SV *sv)
6776 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
6777 MAGIC *mg = mg_find(sv, PERL_MAGIC_taint);
6778 if (mg && ((mg->mg_len & 1) || ((mg->mg_len & 2) && mg->mg_obj == sv)))
6785 =for apidoc sv_setpviv
6787 Copies an integer into the given SV, also updating its string value.
6788 Does not handle 'set' magic. See C<sv_setpviv_mg>.
6794 Perl_sv_setpviv(pTHX_ SV *sv, IV iv)
6796 char buf[TYPE_CHARS(UV)];
6798 char *ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
6800 sv_setpvn(sv, ptr, ebuf - ptr);
6805 =for apidoc sv_setpviv_mg
6807 Like C<sv_setpviv>, but also handles 'set' magic.
6813 Perl_sv_setpviv_mg(pTHX_ SV *sv, IV iv)
6815 char buf[TYPE_CHARS(UV)];
6817 char *ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
6819 sv_setpvn(sv, ptr, ebuf - ptr);
6823 #if defined(PERL_IMPLICIT_CONTEXT)
6825 Perl_sv_setpvf_nocontext(SV *sv, const char* pat, ...)
6829 va_start(args, pat);
6830 sv_vsetpvf(sv, pat, &args);
6836 Perl_sv_setpvf_mg_nocontext(SV *sv, const char* pat, ...)
6840 va_start(args, pat);
6841 sv_vsetpvf_mg(sv, pat, &args);
6847 =for apidoc sv_setpvf
6849 Processes its arguments like C<sprintf> and sets an SV to the formatted
6850 output. Does not handle 'set' magic. See C<sv_setpvf_mg>.
6856 Perl_sv_setpvf(pTHX_ SV *sv, const char* pat, ...)
6859 va_start(args, pat);
6860 sv_vsetpvf(sv, pat, &args);
6865 Perl_sv_vsetpvf(pTHX_ SV *sv, const char* pat, va_list* args)
6867 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6871 =for apidoc sv_setpvf_mg
6873 Like C<sv_setpvf>, but also handles 'set' magic.
6879 Perl_sv_setpvf_mg(pTHX_ SV *sv, const char* pat, ...)
6882 va_start(args, pat);
6883 sv_vsetpvf_mg(sv, pat, &args);
6888 Perl_sv_vsetpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
6890 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6894 #if defined(PERL_IMPLICIT_CONTEXT)
6896 Perl_sv_catpvf_nocontext(SV *sv, const char* pat, ...)
6900 va_start(args, pat);
6901 sv_vcatpvf(sv, pat, &args);
6906 Perl_sv_catpvf_mg_nocontext(SV *sv, const char* pat, ...)
6910 va_start(args, pat);
6911 sv_vcatpvf_mg(sv, pat, &args);
6917 =for apidoc sv_catpvf
6919 Processes its arguments like C<sprintf> and appends the formatted
6920 output to an SV. If the appended data contains "wide" characters
6921 (including, but not limited to, SVs with a UTF-8 PV formatted with %s,
6922 and characters >255 formatted with %c), the original SV might get
6923 upgraded to UTF-8. Handles 'get' magic, but not 'set' magic.
6924 C<SvSETMAGIC()> must typically be called after calling this function
6925 to handle 'set' magic.
6930 Perl_sv_catpvf(pTHX_ SV *sv, const char* pat, ...)
6933 va_start(args, pat);
6934 sv_vcatpvf(sv, pat, &args);
6939 Perl_sv_vcatpvf(pTHX_ SV *sv, const char* pat, va_list* args)
6941 sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6945 =for apidoc sv_catpvf_mg
6947 Like C<sv_catpvf>, but also handles 'set' magic.
6953 Perl_sv_catpvf_mg(pTHX_ SV *sv, const char* pat, ...)
6956 va_start(args, pat);
6957 sv_vcatpvf_mg(sv, pat, &args);
6962 Perl_sv_vcatpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
6964 sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6969 =for apidoc sv_vsetpvfn
6971 Works like C<vcatpvfn> but copies the text into the SV instead of
6978 Perl_sv_vsetpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
6980 sv_setpvn(sv, "", 0);
6981 sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, maybe_tainted);
6985 S_expect_number(pTHX_ char** pattern)
6988 switch (**pattern) {
6989 case '1': case '2': case '3':
6990 case '4': case '5': case '6':
6991 case '7': case '8': case '9':
6992 while (isDIGIT(**pattern))
6993 var = var * 10 + (*(*pattern)++ - '0');
6997 #define EXPECT_NUMBER(pattern, var) (var = S_expect_number(aTHX_ &pattern))
7000 =for apidoc sv_vcatpvfn
7002 Processes its arguments like C<vsprintf> and appends the formatted output
7003 to an SV. Uses an array of SVs if the C style variable argument list is
7004 missing (NULL). When running with taint checks enabled, indicates via
7005 C<maybe_tainted> if results are untrustworthy (often due to the use of
7012 Perl_sv_vcatpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
7019 static char nullstr[] = "(null)";
7022 /* no matter what, this is a string now */
7023 (void)SvPV_force(sv, origlen);
7025 /* special-case "", "%s", and "%_" */
7028 if (patlen == 2 && pat[0] == '%') {
7032 char *s = va_arg(*args, char*);
7033 sv_catpv(sv, s ? s : nullstr);
7035 else if (svix < svmax) {
7036 sv_catsv(sv, *svargs);
7037 if (DO_UTF8(*svargs))
7043 argsv = va_arg(*args, SV*);
7044 sv_catsv(sv, argsv);
7049 /* See comment on '_' below */
7054 patend = (char*)pat + patlen;
7055 for (p = (char*)pat; p < patend; p = q) {
7058 bool vectorize = FALSE;
7059 bool vectorarg = FALSE;
7060 bool vec_utf = FALSE;
7066 bool has_precis = FALSE;
7068 bool is_utf = FALSE;
7071 U8 utf8buf[UTF8_MAXLEN+1];
7072 STRLEN esignlen = 0;
7074 char *eptr = Nullch;
7076 /* Times 4: a decimal digit takes more than 3 binary digits.
7077 * NV_DIG: mantissa takes than many decimal digits.
7078 * Plus 32: Playing safe. */
7079 char ebuf[IV_DIG * 4 + NV_DIG + 32];
7080 /* large enough for "%#.#f" --chip */
7081 /* what about long double NVs? --jhi */
7084 U8 *vecstr = Null(U8*);
7096 STRLEN dotstrlen = 1;
7097 I32 efix = 0; /* explicit format parameter index */
7098 I32 ewix = 0; /* explicit width index */
7099 I32 epix = 0; /* explicit precision index */
7100 I32 evix = 0; /* explicit vector index */
7101 bool asterisk = FALSE;
7103 /* echo everything up to the next format specification */
7104 for (q = p; q < patend && *q != '%'; ++q) ;
7106 sv_catpvn(sv, p, q - p);
7113 We allow format specification elements in this order:
7114 \d+\$ explicit format parameter index
7116 \*?(\d+\$)?v vector with optional (optionally specified) arg
7117 \d+|\*(\d+\$)? width using optional (optionally specified) arg
7118 \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
7120 [%bcdefginopsux_DFOUX] format (mandatory)
7122 if (EXPECT_NUMBER(q, width)) {
7163 if (EXPECT_NUMBER(q, ewix))
7172 if ((vectorarg = asterisk)) {
7182 EXPECT_NUMBER(q, width);
7187 vecsv = va_arg(*args, SV*);
7189 vecsv = (evix ? evix <= svmax : svix < svmax) ?
7190 svargs[ewix ? ewix-1 : svix++] : &PL_sv_undef;
7191 dotstr = SvPVx(vecsv, dotstrlen);
7196 vecsv = va_arg(*args, SV*);
7197 vecstr = (U8*)SvPVx(vecsv,veclen);
7198 vec_utf = DO_UTF8(vecsv);
7200 else if (efix ? efix <= svmax : svix < svmax) {
7201 vecsv = svargs[efix ? efix-1 : svix++];
7202 vecstr = (U8*)SvPVx(vecsv,veclen);
7203 vec_utf = DO_UTF8(vecsv);
7213 i = va_arg(*args, int);
7215 i = (ewix ? ewix <= svmax : svix < svmax) ?
7216 SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
7218 width = (i < 0) ? -i : i;
7228 if (EXPECT_NUMBER(q, epix) && *q++ != '$')
7231 i = va_arg(*args, int);
7233 i = (ewix ? ewix <= svmax : svix < svmax)
7234 ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
7235 precis = (i < 0) ? 0 : i;
7240 precis = precis * 10 + (*q++ - '0');
7248 #if defined(HAS_QUAD) || (defined(HAS_LONG_DOUBLE) && defined(USE_LONG_DOUBLE))
7259 #if defined(HAS_QUAD) || (defined(HAS_LONG_DOUBLE) && defined(USE_LONG_DOUBLE))
7260 if (*(q + 1) == 'l') { /* lld, llf */
7283 argsv = (efix ? efix <= svmax : svix < svmax) ?
7284 svargs[efix ? efix-1 : svix++] : &PL_sv_undef;
7291 uv = args ? va_arg(*args, int) : SvIVx(argsv);
7293 (!UNI_IS_INVARIANT(uv) && SvUTF8(sv)))
7295 eptr = (char*)utf8buf;
7296 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
7308 eptr = va_arg(*args, char*);
7310 #ifdef MACOS_TRADITIONAL
7311 /* On MacOS, %#s format is used for Pascal strings */
7316 elen = strlen(eptr);
7319 elen = sizeof nullstr - 1;
7323 eptr = SvPVx(argsv, elen);
7324 if (DO_UTF8(argsv)) {
7325 if (has_precis && precis < elen) {
7327 sv_pos_u2b(argsv, &p, 0); /* sticks at end */
7330 if (width) { /* fudge width (can't fudge elen) */
7331 width += elen - sv_len_utf8(argsv);
7340 * The "%_" hack might have to be changed someday,
7341 * if ISO or ANSI decide to use '_' for something.
7342 * So we keep it hidden from users' code.
7346 argsv = va_arg(*args, SV*);
7347 eptr = SvPVx(argsv, elen);
7353 if (has_precis && elen > precis)
7362 uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
7380 iv = (IV)utf8n_to_uvchr(vecstr, veclen, &ulen, 0);
7390 case 'h': iv = (short)va_arg(*args, int); break;
7391 default: iv = va_arg(*args, int); break;
7392 case 'l': iv = va_arg(*args, long); break;
7393 case 'V': iv = va_arg(*args, IV); break;
7395 case 'q': iv = va_arg(*args, Quad_t); break;
7402 case 'h': iv = (short)iv; break;
7404 case 'l': iv = (long)iv; break;
7407 case 'q': iv = (Quad_t)iv; break;
7414 esignbuf[esignlen++] = plus;
7418 esignbuf[esignlen++] = '-';
7460 uv = utf8n_to_uvchr(vecstr, veclen, &ulen, 0);
7470 case 'h': uv = (unsigned short)va_arg(*args, unsigned); break;
7471 default: uv = va_arg(*args, unsigned); break;
7472 case 'l': uv = va_arg(*args, unsigned long); break;
7473 case 'V': uv = va_arg(*args, UV); break;
7475 case 'q': uv = va_arg(*args, Quad_t); break;
7482 case 'h': uv = (unsigned short)uv; break;
7484 case 'l': uv = (unsigned long)uv; break;
7487 case 'q': uv = (Quad_t)uv; break;
7493 eptr = ebuf + sizeof ebuf;
7499 p = (char*)((c == 'X')
7500 ? "0123456789ABCDEF" : "0123456789abcdef");
7506 esignbuf[esignlen++] = '0';
7507 esignbuf[esignlen++] = c; /* 'x' or 'X' */
7513 *--eptr = '0' + dig;
7515 if (alt && *eptr != '0')
7521 *--eptr = '0' + dig;
7524 esignbuf[esignlen++] = '0';
7525 esignbuf[esignlen++] = 'b';
7528 default: /* it had better be ten or less */
7529 #if defined(PERL_Y2KWARN)
7530 if (ckWARN(WARN_Y2K)) {
7532 char *s = SvPV(sv,n);
7533 if (n >= 2 && s[n-2] == '1' && s[n-1] == '9'
7534 && (n == 2 || !isDIGIT(s[n-3])))
7536 Perl_warner(aTHX_ WARN_Y2K,
7537 "Possible Y2K bug: %%%c %s",
7538 c, "format string following '19'");
7544 *--eptr = '0' + dig;
7545 } while (uv /= base);
7548 elen = (ebuf + sizeof ebuf) - eptr;
7551 zeros = precis - elen;
7552 else if (precis == 0 && elen == 1 && *eptr == '0')
7557 /* FLOATING POINT */
7560 c = 'f'; /* maybe %F isn't supported here */
7566 /* This is evil, but floating point is even more evil */
7569 nv = args ? va_arg(*args, NV) : SvNVx(argsv);
7572 if (c != 'e' && c != 'E') {
7574 (void)Perl_frexp(nv, &i);
7575 if (i == PERL_INT_MIN)
7576 Perl_die(aTHX_ "panic: frexp");
7578 need = BIT_DIGITS(i);
7580 need += has_precis ? precis : 6; /* known default */
7584 need += 20; /* fudge factor */
7585 if (PL_efloatsize < need) {
7586 Safefree(PL_efloatbuf);
7587 PL_efloatsize = need + 20; /* more fudge */
7588 New(906, PL_efloatbuf, PL_efloatsize, char);
7589 PL_efloatbuf[0] = '\0';
7592 eptr = ebuf + sizeof ebuf;
7595 #if defined(USE_LONG_DOUBLE) && defined(PERL_PRIfldbl)
7597 /* Copy the one or more characters in a long double
7598 * format before the 'base' ([efgEFG]) character to
7599 * the format string. */
7600 static char const prifldbl[] = PERL_PRIfldbl;
7601 char const *p = prifldbl + sizeof(prifldbl) - 3;
7602 while (p >= prifldbl) { *--eptr = *p--; }
7607 do { *--eptr = '0' + (base % 10); } while (base /= 10);
7612 do { *--eptr = '0' + (base % 10); } while (base /= 10);
7624 /* No taint. Otherwise we are in the strange situation
7625 * where printf() taints but print($float) doesn't.
7627 (void)sprintf(PL_efloatbuf, eptr, nv);
7629 eptr = PL_efloatbuf;
7630 elen = strlen(PL_efloatbuf);
7637 i = SvCUR(sv) - origlen;
7640 case 'h': *(va_arg(*args, short*)) = i; break;
7641 default: *(va_arg(*args, int*)) = i; break;
7642 case 'l': *(va_arg(*args, long*)) = i; break;
7643 case 'V': *(va_arg(*args, IV*)) = i; break;
7645 case 'q': *(va_arg(*args, Quad_t*)) = i; break;
7650 sv_setuv_mg(argsv, (UV)i);
7651 continue; /* not "break" */
7658 if (!args && ckWARN(WARN_PRINTF) &&
7659 (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)) {
7660 SV *msg = sv_newmortal();
7661 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %s: ",
7662 (PL_op->op_type == OP_PRTF) ? "printf" : "sprintf");
7665 Perl_sv_catpvf(aTHX_ msg,
7666 "\"%%%c\"", c & 0xFF);
7668 Perl_sv_catpvf(aTHX_ msg,
7669 "\"%%\\%03"UVof"\"",
7672 sv_catpv(msg, "end of string");
7673 Perl_warner(aTHX_ WARN_PRINTF, "%"SVf, msg); /* yes, this is reentrant */
7676 /* output mangled stuff ... */
7682 /* ... right here, because formatting flags should not apply */
7683 SvGROW(sv, SvCUR(sv) + elen + 1);
7685 Copy(eptr, p, elen, char);
7688 SvCUR(sv) = p - SvPVX(sv);
7689 continue; /* not "break" */
7692 have = esignlen + zeros + elen;
7693 need = (have > width ? have : width);
7696 SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
7698 if (esignlen && fill == '0') {
7699 for (i = 0; i < esignlen; i++)
7703 memset(p, fill, gap);
7706 if (esignlen && fill != '0') {
7707 for (i = 0; i < esignlen; i++)
7711 for (i = zeros; i; i--)
7715 Copy(eptr, p, elen, char);
7719 memset(p, ' ', gap);
7724 Copy(dotstr, p, dotstrlen, char);
7728 vectorize = FALSE; /* done iterating over vecstr */
7733 SvCUR(sv) = p - SvPVX(sv);
7741 #if defined(USE_ITHREADS)
7743 #if defined(USE_THREADS)
7744 # include "error: USE_THREADS and USE_ITHREADS are incompatible"
7747 #ifndef GpREFCNT_inc
7748 # define GpREFCNT_inc(gp) ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
7752 #define sv_dup_inc(s) SvREFCNT_inc(sv_dup(s))
7753 #define av_dup(s) (AV*)sv_dup((SV*)s)
7754 #define av_dup_inc(s) (AV*)SvREFCNT_inc(sv_dup((SV*)s))
7755 #define hv_dup(s) (HV*)sv_dup((SV*)s)
7756 #define hv_dup_inc(s) (HV*)SvREFCNT_inc(sv_dup((SV*)s))
7757 #define cv_dup(s) (CV*)sv_dup((SV*)s)
7758 #define cv_dup_inc(s) (CV*)SvREFCNT_inc(sv_dup((SV*)s))
7759 #define io_dup(s) (IO*)sv_dup((SV*)s)
7760 #define io_dup_inc(s) (IO*)SvREFCNT_inc(sv_dup((SV*)s))
7761 #define gv_dup(s) (GV*)sv_dup((SV*)s)
7762 #define gv_dup_inc(s) (GV*)SvREFCNT_inc(sv_dup((SV*)s))
7763 #define SAVEPV(p) (p ? savepv(p) : Nullch)
7764 #define SAVEPVN(p,n) (p ? savepvn(p,n) : Nullch)
7767 Perl_re_dup(pTHX_ REGEXP *r)
7769 /* XXX fix when pmop->op_pmregexp becomes shared */
7770 return ReREFCNT_inc(r);
7774 Perl_fp_dup(pTHX_ PerlIO *fp, char type)
7778 return (PerlIO*)NULL;
7780 /* look for it in the table first */
7781 ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
7785 /* create anew and remember what it is */
7786 ret = PerlIO_fdupopen(aTHX_ fp);
7787 ptr_table_store(PL_ptr_table, fp, ret);
7792 Perl_dirp_dup(pTHX_ DIR *dp)
7801 Perl_gp_dup(pTHX_ GP *gp)
7806 /* look for it in the table first */
7807 ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
7811 /* create anew and remember what it is */
7812 Newz(0, ret, 1, GP);
7813 ptr_table_store(PL_ptr_table, gp, ret);
7816 ret->gp_refcnt = 0; /* must be before any other dups! */
7817 ret->gp_sv = sv_dup_inc(gp->gp_sv);
7818 ret->gp_io = io_dup_inc(gp->gp_io);
7819 ret->gp_form = cv_dup_inc(gp->gp_form);
7820 ret->gp_av = av_dup_inc(gp->gp_av);
7821 ret->gp_hv = hv_dup_inc(gp->gp_hv);
7822 ret->gp_egv = gv_dup(gp->gp_egv); /* GvEGV is not refcounted */
7823 ret->gp_cv = cv_dup_inc(gp->gp_cv);
7824 ret->gp_cvgen = gp->gp_cvgen;
7825 ret->gp_flags = gp->gp_flags;
7826 ret->gp_line = gp->gp_line;
7827 ret->gp_file = gp->gp_file; /* points to COP.cop_file */
7832 Perl_mg_dup(pTHX_ MAGIC *mg)
7834 MAGIC *mgprev = (MAGIC*)NULL;
7837 return (MAGIC*)NULL;
7838 /* look for it in the table first */
7839 mgret = (MAGIC*)ptr_table_fetch(PL_ptr_table, mg);
7843 for (; mg; mg = mg->mg_moremagic) {
7845 Newz(0, nmg, 1, MAGIC);
7847 mgprev->mg_moremagic = nmg;
7850 nmg->mg_virtual = mg->mg_virtual; /* XXX copy dynamic vtable? */
7851 nmg->mg_private = mg->mg_private;
7852 nmg->mg_type = mg->mg_type;
7853 nmg->mg_flags = mg->mg_flags;
7854 if (mg->mg_type == PERL_MAGIC_qr) {
7855 nmg->mg_obj = (SV*)re_dup((REGEXP*)mg->mg_obj);
7858 nmg->mg_obj = (mg->mg_flags & MGf_REFCOUNTED)
7859 ? sv_dup_inc(mg->mg_obj)
7860 : sv_dup(mg->mg_obj);
7862 nmg->mg_len = mg->mg_len;
7863 nmg->mg_ptr = mg->mg_ptr; /* XXX random ptr? */
7864 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
7865 if (mg->mg_len >= 0) {
7866 nmg->mg_ptr = SAVEPVN(mg->mg_ptr, mg->mg_len);
7867 if (mg->mg_type == PERL_MAGIC_overload_table &&
7868 AMT_AMAGIC((AMT*)mg->mg_ptr))
7870 AMT *amtp = (AMT*)mg->mg_ptr;
7871 AMT *namtp = (AMT*)nmg->mg_ptr;
7873 for (i = 1; i < NofAMmeth; i++) {
7874 namtp->table[i] = cv_dup_inc(amtp->table[i]);
7878 else if (mg->mg_len == HEf_SVKEY)
7879 nmg->mg_ptr = (char*)sv_dup_inc((SV*)mg->mg_ptr);
7887 Perl_ptr_table_new(pTHX)
7890 Newz(0, tbl, 1, PTR_TBL_t);
7893 Newz(0, tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
7898 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *tbl, void *sv)
7900 PTR_TBL_ENT_t *tblent;
7901 UV hash = PTR2UV(sv);
7903 tblent = tbl->tbl_ary[hash & tbl->tbl_max];
7904 for (; tblent; tblent = tblent->next) {
7905 if (tblent->oldval == sv)
7906 return tblent->newval;
7912 Perl_ptr_table_store(pTHX_ PTR_TBL_t *tbl, void *oldv, void *newv)
7914 PTR_TBL_ENT_t *tblent, **otblent;
7915 /* XXX this may be pessimal on platforms where pointers aren't good
7916 * hash values e.g. if they grow faster in the most significant
7918 UV hash = PTR2UV(oldv);
7922 otblent = &tbl->tbl_ary[hash & tbl->tbl_max];
7923 for (tblent = *otblent; tblent; i=0, tblent = tblent->next) {
7924 if (tblent->oldval == oldv) {
7925 tblent->newval = newv;
7930 Newz(0, tblent, 1, PTR_TBL_ENT_t);
7931 tblent->oldval = oldv;
7932 tblent->newval = newv;
7933 tblent->next = *otblent;
7936 if (i && tbl->tbl_items > tbl->tbl_max)
7937 ptr_table_split(tbl);
7941 Perl_ptr_table_split(pTHX_ PTR_TBL_t *tbl)
7943 PTR_TBL_ENT_t **ary = tbl->tbl_ary;
7944 UV oldsize = tbl->tbl_max + 1;
7945 UV newsize = oldsize * 2;
7948 Renew(ary, newsize, PTR_TBL_ENT_t*);
7949 Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
7950 tbl->tbl_max = --newsize;
7952 for (i=0; i < oldsize; i++, ary++) {
7953 PTR_TBL_ENT_t **curentp, **entp, *ent;
7956 curentp = ary + oldsize;
7957 for (entp = ary, ent = *ary; ent; ent = *entp) {
7958 if ((newsize & PTR2UV(ent->oldval)) != i) {
7960 ent->next = *curentp;
7971 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *tbl)
7973 register PTR_TBL_ENT_t **array;
7974 register PTR_TBL_ENT_t *entry;
7975 register PTR_TBL_ENT_t *oentry = Null(PTR_TBL_ENT_t*);
7979 if (!tbl || !tbl->tbl_items) {
7983 array = tbl->tbl_ary;
7990 entry = entry->next;
7994 if (++riter > max) {
7997 entry = array[riter];
8005 Perl_ptr_table_free(pTHX_ PTR_TBL_t *tbl)
8010 ptr_table_clear(tbl);
8011 Safefree(tbl->tbl_ary);
8020 S_gv_share(pTHX_ SV *sstr)
8023 SV *sv = &PL_sv_no; /* just need SvREADONLY-ness */
8025 if (GvIO(gv) || GvFORM(gv)) {
8026 GvSHARED_off(gv); /* GvIOs cannot be shared. nor can GvFORMs */
8028 else if (!GvCV(gv)) {
8032 /* CvPADLISTs cannot be shared */
8033 if (!CvXSUB(GvCV(gv))) {
8038 if (!GvSHARED(gv)) {
8040 PerlIO_printf(Perl_debug_log, "gv_share: unable to share %s::%s\n",
8041 HvNAME(GvSTASH(gv)), GvNAME(gv));
8047 * write attempts will die with
8048 * "Modification of a read-only value attempted"
8054 SvREADONLY_on(GvSV(gv));
8061 SvREADONLY_on(GvAV(gv));
8068 SvREADONLY_on(GvAV(gv));
8071 return sstr; /* he_dup() will SvREFCNT_inc() */
8075 Perl_sv_dup(pTHX_ SV *sstr)
8079 if (!sstr || SvTYPE(sstr) == SVTYPEMASK)
8081 /* look for it in the table first */
8082 dstr = (SV*)ptr_table_fetch(PL_ptr_table, sstr);
8086 /* create anew and remember what it is */
8088 ptr_table_store(PL_ptr_table, sstr, dstr);
8091 SvFLAGS(dstr) = SvFLAGS(sstr);
8092 SvFLAGS(dstr) &= ~SVf_OOK; /* don't propagate OOK hack */
8093 SvREFCNT(dstr) = 0; /* must be before any other dups! */
8096 if (SvANY(sstr) && PL_watch_pvx && SvPVX(sstr) == PL_watch_pvx)
8097 PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
8098 PL_watch_pvx, SvPVX(sstr));
8101 switch (SvTYPE(sstr)) {
8106 SvANY(dstr) = new_XIV();
8107 SvIVX(dstr) = SvIVX(sstr);
8110 SvANY(dstr) = new_XNV();
8111 SvNVX(dstr) = SvNVX(sstr);
8114 SvANY(dstr) = new_XRV();
8115 SvRV(dstr) = SvRV(sstr) && SvWEAKREF(SvRV(sstr))
8116 ? sv_dup(SvRV(sstr))
8117 : sv_dup_inc(SvRV(sstr));
8120 SvANY(dstr) = new_XPV();
8121 SvCUR(dstr) = SvCUR(sstr);
8122 SvLEN(dstr) = SvLEN(sstr);
8124 SvRV(dstr) = SvWEAKREF(SvRV(sstr))
8125 ? sv_dup(SvRV(sstr))
8126 : sv_dup_inc(SvRV(sstr));
8127 else if (SvPVX(sstr) && SvLEN(sstr))
8128 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
8130 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
8133 SvANY(dstr) = new_XPVIV();
8134 SvCUR(dstr) = SvCUR(sstr);
8135 SvLEN(dstr) = SvLEN(sstr);
8136 SvIVX(dstr) = SvIVX(sstr);
8138 SvRV(dstr) = SvWEAKREF(SvRV(sstr))
8139 ? sv_dup(SvRV(sstr))
8140 : sv_dup_inc(SvRV(sstr));
8141 else if (SvPVX(sstr) && SvLEN(sstr))
8142 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
8144 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
8147 SvANY(dstr) = new_XPVNV();
8148 SvCUR(dstr) = SvCUR(sstr);
8149 SvLEN(dstr) = SvLEN(sstr);
8150 SvIVX(dstr) = SvIVX(sstr);
8151 SvNVX(dstr) = SvNVX(sstr);
8153 SvRV(dstr) = SvWEAKREF(SvRV(sstr))
8154 ? sv_dup(SvRV(sstr))
8155 : sv_dup_inc(SvRV(sstr));
8156 else if (SvPVX(sstr) && SvLEN(sstr))
8157 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
8159 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
8162 SvANY(dstr) = new_XPVMG();
8163 SvCUR(dstr) = SvCUR(sstr);
8164 SvLEN(dstr) = SvLEN(sstr);
8165 SvIVX(dstr) = SvIVX(sstr);
8166 SvNVX(dstr) = SvNVX(sstr);
8167 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
8168 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
8170 SvRV(dstr) = SvWEAKREF(SvRV(sstr))
8171 ? sv_dup(SvRV(sstr))
8172 : sv_dup_inc(SvRV(sstr));
8173 else if (SvPVX(sstr) && SvLEN(sstr))
8174 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
8176 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
8179 SvANY(dstr) = new_XPVBM();
8180 SvCUR(dstr) = SvCUR(sstr);
8181 SvLEN(dstr) = SvLEN(sstr);
8182 SvIVX(dstr) = SvIVX(sstr);
8183 SvNVX(dstr) = SvNVX(sstr);
8184 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
8185 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
8187 SvRV(dstr) = SvWEAKREF(SvRV(sstr))
8188 ? sv_dup(SvRV(sstr))
8189 : sv_dup_inc(SvRV(sstr));
8190 else if (SvPVX(sstr) && SvLEN(sstr))
8191 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
8193 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
8194 BmRARE(dstr) = BmRARE(sstr);
8195 BmUSEFUL(dstr) = BmUSEFUL(sstr);
8196 BmPREVIOUS(dstr)= BmPREVIOUS(sstr);
8199 SvANY(dstr) = new_XPVLV();
8200 SvCUR(dstr) = SvCUR(sstr);
8201 SvLEN(dstr) = SvLEN(sstr);
8202 SvIVX(dstr) = SvIVX(sstr);
8203 SvNVX(dstr) = SvNVX(sstr);
8204 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
8205 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
8207 SvRV(dstr) = SvWEAKREF(SvRV(sstr))
8208 ? sv_dup(SvRV(sstr))
8209 : sv_dup_inc(SvRV(sstr));
8210 else if (SvPVX(sstr) && SvLEN(sstr))
8211 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
8213 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
8214 LvTARGOFF(dstr) = LvTARGOFF(sstr); /* XXX sometimes holds PMOP* when DEBUGGING */
8215 LvTARGLEN(dstr) = LvTARGLEN(sstr);
8216 LvTARG(dstr) = sv_dup_inc(LvTARG(sstr));
8217 LvTYPE(dstr) = LvTYPE(sstr);
8220 if (GvSHARED((GV*)sstr)) {
8222 if ((share = gv_share(sstr))) {
8226 PerlIO_printf(Perl_debug_log, "sv_dup: sharing %s::%s\n",
8227 HvNAME(GvSTASH(share)), GvNAME(share));
8232 SvANY(dstr) = new_XPVGV();
8233 SvCUR(dstr) = SvCUR(sstr);
8234 SvLEN(dstr) = SvLEN(sstr);
8235 SvIVX(dstr) = SvIVX(sstr);
8236 SvNVX(dstr) = SvNVX(sstr);
8237 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
8238 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
8240 SvRV(dstr) = SvWEAKREF(SvRV(sstr))
8241 ? sv_dup(SvRV(sstr))
8242 : sv_dup_inc(SvRV(sstr));
8243 else if (SvPVX(sstr) && SvLEN(sstr))
8244 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
8246 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
8247 GvNAMELEN(dstr) = GvNAMELEN(sstr);
8248 GvNAME(dstr) = SAVEPVN(GvNAME(sstr), GvNAMELEN(sstr));
8249 GvSTASH(dstr) = hv_dup_inc(GvSTASH(sstr));
8250 GvFLAGS(dstr) = GvFLAGS(sstr);
8251 GvGP(dstr) = gp_dup(GvGP(sstr));
8252 (void)GpREFCNT_inc(GvGP(dstr));
8255 SvANY(dstr) = new_XPVIO();
8256 SvCUR(dstr) = SvCUR(sstr);
8257 SvLEN(dstr) = SvLEN(sstr);
8258 SvIVX(dstr) = SvIVX(sstr);
8259 SvNVX(dstr) = SvNVX(sstr);
8260 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
8261 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
8263 SvRV(dstr) = SvWEAKREF(SvRV(sstr))
8264 ? sv_dup(SvRV(sstr))
8265 : sv_dup_inc(SvRV(sstr));
8266 else if (SvPVX(sstr) && SvLEN(sstr))
8267 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
8269 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
8270 IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(sstr));
8271 if (IoOFP(sstr) == IoIFP(sstr))
8272 IoOFP(dstr) = IoIFP(dstr);
8274 IoOFP(dstr) = fp_dup(IoOFP(sstr), IoTYPE(sstr));
8275 /* PL_rsfp_filters entries have fake IoDIRP() */
8276 if (IoDIRP(sstr) && !(IoFLAGS(sstr) & IOf_FAKE_DIRP))
8277 IoDIRP(dstr) = dirp_dup(IoDIRP(sstr));
8279 IoDIRP(dstr) = IoDIRP(sstr);
8280 IoLINES(dstr) = IoLINES(sstr);
8281 IoPAGE(dstr) = IoPAGE(sstr);
8282 IoPAGE_LEN(dstr) = IoPAGE_LEN(sstr);
8283 IoLINES_LEFT(dstr) = IoLINES_LEFT(sstr);
8284 IoTOP_NAME(dstr) = SAVEPV(IoTOP_NAME(sstr));
8285 IoTOP_GV(dstr) = gv_dup(IoTOP_GV(sstr));
8286 IoFMT_NAME(dstr) = SAVEPV(IoFMT_NAME(sstr));
8287 IoFMT_GV(dstr) = gv_dup(IoFMT_GV(sstr));
8288 IoBOTTOM_NAME(dstr) = SAVEPV(IoBOTTOM_NAME(sstr));
8289 IoBOTTOM_GV(dstr) = gv_dup(IoBOTTOM_GV(sstr));
8290 IoSUBPROCESS(dstr) = IoSUBPROCESS(sstr);
8291 IoTYPE(dstr) = IoTYPE(sstr);
8292 IoFLAGS(dstr) = IoFLAGS(sstr);
8295 SvANY(dstr) = new_XPVAV();
8296 SvCUR(dstr) = SvCUR(sstr);
8297 SvLEN(dstr) = SvLEN(sstr);
8298 SvIVX(dstr) = SvIVX(sstr);
8299 SvNVX(dstr) = SvNVX(sstr);
8300 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
8301 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
8302 AvARYLEN((AV*)dstr) = sv_dup_inc(AvARYLEN((AV*)sstr));
8303 AvFLAGS((AV*)dstr) = AvFLAGS((AV*)sstr);
8304 if (AvARRAY((AV*)sstr)) {
8305 SV **dst_ary, **src_ary;
8306 SSize_t items = AvFILLp((AV*)sstr) + 1;
8308 src_ary = AvARRAY((AV*)sstr);
8309 Newz(0, dst_ary, AvMAX((AV*)sstr)+1, SV*);
8310 ptr_table_store(PL_ptr_table, src_ary, dst_ary);
8311 SvPVX(dstr) = (char*)dst_ary;
8312 AvALLOC((AV*)dstr) = dst_ary;
8313 if (AvREAL((AV*)sstr)) {
8315 *dst_ary++ = sv_dup_inc(*src_ary++);
8319 *dst_ary++ = sv_dup(*src_ary++);
8321 items = AvMAX((AV*)sstr) - AvFILLp((AV*)sstr);
8322 while (items-- > 0) {
8323 *dst_ary++ = &PL_sv_undef;
8327 SvPVX(dstr) = Nullch;
8328 AvALLOC((AV*)dstr) = (SV**)NULL;
8332 SvANY(dstr) = new_XPVHV();
8333 SvCUR(dstr) = SvCUR(sstr);
8334 SvLEN(dstr) = SvLEN(sstr);
8335 SvIVX(dstr) = SvIVX(sstr);
8336 SvNVX(dstr) = SvNVX(sstr);
8337 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
8338 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
8339 HvRITER((HV*)dstr) = HvRITER((HV*)sstr);
8340 if (HvARRAY((HV*)sstr)) {
8342 XPVHV *dxhv = (XPVHV*)SvANY(dstr);
8343 XPVHV *sxhv = (XPVHV*)SvANY(sstr);
8344 Newz(0, dxhv->xhv_array,
8345 PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1), char);
8346 while (i <= sxhv->xhv_max) {
8347 ((HE**)dxhv->xhv_array)[i] = he_dup(((HE**)sxhv->xhv_array)[i],
8348 !!HvSHAREKEYS(sstr));
8351 dxhv->xhv_eiter = he_dup(sxhv->xhv_eiter, !!HvSHAREKEYS(sstr));
8354 SvPVX(dstr) = Nullch;
8355 HvEITER((HV*)dstr) = (HE*)NULL;
8357 HvPMROOT((HV*)dstr) = HvPMROOT((HV*)sstr); /* XXX */
8358 HvNAME((HV*)dstr) = SAVEPV(HvNAME((HV*)sstr));
8361 SvANY(dstr) = new_XPVFM();
8362 FmLINES(dstr) = FmLINES(sstr);
8366 SvANY(dstr) = new_XPVCV();
8368 SvCUR(dstr) = SvCUR(sstr);
8369 SvLEN(dstr) = SvLEN(sstr);
8370 SvIVX(dstr) = SvIVX(sstr);
8371 SvNVX(dstr) = SvNVX(sstr);
8372 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
8373 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
8374 if (SvPVX(sstr) && SvLEN(sstr))
8375 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
8377 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
8378 CvSTASH(dstr) = hv_dup(CvSTASH(sstr));/* NOTE: not refcounted */
8379 CvSTART(dstr) = CvSTART(sstr);
8380 CvROOT(dstr) = OpREFCNT_inc(CvROOT(sstr));
8381 CvXSUB(dstr) = CvXSUB(sstr);
8382 CvXSUBANY(dstr) = CvXSUBANY(sstr);
8383 CvGV(dstr) = gv_dup(CvGV(sstr));
8384 CvDEPTH(dstr) = CvDEPTH(sstr);
8385 if (CvPADLIST(sstr) && !AvREAL(CvPADLIST(sstr))) {
8386 /* XXX padlists are real, but pretend to be not */
8387 AvREAL_on(CvPADLIST(sstr));
8388 CvPADLIST(dstr) = av_dup_inc(CvPADLIST(sstr));
8389 AvREAL_off(CvPADLIST(sstr));
8390 AvREAL_off(CvPADLIST(dstr));
8393 CvPADLIST(dstr) = av_dup_inc(CvPADLIST(sstr));
8394 if (!CvANON(sstr) || CvCLONED(sstr))
8395 CvOUTSIDE(dstr) = cv_dup_inc(CvOUTSIDE(sstr));
8397 CvOUTSIDE(dstr) = cv_dup(CvOUTSIDE(sstr));
8398 CvFLAGS(dstr) = CvFLAGS(sstr);
8401 Perl_croak(aTHX_ "Bizarre SvTYPE [%d]", SvTYPE(sstr));
8405 if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
8412 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max)
8417 return (PERL_CONTEXT*)NULL;
8419 /* look for it in the table first */
8420 ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
8424 /* create anew and remember what it is */
8425 Newz(56, ncxs, max + 1, PERL_CONTEXT);
8426 ptr_table_store(PL_ptr_table, cxs, ncxs);
8429 PERL_CONTEXT *cx = &cxs[ix];
8430 PERL_CONTEXT *ncx = &ncxs[ix];
8431 ncx->cx_type = cx->cx_type;
8432 if (CxTYPE(cx) == CXt_SUBST) {
8433 Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
8436 ncx->blk_oldsp = cx->blk_oldsp;
8437 ncx->blk_oldcop = cx->blk_oldcop;
8438 ncx->blk_oldretsp = cx->blk_oldretsp;
8439 ncx->blk_oldmarksp = cx->blk_oldmarksp;
8440 ncx->blk_oldscopesp = cx->blk_oldscopesp;
8441 ncx->blk_oldpm = cx->blk_oldpm;
8442 ncx->blk_gimme = cx->blk_gimme;
8443 switch (CxTYPE(cx)) {
8445 ncx->blk_sub.cv = (cx->blk_sub.olddepth == 0
8446 ? cv_dup_inc(cx->blk_sub.cv)
8447 : cv_dup(cx->blk_sub.cv));
8448 ncx->blk_sub.argarray = (cx->blk_sub.hasargs
8449 ? av_dup_inc(cx->blk_sub.argarray)
8451 ncx->blk_sub.savearray = av_dup_inc(cx->blk_sub.savearray);
8452 ncx->blk_sub.olddepth = cx->blk_sub.olddepth;
8453 ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
8454 ncx->blk_sub.lval = cx->blk_sub.lval;
8457 ncx->blk_eval.old_in_eval = cx->blk_eval.old_in_eval;
8458 ncx->blk_eval.old_op_type = cx->blk_eval.old_op_type;
8459 ncx->blk_eval.old_namesv = sv_dup_inc(cx->blk_eval.old_namesv);
8460 ncx->blk_eval.old_eval_root = cx->blk_eval.old_eval_root;
8461 ncx->blk_eval.cur_text = sv_dup(cx->blk_eval.cur_text);
8464 ncx->blk_loop.label = cx->blk_loop.label;
8465 ncx->blk_loop.resetsp = cx->blk_loop.resetsp;
8466 ncx->blk_loop.redo_op = cx->blk_loop.redo_op;
8467 ncx->blk_loop.next_op = cx->blk_loop.next_op;
8468 ncx->blk_loop.last_op = cx->blk_loop.last_op;
8469 ncx->blk_loop.iterdata = (CxPADLOOP(cx)
8470 ? cx->blk_loop.iterdata
8471 : gv_dup((GV*)cx->blk_loop.iterdata));
8472 ncx->blk_loop.oldcurpad
8473 = (SV**)ptr_table_fetch(PL_ptr_table,
8474 cx->blk_loop.oldcurpad);
8475 ncx->blk_loop.itersave = sv_dup_inc(cx->blk_loop.itersave);
8476 ncx->blk_loop.iterlval = sv_dup_inc(cx->blk_loop.iterlval);
8477 ncx->blk_loop.iterary = av_dup_inc(cx->blk_loop.iterary);
8478 ncx->blk_loop.iterix = cx->blk_loop.iterix;
8479 ncx->blk_loop.itermax = cx->blk_loop.itermax;
8482 ncx->blk_sub.cv = cv_dup(cx->blk_sub.cv);
8483 ncx->blk_sub.gv = gv_dup(cx->blk_sub.gv);
8484 ncx->blk_sub.dfoutgv = gv_dup_inc(cx->blk_sub.dfoutgv);
8485 ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
8498 Perl_si_dup(pTHX_ PERL_SI *si)
8503 return (PERL_SI*)NULL;
8505 /* look for it in the table first */
8506 nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
8510 /* create anew and remember what it is */
8511 Newz(56, nsi, 1, PERL_SI);
8512 ptr_table_store(PL_ptr_table, si, nsi);
8514 nsi->si_stack = av_dup_inc(si->si_stack);
8515 nsi->si_cxix = si->si_cxix;
8516 nsi->si_cxmax = si->si_cxmax;
8517 nsi->si_cxstack = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax);
8518 nsi->si_type = si->si_type;
8519 nsi->si_prev = si_dup(si->si_prev);
8520 nsi->si_next = si_dup(si->si_next);
8521 nsi->si_markoff = si->si_markoff;
8526 #define POPINT(ss,ix) ((ss)[--(ix)].any_i32)
8527 #define TOPINT(ss,ix) ((ss)[ix].any_i32)
8528 #define POPLONG(ss,ix) ((ss)[--(ix)].any_long)
8529 #define TOPLONG(ss,ix) ((ss)[ix].any_long)
8530 #define POPIV(ss,ix) ((ss)[--(ix)].any_iv)
8531 #define TOPIV(ss,ix) ((ss)[ix].any_iv)
8532 #define POPPTR(ss,ix) ((ss)[--(ix)].any_ptr)
8533 #define TOPPTR(ss,ix) ((ss)[ix].any_ptr)
8534 #define POPDPTR(ss,ix) ((ss)[--(ix)].any_dptr)
8535 #define TOPDPTR(ss,ix) ((ss)[ix].any_dptr)
8536 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
8537 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
8540 #define pv_dup_inc(p) SAVEPV(p)
8541 #define pv_dup(p) SAVEPV(p)
8542 #define svp_dup_inc(p,pp) any_dup(p,pp)
8545 Perl_any_dup(pTHX_ void *v, PerlInterpreter *proto_perl)
8552 /* look for it in the table first */
8553 ret = ptr_table_fetch(PL_ptr_table, v);
8557 /* see if it is part of the interpreter structure */
8558 if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
8559 ret = (void*)(((char*)aTHXo) + (((char*)v) - (char*)proto_perl));
8567 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl)
8569 ANY *ss = proto_perl->Tsavestack;
8570 I32 ix = proto_perl->Tsavestack_ix;
8571 I32 max = proto_perl->Tsavestack_max;
8584 void (*dptr) (void*);
8585 void (*dxptr) (pTHXo_ void*);
8588 Newz(54, nss, max, ANY);
8594 case SAVEt_ITEM: /* normal string */
8595 sv = (SV*)POPPTR(ss,ix);
8596 TOPPTR(nss,ix) = sv_dup_inc(sv);
8597 sv = (SV*)POPPTR(ss,ix);
8598 TOPPTR(nss,ix) = sv_dup_inc(sv);
8600 case SAVEt_SV: /* scalar reference */
8601 sv = (SV*)POPPTR(ss,ix);
8602 TOPPTR(nss,ix) = sv_dup_inc(sv);
8603 gv = (GV*)POPPTR(ss,ix);
8604 TOPPTR(nss,ix) = gv_dup_inc(gv);
8606 case SAVEt_GENERIC_PVREF: /* generic char* */
8607 c = (char*)POPPTR(ss,ix);
8608 TOPPTR(nss,ix) = pv_dup(c);
8609 ptr = POPPTR(ss,ix);
8610 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8612 case SAVEt_GENERIC_SVREF: /* generic sv */
8613 case SAVEt_SVREF: /* scalar reference */
8614 sv = (SV*)POPPTR(ss,ix);
8615 TOPPTR(nss,ix) = sv_dup_inc(sv);
8616 ptr = POPPTR(ss,ix);
8617 TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
8619 case SAVEt_AV: /* array reference */
8620 av = (AV*)POPPTR(ss,ix);
8621 TOPPTR(nss,ix) = av_dup_inc(av);
8622 gv = (GV*)POPPTR(ss,ix);
8623 TOPPTR(nss,ix) = gv_dup(gv);
8625 case SAVEt_HV: /* hash reference */
8626 hv = (HV*)POPPTR(ss,ix);
8627 TOPPTR(nss,ix) = hv_dup_inc(hv);
8628 gv = (GV*)POPPTR(ss,ix);
8629 TOPPTR(nss,ix) = gv_dup(gv);
8631 case SAVEt_INT: /* int reference */
8632 ptr = POPPTR(ss,ix);
8633 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8634 intval = (int)POPINT(ss,ix);
8635 TOPINT(nss,ix) = intval;
8637 case SAVEt_LONG: /* long reference */
8638 ptr = POPPTR(ss,ix);
8639 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8640 longval = (long)POPLONG(ss,ix);
8641 TOPLONG(nss,ix) = longval;
8643 case SAVEt_I32: /* I32 reference */
8644 case SAVEt_I16: /* I16 reference */
8645 case SAVEt_I8: /* I8 reference */
8646 ptr = POPPTR(ss,ix);
8647 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8651 case SAVEt_IV: /* IV reference */
8652 ptr = POPPTR(ss,ix);
8653 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8657 case SAVEt_SPTR: /* SV* reference */
8658 ptr = POPPTR(ss,ix);
8659 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8660 sv = (SV*)POPPTR(ss,ix);
8661 TOPPTR(nss,ix) = sv_dup(sv);
8663 case SAVEt_VPTR: /* random* reference */
8664 ptr = POPPTR(ss,ix);
8665 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8666 ptr = POPPTR(ss,ix);
8667 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8669 case SAVEt_PPTR: /* char* reference */
8670 ptr = POPPTR(ss,ix);
8671 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8672 c = (char*)POPPTR(ss,ix);
8673 TOPPTR(nss,ix) = pv_dup(c);
8675 case SAVEt_HPTR: /* HV* reference */
8676 ptr = POPPTR(ss,ix);
8677 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8678 hv = (HV*)POPPTR(ss,ix);
8679 TOPPTR(nss,ix) = hv_dup(hv);
8681 case SAVEt_APTR: /* AV* reference */
8682 ptr = POPPTR(ss,ix);
8683 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8684 av = (AV*)POPPTR(ss,ix);
8685 TOPPTR(nss,ix) = av_dup(av);
8688 gv = (GV*)POPPTR(ss,ix);
8689 TOPPTR(nss,ix) = gv_dup(gv);
8691 case SAVEt_GP: /* scalar reference */
8692 gp = (GP*)POPPTR(ss,ix);
8693 TOPPTR(nss,ix) = gp = gp_dup(gp);
8694 (void)GpREFCNT_inc(gp);
8695 gv = (GV*)POPPTR(ss,ix);
8696 TOPPTR(nss,ix) = gv_dup_inc(c);
8697 c = (char*)POPPTR(ss,ix);
8698 TOPPTR(nss,ix) = pv_dup(c);
8705 case SAVEt_MORTALIZESV:
8706 sv = (SV*)POPPTR(ss,ix);
8707 TOPPTR(nss,ix) = sv_dup_inc(sv);
8710 ptr = POPPTR(ss,ix);
8711 if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
8712 /* these are assumed to be refcounted properly */
8713 switch (((OP*)ptr)->op_type) {
8720 TOPPTR(nss,ix) = ptr;
8725 TOPPTR(nss,ix) = Nullop;
8730 TOPPTR(nss,ix) = Nullop;
8733 c = (char*)POPPTR(ss,ix);
8734 TOPPTR(nss,ix) = pv_dup_inc(c);
8737 longval = POPLONG(ss,ix);
8738 TOPLONG(nss,ix) = longval;
8741 hv = (HV*)POPPTR(ss,ix);
8742 TOPPTR(nss,ix) = hv_dup_inc(hv);
8743 c = (char*)POPPTR(ss,ix);
8744 TOPPTR(nss,ix) = pv_dup_inc(c);
8748 case SAVEt_DESTRUCTOR:
8749 ptr = POPPTR(ss,ix);
8750 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
8751 dptr = POPDPTR(ss,ix);
8752 TOPDPTR(nss,ix) = (void (*)(void*))any_dup((void *)dptr, proto_perl);
8754 case SAVEt_DESTRUCTOR_X:
8755 ptr = POPPTR(ss,ix);
8756 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
8757 dxptr = POPDXPTR(ss,ix);
8758 TOPDXPTR(nss,ix) = (void (*)(pTHXo_ void*))any_dup((void *)dxptr, proto_perl);
8760 case SAVEt_REGCONTEXT:
8766 case SAVEt_STACK_POS: /* Position on Perl stack */
8770 case SAVEt_AELEM: /* array element */
8771 sv = (SV*)POPPTR(ss,ix);
8772 TOPPTR(nss,ix) = sv_dup_inc(sv);
8775 av = (AV*)POPPTR(ss,ix);
8776 TOPPTR(nss,ix) = av_dup_inc(av);
8778 case SAVEt_HELEM: /* hash element */
8779 sv = (SV*)POPPTR(ss,ix);
8780 TOPPTR(nss,ix) = sv_dup_inc(sv);
8781 sv = (SV*)POPPTR(ss,ix);
8782 TOPPTR(nss,ix) = sv_dup_inc(sv);
8783 hv = (HV*)POPPTR(ss,ix);
8784 TOPPTR(nss,ix) = hv_dup_inc(hv);
8787 ptr = POPPTR(ss,ix);
8788 TOPPTR(nss,ix) = ptr;
8795 av = (AV*)POPPTR(ss,ix);
8796 TOPPTR(nss,ix) = av_dup(av);
8799 longval = (long)POPLONG(ss,ix);
8800 TOPLONG(nss,ix) = longval;
8801 ptr = POPPTR(ss,ix);
8802 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8803 sv = (SV*)POPPTR(ss,ix);
8804 TOPPTR(nss,ix) = sv_dup(sv);
8807 Perl_croak(aTHX_ "panic: ss_dup inconsistency");
8819 perl_clone(PerlInterpreter *proto_perl, UV flags)
8822 CPerlObj *pPerl = (CPerlObj*)proto_perl;
8825 #ifdef PERL_IMPLICIT_SYS
8826 return perl_clone_using(proto_perl, flags,
8828 proto_perl->IMemShared,
8829 proto_perl->IMemParse,
8839 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
8840 struct IPerlMem* ipM, struct IPerlMem* ipMS,
8841 struct IPerlMem* ipMP, struct IPerlEnv* ipE,
8842 struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
8843 struct IPerlDir* ipD, struct IPerlSock* ipS,
8844 struct IPerlProc* ipP)
8846 /* XXX many of the string copies here can be optimized if they're
8847 * constants; they need to be allocated as common memory and just
8848 * their pointers copied. */
8852 CPerlObj *pPerl = new(ipM) CPerlObj(ipM, ipMS, ipMP, ipE, ipStd, ipLIO,
8854 PERL_SET_THX(pPerl);
8855 # else /* !PERL_OBJECT */
8856 PerlInterpreter *my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
8857 PERL_SET_THX(my_perl);
8860 memset(my_perl, 0xab, sizeof(PerlInterpreter));
8866 # else /* !DEBUGGING */
8867 Zero(my_perl, 1, PerlInterpreter);
8868 # endif /* DEBUGGING */
8872 PL_MemShared = ipMS;
8880 # endif /* PERL_OBJECT */
8881 #else /* !PERL_IMPLICIT_SYS */
8883 PerlInterpreter *my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
8884 PERL_SET_THX(my_perl);
8887 memset(my_perl, 0xab, sizeof(PerlInterpreter));
8893 # else /* !DEBUGGING */
8894 Zero(my_perl, 1, PerlInterpreter);
8895 # endif /* DEBUGGING */
8896 #endif /* PERL_IMPLICIT_SYS */
8899 PL_xiv_arenaroot = NULL;
8901 PL_xnv_arenaroot = NULL;
8903 PL_xrv_arenaroot = NULL;
8905 PL_xpv_arenaroot = NULL;
8907 PL_xpviv_arenaroot = NULL;
8908 PL_xpviv_root = NULL;
8909 PL_xpvnv_arenaroot = NULL;
8910 PL_xpvnv_root = NULL;
8911 PL_xpvcv_arenaroot = NULL;
8912 PL_xpvcv_root = NULL;
8913 PL_xpvav_arenaroot = NULL;
8914 PL_xpvav_root = NULL;
8915 PL_xpvhv_arenaroot = NULL;
8916 PL_xpvhv_root = NULL;
8917 PL_xpvmg_arenaroot = NULL;
8918 PL_xpvmg_root = NULL;
8919 PL_xpvlv_arenaroot = NULL;
8920 PL_xpvlv_root = NULL;
8921 PL_xpvbm_arenaroot = NULL;
8922 PL_xpvbm_root = NULL;
8923 PL_he_arenaroot = NULL;
8925 PL_nice_chunk = NULL;
8926 PL_nice_chunk_size = 0;
8929 PL_sv_root = Nullsv;
8930 PL_sv_arenaroot = Nullsv;
8932 PL_debug = proto_perl->Idebug;
8934 /* create SV map for pointer relocation */
8935 PL_ptr_table = ptr_table_new();
8937 /* initialize these special pointers as early as possible */
8938 SvANY(&PL_sv_undef) = NULL;
8939 SvREFCNT(&PL_sv_undef) = (~(U32)0)/2;
8940 SvFLAGS(&PL_sv_undef) = SVf_READONLY|SVt_NULL;
8941 ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
8944 SvUPGRADE(&PL_sv_no, SVt_PVNV);
8946 SvANY(&PL_sv_no) = new_XPVNV();
8948 SvREFCNT(&PL_sv_no) = (~(U32)0)/2;
8949 SvFLAGS(&PL_sv_no) = SVp_NOK|SVf_NOK|SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
8950 SvPVX(&PL_sv_no) = SAVEPVN(PL_No, 0);
8951 SvCUR(&PL_sv_no) = 0;
8952 SvLEN(&PL_sv_no) = 1;
8953 SvNVX(&PL_sv_no) = 0;
8954 ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
8957 SvUPGRADE(&PL_sv_yes, SVt_PVNV);
8959 SvANY(&PL_sv_yes) = new_XPVNV();
8961 SvREFCNT(&PL_sv_yes) = (~(U32)0)/2;
8962 SvFLAGS(&PL_sv_yes) = SVp_NOK|SVf_NOK|SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
8963 SvPVX(&PL_sv_yes) = SAVEPVN(PL_Yes, 1);
8964 SvCUR(&PL_sv_yes) = 1;
8965 SvLEN(&PL_sv_yes) = 2;
8966 SvNVX(&PL_sv_yes) = 1;
8967 ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
8969 /* create shared string table */
8970 PL_strtab = newHV();
8971 HvSHAREKEYS_off(PL_strtab);
8972 hv_ksplit(PL_strtab, 512);
8973 ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
8975 PL_compiling = proto_perl->Icompiling;
8976 PL_compiling.cop_stashpv = SAVEPV(PL_compiling.cop_stashpv);
8977 PL_compiling.cop_file = SAVEPV(PL_compiling.cop_file);
8978 ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
8979 if (!specialWARN(PL_compiling.cop_warnings))
8980 PL_compiling.cop_warnings = sv_dup_inc(PL_compiling.cop_warnings);
8981 if (!specialCopIO(PL_compiling.cop_io))
8982 PL_compiling.cop_io = sv_dup_inc(PL_compiling.cop_io);
8983 PL_curcop = (COP*)any_dup(proto_perl->Tcurcop, proto_perl);
8985 /* pseudo environmental stuff */
8986 PL_origargc = proto_perl->Iorigargc;
8988 New(0, PL_origargv, i+1, char*);
8989 PL_origargv[i] = '\0';
8991 PL_origargv[i] = SAVEPV(proto_perl->Iorigargv[i]);
8993 PL_envgv = gv_dup(proto_perl->Ienvgv);
8994 PL_incgv = gv_dup(proto_perl->Iincgv);
8995 PL_hintgv = gv_dup(proto_perl->Ihintgv);
8996 PL_origfilename = SAVEPV(proto_perl->Iorigfilename);
8997 PL_diehook = sv_dup_inc(proto_perl->Idiehook);
8998 PL_warnhook = sv_dup_inc(proto_perl->Iwarnhook);
9001 PL_minus_c = proto_perl->Iminus_c;
9002 PL_patchlevel = sv_dup_inc(proto_perl->Ipatchlevel);
9003 PL_localpatches = proto_perl->Ilocalpatches;
9004 PL_splitstr = proto_perl->Isplitstr;
9005 PL_preprocess = proto_perl->Ipreprocess;
9006 PL_minus_n = proto_perl->Iminus_n;
9007 PL_minus_p = proto_perl->Iminus_p;
9008 PL_minus_l = proto_perl->Iminus_l;
9009 PL_minus_a = proto_perl->Iminus_a;
9010 PL_minus_F = proto_perl->Iminus_F;
9011 PL_doswitches = proto_perl->Idoswitches;
9012 PL_dowarn = proto_perl->Idowarn;
9013 PL_doextract = proto_perl->Idoextract;
9014 PL_sawampersand = proto_perl->Isawampersand;
9015 PL_unsafe = proto_perl->Iunsafe;
9016 PL_inplace = SAVEPV(proto_perl->Iinplace);
9017 PL_e_script = sv_dup_inc(proto_perl->Ie_script);
9018 PL_perldb = proto_perl->Iperldb;
9019 PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
9021 /* magical thingies */
9022 /* XXX time(&PL_basetime) when asked for? */
9023 PL_basetime = proto_perl->Ibasetime;
9024 PL_formfeed = sv_dup(proto_perl->Iformfeed);
9026 PL_maxsysfd = proto_perl->Imaxsysfd;
9027 PL_multiline = proto_perl->Imultiline;
9028 PL_statusvalue = proto_perl->Istatusvalue;
9030 PL_statusvalue_vms = proto_perl->Istatusvalue_vms;
9033 /* shortcuts to various I/O objects */
9034 PL_stdingv = gv_dup(proto_perl->Istdingv);
9035 PL_stderrgv = gv_dup(proto_perl->Istderrgv);
9036 PL_defgv = gv_dup(proto_perl->Idefgv);
9037 PL_argvgv = gv_dup(proto_perl->Iargvgv);
9038 PL_argvoutgv = gv_dup(proto_perl->Iargvoutgv);
9039 PL_argvout_stack = av_dup_inc(proto_perl->Iargvout_stack);
9041 /* shortcuts to regexp stuff */
9042 PL_replgv = gv_dup(proto_perl->Ireplgv);
9044 /* shortcuts to misc objects */
9045 PL_errgv = gv_dup(proto_perl->Ierrgv);
9047 /* shortcuts to debugging objects */
9048 PL_DBgv = gv_dup(proto_perl->IDBgv);
9049 PL_DBline = gv_dup(proto_perl->IDBline);
9050 PL_DBsub = gv_dup(proto_perl->IDBsub);
9051 PL_DBsingle = sv_dup(proto_perl->IDBsingle);
9052 PL_DBtrace = sv_dup(proto_perl->IDBtrace);
9053 PL_DBsignal = sv_dup(proto_perl->IDBsignal);
9054 PL_lineary = av_dup(proto_perl->Ilineary);
9055 PL_dbargs = av_dup(proto_perl->Idbargs);
9058 PL_defstash = hv_dup_inc(proto_perl->Tdefstash);
9059 PL_curstash = hv_dup(proto_perl->Tcurstash);
9060 PL_debstash = hv_dup(proto_perl->Idebstash);
9061 PL_globalstash = hv_dup(proto_perl->Iglobalstash);
9062 PL_curstname = sv_dup_inc(proto_perl->Icurstname);
9064 PL_beginav = av_dup_inc(proto_perl->Ibeginav);
9065 PL_endav = av_dup_inc(proto_perl->Iendav);
9066 PL_checkav = av_dup_inc(proto_perl->Icheckav);
9067 PL_initav = av_dup_inc(proto_perl->Iinitav);
9069 PL_sub_generation = proto_perl->Isub_generation;
9071 /* funky return mechanisms */
9072 PL_forkprocess = proto_perl->Iforkprocess;
9074 /* subprocess state */
9075 PL_fdpid = av_dup_inc(proto_perl->Ifdpid);
9077 /* internal state */
9078 PL_tainting = proto_perl->Itainting;
9079 PL_maxo = proto_perl->Imaxo;
9080 if (proto_perl->Iop_mask)
9081 PL_op_mask = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
9083 PL_op_mask = Nullch;
9085 /* current interpreter roots */
9086 PL_main_cv = cv_dup_inc(proto_perl->Imain_cv);
9087 PL_main_root = OpREFCNT_inc(proto_perl->Imain_root);
9088 PL_main_start = proto_perl->Imain_start;
9089 PL_eval_root = proto_perl->Ieval_root;
9090 PL_eval_start = proto_perl->Ieval_start;
9092 /* runtime control stuff */
9093 PL_curcopdb = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
9094 PL_copline = proto_perl->Icopline;
9096 PL_filemode = proto_perl->Ifilemode;
9097 PL_lastfd = proto_perl->Ilastfd;
9098 PL_oldname = proto_perl->Ioldname; /* XXX not quite right */
9101 PL_gensym = proto_perl->Igensym;
9102 PL_preambled = proto_perl->Ipreambled;
9103 PL_preambleav = av_dup_inc(proto_perl->Ipreambleav);
9104 PL_laststatval = proto_perl->Ilaststatval;
9105 PL_laststype = proto_perl->Ilaststype;
9106 PL_mess_sv = Nullsv;
9108 PL_ors_sv = sv_dup_inc(proto_perl->Iors_sv);
9109 PL_ofmt = SAVEPV(proto_perl->Iofmt);
9111 /* interpreter atexit processing */
9112 PL_exitlistlen = proto_perl->Iexitlistlen;
9113 if (PL_exitlistlen) {
9114 New(0, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
9115 Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
9118 PL_exitlist = (PerlExitListEntry*)NULL;
9119 PL_modglobal = hv_dup_inc(proto_perl->Imodglobal);
9121 PL_profiledata = NULL;
9122 PL_rsfp = fp_dup(proto_perl->Irsfp, '<');
9123 /* PL_rsfp_filters entries have fake IoDIRP() */
9124 PL_rsfp_filters = av_dup_inc(proto_perl->Irsfp_filters);
9126 PL_compcv = cv_dup(proto_perl->Icompcv);
9127 PL_comppad = av_dup(proto_perl->Icomppad);
9128 PL_comppad_name = av_dup(proto_perl->Icomppad_name);
9129 PL_comppad_name_fill = proto_perl->Icomppad_name_fill;
9130 PL_comppad_name_floor = proto_perl->Icomppad_name_floor;
9131 PL_curpad = (SV**)ptr_table_fetch(PL_ptr_table,
9132 proto_perl->Tcurpad);
9134 #ifdef HAVE_INTERP_INTERN
9135 sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
9138 /* more statics moved here */
9139 PL_generation = proto_perl->Igeneration;
9140 PL_DBcv = cv_dup(proto_perl->IDBcv);
9142 PL_in_clean_objs = proto_perl->Iin_clean_objs;
9143 PL_in_clean_all = proto_perl->Iin_clean_all;
9145 PL_uid = proto_perl->Iuid;
9146 PL_euid = proto_perl->Ieuid;
9147 PL_gid = proto_perl->Igid;
9148 PL_egid = proto_perl->Iegid;
9149 PL_nomemok = proto_perl->Inomemok;
9150 PL_an = proto_perl->Ian;
9151 PL_cop_seqmax = proto_perl->Icop_seqmax;
9152 PL_op_seqmax = proto_perl->Iop_seqmax;
9153 PL_evalseq = proto_perl->Ievalseq;
9154 PL_origenviron = proto_perl->Iorigenviron; /* XXX not quite right */
9155 PL_origalen = proto_perl->Iorigalen;
9156 PL_pidstatus = newHV(); /* XXX flag for cloning? */
9157 PL_osname = SAVEPV(proto_perl->Iosname);
9158 PL_sh_path = SAVEPV(proto_perl->Ish_path);
9159 PL_sighandlerp = proto_perl->Isighandlerp;
9162 PL_runops = proto_perl->Irunops;
9164 Copy(proto_perl->Itokenbuf, PL_tokenbuf, 256, char);
9167 PL_cshlen = proto_perl->Icshlen;
9168 PL_cshname = SAVEPVN(proto_perl->Icshname, PL_cshlen);
9171 PL_lex_state = proto_perl->Ilex_state;
9172 PL_lex_defer = proto_perl->Ilex_defer;
9173 PL_lex_expect = proto_perl->Ilex_expect;
9174 PL_lex_formbrack = proto_perl->Ilex_formbrack;
9175 PL_lex_dojoin = proto_perl->Ilex_dojoin;
9176 PL_lex_starts = proto_perl->Ilex_starts;
9177 PL_lex_stuff = sv_dup_inc(proto_perl->Ilex_stuff);
9178 PL_lex_repl = sv_dup_inc(proto_perl->Ilex_repl);
9179 PL_lex_op = proto_perl->Ilex_op;
9180 PL_lex_inpat = proto_perl->Ilex_inpat;
9181 PL_lex_inwhat = proto_perl->Ilex_inwhat;
9182 PL_lex_brackets = proto_perl->Ilex_brackets;
9183 i = (PL_lex_brackets < 120 ? 120 : PL_lex_brackets);
9184 PL_lex_brackstack = SAVEPVN(proto_perl->Ilex_brackstack,i);
9185 PL_lex_casemods = proto_perl->Ilex_casemods;
9186 i = (PL_lex_casemods < 12 ? 12 : PL_lex_casemods);
9187 PL_lex_casestack = SAVEPVN(proto_perl->Ilex_casestack,i);
9189 Copy(proto_perl->Inextval, PL_nextval, 5, YYSTYPE);
9190 Copy(proto_perl->Inexttype, PL_nexttype, 5, I32);
9191 PL_nexttoke = proto_perl->Inexttoke;
9193 PL_linestr = sv_dup_inc(proto_perl->Ilinestr);
9194 i = proto_perl->Ibufptr - SvPVX(proto_perl->Ilinestr);
9195 PL_bufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
9196 i = proto_perl->Ioldbufptr - SvPVX(proto_perl->Ilinestr);
9197 PL_oldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
9198 i = proto_perl->Ioldoldbufptr - SvPVX(proto_perl->Ilinestr);
9199 PL_oldoldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
9200 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
9201 i = proto_perl->Ilinestart - SvPVX(proto_perl->Ilinestr);
9202 PL_linestart = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
9203 PL_pending_ident = proto_perl->Ipending_ident;
9204 PL_sublex_info = proto_perl->Isublex_info; /* XXX not quite right */
9206 PL_expect = proto_perl->Iexpect;
9208 PL_multi_start = proto_perl->Imulti_start;
9209 PL_multi_end = proto_perl->Imulti_end;
9210 PL_multi_open = proto_perl->Imulti_open;
9211 PL_multi_close = proto_perl->Imulti_close;
9213 PL_error_count = proto_perl->Ierror_count;
9214 PL_subline = proto_perl->Isubline;
9215 PL_subname = sv_dup_inc(proto_perl->Isubname);
9217 PL_min_intro_pending = proto_perl->Imin_intro_pending;
9218 PL_max_intro_pending = proto_perl->Imax_intro_pending;
9219 PL_padix = proto_perl->Ipadix;
9220 PL_padix_floor = proto_perl->Ipadix_floor;
9221 PL_pad_reset_pending = proto_perl->Ipad_reset_pending;
9223 i = proto_perl->Ilast_uni - SvPVX(proto_perl->Ilinestr);
9224 PL_last_uni = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
9225 i = proto_perl->Ilast_lop - SvPVX(proto_perl->Ilinestr);
9226 PL_last_lop = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
9227 PL_last_lop_op = proto_perl->Ilast_lop_op;
9228 PL_in_my = proto_perl->Iin_my;
9229 PL_in_my_stash = hv_dup(proto_perl->Iin_my_stash);
9231 PL_cryptseen = proto_perl->Icryptseen;
9234 PL_hints = proto_perl->Ihints;
9236 PL_amagic_generation = proto_perl->Iamagic_generation;
9238 #ifdef USE_LOCALE_COLLATE
9239 PL_collation_ix = proto_perl->Icollation_ix;
9240 PL_collation_name = SAVEPV(proto_perl->Icollation_name);
9241 PL_collation_standard = proto_perl->Icollation_standard;
9242 PL_collxfrm_base = proto_perl->Icollxfrm_base;
9243 PL_collxfrm_mult = proto_perl->Icollxfrm_mult;
9244 #endif /* USE_LOCALE_COLLATE */
9246 #ifdef USE_LOCALE_NUMERIC
9247 PL_numeric_name = SAVEPV(proto_perl->Inumeric_name);
9248 PL_numeric_standard = proto_perl->Inumeric_standard;
9249 PL_numeric_local = proto_perl->Inumeric_local;
9250 PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv);
9251 #endif /* !USE_LOCALE_NUMERIC */
9253 /* utf8 character classes */
9254 PL_utf8_alnum = sv_dup_inc(proto_perl->Iutf8_alnum);
9255 PL_utf8_alnumc = sv_dup_inc(proto_perl->Iutf8_alnumc);
9256 PL_utf8_ascii = sv_dup_inc(proto_perl->Iutf8_ascii);
9257 PL_utf8_alpha = sv_dup_inc(proto_perl->Iutf8_alpha);
9258 PL_utf8_space = sv_dup_inc(proto_perl->Iutf8_space);
9259 PL_utf8_cntrl = sv_dup_inc(proto_perl->Iutf8_cntrl);
9260 PL_utf8_graph = sv_dup_inc(proto_perl->Iutf8_graph);
9261 PL_utf8_digit = sv_dup_inc(proto_perl->Iutf8_digit);
9262 PL_utf8_upper = sv_dup_inc(proto_perl->Iutf8_upper);
9263 PL_utf8_lower = sv_dup_inc(proto_perl->Iutf8_lower);
9264 PL_utf8_print = sv_dup_inc(proto_perl->Iutf8_print);
9265 PL_utf8_punct = sv_dup_inc(proto_perl->Iutf8_punct);
9266 PL_utf8_xdigit = sv_dup_inc(proto_perl->Iutf8_xdigit);
9267 PL_utf8_mark = sv_dup_inc(proto_perl->Iutf8_mark);
9268 PL_utf8_toupper = sv_dup_inc(proto_perl->Iutf8_toupper);
9269 PL_utf8_totitle = sv_dup_inc(proto_perl->Iutf8_totitle);
9270 PL_utf8_tolower = sv_dup_inc(proto_perl->Iutf8_tolower);
9273 PL_last_swash_hv = Nullhv; /* reinits on demand */
9274 PL_last_swash_klen = 0;
9275 PL_last_swash_key[0]= '\0';
9276 PL_last_swash_tmps = (U8*)NULL;
9277 PL_last_swash_slen = 0;
9279 /* perly.c globals */
9280 PL_yydebug = proto_perl->Iyydebug;
9281 PL_yynerrs = proto_perl->Iyynerrs;
9282 PL_yyerrflag = proto_perl->Iyyerrflag;
9283 PL_yychar = proto_perl->Iyychar;
9284 PL_yyval = proto_perl->Iyyval;
9285 PL_yylval = proto_perl->Iyylval;
9287 PL_glob_index = proto_perl->Iglob_index;
9288 PL_srand_called = proto_perl->Isrand_called;
9289 PL_uudmap['M'] = 0; /* reinits on demand */
9290 PL_bitcount = Nullch; /* reinits on demand */
9292 if (proto_perl->Ipsig_pend) {
9293 Newz(0, PL_psig_pend, SIG_SIZE, int);
9296 PL_psig_pend = (int*)NULL;
9299 if (proto_perl->Ipsig_ptr) {
9300 Newz(0, PL_psig_ptr, SIG_SIZE, SV*);
9301 Newz(0, PL_psig_name, SIG_SIZE, SV*);
9302 for (i = 1; i < SIG_SIZE; i++) {
9303 PL_psig_ptr[i] = sv_dup_inc(proto_perl->Ipsig_ptr[i]);
9304 PL_psig_name[i] = sv_dup_inc(proto_perl->Ipsig_name[i]);
9308 PL_psig_ptr = (SV**)NULL;
9309 PL_psig_name = (SV**)NULL;
9312 /* thrdvar.h stuff */
9314 if (flags & CLONEf_COPY_STACKS) {
9315 /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
9316 PL_tmps_ix = proto_perl->Ttmps_ix;
9317 PL_tmps_max = proto_perl->Ttmps_max;
9318 PL_tmps_floor = proto_perl->Ttmps_floor;
9319 Newz(50, PL_tmps_stack, PL_tmps_max, SV*);
9321 while (i <= PL_tmps_ix) {
9322 PL_tmps_stack[i] = sv_dup_inc(proto_perl->Ttmps_stack[i]);
9326 /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
9327 i = proto_perl->Tmarkstack_max - proto_perl->Tmarkstack;
9328 Newz(54, PL_markstack, i, I32);
9329 PL_markstack_max = PL_markstack + (proto_perl->Tmarkstack_max
9330 - proto_perl->Tmarkstack);
9331 PL_markstack_ptr = PL_markstack + (proto_perl->Tmarkstack_ptr
9332 - proto_perl->Tmarkstack);
9333 Copy(proto_perl->Tmarkstack, PL_markstack,
9334 PL_markstack_ptr - PL_markstack + 1, I32);
9336 /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
9337 * NOTE: unlike the others! */
9338 PL_scopestack_ix = proto_perl->Tscopestack_ix;
9339 PL_scopestack_max = proto_perl->Tscopestack_max;
9340 Newz(54, PL_scopestack, PL_scopestack_max, I32);
9341 Copy(proto_perl->Tscopestack, PL_scopestack, PL_scopestack_ix, I32);
9343 /* next push_return() sets PL_retstack[PL_retstack_ix]
9344 * NOTE: unlike the others! */
9345 PL_retstack_ix = proto_perl->Tretstack_ix;
9346 PL_retstack_max = proto_perl->Tretstack_max;
9347 Newz(54, PL_retstack, PL_retstack_max, OP*);
9348 Copy(proto_perl->Tretstack, PL_retstack, PL_retstack_ix, I32);
9350 /* NOTE: si_dup() looks at PL_markstack */
9351 PL_curstackinfo = si_dup(proto_perl->Tcurstackinfo);
9353 /* PL_curstack = PL_curstackinfo->si_stack; */
9354 PL_curstack = av_dup(proto_perl->Tcurstack);
9355 PL_mainstack = av_dup(proto_perl->Tmainstack);
9357 /* next PUSHs() etc. set *(PL_stack_sp+1) */
9358 PL_stack_base = AvARRAY(PL_curstack);
9359 PL_stack_sp = PL_stack_base + (proto_perl->Tstack_sp
9360 - proto_perl->Tstack_base);
9361 PL_stack_max = PL_stack_base + AvMAX(PL_curstack);
9363 /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
9364 * NOTE: unlike the others! */
9365 PL_savestack_ix = proto_perl->Tsavestack_ix;
9366 PL_savestack_max = proto_perl->Tsavestack_max;
9367 /*Newz(54, PL_savestack, PL_savestack_max, ANY);*/
9368 PL_savestack = ss_dup(proto_perl);
9372 ENTER; /* perl_destruct() wants to LEAVE; */
9375 PL_start_env = proto_perl->Tstart_env; /* XXXXXX */
9376 PL_top_env = &PL_start_env;
9378 PL_op = proto_perl->Top;
9381 PL_Xpv = (XPV*)NULL;
9382 PL_na = proto_perl->Tna;
9384 PL_statbuf = proto_perl->Tstatbuf;
9385 PL_statcache = proto_perl->Tstatcache;
9386 PL_statgv = gv_dup(proto_perl->Tstatgv);
9387 PL_statname = sv_dup_inc(proto_perl->Tstatname);
9389 PL_timesbuf = proto_perl->Ttimesbuf;
9392 PL_tainted = proto_perl->Ttainted;
9393 PL_curpm = proto_perl->Tcurpm; /* XXX No PMOP ref count */
9394 PL_nrs = sv_dup_inc(proto_perl->Tnrs);
9395 PL_rs = sv_dup_inc(proto_perl->Trs);
9396 PL_last_in_gv = gv_dup(proto_perl->Tlast_in_gv);
9397 PL_ofs_sv = sv_dup_inc(proto_perl->Tofs_sv);
9398 PL_defoutgv = gv_dup_inc(proto_perl->Tdefoutgv);
9399 PL_chopset = proto_perl->Tchopset; /* XXX never deallocated */
9400 PL_toptarget = sv_dup_inc(proto_perl->Ttoptarget);
9401 PL_bodytarget = sv_dup_inc(proto_perl->Tbodytarget);
9402 PL_formtarget = sv_dup(proto_perl->Tformtarget);
9404 PL_restartop = proto_perl->Trestartop;
9405 PL_in_eval = proto_perl->Tin_eval;
9406 PL_delaymagic = proto_perl->Tdelaymagic;
9407 PL_dirty = proto_perl->Tdirty;
9408 PL_localizing = proto_perl->Tlocalizing;
9410 #ifdef PERL_FLEXIBLE_EXCEPTIONS
9411 PL_protect = proto_perl->Tprotect;
9413 PL_errors = sv_dup_inc(proto_perl->Terrors);
9414 PL_av_fetch_sv = Nullsv;
9415 PL_hv_fetch_sv = Nullsv;
9416 Zero(&PL_hv_fetch_ent_mh, 1, HE); /* XXX */
9417 PL_modcount = proto_perl->Tmodcount;
9418 PL_lastgotoprobe = Nullop;
9419 PL_dumpindent = proto_perl->Tdumpindent;
9421 PL_sortcop = (OP*)any_dup(proto_perl->Tsortcop, proto_perl);
9422 PL_sortstash = hv_dup(proto_perl->Tsortstash);
9423 PL_firstgv = gv_dup(proto_perl->Tfirstgv);
9424 PL_secondgv = gv_dup(proto_perl->Tsecondgv);
9425 PL_sortcxix = proto_perl->Tsortcxix;
9426 PL_efloatbuf = Nullch; /* reinits on demand */
9427 PL_efloatsize = 0; /* reinits on demand */
9431 PL_screamfirst = NULL;
9432 PL_screamnext = NULL;
9433 PL_maxscream = -1; /* reinits on demand */
9434 PL_lastscream = Nullsv;
9436 PL_watchaddr = NULL;
9437 PL_watchok = Nullch;
9439 PL_regdummy = proto_perl->Tregdummy;
9440 PL_regcomp_parse = Nullch;
9441 PL_regxend = Nullch;
9442 PL_regcode = (regnode*)NULL;
9445 PL_regprecomp = Nullch;
9450 PL_seen_zerolen = 0;
9452 PL_regcomp_rx = (regexp*)NULL;
9454 PL_colorset = 0; /* reinits PL_colors[] */
9455 /*PL_colors[6] = {0,0,0,0,0,0};*/
9456 PL_reg_whilem_seen = 0;
9457 PL_reginput = Nullch;
9460 PL_regstartp = (I32*)NULL;
9461 PL_regendp = (I32*)NULL;
9462 PL_reglastparen = (U32*)NULL;
9463 PL_regtill = Nullch;
9464 PL_reg_start_tmp = (char**)NULL;
9465 PL_reg_start_tmpl = 0;
9466 PL_regdata = (struct reg_data*)NULL;
9469 PL_reg_eval_set = 0;
9471 PL_regprogram = (regnode*)NULL;
9473 PL_regcc = (CURCUR*)NULL;
9474 PL_reg_call_cc = (struct re_cc_state*)NULL;
9475 PL_reg_re = (regexp*)NULL;
9476 PL_reg_ganch = Nullch;
9478 PL_reg_magic = (MAGIC*)NULL;
9480 PL_reg_oldcurpm = (PMOP*)NULL;
9481 PL_reg_curpm = (PMOP*)NULL;
9482 PL_reg_oldsaved = Nullch;
9483 PL_reg_oldsavedlen = 0;
9485 PL_reg_leftiter = 0;
9486 PL_reg_poscache = Nullch;
9487 PL_reg_poscache_size= 0;
9489 /* RE engine - function pointers */
9490 PL_regcompp = proto_perl->Tregcompp;
9491 PL_regexecp = proto_perl->Tregexecp;
9492 PL_regint_start = proto_perl->Tregint_start;
9493 PL_regint_string = proto_perl->Tregint_string;
9494 PL_regfree = proto_perl->Tregfree;
9496 PL_reginterp_cnt = 0;
9497 PL_reg_starttry = 0;
9499 if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
9500 ptr_table_free(PL_ptr_table);
9501 PL_ptr_table = NULL;
9505 return (PerlInterpreter*)pPerl;
9511 #else /* !USE_ITHREADS */
9517 #endif /* USE_ITHREADS */
9520 do_report_used(pTHXo_ SV *sv)
9522 if (SvTYPE(sv) != SVTYPEMASK) {
9523 PerlIO_printf(Perl_debug_log, "****\n");
9529 do_clean_objs(pTHXo_ SV *sv)
9533 if (SvROK(sv) && SvOBJECT(rv = SvRV(sv))) {
9534 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(sv)));
9535 if (SvWEAKREF(sv)) {
9546 /* XXX Might want to check arrays, etc. */
9549 #ifndef DISABLE_DESTRUCTOR_KLUDGE
9551 do_clean_named_objs(pTHXo_ SV *sv)
9553 if (SvTYPE(sv) == SVt_PVGV && GvGP(sv)) {
9554 if ( SvOBJECT(GvSV(sv)) ||
9555 (GvAV(sv) && SvOBJECT(GvAV(sv))) ||
9556 (GvHV(sv) && SvOBJECT(GvHV(sv))) ||
9557 (GvIO(sv) && SvOBJECT(GvIO(sv))) ||
9558 (GvCV(sv) && SvOBJECT(GvCV(sv))) )
9560 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning named glob object:\n "), sv_dump(sv)));
9568 do_clean_all(pTHXo_ SV *sv)
9570 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
9571 SvFLAGS(sv) |= SVf_BREAK;