3 * Copyright (c) 1991-1999, 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);
34 (p) = (SV*)safemalloc(sizeof(SV)); \
46 Safefree((char*)(p)); \
51 static I32 registry_size;
53 #define REGHASH(sv,size) ((((U32)(sv)) >> 2) % (size))
55 #define REG_REPLACE(sv,a,b) \
57 void* p = sv->sv_any; \
58 I32 h = REGHASH(sv, registry_size); \
60 while (registry[i] != (a)) { \
61 if (++i >= registry_size) \
64 Perl_die(aTHX_ "SV registry bug"); \
69 #define REG_ADD(sv) REG_REPLACE(sv,Nullsv,sv)
70 #define REG_REMOVE(sv) REG_REPLACE(sv,sv,Nullsv)
73 S_reg_add(pTHX_ SV *sv)
75 if (PL_sv_count >= (registry_size >> 1))
77 SV **oldreg = registry;
78 I32 oldsize = registry_size;
80 registry_size = registry_size ? ((registry_size << 2) + 1) : 2037;
81 Newz(707, registry, registry_size, SV*);
86 for (i = 0; i < oldsize; ++i) {
87 SV* oldsv = oldreg[i];
100 S_reg_remove(pTHX_ SV *sv)
107 S_visit(pTHX_ SVFUNC_t f)
111 for (i = 0; i < registry_size; ++i) {
112 SV* sv = registry[i];
113 if (sv && SvTYPE(sv) != SVTYPEMASK)
119 Perl_sv_add_arena(pTHX_ char *ptr, U32 size, U32 flags)
121 if (!(flags & SVf_FAKE))
128 * "A time to plant, and a time to uproot what was planted..."
131 #define plant_SV(p) \
133 SvANY(p) = (void *)PL_sv_root; \
134 SvFLAGS(p) = SVTYPEMASK; \
139 /* sv_mutex must be held while calling uproot_SV() */
140 #define uproot_SV(p) \
143 PL_sv_root = (SV*)SvANY(p); \
165 if (PL_debug & 32768) \
173 S_del_sv(pTHX_ SV *p)
175 if (PL_debug & 32768) {
180 for (sva = PL_sv_arenaroot; sva; sva = (SV *) SvANY(sva)) {
182 svend = &sva[SvREFCNT(sva)];
183 if (p >= sv && p < svend)
187 if (ckWARN_d(WARN_INTERNAL))
188 Perl_warner(aTHX_ WARN_INTERNAL,
189 "Attempt to free non-arena SV: 0x%"UVxf,
197 #else /* ! DEBUGGING */
199 #define del_SV(p) plant_SV(p)
201 #endif /* DEBUGGING */
204 Perl_sv_add_arena(pTHX_ char *ptr, U32 size, U32 flags)
209 Zero(sva, size, char);
211 /* The first SV in an arena isn't an SV. */
212 SvANY(sva) = (void *) PL_sv_arenaroot; /* ptr to next arena */
213 SvREFCNT(sva) = size / sizeof(SV); /* number of SV slots */
214 SvFLAGS(sva) = flags; /* FAKE if not to be freed */
216 PL_sv_arenaroot = sva;
217 PL_sv_root = sva + 1;
219 svend = &sva[SvREFCNT(sva) - 1];
222 SvANY(sv) = (void *)(SV*)(sv + 1);
223 SvFLAGS(sv) = SVTYPEMASK;
227 SvFLAGS(sv) = SVTYPEMASK;
230 /* sv_mutex must be held while calling more_sv() */
237 sv_add_arena(PL_nice_chunk, PL_nice_chunk_size, 0);
238 PL_nice_chunk = Nullch;
241 char *chunk; /* must use New here to match call to */
242 New(704,chunk,1008,char); /* Safefree() in sv_free_arenas() */
243 sv_add_arena(chunk, 1008, 0);
250 S_visit(pTHX_ SVFUNC_t f)
256 for (sva = PL_sv_arenaroot; sva; sva = (SV*)SvANY(sva)) {
257 svend = &sva[SvREFCNT(sva)];
258 for (sv = sva + 1; sv < svend; ++sv) {
259 if (SvTYPE(sv) != SVTYPEMASK)
268 Perl_sv_report_used(pTHX)
270 visit(do_report_used);
274 Perl_sv_clean_objs(pTHX)
276 PL_in_clean_objs = TRUE;
277 visit(do_clean_objs);
278 #ifndef DISABLE_DESTRUCTOR_KLUDGE
279 /* some barnacles may yet remain, clinging to typeglobs */
280 visit(do_clean_named_objs);
282 PL_in_clean_objs = FALSE;
286 Perl_sv_clean_all(pTHX)
288 PL_in_clean_all = TRUE;
290 PL_in_clean_all = FALSE;
294 Perl_sv_free_arenas(pTHX)
299 /* Free arenas here, but be careful about fake ones. (We assume
300 contiguity of the fake ones with the corresponding real ones.) */
302 for (sva = PL_sv_arenaroot; sva; sva = svanext) {
303 svanext = (SV*) SvANY(sva);
304 while (svanext && SvFAKE(svanext))
305 svanext = (SV*) SvANY(svanext);
308 Safefree((void *)sva);
312 Safefree(PL_nice_chunk);
313 PL_nice_chunk = Nullch;
314 PL_nice_chunk_size = 0;
320 Perl_report_uninit(pTHX)
323 Perl_warner(aTHX_ WARN_UNINITIALIZED, PL_warn_uninit,
324 " in ", PL_op_desc[PL_op->op_type]);
326 Perl_warner(aTHX_ WARN_UNINITIALIZED, PL_warn_uninit, "", "");
338 * See comment in more_xiv() -- RAM.
340 PL_xiv_root = *(IV**)xiv;
342 return (XPVIV*)((char*)xiv - STRUCT_OFFSET(XPVIV, xiv_iv));
346 S_del_xiv(pTHX_ XPVIV *p)
348 IV* xiv = (IV*)((char*)(p) + STRUCT_OFFSET(XPVIV, xiv_iv));
350 *(IV**)xiv = PL_xiv_root;
361 New(705, ptr, 1008/sizeof(XPV), XPV);
362 ptr->xpv_pv = (char*)PL_xiv_arenaroot; /* linked list of xiv arenas */
363 PL_xiv_arenaroot = ptr; /* to keep Purify happy */
366 xivend = &xiv[1008 / sizeof(IV) - 1];
367 xiv += (sizeof(XPV) - 1) / sizeof(IV) + 1; /* fudge by size of XPV */
369 while (xiv < xivend) {
370 *(IV**)xiv = (IV *)(xiv + 1);
384 PL_xnv_root = *(NV**)xnv;
386 return (XPVNV*)((char*)xnv - STRUCT_OFFSET(XPVNV, xnv_nv));
390 S_del_xnv(pTHX_ XPVNV *p)
392 NV* xnv = (NV*)((char*)(p) + STRUCT_OFFSET(XPVNV, xnv_nv));
394 *(NV**)xnv = PL_xnv_root;
404 New(711, xnv, 1008/sizeof(NV), NV);
405 xnvend = &xnv[1008 / sizeof(NV) - 1];
406 xnv += (sizeof(XPVIV) - 1) / sizeof(NV) + 1; /* fudge by sizeof XPVIV */
408 while (xnv < xnvend) {
409 *(NV**)xnv = (NV*)(xnv + 1);
423 PL_xrv_root = (XRV*)xrv->xrv_rv;
429 S_del_xrv(pTHX_ XRV *p)
432 p->xrv_rv = (SV*)PL_xrv_root;
441 register XRV* xrvend;
442 New(712, PL_xrv_root, 1008/sizeof(XRV), XRV);
444 xrvend = &xrv[1008 / sizeof(XRV) - 1];
445 while (xrv < xrvend) {
446 xrv->xrv_rv = (SV*)(xrv + 1);
460 PL_xpv_root = (XPV*)xpv->xpv_pv;
466 S_del_xpv(pTHX_ XPV *p)
469 p->xpv_pv = (char*)PL_xpv_root;
478 register XPV* xpvend;
479 New(713, PL_xpv_root, 1008/sizeof(XPV), XPV);
481 xpvend = &xpv[1008 / sizeof(XPV) - 1];
482 while (xpv < xpvend) {
483 xpv->xpv_pv = (char*)(xpv + 1);
496 xpviv = PL_xpviv_root;
497 PL_xpviv_root = (XPVIV*)xpviv->xpv_pv;
503 S_del_xpviv(pTHX_ XPVIV *p)
506 p->xpv_pv = (char*)PL_xpviv_root;
515 register XPVIV* xpviv;
516 register XPVIV* xpvivend;
517 New(714, PL_xpviv_root, 1008/sizeof(XPVIV), XPVIV);
518 xpviv = PL_xpviv_root;
519 xpvivend = &xpviv[1008 / sizeof(XPVIV) - 1];
520 while (xpviv < xpvivend) {
521 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;
554 register XPVNV* xpvnv;
555 register XPVNV* xpvnvend;
556 New(715, PL_xpvnv_root, 1008/sizeof(XPVNV), XPVNV);
557 xpvnv = PL_xpvnv_root;
558 xpvnvend = &xpvnv[1008 / sizeof(XPVNV) - 1];
559 while (xpvnv < xpvnvend) {
560 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;
594 register XPVCV* xpvcv;
595 register XPVCV* xpvcvend;
596 New(716, PL_xpvcv_root, 1008/sizeof(XPVCV), XPVCV);
597 xpvcv = PL_xpvcv_root;
598 xpvcvend = &xpvcv[1008 / sizeof(XPVCV) - 1];
599 while (xpvcv < xpvcvend) {
600 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;
634 register XPVAV* xpvav;
635 register XPVAV* xpvavend;
636 New(717, PL_xpvav_root, 1008/sizeof(XPVAV), XPVAV);
637 xpvav = PL_xpvav_root;
638 xpvavend = &xpvav[1008 / sizeof(XPVAV) - 1];
639 while (xpvav < xpvavend) {
640 xpvav->xav_array = (char*)(xpvav + 1);
643 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;
674 register XPVHV* xpvhv;
675 register XPVHV* xpvhvend;
676 New(718, PL_xpvhv_root, 1008/sizeof(XPVHV), XPVHV);
677 xpvhv = PL_xpvhv_root;
678 xpvhvend = &xpvhv[1008 / sizeof(XPVHV) - 1];
679 while (xpvhv < xpvhvend) {
680 xpvhv->xhv_array = (char*)(xpvhv + 1);
683 xpvhv->xhv_array = 0;
694 xpvmg = PL_xpvmg_root;
695 PL_xpvmg_root = (XPVMG*)xpvmg->xpv_pv;
701 S_del_xpvmg(pTHX_ XPVMG *p)
704 p->xpv_pv = (char*)PL_xpvmg_root;
713 register XPVMG* xpvmg;
714 register XPVMG* xpvmgend;
715 New(719, PL_xpvmg_root, 1008/sizeof(XPVMG), XPVMG);
716 xpvmg = PL_xpvmg_root;
717 xpvmgend = &xpvmg[1008 / sizeof(XPVMG) - 1];
718 while (xpvmg < xpvmgend) {
719 xpvmg->xpv_pv = (char*)(xpvmg + 1);
734 xpvlv = PL_xpvlv_root;
735 PL_xpvlv_root = (XPVLV*)xpvlv->xpv_pv;
741 S_del_xpvlv(pTHX_ XPVLV *p)
744 p->xpv_pv = (char*)PL_xpvlv_root;
753 register XPVLV* xpvlv;
754 register XPVLV* xpvlvend;
755 New(720, PL_xpvlv_root, 1008/sizeof(XPVLV), XPVLV);
756 xpvlv = PL_xpvlv_root;
757 xpvlvend = &xpvlv[1008 / sizeof(XPVLV) - 1];
758 while (xpvlv < xpvlvend) {
759 xpvlv->xpv_pv = (char*)(xpvlv + 1);
773 xpvbm = PL_xpvbm_root;
774 PL_xpvbm_root = (XPVBM*)xpvbm->xpv_pv;
780 S_del_xpvbm(pTHX_ XPVBM *p)
783 p->xpv_pv = (char*)PL_xpvbm_root;
792 register XPVBM* xpvbm;
793 register XPVBM* xpvbmend;
794 New(721, PL_xpvbm_root, 1008/sizeof(XPVBM), XPVBM);
795 xpvbm = PL_xpvbm_root;
796 xpvbmend = &xpvbm[1008 / sizeof(XPVBM) - 1];
797 while (xpvbm < xpvbmend) {
798 xpvbm->xpv_pv = (char*)(xpvbm + 1);
805 #define new_XIV() (void*)safemalloc(sizeof(XPVIV))
806 #define del_XIV(p) Safefree((char*)p)
808 #define new_XIV() (void*)new_xiv()
809 #define del_XIV(p) del_xiv((XPVIV*) p)
813 #define new_XNV() (void*)safemalloc(sizeof(XPVNV))
814 #define del_XNV(p) Safefree((char*)p)
816 #define new_XNV() (void*)new_xnv()
817 #define del_XNV(p) del_xnv((XPVNV*) p)
821 #define new_XRV() (void*)safemalloc(sizeof(XRV))
822 #define del_XRV(p) Safefree((char*)p)
824 #define new_XRV() (void*)new_xrv()
825 #define del_XRV(p) del_xrv((XRV*) p)
829 #define new_XPV() (void*)safemalloc(sizeof(XPV))
830 #define del_XPV(p) Safefree((char*)p)
832 #define new_XPV() (void*)new_xpv()
833 #define del_XPV(p) del_xpv((XPV *)p)
837 # define my_safemalloc(s) safemalloc(s)
838 # define my_safefree(s) safefree(s)
841 S_my_safemalloc(MEM_SIZE size)
844 New(717, p, size, char);
847 # define my_safefree(s) Safefree(s)
851 #define new_XPVIV() (void*)safemalloc(sizeof(XPVIV))
852 #define del_XPVIV(p) Safefree((char*)p)
854 #define new_XPVIV() (void*)new_xpviv()
855 #define del_XPVIV(p) del_xpviv((XPVIV *)p)
859 #define new_XPVNV() (void*)safemalloc(sizeof(XPVNV))
860 #define del_XPVNV(p) Safefree((char*)p)
862 #define new_XPVNV() (void*)new_xpvnv()
863 #define del_XPVNV(p) del_xpvnv((XPVNV *)p)
868 #define new_XPVCV() (void*)safemalloc(sizeof(XPVCV))
869 #define del_XPVCV(p) Safefree((char*)p)
871 #define new_XPVCV() (void*)new_xpvcv()
872 #define del_XPVCV(p) del_xpvcv((XPVCV *)p)
876 #define new_XPVAV() (void*)safemalloc(sizeof(XPVAV))
877 #define del_XPVAV(p) Safefree((char*)p)
879 #define new_XPVAV() (void*)new_xpvav()
880 #define del_XPVAV(p) del_xpvav((XPVAV *)p)
884 #define new_XPVHV() (void*)safemalloc(sizeof(XPVHV))
885 #define del_XPVHV(p) Safefree((char*)p)
887 #define new_XPVHV() (void*)new_xpvhv()
888 #define del_XPVHV(p) del_xpvhv((XPVHV *)p)
892 #define new_XPVMG() (void*)safemalloc(sizeof(XPVMG))
893 #define del_XPVMG(p) Safefree((char*)p)
895 #define new_XPVMG() (void*)new_xpvmg()
896 #define del_XPVMG(p) del_xpvmg((XPVMG *)p)
900 #define new_XPVLV() (void*)safemalloc(sizeof(XPVLV))
901 #define del_XPVLV(p) Safefree((char*)p)
903 #define new_XPVLV() (void*)new_xpvlv()
904 #define del_XPVLV(p) del_xpvlv((XPVLV *)p)
907 #define new_XPVGV() (void*)my_safemalloc(sizeof(XPVGV))
908 #define del_XPVGV(p) my_safefree((char*)p)
911 #define new_XPVBM() (void*)safemalloc(sizeof(XPVBM))
912 #define del_XPVBM(p) Safefree((char*)p)
914 #define new_XPVBM() (void*)new_xpvbm()
915 #define del_XPVBM(p) del_xpvbm((XPVBM *)p)
918 #define new_XPVFM() (void*)my_safemalloc(sizeof(XPVFM))
919 #define del_XPVFM(p) my_safefree((char*)p)
921 #define new_XPVIO() (void*)my_safemalloc(sizeof(XPVIO))
922 #define del_XPVIO(p) my_safefree((char*)p)
925 =for apidoc sv_upgrade
927 Upgrade an SV to a more complex form. Use C<SvUPGRADE>. See
934 Perl_sv_upgrade(pTHX_ register SV *sv, U32 mt)
944 if (SvTYPE(sv) == mt)
950 switch (SvTYPE(sv)) {
971 else if (mt < SVt_PVIV)
988 pv = (char*)SvRV(sv);
1008 else if (mt == SVt_NV)
1019 del_XPVIV(SvANY(sv));
1029 del_XPVNV(SvANY(sv));
1037 magic = SvMAGIC(sv);
1038 stash = SvSTASH(sv);
1039 del_XPVMG(SvANY(sv));
1042 Perl_croak(aTHX_ "Can't upgrade that kind of scalar");
1047 Perl_croak(aTHX_ "Can't upgrade to undef");
1049 SvANY(sv) = new_XIV();
1053 SvANY(sv) = new_XNV();
1057 SvANY(sv) = new_XRV();
1061 SvANY(sv) = new_XPV();
1067 SvANY(sv) = new_XPVIV();
1077 SvANY(sv) = new_XPVNV();
1085 SvANY(sv) = new_XPVMG();
1091 SvMAGIC(sv) = magic;
1092 SvSTASH(sv) = stash;
1095 SvANY(sv) = new_XPVLV();
1101 SvMAGIC(sv) = magic;
1102 SvSTASH(sv) = stash;
1109 SvANY(sv) = new_XPVAV();
1117 SvMAGIC(sv) = magic;
1118 SvSTASH(sv) = stash;
1124 SvANY(sv) = new_XPVHV();
1132 SvMAGIC(sv) = magic;
1133 SvSTASH(sv) = stash;
1140 SvANY(sv) = new_XPVCV();
1141 Zero(SvANY(sv), 1, XPVCV);
1147 SvMAGIC(sv) = magic;
1148 SvSTASH(sv) = stash;
1151 SvANY(sv) = new_XPVGV();
1157 SvMAGIC(sv) = magic;
1158 SvSTASH(sv) = stash;
1166 SvANY(sv) = new_XPVBM();
1172 SvMAGIC(sv) = magic;
1173 SvSTASH(sv) = stash;
1179 SvANY(sv) = new_XPVFM();
1180 Zero(SvANY(sv), 1, XPVFM);
1186 SvMAGIC(sv) = magic;
1187 SvSTASH(sv) = stash;
1190 SvANY(sv) = new_XPVIO();
1191 Zero(SvANY(sv), 1, XPVIO);
1197 SvMAGIC(sv) = magic;
1198 SvSTASH(sv) = stash;
1199 IoPAGE_LEN(sv) = 60;
1202 SvFLAGS(sv) &= ~SVTYPEMASK;
1208 Perl_sv_backoff(pTHX_ register SV *sv)
1212 char *s = SvPVX(sv);
1213 SvLEN(sv) += SvIVX(sv);
1214 SvPVX(sv) -= SvIVX(sv);
1216 Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1218 SvFLAGS(sv) &= ~SVf_OOK;
1225 Expands the character buffer in the SV. This will use C<sv_unref> and will
1226 upgrade the SV to C<SVt_PV>. Returns a pointer to the character buffer.
1233 Perl_sv_grow(pTHX_ register SV *sv, register STRLEN newlen)
1237 #ifdef HAS_64K_LIMIT
1238 if (newlen >= 0x10000) {
1239 PerlIO_printf(Perl_debug_log,
1240 "Allocation too large: %"UVxf"\n", (UV)newlen);
1243 #endif /* HAS_64K_LIMIT */
1246 if (SvTYPE(sv) < SVt_PV) {
1247 sv_upgrade(sv, SVt_PV);
1250 else if (SvOOK(sv)) { /* pv is offset? */
1253 if (newlen > SvLEN(sv))
1254 newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1255 #ifdef HAS_64K_LIMIT
1256 if (newlen >= 0x10000)
1262 if (newlen > SvLEN(sv)) { /* need more room? */
1263 if (SvLEN(sv) && s) {
1264 #if defined(MYMALLOC) && !defined(PURIFY) && !defined(LEAKTEST)
1265 STRLEN l = malloced_size((void*)SvPVX(sv));
1271 Renew(s,newlen,char);
1274 New(703,s,newlen,char);
1276 SvLEN_set(sv, newlen);
1282 =for apidoc sv_setiv
1284 Copies an integer into the given SV. Does not handle 'set' magic. See
1291 Perl_sv_setiv(pTHX_ register SV *sv, IV i)
1293 SV_CHECK_THINKFIRST(sv);
1294 switch (SvTYPE(sv)) {
1296 sv_upgrade(sv, SVt_IV);
1299 sv_upgrade(sv, SVt_PVNV);
1303 sv_upgrade(sv, SVt_PVIV);
1314 Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1315 PL_op_desc[PL_op->op_type]);
1318 (void)SvIOK_only(sv); /* validate number */
1324 =for apidoc sv_setiv_mg
1326 Like C<sv_setiv>, but also handles 'set' magic.
1332 Perl_sv_setiv_mg(pTHX_ register SV *sv, IV i)
1339 =for apidoc sv_setuv
1341 Copies an unsigned integer into the given SV. Does not handle 'set' magic.
1348 Perl_sv_setuv(pTHX_ register SV *sv, UV u)
1356 =for apidoc sv_setuv_mg
1358 Like C<sv_setuv>, but also handles 'set' magic.
1364 Perl_sv_setuv_mg(pTHX_ register SV *sv, UV u)
1371 =for apidoc sv_setnv
1373 Copies a double into the given SV. Does not handle 'set' magic. See
1380 Perl_sv_setnv(pTHX_ register SV *sv, NV num)
1382 SV_CHECK_THINKFIRST(sv);
1383 switch (SvTYPE(sv)) {
1386 sv_upgrade(sv, SVt_NV);
1391 sv_upgrade(sv, SVt_PVNV);
1402 Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1403 PL_op_name[PL_op->op_type]);
1407 (void)SvNOK_only(sv); /* validate number */
1412 =for apidoc sv_setnv_mg
1414 Like C<sv_setnv>, but also handles 'set' magic.
1420 Perl_sv_setnv_mg(pTHX_ register SV *sv, NV num)
1427 S_not_a_number(pTHX_ SV *sv)
1433 char *limit = tmpbuf + sizeof(tmpbuf) - 8;
1434 /* each *s can expand to 4 chars + "...\0",
1435 i.e. need room for 8 chars */
1437 for (s = SvPVX(sv); *s && d < limit; s++) {
1439 if (ch & 128 && !isPRINT_LC(ch)) {
1448 else if (ch == '\r') {
1452 else if (ch == '\f') {
1456 else if (ch == '\\') {
1460 else if (isPRINT_LC(ch))
1475 Perl_warner(aTHX_ WARN_NUMERIC,
1476 "Argument \"%s\" isn't numeric in %s", tmpbuf,
1477 PL_op_desc[PL_op->op_type]);
1479 Perl_warner(aTHX_ WARN_NUMERIC,
1480 "Argument \"%s\" isn't numeric", tmpbuf);
1483 /* the number can be converted to integer with atol() or atoll() */
1484 #define IS_NUMBER_TO_INT_BY_ATOL 0x01
1485 #define IS_NUMBER_TO_INT_BY_ATOF 0x02 /* atol() may be != atof() */
1486 #define IS_NUMBER_NOT_IV 0x04 /* (IV)atof() may be != atof() */
1487 #define IS_NUMBER_NEG 0x08 /* not good to cache UV */
1489 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1490 until proven guilty, assume that things are not that bad... */
1493 Perl_sv_2iv(pTHX_ register SV *sv)
1497 if (SvGMAGICAL(sv)) {
1502 return I_V(SvNVX(sv));
1504 if (SvPOKp(sv) && SvLEN(sv))
1507 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
1509 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
1515 if (SvTHINKFIRST(sv)) {
1518 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv, numer)))
1519 return SvIV(tmpstr);
1520 return PTR2IV(SvRV(sv));
1522 if (SvREADONLY(sv) && !SvOK(sv)) {
1524 if (ckWARN(WARN_UNINITIALIZED))
1531 return (IV)(SvUVX(sv));
1538 /* We can cache the IV/UV value even if it not good enough
1539 * to reconstruct NV, since the conversion to PV will prefer
1543 if (SvTYPE(sv) == SVt_NV)
1544 sv_upgrade(sv, SVt_PVNV);
1547 if (SvNVX(sv) < (NV)IV_MAX + 0.5)
1548 SvIVX(sv) = I_V(SvNVX(sv));
1550 SvUVX(sv) = U_V(SvNVX(sv));
1553 DEBUG_c(PerlIO_printf(Perl_debug_log,
1554 "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
1558 return (IV)SvUVX(sv);
1561 else if (SvPOKp(sv) && SvLEN(sv)) {
1562 I32 numtype = looks_like_number(sv);
1564 /* We want to avoid a possible problem when we cache an IV which
1565 may be later translated to an NV, and the resulting NV is not
1566 the translation of the initial data.
1568 This means that if we cache such an IV, we need to cache the
1569 NV as well. Moreover, we trade speed for space, and do not
1570 cache the NV if not needed.
1572 if (numtype & IS_NUMBER_NOT_IV) {
1573 /* May be not an integer. Need to cache NV if we cache IV
1574 * - otherwise future conversion to NV will be wrong. */
1577 d = Atof(SvPVX(sv));
1579 if (SvTYPE(sv) < SVt_PVNV)
1580 sv_upgrade(sv, SVt_PVNV);
1584 #if defined(USE_LONG_DOUBLE)
1585 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
1586 PTR2UV(sv), SvNVX(sv)));
1588 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%g)\n",
1589 PTR2UV(sv), SvNVX(sv)));
1591 if (SvNVX(sv) < (NV)IV_MAX + 0.5)
1592 SvIVX(sv) = I_V(SvNVX(sv));
1594 SvUVX(sv) = U_V(SvNVX(sv));
1600 /* The NV may be reconstructed from IV - safe to cache IV,
1601 which may be calculated by atol(). */
1602 if (SvTYPE(sv) == SVt_PV)
1603 sv_upgrade(sv, SVt_PVIV);
1605 SvIVX(sv) = Atol(SvPVX(sv));
1607 else { /* Not a number. Cache 0. */
1610 if (SvTYPE(sv) < SVt_PVIV)
1611 sv_upgrade(sv, SVt_PVIV);
1614 if (ckWARN(WARN_NUMERIC))
1620 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
1622 if (SvTYPE(sv) < SVt_IV)
1623 /* Typically the caller expects that sv_any is not NULL now. */
1624 sv_upgrade(sv, SVt_IV);
1627 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
1628 PTR2UV(sv),SvIVX(sv)));
1629 return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
1633 Perl_sv_2uv(pTHX_ register SV *sv)
1637 if (SvGMAGICAL(sv)) {
1642 return U_V(SvNVX(sv));
1643 if (SvPOKp(sv) && SvLEN(sv))
1646 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
1648 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
1654 if (SvTHINKFIRST(sv)) {
1657 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv, numer)))
1658 return SvUV(tmpstr);
1659 return PTR2UV(SvRV(sv));
1661 if (SvREADONLY(sv) && !SvOK(sv)) {
1663 if (ckWARN(WARN_UNINITIALIZED))
1673 return (UV)SvIVX(sv);
1677 /* We can cache the IV/UV value even if it not good enough
1678 * to reconstruct NV, since the conversion to PV will prefer
1681 if (SvTYPE(sv) == SVt_NV)
1682 sv_upgrade(sv, SVt_PVNV);
1684 if (SvNVX(sv) >= -0.5) {
1686 SvUVX(sv) = U_V(SvNVX(sv));
1689 SvIVX(sv) = I_V(SvNVX(sv));
1691 DEBUG_c(PerlIO_printf(Perl_debug_log,
1692 "0x%"UVxf" 2uv(%"IVdf" => %"IVdf") (as signed)\n",
1695 (IV)(UV)SvIVX(sv)));
1696 return (UV)SvIVX(sv);
1699 else if (SvPOKp(sv) && SvLEN(sv)) {
1700 I32 numtype = looks_like_number(sv);
1702 /* We want to avoid a possible problem when we cache a UV which
1703 may be later translated to an NV, and the resulting NV is not
1704 the translation of the initial data.
1706 This means that if we cache such a UV, we need to cache the
1707 NV as well. Moreover, we trade speed for space, and do not
1708 cache the NV if not needed.
1710 if (numtype & IS_NUMBER_NOT_IV) {
1711 /* May be not an integer. Need to cache NV if we cache IV
1712 * - otherwise future conversion to NV will be wrong. */
1715 d = Atof(SvPVX(sv));
1717 if (SvTYPE(sv) < SVt_PVNV)
1718 sv_upgrade(sv, SVt_PVNV);
1722 #if defined(USE_LONG_DOUBLE)
1723 DEBUG_c(PerlIO_printf(Perl_debug_log,
1724 "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
1725 PTR2UV(sv), SvNVX(sv)));
1727 DEBUG_c(PerlIO_printf(Perl_debug_log,
1728 "0x%"UVxf" 2nv(%g)\n",
1729 PTR2UV(sv), SvNVX(sv)));
1731 if (SvNVX(sv) < -0.5) {
1732 SvIVX(sv) = I_V(SvNVX(sv));
1735 SvUVX(sv) = U_V(SvNVX(sv));
1739 else if (numtype & IS_NUMBER_NEG) {
1740 /* The NV may be reconstructed from IV - safe to cache IV,
1741 which may be calculated by atol(). */
1742 if (SvTYPE(sv) == SVt_PV)
1743 sv_upgrade(sv, SVt_PVIV);
1745 SvIVX(sv) = (IV)Atol(SvPVX(sv));
1747 else if (numtype) { /* Non-negative */
1748 /* The NV may be reconstructed from UV - safe to cache UV,
1749 which may be calculated by strtoul()/atol. */
1750 if (SvTYPE(sv) == SVt_PV)
1751 sv_upgrade(sv, SVt_PVIV);
1753 (void)SvIsUV_on(sv);
1755 SvUVX(sv) = Strtoul(SvPVX(sv), Null(char**), 10);
1756 #else /* no atou(), but we know the number fits into IV... */
1757 /* The only problem may be if it is negative... */
1758 SvUVX(sv) = (UV)Atol(SvPVX(sv));
1761 else { /* Not a number. Cache 0. */
1764 if (SvTYPE(sv) < SVt_PVIV)
1765 sv_upgrade(sv, SVt_PVIV);
1766 SvUVX(sv) = 0; /* We assume that 0s have the
1767 same bitmap in IV and UV. */
1769 (void)SvIsUV_on(sv);
1770 if (ckWARN(WARN_NUMERIC))
1775 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
1777 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
1780 if (SvTYPE(sv) < SVt_IV)
1781 /* Typically the caller expects that sv_any is not NULL now. */
1782 sv_upgrade(sv, SVt_IV);
1786 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
1787 PTR2UV(sv),SvUVX(sv)));
1788 return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
1792 Perl_sv_2nv(pTHX_ register SV *sv)
1796 if (SvGMAGICAL(sv)) {
1800 if (SvPOKp(sv) && SvLEN(sv)) {
1802 if (ckWARN(WARN_NUMERIC) && !SvIOKp(sv) && !looks_like_number(sv))
1804 return Atof(SvPVX(sv));
1808 return (NV)SvUVX(sv);
1810 return (NV)SvIVX(sv);
1813 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
1815 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
1821 if (SvTHINKFIRST(sv)) {
1824 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)))
1825 return SvNV(tmpstr);
1826 return PTR2NV(SvRV(sv));
1828 if (SvREADONLY(sv) && !SvOK(sv)) {
1830 if (ckWARN(WARN_UNINITIALIZED))
1835 if (SvTYPE(sv) < SVt_NV) {
1836 if (SvTYPE(sv) == SVt_IV)
1837 sv_upgrade(sv, SVt_PVNV);
1839 sv_upgrade(sv, SVt_NV);
1840 #if defined(USE_LONG_DOUBLE)
1842 RESTORE_NUMERIC_STANDARD();
1843 PerlIO_printf(Perl_debug_log,
1844 "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
1845 PTR2UV(sv), SvNVX(sv));
1846 RESTORE_NUMERIC_LOCAL();
1850 RESTORE_NUMERIC_STANDARD();
1851 PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%g)\n",
1852 PTR2UV(sv), SvNVX(sv));
1853 RESTORE_NUMERIC_LOCAL();
1857 else if (SvTYPE(sv) < SVt_PVNV)
1858 sv_upgrade(sv, SVt_PVNV);
1860 (!SvPOKp(sv) || !strchr(SvPVX(sv),'.') || !looks_like_number(sv)))
1862 SvNVX(sv) = SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv);
1864 else if (SvPOKp(sv) && SvLEN(sv)) {
1866 if (ckWARN(WARN_NUMERIC) && !SvIOKp(sv) && !looks_like_number(sv))
1868 SvNVX(sv) = Atof(SvPVX(sv));
1872 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
1874 if (SvTYPE(sv) < SVt_NV)
1875 /* Typically the caller expects that sv_any is not NULL now. */
1876 sv_upgrade(sv, SVt_NV);
1880 #if defined(USE_LONG_DOUBLE)
1882 RESTORE_NUMERIC_STANDARD();
1883 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
1884 PTR2UV(sv), SvNVX(sv));
1885 RESTORE_NUMERIC_LOCAL();
1889 RESTORE_NUMERIC_STANDARD();
1890 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%g)\n",
1891 PTR2UV(sv), SvNVX(sv));
1892 RESTORE_NUMERIC_LOCAL();
1899 S_asIV(pTHX_ SV *sv)
1901 I32 numtype = looks_like_number(sv);
1904 if (numtype & IS_NUMBER_TO_INT_BY_ATOL)
1905 return Atol(SvPVX(sv));
1908 if (ckWARN(WARN_NUMERIC))
1911 d = Atof(SvPVX(sv));
1916 S_asUV(pTHX_ SV *sv)
1918 I32 numtype = looks_like_number(sv);
1921 if (numtype & IS_NUMBER_TO_INT_BY_ATOL)
1922 return Strtoul(SvPVX(sv), Null(char**), 10);
1926 if (ckWARN(WARN_NUMERIC))
1929 return U_V(Atof(SvPVX(sv)));
1933 * Returns a combination of (advisory only - can get false negatives)
1934 * IS_NUMBER_TO_INT_BY_ATOL, IS_NUMBER_TO_INT_BY_ATOF, IS_NUMBER_NOT_IV,
1936 * 0 if does not look like number.
1938 * In fact possible values are 0 and
1939 * IS_NUMBER_TO_INT_BY_ATOL 123
1940 * IS_NUMBER_TO_INT_BY_ATOL | IS_NUMBER_NOT_IV 123.1
1941 * IS_NUMBER_TO_INT_BY_ATOF | IS_NUMBER_NOT_IV 123e0
1942 * with a possible addition of IS_NUMBER_NEG.
1946 =for apidoc looks_like_number
1948 Test if an the content of an SV looks like a number (or is a
1955 Perl_looks_like_number(pTHX_ SV *sv)
1958 register char *send;
1959 register char *sbegin;
1960 register char *nbegin;
1968 else if (SvPOKp(sv))
1969 sbegin = SvPV(sv, len);
1972 send = sbegin + len;
1979 numtype = IS_NUMBER_NEG;
1986 * we return IS_NUMBER_TO_INT_BY_ATOL if the number can be converted
1987 * to _integer_ with atol() and IS_NUMBER_TO_INT_BY_ATOF if you need
1991 /* next must be digit or the radix separator */
1995 } while (isDIGIT(*s));
1997 if (s - nbegin >= TYPE_DIGITS(IV)) /* Cannot cache ato[ul]() */
1998 numtype |= IS_NUMBER_TO_INT_BY_ATOF | IS_NUMBER_NOT_IV;
2000 numtype |= IS_NUMBER_TO_INT_BY_ATOL;
2003 #ifdef USE_LOCALE_NUMERIC
2004 || IS_NUMERIC_RADIX(*s)
2008 numtype |= IS_NUMBER_NOT_IV;
2009 while (isDIGIT(*s)) /* optional digits after the radix */
2014 #ifdef USE_LOCALE_NUMERIC
2015 || IS_NUMERIC_RADIX(*s)
2019 numtype |= IS_NUMBER_TO_INT_BY_ATOL | IS_NUMBER_NOT_IV;
2020 /* no digits before the radix means we need digits after it */
2024 } while (isDIGIT(*s));
2032 /* we can have an optional exponent part */
2033 if (*s == 'e' || *s == 'E') {
2034 numtype &= ~IS_NUMBER_NEG;
2035 numtype |= IS_NUMBER_TO_INT_BY_ATOF | IS_NUMBER_NOT_IV;
2037 if (*s == '+' || *s == '-')
2042 } while (isDIGIT(*s));
2051 if (len == 10 && memEQ(sbegin, "0 but true", 10))
2052 return IS_NUMBER_TO_INT_BY_ATOL;
2057 Perl_sv_2pv_nolen(pTHX_ register SV *sv)
2060 return sv_2pv(sv, &n_a);
2063 /* We assume that buf is at least TYPE_CHARS(UV) long. */
2065 uiv_2buf(char *buf, IV iv, UV uv, int is_uv, char **peob)
2068 char *ptr = buf + TYPE_CHARS(UV);
2083 *--ptr = '0' + (uv % 10);
2092 Perl_sv_2pv(pTHX_ register SV *sv, STRLEN *lp)
2097 char tbuf[64]; /* Must fit sprintf/Gconvert of longest IV/NV */
2098 char *tmpbuf = tbuf;
2104 if (SvGMAGICAL(sv)) {
2112 (void)sprintf(tmpbuf,"%"UVuf, (UV)SvUVX(sv));
2114 (void)sprintf(tmpbuf,"%"IVdf, (IV)SvIVX(sv));
2119 Gconvert(SvNVX(sv), NV_DIG, 0, tmpbuf);
2124 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2126 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2133 if (SvTHINKFIRST(sv)) {
2136 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,string)))
2137 return SvPV(tmpstr,*lp);
2144 switch (SvTYPE(sv)) {
2146 if ( ((SvFLAGS(sv) &
2147 (SVs_OBJECT|SVf_OK|SVs_GMG|SVs_SMG|SVs_RMG))
2148 == (SVs_OBJECT|SVs_RMG))
2149 && strEQ(s=HvNAME(SvSTASH(sv)), "Regexp")
2150 && (mg = mg_find(sv, 'r'))) {
2152 regexp *re = (regexp *)mg->mg_obj;
2155 char *fptr = "msix";
2160 U16 reganch = (re->reganch & PMf_COMPILETIME) >> 12;
2162 while(ch = *fptr++) {
2164 reflags[left++] = ch;
2167 reflags[right--] = ch;
2172 reflags[left] = '-';
2176 mg->mg_len = re->prelen + 4 + left;
2177 New(616, mg->mg_ptr, mg->mg_len + 1 + left, char);
2178 Copy("(?", mg->mg_ptr, 2, char);
2179 Copy(reflags, mg->mg_ptr+2, left, char);
2180 Copy(":", mg->mg_ptr+left+2, 1, char);
2181 Copy(re->precomp, mg->mg_ptr+3+left, re->prelen, char);
2182 mg->mg_ptr[mg->mg_len - 1] = ')';
2183 mg->mg_ptr[mg->mg_len] = 0;
2185 PL_reginterp_cnt += re->program[0].next_off;
2197 case SVt_PVBM: s = "SCALAR"; break;
2198 case SVt_PVLV: s = "LVALUE"; break;
2199 case SVt_PVAV: s = "ARRAY"; break;
2200 case SVt_PVHV: s = "HASH"; break;
2201 case SVt_PVCV: s = "CODE"; break;
2202 case SVt_PVGV: s = "GLOB"; break;
2203 case SVt_PVFM: s = "FORMAT"; break;
2204 case SVt_PVIO: s = "IO"; break;
2205 default: s = "UNKNOWN"; break;
2209 Perl_sv_setpvf(aTHX_ tsv, "%s=%s", HvNAME(SvSTASH(sv)), s);
2212 Perl_sv_catpvf(aTHX_ tsv, "(0x%"UVxf")", PTR2UV(sv));
2218 if (SvREADONLY(sv) && !SvOK(sv)) {
2220 if (ckWARN(WARN_UNINITIALIZED))
2226 if (SvNOKp(sv)) { /* See note in sv_2uv() */
2227 /* XXXX 64-bit? IV may have better precision... */
2228 /* I tried changing this for to be 64-bit-aware and
2229 * the t/op/numconvert.t became very, very, angry.
2231 if (SvTYPE(sv) < SVt_PVNV)
2232 sv_upgrade(sv, SVt_PVNV);
2235 olderrno = errno; /* some Xenix systems wipe out errno here */
2237 if (SvNVX(sv) == 0.0)
2238 (void)strcpy(s,"0");
2242 Gconvert(SvNVX(sv), NV_DIG, 0, s);
2245 #ifdef FIXNEGATIVEZERO
2246 if (*s == '-' && s[1] == '0' && !s[2])
2255 else if (SvIOKp(sv)) {
2256 U32 isIOK = SvIOK(sv);
2257 U32 isUIOK = SvIsUV(sv);
2258 char buf[TYPE_CHARS(UV)];
2261 if (SvTYPE(sv) < SVt_PVIV)
2262 sv_upgrade(sv, SVt_PVIV);
2264 ptr = uiv_2buf(buf, 0, SvUVX(sv), 1, &ebuf);
2266 ptr = uiv_2buf(buf, SvIVX(sv), 0, 0, &ebuf);
2267 SvGROW(sv, ebuf - ptr + 1); /* inlined from sv_setpvn */
2268 Move(ptr,SvPVX(sv),ebuf - ptr,char);
2269 SvCUR_set(sv, ebuf - ptr);
2282 if (ckWARN(WARN_UNINITIALIZED)
2283 && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
2288 if (SvTYPE(sv) < SVt_PV)
2289 /* Typically the caller expects that sv_any is not NULL now. */
2290 sv_upgrade(sv, SVt_PV);
2293 *lp = s - SvPVX(sv);
2296 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
2297 PTR2UV(sv),SvPVX(sv)));
2301 if (SvROK(sv)) { /* XXX Skip this when sv_pvn_force calls */
2302 /* Sneaky stuff here */
2306 tsv = newSVpv(tmpbuf, 0);
2322 len = strlen(tmpbuf);
2324 #ifdef FIXNEGATIVEZERO
2325 if (len == 2 && t[0] == '-' && t[1] == '0') {
2330 (void)SvUPGRADE(sv, SVt_PV);
2332 s = SvGROW(sv, len + 1);
2341 Perl_sv_2pvbyte_nolen(pTHX_ register SV *sv)
2343 return sv_2pv_nolen(sv);
2347 Perl_sv_2pvbyte(pTHX_ register SV *sv, STRLEN *lp)
2349 return sv_2pv(sv,lp);
2353 Perl_sv_2pvutf8_nolen(pTHX_ register SV *sv)
2355 return sv_2pv_nolen(sv);
2359 Perl_sv_2pvutf8(pTHX_ register SV *sv, STRLEN *lp)
2361 return sv_2pv(sv,lp);
2364 /* This function is only called on magical items */
2366 Perl_sv_2bool(pTHX_ register SV *sv)
2376 if (SvAMAGIC(sv) && (tmpsv = AMG_CALLun(sv,bool_)))
2377 return SvTRUE(tmpsv);
2378 return SvRV(sv) != 0;
2381 register XPV* Xpvtmp;
2382 if ((Xpvtmp = (XPV*)SvANY(sv)) &&
2383 (*Xpvtmp->xpv_pv > '0' ||
2384 Xpvtmp->xpv_cur > 1 ||
2385 (Xpvtmp->xpv_cur && *Xpvtmp->xpv_pv != '0')))
2392 return SvIVX(sv) != 0;
2395 return SvNVX(sv) != 0.0;
2402 /* Note: sv_setsv() should not be called with a source string that needs
2403 * to be reused, since it may destroy the source string if it is marked
2408 =for apidoc sv_setsv
2410 Copies the contents of the source SV C<ssv> into the destination SV C<dsv>.
2411 The source SV may be destroyed if it is mortal. Does not handle 'set'
2412 magic. See the macro forms C<SvSetSV>, C<SvSetSV_nosteal> and
2419 Perl_sv_setsv(pTHX_ SV *dstr, register SV *sstr)
2422 register U32 sflags;
2428 SV_CHECK_THINKFIRST(dstr);
2430 sstr = &PL_sv_undef;
2431 stype = SvTYPE(sstr);
2432 dtype = SvTYPE(dstr);
2436 /* There's a lot of redundancy below but we're going for speed here */
2441 if (dtype != SVt_PVGV) {
2442 (void)SvOK_off(dstr);
2450 sv_upgrade(dstr, SVt_IV);
2453 sv_upgrade(dstr, SVt_PVNV);
2457 sv_upgrade(dstr, SVt_PVIV);
2460 (void)SvIOK_only(dstr);
2461 SvIVX(dstr) = SvIVX(sstr);
2474 sv_upgrade(dstr, SVt_NV);
2479 sv_upgrade(dstr, SVt_PVNV);
2482 SvNVX(dstr) = SvNVX(sstr);
2483 (void)SvNOK_only(dstr);
2491 sv_upgrade(dstr, SVt_RV);
2492 else if (dtype == SVt_PVGV &&
2493 SvTYPE(SvRV(sstr)) == SVt_PVGV) {
2496 if (GvIMPORTED(dstr) != GVf_IMPORTED
2497 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
2499 GvIMPORTED_on(dstr);
2510 sv_upgrade(dstr, SVt_PV);
2513 if (dtype < SVt_PVIV)
2514 sv_upgrade(dstr, SVt_PVIV);
2517 if (dtype < SVt_PVNV)
2518 sv_upgrade(dstr, SVt_PVNV);
2525 Perl_croak(aTHX_ "Bizarre copy of %s in %s", sv_reftype(sstr, 0),
2526 PL_op_name[PL_op->op_type]);
2528 Perl_croak(aTHX_ "Bizarre copy of %s", sv_reftype(sstr, 0));
2532 if (dtype <= SVt_PVGV) {
2534 if (dtype != SVt_PVGV) {
2535 char *name = GvNAME(sstr);
2536 STRLEN len = GvNAMELEN(sstr);
2537 sv_upgrade(dstr, SVt_PVGV);
2538 sv_magic(dstr, dstr, '*', name, len);
2539 GvSTASH(dstr) = (HV*)SvREFCNT_inc(GvSTASH(sstr));
2540 GvNAME(dstr) = savepvn(name, len);
2541 GvNAMELEN(dstr) = len;
2542 SvFAKE_on(dstr); /* can coerce to non-glob */
2544 /* ahem, death to those who redefine active sort subs */
2545 else if (PL_curstackinfo->si_type == PERLSI_SORT
2546 && GvCV(dstr) && PL_sortcop == CvSTART(GvCV(dstr)))
2547 Perl_croak(aTHX_ "Can't redefine active sort subroutine %s",
2549 (void)SvOK_off(dstr);
2550 GvINTRO_off(dstr); /* one-shot flag */
2552 GvGP(dstr) = gp_ref(GvGP(sstr));
2554 if (GvIMPORTED(dstr) != GVf_IMPORTED
2555 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
2557 GvIMPORTED_on(dstr);
2565 if (SvGMAGICAL(sstr)) {
2567 if (SvTYPE(sstr) != stype) {
2568 stype = SvTYPE(sstr);
2569 if (stype == SVt_PVGV && dtype <= SVt_PVGV)
2573 if (stype == SVt_PVLV)
2574 (void)SvUPGRADE(dstr, SVt_PVNV);
2576 (void)SvUPGRADE(dstr, stype);
2579 sflags = SvFLAGS(sstr);
2581 if (sflags & SVf_ROK) {
2582 if (dtype >= SVt_PV) {
2583 if (dtype == SVt_PVGV) {
2584 SV *sref = SvREFCNT_inc(SvRV(sstr));
2586 int intro = GvINTRO(dstr);
2591 GvINTRO_off(dstr); /* one-shot flag */
2592 Newz(602,gp, 1, GP);
2593 GvGP(dstr) = gp_ref(gp);
2594 GvSV(dstr) = NEWSV(72,0);
2595 GvLINE(dstr) = CopLINE(PL_curcop);
2596 GvEGV(dstr) = (GV*)dstr;
2599 switch (SvTYPE(sref)) {
2602 SAVESPTR(GvAV(dstr));
2604 dref = (SV*)GvAV(dstr);
2605 GvAV(dstr) = (AV*)sref;
2606 if (GvIMPORTED_AV_off(dstr)
2607 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
2609 GvIMPORTED_AV_on(dstr);
2614 SAVESPTR(GvHV(dstr));
2616 dref = (SV*)GvHV(dstr);
2617 GvHV(dstr) = (HV*)sref;
2618 if (GvIMPORTED_HV_off(dstr)
2619 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
2621 GvIMPORTED_HV_on(dstr);
2626 if (GvCVGEN(dstr) && GvCV(dstr) != (CV*)sref) {
2627 SvREFCNT_dec(GvCV(dstr));
2628 GvCV(dstr) = Nullcv;
2629 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
2630 PL_sub_generation++;
2632 SAVESPTR(GvCV(dstr));
2635 dref = (SV*)GvCV(dstr);
2636 if (GvCV(dstr) != (CV*)sref) {
2637 CV* cv = GvCV(dstr);
2639 if (!GvCVGEN((GV*)dstr) &&
2640 (CvROOT(cv) || CvXSUB(cv)))
2642 SV *const_sv = cv_const_sv(cv);
2643 bool const_changed = TRUE;
2645 const_changed = sv_cmp(const_sv,
2646 op_const_sv(CvSTART((CV*)sref),
2648 /* ahem, death to those who redefine
2649 * active sort subs */
2650 if (PL_curstackinfo->si_type == PERLSI_SORT &&
2651 PL_sortcop == CvSTART(cv))
2653 "Can't redefine active sort subroutine %s",
2654 GvENAME((GV*)dstr));
2655 if (ckWARN(WARN_REDEFINE) || (const_changed && const_sv)) {
2656 if (!(CvGV(cv) && GvSTASH(CvGV(cv))
2657 && HvNAME(GvSTASH(CvGV(cv)))
2658 && strEQ(HvNAME(GvSTASH(CvGV(cv))),
2660 Perl_warner(aTHX_ WARN_REDEFINE, const_sv ?
2661 "Constant subroutine %s redefined"
2662 : "Subroutine %s redefined",
2663 GvENAME((GV*)dstr));
2666 cv_ckproto(cv, (GV*)dstr,
2667 SvPOK(sref) ? SvPVX(sref) : Nullch);
2669 GvCV(dstr) = (CV*)sref;
2670 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
2671 GvASSUMECV_on(dstr);
2672 PL_sub_generation++;
2674 if (GvIMPORTED_CV_off(dstr)
2675 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
2677 GvIMPORTED_CV_on(dstr);
2682 SAVESPTR(GvIOp(dstr));
2684 dref = (SV*)GvIOp(dstr);
2685 GvIOp(dstr) = (IO*)sref;
2689 SAVESPTR(GvSV(dstr));
2691 dref = (SV*)GvSV(dstr);
2693 if (GvIMPORTED_SV_off(dstr)
2694 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
2696 GvIMPORTED_SV_on(dstr);
2708 (void)SvOOK_off(dstr); /* backoff */
2710 Safefree(SvPVX(dstr));
2711 SvLEN(dstr)=SvCUR(dstr)=0;
2714 (void)SvOK_off(dstr);
2715 SvRV(dstr) = SvREFCNT_inc(SvRV(sstr));
2717 if (sflags & SVp_NOK) {
2719 SvNVX(dstr) = SvNVX(sstr);
2721 if (sflags & SVp_IOK) {
2722 (void)SvIOK_on(dstr);
2723 SvIVX(dstr) = SvIVX(sstr);
2727 if (SvAMAGIC(sstr)) {
2731 else if (sflags & SVp_POK) {
2734 * Check to see if we can just swipe the string. If so, it's a
2735 * possible small lose on short strings, but a big win on long ones.
2736 * It might even be a win on short strings if SvPVX(dstr)
2737 * has to be allocated and SvPVX(sstr) has to be freed.
2740 if (SvTEMP(sstr) && /* slated for free anyway? */
2741 SvREFCNT(sstr) == 1 && /* and no other references to it? */
2742 !(sflags & SVf_OOK)) /* and not involved in OOK hack? */
2744 if (SvPVX(dstr)) { /* we know that dtype >= SVt_PV */
2746 SvFLAGS(dstr) &= ~SVf_OOK;
2747 Safefree(SvPVX(dstr) - SvIVX(dstr));
2749 else if (SvLEN(dstr))
2750 Safefree(SvPVX(dstr));
2752 (void)SvPOK_only(dstr);
2753 SvPV_set(dstr, SvPVX(sstr));
2754 SvLEN_set(dstr, SvLEN(sstr));
2755 SvCUR_set(dstr, SvCUR(sstr));
2757 (void)SvOK_off(sstr);
2758 SvPV_set(sstr, Nullch);
2763 else { /* have to copy actual string */
2764 STRLEN len = SvCUR(sstr);
2766 SvGROW(dstr, len + 1); /* inlined from sv_setpvn */
2767 Move(SvPVX(sstr),SvPVX(dstr),len,char);
2768 SvCUR_set(dstr, len);
2769 *SvEND(dstr) = '\0';
2770 (void)SvPOK_only(dstr);
2775 if (sflags & SVp_NOK) {
2777 SvNVX(dstr) = SvNVX(sstr);
2779 if (sflags & SVp_IOK) {
2780 (void)SvIOK_on(dstr);
2781 SvIVX(dstr) = SvIVX(sstr);
2786 else if (sflags & SVp_NOK) {
2787 SvNVX(dstr) = SvNVX(sstr);
2788 (void)SvNOK_only(dstr);
2790 (void)SvIOK_on(dstr);
2791 SvIVX(dstr) = SvIVX(sstr);
2792 /* XXXX Do we want to set IsUV for IV(ROK)? Be extra safe... */
2797 else if (sflags & SVp_IOK) {
2798 (void)SvIOK_only(dstr);
2799 SvIVX(dstr) = SvIVX(sstr);
2804 if (dtype == SVt_PVGV) {
2805 if (ckWARN(WARN_UNSAFE))
2806 Perl_warner(aTHX_ WARN_UNSAFE, "Undefined value assigned to typeglob");
2809 (void)SvOK_off(dstr);
2815 =for apidoc sv_setsv_mg
2817 Like C<sv_setsv>, but also handles 'set' magic.
2823 Perl_sv_setsv_mg(pTHX_ SV *dstr, register SV *sstr)
2825 sv_setsv(dstr,sstr);
2830 =for apidoc sv_setpvn
2832 Copies a string into an SV. The C<len> parameter indicates the number of
2833 bytes to be copied. Does not handle 'set' magic. See C<sv_setpvn_mg>.
2839 Perl_sv_setpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
2841 register char *dptr;
2842 assert(len >= 0); /* STRLEN is probably unsigned, so this may
2843 elicit a warning, but it won't hurt. */
2844 SV_CHECK_THINKFIRST(sv);
2849 (void)SvUPGRADE(sv, SVt_PV);
2851 SvGROW(sv, len + 1);
2853 Move(ptr,dptr,len,char);
2856 (void)SvPOK_only(sv); /* validate pointer */
2861 =for apidoc sv_setpvn_mg
2863 Like C<sv_setpvn>, but also handles 'set' magic.
2869 Perl_sv_setpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
2871 sv_setpvn(sv,ptr,len);
2876 =for apidoc sv_setpv
2878 Copies a string into an SV. The string must be null-terminated. Does not
2879 handle 'set' magic. See C<sv_setpv_mg>.
2885 Perl_sv_setpv(pTHX_ register SV *sv, register const char *ptr)
2887 register STRLEN len;
2889 SV_CHECK_THINKFIRST(sv);
2895 (void)SvUPGRADE(sv, SVt_PV);
2897 SvGROW(sv, len + 1);
2898 Move(ptr,SvPVX(sv),len+1,char);
2900 (void)SvPOK_only(sv); /* validate pointer */
2905 =for apidoc sv_setpv_mg
2907 Like C<sv_setpv>, but also handles 'set' magic.
2913 Perl_sv_setpv_mg(pTHX_ register SV *sv, register const char *ptr)
2920 =for apidoc sv_usepvn
2922 Tells an SV to use C<ptr> to find its string value. Normally the string is
2923 stored inside the SV but sv_usepvn allows the SV to use an outside string.
2924 The C<ptr> should point to memory that was allocated by C<malloc>. The
2925 string length, C<len>, must be supplied. This function will realloc the
2926 memory pointed to by C<ptr>, so that pointer should not be freed or used by
2927 the programmer after giving it to sv_usepvn. Does not handle 'set' magic.
2928 See C<sv_usepvn_mg>.
2934 Perl_sv_usepvn(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
2936 SV_CHECK_THINKFIRST(sv);
2937 (void)SvUPGRADE(sv, SVt_PV);
2942 (void)SvOOK_off(sv);
2943 if (SvPVX(sv) && SvLEN(sv))
2944 Safefree(SvPVX(sv));
2945 Renew(ptr, len+1, char);
2948 SvLEN_set(sv, len+1);
2950 (void)SvPOK_only(sv); /* validate pointer */
2955 =for apidoc sv_usepvn_mg
2957 Like C<sv_usepvn>, but also handles 'set' magic.
2963 Perl_sv_usepvn_mg(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
2965 sv_usepvn(sv,ptr,len);
2970 Perl_sv_force_normal(pTHX_ register SV *sv)
2972 if (SvREADONLY(sv)) {
2974 if (PL_curcop != &PL_compiling)
2975 Perl_croak(aTHX_ PL_no_modify);
2979 else if (SvFAKE(sv) && SvTYPE(sv) == SVt_PVGV)
2986 Efficient removal of characters from the beginning of the string buffer.
2987 SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
2988 the string buffer. The C<ptr> becomes the first character of the adjusted
2995 Perl_sv_chop(pTHX_ register SV *sv, register char *ptr) /* like set but assuming ptr is in sv */
2999 register STRLEN delta;
3001 if (!ptr || !SvPOKp(sv))
3003 SV_CHECK_THINKFIRST(sv);
3004 if (SvTYPE(sv) < SVt_PVIV)
3005 sv_upgrade(sv,SVt_PVIV);
3008 if (!SvLEN(sv)) { /* make copy of shared string */
3009 char *pvx = SvPVX(sv);
3010 STRLEN len = SvCUR(sv);
3011 SvGROW(sv, len + 1);
3012 Move(pvx,SvPVX(sv),len,char);
3016 SvFLAGS(sv) |= SVf_OOK;
3018 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVp_IOK|SVp_NOK|SVf_IVisUV);
3019 delta = ptr - SvPVX(sv);
3027 =for apidoc sv_catpvn
3029 Concatenates the string onto the end of the string which is in the SV. The
3030 C<len> indicates number of bytes to copy. Handles 'get' magic, but not
3031 'set' magic. See C<sv_catpvn_mg>.
3037 Perl_sv_catpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3042 junk = SvPV_force(sv, tlen);
3043 SvGROW(sv, tlen + len + 1);
3046 Move(ptr,SvPVX(sv)+tlen,len,char);
3049 (void)SvPOK_only(sv); /* validate pointer */
3054 =for apidoc sv_catpvn_mg
3056 Like C<sv_catpvn>, but also handles 'set' magic.
3062 Perl_sv_catpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3064 sv_catpvn(sv,ptr,len);
3069 =for apidoc sv_catsv
3071 Concatenates the string from SV C<ssv> onto the end of the string in SV
3072 C<dsv>. Handles 'get' magic, but not 'set' magic. See C<sv_catsv_mg>.
3078 Perl_sv_catsv(pTHX_ SV *dstr, register SV *sstr)
3084 if (s = SvPV(sstr, len))
3085 sv_catpvn(dstr,s,len);
3089 =for apidoc sv_catsv_mg
3091 Like C<sv_catsv>, but also handles 'set' magic.
3097 Perl_sv_catsv_mg(pTHX_ SV *dstr, register SV *sstr)
3099 sv_catsv(dstr,sstr);
3104 =for apidoc sv_catpv
3106 Concatenates the string onto the end of the string which is in the SV.
3107 Handles 'get' magic, but not 'set' magic. See C<sv_catpv_mg>.
3113 Perl_sv_catpv(pTHX_ register SV *sv, register const char *ptr)
3115 register STRLEN len;
3121 junk = SvPV_force(sv, tlen);
3123 SvGROW(sv, tlen + len + 1);
3126 Move(ptr,SvPVX(sv)+tlen,len+1,char);
3128 (void)SvPOK_only(sv); /* validate pointer */
3133 =for apidoc sv_catpv_mg
3135 Like C<sv_catpv>, but also handles 'set' magic.
3141 Perl_sv_catpv_mg(pTHX_ register SV *sv, register const char *ptr)
3148 Perl_newSV(pTHX_ STRLEN len)
3154 sv_upgrade(sv, SVt_PV);
3155 SvGROW(sv, len + 1);
3160 /* name is assumed to contain an SV* if (name && namelen == HEf_SVKEY) */
3163 =for apidoc sv_magic
3165 Adds magic to an SV.
3171 Perl_sv_magic(pTHX_ register SV *sv, SV *obj, int how, const char *name, I32 namlen)
3175 if (SvREADONLY(sv)) {
3177 if (PL_curcop != &PL_compiling && !strchr("gBf", how))
3178 Perl_croak(aTHX_ PL_no_modify);
3180 if (SvMAGICAL(sv) || (how == 't' && SvTYPE(sv) >= SVt_PVMG)) {
3181 if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
3188 (void)SvUPGRADE(sv, SVt_PVMG);
3190 Newz(702,mg, 1, MAGIC);
3191 mg->mg_moremagic = SvMAGIC(sv);
3194 if (!obj || obj == sv || how == '#' || how == 'r')
3198 mg->mg_obj = SvREFCNT_inc(obj);
3199 mg->mg_flags |= MGf_REFCOUNTED;
3202 mg->mg_len = namlen;
3205 mg->mg_ptr = savepvn(name, namlen);
3206 else if (namlen == HEf_SVKEY)
3207 mg->mg_ptr = (char*)SvREFCNT_inc((SV*)name);
3211 mg->mg_virtual = &PL_vtbl_sv;
3214 mg->mg_virtual = &PL_vtbl_amagic;
3217 mg->mg_virtual = &PL_vtbl_amagicelem;
3223 mg->mg_virtual = &PL_vtbl_bm;
3226 mg->mg_virtual = &PL_vtbl_regdata;
3229 mg->mg_virtual = &PL_vtbl_regdatum;
3232 mg->mg_virtual = &PL_vtbl_env;
3235 mg->mg_virtual = &PL_vtbl_fm;
3238 mg->mg_virtual = &PL_vtbl_envelem;
3241 mg->mg_virtual = &PL_vtbl_mglob;
3244 mg->mg_virtual = &PL_vtbl_isa;
3247 mg->mg_virtual = &PL_vtbl_isaelem;
3250 mg->mg_virtual = &PL_vtbl_nkeys;
3257 mg->mg_virtual = &PL_vtbl_dbline;
3261 mg->mg_virtual = &PL_vtbl_mutex;
3263 #endif /* USE_THREADS */
3264 #ifdef USE_LOCALE_COLLATE
3266 mg->mg_virtual = &PL_vtbl_collxfrm;
3268 #endif /* USE_LOCALE_COLLATE */
3270 mg->mg_virtual = &PL_vtbl_pack;
3274 mg->mg_virtual = &PL_vtbl_packelem;
3277 mg->mg_virtual = &PL_vtbl_regexp;
3280 mg->mg_virtual = &PL_vtbl_sig;
3283 mg->mg_virtual = &PL_vtbl_sigelem;
3286 mg->mg_virtual = &PL_vtbl_taint;
3290 mg->mg_virtual = &PL_vtbl_uvar;
3293 mg->mg_virtual = &PL_vtbl_vec;
3296 mg->mg_virtual = &PL_vtbl_substr;
3299 mg->mg_virtual = &PL_vtbl_defelem;
3302 mg->mg_virtual = &PL_vtbl_glob;
3305 mg->mg_virtual = &PL_vtbl_arylen;
3308 mg->mg_virtual = &PL_vtbl_pos;
3311 mg->mg_virtual = &PL_vtbl_backref;
3313 case '~': /* Reserved for use by extensions not perl internals. */
3314 /* Useful for attaching extension internal data to perl vars. */
3315 /* Note that multiple extensions may clash if magical scalars */
3316 /* etc holding private data from one are passed to another. */
3320 Perl_croak(aTHX_ "Don't know how to handle magic of type '%c'", how);
3324 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
3328 Perl_sv_unmagic(pTHX_ SV *sv, int type)
3332 if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
3335 for (mg = *mgp; mg; mg = *mgp) {
3336 if (mg->mg_type == type) {
3337 MGVTBL* vtbl = mg->mg_virtual;
3338 *mgp = mg->mg_moremagic;
3339 if (vtbl && vtbl->svt_free)
3340 CALL_FPTR(vtbl->svt_free)(aTHX_ sv, mg);
3341 if (mg->mg_ptr && mg->mg_type != 'g')
3342 if (mg->mg_len >= 0)
3343 Safefree(mg->mg_ptr);
3344 else if (mg->mg_len == HEf_SVKEY)
3345 SvREFCNT_dec((SV*)mg->mg_ptr);
3346 if (mg->mg_flags & MGf_REFCOUNTED)
3347 SvREFCNT_dec(mg->mg_obj);
3351 mgp = &mg->mg_moremagic;
3355 SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
3362 Perl_sv_rvweaken(pTHX_ SV *sv)
3365 if (!SvOK(sv)) /* let undefs pass */
3368 Perl_croak(aTHX_ "Can't weaken a nonreference");
3369 else if (SvWEAKREF(sv)) {
3371 if (ckWARN(WARN_MISC))
3372 Perl_warner(aTHX_ WARN_MISC, "Reference is already weak");
3376 sv_add_backref(tsv, sv);
3383 S_sv_add_backref(pTHX_ SV *tsv, SV *sv)
3387 if (SvMAGICAL(tsv) && (mg = mg_find(tsv, '<')))
3388 av = (AV*)mg->mg_obj;
3391 sv_magic(tsv, (SV*)av, '<', NULL, 0);
3392 SvREFCNT_dec(av); /* for sv_magic */
3398 S_sv_del_backref(pTHX_ SV *sv)
3405 if (!SvMAGICAL(tsv) || !(mg = mg_find(tsv, '<')))
3406 Perl_croak(aTHX_ "panic: del_backref");
3407 av = (AV *)mg->mg_obj;
3412 svp[i] = &PL_sv_undef; /* XXX */
3419 =for apidoc sv_insert
3421 Inserts a string at the specified offset/length within the SV. Similar to
3422 the Perl substr() function.
3428 Perl_sv_insert(pTHX_ SV *bigstr, STRLEN offset, STRLEN len, char *little, STRLEN littlelen)
3432 register char *midend;
3433 register char *bigend;
3439 Perl_croak(aTHX_ "Can't modify non-existent substring");
3440 SvPV_force(bigstr, curlen);
3441 if (offset + len > curlen) {
3442 SvGROW(bigstr, offset+len+1);
3443 Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
3444 SvCUR_set(bigstr, offset+len);
3448 i = littlelen - len;
3449 if (i > 0) { /* string might grow */
3450 big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
3451 mid = big + offset + len;
3452 midend = bigend = big + SvCUR(bigstr);
3455 while (midend > mid) /* shove everything down */
3456 *--bigend = *--midend;
3457 Move(little,big+offset,littlelen,char);
3463 Move(little,SvPVX(bigstr)+offset,len,char);
3468 big = SvPVX(bigstr);
3471 bigend = big + SvCUR(bigstr);
3473 if (midend > bigend)
3474 Perl_croak(aTHX_ "panic: sv_insert");
3476 if (mid - big > bigend - midend) { /* faster to shorten from end */
3478 Move(little, mid, littlelen,char);
3481 i = bigend - midend;
3483 Move(midend, mid, i,char);
3487 SvCUR_set(bigstr, mid - big);
3490 else if (i = mid - big) { /* faster from front */
3491 midend -= littlelen;
3493 sv_chop(bigstr,midend-i);
3498 Move(little, mid, littlelen,char);
3500 else if (littlelen) {
3501 midend -= littlelen;
3502 sv_chop(bigstr,midend);
3503 Move(little,midend,littlelen,char);
3506 sv_chop(bigstr,midend);
3511 /* make sv point to what nstr did */
3514 Perl_sv_replace(pTHX_ register SV *sv, register SV *nsv)
3517 U32 refcnt = SvREFCNT(sv);
3518 SV_CHECK_THINKFIRST(sv);
3519 if (SvREFCNT(nsv) != 1 && ckWARN_d(WARN_INTERNAL))
3520 Perl_warner(aTHX_ WARN_INTERNAL, "Reference miscount in sv_replace()");
3521 if (SvMAGICAL(sv)) {
3525 sv_upgrade(nsv, SVt_PVMG);
3526 SvMAGIC(nsv) = SvMAGIC(sv);
3527 SvFLAGS(nsv) |= SvMAGICAL(sv);
3533 assert(!SvREFCNT(sv));
3534 StructCopy(nsv,sv,SV);
3535 SvREFCNT(sv) = refcnt;
3536 SvFLAGS(nsv) |= SVTYPEMASK; /* Mark as freed */
3541 Perl_sv_clear(pTHX_ register SV *sv)
3545 assert(SvREFCNT(sv) == 0);
3549 if (PL_defstash) { /* Still have a symbol table? */
3554 Zero(&tmpref, 1, SV);
3555 sv_upgrade(&tmpref, SVt_RV);
3557 SvREADONLY_on(&tmpref); /* DESTROY() could be naughty */
3558 SvREFCNT(&tmpref) = 1;
3561 stash = SvSTASH(sv);
3562 destructor = gv_fetchmethod(SvSTASH(sv), "DESTROY");
3565 PUSHSTACKi(PERLSI_DESTROY);
3566 SvRV(&tmpref) = SvREFCNT_inc(sv);
3571 call_sv((SV*)GvCV(destructor),
3572 G_DISCARD|G_EVAL|G_KEEPERR);
3578 } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
3580 del_XRV(SvANY(&tmpref));
3583 if (PL_in_clean_objs)
3584 Perl_croak(aTHX_ "DESTROY created new reference to dead object '%s'",
3586 /* DESTROY gave object new lease on life */
3592 SvREFCNT_dec(SvSTASH(sv)); /* possibly of changed persuasion */
3593 SvOBJECT_off(sv); /* Curse the object. */
3594 if (SvTYPE(sv) != SVt_PVIO)
3595 --PL_sv_objcount; /* XXX Might want something more general */
3598 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv))
3601 switch (SvTYPE(sv)) {
3604 IoIFP(sv) != PerlIO_stdin() &&
3605 IoIFP(sv) != PerlIO_stdout() &&
3606 IoIFP(sv) != PerlIO_stderr())
3608 io_close((IO*)sv, FALSE);
3610 if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
3611 PerlDir_close(IoDIRP(sv));
3612 IoDIRP(sv) = (DIR*)NULL;
3613 Safefree(IoTOP_NAME(sv));
3614 Safefree(IoFMT_NAME(sv));
3615 Safefree(IoBOTTOM_NAME(sv));
3630 SvREFCNT_dec(LvTARG(sv));
3634 Safefree(GvNAME(sv));
3635 /* cannot decrease stash refcount yet, as we might recursively delete
3636 ourselves when the refcnt drops to zero. Delay SvREFCNT_dec
3637 of stash until current sv is completely gone.
3638 -- JohnPC, 27 Mar 1998 */
3639 stash = GvSTASH(sv);
3645 (void)SvOOK_off(sv);
3653 SvREFCNT_dec(SvRV(sv));
3655 else if (SvPVX(sv) && SvLEN(sv))
3656 Safefree(SvPVX(sv));
3666 switch (SvTYPE(sv)) {
3682 del_XPVIV(SvANY(sv));
3685 del_XPVNV(SvANY(sv));
3688 del_XPVMG(SvANY(sv));
3691 del_XPVLV(SvANY(sv));
3694 del_XPVAV(SvANY(sv));
3697 del_XPVHV(SvANY(sv));
3700 del_XPVCV(SvANY(sv));
3703 del_XPVGV(SvANY(sv));
3704 /* code duplication for increased performance. */
3705 SvFLAGS(sv) &= SVf_BREAK;
3706 SvFLAGS(sv) |= SVTYPEMASK;
3707 /* decrease refcount of the stash that owns this GV, if any */
3709 SvREFCNT_dec(stash);
3710 return; /* not break, SvFLAGS reset already happened */
3712 del_XPVBM(SvANY(sv));
3715 del_XPVFM(SvANY(sv));
3718 del_XPVIO(SvANY(sv));
3721 SvFLAGS(sv) &= SVf_BREAK;
3722 SvFLAGS(sv) |= SVTYPEMASK;
3726 Perl_sv_newref(pTHX_ SV *sv)
3729 ATOMIC_INC(SvREFCNT(sv));
3734 Perl_sv_free(pTHX_ SV *sv)
3737 int refcount_is_zero;
3741 if (SvREFCNT(sv) == 0) {
3742 if (SvFLAGS(sv) & SVf_BREAK)
3744 if (PL_in_clean_all) /* All is fair */
3746 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
3747 /* make sure SvREFCNT(sv)==0 happens very seldom */
3748 SvREFCNT(sv) = (~(U32)0)/2;
3751 if (ckWARN_d(WARN_INTERNAL))
3752 Perl_warner(aTHX_ WARN_INTERNAL, "Attempt to free unreferenced scalar");
3755 ATOMIC_DEC_AND_TEST(refcount_is_zero, SvREFCNT(sv));
3756 if (!refcount_is_zero)
3760 if (ckWARN_d(WARN_DEBUGGING))
3761 Perl_warner(aTHX_ WARN_DEBUGGING,
3762 "Attempt to free temp prematurely: SV 0x%"UVxf,
3767 if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
3768 /* make sure SvREFCNT(sv)==0 happens very seldom */
3769 SvREFCNT(sv) = (~(U32)0)/2;
3780 Returns the length of the string in the SV. See also C<SvCUR>.
3786 Perl_sv_len(pTHX_ register SV *sv)
3795 len = mg_length(sv);
3797 junk = SvPV(sv, len);
3802 Perl_sv_len_utf8(pTHX_ register SV *sv)
3813 len = mg_length(sv);
3816 s = (U8*)SvPV(sv, len);
3827 Perl_sv_pos_u2b(pTHX_ register SV *sv, I32* offsetp, I32* lenp)
3832 I32 uoffset = *offsetp;
3838 start = s = (U8*)SvPV(sv, len);
3840 while (s < send && uoffset--)
3844 *offsetp = s - start;
3848 while (s < send && ulen--)
3858 Perl_sv_pos_b2u(pTHX_ register SV *sv, I32* offsetp)
3867 s = (U8*)SvPV(sv, len);
3869 Perl_croak(aTHX_ "panic: bad byte offset");
3870 send = s + *offsetp;
3878 if (ckWARN_d(WARN_UTF8))
3879 Perl_warner(aTHX_ WARN_UTF8, "Malformed UTF-8 character");
3889 Returns a boolean indicating whether the strings in the two SVs are
3896 Perl_sv_eq(pTHX_ register SV *str1, register SV *str2)
3908 pv1 = SvPV(str1, cur1);
3913 pv2 = SvPV(str2, cur2);
3918 return memEQ(pv1, pv2, cur1);
3924 Compares the strings in two SVs. Returns -1, 0, or 1 indicating whether the
3925 string in C<sv1> is less than, equal to, or greater than the string in
3932 Perl_sv_cmp(pTHX_ register SV *str1, register SV *str2)
3935 char *pv1 = str1 ? SvPV(str1, cur1) : (char *) NULL;
3937 char *pv2 = str2 ? SvPV(str2, cur2) : (char *) NULL;
3941 return cur2 ? -1 : 0;
3946 retval = memcmp((void*)pv1, (void*)pv2, cur1 < cur2 ? cur1 : cur2);
3949 return retval < 0 ? -1 : 1;
3954 return cur1 < cur2 ? -1 : 1;
3958 Perl_sv_cmp_locale(pTHX_ register SV *sv1, register SV *sv2)
3960 #ifdef USE_LOCALE_COLLATE
3966 if (PL_collation_standard)
3970 pv1 = sv1 ? sv_collxfrm(sv1, &len1) : (char *) NULL;
3972 pv2 = sv2 ? sv_collxfrm(sv2, &len2) : (char *) NULL;
3974 if (!pv1 || !len1) {
3985 retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
3988 return retval < 0 ? -1 : 1;
3991 * When the result of collation is equality, that doesn't mean
3992 * that there are no differences -- some locales exclude some
3993 * characters from consideration. So to avoid false equalities,
3994 * we use the raw string as a tiebreaker.
4000 #endif /* USE_LOCALE_COLLATE */
4002 return sv_cmp(sv1, sv2);
4005 #ifdef USE_LOCALE_COLLATE
4007 * Any scalar variable may carry an 'o' magic that contains the
4008 * scalar data of the variable transformed to such a format that
4009 * a normal memory comparison can be used to compare the data
4010 * according to the locale settings.
4013 Perl_sv_collxfrm(pTHX_ SV *sv, STRLEN *nxp)
4017 mg = SvMAGICAL(sv) ? mg_find(sv, 'o') : (MAGIC *) NULL;
4018 if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
4023 Safefree(mg->mg_ptr);
4025 if ((xf = mem_collxfrm(s, len, &xlen))) {
4026 if (SvREADONLY(sv)) {
4029 return xf + sizeof(PL_collation_ix);
4032 sv_magic(sv, 0, 'o', 0, 0);
4033 mg = mg_find(sv, 'o');
4046 if (mg && mg->mg_ptr) {
4048 return mg->mg_ptr + sizeof(PL_collation_ix);
4056 #endif /* USE_LOCALE_COLLATE */
4059 Perl_sv_gets(pTHX_ register SV *sv, register PerlIO *fp, I32 append)
4064 register STDCHAR rslast;
4065 register STDCHAR *bp;
4069 SV_CHECK_THINKFIRST(sv);
4070 (void)SvUPGRADE(sv, SVt_PV);
4074 if (RsSNARF(PL_rs)) {
4078 else if (RsRECORD(PL_rs)) {
4079 I32 recsize, bytesread;
4082 /* Grab the size of the record we're getting */
4083 recsize = SvIV(SvRV(PL_rs));
4084 (void)SvPOK_only(sv); /* Validate pointer */
4085 buffer = SvGROW(sv, recsize + 1);
4088 /* VMS wants read instead of fread, because fread doesn't respect */
4089 /* RMS record boundaries. This is not necessarily a good thing to be */
4090 /* doing, but we've got no other real choice */
4091 bytesread = PerlLIO_read(PerlIO_fileno(fp), buffer, recsize);
4093 bytesread = PerlIO_read(fp, buffer, recsize);
4095 SvCUR_set(sv, bytesread);
4096 buffer[bytesread] = '\0';
4097 return(SvCUR(sv) ? SvPVX(sv) : Nullch);
4099 else if (RsPARA(PL_rs)) {
4104 rsptr = SvPV(PL_rs, rslen);
4105 rslast = rslen ? rsptr[rslen - 1] : '\0';
4107 if (RsPARA(PL_rs)) { /* have to do this both before and after */
4108 do { /* to make sure file boundaries work right */
4111 i = PerlIO_getc(fp);
4115 PerlIO_ungetc(fp,i);
4121 /* See if we know enough about I/O mechanism to cheat it ! */
4123 /* This used to be #ifdef test - it is made run-time test for ease
4124 of abstracting out stdio interface. One call should be cheap
4125 enough here - and may even be a macro allowing compile
4129 if (PerlIO_fast_gets(fp)) {
4132 * We're going to steal some values from the stdio struct
4133 * and put EVERYTHING in the innermost loop into registers.
4135 register STDCHAR *ptr;
4139 #if defined(VMS) && defined(PERLIO_IS_STDIO)
4140 /* An ungetc()d char is handled separately from the regular
4141 * buffer, so we getc() it back out and stuff it in the buffer.
4143 i = PerlIO_getc(fp);
4144 if (i == EOF) return 0;
4145 *(--((*fp)->_ptr)) = (unsigned char) i;
4149 /* Here is some breathtakingly efficient cheating */
4151 cnt = PerlIO_get_cnt(fp); /* get count into register */
4152 (void)SvPOK_only(sv); /* validate pointer */
4153 if (SvLEN(sv) - append <= cnt + 1) { /* make sure we have the room */
4154 if (cnt > 80 && SvLEN(sv) > append) {
4155 shortbuffered = cnt - SvLEN(sv) + append + 1;
4156 cnt -= shortbuffered;
4160 /* remember that cnt can be negative */
4161 SvGROW(sv, append + (cnt <= 0 ? 2 : (cnt + 1)));
4166 bp = (STDCHAR*)SvPVX(sv) + append; /* move these two too to registers */
4167 ptr = (STDCHAR*)PerlIO_get_ptr(fp);
4168 DEBUG_P(PerlIO_printf(Perl_debug_log,
4169 "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
4170 DEBUG_P(PerlIO_printf(Perl_debug_log,
4171 "Screamer: entering: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
4172 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
4173 PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
4178 while (cnt > 0) { /* this | eat */
4180 if ((*bp++ = *ptr++) == rslast) /* really | dust */
4181 goto thats_all_folks; /* screams | sed :-) */
4185 Copy(ptr, bp, cnt, char); /* this | eat */
4186 bp += cnt; /* screams | dust */
4187 ptr += cnt; /* louder | sed :-) */
4192 if (shortbuffered) { /* oh well, must extend */
4193 cnt = shortbuffered;
4195 bpx = bp - (STDCHAR*)SvPVX(sv); /* box up before relocation */
4197 SvGROW(sv, SvLEN(sv) + append + cnt + 2);
4198 bp = (STDCHAR*)SvPVX(sv) + bpx; /* unbox after relocation */
4202 DEBUG_P(PerlIO_printf(Perl_debug_log,
4203 "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
4204 PTR2UV(ptr),(long)cnt));
4205 PerlIO_set_ptrcnt(fp, ptr, cnt); /* deregisterize cnt and ptr */
4206 DEBUG_P(PerlIO_printf(Perl_debug_log,
4207 "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
4208 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
4209 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
4210 /* This used to call 'filbuf' in stdio form, but as that behaves like
4211 getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
4212 another abstraction. */
4213 i = PerlIO_getc(fp); /* get more characters */
4214 DEBUG_P(PerlIO_printf(Perl_debug_log,
4215 "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
4216 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
4217 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
4218 cnt = PerlIO_get_cnt(fp);
4219 ptr = (STDCHAR*)PerlIO_get_ptr(fp); /* reregisterize cnt and ptr */
4220 DEBUG_P(PerlIO_printf(Perl_debug_log,
4221 "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
4223 if (i == EOF) /* all done for ever? */
4224 goto thats_really_all_folks;
4226 bpx = bp - (STDCHAR*)SvPVX(sv); /* box up before relocation */
4228 SvGROW(sv, bpx + cnt + 2);
4229 bp = (STDCHAR*)SvPVX(sv) + bpx; /* unbox after relocation */
4231 *bp++ = i; /* store character from PerlIO_getc */
4233 if (rslen && (STDCHAR)i == rslast) /* all done for now? */
4234 goto thats_all_folks;
4238 if ((rslen > 1 && (bp - (STDCHAR*)SvPVX(sv) < rslen)) ||
4239 memNE((char*)bp - rslen, rsptr, rslen))
4240 goto screamer; /* go back to the fray */
4241 thats_really_all_folks:
4243 cnt += shortbuffered;
4244 DEBUG_P(PerlIO_printf(Perl_debug_log,
4245 "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
4246 PerlIO_set_ptrcnt(fp, ptr, cnt); /* put these back or we're in trouble */
4247 DEBUG_P(PerlIO_printf(Perl_debug_log,
4248 "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
4249 PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
4250 PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
4252 SvCUR_set(sv, bp - (STDCHAR*)SvPVX(sv)); /* set length */
4253 DEBUG_P(PerlIO_printf(Perl_debug_log,
4254 "Screamer: done, len=%ld, string=|%.*s|\n",
4255 (long)SvCUR(sv),(int)SvCUR(sv),SvPVX(sv)));
4260 /*The big, slow, and stupid way */
4263 /* Need to work around EPOC SDK features */
4264 /* On WINS: MS VC5 generates calls to _chkstk, */
4265 /* if a `large' stack frame is allocated */
4266 /* gcc on MARM does not generate calls like these */
4272 register STDCHAR *bpe = buf + sizeof(buf);
4274 while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = i) != rslast && bp < bpe)
4275 ; /* keep reading */
4279 cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
4280 /* Accomodate broken VAXC compiler, which applies U8 cast to
4281 * both args of ?: operator, causing EOF to change into 255
4283 if (cnt) { i = (U8)buf[cnt - 1]; } else { i = EOF; }
4287 sv_catpvn(sv, (char *) buf, cnt);
4289 sv_setpvn(sv, (char *) buf, cnt);
4291 if (i != EOF && /* joy */
4293 SvCUR(sv) < rslen ||
4294 memNE(SvPVX(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
4298 * If we're reading from a TTY and we get a short read,
4299 * indicating that the user hit his EOF character, we need
4300 * to notice it now, because if we try to read from the TTY
4301 * again, the EOF condition will disappear.
4303 * The comparison of cnt to sizeof(buf) is an optimization
4304 * that prevents unnecessary calls to feof().
4308 if (!(cnt < sizeof(buf) && PerlIO_eof(fp)))
4313 if (RsPARA(PL_rs)) { /* have to do this both before and after */
4314 while (i != EOF) { /* to make sure file boundaries work right */
4315 i = PerlIO_getc(fp);
4317 PerlIO_ungetc(fp,i);
4323 return (SvCUR(sv) - append) ? SvPVX(sv) : Nullch;
4330 Auto-increment of the value in the SV.
4336 Perl_sv_inc(pTHX_ register SV *sv)
4345 if (SvTHINKFIRST(sv)) {
4346 if (SvREADONLY(sv)) {
4348 if (PL_curcop != &PL_compiling)
4349 Perl_croak(aTHX_ PL_no_modify);
4353 if (SvAMAGIC(sv) && AMG_CALLun(sv,inc))
4355 i = PTR2IV(SvRV(sv));
4360 flags = SvFLAGS(sv);
4361 if (flags & SVp_NOK) {
4362 (void)SvNOK_only(sv);
4366 if (flags & SVp_IOK) {
4368 if (SvUVX(sv) == UV_MAX)
4369 sv_setnv(sv, (NV)UV_MAX + 1.0);
4371 (void)SvIOK_only_UV(sv);
4374 if (SvIVX(sv) == IV_MAX)
4375 sv_setnv(sv, (NV)IV_MAX + 1.0);
4377 (void)SvIOK_only(sv);
4383 if (!(flags & SVp_POK) || !*SvPVX(sv)) {
4384 if ((flags & SVTYPEMASK) < SVt_PVNV)
4385 sv_upgrade(sv, SVt_NV);
4387 (void)SvNOK_only(sv);
4391 while (isALPHA(*d)) d++;
4392 while (isDIGIT(*d)) d++;
4394 sv_setnv(sv,Atof(SvPVX(sv)) + 1.0); /* punt */
4398 while (d >= SvPVX(sv)) {
4406 /* MKS: The original code here died if letters weren't consecutive.
4407 * at least it didn't have to worry about non-C locales. The
4408 * new code assumes that ('z'-'a')==('Z'-'A'), letters are
4409 * arranged in order (although not consecutively) and that only
4410 * [A-Za-z] are accepted by isALPHA in the C locale.
4412 if (*d != 'z' && *d != 'Z') {
4413 do { ++*d; } while (!isALPHA(*d));
4416 *(d--) -= 'z' - 'a';
4421 *(d--) -= 'z' - 'a' + 1;
4425 /* oh,oh, the number grew */
4426 SvGROW(sv, SvCUR(sv) + 2);
4428 for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX(sv); d--)
4439 Auto-decrement of the value in the SV.
4445 Perl_sv_dec(pTHX_ register SV *sv)
4453 if (SvTHINKFIRST(sv)) {
4454 if (SvREADONLY(sv)) {
4456 if (PL_curcop != &PL_compiling)
4457 Perl_croak(aTHX_ PL_no_modify);
4461 if (SvAMAGIC(sv) && AMG_CALLun(sv,dec))
4463 i = PTR2IV(SvRV(sv));
4468 flags = SvFLAGS(sv);
4469 if (flags & SVp_NOK) {
4471 (void)SvNOK_only(sv);
4474 if (flags & SVp_IOK) {
4476 if (SvUVX(sv) == 0) {
4477 (void)SvIOK_only(sv);
4481 (void)SvIOK_only_UV(sv);
4485 if (SvIVX(sv) == IV_MIN)
4486 sv_setnv(sv, (NV)IV_MIN - 1.0);
4488 (void)SvIOK_only(sv);
4494 if (!(flags & SVp_POK)) {
4495 if ((flags & SVTYPEMASK) < SVt_PVNV)
4496 sv_upgrade(sv, SVt_NV);
4498 (void)SvNOK_only(sv);
4501 sv_setnv(sv,Atof(SvPVX(sv)) - 1.0); /* punt */
4505 =for apidoc sv_mortalcopy
4507 Creates a new SV which is a copy of the original SV. The new SV is marked
4513 /* Make a string that will exist for the duration of the expression
4514 * evaluation. Actually, it may have to last longer than that, but
4515 * hopefully we won't free it until it has been assigned to a
4516 * permanent location. */
4519 Perl_sv_mortalcopy(pTHX_ SV *oldstr)
4525 sv_setsv(sv,oldstr);
4527 PL_tmps_stack[++PL_tmps_ix] = sv;
4533 =for apidoc sv_newmortal
4535 Creates a new SV which is mortal. The reference count of the SV is set to 1.
4541 Perl_sv_newmortal(pTHX)
4547 SvFLAGS(sv) = SVs_TEMP;
4549 PL_tmps_stack[++PL_tmps_ix] = sv;
4554 =for apidoc sv_2mortal
4556 Marks an SV as mortal. The SV will be destroyed when the current context
4562 /* same thing without the copying */
4565 Perl_sv_2mortal(pTHX_ register SV *sv)
4570 if (SvREADONLY(sv) && SvIMMORTAL(sv))
4573 PL_tmps_stack[++PL_tmps_ix] = sv;
4581 Creates a new SV and copies a string into it. The reference count for the
4582 SV is set to 1. If C<len> is zero, Perl will compute the length using
4583 strlen(). For efficiency, consider using C<newSVpvn> instead.
4589 Perl_newSVpv(pTHX_ const char *s, STRLEN len)
4596 sv_setpvn(sv,s,len);
4601 =for apidoc newSVpvn
4603 Creates a new SV and copies a string into it. The reference count for the
4604 SV is set to 1. Note that if C<len> is zero, Perl will create a zero length
4605 string. You are responsible for ensuring that the source string is at least
4612 Perl_newSVpvn(pTHX_ const char *s, STRLEN len)
4617 sv_setpvn(sv,s,len);
4621 #if defined(PERL_IMPLICIT_CONTEXT)
4623 Perl_newSVpvf_nocontext(const char* pat, ...)
4628 va_start(args, pat);
4629 sv = vnewSVpvf(pat, &args);
4636 =for apidoc newSVpvf
4638 Creates a new SV an initialize it with the string formatted like
4645 Perl_newSVpvf(pTHX_ const char* pat, ...)
4649 va_start(args, pat);
4650 sv = vnewSVpvf(pat, &args);
4656 Perl_vnewSVpvf(pTHX_ const char* pat, va_list* args)
4660 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
4667 Creates a new SV and copies a floating point value into it.
4668 The reference count for the SV is set to 1.
4674 Perl_newSVnv(pTHX_ NV n)
4686 Creates a new SV and copies an integer into it. The reference count for the
4693 Perl_newSViv(pTHX_ IV i)
4703 =for apidoc newRV_noinc
4705 Creates an RV wrapper for an SV. The reference count for the original
4706 SV is B<not> incremented.
4712 Perl_newRV_noinc(pTHX_ SV *tmpRef)
4718 sv_upgrade(sv, SVt_RV);
4725 /* newRV_inc is #defined to newRV in sv.h */
4727 Perl_newRV(pTHX_ SV *tmpRef)
4729 return newRV_noinc(SvREFCNT_inc(tmpRef));
4735 Creates a new SV which is an exact duplicate of the original SV.
4740 /* make an exact duplicate of old */
4743 Perl_newSVsv(pTHX_ register SV *old)
4750 if (SvTYPE(old) == SVTYPEMASK) {
4751 if (ckWARN_d(WARN_INTERNAL))
4752 Perl_warner(aTHX_ WARN_INTERNAL, "semi-panic: attempt to dup freed string");
4767 Perl_sv_reset(pTHX_ register char *s, HV *stash)
4775 char todo[PERL_UCHAR_MAX+1];
4780 if (!*s) { /* reset ?? searches */
4781 for (pm = HvPMROOT(stash); pm; pm = pm->op_pmnext) {
4782 pm->op_pmdynflags &= ~PMdf_USED;
4787 /* reset variables */
4789 if (!HvARRAY(stash))
4792 Zero(todo, 256, char);
4794 i = (unsigned char)*s;
4798 max = (unsigned char)*s++;
4799 for ( ; i <= max; i++) {
4802 for (i = 0; i <= (I32) HvMAX(stash); i++) {
4803 for (entry = HvARRAY(stash)[i];
4805 entry = HeNEXT(entry))
4807 if (!todo[(U8)*HeKEY(entry)])
4809 gv = (GV*)HeVAL(entry);
4811 if (SvTHINKFIRST(sv)) {
4812 if (!SvREADONLY(sv) && SvROK(sv))
4817 if (SvTYPE(sv) >= SVt_PV) {
4819 if (SvPVX(sv) != Nullch)
4826 if (GvHV(gv) && !HvNAME(GvHV(gv))) {
4828 #ifndef VMS /* VMS has no environ array */
4830 environ[0] = Nullch;
4839 Perl_sv_2io(pTHX_ SV *sv)
4845 switch (SvTYPE(sv)) {
4853 Perl_croak(aTHX_ "Bad filehandle: %s", GvNAME(gv));
4857 Perl_croak(aTHX_ PL_no_usym, "filehandle");
4859 return sv_2io(SvRV(sv));
4860 gv = gv_fetchpv(SvPV(sv,n_a), FALSE, SVt_PVIO);
4866 Perl_croak(aTHX_ "Bad filehandle: %s", SvPV(sv,n_a));
4873 Perl_sv_2cv(pTHX_ SV *sv, HV **st, GV **gvp, I32 lref)
4880 return *gvp = Nullgv, Nullcv;
4881 switch (SvTYPE(sv)) {
4901 SV **sp = &sv; /* Used in tryAMAGICunDEREF macro. */
4902 tryAMAGICunDEREF(to_cv);
4905 if (SvTYPE(sv) == SVt_PVCV) {
4914 Perl_croak(aTHX_ "Not a subroutine reference");
4919 gv = gv_fetchpv(SvPV(sv, n_a), lref, SVt_PVCV);
4925 if (lref && !GvCVu(gv)) {
4928 tmpsv = NEWSV(704,0);
4929 gv_efullname3(tmpsv, gv, Nullch);
4930 /* XXX this is probably not what they think they're getting.
4931 * It has the same effect as "sub name;", i.e. just a forward
4933 newSUB(start_subparse(FALSE, 0),
4934 newSVOP(OP_CONST, 0, tmpsv),
4939 Perl_croak(aTHX_ "Unable to create sub named \"%s\"", SvPV(sv,n_a));
4946 Perl_sv_true(pTHX_ register SV *sv)
4953 if ((tXpv = (XPV*)SvANY(sv)) &&
4954 (tXpv->xpv_cur > 1 ||
4955 (tXpv->xpv_cur && *tXpv->xpv_pv != '0')))
4962 return SvIVX(sv) != 0;
4965 return SvNVX(sv) != 0.0;
4967 return sv_2bool(sv);
4973 Perl_sv_iv(pTHX_ register SV *sv)
4977 return (IV)SvUVX(sv);
4984 Perl_sv_uv(pTHX_ register SV *sv)
4989 return (UV)SvIVX(sv);
4995 Perl_sv_nv(pTHX_ register SV *sv)
5003 Perl_sv_pv(pTHX_ SV *sv)
5010 return sv_2pv(sv, &n_a);
5014 Perl_sv_pvn(pTHX_ SV *sv, STRLEN *lp)
5020 return sv_2pv(sv, lp);
5024 Perl_sv_pvn_force(pTHX_ SV *sv, STRLEN *lp)
5028 if (SvTHINKFIRST(sv) && !SvROK(sv))
5029 sv_force_normal(sv);
5035 if (SvTYPE(sv) > SVt_PVLV && SvTYPE(sv) != SVt_PVFM) {
5037 Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
5038 PL_op_name[PL_op->op_type]);
5042 if (s != SvPVX(sv)) { /* Almost, but not quite, sv_setpvn() */
5047 (void)SvUPGRADE(sv, SVt_PV); /* Never FALSE */
5048 SvGROW(sv, len + 1);
5049 Move(s,SvPVX(sv),len,char);
5054 SvPOK_on(sv); /* validate pointer */
5056 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
5057 PTR2UV(sv),SvPVX(sv)));
5064 Perl_sv_pvbyte(pTHX_ SV *sv)
5070 Perl_sv_pvbyten(pTHX_ SV *sv, STRLEN *lp)
5072 return sv_pvn(sv,lp);
5076 Perl_sv_pvbyten_force(pTHX_ SV *sv, STRLEN *lp)
5078 return sv_pvn_force(sv,lp);
5082 Perl_sv_pvutf8(pTHX_ SV *sv)
5088 Perl_sv_pvutf8n(pTHX_ SV *sv, STRLEN *lp)
5090 return sv_pvn(sv,lp);
5094 Perl_sv_pvutf8n_force(pTHX_ SV *sv, STRLEN *lp)
5096 return sv_pvn_force(sv,lp);
5100 Perl_sv_reftype(pTHX_ SV *sv, int ob)
5102 if (ob && SvOBJECT(sv))
5103 return HvNAME(SvSTASH(sv));
5105 switch (SvTYPE(sv)) {
5119 case SVt_PVLV: return "LVALUE";
5120 case SVt_PVAV: return "ARRAY";
5121 case SVt_PVHV: return "HASH";
5122 case SVt_PVCV: return "CODE";
5123 case SVt_PVGV: return "GLOB";
5124 case SVt_PVFM: return "FORMAT";
5125 default: return "UNKNOWN";
5131 =for apidoc sv_isobject
5133 Returns a boolean indicating whether the SV is an RV pointing to a blessed
5134 object. If the SV is not an RV, or if the object is not blessed, then this
5141 Perl_sv_isobject(pTHX_ SV *sv)
5158 Returns a boolean indicating whether the SV is blessed into the specified
5159 class. This does not check for subtypes; use C<sv_derived_from> to verify
5160 an inheritance relationship.
5166 Perl_sv_isa(pTHX_ SV *sv, const char *name)
5178 return strEQ(HvNAME(SvSTASH(sv)), name);
5184 Creates a new SV for the RV, C<rv>, to point to. If C<rv> is not an RV then
5185 it will be upgraded to one. If C<classname> is non-null then the new SV will
5186 be blessed in the specified package. The new SV is returned and its
5187 reference count is 1.
5193 Perl_newSVrv(pTHX_ SV *rv, const char *classname)
5200 SV_CHECK_THINKFIRST(rv);
5203 if (SvTYPE(rv) < SVt_RV)
5204 sv_upgrade(rv, SVt_RV);
5211 HV* stash = gv_stashpv(classname, TRUE);
5212 (void)sv_bless(rv, stash);
5218 =for apidoc sv_setref_pv
5220 Copies a pointer into a new SV, optionally blessing the SV. The C<rv>
5221 argument will be upgraded to an RV. That RV will be modified to point to
5222 the new SV. If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
5223 into the SV. The C<classname> argument indicates the package for the
5224 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
5225 will be returned and will have a reference count of 1.
5227 Do not use with other Perl types such as HV, AV, SV, CV, because those
5228 objects will become corrupted by the pointer copy process.
5230 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
5236 Perl_sv_setref_pv(pTHX_ SV *rv, const char *classname, void *pv)
5239 sv_setsv(rv, &PL_sv_undef);
5243 sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
5248 =for apidoc sv_setref_iv
5250 Copies an integer into a new SV, optionally blessing the SV. The C<rv>
5251 argument will be upgraded to an RV. That RV will be modified to point to
5252 the new SV. The C<classname> argument indicates the package for the
5253 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
5254 will be returned and will have a reference count of 1.
5260 Perl_sv_setref_iv(pTHX_ SV *rv, const char *classname, IV iv)
5262 sv_setiv(newSVrv(rv,classname), iv);
5267 =for apidoc sv_setref_nv
5269 Copies a double into a new SV, optionally blessing the SV. The C<rv>
5270 argument will be upgraded to an RV. That RV will be modified to point to
5271 the new SV. The C<classname> argument indicates the package for the
5272 blessing. Set C<classname> to C<Nullch> to avoid the blessing. The new SV
5273 will be returned and will have a reference count of 1.
5279 Perl_sv_setref_nv(pTHX_ SV *rv, const char *classname, NV nv)
5281 sv_setnv(newSVrv(rv,classname), nv);
5286 =for apidoc sv_setref_pvn
5288 Copies a string into a new SV, optionally blessing the SV. The length of the
5289 string must be specified with C<n>. The C<rv> argument will be upgraded to
5290 an RV. That RV will be modified to point to the new SV. The C<classname>
5291 argument indicates the package for the blessing. Set C<classname> to
5292 C<Nullch> to avoid the blessing. The new SV will be returned and will have
5293 a reference count of 1.
5295 Note that C<sv_setref_pv> copies the pointer while this copies the string.
5301 Perl_sv_setref_pvn(pTHX_ SV *rv, const char *classname, char *pv, STRLEN n)
5303 sv_setpvn(newSVrv(rv,classname), pv, n);
5308 =for apidoc sv_bless
5310 Blesses an SV into a specified package. The SV must be an RV. The package
5311 must be designated by its stash (see C<gv_stashpv()>). The reference count
5312 of the SV is unaffected.
5318 Perl_sv_bless(pTHX_ SV *sv, HV *stash)
5323 Perl_croak(aTHX_ "Can't bless non-reference value");
5325 if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
5326 if (SvREADONLY(tmpRef))
5327 Perl_croak(aTHX_ PL_no_modify);
5328 if (SvOBJECT(tmpRef)) {
5329 if (SvTYPE(tmpRef) != SVt_PVIO)
5331 SvREFCNT_dec(SvSTASH(tmpRef));
5334 SvOBJECT_on(tmpRef);
5335 if (SvTYPE(tmpRef) != SVt_PVIO)
5337 (void)SvUPGRADE(tmpRef, SVt_PVMG);
5338 SvSTASH(tmpRef) = (HV*)SvREFCNT_inc(stash);
5349 S_sv_unglob(pTHX_ SV *sv)
5351 assert(SvTYPE(sv) == SVt_PVGV);
5356 SvREFCNT_dec(GvSTASH(sv));
5357 GvSTASH(sv) = Nullhv;
5359 sv_unmagic(sv, '*');
5360 Safefree(GvNAME(sv));
5362 SvFLAGS(sv) &= ~SVTYPEMASK;
5363 SvFLAGS(sv) |= SVt_PVMG;
5367 =for apidoc sv_unref
5369 Unsets the RV status of the SV, and decrements the reference count of
5370 whatever was being referenced by the RV. This can almost be thought of
5371 as a reversal of C<newSVrv>. See C<SvROK_off>.
5377 Perl_sv_unref(pTHX_ SV *sv)
5381 if (SvWEAKREF(sv)) {
5389 if (SvREFCNT(rv) != 1 || SvREADONLY(rv))
5392 sv_2mortal(rv); /* Schedule for freeing later */
5396 Perl_sv_taint(pTHX_ SV *sv)
5398 sv_magic((sv), Nullsv, 't', Nullch, 0);
5402 Perl_sv_untaint(pTHX_ SV *sv)
5404 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
5405 MAGIC *mg = mg_find(sv, 't');
5412 Perl_sv_tainted(pTHX_ SV *sv)
5414 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
5415 MAGIC *mg = mg_find(sv, 't');
5416 if (mg && ((mg->mg_len & 1) || (mg->mg_len & 2) && mg->mg_obj == sv))
5423 =for apidoc sv_setpviv
5425 Copies an integer into the given SV, also updating its string value.
5426 Does not handle 'set' magic. See C<sv_setpviv_mg>.
5432 Perl_sv_setpviv(pTHX_ SV *sv, IV iv)
5434 char buf[TYPE_CHARS(UV)];
5436 char *ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
5438 sv_setpvn(sv, ptr, ebuf - ptr);
5443 =for apidoc sv_setpviv_mg
5445 Like C<sv_setpviv>, but also handles 'set' magic.
5451 Perl_sv_setpviv_mg(pTHX_ SV *sv, IV iv)
5453 char buf[TYPE_CHARS(UV)];
5455 char *ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
5457 sv_setpvn(sv, ptr, ebuf - ptr);
5461 #if defined(PERL_IMPLICIT_CONTEXT)
5463 Perl_sv_setpvf_nocontext(SV *sv, const char* pat, ...)
5467 va_start(args, pat);
5468 sv_vsetpvf(sv, pat, &args);
5474 Perl_sv_setpvf_mg_nocontext(SV *sv, const char* pat, ...)
5478 va_start(args, pat);
5479 sv_vsetpvf_mg(sv, pat, &args);
5485 =for apidoc sv_setpvf
5487 Processes its arguments like C<sprintf> and sets an SV to the formatted
5488 output. Does not handle 'set' magic. See C<sv_setpvf_mg>.
5494 Perl_sv_setpvf(pTHX_ SV *sv, const char* pat, ...)
5497 va_start(args, pat);
5498 sv_vsetpvf(sv, pat, &args);
5503 Perl_sv_vsetpvf(pTHX_ SV *sv, const char* pat, va_list* args)
5505 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
5509 =for apidoc sv_setpvf_mg
5511 Like C<sv_setpvf>, but also handles 'set' magic.
5517 Perl_sv_setpvf_mg(pTHX_ SV *sv, const char* pat, ...)
5520 va_start(args, pat);
5521 sv_vsetpvf_mg(sv, pat, &args);
5526 Perl_sv_vsetpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
5528 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
5532 #if defined(PERL_IMPLICIT_CONTEXT)
5534 Perl_sv_catpvf_nocontext(SV *sv, const char* pat, ...)
5538 va_start(args, pat);
5539 sv_vcatpvf(sv, pat, &args);
5544 Perl_sv_catpvf_mg_nocontext(SV *sv, const char* pat, ...)
5548 va_start(args, pat);
5549 sv_vcatpvf_mg(sv, pat, &args);
5555 =for apidoc sv_catpvf
5557 Processes its arguments like C<sprintf> and appends the formatted output
5558 to an SV. Handles 'get' magic, but not 'set' magic. C<SvSETMAGIC()> must
5559 typically be called after calling this function to handle 'set' magic.
5565 Perl_sv_catpvf(pTHX_ SV *sv, const char* pat, ...)
5568 va_start(args, pat);
5569 sv_vcatpvf(sv, pat, &args);
5574 Perl_sv_vcatpvf(pTHX_ SV *sv, const char* pat, va_list* args)
5576 sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
5580 =for apidoc sv_catpvf_mg
5582 Like C<sv_catpvf>, but also handles 'set' magic.
5588 Perl_sv_catpvf_mg(pTHX_ SV *sv, const char* pat, ...)
5591 va_start(args, pat);
5592 sv_vcatpvf_mg(sv, pat, &args);
5597 Perl_sv_vcatpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
5599 sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
5604 =for apidoc sv_vsetpvfn
5606 Works like C<vcatpvfn> but copies the text into the SV instead of
5613 Perl_sv_vsetpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
5615 sv_setpvn(sv, "", 0);
5616 sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, maybe_tainted);
5620 =for apidoc sv_vcatpvfn
5622 Processes its arguments like C<vsprintf> and appends the formatted output
5623 to an SV. Uses an array of SVs if the C style variable argument list is
5624 missing (NULL). When running with taint checks enabled, indicates via
5625 C<maybe_tainted> if results are untrustworthy (often due to the use of
5632 Perl_sv_vcatpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
5640 static char nullstr[] = "(null)";
5643 /* no matter what, this is a string now */
5644 (void)SvPV_force(sv, origlen);
5646 /* special-case "", "%s", and "%_" */
5649 if (patlen == 2 && pat[0] == '%') {
5653 char *s = va_arg(*args, char*);
5654 sv_catpv(sv, s ? s : nullstr);
5656 else if (svix < svmax) {
5657 sv_catsv(sv, *svargs);
5658 if (DO_UTF8(*svargs))
5664 argsv = va_arg(*args, SV*);
5665 sv_catsv(sv, argsv);
5670 /* See comment on '_' below */
5675 patend = (char*)pat + patlen;
5676 for (p = (char*)pat; p < patend; p = q) {
5684 bool has_precis = FALSE;
5686 bool is_utf = FALSE;
5690 STRLEN esignlen = 0;
5692 char *eptr = Nullch;
5694 /* Times 4: a decimal digit takes more than 3 binary digits.
5695 * NV_DIG: mantissa takes than many decimal digits.
5696 * Plus 32: Playing safe. */
5697 char ebuf[IV_DIG * 4 + NV_DIG + 32];
5698 /* large enough for "%#.#f" --chip */
5699 /* what about long double NVs? --jhi */
5710 for (q = p; q < patend && *q != '%'; ++q) ;
5712 sv_catpvn(sv, p, q - p);
5750 case '1': case '2': case '3':
5751 case '4': case '5': case '6':
5752 case '7': case '8': case '9':
5755 width = width * 10 + (*q++ - '0');
5760 i = va_arg(*args, int);
5762 i = (svix < svmax) ? SvIVx(svargs[svix++]) : 0;
5764 width = (i < 0) ? -i : i;
5775 i = va_arg(*args, int);
5777 i = (svix < svmax) ? SvIVx(svargs[svix++]) : 0;
5778 precis = (i < 0) ? 0 : i;
5784 precis = precis * 10 + (*q++ - '0');
5801 if (*(q + 1) == 'l') { /* lld */
5828 uv = va_arg(*args, int);
5830 uv = (svix < svmax) ? SvIVx(svargs[svix++]) : 0;
5831 if (uv >= 128 && !IN_BYTE) {
5832 eptr = (char*)utf8buf;
5833 elen = uv_to_utf8((U8*)eptr, uv) - utf8buf;
5845 eptr = va_arg(*args, char*);
5847 #ifdef MACOS_TRADITIONAL
5848 /* On MacOS, %#s format is used for Pascal strings */
5853 elen = strlen(eptr);
5856 elen = sizeof nullstr - 1;
5859 else if (svix < svmax) {
5860 argsv = svargs[svix++];
5861 eptr = SvPVx(argsv, elen);
5862 if (DO_UTF8(argsv)) {
5863 if (has_precis && precis < elen) {
5865 sv_pos_u2b(argsv, &p, 0); /* sticks at end */
5868 if (width) { /* fudge width (can't fudge elen) */
5869 width += elen - sv_len_utf8(argsv);
5878 * The "%_" hack might have to be changed someday,
5879 * if ISO or ANSI decide to use '_' for something.
5880 * So we keep it hidden from users' code.
5884 argsv = va_arg(*args,SV*);
5885 eptr = SvPVx(argsv, elen);
5890 if (has_precis && elen > precis)
5898 uv = PTR2UV(va_arg(*args, void*));
5900 uv = (svix < svmax) ? PTR2UV(svargs[svix++]) : 0;
5915 case 'h': iv = (short)va_arg(*args, int); break;
5916 default: iv = va_arg(*args, int); break;
5917 case 'l': iv = va_arg(*args, long); break;
5918 case 'V': iv = va_arg(*args, IV); break;
5920 case 'q': iv = va_arg(*args, Quad_t); break;
5925 iv = (svix < svmax) ? SvIVx(svargs[svix++]) : 0;
5927 case 'h': iv = (short)iv; break;
5928 default: iv = (int)iv; break;
5929 case 'l': iv = (long)iv; break;
5932 case 'q': iv = (Quad_t)iv; break;
5939 esignbuf[esignlen++] = plus;
5943 esignbuf[esignlen++] = '-';
5981 case 'h': uv = (unsigned short)va_arg(*args, unsigned); break;
5982 default: uv = va_arg(*args, unsigned); break;
5983 case 'l': uv = va_arg(*args, unsigned long); break;
5984 case 'V': uv = va_arg(*args, UV); break;
5986 case 'q': uv = va_arg(*args, Quad_t); break;
5991 uv = (svix < svmax) ? SvUVx(svargs[svix++]) : 0;
5993 case 'h': uv = (unsigned short)uv; break;
5994 default: uv = (unsigned)uv; break;
5995 case 'l': uv = (unsigned long)uv; break;
5998 case 'q': uv = (Quad_t)uv; break;
6004 eptr = ebuf + sizeof ebuf;
6010 p = (char*)((c == 'X')
6011 ? "0123456789ABCDEF" : "0123456789abcdef");
6017 esignbuf[esignlen++] = '0';
6018 esignbuf[esignlen++] = c; /* 'x' or 'X' */
6024 *--eptr = '0' + dig;
6026 if (alt && *eptr != '0')
6032 *--eptr = '0' + dig;
6035 esignbuf[esignlen++] = '0';
6036 esignbuf[esignlen++] = 'b';
6039 default: /* it had better be ten or less */
6040 #if defined(PERL_Y2KWARN)
6041 if (ckWARN(WARN_MISC)) {
6043 char *s = SvPV(sv,n);
6044 if (n >= 2 && s[n-2] == '1' && s[n-1] == '9'
6045 && (n == 2 || !isDIGIT(s[n-3])))
6047 Perl_warner(aTHX_ WARN_MISC,
6048 "Possible Y2K bug: %%%c %s",
6049 c, "format string following '19'");
6055 *--eptr = '0' + dig;
6056 } while (uv /= base);
6059 elen = (ebuf + sizeof ebuf) - eptr;
6062 zeros = precis - elen;
6063 else if (precis == 0 && elen == 1 && *eptr == '0')
6068 /* FLOATING POINT */
6071 c = 'f'; /* maybe %F isn't supported here */
6077 /* This is evil, but floating point is even more evil */
6080 nv = va_arg(*args, NV);
6082 nv = (svix < svmax) ? SvNVx(svargs[svix++]) : 0.0;
6085 if (c != 'e' && c != 'E') {
6087 (void)frexp(nv, &i);
6088 if (i == PERL_INT_MIN)
6089 Perl_die(aTHX_ "panic: frexp");
6091 need = BIT_DIGITS(i);
6093 need += has_precis ? precis : 6; /* known default */
6097 need += 20; /* fudge factor */
6098 if (PL_efloatsize < need) {
6099 Safefree(PL_efloatbuf);
6100 PL_efloatsize = need + 20; /* more fudge */
6101 New(906, PL_efloatbuf, PL_efloatsize, char);
6102 PL_efloatbuf[0] = '\0';
6105 eptr = ebuf + sizeof ebuf;
6108 #ifdef USE_LONG_DOUBLE
6110 char* p = PERL_PRIfldbl + sizeof(PERL_PRIfldbl) - 3;
6111 while (p >= PERL_PRIfldbl) { *--eptr = *p--; }
6116 do { *--eptr = '0' + (base % 10); } while (base /= 10);
6121 do { *--eptr = '0' + (base % 10); } while (base /= 10);
6134 RESTORE_NUMERIC_STANDARD();
6135 (void)sprintf(PL_efloatbuf, eptr, nv);
6136 RESTORE_NUMERIC_LOCAL();
6139 eptr = PL_efloatbuf;
6140 elen = strlen(PL_efloatbuf);
6146 i = SvCUR(sv) - origlen;
6149 case 'h': *(va_arg(*args, short*)) = i; break;
6150 default: *(va_arg(*args, int*)) = i; break;
6151 case 'l': *(va_arg(*args, long*)) = i; break;
6152 case 'V': *(va_arg(*args, IV*)) = i; break;
6154 case 'q': *(va_arg(*args, Quad_t*)) = i; break;
6158 else if (svix < svmax)
6159 sv_setuv(svargs[svix++], (UV)i);
6160 continue; /* not "break" */
6166 if (!args && ckWARN(WARN_PRINTF) &&
6167 (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)) {
6168 SV *msg = sv_newmortal();
6169 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %s: ",
6170 (PL_op->op_type == OP_PRTF) ? "printf" : "sprintf");
6173 Perl_sv_catpvf(aTHX_ msg,
6174 "\"%%%c\"", c & 0xFF);
6176 Perl_sv_catpvf(aTHX_ msg,
6177 "\"%%\\%03"UVof"\"",
6180 sv_catpv(msg, "end of string");
6181 Perl_warner(aTHX_ WARN_PRINTF, "%"SVf, msg); /* yes, this is reentrant */
6184 /* output mangled stuff ... */
6190 /* ... right here, because formatting flags should not apply */
6191 SvGROW(sv, SvCUR(sv) + elen + 1);
6193 memcpy(p, eptr, elen);
6196 SvCUR(sv) = p - SvPVX(sv);
6197 continue; /* not "break" */
6200 have = esignlen + zeros + elen;
6201 need = (have > width ? have : width);
6204 SvGROW(sv, SvCUR(sv) + need + 1);
6206 if (esignlen && fill == '0') {
6207 for (i = 0; i < esignlen; i++)
6211 memset(p, fill, gap);
6214 if (esignlen && fill != '0') {
6215 for (i = 0; i < esignlen; i++)
6219 for (i = zeros; i; i--)
6223 memcpy(p, eptr, elen);
6227 memset(p, ' ', gap);
6233 SvCUR(sv) = p - SvPVX(sv);
6237 #if defined(USE_ITHREADS)
6239 #if defined(USE_THREADS)
6240 # include "error: USE_THREADS and USE_ITHREADS are incompatible"
6243 #ifndef OpREFCNT_inc
6244 # define OpREFCNT_inc(o) ((o) ? (++(o)->op_targ, (o)) : Nullop)
6247 #ifndef GpREFCNT_inc
6248 # define GpREFCNT_inc(gp) ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
6252 #define sv_dup_inc(s) SvREFCNT_inc(sv_dup(s))
6253 #define av_dup(s) (AV*)sv_dup((SV*)s)
6254 #define av_dup_inc(s) (AV*)SvREFCNT_inc(sv_dup((SV*)s))
6255 #define hv_dup(s) (HV*)sv_dup((SV*)s)
6256 #define hv_dup_inc(s) (HV*)SvREFCNT_inc(sv_dup((SV*)s))
6257 #define cv_dup(s) (CV*)sv_dup((SV*)s)
6258 #define cv_dup_inc(s) (CV*)SvREFCNT_inc(sv_dup((SV*)s))
6259 #define io_dup(s) (IO*)sv_dup((SV*)s)
6260 #define io_dup_inc(s) (IO*)SvREFCNT_inc(sv_dup((SV*)s))
6261 #define gv_dup(s) (GV*)sv_dup((SV*)s)
6262 #define gv_dup_inc(s) (GV*)SvREFCNT_inc(sv_dup((SV*)s))
6263 #define SAVEPV(p) (p ? savepv(p) : Nullch)
6264 #define SAVEPVN(p,n) (p ? savepvn(p,n) : Nullch)
6267 Perl_re_dup(pTHX_ REGEXP *r)
6269 /* XXX fix when pmop->op_pmregexp becomes shared */
6270 return ReREFCNT_inc(r);
6274 Perl_fp_dup(pTHX_ PerlIO *fp, char type)
6278 return (PerlIO*)NULL;
6280 /* look for it in the table first */
6281 ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
6285 /* create anew and remember what it is */
6286 ret = PerlIO_fdupopen(fp);
6287 ptr_table_store(PL_ptr_table, fp, ret);
6292 Perl_dirp_dup(pTHX_ DIR *dp)
6301 Perl_gp_dup(pTHX_ GP *gp)
6306 /* look for it in the table first */
6307 ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
6311 /* create anew and remember what it is */
6312 Newz(0, ret, 1, GP);
6313 ptr_table_store(PL_ptr_table, gp, ret);
6316 ret->gp_refcnt = 0; /* must be before any other dups! */
6317 ret->gp_sv = sv_dup_inc(gp->gp_sv);
6318 ret->gp_io = io_dup_inc(gp->gp_io);
6319 ret->gp_form = cv_dup_inc(gp->gp_form);
6320 ret->gp_av = av_dup_inc(gp->gp_av);
6321 ret->gp_hv = hv_dup_inc(gp->gp_hv);
6322 ret->gp_egv = gv_dup(gp->gp_egv); /* GvEGV is not refcounted */
6323 ret->gp_cv = cv_dup_inc(gp->gp_cv);
6324 ret->gp_cvgen = gp->gp_cvgen;
6325 ret->gp_flags = gp->gp_flags;
6326 ret->gp_line = gp->gp_line;
6327 ret->gp_file = gp->gp_file; /* points to COP.cop_file */
6332 Perl_mg_dup(pTHX_ MAGIC *mg)
6334 MAGIC *mgret = (MAGIC*)NULL;
6337 return (MAGIC*)NULL;
6338 /* look for it in the table first */
6339 mgret = (MAGIC*)ptr_table_fetch(PL_ptr_table, mg);
6343 for (; mg; mg = mg->mg_moremagic) {
6345 Newz(0, nmg, 1, MAGIC);
6349 mgprev->mg_moremagic = nmg;
6350 nmg->mg_virtual = mg->mg_virtual; /* XXX copy dynamic vtable? */
6351 nmg->mg_private = mg->mg_private;
6352 nmg->mg_type = mg->mg_type;
6353 nmg->mg_flags = mg->mg_flags;
6354 if (mg->mg_type == 'r') {
6355 nmg->mg_obj = (SV*)re_dup((REGEXP*)mg->mg_obj);
6358 nmg->mg_obj = (mg->mg_flags & MGf_REFCOUNTED)
6359 ? sv_dup_inc(mg->mg_obj)
6360 : sv_dup(mg->mg_obj);
6362 nmg->mg_len = mg->mg_len;
6363 nmg->mg_ptr = mg->mg_ptr; /* XXX random ptr? */
6364 if (mg->mg_ptr && mg->mg_type != 'g') {
6365 if (mg->mg_len >= 0) {
6366 nmg->mg_ptr = SAVEPVN(mg->mg_ptr, mg->mg_len);
6367 if (mg->mg_type == 'c' && AMT_AMAGIC((AMT*)mg->mg_ptr)) {
6368 AMT *amtp = (AMT*)mg->mg_ptr;
6369 AMT *namtp = (AMT*)nmg->mg_ptr;
6371 for (i = 1; i < NofAMmeth; i++) {
6372 namtp->table[i] = cv_dup_inc(amtp->table[i]);
6376 else if (mg->mg_len == HEf_SVKEY)
6377 nmg->mg_ptr = (char*)sv_dup_inc((SV*)mg->mg_ptr);
6385 Perl_ptr_table_new(pTHX)
6388 Newz(0, tbl, 1, PTR_TBL_t);
6391 Newz(0, tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
6396 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *tbl, void *sv)
6398 PTR_TBL_ENT_t *tblent;
6401 tblent = tbl->tbl_ary[hash & tbl->tbl_max];
6402 for (; tblent; tblent = tblent->next) {
6403 if (tblent->oldval == sv)
6404 return tblent->newval;
6410 Perl_ptr_table_store(pTHX_ PTR_TBL_t *tbl, void *oldv, void *newv)
6412 PTR_TBL_ENT_t *tblent, **otblent;
6413 /* XXX this may be pessimal on platforms where pointers aren't good
6414 * hash values e.g. if they grow faster in the most significant
6420 otblent = &tbl->tbl_ary[hash & tbl->tbl_max];
6421 for (tblent = *otblent; tblent; i=0, tblent = tblent->next) {
6422 if (tblent->oldval == oldv) {
6423 tblent->newval = newv;
6428 Newz(0, tblent, 1, PTR_TBL_ENT_t);
6429 tblent->oldval = oldv;
6430 tblent->newval = newv;
6431 tblent->next = *otblent;
6434 if (i && tbl->tbl_items > tbl->tbl_max)
6435 ptr_table_split(tbl);
6439 Perl_ptr_table_split(pTHX_ PTR_TBL_t *tbl)
6441 PTR_TBL_ENT_t **ary = tbl->tbl_ary;
6442 UV oldsize = tbl->tbl_max + 1;
6443 UV newsize = oldsize * 2;
6446 Renew(ary, newsize, PTR_TBL_ENT_t*);
6447 Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
6448 tbl->tbl_max = --newsize;
6450 for (i=0; i < oldsize; i++, ary++) {
6451 PTR_TBL_ENT_t **curentp, **entp, *ent;
6454 curentp = ary + oldsize;
6455 for (entp = ary, ent = *ary; ent; ent = *entp) {
6456 if ((newsize & (UV)ent->oldval) != i) {
6458 ent->next = *curentp;
6473 Perl_sv_dup(pTHX_ SV *sstr)
6480 if (!sstr || SvTYPE(sstr) == SVTYPEMASK)
6482 /* look for it in the table first */
6483 dstr = (SV*)ptr_table_fetch(PL_ptr_table, sstr);
6487 /* create anew and remember what it is */
6489 ptr_table_store(PL_ptr_table, sstr, dstr);
6492 SvFLAGS(dstr) = SvFLAGS(sstr);
6493 SvFLAGS(dstr) &= ~SVf_OOK; /* don't propagate OOK hack */
6494 SvREFCNT(dstr) = 0; /* must be before any other dups! */
6497 if (SvANY(sstr) && PL_watch_pvx && SvPVX(sstr) == PL_watch_pvx)
6498 PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
6499 PL_watch_pvx, SvPVX(sstr));
6502 switch (SvTYPE(sstr)) {
6507 SvANY(dstr) = new_XIV();
6508 SvIVX(dstr) = SvIVX(sstr);
6511 SvANY(dstr) = new_XNV();
6512 SvNVX(dstr) = SvNVX(sstr);
6515 SvANY(dstr) = new_XRV();
6516 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
6519 SvANY(dstr) = new_XPV();
6520 SvCUR(dstr) = SvCUR(sstr);
6521 SvLEN(dstr) = SvLEN(sstr);
6523 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
6524 else if (SvPVX(sstr) && SvLEN(sstr))
6525 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
6527 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
6530 SvANY(dstr) = new_XPVIV();
6531 SvCUR(dstr) = SvCUR(sstr);
6532 SvLEN(dstr) = SvLEN(sstr);
6533 SvIVX(dstr) = SvIVX(sstr);
6535 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
6536 else if (SvPVX(sstr) && SvLEN(sstr))
6537 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
6539 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
6542 SvANY(dstr) = new_XPVNV();
6543 SvCUR(dstr) = SvCUR(sstr);
6544 SvLEN(dstr) = SvLEN(sstr);
6545 SvIVX(dstr) = SvIVX(sstr);
6546 SvNVX(dstr) = SvNVX(sstr);
6548 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
6549 else if (SvPVX(sstr) && SvLEN(sstr))
6550 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
6552 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
6555 SvANY(dstr) = new_XPVMG();
6556 SvCUR(dstr) = SvCUR(sstr);
6557 SvLEN(dstr) = SvLEN(sstr);
6558 SvIVX(dstr) = SvIVX(sstr);
6559 SvNVX(dstr) = SvNVX(sstr);
6560 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
6561 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
6563 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
6564 else if (SvPVX(sstr) && SvLEN(sstr))
6565 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
6567 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
6570 SvANY(dstr) = new_XPVBM();
6571 SvCUR(dstr) = SvCUR(sstr);
6572 SvLEN(dstr) = SvLEN(sstr);
6573 SvIVX(dstr) = SvIVX(sstr);
6574 SvNVX(dstr) = SvNVX(sstr);
6575 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
6576 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
6578 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
6579 else if (SvPVX(sstr) && SvLEN(sstr))
6580 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
6582 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
6583 BmRARE(dstr) = BmRARE(sstr);
6584 BmUSEFUL(dstr) = BmUSEFUL(sstr);
6585 BmPREVIOUS(dstr)= BmPREVIOUS(sstr);
6588 SvANY(dstr) = new_XPVLV();
6589 SvCUR(dstr) = SvCUR(sstr);
6590 SvLEN(dstr) = SvLEN(sstr);
6591 SvIVX(dstr) = SvIVX(sstr);
6592 SvNVX(dstr) = SvNVX(sstr);
6593 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
6594 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
6596 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
6597 else if (SvPVX(sstr) && SvLEN(sstr))
6598 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
6600 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
6601 LvTARGOFF(dstr) = LvTARGOFF(sstr); /* XXX sometimes holds PMOP* when DEBUGGING */
6602 LvTARGLEN(dstr) = LvTARGLEN(sstr);
6603 LvTARG(dstr) = sv_dup_inc(LvTARG(sstr));
6604 LvTYPE(dstr) = LvTYPE(sstr);
6607 SvANY(dstr) = new_XPVGV();
6608 SvCUR(dstr) = SvCUR(sstr);
6609 SvLEN(dstr) = SvLEN(sstr);
6610 SvIVX(dstr) = SvIVX(sstr);
6611 SvNVX(dstr) = SvNVX(sstr);
6612 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
6613 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
6615 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
6616 else if (SvPVX(sstr) && SvLEN(sstr))
6617 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
6619 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
6620 GvNAMELEN(dstr) = GvNAMELEN(sstr);
6621 GvNAME(dstr) = SAVEPVN(GvNAME(sstr), GvNAMELEN(sstr));
6622 GvSTASH(dstr) = hv_dup_inc(GvSTASH(sstr));
6623 GvFLAGS(dstr) = GvFLAGS(sstr);
6624 GvGP(dstr) = gp_dup(GvGP(sstr));
6625 (void)GpREFCNT_inc(GvGP(dstr));
6628 SvANY(dstr) = new_XPVIO();
6629 SvCUR(dstr) = SvCUR(sstr);
6630 SvLEN(dstr) = SvLEN(sstr);
6631 SvIVX(dstr) = SvIVX(sstr);
6632 SvNVX(dstr) = SvNVX(sstr);
6633 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
6634 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
6636 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
6637 else if (SvPVX(sstr) && SvLEN(sstr))
6638 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
6640 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
6641 IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(sstr));
6642 if (IoOFP(sstr) == IoIFP(sstr))
6643 IoOFP(dstr) = IoIFP(dstr);
6645 IoOFP(dstr) = fp_dup(IoOFP(sstr), IoTYPE(sstr));
6646 /* PL_rsfp_filters entries have fake IoDIRP() */
6647 if (IoDIRP(sstr) && !(IoFLAGS(sstr) & IOf_FAKE_DIRP))
6648 IoDIRP(dstr) = dirp_dup(IoDIRP(sstr));
6650 IoDIRP(dstr) = IoDIRP(sstr);
6651 IoLINES(dstr) = IoLINES(sstr);
6652 IoPAGE(dstr) = IoPAGE(sstr);
6653 IoPAGE_LEN(dstr) = IoPAGE_LEN(sstr);
6654 IoLINES_LEFT(dstr) = IoLINES_LEFT(sstr);
6655 IoTOP_NAME(dstr) = SAVEPV(IoTOP_NAME(sstr));
6656 IoTOP_GV(dstr) = gv_dup(IoTOP_GV(sstr));
6657 IoFMT_NAME(dstr) = SAVEPV(IoFMT_NAME(sstr));
6658 IoFMT_GV(dstr) = gv_dup(IoFMT_GV(sstr));
6659 IoBOTTOM_NAME(dstr) = SAVEPV(IoBOTTOM_NAME(sstr));
6660 IoBOTTOM_GV(dstr) = gv_dup(IoBOTTOM_GV(sstr));
6661 IoSUBPROCESS(dstr) = IoSUBPROCESS(sstr);
6662 IoTYPE(dstr) = IoTYPE(sstr);
6663 IoFLAGS(dstr) = IoFLAGS(sstr);
6666 SvANY(dstr) = new_XPVAV();
6667 SvCUR(dstr) = SvCUR(sstr);
6668 SvLEN(dstr) = SvLEN(sstr);
6669 SvIVX(dstr) = SvIVX(sstr);
6670 SvNVX(dstr) = SvNVX(sstr);
6671 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
6672 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
6673 AvARYLEN((AV*)dstr) = sv_dup_inc(AvARYLEN((AV*)sstr));
6674 AvFLAGS((AV*)dstr) = AvFLAGS((AV*)sstr);
6675 if (AvARRAY((AV*)sstr)) {
6676 SV **dst_ary, **src_ary;
6677 SSize_t items = AvFILLp((AV*)sstr) + 1;
6679 src_ary = AvARRAY((AV*)sstr);
6680 Newz(0, dst_ary, AvMAX((AV*)sstr)+1, SV*);
6681 ptr_table_store(PL_ptr_table, src_ary, dst_ary);
6682 SvPVX(dstr) = (char*)dst_ary;
6683 AvALLOC((AV*)dstr) = dst_ary;
6684 if (AvREAL((AV*)sstr)) {
6686 *dst_ary++ = sv_dup_inc(*src_ary++);
6690 *dst_ary++ = sv_dup(*src_ary++);
6692 items = AvMAX((AV*)sstr) - AvFILLp((AV*)sstr);
6693 while (items-- > 0) {
6694 *dst_ary++ = &PL_sv_undef;
6698 SvPVX(dstr) = Nullch;
6699 AvALLOC((AV*)dstr) = (SV**)NULL;
6703 SvANY(dstr) = new_XPVHV();
6704 SvCUR(dstr) = SvCUR(sstr);
6705 SvLEN(dstr) = SvLEN(sstr);
6706 SvIVX(dstr) = SvIVX(sstr);
6707 SvNVX(dstr) = SvNVX(sstr);
6708 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
6709 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
6710 HvRITER((HV*)dstr) = HvRITER((HV*)sstr);
6711 if (HvARRAY((HV*)sstr)) {
6714 XPVHV *dxhv = (XPVHV*)SvANY(dstr);
6715 XPVHV *sxhv = (XPVHV*)SvANY(sstr);
6716 Newz(0, dxhv->xhv_array,
6717 PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1), char);
6718 while (i <= sxhv->xhv_max) {
6719 ((HE**)dxhv->xhv_array)[i] = he_dup(((HE**)sxhv->xhv_array)[i],
6720 !!HvSHAREKEYS(sstr));
6723 dxhv->xhv_eiter = he_dup(sxhv->xhv_eiter, !!HvSHAREKEYS(sstr));
6726 SvPVX(dstr) = Nullch;
6727 HvEITER((HV*)dstr) = (HE*)NULL;
6729 HvPMROOT((HV*)dstr) = HvPMROOT((HV*)sstr); /* XXX */
6730 HvNAME((HV*)dstr) = SAVEPV(HvNAME((HV*)sstr));
6733 SvANY(dstr) = new_XPVFM();
6734 FmLINES(dstr) = FmLINES(sstr);
6738 SvANY(dstr) = new_XPVCV();
6740 SvCUR(dstr) = SvCUR(sstr);
6741 SvLEN(dstr) = SvLEN(sstr);
6742 SvIVX(dstr) = SvIVX(sstr);
6743 SvNVX(dstr) = SvNVX(sstr);
6744 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
6745 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
6746 if (SvPVX(sstr) && SvLEN(sstr))
6747 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
6749 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
6750 CvSTASH(dstr) = hv_dup(CvSTASH(sstr));/* NOTE: not refcounted */
6751 CvSTART(dstr) = CvSTART(sstr);
6752 CvROOT(dstr) = OpREFCNT_inc(CvROOT(sstr));
6753 CvXSUB(dstr) = CvXSUB(sstr);
6754 CvXSUBANY(dstr) = CvXSUBANY(sstr);
6755 CvGV(dstr) = gv_dup_inc(CvGV(sstr));
6756 CvDEPTH(dstr) = CvDEPTH(sstr);
6757 if (CvPADLIST(sstr) && !AvREAL(CvPADLIST(sstr))) {
6758 /* XXX padlists are real, but pretend to be not */
6759 AvREAL_on(CvPADLIST(sstr));
6760 CvPADLIST(dstr) = av_dup_inc(CvPADLIST(sstr));
6761 AvREAL_off(CvPADLIST(sstr));
6762 AvREAL_off(CvPADLIST(dstr));
6765 CvPADLIST(dstr) = av_dup_inc(CvPADLIST(sstr));
6766 CvOUTSIDE(dstr) = cv_dup_inc(CvOUTSIDE(sstr));
6767 CvFLAGS(dstr) = CvFLAGS(sstr);
6770 Perl_croak(aTHX_ "Bizarre SvTYPE [%d]", SvTYPE(sstr));
6774 if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
6781 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max)
6786 return (PERL_CONTEXT*)NULL;
6788 /* look for it in the table first */
6789 ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
6793 /* create anew and remember what it is */
6794 Newz(56, ncxs, max + 1, PERL_CONTEXT);
6795 ptr_table_store(PL_ptr_table, cxs, ncxs);
6798 PERL_CONTEXT *cx = &cxs[ix];
6799 PERL_CONTEXT *ncx = &ncxs[ix];
6800 ncx->cx_type = cx->cx_type;
6801 if (CxTYPE(cx) == CXt_SUBST) {
6802 Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
6805 ncx->blk_oldsp = cx->blk_oldsp;
6806 ncx->blk_oldcop = cx->blk_oldcop;
6807 ncx->blk_oldretsp = cx->blk_oldretsp;
6808 ncx->blk_oldmarksp = cx->blk_oldmarksp;
6809 ncx->blk_oldscopesp = cx->blk_oldscopesp;
6810 ncx->blk_oldpm = cx->blk_oldpm;
6811 ncx->blk_gimme = cx->blk_gimme;
6812 switch (CxTYPE(cx)) {
6814 ncx->blk_sub.cv = (cx->blk_sub.olddepth == 0
6815 ? cv_dup_inc(cx->blk_sub.cv)
6816 : cv_dup(cx->blk_sub.cv));
6817 ncx->blk_sub.argarray = (cx->blk_sub.hasargs
6818 ? av_dup_inc(cx->blk_sub.argarray)
6820 ncx->blk_sub.savearray = av_dup(cx->blk_sub.savearray);
6821 ncx->blk_sub.olddepth = cx->blk_sub.olddepth;
6822 ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
6823 ncx->blk_sub.lval = cx->blk_sub.lval;
6826 ncx->blk_eval.old_in_eval = cx->blk_eval.old_in_eval;
6827 ncx->blk_eval.old_op_type = cx->blk_eval.old_op_type;
6828 ncx->blk_eval.old_name = SAVEPV(cx->blk_eval.old_name);
6829 ncx->blk_eval.old_eval_root = cx->blk_eval.old_eval_root;
6830 ncx->blk_eval.cur_text = sv_dup(cx->blk_eval.cur_text);
6833 ncx->blk_loop.label = cx->blk_loop.label;
6834 ncx->blk_loop.resetsp = cx->blk_loop.resetsp;
6835 ncx->blk_loop.redo_op = cx->blk_loop.redo_op;
6836 ncx->blk_loop.next_op = cx->blk_loop.next_op;
6837 ncx->blk_loop.last_op = cx->blk_loop.last_op;
6838 ncx->blk_loop.iterdata = (CxPADLOOP(cx)
6839 ? cx->blk_loop.iterdata
6840 : gv_dup((GV*)cx->blk_loop.iterdata));
6841 ncx->blk_loop.itersave = sv_dup_inc(cx->blk_loop.itersave);
6842 ncx->blk_loop.iterlval = sv_dup_inc(cx->blk_loop.iterlval);
6843 ncx->blk_loop.iterary = av_dup_inc(cx->blk_loop.iterary);
6844 ncx->blk_loop.iterix = cx->blk_loop.iterix;
6845 ncx->blk_loop.itermax = cx->blk_loop.itermax;
6848 ncx->blk_sub.cv = cv_dup(cx->blk_sub.cv);
6849 ncx->blk_sub.gv = gv_dup(cx->blk_sub.gv);
6850 ncx->blk_sub.dfoutgv = gv_dup_inc(cx->blk_sub.dfoutgv);
6851 ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
6864 Perl_si_dup(pTHX_ PERL_SI *si)
6869 return (PERL_SI*)NULL;
6871 /* look for it in the table first */
6872 nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
6876 /* create anew and remember what it is */
6877 Newz(56, nsi, 1, PERL_SI);
6878 ptr_table_store(PL_ptr_table, si, nsi);
6880 nsi->si_stack = av_dup_inc(si->si_stack);
6881 nsi->si_cxix = si->si_cxix;
6882 nsi->si_cxmax = si->si_cxmax;
6883 nsi->si_cxstack = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax);
6884 nsi->si_type = si->si_type;
6885 nsi->si_prev = si_dup(si->si_prev);
6886 nsi->si_next = si_dup(si->si_next);
6887 nsi->si_markoff = si->si_markoff;
6892 #define POPINT(ss,ix) ((ss)[--(ix)].any_i32)
6893 #define TOPINT(ss,ix) ((ss)[ix].any_i32)
6894 #define POPLONG(ss,ix) ((ss)[--(ix)].any_long)
6895 #define TOPLONG(ss,ix) ((ss)[ix].any_long)
6896 #define POPIV(ss,ix) ((ss)[--(ix)].any_iv)
6897 #define TOPIV(ss,ix) ((ss)[ix].any_iv)
6898 #define POPPTR(ss,ix) ((ss)[--(ix)].any_ptr)
6899 #define TOPPTR(ss,ix) ((ss)[ix].any_ptr)
6900 #define POPDPTR(ss,ix) ((ss)[--(ix)].any_dptr)
6901 #define TOPDPTR(ss,ix) ((ss)[ix].any_dptr)
6902 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
6903 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
6906 #define pv_dup_inc(p) SAVEPV(p)
6907 #define pv_dup(p) SAVEPV(p)
6908 #define svp_dup_inc(p,pp) any_dup(p,pp)
6911 Perl_any_dup(pTHX_ void *v, PerlInterpreter *proto_perl)
6918 /* look for it in the table first */
6919 ret = ptr_table_fetch(PL_ptr_table, v);
6923 /* see if it is part of the interpreter structure */
6924 if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
6925 ret = (void*)(((char*)aTHXo) + (((char*)v) - (char*)proto_perl));
6933 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl)
6935 ANY *ss = proto_perl->Tsavestack;
6936 I32 ix = proto_perl->Tsavestack_ix;
6937 I32 max = proto_perl->Tsavestack_max;
6950 void (*dptr) (void*);
6951 void (*dxptr) (pTHXo_ void*);
6953 Newz(54, nss, max, ANY);
6959 case SAVEt_ITEM: /* normal string */
6960 sv = (SV*)POPPTR(ss,ix);
6961 TOPPTR(nss,ix) = sv_dup_inc(sv);
6962 sv = (SV*)POPPTR(ss,ix);
6963 TOPPTR(nss,ix) = sv_dup_inc(sv);
6965 case SAVEt_SV: /* scalar reference */
6966 sv = (SV*)POPPTR(ss,ix);
6967 TOPPTR(nss,ix) = sv_dup_inc(sv);
6968 gv = (GV*)POPPTR(ss,ix);
6969 TOPPTR(nss,ix) = gv_dup_inc(gv);
6971 case SAVEt_GENERIC_SVREF: /* generic sv */
6972 case SAVEt_SVREF: /* scalar reference */
6973 sv = (SV*)POPPTR(ss,ix);
6974 TOPPTR(nss,ix) = sv_dup_inc(sv);
6975 ptr = POPPTR(ss,ix);
6976 TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
6978 case SAVEt_AV: /* array reference */
6979 av = (AV*)POPPTR(ss,ix);
6980 TOPPTR(nss,ix) = av_dup_inc(av);
6981 gv = (GV*)POPPTR(ss,ix);
6982 TOPPTR(nss,ix) = gv_dup(gv);
6984 case SAVEt_HV: /* hash reference */
6985 hv = (HV*)POPPTR(ss,ix);
6986 TOPPTR(nss,ix) = hv_dup_inc(hv);
6987 gv = (GV*)POPPTR(ss,ix);
6988 TOPPTR(nss,ix) = gv_dup(gv);
6990 case SAVEt_INT: /* int reference */
6991 ptr = POPPTR(ss,ix);
6992 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
6993 intval = (int)POPINT(ss,ix);
6994 TOPINT(nss,ix) = intval;
6996 case SAVEt_LONG: /* long reference */
6997 ptr = POPPTR(ss,ix);
6998 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
6999 longval = (long)POPLONG(ss,ix);
7000 TOPLONG(nss,ix) = longval;
7002 case SAVEt_I32: /* I32 reference */
7003 case SAVEt_I16: /* I16 reference */
7004 case SAVEt_I8: /* I8 reference */
7005 ptr = POPPTR(ss,ix);
7006 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
7010 case SAVEt_IV: /* IV reference */
7011 ptr = POPPTR(ss,ix);
7012 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
7016 case SAVEt_SPTR: /* SV* reference */
7017 ptr = POPPTR(ss,ix);
7018 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
7019 sv = (SV*)POPPTR(ss,ix);
7020 TOPPTR(nss,ix) = sv_dup(sv);
7022 case SAVEt_VPTR: /* random* reference */
7023 ptr = POPPTR(ss,ix);
7024 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
7025 ptr = POPPTR(ss,ix);
7026 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
7028 case SAVEt_PPTR: /* char* reference */
7029 ptr = POPPTR(ss,ix);
7030 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
7031 c = (char*)POPPTR(ss,ix);
7032 TOPPTR(nss,ix) = pv_dup(c);
7034 case SAVEt_HPTR: /* HV* reference */
7035 ptr = POPPTR(ss,ix);
7036 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
7037 hv = (HV*)POPPTR(ss,ix);
7038 TOPPTR(nss,ix) = hv_dup(hv);
7040 case SAVEt_APTR: /* AV* reference */
7041 ptr = POPPTR(ss,ix);
7042 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
7043 av = (AV*)POPPTR(ss,ix);
7044 TOPPTR(nss,ix) = av_dup(av);
7047 gv = (GV*)POPPTR(ss,ix);
7048 TOPPTR(nss,ix) = gv_dup(gv);
7050 case SAVEt_GP: /* scalar reference */
7051 gp = (GP*)POPPTR(ss,ix);
7052 TOPPTR(nss,ix) = gp = gp_dup(gp);
7053 (void)GpREFCNT_inc(gp);
7054 gv = (GV*)POPPTR(ss,ix);
7055 TOPPTR(nss,ix) = gv_dup_inc(c);
7056 c = (char*)POPPTR(ss,ix);
7057 TOPPTR(nss,ix) = pv_dup(c);
7064 sv = (SV*)POPPTR(ss,ix);
7065 TOPPTR(nss,ix) = sv_dup_inc(sv);
7068 ptr = POPPTR(ss,ix);
7069 if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
7070 /* these are assumed to be refcounted properly */
7071 switch (((OP*)ptr)->op_type) {
7078 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
7081 TOPPTR(nss,ix) = Nullop;
7086 TOPPTR(nss,ix) = Nullop;
7089 c = (char*)POPPTR(ss,ix);
7090 TOPPTR(nss,ix) = pv_dup_inc(c);
7093 longval = POPLONG(ss,ix);
7094 TOPLONG(nss,ix) = longval;
7097 hv = (HV*)POPPTR(ss,ix);
7098 TOPPTR(nss,ix) = hv_dup_inc(hv);
7099 c = (char*)POPPTR(ss,ix);
7100 TOPPTR(nss,ix) = pv_dup_inc(c);
7104 case SAVEt_DESTRUCTOR:
7105 ptr = POPPTR(ss,ix);
7106 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
7107 dptr = POPDPTR(ss,ix);
7108 TOPDPTR(nss,ix) = (void (*)(void*))any_dup(dptr, proto_perl);
7110 case SAVEt_DESTRUCTOR_X:
7111 ptr = POPPTR(ss,ix);
7112 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
7113 dxptr = POPDXPTR(ss,ix);
7114 TOPDXPTR(nss,ix) = (void (*)(pTHXo_ void*))any_dup(dxptr, proto_perl);
7116 case SAVEt_REGCONTEXT:
7122 case SAVEt_STACK_POS: /* Position on Perl stack */
7126 case SAVEt_AELEM: /* array element */
7127 sv = (SV*)POPPTR(ss,ix);
7128 TOPPTR(nss,ix) = sv_dup_inc(sv);
7131 av = (AV*)POPPTR(ss,ix);
7132 TOPPTR(nss,ix) = av_dup_inc(av);
7134 case SAVEt_HELEM: /* hash element */
7135 sv = (SV*)POPPTR(ss,ix);
7136 TOPPTR(nss,ix) = sv_dup_inc(sv);
7137 sv = (SV*)POPPTR(ss,ix);
7138 TOPPTR(nss,ix) = sv_dup_inc(sv);
7139 hv = (HV*)POPPTR(ss,ix);
7140 TOPPTR(nss,ix) = hv_dup_inc(hv);
7143 ptr = POPPTR(ss,ix);
7144 TOPPTR(nss,ix) = ptr;
7151 Perl_croak(aTHX_ "panic: ss_dup inconsistency");
7163 perl_clone(PerlInterpreter *proto_perl, UV flags)
7166 CPerlObj *pPerl = (CPerlObj*)proto_perl;
7169 #ifdef PERL_IMPLICIT_SYS
7170 return perl_clone_using(proto_perl, flags,
7172 proto_perl->IMemShared,
7173 proto_perl->IMemParse,
7183 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
7184 struct IPerlMem* ipM, struct IPerlMem* ipMS,
7185 struct IPerlMem* ipMP, struct IPerlEnv* ipE,
7186 struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
7187 struct IPerlDir* ipD, struct IPerlSock* ipS,
7188 struct IPerlProc* ipP)
7190 /* XXX many of the string copies here can be optimized if they're
7191 * constants; they need to be allocated as common memory and just
7192 * their pointers copied. */
7198 CPerlObj *pPerl = new(ipM) CPerlObj(ipM, ipMS, ipMP, ipE, ipStd, ipLIO,
7200 PERL_SET_INTERP(pPerl);
7201 # else /* !PERL_OBJECT */
7202 PerlInterpreter *my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
7203 PERL_SET_INTERP(my_perl);
7206 memset(my_perl, 0xab, sizeof(PerlInterpreter));
7211 # else /* !DEBUGGING */
7212 Zero(my_perl, 1, PerlInterpreter);
7213 # endif /* DEBUGGING */
7217 PL_MemShared = ipMS;
7225 # endif /* PERL_OBJECT */
7226 #else /* !PERL_IMPLICIT_SYS */
7230 PerlInterpreter *my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
7231 PERL_SET_INTERP(my_perl);
7234 memset(my_perl, 0xab, sizeof(PerlInterpreter));
7239 # else /* !DEBUGGING */
7240 Zero(my_perl, 1, PerlInterpreter);
7241 # endif /* DEBUGGING */
7242 #endif /* PERL_IMPLICIT_SYS */
7245 PL_xiv_arenaroot = NULL;
7250 PL_xpviv_root = NULL;
7251 PL_xpvnv_root = NULL;
7252 PL_xpvcv_root = NULL;
7253 PL_xpvav_root = NULL;
7254 PL_xpvhv_root = NULL;
7255 PL_xpvmg_root = NULL;
7256 PL_xpvlv_root = NULL;
7257 PL_xpvbm_root = NULL;
7259 PL_nice_chunk = NULL;
7260 PL_nice_chunk_size = 0;
7263 PL_sv_root = Nullsv;
7264 PL_sv_arenaroot = Nullsv;
7266 PL_debug = proto_perl->Idebug;
7268 /* create SV map for pointer relocation */
7269 PL_ptr_table = ptr_table_new();
7271 /* initialize these special pointers as early as possible */
7272 SvANY(&PL_sv_undef) = NULL;
7273 SvREFCNT(&PL_sv_undef) = (~(U32)0)/2;
7274 SvFLAGS(&PL_sv_undef) = SVf_READONLY|SVt_NULL;
7275 ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
7278 SvUPGRADE(&PL_sv_no, SVt_PVNV);
7280 SvANY(&PL_sv_no) = new_XPVNV();
7282 SvREFCNT(&PL_sv_no) = (~(U32)0)/2;
7283 SvFLAGS(&PL_sv_no) = SVp_NOK|SVf_NOK|SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
7284 SvPVX(&PL_sv_no) = SAVEPVN(PL_No, 0);
7285 SvCUR(&PL_sv_no) = 0;
7286 SvLEN(&PL_sv_no) = 1;
7287 SvNVX(&PL_sv_no) = 0;
7288 ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
7291 SvUPGRADE(&PL_sv_yes, SVt_PVNV);
7293 SvANY(&PL_sv_yes) = new_XPVNV();
7295 SvREFCNT(&PL_sv_yes) = (~(U32)0)/2;
7296 SvFLAGS(&PL_sv_yes) = SVp_NOK|SVf_NOK|SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
7297 SvPVX(&PL_sv_yes) = SAVEPVN(PL_Yes, 1);
7298 SvCUR(&PL_sv_yes) = 1;
7299 SvLEN(&PL_sv_yes) = 2;
7300 SvNVX(&PL_sv_yes) = 1;
7301 ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
7303 /* create shared string table */
7304 PL_strtab = newHV();
7305 HvSHAREKEYS_off(PL_strtab);
7306 hv_ksplit(PL_strtab, 512);
7307 ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
7309 PL_compiling = proto_perl->Icompiling;
7310 PL_compiling.cop_stashpv = SAVEPV(PL_compiling.cop_stashpv);
7311 PL_compiling.cop_file = SAVEPV(PL_compiling.cop_file);
7312 ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
7313 if (!specialWARN(PL_compiling.cop_warnings))
7314 PL_compiling.cop_warnings = sv_dup_inc(PL_compiling.cop_warnings);
7315 PL_curcop = (COP*)any_dup(proto_perl->Tcurcop, proto_perl);
7317 /* pseudo environmental stuff */
7318 PL_origargc = proto_perl->Iorigargc;
7320 New(0, PL_origargv, i+1, char*);
7321 PL_origargv[i] = '\0';
7323 PL_origargv[i] = SAVEPV(proto_perl->Iorigargv[i]);
7325 PL_envgv = gv_dup(proto_perl->Ienvgv);
7326 PL_incgv = gv_dup(proto_perl->Iincgv);
7327 PL_hintgv = gv_dup(proto_perl->Ihintgv);
7328 PL_origfilename = SAVEPV(proto_perl->Iorigfilename);
7329 PL_diehook = sv_dup_inc(proto_perl->Idiehook);
7330 PL_warnhook = sv_dup_inc(proto_perl->Iwarnhook);
7333 PL_minus_c = proto_perl->Iminus_c;
7334 PL_patchlevel = sv_dup_inc(proto_perl->Ipatchlevel);
7335 PL_localpatches = proto_perl->Ilocalpatches;
7336 PL_splitstr = proto_perl->Isplitstr;
7337 PL_preprocess = proto_perl->Ipreprocess;
7338 PL_minus_n = proto_perl->Iminus_n;
7339 PL_minus_p = proto_perl->Iminus_p;
7340 PL_minus_l = proto_perl->Iminus_l;
7341 PL_minus_a = proto_perl->Iminus_a;
7342 PL_minus_F = proto_perl->Iminus_F;
7343 PL_doswitches = proto_perl->Idoswitches;
7344 PL_dowarn = proto_perl->Idowarn;
7345 PL_doextract = proto_perl->Idoextract;
7346 PL_sawampersand = proto_perl->Isawampersand;
7347 PL_unsafe = proto_perl->Iunsafe;
7348 PL_inplace = SAVEPV(proto_perl->Iinplace);
7349 PL_e_script = sv_dup_inc(proto_perl->Ie_script);
7350 PL_perldb = proto_perl->Iperldb;
7351 PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
7353 /* magical thingies */
7354 /* XXX time(&PL_basetime) when asked for? */
7355 PL_basetime = proto_perl->Ibasetime;
7356 PL_formfeed = sv_dup(proto_perl->Iformfeed);
7358 PL_maxsysfd = proto_perl->Imaxsysfd;
7359 PL_multiline = proto_perl->Imultiline;
7360 PL_statusvalue = proto_perl->Istatusvalue;
7362 PL_statusvalue_vms = proto_perl->Istatusvalue_vms;
7365 /* shortcuts to various I/O objects */
7366 PL_stdingv = gv_dup(proto_perl->Istdingv);
7367 PL_stderrgv = gv_dup(proto_perl->Istderrgv);
7368 PL_defgv = gv_dup(proto_perl->Idefgv);
7369 PL_argvgv = gv_dup(proto_perl->Iargvgv);
7370 PL_argvoutgv = gv_dup(proto_perl->Iargvoutgv);
7371 PL_argvout_stack = av_dup(proto_perl->Iargvout_stack);
7373 /* shortcuts to regexp stuff */
7374 PL_replgv = gv_dup(proto_perl->Ireplgv);
7376 /* shortcuts to misc objects */
7377 PL_errgv = gv_dup(proto_perl->Ierrgv);
7379 /* shortcuts to debugging objects */
7380 PL_DBgv = gv_dup(proto_perl->IDBgv);
7381 PL_DBline = gv_dup(proto_perl->IDBline);
7382 PL_DBsub = gv_dup(proto_perl->IDBsub);
7383 PL_DBsingle = sv_dup(proto_perl->IDBsingle);
7384 PL_DBtrace = sv_dup(proto_perl->IDBtrace);
7385 PL_DBsignal = sv_dup(proto_perl->IDBsignal);
7386 PL_lineary = av_dup(proto_perl->Ilineary);
7387 PL_dbargs = av_dup(proto_perl->Idbargs);
7390 PL_defstash = hv_dup_inc(proto_perl->Tdefstash);
7391 PL_curstash = hv_dup(proto_perl->Tcurstash);
7392 PL_debstash = hv_dup(proto_perl->Idebstash);
7393 PL_globalstash = hv_dup(proto_perl->Iglobalstash);
7394 PL_curstname = sv_dup_inc(proto_perl->Icurstname);
7396 PL_beginav = av_dup_inc(proto_perl->Ibeginav);
7397 PL_endav = av_dup_inc(proto_perl->Iendav);
7398 PL_checkav = av_dup_inc(proto_perl->Icheckav);
7399 PL_initav = av_dup_inc(proto_perl->Iinitav);
7401 PL_sub_generation = proto_perl->Isub_generation;
7403 /* funky return mechanisms */
7404 PL_forkprocess = proto_perl->Iforkprocess;
7406 /* subprocess state */
7407 PL_fdpid = av_dup_inc(proto_perl->Ifdpid);
7409 /* internal state */
7410 PL_tainting = proto_perl->Itainting;
7411 PL_maxo = proto_perl->Imaxo;
7412 if (proto_perl->Iop_mask)
7413 PL_op_mask = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
7415 PL_op_mask = Nullch;
7417 /* current interpreter roots */
7418 PL_main_cv = cv_dup_inc(proto_perl->Imain_cv);
7419 PL_main_root = OpREFCNT_inc(proto_perl->Imain_root);
7420 PL_main_start = proto_perl->Imain_start;
7421 PL_eval_root = OpREFCNT_inc(proto_perl->Ieval_root);
7422 PL_eval_start = proto_perl->Ieval_start;
7424 /* runtime control stuff */
7425 PL_curcopdb = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
7426 PL_copline = proto_perl->Icopline;
7428 PL_filemode = proto_perl->Ifilemode;
7429 PL_lastfd = proto_perl->Ilastfd;
7430 PL_oldname = proto_perl->Ioldname; /* XXX not quite right */
7433 PL_gensym = proto_perl->Igensym;
7434 PL_preambled = proto_perl->Ipreambled;
7435 PL_preambleav = av_dup_inc(proto_perl->Ipreambleav);
7436 PL_laststatval = proto_perl->Ilaststatval;
7437 PL_laststype = proto_perl->Ilaststype;
7438 PL_mess_sv = Nullsv;
7440 PL_orslen = proto_perl->Iorslen;
7441 PL_ors = SAVEPVN(proto_perl->Iors, PL_orslen);
7442 PL_ofmt = SAVEPV(proto_perl->Iofmt);
7444 /* interpreter atexit processing */
7445 PL_exitlistlen = proto_perl->Iexitlistlen;
7446 if (PL_exitlistlen) {
7447 New(0, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
7448 Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
7451 PL_exitlist = (PerlExitListEntry*)NULL;
7452 PL_modglobal = hv_dup_inc(proto_perl->Imodglobal);
7454 PL_profiledata = NULL;
7455 PL_rsfp = fp_dup(proto_perl->Irsfp, '<');
7456 /* PL_rsfp_filters entries have fake IoDIRP() */
7457 PL_rsfp_filters = av_dup_inc(proto_perl->Irsfp_filters);
7459 PL_compcv = cv_dup(proto_perl->Icompcv);
7460 PL_comppad = av_dup(proto_perl->Icomppad);
7461 PL_comppad_name = av_dup(proto_perl->Icomppad_name);
7462 PL_comppad_name_fill = proto_perl->Icomppad_name_fill;
7463 PL_comppad_name_floor = proto_perl->Icomppad_name_floor;
7464 PL_curpad = (SV**)ptr_table_fetch(PL_ptr_table,
7465 proto_perl->Tcurpad);
7467 #ifdef HAVE_INTERP_INTERN
7468 sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
7471 /* more statics moved here */
7472 PL_generation = proto_perl->Igeneration;
7473 PL_DBcv = cv_dup(proto_perl->IDBcv);
7475 PL_in_clean_objs = proto_perl->Iin_clean_objs;
7476 PL_in_clean_all = proto_perl->Iin_clean_all;
7478 PL_uid = proto_perl->Iuid;
7479 PL_euid = proto_perl->Ieuid;
7480 PL_gid = proto_perl->Igid;
7481 PL_egid = proto_perl->Iegid;
7482 PL_nomemok = proto_perl->Inomemok;
7483 PL_an = proto_perl->Ian;
7484 PL_cop_seqmax = proto_perl->Icop_seqmax;
7485 PL_op_seqmax = proto_perl->Iop_seqmax;
7486 PL_evalseq = proto_perl->Ievalseq;
7487 PL_origenviron = proto_perl->Iorigenviron; /* XXX not quite right */
7488 PL_origalen = proto_perl->Iorigalen;
7489 PL_pidstatus = newHV(); /* XXX flag for cloning? */
7490 PL_osname = SAVEPV(proto_perl->Iosname);
7491 PL_sh_path = SAVEPV(proto_perl->Ish_path);
7492 PL_sighandlerp = proto_perl->Isighandlerp;
7495 PL_runops = proto_perl->Irunops;
7497 Copy(proto_perl->Itokenbuf, PL_tokenbuf, 256, char);
7500 PL_cshlen = proto_perl->Icshlen;
7501 PL_cshname = SAVEPVN(proto_perl->Icshname, PL_cshlen);
7504 PL_lex_state = proto_perl->Ilex_state;
7505 PL_lex_defer = proto_perl->Ilex_defer;
7506 PL_lex_expect = proto_perl->Ilex_expect;
7507 PL_lex_formbrack = proto_perl->Ilex_formbrack;
7508 PL_lex_dojoin = proto_perl->Ilex_dojoin;
7509 PL_lex_starts = proto_perl->Ilex_starts;
7510 PL_lex_stuff = sv_dup_inc(proto_perl->Ilex_stuff);
7511 PL_lex_repl = sv_dup_inc(proto_perl->Ilex_repl);
7512 PL_lex_op = proto_perl->Ilex_op;
7513 PL_lex_inpat = proto_perl->Ilex_inpat;
7514 PL_lex_inwhat = proto_perl->Ilex_inwhat;
7515 PL_lex_brackets = proto_perl->Ilex_brackets;
7516 i = (PL_lex_brackets < 120 ? 120 : PL_lex_brackets);
7517 PL_lex_brackstack = SAVEPVN(proto_perl->Ilex_brackstack,i);
7518 PL_lex_casemods = proto_perl->Ilex_casemods;
7519 i = (PL_lex_casemods < 12 ? 12 : PL_lex_casemods);
7520 PL_lex_casestack = SAVEPVN(proto_perl->Ilex_casestack,i);
7522 Copy(proto_perl->Inextval, PL_nextval, 5, YYSTYPE);
7523 Copy(proto_perl->Inexttype, PL_nexttype, 5, I32);
7524 PL_nexttoke = proto_perl->Inexttoke;
7526 PL_linestr = sv_dup_inc(proto_perl->Ilinestr);
7527 i = proto_perl->Ibufptr - SvPVX(proto_perl->Ilinestr);
7528 PL_bufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
7529 i = proto_perl->Ioldbufptr - SvPVX(proto_perl->Ilinestr);
7530 PL_oldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
7531 i = proto_perl->Ioldoldbufptr - SvPVX(proto_perl->Ilinestr);
7532 PL_oldoldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
7533 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
7534 i = proto_perl->Ilinestart - SvPVX(proto_perl->Ilinestr);
7535 PL_linestart = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
7536 PL_pending_ident = proto_perl->Ipending_ident;
7537 PL_sublex_info = proto_perl->Isublex_info; /* XXX not quite right */
7539 PL_expect = proto_perl->Iexpect;
7541 PL_multi_start = proto_perl->Imulti_start;
7542 PL_multi_end = proto_perl->Imulti_end;
7543 PL_multi_open = proto_perl->Imulti_open;
7544 PL_multi_close = proto_perl->Imulti_close;
7546 PL_error_count = proto_perl->Ierror_count;
7547 PL_subline = proto_perl->Isubline;
7548 PL_subname = sv_dup_inc(proto_perl->Isubname);
7550 PL_min_intro_pending = proto_perl->Imin_intro_pending;
7551 PL_max_intro_pending = proto_perl->Imax_intro_pending;
7552 PL_padix = proto_perl->Ipadix;
7553 PL_padix_floor = proto_perl->Ipadix_floor;
7554 PL_pad_reset_pending = proto_perl->Ipad_reset_pending;
7556 i = proto_perl->Ilast_uni - SvPVX(proto_perl->Ilinestr);
7557 PL_last_uni = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
7558 i = proto_perl->Ilast_lop - SvPVX(proto_perl->Ilinestr);
7559 PL_last_lop = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
7560 PL_last_lop_op = proto_perl->Ilast_lop_op;
7561 PL_in_my = proto_perl->Iin_my;
7562 PL_in_my_stash = hv_dup(proto_perl->Iin_my_stash);
7564 PL_cryptseen = proto_perl->Icryptseen;
7567 PL_hints = proto_perl->Ihints;
7569 PL_amagic_generation = proto_perl->Iamagic_generation;
7571 #ifdef USE_LOCALE_COLLATE
7572 PL_collation_ix = proto_perl->Icollation_ix;
7573 PL_collation_name = SAVEPV(proto_perl->Icollation_name);
7574 PL_collation_standard = proto_perl->Icollation_standard;
7575 PL_collxfrm_base = proto_perl->Icollxfrm_base;
7576 PL_collxfrm_mult = proto_perl->Icollxfrm_mult;
7577 #endif /* USE_LOCALE_COLLATE */
7579 #ifdef USE_LOCALE_NUMERIC
7580 PL_numeric_name = SAVEPV(proto_perl->Inumeric_name);
7581 PL_numeric_standard = proto_perl->Inumeric_standard;
7582 PL_numeric_local = proto_perl->Inumeric_local;
7583 PL_numeric_radix = proto_perl->Inumeric_radix;
7584 #endif /* !USE_LOCALE_NUMERIC */
7586 /* utf8 character classes */
7587 PL_utf8_alnum = sv_dup_inc(proto_perl->Iutf8_alnum);
7588 PL_utf8_alnumc = sv_dup_inc(proto_perl->Iutf8_alnumc);
7589 PL_utf8_ascii = sv_dup_inc(proto_perl->Iutf8_ascii);
7590 PL_utf8_alpha = sv_dup_inc(proto_perl->Iutf8_alpha);
7591 PL_utf8_space = sv_dup_inc(proto_perl->Iutf8_space);
7592 PL_utf8_cntrl = sv_dup_inc(proto_perl->Iutf8_cntrl);
7593 PL_utf8_graph = sv_dup_inc(proto_perl->Iutf8_graph);
7594 PL_utf8_digit = sv_dup_inc(proto_perl->Iutf8_digit);
7595 PL_utf8_upper = sv_dup_inc(proto_perl->Iutf8_upper);
7596 PL_utf8_lower = sv_dup_inc(proto_perl->Iutf8_lower);
7597 PL_utf8_print = sv_dup_inc(proto_perl->Iutf8_print);
7598 PL_utf8_punct = sv_dup_inc(proto_perl->Iutf8_punct);
7599 PL_utf8_xdigit = sv_dup_inc(proto_perl->Iutf8_xdigit);
7600 PL_utf8_mark = sv_dup_inc(proto_perl->Iutf8_mark);
7601 PL_utf8_toupper = sv_dup_inc(proto_perl->Iutf8_toupper);
7602 PL_utf8_totitle = sv_dup_inc(proto_perl->Iutf8_totitle);
7603 PL_utf8_tolower = sv_dup_inc(proto_perl->Iutf8_tolower);
7606 PL_last_swash_hv = Nullhv; /* reinits on demand */
7607 PL_last_swash_klen = 0;
7608 PL_last_swash_key[0]= '\0';
7609 PL_last_swash_tmps = (U8*)NULL;
7610 PL_last_swash_slen = 0;
7612 /* perly.c globals */
7613 PL_yydebug = proto_perl->Iyydebug;
7614 PL_yynerrs = proto_perl->Iyynerrs;
7615 PL_yyerrflag = proto_perl->Iyyerrflag;
7616 PL_yychar = proto_perl->Iyychar;
7617 PL_yyval = proto_perl->Iyyval;
7618 PL_yylval = proto_perl->Iyylval;
7620 PL_glob_index = proto_perl->Iglob_index;
7621 PL_srand_called = proto_perl->Isrand_called;
7622 PL_uudmap['M'] = 0; /* reinits on demand */
7623 PL_bitcount = Nullch; /* reinits on demand */
7625 if (proto_perl->Ipsig_ptr) {
7626 int sig_num[] = { SIG_NUM };
7627 Newz(0, PL_psig_ptr, sizeof(sig_num)/sizeof(*sig_num), SV*);
7628 Newz(0, PL_psig_name, sizeof(sig_num)/sizeof(*sig_num), SV*);
7629 for (i = 1; PL_sig_name[i]; i++) {
7630 PL_psig_ptr[i] = sv_dup_inc(proto_perl->Ipsig_ptr[i]);
7631 PL_psig_name[i] = sv_dup_inc(proto_perl->Ipsig_name[i]);
7635 PL_psig_ptr = (SV**)NULL;
7636 PL_psig_name = (SV**)NULL;
7639 /* thrdvar.h stuff */
7642 /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
7643 PL_tmps_ix = proto_perl->Ttmps_ix;
7644 PL_tmps_max = proto_perl->Ttmps_max;
7645 PL_tmps_floor = proto_perl->Ttmps_floor;
7646 Newz(50, PL_tmps_stack, PL_tmps_max, SV*);
7648 while (i <= PL_tmps_ix) {
7649 PL_tmps_stack[i] = sv_dup_inc(proto_perl->Ttmps_stack[i]);
7653 /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
7654 i = proto_perl->Tmarkstack_max - proto_perl->Tmarkstack;
7655 Newz(54, PL_markstack, i, I32);
7656 PL_markstack_max = PL_markstack + (proto_perl->Tmarkstack_max
7657 - proto_perl->Tmarkstack);
7658 PL_markstack_ptr = PL_markstack + (proto_perl->Tmarkstack_ptr
7659 - proto_perl->Tmarkstack);
7660 Copy(proto_perl->Tmarkstack, PL_markstack,
7661 PL_markstack_ptr - PL_markstack + 1, I32);
7663 /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
7664 * NOTE: unlike the others! */
7665 PL_scopestack_ix = proto_perl->Tscopestack_ix;
7666 PL_scopestack_max = proto_perl->Tscopestack_max;
7667 Newz(54, PL_scopestack, PL_scopestack_max, I32);
7668 Copy(proto_perl->Tscopestack, PL_scopestack, PL_scopestack_ix, I32);
7670 /* next push_return() sets PL_retstack[PL_retstack_ix]
7671 * NOTE: unlike the others! */
7672 PL_retstack_ix = proto_perl->Tretstack_ix;
7673 PL_retstack_max = proto_perl->Tretstack_max;
7674 Newz(54, PL_retstack, PL_retstack_max, OP*);
7675 Copy(proto_perl->Tretstack, PL_retstack, PL_retstack_ix, I32);
7677 /* NOTE: si_dup() looks at PL_markstack */
7678 PL_curstackinfo = si_dup(proto_perl->Tcurstackinfo);
7680 /* PL_curstack = PL_curstackinfo->si_stack; */
7681 PL_curstack = av_dup(proto_perl->Tcurstack);
7682 PL_mainstack = av_dup(proto_perl->Tmainstack);
7684 /* next PUSHs() etc. set *(PL_stack_sp+1) */
7685 PL_stack_base = AvARRAY(PL_curstack);
7686 PL_stack_sp = PL_stack_base + (proto_perl->Tstack_sp
7687 - proto_perl->Tstack_base);
7688 PL_stack_max = PL_stack_base + AvMAX(PL_curstack);
7690 /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
7691 * NOTE: unlike the others! */
7692 PL_savestack_ix = proto_perl->Tsavestack_ix;
7693 PL_savestack_max = proto_perl->Tsavestack_max;
7694 /*Newz(54, PL_savestack, PL_savestack_max, ANY);*/
7695 PL_savestack = ss_dup(proto_perl);
7701 PL_start_env = proto_perl->Tstart_env; /* XXXXXX */
7702 PL_top_env = &PL_start_env;
7704 PL_op = proto_perl->Top;
7707 PL_Xpv = (XPV*)NULL;
7708 PL_na = proto_perl->Tna;
7710 PL_statbuf = proto_perl->Tstatbuf;
7711 PL_statcache = proto_perl->Tstatcache;
7712 PL_statgv = gv_dup(proto_perl->Tstatgv);
7713 PL_statname = sv_dup_inc(proto_perl->Tstatname);
7715 PL_timesbuf = proto_perl->Ttimesbuf;
7718 PL_tainted = proto_perl->Ttainted;
7719 PL_curpm = proto_perl->Tcurpm; /* XXX No PMOP ref count */
7720 PL_nrs = sv_dup_inc(proto_perl->Tnrs);
7721 PL_rs = sv_dup_inc(proto_perl->Trs);
7722 PL_last_in_gv = gv_dup(proto_perl->Tlast_in_gv);
7723 PL_ofslen = proto_perl->Tofslen;
7724 PL_ofs = SAVEPVN(proto_perl->Tofs, PL_ofslen);
7725 PL_defoutgv = gv_dup_inc(proto_perl->Tdefoutgv);
7726 PL_chopset = proto_perl->Tchopset; /* XXX never deallocated */
7727 PL_toptarget = sv_dup_inc(proto_perl->Ttoptarget);
7728 PL_bodytarget = sv_dup_inc(proto_perl->Tbodytarget);
7729 PL_formtarget = sv_dup(proto_perl->Tformtarget);
7731 PL_restartop = proto_perl->Trestartop;
7732 PL_in_eval = proto_perl->Tin_eval;
7733 PL_delaymagic = proto_perl->Tdelaymagic;
7734 PL_dirty = proto_perl->Tdirty;
7735 PL_localizing = proto_perl->Tlocalizing;
7737 PL_protect = proto_perl->Tprotect;
7738 PL_errors = sv_dup_inc(proto_perl->Terrors);
7739 PL_av_fetch_sv = Nullsv;
7740 PL_hv_fetch_sv = Nullsv;
7741 Zero(&PL_hv_fetch_ent_mh, 1, HE); /* XXX */
7742 PL_modcount = proto_perl->Tmodcount;
7743 PL_lastgotoprobe = Nullop;
7744 PL_dumpindent = proto_perl->Tdumpindent;
7746 PL_sortcop = (OP*)any_dup(proto_perl->Tsortcop, proto_perl);
7747 PL_sortstash = hv_dup(proto_perl->Tsortstash);
7748 PL_firstgv = gv_dup(proto_perl->Tfirstgv);
7749 PL_secondgv = gv_dup(proto_perl->Tsecondgv);
7750 PL_sortcxix = proto_perl->Tsortcxix;
7751 PL_efloatbuf = Nullch; /* reinits on demand */
7752 PL_efloatsize = 0; /* reinits on demand */
7756 PL_screamfirst = NULL;
7757 PL_screamnext = NULL;
7758 PL_maxscream = -1; /* reinits on demand */
7759 PL_lastscream = Nullsv;
7761 PL_watchaddr = NULL;
7762 PL_watchok = Nullch;
7764 PL_regdummy = proto_perl->Tregdummy;
7765 PL_regcomp_parse = Nullch;
7766 PL_regxend = Nullch;
7767 PL_regcode = (regnode*)NULL;
7770 PL_regprecomp = Nullch;
7775 PL_seen_zerolen = 0;
7777 PL_regcomp_rx = (regexp*)NULL;
7779 PL_colorset = 0; /* reinits PL_colors[] */
7780 /*PL_colors[6] = {0,0,0,0,0,0};*/
7781 PL_reg_whilem_seen = 0;
7782 PL_reginput = Nullch;
7785 PL_regstartp = (I32*)NULL;
7786 PL_regendp = (I32*)NULL;
7787 PL_reglastparen = (U32*)NULL;
7788 PL_regtill = Nullch;
7790 PL_reg_start_tmp = (char**)NULL;
7791 PL_reg_start_tmpl = 0;
7792 PL_regdata = (struct reg_data*)NULL;
7795 PL_reg_eval_set = 0;
7797 PL_regprogram = (regnode*)NULL;
7799 PL_regcc = (CURCUR*)NULL;
7800 PL_reg_call_cc = (struct re_cc_state*)NULL;
7801 PL_reg_re = (regexp*)NULL;
7802 PL_reg_ganch = Nullch;
7804 PL_reg_magic = (MAGIC*)NULL;
7806 PL_reg_oldcurpm = (PMOP*)NULL;
7807 PL_reg_curpm = (PMOP*)NULL;
7808 PL_reg_oldsaved = Nullch;
7809 PL_reg_oldsavedlen = 0;
7811 PL_reg_leftiter = 0;
7812 PL_reg_poscache = Nullch;
7813 PL_reg_poscache_size= 0;
7815 /* RE engine - function pointers */
7816 PL_regcompp = proto_perl->Tregcompp;
7817 PL_regexecp = proto_perl->Tregexecp;
7818 PL_regint_start = proto_perl->Tregint_start;
7819 PL_regint_string = proto_perl->Tregint_string;
7820 PL_regfree = proto_perl->Tregfree;
7822 PL_reginterp_cnt = 0;
7823 PL_reg_starttry = 0;
7826 return (PerlInterpreter*)pPerl;
7832 #else /* !USE_ITHREADS */
7838 #endif /* USE_ITHREADS */
7841 do_report_used(pTHXo_ SV *sv)
7843 if (SvTYPE(sv) != SVTYPEMASK) {
7844 PerlIO_printf(Perl_debug_log, "****\n");
7850 do_clean_objs(pTHXo_ SV *sv)
7854 if (SvROK(sv) && SvOBJECT(rv = SvRV(sv))) {
7855 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(sv));)
7861 /* XXX Might want to check arrays, etc. */
7864 #ifndef DISABLE_DESTRUCTOR_KLUDGE
7866 do_clean_named_objs(pTHXo_ SV *sv)
7868 if (SvTYPE(sv) == SVt_PVGV && GvGP(sv)) {
7869 if ( SvOBJECT(GvSV(sv)) ||
7870 GvAV(sv) && SvOBJECT(GvAV(sv)) ||
7871 GvHV(sv) && SvOBJECT(GvHV(sv)) ||
7872 GvIO(sv) && SvOBJECT(GvIO(sv)) ||
7873 GvCV(sv) && SvOBJECT(GvCV(sv)) )
7875 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning named glob object:\n "), sv_dump(sv));)
7883 do_clean_all(pTHXo_ SV *sv)
7885 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) );)
7886 SvFLAGS(sv) |= SVf_BREAK;