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)";
5642 /* no matter what, this is a string now */
5643 (void)SvPV_force(sv, origlen);
5645 /* special-case "", "%s", and "%_" */
5648 if (patlen == 2 && pat[0] == '%') {
5652 char *s = va_arg(*args, char*);
5653 sv_catpv(sv, s ? s : nullstr);
5655 else if (svix < svmax)
5656 sv_catsv(sv, *svargs);
5660 sv_catsv(sv, va_arg(*args, SV*));
5663 /* See comment on '_' below */
5668 patend = (char*)pat + patlen;
5669 for (p = (char*)pat; p < patend; p = q) {
5677 bool has_precis = FALSE;
5682 STRLEN esignlen = 0;
5684 char *eptr = Nullch;
5686 /* Times 4: a decimal digit takes more than 3 binary digits.
5687 * NV_DIG: mantissa takes than many decimal digits.
5688 * Plus 32: Playing safe. */
5689 char ebuf[IV_DIG * 4 + NV_DIG + 32];
5690 /* large enough for "%#.#f" --chip */
5691 /* what about long double NVs? --jhi */
5702 for (q = p; q < patend && *q != '%'; ++q) ;
5704 sv_catpvn(sv, p, q - p);
5742 case '1': case '2': case '3':
5743 case '4': case '5': case '6':
5744 case '7': case '8': case '9':
5747 width = width * 10 + (*q++ - '0');
5752 i = va_arg(*args, int);
5754 i = (svix < svmax) ? SvIVx(svargs[svix++]) : 0;
5756 width = (i < 0) ? -i : i;
5767 i = va_arg(*args, int);
5769 i = (svix < svmax) ? SvIVx(svargs[svix++]) : 0;
5770 precis = (i < 0) ? 0 : i;
5776 precis = precis * 10 + (*q++ - '0');
5793 if (*(q + 1) == 'l') { /* lld */
5821 uv = va_arg(*args, int);
5823 uv = (svix < svmax) ? SvIVx(svargs[svix++]) : 0;
5825 eptr = (char*)utf8buf;
5826 elen = uv_to_utf8((U8*)eptr, uv) - utf8buf;
5830 c = va_arg(*args, int);
5832 c = (svix < svmax) ? SvIVx(svargs[svix++]) : 0;
5839 eptr = va_arg(*args, char*);
5841 #ifdef MACOS_TRADITIONAL
5842 /* On MacOS, %#s format is used for Pascal strings */
5847 elen = strlen(eptr);
5850 elen = sizeof nullstr - 1;
5853 else if (svix < svmax) {
5854 eptr = SvPVx(svargs[svix++], elen);
5856 if (has_precis && precis < elen) {
5858 sv_pos_u2b(svargs[svix - 1], &p, 0); /* sticks at end */
5861 if (width) { /* fudge width (can't fudge elen) */
5862 width += elen - sv_len_utf8(svargs[svix - 1]);
5870 * The "%_" hack might have to be changed someday,
5871 * if ISO or ANSI decide to use '_' for something.
5872 * So we keep it hidden from users' code.
5876 eptr = SvPVx(va_arg(*args, SV*), elen);
5879 if (has_precis && elen > precis)
5887 uv = PTR2UV(va_arg(*args, void*));
5889 uv = (svix < svmax) ? PTR2UV(svargs[svix++]) : 0;
5904 case 'h': iv = (short)va_arg(*args, int); break;
5905 default: iv = va_arg(*args, int); break;
5906 case 'l': iv = va_arg(*args, long); break;
5907 case 'V': iv = va_arg(*args, IV); break;
5909 case 'q': iv = va_arg(*args, Quad_t); break;
5914 iv = (svix < svmax) ? SvIVx(svargs[svix++]) : 0;
5916 case 'h': iv = (short)iv; break;
5917 default: iv = (int)iv; break;
5918 case 'l': iv = (long)iv; break;
5921 case 'q': iv = (Quad_t)iv; break;
5928 esignbuf[esignlen++] = plus;
5932 esignbuf[esignlen++] = '-';
5970 case 'h': uv = (unsigned short)va_arg(*args, unsigned); break;
5971 default: uv = va_arg(*args, unsigned); break;
5972 case 'l': uv = va_arg(*args, unsigned long); break;
5973 case 'V': uv = va_arg(*args, UV); break;
5975 case 'q': uv = va_arg(*args, Quad_t); break;
5980 uv = (svix < svmax) ? SvUVx(svargs[svix++]) : 0;
5982 case 'h': uv = (unsigned short)uv; break;
5983 default: uv = (unsigned)uv; break;
5984 case 'l': uv = (unsigned long)uv; break;
5987 case 'q': uv = (Quad_t)uv; break;
5993 eptr = ebuf + sizeof ebuf;
5999 p = (char*)((c == 'X')
6000 ? "0123456789ABCDEF" : "0123456789abcdef");
6006 esignbuf[esignlen++] = '0';
6007 esignbuf[esignlen++] = c; /* 'x' or 'X' */
6013 *--eptr = '0' + dig;
6015 if (alt && *eptr != '0')
6021 *--eptr = '0' + dig;
6024 esignbuf[esignlen++] = '0';
6025 esignbuf[esignlen++] = 'b';
6028 default: /* it had better be ten or less */
6029 #if defined(PERL_Y2KWARN)
6030 if (ckWARN(WARN_MISC)) {
6032 char *s = SvPV(sv,n);
6033 if (n >= 2 && s[n-2] == '1' && s[n-1] == '9'
6034 && (n == 2 || !isDIGIT(s[n-3])))
6036 Perl_warner(aTHX_ WARN_MISC,
6037 "Possible Y2K bug: %%%c %s",
6038 c, "format string following '19'");
6044 *--eptr = '0' + dig;
6045 } while (uv /= base);
6048 elen = (ebuf + sizeof ebuf) - eptr;
6051 zeros = precis - elen;
6052 else if (precis == 0 && elen == 1 && *eptr == '0')
6057 /* FLOATING POINT */
6060 c = 'f'; /* maybe %F isn't supported here */
6066 /* This is evil, but floating point is even more evil */
6069 nv = va_arg(*args, NV);
6071 nv = (svix < svmax) ? SvNVx(svargs[svix++]) : 0.0;
6074 if (c != 'e' && c != 'E') {
6076 (void)frexp(nv, &i);
6077 if (i == PERL_INT_MIN)
6078 Perl_die(aTHX_ "panic: frexp");
6080 need = BIT_DIGITS(i);
6082 need += has_precis ? precis : 6; /* known default */
6086 need += 20; /* fudge factor */
6087 if (PL_efloatsize < need) {
6088 Safefree(PL_efloatbuf);
6089 PL_efloatsize = need + 20; /* more fudge */
6090 New(906, PL_efloatbuf, PL_efloatsize, char);
6091 PL_efloatbuf[0] = '\0';
6094 eptr = ebuf + sizeof ebuf;
6097 #ifdef USE_LONG_DOUBLE
6099 char* p = PERL_PRIfldbl + sizeof(PERL_PRIfldbl) - 3;
6100 while (p >= PERL_PRIfldbl) { *--eptr = *p--; }
6105 do { *--eptr = '0' + (base % 10); } while (base /= 10);
6110 do { *--eptr = '0' + (base % 10); } while (base /= 10);
6123 RESTORE_NUMERIC_STANDARD();
6124 (void)sprintf(PL_efloatbuf, eptr, nv);
6125 RESTORE_NUMERIC_LOCAL();
6128 eptr = PL_efloatbuf;
6129 elen = strlen(PL_efloatbuf);
6135 i = SvCUR(sv) - origlen;
6138 case 'h': *(va_arg(*args, short*)) = i; break;
6139 default: *(va_arg(*args, int*)) = i; break;
6140 case 'l': *(va_arg(*args, long*)) = i; break;
6141 case 'V': *(va_arg(*args, IV*)) = i; break;
6143 case 'q': *(va_arg(*args, Quad_t*)) = i; break;
6147 else if (svix < svmax)
6148 sv_setuv(svargs[svix++], (UV)i);
6149 continue; /* not "break" */
6155 if (!args && ckWARN(WARN_PRINTF) &&
6156 (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)) {
6157 SV *msg = sv_newmortal();
6158 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %s: ",
6159 (PL_op->op_type == OP_PRTF) ? "printf" : "sprintf");
6162 Perl_sv_catpvf(aTHX_ msg,
6163 "\"%%%c\"", c & 0xFF);
6165 Perl_sv_catpvf(aTHX_ msg,
6166 "\"%%\\%03"UVof"\"",
6169 sv_catpv(msg, "end of string");
6170 Perl_warner(aTHX_ WARN_PRINTF, "%"SVf, msg); /* yes, this is reentrant */
6173 /* output mangled stuff ... */
6179 /* ... right here, because formatting flags should not apply */
6180 SvGROW(sv, SvCUR(sv) + elen + 1);
6182 memcpy(p, eptr, elen);
6185 SvCUR(sv) = p - SvPVX(sv);
6186 continue; /* not "break" */
6189 have = esignlen + zeros + elen;
6190 need = (have > width ? have : width);
6193 SvGROW(sv, SvCUR(sv) + need + 1);
6195 if (esignlen && fill == '0') {
6196 for (i = 0; i < esignlen; i++)
6200 memset(p, fill, gap);
6203 if (esignlen && fill != '0') {
6204 for (i = 0; i < esignlen; i++)
6208 for (i = zeros; i; i--)
6212 memcpy(p, eptr, elen);
6216 memset(p, ' ', gap);
6220 SvCUR(sv) = p - SvPVX(sv);
6224 #if defined(USE_ITHREADS)
6226 #if defined(USE_THREADS)
6227 # include "error: USE_THREADS and USE_ITHREADS are incompatible"
6230 #ifndef OpREFCNT_inc
6231 # define OpREFCNT_inc(o) ((o) ? (++(o)->op_targ, (o)) : Nullop)
6234 #ifndef GpREFCNT_inc
6235 # define GpREFCNT_inc(gp) ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
6239 #define sv_dup_inc(s) SvREFCNT_inc(sv_dup(s))
6240 #define av_dup(s) (AV*)sv_dup((SV*)s)
6241 #define av_dup_inc(s) (AV*)SvREFCNT_inc(sv_dup((SV*)s))
6242 #define hv_dup(s) (HV*)sv_dup((SV*)s)
6243 #define hv_dup_inc(s) (HV*)SvREFCNT_inc(sv_dup((SV*)s))
6244 #define cv_dup(s) (CV*)sv_dup((SV*)s)
6245 #define cv_dup_inc(s) (CV*)SvREFCNT_inc(sv_dup((SV*)s))
6246 #define io_dup(s) (IO*)sv_dup((SV*)s)
6247 #define io_dup_inc(s) (IO*)SvREFCNT_inc(sv_dup((SV*)s))
6248 #define gv_dup(s) (GV*)sv_dup((SV*)s)
6249 #define gv_dup_inc(s) (GV*)SvREFCNT_inc(sv_dup((SV*)s))
6250 #define SAVEPV(p) (p ? savepv(p) : Nullch)
6251 #define SAVEPVN(p,n) (p ? savepvn(p,n) : Nullch)
6254 Perl_re_dup(pTHX_ REGEXP *r)
6256 /* XXX fix when pmop->op_pmregexp becomes shared */
6257 return ReREFCNT_inc(r);
6261 Perl_fp_dup(pTHX_ PerlIO *fp, char type)
6265 return (PerlIO*)NULL;
6267 /* look for it in the table first */
6268 ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
6272 /* create anew and remember what it is */
6273 ret = PerlIO_fdupopen(fp);
6274 ptr_table_store(PL_ptr_table, fp, ret);
6279 Perl_dirp_dup(pTHX_ DIR *dp)
6288 Perl_gp_dup(pTHX_ GP *gp)
6293 /* look for it in the table first */
6294 ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
6298 /* create anew and remember what it is */
6299 Newz(0, ret, 1, GP);
6300 ptr_table_store(PL_ptr_table, gp, ret);
6303 ret->gp_refcnt = 0; /* must be before any other dups! */
6304 ret->gp_sv = sv_dup_inc(gp->gp_sv);
6305 ret->gp_io = io_dup_inc(gp->gp_io);
6306 ret->gp_form = cv_dup_inc(gp->gp_form);
6307 ret->gp_av = av_dup_inc(gp->gp_av);
6308 ret->gp_hv = hv_dup_inc(gp->gp_hv);
6309 ret->gp_egv = gv_dup(gp->gp_egv); /* GvEGV is not refcounted */
6310 ret->gp_cv = cv_dup_inc(gp->gp_cv);
6311 ret->gp_cvgen = gp->gp_cvgen;
6312 ret->gp_flags = gp->gp_flags;
6313 ret->gp_line = gp->gp_line;
6314 ret->gp_file = gp->gp_file; /* points to COP.cop_file */
6319 Perl_mg_dup(pTHX_ MAGIC *mg)
6321 MAGIC *mgret = (MAGIC*)NULL;
6324 return (MAGIC*)NULL;
6325 /* look for it in the table first */
6326 mgret = (MAGIC*)ptr_table_fetch(PL_ptr_table, mg);
6330 for (; mg; mg = mg->mg_moremagic) {
6332 Newz(0, nmg, 1, MAGIC);
6336 mgprev->mg_moremagic = nmg;
6337 nmg->mg_virtual = mg->mg_virtual; /* XXX copy dynamic vtable? */
6338 nmg->mg_private = mg->mg_private;
6339 nmg->mg_type = mg->mg_type;
6340 nmg->mg_flags = mg->mg_flags;
6341 if (mg->mg_type == 'r') {
6342 nmg->mg_obj = (SV*)re_dup((REGEXP*)mg->mg_obj);
6345 nmg->mg_obj = (mg->mg_flags & MGf_REFCOUNTED)
6346 ? sv_dup_inc(mg->mg_obj)
6347 : sv_dup(mg->mg_obj);
6349 nmg->mg_len = mg->mg_len;
6350 nmg->mg_ptr = mg->mg_ptr; /* XXX random ptr? */
6351 if (mg->mg_ptr && mg->mg_type != 'g') {
6352 if (mg->mg_len >= 0) {
6353 nmg->mg_ptr = SAVEPVN(mg->mg_ptr, mg->mg_len);
6354 if (mg->mg_type == 'c' && AMT_AMAGIC((AMT*)mg->mg_ptr)) {
6355 AMT *amtp = (AMT*)mg->mg_ptr;
6356 AMT *namtp = (AMT*)nmg->mg_ptr;
6358 for (i = 1; i < NofAMmeth; i++) {
6359 namtp->table[i] = cv_dup_inc(amtp->table[i]);
6363 else if (mg->mg_len == HEf_SVKEY)
6364 nmg->mg_ptr = (char*)sv_dup_inc((SV*)mg->mg_ptr);
6372 Perl_ptr_table_new(pTHX)
6375 Newz(0, tbl, 1, PTR_TBL_t);
6378 Newz(0, tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
6383 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *tbl, void *sv)
6385 PTR_TBL_ENT_t *tblent;
6388 tblent = tbl->tbl_ary[hash & tbl->tbl_max];
6389 for (; tblent; tblent = tblent->next) {
6390 if (tblent->oldval == sv)
6391 return tblent->newval;
6397 Perl_ptr_table_store(pTHX_ PTR_TBL_t *tbl, void *oldv, void *newv)
6399 PTR_TBL_ENT_t *tblent, **otblent;
6400 /* XXX this may be pessimal on platforms where pointers aren't good
6401 * hash values e.g. if they grow faster in the most significant
6407 otblent = &tbl->tbl_ary[hash & tbl->tbl_max];
6408 for (tblent = *otblent; tblent; i=0, tblent = tblent->next) {
6409 if (tblent->oldval == oldv) {
6410 tblent->newval = newv;
6415 Newz(0, tblent, 1, PTR_TBL_ENT_t);
6416 tblent->oldval = oldv;
6417 tblent->newval = newv;
6418 tblent->next = *otblent;
6421 if (i && tbl->tbl_items > tbl->tbl_max)
6422 ptr_table_split(tbl);
6426 Perl_ptr_table_split(pTHX_ PTR_TBL_t *tbl)
6428 PTR_TBL_ENT_t **ary = tbl->tbl_ary;
6429 UV oldsize = tbl->tbl_max + 1;
6430 UV newsize = oldsize * 2;
6433 Renew(ary, newsize, PTR_TBL_ENT_t*);
6434 Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
6435 tbl->tbl_max = --newsize;
6437 for (i=0; i < oldsize; i++, ary++) {
6438 PTR_TBL_ENT_t **curentp, **entp, *ent;
6441 curentp = ary + oldsize;
6442 for (entp = ary, ent = *ary; ent; ent = *entp) {
6443 if ((newsize & (UV)ent->oldval) != i) {
6445 ent->next = *curentp;
6460 Perl_sv_dup(pTHX_ SV *sstr)
6467 if (!sstr || SvTYPE(sstr) == SVTYPEMASK)
6469 /* look for it in the table first */
6470 dstr = (SV*)ptr_table_fetch(PL_ptr_table, sstr);
6474 /* create anew and remember what it is */
6476 ptr_table_store(PL_ptr_table, sstr, dstr);
6479 SvFLAGS(dstr) = SvFLAGS(sstr);
6480 SvFLAGS(dstr) &= ~SVf_OOK; /* don't propagate OOK hack */
6481 SvREFCNT(dstr) = 0; /* must be before any other dups! */
6484 if (SvANY(sstr) && PL_watch_pvx && SvPVX(sstr) == PL_watch_pvx)
6485 PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
6486 PL_watch_pvx, SvPVX(sstr));
6489 switch (SvTYPE(sstr)) {
6494 SvANY(dstr) = new_XIV();
6495 SvIVX(dstr) = SvIVX(sstr);
6498 SvANY(dstr) = new_XNV();
6499 SvNVX(dstr) = SvNVX(sstr);
6502 SvANY(dstr) = new_XRV();
6503 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
6506 SvANY(dstr) = new_XPV();
6507 SvCUR(dstr) = SvCUR(sstr);
6508 SvLEN(dstr) = SvLEN(sstr);
6510 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
6511 else if (SvPVX(sstr) && SvLEN(sstr))
6512 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
6514 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
6517 SvANY(dstr) = new_XPVIV();
6518 SvCUR(dstr) = SvCUR(sstr);
6519 SvLEN(dstr) = SvLEN(sstr);
6520 SvIVX(dstr) = SvIVX(sstr);
6522 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
6523 else if (SvPVX(sstr) && SvLEN(sstr))
6524 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
6526 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
6529 SvANY(dstr) = new_XPVNV();
6530 SvCUR(dstr) = SvCUR(sstr);
6531 SvLEN(dstr) = SvLEN(sstr);
6532 SvIVX(dstr) = SvIVX(sstr);
6533 SvNVX(dstr) = SvNVX(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_XPVMG();
6543 SvCUR(dstr) = SvCUR(sstr);
6544 SvLEN(dstr) = SvLEN(sstr);
6545 SvIVX(dstr) = SvIVX(sstr);
6546 SvNVX(dstr) = SvNVX(sstr);
6547 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
6548 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
6550 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
6551 else if (SvPVX(sstr) && SvLEN(sstr))
6552 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
6554 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
6557 SvANY(dstr) = new_XPVBM();
6558 SvCUR(dstr) = SvCUR(sstr);
6559 SvLEN(dstr) = SvLEN(sstr);
6560 SvIVX(dstr) = SvIVX(sstr);
6561 SvNVX(dstr) = SvNVX(sstr);
6562 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
6563 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
6565 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
6566 else if (SvPVX(sstr) && SvLEN(sstr))
6567 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
6569 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
6570 BmRARE(dstr) = BmRARE(sstr);
6571 BmUSEFUL(dstr) = BmUSEFUL(sstr);
6572 BmPREVIOUS(dstr)= BmPREVIOUS(sstr);
6575 SvANY(dstr) = new_XPVLV();
6576 SvCUR(dstr) = SvCUR(sstr);
6577 SvLEN(dstr) = SvLEN(sstr);
6578 SvIVX(dstr) = SvIVX(sstr);
6579 SvNVX(dstr) = SvNVX(sstr);
6580 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
6581 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
6583 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
6584 else if (SvPVX(sstr) && SvLEN(sstr))
6585 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
6587 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
6588 LvTARGOFF(dstr) = LvTARGOFF(sstr); /* XXX sometimes holds PMOP* when DEBUGGING */
6589 LvTARGLEN(dstr) = LvTARGLEN(sstr);
6590 LvTARG(dstr) = sv_dup_inc(LvTARG(sstr));
6591 LvTYPE(dstr) = LvTYPE(sstr);
6594 SvANY(dstr) = new_XPVGV();
6595 SvCUR(dstr) = SvCUR(sstr);
6596 SvLEN(dstr) = SvLEN(sstr);
6597 SvIVX(dstr) = SvIVX(sstr);
6598 SvNVX(dstr) = SvNVX(sstr);
6599 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
6600 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
6602 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
6603 else if (SvPVX(sstr) && SvLEN(sstr))
6604 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
6606 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
6607 GvNAMELEN(dstr) = GvNAMELEN(sstr);
6608 GvNAME(dstr) = SAVEPVN(GvNAME(sstr), GvNAMELEN(sstr));
6609 GvSTASH(dstr) = hv_dup_inc(GvSTASH(sstr));
6610 GvFLAGS(dstr) = GvFLAGS(sstr);
6611 GvGP(dstr) = gp_dup(GvGP(sstr));
6612 (void)GpREFCNT_inc(GvGP(dstr));
6615 SvANY(dstr) = new_XPVIO();
6616 SvCUR(dstr) = SvCUR(sstr);
6617 SvLEN(dstr) = SvLEN(sstr);
6618 SvIVX(dstr) = SvIVX(sstr);
6619 SvNVX(dstr) = SvNVX(sstr);
6620 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
6621 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
6623 SvRV(dstr) = sv_dup_inc(SvRV(sstr));
6624 else if (SvPVX(sstr) && SvLEN(sstr))
6625 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
6627 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
6628 IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(sstr));
6629 if (IoOFP(sstr) == IoIFP(sstr))
6630 IoOFP(dstr) = IoIFP(dstr);
6632 IoOFP(dstr) = fp_dup(IoOFP(sstr), IoTYPE(sstr));
6633 /* PL_rsfp_filters entries have fake IoDIRP() */
6634 if (IoDIRP(sstr) && !(IoFLAGS(sstr) & IOf_FAKE_DIRP))
6635 IoDIRP(dstr) = dirp_dup(IoDIRP(sstr));
6637 IoDIRP(dstr) = IoDIRP(sstr);
6638 IoLINES(dstr) = IoLINES(sstr);
6639 IoPAGE(dstr) = IoPAGE(sstr);
6640 IoPAGE_LEN(dstr) = IoPAGE_LEN(sstr);
6641 IoLINES_LEFT(dstr) = IoLINES_LEFT(sstr);
6642 IoTOP_NAME(dstr) = SAVEPV(IoTOP_NAME(sstr));
6643 IoTOP_GV(dstr) = gv_dup(IoTOP_GV(sstr));
6644 IoFMT_NAME(dstr) = SAVEPV(IoFMT_NAME(sstr));
6645 IoFMT_GV(dstr) = gv_dup(IoFMT_GV(sstr));
6646 IoBOTTOM_NAME(dstr) = SAVEPV(IoBOTTOM_NAME(sstr));
6647 IoBOTTOM_GV(dstr) = gv_dup(IoBOTTOM_GV(sstr));
6648 IoSUBPROCESS(dstr) = IoSUBPROCESS(sstr);
6649 IoTYPE(dstr) = IoTYPE(sstr);
6650 IoFLAGS(dstr) = IoFLAGS(sstr);
6653 SvANY(dstr) = new_XPVAV();
6654 SvCUR(dstr) = SvCUR(sstr);
6655 SvLEN(dstr) = SvLEN(sstr);
6656 SvIVX(dstr) = SvIVX(sstr);
6657 SvNVX(dstr) = SvNVX(sstr);
6658 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
6659 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
6660 AvARYLEN((AV*)dstr) = sv_dup_inc(AvARYLEN((AV*)sstr));
6661 AvFLAGS((AV*)dstr) = AvFLAGS((AV*)sstr);
6662 if (AvARRAY((AV*)sstr)) {
6663 SV **dst_ary, **src_ary;
6664 SSize_t items = AvFILLp((AV*)sstr) + 1;
6666 src_ary = AvARRAY((AV*)sstr);
6667 Newz(0, dst_ary, AvMAX((AV*)sstr)+1, SV*);
6668 ptr_table_store(PL_ptr_table, src_ary, dst_ary);
6669 SvPVX(dstr) = (char*)dst_ary;
6670 AvALLOC((AV*)dstr) = dst_ary;
6671 if (AvREAL((AV*)sstr)) {
6673 *dst_ary++ = sv_dup_inc(*src_ary++);
6677 *dst_ary++ = sv_dup(*src_ary++);
6679 items = AvMAX((AV*)sstr) - AvFILLp((AV*)sstr);
6680 while (items-- > 0) {
6681 *dst_ary++ = &PL_sv_undef;
6685 SvPVX(dstr) = Nullch;
6686 AvALLOC((AV*)dstr) = (SV**)NULL;
6690 SvANY(dstr) = new_XPVHV();
6691 SvCUR(dstr) = SvCUR(sstr);
6692 SvLEN(dstr) = SvLEN(sstr);
6693 SvIVX(dstr) = SvIVX(sstr);
6694 SvNVX(dstr) = SvNVX(sstr);
6695 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
6696 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
6697 HvRITER((HV*)dstr) = HvRITER((HV*)sstr);
6698 if (HvARRAY((HV*)sstr)) {
6701 XPVHV *dxhv = (XPVHV*)SvANY(dstr);
6702 XPVHV *sxhv = (XPVHV*)SvANY(sstr);
6703 Newz(0, dxhv->xhv_array,
6704 PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1), char);
6705 while (i <= sxhv->xhv_max) {
6706 ((HE**)dxhv->xhv_array)[i] = he_dup(((HE**)sxhv->xhv_array)[i],
6707 !!HvSHAREKEYS(sstr));
6710 dxhv->xhv_eiter = he_dup(sxhv->xhv_eiter, !!HvSHAREKEYS(sstr));
6713 SvPVX(dstr) = Nullch;
6714 HvEITER((HV*)dstr) = (HE*)NULL;
6716 HvPMROOT((HV*)dstr) = HvPMROOT((HV*)sstr); /* XXX */
6717 HvNAME((HV*)dstr) = SAVEPV(HvNAME((HV*)sstr));
6720 SvANY(dstr) = new_XPVFM();
6721 FmLINES(dstr) = FmLINES(sstr);
6725 SvANY(dstr) = new_XPVCV();
6727 SvCUR(dstr) = SvCUR(sstr);
6728 SvLEN(dstr) = SvLEN(sstr);
6729 SvIVX(dstr) = SvIVX(sstr);
6730 SvNVX(dstr) = SvNVX(sstr);
6731 SvMAGIC(dstr) = mg_dup(SvMAGIC(sstr));
6732 SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
6733 if (SvPVX(sstr) && SvLEN(sstr))
6734 SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
6736 SvPVX(dstr) = SvPVX(sstr); /* XXX shared string/random ptr? */
6737 CvSTASH(dstr) = hv_dup(CvSTASH(sstr));/* NOTE: not refcounted */
6738 CvSTART(dstr) = CvSTART(sstr);
6739 CvROOT(dstr) = OpREFCNT_inc(CvROOT(sstr));
6740 CvXSUB(dstr) = CvXSUB(sstr);
6741 CvXSUBANY(dstr) = CvXSUBANY(sstr);
6742 CvGV(dstr) = gv_dup_inc(CvGV(sstr));
6743 CvDEPTH(dstr) = CvDEPTH(sstr);
6744 if (CvPADLIST(sstr) && !AvREAL(CvPADLIST(sstr))) {
6745 /* XXX padlists are real, but pretend to be not */
6746 AvREAL_on(CvPADLIST(sstr));
6747 CvPADLIST(dstr) = av_dup_inc(CvPADLIST(sstr));
6748 AvREAL_off(CvPADLIST(sstr));
6749 AvREAL_off(CvPADLIST(dstr));
6752 CvPADLIST(dstr) = av_dup_inc(CvPADLIST(sstr));
6753 CvOUTSIDE(dstr) = cv_dup_inc(CvOUTSIDE(sstr));
6754 CvFLAGS(dstr) = CvFLAGS(sstr);
6757 Perl_croak(aTHX_ "Bizarre SvTYPE [%d]", SvTYPE(sstr));
6761 if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
6768 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max)
6773 return (PERL_CONTEXT*)NULL;
6775 /* look for it in the table first */
6776 ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
6780 /* create anew and remember what it is */
6781 Newz(56, ncxs, max + 1, PERL_CONTEXT);
6782 ptr_table_store(PL_ptr_table, cxs, ncxs);
6785 PERL_CONTEXT *cx = &cxs[ix];
6786 PERL_CONTEXT *ncx = &ncxs[ix];
6787 ncx->cx_type = cx->cx_type;
6788 if (CxTYPE(cx) == CXt_SUBST) {
6789 Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
6792 ncx->blk_oldsp = cx->blk_oldsp;
6793 ncx->blk_oldcop = cx->blk_oldcop;
6794 ncx->blk_oldretsp = cx->blk_oldretsp;
6795 ncx->blk_oldmarksp = cx->blk_oldmarksp;
6796 ncx->blk_oldscopesp = cx->blk_oldscopesp;
6797 ncx->blk_oldpm = cx->blk_oldpm;
6798 ncx->blk_gimme = cx->blk_gimme;
6799 switch (CxTYPE(cx)) {
6801 ncx->blk_sub.cv = (cx->blk_sub.olddepth == 0
6802 ? cv_dup_inc(cx->blk_sub.cv)
6803 : cv_dup(cx->blk_sub.cv));
6804 ncx->blk_sub.argarray = (cx->blk_sub.hasargs
6805 ? av_dup_inc(cx->blk_sub.argarray)
6807 ncx->blk_sub.savearray = av_dup(cx->blk_sub.savearray);
6808 ncx->blk_sub.olddepth = cx->blk_sub.olddepth;
6809 ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
6810 ncx->blk_sub.lval = cx->blk_sub.lval;
6813 ncx->blk_eval.old_in_eval = cx->blk_eval.old_in_eval;
6814 ncx->blk_eval.old_op_type = cx->blk_eval.old_op_type;
6815 ncx->blk_eval.old_name = SAVEPV(cx->blk_eval.old_name);
6816 ncx->blk_eval.old_eval_root = cx->blk_eval.old_eval_root;
6817 ncx->blk_eval.cur_text = sv_dup(cx->blk_eval.cur_text);
6820 ncx->blk_loop.label = cx->blk_loop.label;
6821 ncx->blk_loop.resetsp = cx->blk_loop.resetsp;
6822 ncx->blk_loop.redo_op = cx->blk_loop.redo_op;
6823 ncx->blk_loop.next_op = cx->blk_loop.next_op;
6824 ncx->blk_loop.last_op = cx->blk_loop.last_op;
6825 ncx->blk_loop.iterdata = (CxPADLOOP(cx)
6826 ? cx->blk_loop.iterdata
6827 : gv_dup((GV*)cx->blk_loop.iterdata));
6828 ncx->blk_loop.itersave = sv_dup_inc(cx->blk_loop.itersave);
6829 ncx->blk_loop.iterlval = sv_dup_inc(cx->blk_loop.iterlval);
6830 ncx->blk_loop.iterary = av_dup_inc(cx->blk_loop.iterary);
6831 ncx->blk_loop.iterix = cx->blk_loop.iterix;
6832 ncx->blk_loop.itermax = cx->blk_loop.itermax;
6835 ncx->blk_sub.cv = cv_dup(cx->blk_sub.cv);
6836 ncx->blk_sub.gv = gv_dup(cx->blk_sub.gv);
6837 ncx->blk_sub.dfoutgv = gv_dup_inc(cx->blk_sub.dfoutgv);
6838 ncx->blk_sub.hasargs = cx->blk_sub.hasargs;
6851 Perl_si_dup(pTHX_ PERL_SI *si)
6856 return (PERL_SI*)NULL;
6858 /* look for it in the table first */
6859 nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
6863 /* create anew and remember what it is */
6864 Newz(56, nsi, 1, PERL_SI);
6865 ptr_table_store(PL_ptr_table, si, nsi);
6867 nsi->si_stack = av_dup_inc(si->si_stack);
6868 nsi->si_cxix = si->si_cxix;
6869 nsi->si_cxmax = si->si_cxmax;
6870 nsi->si_cxstack = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax);
6871 nsi->si_type = si->si_type;
6872 nsi->si_prev = si_dup(si->si_prev);
6873 nsi->si_next = si_dup(si->si_next);
6874 nsi->si_markoff = si->si_markoff;
6879 #define POPINT(ss,ix) ((ss)[--(ix)].any_i32)
6880 #define TOPINT(ss,ix) ((ss)[ix].any_i32)
6881 #define POPLONG(ss,ix) ((ss)[--(ix)].any_long)
6882 #define TOPLONG(ss,ix) ((ss)[ix].any_long)
6883 #define POPIV(ss,ix) ((ss)[--(ix)].any_iv)
6884 #define TOPIV(ss,ix) ((ss)[ix].any_iv)
6885 #define POPPTR(ss,ix) ((ss)[--(ix)].any_ptr)
6886 #define TOPPTR(ss,ix) ((ss)[ix].any_ptr)
6887 #define POPDPTR(ss,ix) ((ss)[--(ix)].any_dptr)
6888 #define TOPDPTR(ss,ix) ((ss)[ix].any_dptr)
6889 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
6890 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
6893 #define pv_dup_inc(p) SAVEPV(p)
6894 #define pv_dup(p) SAVEPV(p)
6895 #define svp_dup_inc(p,pp) any_dup(p,pp)
6898 Perl_any_dup(pTHX_ void *v, PerlInterpreter *proto_perl)
6905 /* look for it in the table first */
6906 ret = ptr_table_fetch(PL_ptr_table, v);
6910 /* see if it is part of the interpreter structure */
6911 if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
6912 ret = (void*)(((char*)aTHXo) + (((char*)v) - (char*)proto_perl));
6920 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl)
6922 ANY *ss = proto_perl->Tsavestack;
6923 I32 ix = proto_perl->Tsavestack_ix;
6924 I32 max = proto_perl->Tsavestack_max;
6937 void (*dptr) (void*);
6938 void (*dxptr) (pTHXo_ void*);
6940 Newz(54, nss, max, ANY);
6946 case SAVEt_ITEM: /* normal string */
6947 sv = (SV*)POPPTR(ss,ix);
6948 TOPPTR(nss,ix) = sv_dup_inc(sv);
6949 sv = (SV*)POPPTR(ss,ix);
6950 TOPPTR(nss,ix) = sv_dup_inc(sv);
6952 case SAVEt_SV: /* scalar reference */
6953 sv = (SV*)POPPTR(ss,ix);
6954 TOPPTR(nss,ix) = sv_dup_inc(sv);
6955 gv = (GV*)POPPTR(ss,ix);
6956 TOPPTR(nss,ix) = gv_dup_inc(gv);
6958 case SAVEt_GENERIC_SVREF: /* generic sv */
6959 case SAVEt_SVREF: /* scalar reference */
6960 sv = (SV*)POPPTR(ss,ix);
6961 TOPPTR(nss,ix) = sv_dup_inc(sv);
6962 ptr = POPPTR(ss,ix);
6963 TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
6965 case SAVEt_AV: /* array reference */
6966 av = (AV*)POPPTR(ss,ix);
6967 TOPPTR(nss,ix) = av_dup_inc(av);
6968 gv = (GV*)POPPTR(ss,ix);
6969 TOPPTR(nss,ix) = gv_dup(gv);
6971 case SAVEt_HV: /* hash reference */
6972 hv = (HV*)POPPTR(ss,ix);
6973 TOPPTR(nss,ix) = hv_dup_inc(hv);
6974 gv = (GV*)POPPTR(ss,ix);
6975 TOPPTR(nss,ix) = gv_dup(gv);
6977 case SAVEt_INT: /* int reference */
6978 ptr = POPPTR(ss,ix);
6979 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
6980 intval = (int)POPINT(ss,ix);
6981 TOPINT(nss,ix) = intval;
6983 case SAVEt_LONG: /* long reference */
6984 ptr = POPPTR(ss,ix);
6985 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
6986 longval = (long)POPLONG(ss,ix);
6987 TOPLONG(nss,ix) = longval;
6989 case SAVEt_I32: /* I32 reference */
6990 case SAVEt_I16: /* I16 reference */
6991 case SAVEt_I8: /* I8 reference */
6992 ptr = POPPTR(ss,ix);
6993 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
6997 case SAVEt_IV: /* IV reference */
6998 ptr = POPPTR(ss,ix);
6999 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
7003 case SAVEt_SPTR: /* SV* reference */
7004 ptr = POPPTR(ss,ix);
7005 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
7006 sv = (SV*)POPPTR(ss,ix);
7007 TOPPTR(nss,ix) = sv_dup(sv);
7009 case SAVEt_VPTR: /* random* reference */
7010 ptr = POPPTR(ss,ix);
7011 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
7012 ptr = POPPTR(ss,ix);
7013 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
7015 case SAVEt_PPTR: /* char* reference */
7016 ptr = POPPTR(ss,ix);
7017 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
7018 c = (char*)POPPTR(ss,ix);
7019 TOPPTR(nss,ix) = pv_dup(c);
7021 case SAVEt_HPTR: /* HV* reference */
7022 ptr = POPPTR(ss,ix);
7023 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
7024 hv = (HV*)POPPTR(ss,ix);
7025 TOPPTR(nss,ix) = hv_dup(hv);
7027 case SAVEt_APTR: /* AV* reference */
7028 ptr = POPPTR(ss,ix);
7029 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
7030 av = (AV*)POPPTR(ss,ix);
7031 TOPPTR(nss,ix) = av_dup(av);
7034 gv = (GV*)POPPTR(ss,ix);
7035 TOPPTR(nss,ix) = gv_dup(gv);
7037 case SAVEt_GP: /* scalar reference */
7038 gp = (GP*)POPPTR(ss,ix);
7039 TOPPTR(nss,ix) = gp = gp_dup(gp);
7040 (void)GpREFCNT_inc(gp);
7041 gv = (GV*)POPPTR(ss,ix);
7042 TOPPTR(nss,ix) = gv_dup_inc(c);
7043 c = (char*)POPPTR(ss,ix);
7044 TOPPTR(nss,ix) = pv_dup(c);
7051 sv = (SV*)POPPTR(ss,ix);
7052 TOPPTR(nss,ix) = sv_dup_inc(sv);
7055 ptr = POPPTR(ss,ix);
7056 if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
7057 /* these are assumed to be refcounted properly */
7058 switch (((OP*)ptr)->op_type) {
7065 TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
7068 TOPPTR(nss,ix) = Nullop;
7073 TOPPTR(nss,ix) = Nullop;
7076 c = (char*)POPPTR(ss,ix);
7077 TOPPTR(nss,ix) = pv_dup_inc(c);
7080 longval = POPLONG(ss,ix);
7081 TOPLONG(nss,ix) = longval;
7084 hv = (HV*)POPPTR(ss,ix);
7085 TOPPTR(nss,ix) = hv_dup_inc(hv);
7086 c = (char*)POPPTR(ss,ix);
7087 TOPPTR(nss,ix) = pv_dup_inc(c);
7091 case SAVEt_DESTRUCTOR:
7092 ptr = POPPTR(ss,ix);
7093 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
7094 dptr = POPDPTR(ss,ix);
7095 TOPDPTR(nss,ix) = (void (*)(void*))any_dup(dptr, proto_perl);
7097 case SAVEt_DESTRUCTOR_X:
7098 ptr = POPPTR(ss,ix);
7099 TOPPTR(nss,ix) = any_dup(ptr, proto_perl); /* XXX quite arbitrary */
7100 dxptr = POPDXPTR(ss,ix);
7101 TOPDXPTR(nss,ix) = (void (*)(pTHXo_ void*))any_dup(dxptr, proto_perl);
7103 case SAVEt_REGCONTEXT:
7109 case SAVEt_STACK_POS: /* Position on Perl stack */
7113 case SAVEt_AELEM: /* array element */
7114 sv = (SV*)POPPTR(ss,ix);
7115 TOPPTR(nss,ix) = sv_dup_inc(sv);
7118 av = (AV*)POPPTR(ss,ix);
7119 TOPPTR(nss,ix) = av_dup_inc(av);
7121 case SAVEt_HELEM: /* hash element */
7122 sv = (SV*)POPPTR(ss,ix);
7123 TOPPTR(nss,ix) = sv_dup_inc(sv);
7124 sv = (SV*)POPPTR(ss,ix);
7125 TOPPTR(nss,ix) = sv_dup_inc(sv);
7126 hv = (HV*)POPPTR(ss,ix);
7127 TOPPTR(nss,ix) = hv_dup_inc(hv);
7130 ptr = POPPTR(ss,ix);
7131 TOPPTR(nss,ix) = ptr;
7138 Perl_croak(aTHX_ "panic: ss_dup inconsistency");
7150 perl_clone(PerlInterpreter *proto_perl, UV flags)
7153 CPerlObj *pPerl = (CPerlObj*)proto_perl;
7156 #ifdef PERL_IMPLICIT_SYS
7157 return perl_clone_using(proto_perl, flags,
7159 proto_perl->IMemShared,
7160 proto_perl->IMemParse,
7170 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
7171 struct IPerlMem* ipM, struct IPerlMem* ipMS,
7172 struct IPerlMem* ipMP, struct IPerlEnv* ipE,
7173 struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
7174 struct IPerlDir* ipD, struct IPerlSock* ipS,
7175 struct IPerlProc* ipP)
7177 /* XXX many of the string copies here can be optimized if they're
7178 * constants; they need to be allocated as common memory and just
7179 * their pointers copied. */
7185 CPerlObj *pPerl = new(ipM) CPerlObj(ipM, ipMS, ipMP, ipE, ipStd, ipLIO,
7187 PERL_SET_INTERP(pPerl);
7188 # else /* !PERL_OBJECT */
7189 PerlInterpreter *my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
7190 PERL_SET_INTERP(my_perl);
7193 memset(my_perl, 0xab, sizeof(PerlInterpreter));
7198 # else /* !DEBUGGING */
7199 Zero(my_perl, 1, PerlInterpreter);
7200 # endif /* DEBUGGING */
7204 PL_MemShared = ipMS;
7212 # endif /* PERL_OBJECT */
7213 #else /* !PERL_IMPLICIT_SYS */
7217 PerlInterpreter *my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
7218 PERL_SET_INTERP(my_perl);
7221 memset(my_perl, 0xab, sizeof(PerlInterpreter));
7226 # else /* !DEBUGGING */
7227 Zero(my_perl, 1, PerlInterpreter);
7228 # endif /* DEBUGGING */
7229 #endif /* PERL_IMPLICIT_SYS */
7232 PL_xiv_arenaroot = NULL;
7237 PL_xpviv_root = NULL;
7238 PL_xpvnv_root = NULL;
7239 PL_xpvcv_root = NULL;
7240 PL_xpvav_root = NULL;
7241 PL_xpvhv_root = NULL;
7242 PL_xpvmg_root = NULL;
7243 PL_xpvlv_root = NULL;
7244 PL_xpvbm_root = NULL;
7246 PL_nice_chunk = NULL;
7247 PL_nice_chunk_size = 0;
7250 PL_sv_root = Nullsv;
7251 PL_sv_arenaroot = Nullsv;
7253 PL_debug = proto_perl->Idebug;
7255 /* create SV map for pointer relocation */
7256 PL_ptr_table = ptr_table_new();
7258 /* initialize these special pointers as early as possible */
7259 SvANY(&PL_sv_undef) = NULL;
7260 SvREFCNT(&PL_sv_undef) = (~(U32)0)/2;
7261 SvFLAGS(&PL_sv_undef) = SVf_READONLY|SVt_NULL;
7262 ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
7265 SvUPGRADE(&PL_sv_no, SVt_PVNV);
7267 SvANY(&PL_sv_no) = new_XPVNV();
7269 SvREFCNT(&PL_sv_no) = (~(U32)0)/2;
7270 SvFLAGS(&PL_sv_no) = SVp_NOK|SVf_NOK|SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
7271 SvPVX(&PL_sv_no) = SAVEPVN(PL_No, 0);
7272 SvCUR(&PL_sv_no) = 0;
7273 SvLEN(&PL_sv_no) = 1;
7274 SvNVX(&PL_sv_no) = 0;
7275 ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
7278 SvUPGRADE(&PL_sv_yes, SVt_PVNV);
7280 SvANY(&PL_sv_yes) = new_XPVNV();
7282 SvREFCNT(&PL_sv_yes) = (~(U32)0)/2;
7283 SvFLAGS(&PL_sv_yes) = SVp_NOK|SVf_NOK|SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
7284 SvPVX(&PL_sv_yes) = SAVEPVN(PL_Yes, 1);
7285 SvCUR(&PL_sv_yes) = 1;
7286 SvLEN(&PL_sv_yes) = 2;
7287 SvNVX(&PL_sv_yes) = 1;
7288 ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
7290 /* create shared string table */
7291 PL_strtab = newHV();
7292 HvSHAREKEYS_off(PL_strtab);
7293 hv_ksplit(PL_strtab, 512);
7294 ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
7296 PL_compiling = proto_perl->Icompiling;
7297 PL_compiling.cop_stashpv = SAVEPV(PL_compiling.cop_stashpv);
7298 PL_compiling.cop_file = SAVEPV(PL_compiling.cop_file);
7299 ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
7300 if (!specialWARN(PL_compiling.cop_warnings))
7301 PL_compiling.cop_warnings = sv_dup_inc(PL_compiling.cop_warnings);
7302 PL_curcop = (COP*)any_dup(proto_perl->Tcurcop, proto_perl);
7304 /* pseudo environmental stuff */
7305 PL_origargc = proto_perl->Iorigargc;
7307 New(0, PL_origargv, i+1, char*);
7308 PL_origargv[i] = '\0';
7310 PL_origargv[i] = SAVEPV(proto_perl->Iorigargv[i]);
7312 PL_envgv = gv_dup(proto_perl->Ienvgv);
7313 PL_incgv = gv_dup(proto_perl->Iincgv);
7314 PL_hintgv = gv_dup(proto_perl->Ihintgv);
7315 PL_origfilename = SAVEPV(proto_perl->Iorigfilename);
7316 PL_diehook = sv_dup_inc(proto_perl->Idiehook);
7317 PL_warnhook = sv_dup_inc(proto_perl->Iwarnhook);
7320 PL_minus_c = proto_perl->Iminus_c;
7321 PL_patchlevel = sv_dup_inc(proto_perl->Ipatchlevel);
7322 PL_localpatches = proto_perl->Ilocalpatches;
7323 PL_splitstr = proto_perl->Isplitstr;
7324 PL_preprocess = proto_perl->Ipreprocess;
7325 PL_minus_n = proto_perl->Iminus_n;
7326 PL_minus_p = proto_perl->Iminus_p;
7327 PL_minus_l = proto_perl->Iminus_l;
7328 PL_minus_a = proto_perl->Iminus_a;
7329 PL_minus_F = proto_perl->Iminus_F;
7330 PL_doswitches = proto_perl->Idoswitches;
7331 PL_dowarn = proto_perl->Idowarn;
7332 PL_doextract = proto_perl->Idoextract;
7333 PL_sawampersand = proto_perl->Isawampersand;
7334 PL_unsafe = proto_perl->Iunsafe;
7335 PL_inplace = SAVEPV(proto_perl->Iinplace);
7336 PL_e_script = sv_dup_inc(proto_perl->Ie_script);
7337 PL_perldb = proto_perl->Iperldb;
7338 PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
7340 /* magical thingies */
7341 /* XXX time(&PL_basetime) when asked for? */
7342 PL_basetime = proto_perl->Ibasetime;
7343 PL_formfeed = sv_dup(proto_perl->Iformfeed);
7345 PL_maxsysfd = proto_perl->Imaxsysfd;
7346 PL_multiline = proto_perl->Imultiline;
7347 PL_statusvalue = proto_perl->Istatusvalue;
7349 PL_statusvalue_vms = proto_perl->Istatusvalue_vms;
7352 /* shortcuts to various I/O objects */
7353 PL_stdingv = gv_dup(proto_perl->Istdingv);
7354 PL_stderrgv = gv_dup(proto_perl->Istderrgv);
7355 PL_defgv = gv_dup(proto_perl->Idefgv);
7356 PL_argvgv = gv_dup(proto_perl->Iargvgv);
7357 PL_argvoutgv = gv_dup(proto_perl->Iargvoutgv);
7358 PL_argvout_stack = av_dup(proto_perl->Iargvout_stack);
7360 /* shortcuts to regexp stuff */
7361 PL_replgv = gv_dup(proto_perl->Ireplgv);
7363 /* shortcuts to misc objects */
7364 PL_errgv = gv_dup(proto_perl->Ierrgv);
7366 /* shortcuts to debugging objects */
7367 PL_DBgv = gv_dup(proto_perl->IDBgv);
7368 PL_DBline = gv_dup(proto_perl->IDBline);
7369 PL_DBsub = gv_dup(proto_perl->IDBsub);
7370 PL_DBsingle = sv_dup(proto_perl->IDBsingle);
7371 PL_DBtrace = sv_dup(proto_perl->IDBtrace);
7372 PL_DBsignal = sv_dup(proto_perl->IDBsignal);
7373 PL_lineary = av_dup(proto_perl->Ilineary);
7374 PL_dbargs = av_dup(proto_perl->Idbargs);
7377 PL_defstash = hv_dup_inc(proto_perl->Tdefstash);
7378 PL_curstash = hv_dup(proto_perl->Tcurstash);
7379 PL_debstash = hv_dup(proto_perl->Idebstash);
7380 PL_globalstash = hv_dup(proto_perl->Iglobalstash);
7381 PL_curstname = sv_dup_inc(proto_perl->Icurstname);
7383 PL_beginav = av_dup_inc(proto_perl->Ibeginav);
7384 PL_endav = av_dup_inc(proto_perl->Iendav);
7385 PL_checkav = av_dup_inc(proto_perl->Icheckav);
7386 PL_initav = av_dup_inc(proto_perl->Iinitav);
7388 PL_sub_generation = proto_perl->Isub_generation;
7390 /* funky return mechanisms */
7391 PL_forkprocess = proto_perl->Iforkprocess;
7393 /* subprocess state */
7394 PL_fdpid = av_dup_inc(proto_perl->Ifdpid);
7396 /* internal state */
7397 PL_tainting = proto_perl->Itainting;
7398 PL_maxo = proto_perl->Imaxo;
7399 if (proto_perl->Iop_mask)
7400 PL_op_mask = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
7402 PL_op_mask = Nullch;
7404 /* current interpreter roots */
7405 PL_main_cv = cv_dup_inc(proto_perl->Imain_cv);
7406 PL_main_root = OpREFCNT_inc(proto_perl->Imain_root);
7407 PL_main_start = proto_perl->Imain_start;
7408 PL_eval_root = OpREFCNT_inc(proto_perl->Ieval_root);
7409 PL_eval_start = proto_perl->Ieval_start;
7411 /* runtime control stuff */
7412 PL_curcopdb = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
7413 PL_copline = proto_perl->Icopline;
7415 PL_filemode = proto_perl->Ifilemode;
7416 PL_lastfd = proto_perl->Ilastfd;
7417 PL_oldname = proto_perl->Ioldname; /* XXX not quite right */
7420 PL_gensym = proto_perl->Igensym;
7421 PL_preambled = proto_perl->Ipreambled;
7422 PL_preambleav = av_dup_inc(proto_perl->Ipreambleav);
7423 PL_laststatval = proto_perl->Ilaststatval;
7424 PL_laststype = proto_perl->Ilaststype;
7425 PL_mess_sv = Nullsv;
7427 PL_orslen = proto_perl->Iorslen;
7428 PL_ors = SAVEPVN(proto_perl->Iors, PL_orslen);
7429 PL_ofmt = SAVEPV(proto_perl->Iofmt);
7431 /* interpreter atexit processing */
7432 PL_exitlistlen = proto_perl->Iexitlistlen;
7433 if (PL_exitlistlen) {
7434 New(0, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
7435 Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
7438 PL_exitlist = (PerlExitListEntry*)NULL;
7439 PL_modglobal = hv_dup_inc(proto_perl->Imodglobal);
7441 PL_profiledata = NULL;
7442 PL_rsfp = fp_dup(proto_perl->Irsfp, '<');
7443 /* PL_rsfp_filters entries have fake IoDIRP() */
7444 PL_rsfp_filters = av_dup_inc(proto_perl->Irsfp_filters);
7446 PL_compcv = cv_dup(proto_perl->Icompcv);
7447 PL_comppad = av_dup(proto_perl->Icomppad);
7448 PL_comppad_name = av_dup(proto_perl->Icomppad_name);
7449 PL_comppad_name_fill = proto_perl->Icomppad_name_fill;
7450 PL_comppad_name_floor = proto_perl->Icomppad_name_floor;
7451 PL_curpad = (SV**)ptr_table_fetch(PL_ptr_table,
7452 proto_perl->Tcurpad);
7454 #ifdef HAVE_INTERP_INTERN
7455 sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
7458 /* more statics moved here */
7459 PL_generation = proto_perl->Igeneration;
7460 PL_DBcv = cv_dup(proto_perl->IDBcv);
7462 PL_in_clean_objs = proto_perl->Iin_clean_objs;
7463 PL_in_clean_all = proto_perl->Iin_clean_all;
7465 PL_uid = proto_perl->Iuid;
7466 PL_euid = proto_perl->Ieuid;
7467 PL_gid = proto_perl->Igid;
7468 PL_egid = proto_perl->Iegid;
7469 PL_nomemok = proto_perl->Inomemok;
7470 PL_an = proto_perl->Ian;
7471 PL_cop_seqmax = proto_perl->Icop_seqmax;
7472 PL_op_seqmax = proto_perl->Iop_seqmax;
7473 PL_evalseq = proto_perl->Ievalseq;
7474 PL_origenviron = proto_perl->Iorigenviron; /* XXX not quite right */
7475 PL_origalen = proto_perl->Iorigalen;
7476 PL_pidstatus = newHV(); /* XXX flag for cloning? */
7477 PL_osname = SAVEPV(proto_perl->Iosname);
7478 PL_sh_path = SAVEPV(proto_perl->Ish_path);
7479 PL_sighandlerp = proto_perl->Isighandlerp;
7482 PL_runops = proto_perl->Irunops;
7484 Copy(proto_perl->Itokenbuf, PL_tokenbuf, 256, char);
7487 PL_cshlen = proto_perl->Icshlen;
7488 PL_cshname = SAVEPVN(proto_perl->Icshname, PL_cshlen);
7491 PL_lex_state = proto_perl->Ilex_state;
7492 PL_lex_defer = proto_perl->Ilex_defer;
7493 PL_lex_expect = proto_perl->Ilex_expect;
7494 PL_lex_formbrack = proto_perl->Ilex_formbrack;
7495 PL_lex_dojoin = proto_perl->Ilex_dojoin;
7496 PL_lex_starts = proto_perl->Ilex_starts;
7497 PL_lex_stuff = sv_dup_inc(proto_perl->Ilex_stuff);
7498 PL_lex_repl = sv_dup_inc(proto_perl->Ilex_repl);
7499 PL_lex_op = proto_perl->Ilex_op;
7500 PL_lex_inpat = proto_perl->Ilex_inpat;
7501 PL_lex_inwhat = proto_perl->Ilex_inwhat;
7502 PL_lex_brackets = proto_perl->Ilex_brackets;
7503 i = (PL_lex_brackets < 120 ? 120 : PL_lex_brackets);
7504 PL_lex_brackstack = SAVEPVN(proto_perl->Ilex_brackstack,i);
7505 PL_lex_casemods = proto_perl->Ilex_casemods;
7506 i = (PL_lex_casemods < 12 ? 12 : PL_lex_casemods);
7507 PL_lex_casestack = SAVEPVN(proto_perl->Ilex_casestack,i);
7509 Copy(proto_perl->Inextval, PL_nextval, 5, YYSTYPE);
7510 Copy(proto_perl->Inexttype, PL_nexttype, 5, I32);
7511 PL_nexttoke = proto_perl->Inexttoke;
7513 PL_linestr = sv_dup_inc(proto_perl->Ilinestr);
7514 i = proto_perl->Ibufptr - SvPVX(proto_perl->Ilinestr);
7515 PL_bufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
7516 i = proto_perl->Ioldbufptr - SvPVX(proto_perl->Ilinestr);
7517 PL_oldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
7518 i = proto_perl->Ioldoldbufptr - SvPVX(proto_perl->Ilinestr);
7519 PL_oldoldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
7520 PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
7521 i = proto_perl->Ilinestart - SvPVX(proto_perl->Ilinestr);
7522 PL_linestart = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
7523 PL_pending_ident = proto_perl->Ipending_ident;
7524 PL_sublex_info = proto_perl->Isublex_info; /* XXX not quite right */
7526 PL_expect = proto_perl->Iexpect;
7528 PL_multi_start = proto_perl->Imulti_start;
7529 PL_multi_end = proto_perl->Imulti_end;
7530 PL_multi_open = proto_perl->Imulti_open;
7531 PL_multi_close = proto_perl->Imulti_close;
7533 PL_error_count = proto_perl->Ierror_count;
7534 PL_subline = proto_perl->Isubline;
7535 PL_subname = sv_dup_inc(proto_perl->Isubname);
7537 PL_min_intro_pending = proto_perl->Imin_intro_pending;
7538 PL_max_intro_pending = proto_perl->Imax_intro_pending;
7539 PL_padix = proto_perl->Ipadix;
7540 PL_padix_floor = proto_perl->Ipadix_floor;
7541 PL_pad_reset_pending = proto_perl->Ipad_reset_pending;
7543 i = proto_perl->Ilast_uni - SvPVX(proto_perl->Ilinestr);
7544 PL_last_uni = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
7545 i = proto_perl->Ilast_lop - SvPVX(proto_perl->Ilinestr);
7546 PL_last_lop = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
7547 PL_last_lop_op = proto_perl->Ilast_lop_op;
7548 PL_in_my = proto_perl->Iin_my;
7549 PL_in_my_stash = hv_dup(proto_perl->Iin_my_stash);
7551 PL_cryptseen = proto_perl->Icryptseen;
7554 PL_hints = proto_perl->Ihints;
7556 PL_amagic_generation = proto_perl->Iamagic_generation;
7558 #ifdef USE_LOCALE_COLLATE
7559 PL_collation_ix = proto_perl->Icollation_ix;
7560 PL_collation_name = SAVEPV(proto_perl->Icollation_name);
7561 PL_collation_standard = proto_perl->Icollation_standard;
7562 PL_collxfrm_base = proto_perl->Icollxfrm_base;
7563 PL_collxfrm_mult = proto_perl->Icollxfrm_mult;
7564 #endif /* USE_LOCALE_COLLATE */
7566 #ifdef USE_LOCALE_NUMERIC
7567 PL_numeric_name = SAVEPV(proto_perl->Inumeric_name);
7568 PL_numeric_standard = proto_perl->Inumeric_standard;
7569 PL_numeric_local = proto_perl->Inumeric_local;
7570 PL_numeric_radix = proto_perl->Inumeric_radix;
7571 #endif /* !USE_LOCALE_NUMERIC */
7573 /* utf8 character classes */
7574 PL_utf8_alnum = sv_dup_inc(proto_perl->Iutf8_alnum);
7575 PL_utf8_alnumc = sv_dup_inc(proto_perl->Iutf8_alnumc);
7576 PL_utf8_ascii = sv_dup_inc(proto_perl->Iutf8_ascii);
7577 PL_utf8_alpha = sv_dup_inc(proto_perl->Iutf8_alpha);
7578 PL_utf8_space = sv_dup_inc(proto_perl->Iutf8_space);
7579 PL_utf8_cntrl = sv_dup_inc(proto_perl->Iutf8_cntrl);
7580 PL_utf8_graph = sv_dup_inc(proto_perl->Iutf8_graph);
7581 PL_utf8_digit = sv_dup_inc(proto_perl->Iutf8_digit);
7582 PL_utf8_upper = sv_dup_inc(proto_perl->Iutf8_upper);
7583 PL_utf8_lower = sv_dup_inc(proto_perl->Iutf8_lower);
7584 PL_utf8_print = sv_dup_inc(proto_perl->Iutf8_print);
7585 PL_utf8_punct = sv_dup_inc(proto_perl->Iutf8_punct);
7586 PL_utf8_xdigit = sv_dup_inc(proto_perl->Iutf8_xdigit);
7587 PL_utf8_mark = sv_dup_inc(proto_perl->Iutf8_mark);
7588 PL_utf8_toupper = sv_dup_inc(proto_perl->Iutf8_toupper);
7589 PL_utf8_totitle = sv_dup_inc(proto_perl->Iutf8_totitle);
7590 PL_utf8_tolower = sv_dup_inc(proto_perl->Iutf8_tolower);
7593 PL_last_swash_hv = Nullhv; /* reinits on demand */
7594 PL_last_swash_klen = 0;
7595 PL_last_swash_key[0]= '\0';
7596 PL_last_swash_tmps = (U8*)NULL;
7597 PL_last_swash_slen = 0;
7599 /* perly.c globals */
7600 PL_yydebug = proto_perl->Iyydebug;
7601 PL_yynerrs = proto_perl->Iyynerrs;
7602 PL_yyerrflag = proto_perl->Iyyerrflag;
7603 PL_yychar = proto_perl->Iyychar;
7604 PL_yyval = proto_perl->Iyyval;
7605 PL_yylval = proto_perl->Iyylval;
7607 PL_glob_index = proto_perl->Iglob_index;
7608 PL_srand_called = proto_perl->Isrand_called;
7609 PL_uudmap['M'] = 0; /* reinits on demand */
7610 PL_bitcount = Nullch; /* reinits on demand */
7612 if (proto_perl->Ipsig_ptr) {
7613 int sig_num[] = { SIG_NUM };
7614 Newz(0, PL_psig_ptr, sizeof(sig_num)/sizeof(*sig_num), SV*);
7615 Newz(0, PL_psig_name, sizeof(sig_num)/sizeof(*sig_num), SV*);
7616 for (i = 1; PL_sig_name[i]; i++) {
7617 PL_psig_ptr[i] = sv_dup_inc(proto_perl->Ipsig_ptr[i]);
7618 PL_psig_name[i] = sv_dup_inc(proto_perl->Ipsig_name[i]);
7622 PL_psig_ptr = (SV**)NULL;
7623 PL_psig_name = (SV**)NULL;
7626 /* thrdvar.h stuff */
7629 /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
7630 PL_tmps_ix = proto_perl->Ttmps_ix;
7631 PL_tmps_max = proto_perl->Ttmps_max;
7632 PL_tmps_floor = proto_perl->Ttmps_floor;
7633 Newz(50, PL_tmps_stack, PL_tmps_max, SV*);
7635 while (i <= PL_tmps_ix) {
7636 PL_tmps_stack[i] = sv_dup_inc(proto_perl->Ttmps_stack[i]);
7640 /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
7641 i = proto_perl->Tmarkstack_max - proto_perl->Tmarkstack;
7642 Newz(54, PL_markstack, i, I32);
7643 PL_markstack_max = PL_markstack + (proto_perl->Tmarkstack_max
7644 - proto_perl->Tmarkstack);
7645 PL_markstack_ptr = PL_markstack + (proto_perl->Tmarkstack_ptr
7646 - proto_perl->Tmarkstack);
7647 Copy(proto_perl->Tmarkstack, PL_markstack,
7648 PL_markstack_ptr - PL_markstack + 1, I32);
7650 /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
7651 * NOTE: unlike the others! */
7652 PL_scopestack_ix = proto_perl->Tscopestack_ix;
7653 PL_scopestack_max = proto_perl->Tscopestack_max;
7654 Newz(54, PL_scopestack, PL_scopestack_max, I32);
7655 Copy(proto_perl->Tscopestack, PL_scopestack, PL_scopestack_ix, I32);
7657 /* next push_return() sets PL_retstack[PL_retstack_ix]
7658 * NOTE: unlike the others! */
7659 PL_retstack_ix = proto_perl->Tretstack_ix;
7660 PL_retstack_max = proto_perl->Tretstack_max;
7661 Newz(54, PL_retstack, PL_retstack_max, OP*);
7662 Copy(proto_perl->Tretstack, PL_retstack, PL_retstack_ix, I32);
7664 /* NOTE: si_dup() looks at PL_markstack */
7665 PL_curstackinfo = si_dup(proto_perl->Tcurstackinfo);
7667 /* PL_curstack = PL_curstackinfo->si_stack; */
7668 PL_curstack = av_dup(proto_perl->Tcurstack);
7669 PL_mainstack = av_dup(proto_perl->Tmainstack);
7671 /* next PUSHs() etc. set *(PL_stack_sp+1) */
7672 PL_stack_base = AvARRAY(PL_curstack);
7673 PL_stack_sp = PL_stack_base + (proto_perl->Tstack_sp
7674 - proto_perl->Tstack_base);
7675 PL_stack_max = PL_stack_base + AvMAX(PL_curstack);
7677 /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
7678 * NOTE: unlike the others! */
7679 PL_savestack_ix = proto_perl->Tsavestack_ix;
7680 PL_savestack_max = proto_perl->Tsavestack_max;
7681 /*Newz(54, PL_savestack, PL_savestack_max, ANY);*/
7682 PL_savestack = ss_dup(proto_perl);
7688 PL_start_env = proto_perl->Tstart_env; /* XXXXXX */
7689 PL_top_env = &PL_start_env;
7691 PL_op = proto_perl->Top;
7694 PL_Xpv = (XPV*)NULL;
7695 PL_na = proto_perl->Tna;
7697 PL_statbuf = proto_perl->Tstatbuf;
7698 PL_statcache = proto_perl->Tstatcache;
7699 PL_statgv = gv_dup(proto_perl->Tstatgv);
7700 PL_statname = sv_dup_inc(proto_perl->Tstatname);
7702 PL_timesbuf = proto_perl->Ttimesbuf;
7705 PL_tainted = proto_perl->Ttainted;
7706 PL_curpm = proto_perl->Tcurpm; /* XXX No PMOP ref count */
7707 PL_nrs = sv_dup_inc(proto_perl->Tnrs);
7708 PL_rs = sv_dup_inc(proto_perl->Trs);
7709 PL_last_in_gv = gv_dup(proto_perl->Tlast_in_gv);
7710 PL_ofslen = proto_perl->Tofslen;
7711 PL_ofs = SAVEPVN(proto_perl->Tofs, PL_ofslen);
7712 PL_defoutgv = gv_dup_inc(proto_perl->Tdefoutgv);
7713 PL_chopset = proto_perl->Tchopset; /* XXX never deallocated */
7714 PL_toptarget = sv_dup_inc(proto_perl->Ttoptarget);
7715 PL_bodytarget = sv_dup_inc(proto_perl->Tbodytarget);
7716 PL_formtarget = sv_dup(proto_perl->Tformtarget);
7718 PL_restartop = proto_perl->Trestartop;
7719 PL_in_eval = proto_perl->Tin_eval;
7720 PL_delaymagic = proto_perl->Tdelaymagic;
7721 PL_dirty = proto_perl->Tdirty;
7722 PL_localizing = proto_perl->Tlocalizing;
7724 PL_protect = proto_perl->Tprotect;
7725 PL_errors = sv_dup_inc(proto_perl->Terrors);
7726 PL_av_fetch_sv = Nullsv;
7727 PL_hv_fetch_sv = Nullsv;
7728 Zero(&PL_hv_fetch_ent_mh, 1, HE); /* XXX */
7729 PL_modcount = proto_perl->Tmodcount;
7730 PL_lastgotoprobe = Nullop;
7731 PL_dumpindent = proto_perl->Tdumpindent;
7733 PL_sortcop = (OP*)any_dup(proto_perl->Tsortcop, proto_perl);
7734 PL_sortstash = hv_dup(proto_perl->Tsortstash);
7735 PL_firstgv = gv_dup(proto_perl->Tfirstgv);
7736 PL_secondgv = gv_dup(proto_perl->Tsecondgv);
7737 PL_sortcxix = proto_perl->Tsortcxix;
7738 PL_efloatbuf = Nullch; /* reinits on demand */
7739 PL_efloatsize = 0; /* reinits on demand */
7743 PL_screamfirst = NULL;
7744 PL_screamnext = NULL;
7745 PL_maxscream = -1; /* reinits on demand */
7746 PL_lastscream = Nullsv;
7748 PL_watchaddr = NULL;
7749 PL_watchok = Nullch;
7751 PL_regdummy = proto_perl->Tregdummy;
7752 PL_regcomp_parse = Nullch;
7753 PL_regxend = Nullch;
7754 PL_regcode = (regnode*)NULL;
7757 PL_regprecomp = Nullch;
7762 PL_seen_zerolen = 0;
7764 PL_regcomp_rx = (regexp*)NULL;
7766 PL_colorset = 0; /* reinits PL_colors[] */
7767 /*PL_colors[6] = {0,0,0,0,0,0};*/
7768 PL_reg_whilem_seen = 0;
7769 PL_reginput = Nullch;
7772 PL_regstartp = (I32*)NULL;
7773 PL_regendp = (I32*)NULL;
7774 PL_reglastparen = (U32*)NULL;
7775 PL_regtill = Nullch;
7777 PL_reg_start_tmp = (char**)NULL;
7778 PL_reg_start_tmpl = 0;
7779 PL_regdata = (struct reg_data*)NULL;
7782 PL_reg_eval_set = 0;
7784 PL_regprogram = (regnode*)NULL;
7786 PL_regcc = (CURCUR*)NULL;
7787 PL_reg_call_cc = (struct re_cc_state*)NULL;
7788 PL_reg_re = (regexp*)NULL;
7789 PL_reg_ganch = Nullch;
7791 PL_reg_magic = (MAGIC*)NULL;
7793 PL_reg_oldcurpm = (PMOP*)NULL;
7794 PL_reg_curpm = (PMOP*)NULL;
7795 PL_reg_oldsaved = Nullch;
7796 PL_reg_oldsavedlen = 0;
7798 PL_reg_leftiter = 0;
7799 PL_reg_poscache = Nullch;
7800 PL_reg_poscache_size= 0;
7802 /* RE engine - function pointers */
7803 PL_regcompp = proto_perl->Tregcompp;
7804 PL_regexecp = proto_perl->Tregexecp;
7805 PL_regint_start = proto_perl->Tregint_start;
7806 PL_regint_string = proto_perl->Tregint_string;
7807 PL_regfree = proto_perl->Tregfree;
7809 PL_reginterp_cnt = 0;
7810 PL_reg_starttry = 0;
7813 return (PerlInterpreter*)pPerl;
7819 #else /* !USE_ITHREADS */
7825 #endif /* USE_ITHREADS */
7828 do_report_used(pTHXo_ SV *sv)
7830 if (SvTYPE(sv) != SVTYPEMASK) {
7831 PerlIO_printf(Perl_debug_log, "****\n");
7837 do_clean_objs(pTHXo_ SV *sv)
7841 if (SvROK(sv) && SvOBJECT(rv = SvRV(sv))) {
7842 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(sv));)
7848 /* XXX Might want to check arrays, etc. */
7851 #ifndef DISABLE_DESTRUCTOR_KLUDGE
7853 do_clean_named_objs(pTHXo_ SV *sv)
7855 if (SvTYPE(sv) == SVt_PVGV && GvGP(sv)) {
7856 if ( SvOBJECT(GvSV(sv)) ||
7857 GvAV(sv) && SvOBJECT(GvAV(sv)) ||
7858 GvHV(sv) && SvOBJECT(GvHV(sv)) ||
7859 GvIO(sv) && SvOBJECT(GvIO(sv)) ||
7860 GvCV(sv) && SvOBJECT(GvCV(sv)) )
7862 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning named glob object:\n "), sv_dump(sv));)
7870 do_clean_all(pTHXo_ SV *sv)
7872 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) );)
7873 SvFLAGS(sv) |= SVf_BREAK;