3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4 * 2000, 2001, 2002, 2003, by Larry Wall and others
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
9 * "I wonder what the Entish is for 'yes' and 'no'," he thought.
12 * This file contains the code that creates, manipulates and destroys
13 * scalar values (SVs). The other types (AV, HV, GV, etc.) reuse the
14 * structure of an SV, so their creation and destruction is handled
15 * here; higher-level functions are in av.c, hv.c, and so on. Opcode
16 * level functions (eg. substr, split, join) for each of the types are
27 #ifdef PERL_UTF8_CACHE_ASSERT
28 /* The cache element 0 is the Unicode offset;
29 * the cache element 1 is the byte offset of the element 0;
30 * the cache element 2 is the Unicode length of the substring;
31 * the cache element 3 is the byte length of the substring;
32 * The checking of the substring side would be good
33 * but substr() has enough code paths to make my head spin;
34 * if adding more checks watch out for the following tests:
35 * t/op/index.t t/op/length.t t/op/pat.t t/op/substr.t
36 * lib/utf8.t lib/Unicode/Collate/t/index.t
39 #define ASSERT_UTF8_CACHE(cache) \
40 STMT_START { if (cache) { assert((cache)[0] <= (cache)[1]); } } STMT_END
42 #define ASSERT_UTF8_CACHE(cache) NOOP
45 #ifdef PERL_COPY_ON_WRITE
46 #define SV_COW_NEXT_SV(sv) INT2PTR(SV *,SvUVX(sv))
47 #define SV_COW_NEXT_SV_SET(current,next) SvUVX(current) = PTR2UV(next)
48 /* This is a pessimistic view. Scalar must be purely a read-write PV to copy-
52 /* ============================================================================
54 =head1 Allocation and deallocation of SVs.
56 An SV (or AV, HV, etc.) is allocated in two parts: the head (struct sv,
57 av, hv...) contains type and reference count information, as well as a
58 pointer to the body (struct xrv, xpv, xpviv...), which contains fields
59 specific to each type.
61 Normally, this allocation is done using arenas, which are approximately
62 1K chunks of memory parcelled up into N heads or bodies. The first slot
63 in each arena is reserved, and is used to hold a link to the next arena.
64 In the case of heads, the unused first slot also contains some flags and
65 a note of the number of slots. Snaked through each arena chain is a
66 linked list of free items; when this becomes empty, an extra arena is
67 allocated and divided up into N items which are threaded into the free
70 The following global variables are associated with arenas:
72 PL_sv_arenaroot pointer to list of SV arenas
73 PL_sv_root pointer to list of free SV structures
75 PL_foo_arenaroot pointer to list of foo arenas,
76 PL_foo_root pointer to list of free foo bodies
77 ... for foo in xiv, xnv, xrv, xpv etc.
79 Note that some of the larger and more rarely used body types (eg xpvio)
80 are not allocated using arenas, but are instead just malloc()/free()ed as
81 required. Also, if PURIFY is defined, arenas are abandoned altogether,
82 with all items individually malloc()ed. In addition, a few SV heads are
83 not allocated from an arena, but are instead directly created as static
84 or auto variables, eg PL_sv_undef.
86 The SV arena serves the secondary purpose of allowing still-live SVs
87 to be located and destroyed during final cleanup.
89 At the lowest level, the macros new_SV() and del_SV() grab and free
90 an SV head. (If debugging with -DD, del_SV() calls the function S_del_sv()
91 to return the SV to the free list with error checking.) new_SV() calls
92 more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
93 SVs in the free list have their SvTYPE field set to all ones.
95 Similarly, there are macros new_XIV()/del_XIV(), new_XNV()/del_XNV() etc
96 that allocate and return individual body types. Normally these are mapped
97 to the arena-manipulating functions new_xiv()/del_xiv() etc, but may be
98 instead mapped directly to malloc()/free() if PURIFY is defined. The
99 new/del functions remove from, or add to, the appropriate PL_foo_root
100 list, and call more_xiv() etc to add a new arena if the list is empty.
102 At the time of very final cleanup, sv_free_arenas() is called from
103 perl_destruct() to physically free all the arenas allocated since the
104 start of the interpreter. Note that this also clears PL_he_arenaroot,
105 which is otherwise dealt with in hv.c.
107 Manipulation of any of the PL_*root pointers is protected by enclosing
108 LOCK_SV_MUTEX; ... UNLOCK_SV_MUTEX calls which should Do the Right Thing
109 if threads are enabled.
111 The function visit() scans the SV arenas list, and calls a specified
112 function for each SV it finds which is still live - ie which has an SvTYPE
113 other than all 1's, and a non-zero SvREFCNT. visit() is used by the
114 following functions (specified as [function that calls visit()] / [function
115 called by visit() for each SV]):
117 sv_report_used() / do_report_used()
118 dump all remaining SVs (debugging aid)
120 sv_clean_objs() / do_clean_objs(),do_clean_named_objs()
121 Attempt to free all objects pointed to by RVs,
122 and, unless DISABLE_DESTRUCTOR_KLUDGE is defined,
123 try to do the same for all objects indirectly
124 referenced by typeglobs too. Called once from
125 perl_destruct(), prior to calling sv_clean_all()
128 sv_clean_all() / do_clean_all()
129 SvREFCNT_dec(sv) each remaining SV, possibly
130 triggering an sv_free(). It also sets the
131 SVf_BREAK flag on the SV to indicate that the
132 refcnt has been artificially lowered, and thus
133 stopping sv_free() from giving spurious warnings
134 about SVs which unexpectedly have a refcnt
135 of zero. called repeatedly from perl_destruct()
136 until there are no SVs left.
140 Private API to rest of sv.c
144 new_XIV(), del_XIV(),
145 new_XNV(), del_XNV(),
150 sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
155 ============================================================================ */
160 * "A time to plant, and a time to uproot what was planted..."
163 #define plant_SV(p) \
165 SvANY(p) = (void *)PL_sv_root; \
166 SvFLAGS(p) = SVTYPEMASK; \
171 /* sv_mutex must be held while calling uproot_SV() */
172 #define uproot_SV(p) \
175 PL_sv_root = (SV*)SvANY(p); \
180 /* new_SV(): return a new, empty SV head */
182 #ifdef DEBUG_LEAKING_SCALARS
183 /* provide a real function for a debugger to play with */
200 # define new_SV(p) (p)=S_new_SV(aTHX)
218 /* del_SV(): return an empty SV head to the free list */
233 S_del_sv(pTHX_ SV *p)
240 for (sva = PL_sv_arenaroot; sva; sva = (SV *) SvANY(sva)) {
242 svend = &sva[SvREFCNT(sva)];
243 if (p >= sv && p < svend)
247 if (ckWARN_d(WARN_INTERNAL))
248 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
249 "Attempt to free non-arena SV: 0x%"UVxf,
257 #else /* ! DEBUGGING */
259 #define del_SV(p) plant_SV(p)
261 #endif /* DEBUGGING */
265 =head1 SV Manipulation Functions
267 =for apidoc sv_add_arena
269 Given a chunk of memory, link it to the head of the list of arenas,
270 and split it into a list of free SVs.
276 Perl_sv_add_arena(pTHX_ char *ptr, U32 size, U32 flags)
281 Zero(ptr, size, char);
283 /* The first SV in an arena isn't an SV. */
284 SvANY(sva) = (void *) PL_sv_arenaroot; /* ptr to next arena */
285 SvREFCNT(sva) = size / sizeof(SV); /* number of SV slots */
286 SvFLAGS(sva) = flags; /* FAKE if not to be freed */
288 PL_sv_arenaroot = sva;
289 PL_sv_root = sva + 1;
291 svend = &sva[SvREFCNT(sva) - 1];
294 SvANY(sv) = (void *)(SV*)(sv + 1);
295 SvFLAGS(sv) = SVTYPEMASK;
299 SvFLAGS(sv) = SVTYPEMASK;
302 /* make some more SVs by adding another arena */
304 /* sv_mutex must be held while calling more_sv() */
311 sv_add_arena(PL_nice_chunk, PL_nice_chunk_size, 0);
312 PL_nice_chunk = Nullch;
313 PL_nice_chunk_size = 0;
316 char *chunk; /* must use New here to match call to */
317 New(704,chunk,1008,char); /* Safefree() in sv_free_arenas() */
318 sv_add_arena(chunk, 1008, 0);
324 /* visit(): call the named function for each non-free SV in the arenas. */
327 S_visit(pTHX_ SVFUNC_t f)
334 for (sva = PL_sv_arenaroot; sva; sva = (SV*)SvANY(sva)) {
335 svend = &sva[SvREFCNT(sva)];
336 for (sv = sva + 1; sv < svend; ++sv) {
337 if (SvTYPE(sv) != SVTYPEMASK && SvREFCNT(sv)) {
348 /* called by sv_report_used() for each live SV */
351 do_report_used(pTHX_ SV *sv)
353 if (SvTYPE(sv) != SVTYPEMASK) {
354 PerlIO_printf(Perl_debug_log, "****\n");
361 =for apidoc sv_report_used
363 Dump the contents of all SVs not yet freed. (Debugging aid).
369 Perl_sv_report_used(pTHX)
372 visit(do_report_used);
376 /* called by sv_clean_objs() for each live SV */
379 do_clean_objs(pTHX_ SV *sv)
383 if (SvROK(sv) && SvOBJECT(rv = SvRV(sv))) {
384 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(sv)));
396 /* XXX Might want to check arrays, etc. */
399 /* called by sv_clean_objs() for each live SV */
401 #ifndef DISABLE_DESTRUCTOR_KLUDGE
403 do_clean_named_objs(pTHX_ SV *sv)
405 if (SvTYPE(sv) == SVt_PVGV && GvGP(sv)) {
406 if ( SvOBJECT(GvSV(sv)) ||
407 (GvAV(sv) && SvOBJECT(GvAV(sv))) ||
408 (GvHV(sv) && SvOBJECT(GvHV(sv))) ||
409 (GvIO(sv) && SvOBJECT(GvIO(sv))) ||
410 (GvCV(sv) && SvOBJECT(GvCV(sv))) )
412 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning named glob object:\n "), sv_dump(sv)));
420 =for apidoc sv_clean_objs
422 Attempt to destroy all objects not yet freed
428 Perl_sv_clean_objs(pTHX)
430 PL_in_clean_objs = TRUE;
431 visit(do_clean_objs);
432 #ifndef DISABLE_DESTRUCTOR_KLUDGE
433 /* some barnacles may yet remain, clinging to typeglobs */
434 visit(do_clean_named_objs);
436 PL_in_clean_objs = FALSE;
439 /* called by sv_clean_all() for each live SV */
442 do_clean_all(pTHX_ SV *sv)
444 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
445 SvFLAGS(sv) |= SVf_BREAK;
450 =for apidoc sv_clean_all
452 Decrement the refcnt of each remaining SV, possibly triggering a
453 cleanup. This function may have to be called multiple times to free
454 SVs which are in complex self-referential hierarchies.
460 Perl_sv_clean_all(pTHX)
463 PL_in_clean_all = TRUE;
464 cleaned = visit(do_clean_all);
465 PL_in_clean_all = FALSE;
470 =for apidoc sv_free_arenas
472 Deallocate the memory used by all arenas. Note that all the individual SV
473 heads and bodies within the arenas must already have been freed.
479 Perl_sv_free_arenas(pTHX)
483 XPV *arena, *arenanext;
485 /* Free arenas here, but be careful about fake ones. (We assume
486 contiguity of the fake ones with the corresponding real ones.) */
488 for (sva = PL_sv_arenaroot; sva; sva = svanext) {
489 svanext = (SV*) SvANY(sva);
490 while (svanext && SvFAKE(svanext))
491 svanext = (SV*) SvANY(svanext);
494 Safefree((void *)sva);
497 for (arena = PL_xiv_arenaroot; arena; arena = arenanext) {
498 arenanext = (XPV*)arena->xpv_pv;
501 PL_xiv_arenaroot = 0;
503 for (arena = PL_xnv_arenaroot; arena; arena = arenanext) {
504 arenanext = (XPV*)arena->xpv_pv;
507 PL_xnv_arenaroot = 0;
509 for (arena = PL_xrv_arenaroot; arena; arena = arenanext) {
510 arenanext = (XPV*)arena->xpv_pv;
513 PL_xrv_arenaroot = 0;
515 for (arena = PL_xpv_arenaroot; arena; arena = arenanext) {
516 arenanext = (XPV*)arena->xpv_pv;
519 PL_xpv_arenaroot = 0;
521 for (arena = (XPV*)PL_xpviv_arenaroot; arena; arena = arenanext) {
522 arenanext = (XPV*)arena->xpv_pv;
525 PL_xpviv_arenaroot = 0;
527 for (arena = (XPV*)PL_xpvnv_arenaroot; arena; arena = arenanext) {
528 arenanext = (XPV*)arena->xpv_pv;
531 PL_xpvnv_arenaroot = 0;
533 for (arena = (XPV*)PL_xpvcv_arenaroot; arena; arena = arenanext) {
534 arenanext = (XPV*)arena->xpv_pv;
537 PL_xpvcv_arenaroot = 0;
539 for (arena = (XPV*)PL_xpvav_arenaroot; arena; arena = arenanext) {
540 arenanext = (XPV*)arena->xpv_pv;
543 PL_xpvav_arenaroot = 0;
545 for (arena = (XPV*)PL_xpvhv_arenaroot; arena; arena = arenanext) {
546 arenanext = (XPV*)arena->xpv_pv;
549 PL_xpvhv_arenaroot = 0;
551 for (arena = (XPV*)PL_xpvmg_arenaroot; arena; arena = arenanext) {
552 arenanext = (XPV*)arena->xpv_pv;
555 PL_xpvmg_arenaroot = 0;
557 for (arena = (XPV*)PL_xpvlv_arenaroot; arena; arena = arenanext) {
558 arenanext = (XPV*)arena->xpv_pv;
561 PL_xpvlv_arenaroot = 0;
563 for (arena = (XPV*)PL_xpvbm_arenaroot; arena; arena = arenanext) {
564 arenanext = (XPV*)arena->xpv_pv;
567 PL_xpvbm_arenaroot = 0;
569 for (arena = (XPV*)PL_he_arenaroot; arena; arena = arenanext) {
570 arenanext = (XPV*)arena->xpv_pv;
576 Safefree(PL_nice_chunk);
577 PL_nice_chunk = Nullch;
578 PL_nice_chunk_size = 0;
584 =for apidoc report_uninit
586 Print appropriate "Use of uninitialized variable" warning
592 Perl_report_uninit(pTHX)
595 Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
596 " in ", OP_DESC(PL_op));
598 Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit, "", "");
601 /* grab a new IV body from the free list, allocating more if necessary */
612 * See comment in more_xiv() -- RAM.
614 PL_xiv_root = *(IV**)xiv;
616 return (XPVIV*)((char*)xiv - STRUCT_OFFSET(XPVIV, xiv_iv));
619 /* return an IV body to the free list */
622 S_del_xiv(pTHX_ XPVIV *p)
624 IV* xiv = (IV*)((char*)(p) + STRUCT_OFFSET(XPVIV, xiv_iv));
626 *(IV**)xiv = PL_xiv_root;
631 /* allocate another arena's worth of IV bodies */
639 New(705, ptr, 1008/sizeof(XPV), XPV);
640 ptr->xpv_pv = (char*)PL_xiv_arenaroot; /* linked list of xiv arenas */
641 PL_xiv_arenaroot = ptr; /* to keep Purify happy */
644 xivend = &xiv[1008 / sizeof(IV) - 1];
645 xiv += (sizeof(XPV) - 1) / sizeof(IV) + 1; /* fudge by size of XPV */
647 while (xiv < xivend) {
648 *(IV**)xiv = (IV *)(xiv + 1);
654 /* grab a new NV body from the free list, allocating more if necessary */
664 PL_xnv_root = *(NV**)xnv;
666 return (XPVNV*)((char*)xnv - STRUCT_OFFSET(XPVNV, xnv_nv));
669 /* return an NV body to the free list */
672 S_del_xnv(pTHX_ XPVNV *p)
674 NV* xnv = (NV*)((char*)(p) + STRUCT_OFFSET(XPVNV, xnv_nv));
676 *(NV**)xnv = PL_xnv_root;
681 /* allocate another arena's worth of NV bodies */
689 New(711, ptr, 1008/sizeof(XPV), XPV);
690 ptr->xpv_pv = (char*)PL_xnv_arenaroot;
691 PL_xnv_arenaroot = ptr;
694 xnvend = &xnv[1008 / sizeof(NV) - 1];
695 xnv += (sizeof(XPVIV) - 1) / sizeof(NV) + 1; /* fudge by sizeof XPVIV */
697 while (xnv < xnvend) {
698 *(NV**)xnv = (NV*)(xnv + 1);
704 /* grab a new struct xrv from the free list, allocating more if necessary */
714 PL_xrv_root = (XRV*)xrv->xrv_rv;
719 /* return a struct xrv to the free list */
722 S_del_xrv(pTHX_ XRV *p)
725 p->xrv_rv = (SV*)PL_xrv_root;
730 /* allocate another arena's worth of struct xrv */
736 register XRV* xrvend;
738 New(712, ptr, 1008/sizeof(XPV), XPV);
739 ptr->xpv_pv = (char*)PL_xrv_arenaroot;
740 PL_xrv_arenaroot = ptr;
743 xrvend = &xrv[1008 / sizeof(XRV) - 1];
744 xrv += (sizeof(XPV) - 1) / sizeof(XRV) + 1;
746 while (xrv < xrvend) {
747 xrv->xrv_rv = (SV*)(xrv + 1);
753 /* grab a new struct xpv from the free list, allocating more if necessary */
763 PL_xpv_root = (XPV*)xpv->xpv_pv;
768 /* return a struct xpv to the free list */
771 S_del_xpv(pTHX_ XPV *p)
774 p->xpv_pv = (char*)PL_xpv_root;
779 /* allocate another arena's worth of struct xpv */
785 register XPV* xpvend;
786 New(713, xpv, 1008/sizeof(XPV), XPV);
787 xpv->xpv_pv = (char*)PL_xpv_arenaroot;
788 PL_xpv_arenaroot = xpv;
790 xpvend = &xpv[1008 / sizeof(XPV) - 1];
792 while (xpv < xpvend) {
793 xpv->xpv_pv = (char*)(xpv + 1);
799 /* grab a new struct xpviv from the free list, allocating more if necessary */
808 xpviv = PL_xpviv_root;
809 PL_xpviv_root = (XPVIV*)xpviv->xpv_pv;
814 /* return a struct xpviv to the free list */
817 S_del_xpviv(pTHX_ XPVIV *p)
820 p->xpv_pv = (char*)PL_xpviv_root;
825 /* allocate another arena's worth of struct xpviv */
830 register XPVIV* xpviv;
831 register XPVIV* xpvivend;
832 New(714, xpviv, 1008/sizeof(XPVIV), XPVIV);
833 xpviv->xpv_pv = (char*)PL_xpviv_arenaroot;
834 PL_xpviv_arenaroot = xpviv;
836 xpvivend = &xpviv[1008 / sizeof(XPVIV) - 1];
837 PL_xpviv_root = ++xpviv;
838 while (xpviv < xpvivend) {
839 xpviv->xpv_pv = (char*)(xpviv + 1);
845 /* grab a new struct xpvnv from the free list, allocating more if necessary */
854 xpvnv = PL_xpvnv_root;
855 PL_xpvnv_root = (XPVNV*)xpvnv->xpv_pv;
860 /* return a struct xpvnv to the free list */
863 S_del_xpvnv(pTHX_ XPVNV *p)
866 p->xpv_pv = (char*)PL_xpvnv_root;
871 /* allocate another arena's worth of struct xpvnv */
876 register XPVNV* xpvnv;
877 register XPVNV* xpvnvend;
878 New(715, xpvnv, 1008/sizeof(XPVNV), XPVNV);
879 xpvnv->xpv_pv = (char*)PL_xpvnv_arenaroot;
880 PL_xpvnv_arenaroot = xpvnv;
882 xpvnvend = &xpvnv[1008 / sizeof(XPVNV) - 1];
883 PL_xpvnv_root = ++xpvnv;
884 while (xpvnv < xpvnvend) {
885 xpvnv->xpv_pv = (char*)(xpvnv + 1);
891 /* grab a new struct xpvcv from the free list, allocating more if necessary */
900 xpvcv = PL_xpvcv_root;
901 PL_xpvcv_root = (XPVCV*)xpvcv->xpv_pv;
906 /* return a struct xpvcv to the free list */
909 S_del_xpvcv(pTHX_ XPVCV *p)
912 p->xpv_pv = (char*)PL_xpvcv_root;
917 /* allocate another arena's worth of struct xpvcv */
922 register XPVCV* xpvcv;
923 register XPVCV* xpvcvend;
924 New(716, xpvcv, 1008/sizeof(XPVCV), XPVCV);
925 xpvcv->xpv_pv = (char*)PL_xpvcv_arenaroot;
926 PL_xpvcv_arenaroot = xpvcv;
928 xpvcvend = &xpvcv[1008 / sizeof(XPVCV) - 1];
929 PL_xpvcv_root = ++xpvcv;
930 while (xpvcv < xpvcvend) {
931 xpvcv->xpv_pv = (char*)(xpvcv + 1);
937 /* grab a new struct xpvav from the free list, allocating more if necessary */
946 xpvav = PL_xpvav_root;
947 PL_xpvav_root = (XPVAV*)xpvav->xav_array;
952 /* return a struct xpvav to the free list */
955 S_del_xpvav(pTHX_ XPVAV *p)
958 p->xav_array = (char*)PL_xpvav_root;
963 /* allocate another arena's worth of struct xpvav */
968 register XPVAV* xpvav;
969 register XPVAV* xpvavend;
970 New(717, xpvav, 1008/sizeof(XPVAV), XPVAV);
971 xpvav->xav_array = (char*)PL_xpvav_arenaroot;
972 PL_xpvav_arenaroot = xpvav;
974 xpvavend = &xpvav[1008 / sizeof(XPVAV) - 1];
975 PL_xpvav_root = ++xpvav;
976 while (xpvav < xpvavend) {
977 xpvav->xav_array = (char*)(xpvav + 1);
980 xpvav->xav_array = 0;
983 /* grab a new struct xpvhv from the free list, allocating more if necessary */
992 xpvhv = PL_xpvhv_root;
993 PL_xpvhv_root = (XPVHV*)xpvhv->xhv_array;
998 /* return a struct xpvhv to the free list */
1001 S_del_xpvhv(pTHX_ XPVHV *p)
1004 p->xhv_array = (char*)PL_xpvhv_root;
1009 /* allocate another arena's worth of struct xpvhv */
1014 register XPVHV* xpvhv;
1015 register XPVHV* xpvhvend;
1016 New(718, xpvhv, 1008/sizeof(XPVHV), XPVHV);
1017 xpvhv->xhv_array = (char*)PL_xpvhv_arenaroot;
1018 PL_xpvhv_arenaroot = xpvhv;
1020 xpvhvend = &xpvhv[1008 / sizeof(XPVHV) - 1];
1021 PL_xpvhv_root = ++xpvhv;
1022 while (xpvhv < xpvhvend) {
1023 xpvhv->xhv_array = (char*)(xpvhv + 1);
1026 xpvhv->xhv_array = 0;
1029 /* grab a new struct xpvmg from the free list, allocating more if necessary */
1038 xpvmg = PL_xpvmg_root;
1039 PL_xpvmg_root = (XPVMG*)xpvmg->xpv_pv;
1044 /* return a struct xpvmg to the free list */
1047 S_del_xpvmg(pTHX_ XPVMG *p)
1050 p->xpv_pv = (char*)PL_xpvmg_root;
1055 /* allocate another arena's worth of struct xpvmg */
1060 register XPVMG* xpvmg;
1061 register XPVMG* xpvmgend;
1062 New(719, xpvmg, 1008/sizeof(XPVMG), XPVMG);
1063 xpvmg->xpv_pv = (char*)PL_xpvmg_arenaroot;
1064 PL_xpvmg_arenaroot = xpvmg;
1066 xpvmgend = &xpvmg[1008 / sizeof(XPVMG) - 1];
1067 PL_xpvmg_root = ++xpvmg;
1068 while (xpvmg < xpvmgend) {
1069 xpvmg->xpv_pv = (char*)(xpvmg + 1);
1075 /* grab a new struct xpvlv from the free list, allocating more if necessary */
1084 xpvlv = PL_xpvlv_root;
1085 PL_xpvlv_root = (XPVLV*)xpvlv->xpv_pv;
1090 /* return a struct xpvlv to the free list */
1093 S_del_xpvlv(pTHX_ XPVLV *p)
1096 p->xpv_pv = (char*)PL_xpvlv_root;
1101 /* allocate another arena's worth of struct xpvlv */
1106 register XPVLV* xpvlv;
1107 register XPVLV* xpvlvend;
1108 New(720, xpvlv, 1008/sizeof(XPVLV), XPVLV);
1109 xpvlv->xpv_pv = (char*)PL_xpvlv_arenaroot;
1110 PL_xpvlv_arenaroot = xpvlv;
1112 xpvlvend = &xpvlv[1008 / sizeof(XPVLV) - 1];
1113 PL_xpvlv_root = ++xpvlv;
1114 while (xpvlv < xpvlvend) {
1115 xpvlv->xpv_pv = (char*)(xpvlv + 1);
1121 /* grab a new struct xpvbm from the free list, allocating more if necessary */
1130 xpvbm = PL_xpvbm_root;
1131 PL_xpvbm_root = (XPVBM*)xpvbm->xpv_pv;
1136 /* return a struct xpvbm to the free list */
1139 S_del_xpvbm(pTHX_ XPVBM *p)
1142 p->xpv_pv = (char*)PL_xpvbm_root;
1147 /* allocate another arena's worth of struct xpvbm */
1152 register XPVBM* xpvbm;
1153 register XPVBM* xpvbmend;
1154 New(721, xpvbm, 1008/sizeof(XPVBM), XPVBM);
1155 xpvbm->xpv_pv = (char*)PL_xpvbm_arenaroot;
1156 PL_xpvbm_arenaroot = xpvbm;
1158 xpvbmend = &xpvbm[1008 / sizeof(XPVBM) - 1];
1159 PL_xpvbm_root = ++xpvbm;
1160 while (xpvbm < xpvbmend) {
1161 xpvbm->xpv_pv = (char*)(xpvbm + 1);
1167 #define my_safemalloc(s) (void*)safemalloc(s)
1168 #define my_safefree(p) safefree((char*)p)
1172 #define new_XIV() my_safemalloc(sizeof(XPVIV))
1173 #define del_XIV(p) my_safefree(p)
1175 #define new_XNV() my_safemalloc(sizeof(XPVNV))
1176 #define del_XNV(p) my_safefree(p)
1178 #define new_XRV() my_safemalloc(sizeof(XRV))
1179 #define del_XRV(p) my_safefree(p)
1181 #define new_XPV() my_safemalloc(sizeof(XPV))
1182 #define del_XPV(p) my_safefree(p)
1184 #define new_XPVIV() my_safemalloc(sizeof(XPVIV))
1185 #define del_XPVIV(p) my_safefree(p)
1187 #define new_XPVNV() my_safemalloc(sizeof(XPVNV))
1188 #define del_XPVNV(p) my_safefree(p)
1190 #define new_XPVCV() my_safemalloc(sizeof(XPVCV))
1191 #define del_XPVCV(p) my_safefree(p)
1193 #define new_XPVAV() my_safemalloc(sizeof(XPVAV))
1194 #define del_XPVAV(p) my_safefree(p)
1196 #define new_XPVHV() my_safemalloc(sizeof(XPVHV))
1197 #define del_XPVHV(p) my_safefree(p)
1199 #define new_XPVMG() my_safemalloc(sizeof(XPVMG))
1200 #define del_XPVMG(p) my_safefree(p)
1202 #define new_XPVLV() my_safemalloc(sizeof(XPVLV))
1203 #define del_XPVLV(p) my_safefree(p)
1205 #define new_XPVBM() my_safemalloc(sizeof(XPVBM))
1206 #define del_XPVBM(p) my_safefree(p)
1210 #define new_XIV() (void*)new_xiv()
1211 #define del_XIV(p) del_xiv((XPVIV*) p)
1213 #define new_XNV() (void*)new_xnv()
1214 #define del_XNV(p) del_xnv((XPVNV*) p)
1216 #define new_XRV() (void*)new_xrv()
1217 #define del_XRV(p) del_xrv((XRV*) p)
1219 #define new_XPV() (void*)new_xpv()
1220 #define del_XPV(p) del_xpv((XPV *)p)
1222 #define new_XPVIV() (void*)new_xpviv()
1223 #define del_XPVIV(p) del_xpviv((XPVIV *)p)
1225 #define new_XPVNV() (void*)new_xpvnv()
1226 #define del_XPVNV(p) del_xpvnv((XPVNV *)p)
1228 #define new_XPVCV() (void*)new_xpvcv()
1229 #define del_XPVCV(p) del_xpvcv((XPVCV *)p)
1231 #define new_XPVAV() (void*)new_xpvav()
1232 #define del_XPVAV(p) del_xpvav((XPVAV *)p)
1234 #define new_XPVHV() (void*)new_xpvhv()
1235 #define del_XPVHV(p) del_xpvhv((XPVHV *)p)
1237 #define new_XPVMG() (void*)new_xpvmg()
1238 #define del_XPVMG(p) del_xpvmg((XPVMG *)p)
1240 #define new_XPVLV() (void*)new_xpvlv()
1241 #define del_XPVLV(p) del_xpvlv((XPVLV *)p)
1243 #define new_XPVBM() (void*)new_xpvbm()
1244 #define del_XPVBM(p) del_xpvbm((XPVBM *)p)
1248 #define new_XPVGV() my_safemalloc(sizeof(XPVGV))
1249 #define del_XPVGV(p) my_safefree(p)
1251 #define new_XPVFM() my_safemalloc(sizeof(XPVFM))
1252 #define del_XPVFM(p) my_safefree(p)
1254 #define new_XPVIO() my_safemalloc(sizeof(XPVIO))
1255 #define del_XPVIO(p) my_safefree(p)
1258 =for apidoc sv_upgrade
1260 Upgrade an SV to a more complex form. Generally adds a new body type to the
1261 SV, then copies across as much information as possible from the old body.
1262 You generally want to use the C<SvUPGRADE> macro wrapper. See also C<svtype>.
1268 Perl_sv_upgrade(pTHX_ register SV *sv, U32 mt)
1275 MAGIC* magic = NULL;
1278 if (mt != SVt_PV && SvIsCOW(sv)) {
1279 sv_force_normal_flags(sv, 0);
1282 if (SvTYPE(sv) == mt)
1286 (void)SvOOK_off(sv);
1288 switch (SvTYPE(sv)) {
1309 else if (mt < SVt_PVIV)
1326 pv = (char*)SvRV(sv);
1346 else if (mt == SVt_NV)
1357 del_XPVIV(SvANY(sv));
1367 del_XPVNV(SvANY(sv));
1375 magic = SvMAGIC(sv);
1376 stash = SvSTASH(sv);
1377 del_XPVMG(SvANY(sv));
1380 Perl_croak(aTHX_ "Can't upgrade that kind of scalar");
1385 Perl_croak(aTHX_ "Can't upgrade to undef");
1387 SvANY(sv) = new_XIV();
1391 SvANY(sv) = new_XNV();
1395 SvANY(sv) = new_XRV();
1399 SvANY(sv) = new_XPV();
1405 SvANY(sv) = new_XPVIV();
1415 SvANY(sv) = new_XPVNV();
1423 SvANY(sv) = new_XPVMG();
1429 SvMAGIC(sv) = magic;
1430 SvSTASH(sv) = stash;
1433 SvANY(sv) = new_XPVLV();
1439 SvMAGIC(sv) = magic;
1440 SvSTASH(sv) = stash;
1447 SvANY(sv) = new_XPVAV();
1455 SvMAGIC(sv) = magic;
1456 SvSTASH(sv) = stash;
1462 SvANY(sv) = new_XPVHV();
1468 HvTOTALKEYS(sv) = 0;
1469 HvPLACEHOLDERS(sv) = 0;
1470 SvMAGIC(sv) = magic;
1471 SvSTASH(sv) = stash;
1478 SvANY(sv) = new_XPVCV();
1479 Zero(SvANY(sv), 1, XPVCV);
1485 SvMAGIC(sv) = magic;
1486 SvSTASH(sv) = stash;
1489 SvANY(sv) = new_XPVGV();
1495 SvMAGIC(sv) = magic;
1496 SvSTASH(sv) = stash;
1504 SvANY(sv) = new_XPVBM();
1510 SvMAGIC(sv) = magic;
1511 SvSTASH(sv) = stash;
1517 SvANY(sv) = new_XPVFM();
1518 Zero(SvANY(sv), 1, XPVFM);
1524 SvMAGIC(sv) = magic;
1525 SvSTASH(sv) = stash;
1528 SvANY(sv) = new_XPVIO();
1529 Zero(SvANY(sv), 1, XPVIO);
1535 SvMAGIC(sv) = magic;
1536 SvSTASH(sv) = stash;
1537 IoPAGE_LEN(sv) = 60;
1540 SvFLAGS(sv) &= ~SVTYPEMASK;
1546 =for apidoc sv_backoff
1548 Remove any string offset. You should normally use the C<SvOOK_off> macro
1555 Perl_sv_backoff(pTHX_ register SV *sv)
1559 char *s = SvPVX(sv);
1560 SvLEN(sv) += SvIVX(sv);
1561 SvPVX(sv) -= SvIVX(sv);
1563 Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1565 SvFLAGS(sv) &= ~SVf_OOK;
1572 Expands the character buffer in the SV. If necessary, uses C<sv_unref> and
1573 upgrades the SV to C<SVt_PV>. Returns a pointer to the character buffer.
1574 Use the C<SvGROW> wrapper instead.
1580 Perl_sv_grow(pTHX_ register SV *sv, register STRLEN newlen)
1584 #ifdef HAS_64K_LIMIT
1585 if (newlen >= 0x10000) {
1586 PerlIO_printf(Perl_debug_log,
1587 "Allocation too large: %"UVxf"\n", (UV)newlen);
1590 #endif /* HAS_64K_LIMIT */
1593 if (SvTYPE(sv) < SVt_PV) {
1594 sv_upgrade(sv, SVt_PV);
1597 else if (SvOOK(sv)) { /* pv is offset? */
1600 if (newlen > SvLEN(sv))
1601 newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1602 #ifdef HAS_64K_LIMIT
1603 if (newlen >= 0x10000)
1610 if (newlen > SvLEN(sv)) { /* need more room? */
1611 if (SvLEN(sv) && s) {
1613 STRLEN l = malloced_size((void*)SvPVX(sv));
1619 Renew(s,newlen,char);
1622 New(703, s, newlen, char);
1623 if (SvPVX(sv) && SvCUR(sv)) {
1624 Move(SvPVX(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1628 SvLEN_set(sv, newlen);
1634 =for apidoc sv_setiv
1636 Copies an integer into the given SV, upgrading first if necessary.
1637 Does not handle 'set' magic. See also C<sv_setiv_mg>.
1643 Perl_sv_setiv(pTHX_ register SV *sv, IV i)
1645 SV_CHECK_THINKFIRST_COW_DROP(sv);
1646 switch (SvTYPE(sv)) {
1648 sv_upgrade(sv, SVt_IV);
1651 sv_upgrade(sv, SVt_PVNV);
1655 sv_upgrade(sv, SVt_PVIV);
1664 Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1667 (void)SvIOK_only(sv); /* validate number */
1673 =for apidoc sv_setiv_mg
1675 Like C<sv_setiv>, but also handles 'set' magic.
1681 Perl_sv_setiv_mg(pTHX_ register SV *sv, IV i)
1688 =for apidoc sv_setuv
1690 Copies an unsigned integer into the given SV, upgrading first if necessary.
1691 Does not handle 'set' magic. See also C<sv_setuv_mg>.
1697 Perl_sv_setuv(pTHX_ register SV *sv, UV u)
1699 /* With these two if statements:
1700 u=1.49 s=0.52 cu=72.49 cs=10.64 scripts=270 tests=20865
1703 u=1.35 s=0.47 cu=73.45 cs=11.43 scripts=270 tests=20865
1705 If you wish to remove them, please benchmark to see what the effect is
1707 if (u <= (UV)IV_MAX) {
1708 sv_setiv(sv, (IV)u);
1717 =for apidoc sv_setuv_mg
1719 Like C<sv_setuv>, but also handles 'set' magic.
1725 Perl_sv_setuv_mg(pTHX_ register SV *sv, UV u)
1727 /* With these two if statements:
1728 u=1.49 s=0.52 cu=72.49 cs=10.64 scripts=270 tests=20865
1731 u=1.35 s=0.47 cu=73.45 cs=11.43 scripts=270 tests=20865
1733 If you wish to remove them, please benchmark to see what the effect is
1735 if (u <= (UV)IV_MAX) {
1736 sv_setiv(sv, (IV)u);
1746 =for apidoc sv_setnv
1748 Copies a double into the given SV, upgrading first if necessary.
1749 Does not handle 'set' magic. See also C<sv_setnv_mg>.
1755 Perl_sv_setnv(pTHX_ register SV *sv, NV num)
1757 SV_CHECK_THINKFIRST_COW_DROP(sv);
1758 switch (SvTYPE(sv)) {
1761 sv_upgrade(sv, SVt_NV);
1766 sv_upgrade(sv, SVt_PVNV);
1775 Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1779 (void)SvNOK_only(sv); /* validate number */
1784 =for apidoc sv_setnv_mg
1786 Like C<sv_setnv>, but also handles 'set' magic.
1792 Perl_sv_setnv_mg(pTHX_ register SV *sv, NV num)
1798 /* Print an "isn't numeric" warning, using a cleaned-up,
1799 * printable version of the offending string
1803 S_not_a_number(pTHX_ SV *sv)
1810 dsv = sv_2mortal(newSVpv("", 0));
1811 pv = sv_uni_display(dsv, sv, 10, 0);
1814 char *limit = tmpbuf + sizeof(tmpbuf) - 8;
1815 /* each *s can expand to 4 chars + "...\0",
1816 i.e. need room for 8 chars */
1819 for (s = SvPVX(sv), end = s + SvCUR(sv); s < end && d < limit; s++) {
1821 if (ch & 128 && !isPRINT_LC(ch)) {
1830 else if (ch == '\r') {
1834 else if (ch == '\f') {
1838 else if (ch == '\\') {
1842 else if (ch == '\0') {
1846 else if (isPRINT_LC(ch))
1863 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1864 "Argument \"%s\" isn't numeric in %s", pv,
1867 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1868 "Argument \"%s\" isn't numeric", pv);
1872 =for apidoc looks_like_number
1874 Test if the content of an SV looks like a number (or is a number).
1875 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1876 non-numeric warning), even if your atof() doesn't grok them.
1882 Perl_looks_like_number(pTHX_ SV *sv)
1884 register char *sbegin;
1891 else if (SvPOKp(sv))
1892 sbegin = SvPV(sv, len);
1894 return 1; /* Historic. Wrong? */
1895 return grok_number(sbegin, len, NULL);
1898 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1899 until proven guilty, assume that things are not that bad... */
1904 As 64 bit platforms often have an NV that doesn't preserve all bits of
1905 an IV (an assumption perl has been based on to date) it becomes necessary
1906 to remove the assumption that the NV always carries enough precision to
1907 recreate the IV whenever needed, and that the NV is the canonical form.
1908 Instead, IV/UV and NV need to be given equal rights. So as to not lose
1909 precision as a side effect of conversion (which would lead to insanity
1910 and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1911 1) to distinguish between IV/UV/NV slots that have cached a valid
1912 conversion where precision was lost and IV/UV/NV slots that have a
1913 valid conversion which has lost no precision
1914 2) to ensure that if a numeric conversion to one form is requested that
1915 would lose precision, the precise conversion (or differently
1916 imprecise conversion) is also performed and cached, to prevent
1917 requests for different numeric formats on the same SV causing
1918 lossy conversion chains. (lossless conversion chains are perfectly
1923 SvIOKp is true if the IV slot contains a valid value
1924 SvIOK is true only if the IV value is accurate (UV if SvIOK_UV true)
1925 SvNOKp is true if the NV slot contains a valid value
1926 SvNOK is true only if the NV value is accurate
1929 while converting from PV to NV, check to see if converting that NV to an
1930 IV(or UV) would lose accuracy over a direct conversion from PV to
1931 IV(or UV). If it would, cache both conversions, return NV, but mark
1932 SV as IOK NOKp (ie not NOK).
1934 While converting from PV to IV, check to see if converting that IV to an
1935 NV would lose accuracy over a direct conversion from PV to NV. If it
1936 would, cache both conversions, flag similarly.
1938 Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1939 correctly because if IV & NV were set NV *always* overruled.
1940 Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1941 changes - now IV and NV together means that the two are interchangeable:
1942 SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1944 The benefit of this is that operations such as pp_add know that if
1945 SvIOK is true for both left and right operands, then integer addition
1946 can be used instead of floating point (for cases where the result won't
1947 overflow). Before, floating point was always used, which could lead to
1948 loss of precision compared with integer addition.
1950 * making IV and NV equal status should make maths accurate on 64 bit
1952 * may speed up maths somewhat if pp_add and friends start to use
1953 integers when possible instead of fp. (Hopefully the overhead in
1954 looking for SvIOK and checking for overflow will not outweigh the
1955 fp to integer speedup)
1956 * will slow down integer operations (callers of SvIV) on "inaccurate"
1957 values, as the change from SvIOK to SvIOKp will cause a call into
1958 sv_2iv each time rather than a macro access direct to the IV slot
1959 * should speed up number->string conversion on integers as IV is
1960 favoured when IV and NV are equally accurate
1962 ####################################################################
1963 You had better be using SvIOK_notUV if you want an IV for arithmetic:
1964 SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
1965 On the other hand, SvUOK is true iff UV.
1966 ####################################################################
1968 Your mileage will vary depending your CPU's relative fp to integer
1972 #ifndef NV_PRESERVES_UV
1973 # define IS_NUMBER_UNDERFLOW_IV 1
1974 # define IS_NUMBER_UNDERFLOW_UV 2
1975 # define IS_NUMBER_IV_AND_UV 2
1976 # define IS_NUMBER_OVERFLOW_IV 4
1977 # define IS_NUMBER_OVERFLOW_UV 5
1979 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
1981 /* For sv_2nv these three cases are "SvNOK and don't bother casting" */
1983 S_sv_2iuv_non_preserve(pTHX_ register SV *sv, I32 numtype)
1985 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_2iuv_non '%s', IV=0x%"UVxf" NV=%"NVgf" inttype=%"UVXf"\n", SvPVX(sv), SvIVX(sv), SvNVX(sv), (UV)numtype));
1986 if (SvNVX(sv) < (NV)IV_MIN) {
1987 (void)SvIOKp_on(sv);
1990 return IS_NUMBER_UNDERFLOW_IV;
1992 if (SvNVX(sv) > (NV)UV_MAX) {
1993 (void)SvIOKp_on(sv);
1997 return IS_NUMBER_OVERFLOW_UV;
1999 (void)SvIOKp_on(sv);
2001 /* Can't use strtol etc to convert this string. (See truth table in
2003 if (SvNVX(sv) <= (UV)IV_MAX) {
2004 SvIVX(sv) = I_V(SvNVX(sv));
2005 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2006 SvIOK_on(sv); /* Integer is precise. NOK, IOK */
2008 /* Integer is imprecise. NOK, IOKp */
2010 return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
2013 SvUVX(sv) = U_V(SvNVX(sv));
2014 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2015 if (SvUVX(sv) == UV_MAX) {
2016 /* As we know that NVs don't preserve UVs, UV_MAX cannot
2017 possibly be preserved by NV. Hence, it must be overflow.
2019 return IS_NUMBER_OVERFLOW_UV;
2021 SvIOK_on(sv); /* Integer is precise. NOK, UOK */
2023 /* Integer is imprecise. NOK, IOKp */
2025 return IS_NUMBER_OVERFLOW_IV;
2027 #endif /* !NV_PRESERVES_UV*/
2032 Return the integer value of an SV, doing any necessary string conversion,
2033 magic etc. Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2039 Perl_sv_2iv(pTHX_ register SV *sv)
2043 if (SvGMAGICAL(sv)) {
2048 return I_V(SvNVX(sv));
2050 if (SvPOKp(sv) && SvLEN(sv))
2053 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2054 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2060 if (SvTHINKFIRST(sv)) {
2063 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
2064 (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv))))
2065 return SvIV(tmpstr);
2066 return PTR2IV(SvRV(sv));
2069 sv_force_normal_flags(sv, 0);
2071 if (SvREADONLY(sv) && !SvOK(sv)) {
2072 if (ckWARN(WARN_UNINITIALIZED))
2079 return (IV)(SvUVX(sv));
2086 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2087 * without also getting a cached IV/UV from it at the same time
2088 * (ie PV->NV conversion should detect loss of accuracy and cache
2089 * IV or UV at same time to avoid this. NWC */
2091 if (SvTYPE(sv) == SVt_NV)
2092 sv_upgrade(sv, SVt_PVNV);
2094 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
2095 /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
2096 certainly cast into the IV range at IV_MAX, whereas the correct
2097 answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
2099 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2100 SvIVX(sv) = I_V(SvNVX(sv));
2101 if (SvNVX(sv) == (NV) SvIVX(sv)
2102 #ifndef NV_PRESERVES_UV
2103 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2104 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2105 /* Don't flag it as "accurately an integer" if the number
2106 came from a (by definition imprecise) NV operation, and
2107 we're outside the range of NV integer precision */
2110 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
2111 DEBUG_c(PerlIO_printf(Perl_debug_log,
2112 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
2118 /* IV not precise. No need to convert from PV, as NV
2119 conversion would already have cached IV if it detected
2120 that PV->IV would be better than PV->NV->IV
2121 flags already correct - don't set public IOK. */
2122 DEBUG_c(PerlIO_printf(Perl_debug_log,
2123 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
2128 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2129 but the cast (NV)IV_MIN rounds to a the value less (more
2130 negative) than IV_MIN which happens to be equal to SvNVX ??
2131 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2132 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2133 (NV)UVX == NVX are both true, but the values differ. :-(
2134 Hopefully for 2s complement IV_MIN is something like
2135 0x8000000000000000 which will be exact. NWC */
2138 SvUVX(sv) = U_V(SvNVX(sv));
2140 (SvNVX(sv) == (NV) SvUVX(sv))
2141 #ifndef NV_PRESERVES_UV
2142 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2143 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2144 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2145 /* Don't flag it as "accurately an integer" if the number
2146 came from a (by definition imprecise) NV operation, and
2147 we're outside the range of NV integer precision */
2153 DEBUG_c(PerlIO_printf(Perl_debug_log,
2154 "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
2158 return (IV)SvUVX(sv);
2161 else if (SvPOKp(sv) && SvLEN(sv)) {
2163 int numtype = grok_number(SvPVX(sv), SvCUR(sv), &value);
2164 /* We want to avoid a possible problem when we cache an IV which
2165 may be later translated to an NV, and the resulting NV is not
2166 the same as the direct translation of the initial string
2167 (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2168 be careful to ensure that the value with the .456 is around if the
2169 NV value is requested in the future).
2171 This means that if we cache such an IV, we need to cache the
2172 NV as well. Moreover, we trade speed for space, and do not
2173 cache the NV if we are sure it's not needed.
2176 /* SVt_PVNV is one higher than SVt_PVIV, hence this order */
2177 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2178 == IS_NUMBER_IN_UV) {
2179 /* It's definitely an integer, only upgrade to PVIV */
2180 if (SvTYPE(sv) < SVt_PVIV)
2181 sv_upgrade(sv, SVt_PVIV);
2183 } else if (SvTYPE(sv) < SVt_PVNV)
2184 sv_upgrade(sv, SVt_PVNV);
2186 /* If NV preserves UV then we only use the UV value if we know that
2187 we aren't going to call atof() below. If NVs don't preserve UVs
2188 then the value returned may have more precision than atof() will
2189 return, even though value isn't perfectly accurate. */
2190 if ((numtype & (IS_NUMBER_IN_UV
2191 #ifdef NV_PRESERVES_UV
2194 )) == IS_NUMBER_IN_UV) {
2195 /* This won't turn off the public IOK flag if it was set above */
2196 (void)SvIOKp_on(sv);
2198 if (!(numtype & IS_NUMBER_NEG)) {
2200 if (value <= (UV)IV_MAX) {
2201 SvIVX(sv) = (IV)value;
2207 /* 2s complement assumption */
2208 if (value <= (UV)IV_MIN) {
2209 SvIVX(sv) = -(IV)value;
2211 /* Too negative for an IV. This is a double upgrade, but
2212 I'm assuming it will be rare. */
2213 if (SvTYPE(sv) < SVt_PVNV)
2214 sv_upgrade(sv, SVt_PVNV);
2218 SvNVX(sv) = -(NV)value;
2223 /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2224 will be in the previous block to set the IV slot, and the next
2225 block to set the NV slot. So no else here. */
2227 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2228 != IS_NUMBER_IN_UV) {
2229 /* It wasn't an (integer that doesn't overflow the UV). */
2230 SvNVX(sv) = Atof(SvPVX(sv));
2232 if (! numtype && ckWARN(WARN_NUMERIC))
2235 #if defined(USE_LONG_DOUBLE)
2236 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
2237 PTR2UV(sv), SvNVX(sv)));
2239 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"NVgf")\n",
2240 PTR2UV(sv), SvNVX(sv)));
2244 #ifdef NV_PRESERVES_UV
2245 (void)SvIOKp_on(sv);
2247 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2248 SvIVX(sv) = I_V(SvNVX(sv));
2249 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2252 /* Integer is imprecise. NOK, IOKp */
2254 /* UV will not work better than IV */
2256 if (SvNVX(sv) > (NV)UV_MAX) {
2258 /* Integer is inaccurate. NOK, IOKp, is UV */
2262 SvUVX(sv) = U_V(SvNVX(sv));
2263 /* 0xFFFFFFFFFFFFFFFF not an issue in here */
2264 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2268 /* Integer is imprecise. NOK, IOKp, is UV */
2274 #else /* NV_PRESERVES_UV */
2275 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2276 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2277 /* The IV slot will have been set from value returned by
2278 grok_number above. The NV slot has just been set using
2281 assert (SvIOKp(sv));
2283 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2284 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2285 /* Small enough to preserve all bits. */
2286 (void)SvIOKp_on(sv);
2288 SvIVX(sv) = I_V(SvNVX(sv));
2289 if ((NV)(SvIVX(sv)) == SvNVX(sv))
2291 /* Assumption: first non-preserved integer is < IV_MAX,
2292 this NV is in the preserved range, therefore: */
2293 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2295 Perl_croak(aTHX_ "sv_2iv assumed (U_V(fabs((double)SvNVX(sv))) < (UV)IV_MAX) but SvNVX(sv)=%"NVgf" U_V is 0x%"UVxf", IV_MAX is 0x%"UVxf"\n", SvNVX(sv), U_V(SvNVX(sv)), (UV)IV_MAX);
2299 0 0 already failed to read UV.
2300 0 1 already failed to read UV.
2301 1 0 you won't get here in this case. IV/UV
2302 slot set, public IOK, Atof() unneeded.
2303 1 1 already read UV.
2304 so there's no point in sv_2iuv_non_preserve() attempting
2305 to use atol, strtol, strtoul etc. */
2306 if (sv_2iuv_non_preserve (sv, numtype)
2307 >= IS_NUMBER_OVERFLOW_IV)
2311 #endif /* NV_PRESERVES_UV */
2314 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
2316 if (SvTYPE(sv) < SVt_IV)
2317 /* Typically the caller expects that sv_any is not NULL now. */
2318 sv_upgrade(sv, SVt_IV);
2321 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2322 PTR2UV(sv),SvIVX(sv)));
2323 return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2329 Return the unsigned integer value of an SV, doing any necessary string
2330 conversion, magic etc. Normally used via the C<SvUV(sv)> and C<SvUVx(sv)>
2337 Perl_sv_2uv(pTHX_ register SV *sv)
2341 if (SvGMAGICAL(sv)) {
2346 return U_V(SvNVX(sv));
2347 if (SvPOKp(sv) && SvLEN(sv))
2350 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2351 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2357 if (SvTHINKFIRST(sv)) {
2360 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
2361 (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv))))
2362 return SvUV(tmpstr);
2363 return PTR2UV(SvRV(sv));
2366 sv_force_normal_flags(sv, 0);
2368 if (SvREADONLY(sv) && !SvOK(sv)) {
2369 if (ckWARN(WARN_UNINITIALIZED))
2379 return (UV)SvIVX(sv);
2383 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2384 * without also getting a cached IV/UV from it at the same time
2385 * (ie PV->NV conversion should detect loss of accuracy and cache
2386 * IV or UV at same time to avoid this. */
2387 /* IV-over-UV optimisation - choose to cache IV if possible */
2389 if (SvTYPE(sv) == SVt_NV)
2390 sv_upgrade(sv, SVt_PVNV);
2392 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
2393 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2394 SvIVX(sv) = I_V(SvNVX(sv));
2395 if (SvNVX(sv) == (NV) SvIVX(sv)
2396 #ifndef NV_PRESERVES_UV
2397 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2398 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2399 /* Don't flag it as "accurately an integer" if the number
2400 came from a (by definition imprecise) NV operation, and
2401 we're outside the range of NV integer precision */
2404 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
2405 DEBUG_c(PerlIO_printf(Perl_debug_log,
2406 "0x%"UVxf" uv(%"NVgf" => %"IVdf") (precise)\n",
2412 /* IV not precise. No need to convert from PV, as NV
2413 conversion would already have cached IV if it detected
2414 that PV->IV would be better than PV->NV->IV
2415 flags already correct - don't set public IOK. */
2416 DEBUG_c(PerlIO_printf(Perl_debug_log,
2417 "0x%"UVxf" uv(%"NVgf" => %"IVdf") (imprecise)\n",
2422 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2423 but the cast (NV)IV_MIN rounds to a the value less (more
2424 negative) than IV_MIN which happens to be equal to SvNVX ??
2425 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2426 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2427 (NV)UVX == NVX are both true, but the values differ. :-(
2428 Hopefully for 2s complement IV_MIN is something like
2429 0x8000000000000000 which will be exact. NWC */
2432 SvUVX(sv) = U_V(SvNVX(sv));
2434 (SvNVX(sv) == (NV) SvUVX(sv))
2435 #ifndef NV_PRESERVES_UV
2436 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2437 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2438 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2439 /* Don't flag it as "accurately an integer" if the number
2440 came from a (by definition imprecise) NV operation, and
2441 we're outside the range of NV integer precision */
2446 DEBUG_c(PerlIO_printf(Perl_debug_log,
2447 "0x%"UVxf" 2uv(%"UVuf" => %"IVdf") (as unsigned)\n",
2453 else if (SvPOKp(sv) && SvLEN(sv)) {
2455 int numtype = grok_number(SvPVX(sv), SvCUR(sv), &value);
2457 /* We want to avoid a possible problem when we cache a UV which
2458 may be later translated to an NV, and the resulting NV is not
2459 the translation of the initial data.
2461 This means that if we cache such a UV, we need to cache the
2462 NV as well. Moreover, we trade speed for space, and do not
2463 cache the NV if not needed.
2466 /* SVt_PVNV is one higher than SVt_PVIV, hence this order */
2467 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2468 == IS_NUMBER_IN_UV) {
2469 /* It's definitely an integer, only upgrade to PVIV */
2470 if (SvTYPE(sv) < SVt_PVIV)
2471 sv_upgrade(sv, SVt_PVIV);
2473 } else if (SvTYPE(sv) < SVt_PVNV)
2474 sv_upgrade(sv, SVt_PVNV);
2476 /* If NV preserves UV then we only use the UV value if we know that
2477 we aren't going to call atof() below. If NVs don't preserve UVs
2478 then the value returned may have more precision than atof() will
2479 return, even though it isn't accurate. */
2480 if ((numtype & (IS_NUMBER_IN_UV
2481 #ifdef NV_PRESERVES_UV
2484 )) == IS_NUMBER_IN_UV) {
2485 /* This won't turn off the public IOK flag if it was set above */
2486 (void)SvIOKp_on(sv);
2488 if (!(numtype & IS_NUMBER_NEG)) {
2490 if (value <= (UV)IV_MAX) {
2491 SvIVX(sv) = (IV)value;
2493 /* it didn't overflow, and it was positive. */
2498 /* 2s complement assumption */
2499 if (value <= (UV)IV_MIN) {
2500 SvIVX(sv) = -(IV)value;
2502 /* Too negative for an IV. This is a double upgrade, but
2503 I'm assuming it will be rare. */
2504 if (SvTYPE(sv) < SVt_PVNV)
2505 sv_upgrade(sv, SVt_PVNV);
2509 SvNVX(sv) = -(NV)value;
2515 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2516 != IS_NUMBER_IN_UV) {
2517 /* It wasn't an integer, or it overflowed the UV. */
2518 SvNVX(sv) = Atof(SvPVX(sv));
2520 if (! numtype && ckWARN(WARN_NUMERIC))
2523 #if defined(USE_LONG_DOUBLE)
2524 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%" PERL_PRIgldbl ")\n",
2525 PTR2UV(sv), SvNVX(sv)));
2527 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"NVgf")\n",
2528 PTR2UV(sv), SvNVX(sv)));
2531 #ifdef NV_PRESERVES_UV
2532 (void)SvIOKp_on(sv);
2534 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2535 SvIVX(sv) = I_V(SvNVX(sv));
2536 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2539 /* Integer is imprecise. NOK, IOKp */
2541 /* UV will not work better than IV */
2543 if (SvNVX(sv) > (NV)UV_MAX) {
2545 /* Integer is inaccurate. NOK, IOKp, is UV */
2549 SvUVX(sv) = U_V(SvNVX(sv));
2550 /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2551 NV preservse UV so can do correct comparison. */
2552 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2556 /* Integer is imprecise. NOK, IOKp, is UV */
2561 #else /* NV_PRESERVES_UV */
2562 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2563 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2564 /* The UV slot will have been set from value returned by
2565 grok_number above. The NV slot has just been set using
2568 assert (SvIOKp(sv));
2570 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2571 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2572 /* Small enough to preserve all bits. */
2573 (void)SvIOKp_on(sv);
2575 SvIVX(sv) = I_V(SvNVX(sv));
2576 if ((NV)(SvIVX(sv)) == SvNVX(sv))
2578 /* Assumption: first non-preserved integer is < IV_MAX,
2579 this NV is in the preserved range, therefore: */
2580 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2582 Perl_croak(aTHX_ "sv_2uv assumed (U_V(fabs((double)SvNVX(sv))) < (UV)IV_MAX) but SvNVX(sv)=%"NVgf" U_V is 0x%"UVxf", IV_MAX is 0x%"UVxf"\n", SvNVX(sv), U_V(SvNVX(sv)), (UV)IV_MAX);
2585 sv_2iuv_non_preserve (sv, numtype);
2587 #endif /* NV_PRESERVES_UV */
2591 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2592 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2595 if (SvTYPE(sv) < SVt_IV)
2596 /* Typically the caller expects that sv_any is not NULL now. */
2597 sv_upgrade(sv, SVt_IV);
2601 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2602 PTR2UV(sv),SvUVX(sv)));
2603 return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2609 Return the num value of an SV, doing any necessary string or integer
2610 conversion, magic etc. Normally used via the C<SvNV(sv)> and C<SvNVx(sv)>
2617 Perl_sv_2nv(pTHX_ register SV *sv)
2621 if (SvGMAGICAL(sv)) {
2625 if (SvPOKp(sv) && SvLEN(sv)) {
2626 if (ckWARN(WARN_NUMERIC) && !SvIOKp(sv) &&
2627 !grok_number(SvPVX(sv), SvCUR(sv), NULL))
2629 return Atof(SvPVX(sv));
2633 return (NV)SvUVX(sv);
2635 return (NV)SvIVX(sv);
2638 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2639 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2645 if (SvTHINKFIRST(sv)) {
2648 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,numer)) &&
2649 (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv))))
2650 return SvNV(tmpstr);
2651 return PTR2NV(SvRV(sv));
2654 sv_force_normal_flags(sv, 0);
2656 if (SvREADONLY(sv) && !SvOK(sv)) {
2657 if (ckWARN(WARN_UNINITIALIZED))
2662 if (SvTYPE(sv) < SVt_NV) {
2663 if (SvTYPE(sv) == SVt_IV)
2664 sv_upgrade(sv, SVt_PVNV);
2666 sv_upgrade(sv, SVt_NV);
2667 #ifdef USE_LONG_DOUBLE
2669 STORE_NUMERIC_LOCAL_SET_STANDARD();
2670 PerlIO_printf(Perl_debug_log,
2671 "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2672 PTR2UV(sv), SvNVX(sv));
2673 RESTORE_NUMERIC_LOCAL();
2677 STORE_NUMERIC_LOCAL_SET_STANDARD();
2678 PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%"NVgf")\n",
2679 PTR2UV(sv), SvNVX(sv));
2680 RESTORE_NUMERIC_LOCAL();
2684 else if (SvTYPE(sv) < SVt_PVNV)
2685 sv_upgrade(sv, SVt_PVNV);
2690 SvNVX(sv) = SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv);
2691 #ifdef NV_PRESERVES_UV
2694 /* Only set the public NV OK flag if this NV preserves the IV */
2695 /* Check it's not 0xFFFFFFFFFFFFFFFF */
2696 if (SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2697 : (SvIVX(sv) == I_V(SvNVX(sv))))
2703 else if (SvPOKp(sv) && SvLEN(sv)) {
2705 int numtype = grok_number(SvPVX(sv), SvCUR(sv), &value);
2706 if (ckWARN(WARN_NUMERIC) && !SvIOKp(sv) && !numtype)
2708 #ifdef NV_PRESERVES_UV
2709 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2710 == IS_NUMBER_IN_UV) {
2711 /* It's definitely an integer */
2712 SvNVX(sv) = (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value;
2714 SvNVX(sv) = Atof(SvPVX(sv));
2717 SvNVX(sv) = Atof(SvPVX(sv));
2718 /* Only set the public NV OK flag if this NV preserves the value in
2719 the PV at least as well as an IV/UV would.
2720 Not sure how to do this 100% reliably. */
2721 /* if that shift count is out of range then Configure's test is
2722 wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2724 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2725 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2726 SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2727 } else if (!(numtype & IS_NUMBER_IN_UV)) {
2728 /* Can't use strtol etc to convert this string, so don't try.
2729 sv_2iv and sv_2uv will use the NV to convert, not the PV. */
2732 /* value has been set. It may not be precise. */
2733 if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2734 /* 2s complement assumption for (UV)IV_MIN */
2735 SvNOK_on(sv); /* Integer is too negative. */
2740 if (numtype & IS_NUMBER_NEG) {
2741 SvIVX(sv) = -(IV)value;
2742 } else if (value <= (UV)IV_MAX) {
2743 SvIVX(sv) = (IV)value;
2749 if (numtype & IS_NUMBER_NOT_INT) {
2750 /* I believe that even if the original PV had decimals,
2751 they are lost beyond the limit of the FP precision.
2752 However, neither is canonical, so both only get p
2753 flags. NWC, 2000/11/25 */
2754 /* Both already have p flags, so do nothing */
2757 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2758 if (SvIVX(sv) == I_V(nv)) {
2763 /* It had no "." so it must be integer. */
2766 /* between IV_MAX and NV(UV_MAX).
2767 Could be slightly > UV_MAX */
2769 if (numtype & IS_NUMBER_NOT_INT) {
2770 /* UV and NV both imprecise. */
2772 UV nv_as_uv = U_V(nv);
2774 if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2785 #endif /* NV_PRESERVES_UV */
2788 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
2790 if (SvTYPE(sv) < SVt_NV)
2791 /* Typically the caller expects that sv_any is not NULL now. */
2792 /* XXX Ilya implies that this is a bug in callers that assume this
2793 and ideally should be fixed. */
2794 sv_upgrade(sv, SVt_NV);
2797 #if defined(USE_LONG_DOUBLE)
2799 STORE_NUMERIC_LOCAL_SET_STANDARD();
2800 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2801 PTR2UV(sv), SvNVX(sv));
2802 RESTORE_NUMERIC_LOCAL();
2806 STORE_NUMERIC_LOCAL_SET_STANDARD();
2807 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%"NVgf")\n",
2808 PTR2UV(sv), SvNVX(sv));
2809 RESTORE_NUMERIC_LOCAL();
2815 /* asIV(): extract an integer from the string value of an SV.
2816 * Caller must validate PVX */
2819 S_asIV(pTHX_ SV *sv)
2822 int numtype = grok_number(SvPVX(sv), SvCUR(sv), &value);
2824 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2825 == IS_NUMBER_IN_UV) {
2826 /* It's definitely an integer */
2827 if (numtype & IS_NUMBER_NEG) {
2828 if (value < (UV)IV_MIN)
2831 if (value < (UV)IV_MAX)
2836 if (ckWARN(WARN_NUMERIC))
2839 return I_V(Atof(SvPVX(sv)));
2842 /* asUV(): extract an unsigned integer from the string value of an SV
2843 * Caller must validate PVX */
2846 S_asUV(pTHX_ SV *sv)
2849 int numtype = grok_number(SvPVX(sv), SvCUR(sv), &value);
2851 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2852 == IS_NUMBER_IN_UV) {
2853 /* It's definitely an integer */
2854 if (!(numtype & IS_NUMBER_NEG))
2858 if (ckWARN(WARN_NUMERIC))
2861 return U_V(Atof(SvPVX(sv)));
2865 =for apidoc sv_2pv_nolen
2867 Like C<sv_2pv()>, but doesn't return the length too. You should usually
2868 use the macro wrapper C<SvPV_nolen(sv)> instead.
2873 Perl_sv_2pv_nolen(pTHX_ register SV *sv)
2876 return sv_2pv(sv, &n_a);
2879 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2880 * UV as a string towards the end of buf, and return pointers to start and
2883 * We assume that buf is at least TYPE_CHARS(UV) long.
2887 uiv_2buf(char *buf, IV iv, UV uv, int is_uv, char **peob)
2889 char *ptr = buf + TYPE_CHARS(UV);
2903 *--ptr = '0' + (char)(uv % 10);
2911 /* sv_2pv() is now a macro using Perl_sv_2pv_flags();
2912 * this function provided for binary compatibility only
2916 Perl_sv_2pv(pTHX_ register SV *sv, STRLEN *lp)
2918 return sv_2pv_flags(sv, lp, SV_GMAGIC);
2922 =for apidoc sv_2pv_flags
2924 Returns a pointer to the string value of an SV, and sets *lp to its length.
2925 If flags includes SV_GMAGIC, does an mg_get() first. Coerces sv to a string
2927 Normally invoked via the C<SvPV_flags> macro. C<sv_2pv()> and C<sv_2pv_nomg>
2928 usually end up here too.
2934 Perl_sv_2pv_flags(pTHX_ register SV *sv, STRLEN *lp, I32 flags)
2939 char tbuf[64]; /* Must fit sprintf/Gconvert of longest IV/NV */
2940 char *tmpbuf = tbuf;
2946 if (SvGMAGICAL(sv)) {
2947 if (flags & SV_GMAGIC)
2955 (void)sprintf(tmpbuf,"%"UVuf, (UV)SvUVX(sv));
2957 (void)sprintf(tmpbuf,"%"IVdf, (IV)SvIVX(sv));
2962 Gconvert(SvNVX(sv), NV_DIG, 0, tmpbuf);
2967 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2968 if (ckWARN(WARN_UNINITIALIZED) && !PL_localizing)
2975 if (SvTHINKFIRST(sv)) {
2978 if (SvAMAGIC(sv) && (tmpstr=AMG_CALLun(sv,string)) &&
2979 (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2980 char *pv = SvPV(tmpstr, *lp);
2994 switch (SvTYPE(sv)) {
2996 if ( ((SvFLAGS(sv) &
2997 (SVs_OBJECT|SVf_OK|SVs_GMG|SVs_SMG|SVs_RMG))
2998 == (SVs_OBJECT|SVs_SMG))
2999 && (mg = mg_find(sv, PERL_MAGIC_qr))) {
3000 regexp *re = (regexp *)mg->mg_obj;
3003 char *fptr = "msix";
3008 char need_newline = 0;
3009 U16 reganch = (U16)((re->reganch & PMf_COMPILETIME) >> 12);
3011 while((ch = *fptr++)) {
3013 reflags[left++] = ch;
3016 reflags[right--] = ch;
3021 reflags[left] = '-';
3025 mg->mg_len = re->prelen + 4 + left;
3027 * If /x was used, we have to worry about a regex
3028 * ending with a comment later being embedded
3029 * within another regex. If so, we don't want this
3030 * regex's "commentization" to leak out to the
3031 * right part of the enclosing regex, we must cap
3032 * it with a newline.
3034 * So, if /x was used, we scan backwards from the
3035 * end of the regex. If we find a '#' before we
3036 * find a newline, we need to add a newline
3037 * ourself. If we find a '\n' first (or if we
3038 * don't find '#' or '\n'), we don't need to add
3039 * anything. -jfriedl
3041 if (PMf_EXTENDED & re->reganch)
3043 char *endptr = re->precomp + re->prelen;
3044 while (endptr >= re->precomp)
3046 char c = *(endptr--);
3048 break; /* don't need another */
3050 /* we end while in a comment, so we
3052 mg->mg_len++; /* save space for it */
3053 need_newline = 1; /* note to add it */
3059 New(616, mg->mg_ptr, mg->mg_len + 1 + left, char);
3060 Copy("(?", mg->mg_ptr, 2, char);
3061 Copy(reflags, mg->mg_ptr+2, left, char);
3062 Copy(":", mg->mg_ptr+left+2, 1, char);
3063 Copy(re->precomp, mg->mg_ptr+3+left, re->prelen, char);
3065 mg->mg_ptr[mg->mg_len - 2] = '\n';
3066 mg->mg_ptr[mg->mg_len - 1] = ')';
3067 mg->mg_ptr[mg->mg_len] = 0;
3069 PL_reginterp_cnt += re->program[0].next_off;
3071 if (re->reganch & ROPT_UTF8)
3086 case SVt_PVBM: if (SvROK(sv))
3089 s = "SCALAR"; break;
3090 case SVt_PVLV: s = SvROK(sv) ? "REF"
3091 /* tied lvalues should appear to be
3092 * scalars for backwards compatitbility */
3093 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
3094 ? "SCALAR" : "LVALUE"; break;
3095 case SVt_PVAV: s = "ARRAY"; break;
3096 case SVt_PVHV: s = "HASH"; break;
3097 case SVt_PVCV: s = "CODE"; break;
3098 case SVt_PVGV: s = "GLOB"; break;
3099 case SVt_PVFM: s = "FORMAT"; break;
3100 case SVt_PVIO: s = "IO"; break;
3101 default: s = "UNKNOWN"; break;
3105 if (HvNAME(SvSTASH(sv)))
3106 Perl_sv_setpvf(aTHX_ tsv, "%s=%s", HvNAME(SvSTASH(sv)), s);
3108 Perl_sv_setpvf(aTHX_ tsv, "__ANON__=%s", s);
3111 Perl_sv_catpvf(aTHX_ tsv, "(0x%"UVxf")", PTR2UV(sv));
3117 if (SvREADONLY(sv) && !SvOK(sv)) {
3118 if (ckWARN(WARN_UNINITIALIZED))
3124 if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
3125 /* I'm assuming that if both IV and NV are equally valid then
3126 converting the IV is going to be more efficient */
3127 U32 isIOK = SvIOK(sv);
3128 U32 isUIOK = SvIsUV(sv);
3129 char buf[TYPE_CHARS(UV)];
3132 if (SvTYPE(sv) < SVt_PVIV)
3133 sv_upgrade(sv, SVt_PVIV);
3135 ptr = uiv_2buf(buf, 0, SvUVX(sv), 1, &ebuf);
3137 ptr = uiv_2buf(buf, SvIVX(sv), 0, 0, &ebuf);
3138 SvGROW(sv, (STRLEN)(ebuf - ptr + 1)); /* inlined from sv_setpvn */
3139 Move(ptr,SvPVX(sv),ebuf - ptr,char);
3140 SvCUR_set(sv, ebuf - ptr);
3150 else if (SvNOKp(sv)) {
3151 if (SvTYPE(sv) < SVt_PVNV)
3152 sv_upgrade(sv, SVt_PVNV);
3153 /* The +20 is pure guesswork. Configure test needed. --jhi */
3154 SvGROW(sv, NV_DIG + 20);
3156 olderrno = errno; /* some Xenix systems wipe out errno here */
3158 if (SvNVX(sv) == 0.0)
3159 (void)strcpy(s,"0");
3163 Gconvert(SvNVX(sv), NV_DIG, 0, s);
3166 #ifdef FIXNEGATIVEZERO
3167 if (*s == '-' && s[1] == '0' && !s[2])
3177 if (ckWARN(WARN_UNINITIALIZED)
3178 && !PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP))
3181 if (SvTYPE(sv) < SVt_PV)
3182 /* Typically the caller expects that sv_any is not NULL now. */
3183 sv_upgrade(sv, SVt_PV);
3186 *lp = s - SvPVX(sv);
3189 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3190 PTR2UV(sv),SvPVX(sv)));
3194 if (SvROK(sv)) { /* XXX Skip this when sv_pvn_force calls */
3195 /* Sneaky stuff here */
3199 tsv = newSVpv(tmpbuf, 0);
3215 len = strlen(tmpbuf);
3217 #ifdef FIXNEGATIVEZERO
3218 if (len == 2 && t[0] == '-' && t[1] == '0') {
3223 (void)SvUPGRADE(sv, SVt_PV);
3225 s = SvGROW(sv, len + 1);
3234 =for apidoc sv_copypv
3236 Copies a stringified representation of the source SV into the
3237 destination SV. Automatically performs any necessary mg_get and
3238 coercion of numeric values into strings. Guaranteed to preserve
3239 UTF-8 flag even from overloaded objects. Similar in nature to
3240 sv_2pv[_flags] but operates directly on an SV instead of just the
3241 string. Mostly uses sv_2pv_flags to do its work, except when that
3242 would lose the UTF-8'ness of the PV.
3248 Perl_sv_copypv(pTHX_ SV *dsv, register SV *ssv)
3253 sv_setpvn(dsv,s,len);
3261 =for apidoc sv_2pvbyte_nolen
3263 Return a pointer to the byte-encoded representation of the SV.
3264 May cause the SV to be downgraded from UTF-8 as a side-effect.
3266 Usually accessed via the C<SvPVbyte_nolen> macro.
3272 Perl_sv_2pvbyte_nolen(pTHX_ register SV *sv)
3275 return sv_2pvbyte(sv, &n_a);
3279 =for apidoc sv_2pvbyte
3281 Return a pointer to the byte-encoded representation of the SV, and set *lp
3282 to its length. May cause the SV to be downgraded from UTF-8 as a
3285 Usually accessed via the C<SvPVbyte> macro.
3291 Perl_sv_2pvbyte(pTHX_ register SV *sv, STRLEN *lp)
3293 sv_utf8_downgrade(sv,0);
3294 return SvPV(sv,*lp);
3298 =for apidoc sv_2pvutf8_nolen
3300 Return a pointer to the UTF-8-encoded representation of the SV.
3301 May cause the SV to be upgraded to UTF-8 as a side-effect.
3303 Usually accessed via the C<SvPVutf8_nolen> macro.
3309 Perl_sv_2pvutf8_nolen(pTHX_ register SV *sv)
3312 return sv_2pvutf8(sv, &n_a);
3316 =for apidoc sv_2pvutf8
3318 Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
3319 to its length. May cause the SV to be upgraded to UTF-8 as a side-effect.
3321 Usually accessed via the C<SvPVutf8> macro.
3327 Perl_sv_2pvutf8(pTHX_ register SV *sv, STRLEN *lp)
3329 sv_utf8_upgrade(sv);
3330 return SvPV(sv,*lp);
3334 =for apidoc sv_2bool
3336 This function is only called on magical items, and is only used by
3337 sv_true() or its macro equivalent.
3343 Perl_sv_2bool(pTHX_ register SV *sv)
3352 if (SvAMAGIC(sv) && (tmpsv=AMG_CALLun(sv,bool_)) &&
3353 (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
3354 return (bool)SvTRUE(tmpsv);
3355 return SvRV(sv) != 0;
3358 register XPV* Xpvtmp;
3359 if ((Xpvtmp = (XPV*)SvANY(sv)) &&
3360 (*Xpvtmp->xpv_pv > '0' ||
3361 Xpvtmp->xpv_cur > 1 ||
3362 (Xpvtmp->xpv_cur && *Xpvtmp->xpv_pv != '0')))
3369 return SvIVX(sv) != 0;
3372 return SvNVX(sv) != 0.0;
3379 /* sv_utf8_upgrade() is now a macro using sv_utf8_upgrade_flags();
3380 * this function provided for binary compatibility only
3385 Perl_sv_utf8_upgrade(pTHX_ register SV *sv)
3387 return sv_utf8_upgrade_flags(sv, SV_GMAGIC);
3391 =for apidoc sv_utf8_upgrade
3393 Convert the PV of an SV to its UTF-8-encoded form.
3394 Forces the SV to string form if it is not already.
3395 Always sets the SvUTF8 flag to avoid future validity checks even
3396 if all the bytes have hibit clear.
3398 This is not as a general purpose byte encoding to Unicode interface:
3399 use the Encode extension for that.
3401 =for apidoc sv_utf8_upgrade_flags
3403 Convert the PV of an SV to its UTF-8-encoded form.
3404 Forces the SV to string form if it is not already.
3405 Always sets the SvUTF8 flag to avoid future validity checks even
3406 if all the bytes have hibit clear. If C<flags> has C<SV_GMAGIC> bit set,
3407 will C<mg_get> on C<sv> if appropriate, else not. C<sv_utf8_upgrade> and
3408 C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
3410 This is not as a general purpose byte encoding to Unicode interface:
3411 use the Encode extension for that.
3417 Perl_sv_utf8_upgrade_flags(pTHX_ register SV *sv, I32 flags)
3427 (void) sv_2pv_flags(sv,&len, flags);
3436 sv_force_normal_flags(sv, 0);
3439 if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING))
3440 sv_recode_to_utf8(sv, PL_encoding);
3441 else { /* Assume Latin-1/EBCDIC */
3442 /* This function could be much more efficient if we
3443 * had a FLAG in SVs to signal if there are any hibit
3444 * chars in the PV. Given that there isn't such a flag
3445 * make the loop as fast as possible. */
3446 s = (U8 *) SvPVX(sv);
3447 e = (U8 *) SvEND(sv);
3451 if ((hibit = !NATIVE_IS_INVARIANT(ch)))
3457 len = SvCUR(sv) + 1; /* Plus the \0 */
3458 SvPVX(sv) = (char*)bytes_to_utf8((U8*)s, &len);
3459 SvCUR(sv) = len - 1;
3461 Safefree(s); /* No longer using what was there before. */
3462 SvLEN(sv) = len; /* No longer know the real size. */
3464 /* Mark as UTF-8 even if no hibit - saves scanning loop */
3471 =for apidoc sv_utf8_downgrade
3473 Attempt to convert the PV of an SV from UTF-8-encoded to byte encoding.
3474 This may not be possible if the PV contains non-byte encoding characters;
3475 if this is the case, either returns false or, if C<fail_ok> is not
3478 This is not as a general purpose Unicode to byte encoding interface:
3479 use the Encode extension for that.
3485 Perl_sv_utf8_downgrade(pTHX_ register SV* sv, bool fail_ok)
3487 if (SvPOK(sv) && SvUTF8(sv)) {
3493 sv_force_normal_flags(sv, 0);
3495 s = (U8 *) SvPV(sv, len);
3496 if (!utf8_to_bytes(s, &len)) {
3501 Perl_croak(aTHX_ "Wide character in %s",
3504 Perl_croak(aTHX_ "Wide character");
3515 =for apidoc sv_utf8_encode
3517 Convert the PV of an SV to UTF-8-encoded, but then turn off the C<SvUTF8>
3518 flag so that it looks like octets again. Used as a building block
3519 for encode_utf8 in Encode.xs
3525 Perl_sv_utf8_encode(pTHX_ register SV *sv)
3527 (void) sv_utf8_upgrade(sv);
3532 =for apidoc sv_utf8_decode
3534 Convert the octets in the PV from UTF-8 to chars. Scan for validity and then
3535 turn off SvUTF8 if needed so that we see characters. Used as a building block
3536 for decode_utf8 in Encode.xs
3542 Perl_sv_utf8_decode(pTHX_ register SV *sv)
3548 /* The octets may have got themselves encoded - get them back as
3551 if (!sv_utf8_downgrade(sv, TRUE))
3554 /* it is actually just a matter of turning the utf8 flag on, but
3555 * we want to make sure everything inside is valid utf8 first.
3557 c = (U8 *) SvPVX(sv);
3558 if (!is_utf8_string(c, SvCUR(sv)+1))
3560 e = (U8 *) SvEND(sv);
3563 if (!UTF8_IS_INVARIANT(ch)) {
3572 /* sv_setsv() is now a macro using Perl_sv_setsv_flags();
3573 * this function provided for binary compatibility only
3577 Perl_sv_setsv(pTHX_ SV *dstr, register SV *sstr)
3579 sv_setsv_flags(dstr, sstr, SV_GMAGIC);
3583 =for apidoc sv_setsv
3585 Copies the contents of the source SV C<ssv> into the destination SV
3586 C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
3587 function if the source SV needs to be reused. Does not handle 'set' magic.
3588 Loosely speaking, it performs a copy-by-value, obliterating any previous
3589 content of the destination.
3591 You probably want to use one of the assortment of wrappers, such as
3592 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3593 C<SvSetMagicSV_nosteal>.
3595 =for apidoc sv_setsv_flags
3597 Copies the contents of the source SV C<ssv> into the destination SV
3598 C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
3599 function if the source SV needs to be reused. Does not handle 'set' magic.
3600 Loosely speaking, it performs a copy-by-value, obliterating any previous
3601 content of the destination.
3602 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3603 C<ssv> if appropriate, else not. C<sv_setsv> and C<sv_setsv_nomg> are
3604 implemented in terms of this function.
3606 You probably want to use one of the assortment of wrappers, such as
3607 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3608 C<SvSetMagicSV_nosteal>.
3610 This is the primary function for copying scalars, and most other
3611 copy-ish functions and macros use this underneath.
3617 Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV *sstr, I32 flags)
3619 register U32 sflags;
3625 SV_CHECK_THINKFIRST_COW_DROP(dstr);
3627 sstr = &PL_sv_undef;
3628 stype = SvTYPE(sstr);
3629 dtype = SvTYPE(dstr);
3634 /* need to nuke the magic */
3636 SvRMAGICAL_off(dstr);
3639 /* There's a lot of redundancy below but we're going for speed here */
3644 if (dtype != SVt_PVGV) {
3645 (void)SvOK_off(dstr);
3653 sv_upgrade(dstr, SVt_IV);
3656 sv_upgrade(dstr, SVt_PVNV);
3660 sv_upgrade(dstr, SVt_PVIV);
3663 (void)SvIOK_only(dstr);
3664 SvIVX(dstr) = SvIVX(sstr);
3667 if (SvTAINTED(sstr))
3678 sv_upgrade(dstr, SVt_NV);
3683 sv_upgrade(dstr, SVt_PVNV);
3686 SvNVX(dstr) = SvNVX(sstr);
3687 (void)SvNOK_only(dstr);
3688 if (SvTAINTED(sstr))
3696 sv_upgrade(dstr, SVt_RV);
3697 else if (dtype == SVt_PVGV &&
3698 SvROK(sstr) && SvTYPE(SvRV(sstr)) == SVt_PVGV) {
3701 if (GvIMPORTED(dstr) != GVf_IMPORTED
3702 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3704 GvIMPORTED_on(dstr);
3713 #ifdef PERL_COPY_ON_WRITE
3714 if ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS) {
3715 if (dtype < SVt_PVIV)
3716 sv_upgrade(dstr, SVt_PVIV);
3723 sv_upgrade(dstr, SVt_PV);
3726 if (dtype < SVt_PVIV)
3727 sv_upgrade(dstr, SVt_PVIV);
3730 if (dtype < SVt_PVNV)
3731 sv_upgrade(dstr, SVt_PVNV);
3738 Perl_croak(aTHX_ "Bizarre copy of %s in %s", sv_reftype(sstr, 0),
3741 Perl_croak(aTHX_ "Bizarre copy of %s", sv_reftype(sstr, 0));
3745 if (dtype <= SVt_PVGV) {
3747 if (dtype != SVt_PVGV) {
3748 char *name = GvNAME(sstr);
3749 STRLEN len = GvNAMELEN(sstr);
3750 sv_upgrade(dstr, SVt_PVGV);
3751 sv_magic(dstr, dstr, PERL_MAGIC_glob, Nullch, 0);
3752 GvSTASH(dstr) = (HV*)SvREFCNT_inc(GvSTASH(sstr));
3753 GvNAME(dstr) = savepvn(name, len);
3754 GvNAMELEN(dstr) = len;
3755 SvFAKE_on(dstr); /* can coerce to non-glob */
3757 /* ahem, death to those who redefine active sort subs */
3758 else if (PL_curstackinfo->si_type == PERLSI_SORT
3759 && GvCV(dstr) && PL_sortcop == CvSTART(GvCV(dstr)))
3760 Perl_croak(aTHX_ "Can't redefine active sort subroutine %s",
3763 #ifdef GV_UNIQUE_CHECK
3764 if (GvUNIQUE((GV*)dstr)) {
3765 Perl_croak(aTHX_ PL_no_modify);
3769 (void)SvOK_off(dstr);
3770 GvINTRO_off(dstr); /* one-shot flag */
3772 GvGP(dstr) = gp_ref(GvGP(sstr));
3773 if (SvTAINTED(sstr))
3775 if (GvIMPORTED(dstr) != GVf_IMPORTED
3776 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3778 GvIMPORTED_on(dstr);
3786 if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
3788 if ((int)SvTYPE(sstr) != stype) {
3789 stype = SvTYPE(sstr);
3790 if (stype == SVt_PVGV && dtype <= SVt_PVGV)
3794 if (stype == SVt_PVLV)
3795 (void)SvUPGRADE(dstr, SVt_PVNV);
3797 (void)SvUPGRADE(dstr, (U32)stype);
3800 sflags = SvFLAGS(sstr);
3802 if (sflags & SVf_ROK) {
3803 if (dtype >= SVt_PV) {
3804 if (dtype == SVt_PVGV) {
3805 SV *sref = SvREFCNT_inc(SvRV(sstr));
3807 int intro = GvINTRO(dstr);
3809 #ifdef GV_UNIQUE_CHECK
3810 if (GvUNIQUE((GV*)dstr)) {
3811 Perl_croak(aTHX_ PL_no_modify);
3816 GvINTRO_off(dstr); /* one-shot flag */
3817 GvLINE(dstr) = CopLINE(PL_curcop);
3818 GvEGV(dstr) = (GV*)dstr;
3821 switch (SvTYPE(sref)) {
3824 SAVEGENERICSV(GvAV(dstr));
3826 dref = (SV*)GvAV(dstr);
3827 GvAV(dstr) = (AV*)sref;
3828 if (!GvIMPORTED_AV(dstr)
3829 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3831 GvIMPORTED_AV_on(dstr);
3836 SAVEGENERICSV(GvHV(dstr));
3838 dref = (SV*)GvHV(dstr);
3839 GvHV(dstr) = (HV*)sref;
3840 if (!GvIMPORTED_HV(dstr)
3841 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3843 GvIMPORTED_HV_on(dstr);
3848 if (GvCVGEN(dstr) && GvCV(dstr) != (CV*)sref) {
3849 SvREFCNT_dec(GvCV(dstr));
3850 GvCV(dstr) = Nullcv;
3851 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3852 PL_sub_generation++;
3854 SAVEGENERICSV(GvCV(dstr));
3857 dref = (SV*)GvCV(dstr);
3858 if (GvCV(dstr) != (CV*)sref) {
3859 CV* cv = GvCV(dstr);
3861 if (!GvCVGEN((GV*)dstr) &&
3862 (CvROOT(cv) || CvXSUB(cv)))
3864 /* ahem, death to those who redefine
3865 * active sort subs */
3866 if (PL_curstackinfo->si_type == PERLSI_SORT &&
3867 PL_sortcop == CvSTART(cv))
3869 "Can't redefine active sort subroutine %s",
3870 GvENAME((GV*)dstr));
3871 /* Redefining a sub - warning is mandatory if
3872 it was a const and its value changed. */
3873 if (ckWARN(WARN_REDEFINE)
3875 && (!CvCONST((CV*)sref)
3876 || sv_cmp(cv_const_sv(cv),
3877 cv_const_sv((CV*)sref)))))
3879 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
3881 ? "Constant subroutine %s::%s redefined"
3882 : "Subroutine %s::%s redefined",
3883 HvNAME(GvSTASH((GV*)dstr)),
3884 GvENAME((GV*)dstr));
3888 cv_ckproto(cv, (GV*)dstr,
3889 SvPOK(sref) ? SvPVX(sref) : Nullch);
3891 GvCV(dstr) = (CV*)sref;
3892 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3893 GvASSUMECV_on(dstr);
3894 PL_sub_generation++;
3896 if (!GvIMPORTED_CV(dstr)
3897 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3899 GvIMPORTED_CV_on(dstr);
3904 SAVEGENERICSV(GvIOp(dstr));
3906 dref = (SV*)GvIOp(dstr);
3907 GvIOp(dstr) = (IO*)sref;
3911 SAVEGENERICSV(GvFORM(dstr));
3913 dref = (SV*)GvFORM(dstr);
3914 GvFORM(dstr) = (CV*)sref;
3918 SAVEGENERICSV(GvSV(dstr));
3920 dref = (SV*)GvSV(dstr);
3922 if (!GvIMPORTED_SV(dstr)
3923 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3925 GvIMPORTED_SV_on(dstr);
3931 if (SvTAINTED(sstr))
3936 (void)SvOOK_off(dstr); /* backoff */
3938 Safefree(SvPVX(dstr));
3939 SvLEN(dstr)=SvCUR(dstr)=0;
3942 (void)SvOK_off(dstr);
3943 SvRV(dstr) = SvREFCNT_inc(SvRV(sstr));
3945 if (sflags & SVp_NOK) {
3947 /* Only set the public OK flag if the source has public OK. */
3948 if (sflags & SVf_NOK)
3949 SvFLAGS(dstr) |= SVf_NOK;
3950 SvNVX(dstr) = SvNVX(sstr);
3952 if (sflags & SVp_IOK) {
3953 (void)SvIOKp_on(dstr);
3954 if (sflags & SVf_IOK)
3955 SvFLAGS(dstr) |= SVf_IOK;
3956 if (sflags & SVf_IVisUV)
3958 SvIVX(dstr) = SvIVX(sstr);
3960 if (SvAMAGIC(sstr)) {
3964 else if (sflags & SVp_POK) {
3968 * Check to see if we can just swipe the string. If so, it's a
3969 * possible small lose on short strings, but a big win on long ones.
3970 * It might even be a win on short strings if SvPVX(dstr)
3971 * has to be allocated and SvPVX(sstr) has to be freed.
3975 #ifdef PERL_COPY_ON_WRITE
3976 (sflags & (SVf_FAKE | SVf_READONLY)) != (SVf_FAKE | SVf_READONLY)
3980 (sflags & SVs_TEMP) && /* slated for free anyway? */
3981 !(sflags & SVf_OOK) && /* and not involved in OOK hack? */
3982 SvREFCNT(sstr) == 1 && /* and no other references to it? */
3983 SvLEN(sstr) && /* and really is a string */
3984 /* and won't be needed again, potentially */
3985 !(PL_op && PL_op->op_type == OP_AASSIGN))
3986 #ifdef PERL_COPY_ON_WRITE
3987 && !((sflags & CAN_COW_MASK) == CAN_COW_FLAGS
3988 && SvTYPE(sstr) >= SVt_PVIV)
3991 /* Failed the swipe test, and it's not a shared hash key either.
3992 Have to copy the string. */
3993 STRLEN len = SvCUR(sstr);
3994 SvGROW(dstr, len + 1); /* inlined from sv_setpvn */
3995 Move(SvPVX(sstr),SvPVX(dstr),len,char);
3996 SvCUR_set(dstr, len);
3997 *SvEND(dstr) = '\0';
3998 (void)SvPOK_only(dstr);
4000 /* If PERL_COPY_ON_WRITE is not defined, then isSwipe will always
4002 #ifdef PERL_COPY_ON_WRITE
4003 /* Either it's a shared hash key, or it's suitable for
4004 copy-on-write or we can swipe the string. */
4006 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4011 /* I believe I should acquire a global SV mutex if
4012 it's a COW sv (not a shared hash key) to stop
4013 it going un copy-on-write.
4014 If the source SV has gone un copy on write between up there
4015 and down here, then (assert() that) it is of the correct
4016 form to make it copy on write again */
4017 if ((sflags & (SVf_FAKE | SVf_READONLY))
4018 != (SVf_FAKE | SVf_READONLY)) {
4019 SvREADONLY_on(sstr);
4021 /* Make the source SV into a loop of 1.
4022 (about to become 2) */
4023 SV_COW_NEXT_SV_SET(sstr, sstr);
4027 /* Initial code is common. */
4028 if (SvPVX(dstr)) { /* we know that dtype >= SVt_PV */
4030 SvFLAGS(dstr) &= ~SVf_OOK;
4031 Safefree(SvPVX(dstr) - SvIVX(dstr));
4033 else if (SvLEN(dstr))
4034 Safefree(SvPVX(dstr));
4036 (void)SvPOK_only(dstr);
4038 #ifdef PERL_COPY_ON_WRITE
4040 /* making another shared SV. */
4041 STRLEN cur = SvCUR(sstr);
4042 STRLEN len = SvLEN(sstr);
4043 assert (SvTYPE(dstr) >= SVt_PVIV);
4045 /* SvIsCOW_normal */
4046 /* splice us in between source and next-after-source. */
4047 SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4048 SV_COW_NEXT_SV_SET(sstr, dstr);
4049 SvPV_set(dstr, SvPVX(sstr));
4051 /* SvIsCOW_shared_hash */
4052 UV hash = SvUVX(sstr);
4053 DEBUG_C(PerlIO_printf(Perl_debug_log,
4054 "Copy on write: Sharing hash\n"));
4056 sharepvn(SvPVX(sstr),
4057 (sflags & SVf_UTF8?-cur:cur), hash));
4062 SvREADONLY_on(dstr);
4064 /* Relesase a global SV mutex. */
4068 { /* Passes the swipe test. */
4069 SvPV_set(dstr, SvPVX(sstr));
4070 SvLEN_set(dstr, SvLEN(sstr));
4071 SvCUR_set(dstr, SvCUR(sstr));
4074 (void)SvOK_off(sstr); /* NOTE: nukes most SvFLAGS on sstr */
4075 SvPV_set(sstr, Nullch);
4081 if (sflags & SVf_UTF8)
4084 if (sflags & SVp_NOK) {
4086 if (sflags & SVf_NOK)
4087 SvFLAGS(dstr) |= SVf_NOK;
4088 SvNVX(dstr) = SvNVX(sstr);
4090 if (sflags & SVp_IOK) {
4091 (void)SvIOKp_on(dstr);
4092 if (sflags & SVf_IOK)
4093 SvFLAGS(dstr) |= SVf_IOK;
4094 if (sflags & SVf_IVisUV)
4096 SvIVX(dstr) = SvIVX(sstr);
4099 MAGIC *smg = mg_find(sstr,PERL_MAGIC_vstring);
4100 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4101 smg->mg_ptr, smg->mg_len);
4102 SvRMAGICAL_on(dstr);
4105 else if (sflags & SVp_IOK) {
4106 if (sflags & SVf_IOK)
4107 (void)SvIOK_only(dstr);
4109 (void)SvOK_off(dstr);
4110 (void)SvIOKp_on(dstr);
4112 /* XXXX Do we want to set IsUV for IV(ROK)? Be extra safe... */
4113 if (sflags & SVf_IVisUV)
4115 SvIVX(dstr) = SvIVX(sstr);
4116 if (sflags & SVp_NOK) {
4117 if (sflags & SVf_NOK)
4118 (void)SvNOK_on(dstr);
4120 (void)SvNOKp_on(dstr);
4121 SvNVX(dstr) = SvNVX(sstr);
4124 else if (sflags & SVp_NOK) {
4125 if (sflags & SVf_NOK)
4126 (void)SvNOK_only(dstr);
4128 (void)SvOK_off(dstr);
4131 SvNVX(dstr) = SvNVX(sstr);
4134 if (dtype == SVt_PVGV) {
4135 if (ckWARN(WARN_MISC))
4136 Perl_warner(aTHX_ packWARN(WARN_MISC), "Undefined value assigned to typeglob");
4139 (void)SvOK_off(dstr);
4141 if (SvTAINTED(sstr))
4146 =for apidoc sv_setsv_mg
4148 Like C<sv_setsv>, but also handles 'set' magic.
4154 Perl_sv_setsv_mg(pTHX_ SV *dstr, register SV *sstr)
4156 sv_setsv(dstr,sstr);
4160 #ifdef PERL_COPY_ON_WRITE
4162 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4164 STRLEN cur = SvCUR(sstr);
4165 STRLEN len = SvLEN(sstr);
4166 register char *new_pv;
4169 PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4177 if (SvTHINKFIRST(dstr))
4178 sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4179 else if (SvPVX(dstr))
4180 Safefree(SvPVX(dstr));
4184 SvUPGRADE (dstr, SVt_PVIV);
4186 assert (SvPOK(sstr));
4187 assert (SvPOKp(sstr));
4188 assert (!SvIOK(sstr));
4189 assert (!SvIOKp(sstr));
4190 assert (!SvNOK(sstr));
4191 assert (!SvNOKp(sstr));
4193 if (SvIsCOW(sstr)) {
4195 if (SvLEN(sstr) == 0) {
4196 /* source is a COW shared hash key. */
4197 UV hash = SvUVX(sstr);
4198 DEBUG_C(PerlIO_printf(Perl_debug_log,
4199 "Fast copy on write: Sharing hash\n"));
4201 new_pv = sharepvn(SvPVX(sstr), (SvUTF8(sstr)?-cur:cur), hash);
4204 SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4206 assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4207 SvUPGRADE (sstr, SVt_PVIV);
4208 SvREADONLY_on(sstr);
4210 DEBUG_C(PerlIO_printf(Perl_debug_log,
4211 "Fast copy on write: Converting sstr to COW\n"));
4212 SV_COW_NEXT_SV_SET(dstr, sstr);
4214 SV_COW_NEXT_SV_SET(sstr, dstr);
4215 new_pv = SvPVX(sstr);
4218 SvPV_set(dstr, new_pv);
4219 SvFLAGS(dstr) = (SVt_PVIV|SVf_POK|SVp_POK|SVf_FAKE|SVf_READONLY);
4232 =for apidoc sv_setpvn
4234 Copies a string into an SV. The C<len> parameter indicates the number of
4235 bytes to be copied. Does not handle 'set' magic. See C<sv_setpvn_mg>.
4241 Perl_sv_setpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
4243 register char *dptr;
4245 SV_CHECK_THINKFIRST_COW_DROP(sv);
4251 /* len is STRLEN which is unsigned, need to copy to signed */
4254 Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen");
4256 (void)SvUPGRADE(sv, SVt_PV);
4258 SvGROW(sv, len + 1);
4260 Move(ptr,dptr,len,char);
4263 (void)SvPOK_only_UTF8(sv); /* validate pointer */
4268 =for apidoc sv_setpvn_mg
4270 Like C<sv_setpvn>, but also handles 'set' magic.
4276 Perl_sv_setpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
4278 sv_setpvn(sv,ptr,len);
4283 =for apidoc sv_setpv
4285 Copies a string into an SV. The string must be null-terminated. Does not
4286 handle 'set' magic. See C<sv_setpv_mg>.
4292 Perl_sv_setpv(pTHX_ register SV *sv, register const char *ptr)
4294 register STRLEN len;
4296 SV_CHECK_THINKFIRST_COW_DROP(sv);
4302 (void)SvUPGRADE(sv, SVt_PV);
4304 SvGROW(sv, len + 1);
4305 Move(ptr,SvPVX(sv),len+1,char);
4307 (void)SvPOK_only_UTF8(sv); /* validate pointer */
4312 =for apidoc sv_setpv_mg
4314 Like C<sv_setpv>, but also handles 'set' magic.
4320 Perl_sv_setpv_mg(pTHX_ register SV *sv, register const char *ptr)
4327 =for apidoc sv_usepvn
4329 Tells an SV to use C<ptr> to find its string value. Normally the string is
4330 stored inside the SV but sv_usepvn allows the SV to use an outside string.
4331 The C<ptr> should point to memory that was allocated by C<malloc>. The
4332 string length, C<len>, must be supplied. This function will realloc the
4333 memory pointed to by C<ptr>, so that pointer should not be freed or used by
4334 the programmer after giving it to sv_usepvn. Does not handle 'set' magic.
4335 See C<sv_usepvn_mg>.
4341 Perl_sv_usepvn(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
4343 SV_CHECK_THINKFIRST_COW_DROP(sv);
4344 (void)SvUPGRADE(sv, SVt_PV);
4349 (void)SvOOK_off(sv);
4350 if (SvPVX(sv) && SvLEN(sv))
4351 Safefree(SvPVX(sv));
4352 Renew(ptr, len+1, char);
4355 SvLEN_set(sv, len+1);
4357 (void)SvPOK_only_UTF8(sv); /* validate pointer */
4362 =for apidoc sv_usepvn_mg
4364 Like C<sv_usepvn>, but also handles 'set' magic.
4370 Perl_sv_usepvn_mg(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
4372 sv_usepvn(sv,ptr,len);
4376 #ifdef PERL_COPY_ON_WRITE
4377 /* Need to do this *after* making the SV normal, as we need the buffer
4378 pointer to remain valid until after we've copied it. If we let go too early,
4379 another thread could invalidate it by unsharing last of the same hash key
4380 (which it can do by means other than releasing copy-on-write Svs)
4381 or by changing the other copy-on-write SVs in the loop. */
4383 S_sv_release_COW(pTHX_ register SV *sv, char *pvx, STRLEN cur, STRLEN len,
4384 U32 hash, SV *after)
4386 if (len) { /* this SV was SvIsCOW_normal(sv) */
4387 /* we need to find the SV pointing to us. */
4388 SV *current = SV_COW_NEXT_SV(after);
4390 if (current == sv) {
4391 /* The SV we point to points back to us (there were only two of us
4393 Hence other SV is no longer copy on write either. */
4395 SvREADONLY_off(after);
4397 /* We need to follow the pointers around the loop. */
4399 while ((next = SV_COW_NEXT_SV(current)) != sv) {
4402 /* don't loop forever if the structure is bust, and we have
4403 a pointer into a closed loop. */
4404 assert (current != after);
4405 assert (SvPVX(current) == pvx);
4407 /* Make the SV before us point to the SV after us. */
4408 SV_COW_NEXT_SV_SET(current, after);
4411 unsharepvn(pvx, SvUTF8(sv) ? -(I32)cur : cur, hash);
4416 Perl_sv_release_IVX(pTHX_ register SV *sv)
4419 sv_force_normal_flags(sv, 0);
4420 return SvOOK_off(sv);
4424 =for apidoc sv_force_normal_flags
4426 Undo various types of fakery on an SV: if the PV is a shared string, make
4427 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
4428 an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
4429 we do the copy, and is also used locally. If C<SV_COW_DROP_PV> is set
4430 then a copy-on-write scalar drops its PV buffer (if any) and becomes
4431 SvPOK_off rather than making a copy. (Used where this scalar is about to be
4432 set to some other value.) In addition, the C<flags> parameter gets passed to
4433 C<sv_unref_flags()> when unrefing. C<sv_force_normal> calls this function
4434 with flags set to 0.
4440 Perl_sv_force_normal_flags(pTHX_ register SV *sv, U32 flags)
4442 #ifdef PERL_COPY_ON_WRITE
4443 if (SvREADONLY(sv)) {
4444 /* At this point I believe I should acquire a global SV mutex. */
4446 char *pvx = SvPVX(sv);
4447 STRLEN len = SvLEN(sv);
4448 STRLEN cur = SvCUR(sv);
4449 U32 hash = SvUVX(sv);
4450 SV *next = SV_COW_NEXT_SV(sv); /* next COW sv in the loop. */
4452 PerlIO_printf(Perl_debug_log,
4453 "Copy on write: Force normal %ld\n",
4459 /* This SV doesn't own the buffer, so need to New() a new one: */
4462 if (flags & SV_COW_DROP_PV) {
4463 /* OK, so we don't need to copy our buffer. */
4466 SvGROW(sv, cur + 1);
4467 Move(pvx,SvPVX(sv),cur,char);
4471 sv_release_COW(sv, pvx, cur, len, hash, next);
4476 else if (IN_PERL_RUNTIME)
4477 Perl_croak(aTHX_ PL_no_modify);
4478 /* At this point I believe that I can drop the global SV mutex. */
4481 if (SvREADONLY(sv)) {
4483 char *pvx = SvPVX(sv);
4484 STRLEN len = SvCUR(sv);
4485 U32 hash = SvUVX(sv);
4488 SvGROW(sv, len + 1);
4489 Move(pvx,SvPVX(sv),len,char);
4491 unsharepvn(pvx, SvUTF8(sv) ? -(I32)len : len, hash);
4493 else if (IN_PERL_RUNTIME)
4494 Perl_croak(aTHX_ PL_no_modify);
4498 sv_unref_flags(sv, flags);
4499 else if (SvFAKE(sv) && SvTYPE(sv) == SVt_PVGV)
4504 =for apidoc sv_force_normal
4506 Undo various types of fakery on an SV: if the PV is a shared string, make
4507 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
4508 an xpvmg. See also C<sv_force_normal_flags>.
4514 Perl_sv_force_normal(pTHX_ register SV *sv)
4516 sv_force_normal_flags(sv, 0);
4522 Efficient removal of characters from the beginning of the string buffer.
4523 SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
4524 the string buffer. The C<ptr> becomes the first character of the adjusted
4525 string. Uses the "OOK hack".
4526 Beware: after this function returns, C<ptr> and SvPVX(sv) may no longer
4527 refer to the same chunk of data.
4533 Perl_sv_chop(pTHX_ register SV *sv, register char *ptr)
4535 register STRLEN delta;
4536 if (!ptr || !SvPOKp(sv))
4538 delta = ptr - SvPVX(sv);
4539 SV_CHECK_THINKFIRST(sv);
4540 if (SvTYPE(sv) < SVt_PVIV)
4541 sv_upgrade(sv,SVt_PVIV);
4544 if (!SvLEN(sv)) { /* make copy of shared string */
4545 char *pvx = SvPVX(sv);
4546 STRLEN len = SvCUR(sv);
4547 SvGROW(sv, len + 1);
4548 Move(pvx,SvPVX(sv),len,char);
4552 /* Same SvOOK_on but SvOOK_on does a SvIOK_off
4553 and we do that anyway inside the SvNIOK_off
4555 SvFLAGS(sv) |= SVf_OOK;
4564 /* sv_catpvn() is now a macro using Perl_sv_catpvn_flags();
4565 * this function provided for binary compatibility only
4569 Perl_sv_catpvn(pTHX_ SV *dsv, const char* sstr, STRLEN slen)
4571 sv_catpvn_flags(dsv, sstr, slen, SV_GMAGIC);
4575 =for apidoc sv_catpvn
4577 Concatenates the string onto the end of the string which is in the SV. The
4578 C<len> indicates number of bytes to copy. If the SV has the UTF-8
4579 status set, then the bytes appended should be valid UTF-8.
4580 Handles 'get' magic, but not 'set' magic. See C<sv_catpvn_mg>.
4582 =for apidoc sv_catpvn_flags
4584 Concatenates the string onto the end of the string which is in the SV. The
4585 C<len> indicates number of bytes to copy. If the SV has the UTF-8
4586 status set, then the bytes appended should be valid UTF-8.
4587 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<dsv> if
4588 appropriate, else not. C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
4589 in terms of this function.
4595 Perl_sv_catpvn_flags(pTHX_ register SV *dsv, register const char *sstr, register STRLEN slen, I32 flags)
4600 dstr = SvPV_force_flags(dsv, dlen, flags);
4601 SvGROW(dsv, dlen + slen + 1);
4604 Move(sstr, SvPVX(dsv) + dlen, slen, char);
4607 (void)SvPOK_only_UTF8(dsv); /* validate pointer */
4612 =for apidoc sv_catpvn_mg
4614 Like C<sv_catpvn>, but also handles 'set' magic.
4620 Perl_sv_catpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
4622 sv_catpvn(sv,ptr,len);
4626 /* sv_catsv() is now a macro using Perl_sv_catsv_flags();
4627 * this function provided for binary compatibility only
4631 Perl_sv_catsv(pTHX_ SV *dstr, register SV *sstr)
4633 sv_catsv_flags(dstr, sstr, SV_GMAGIC);
4637 =for apidoc sv_catsv
4639 Concatenates the string from SV C<ssv> onto the end of the string in
4640 SV C<dsv>. Modifies C<dsv> but not C<ssv>. Handles 'get' magic, but
4641 not 'set' magic. See C<sv_catsv_mg>.
4643 =for apidoc sv_catsv_flags
4645 Concatenates the string from SV C<ssv> onto the end of the string in
4646 SV C<dsv>. Modifies C<dsv> but not C<ssv>. If C<flags> has C<SV_GMAGIC>
4647 bit set, will C<mg_get> on the SVs if appropriate, else not. C<sv_catsv>
4648 and C<sv_catsv_nomg> are implemented in terms of this function.
4653 Perl_sv_catsv_flags(pTHX_ SV *dsv, register SV *ssv, I32 flags)
4659 if ((spv = SvPV(ssv, slen))) {
4660 /* sutf8 and dutf8 were type bool, but under USE_ITHREADS,
4661 gcc version 2.95.2 20000220 (Debian GNU/Linux) for
4662 Linux xxx 2.2.17 on sparc64 with gcc -O2, we erroneously
4663 get dutf8 = 0x20000000, (i.e. SVf_UTF8) even though
4664 dsv->sv_flags doesn't have that bit set.
4665 Andy Dougherty 12 Oct 2001
4667 I32 sutf8 = DO_UTF8(ssv);
4670 if (SvGMAGICAL(dsv) && (flags & SV_GMAGIC))
4672 dutf8 = DO_UTF8(dsv);
4674 if (dutf8 != sutf8) {
4676 /* Not modifying source SV, so taking a temporary copy. */
4677 SV* csv = sv_2mortal(newSVpvn(spv, slen));
4679 sv_utf8_upgrade(csv);
4680 spv = SvPV(csv, slen);
4683 sv_utf8_upgrade_nomg(dsv);
4685 sv_catpvn_nomg(dsv, spv, slen);
4690 =for apidoc sv_catsv_mg
4692 Like C<sv_catsv>, but also handles 'set' magic.
4698 Perl_sv_catsv_mg(pTHX_ SV *dsv, register SV *ssv)
4705 =for apidoc sv_catpv
4707 Concatenates the string onto the end of the string which is in the SV.
4708 If the SV has the UTF-8 status set, then the bytes appended should be
4709 valid UTF-8. Handles 'get' magic, but not 'set' magic. See C<sv_catpv_mg>.
4714 Perl_sv_catpv(pTHX_ register SV *sv, register const char *ptr)
4716 register STRLEN len;
4722 junk = SvPV_force(sv, tlen);
4724 SvGROW(sv, tlen + len + 1);
4727 Move(ptr,SvPVX(sv)+tlen,len+1,char);
4729 (void)SvPOK_only_UTF8(sv); /* validate pointer */
4734 =for apidoc sv_catpv_mg
4736 Like C<sv_catpv>, but also handles 'set' magic.
4742 Perl_sv_catpv_mg(pTHX_ register SV *sv, register const char *ptr)
4751 Create a new null SV, or if len > 0, create a new empty SVt_PV type SV
4752 with an initial PV allocation of len+1. Normally accessed via the C<NEWSV>
4759 Perl_newSV(pTHX_ STRLEN len)
4765 sv_upgrade(sv, SVt_PV);
4766 SvGROW(sv, len + 1);
4771 =for apidoc sv_magicext
4773 Adds magic to an SV, upgrading it if necessary. Applies the
4774 supplied vtable and returns pointer to the magic added.
4776 Note that sv_magicext will allow things that sv_magic will not.
4777 In particular you can add magic to SvREADONLY SVs and and more than
4778 one instance of the same 'how'
4780 I C<namelen> is greater then zero then a savepvn() I<copy> of C<name> is stored,
4781 if C<namelen> is zero then C<name> is stored as-is and - as another special
4782 case - if C<(name && namelen == HEf_SVKEY)> then C<name> is assumed to contain
4783 an C<SV*> and has its REFCNT incremented
4785 (This is now used as a subroutine by sv_magic.)
4790 Perl_sv_magicext(pTHX_ SV* sv, SV* obj, int how, MGVTBL *vtable,
4791 const char* name, I32 namlen)
4795 if (SvTYPE(sv) < SVt_PVMG) {