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';
1507 STRLEN radixlen = 1;
1514 numtype = IS_NUMBER_NEG;
1519 #ifdef USE_LOCALE_NUMERIC
1520 if (PL_numeric_radix_sv && IN_LOCALE)
1521 radix = SvPV(PL_numeric_radix_sv, radixlen);
1524 /* next must be digit or the radix separator or beginning of infinity */
1526 /* UVs are at least 32 bits, so the first 9 decimal digits cannot
1528 UV value = *s - '0';
1529 /* This construction seems to be more optimiser friendly.
1530 (without it gcc does the isDIGIT test and the *s - '0' separately)
1531 With it gcc on arm is managing 6 instructions (6 cycles) per digit.
1532 In theory the optimiser could deduce how far to unroll the loop
1533 before checking for overflow. */
1534 int digit = *++s - '0';
1535 if (digit >= 0 && digit <= 9) {
1536 value = value * 10 + digit;
1538 if (digit >= 0 && digit <= 9) {
1539 value = value * 10 + digit;
1541 if (digit >= 0 && digit <= 9) {
1542 value = value * 10 + digit;
1544 if (digit >= 0 && digit <= 9) {
1545 value = value * 10 + digit;
1547 if (digit >= 0 && digit <= 9) {
1548 value = value * 10 + digit;
1550 if (digit >= 0 && digit <= 9) {
1551 value = value * 10 + digit;
1553 if (digit >= 0 && digit <= 9) {
1554 value = value * 10 + digit;
1556 if (digit >= 0 && digit <= 9) {
1557 value = value * 10 + digit;
1558 /* Now got 9 digits, so need to check
1559 each time for overflow. */
1561 while (digit >= 0 && digit <= 9
1562 && (value < max_div_10
1563 || (value == max_div_10
1564 && *s <= max_mod_10))) {
1565 value = value * 10 + digit;
1568 if (digit >= 0 && digit <= 9) {
1569 /* value overflowed.
1570 skip the remaining digits, don't
1571 worry about setting *valuep. */
1574 } while (isDIGIT(*s));
1576 IS_NUMBER_GREATER_THAN_UV_MAX;
1587 numtype |= IS_NUMBER_IN_UV;
1592 if (s + radixlen <= send && memEQ(s, radix, radixlen)) {
1594 numtype |= IS_NUMBER_NOT_INT;
1595 while (isDIGIT(*s)) /* optional digits after the radix */
1599 else if (s + radixlen <= send && memEQ(s, radix, radixlen)) {
1601 numtype |= IS_NUMBER_NOT_INT;
1602 /* no digits before the radix means we need digits after it */
1606 } while (isDIGIT(*s));
1607 numtype |= IS_NUMBER_IN_UV;
1609 /* integer approximation is valid - it's 0. */
1616 else if (*s == 'I' || *s == 'i') {
1617 s++; if (*s != 'N' && *s != 'n') return 0;
1618 s++; if (*s != 'F' && *s != 'f') return 0;
1619 s++; if (*s == 'I' || *s == 'i') {
1620 s++; if (*s != 'N' && *s != 'n') return 0;
1621 s++; if (*s != 'I' && *s != 'i') return 0;
1622 s++; if (*s != 'T' && *s != 't') return 0;
1623 s++; if (*s != 'Y' && *s != 'y') return 0;
1628 else /* Add test for NaN here. */
1632 numtype &= IS_NUMBER_NEG; /* Keep track of sign */
1633 numtype |= IS_NUMBER_INFINITY | IS_NUMBER_NOT_INT;
1635 /* we can have an optional exponent part */
1636 if (*s == 'e' || *s == 'E') {
1637 /* The only flag we keep is sign. Blow away any "it's UV" */
1638 numtype &= IS_NUMBER_NEG;
1639 numtype |= IS_NUMBER_NOT_INT;
1641 if (*s == '-' || *s == '+')
1646 } while (isDIGIT(*s));
1656 if (len == 10 && memEQ(pv, "0 but true", 10)) {
1659 return IS_NUMBER_IN_UV;
1665 =for apidoc looks_like_number
1667 Test if an the content of an SV looks like a number (or is a
1668 number). C<Inf> and C<Infinity> are treated as numbers (so will not
1669 issue a non-numeric warning), even if your atof() doesn't grok them.
1675 Perl_looks_like_number(pTHX_ SV *sv)
1677 register char *sbegin;
1684 else if (SvPOKp(sv))
1685 sbegin = SvPV(sv, len);
1687 return 1; /* Historic. Wrong? */
1688 return grok_number(sbegin, len, NULL);
1691 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1692 until proven guilty, assume that things are not that bad... */
1694 /* As 64 bit platforms often have an NV that doesn't preserve all bits of
1695 an IV (an assumption perl has been based on to date) it becomes necessary
1696 to remove the assumption that the NV always carries enough precision to
1697 recreate the IV whenever needed, and that the NV is the canonical form.
1698 Instead, IV/UV and NV need to be given equal rights. So as to not lose
1699 precision as an side effect of conversion (which would lead to insanity
1700 and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1701 1) to distinguish between IV/UV/NV slots that have cached a valid
1702 conversion where precision was lost and IV/UV/NV slots that have a
1703 valid conversion which has lost no precision
1704 2) to ensure that if a numeric conversion to one form is request that
1705 would lose precision, the precise conversion (or differently
1706 imprecise conversion) is also performed and cached, to prevent
1707 requests for different numeric formats on the same SV causing
1708 lossy conversion chains. (lossless conversion chains are perfectly
1713 SvIOKp is true if the IV slot contains a valid value
1714 SvIOK is true only if the IV value is accurate (UV if SvIOK_UV true)
1715 SvNOKp is true if the NV slot contains a valid value
1716 SvNOK is true only if the NV value is accurate
1719 while converting from PV to NV check to see if converting that NV to an
1720 IV(or UV) would lose accuracy over a direct conversion from PV to
1721 IV(or UV). If it would, cache both conversions, return NV, but mark
1722 SV as IOK NOKp (ie not NOK).
1724 while converting from PV to IV check to see if converting that IV to an
1725 NV would lose accuracy over a direct conversion from PV to NV. If it
1726 would, cache both conversions, flag similarly.
1728 Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1729 correctly because if IV & NV were set NV *always* overruled.
1730 Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flags meaning
1731 changes - now IV and NV together means that the two are interchangeable
1732 SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1734 The benefit of this is operations such as pp_add know that if SvIOK is
1735 true for both left and right operands, then integer addition can be
1736 used instead of floating point. (for cases where the result won't
1737 overflow) Before, floating point was always used, which could lead to
1738 loss of precision compared with integer addition.
1740 * making IV and NV equal status should make maths accurate on 64 bit
1742 * may speed up maths somewhat if pp_add and friends start to use
1743 integers when possible instead of fp. (hopefully the overhead in
1744 looking for SvIOK and checking for overflow will not outweigh the
1745 fp to integer speedup)
1746 * will slow down integer operations (callers of SvIV) on "inaccurate"
1747 values, as the change from SvIOK to SvIOKp will cause a call into
1748 sv_2iv each time rather than a macro access direct to the IV slot
1749 * should speed up number->string conversion on integers as IV is
1750 favoured when IV and NV equally accurate
1752 ####################################################################
1753 You had better be using SvIOK_notUV if you want an IV for arithmetic
1754 SvIOK is true if (IV or UV), so you might be getting (IV)SvUV
1755 SvUOK is true iff UV.
1756 ####################################################################
1758 Your mileage will vary depending your CPUs relative fp to integer
1762 #ifndef NV_PRESERVES_UV
1763 #define IS_NUMBER_UNDERFLOW_IV 1
1764 #define IS_NUMBER_UNDERFLOW_UV 2
1765 #define IS_NUMBER_IV_AND_UV 2
1766 #define IS_NUMBER_OVERFLOW_IV 4
1767 #define IS_NUMBER_OVERFLOW_UV 5
1769 /* For sv_2nv these three cases are "SvNOK and don't bother casting" */
1771 S_sv_2iuv_non_preserve (pTHX_ register SV *sv, I32 numtype)
1773 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));
1774 if (SvNVX(sv) < (NV)IV_MIN) {
1775 (void)SvIOKp_on(sv);
1778 return IS_NUMBER_UNDERFLOW_IV;
1780 if (SvNVX(sv) > (NV)UV_MAX) {
1781 (void)SvIOKp_on(sv);
1785 return IS_NUMBER_OVERFLOW_UV;
1787 (void)SvIOKp_on(sv);
1789 /* Can't use strtol etc to convert this string. (See truth table in
1791 if (SvNVX(sv) <= (UV)IV_MAX) {
1792 SvIVX(sv) = I_V(SvNVX(sv));
1793 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1794 SvIOK_on(sv); /* Integer is precise. NOK, IOK */
1796 /* Integer is imprecise. NOK, IOKp */
1798 return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
1801 SvUVX(sv) = U_V(SvNVX(sv));
1802 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
1803 if (SvUVX(sv) == UV_MAX) {
1804 /* As we know that NVs don't preserve UVs, UV_MAX cannot
1805 possibly be preserved by NV. Hence, it must be overflow.
1807 return IS_NUMBER_OVERFLOW_UV;
1809 SvIOK_on(sv); /* Integer is precise. NOK, UOK */
1811 /* Integer is imprecise. NOK, IOKp */
1813 return IS_NUMBER_OVERFLOW_IV;
1815 #endif /* NV_PRESERVES_UV*/
1818 Perl_sv_2iv(pTHX_ register SV *sv)
1822 if (SvGMAGICAL(sv)) {
1827 return I_V(SvNVX(sv));
1829 if (SvPOKp(sv) && SvLEN(sv))
1832 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
1833 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
1839 if (SvTHINKFIRST(sv)) {
1842 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
1843 (SvTYPE(tmpstr) != SVt_RV || (SvRV(tmpstr) != SvRV(sv))))
1844 return SvIV(tmpstr);
1845 return PTR2IV(SvRV(sv));
1847 if (SvREADONLY(sv) && SvFAKE(sv)) {
1848 sv_force_normal(sv);
1850 if (SvREADONLY(sv) && !SvOK(sv)) {
1851 if (ckWARN(WARN_UNINITIALIZED))
1858 return (IV)(SvUVX(sv));
1865 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
1866 * without also getting a cached IV/UV from it at the same time
1867 * (ie PV->NV conversion should detect loss of accuracy and cache
1868 * IV or UV at same time to avoid this. NWC */
1870 if (SvTYPE(sv) == SVt_NV)
1871 sv_upgrade(sv, SVt_PVNV);
1873 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
1874 /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
1875 certainly cast into the IV range at IV_MAX, whereas the correct
1876 answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
1878 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
1879 SvIVX(sv) = I_V(SvNVX(sv));
1880 if (SvNVX(sv) == (NV) SvIVX(sv)
1881 #ifndef NV_PRESERVES_UV
1882 && (((UV)1 << NV_PRESERVES_UV_BITS) >
1883 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
1884 /* Don't flag it as "accurately an integer" if the number
1885 came from a (by definition imprecise) NV operation, and
1886 we're outside the range of NV integer precision */
1889 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
1890 DEBUG_c(PerlIO_printf(Perl_debug_log,
1891 "0x%"UVxf" iv(%g => %"IVdf") (precise)\n",
1897 /* IV not precise. No need to convert from PV, as NV
1898 conversion would already have cached IV if it detected
1899 that PV->IV would be better than PV->NV->IV
1900 flags already correct - don't set public IOK. */
1901 DEBUG_c(PerlIO_printf(Perl_debug_log,
1902 "0x%"UVxf" iv(%g => %"IVdf") (imprecise)\n",
1907 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
1908 but the cast (NV)IV_MIN rounds to a the value less (more
1909 negative) than IV_MIN which happens to be equal to SvNVX ??
1910 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
1911 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
1912 (NV)UVX == NVX are both true, but the values differ. :-(
1913 Hopefully for 2s complement IV_MIN is something like
1914 0x8000000000000000 which will be exact. NWC */
1917 SvUVX(sv) = U_V(SvNVX(sv));
1919 (SvNVX(sv) == (NV) SvUVX(sv))
1920 #ifndef NV_PRESERVES_UV
1921 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
1922 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
1923 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
1924 /* Don't flag it as "accurately an integer" if the number
1925 came from a (by definition imprecise) NV operation, and
1926 we're outside the range of NV integer precision */
1932 DEBUG_c(PerlIO_printf(Perl_debug_log,
1933 "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
1937 return (IV)SvUVX(sv);
1940 else if (SvPOKp(sv) && SvLEN(sv)) {
1942 int numtype = grok_number(SvPVX(sv), SvCUR(sv), &value);
1943 /* We want to avoid a possible problem when we cache an IV which
1944 may be later translated to an NV, and the resulting NV is not
1945 the same as the direct translation of the initial string
1946 (eg 123.456 can shortcut to the IV 123 with atol(), but we must
1947 be careful to ensure that the value with the .456 is around if the
1948 NV value is requested in the future).
1950 This means that if we cache such an IV, we need to cache the
1951 NV as well. Moreover, we trade speed for space, and do not
1952 cache the NV if we are sure it's not needed.
1955 /* SVt_PVNV is one higher than SVt_PVIV, hence this order */
1956 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
1957 == IS_NUMBER_IN_UV) {
1958 /* It's defintately an integer, only upgrade to PVIV */
1959 if (SvTYPE(sv) < SVt_PVIV)
1960 sv_upgrade(sv, SVt_PVIV);
1962 } else if (SvTYPE(sv) < SVt_PVNV)
1963 sv_upgrade(sv, SVt_PVNV);
1965 /* If NV preserves UV then we only use the UV value if we know that
1966 we aren't going to call atof() below. If NVs don't preserve UVs
1967 then the value returned may have more precision than atof() will
1968 return, even though value isn't perfectly accurate. */
1969 if ((numtype & (IS_NUMBER_IN_UV
1970 #ifdef NV_PRESERVES_UV
1973 )) == IS_NUMBER_IN_UV) {
1974 /* This won't turn off the public IOK flag if it was set above */
1975 (void)SvIOKp_on(sv);
1977 if (!(numtype & IS_NUMBER_NEG)) {
1979 if (value <= (UV)IV_MAX) {
1980 SvIVX(sv) = (IV)value;
1986 /* 2s complement assumption */
1987 if (value <= (UV)IV_MIN) {
1988 SvIVX(sv) = -(IV)value;
1990 /* Too negative for an IV. This is a double upgrade, but
1991 I'm assuming it will be be rare. */
1992 if (SvTYPE(sv) < SVt_PVNV)
1993 sv_upgrade(sv, SVt_PVNV);
1997 SvNVX(sv) = -(NV)value;
2002 /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2003 will be in the previous block to set the IV slot, and the next
2004 block to set the NV slot. So no else here. */
2006 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2007 != IS_NUMBER_IN_UV) {
2008 /* It wasn't an (integer that doesn't overflow the UV). */
2009 SvNVX(sv) = Atof(SvPVX(sv));
2011 if (! numtype && ckWARN(WARN_NUMERIC))
2014 #if defined(USE_LONG_DOUBLE)
2015 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
2016 PTR2UV(sv), SvNVX(sv)));
2018 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%g)\n",
2019 PTR2UV(sv), SvNVX(sv)));
2023 #ifdef NV_PRESERVES_UV
2024 (void)SvIOKp_on(sv);
2026 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2027 SvIVX(sv) = I_V(SvNVX(sv));
2028 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2031 /* Integer is imprecise. NOK, IOKp */
2033 /* UV will not work better than IV */
2035 if (SvNVX(sv) > (NV)UV_MAX) {
2037 /* Integer is inaccurate. NOK, IOKp, is UV */
2041 SvUVX(sv) = U_V(SvNVX(sv));
2042 /* 0xFFFFFFFFFFFFFFFF not an issue in here */
2043 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2047 /* Integer is imprecise. NOK, IOKp, is UV */
2053 #else /* NV_PRESERVES_UV */
2054 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2055 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2056 /* The IV slot will have been set from value returned by
2057 grok_number above. The NV slot has just been set using
2060 assert (SvIOKp(sv));
2062 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2063 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2064 /* Small enough to preserve all bits. */
2065 (void)SvIOKp_on(sv);
2067 SvIVX(sv) = I_V(SvNVX(sv));
2068 if ((NV)(SvIVX(sv)) == SvNVX(sv))
2070 /* Assumption: first non-preserved integer is < IV_MAX,
2071 this NV is in the preserved range, therefore: */
2072 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2074 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);
2078 0 0 already failed to read UV.
2079 0 1 already failed to read UV.
2080 1 0 you won't get here in this case. IV/UV
2081 slot set, public IOK, Atof() unneeded.
2082 1 1 already read UV.
2083 so there's no point in sv_2iuv_non_preserve() attempting
2084 to use atol, strtol, strtoul etc. */
2085 if (sv_2iuv_non_preserve (sv, numtype)
2086 >= IS_NUMBER_OVERFLOW_IV)
2090 #endif /* NV_PRESERVES_UV */
2093 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
2095 if (SvTYPE(sv) < SVt_IV)
2096 /* Typically the caller expects that sv_any is not NULL now. */
2097 sv_upgrade(sv, SVt_IV);
2100 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2101 PTR2UV(sv),SvIVX(sv)));
2102 return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2106 Perl_sv_2uv(pTHX_ register SV *sv)
2110 if (SvGMAGICAL(sv)) {
2115 return U_V(SvNVX(sv));
2116 if (SvPOKp(sv) && SvLEN(sv))
2119 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2120 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2126 if (SvTHINKFIRST(sv)) {
2129 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
2130 (SvTYPE(tmpstr) != SVt_RV || (SvRV(tmpstr) != SvRV(sv))))
2131 return SvUV(tmpstr);
2132 return PTR2UV(SvRV(sv));
2134 if (SvREADONLY(sv) && SvFAKE(sv)) {
2135 sv_force_normal(sv);
2137 if (SvREADONLY(sv) && !SvOK(sv)) {
2138 if (ckWARN(WARN_UNINITIALIZED))
2148 return (UV)SvIVX(sv);
2152 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2153 * without also getting a cached IV/UV from it at the same time
2154 * (ie PV->NV conversion should detect loss of accuracy and cache
2155 * IV or UV at same time to avoid this. */
2156 /* IV-over-UV optimisation - choose to cache IV if possible */
2158 if (SvTYPE(sv) == SVt_NV)
2159 sv_upgrade(sv, SVt_PVNV);
2161 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
2162 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2163 SvIVX(sv) = I_V(SvNVX(sv));
2164 if (SvNVX(sv) == (NV) SvIVX(sv)
2165 #ifndef NV_PRESERVES_UV
2166 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2167 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2168 /* Don't flag it as "accurately an integer" if the number
2169 came from a (by definition imprecise) NV operation, and
2170 we're outside the range of NV integer precision */
2173 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
2174 DEBUG_c(PerlIO_printf(Perl_debug_log,
2175 "0x%"UVxf" uv(%g => %"IVdf") (precise)\n",
2181 /* IV not precise. No need to convert from PV, as NV
2182 conversion would already have cached IV if it detected
2183 that PV->IV would be better than PV->NV->IV
2184 flags already correct - don't set public IOK. */
2185 DEBUG_c(PerlIO_printf(Perl_debug_log,
2186 "0x%"UVxf" uv(%g => %"IVdf") (imprecise)\n",
2191 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2192 but the cast (NV)IV_MIN rounds to a the value less (more
2193 negative) than IV_MIN which happens to be equal to SvNVX ??
2194 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2195 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2196 (NV)UVX == NVX are both true, but the values differ. :-(
2197 Hopefully for 2s complement IV_MIN is something like
2198 0x8000000000000000 which will be exact. NWC */
2201 SvUVX(sv) = U_V(SvNVX(sv));
2203 (SvNVX(sv) == (NV) SvUVX(sv))
2204 #ifndef NV_PRESERVES_UV
2205 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2206 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2207 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2208 /* Don't flag it as "accurately an integer" if the number
2209 came from a (by definition imprecise) NV operation, and
2210 we're outside the range of NV integer precision */
2215 DEBUG_c(PerlIO_printf(Perl_debug_log,
2216 "0x%"UVxf" 2uv(%"UVuf" => %"IVdf") (as unsigned)\n",
2222 else if (SvPOKp(sv) && SvLEN(sv)) {
2224 int numtype = grok_number(SvPVX(sv), SvCUR(sv), &value);
2226 /* We want to avoid a possible problem when we cache a UV which
2227 may be later translated to an NV, and the resulting NV is not
2228 the translation of the initial data.
2230 This means that if we cache such a UV, we need to cache the
2231 NV as well. Moreover, we trade speed for space, and do not
2232 cache the NV if not needed.
2235 /* SVt_PVNV is one higher than SVt_PVIV, hence this order */
2236 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2237 == IS_NUMBER_IN_UV) {
2238 /* It's defintately an integer, only upgrade to PVIV */
2239 if (SvTYPE(sv) < SVt_PVIV)
2240 sv_upgrade(sv, SVt_PVIV);
2242 } else if (SvTYPE(sv) < SVt_PVNV)
2243 sv_upgrade(sv, SVt_PVNV);
2245 /* If NV preserves UV then we only use the UV value if we know that
2246 we aren't going to call atof() below. If NVs don't preserve UVs
2247 then the value returned may have more precision than atof() will
2248 return, even though it isn't accurate. */
2249 if ((numtype & (IS_NUMBER_IN_UV
2250 #ifdef NV_PRESERVES_UV
2253 )) == IS_NUMBER_IN_UV) {
2254 /* This won't turn off the public IOK flag if it was set above */
2255 (void)SvIOKp_on(sv);
2257 if (!(numtype & IS_NUMBER_NEG)) {
2259 if (value <= (UV)IV_MAX) {
2260 SvIVX(sv) = (IV)value;
2262 /* it didn't overflow, and it was positive. */
2267 /* 2s complement assumption */
2268 if (value <= (UV)IV_MIN) {
2269 SvIVX(sv) = -(IV)value;
2271 /* Too negative for an IV. This is a double upgrade, but
2272 I'm assuming it will be be rare. */
2273 if (SvTYPE(sv) < SVt_PVNV)
2274 sv_upgrade(sv, SVt_PVNV);
2278 SvNVX(sv) = -(NV)value;
2284 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2285 != IS_NUMBER_IN_UV) {
2286 /* It wasn't an integer, or it overflowed the UV. */
2287 SvNVX(sv) = Atof(SvPVX(sv));
2289 if (! numtype && ckWARN(WARN_NUMERIC))
2292 #if defined(USE_LONG_DOUBLE)
2293 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%" PERL_PRIgldbl ")\n",
2294 PTR2UV(sv), SvNVX(sv)));
2296 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%g)\n",
2297 PTR2UV(sv), SvNVX(sv)));
2300 #ifdef NV_PRESERVES_UV
2301 (void)SvIOKp_on(sv);
2303 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2304 SvIVX(sv) = I_V(SvNVX(sv));
2305 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2308 /* Integer is imprecise. NOK, IOKp */
2310 /* UV will not work better than IV */
2312 if (SvNVX(sv) > (NV)UV_MAX) {
2314 /* Integer is inaccurate. NOK, IOKp, is UV */
2318 SvUVX(sv) = U_V(SvNVX(sv));
2319 /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2320 NV preservse UV so can do correct comparison. */
2321 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2325 /* Integer is imprecise. NOK, IOKp, is UV */
2330 #else /* NV_PRESERVES_UV */
2331 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2332 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2333 /* The UV slot will have been set from value returned by
2334 grok_number above. The NV slot has just been set using
2337 assert (SvIOKp(sv));
2339 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2340 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2341 /* Small enough to preserve all bits. */
2342 (void)SvIOKp_on(sv);
2344 SvIVX(sv) = I_V(SvNVX(sv));
2345 if ((NV)(SvIVX(sv)) == SvNVX(sv))
2347 /* Assumption: first non-preserved integer is < IV_MAX,
2348 this NV is in the preserved range, therefore: */
2349 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2351 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);
2354 sv_2iuv_non_preserve (sv, numtype);
2356 #endif /* NV_PRESERVES_UV */
2360 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2361 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2364 if (SvTYPE(sv) < SVt_IV)
2365 /* Typically the caller expects that sv_any is not NULL now. */
2366 sv_upgrade(sv, SVt_IV);
2370 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2371 PTR2UV(sv),SvUVX(sv)));
2372 return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2376 Perl_sv_2nv(pTHX_ register SV *sv)
2380 if (SvGMAGICAL(sv)) {
2384 if (SvPOKp(sv) && SvLEN(sv)) {
2385 if (ckWARN(WARN_NUMERIC) && !SvIOKp(sv) &&
2386 !grok_number(SvPVX(sv), SvCUR(sv), NULL))
2388 return Atof(SvPVX(sv));
2392 return (NV)SvUVX(sv);
2394 return (NV)SvIVX(sv);
2397 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2398 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2404 if (SvTHINKFIRST(sv)) {
2407 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
2408 (SvTYPE(tmpstr) != SVt_RV || (SvRV(tmpstr) != SvRV(sv))))
2409 return SvNV(tmpstr);
2410 return PTR2NV(SvRV(sv));
2412 if (SvREADONLY(sv) && SvFAKE(sv)) {
2413 sv_force_normal(sv);
2415 if (SvREADONLY(sv) && !SvOK(sv)) {
2416 if (ckWARN(WARN_UNINITIALIZED))
2421 if (SvTYPE(sv) < SVt_NV) {
2422 if (SvTYPE(sv) == SVt_IV)
2423 sv_upgrade(sv, SVt_PVNV);
2425 sv_upgrade(sv, SVt_NV);
2426 #if defined(USE_LONG_DOUBLE)
2428 STORE_NUMERIC_LOCAL_SET_STANDARD();
2429 PerlIO_printf(Perl_debug_log,
2430 "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2431 PTR2UV(sv), SvNVX(sv));
2432 RESTORE_NUMERIC_LOCAL();
2436 STORE_NUMERIC_LOCAL_SET_STANDARD();
2437 PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%g)\n",
2438 PTR2UV(sv), SvNVX(sv));
2439 RESTORE_NUMERIC_LOCAL();
2443 else if (SvTYPE(sv) < SVt_PVNV)
2444 sv_upgrade(sv, SVt_PVNV);
2445 if (SvNOKp(sv) && !(SvIOK(sv) || SvPOK(sv))) {
2448 else if (SvIOKp(sv) &&
2449 (!SvPOKp(sv) || !grok_number(SvPVX(sv), SvCUR(sv),NULL)))
2451 SvNVX(sv) = SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv);
2452 #ifdef NV_PRESERVES_UV
2455 /* Only set the public NV OK flag if this NV preserves the IV */
2456 /* Check it's not 0xFFFFFFFFFFFFFFFF */
2457 if (SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2458 : (SvIVX(sv) == I_V(SvNVX(sv))))
2464 else if (SvPOKp(sv) && SvLEN(sv)) {
2466 int numtype = grok_number(SvPVX(sv), SvCUR(sv), &value);
2467 if (ckWARN(WARN_NUMERIC) && !SvIOKp(sv) && !numtype)
2469 #ifdef NV_PRESERVES_UV
2470 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2471 == IS_NUMBER_IN_UV) {
2472 /* It's defintately an integer */
2473 SvNVX(sv) = (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value;
2475 SvNVX(sv) = Atof(SvPVX(sv));
2478 SvNVX(sv) = Atof(SvPVX(sv));
2479 /* Only set the public NV OK flag if this NV preserves the value in
2480 the PV at least as well as an IV/UV would.
2481 Not sure how to do this 100% reliably. */
2482 /* if that shift count is out of range then Configure's test is
2483 wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2485 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2486 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2487 SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2488 } else if (!(numtype & IS_NUMBER_IN_UV)) {
2489 /* Can't use strtol etc to convert this string, so don't try.
2490 sv_2iv and sv_2uv will use the NV to convert, not the PV. */
2493 /* value has been set. It may not be precise. */
2494 if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2495 /* 2s complement assumption for (UV)IV_MIN */
2496 SvNOK_on(sv); /* Integer is too negative. */
2501 if (numtype & IS_NUMBER_NEG) {
2502 SvIVX(sv) = -(IV)value;
2503 } else if (value <= (UV)IV_MAX) {
2504 SvIVX(sv) = (IV)value;
2510 if (numtype & IS_NUMBER_NOT_INT) {
2511 /* I believe that even if the original PV had decimals,
2512 they are lost beyond the limit of the FP precision.
2513 However, neither is canonical, so both only get p
2514 flags. NWC, 2000/11/25 */
2515 /* Both already have p flags, so do nothing */
2518 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2519 if (SvIVX(sv) == I_V(nv)) {
2524 /* It had no "." so it must be integer. */
2527 /* between IV_MAX and NV(UV_MAX).
2528 Could be slightly > UV_MAX */
2530 if (numtype & IS_NUMBER_NOT_INT) {
2531 /* UV and NV both imprecise. */
2533 UV nv_as_uv = U_V(nv);
2535 if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2546 #endif /* NV_PRESERVES_UV */
2549 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
2551 if (SvTYPE(sv) < SVt_NV)
2552 /* Typically the caller expects that sv_any is not NULL now. */
2553 /* XXX Ilya implies that this is a bug in callers that assume this
2554 and ideally should be fixed. */
2555 sv_upgrade(sv, SVt_NV);
2558 #if defined(USE_LONG_DOUBLE)
2560 STORE_NUMERIC_LOCAL_SET_STANDARD();
2561 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2562 PTR2UV(sv), SvNVX(sv));
2563 RESTORE_NUMERIC_LOCAL();
2567 STORE_NUMERIC_LOCAL_SET_STANDARD();
2568 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%g)\n",
2569 PTR2UV(sv), SvNVX(sv));
2570 RESTORE_NUMERIC_LOCAL();
2576 /* Caller must validate PVX */
2578 S_asIV(pTHX_ SV *sv)
2581 int numtype = grok_number(SvPVX(sv), SvCUR(sv), &value);
2583 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2584 == IS_NUMBER_IN_UV) {
2585 /* It's defintately an integer */
2586 if (numtype & IS_NUMBER_NEG) {
2587 if (value < (UV)IV_MIN)
2590 if (value < (UV)IV_MAX)
2595 if (ckWARN(WARN_NUMERIC))
2598 return I_V(Atof(SvPVX(sv)));
2602 S_asUV(pTHX_ SV *sv)
2605 int numtype = grok_number(SvPVX(sv), SvCUR(sv), &value);
2607 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2608 == IS_NUMBER_IN_UV) {
2609 /* It's defintately an integer */
2610 if (!(numtype & IS_NUMBER_NEG))
2614 if (ckWARN(WARN_NUMERIC))
2617 return U_V(Atof(SvPVX(sv)));
2621 Perl_sv_2pv_nolen(pTHX_ register SV *sv)
2624 return sv_2pv(sv, &n_a);
2627 /* We assume that buf is at least TYPE_CHARS(UV) long. */
2629 uiv_2buf(char *buf, IV iv, UV uv, int is_uv, char **peob)
2631 char *ptr = buf + TYPE_CHARS(UV);
2645 *--ptr = '0' + (uv % 10);
2654 Perl_sv_2pv(pTHX_ register SV *sv, STRLEN *lp)
2656 return sv_2pv_flags(sv, lp, SV_GMAGIC);
2660 Perl_sv_2pv_flags(pTHX_ register SV *sv, STRLEN *lp, I32 flags)
2665 char tbuf[64]; /* Must fit sprintf/Gconvert of longest IV/NV */
2666 char *tmpbuf = tbuf;
2672 if (SvGMAGICAL(sv)) {
2673 if (flags & SV_GMAGIC)
2681 (void)sprintf(tmpbuf,"%"UVuf, (UV)SvUVX(sv));
2683 (void)sprintf(tmpbuf,"%"IVdf, (IV)SvIVX(sv));
2688 Gconvert(SvNVX(sv), NV_DIG, 0, tmpbuf);
2693 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2694 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2701 if (SvTHINKFIRST(sv)) {
2704 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,string)) &&
2705 (SvTYPE(tmpstr) != SVt_RV || (SvRV(tmpstr) != SvRV(sv))))
2706 return SvPV(tmpstr,*lp);
2713 switch (SvTYPE(sv)) {
2715 if ( ((SvFLAGS(sv) &
2716 (SVs_OBJECT|SVf_OK|SVs_GMG|SVs_SMG|SVs_RMG))
2717 == (SVs_OBJECT|SVs_RMG))
2718 && strEQ(s=HvNAME(SvSTASH(sv)), "Regexp")
2719 && (mg = mg_find(sv, PERL_MAGIC_qr))) {
2720 regexp *re = (regexp *)mg->mg_obj;
2723 char *fptr = "msix";
2728 U16 reganch = (re->reganch & PMf_COMPILETIME) >> 12;
2730 while((ch = *fptr++)) {
2732 reflags[left++] = ch;
2735 reflags[right--] = ch;
2740 reflags[left] = '-';
2744 mg->mg_len = re->prelen + 4 + left;
2745 New(616, mg->mg_ptr, mg->mg_len + 1 + left, char);
2746 Copy("(?", mg->mg_ptr, 2, char);
2747 Copy(reflags, mg->mg_ptr+2, left, char);
2748 Copy(":", mg->mg_ptr+left+2, 1, char);
2749 Copy(re->precomp, mg->mg_ptr+3+left, re->prelen, char);
2750 mg->mg_ptr[mg->mg_len - 1] = ')';
2751 mg->mg_ptr[mg->mg_len] = 0;
2753 PL_reginterp_cnt += re->program[0].next_off;
2765 case SVt_PVBM: if (SvROK(sv))
2768 s = "SCALAR"; break;
2769 case SVt_PVLV: s = "LVALUE"; break;
2770 case SVt_PVAV: s = "ARRAY"; break;
2771 case SVt_PVHV: s = "HASH"; break;
2772 case SVt_PVCV: s = "CODE"; break;
2773 case SVt_PVGV: s = "GLOB"; break;
2774 case SVt_PVFM: s = "FORMAT"; break;
2775 case SVt_PVIO: s = "IO"; break;
2776 default: s = "UNKNOWN"; break;
2780 Perl_sv_setpvf(aTHX_ tsv, "%s=%s", HvNAME(SvSTASH(sv)), s);
2783 Perl_sv_catpvf(aTHX_ tsv, "(0x%"UVxf")", PTR2UV(sv));
2789 if (SvREADONLY(sv) && !SvOK(sv)) {
2790 if (ckWARN(WARN_UNINITIALIZED))
2796 if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
2797 /* I'm assuming that if both IV and NV are equally valid then
2798 converting the IV is going to be more efficient */
2799 U32 isIOK = SvIOK(sv);
2800 U32 isUIOK = SvIsUV(sv);
2801 char buf[TYPE_CHARS(UV)];
2804 if (SvTYPE(sv) < SVt_PVIV)
2805 sv_upgrade(sv, SVt_PVIV);
2807 ptr = uiv_2buf(buf, 0, SvUVX(sv), 1, &ebuf);
2809 ptr = uiv_2buf(buf, SvIVX(sv), 0, 0, &ebuf);
2810 SvGROW(sv, ebuf - ptr + 1); /* inlined from sv_setpvn */
2811 Move(ptr,SvPVX(sv),ebuf - ptr,char);
2812 SvCUR_set(sv, ebuf - ptr);
2822 else if (SvNOKp(sv)) {
2823 if (SvTYPE(sv) < SVt_PVNV)
2824 sv_upgrade(sv, SVt_PVNV);
2825 /* The +20 is pure guesswork. Configure test needed. --jhi */
2826 SvGROW(sv, NV_DIG + 20);
2828 olderrno = errno; /* some Xenix systems wipe out errno here */
2830 if (SvNVX(sv) == 0.0)
2831 (void)strcpy(s,"0");
2835 Gconvert(SvNVX(sv), NV_DIG, 0, s);
2838 #ifdef FIXNEGATIVEZERO
2839 if (*s == '-' && s[1] == '0' && !s[2])
2849 if (ckWARN(WARN_UNINITIALIZED)
2850 && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
2853 if (SvTYPE(sv) < SVt_PV)
2854 /* Typically the caller expects that sv_any is not NULL now. */
2855 sv_upgrade(sv, SVt_PV);
2858 *lp = s - SvPVX(sv);
2861 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
2862 PTR2UV(sv),SvPVX(sv)));
2866 if (SvROK(sv)) { /* XXX Skip this when sv_pvn_force calls */
2867 /* Sneaky stuff here */
2871 tsv = newSVpv(tmpbuf, 0);
2887 len = strlen(tmpbuf);
2889 #ifdef FIXNEGATIVEZERO
2890 if (len == 2 && t[0] == '-' && t[1] == '0') {
2895 (void)SvUPGRADE(sv, SVt_PV);
2897 s = SvGROW(sv, len + 1);
2906 Perl_sv_2pvbyte_nolen(pTHX_ register SV *sv)
2909 return sv_2pvbyte(sv, &n_a);
2913 Perl_sv_2pvbyte(pTHX_ register SV *sv, STRLEN *lp)
2915 sv_utf8_downgrade(sv,0);
2916 return SvPV(sv,*lp);
2920 Perl_sv_2pvutf8_nolen(pTHX_ register SV *sv)
2923 return sv_2pvutf8(sv, &n_a);
2927 Perl_sv_2pvutf8(pTHX_ register SV *sv, STRLEN *lp)
2929 sv_utf8_upgrade(sv);
2930 return SvPV(sv,*lp);
2933 /* This function is only called on magical items */
2935 Perl_sv_2bool(pTHX_ register SV *sv)
2944 if (SvAMAGIC(sv) && (tmpsv=AMG_CALLun(sv,bool_)) &&
2945 (SvTYPE(tmpsv) != SVt_RV || (SvRV(tmpsv) != SvRV(sv))))
2946 return SvTRUE(tmpsv);
2947 return SvRV(sv) != 0;
2950 register XPV* Xpvtmp;
2951 if ((Xpvtmp = (XPV*)SvANY(sv)) &&
2952 (*Xpvtmp->xpv_pv > '0' ||
2953 Xpvtmp->xpv_cur > 1 ||
2954 (Xpvtmp->xpv_cur && *Xpvtmp->xpv_pv != '0')))
2961 return SvIVX(sv) != 0;
2964 return SvNVX(sv) != 0.0;
2972 =for apidoc sv_utf8_upgrade
2974 Convert the PV of an SV to its UTF8-encoded form.
2975 Forces the SV to string form it it is not already.
2976 Always sets the SvUTF8 flag to avoid future validity checks even
2977 if all the bytes have hibit clear.
2983 Perl_sv_utf8_upgrade(pTHX_ register SV *sv)
2985 return sv_utf8_upgrade_flags(sv, SV_GMAGIC);
2989 =for apidoc sv_utf8_upgrade_flags
2991 Convert the PV of an SV to its UTF8-encoded form.
2992 Forces the SV to string form it it is not already.
2993 Always sets the SvUTF8 flag to avoid future validity checks even
2994 if all the bytes have hibit clear. If C<flags> has C<SV_GMAGIC> bit set,
2995 will C<mg_get> on C<sv> if appropriate, else not. C<sv_utf8_upgrade> and
2996 C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
3002 Perl_sv_utf8_upgrade_flags(pTHX_ register SV *sv, I32 flags)
3012 (void) sv_2pv_flags(sv,&len, flags);
3020 if (SvREADONLY(sv) && SvFAKE(sv)) {
3021 sv_force_normal(sv);
3024 /* This function could be much more efficient if we had a FLAG in SVs
3025 * to signal if there are any hibit chars in the PV.
3026 * Given that there isn't make loop fast as possible
3028 s = (U8 *) SvPVX(sv);
3029 e = (U8 *) SvEND(sv);
3033 if ((hibit = !NATIVE_IS_INVARIANT(ch)))
3039 len = SvCUR(sv) + 1; /* Plus the \0 */
3040 SvPVX(sv) = (char*)bytes_to_utf8((U8*)s, &len);
3041 SvCUR(sv) = len - 1;
3043 Safefree(s); /* No longer using what was there before. */
3044 SvLEN(sv) = len; /* No longer know the real size. */
3046 /* Mark as UTF-8 even if no hibit - saves scanning loop */
3052 =for apidoc sv_utf8_downgrade
3054 Attempt to convert the PV of an SV from UTF8-encoded to byte encoding.
3055 This may not be possible if the PV contains non-byte encoding characters;
3056 if this is the case, either returns false or, if C<fail_ok> is not
3063 Perl_sv_utf8_downgrade(pTHX_ register SV* sv, bool fail_ok)
3065 if (SvPOK(sv) && SvUTF8(sv)) {
3070 if (SvREADONLY(sv) && SvFAKE(sv))
3071 sv_force_normal(sv);
3072 s = (U8 *) SvPV(sv, len);
3073 if (!utf8_to_bytes(s, &len)) {
3076 #ifdef USE_BYTES_DOWNGRADES
3077 else if (IN_BYTES) {
3079 U8 *e = (U8 *) SvEND(sv);
3082 UV ch = utf8n_to_uvchr(s,(e-s),&len,0);
3083 if (first && ch > 255) {
3085 Perl_warner(aTHX_ WARN_UTF8, "Wide character in byte %s",
3086 PL_op_desc[PL_op->op_type]);
3088 Perl_warner(aTHX_ WARN_UTF8, "Wide character in byte");
3095 len = (d - (U8 *) SvPVX(sv));
3100 Perl_croak(aTHX_ "Wide character in %s",
3101 PL_op_desc[PL_op->op_type]);
3103 Perl_croak(aTHX_ "Wide character");
3114 =for apidoc sv_utf8_encode
3116 Convert the PV of an SV to UTF8-encoded, but then turn off the C<SvUTF8>
3117 flag so that it looks like octets again. Used as a building block
3118 for encode_utf8 in Encode.xs
3124 Perl_sv_utf8_encode(pTHX_ register SV *sv)
3126 (void) sv_utf8_upgrade(sv);
3131 =for apidoc sv_utf8_decode
3133 Convert the octets in the PV from UTF-8 to chars. Scan for validity and then
3134 turn of SvUTF8 if needed so that we see characters. Used as a building block
3135 for decode_utf8 in Encode.xs
3143 Perl_sv_utf8_decode(pTHX_ register SV *sv)
3149 /* The octets may have got themselves encoded - get them back as bytes */
3150 if (!sv_utf8_downgrade(sv, TRUE))
3153 /* it is actually just a matter of turning the utf8 flag on, but
3154 * we want to make sure everything inside is valid utf8 first.
3156 c = (U8 *) SvPVX(sv);
3157 if (!is_utf8_string(c, SvCUR(sv)+1))
3159 e = (U8 *) SvEND(sv);
3162 if (!UTF8_IS_INVARIANT(ch)) {
3172 /* Note: sv_setsv() should not be called with a source string that needs
3173 * to be reused, since it may destroy the source string if it is marked
3178 =for apidoc sv_setsv
3180 Copies the contents of the source SV C<ssv> into the destination SV C<dsv>.
3181 The source SV may be destroyed if it is mortal. Does not handle 'set'
3182 magic. See the macro forms C<SvSetSV>, C<SvSetSV_nosteal> and
3188 /* sv_setsv() is aliased to Perl_sv_setsv_macro; this function provided
3189 for binary compatibility only
3192 Perl_sv_setsv(pTHX_ SV *dstr, register SV *sstr)
3194 sv_setsv_flags(dstr, sstr, SV_GMAGIC);
3198 =for apidoc sv_setsv_flags
3200 Copies the contents of the source SV C<ssv> into the destination SV C<dsv>.
3201 The source SV may be destroyed if it is mortal. Does not handle 'set'
3202 magic. If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<ssv> if
3203 appropriate, else not. C<sv_setsv> and C<sv_setsv_nomg> are implemented
3204 in terms of this function.
3210 Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV *sstr, I32 flags)
3212 register U32 sflags;
3218 SV_CHECK_THINKFIRST(dstr);
3220 sstr = &PL_sv_undef;
3221 stype = SvTYPE(sstr);
3222 dtype = SvTYPE(dstr);
3226 /* There's a lot of redundancy below but we're going for speed here */
3231 if (dtype != SVt_PVGV) {
3232 (void)SvOK_off(dstr);
3240 sv_upgrade(dstr, SVt_IV);
3243 sv_upgrade(dstr, SVt_PVNV);
3247 sv_upgrade(dstr, SVt_PVIV);
3250 (void)SvIOK_only(dstr);
3251 SvIVX(dstr) = SvIVX(sstr);
3254 if (SvTAINTED(sstr))
3265 sv_upgrade(dstr, SVt_NV);
3270 sv_upgrade(dstr, SVt_PVNV);
3273 SvNVX(dstr) = SvNVX(sstr);
3274 (void)SvNOK_only(dstr);
3275 if (SvTAINTED(sstr))
3283 sv_upgrade(dstr, SVt_RV);
3284 else if (dtype == SVt_PVGV &&
3285 SvTYPE(SvRV(sstr)) == SVt_PVGV) {
3288 if (GvIMPORTED(dstr) != GVf_IMPORTED
3289 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3291 GvIMPORTED_on(dstr);
3302 sv_upgrade(dstr, SVt_PV);
3305 if (dtype < SVt_PVIV)
3306 sv_upgrade(dstr, SVt_PVIV);
3309 if (dtype < SVt_PVNV)
3310 sv_upgrade(dstr, SVt_PVNV);
3317 Perl_croak(aTHX_ "Bizarre copy of %s in %s", sv_reftype(sstr, 0),
3318 PL_op_name[PL_op->op_type]);
3320 Perl_croak(aTHX_ "Bizarre copy of %s", sv_reftype(sstr, 0));
3324 if (dtype <= SVt_PVGV) {
3326 if (dtype != SVt_PVGV) {
3327 char *name = GvNAME(sstr);
3328 STRLEN len = GvNAMELEN(sstr);
3329 sv_upgrade(dstr, SVt_PVGV);
3330 sv_magic(dstr, dstr, PERL_MAGIC_glob, Nullch, 0);
3331 GvSTASH(dstr) = (HV*)SvREFCNT_inc(GvSTASH(sstr));
3332 GvNAME(dstr) = savepvn(name, len);
3333 GvNAMELEN(dstr) = len;
3334 SvFAKE_on(dstr); /* can coerce to non-glob */
3336 /* ahem, death to those who redefine active sort subs */
3337 else if (PL_curstackinfo->si_type == PERLSI_SORT
3338 && GvCV(dstr) && PL_sortcop == CvSTART(GvCV(dstr)))
3339 Perl_croak(aTHX_ "Can't redefine active sort subroutine %s",
3342 #ifdef GV_SHARED_CHECK
3343 if (GvSHARED((GV*)dstr)) {
3344 Perl_croak(aTHX_ PL_no_modify);
3348 (void)SvOK_off(dstr);
3349 GvINTRO_off(dstr); /* one-shot flag */
3351 GvGP(dstr) = gp_ref(GvGP(sstr));
3352 if (SvTAINTED(sstr))
3354 if (GvIMPORTED(dstr) != GVf_IMPORTED
3355 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3357 GvIMPORTED_on(dstr);
3365 if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
3367 if (SvTYPE(sstr) != stype) {
3368 stype = SvTYPE(sstr);
3369 if (stype == SVt_PVGV && dtype <= SVt_PVGV)
3373 if (stype == SVt_PVLV)
3374 (void)SvUPGRADE(dstr, SVt_PVNV);
3376 (void)SvUPGRADE(dstr, stype);
3379 sflags = SvFLAGS(sstr);
3381 if (sflags & SVf_ROK) {
3382 if (dtype >= SVt_PV) {
3383 if (dtype == SVt_PVGV) {
3384 SV *sref = SvREFCNT_inc(SvRV(sstr));
3386 int intro = GvINTRO(dstr);
3388 #ifdef GV_SHARED_CHECK
3389 if (GvSHARED((GV*)dstr)) {
3390 Perl_croak(aTHX_ PL_no_modify);
3397 GvINTRO_off(dstr); /* one-shot flag */
3398 Newz(602,gp, 1, GP);
3399 GvGP(dstr) = gp_ref(gp);
3400 GvSV(dstr) = NEWSV(72,0);
3401 GvLINE(dstr) = CopLINE(PL_curcop);
3402 GvEGV(dstr) = (GV*)dstr;
3405 switch (SvTYPE(sref)) {
3408 SAVESPTR(GvAV(dstr));
3410 dref = (SV*)GvAV(dstr);
3411 GvAV(dstr) = (AV*)sref;
3412 if (!GvIMPORTED_AV(dstr)
3413 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3415 GvIMPORTED_AV_on(dstr);
3420 SAVESPTR(GvHV(dstr));
3422 dref = (SV*)GvHV(dstr);
3423 GvHV(dstr) = (HV*)sref;
3424 if (!GvIMPORTED_HV(dstr)
3425 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3427 GvIMPORTED_HV_on(dstr);
3432 if (GvCVGEN(dstr) && GvCV(dstr) != (CV*)sref) {
3433 SvREFCNT_dec(GvCV(dstr));
3434 GvCV(dstr) = Nullcv;
3435 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3436 PL_sub_generation++;
3438 SAVESPTR(GvCV(dstr));
3441 dref = (SV*)GvCV(dstr);
3442 if (GvCV(dstr) != (CV*)sref) {
3443 CV* cv = GvCV(dstr);
3445 if (!GvCVGEN((GV*)dstr) &&
3446 (CvROOT(cv) || CvXSUB(cv)))
3448 /* ahem, death to those who redefine
3449 * active sort subs */
3450 if (PL_curstackinfo->si_type == PERLSI_SORT &&
3451 PL_sortcop == CvSTART(cv))
3453 "Can't redefine active sort subroutine %s",
3454 GvENAME((GV*)dstr));
3455 /* Redefining a sub - warning is mandatory if
3456 it was a const and its value changed. */
3457 if (ckWARN(WARN_REDEFINE)
3459 && (!CvCONST((CV*)sref)
3460 || sv_cmp(cv_const_sv(cv),
3461 cv_const_sv((CV*)sref)))))
3463 Perl_warner(aTHX_ WARN_REDEFINE,
3465 ? "Constant subroutine %s redefined"
3466 : "Subroutine %s redefined",
3467 GvENAME((GV*)dstr));
3470 cv_ckproto(cv, (GV*)dstr,
3471 SvPOK(sref) ? SvPVX(sref) : Nullch);
3473 GvCV(dstr) = (CV*)sref;
3474 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3475 GvASSUMECV_on(dstr);
3476 PL_sub_generation++;
3478 if (!GvIMPORTED_CV(dstr)
3479 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3481 GvIMPORTED_CV_on(dstr);
3486 SAVESPTR(GvIOp(dstr));
3488 dref = (SV*)GvIOp(dstr);
3489 GvIOp(dstr) = (IO*)sref;
3493 SAVESPTR(GvFORM(dstr));
3495 dref = (SV*)GvFORM(dstr);
3496 GvFORM(dstr) = (CV*)sref;
3500 SAVESPTR(GvSV(dstr));
3502 dref = (SV*)GvSV(dstr);
3504 if (!GvIMPORTED_SV(dstr)
3505 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3507 GvIMPORTED_SV_on(dstr);
3515 if (SvTAINTED(sstr))
3520 (void)SvOOK_off(dstr); /* backoff */
3522 Safefree(SvPVX(dstr));
3523 SvLEN(dstr)=SvCUR(dstr)=0;
3526 (void)SvOK_off(dstr);
3527 SvRV(dstr) = SvREFCNT_inc(SvRV(sstr));
3529 if (sflags & SVp_NOK) {
3531 /* Only set the public OK flag if the source has public OK. */
3532 if (sflags & SVf_NOK)
3533 SvFLAGS(dstr) |= SVf_NOK;
3534 SvNVX(dstr) = SvNVX(sstr);
3536 if (sflags & SVp_IOK) {
3537 (void)SvIOKp_on(dstr);
3538 if (sflags & SVf_IOK)
3539 SvFLAGS(dstr) |= SVf_IOK;
3540 if (sflags & SVf_IVisUV)
3542 SvIVX(dstr) = SvIVX(sstr);
3544 if (SvAMAGIC(sstr)) {
3548 else if (sflags & SVp_POK) {
3551 * Check to see if we can just swipe the string. If so, it's a
3552 * possible small lose on short strings, but a big win on long ones.
3553 * It might even be a win on short strings if SvPVX(dstr)
3554 * has to be allocated and SvPVX(sstr) has to be freed.
3557 if (SvTEMP(sstr) && /* slated for free anyway? */
3558 SvREFCNT(sstr) == 1 && /* and no other references to it? */
3559 !(sflags & SVf_OOK) && /* and not involved in OOK hack? */
3560 SvLEN(sstr) && /* and really is a string */
3561 !(PL_op && PL_op->op_type == OP_AASSIGN)) /* and won't be needed again, potentially */
3563 if (SvPVX(dstr)) { /* we know that dtype >= SVt_PV */
3565 SvFLAGS(dstr) &= ~SVf_OOK;
3566 Safefree(SvPVX(dstr) - SvIVX(dstr));
3568 else if (SvLEN(dstr))
3569 Safefree(SvPVX(dstr));
3571 (void)SvPOK_only(dstr);
3572 SvPV_set(dstr, SvPVX(sstr));
3573 SvLEN_set(dstr, SvLEN(sstr));
3574 SvCUR_set(dstr, SvCUR(sstr));
3577 (void)SvOK_off(sstr); /* NOTE: nukes most SvFLAGS on sstr */
3578 SvPV_set(sstr, Nullch);
3583 else { /* have to copy actual string */
3584 STRLEN len = SvCUR(sstr);
3586 SvGROW(dstr, len + 1); /* inlined from sv_setpvn */
3587 Move(SvPVX(sstr),SvPVX(dstr),len,char);
3588 SvCUR_set(dstr, len);
3589 *SvEND(dstr) = '\0';
3590 (void)SvPOK_only(dstr);
3592 if (sflags & SVf_UTF8)
3595 if (sflags & SVp_NOK) {
3597 if (sflags & SVf_NOK)
3598 SvFLAGS(dstr) |= SVf_NOK;
3599 SvNVX(dstr) = SvNVX(sstr);
3601 if (sflags & SVp_IOK) {
3602 (void)SvIOKp_on(dstr);
3603 if (sflags & SVf_IOK)
3604 SvFLAGS(dstr) |= SVf_IOK;
3605 if (sflags & SVf_IVisUV)
3607 SvIVX(dstr) = SvIVX(sstr);
3610 else if (sflags & SVp_IOK) {
3611 if (sflags & SVf_IOK)
3612 (void)SvIOK_only(dstr);
3614 (void)SvOK_off(dstr);
3615 (void)SvIOKp_on(dstr);
3617 /* XXXX Do we want to set IsUV for IV(ROK)? Be extra safe... */
3618 if (sflags & SVf_IVisUV)
3620 SvIVX(dstr) = SvIVX(sstr);
3621 if (sflags & SVp_NOK) {
3622 if (sflags & SVf_NOK)
3623 (void)SvNOK_on(dstr);
3625 (void)SvNOKp_on(dstr);
3626 SvNVX(dstr) = SvNVX(sstr);
3629 else if (sflags & SVp_NOK) {
3630 if (sflags & SVf_NOK)
3631 (void)SvNOK_only(dstr);
3633 (void)SvOK_off(dstr);
3636 SvNVX(dstr) = SvNVX(sstr);
3639 if (dtype == SVt_PVGV) {
3640 if (ckWARN(WARN_MISC))
3641 Perl_warner(aTHX_ WARN_MISC, "Undefined value assigned to typeglob");
3644 (void)SvOK_off(dstr);
3646 if (SvTAINTED(sstr))
3651 =for apidoc sv_setsv_mg
3653 Like C<sv_setsv>, but also handles 'set' magic.
3659 Perl_sv_setsv_mg(pTHX_ SV *dstr, register SV *sstr)
3661 sv_setsv(dstr,sstr);
3666 =for apidoc sv_setpvn
3668 Copies a string into an SV. The C<len> parameter indicates the number of
3669 bytes to be copied. Does not handle 'set' magic. See C<sv_setpvn_mg>.
3675 Perl_sv_setpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3677 register char *dptr;
3679 SV_CHECK_THINKFIRST(sv);
3685 /* len is STRLEN which is unsigned, need to copy to signed */
3688 Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen");
3690 (void)SvUPGRADE(sv, SVt_PV);
3692 SvGROW(sv, len + 1);
3694 Move(ptr,dptr,len,char);
3697 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3702 =for apidoc sv_setpvn_mg
3704 Like C<sv_setpvn>, but also handles 'set' magic.
3710 Perl_sv_setpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3712 sv_setpvn(sv,ptr,len);
3717 =for apidoc sv_setpv
3719 Copies a string into an SV. The string must be null-terminated. Does not
3720 handle 'set' magic. See C<sv_setpv_mg>.
3726 Perl_sv_setpv(pTHX_ register SV *sv, register const char *ptr)
3728 register STRLEN len;
3730 SV_CHECK_THINKFIRST(sv);
3736 (void)SvUPGRADE(sv, SVt_PV);
3738 SvGROW(sv, len + 1);
3739 Move(ptr,SvPVX(sv),len+1,char);
3741 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3746 =for apidoc sv_setpv_mg
3748 Like C<sv_setpv>, but also handles 'set' magic.
3754 Perl_sv_setpv_mg(pTHX_ register SV *sv, register const char *ptr)
3761 =for apidoc sv_usepvn
3763 Tells an SV to use C<ptr> to find its string value. Normally the string is
3764 stored inside the SV but sv_usepvn allows the SV to use an outside string.
3765 The C<ptr> should point to memory that was allocated by C<malloc>. The
3766 string length, C<len>, must be supplied. This function will realloc the
3767 memory pointed to by C<ptr>, so that pointer should not be freed or used by
3768 the programmer after giving it to sv_usepvn. Does not handle 'set' magic.
3769 See C<sv_usepvn_mg>.
3775 Perl_sv_usepvn(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
3777 SV_CHECK_THINKFIRST(sv);
3778 (void)SvUPGRADE(sv, SVt_PV);
3783 (void)SvOOK_off(sv);
3784 if (SvPVX(sv) && SvLEN(sv))
3785 Safefree(SvPVX(sv));
3786 Renew(ptr, len+1, char);
3789 SvLEN_set(sv, len+1);
3791 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3796 =for apidoc sv_usepvn_mg
3798 Like C<sv_usepvn>, but also handles 'set' magic.
3804 Perl_sv_usepvn_mg(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
3806 sv_usepvn(sv,ptr,len);
3811 Perl_sv_force_normal_flags(pTHX_ register SV *sv, U32 flags)
3813 if (SvREADONLY(sv)) {
3815 char *pvx = SvPVX(sv);
3816 STRLEN len = SvCUR(sv);
3817 U32 hash = SvUVX(sv);
3818 SvGROW(sv, len + 1);
3819 Move(pvx,SvPVX(sv),len,char);
3823 unsharepvn(pvx,SvUTF8(sv)?-len:len,hash);
3825 else if (PL_curcop != &PL_compiling)
3826 Perl_croak(aTHX_ PL_no_modify);
3829 sv_unref_flags(sv, flags);
3830 else if (SvFAKE(sv) && SvTYPE(sv) == SVt_PVGV)
3835 Perl_sv_force_normal(pTHX_ register SV *sv)
3837 sv_force_normal_flags(sv, 0);
3843 Efficient removal of characters from the beginning of the string buffer.
3844 SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
3845 the string buffer. The C<ptr> becomes the first character of the adjusted
3852 Perl_sv_chop(pTHX_ register SV *sv, register char *ptr) /* like set but assuming ptr is in sv */
3856 register STRLEN delta;
3858 if (!ptr || !SvPOKp(sv))
3860 SV_CHECK_THINKFIRST(sv);
3861 if (SvTYPE(sv) < SVt_PVIV)
3862 sv_upgrade(sv,SVt_PVIV);
3865 if (!SvLEN(sv)) { /* make copy of shared string */
3866 char *pvx = SvPVX(sv);
3867 STRLEN len = SvCUR(sv);
3868 SvGROW(sv, len + 1);
3869 Move(pvx,SvPVX(sv),len,char);
3873 SvFLAGS(sv) |= SVf_OOK;
3875 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVp_IOK|SVp_NOK|SVf_IVisUV);
3876 delta = ptr - SvPVX(sv);
3884 =for apidoc sv_catpvn
3886 Concatenates the string onto the end of the string which is in the SV. The
3887 C<len> indicates number of bytes to copy. If the SV has the UTF8
3888 status set, then the bytes appended should be valid UTF8.
3889 Handles 'get' magic, but not 'set' magic. See C<sv_catpvn_mg>.
3894 /* sv_catpvn() is aliased to Perl_sv_catpvn_macro; this function provided
3895 for binary compatibility only
3898 Perl_sv_catpvn(pTHX_ SV *dsv, const char* sstr, STRLEN slen)
3900 sv_catpvn_flags(dsv, sstr, slen, SV_GMAGIC);
3904 =for apidoc sv_catpvn_flags
3906 Concatenates the string onto the end of the string which is in the SV. The
3907 C<len> indicates number of bytes to copy. If the SV has the UTF8
3908 status set, then the bytes appended should be valid UTF8.
3909 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<dsv> if
3910 appropriate, else not. C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
3911 in terms of this function.
3917 Perl_sv_catpvn_flags(pTHX_ register SV *dsv, register const char *sstr, register STRLEN slen, I32 flags)
3922 dstr = SvPV_force_flags(dsv, dlen, flags);
3923 SvGROW(dsv, dlen + slen + 1);
3926 Move(sstr, SvPVX(dsv) + dlen, slen, char);
3929 (void)SvPOK_only_UTF8(dsv); /* validate pointer */
3934 =for apidoc sv_catpvn_mg
3936 Like C<sv_catpvn>, but also handles 'set' magic.
3942 Perl_sv_catpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3944 sv_catpvn(sv,ptr,len);
3949 =for apidoc sv_catsv
3951 Concatenates the string from SV C<ssv> onto the end of the string in
3952 SV C<dsv>. Modifies C<dsv> but not C<ssv>. Handles 'get' magic, but
3953 not 'set' magic. See C<sv_catsv_mg>.
3957 /* sv_catsv() is aliased to Perl_sv_catsv_macro; this function provided
3958 for binary compatibility only
3961 Perl_sv_catsv(pTHX_ SV *dstr, register SV *sstr)
3963 sv_catsv_flags(dstr, sstr, SV_GMAGIC);
3967 =for apidoc sv_catsv_flags
3969 Concatenates the string from SV C<ssv> onto the end of the string in
3970 SV C<dsv>. Modifies C<dsv> but not C<ssv>. If C<flags> has C<SV_GMAGIC>
3971 bit set, will C<mg_get> on the SVs if appropriate, else not. C<sv_catsv>
3972 and C<sv_catsv_nomg> are implemented in terms of this function.
3977 Perl_sv_catsv_flags(pTHX_ SV *dsv, register SV *ssv, I32 flags)
3983 if ((spv = SvPV(ssv, slen))) {
3984 bool sutf8 = DO_UTF8(ssv);
3987 if (SvGMAGICAL(dsv) && (flags & SV_GMAGIC))
3989 dutf8 = DO_UTF8(dsv);
3991 if (dutf8 != sutf8) {
3993 /* Not modifying source SV, so taking a temporary copy. */
3994 SV* csv = sv_2mortal(newSVpvn(spv, slen));
3996 sv_utf8_upgrade(csv);
3997 spv = SvPV(csv, slen);
4000 sv_utf8_upgrade_nomg(dsv);
4002 sv_catpvn_nomg(dsv, spv, slen);
4007 =for apidoc sv_catsv_mg
4009 Like C<sv_catsv>, but also handles 'set' magic.
4015 Perl_sv_catsv_mg(pTHX_ SV *dsv, register SV *ssv)
4022 =for apidoc sv_catpv
4024 Concatenates the string onto the end of the string which is in the SV.
4025 If the SV has the UTF8 status set, then the bytes appended should be
4026 valid UTF8. Handles 'get' magic, but not 'set' magic. See C<sv_catpv_mg>.
4031 Perl_sv_catpv(pTHX_ register SV *sv, register const char *ptr)
4033 register STRLEN len;
4039 junk = SvPV_force(sv, tlen);
4041 SvGROW(sv, tlen + len + 1);
4044 Move(ptr,SvPVX(sv)+tlen,len+1,char);
4046 (void)SvPOK_only_UTF8(sv); /* validate pointer */
4051 =for apidoc sv_catpv_mg
4053 Like C<sv_catpv>, but also handles 'set' magic.
4059 Perl_sv_catpv_mg(pTHX_ register SV *sv, register const char *ptr)
4066 Perl_newSV(pTHX_ STRLEN len)
4072 sv_upgrade(sv, SVt_PV);
4073 SvGROW(sv, len + 1);
4078 /* name is assumed to contain an SV* if (name && namelen == HEf_SVKEY) */
4081 =for apidoc sv_magic
4083 Adds magic to an SV.
4089 Perl_sv_magic(pTHX_ register SV *sv, SV *obj, int how, const char *name, I32 namlen)
4093 if (SvREADONLY(sv)) {
4094 if (PL_curcop != &PL_compiling
4095 /* XXX this used to be !strchr("gBf", how), which seems to
4096 * implicity be equal to !strchr("gBf\0", how), ie \0 matches
4097 * too. I find this suprising, but have hadded PERL_MAGIC_sv
4098 * to the list of things to check - DAPM 19-May-01 */
4099 && how != PERL_MAGIC_regex_global
4100 && how != PERL_MAGIC_bm
4101 && how != PERL_MAGIC_fm
4102 && how != PERL_MAGIC_sv
4105 Perl_croak(aTHX_ PL_no_modify);
4108 if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
4109 if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
4110 if (how == PERL_MAGIC_taint)
4116 (void)SvUPGRADE(sv, SVt_PVMG);
4118 Newz(702,mg, 1, MAGIC);
4119 mg->mg_moremagic = SvMAGIC(sv);
4122 /* Some magic sontains a reference loop, where the sv and object refer to
4123 each other. To prevent a avoid a reference loop that would prevent such
4124 objects being freed, we look for such loops and if we find one we avoid
4125 incrementing the object refcount. */
4126 if (!obj || obj == sv ||
4127 how == PERL_MAGIC_arylen ||
4128 how == PERL_MAGIC_qr ||
4129 (SvTYPE(obj) == SVt_PVGV &&
4130 (GvSV(obj) == sv || GvHV(obj) == (HV*)sv || GvAV(obj) == (AV*)sv ||
4131 GvCV(obj) == (CV*)sv || GvIOp(obj) == (IO*)sv ||
4132 GvFORM(obj) == (CV*)sv)))
4137 mg->mg_obj = SvREFCNT_inc(obj);
4138 mg->mg_flags |= MGf_REFCOUNTED;
4141 mg->mg_len = namlen;
4144 mg->mg_ptr = savepvn(name, namlen);
4145 else if (namlen == HEf_SVKEY)
4146 mg->mg_ptr = (char*)SvREFCNT_inc((SV*)name);
4151 mg->mg_virtual = &PL_vtbl_sv;
4153 case PERL_MAGIC_overload:
4154 mg->mg_virtual = &PL_vtbl_amagic;
4156 case PERL_MAGIC_overload_elem:
4157 mg->mg_virtual = &PL_vtbl_amagicelem;
4159 case PERL_MAGIC_overload_table:
4160 mg->mg_virtual = &PL_vtbl_ovrld;
4163 mg->mg_virtual = &PL_vtbl_bm;
4165 case PERL_MAGIC_regdata:
4166 mg->mg_virtual = &PL_vtbl_regdata;
4168 case PERL_MAGIC_regdatum:
4169 mg->mg_virtual = &PL_vtbl_regdatum;
4171 case PERL_MAGIC_env:
4172 mg->mg_virtual = &PL_vtbl_env;
4175 mg->mg_virtual = &PL_vtbl_fm;
4177 case PERL_MAGIC_envelem:
4178 mg->mg_virtual = &PL_vtbl_envelem;
4180 case PERL_MAGIC_regex_global:
4181 mg->mg_virtual = &PL_vtbl_mglob;
4183 case PERL_MAGIC_isa:
4184 mg->mg_virtual = &PL_vtbl_isa;
4186 case PERL_MAGIC_isaelem:
4187 mg->mg_virtual = &PL_vtbl_isaelem;
4189 case PERL_MAGIC_nkeys:
4190 mg->mg_virtual = &PL_vtbl_nkeys;
4192 case PERL_MAGIC_dbfile:
4196 case PERL_MAGIC_dbline:
4197 mg->mg_virtual = &PL_vtbl_dbline;
4200 case PERL_MAGIC_mutex:
4201 mg->mg_virtual = &PL_vtbl_mutex;
4203 #endif /* USE_THREADS */
4204 #ifdef USE_LOCALE_COLLATE
4205 case PERL_MAGIC_collxfrm:
4206 mg->mg_virtual = &PL_vtbl_collxfrm;
4208 #endif /* USE_LOCALE_COLLATE */
4209 case PERL_MAGIC_tied:
4210 mg->mg_virtual = &PL_vtbl_pack;
4212 case PERL_MAGIC_tiedelem:
4213 case PERL_MAGIC_tiedscalar:
4214 mg->mg_virtual = &PL_vtbl_packelem;
4217 mg->mg_virtual = &PL_vtbl_regexp;
4219 case PERL_MAGIC_sig:
4220 mg->mg_virtual = &PL_vtbl_sig;
4222 case PERL_MAGIC_sigelem:
4223 mg->mg_virtual = &PL_vtbl_sigelem;
4225 case PERL_MAGIC_taint:
4226 mg->mg_virtual = &PL_vtbl_taint;
4229 case PERL_MAGIC_uvar:
4230 mg->mg_virtual = &PL_vtbl_uvar;
4232 case PERL_MAGIC_vec:
4233 mg->mg_virtual = &PL_vtbl_vec;
4235 case PERL_MAGIC_substr:
4236 mg->mg_virtual = &PL_vtbl_substr;
4238 case PERL_MAGIC_defelem:
4239 mg->mg_virtual = &PL_vtbl_defelem;
4241 case PERL_MAGIC_glob:
4242 mg->mg_virtual = &PL_vtbl_glob;
4244 case PERL_MAGIC_arylen:
4245 mg->mg_virtual = &PL_vtbl_arylen;
4247 case PERL_MAGIC_pos:
4248 mg->mg_virtual = &PL_vtbl_pos;
4250 case PERL_MAGIC_backref:
4251 mg->mg_virtual = &PL_vtbl_backref;
4253 case PERL_MAGIC_ext:
4254 /* Reserved for use by extensions not perl internals. */
4255 /* Useful for attaching extension internal data to perl vars. */
4256 /* Note that multiple extensions may clash if magical scalars */
4257 /* etc holding private data from one are passed to another. */
4261 Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
4265 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
4269 =for apidoc sv_unmagic
4271 Removes magic from an SV.
4277 Perl_sv_unmagic(pTHX_ SV *sv, int type)
4281 if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
4284 for (mg = *mgp; mg; mg = *mgp) {
4285 if (mg->mg_type == type) {
4286 MGVTBL* vtbl = mg->mg_virtual;
4287 *mgp = mg->mg_moremagic;
4288 if (vtbl && vtbl->svt_free)
4289 CALL_FPTR(vtbl->svt_free)(aTHX_ sv, mg);
4290 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
4291 if (mg->mg_len >= 0)
4292 Safefree(mg->mg_ptr);
4293 else if (mg->mg_len == HEf_SVKEY)
4294 SvREFCNT_dec((SV*)mg->mg_ptr);
4296 if (mg->mg_flags & MGf_REFCOUNTED)
4297 SvREFCNT_dec(mg->mg_obj);
4301 mgp = &mg->mg_moremagic;
4305 SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_NOK|SVp_POK)) >> PRIVSHIFT;
4312 =for apidoc sv_rvweaken
4320 Perl_sv_rvweaken(pTHX_ SV *sv)
4323 if (!SvOK(sv)) /* let undefs pass */
4326 Perl_croak(aTHX_ "Can't weaken a nonreference");
4327 else if (SvWEAKREF(sv)) {
4328 if (ckWARN(WARN_MISC))
4329 Perl_warner(aTHX_ WARN_MISC, "Reference is already weak");
4333 sv_add_backref(tsv, sv);
4340 S_sv_add_backref(pTHX_ SV *tsv, SV *sv)
4344 if (SvMAGICAL(tsv) && (mg = mg_find(tsv, PERL_MAGIC_backref)))
4345 av = (AV*)mg->mg_obj;
4348 sv_magic(tsv, (SV*)av, PERL_MAGIC_backref, NULL, 0);
4349 SvREFCNT_dec(av); /* for sv_magic */
4355 S_sv_del_backref(pTHX_ SV *sv)
4362 if (!SvMAGICAL(tsv) || !(mg = mg_find(tsv, PERL_MAGIC_backref)))
4363 Perl_croak(aTHX_ "panic: del_backref");
4364 av = (AV *)mg->mg_obj;
4369 svp[i] = &PL_sv_undef; /* XXX */
4376 =for apidoc sv_insert
4378 Inserts a string at the specified offset/length within the SV. Similar to
4379 the Perl substr() function.
4385 Perl_sv_insert(pTHX_ SV *bigstr, STRLEN offset, STRLEN len, char *little, STRLEN littlelen)
4389 register char *midend;
4390 register char *bigend;
4396 Perl_croak(aTHX_ "Can't modify non-existent substring");
4397 SvPV_force(bigstr, curlen);
4398 (void)SvPOK_only_UTF8(bigstr);
4399 if (offset + len > curlen) {
4400 SvGROW(bigstr, offset+len+1);
4401 Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
4402 SvCUR_set(bigstr, offset+len);
4406 i = littlelen - len;
4407 if (i > 0) { /* string might grow */
4408 big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
4409 mid = big + offset + len;
4410 midend = bigend = big + SvCUR(bigstr);
4413 while (midend > mid) /* shove everything down */
4414 *--bigend = *--midend;
4415 Move(little,big+offset,littlelen,char);
4421 Move(little,SvPVX(bigstr)+offset,len,char);
4426 big = SvPVX(bigstr);
4429 bigend = big + SvCUR(bigstr);
4431 if (midend > bigend)
4432 Perl_croak(aTHX_ "panic: sv_insert");
4434 if (mid - big > bigend - midend) { /* faster to shorten from end */
4436 Move(little, mid, littlelen,char);
4439 i = bigend - midend;
4441 Move(midend, mid, i,char);
4445 SvCUR_set(bigstr, mid - big);
4448 else if ((i = mid - big)) { /* faster from front */
4449 midend -= littlelen;
4451 sv_chop(bigstr,midend-i);
4456 Move(little, mid, littlelen,char);
4458 else if (littlelen) {
4459 midend -= littlelen;
4460 sv_chop(bigstr,midend);
4461 Move(little,midend,littlelen,char);
4464 sv_chop(bigstr,midend);
4470 =for apidoc sv_replace
4472 Make the first argument a copy of the second, then delete the original.
4478 Perl_sv_replace(pTHX_ register SV *sv, register SV *nsv)
4480 U32 refcnt = SvREFCNT(sv);
4481 SV_CHECK_THINKFIRST(sv);
4482 if (SvREFCNT(nsv) != 1 && ckWARN_d(WARN_INTERNAL))
4483 Perl_warner(aTHX_ WARN_INTERNAL, "Reference miscount in sv_replace()");
4484 if (SvMAGICAL(sv)) {
4488 sv_upgrade(nsv, SVt_PVMG);
4489 SvMAGIC(nsv) = SvMAGIC(sv);
4490 SvFLAGS(nsv) |= SvMAGICAL(sv);
4496 assert(!SvREFCNT(sv));
4497 StructCopy(nsv,sv,SV);
4498 SvREFCNT(sv) = refcnt;
4499 SvFLAGS(nsv) |= SVTYPEMASK; /* Mark as freed */
4504 =for apidoc sv_clear
4506 Clear an SV, making it empty. Does not free the memory used by the SV
4513 Perl_sv_clear(pTHX_ register SV *sv)
4517 assert(SvREFCNT(sv) == 0);
4520 if (PL_defstash) { /* Still have a symbol table? */
4525 Zero(&tmpref, 1, SV);
4526 sv_upgrade(&tmpref, SVt_RV);
4528 SvREADONLY_on(&tmpref); /* DESTROY() could be naughty */
4529 SvREFCNT(&tmpref) = 1;
4532 stash = SvSTASH(sv);
4533 destructor = StashHANDLER(stash,DESTROY);
4536 PUSHSTACKi(PERLSI_DESTROY);
4537 SvRV(&tmpref) = SvREFCNT_inc(sv);
4542 call_sv((SV*)destructor, G_DISCARD|G_EVAL|G_KEEPERR);
4548 } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
4550 del_XRV(SvANY(&tmpref));
4553 if (PL_in_clean_objs)
4554 Perl_croak(aTHX_ "DESTROY created new reference to dead object '%s'",
4556 /* DESTROY gave object new lease on life */
4562 SvREFCNT_dec(SvSTASH(sv)); /* possibly of changed persuasion */
4563 SvOBJECT_off(sv); /* Curse the object. */
4564 if (SvTYPE(sv) != SVt_PVIO)
4565 --PL_sv_objcount; /* XXX Might want something more general */
4568 if (SvTYPE(sv) >= SVt_PVMG) {
4571 if (SvFLAGS(sv) & SVpad_TYPED)
4572 SvREFCNT_dec(SvSTASH(sv));
4575 switch (SvTYPE(sv)) {
4578 IoIFP(sv) != PerlIO_stdin() &&
4579 IoIFP(sv) != PerlIO_stdout() &&
4580 IoIFP(sv) != PerlIO_stderr())
4582 io_close((IO*)sv, FALSE);
4584 if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
4585 PerlDir_close(IoDIRP(sv));
4586 IoDIRP(sv) = (DIR*)NULL;
4587 Safefree(IoTOP_NAME(sv));
4588 Safefree(IoFMT_NAME(sv));
4589 Safefree(IoBOTTOM_NAME(sv));
4604 SvREFCNT_dec(LvTARG(sv));
4608 Safefree(GvNAME(sv));
4609 /* cannot decrease stash refcount yet, as we might recursively delete
4610 ourselves when the refcnt drops to zero. Delay SvREFCNT_dec
4611 of stash until current sv is completely gone.
4612 -- JohnPC, 27 Mar 1998 */
4613 stash = GvSTASH(sv);
4619 (void)SvOOK_off(sv);
4627 SvREFCNT_dec(SvRV(sv));
4629 else if (SvPVX(sv) && SvLEN(sv))
4630 Safefree(SvPVX(sv));
4631 else if (SvPVX(sv) && SvREADONLY(sv) && SvFAKE(sv)) {
4632 unsharepvn(SvPVX(sv),SvUTF8(sv)?-SvCUR(sv):SvCUR(sv),SvUVX(sv));
4644 switch (SvTYPE(sv)) {
4660 del_XPVIV(SvANY(sv));
4663 del_XPVNV(SvANY(sv));
4666 del_XPVMG(SvANY(sv));
4669 del_XPVLV(SvANY(sv));
4672 del_XPVAV(SvANY(sv));
4675 del_XPVHV(SvANY(sv));
4678 del_XPVCV(SvANY(sv));
4681 del_XPVGV(SvANY(sv));
4682 /* code duplication for increased performance. */
4683 SvFLAGS(sv) &= SVf_BREAK;
4684 SvFLAGS(sv) |= SVTYPEMASK;
4685 /* decrease refcount of the stash that owns this GV, if any */
4687 SvREFCNT_dec(stash);
4688 return; /* not break, SvFLAGS reset already happened */
4690 del_XPVBM(SvANY(sv));
4693 del_XPVFM(SvANY(sv));
4696 del_XPVIO(SvANY(sv));
4699 SvFLAGS(sv) &= SVf_BREAK;
4700 SvFLAGS(sv) |= SVTYPEMASK;
4704 Perl_sv_newref(pTHX_ SV *sv)
4707 ATOMIC_INC(SvREFCNT(sv));
4714 Free the memory used by an SV.
4720 Perl_sv_free(pTHX_ SV *sv)
4722 int refcount_is_zero;
4726 if (SvREFCNT(sv) == 0) {
4727 if (SvFLAGS(sv) & SVf_BREAK)
4729 if (PL_in_clean_all) /* All is fair */
4731 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
4732 /* make sure SvREFCNT(sv)==0 happens very seldom */
4733 SvREFCNT(sv) = (~(U32)0)/2;
4736 if (ckWARN_d(WARN_INTERNAL))
4737 Perl_warner(aTHX_ WARN_INTERNAL, "Attempt to free unreferenced scalar");
4740 ATOMIC_DEC_AND_TEST(refcount_is_zero, SvREFCNT(sv));
4741 if (!refcount_is_zero)
4745 if (ckWARN_d(WARN_DEBUGGING))
4746 Perl_warner(aTHX_ WARN_DEBUGGING,
4747 "Attempt to free temp prematurely: SV 0x%"UVxf,
4752 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
4753 /* make sure SvREFCNT(sv)==0 happens very seldom */
4754 SvREFCNT(sv) = (~(U32)0)/2;
4765 Returns the length of the string in the SV. See also C<SvCUR>.
4771 Perl_sv_len(pTHX_ register SV *sv)
4780 len = mg_length(sv);
4782 junk = SvPV(sv, len);
4787 =for apidoc sv_len_utf8
4789 Returns the number of characters in the string in an SV, counting wide
4790 UTF8 bytes as a single character.
4796 Perl_sv_len_utf8(pTHX_ register SV *sv)
4802 return mg_length(sv);
4806 U8 *s = (U8*)SvPV(sv, len);
4808 return Perl_utf8_length(aTHX_ s, s + len);
4813 Perl_sv_pos_u2b(pTHX_ register SV *sv, I32* offsetp, I32* lenp)
4818 I32 uoffset = *offsetp;
4824 start = s = (U8*)SvPV(sv, len);
4826 while (s < send && uoffset--)
4830 *offsetp = s - start;
4834 while (s < send && ulen--)
4844 Perl_sv_pos_b2u(pTHX_ register SV *sv, I32* offsetp)
4853 s = (U8*)SvPV(sv, len);
4855 Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset");
4856 send = s + *offsetp;
4860 /* Call utf8n_to_uvchr() to validate the sequence */
4861 utf8n_to_uvchr(s, UTF8SKIP(s), &n, 0);
4876 Returns a boolean indicating whether the strings in the two SVs are
4883 Perl_sv_eq(pTHX_ register SV *sv1, register SV *sv2)
4897 pv1 = SvPV(sv1, cur1);
4904 pv2 = SvPV(sv2, cur2);
4906 /* do not utf8ize the comparands as a side-effect */
4907 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
4908 bool is_utf8 = TRUE;
4909 /* UTF-8ness differs */
4910 if (PL_hints & HINT_UTF8_DISTINCT)
4914 /* sv1 is the UTF-8 one , If is equal it must be downgrade-able */
4915 char *pv = (char*)bytes_from_utf8((U8*)pv1, &cur1, &is_utf8);
4920 /* sv2 is the UTF-8 one , If is equal it must be downgrade-able */
4921 char *pv = (char *)bytes_from_utf8((U8*)pv2, &cur2, &is_utf8);
4926 /* Downgrade not possible - cannot be eq */
4932 eq = memEQ(pv1, pv2, cur1);
4943 Compares the strings in two SVs. Returns -1, 0, or 1 indicating whether the
4944 string in C<sv1> is less than, equal to, or greater than the string in
4951 Perl_sv_cmp(pTHX_ register SV *sv1, register SV *sv2)
4956 bool pv1tmp = FALSE;
4957 bool pv2tmp = FALSE;
4964 pv1 = SvPV(sv1, cur1);
4971 pv2 = SvPV(sv2, cur2);
4973 /* do not utf8ize the comparands as a side-effect */
4974 if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
4975 if (PL_hints & HINT_UTF8_DISTINCT)
4976 return SvUTF8(sv1) ? 1 : -1;
4979 pv2 = (char*)bytes_to_utf8((U8*)pv2, &cur2);
4983 pv1 = (char*)bytes_to_utf8((U8*)pv1, &cur1);
4989 cmp = cur2 ? -1 : 0;
4993 I32 retval = memcmp((void*)pv1, (void*)pv2, cur1 < cur2 ? cur1 : cur2);
4996 cmp = retval < 0 ? -1 : 1;
4997 } else if (cur1 == cur2) {
5000 cmp = cur1 < cur2 ? -1 : 1;
5013 =for apidoc sv_cmp_locale
5015 Compares the strings in two SVs in a locale-aware manner. See
5022 Perl_sv_cmp_locale(pTHX_ register SV *sv1, register SV *sv2)
5024 #ifdef USE_LOCALE_COLLATE
5030 if (PL_collation_standard)
5034 pv1 = sv1 ? sv_collxfrm(sv1, &len1) : (char *) NULL;
5036 pv2 = sv2 ? sv_collxfrm(sv2, &len2) : (char *) NULL;
5038 if (!pv1 || !len1) {
5049 retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
5052 return retval < 0 ? -1 : 1;
5055 * When the result of collation is equality, that doesn't mean
5056 * that there are no differences -- some locales exclude some
5057 * characters from consideration. So to avoid false equalities,
5058 * we use the raw string as a tiebreaker.
5064 #endif /* USE_LOCALE_COLLATE */
5066 return sv_cmp(sv1, sv2);
5069 #ifdef USE_LOCALE_COLLATE
5071 * Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
5072 * scalar data of the variable transformed to such a format that
5073 * a normal memory comparison can be used to compare the data
5074 * according to the locale settings.
5077 Perl_sv_collxfrm(pTHX_ SV *sv, STRLEN *nxp)
5081 mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
5082 if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
5087 Safefree(mg->mg_ptr);
5089 if ((xf = mem_collxfrm(s, len, &xlen))) {
5090 if (SvREADONLY(sv)) {
5093 return xf + sizeof(PL_collation_ix);
5096 sv_magic(sv, 0, PERL_MAGIC_collxfrm, 0, 0);
5097 mg = mg_find(sv, PERL_MAGIC_collxfrm);
5110 if (mg && mg->mg_ptr) {
5112 return mg->mg_ptr + sizeof(PL_collation_ix);
5120 #endif /* USE_LOCALE_COLLATE */
5125 Get a line from the filehandle and store it into the SV, optionally
5126 appending to the currently-stored string.
5132 Perl_sv_gets(pTHX_ register SV *sv, register PerlIO *fp, I32 append)
5136 register STDCHAR rslast;
5137 register STDCHAR *bp;
5141 SV_CHECK_THINKFIRST(sv);
5142 (void)SvUPGRADE(sv, SVt_PV);
5146 if (RsSNARF(PL_rs)) {
5150 else if (RsRECORD(PL_rs)) {
5151 I32 recsize, bytesread;
5154 /* Grab the size of the record we're getting */
5155 recsize = SvIV(SvRV(PL_rs));
5156 (void)SvPOK_only(sv); /* Validate pointer */
5157 buffer = SvGROW(sv, recsize + 1);
5160 /* VMS wants read instead of fread, because fread doesn't respect */
5161 /* RMS record boundaries. This is not necessarily a good thing to be */
5162 /* doing, but we've got no other real choice */
5163 bytesread = PerlLIO_read(PerlIO_fileno(fp), buffer, recsize);
5165 bytesread = PerlIO_read(fp, buffer, recsize);
5167 SvCUR_set(sv, bytesread);
5168 buffer[bytesread] = '\0';
5169 if (PerlIO_isutf8(fp))
5173 return(SvCUR(sv) ? SvPVX(sv) : Nullch);
5175 else if (RsPARA(PL_rs)) {
5180 /* Get $/ i.e. PL_rs into same encoding as stream wants */
5181 if (PerlIO_isutf8(fp)) {
5182 rsptr = SvPVutf8(PL_rs, rslen);
5185 if (SvUTF8(PL_rs)) {
5186 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
5187 Perl_croak(aTHX_ "Wide character in $/");
5190 rsptr = SvPV(PL_rs, rslen);
5194 rslast = rslen ? rsptr[rslen - 1] : '\0';
5196 if (RsPARA(PL_rs)) { /* have to do this both before and after */
5197 do { /* to make sure file boundaries work right */
5200 i = PerlIO_getc(fp);
5204 PerlIO_ungetc(fp,i);
5210 /* See if we know enough about I/O mechanism to cheat it ! */
5212 /* This used to be #ifdef test - it is made run-time test for ease
5213 of abstracting out stdio interface. One call should be cheap
5214 enough here - and may even be a macro allowing compile
5218 if (PerlIO_fast_gets(fp)) {
5221 * We're going to steal some values from the stdio struct
5222 * and put EVERYTHING in the innermost loop into registers.
5224 register STDCHAR *ptr;
5228 #if defined(VMS) && defined(PERLIO_IS_STDIO)
5229 /* An ungetc()d char is handled separately from the regular
5230 * buffer, so we getc() it back out and stuff it in the buffer.
5232 i = PerlIO_getc(fp);
5233 if (i == EOF) return 0;
5234 *(--((*fp)->_ptr)) = (unsigned char) i;
5238 /* Here is some breathtakingly efficient cheating */
5240 cnt = PerlIO_get_cnt(fp); /* get count into register */
5241 (void)SvPOK_only(sv); /* validate pointer */
5242 if (SvLEN(sv) - append <= cnt + 1) { /* make sure we have the room */
5243 if (cnt > 80 && SvLEN(sv) > append) {
5244 shortbuffered = cnt - SvLEN(sv) + append + 1;
5245 cnt -= shortbuffered;
5249 /* remember that cnt can be negative */
5250 SvGROW(sv, append + (cnt <= 0 ? 2 : (cnt + 1)));
5255 bp = (STDCHAR*)SvPVX(sv) + append; /* move these two too to registers */
5256 ptr = (STDCHAR*)PerlIO_get_ptr(fp);
5257 DEBUG_P(PerlIO_printf(Perl_debug_log,
5258 "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
5259 DEBUG_P(PerlIO_printf(Perl_debug_log,
5260 "Screamer: entering: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
5261 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
5262 PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
5267 while (cnt > 0) { /* this | eat */
5269 if ((*bp++ = *ptr++) == rslast) /* really | dust */
5270 goto thats_all_folks; /* screams | sed :-) */
5274 Copy(ptr, bp, cnt, char); /* this | eat */
5275 bp += cnt; /* screams | dust */
5276 ptr += cnt; /* louder | sed :-) */
5281 if (shortbuffered) { /* oh well, must extend */
5282 cnt = shortbuffered;
5284 bpx = bp - (STDCHAR*)SvPVX(sv); /* box up before relocation */
5286 SvGROW(sv, SvLEN(sv) + append + cnt + 2);
5287 bp = (STDCHAR*)SvPVX(sv) + bpx; /* unbox after relocation */
5291 DEBUG_P(PerlIO_printf(Perl_debug_log,
5292 "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
5293 PTR2UV(ptr),(long)cnt));
5294 PerlIO_set_ptrcnt(fp, ptr, cnt); /* deregisterize cnt and ptr */
5295 DEBUG_P(PerlIO_printf(Perl_debug_log,
5296 "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
5297 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
5298 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
5299 /* This used to call 'filbuf' in stdio form, but as that behaves like
5300 getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
5301 another abstraction. */
5302 i = PerlIO_getc(fp); /* get more characters */
5303 DEBUG_P(PerlIO_printf(Perl_debug_log,
5304 "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
5305 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
5306 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
5307 cnt = PerlIO_get_cnt(fp);
5308 ptr = (STDCHAR*)PerlIO_get_ptr(fp); /* reregisterize cnt and ptr */
5309 DEBUG_P(PerlIO_printf(Perl_debug_log,
5310 "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
5312 if (i == EOF) /* all done for ever? */
5313 goto thats_really_all_folks;
5315 bpx = bp - (STDCHAR*)SvPVX(sv); /* box up before relocation */
5317 SvGROW(sv, bpx + cnt + 2);
5318 bp = (STDCHAR*)SvPVX(sv) + bpx; /* unbox after relocation */
5320 *bp++ = i; /* store character from PerlIO_getc */
5322 if (rslen && (STDCHAR)i == rslast) /* all done for now? */
5323 goto thats_all_folks;
5327 if ((rslen > 1 && (bp - (STDCHAR*)SvPVX(sv) < rslen)) ||
5328 memNE((char*)bp - rslen, rsptr, rslen))
5329 goto screamer; /* go back to the fray */
5330 thats_really_all_folks:
5332 cnt += shortbuffered;
5333 DEBUG_P(PerlIO_printf(Perl_debug_log,
5334 "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
5335 PerlIO_set_ptrcnt(fp, ptr, cnt); /* put these back or we're in trouble */
5336 DEBUG_P(PerlIO_printf(Perl_debug_log,
5337 "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
5338 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
5339 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
5341 SvCUR_set(sv, bp - (STDCHAR*)SvPVX(sv)); /* set length */
5342 DEBUG_P(PerlIO_printf(Perl_debug_log,
5343 "Screamer: done, len=%ld, string=|%.*s|\n",
5344 (long)SvCUR(sv),(int)SvCUR(sv),SvPVX(sv)));
5349 /*The big, slow, and stupid way */
5352 /* Need to work around EPOC SDK features */
5353 /* On WINS: MS VC5 generates calls to _chkstk, */
5354 /* if a `large' stack frame is allocated */
5355 /* gcc on MARM does not generate calls like these */
5361 register STDCHAR *bpe = buf + sizeof(buf);
5363 while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = i) != rslast && bp < bpe)
5364 ; /* keep reading */
5368 cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
5369 /* Accomodate broken VAXC compiler, which applies U8 cast to
5370 * both args of ?: operator, causing EOF to change into 255
5372 if (cnt) { i = (U8)buf[cnt - 1]; } else { i = EOF; }
5376 sv_catpvn(sv, (char *) buf, cnt);
5378 sv_setpvn(sv, (char *) buf, cnt);
5380 if (i != EOF && /* joy */
5382 SvCUR(sv) < rslen ||
5383 memNE(SvPVX(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
5387 * If we're reading from a TTY and we get a short read,
5388 * indicating that the user hit his EOF character, we need
5389 * to notice it now, because if we try to read from the TTY
5390 * again, the EOF condition will disappear.
5392 * The comparison of cnt to sizeof(buf) is an optimization
5393 * that prevents unnecessary calls to feof().
5397 if (!(cnt < sizeof(buf) && PerlIO_eof(fp)))
5402 if (RsPARA(PL_rs)) { /* have to do this both before and after */
5403 while (i != EOF) { /* to make sure file boundaries work right */
5404 i = PerlIO_getc(fp);
5406 PerlIO_ungetc(fp,i);
5412 if (PerlIO_isutf8(fp))
5417 return (SvCUR(sv) - append) ? SvPVX(sv) : Nullch;
5424 Auto-increment of the value in the SV.
5430 Perl_sv_inc(pTHX_ register SV *sv)
5439 if (SvTHINKFIRST(sv)) {
5440 if (SvREADONLY(sv)) {
5441 if (PL_curcop != &PL_compiling)
5442 Perl_croak(aTHX_ PL_no_modify);
5446 if (SvAMAGIC(sv) && AMG_CALLun(sv,inc))
5448 i = PTR2IV(SvRV(sv));
5453 flags = SvFLAGS(sv);
5454 if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
5455 /* It's (privately or publicly) a float, but not tested as an
5456 integer, so test it to see. */
5458 flags = SvFLAGS(sv);
5460 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
5461 /* It's publicly an integer, or privately an integer-not-float */
5464 if (SvUVX(sv) == UV_MAX)
5465 sv_setnv(sv, (NV)UV_MAX + 1.0);
5467 (void)SvIOK_only_UV(sv);
5470 if (SvIVX(sv) == IV_MAX)
5471 sv_setuv(sv, (UV)IV_MAX + 1);
5473 (void)SvIOK_only(sv);
5479 if (flags & SVp_NOK) {
5480 (void)SvNOK_only(sv);
5485 if (!(flags & SVp_POK) || !*SvPVX(sv)) {
5486 if ((flags & SVTYPEMASK) < SVt_PVIV)
5487 sv_upgrade(sv, SVt_IV);
5488 (void)SvIOK_only(sv);
5493 while (isALPHA(*d)) d++;
5494 while (isDIGIT(*d)) d++;
5496 #ifdef PERL_PRESERVE_IVUV
5497 /* Got to punt this an an integer if needs be, but we don't issue
5498 warnings. Probably ought to make the sv_iv_please() that does
5499 the conversion if possible, and silently. */
5500 int numtype = grok_number(SvPVX(sv), SvCUR(sv), NULL);
5501 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
5502 /* Need to try really hard to see if it's an integer.
5503 9.22337203685478e+18 is an integer.
5504 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
5505 so $a="9.22337203685478e+18"; $a+0; $a++
5506 needs to be the same as $a="9.22337203685478e+18"; $a++
5513 /* sv_2iv *should* have made this an NV */
5514 if (flags & SVp_NOK) {
5515 (void)SvNOK_only(sv);
5519 /* I don't think we can get here. Maybe I should assert this
5520 And if we do get here I suspect that sv_setnv will croak. NWC
5522 #if defined(USE_LONG_DOUBLE)
5523 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",
5524 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5526 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%g\n",
5527 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5530 #endif /* PERL_PRESERVE_IVUV */
5531 sv_setnv(sv,Atof(SvPVX(sv)) + 1.0);
5535 while (d >= SvPVX(sv)) {
5543 /* MKS: The original code here died if letters weren't consecutive.
5544 * at least it didn't have to worry about non-C locales. The
5545 * new code assumes that ('z'-'a')==('Z'-'A'), letters are
5546 * arranged in order (although not consecutively) and that only
5547 * [A-Za-z] are accepted by isALPHA in the C locale.
5549 if (*d != 'z' && *d != 'Z') {
5550 do { ++*d; } while (!isALPHA(*d));
5553 *(d--) -= 'z' - 'a';
5558 *(d--) -= 'z' - 'a' + 1;
5562 /* oh,oh, the number grew */
5563 SvGROW(sv, SvCUR(sv) + 2);
5565 for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX(sv); d--)
5576 Auto-decrement of the value in the SV.
5582 Perl_sv_dec(pTHX_ register SV *sv)
5590 if (SvTHINKFIRST(sv)) {
5591 if (SvREADONLY(sv)) {
5592 if (PL_curcop != &PL_compiling)
5593 Perl_croak(aTHX_ PL_no_modify);
5597 if (SvAMAGIC(sv) && AMG_CALLun(sv,dec))
5599 i = PTR2IV(SvRV(sv));
5604 /* Unlike sv_inc we don't have to worry about string-never-numbers
5605 and keeping them magic. But we mustn't warn on punting */
5606 flags = SvFLAGS(sv);
5607 if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
5608 /* It's publicly an integer, or privately an integer-not-float */
5611 if (SvUVX(sv) == 0) {
5612 (void)SvIOK_only(sv);
5616 (void)SvIOK_only_UV(sv);
5620 if (SvIVX(sv) == IV_MIN)
5621 sv_setnv(sv, (NV)IV_MIN - 1.0);
5623 (void)SvIOK_only(sv);
5629 if (flags & SVp_NOK) {
5631 (void)SvNOK_only(sv);
5634 if (!(flags & SVp_POK)) {
5635 if ((flags & SVTYPEMASK) < SVt_PVNV)
5636 sv_upgrade(sv, SVt_NV);
5638 (void)SvNOK_only(sv);
5641 #ifdef PERL_PRESERVE_IVUV
5643 int numtype = grok_number(SvPVX(sv), SvCUR(sv), NULL);
5644 if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
5645 /* Need to try really hard to see if it's an integer.
5646 9.22337203685478e+18 is an integer.
5647 but "9.22337203685478e+18" + 0 is UV=9223372036854779904
5648 so $a="9.22337203685478e+18"; $a+0; $a--
5649 needs to be the same as $a="9.22337203685478e+18"; $a--
5656 /* sv_2iv *should* have made this an NV */
5657 if (flags & SVp_NOK) {
5658 (void)SvNOK_only(sv);
5662 /* I don't think we can get here. Maybe I should assert this
5663 And if we do get here I suspect that sv_setnv will croak. NWC
5665 #if defined(USE_LONG_DOUBLE)
5666 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",
5667 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5669 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%g\n",
5670 SvPVX(sv), SvIVX(sv), SvNVX(sv)));
5674 #endif /* PERL_PRESERVE_IVUV */
5675 sv_setnv(sv,Atof(SvPVX(sv)) - 1.0); /* punt */
5679 =for apidoc sv_mortalcopy
5681 Creates a new SV which is a copy of the original SV. The new SV is marked
5687 /* Make a string that will exist for the duration of the expression
5688 * evaluation. Actually, it may have to last longer than that, but
5689 * hopefully we won't free it until it has been assigned to a
5690 * permanent location. */
5693 Perl_sv_mortalcopy(pTHX_ SV *oldstr)
5698 sv_setsv(sv,oldstr);
5700 PL_tmps_stack[++PL_tmps_ix] = sv;
5706 =for apidoc sv_newmortal
5708 Creates a new SV which is mortal. The reference count of the SV is set to 1.
5714 Perl_sv_newmortal(pTHX)
5719 SvFLAGS(sv) = SVs_TEMP;
5721 PL_tmps_stack[++PL_tmps_ix] = sv;
5726 =for apidoc sv_2mortal
5728 Marks an SV as mortal. The SV will be destroyed when the current context
5734 /* same thing without the copying */
5737 Perl_sv_2mortal(pTHX_ register SV *sv)
5741 if (SvREADONLY(sv) && SvIMMORTAL(sv))
5744 PL_tmps_stack[++PL_tmps_ix] = sv;
5752 Creates a new SV and copies a string into it. The reference count for the
5753 SV is set to 1. If C<len> is zero, Perl will compute the length using
5754 strlen(). For efficiency, consider using C<newSVpvn> instead.
5760 Perl_newSVpv(pTHX_ const char *s, STRLEN len)
5767 sv_setpvn(sv,s,len);
5772 =for apidoc newSVpvn
5774 Creates a new SV and copies a string into it. The reference count for the
5775 SV is set to 1. Note that if C<len> is zero, Perl will create a zero length
5776 string. You are responsible for ensuring that the source string is at least
5783 Perl_newSVpvn(pTHX_ const char *s, STRLEN len)
5788 sv_setpvn(sv,s,len);
5793 =for apidoc newSVpvn_share
5795 Creates a new SV and populates it with a string from
5796 the string table. Turns on READONLY and FAKE.
5797 The idea here is that as string table is used for shared hash
5798 keys these strings will have SvPVX == HeKEY and hash lookup
5799 will avoid string compare.
5805 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
5808 bool is_utf8 = FALSE;
5813 if (is_utf8 && !(PL_hints & HINT_UTF8_DISTINCT)) {
5814 STRLEN tmplen = len;
5815 /* See the note in hv.c:hv_fetch() --jhi */
5816 src = (char*)bytes_from_utf8((U8*)src, &tmplen, &is_utf8);
5820 PERL_HASH(hash, src, len);
5822 sv_upgrade(sv, SVt_PVIV);
5823 SvPVX(sv) = sharepvn(src, is_utf8?-len:len, hash);
5835 #if defined(PERL_IMPLICIT_CONTEXT)
5837 Perl_newSVpvf_nocontext(const char* pat, ...)
5842 va_start(args, pat);
5843 sv = vnewSVpvf(pat, &args);
5850 =for apidoc newSVpvf
5852 Creates a new SV an initialize it with the string formatted like
5859 Perl_newSVpvf(pTHX_ const char* pat, ...)
5863 va_start(args, pat);
5864 sv = vnewSVpvf(pat, &args);
5870 Perl_vnewSVpvf(pTHX_ const char* pat, va_list* args)
5874 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
5881 Creates a new SV and copies a floating point value into it.
5882 The reference count for the SV is set to 1.
5888 Perl_newSVnv(pTHX_ NV n)
5900 Creates a new SV and copies an integer into it. The reference count for the
5907 Perl_newSViv(pTHX_ IV i)
5919 Creates a new SV and copies an unsigned integer into it.
5920 The reference count for the SV is set to 1.
5926 Perl_newSVuv(pTHX_ UV u)
5936 =for apidoc newRV_noinc
5938 Creates an RV wrapper for an SV. The reference count for the original
5939 SV is B<not> incremented.
5945 Perl_newRV_noinc(pTHX_ SV *tmpRef)
5950 sv_upgrade(sv, SVt_RV);
5957 /* newRV_inc is #defined to newRV in sv.h */
5959 Perl_newRV(pTHX_ SV *tmpRef)
5961 return newRV_noinc(SvREFCNT_inc(tmpRef));
5967 Creates a new SV which is an exact duplicate of the original SV.
5972 /* make an exact duplicate of old */
5975 Perl_newSVsv(pTHX_ register SV *old)
5981 if (SvTYPE(old) == SVTYPEMASK) {
5982 if (ckWARN_d(WARN_INTERNAL))
5983 Perl_warner(aTHX_ WARN_INTERNAL, "semi-panic: attempt to dup freed string");
5998 Perl_sv_reset(pTHX_ register char *s, HV *stash)
6006 char todo[PERL_UCHAR_MAX+1];
6011 if (!*s) { /* reset ?? searches */
6012 for (pm = HvPMROOT(stash); pm; pm = pm->op_pmnext) {
6013 pm->op_pmdynflags &= ~PMdf_USED;
6018 /* reset variables */
6020 if (!HvARRAY(stash))
6023 Zero(todo, 256, char);
6025 i = (unsigned char)*s;
6029 max = (unsigned char)*s++;
6030 for ( ; i <= max; i++) {
6033 for (i = 0; i <= (I32) HvMAX(stash); i++) {
6034 for (entry = HvARRAY(stash)[i];
6036 entry = HeNEXT(entry))
6038 if (!todo[(U8)*HeKEY(entry)])
6040 gv = (GV*)HeVAL(entry);
6042 if (SvTHINKFIRST(sv)) {
6043 if (!SvREADONLY(sv) && SvROK(sv))
6048 if (SvTYPE(sv) >= SVt_PV) {
6050 if (SvPVX(sv) != Nullch)
6057 if (GvHV(gv) && !HvNAME(GvHV(gv))) {
6059 #ifdef USE_ENVIRON_ARRAY
6061 environ[0] = Nullch;
6070 Perl_sv_2io(pTHX_ SV *sv)
6076 switch (SvTYPE(sv)) {
6084 Perl_croak(aTHX_ "Bad filehandle: %s", GvNAME(gv));
6088 Perl_croak(aTHX_ PL_no_usym, "filehandle");
6090 return sv_2io(SvRV(sv));
6091 gv = gv_fetchpv(SvPV(sv,n_a), FALSE, SVt_PVIO);
6097 Perl_croak(aTHX_ "Bad filehandle: %s", SvPV(sv,n_a));
6104 Perl_sv_2cv(pTHX_ SV *sv, HV **st, GV **gvp, I32 lref)
6111 return *gvp = Nullgv, Nullcv;
6112 switch (SvTYPE(sv)) {
6131 SV **sp = &sv; /* Used in tryAMAGICunDEREF macro. */
6132 tryAMAGICunDEREF(to_cv);
6135 if (SvTYPE(sv) == SVt_PVCV) {
6144 Perl_croak(aTHX_ "Not a subroutine reference");
6149 gv = gv_fetchpv(SvPV(sv, n_a), lref, SVt_PVCV);
6155 if (lref && !GvCVu(gv)) {
6158 tmpsv = NEWSV(704,0);
6159 gv_efullname3(tmpsv, gv, Nullch);
6160 /* XXX this is probably not what they think they're getting.
6161 * It has the same effect as "sub name;", i.e. just a forward
6163 newSUB(start_subparse(FALSE, 0),
6164 newSVOP(OP_CONST, 0, tmpsv),
6169 Perl_croak(aTHX_ "Unable to create sub named \"%s\"", SvPV(sv,n_a));
6178 Returns true if the SV has a true value by Perl's rules.
6184 Perl_sv_true(pTHX_ register SV *sv)
6190 if ((tXpv = (XPV*)SvANY(sv)) &&
6191 (tXpv->xpv_cur > 1 ||
6192 (tXpv->xpv_cur && *tXpv->xpv_pv != '0')))
6199 return SvIVX(sv) != 0;
6202 return SvNVX(sv) != 0.0;
6204 return sv_2bool(sv);
6210 Perl_sv_iv(pTHX_ register SV *sv)
6214 return (IV)SvUVX(sv);
6221 Perl_sv_uv(pTHX_ register SV *sv)
6226 return (UV)SvIVX(sv);
6232 Perl_sv_nv(pTHX_ register SV *sv)
6240 Perl_sv_pv(pTHX_ SV *sv)
6247 return sv_2pv(sv, &n_a);
6251 Perl_sv_pvn(pTHX_ SV *sv, STRLEN *lp)
6257 return sv_2pv(sv, lp);
6261 =for apidoc sv_pvn_force
6263 Get a sensible string out of the SV somehow.
6269 Perl_sv_pvn_force(pTHX_ SV *sv, STRLEN *lp)
6271 return sv_pvn_force_flags(sv, lp, SV_GMAGIC);
6275 =for apidoc sv_pvn_force_flags
6277 Get a sensible string out of the SV somehow.
6278 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
6279 appropriate, else not. C<sv_pvn_force> and C<sv_pvn_force_nomg> are
6280 implemented in terms of this function.
6286 Perl_sv_pvn_force_flags(pTHX_ SV *sv, STRLEN *lp, I32 flags)
6290 if (SvTHINKFIRST(sv) && !SvROK(sv))
6291 sv_force_normal(sv);
6297 if (SvTYPE(sv) > SVt_PVLV && SvTYPE(sv) != SVt_PVFM) {
6298 Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
6299 PL_op_name[PL_op->op_type]);
6302 s = sv_2pv_flags(sv, lp, flags);
6303 if (s != SvPVX(sv)) { /* Almost, but not quite, sv_setpvn() */
6308 (void)SvUPGRADE(sv, SVt_PV); /* Never FALSE */
6309 SvGROW(sv, len + 1);
6310 Move(s,SvPVX(sv),len,char);
6315 SvPOK_on(sv); /* validate pointer */
6317 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
6318 PTR2UV(sv),SvPVX(sv)));
6325 Perl_sv_pvbyte(pTHX_ SV *sv)
6327 sv_utf8_downgrade(sv,0);
6332 Perl_sv_pvbyten(pTHX_ SV *sv, STRLEN *lp)
6334 sv_utf8_downgrade(sv,0);
6335 return sv_pvn(sv,lp);
6339 Perl_sv_pvbyten_force(pTHX_ SV *sv, STRLEN *lp)
6341 sv_utf8_downgrade(sv,0);
6342 return sv_pvn_force(sv,lp);
6346 Perl_sv_pvutf8(pTHX_ SV *sv)
6348 sv_utf8_upgrade(sv);
6353 Perl_sv_pvutf8n(pTHX_ SV *sv, STRLEN *lp)
6355 sv_utf8_upgrade(sv);
6356 return sv_pvn(sv,lp);
6360 =for apidoc sv_pvutf8n_force
6362 Get a sensible UTF8-encoded string out of the SV somehow. See
6369 Perl_sv_pvutf8n_force(pTHX_ SV *sv, STRLEN *lp)
6371 sv_utf8_upgrade(sv);
6372 return sv_pvn_force(sv,lp);
6376 =for apidoc sv_reftype
6378 Returns a string describing what the SV is a reference to.
6384 Perl_sv_reftype(pTHX_ SV *sv, int ob)
6386 if (ob && SvOBJECT(sv))
6387 return HvNAME(SvSTASH(sv));
6389 switch (SvTYPE(sv)) {
6403 case SVt_PVLV: return "LVALUE";
6404 case SVt_PVAV: return "ARRAY";
6405 case SVt_PVHV: return "HASH";
6406 case SVt_PVCV: return "CODE";
6407 case SVt_PVGV: return "GLOB";
6408 case SVt_PVFM: return "FORMAT";
6409 case SVt_PVIO: return "IO";
6410 default: return "UNKNOWN";
6416 =for apidoc sv_isobject
6418 Returns a boolean indicating whether the SV is an RV pointing to a blessed
6419 object. If the SV is not an RV, or if the object is not blessed, then this
6426 Perl_sv_isobject(pTHX_ SV *sv)
6443 Returns a boolean indicating whether the SV is blessed into the specified
6444 class. This does not check for subtypes; use C<sv_derived_from> to verify
6445 an inheritance relationship.
6451 Perl_sv_isa(pTHX_ SV *sv, const char *name)
6463 return strEQ(HvNAME(SvSTASH(sv)), name);
6469 Creates a new SV for the RV, C<rv>, to point to. If C<rv> is not an RV then
6470 it will be upgraded to one. If C<classname> is non-null then the new SV will
6471 be blessed in the specified package. The new SV is returned and its
6472 reference count is 1.
6478 Perl_newSVrv(pTHX_ SV *rv, const char *classname)
6484 SV_CHECK_THINKFIRST(rv);
6487 if (SvTYPE(rv) >= SVt_PVMG) {
6488 U32 refcnt = SvREFCNT(rv);
6492 SvREFCNT(rv) = refcnt;
6495 if (SvTYPE(rv) < SVt_RV)
6496 sv_upgrade(rv, SVt_RV);
6497 else if (SvTYPE(rv) > SVt_RV) {
6498 (void)SvOOK_off(rv);
6499 if (SvPVX(rv) && SvLEN(rv))
6500 Safefree(SvPVX(rv));
6510 HV* stash = gv_stashpv(classname, TRUE);
6511 (void)sv_bless(rv, stash);
6517 =for apidoc sv_setref_pv
6519 Copies a pointer into a new SV, optionally blessing the SV. The C<rv>
6520 argument will be upgraded to an RV. That RV will be modified to point to
6521 the new SV. If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
6522 into the SV. The C<classname> argument indicates the package for the
6523 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
6524 will be returned and will have a reference count of 1.
6526 Do not use with other Perl types such as HV, AV, SV, CV, because those
6527 objects will become corrupted by the pointer copy process.
6529 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
6535 Perl_sv_setref_pv(pTHX_ SV *rv, const char *classname, void *pv)
6538 sv_setsv(rv, &PL_sv_undef);
6542 sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
6547 =for apidoc sv_setref_iv
6549 Copies an integer into a new SV, optionally blessing the SV. The C<rv>
6550 argument will be upgraded to an RV. That RV will be modified to point to
6551 the new SV. The C<classname> argument indicates the package for the
6552 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
6553 will be returned and will have a reference count of 1.
6559 Perl_sv_setref_iv(pTHX_ SV *rv, const char *classname, IV iv)
6561 sv_setiv(newSVrv(rv,classname), iv);
6566 =for apidoc sv_setref_uv
6568 Copies an unsigned integer into a new SV, optionally blessing the SV. The C<rv>
6569 argument will be upgraded to an RV. That RV will be modified to point to
6570 the new SV. The C<classname> argument indicates the package for the
6571 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
6572 will be returned and will have a reference count of 1.
6578 Perl_sv_setref_uv(pTHX_ SV *rv, const char *classname, UV uv)
6580 sv_setuv(newSVrv(rv,classname), uv);
6585 =for apidoc sv_setref_nv
6587 Copies a double into a new SV, optionally blessing the SV. The C<rv>
6588 argument will be upgraded to an RV. That RV will be modified to point to
6589 the new SV. The C<classname> argument indicates the package for the
6590 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
6591 will be returned and will have a reference count of 1.
6597 Perl_sv_setref_nv(pTHX_ SV *rv, const char *classname, NV nv)
6599 sv_setnv(newSVrv(rv,classname), nv);
6604 =for apidoc sv_setref_pvn
6606 Copies a string into a new SV, optionally blessing the SV. The length of the
6607 string must be specified with C<n>. The C<rv> argument will be upgraded to
6608 an RV. That RV will be modified to point to the new SV. The C<classname>
6609 argument indicates the package for the blessing. Set C<classname> to
6610 C<Nullch> to avoid the blessing. The new SV will be returned and will have
6611 a reference count of 1.
6613 Note that C<sv_setref_pv> copies the pointer while this copies the string.
6619 Perl_sv_setref_pvn(pTHX_ SV *rv, const char *classname, char *pv, STRLEN n)
6621 sv_setpvn(newSVrv(rv,classname), pv, n);
6626 =for apidoc sv_bless
6628 Blesses an SV into a specified package. The SV must be an RV. The package
6629 must be designated by its stash (see C<gv_stashpv()>). The reference count
6630 of the SV is unaffected.
6636 Perl_sv_bless(pTHX_ SV *sv, HV *stash)
6640 Perl_croak(aTHX_ "Can't bless non-reference value");
6642 if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
6643 if (SvREADONLY(tmpRef))
6644 Perl_croak(aTHX_ PL_no_modify);
6645 if (SvOBJECT(tmpRef)) {
6646 if (SvTYPE(tmpRef) != SVt_PVIO)
6648 SvREFCNT_dec(SvSTASH(tmpRef));
6651 SvOBJECT_on(tmpRef);
6652 if (SvTYPE(tmpRef) != SVt_PVIO)
6654 (void)SvUPGRADE(tmpRef, SVt_PVMG);
6655 SvSTASH(tmpRef) = (HV*)SvREFCNT_inc(stash);
6666 S_sv_unglob(pTHX_ SV *sv)
6670 assert(SvTYPE(sv) == SVt_PVGV);
6675 SvREFCNT_dec(GvSTASH(sv));
6676 GvSTASH(sv) = Nullhv;
6678 sv_unmagic(sv, PERL_MAGIC_glob);
6679 Safefree(GvNAME(sv));
6682 /* need to keep SvANY(sv) in the right arena */
6683 xpvmg = new_XPVMG();
6684 StructCopy(SvANY(sv), xpvmg, XPVMG);
6685 del_XPVGV(SvANY(sv));
6688 SvFLAGS(sv) &= ~SVTYPEMASK;
6689 SvFLAGS(sv) |= SVt_PVMG;
6693 =for apidoc sv_unref_flags
6695 Unsets the RV status of the SV, and decrements the reference count of
6696 whatever was being referenced by the RV. This can almost be thought of
6697 as a reversal of C<newSVrv>. The C<cflags> argument can contain
6698 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
6699 (otherwise the decrementing is conditional on the reference count being
6700 different from one or the reference being a readonly SV).
6707 Perl_sv_unref_flags(pTHX_ SV *sv, U32 flags)
6711 if (SvWEAKREF(sv)) {
6719 if (SvREFCNT(rv) != 1 || SvREADONLY(rv) || flags) /* SV_IMMEDIATE_UNREF */
6721 else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
6722 sv_2mortal(rv); /* Schedule for freeing later */
6726 =for apidoc sv_unref
6728 Unsets the RV status of the SV, and decrements the reference count of
6729 whatever was being referenced by the RV. This can almost be thought of
6730 as a reversal of C<newSVrv>. This is C<sv_unref_flags> with the C<flag>
6731 being zero. See C<SvROK_off>.
6737 Perl_sv_unref(pTHX_ SV *sv)
6739 sv_unref_flags(sv, 0);
6743 Perl_sv_taint(pTHX_ SV *sv)
6745 sv_magic((sv), Nullsv, PERL_MAGIC_taint, Nullch, 0);
6749 Perl_sv_untaint(pTHX_ SV *sv)
6751 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
6752 MAGIC *mg = mg_find(sv, PERL_MAGIC_taint);
6759 Perl_sv_tainted(pTHX_ SV *sv)
6761 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
6762 MAGIC *mg = mg_find(sv, PERL_MAGIC_taint);
6763 if (mg && ((mg->mg_len & 1) || ((mg->mg_len & 2) && mg->mg_obj == sv)))
6770 =for apidoc sv_setpviv
6772 Copies an integer into the given SV, also updating its string value.
6773 Does not handle 'set' magic. See C<sv_setpviv_mg>.
6779 Perl_sv_setpviv(pTHX_ SV *sv, IV iv)
6781 char buf[TYPE_CHARS(UV)];
6783 char *ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
6785 sv_setpvn(sv, ptr, ebuf - ptr);
6790 =for apidoc sv_setpviv_mg
6792 Like C<sv_setpviv>, but also handles 'set' magic.
6798 Perl_sv_setpviv_mg(pTHX_ SV *sv, IV iv)
6800 char buf[TYPE_CHARS(UV)];
6802 char *ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
6804 sv_setpvn(sv, ptr, ebuf - ptr);
6808 #if defined(PERL_IMPLICIT_CONTEXT)
6810 Perl_sv_setpvf_nocontext(SV *sv, const char* pat, ...)
6814 va_start(args, pat);
6815 sv_vsetpvf(sv, pat, &args);
6821 Perl_sv_setpvf_mg_nocontext(SV *sv, const char* pat, ...)
6825 va_start(args, pat);
6826 sv_vsetpvf_mg(sv, pat, &args);
6832 =for apidoc sv_setpvf
6834 Processes its arguments like C<sprintf> and sets an SV to the formatted
6835 output. Does not handle 'set' magic. See C<sv_setpvf_mg>.
6841 Perl_sv_setpvf(pTHX_ SV *sv, const char* pat, ...)
6844 va_start(args, pat);
6845 sv_vsetpvf(sv, pat, &args);
6850 Perl_sv_vsetpvf(pTHX_ SV *sv, const char* pat, va_list* args)
6852 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6856 =for apidoc sv_setpvf_mg
6858 Like C<sv_setpvf>, but also handles 'set' magic.
6864 Perl_sv_setpvf_mg(pTHX_ SV *sv, const char* pat, ...)
6867 va_start(args, pat);
6868 sv_vsetpvf_mg(sv, pat, &args);
6873 Perl_sv_vsetpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
6875 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6879 #if defined(PERL_IMPLICIT_CONTEXT)
6881 Perl_sv_catpvf_nocontext(SV *sv, const char* pat, ...)
6885 va_start(args, pat);
6886 sv_vcatpvf(sv, pat, &args);
6891 Perl_sv_catpvf_mg_nocontext(SV *sv, const char* pat, ...)
6895 va_start(args, pat);
6896 sv_vcatpvf_mg(sv, pat, &args);
6902 =for apidoc sv_catpvf
6904 Processes its arguments like C<sprintf> and appends the formatted
6905 output to an SV. If the appended data contains "wide" characters
6906 (including, but not limited to, SVs with a UTF-8 PV formatted with %s,
6907 and characters >255 formatted with %c), the original SV might get
6908 upgraded to UTF-8. Handles 'get' magic, but not 'set' magic.
6909 C<SvSETMAGIC()> must typically be called after calling this function
6910 to handle 'set' magic.
6915 Perl_sv_catpvf(pTHX_ SV *sv, const char* pat, ...)
6918 va_start(args, pat);
6919 sv_vcatpvf(sv, pat, &args);
6924 Perl_sv_vcatpvf(pTHX_ SV *sv, const char* pat, va_list* args)
6926 sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6930 =for apidoc sv_catpvf_mg
6932 Like C<sv_catpvf>, but also handles 'set' magic.
6938 Perl_sv_catpvf_mg(pTHX_ SV *sv, const char* pat, ...)
6941 va_start(args, pat);
6942 sv_vcatpvf_mg(sv, pat, &args);
6947 Perl_sv_vcatpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
6949 sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6954 =for apidoc sv_vsetpvfn
6956 Works like C<vcatpvfn> but copies the text into the SV instead of
6963 Perl_sv_vsetpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
6965 sv_setpvn(sv, "", 0);
6966 sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, maybe_tainted);
6970 S_expect_number(pTHX_ char** pattern)
6973 switch (**pattern) {
6974 case '1': case '2': case '3':
6975 case '4': case '5': case '6':
6976 case '7': case '8': case '9':
6977 while (isDIGIT(**pattern))
6978 var = var * 10 + (*(*pattern)++ - '0');
6982 #define EXPECT_NUMBER(pattern, var) (var = S_expect_number(aTHX_ &pattern))
6985 =for apidoc sv_vcatpvfn
6987 Processes its arguments like C<vsprintf> and appends the formatted output
6988 to an SV. Uses an array of SVs if the C style variable argument list is
6989 missing (NULL). When running with taint checks enabled, indicates via
6990 C<maybe_tainted> if results are untrustworthy (often due to the use of
6997 Perl_sv_vcatpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
7004 static char nullstr[] = "(null)";
7007 /* no matter what, this is a string now */
7008 (void)SvPV_force(sv, origlen);
7010 /* special-case "", "%s", and "%_" */
7013 if (patlen == 2 && pat[0] == '%') {
7017 char *s = va_arg(*args, char*);
7018 sv_catpv(sv, s ? s : nullstr);
7020 else if (svix < svmax) {
7021 sv_catsv(sv, *svargs);
7022 if (DO_UTF8(*svargs))
7028 argsv = va_arg(*args, SV*);
7029 sv_catsv(sv, argsv);
7034 /* See comment on '_' below */
7039 patend = (char*)pat + patlen;
7040 for (p = (char*)pat; p < patend; p = q) {
7043 bool vectorize = FALSE;
7044 bool vectorarg = FALSE;
7045 bool vec_utf = FALSE;
7051 bool has_precis = FALSE;
7053 bool is_utf = FALSE;
7056 U8 utf8buf[UTF8_MAXLEN+1];
7057 STRLEN esignlen = 0;
7059 char *eptr = Nullch;
7061 /* Times 4: a decimal digit takes more than 3 binary digits.
7062 * NV_DIG: mantissa takes than many decimal digits.
7063 * Plus 32: Playing safe. */
7064 char ebuf[IV_DIG * 4 + NV_DIG + 32];
7065 /* large enough for "%#.#f" --chip */
7066 /* what about long double NVs? --jhi */
7069 U8 *vecstr = Null(U8*);
7081 STRLEN dotstrlen = 1;
7082 I32 efix = 0; /* explicit format parameter index */
7083 I32 ewix = 0; /* explicit width index */
7084 I32 epix = 0; /* explicit precision index */
7085 I32 evix = 0; /* explicit vector index */
7086 bool asterisk = FALSE;
7088 /* echo everything up to the next format specification */
7089 for (q = p; q < patend && *q != '%'; ++q) ;
7091 sv_catpvn(sv, p, q - p);
7098 We allow format specification elements in this order:
7099 \d+\$ explicit format parameter index
7101 \*?(\d+\$)?v vector with optional (optionally specified) arg
7102 \d+|\*(\d+\$)? width using optional (optionally specified) arg
7103 \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
7105 [%bcdefginopsux_DFOUX] format (mandatory)
7107 if (EXPECT_NUMBER(q, width)) {
7148 if (EXPECT_NUMBER(q, ewix))
7157 if ((vectorarg = asterisk)) {
7167 EXPECT_NUMBER(q, width);
7172 vecsv = va_arg(*args, SV*);
7174 vecsv = (evix ? evix <= svmax : svix < svmax) ?
7175 svargs[ewix ? ewix-1 : svix++] : &PL_sv_undef;
7176 dotstr = SvPVx(vecsv, dotstrlen);
7181 vecsv = va_arg(*args, SV*);
7182 vecstr = (U8*)SvPVx(vecsv,veclen);
7183 vec_utf = DO_UTF8(vecsv);
7185 else if (efix ? efix <= svmax : svix < svmax) {
7186 vecsv = svargs[efix ? efix-1 : svix++];
7187 vecstr = (U8*)SvPVx(vecsv,veclen);
7188 vec_utf = DO_UTF8(vecsv);
7198 i = va_arg(*args, int);
7200 i = (ewix ? ewix <= svmax : svix < svmax) ?
7201 SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
7203 width = (i < 0) ? -i : i;
7213 if (EXPECT_NUMBER(q, epix) && *q++ != '$')
7216 i = va_arg(*args, int);
7218 i = (ewix ? ewix <= svmax : svix < svmax)
7219 ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
7220 precis = (i < 0) ? 0 : i;
7225 precis = precis * 10 + (*q++ - '0');
7233 #if defined(HAS_QUAD) || (defined(HAS_LONG_DOUBLE) && defined(USE_LONG_DOUBLE))
7244 #if defined(HAS_QUAD) || (defined(HAS_LONG_DOUBLE) && defined(USE_LONG_DOUBLE))
7245 if (*(q + 1) == 'l') { /* lld, llf */
7268 argsv = (efix ? efix <= svmax : svix < svmax) ?
7269 svargs[efix ? efix-1 : svix++] : &PL_sv_undef;
7276 uv = args ? va_arg(*args, int) : SvIVx(argsv);
7278 (!UNI_IS_INVARIANT(uv) && SvUTF8(sv)))
7280 eptr = (char*)utf8buf;
7281 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
7293 eptr = va_arg(*args, char*);
7295 #ifdef MACOS_TRADITIONAL
7296 /* On MacOS, %#s format is used for Pascal strings */
7301 elen = strlen(eptr);
7304 elen = sizeof nullstr - 1;
7308 eptr = SvPVx(argsv, elen);
7309 if (DO_UTF8(argsv)) {
7310 if (has_precis && precis < elen) {
7312 sv_pos_u2b(argsv, &p, 0); /* sticks at end */
7315 if (width) { /* fudge width (can't fudge elen) */
7316 width += elen - sv_len_utf8(argsv);
7325 * The "%_" hack might have to be changed someday,
7326 * if ISO or ANSI decide to use '_' for something.
7327 * So we keep it hidden from users' code.
7331 argsv = va_arg(*args, SV*);
7332 eptr = SvPVx(argsv, elen);
7338 if (has_precis && elen > precis)
7347 uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
7365 iv = (IV)utf8n_to_uvchr(vecstr, veclen, &ulen, 0);
7375 case 'h': iv = (short)va_arg(*args, int); break;
7376 default: iv = va_arg(*args, int); break;
7377 case 'l': iv = va_arg(*args, long); break;
7378 case 'V': iv = va_arg(*args, IV); break;
7380 case 'q': iv = va_arg(*args, Quad_t); break;
7387 case 'h': iv = (short)iv; break;
7389 case 'l': iv = (long)iv; break;
7392 case 'q': iv = (Quad_t)iv; break;
7399 esignbuf[esignlen++] = plus;
7403 esignbuf[esignlen++] = '-';
7445 uv = utf8n_to_uvchr(vecstr, veclen, &ulen, 0);
7455 case 'h': uv = (unsigned short)va_arg(*args, unsigned); break;
7456 default: uv = va_arg(*args, unsigned); break;
7457 case 'l': uv = va_arg(*args, unsigned long); break;
7458 case 'V': uv = va_arg(*args, UV); break;
7460 case 'q': uv = va_arg(*args, Quad_t); break;
7467 case 'h': uv = (unsigned short)uv; break;
7469 case 'l': uv = (unsigned long)uv; break;
7472 case 'q': uv = (Quad_t)uv; break;
7478 eptr = ebuf + sizeof ebuf;
7484 p = (char*)((c == 'X')
7485 ? "0123456789ABCDEF" : "0123456789abcdef");
7491 esignbuf[esignlen++] = '0';
7492 esignbuf[esignlen++] = c; /* 'x' or 'X' */
7498 *--eptr = '0' + dig;
7500 if (alt && *eptr != '0')
7506 *--eptr = '0' + dig;
7509 esignbuf[esignlen++] = '0';
7510 esignbuf[esignlen++] = 'b';
7513 default: /* it had better be ten or less */
7514 #if defined(PERL_Y2KWARN)
7515 if (ckWARN(WARN_Y2K)) {
7517 char *s = SvPV(sv,n);
7518 if (n >= 2 && s[n-2] == '1' && s[n-1] == '9'
7519 && (n == 2 || !isDIGIT(s[n-3])))
7521 Perl_warner(aTHX_ WARN_Y2K,
7522 "Possible Y2K bug: %%%c %s",
7523 c, "format string following '19'");
7529 *--eptr = '0' + dig;
7530 } while (uv /= base);
7533 elen = (ebuf + sizeof ebuf) - eptr;
7536 zeros = precis - elen;
7537 else if (precis == 0 && elen == 1 && *eptr == '0')
7542 /* FLOATING POINT */
7545 c = 'f'; /* maybe %F isn't supported here */
7551 /* This is evil, but floating point is even more evil */
7554 nv = args ? va_arg(*args, NV) : SvNVx(argsv);
7557 if (c != 'e' && c != 'E') {
7559 (void)Perl_frexp(nv, &i);
7560 if (i == PERL_INT_MIN)
7561 Perl_die(aTHX_ "panic: frexp");
7563 need = BIT_DIGITS(i);
7565 need += has_precis ? precis : 6; /* known default */
7569 need += 20; /* fudge factor */
7570 if (PL_efloatsize < need) {
7571 Safefree(PL_efloatbuf);
7572 PL_efloatsize = need + 20; /* more fudge */
7573 New(906, PL_efloatbuf, PL_efloatsize, char);
7574 PL_efloatbuf[0] = '\0';
7577 eptr = ebuf + sizeof ebuf;
7580 #if defined(USE_LONG_DOUBLE) && defined(PERL_PRIfldbl)
7582 /* Copy the one or more characters in a long double
7583 * format before the 'base' ([efgEFG]) character to
7584 * the format string. */
7585 static char const prifldbl[] = PERL_PRIfldbl;
7586 char const *p = prifldbl + sizeof(prifldbl) - 3;
7587 while (p >= prifldbl) { *--eptr = *p--; }
7592 do { *--eptr = '0' + (base % 10); } while (base /= 10);
7597 do { *--eptr = '0' + (base % 10); } while (base /= 10);
7609 /* No taint. Otherwise we are in the strange situation
7610 * where printf() taints but print($float) doesn't.
7612 (void)sprintf(PL_efloatbuf, eptr, nv);
7614 eptr = PL_efloatbuf;
7615 elen = strlen(PL_efloatbuf);
7622 i = SvCUR(sv) - origlen;
7625 case 'h': *(va_arg(*args, short*)) = i; break;
7626 default: *(va_arg(*args, int*)) = i; break;
7627 case 'l': *(va_arg(*args, long*)) = i; break;
7628 case 'V': *(va_arg(*args, IV*)) = i; break;
7630 case 'q': *(va_arg(*args, Quad_t*)) = i; break;
7635 sv_setuv_mg(argsv, (UV)i);
7636 continue; /* not "break" */
7643 if (!args && ckWARN(WARN_PRINTF) &&
7644 (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)) {
7645 SV *msg = sv_newmortal();
7646 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %s: ",
7647 (PL_op->op_type == OP_PRTF) ? "printf" : "sprintf");
7650 Perl_sv_catpvf(aTHX_ msg,
7651 "\"%%%c\"", c & 0xFF);
7653 Perl_sv_catpvf(aTHX_ msg,
7654 "\"%%\\%03"UVof"\"",
7657 sv_catpv(msg, "end of string");
7658 Perl_warner(aTHX_ WARN_PRINTF, "%"SVf, msg); /* yes, this is reentrant */
7661 /* output mangled stuff ... */
7667 /* ... right here, because formatting flags should not apply */
7668 SvGROW(sv, SvCUR(sv) + elen + 1);
7670 Copy(eptr, p, elen, char);
7673 SvCUR(sv) = p - SvPVX(sv);
7674 continue; /* not "break" */
7677 have = esignlen + zeros + elen;
7678 need = (have > width ? have : width);
7681 SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
7683 if (esignlen && fill == '0') {
7684 for (i = 0; i < esignlen; i++)
7688 memset(p, fill, gap);
7691 if (esignlen && fill != '0') {
7692 for (i = 0; i < esignlen; i++)
7696 for (i = zeros; i; i--)
7700 Copy(eptr, p, elen, char);
7704 memset(p, ' ', gap);
7709 Copy(dotstr, p, dotstrlen, char);
7713 vectorize = FALSE; /* done iterating over vecstr */
7718 SvCUR(sv) = p - SvPVX(sv);
7726 #if defined(USE_ITHREADS)
7728 #if defined(USE_THREADS)
7729 # include "error: USE_THREADS and USE_ITHREADS are incompatible"
7732 #ifndef GpREFCNT_inc
7733 # define GpREFCNT_inc(gp) ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
7737 #define sv_dup_inc(s) SvREFCNT_inc(sv_dup(s))
7738 #define av_dup(s) (AV*)sv_dup((SV*)s)
7739 #define av_dup_inc(s) (AV*)SvREFCNT_inc(sv_dup((SV*)s))
7740 #define hv_dup(s) (HV*)sv_dup((SV*)s)
7741 #define hv_dup_inc(s) (HV*)SvREFCNT_inc(sv_dup((SV*)s))
7742 #define cv_dup(s) (CV*)sv_dup((SV*)s)
7743 #define cv_dup_inc(s) (CV*)SvREFCNT_inc(sv_dup((SV*)s))
7744 #define io_dup(s) (IO*)sv_dup((SV*)s)
7745 #define io_dup_inc(s) (IO*)SvREFCNT_inc(sv_dup((SV*)s))
7746 #define gv_dup(s) (GV*)sv_dup((SV*)s)
7747 #define gv_dup_inc(s) (GV*)SvREFCNT_inc(sv_dup((SV*)s))
7748 #define SAVEPV(p) (p ? savepv(p) : Nullch)
7749 #define SAVEPVN(p,n) (p ? savepvn(p,n) : Nullch)
7752 Perl_re_dup(pTHX_ REGEXP *r)
7754 /* XXX fix when pmop->op_pmregexp becomes shared */
7755 return ReREFCNT_inc(r);
7759 Perl_fp_dup(pTHX_ PerlIO *fp, char type)
7763 return (PerlIO*)NULL;
7765 /* look for it in the table first */
7766 ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
7770 /* create anew and remember what it is */
7771 ret = PerlIO_fdupopen(aTHX_ fp);
7772 ptr_table_store(PL_ptr_table, fp, ret);
7777 Perl_dirp_dup(pTHX_ DIR *dp)
7786 Perl_gp_dup(pTHX_ GP *gp)
7791 /* look for it in the table first */
7792 ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
7796 /* create anew and remember what it is */
7797 Newz(0, ret, 1, GP);
7798 ptr_table_store(PL_ptr_table, gp, ret);
7801 ret->gp_refcnt = 0; /* must be before any other dups! */
7802 ret->gp_sv = sv_dup_inc(gp->gp_sv);
7803 ret->gp_io = io_dup_inc(gp->gp_io);
7804 ret->gp_form = cv_dup_inc(gp->gp_form);
7805 ret->gp_av = av_dup_inc(gp->gp_av);
7806 ret->gp_hv = hv_dup_inc(gp->gp_hv);
7807 ret->gp_egv = gv_dup(gp->gp_egv); /* GvEGV is not refcounted */
7808 ret->gp_cv = cv_dup_inc(gp->gp_cv);
7809 ret->gp_cvgen = gp->gp_cvgen;
7810 ret->gp_flags = gp->gp_flags;
7811 ret->gp_line = gp->gp_line;
7812 ret->gp_file = gp->gp_file; /* points to COP.cop_file */
7817 Perl_mg_dup(pTHX_ MAGIC *mg)
7819 MAGIC *mgprev = (MAGIC*)NULL;
7822 return (MAGIC*)NULL;
7823 /* look for it in the table first */
7824 mgret = (MAGIC*)ptr_table_fetch(PL_ptr_table, mg);
7828 for (; mg; mg = mg->mg_moremagic) {
7830 Newz(0, nmg, 1, MAGIC);
7832 mgprev->mg_moremagic = nmg;
7835 nmg->mg_virtual = mg->mg_virtual; /* XXX copy dynamic vtable? */
7836 nmg->mg_private = mg->mg_private;
7837 nmg->mg_type = mg->mg_type;
7838 nmg->mg_flags = mg->mg_flags;
7839 if (mg->mg_type == PERL_MAGIC_qr) {
7840 nmg->mg_obj = (SV*)re_dup((REGEXP*)mg->mg_obj);
7843 nmg->mg_obj = (mg->mg_flags & MGf_REFCOUNTED)
7844 ? sv_dup_inc(mg->mg_obj)
7845 : sv_dup(mg->mg_obj);
7847 nmg->mg_len = mg->mg_len;
7848 nmg->mg_ptr = mg->mg_ptr; /* XXX random ptr? */
7849 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
7850 if (mg->mg_len >= 0) {
7851 nmg->mg_ptr = SAVEPVN(mg->mg_ptr, mg->mg_len);
7852 if (mg->mg_type == PERL_MAGIC_overload_table &&
7853 AMT_AMAGIC((AMT*)mg->mg_ptr))
7855 AMT *amtp = (AMT*)mg->mg_ptr;
7856 AMT *namtp = (AMT*)nmg->mg_ptr;
7858 for (i = 1; i < NofAMmeth; i++) {
7859 namtp->table[i] = cv_dup_inc(amtp->table[i]);
7863 else if (mg->mg_len == HEf_SVKEY)
7864 nmg->mg_ptr = (char*)sv_dup_inc((SV*)mg->mg_ptr);
7872 Perl_ptr_table_new(pTHX)
7875 Newz(0, tbl, 1, PTR_TBL_t);
7878 Newz(0, tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
7883 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *tbl, void *sv)
7885 PTR_TBL_ENT_t *tblent;
7886 UV hash = PTR2UV(sv);
7888 tblent = tbl->tbl_ary[hash & tbl->tbl_max];
7889 for (; tblent; tblent = tblent->next) {
7890 if (tblent->oldval == sv)
7891 return tblent->newval;
7897 Perl_ptr_table_store(pTHX_ PTR_TBL_t *tbl, void *oldv, void *newv)
7899 PTR_TBL_ENT_t *tblent, **otblent;
7900 /* XXX this may be pessimal on platforms where pointers aren't good
7901 * hash values e.g. if they grow faster in the most significant
7903 UV hash = PTR2UV(oldv);
7907 otblent = &tbl->tbl_ary[hash & tbl->tbl_max];
7908 for (tblent = *otblent; tblent; i=0, tblent = tblent->next) {
7909 if (tblent->oldval == oldv) {
7910 tblent->newval = newv;
7915 Newz(0, tblent, 1, PTR_TBL_ENT_t);
7916 tblent->oldval = oldv;
7917 tblent->newval = newv;
7918 tblent->next = *otblent;
7921 if (i && tbl->tbl_items > tbl->tbl_max)
7922 ptr_table_split(tbl);
7926 Perl_ptr_table_split(pTHX_ PTR_TBL_t *tbl)
7928 PTR_TBL_ENT_t **ary = tbl->tbl_ary;
7929 UV oldsize = tbl->tbl_max + 1;
7930 UV newsize = oldsize * 2;
7933 Renew(ary, newsize, PTR_TBL_ENT_t*);
7934 Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
7935 tbl->tbl_max = --newsize;
7937 for (i=0; i < oldsize; i++, ary++) {
7938 PTR_TBL_ENT_t **curentp, **entp, *ent;
7941 curentp = ary + oldsize;
7942 for (entp = ary, ent = *ary; ent; ent = *entp) {
7943 if ((newsize & PTR2UV(ent->oldval)) != i) {
7945 ent->next = *curentp;
7956 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *tbl)
7958 register PTR_TBL_ENT_t **array;
7959 register PTR_TBL_ENT_t *entry;
7960 register PTR_TBL_ENT_t *oentry = Null(PTR_TBL_ENT_t*);
7964 if (!tbl || !tbl->tbl_items) {
7968 array = tbl->tbl_ary;
7975 entry = entry->next;
7979 if (++riter > max) {
7982 entry = array[riter];
7990 Perl_ptr_table_free(pTHX_ PTR_TBL_t *tbl)
7995 ptr_table_clear(tbl);
7996 Safefree(tbl->tbl_ary);
8005 S_gv_share(pTHX_ SV *sstr)
8008 SV *sv = &PL_sv_no; /* just need SvREADONLY-ness */
8010 if (GvIO(gv) || GvFORM(gv)) {
8011 GvSHARED_off(gv); /* GvIOs cannot be shared. nor can GvFORMs */
8013 else if (!GvCV(gv)) {
8017 /* CvPADLISTs cannot be shared */
8018 if (!CvXSUB(GvCV(gv))) {
8023 if (!GvSHARED(gv)) {
8025 PerlIO_printf(Perl_debug_log, "gv_share: unable to share %s::%s\n",
8026 HvNAME(GvSTASH(gv)), GvNAME(gv));
8032 * write attempts will die with
8033 * "Modification of a read-only value attempted"
8039 SvREADONLY_on(GvSV(gv));
8046 SvREADONLY_on(GvAV(gv));
8053 SvREADONLY_on(GvAV(gv));
8056 return sstr; /* he_dup() will SvREFCNT_inc() */
8060 Perl_sv_dup(pTHX_ SV *sstr)
8064 if (!sstr || SvTYPE(sstr) == SVTYPEMASK)
8066 /* look for it in the table first */
8067 dstr = (SV*)ptr_table_fetch(PL_ptr_table, sstr);
8071 /* create anew and remember what it is */
8073 ptr_table_store(PL_ptr_table, sstr, dstr);
8076 SvFLAGS(dstr) = SvFLAGS(sstr);
8077 SvFLAGS(dstr) &= ~SVf_OOK; /* don't propagate OOK hack */
8078 SvREFCNT(dstr) = 0; /* must be before any other dups! */
8081 if (SvANY(sstr) && PL_watch_pvx && SvPVX(sstr) == PL_watch_pvx)
8082 PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
8083 PL_watch_pvx, SvPVX(sstr));
8086 switch (SvTYPE(sstr)) {
8091 SvANY(dstr) = new_XIV();
8092 SvIVX(dstr) = SvIVX(sstr);
8095 SvANY(dstr) = new_XNV();
8096 SvNVX(dstr) = SvNVX(sstr);
8099 SvANY(dstr) = new_XRV();
8100 SvRV(dstr) = SvRV(sstr) && SvWEAKREF(SvRV(sstr))
8101 ? sv_dup(SvRV(sstr))
8102 : sv_dup_inc(SvRV(sstr));
8105 SvANY(dstr) = new_XPV();
8106 SvCUR(dstr) = SvCUR(sstr);
8107 SvLEN(dstr) = SvLEN(sstr);
8109 SvRV(dstr) = SvWEAKREF(SvRV(sstr))
8110 ? sv_dup(SvRV(sstr))
8111 : sv_dup_inc(SvRV(sstr));
8112 else if (SvPVX(sstr) && SvLEN(sstr))
8113 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
8115 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
8118 SvANY(dstr) = new_XPVIV();
8119 SvCUR(dstr) = SvCUR(sstr);
8120 SvLEN(dstr) = SvLEN(sstr);
8121 SvIVX(dstr) = SvIVX(sstr);
8123 SvRV(dstr) = SvWEAKREF(SvRV(sstr))
8124 ? sv_dup(SvRV(sstr))
8125 : sv_dup_inc(SvRV(sstr));
8126 else if (SvPVX(sstr) && SvLEN(sstr))
8127 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
8129 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
8132 SvANY(dstr) = new_XPVNV();
8133 SvCUR(dstr) = SvCUR(sstr);
8134 SvLEN(dstr) = SvLEN(sstr);
8135 SvIVX(dstr) = SvIVX(sstr);
8136 SvNVX(dstr) = SvNVX(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_XPVMG();
8148 SvCUR(dstr) = SvCUR(sstr);
8149 SvLEN(dstr) = SvLEN(sstr);
8150 SvIVX(dstr) = SvIVX(sstr);
8151 SvNVX(dstr) = SvNVX(sstr);
8152 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
8153 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
8155 SvRV(dstr) = SvWEAKREF(SvRV(sstr))
8156 ? sv_dup(SvRV(sstr))
8157 : sv_dup_inc(SvRV(sstr));
8158 else if (SvPVX(sstr) && SvLEN(sstr))
8159 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
8161 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
8164 SvANY(dstr) = new_XPVBM();
8165 SvCUR(dstr) = SvCUR(sstr);
8166 SvLEN(dstr) = SvLEN(sstr);
8167 SvIVX(dstr) = SvIVX(sstr);
8168 SvNVX(dstr) = SvNVX(sstr);
8169 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
8170 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
8172 SvRV(dstr) = SvWEAKREF(SvRV(sstr))
8173 ? sv_dup(SvRV(sstr))
8174 : sv_dup_inc(SvRV(sstr));
8175 else if (SvPVX(sstr) && SvLEN(sstr))
8176 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
8178 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
8179 BmRARE(dstr) = BmRARE(sstr);
8180 BmUSEFUL(dstr) = BmUSEFUL(sstr);
8181 BmPREVIOUS(dstr)= BmPREVIOUS(sstr);
8184 SvANY(dstr) = new_XPVLV();
8185 SvCUR(dstr) = SvCUR(sstr);
8186 SvLEN(dstr) = SvLEN(sstr);
8187 SvIVX(dstr) = SvIVX(sstr);
8188 SvNVX(dstr) = SvNVX(sstr);
8189 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
8190 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
8192 SvRV(dstr) = SvWEAKREF(SvRV(sstr))
8193 ? sv_dup(SvRV(sstr))
8194 : sv_dup_inc(SvRV(sstr));
8195 else if (SvPVX(sstr) && SvLEN(sstr))
8196 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
8198 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
8199 LvTARGOFF(dstr) = LvTARGOFF(sstr); /* XXX sometimes holds PMOP* when DEBUGGING */
8200 LvTARGLEN(dstr) = LvTARGLEN(sstr);
8201 LvTARG(dstr) = sv_dup_inc(LvTARG(sstr));
8202 LvTYPE(dstr) = LvTYPE(sstr);
8205 if (GvSHARED((GV*)sstr)) {
8207 if ((share = gv_share(sstr))) {
8211 PerlIO_printf(Perl_debug_log, "sv_dup: sharing %s::%s\n",
8212 HvNAME(GvSTASH(share)), GvNAME(share));
8217 SvANY(dstr) = new_XPVGV();
8218 SvCUR(dstr) = SvCUR(sstr);
8219 SvLEN(dstr) = SvLEN(sstr);
8220 SvIVX(dstr) = SvIVX(sstr);
8221 SvNVX(dstr) = SvNVX(sstr);
8222 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
8223 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
8225 SvRV(dstr) = SvWEAKREF(SvRV(sstr))
8226 ? sv_dup(SvRV(sstr))
8227 : sv_dup_inc(SvRV(sstr));
8228 else if (SvPVX(sstr) && SvLEN(sstr))
8229 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
8231 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
8232 GvNAMELEN(dstr) = GvNAMELEN(sstr);
8233 GvNAME(dstr) = SAVEPVN(GvNAME(sstr), GvNAMELEN(sstr));
8234 GvSTASH(dstr) = hv_dup_inc(GvSTASH(sstr));
8235 GvFLAGS(dstr) = GvFLAGS(sstr);
8236 GvGP(dstr) = gp_dup(GvGP(sstr));
8237 (void)GpREFCNT_inc(GvGP(dstr));
8240 SvANY(dstr) = new_XPVIO();
8241 SvCUR(dstr) = SvCUR(sstr);
8242 SvLEN(dstr) = SvLEN(sstr);
8243 SvIVX(dstr) = SvIVX(sstr);
8244 SvNVX(dstr) = SvNVX(sstr);
8245 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
8246 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
8248 SvRV(dstr) = SvWEAKREF(SvRV(sstr))
8249 ? sv_dup(SvRV(sstr))
8250 : sv_dup_inc(SvRV(sstr));
8251 else if (SvPVX(sstr) && SvLEN(sstr))
8252 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
8254 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
8255 IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(sstr));
8256 if (IoOFP(sstr) == IoIFP(sstr))
8257 IoOFP(dstr) = IoIFP(dstr);
8259 IoOFP(dstr) = fp_dup(IoOFP(sstr), IoTYPE(sstr));
8260 /* PL_rsfp_filters entries have fake IoDIRP() */
8261 if (IoDIRP(sstr) && !(IoFLAGS(sstr) & IOf_FAKE_DIRP))
8262 IoDIRP(dstr) = dirp_dup(IoDIRP(sstr));
8264 IoDIRP(dstr) = IoDIRP(sstr);
8265 IoLINES(dstr) = IoLINES(sstr);
8266 IoPAGE(dstr) = IoPAGE(sstr);
8267 IoPAGE_LEN(dstr) = IoPAGE_LEN(sstr);
8268 IoLINES_LEFT(dstr) = IoLINES_LEFT(sstr);
8269 IoTOP_NAME(dstr) = SAVEPV(IoTOP_NAME(sstr));
8270 IoTOP_GV(dstr) = gv_dup(IoTOP_GV(sstr));
8271 IoFMT_NAME(dstr) = SAVEPV(IoFMT_NAME(sstr));
8272 IoFMT_GV(dstr) = gv_dup(IoFMT_GV(sstr));
8273 IoBOTTOM_NAME(dstr) = SAVEPV(IoBOTTOM_NAME(sstr));
8274 IoBOTTOM_GV(dstr) = gv_dup(IoBOTTOM_GV(sstr));
8275 IoSUBPROCESS(dstr) = IoSUBPROCESS(sstr);
8276 IoTYPE(dstr) = IoTYPE(sstr);
8277 IoFLAGS(dstr) = IoFLAGS(sstr);
8280 SvANY(dstr) = new_XPVAV();
8281 SvCUR(dstr) = SvCUR(sstr);
8282 SvLEN(dstr) = SvLEN(sstr);
8283 SvIVX(dstr) = SvIVX(sstr);
8284 SvNVX(dstr) = SvNVX(sstr);
8285 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
8286 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
8287 AvARYLEN((AV*)dstr) = sv_dup_inc(AvARYLEN((AV*)sstr));
8288 AvFLAGS((AV*)dstr) = AvFLAGS((AV*)sstr);
8289 if (AvARRAY((AV*)sstr)) {
8290 SV **dst_ary, **src_ary;
8291 SSize_t items = AvFILLp((AV*)sstr) + 1;
8293 src_ary = AvARRAY((AV*)sstr);
8294 Newz(0, dst_ary, AvMAX((AV*)sstr)+1, SV*);
8295 ptr_table_store(PL_ptr_table, src_ary, dst_ary);
8296 SvPVX(dstr) = (char*)dst_ary;
8297 AvALLOC((AV*)dstr) = dst_ary;
8298 if (AvREAL((AV*)sstr)) {
8300 *dst_ary++ = sv_dup_inc(*src_ary++);
8304 *dst_ary++ = sv_dup(*src_ary++);
8306 items = AvMAX((AV*)sstr) - AvFILLp((AV*)sstr);
8307 while (items-- > 0) {
8308 *dst_ary++ = &PL_sv_undef;
8312 SvPVX(dstr) = Nullch;
8313 AvALLOC((AV*)dstr) = (SV**)NULL;
8317 SvANY(dstr) = new_XPVHV();
8318 SvCUR(dstr) = SvCUR(sstr);
8319 SvLEN(dstr) = SvLEN(sstr);
8320 SvIVX(dstr) = SvIVX(sstr);
8321 SvNVX(dstr) = SvNVX(sstr);
8322 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
8323 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
8324 HvRITER((HV*)dstr) = HvRITER((HV*)sstr);
8325 if (HvARRAY((HV*)sstr)) {
8327 XPVHV *dxhv = (XPVHV*)SvANY(dstr);
8328 XPVHV *sxhv = (XPVHV*)SvANY(sstr);
8329 Newz(0, dxhv->xhv_array,
8330 PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1), char);
8331 while (i <= sxhv->xhv_max) {
8332 ((HE**)dxhv->xhv_array)[i] = he_dup(((HE**)sxhv->xhv_array)[i],
8333 !!HvSHAREKEYS(sstr));
8336 dxhv->xhv_eiter = he_dup(sxhv->xhv_eiter, !!HvSHAREKEYS(sstr));
8339 SvPVX(dstr) = Nullch;
8340 HvEITER((HV*)dstr) = (HE*)NULL;
8342 HvPMROOT((HV*)dstr) = HvPMROOT((HV*)sstr); /* XXX */
8343 HvNAME((HV*)dstr) = SAVEPV(HvNAME((HV*)sstr));
8344 if(HvNAME((HV*)dstr))
8345 av_push(PL_clone_callbacks,dstr);
8348 SvANY(dstr) = new_XPVFM();
8349 FmLINES(dstr) = FmLINES(sstr);
8353 SvANY(dstr) = new_XPVCV();
8355 SvCUR(dstr) = SvCUR(sstr);
8356 SvLEN(dstr) = SvLEN(sstr);
8357 SvIVX(dstr) = SvIVX(sstr);
8358 SvNVX(dstr) = SvNVX(sstr);
8359 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
8360 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
8361 if (SvPVX(sstr) && SvLEN(sstr))
8362 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
8364 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
8365 CvSTASH(dstr) = hv_dup(CvSTASH(sstr));/* NOTE: not refcounted */
8366 CvSTART(dstr) = CvSTART(sstr);
8367 CvROOT(dstr) = OpREFCNT_inc(CvROOT(sstr));
8368 CvXSUB(dstr) = CvXSUB(sstr);
8369 CvXSUBANY(dstr) = CvXSUBANY(sstr);
8370 CvGV(dstr) = gv_dup(CvGV(sstr));
8371 CvDEPTH(dstr) = CvDEPTH(sstr);
8372 if (CvPADLIST(sstr) && !AvREAL(CvPADLIST(sstr))) {
8373 /* XXX padlists are real, but pretend to be not */
8374 AvREAL_on(CvPADLIST(sstr));
8375 CvPADLIST(dstr) = av_dup_inc(CvPADLIST(sstr));
8376 AvREAL_off(CvPADLIST(sstr));
8377 AvREAL_off(CvPADLIST(dstr));
8380 CvPADLIST(dstr) = av_dup_inc(CvPADLIST(sstr));
8381 if (!CvANON(sstr) || CvCLONED(sstr))
8382 CvOUTSIDE(dstr) = cv_dup_inc(CvOUTSIDE(sstr));
8384 CvOUTSIDE(dstr) = cv_dup(CvOUTSIDE(sstr));
8385 CvFLAGS(dstr) = CvFLAGS(sstr);
8388 Perl_croak(aTHX_ "Bizarre SvTYPE [%d]", SvTYPE(sstr));
8392 if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
8399 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max)
8404 return (PERL_CONTEXT*)NULL;
8406 /* look for it in the table first */
8407 ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
8411 /* create anew and remember what it is */
8412 Newz(56, ncxs, max + 1, PERL_CONTEXT);
8413 ptr_table_store(PL_ptr_table, cxs, ncxs);
8416 PERL_CONTEXT *cx = &cxs[ix];
8417 PERL_CONTEXT *ncx = &ncxs[ix];
8418 ncx->cx_type = cx->cx_type;
8419 if (CxTYPE(cx) == CXt_SUBST) {
8420 Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
8423 ncx->blk_oldsp = cx->blk_oldsp;
8424 ncx->blk_oldcop = cx->blk_oldcop;
8425 ncx->blk_oldretsp = cx->blk_oldretsp;
8426 ncx->blk_oldmarksp = cx->blk_oldmarksp;
8427 ncx->blk_oldscopesp = cx->blk_oldscopesp;
8428 ncx->blk_oldpm = cx->blk_oldpm;
8429 ncx->blk_gimme = cx->blk_gimme;
8430 switch (CxTYPE(cx)) {
8432 ncx->blk_sub.cv = (cx->blk_sub.olddepth == 0
8433 ? cv_dup_inc(cx->blk_sub.cv)
8434 : cv_dup(cx->blk_sub.cv));
8435 ncx->blk_sub.argarray = (cx->blk_sub.hasargs
8436 ? av_dup_inc(cx->blk_sub.argarray)
8438 ncx->blk_sub.savearray = av_dup_inc(cx->blk_sub.savearray);
8439 ncx->blk_sub.olddepth = cx->blk_sub.olddepth;
8440 ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
8441 ncx->blk_sub.lval = cx->blk_sub.lval;
8444 ncx->blk_eval.old_in_eval = cx->blk_eval.old_in_eval;
8445 ncx->blk_eval.old_op_type = cx->blk_eval.old_op_type;
8446 ncx->blk_eval.old_namesv = sv_dup_inc(cx->blk_eval.old_namesv);
8447 ncx->blk_eval.old_eval_root = cx->blk_eval.old_eval_root;
8448 ncx->blk_eval.cur_text = sv_dup(cx->blk_eval.cur_text);
8451 ncx->blk_loop.label = cx->blk_loop.label;
8452 ncx->blk_loop.resetsp = cx->blk_loop.resetsp;
8453 ncx->blk_loop.redo_op = cx->blk_loop.redo_op;
8454 ncx->blk_loop.next_op = cx->blk_loop.next_op;
8455 ncx->blk_loop.last_op = cx->blk_loop.last_op;
8456 ncx->blk_loop.iterdata = (CxPADLOOP(cx)
8457 ? cx->blk_loop.iterdata
8458 : gv_dup((GV*)cx->blk_loop.iterdata));
8459 ncx->blk_loop.oldcurpad
8460 = (SV**)ptr_table_fetch(PL_ptr_table,
8461 cx->blk_loop.oldcurpad);
8462 ncx->blk_loop.itersave = sv_dup_inc(cx->blk_loop.itersave);
8463 ncx->blk_loop.iterlval = sv_dup_inc(cx->blk_loop.iterlval);
8464 ncx->blk_loop.iterary = av_dup_inc(cx->blk_loop.iterary);
8465 ncx->blk_loop.iterix = cx->blk_loop.iterix;
8466 ncx->blk_loop.itermax = cx->blk_loop.itermax;
8469 ncx->blk_sub.cv = cv_dup(cx->blk_sub.cv);
8470 ncx->blk_sub.gv = gv_dup(cx->blk_sub.gv);
8471 ncx->blk_sub.dfoutgv = gv_dup_inc(cx->blk_sub.dfoutgv);
8472 ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
8485 Perl_si_dup(pTHX_ PERL_SI *si)
8490 return (PERL_SI*)NULL;
8492 /* look for it in the table first */
8493 nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
8497 /* create anew and remember what it is */
8498 Newz(56, nsi, 1, PERL_SI);
8499 ptr_table_store(PL_ptr_table, si, nsi);
8501 nsi->si_stack = av_dup_inc(si->si_stack);
8502 nsi->si_cxix = si->si_cxix;
8503 nsi->si_cxmax = si->si_cxmax;
8504 nsi->si_cxstack = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax);
8505 nsi->si_type = si->si_type;
8506 nsi->si_prev = si_dup(si->si_prev);
8507 nsi->si_next = si_dup(si->si_next);
8508 nsi->si_markoff = si->si_markoff;
8513 #define POPINT(ss,ix) ((ss)[--(ix)].any_i32)
8514 #define TOPINT(ss,ix) ((ss)[ix].any_i32)
8515 #define POPLONG(ss,ix) ((ss)[--(ix)].any_long)
8516 #define TOPLONG(ss,ix) ((ss)[ix].any_long)
8517 #define POPIV(ss,ix) ((ss)[--(ix)].any_iv)
8518 #define TOPIV(ss,ix) ((ss)[ix].any_iv)
8519 #define POPPTR(ss,ix) ((ss)[--(ix)].any_ptr)
8520 #define TOPPTR(ss,ix) ((ss)[ix].any_ptr)
8521 #define POPDPTR(ss,ix) ((ss)[--(ix)].any_dptr)
8522 #define TOPDPTR(ss,ix) ((ss)[ix].any_dptr)
8523 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
8524 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
8527 #define pv_dup_inc(p) SAVEPV(p)
8528 #define pv_dup(p) SAVEPV(p)
8529 #define svp_dup_inc(p,pp) any_dup(p,pp)
8532 Perl_any_dup(pTHX_ void *v, PerlInterpreter *proto_perl)
8539 /* look for it in the table first */
8540 ret = ptr_table_fetch(PL_ptr_table, v);
8544 /* see if it is part of the interpreter structure */
8545 if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
8546 ret = (void*)(((char*)aTHXo) + (((char*)v) - (char*)proto_perl));
8554 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl)
8556 ANY *ss = proto_perl->Tsavestack;
8557 I32 ix = proto_perl->Tsavestack_ix;
8558 I32 max = proto_perl->Tsavestack_max;
8571 void (*dptr) (void*);
8572 void (*dxptr) (pTHXo_ void*);
8575 Newz(54, nss, max, ANY);
8581 case SAVEt_ITEM: /* normal string */
8582 sv = (SV*)POPPTR(ss,ix);
8583 TOPPTR(nss,ix) = sv_dup_inc(sv);
8584 sv = (SV*)POPPTR(ss,ix);
8585 TOPPTR(nss,ix) = sv_dup_inc(sv);
8587 case SAVEt_SV: /* scalar reference */
8588 sv = (SV*)POPPTR(ss,ix);
8589 TOPPTR(nss,ix) = sv_dup_inc(sv);
8590 gv = (GV*)POPPTR(ss,ix);
8591 TOPPTR(nss,ix) = gv_dup_inc(gv);
8593 case SAVEt_GENERIC_PVREF: /* generic char* */
8594 c = (char*)POPPTR(ss,ix);
8595 TOPPTR(nss,ix) = pv_dup(c);
8596 ptr = POPPTR(ss,ix);
8597 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8599 case SAVEt_GENERIC_SVREF: /* generic sv */
8600 case SAVEt_SVREF: /* scalar reference */
8601 sv = (SV*)POPPTR(ss,ix);
8602 TOPPTR(nss,ix) = sv_dup_inc(sv);
8603 ptr = POPPTR(ss,ix);
8604 TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
8606 case SAVEt_AV: /* array reference */
8607 av = (AV*)POPPTR(ss,ix);
8608 TOPPTR(nss,ix) = av_dup_inc(av);
8609 gv = (GV*)POPPTR(ss,ix);
8610 TOPPTR(nss,ix) = gv_dup(gv);
8612 case SAVEt_HV: /* hash reference */
8613 hv = (HV*)POPPTR(ss,ix);
8614 TOPPTR(nss,ix) = hv_dup_inc(hv);
8615 gv = (GV*)POPPTR(ss,ix);
8616 TOPPTR(nss,ix) = gv_dup(gv);
8618 case SAVEt_INT: /* int reference */
8619 ptr = POPPTR(ss,ix);
8620 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8621 intval = (int)POPINT(ss,ix);
8622 TOPINT(nss,ix) = intval;
8624 case SAVEt_LONG: /* long reference */
8625 ptr = POPPTR(ss,ix);
8626 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8627 longval = (long)POPLONG(ss,ix);
8628 TOPLONG(nss,ix) = longval;
8630 case SAVEt_I32: /* I32 reference */
8631 case SAVEt_I16: /* I16 reference */
8632 case SAVEt_I8: /* I8 reference */
8633 ptr = POPPTR(ss,ix);
8634 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8638 case SAVEt_IV: /* IV reference */
8639 ptr = POPPTR(ss,ix);
8640 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8644 case SAVEt_SPTR: /* SV* reference */
8645 ptr = POPPTR(ss,ix);
8646 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8647 sv = (SV*)POPPTR(ss,ix);
8648 TOPPTR(nss,ix) = sv_dup(sv);
8650 case SAVEt_VPTR: /* random* reference */
8651 ptr = POPPTR(ss,ix);
8652 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8653 ptr = POPPTR(ss,ix);
8654 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8656 case SAVEt_PPTR: /* char* reference */
8657 ptr = POPPTR(ss,ix);
8658 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8659 c = (char*)POPPTR(ss,ix);
8660 TOPPTR(nss,ix) = pv_dup(c);
8662 case SAVEt_HPTR: /* HV* reference */
8663 ptr = POPPTR(ss,ix);
8664 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8665 hv = (HV*)POPPTR(ss,ix);
8666 TOPPTR(nss,ix) = hv_dup(hv);
8668 case SAVEt_APTR: /* AV* reference */
8669 ptr = POPPTR(ss,ix);
8670 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8671 av = (AV*)POPPTR(ss,ix);
8672 TOPPTR(nss,ix) = av_dup(av);
8675 gv = (GV*)POPPTR(ss,ix);
8676 TOPPTR(nss,ix) = gv_dup(gv);
8678 case SAVEt_GP: /* scalar reference */
8679 gp = (GP*)POPPTR(ss,ix);
8680 TOPPTR(nss,ix) = gp = gp_dup(gp);
8681 (void)GpREFCNT_inc(gp);
8682 gv = (GV*)POPPTR(ss,ix);
8683 TOPPTR(nss,ix) = gv_dup_inc(c);
8684 c = (char*)POPPTR(ss,ix);
8685 TOPPTR(nss,ix) = pv_dup(c);
8692 case SAVEt_MORTALIZESV:
8693 sv = (SV*)POPPTR(ss,ix);
8694 TOPPTR(nss,ix) = sv_dup_inc(sv);
8697 ptr = POPPTR(ss,ix);
8698 if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
8699 /* these are assumed to be refcounted properly */
8700 switch (((OP*)ptr)->op_type) {
8707 TOPPTR(nss,ix) = ptr;
8712 TOPPTR(nss,ix) = Nullop;
8717 TOPPTR(nss,ix) = Nullop;
8720 c = (char*)POPPTR(ss,ix);
8721 TOPPTR(nss,ix) = pv_dup_inc(c);
8724 longval = POPLONG(ss,ix);
8725 TOPLONG(nss,ix) = longval;
8728 hv = (HV*)POPPTR(ss,ix);
8729 TOPPTR(nss,ix) = hv_dup_inc(hv);
8730 c = (char*)POPPTR(ss,ix);
8731 TOPPTR(nss,ix) = pv_dup_inc(c);
8735 case SAVEt_DESTRUCTOR:
8736 ptr = POPPTR(ss,ix);
8737 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
8738 dptr = POPDPTR(ss,ix);
8739 TOPDPTR(nss,ix) = (void (*)(void*))any_dup((void *)dptr, proto_perl);
8741 case SAVEt_DESTRUCTOR_X:
8742 ptr = POPPTR(ss,ix);
8743 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
8744 dxptr = POPDXPTR(ss,ix);
8745 TOPDXPTR(nss,ix) = (void (*)(pTHXo_ void*))any_dup((void *)dxptr, proto_perl);
8747 case SAVEt_REGCONTEXT:
8753 case SAVEt_STACK_POS: /* Position on Perl stack */
8757 case SAVEt_AELEM: /* array element */
8758 sv = (SV*)POPPTR(ss,ix);
8759 TOPPTR(nss,ix) = sv_dup_inc(sv);
8762 av = (AV*)POPPTR(ss,ix);
8763 TOPPTR(nss,ix) = av_dup_inc(av);
8765 case SAVEt_HELEM: /* hash element */
8766 sv = (SV*)POPPTR(ss,ix);
8767 TOPPTR(nss,ix) = sv_dup_inc(sv);
8768 sv = (SV*)POPPTR(ss,ix);
8769 TOPPTR(nss,ix) = sv_dup_inc(sv);
8770 hv = (HV*)POPPTR(ss,ix);
8771 TOPPTR(nss,ix) = hv_dup_inc(hv);
8774 ptr = POPPTR(ss,ix);
8775 TOPPTR(nss,ix) = ptr;
8782 av = (AV*)POPPTR(ss,ix);
8783 TOPPTR(nss,ix) = av_dup(av);
8786 longval = (long)POPLONG(ss,ix);
8787 TOPLONG(nss,ix) = longval;
8788 ptr = POPPTR(ss,ix);
8789 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
8790 sv = (SV*)POPPTR(ss,ix);
8791 TOPPTR(nss,ix) = sv_dup(sv);
8794 Perl_croak(aTHX_ "panic: ss_dup inconsistency");
8806 perl_clone(PerlInterpreter *proto_perl, UV flags)
8809 CPerlObj *pPerl = (CPerlObj*)proto_perl;
8812 #ifdef PERL_IMPLICIT_SYS
8813 return perl_clone_using(proto_perl, flags,
8815 proto_perl->IMemShared,
8816 proto_perl->IMemParse,
8826 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
8827 struct IPerlMem* ipM, struct IPerlMem* ipMS,
8828 struct IPerlMem* ipMP, struct IPerlEnv* ipE,
8829 struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
8830 struct IPerlDir* ipD, struct IPerlSock* ipS,
8831 struct IPerlProc* ipP)
8833 /* XXX many of the string copies here can be optimized if they're
8834 * constants; they need to be allocated as common memory and just
8835 * their pointers copied. */
8839 CPerlObj *pPerl = new(ipM) CPerlObj(ipM, ipMS, ipMP, ipE, ipStd, ipLIO,
8841 PERL_SET_THX(pPerl);
8842 # else /* !PERL_OBJECT */
8843 PerlInterpreter *my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
8844 PERL_SET_THX(my_perl);
8847 memset(my_perl, 0xab, sizeof(PerlInterpreter));
8853 # else /* !DEBUGGING */
8854 Zero(my_perl, 1, PerlInterpreter);
8855 # endif /* DEBUGGING */
8859 PL_MemShared = ipMS;
8867 # endif /* PERL_OBJECT */
8868 #else /* !PERL_IMPLICIT_SYS */
8870 PerlInterpreter *my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
8871 PERL_SET_THX(my_perl);
8874 memset(my_perl, 0xab, sizeof(PerlInterpreter));
8880 # else /* !DEBUGGING */
8881 Zero(my_perl, 1, PerlInterpreter);
8882 # endif /* DEBUGGING */
8883 #endif /* PERL_IMPLICIT_SYS */
8886 PL_xiv_arenaroot = NULL;
8888 PL_xnv_arenaroot = NULL;
8890 PL_xrv_arenaroot = NULL;
8892 PL_xpv_arenaroot = NULL;
8894 PL_xpviv_arenaroot = NULL;
8895 PL_xpviv_root = NULL;
8896 PL_xpvnv_arenaroot = NULL;
8897 PL_xpvnv_root = NULL;
8898 PL_xpvcv_arenaroot = NULL;
8899 PL_xpvcv_root = NULL;
8900 PL_xpvav_arenaroot = NULL;
8901 PL_xpvav_root = NULL;
8902 PL_xpvhv_arenaroot = NULL;
8903 PL_xpvhv_root = NULL;
8904 PL_xpvmg_arenaroot = NULL;
8905 PL_xpvmg_root = NULL;
8906 PL_xpvlv_arenaroot = NULL;
8907 PL_xpvlv_root = NULL;
8908 PL_xpvbm_arenaroot = NULL;
8909 PL_xpvbm_root = NULL;
8910 PL_he_arenaroot = NULL;
8912 PL_nice_chunk = NULL;
8913 PL_nice_chunk_size = 0;
8916 PL_sv_root = Nullsv;
8917 PL_sv_arenaroot = Nullsv;
8919 PL_debug = proto_perl->Idebug;
8921 /* create SV map for pointer relocation */
8922 PL_ptr_table = ptr_table_new();
8924 /* initialize these special pointers as early as possible */
8925 SvANY(&PL_sv_undef) = NULL;
8926 SvREFCNT(&PL_sv_undef) = (~(U32)0)/2;
8927 SvFLAGS(&PL_sv_undef) = SVf_READONLY|SVt_NULL;
8928 ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
8931 SvUPGRADE(&PL_sv_no, SVt_PVNV);
8933 SvANY(&PL_sv_no) = new_XPVNV();
8935 SvREFCNT(&PL_sv_no) = (~(U32)0)/2;
8936 SvFLAGS(&PL_sv_no) = SVp_NOK|SVf_NOK|SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
8937 SvPVX(&PL_sv_no) = SAVEPVN(PL_No, 0);
8938 SvCUR(&PL_sv_no) = 0;
8939 SvLEN(&PL_sv_no) = 1;
8940 SvNVX(&PL_sv_no) = 0;
8941 ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
8944 SvUPGRADE(&PL_sv_yes, SVt_PVNV);
8946 SvANY(&PL_sv_yes) = new_XPVNV();
8948 SvREFCNT(&PL_sv_yes) = (~(U32)0)/2;
8949 SvFLAGS(&PL_sv_yes) = SVp_NOK|SVf_NOK|SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
8950 SvPVX(&PL_sv_yes) = SAVEPVN(PL_Yes, 1);
8951 SvCUR(&PL_sv_yes) = 1;
8952 SvLEN(&PL_sv_yes) = 2;
8953 SvNVX(&PL_sv_yes) = 1;
8954 ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
8956 /* create shared string table */
8957 PL_strtab = newHV();
8958 HvSHAREKEYS_off(PL_strtab);
8959 hv_ksplit(PL_strtab, 512);
8960 ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
8962 PL_compiling = proto_perl->Icompiling;
8963 PL_compiling.cop_stashpv = SAVEPV(PL_compiling.cop_stashpv);
8964 PL_compiling.cop_file = SAVEPV(PL_compiling.cop_file);
8965 ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
8966 if (!specialWARN(PL_compiling.cop_warnings))
8967 PL_compiling.cop_warnings = sv_dup_inc(PL_compiling.cop_warnings);
8968 if (!specialCopIO(PL_compiling.cop_io))
8969 PL_compiling.cop_io = sv_dup_inc(PL_compiling.cop_io);
8970 PL_curcop = (COP*)any_dup(proto_perl->Tcurcop, proto_perl);
8972 /* pseudo environmental stuff */
8973 PL_origargc = proto_perl->Iorigargc;
8975 New(0, PL_origargv, i+1, char*);
8976 PL_origargv[i] = '\0';
8978 PL_origargv[i] = SAVEPV(proto_perl->Iorigargv[i]);
8980 PL_clone_callbacks = newAV(); /* Setup array of objects to callbackon */
8981 PL_envgv = gv_dup(proto_perl->Ienvgv);
8982 PL_incgv = gv_dup(proto_perl->Iincgv);
8983 PL_hintgv = gv_dup(proto_perl->Ihintgv);
8984 PL_origfilename = SAVEPV(proto_perl->Iorigfilename);
8985 PL_diehook = sv_dup_inc(proto_perl->Idiehook);
8986 PL_warnhook = sv_dup_inc(proto_perl->Iwarnhook);
8989 PL_minus_c = proto_perl->Iminus_c;
8990 PL_patchlevel = sv_dup_inc(proto_perl->Ipatchlevel);
8991 PL_localpatches = proto_perl->Ilocalpatches;
8992 PL_splitstr = proto_perl->Isplitstr;
8993 PL_preprocess = proto_perl->Ipreprocess;
8994 PL_minus_n = proto_perl->Iminus_n;
8995 PL_minus_p = proto_perl->Iminus_p;
8996 PL_minus_l = proto_perl->Iminus_l;
8997 PL_minus_a = proto_perl->Iminus_a;
8998 PL_minus_F = proto_perl->Iminus_F;
8999 PL_doswitches = proto_perl->Idoswitches;
9000 PL_dowarn = proto_perl->Idowarn;
9001 PL_doextract = proto_perl->Idoextract;
9002 PL_sawampersand = proto_perl->Isawampersand;
9003 PL_unsafe = proto_perl->Iunsafe;
9004 PL_inplace = SAVEPV(proto_perl->Iinplace);
9005 PL_e_script = sv_dup_inc(proto_perl->Ie_script);
9006 PL_perldb = proto_perl->Iperldb;
9007 PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
9009 /* magical thingies */
9010 /* XXX time(&PL_basetime) when asked for? */
9011 PL_basetime = proto_perl->Ibasetime;
9012 PL_formfeed = sv_dup(proto_perl->Iformfeed);
9014 PL_maxsysfd = proto_perl->Imaxsysfd;
9015 PL_multiline = proto_perl->Imultiline;
9016 PL_statusvalue = proto_perl->Istatusvalue;
9018 PL_statusvalue_vms = proto_perl->Istatusvalue_vms;
9021 /* shortcuts to various I/O objects */
9022 PL_stdingv = gv_dup(proto_perl->Istdingv);
9023 PL_stderrgv = gv_dup(proto_perl->Istderrgv);
9024 PL_defgv = gv_dup(proto_perl->Idefgv);
9025 PL_argvgv = gv_dup(proto_perl->Iargvgv);
9026 PL_argvoutgv = gv_dup(proto_perl->Iargvoutgv);
9027 PL_argvout_stack = av_dup_inc(proto_perl->Iargvout_stack);
9029 /* shortcuts to regexp stuff */
9030 PL_replgv = gv_dup(proto_perl->Ireplgv);
9032 /* shortcuts to misc objects */
9033 PL_errgv = gv_dup(proto_perl->Ierrgv);
9035 /* shortcuts to debugging objects */
9036 PL_DBgv = gv_dup(proto_perl->IDBgv);
9037 PL_DBline = gv_dup(proto_perl->IDBline);
9038 PL_DBsub = gv_dup(proto_perl->IDBsub);
9039 PL_DBsingle = sv_dup(proto_perl->IDBsingle);
9040 PL_DBtrace = sv_dup(proto_perl->IDBtrace);
9041 PL_DBsignal = sv_dup(proto_perl->IDBsignal);
9042 PL_lineary = av_dup(proto_perl->Ilineary);
9043 PL_dbargs = av_dup(proto_perl->Idbargs);
9046 PL_defstash = hv_dup_inc(proto_perl->Tdefstash);
9047 PL_curstash = hv_dup(proto_perl->Tcurstash);
9048 PL_debstash = hv_dup(proto_perl->Idebstash);
9049 PL_globalstash = hv_dup(proto_perl->Iglobalstash);
9050 PL_curstname = sv_dup_inc(proto_perl->Icurstname);
9052 PL_beginav = av_dup_inc(proto_perl->Ibeginav);
9053 PL_endav = av_dup_inc(proto_perl->Iendav);
9054 PL_checkav = av_dup_inc(proto_perl->Icheckav);
9055 PL_initav = av_dup_inc(proto_perl->Iinitav);
9057 PL_sub_generation = proto_perl->Isub_generation;
9059 /* funky return mechanisms */
9060 PL_forkprocess = proto_perl->Iforkprocess;
9062 /* subprocess state */
9063 PL_fdpid = av_dup_inc(proto_perl->Ifdpid);
9065 /* internal state */
9066 PL_tainting = proto_perl->Itainting;
9067 PL_maxo = proto_perl->Imaxo;
9068 if (proto_perl->Iop_mask)
9069 PL_op_mask = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
9071 PL_op_mask = Nullch;
9073 /* current interpreter roots */
9074 PL_main_cv = cv_dup_inc(proto_perl->Imain_cv);
9075 PL_main_root = OpREFCNT_inc(proto_perl->Imain_root);
9076 PL_main_start = proto_perl->Imain_start;
9077 PL_eval_root = proto_perl->Ieval_root;
9078 PL_eval_start = proto_perl->Ieval_start;
9080 /* runtime control stuff */
9081 PL_curcopdb = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
9082 PL_copline = proto_perl->Icopline;
9084 PL_filemode = proto_perl->Ifilemode;
9085 PL_lastfd = proto_perl->Ilastfd;
9086 PL_oldname = proto_perl->Ioldname; /* XXX not quite right */
9089 PL_gensym = proto_perl->Igensym;
9090 PL_preambled = proto_perl->Ipreambled;
9091 PL_preambleav = av_dup_inc(proto_perl->Ipreambleav);
9092 PL_laststatval = proto_perl->Ilaststatval;
9093 PL_laststype = proto_perl->Ilaststype;
9094 PL_mess_sv = Nullsv;
9096 PL_ors_sv = sv_dup_inc(proto_perl->Iors_sv);
9097 PL_ofmt = SAVEPV(proto_perl->Iofmt);
9099 /* interpreter atexit processing */
9100 PL_exitlistlen = proto_perl->Iexitlistlen;
9101 if (PL_exitlistlen) {
9102 New(0, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
9103 Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
9106 PL_exitlist = (PerlExitListEntry*)NULL;
9107 PL_modglobal = hv_dup_inc(proto_perl->Imodglobal);
9109 PL_profiledata = NULL;
9110 PL_rsfp = fp_dup(proto_perl->Irsfp, '<');
9111 /* PL_rsfp_filters entries have fake IoDIRP() */
9112 PL_rsfp_filters = av_dup_inc(proto_perl->Irsfp_filters);
9114 PL_compcv = cv_dup(proto_perl->Icompcv);
9115 PL_comppad = av_dup(proto_perl->Icomppad);
9116 PL_comppad_name = av_dup(proto_perl->Icomppad_name);
9117 PL_comppad_name_fill = proto_perl->Icomppad_name_fill;
9118 PL_comppad_name_floor = proto_perl->Icomppad_name_floor;
9119 PL_curpad = (SV**)ptr_table_fetch(PL_ptr_table,
9120 proto_perl->Tcurpad);
9122 #ifdef HAVE_INTERP_INTERN
9123 sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
9126 /* more statics moved here */
9127 PL_generation = proto_perl->Igeneration;
9128 PL_DBcv = cv_dup(proto_perl->IDBcv);
9130 PL_in_clean_objs = proto_perl->Iin_clean_objs;
9131 PL_in_clean_all = proto_perl->Iin_clean_all;
9133 PL_uid = proto_perl->Iuid;
9134 PL_euid = proto_perl->Ieuid;
9135 PL_gid = proto_perl->Igid;
9136 PL_egid = proto_perl->Iegid;
9137 PL_nomemok = proto_perl->Inomemok;
9138 PL_an = proto_perl->Ian;
9139 PL_cop_seqmax = proto_perl->Icop_seqmax;
9140 PL_op_seqmax = proto_perl->Iop_seqmax;
9141 PL_evalseq = proto_perl->Ievalseq;
9142 PL_origenviron = proto_perl->Iorigenviron; /* XXX not quite right */
9143 PL_origalen = proto_perl->Iorigalen;
9144 PL_pidstatus = newHV(); /* XXX flag for cloning? */
9145 PL_osname = SAVEPV(proto_perl->Iosname);
9146 PL_sh_path = SAVEPV(proto_perl->Ish_path);
9147 PL_sighandlerp = proto_perl->Isighandlerp;
9150 PL_runops = proto_perl->Irunops;
9152 Copy(proto_perl->Itokenbuf, PL_tokenbuf, 256, char);
9155 PL_cshlen = proto_perl->Icshlen;
9156 PL_cshname = SAVEPVN(proto_perl->Icshname, PL_cshlen);
9159 PL_lex_state = proto_perl->Ilex_state;
9160 PL_lex_defer = proto_perl->Ilex_defer;
9161 PL_lex_expect = proto_perl->Ilex_expect;
9162 PL_lex_formbrack = proto_perl->Ilex_formbrack;
9163 PL_lex_dojoin = proto_perl->Ilex_dojoin;
9164 PL_lex_starts = proto_perl->Ilex_starts;
9165 PL_lex_stuff = sv_dup_inc(proto_perl->Ilex_stuff);
9166 PL_lex_repl = sv_dup_inc(proto_perl->Ilex_repl);
9167 PL_lex_op = proto_perl->Ilex_op;
9168 PL_lex_inpat = proto_perl->Ilex_inpat;
9169 PL_lex_inwhat = proto_perl->Ilex_inwhat;
9170 PL_lex_brackets = proto_perl->Ilex_brackets;
9171 i = (PL_lex_brackets < 120 ? 120 : PL_lex_brackets);
9172 PL_lex_brackstack = SAVEPVN(proto_perl->Ilex_brackstack,i);
9173 PL_lex_casemods = proto_perl->Ilex_casemods;
9174 i = (PL_lex_casemods < 12 ? 12 : PL_lex_casemods);
9175 PL_lex_casestack = SAVEPVN(proto_perl->Ilex_casestack,i);
9177 Copy(proto_perl->Inextval, PL_nextval, 5, YYSTYPE);
9178 Copy(proto_perl->Inexttype, PL_nexttype, 5, I32);
9179 PL_nexttoke = proto_perl->Inexttoke;
9181 PL_linestr = sv_dup_inc(proto_perl->Ilinestr);
9182 i = proto_perl->Ibufptr - SvPVX(proto_perl->Ilinestr);
9183 PL_bufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
9184 i = proto_perl->Ioldbufptr - SvPVX(proto_perl->Ilinestr);
9185 PL_oldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
9186 i = proto_perl->Ioldoldbufptr - SvPVX(proto_perl->Ilinestr);
9187 PL_oldoldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
9188 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
9189 i = proto_perl->Ilinestart - SvPVX(proto_perl->Ilinestr);
9190 PL_linestart = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
9191 PL_pending_ident = proto_perl->Ipending_ident;
9192 PL_sublex_info = proto_perl->Isublex_info; /* XXX not quite right */
9194 PL_expect = proto_perl->Iexpect;
9196 PL_multi_start = proto_perl->Imulti_start;
9197 PL_multi_end = proto_perl->Imulti_end;
9198 PL_multi_open = proto_perl->Imulti_open;
9199 PL_multi_close = proto_perl->Imulti_close;
9201 PL_error_count = proto_perl->Ierror_count;
9202 PL_subline = proto_perl->Isubline;
9203 PL_subname = sv_dup_inc(proto_perl->Isubname);
9205 PL_min_intro_pending = proto_perl->Imin_intro_pending;
9206 PL_max_intro_pending = proto_perl->Imax_intro_pending;
9207 PL_padix = proto_perl->Ipadix;
9208 PL_padix_floor = proto_perl->Ipadix_floor;
9209 PL_pad_reset_pending = proto_perl->Ipad_reset_pending;
9211 i = proto_perl->Ilast_uni - SvPVX(proto_perl->Ilinestr);
9212 PL_last_uni = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
9213 i = proto_perl->Ilast_lop - SvPVX(proto_perl->Ilinestr);
9214 PL_last_lop = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
9215 PL_last_lop_op = proto_perl->Ilast_lop_op;
9216 PL_in_my = proto_perl->Iin_my;
9217 PL_in_my_stash = hv_dup(proto_perl->Iin_my_stash);
9219 PL_cryptseen = proto_perl->Icryptseen;
9222 PL_hints = proto_perl->Ihints;
9224 PL_amagic_generation = proto_perl->Iamagic_generation;
9226 #ifdef USE_LOCALE_COLLATE
9227 PL_collation_ix = proto_perl->Icollation_ix;
9228 PL_collation_name = SAVEPV(proto_perl->Icollation_name);
9229 PL_collation_standard = proto_perl->Icollation_standard;
9230 PL_collxfrm_base = proto_perl->Icollxfrm_base;
9231 PL_collxfrm_mult = proto_perl->Icollxfrm_mult;
9232 #endif /* USE_LOCALE_COLLATE */
9234 #ifdef USE_LOCALE_NUMERIC
9235 PL_numeric_name = SAVEPV(proto_perl->Inumeric_name);
9236 PL_numeric_standard = proto_perl->Inumeric_standard;
9237 PL_numeric_local = proto_perl->Inumeric_local;
9238 PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv);
9239 #endif /* !USE_LOCALE_NUMERIC */
9241 /* utf8 character classes */
9242 PL_utf8_alnum = sv_dup_inc(proto_perl->Iutf8_alnum);
9243 PL_utf8_alnumc = sv_dup_inc(proto_perl->Iutf8_alnumc);
9244 PL_utf8_ascii = sv_dup_inc(proto_perl->Iutf8_ascii);
9245 PL_utf8_alpha = sv_dup_inc(proto_perl->Iutf8_alpha);
9246 PL_utf8_space = sv_dup_inc(proto_perl->Iutf8_space);
9247 PL_utf8_cntrl = sv_dup_inc(proto_perl->Iutf8_cntrl);
9248 PL_utf8_graph = sv_dup_inc(proto_perl->Iutf8_graph);
9249 PL_utf8_digit = sv_dup_inc(proto_perl->Iutf8_digit);
9250 PL_utf8_upper = sv_dup_inc(proto_perl->Iutf8_upper);
9251 PL_utf8_lower = sv_dup_inc(proto_perl->Iutf8_lower);
9252 PL_utf8_print = sv_dup_inc(proto_perl->Iutf8_print);
9253 PL_utf8_punct = sv_dup_inc(proto_perl->Iutf8_punct);
9254 PL_utf8_xdigit = sv_dup_inc(proto_perl->Iutf8_xdigit);
9255 PL_utf8_mark = sv_dup_inc(proto_perl->Iutf8_mark);
9256 PL_utf8_toupper = sv_dup_inc(proto_perl->Iutf8_toupper);
9257 PL_utf8_totitle = sv_dup_inc(proto_perl->Iutf8_totitle);
9258 PL_utf8_tolower = sv_dup_inc(proto_perl->Iutf8_tolower);
9261 PL_last_swash_hv = Nullhv; /* reinits on demand */
9262 PL_last_swash_klen = 0;
9263 PL_last_swash_key[0]= '\0';
9264 PL_last_swash_tmps = (U8*)NULL;
9265 PL_last_swash_slen = 0;
9267 /* perly.c globals */
9268 PL_yydebug = proto_perl->Iyydebug;
9269 PL_yynerrs = proto_perl->Iyynerrs;
9270 PL_yyerrflag = proto_perl->Iyyerrflag;
9271 PL_yychar = proto_perl->Iyychar;
9272 PL_yyval = proto_perl->Iyyval;
9273 PL_yylval = proto_perl->Iyylval;
9275 PL_glob_index = proto_perl->Iglob_index;
9276 PL_srand_called = proto_perl->Isrand_called;
9277 PL_uudmap['M'] = 0; /* reinits on demand */
9278 PL_bitcount = Nullch; /* reinits on demand */
9280 if (proto_perl->Ipsig_pend) {
9281 Newz(0, PL_psig_pend, SIG_SIZE, int);
9284 PL_psig_pend = (int*)NULL;
9287 if (proto_perl->Ipsig_ptr) {
9288 Newz(0, PL_psig_ptr, SIG_SIZE, SV*);
9289 Newz(0, PL_psig_name, SIG_SIZE, SV*);
9290 for (i = 1; i < SIG_SIZE; i++) {
9291 PL_psig_ptr[i] = sv_dup_inc(proto_perl->Ipsig_ptr[i]);
9292 PL_psig_name[i] = sv_dup_inc(proto_perl->Ipsig_name[i]);
9296 PL_psig_ptr = (SV**)NULL;
9297 PL_psig_name = (SV**)NULL;
9300 /* thrdvar.h stuff */
9302 if (flags & CLONEf_COPY_STACKS) {
9303 /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
9304 PL_tmps_ix = proto_perl->Ttmps_ix;
9305 PL_tmps_max = proto_perl->Ttmps_max;
9306 PL_tmps_floor = proto_perl->Ttmps_floor;
9307 Newz(50, PL_tmps_stack, PL_tmps_max, SV*);
9309 while (i <= PL_tmps_ix) {
9310 PL_tmps_stack[i] = sv_dup_inc(proto_perl->Ttmps_stack[i]);
9314 /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
9315 i = proto_perl->Tmarkstack_max - proto_perl->Tmarkstack;
9316 Newz(54, PL_markstack, i, I32);
9317 PL_markstack_max = PL_markstack + (proto_perl->Tmarkstack_max
9318 - proto_perl->Tmarkstack);
9319 PL_markstack_ptr = PL_markstack + (proto_perl->Tmarkstack_ptr
9320 - proto_perl->Tmarkstack);
9321 Copy(proto_perl->Tmarkstack, PL_markstack,
9322 PL_markstack_ptr - PL_markstack + 1, I32);
9324 /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
9325 * NOTE: unlike the others! */
9326 PL_scopestack_ix = proto_perl->Tscopestack_ix;
9327 PL_scopestack_max = proto_perl->Tscopestack_max;
9328 Newz(54, PL_scopestack, PL_scopestack_max, I32);
9329 Copy(proto_perl->Tscopestack, PL_scopestack, PL_scopestack_ix, I32);
9331 /* next push_return() sets PL_retstack[PL_retstack_ix]
9332 * NOTE: unlike the others! */
9333 PL_retstack_ix = proto_perl->Tretstack_ix;
9334 PL_retstack_max = proto_perl->Tretstack_max;
9335 Newz(54, PL_retstack, PL_retstack_max, OP*);
9336 Copy(proto_perl->Tretstack, PL_retstack, PL_retstack_ix, I32);
9338 /* NOTE: si_dup() looks at PL_markstack */
9339 PL_curstackinfo = si_dup(proto_perl->Tcurstackinfo);
9341 /* PL_curstack = PL_curstackinfo->si_stack; */
9342 PL_curstack = av_dup(proto_perl->Tcurstack);
9343 PL_mainstack = av_dup(proto_perl->Tmainstack);
9345 /* next PUSHs() etc. set *(PL_stack_sp+1) */
9346 PL_stack_base = AvARRAY(PL_curstack);
9347 PL_stack_sp = PL_stack_base + (proto_perl->Tstack_sp
9348 - proto_perl->Tstack_base);
9349 PL_stack_max = PL_stack_base + AvMAX(PL_curstack);
9351 /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
9352 * NOTE: unlike the others! */
9353 PL_savestack_ix = proto_perl->Tsavestack_ix;
9354 PL_savestack_max = proto_perl->Tsavestack_max;
9355 /*Newz(54, PL_savestack, PL_savestack_max, ANY);*/
9356 PL_savestack = ss_dup(proto_perl);
9360 ENTER; /* perl_destruct() wants to LEAVE; */
9363 PL_start_env = proto_perl->Tstart_env; /* XXXXXX */
9364 PL_top_env = &PL_start_env;
9366 PL_op = proto_perl->Top;
9369 PL_Xpv = (XPV*)NULL;
9370 PL_na = proto_perl->Tna;
9372 PL_statbuf = proto_perl->Tstatbuf;
9373 PL_statcache = proto_perl->Tstatcache;
9374 PL_statgv = gv_dup(proto_perl->Tstatgv);
9375 PL_statname = sv_dup_inc(proto_perl->Tstatname);
9377 PL_timesbuf = proto_perl->Ttimesbuf;
9380 PL_tainted = proto_perl->Ttainted;
9381 PL_curpm = proto_perl->Tcurpm; /* XXX No PMOP ref count */
9382 PL_nrs = sv_dup_inc(proto_perl->Tnrs);
9383 PL_rs = sv_dup_inc(proto_perl->Trs);
9384 PL_last_in_gv = gv_dup(proto_perl->Tlast_in_gv);
9385 PL_ofs_sv = sv_dup_inc(proto_perl->Tofs_sv);
9386 PL_defoutgv = gv_dup_inc(proto_perl->Tdefoutgv);
9387 PL_chopset = proto_perl->Tchopset; /* XXX never deallocated */
9388 PL_toptarget = sv_dup_inc(proto_perl->Ttoptarget);
9389 PL_bodytarget = sv_dup_inc(proto_perl->Tbodytarget);
9390 PL_formtarget = sv_dup(proto_perl->Tformtarget);
9392 PL_restartop = proto_perl->Trestartop;
9393 PL_in_eval = proto_perl->Tin_eval;
9394 PL_delaymagic = proto_perl->Tdelaymagic;
9395 PL_dirty = proto_perl->Tdirty;
9396 PL_localizing = proto_perl->Tlocalizing;
9398 #ifdef PERL_FLEXIBLE_EXCEPTIONS
9399 PL_protect = proto_perl->Tprotect;
9401 PL_errors = sv_dup_inc(proto_perl->Terrors);
9402 PL_av_fetch_sv = Nullsv;
9403 PL_hv_fetch_sv = Nullsv;
9404 Zero(&PL_hv_fetch_ent_mh, 1, HE); /* XXX */
9405 PL_modcount = proto_perl->Tmodcount;
9406 PL_lastgotoprobe = Nullop;
9407 PL_dumpindent = proto_perl->Tdumpindent;
9409 PL_sortcop = (OP*)any_dup(proto_perl->Tsortcop, proto_perl);
9410 PL_sortstash = hv_dup(proto_perl->Tsortstash);
9411 PL_firstgv = gv_dup(proto_perl->Tfirstgv);
9412 PL_secondgv = gv_dup(proto_perl->Tsecondgv);
9413 PL_sortcxix = proto_perl->Tsortcxix;
9414 PL_efloatbuf = Nullch; /* reinits on demand */
9415 PL_efloatsize = 0; /* reinits on demand */
9419 PL_screamfirst = NULL;
9420 PL_screamnext = NULL;
9421 PL_maxscream = -1; /* reinits on demand */
9422 PL_lastscream = Nullsv;
9424 PL_watchaddr = NULL;
9425 PL_watchok = Nullch;
9427 PL_regdummy = proto_perl->Tregdummy;
9428 PL_regcomp_parse = Nullch;
9429 PL_regxend = Nullch;
9430 PL_regcode = (regnode*)NULL;
9433 PL_regprecomp = Nullch;
9438 PL_seen_zerolen = 0;
9440 PL_regcomp_rx = (regexp*)NULL;
9442 PL_colorset = 0; /* reinits PL_colors[] */
9443 /*PL_colors[6] = {0,0,0,0,0,0};*/
9444 PL_reg_whilem_seen = 0;
9445 PL_reginput = Nullch;
9448 PL_regstartp = (I32*)NULL;
9449 PL_regendp = (I32*)NULL;
9450 PL_reglastparen = (U32*)NULL;
9451 PL_regtill = Nullch;
9452 PL_reg_start_tmp = (char**)NULL;
9453 PL_reg_start_tmpl = 0;
9454 PL_regdata = (struct reg_data*)NULL;
9457 PL_reg_eval_set = 0;
9459 PL_regprogram = (regnode*)NULL;
9461 PL_regcc = (CURCUR*)NULL;
9462 PL_reg_call_cc = (struct re_cc_state*)NULL;
9463 PL_reg_re = (regexp*)NULL;
9464 PL_reg_ganch = Nullch;
9466 PL_reg_magic = (MAGIC*)NULL;
9468 PL_reg_oldcurpm = (PMOP*)NULL;
9469 PL_reg_curpm = (PMOP*)NULL;
9470 PL_reg_oldsaved = Nullch;
9471 PL_reg_oldsavedlen = 0;
9473 PL_reg_leftiter = 0;
9474 PL_reg_poscache = Nullch;
9475 PL_reg_poscache_size= 0;
9477 /* RE engine - function pointers */
9478 PL_regcompp = proto_perl->Tregcompp;
9479 PL_regexecp = proto_perl->Tregexecp;
9480 PL_regint_start = proto_perl->Tregint_start;
9481 PL_regint_string = proto_perl->Tregint_string;
9482 PL_regfree = proto_perl->Tregfree;
9484 PL_reginterp_cnt = 0;
9485 PL_reg_starttry = 0;
9487 if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
9488 ptr_table_free(PL_ptr_table);
9489 PL_ptr_table = NULL;
9492 while(av_len(PL_clone_callbacks) != -1) {
9493 HV* stash = (HV*) av_shift(PL_clone_callbacks);
9494 CV* cloner = (CV*) gv_fetchmethod_autoload(stash,"CLONE",0);
9497 cloner = GvCV(cloner);
9501 XPUSHs(newSVpv(HvNAME(stash),0));
9503 call_sv((SV*)cloner, G_DISCARD);
9511 return (PerlInterpreter*)pPerl;
9517 #else /* !USE_ITHREADS */
9523 #endif /* USE_ITHREADS */
9526 do_report_used(pTHXo_ SV *sv)
9528 if (SvTYPE(sv) != SVTYPEMASK) {
9529 PerlIO_printf(Perl_debug_log, "****\n");
9535 do_clean_objs(pTHXo_ SV *sv)
9539 if (SvROK(sv) && SvOBJECT(rv = SvRV(sv))) {
9540 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(sv)));
9541 if (SvWEAKREF(sv)) {
9552 /* XXX Might want to check arrays, etc. */
9555 #ifndef DISABLE_DESTRUCTOR_KLUDGE
9557 do_clean_named_objs(pTHXo_ SV *sv)
9559 if (SvTYPE(sv) == SVt_PVGV && GvGP(sv)) {
9560 if ( SvOBJECT(GvSV(sv)) ||
9561 (GvAV(sv) && SvOBJECT(GvAV(sv))) ||
9562 (GvHV(sv) && SvOBJECT(GvHV(sv))) ||
9563 (GvIO(sv) && SvOBJECT(GvIO(sv))) ||
9564 (GvCV(sv) && SvOBJECT(GvCV(sv))) )
9566 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning named glob object:\n "), sv_dump(sv)));
9574 do_clean_all(pTHXo_ SV *sv)
9576 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
9577 SvFLAGS(sv) |= SVf_BREAK;