3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4 * 2000, 2001, 2002, 2003, 2004, 2005, 2006, 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
28 /* Missing proto on LynxOS */
29 char *gconvert(double, int, int, char *);
32 #ifdef PERL_UTF8_CACHE_ASSERT
33 /* The cache element 0 is the Unicode offset;
34 * the cache element 1 is the byte offset of the element 0;
35 * the cache element 2 is the Unicode length of the substring;
36 * the cache element 3 is the byte length of the substring;
37 * The checking of the substring side would be good
38 * but substr() has enough code paths to make my head spin;
39 * if adding more checks watch out for the following tests:
40 * t/op/index.t t/op/length.t t/op/pat.t t/op/substr.t
41 * lib/utf8.t lib/Unicode/Collate/t/index.t
44 #define ASSERT_UTF8_CACHE(cache) \
45 STMT_START { if (cache) { assert((cache)[0] <= (cache)[1]); } } STMT_END
47 #define ASSERT_UTF8_CACHE(cache) NOOP
50 #ifdef PERL_OLD_COPY_ON_WRITE
51 #define SV_COW_NEXT_SV(sv) INT2PTR(SV *,SvUVX(sv))
52 #define SV_COW_NEXT_SV_SET(current,next) SvUV_set(current, PTR2UV(next))
53 /* This is a pessimistic view. Scalar must be purely a read-write PV to copy-
57 /* ============================================================================
59 =head1 Allocation and deallocation of SVs.
61 An SV (or AV, HV, etc.) is allocated in two parts: the head (struct sv,
62 av, hv...) contains type and reference count information, as well as a
63 pointer to the body (struct xrv, xpv, xpviv...), which contains fields
64 specific to each type.
66 In all but the most memory-paranoid configuations (ex: PURIFY), this
67 allocation is done using arenas, which by default are approximately 4K
68 chunks of memory parcelled up into N heads or bodies (of same size).
69 Sv-bodies are allocated by their sv-type, guaranteeing size
70 consistency needed to allocate safely from arrays.
72 The first slot in each arena is reserved, and is used to hold a link
73 to the next arena. In the case of heads, the unused first slot also
74 contains some flags and a note of the number of slots. Snaked through
75 each arena chain is a linked list of free items; when this becomes
76 empty, an extra arena is allocated and divided up into N items which
77 are threaded into the free list.
79 The following global variables are associated with arenas:
81 PL_sv_arenaroot pointer to list of SV arenas
82 PL_sv_root pointer to list of free SV structures
84 PL_body_arenaroots[] array of pointers to list of arenas, 1 per svtype
85 PL_body_roots[] array of pointers to list of free bodies of svtype
86 arrays are indexed by the svtype needed
88 Note that some of the larger and more rarely used body types (eg
89 xpvio) are not allocated using arenas, but are instead just
90 malloc()/free()ed as required.
92 In addition, a few SV heads are not allocated from an arena, but are
93 instead directly created as static or auto variables, eg PL_sv_undef.
94 The size of arenas can be changed from the default by setting
95 PERL_ARENA_SIZE appropriately at compile time.
97 The SV arena serves the secondary purpose of allowing still-live SVs
98 to be located and destroyed during final cleanup.
100 At the lowest level, the macros new_SV() and del_SV() grab and free
101 an SV head. (If debugging with -DD, del_SV() calls the function S_del_sv()
102 to return the SV to the free list with error checking.) new_SV() calls
103 more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
104 SVs in the free list have their SvTYPE field set to all ones.
106 Similarly, there are macros new_XIV()/del_XIV(), new_XNV()/del_XNV() etc
107 that allocate and return individual body types. Normally these are mapped
108 to the arena-manipulating functions new_xiv()/del_xiv() etc, but may be
109 instead mapped directly to malloc()/free() if PURIFY is defined. The
110 new/del functions remove from, or add to, the appropriate PL_foo_root
111 list, and call more_xiv() etc to add a new arena if the list is empty.
113 At the time of very final cleanup, sv_free_arenas() is called from
114 perl_destruct() to physically free all the arenas allocated since the
115 start of the interpreter.
117 Manipulation of any of the PL_*root pointers is protected by enclosing
118 LOCK_SV_MUTEX; ... UNLOCK_SV_MUTEX calls which should Do the Right Thing
119 if threads are enabled.
121 The function visit() scans the SV arenas list, and calls a specified
122 function for each SV it finds which is still live - ie which has an SvTYPE
123 other than all 1's, and a non-zero SvREFCNT. visit() is used by the
124 following functions (specified as [function that calls visit()] / [function
125 called by visit() for each SV]):
127 sv_report_used() / do_report_used()
128 dump all remaining SVs (debugging aid)
130 sv_clean_objs() / do_clean_objs(),do_clean_named_objs()
131 Attempt to free all objects pointed to by RVs,
132 and, unless DISABLE_DESTRUCTOR_KLUDGE is defined,
133 try to do the same for all objects indirectly
134 referenced by typeglobs too. Called once from
135 perl_destruct(), prior to calling sv_clean_all()
138 sv_clean_all() / do_clean_all()
139 SvREFCNT_dec(sv) each remaining SV, possibly
140 triggering an sv_free(). It also sets the
141 SVf_BREAK flag on the SV to indicate that the
142 refcnt has been artificially lowered, and thus
143 stopping sv_free() from giving spurious warnings
144 about SVs which unexpectedly have a refcnt
145 of zero. called repeatedly from perl_destruct()
146 until there are no SVs left.
148 =head2 Arena allocator API Summary
150 Private API to rest of sv.c
154 new_XIV(), del_XIV(),
155 new_XNV(), del_XNV(),
160 sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
165 ============================================================================ */
170 * "A time to plant, and a time to uproot what was planted..."
174 * nice_chunk and nice_chunk size need to be set
175 * and queried under the protection of sv_mutex
178 Perl_offer_nice_chunk(pTHX_ void *chunk, U32 chunk_size)
184 new_chunk = (void *)(chunk);
185 new_chunk_size = (chunk_size);
186 if (new_chunk_size > PL_nice_chunk_size) {
187 Safefree(PL_nice_chunk);
188 PL_nice_chunk = (char *) new_chunk;
189 PL_nice_chunk_size = new_chunk_size;
196 #ifdef DEBUG_LEAKING_SCALARS
197 # define FREE_SV_DEBUG_FILE(sv) Safefree((sv)->sv_debug_file)
199 # define FREE_SV_DEBUG_FILE(sv)
203 # define SvARENA_CHAIN(sv) ((sv)->sv_u.svu_rv)
204 /* Whilst I'd love to do this, it seems that things like to check on
206 # define POSION_SV_HEAD(sv) Poison(sv, 1, struct STRUCT_SV)
208 # define POSION_SV_HEAD(sv) Poison(&SvANY(sv), 1, void *), \
209 Poison(&SvREFCNT(sv), 1, U32)
211 # define SvARENA_CHAIN(sv) SvANY(sv)
212 # define POSION_SV_HEAD(sv)
215 #define plant_SV(p) \
217 FREE_SV_DEBUG_FILE(p); \
219 SvARENA_CHAIN(p) = (void *)PL_sv_root; \
220 SvFLAGS(p) = SVTYPEMASK; \
225 /* sv_mutex must be held while calling uproot_SV() */
226 #define uproot_SV(p) \
229 PL_sv_root = (SV*)SvARENA_CHAIN(p); \
234 /* make some more SVs by adding another arena */
236 /* sv_mutex must be held while calling more_sv() */
244 sv_add_arena(PL_nice_chunk, PL_nice_chunk_size, 0);
245 PL_nice_chunk = NULL;
246 PL_nice_chunk_size = 0;
249 char *chunk; /* must use New here to match call to */
250 Newx(chunk,PERL_ARENA_SIZE,char); /* Safefree() in sv_free_arenas() */
251 sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
257 /* new_SV(): return a new, empty SV head */
259 #ifdef DEBUG_LEAKING_SCALARS
260 /* provide a real function for a debugger to play with */
270 sv = S_more_sv(aTHX);
275 sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
276 sv->sv_debug_line = (U16) ((PL_copline == NOLINE) ?
277 (PL_curcop ? CopLINE(PL_curcop) : 0) : PL_copline);
278 sv->sv_debug_inpad = 0;
279 sv->sv_debug_cloned = 0;
280 sv->sv_debug_file = PL_curcop ? savepv(CopFILE(PL_curcop)): NULL;
284 # define new_SV(p) (p)=S_new_SV(aTHX)
293 (p) = S_more_sv(aTHX); \
302 /* del_SV(): return an empty SV head to the free list */
317 S_del_sv(pTHX_ SV *p)
323 for (sva = PL_sv_arenaroot; sva; sva = (SV *) SvANY(sva)) {
324 const SV * const sv = sva + 1;
325 const SV * const svend = &sva[SvREFCNT(sva)];
326 if (p >= sv && p < svend) {
332 if (ckWARN_d(WARN_INTERNAL))
333 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
334 "Attempt to free non-arena SV: 0x%"UVxf
335 pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
342 #else /* ! DEBUGGING */
344 #define del_SV(p) plant_SV(p)
346 #endif /* DEBUGGING */
350 =head1 SV Manipulation Functions
352 =for apidoc sv_add_arena
354 Given a chunk of memory, link it to the head of the list of arenas,
355 and split it into a list of free SVs.
361 Perl_sv_add_arena(pTHX_ char *ptr, U32 size, U32 flags)
364 SV* const sva = (SV*)ptr;
368 /* The first SV in an arena isn't an SV. */
369 SvANY(sva) = (void *) PL_sv_arenaroot; /* ptr to next arena */
370 SvREFCNT(sva) = size / sizeof(SV); /* number of SV slots */
371 SvFLAGS(sva) = flags; /* FAKE if not to be freed */
373 PL_sv_arenaroot = sva;
374 PL_sv_root = sva + 1;
376 svend = &sva[SvREFCNT(sva) - 1];
379 SvARENA_CHAIN(sv) = (void *)(SV*)(sv + 1);
383 /* Must always set typemask because it's awlays checked in on cleanup
384 when the arenas are walked looking for objects. */
385 SvFLAGS(sv) = SVTYPEMASK;
388 SvARENA_CHAIN(sv) = 0;
392 SvFLAGS(sv) = SVTYPEMASK;
395 /* visit(): call the named function for each non-free SV in the arenas
396 * whose flags field matches the flags/mask args. */
399 S_visit(pTHX_ SVFUNC_t f, U32 flags, U32 mask)
405 for (sva = PL_sv_arenaroot; sva; sva = (SV*)SvANY(sva)) {
406 register const SV * const svend = &sva[SvREFCNT(sva)];
408 for (sv = sva + 1; sv < svend; ++sv) {
409 if (SvTYPE(sv) != SVTYPEMASK
410 && (sv->sv_flags & mask) == flags
423 /* called by sv_report_used() for each live SV */
426 do_report_used(pTHX_ SV *sv)
428 if (SvTYPE(sv) != SVTYPEMASK) {
429 PerlIO_printf(Perl_debug_log, "****\n");
436 =for apidoc sv_report_used
438 Dump the contents of all SVs not yet freed. (Debugging aid).
444 Perl_sv_report_used(pTHX)
447 visit(do_report_used, 0, 0);
451 /* called by sv_clean_objs() for each live SV */
454 do_clean_objs(pTHX_ SV *ref)
458 SV * const target = SvRV(ref);
459 if (SvOBJECT(target)) {
460 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(ref)));
461 if (SvWEAKREF(ref)) {
462 sv_del_backref(target, ref);
468 SvREFCNT_dec(target);
473 /* XXX Might want to check arrays, etc. */
476 /* called by sv_clean_objs() for each live SV */
478 #ifndef DISABLE_DESTRUCTOR_KLUDGE
480 do_clean_named_objs(pTHX_ SV *sv)
483 if (SvTYPE(sv) == SVt_PVGV && GvGP(sv)) {
485 #ifdef PERL_DONT_CREATE_GVSV
488 SvOBJECT(GvSV(sv))) ||
489 (GvAV(sv) && SvOBJECT(GvAV(sv))) ||
490 (GvHV(sv) && SvOBJECT(GvHV(sv))) ||
491 (GvIO(sv) && SvOBJECT(GvIO(sv))) ||
492 (GvCV(sv) && SvOBJECT(GvCV(sv))) )
494 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning named glob object:\n "), sv_dump(sv)));
495 SvFLAGS(sv) |= SVf_BREAK;
503 =for apidoc sv_clean_objs
505 Attempt to destroy all objects not yet freed
511 Perl_sv_clean_objs(pTHX)
514 PL_in_clean_objs = TRUE;
515 visit(do_clean_objs, SVf_ROK, SVf_ROK);
516 #ifndef DISABLE_DESTRUCTOR_KLUDGE
517 /* some barnacles may yet remain, clinging to typeglobs */
518 visit(do_clean_named_objs, SVt_PVGV, SVTYPEMASK);
520 PL_in_clean_objs = FALSE;
523 /* called by sv_clean_all() for each live SV */
526 do_clean_all(pTHX_ SV *sv)
529 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
530 SvFLAGS(sv) |= SVf_BREAK;
531 if (PL_comppad == (AV*)sv) {
533 PL_curpad = Null(SV**);
539 =for apidoc sv_clean_all
541 Decrement the refcnt of each remaining SV, possibly triggering a
542 cleanup. This function may have to be called multiple times to free
543 SVs which are in complex self-referential hierarchies.
549 Perl_sv_clean_all(pTHX)
553 PL_in_clean_all = TRUE;
554 cleaned = visit(do_clean_all, 0,0);
555 PL_in_clean_all = FALSE;
560 S_free_arena(pTHX_ void **root) {
562 void ** const next = *(void **)root;
569 =for apidoc sv_free_arenas
571 Deallocate the memory used by all arenas. Note that all the individual SV
572 heads and bodies within the arenas must already have been freed.
577 Perl_sv_free_arenas(pTHX)
584 /* Free arenas here, but be careful about fake ones. (We assume
585 contiguity of the fake ones with the corresponding real ones.) */
587 for (sva = PL_sv_arenaroot; sva; sva = svanext) {
588 svanext = (SV*) SvANY(sva);
589 while (svanext && SvFAKE(svanext))
590 svanext = (SV*) SvANY(svanext);
596 S_free_arena(aTHX_ (void**) PL_body_arenas);
598 for (i=0; i<SVt_LAST; i++)
599 PL_body_roots[i] = 0;
601 Safefree(PL_nice_chunk);
602 PL_nice_chunk = NULL;
603 PL_nice_chunk_size = 0;
609 Here are mid-level routines that manage the allocation of bodies out
610 of the various arenas. There are 5 kinds of arenas:
612 1. SV-head arenas, which are discussed and handled above
613 2. regular body arenas
614 3. arenas for reduced-size bodies
616 5. pte arenas (thread related)
618 Arena types 2 & 3 are chained by body-type off an array of
619 arena-root pointers, which is indexed by svtype. Some of the
620 larger/less used body types are malloced singly, since a large
621 unused block of them is wasteful. Also, several svtypes dont have
622 bodies; the data fits into the sv-head itself. The arena-root
623 pointer thus has a few unused root-pointers (which may be hijacked
624 later for arena types 4,5)
626 3 differs from 2 as an optimization; some body types have several
627 unused fields in the front of the structure (which are kept in-place
628 for consistency). These bodies can be allocated in smaller chunks,
629 because the leading fields arent accessed. Pointers to such bodies
630 are decremented to point at the unused 'ghost' memory, knowing that
631 the pointers are used with offsets to the real memory.
633 HE, HEK arenas are managed separately, with separate code, but may
634 be merge-able later..
636 PTE arenas are not sv-bodies, but they share these mid-level
637 mechanics, so are considered here. The new mid-level mechanics rely
638 on the sv_type of the body being allocated, so we just reserve one
639 of the unused body-slots for PTEs, then use it in those (2) PTE
640 contexts below (line ~10k)
644 S_more_bodies (pTHX_ size_t size, svtype sv_type)
647 void ** const root = &PL_body_roots[sv_type];
650 const size_t count = PERL_ARENA_SIZE / size;
652 Newx(start, count*size, char);
653 *((void **) start) = PL_body_arenas;
654 PL_body_arenas = (void *)start;
656 end = start + (count-1) * size;
658 /* The initial slot is used to link the arenas together, so it isn't to be
659 linked into the list of ready-to-use bodies. */
663 *root = (void *)start;
665 while (start < end) {
666 char * const next = start + size;
667 *(void**) start = (void *)next;
675 /* grab a new thing from the free list, allocating more if necessary */
677 /* 1st, the inline version */
679 #define new_body_inline(xpv, size, sv_type) \
681 void ** const r3wt = &PL_body_roots[sv_type]; \
683 xpv = *((void **)(r3wt)) \
684 ? *((void **)(r3wt)) : S_more_bodies(aTHX_ size, sv_type); \
685 *(r3wt) = *(void**)(xpv); \
689 /* now use the inline version in the proper function */
693 /* This isn't being used with -DPURIFY, so don't declare it. Otherwise
694 compilers issue warnings. */
697 S_new_body(pTHX_ size_t size, svtype sv_type)
701 new_body_inline(xpv, size, sv_type);
707 /* return a thing to the free list */
709 #define del_body(thing, root) \
711 void ** const thing_copy = (void **)thing;\
713 *thing_copy = *root; \
714 *root = (void*)thing_copy; \
719 Revisiting type 3 arenas, there are 4 body-types which have some
720 members that are never accessed. They are XPV, XPVIV, XPVAV,
721 XPVHV, which have corresponding types: xpv_allocated,
722 xpviv_allocated, xpvav_allocated, xpvhv_allocated,
724 For these types, the arenas are carved up into *_allocated size
725 chunks, we thus avoid wasted memory for those unaccessed members.
726 When bodies are allocated, we adjust the pointer back in memory by
727 the size of the bit not allocated, so it's as if we allocated the
728 full structure. (But things will all go boom if you write to the
729 part that is "not there", because you'll be overwriting the last
730 members of the preceding structure in memory.)
732 We calculate the correction using the STRUCT_OFFSET macro. For example, if
733 xpv_allocated is the same structure as XPV then the two OFFSETs sum to zero,
734 and the pointer is unchanged. If the allocated structure is smaller (no
735 initial NV actually allocated) then the net effect is to subtract the size
736 of the NV from the pointer, to return a new pointer as if an initial NV were
739 This is the same trick as was used for NV and IV bodies. Ironically it
740 doesn't need to be used for NV bodies any more, because NV is now at the
741 start of the structure. IV bodies don't need it either, because they are
742 no longer allocated. */
744 /* The following 2 arrays hide the above details in a pair of
745 lookup-tables, allowing us to be body-type agnostic.
747 size maps svtype to its body's allocated size.
748 offset maps svtype to the body-pointer adjustment needed
750 NB: elements in latter are 0 or <0, and are added during
751 allocation, and subtracted during deallocation. It may be clearer
752 to invert the values, and call it shrinkage_by_svtype.
755 struct body_details {
756 size_t size; /* Size to allocate */
757 size_t copy; /* Size of structure to copy (may be shorter) */
759 bool cant_upgrade; /* Can upgrade this type */
760 bool zero_nv; /* zero the NV when upgrading from this */
761 bool arena; /* Allocated from an arena */
768 /* With -DPURFIY we allocate everything directly, and don't use arenas.
769 This seems a rather elegant way to simplify some of the code below. */
770 #define HASARENA FALSE
772 #define HASARENA TRUE
774 #define NOARENA FALSE
776 /* A macro to work out the offset needed to subtract from a pointer to (say)
783 to make its members accessible via a pointer to (say)
793 #define relative_STRUCT_OFFSET(longer, shorter, member) \
794 (STRUCT_OFFSET(shorter, member) - STRUCT_OFFSET(longer, member))
796 /* Calculate the length to copy. Specifically work out the length less any
797 final padding the compiler needed to add. See the comment in sv_upgrade
798 for why copying the padding proved to be a bug. */
800 #define copy_length(type, last_member) \
801 STRUCT_OFFSET(type, last_member) \
802 + sizeof (((type*)SvANY((SV*)0))->last_member)
804 static const struct body_details bodies_by_type[] = {
805 {0, 0, 0, FALSE, NONV, NOARENA},
806 /* IVs are in the head, so the allocation size is 0 */
807 {0, sizeof(IV), STRUCT_OFFSET(XPVIV, xiv_iv), FALSE, NONV, NOARENA},
808 /* 8 bytes on most ILP32 with IEEE doubles */
809 {sizeof(NV), sizeof(NV), 0, FALSE, HADNV, HASARENA},
810 /* RVs are in the head now */
811 /* However, this slot is overloaded and used by the pte */
812 {0, 0, 0, FALSE, NONV, NOARENA},
813 /* 8 bytes on most ILP32 with IEEE doubles */
814 {sizeof(xpv_allocated),
815 copy_length(XPV, xpv_len)
816 - relative_STRUCT_OFFSET(xpv_allocated, XPV, xpv_cur),
817 + relative_STRUCT_OFFSET(xpv_allocated, XPV, xpv_cur),
818 FALSE, NONV, HASARENA},
820 {sizeof(xpviv_allocated),
821 copy_length(XPVIV, xiv_u)
822 - relative_STRUCT_OFFSET(xpviv_allocated, XPVIV, xpv_cur),
823 + relative_STRUCT_OFFSET(xpviv_allocated, XPVIV, xpv_cur),
824 FALSE, NONV, HASARENA},
826 {sizeof(XPVNV), copy_length(XPVNV, xiv_u), 0, FALSE, HADNV, HASARENA},
828 {sizeof(XPVMG), copy_length(XPVMG, xmg_stash), 0, FALSE, HADNV, HASARENA},
830 {sizeof(XPVBM), sizeof(XPVBM), 0, TRUE, HADNV, HASARENA},
832 {sizeof(XPVGV), sizeof(XPVGV), 0, TRUE, HADNV, HASARENA},
834 {sizeof(XPVLV), sizeof(XPVLV), 0, TRUE, HADNV, HASARENA},
836 {sizeof(xpvav_allocated),
837 copy_length(XPVAV, xmg_stash)
838 - relative_STRUCT_OFFSET(xpvav_allocated, XPVAV, xav_fill),
839 + relative_STRUCT_OFFSET(xpvav_allocated, XPVAV, xav_fill),
840 TRUE, HADNV, HASARENA},
842 {sizeof(xpvhv_allocated),
843 copy_length(XPVHV, xmg_stash)
844 - relative_STRUCT_OFFSET(xpvhv_allocated, XPVHV, xhv_fill),
845 + relative_STRUCT_OFFSET(xpvhv_allocated, XPVHV, xhv_fill),
846 TRUE, HADNV, HASARENA},
848 {sizeof(XPVCV), sizeof(XPVCV), 0, TRUE, HADNV, HASARENA},
850 {sizeof(XPVFM), sizeof(XPVFM), 0, TRUE, HADNV, NOARENA},
852 {sizeof(XPVIO), sizeof(XPVIO), 0, TRUE, HADNV, NOARENA}
855 #define new_body_type(sv_type) \
856 (void *)((char *)S_new_body(aTHX_ bodies_by_type[sv_type].size, sv_type)\
857 - bodies_by_type[sv_type].offset)
859 #define del_body_type(p, sv_type) \
860 del_body(p, &PL_body_roots[sv_type])
863 #define new_body_allocated(sv_type) \
864 (void *)((char *)S_new_body(aTHX_ bodies_by_type[sv_type].size, sv_type)\
865 - bodies_by_type[sv_type].offset)
867 #define del_body_allocated(p, sv_type) \
868 del_body(p + bodies_by_type[sv_type].offset, &PL_body_roots[sv_type])
871 #define my_safemalloc(s) (void*)safemalloc(s)
872 #define my_safecalloc(s) (void*)safecalloc(s, 1)
873 #define my_safefree(p) safefree((char*)p)
877 #define new_XNV() my_safemalloc(sizeof(XPVNV))
878 #define del_XNV(p) my_safefree(p)
880 #define new_XPVNV() my_safemalloc(sizeof(XPVNV))
881 #define del_XPVNV(p) my_safefree(p)
883 #define new_XPVAV() my_safemalloc(sizeof(XPVAV))
884 #define del_XPVAV(p) my_safefree(p)
886 #define new_XPVHV() my_safemalloc(sizeof(XPVHV))
887 #define del_XPVHV(p) my_safefree(p)
889 #define new_XPVMG() my_safemalloc(sizeof(XPVMG))
890 #define del_XPVMG(p) my_safefree(p)
892 #define new_XPVGV() my_safemalloc(sizeof(XPVGV))
893 #define del_XPVGV(p) my_safefree(p)
897 #define new_XNV() new_body_type(SVt_NV)
898 #define del_XNV(p) del_body_type(p, SVt_NV)
900 #define new_XPVNV() new_body_type(SVt_PVNV)
901 #define del_XPVNV(p) del_body_type(p, SVt_PVNV)
903 #define new_XPVAV() new_body_allocated(SVt_PVAV)
904 #define del_XPVAV(p) del_body_allocated(p, SVt_PVAV)
906 #define new_XPVHV() new_body_allocated(SVt_PVHV)
907 #define del_XPVHV(p) del_body_allocated(p, SVt_PVHV)
909 #define new_XPVMG() new_body_type(SVt_PVMG)
910 #define del_XPVMG(p) del_body_type(p, SVt_PVMG)
912 #define new_XPVGV() new_body_type(SVt_PVGV)
913 #define del_XPVGV(p) del_body_type(p, SVt_PVGV)
917 /* no arena for you! */
919 #define new_NOARENA(details) \
920 my_safemalloc((details)->size + (details)->offset)
921 #define new_NOARENAZ(details) \
922 my_safecalloc((details)->size + (details)->offset)
925 =for apidoc sv_upgrade
927 Upgrade an SV to a more complex form. Generally adds a new body type to the
928 SV, then copies across as much information as possible from the old body.
929 You generally want to use the C<SvUPGRADE> macro wrapper. See also C<svtype>.
935 Perl_sv_upgrade(pTHX_ register SV *sv, U32 new_type)
940 const U32 old_type = SvTYPE(sv);
941 const struct body_details *const old_type_details
942 = bodies_by_type + old_type;
943 const struct body_details *new_type_details = bodies_by_type + new_type;
945 if (new_type != SVt_PV && SvIsCOW(sv)) {
946 sv_force_normal_flags(sv, 0);
949 if (old_type == new_type)
952 if (old_type > new_type)
953 Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
954 (int)old_type, (int)new_type);
957 old_body = SvANY(sv);
959 /* Copying structures onto other structures that have been neatly zeroed
960 has a subtle gotcha. Consider XPVMG
962 +------+------+------+------+------+-------+-------+
963 | NV | CUR | LEN | IV | MAGIC | STASH |
964 +------+------+------+------+------+-------+-------+
967 where NVs are aligned to 8 bytes, so that sizeof that structure is
968 actually 32 bytes long, with 4 bytes of padding at the end:
970 +------+------+------+------+------+-------+-------+------+
971 | NV | CUR | LEN | IV | MAGIC | STASH | ??? |
972 +------+------+------+------+------+-------+-------+------+
973 0 4 8 12 16 20 24 28 32
975 so what happens if you allocate memory for this structure:
977 +------+------+------+------+------+-------+-------+------+------+...
978 | NV | CUR | LEN | IV | MAGIC | STASH | GP | NAME |
979 +------+------+------+------+------+-------+-------+------+------+...
980 0 4 8 12 16 20 24 28 32 36
982 zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
983 expect, because you copy the area marked ??? onto GP. Now, ??? may have
984 started out as zero once, but it's quite possible that it isn't. So now,
985 rather than a nicely zeroed GP, you have it pointing somewhere random.
988 (In fact, GP ends up pointing at a previous GP structure, because the
989 principle cause of the padding in XPVMG getting garbage is a copy of
990 sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob)
992 So we are careful and work out the size of used parts of all the
999 if (new_type < SVt_PVIV) {
1000 new_type = (new_type == SVt_NV)
1001 ? SVt_PVNV : SVt_PVIV;
1002 new_type_details = bodies_by_type + new_type;
1006 if (new_type < SVt_PVNV) {
1007 new_type = SVt_PVNV;
1008 new_type_details = bodies_by_type + new_type;
1014 assert(new_type > SVt_PV);
1015 assert(SVt_IV < SVt_PV);
1016 assert(SVt_NV < SVt_PV);
1023 /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1024 there's no way that it can be safely upgraded, because perl.c
1025 expects to Safefree(SvANY(PL_mess_sv)) */
1026 assert(sv != PL_mess_sv);
1027 /* This flag bit is used to mean other things in other scalar types.
1028 Given that it only has meaning inside the pad, it shouldn't be set
1029 on anything that can get upgraded. */
1030 assert((SvFLAGS(sv) & SVpad_TYPED) == 0);
1033 if (old_type_details->cant_upgrade)
1034 Perl_croak(aTHX_ "Can't upgrade that kind of scalar");
1037 SvFLAGS(sv) &= ~SVTYPEMASK;
1038 SvFLAGS(sv) |= new_type;
1042 Perl_croak(aTHX_ "Can't upgrade to undef");
1044 assert(old_type == SVt_NULL);
1045 SvANY(sv) = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
1049 assert(old_type == SVt_NULL);
1050 SvANY(sv) = new_XNV();
1054 assert(old_type == SVt_NULL);
1055 SvANY(sv) = &sv->sv_u.svu_rv;
1059 SvANY(sv) = new_XPVHV();
1062 HvTOTALKEYS(sv) = 0;
1067 SvANY(sv) = new_XPVAV();
1074 /* SVt_NULL isn't the only thing upgraded to AV or HV.
1075 The target created by newSVrv also is, and it can have magic.
1076 However, it never has SvPVX set.
1078 if (old_type >= SVt_RV) {
1079 assert(SvPVX_const(sv) == 0);
1082 /* Could put this in the else clause below, as PVMG must have SvPVX
1083 0 already (the assertion above) */
1086 if (old_type >= SVt_PVMG) {
1087 SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_magic);
1088 SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
1090 SvMAGIC_set(sv, NULL);
1091 SvSTASH_set(sv, NULL);
1097 /* XXX Is this still needed? Was it ever needed? Surely as there is
1098 no route from NV to PVIV, NOK can never be true */
1099 assert(!SvNOKp(sv));
1111 assert(new_type_details->size);
1112 /* We always allocated the full length item with PURIFY. To do this
1113 we fake things so that arena is false for all 16 types.. */
1114 if(new_type_details->arena) {
1115 /* This points to the start of the allocated area. */
1116 new_body_inline(new_body, new_type_details->size, new_type);
1117 Zero(new_body, new_type_details->size, char);
1118 new_body = ((char *)new_body) - new_type_details->offset;
1120 new_body = new_NOARENAZ(new_type_details);
1122 SvANY(sv) = new_body;
1124 if (old_type_details->copy) {
1125 Copy((char *)old_body + old_type_details->offset,
1126 (char *)new_body + old_type_details->offset,
1127 old_type_details->copy, char);
1130 #ifndef NV_ZERO_IS_ALLBITS_ZERO
1131 /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
1132 * correct 0.0 for us. Otherwise, if the old body didn't have an
1133 * NV slot, but the new one does, then we need to initialise the
1134 * freshly created NV slot with whatever the correct bit pattern is
1136 if (old_type_details->zero_nv && !new_type_details->zero_nv)
1140 if (new_type == SVt_PVIO)
1141 IoPAGE_LEN(sv) = 60;
1142 if (old_type < SVt_RV)
1146 Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1147 (unsigned long)new_type);
1150 if (old_type_details->size) {
1151 /* If the old body had an allocated size, then we need to free it. */
1153 my_safefree(old_body);
1155 del_body((void*)((char*)old_body + old_type_details->offset),
1156 &PL_body_roots[old_type]);
1162 =for apidoc sv_backoff
1164 Remove any string offset. You should normally use the C<SvOOK_off> macro
1171 Perl_sv_backoff(pTHX_ register SV *sv)
1174 assert(SvTYPE(sv) != SVt_PVHV);
1175 assert(SvTYPE(sv) != SVt_PVAV);
1177 const char * const s = SvPVX_const(sv);
1178 SvLEN_set(sv, SvLEN(sv) + SvIVX(sv));
1179 SvPV_set(sv, SvPVX(sv) - SvIVX(sv));
1181 Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1183 SvFLAGS(sv) &= ~SVf_OOK;
1190 Expands the character buffer in the SV. If necessary, uses C<sv_unref> and
1191 upgrades the SV to C<SVt_PV>. Returns a pointer to the character buffer.
1192 Use the C<SvGROW> wrapper instead.
1198 Perl_sv_grow(pTHX_ register SV *sv, register STRLEN newlen)
1202 #ifdef HAS_64K_LIMIT
1203 if (newlen >= 0x10000) {
1204 PerlIO_printf(Perl_debug_log,
1205 "Allocation too large: %"UVxf"\n", (UV)newlen);
1208 #endif /* HAS_64K_LIMIT */
1211 if (SvTYPE(sv) < SVt_PV) {
1212 sv_upgrade(sv, SVt_PV);
1213 s = SvPVX_mutable(sv);
1215 else if (SvOOK(sv)) { /* pv is offset? */
1217 s = SvPVX_mutable(sv);
1218 if (newlen > SvLEN(sv))
1219 newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1220 #ifdef HAS_64K_LIMIT
1221 if (newlen >= 0x10000)
1226 s = SvPVX_mutable(sv);
1228 if (newlen > SvLEN(sv)) { /* need more room? */
1229 newlen = PERL_STRLEN_ROUNDUP(newlen);
1230 if (SvLEN(sv) && s) {
1232 const STRLEN l = malloced_size((void*)SvPVX_const(sv));
1238 s = saferealloc(s, newlen);
1241 s = safemalloc(newlen);
1242 if (SvPVX_const(sv) && SvCUR(sv)) {
1243 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1247 SvLEN_set(sv, newlen);
1253 =for apidoc sv_setiv
1255 Copies an integer into the given SV, upgrading first if necessary.
1256 Does not handle 'set' magic. See also C<sv_setiv_mg>.
1262 Perl_sv_setiv(pTHX_ register SV *sv, IV i)
1265 SV_CHECK_THINKFIRST_COW_DROP(sv);
1266 switch (SvTYPE(sv)) {
1268 sv_upgrade(sv, SVt_IV);
1271 sv_upgrade(sv, SVt_PVNV);
1275 sv_upgrade(sv, SVt_PVIV);
1284 Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1287 (void)SvIOK_only(sv); /* validate number */
1293 =for apidoc sv_setiv_mg
1295 Like C<sv_setiv>, but also handles 'set' magic.
1301 Perl_sv_setiv_mg(pTHX_ register SV *sv, IV i)
1308 =for apidoc sv_setuv
1310 Copies an unsigned integer into the given SV, upgrading first if necessary.
1311 Does not handle 'set' magic. See also C<sv_setuv_mg>.
1317 Perl_sv_setuv(pTHX_ register SV *sv, UV u)
1319 /* With these two if statements:
1320 u=1.49 s=0.52 cu=72.49 cs=10.64 scripts=270 tests=20865
1323 u=1.35 s=0.47 cu=73.45 cs=11.43 scripts=270 tests=20865
1325 If you wish to remove them, please benchmark to see what the effect is
1327 if (u <= (UV)IV_MAX) {
1328 sv_setiv(sv, (IV)u);
1337 =for apidoc sv_setuv_mg
1339 Like C<sv_setuv>, but also handles 'set' magic.
1345 Perl_sv_setuv_mg(pTHX_ register SV *sv, UV u)
1354 =for apidoc sv_setnv
1356 Copies a double into the given SV, upgrading first if necessary.
1357 Does not handle 'set' magic. See also C<sv_setnv_mg>.
1363 Perl_sv_setnv(pTHX_ register SV *sv, NV num)
1366 SV_CHECK_THINKFIRST_COW_DROP(sv);
1367 switch (SvTYPE(sv)) {
1370 sv_upgrade(sv, SVt_NV);
1375 sv_upgrade(sv, SVt_PVNV);
1384 Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1388 (void)SvNOK_only(sv); /* validate number */
1393 =for apidoc sv_setnv_mg
1395 Like C<sv_setnv>, but also handles 'set' magic.
1401 Perl_sv_setnv_mg(pTHX_ register SV *sv, NV num)
1407 /* Print an "isn't numeric" warning, using a cleaned-up,
1408 * printable version of the offending string
1412 S_not_a_number(pTHX_ SV *sv)
1420 dsv = sv_2mortal(newSVpvs(""));
1421 pv = sv_uni_display(dsv, sv, 10, 0);
1424 const char * const limit = tmpbuf + sizeof(tmpbuf) - 8;
1425 /* each *s can expand to 4 chars + "...\0",
1426 i.e. need room for 8 chars */
1428 const char *s = SvPVX_const(sv);
1429 const char * const end = s + SvCUR(sv);
1430 for ( ; s < end && d < limit; s++ ) {
1432 if (ch & 128 && !isPRINT_LC(ch)) {
1441 else if (ch == '\r') {
1445 else if (ch == '\f') {
1449 else if (ch == '\\') {
1453 else if (ch == '\0') {
1457 else if (isPRINT_LC(ch))
1474 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1475 "Argument \"%s\" isn't numeric in %s", pv,
1478 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1479 "Argument \"%s\" isn't numeric", pv);
1483 =for apidoc looks_like_number
1485 Test if the content of an SV looks like a number (or is a number).
1486 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1487 non-numeric warning), even if your atof() doesn't grok them.
1493 Perl_looks_like_number(pTHX_ SV *sv)
1495 register const char *sbegin;
1499 sbegin = SvPVX_const(sv);
1502 else if (SvPOKp(sv))
1503 sbegin = SvPV_const(sv, len);
1505 return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1506 return grok_number(sbegin, len, NULL);
1509 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1510 until proven guilty, assume that things are not that bad... */
1515 As 64 bit platforms often have an NV that doesn't preserve all bits of
1516 an IV (an assumption perl has been based on to date) it becomes necessary
1517 to remove the assumption that the NV always carries enough precision to
1518 recreate the IV whenever needed, and that the NV is the canonical form.
1519 Instead, IV/UV and NV need to be given equal rights. So as to not lose
1520 precision as a side effect of conversion (which would lead to insanity
1521 and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1522 1) to distinguish between IV/UV/NV slots that have cached a valid
1523 conversion where precision was lost and IV/UV/NV slots that have a
1524 valid conversion which has lost no precision
1525 2) to ensure that if a numeric conversion to one form is requested that
1526 would lose precision, the precise conversion (or differently
1527 imprecise conversion) is also performed and cached, to prevent
1528 requests for different numeric formats on the same SV causing
1529 lossy conversion chains. (lossless conversion chains are perfectly
1534 SvIOKp is true if the IV slot contains a valid value
1535 SvIOK is true only if the IV value is accurate (UV if SvIOK_UV true)
1536 SvNOKp is true if the NV slot contains a valid value
1537 SvNOK is true only if the NV value is accurate
1540 while converting from PV to NV, check to see if converting that NV to an
1541 IV(or UV) would lose accuracy over a direct conversion from PV to
1542 IV(or UV). If it would, cache both conversions, return NV, but mark
1543 SV as IOK NOKp (ie not NOK).
1545 While converting from PV to IV, check to see if converting that IV to an
1546 NV would lose accuracy over a direct conversion from PV to NV. If it
1547 would, cache both conversions, flag similarly.
1549 Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1550 correctly because if IV & NV were set NV *always* overruled.
1551 Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1552 changes - now IV and NV together means that the two are interchangeable:
1553 SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1555 The benefit of this is that operations such as pp_add know that if
1556 SvIOK is true for both left and right operands, then integer addition
1557 can be used instead of floating point (for cases where the result won't
1558 overflow). Before, floating point was always used, which could lead to
1559 loss of precision compared with integer addition.
1561 * making IV and NV equal status should make maths accurate on 64 bit
1563 * may speed up maths somewhat if pp_add and friends start to use
1564 integers when possible instead of fp. (Hopefully the overhead in
1565 looking for SvIOK and checking for overflow will not outweigh the
1566 fp to integer speedup)
1567 * will slow down integer operations (callers of SvIV) on "inaccurate"
1568 values, as the change from SvIOK to SvIOKp will cause a call into
1569 sv_2iv each time rather than a macro access direct to the IV slot
1570 * should speed up number->string conversion on integers as IV is
1571 favoured when IV and NV are equally accurate
1573 ####################################################################
1574 You had better be using SvIOK_notUV if you want an IV for arithmetic:
1575 SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
1576 On the other hand, SvUOK is true iff UV.
1577 ####################################################################
1579 Your mileage will vary depending your CPU's relative fp to integer
1583 #ifndef NV_PRESERVES_UV
1584 # define IS_NUMBER_UNDERFLOW_IV 1
1585 # define IS_NUMBER_UNDERFLOW_UV 2
1586 # define IS_NUMBER_IV_AND_UV 2
1587 # define IS_NUMBER_OVERFLOW_IV 4
1588 # define IS_NUMBER_OVERFLOW_UV 5
1590 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
1592 /* For sv_2nv these three cases are "SvNOK and don't bother casting" */
1594 S_sv_2iuv_non_preserve(pTHX_ register SV *sv, I32 numtype)
1597 DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_2iuv_non '%s', IV=0x%"UVxf" NV=%"NVgf" inttype=%"UVXf"\n", SvPVX_const(sv), SvIVX(sv), SvNVX(sv), (UV)numtype));
1598 if (SvNVX(sv) < (NV)IV_MIN) {
1599 (void)SvIOKp_on(sv);
1601 SvIV_set(sv, IV_MIN);
1602 return IS_NUMBER_UNDERFLOW_IV;
1604 if (SvNVX(sv) > (NV)UV_MAX) {
1605 (void)SvIOKp_on(sv);
1608 SvUV_set(sv, UV_MAX);
1609 return IS_NUMBER_OVERFLOW_UV;
1611 (void)SvIOKp_on(sv);
1613 /* Can't use strtol etc to convert this string. (See truth table in
1615 if (SvNVX(sv) <= (UV)IV_MAX) {
1616 SvIV_set(sv, I_V(SvNVX(sv)));
1617 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1618 SvIOK_on(sv); /* Integer is precise. NOK, IOK */
1620 /* Integer is imprecise. NOK, IOKp */
1622 return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
1625 SvUV_set(sv, U_V(SvNVX(sv)));
1626 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
1627 if (SvUVX(sv) == UV_MAX) {
1628 /* As we know that NVs don't preserve UVs, UV_MAX cannot
1629 possibly be preserved by NV. Hence, it must be overflow.
1631 return IS_NUMBER_OVERFLOW_UV;
1633 SvIOK_on(sv); /* Integer is precise. NOK, UOK */
1635 /* Integer is imprecise. NOK, IOKp */
1637 return IS_NUMBER_OVERFLOW_IV;
1639 #endif /* !NV_PRESERVES_UV*/
1642 S_sv_2iuv_common(pTHX_ SV *sv) {
1645 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
1646 * without also getting a cached IV/UV from it at the same time
1647 * (ie PV->NV conversion should detect loss of accuracy and cache
1648 * IV or UV at same time to avoid this. */
1649 /* IV-over-UV optimisation - choose to cache IV if possible */
1651 if (SvTYPE(sv) == SVt_NV)
1652 sv_upgrade(sv, SVt_PVNV);
1654 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
1655 /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
1656 certainly cast into the IV range at IV_MAX, whereas the correct
1657 answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
1659 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
1660 SvIV_set(sv, I_V(SvNVX(sv)));
1661 if (SvNVX(sv) == (NV) SvIVX(sv)
1662 #ifndef NV_PRESERVES_UV
1663 && (((UV)1 << NV_PRESERVES_UV_BITS) >
1664 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
1665 /* Don't flag it as "accurately an integer" if the number
1666 came from a (by definition imprecise) NV operation, and
1667 we're outside the range of NV integer precision */
1670 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
1671 DEBUG_c(PerlIO_printf(Perl_debug_log,
1672 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
1678 /* IV not precise. No need to convert from PV, as NV
1679 conversion would already have cached IV if it detected
1680 that PV->IV would be better than PV->NV->IV
1681 flags already correct - don't set public IOK. */
1682 DEBUG_c(PerlIO_printf(Perl_debug_log,
1683 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
1688 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
1689 but the cast (NV)IV_MIN rounds to a the value less (more
1690 negative) than IV_MIN which happens to be equal to SvNVX ??
1691 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
1692 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
1693 (NV)UVX == NVX are both true, but the values differ. :-(
1694 Hopefully for 2s complement IV_MIN is something like
1695 0x8000000000000000 which will be exact. NWC */
1698 SvUV_set(sv, U_V(SvNVX(sv)));
1700 (SvNVX(sv) == (NV) SvUVX(sv))
1701 #ifndef NV_PRESERVES_UV
1702 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
1703 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
1704 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
1705 /* Don't flag it as "accurately an integer" if the number
1706 came from a (by definition imprecise) NV operation, and
1707 we're outside the range of NV integer precision */
1712 DEBUG_c(PerlIO_printf(Perl_debug_log,
1713 "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
1719 else if (SvPOKp(sv) && SvLEN(sv)) {
1721 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
1722 /* We want to avoid a possible problem when we cache an IV/ a UV which
1723 may be later translated to an NV, and the resulting NV is not
1724 the same as the direct translation of the initial string
1725 (eg 123.456 can shortcut to the IV 123 with atol(), but we must
1726 be careful to ensure that the value with the .456 is around if the
1727 NV value is requested in the future).
1729 This means that if we cache such an IV/a UV, we need to cache the
1730 NV as well. Moreover, we trade speed for space, and do not
1731 cache the NV if we are sure it's not needed.
1734 /* SVt_PVNV is one higher than SVt_PVIV, hence this order */
1735 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
1736 == IS_NUMBER_IN_UV) {
1737 /* It's definitely an integer, only upgrade to PVIV */
1738 if (SvTYPE(sv) < SVt_PVIV)
1739 sv_upgrade(sv, SVt_PVIV);
1741 } else if (SvTYPE(sv) < SVt_PVNV)
1742 sv_upgrade(sv, SVt_PVNV);
1744 /* If NVs preserve UVs then we only use the UV value if we know that
1745 we aren't going to call atof() below. If NVs don't preserve UVs
1746 then the value returned may have more precision than atof() will
1747 return, even though value isn't perfectly accurate. */
1748 if ((numtype & (IS_NUMBER_IN_UV
1749 #ifdef NV_PRESERVES_UV
1752 )) == IS_NUMBER_IN_UV) {
1753 /* This won't turn off the public IOK flag if it was set above */
1754 (void)SvIOKp_on(sv);
1756 if (!(numtype & IS_NUMBER_NEG)) {
1758 if (value <= (UV)IV_MAX) {
1759 SvIV_set(sv, (IV)value);
1761 /* it didn't overflow, and it was positive. */
1762 SvUV_set(sv, value);
1766 /* 2s complement assumption */
1767 if (value <= (UV)IV_MIN) {
1768 SvIV_set(sv, -(IV)value);
1770 /* Too negative for an IV. This is a double upgrade, but
1771 I'm assuming it will be rare. */
1772 if (SvTYPE(sv) < SVt_PVNV)
1773 sv_upgrade(sv, SVt_PVNV);
1777 SvNV_set(sv, -(NV)value);
1778 SvIV_set(sv, IV_MIN);
1782 /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
1783 will be in the previous block to set the IV slot, and the next
1784 block to set the NV slot. So no else here. */
1786 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
1787 != IS_NUMBER_IN_UV) {
1788 /* It wasn't an (integer that doesn't overflow the UV). */
1789 SvNV_set(sv, Atof(SvPVX_const(sv)));
1791 if (! numtype && ckWARN(WARN_NUMERIC))
1794 #if defined(USE_LONG_DOUBLE)
1795 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
1796 PTR2UV(sv), SvNVX(sv)));
1798 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"NVgf")\n",
1799 PTR2UV(sv), SvNVX(sv)));
1802 #ifdef NV_PRESERVES_UV
1803 (void)SvIOKp_on(sv);
1805 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
1806 SvIV_set(sv, I_V(SvNVX(sv)));
1807 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1810 /* Integer is imprecise. NOK, IOKp */
1812 /* UV will not work better than IV */
1814 if (SvNVX(sv) > (NV)UV_MAX) {
1816 /* Integer is inaccurate. NOK, IOKp, is UV */
1817 SvUV_set(sv, UV_MAX);
1819 SvUV_set(sv, U_V(SvNVX(sv)));
1820 /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
1821 NV preservse UV so can do correct comparison. */
1822 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
1825 /* Integer is imprecise. NOK, IOKp, is UV */
1830 #else /* NV_PRESERVES_UV */
1831 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
1832 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
1833 /* The IV/UV slot will have been set from value returned by
1834 grok_number above. The NV slot has just been set using
1837 assert (SvIOKp(sv));
1839 if (((UV)1 << NV_PRESERVES_UV_BITS) >
1840 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
1841 /* Small enough to preserve all bits. */
1842 (void)SvIOKp_on(sv);
1844 SvIV_set(sv, I_V(SvNVX(sv)));
1845 if ((NV)(SvIVX(sv)) == SvNVX(sv))
1847 /* Assumption: first non-preserved integer is < IV_MAX,
1848 this NV is in the preserved range, therefore: */
1849 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
1851 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);
1855 0 0 already failed to read UV.
1856 0 1 already failed to read UV.
1857 1 0 you won't get here in this case. IV/UV
1858 slot set, public IOK, Atof() unneeded.
1859 1 1 already read UV.
1860 so there's no point in sv_2iuv_non_preserve() attempting
1861 to use atol, strtol, strtoul etc. */
1862 sv_2iuv_non_preserve (sv, numtype);
1865 #endif /* NV_PRESERVES_UV */
1869 if (!(SvFLAGS(sv) & SVs_PADTMP)) {
1870 if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
1873 if (SvTYPE(sv) < SVt_IV)
1874 /* Typically the caller expects that sv_any is not NULL now. */
1875 sv_upgrade(sv, SVt_IV);
1876 /* Return 0 from the caller. */
1883 =for apidoc sv_2iv_flags
1885 Return the integer value of an SV, doing any necessary string
1886 conversion. If flags includes SV_GMAGIC, does an mg_get() first.
1887 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
1893 Perl_sv_2iv_flags(pTHX_ register SV *sv, I32 flags)
1898 if (SvGMAGICAL(sv)) {
1899 if (flags & SV_GMAGIC)
1904 return I_V(SvNVX(sv));
1906 if (SvPOKp(sv) && SvLEN(sv)) {
1909 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
1911 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
1912 == IS_NUMBER_IN_UV) {
1913 /* It's definitely an integer */
1914 if (numtype & IS_NUMBER_NEG) {
1915 if (value < (UV)IV_MIN)
1918 if (value < (UV)IV_MAX)
1923 if (ckWARN(WARN_NUMERIC))
1926 return I_V(Atof(SvPVX_const(sv)));
1931 assert(SvTYPE(sv) >= SVt_PVMG);
1932 /* This falls through to the report_uninit inside S_sv_2iuv_common. */
1933 } else if (SvTHINKFIRST(sv)) {
1937 SV * const tmpstr=AMG_CALLun(sv,numer);
1938 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
1939 return SvIV(tmpstr);
1942 return PTR2IV(SvRV(sv));
1945 sv_force_normal_flags(sv, 0);
1947 if (SvREADONLY(sv) && !SvOK(sv)) {
1948 if (ckWARN(WARN_UNINITIALIZED))
1954 if (S_sv_2iuv_common(aTHX_ sv))
1957 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
1958 PTR2UV(sv),SvIVX(sv)));
1959 return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
1963 =for apidoc sv_2uv_flags
1965 Return the unsigned integer value of an SV, doing any necessary string
1966 conversion. If flags includes SV_GMAGIC, does an mg_get() first.
1967 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
1973 Perl_sv_2uv_flags(pTHX_ register SV *sv, I32 flags)
1978 if (SvGMAGICAL(sv)) {
1979 if (flags & SV_GMAGIC)
1984 return U_V(SvNVX(sv));
1985 if (SvPOKp(sv) && SvLEN(sv)) {
1988 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
1990 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
1991 == IS_NUMBER_IN_UV) {
1992 /* It's definitely an integer */
1993 if (!(numtype & IS_NUMBER_NEG))
1997 if (ckWARN(WARN_NUMERIC))
2000 return U_V(Atof(SvPVX_const(sv)));
2005 assert(SvTYPE(sv) >= SVt_PVMG);
2006 /* This falls through to the report_uninit inside S_sv_2iuv_common. */
2007 } else if (SvTHINKFIRST(sv)) {
2011 SV *const tmpstr = AMG_CALLun(sv,numer);
2012 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2013 return SvUV(tmpstr);
2016 return PTR2UV(SvRV(sv));
2019 sv_force_normal_flags(sv, 0);
2021 if (SvREADONLY(sv) && !SvOK(sv)) {
2022 if (ckWARN(WARN_UNINITIALIZED))
2028 if (S_sv_2iuv_common(aTHX_ sv))
2032 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2033 PTR2UV(sv),SvUVX(sv)));
2034 return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2040 Return the num value of an SV, doing any necessary string or integer
2041 conversion, magic etc. Normally used via the C<SvNV(sv)> and C<SvNVx(sv)>
2048 Perl_sv_2nv(pTHX_ register SV *sv)
2053 if (SvGMAGICAL(sv)) {
2057 if (SvPOKp(sv) && SvLEN(sv)) {
2058 if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2059 !grok_number(SvPVX_const(sv), SvCUR(sv), NULL))
2061 return Atof(SvPVX_const(sv));
2065 return (NV)SvUVX(sv);
2067 return (NV)SvIVX(sv);
2072 assert(SvTYPE(sv) >= SVt_PVMG);
2073 /* This falls through to the report_uninit near the end of the
2075 } else if (SvTHINKFIRST(sv)) {
2079 SV *const tmpstr = AMG_CALLun(sv,numer);
2080 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2081 return SvNV(tmpstr);
2084 return PTR2NV(SvRV(sv));
2087 sv_force_normal_flags(sv, 0);
2089 if (SvREADONLY(sv) && !SvOK(sv)) {
2090 if (ckWARN(WARN_UNINITIALIZED))
2095 if (SvTYPE(sv) < SVt_NV) {
2096 /* The logic to use SVt_PVNV if necessary is in sv_upgrade. */
2097 sv_upgrade(sv, SVt_NV);
2098 #ifdef USE_LONG_DOUBLE
2100 STORE_NUMERIC_LOCAL_SET_STANDARD();
2101 PerlIO_printf(Perl_debug_log,
2102 "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2103 PTR2UV(sv), SvNVX(sv));
2104 RESTORE_NUMERIC_LOCAL();
2108 STORE_NUMERIC_LOCAL_SET_STANDARD();
2109 PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%"NVgf")\n",
2110 PTR2UV(sv), SvNVX(sv));
2111 RESTORE_NUMERIC_LOCAL();
2115 else if (SvTYPE(sv) < SVt_PVNV)
2116 sv_upgrade(sv, SVt_PVNV);
2121 SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2122 #ifdef NV_PRESERVES_UV
2125 /* Only set the public NV OK flag if this NV preserves the IV */
2126 /* Check it's not 0xFFFFFFFFFFFFFFFF */
2127 if (SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2128 : (SvIVX(sv) == I_V(SvNVX(sv))))
2134 else if (SvPOKp(sv) && SvLEN(sv)) {
2136 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2137 if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2139 #ifdef NV_PRESERVES_UV
2140 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2141 == IS_NUMBER_IN_UV) {
2142 /* It's definitely an integer */
2143 SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2145 SvNV_set(sv, Atof(SvPVX_const(sv)));
2148 SvNV_set(sv, Atof(SvPVX_const(sv)));
2149 /* Only set the public NV OK flag if this NV preserves the value in
2150 the PV at least as well as an IV/UV would.
2151 Not sure how to do this 100% reliably. */
2152 /* if that shift count is out of range then Configure's test is
2153 wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2155 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2156 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2157 SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2158 } else if (!(numtype & IS_NUMBER_IN_UV)) {
2159 /* Can't use strtol etc to convert this string, so don't try.
2160 sv_2iv and sv_2uv will use the NV to convert, not the PV. */
2163 /* value has been set. It may not be precise. */
2164 if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2165 /* 2s complement assumption for (UV)IV_MIN */
2166 SvNOK_on(sv); /* Integer is too negative. */
2171 if (numtype & IS_NUMBER_NEG) {
2172 SvIV_set(sv, -(IV)value);
2173 } else if (value <= (UV)IV_MAX) {
2174 SvIV_set(sv, (IV)value);
2176 SvUV_set(sv, value);
2180 if (numtype & IS_NUMBER_NOT_INT) {
2181 /* I believe that even if the original PV had decimals,
2182 they are lost beyond the limit of the FP precision.
2183 However, neither is canonical, so both only get p
2184 flags. NWC, 2000/11/25 */
2185 /* Both already have p flags, so do nothing */
2187 const NV nv = SvNVX(sv);
2188 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2189 if (SvIVX(sv) == I_V(nv)) {
2192 /* It had no "." so it must be integer. */
2196 /* between IV_MAX and NV(UV_MAX).
2197 Could be slightly > UV_MAX */
2199 if (numtype & IS_NUMBER_NOT_INT) {
2200 /* UV and NV both imprecise. */
2202 const UV nv_as_uv = U_V(nv);
2204 if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2213 #endif /* NV_PRESERVES_UV */
2216 if (!PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP) && ckWARN(WARN_UNINITIALIZED))
2218 assert (SvTYPE(sv) >= SVt_NV);
2219 /* Typically the caller expects that sv_any is not NULL now. */
2220 /* XXX Ilya implies that this is a bug in callers that assume this
2221 and ideally should be fixed. */
2224 #if defined(USE_LONG_DOUBLE)
2226 STORE_NUMERIC_LOCAL_SET_STANDARD();
2227 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2228 PTR2UV(sv), SvNVX(sv));
2229 RESTORE_NUMERIC_LOCAL();
2233 STORE_NUMERIC_LOCAL_SET_STANDARD();
2234 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%"NVgf")\n",
2235 PTR2UV(sv), SvNVX(sv));
2236 RESTORE_NUMERIC_LOCAL();
2242 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2243 * UV as a string towards the end of buf, and return pointers to start and
2246 * We assume that buf is at least TYPE_CHARS(UV) long.
2250 S_uiv_2buf(char *buf, IV iv, UV uv, int is_uv, char **peob)
2252 char *ptr = buf + TYPE_CHARS(UV);
2253 char * const ebuf = ptr;
2266 *--ptr = '0' + (char)(uv % 10);
2274 /* stringify_regexp(): private routine for use by sv_2pv_flags(): converts
2275 * a regexp to its stringified form.
2279 S_stringify_regexp(pTHX_ SV *sv, MAGIC *mg, STRLEN *lp) {
2281 const regexp * const re = (regexp *)mg->mg_obj;
2284 const char *fptr = "msix";
2289 bool need_newline = 0;
2290 U16 reganch = (U16)((re->reganch & PMf_COMPILETIME) >> 12);
2292 while((ch = *fptr++)) {
2294 reflags[left++] = ch;
2297 reflags[right--] = ch;
2302 reflags[left] = '-';
2306 mg->mg_len = re->prelen + 4 + left;
2308 * If /x was used, we have to worry about a regex ending with a
2309 * comment later being embedded within another regex. If so, we don't
2310 * want this regex's "commentization" to leak out to the right part of
2311 * the enclosing regex, we must cap it with a newline.
2313 * So, if /x was used, we scan backwards from the end of the regex. If
2314 * we find a '#' before we find a newline, we need to add a newline
2315 * ourself. If we find a '\n' first (or if we don't find '#' or '\n'),
2316 * we don't need to add anything. -jfriedl
2318 if (PMf_EXTENDED & re->reganch) {
2319 const char *endptr = re->precomp + re->prelen;
2320 while (endptr >= re->precomp) {
2321 const char c = *(endptr--);
2323 break; /* don't need another */
2325 /* we end while in a comment, so we need a newline */
2326 mg->mg_len++; /* save space for it */
2327 need_newline = 1; /* note to add it */
2333 Newx(mg->mg_ptr, mg->mg_len + 1 + left, char);
2334 mg->mg_ptr[0] = '(';
2335 mg->mg_ptr[1] = '?';
2336 Copy(reflags, mg->mg_ptr+2, left, char);
2337 *(mg->mg_ptr+left+2) = ':';
2338 Copy(re->precomp, mg->mg_ptr+3+left, re->prelen, char);
2340 mg->mg_ptr[mg->mg_len - 2] = '\n';
2341 mg->mg_ptr[mg->mg_len - 1] = ')';
2342 mg->mg_ptr[mg->mg_len] = 0;
2344 PL_reginterp_cnt += re->program[0].next_off;
2346 if (re->reganch & ROPT_UTF8)
2356 =for apidoc sv_2pv_flags
2358 Returns a pointer to the string value of an SV, and sets *lp to its length.
2359 If flags includes SV_GMAGIC, does an mg_get() first. Coerces sv to a string
2361 Normally invoked via the C<SvPV_flags> macro. C<sv_2pv()> and C<sv_2pv_nomg>
2362 usually end up here too.
2368 Perl_sv_2pv_flags(pTHX_ register SV *sv, STRLEN *lp, I32 flags)
2378 if (SvGMAGICAL(sv)) {
2379 if (flags & SV_GMAGIC)
2384 if (flags & SV_MUTABLE_RETURN)
2385 return SvPVX_mutable(sv);
2386 if (flags & SV_CONST_RETURN)
2387 return (char *)SvPVX_const(sv);
2390 if (SvIOKp(sv) || SvNOKp(sv)) {
2391 char tbuf[64]; /* Must fit sprintf/Gconvert of longest IV/NV */
2395 len = SvIsUV(sv) ? my_sprintf(tbuf,"%"UVuf, (UV)SvUVX(sv))
2396 : my_sprintf(tbuf,"%"IVdf, (IV)SvIVX(sv));
2398 Gconvert(SvNVX(sv), NV_DIG, 0, tbuf);
2401 if (SvROK(sv)) { /* XXX Skip this when sv_pvn_force calls */
2402 /* Sneaky stuff here */
2403 SV * const tsv = newSVpvn(tbuf, len);
2413 #ifdef FIXNEGATIVEZERO
2414 if (len == 2 && tbuf[0] == '-' && tbuf[1] == '0') {
2420 SvUPGRADE(sv, SVt_PV);
2423 s = SvGROW_mutable(sv, len + 1);
2426 return memcpy(s, tbuf, len + 1);
2432 assert(SvTYPE(sv) >= SVt_PVMG);
2433 /* This falls through to the report_uninit near the end of the
2435 } else if (SvTHINKFIRST(sv)) {
2439 SV *const tmpstr = AMG_CALLun(sv,string);
2440 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2442 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2446 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2447 if (flags & SV_CONST_RETURN) {
2448 pv = (char *) SvPVX_const(tmpstr);
2450 pv = (flags & SV_MUTABLE_RETURN)
2451 ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2454 *lp = SvCUR(tmpstr);
2456 pv = sv_2pv_flags(tmpstr, lp, flags);
2468 const SV *const referent = (SV*)SvRV(sv);
2471 tsv = sv_2mortal(newSVpvs("NULLREF"));
2472 } else if (SvTYPE(referent) == SVt_PVMG
2473 && ((SvFLAGS(referent) &
2474 (SVs_OBJECT|SVf_OK|SVs_GMG|SVs_SMG|SVs_RMG))
2475 == (SVs_OBJECT|SVs_SMG))
2476 && (mg = mg_find(referent, PERL_MAGIC_qr))) {
2477 return stringify_regexp(sv, mg, lp);
2479 const char *const typestr = sv_reftype(referent, 0);
2481 tsv = sv_newmortal();
2482 if (SvOBJECT(referent)) {
2483 const char *const name = HvNAME_get(SvSTASH(referent));
2484 Perl_sv_setpvf(aTHX_ tsv, "%s=%s(0x%"UVxf")",
2485 name ? name : "__ANON__" , typestr,
2489 Perl_sv_setpvf(aTHX_ tsv, "%s(0x%"UVxf")", typestr,
2497 if (SvREADONLY(sv) && !SvOK(sv)) {
2498 if (ckWARN(WARN_UNINITIALIZED))
2505 if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
2506 /* I'm assuming that if both IV and NV are equally valid then
2507 converting the IV is going to be more efficient */
2508 const U32 isIOK = SvIOK(sv);
2509 const U32 isUIOK = SvIsUV(sv);
2510 char buf[TYPE_CHARS(UV)];
2513 if (SvTYPE(sv) < SVt_PVIV)
2514 sv_upgrade(sv, SVt_PVIV);
2515 ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
2516 /* inlined from sv_setpvn */
2517 SvGROW_mutable(sv, (STRLEN)(ebuf - ptr + 1));
2518 Move(ptr,SvPVX_mutable(sv),ebuf - ptr,char);
2519 SvCUR_set(sv, ebuf - ptr);
2529 else if (SvNOKp(sv)) {
2530 const int olderrno = errno;
2531 if (SvTYPE(sv) < SVt_PVNV)
2532 sv_upgrade(sv, SVt_PVNV);
2533 /* The +20 is pure guesswork. Configure test needed. --jhi */
2534 s = SvGROW_mutable(sv, NV_DIG + 20);
2535 /* some Xenix systems wipe out errno here */
2537 if (SvNVX(sv) == 0.0)
2538 (void)strcpy(s,"0");
2542 Gconvert(SvNVX(sv), NV_DIG, 0, s);
2545 #ifdef FIXNEGATIVEZERO
2546 if (*s == '-' && s[1] == '0' && !s[2])
2556 if (!PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP) && ckWARN(WARN_UNINITIALIZED))
2560 if (SvTYPE(sv) < SVt_PV)
2561 /* Typically the caller expects that sv_any is not NULL now. */
2562 sv_upgrade(sv, SVt_PV);
2566 const STRLEN len = s - SvPVX_const(sv);
2572 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
2573 PTR2UV(sv),SvPVX_const(sv)));
2574 if (flags & SV_CONST_RETURN)
2575 return (char *)SvPVX_const(sv);
2576 if (flags & SV_MUTABLE_RETURN)
2577 return SvPVX_mutable(sv);
2582 =for apidoc sv_copypv
2584 Copies a stringified representation of the source SV into the
2585 destination SV. Automatically performs any necessary mg_get and
2586 coercion of numeric values into strings. Guaranteed to preserve
2587 UTF-8 flag even from overloaded objects. Similar in nature to
2588 sv_2pv[_flags] but operates directly on an SV instead of just the
2589 string. Mostly uses sv_2pv_flags to do its work, except when that
2590 would lose the UTF-8'ness of the PV.
2596 Perl_sv_copypv(pTHX_ SV *dsv, register SV *ssv)
2599 const char * const s = SvPV_const(ssv,len);
2600 sv_setpvn(dsv,s,len);
2608 =for apidoc sv_2pvbyte
2610 Return a pointer to the byte-encoded representation of the SV, and set *lp
2611 to its length. May cause the SV to be downgraded from UTF-8 as a
2614 Usually accessed via the C<SvPVbyte> macro.
2620 Perl_sv_2pvbyte(pTHX_ register SV *sv, STRLEN *lp)
2622 sv_utf8_downgrade(sv,0);
2623 return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
2627 =for apidoc sv_2pvutf8
2629 Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
2630 to its length. May cause the SV to be upgraded to UTF-8 as a side-effect.
2632 Usually accessed via the C<SvPVutf8> macro.
2638 Perl_sv_2pvutf8(pTHX_ register SV *sv, STRLEN *lp)
2640 sv_utf8_upgrade(sv);
2641 return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
2646 =for apidoc sv_2bool
2648 This function is only called on magical items, and is only used by
2649 sv_true() or its macro equivalent.
2655 Perl_sv_2bool(pTHX_ register SV *sv)
2664 SV * const tmpsv = AMG_CALLun(sv,bool_);
2665 if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2666 return (bool)SvTRUE(tmpsv);
2668 return SvRV(sv) != 0;
2671 register XPV* const Xpvtmp = (XPV*)SvANY(sv);
2673 (*sv->sv_u.svu_pv > '0' ||
2674 Xpvtmp->xpv_cur > 1 ||
2675 (Xpvtmp->xpv_cur && *sv->sv_u.svu_pv != '0')))
2682 return SvIVX(sv) != 0;
2685 return SvNVX(sv) != 0.0;
2693 =for apidoc sv_utf8_upgrade
2695 Converts the PV of an SV to its UTF-8-encoded form.
2696 Forces the SV to string form if it is not already.
2697 Always sets the SvUTF8 flag to avoid future validity checks even
2698 if all the bytes have hibit clear.
2700 This is not as a general purpose byte encoding to Unicode interface:
2701 use the Encode extension for that.
2703 =for apidoc sv_utf8_upgrade_flags
2705 Converts the PV of an SV to its UTF-8-encoded form.
2706 Forces the SV to string form if it is not already.
2707 Always sets the SvUTF8 flag to avoid future validity checks even
2708 if all the bytes have hibit clear. If C<flags> has C<SV_GMAGIC> bit set,
2709 will C<mg_get> on C<sv> if appropriate, else not. C<sv_utf8_upgrade> and
2710 C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
2712 This is not as a general purpose byte encoding to Unicode interface:
2713 use the Encode extension for that.
2719 Perl_sv_utf8_upgrade_flags(pTHX_ register SV *sv, I32 flags)
2722 if (sv == &PL_sv_undef)
2726 if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
2727 (void) sv_2pv_flags(sv,&len, flags);
2731 (void) SvPV_force(sv,len);
2740 sv_force_normal_flags(sv, 0);
2743 if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING))
2744 sv_recode_to_utf8(sv, PL_encoding);
2745 else { /* Assume Latin-1/EBCDIC */
2746 /* This function could be much more efficient if we
2747 * had a FLAG in SVs to signal if there are any hibit
2748 * chars in the PV. Given that there isn't such a flag
2749 * make the loop as fast as possible. */
2750 const U8 * const s = (U8 *) SvPVX_const(sv);
2751 const U8 * const e = (U8 *) SvEND(sv);
2756 /* Check for hi bit */
2757 if (!NATIVE_IS_INVARIANT(ch)) {
2758 STRLEN len = SvCUR(sv) + 1; /* Plus the \0 */
2759 U8 * const recoded = bytes_to_utf8((U8*)s, &len);
2761 SvPV_free(sv); /* No longer using what was there before. */
2762 SvPV_set(sv, (char*)recoded);
2763 SvCUR_set(sv, len - 1);
2764 SvLEN_set(sv, len); /* No longer know the real size. */
2768 /* Mark as UTF-8 even if no hibit - saves scanning loop */
2775 =for apidoc sv_utf8_downgrade
2777 Attempts to convert the PV of an SV from characters to bytes.
2778 If the PV contains a character beyond byte, this conversion will fail;
2779 in this case, either returns false or, if C<fail_ok> is not
2782 This is not as a general purpose Unicode to byte encoding interface:
2783 use the Encode extension for that.
2789 Perl_sv_utf8_downgrade(pTHX_ register SV* sv, bool fail_ok)
2792 if (SvPOKp(sv) && SvUTF8(sv)) {
2798 sv_force_normal_flags(sv, 0);
2800 s = (U8 *) SvPV(sv, len);
2801 if (!utf8_to_bytes(s, &len)) {
2806 Perl_croak(aTHX_ "Wide character in %s",
2809 Perl_croak(aTHX_ "Wide character");
2820 =for apidoc sv_utf8_encode
2822 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
2823 flag off so that it looks like octets again.
2829 Perl_sv_utf8_encode(pTHX_ register SV *sv)
2831 (void) sv_utf8_upgrade(sv);
2833 sv_force_normal_flags(sv, 0);
2835 if (SvREADONLY(sv)) {
2836 Perl_croak(aTHX_ PL_no_modify);
2842 =for apidoc sv_utf8_decode
2844 If the PV of the SV is an octet sequence in UTF-8
2845 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
2846 so that it looks like a character. If the PV contains only single-byte
2847 characters, the C<SvUTF8> flag stays being off.
2848 Scans PV for validity and returns false if the PV is invalid UTF-8.
2854 Perl_sv_utf8_decode(pTHX_ register SV *sv)
2860 /* The octets may have got themselves encoded - get them back as
2863 if (!sv_utf8_downgrade(sv, TRUE))
2866 /* it is actually just a matter of turning the utf8 flag on, but
2867 * we want to make sure everything inside is valid utf8 first.
2869 c = (const U8 *) SvPVX_const(sv);
2870 if (!is_utf8_string(c, SvCUR(sv)+1))
2872 e = (const U8 *) SvEND(sv);
2875 if (!UTF8_IS_INVARIANT(ch)) {
2885 =for apidoc sv_setsv
2887 Copies the contents of the source SV C<ssv> into the destination SV
2888 C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
2889 function if the source SV needs to be reused. Does not handle 'set' magic.
2890 Loosely speaking, it performs a copy-by-value, obliterating any previous
2891 content of the destination.
2893 You probably want to use one of the assortment of wrappers, such as
2894 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
2895 C<SvSetMagicSV_nosteal>.
2897 =for apidoc sv_setsv_flags
2899 Copies the contents of the source SV C<ssv> into the destination SV
2900 C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
2901 function if the source SV needs to be reused. Does not handle 'set' magic.
2902 Loosely speaking, it performs a copy-by-value, obliterating any previous
2903 content of the destination.
2904 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
2905 C<ssv> if appropriate, else not. If the C<flags> parameter has the
2906 C<NOSTEAL> bit set then the buffers of temps will not be stolen. <sv_setsv>
2907 and C<sv_setsv_nomg> are implemented in terms of this function.
2909 You probably want to use one of the assortment of wrappers, such as
2910 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
2911 C<SvSetMagicSV_nosteal>.
2913 This is the primary function for copying scalars, and most other
2914 copy-ish functions and macros use this underneath.
2920 S_glob_assign(pTHX_ SV *dstr, SV *sstr, const int dtype)
2922 if (dtype != SVt_PVGV) {
2923 const char * const name = GvNAME(sstr);
2924 const STRLEN len = GvNAMELEN(sstr);
2925 /* don't upgrade SVt_PVLV: it can hold a glob */
2926 if (dtype != SVt_PVLV)
2927 sv_upgrade(dstr, SVt_PVGV);
2928 sv_magic(dstr, dstr, PERL_MAGIC_glob, NULL, 0);
2929 GvSTASH(dstr) = GvSTASH(sstr);
2931 Perl_sv_add_backref(aTHX_ (SV*)GvSTASH(dstr), dstr);
2932 GvNAME(dstr) = savepvn(name, len);
2933 GvNAMELEN(dstr) = len;
2934 SvFAKE_on(dstr); /* can coerce to non-glob */
2937 #ifdef GV_UNIQUE_CHECK
2938 if (GvUNIQUE((GV*)dstr)) {
2939 Perl_croak(aTHX_ PL_no_modify);
2943 (void)SvOK_off(dstr);
2944 GvINTRO_off(dstr); /* one-shot flag */
2946 GvGP(dstr) = gp_ref(GvGP(sstr));
2947 if (SvTAINTED(sstr))
2949 if (GvIMPORTED(dstr) != GVf_IMPORTED
2950 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
2952 GvIMPORTED_on(dstr);
2959 S_pvgv_assign(pTHX_ SV *dstr, SV *sstr) {
2960 SV * const sref = SvREFCNT_inc(SvRV(sstr));
2962 const int intro = GvINTRO(dstr);
2964 #ifdef GV_UNIQUE_CHECK
2965 if (GvUNIQUE((GV*)dstr)) {
2966 Perl_croak(aTHX_ PL_no_modify);
2971 GvINTRO_off(dstr); /* one-shot flag */
2972 GvLINE(dstr) = CopLINE(PL_curcop);
2973 GvEGV(dstr) = (GV*)dstr;
2976 switch (SvTYPE(sref)) {
2979 SAVEGENERICSV(GvAV(dstr));
2981 dref = (SV*)GvAV(dstr);
2982 GvAV(dstr) = (AV*)sref;
2983 if (!GvIMPORTED_AV(dstr)
2984 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
2986 GvIMPORTED_AV_on(dstr);
2991 SAVEGENERICSV(GvHV(dstr));
2993 dref = (SV*)GvHV(dstr);
2994 GvHV(dstr) = (HV*)sref;
2995 if (!GvIMPORTED_HV(dstr)
2996 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
2998 GvIMPORTED_HV_on(dstr);
3003 if (GvCVGEN(dstr) && GvCV(dstr) != (CV*)sref) {
3004 SvREFCNT_dec(GvCV(dstr));
3006 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3007 PL_sub_generation++;
3009 SAVEGENERICSV(GvCV(dstr));
3012 dref = (SV*)GvCV(dstr);
3013 if (GvCV(dstr) != (CV*)sref) {
3014 CV* const cv = GvCV(dstr);
3016 if (!GvCVGEN((GV*)dstr) &&
3017 (CvROOT(cv) || CvXSUB(cv)))
3019 /* Redefining a sub - warning is mandatory if
3020 it was a const and its value changed. */
3021 if (CvCONST(cv) && CvCONST((CV*)sref)
3022 && cv_const_sv(cv) == cv_const_sv((CV*)sref)) {
3023 /* They are 2 constant subroutines generated from
3024 the same constant. This probably means that
3025 they are really the "same" proxy subroutine
3026 instantiated in 2 places. Most likely this is
3027 when a constant is exported twice. Don't warn.
3030 else if (ckWARN(WARN_REDEFINE)
3032 && (!CvCONST((CV*)sref)
3033 || sv_cmp(cv_const_sv(cv),
3034 cv_const_sv((CV*)sref))))) {
3035 Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
3037 ? "Constant subroutine %s::%s redefined"
3038 : "Subroutine %s::%s redefined",
3039 HvNAME_get(GvSTASH((GV*)dstr)),
3040 GvENAME((GV*)dstr));
3044 cv_ckproto(cv, (GV*)dstr,
3045 SvPOK(sref) ? SvPVX_const(sref) : NULL);
3047 GvCV(dstr) = (CV*)sref;
3048 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3049 GvASSUMECV_on(dstr);
3050 PL_sub_generation++;
3052 if (!GvIMPORTED_CV(dstr) && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
3053 GvIMPORTED_CV_on(dstr);
3058 SAVEGENERICSV(GvIOp(dstr));
3060 dref = (SV*)GvIOp(dstr);
3061 GvIOp(dstr) = (IO*)sref;
3065 SAVEGENERICSV(GvFORM(dstr));
3067 dref = (SV*)GvFORM(dstr);
3068 GvFORM(dstr) = (CV*)sref;
3072 SAVEGENERICSV(GvSV(dstr));
3074 dref = (SV*)GvSV(dstr);
3076 if (!GvIMPORTED_SV(dstr) && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
3077 GvIMPORTED_SV_on(dstr);
3083 if (SvTAINTED(sstr))
3089 Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV *sstr, I32 flags)
3092 register U32 sflags;
3098 SV_CHECK_THINKFIRST_COW_DROP(dstr);
3100 sstr = &PL_sv_undef;
3101 stype = SvTYPE(sstr);
3102 dtype = SvTYPE(dstr);
3107 /* need to nuke the magic */
3109 SvRMAGICAL_off(dstr);
3112 /* There's a lot of redundancy below but we're going for speed here */
3117 if (dtype != SVt_PVGV) {
3118 (void)SvOK_off(dstr);
3126 sv_upgrade(dstr, SVt_IV);
3129 sv_upgrade(dstr, SVt_PVNV);
3133 sv_upgrade(dstr, SVt_PVIV);
3136 (void)SvIOK_only(dstr);
3137 SvIV_set(dstr, SvIVX(sstr));
3140 /* SvTAINTED can only be true if the SV has taint magic, which in
3141 turn means that the SV type is PVMG (or greater). This is the
3142 case statement for SVt_IV, so this cannot be true (whatever gcov
3144 assert(!SvTAINTED(sstr));
3154 sv_upgrade(dstr, SVt_NV);
3159 sv_upgrade(dstr, SVt_PVNV);
3162 SvNV_set(dstr, SvNVX(sstr));
3163 (void)SvNOK_only(dstr);
3164 /* SvTAINTED can only be true if the SV has taint magic, which in
3165 turn means that the SV type is PVMG (or greater). This is the
3166 case statement for SVt_NV, so this cannot be true (whatever gcov
3168 assert(!SvTAINTED(sstr));
3175 sv_upgrade(dstr, SVt_RV);
3176 else if (dtype == SVt_PVGV &&
3177 SvROK(sstr) && SvTYPE(SvRV(sstr)) == SVt_PVGV) {
3180 if (GvIMPORTED(dstr) != GVf_IMPORTED
3181 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3183 GvIMPORTED_on(dstr);
3188 S_glob_assign(aTHX_ dstr, sstr, dtype);
3193 #ifdef PERL_OLD_COPY_ON_WRITE
3194 if ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS) {
3195 if (dtype < SVt_PVIV)
3196 sv_upgrade(dstr, SVt_PVIV);
3203 sv_upgrade(dstr, SVt_PV);
3206 if (dtype < SVt_PVIV)
3207 sv_upgrade(dstr, SVt_PVIV);
3210 if (dtype < SVt_PVNV)
3211 sv_upgrade(dstr, SVt_PVNV);
3218 const char * const type = sv_reftype(sstr,0);
3220 Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_NAME(PL_op));
3222 Perl_croak(aTHX_ "Bizarre copy of %s", type);
3227 if (dtype <= SVt_PVGV) {
3228 S_glob_assign(aTHX_ dstr, sstr, dtype);
3234 if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
3236 if ((int)SvTYPE(sstr) != stype) {
3237 stype = SvTYPE(sstr);
3238 if (stype == SVt_PVGV && dtype <= SVt_PVGV) {
3239 S_glob_assign(aTHX_ dstr, sstr, dtype);
3244 if (stype == SVt_PVLV)
3245 SvUPGRADE(dstr, SVt_PVNV);
3247 SvUPGRADE(dstr, (U32)stype);
3250 sflags = SvFLAGS(sstr);
3252 if (sflags & SVf_ROK) {
3253 if (dtype >= SVt_PV) {
3254 if (dtype == SVt_PVGV) {
3255 S_pvgv_assign(aTHX_ dstr, sstr);
3258 if (SvPVX_const(dstr)) {
3264 (void)SvOK_off(dstr);
3265 SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
3266 SvFLAGS(dstr) |= sflags & (SVf_ROK|SVf_AMAGIC);
3267 assert(!(sflags & SVp_NOK));
3268 assert(!(sflags & SVp_IOK));
3269 assert(!(sflags & SVf_NOK));
3270 assert(!(sflags & SVf_IOK));
3272 else if (sflags & SVp_POK) {
3276 * Check to see if we can just swipe the string. If so, it's a
3277 * possible small lose on short strings, but a big win on long ones.
3278 * It might even be a win on short strings if SvPVX_const(dstr)
3279 * has to be allocated and SvPVX_const(sstr) has to be freed.
3282 /* Whichever path we take through the next code, we want this true,
3283 and doing it now facilitates the COW check. */
3284 (void)SvPOK_only(dstr);
3287 /* We're not already COW */
3288 ((sflags & (SVf_FAKE | SVf_READONLY)) != (SVf_FAKE | SVf_READONLY)
3289 #ifndef PERL_OLD_COPY_ON_WRITE
3290 /* or we are, but dstr isn't a suitable target. */
3291 || (SvFLAGS(dstr) & CAN_COW_MASK) != CAN_COW_FLAGS
3296 (sflags & SVs_TEMP) && /* slated for free anyway? */
3297 !(sflags & SVf_OOK) && /* and not involved in OOK hack? */
3298 (!(flags & SV_NOSTEAL)) &&
3299 /* and we're allowed to steal temps */
3300 SvREFCNT(sstr) == 1 && /* and no other references to it? */
3301 SvLEN(sstr) && /* and really is a string */
3302 /* and won't be needed again, potentially */
3303 !(PL_op && PL_op->op_type == OP_AASSIGN))
3304 #ifdef PERL_OLD_COPY_ON_WRITE
3305 && !((sflags & CAN_COW_MASK) == CAN_COW_FLAGS
3306 && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
3307 && SvTYPE(sstr) >= SVt_PVIV)
3310 /* Failed the swipe test, and it's not a shared hash key either.
3311 Have to copy the string. */
3312 STRLEN len = SvCUR(sstr);
3313 SvGROW(dstr, len + 1); /* inlined from sv_setpvn */
3314 Move(SvPVX_const(sstr),SvPVX(dstr),len,char);
3315 SvCUR_set(dstr, len);
3316 *SvEND(dstr) = '\0';
3318 /* If PERL_OLD_COPY_ON_WRITE is not defined, then isSwipe will always
3320 /* Either it's a shared hash key, or it's suitable for
3321 copy-on-write or we can swipe the string. */
3323 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
3327 #ifdef PERL_OLD_COPY_ON_WRITE
3329 /* I believe I should acquire a global SV mutex if
3330 it's a COW sv (not a shared hash key) to stop
3331 it going un copy-on-write.
3332 If the source SV has gone un copy on write between up there
3333 and down here, then (assert() that) it is of the correct
3334 form to make it copy on write again */
3335 if ((sflags & (SVf_FAKE | SVf_READONLY))
3336 != (SVf_FAKE | SVf_READONLY)) {
3337 SvREADONLY_on(sstr);
3339 /* Make the source SV into a loop of 1.
3340 (about to become 2) */
3341 SV_COW_NEXT_SV_SET(sstr, sstr);
3345 /* Initial code is common. */
3346 if (SvPVX_const(dstr)) { /* we know that dtype >= SVt_PV */
3351 /* making another shared SV. */
3352 STRLEN cur = SvCUR(sstr);
3353 STRLEN len = SvLEN(sstr);
3354 #ifdef PERL_OLD_COPY_ON_WRITE
3356 assert (SvTYPE(dstr) >= SVt_PVIV);
3357 /* SvIsCOW_normal */
3358 /* splice us in between source and next-after-source. */
3359 SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
3360 SV_COW_NEXT_SV_SET(sstr, dstr);
3361 SvPV_set(dstr, SvPVX_mutable(sstr));
3365 /* SvIsCOW_shared_hash */
3366 DEBUG_C(PerlIO_printf(Perl_debug_log,
3367 "Copy on write: Sharing hash\n"));
3369 assert (SvTYPE(dstr) >= SVt_PV);
3371 HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
3373 SvLEN_set(dstr, len);
3374 SvCUR_set(dstr, cur);
3375 SvREADONLY_on(dstr);
3377 /* Relesase a global SV mutex. */
3380 { /* Passes the swipe test. */
3381 SvPV_set(dstr, SvPVX_mutable(sstr));
3382 SvLEN_set(dstr, SvLEN(sstr));
3383 SvCUR_set(dstr, SvCUR(sstr));
3386 (void)SvOK_off(sstr); /* NOTE: nukes most SvFLAGS on sstr */
3387 SvPV_set(sstr, NULL);
3393 if (sflags & SVp_NOK) {
3394 SvNV_set(dstr, SvNVX(sstr));
3396 if (sflags & SVp_IOK) {
3397 SvRELEASE_IVX(dstr);
3398 SvIV_set(dstr, SvIVX(sstr));
3399 /* Must do this otherwise some other overloaded use of 0x80000000
3400 gets confused. I guess SVpbm_VALID */
3401 if (sflags & SVf_IVisUV)
3404 SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
3406 const MAGIC * const smg = SvVOK(sstr);
3408 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
3409 smg->mg_ptr, smg->mg_len);
3410 SvRMAGICAL_on(dstr);
3414 else if (sflags & (SVp_IOK|SVp_NOK)) {
3415 (void)SvOK_off(dstr);
3416 SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
3417 if (sflags & SVp_IOK) {
3418 /* XXXX Do we want to set IsUV for IV(ROK)? Be extra safe... */
3419 SvIV_set(dstr, SvIVX(sstr));
3421 if (sflags & SVp_NOK) {
3422 SvFLAGS(dstr) |= sflags & (SVf_NOK|SVp_NOK);
3423 SvNV_set(dstr, SvNVX(sstr));
3427 if (dtype == SVt_PVGV) {
3428 if (ckWARN(WARN_MISC))
3429 Perl_warner(aTHX_ packWARN(WARN_MISC), "Undefined value assigned to typeglob");
3432 (void)SvOK_off(dstr);
3434 if (SvTAINTED(sstr))
3439 =for apidoc sv_setsv_mg
3441 Like C<sv_setsv>, but also handles 'set' magic.
3447 Perl_sv_setsv_mg(pTHX_ SV *dstr, register SV *sstr)
3449 sv_setsv(dstr,sstr);
3453 #ifdef PERL_OLD_COPY_ON_WRITE
3455 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
3457 STRLEN cur = SvCUR(sstr);
3458 STRLEN len = SvLEN(sstr);
3459 register char *new_pv;
3462 PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
3470 if (SvTHINKFIRST(dstr))
3471 sv_force_normal_flags(dstr, SV_COW_DROP_PV);
3472 else if (SvPVX_const(dstr))
3473 Safefree(SvPVX_const(dstr));
3477 SvUPGRADE(dstr, SVt_PVIV);
3479 assert (SvPOK(sstr));
3480 assert (SvPOKp(sstr));
3481 assert (!SvIOK(sstr));
3482 assert (!SvIOKp(sstr));
3483 assert (!SvNOK(sstr));
3484 assert (!SvNOKp(sstr));
3486 if (SvIsCOW(sstr)) {
3488 if (SvLEN(sstr) == 0) {
3489 /* source is a COW shared hash key. */
3490 DEBUG_C(PerlIO_printf(Perl_debug_log,
3491 "Fast copy on write: Sharing hash\n"));
3492 new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
3495 SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
3497 assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
3498 SvUPGRADE(sstr, SVt_PVIV);
3499 SvREADONLY_on(sstr);
3501 DEBUG_C(PerlIO_printf(Perl_debug_log,
3502 "Fast copy on write: Converting sstr to COW\n"));
3503 SV_COW_NEXT_SV_SET(dstr, sstr);
3505 SV_COW_NEXT_SV_SET(sstr, dstr);
3506 new_pv = SvPVX_mutable(sstr);
3509 SvPV_set(dstr, new_pv);
3510 SvFLAGS(dstr) = (SVt_PVIV|SVf_POK|SVp_POK|SVf_FAKE|SVf_READONLY);
3513 SvLEN_set(dstr, len);
3514 SvCUR_set(dstr, cur);
3523 =for apidoc sv_setpvn
3525 Copies a string into an SV. The C<len> parameter indicates the number of
3526 bytes to be copied. If the C<ptr> argument is NULL the SV will become
3527 undefined. Does not handle 'set' magic. See C<sv_setpvn_mg>.
3533 Perl_sv_setpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3536 register char *dptr;
3538 SV_CHECK_THINKFIRST_COW_DROP(sv);
3544 /* len is STRLEN which is unsigned, need to copy to signed */
3547 Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen");
3549 SvUPGRADE(sv, SVt_PV);
3551 dptr = SvGROW(sv, len + 1);
3552 Move(ptr,dptr,len,char);
3555 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3560 =for apidoc sv_setpvn_mg
3562 Like C<sv_setpvn>, but also handles 'set' magic.
3568 Perl_sv_setpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3570 sv_setpvn(sv,ptr,len);
3575 =for apidoc sv_setpv
3577 Copies a string into an SV. The string must be null-terminated. Does not
3578 handle 'set' magic. See C<sv_setpv_mg>.
3584 Perl_sv_setpv(pTHX_ register SV *sv, register const char *ptr)
3587 register STRLEN len;
3589 SV_CHECK_THINKFIRST_COW_DROP(sv);
3595 SvUPGRADE(sv, SVt_PV);
3597 SvGROW(sv, len + 1);
3598 Move(ptr,SvPVX(sv),len+1,char);
3600 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3605 =for apidoc sv_setpv_mg
3607 Like C<sv_setpv>, but also handles 'set' magic.
3613 Perl_sv_setpv_mg(pTHX_ register SV *sv, register const char *ptr)
3620 =for apidoc sv_usepvn
3622 Tells an SV to use C<ptr> to find its string value. Normally the string is
3623 stored inside the SV but sv_usepvn allows the SV to use an outside string.
3624 The C<ptr> should point to memory that was allocated by C<malloc>. The
3625 string length, C<len>, must be supplied. This function will realloc the
3626 memory pointed to by C<ptr>, so that pointer should not be freed or used by
3627 the programmer after giving it to sv_usepvn. Does not handle 'set' magic.
3628 See C<sv_usepvn_mg>.
3634 Perl_sv_usepvn(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
3638 SV_CHECK_THINKFIRST_COW_DROP(sv);
3639 SvUPGRADE(sv, SVt_PV);
3644 if (SvPVX_const(sv))
3647 allocate = PERL_STRLEN_ROUNDUP(len + 1);
3648 ptr = saferealloc (ptr, allocate);
3651 SvLEN_set(sv, allocate);
3653 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3658 =for apidoc sv_usepvn_mg
3660 Like C<sv_usepvn>, but also handles 'set' magic.
3666 Perl_sv_usepvn_mg(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
3668 sv_usepvn(sv,ptr,len);
3672 #ifdef PERL_OLD_COPY_ON_WRITE
3673 /* Need to do this *after* making the SV normal, as we need the buffer
3674 pointer to remain valid until after we've copied it. If we let go too early,
3675 another thread could invalidate it by unsharing last of the same hash key
3676 (which it can do by means other than releasing copy-on-write Svs)
3677 or by changing the other copy-on-write SVs in the loop. */
3679 S_sv_release_COW(pTHX_ register SV *sv, const char *pvx, STRLEN len, SV *after)
3681 if (len) { /* this SV was SvIsCOW_normal(sv) */
3682 /* we need to find the SV pointing to us. */
3683 SV *current = SV_COW_NEXT_SV(after);
3685 if (current == sv) {
3686 /* The SV we point to points back to us (there were only two of us
3688 Hence other SV is no longer copy on write either. */
3690 SvREADONLY_off(after);
3692 /* We need to follow the pointers around the loop. */
3694 while ((next = SV_COW_NEXT_SV(current)) != sv) {
3697 /* don't loop forever if the structure is bust, and we have
3698 a pointer into a closed loop. */
3699 assert (current != after);
3700 assert (SvPVX_const(current) == pvx);
3702 /* Make the SV before us point to the SV after us. */
3703 SV_COW_NEXT_SV_SET(current, after);
3706 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
3711 Perl_sv_release_IVX(pTHX_ register SV *sv)
3714 sv_force_normal_flags(sv, 0);
3720 =for apidoc sv_force_normal_flags
3722 Undo various types of fakery on an SV: if the PV is a shared string, make
3723 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
3724 an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
3725 we do the copy, and is also used locally. If C<SV_COW_DROP_PV> is set
3726 then a copy-on-write scalar drops its PV buffer (if any) and becomes
3727 SvPOK_off rather than making a copy. (Used where this scalar is about to be
3728 set to some other value.) In addition, the C<flags> parameter gets passed to
3729 C<sv_unref_flags()> when unrefing. C<sv_force_normal> calls this function
3730 with flags set to 0.
3736 Perl_sv_force_normal_flags(pTHX_ register SV *sv, U32 flags)
3739 #ifdef PERL_OLD_COPY_ON_WRITE
3740 if (SvREADONLY(sv)) {
3741 /* At this point I believe I should acquire a global SV mutex. */
3743 const char * const pvx = SvPVX_const(sv);
3744 const STRLEN len = SvLEN(sv);
3745 const STRLEN cur = SvCUR(sv);
3746 SV * const next = SV_COW_NEXT_SV(sv); /* next COW sv in the loop. */
3748 PerlIO_printf(Perl_debug_log,
3749 "Copy on write: Force normal %ld\n",
3755 /* This SV doesn't own the buffer, so need to Newx() a new one: */
3758 if (flags & SV_COW_DROP_PV) {
3759 /* OK, so we don't need to copy our buffer. */
3762 SvGROW(sv, cur + 1);
3763 Move(pvx,SvPVX(sv),cur,char);
3767 sv_release_COW(sv, pvx, len, next);
3772 else if (IN_PERL_RUNTIME)
3773 Perl_croak(aTHX_ PL_no_modify);
3774 /* At this point I believe that I can drop the global SV mutex. */
3777 if (SvREADONLY(sv)) {
3779 const char * const pvx = SvPVX_const(sv);
3780 const STRLEN len = SvCUR(sv);
3785 SvGROW(sv, len + 1);
3786 Move(pvx,SvPVX(sv),len,char);
3788 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
3790 else if (IN_PERL_RUNTIME)
3791 Perl_croak(aTHX_ PL_no_modify);
3795 sv_unref_flags(sv, flags);
3796 else if (SvFAKE(sv) && SvTYPE(sv) == SVt_PVGV)
3803 Efficient removal of characters from the beginning of the string buffer.
3804 SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
3805 the string buffer. The C<ptr> becomes the first character of the adjusted
3806 string. Uses the "OOK hack".
3807 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
3808 refer to the same chunk of data.
3814 Perl_sv_chop(pTHX_ register SV *sv, register const char *ptr)
3816 register STRLEN delta;
3817 if (!ptr || !SvPOKp(sv))
3819 delta = ptr - SvPVX_const(sv);
3820 SV_CHECK_THINKFIRST(sv);
3821 if (SvTYPE(sv) < SVt_PVIV)
3822 sv_upgrade(sv,SVt_PVIV);
3825 if (!SvLEN(sv)) { /* make copy of shared string */
3826 const char *pvx = SvPVX_const(sv);
3827 const STRLEN len = SvCUR(sv);
3828 SvGROW(sv, len + 1);
3829 Move(pvx,SvPVX(sv),len,char);
3833 /* Same SvOOK_on but SvOOK_on does a SvIOK_off
3834 and we do that anyway inside the SvNIOK_off
3836 SvFLAGS(sv) |= SVf_OOK;
3839 SvLEN_set(sv, SvLEN(sv) - delta);
3840 SvCUR_set(sv, SvCUR(sv) - delta);
3841 SvPV_set(sv, SvPVX(sv) + delta);
3842 SvIV_set(sv, SvIVX(sv) + delta);
3846 =for apidoc sv_catpvn
3848 Concatenates the string onto the end of the string which is in the SV. The
3849 C<len> indicates number of bytes to copy. If the SV has the UTF-8
3850 status set, then the bytes appended should be valid UTF-8.
3851 Handles 'get' magic, but not 'set' magic. See C<sv_catpvn_mg>.
3853 =for apidoc sv_catpvn_flags
3855 Concatenates the string onto the end of the string which is in the SV. The
3856 C<len> indicates number of bytes to copy. If the SV has the UTF-8
3857 status set, then the bytes appended should be valid UTF-8.
3858 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<dsv> if
3859 appropriate, else not. C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
3860 in terms of this function.
3866 Perl_sv_catpvn_flags(pTHX_ register SV *dsv, register const char *sstr, register STRLEN slen, I32 flags)
3870 const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
3872 SvGROW(dsv, dlen + slen + 1);
3874 sstr = SvPVX_const(dsv);
3875 Move(sstr, SvPVX(dsv) + dlen, slen, char);
3876 SvCUR_set(dsv, SvCUR(dsv) + slen);
3878 (void)SvPOK_only_UTF8(dsv); /* validate pointer */
3880 if (flags & SV_SMAGIC)
3885 =for apidoc sv_catsv
3887 Concatenates the string from SV C<ssv> onto the end of the string in
3888 SV C<dsv>. Modifies C<dsv> but not C<ssv>. Handles 'get' magic, but
3889 not 'set' magic. See C<sv_catsv_mg>.
3891 =for apidoc sv_catsv_flags
3893 Concatenates the string from SV C<ssv> onto the end of the string in
3894 SV C<dsv>. Modifies C<dsv> but not C<ssv>. If C<flags> has C<SV_GMAGIC>
3895 bit set, will C<mg_get> on the SVs if appropriate, else not. C<sv_catsv>
3896 and C<sv_catsv_nomg> are implemented in terms of this function.
3901 Perl_sv_catsv_flags(pTHX_ SV *dsv, register SV *ssv, I32 flags)
3906 const char *spv = SvPV_const(ssv, slen);
3908 /* sutf8 and dutf8 were type bool, but under USE_ITHREADS,
3909 gcc version 2.95.2 20000220 (Debian GNU/Linux) for
3910 Linux xxx 2.2.17 on sparc64 with gcc -O2, we erroneously
3911 get dutf8 = 0x20000000, (i.e. SVf_UTF8) even though
3912 dsv->sv_flags doesn't have that bit set.
3913 Andy Dougherty 12 Oct 2001
3915 const I32 sutf8 = DO_UTF8(ssv);
3918 if (SvGMAGICAL(dsv) && (flags & SV_GMAGIC))
3920 dutf8 = DO_UTF8(dsv);
3922 if (dutf8 != sutf8) {
3924 /* Not modifying source SV, so taking a temporary copy. */
3925 SV* const csv = sv_2mortal(newSVpvn(spv, slen));
3927 sv_utf8_upgrade(csv);
3928 spv = SvPV_const(csv, slen);
3931 sv_utf8_upgrade_nomg(dsv);
3933 sv_catpvn_nomg(dsv, spv, slen);
3936 if (flags & SV_SMAGIC)
3941 =for apidoc sv_catpv
3943 Concatenates the string onto the end of the string which is in the SV.
3944 If the SV has the UTF-8 status set, then the bytes appended should be
3945 valid UTF-8. Handles 'get' magic, but not 'set' magic. See C<sv_catpv_mg>.
3950 Perl_sv_catpv(pTHX_ register SV *sv, register const char *ptr)
3953 register STRLEN len;
3959 junk = SvPV_force(sv, tlen);
3961 SvGROW(sv, tlen + len + 1);
3963 ptr = SvPVX_const(sv);
3964 Move(ptr,SvPVX(sv)+tlen,len+1,char);
3965 SvCUR_set(sv, SvCUR(sv) + len);
3966 (void)SvPOK_only_UTF8(sv); /* validate pointer */
3971 =for apidoc sv_catpv_mg
3973 Like C<sv_catpv>, but also handles 'set' magic.
3979 Perl_sv_catpv_mg(pTHX_ register SV *sv, register const char *ptr)
3988 Creates a new SV. A non-zero C<len> parameter indicates the number of
3989 bytes of preallocated string space the SV should have. An extra byte for a
3990 trailing NUL is also reserved. (SvPOK is not set for the SV even if string
3991 space is allocated.) The reference count for the new SV is set to 1.
3993 In 5.9.3, newSV() replaces the older NEWSV() API, and drops the first
3994 parameter, I<x>, a debug aid which allowed callers to identify themselves.
3995 This aid has been superseded by a new build option, PERL_MEM_LOG (see
3996 L<perlhack/PERL_MEM_LOG>). The older API is still there for use in XS
3997 modules supporting older perls.
4003 Perl_newSV(pTHX_ STRLEN len)
4010 sv_upgrade(sv, SVt_PV);
4011 SvGROW(sv, len + 1);
4016 =for apidoc sv_magicext
4018 Adds magic to an SV, upgrading it if necessary. Applies the
4019 supplied vtable and returns a pointer to the magic added.
4021 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
4022 In particular, you can add magic to SvREADONLY SVs, and add more than
4023 one instance of the same 'how'.
4025 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
4026 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
4027 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
4028 to contain an C<SV*> and is stored as-is with its REFCNT incremented.
4030 (This is now used as a subroutine by C<sv_magic>.)
4035 Perl_sv_magicext(pTHX_ SV* sv, SV* obj, int how, MGVTBL *vtable,
4036 const char* name, I32 namlen)
4041 if (SvTYPE(sv) < SVt_PVMG) {
4042 SvUPGRADE(sv, SVt_PVMG);
4044 Newxz(mg, 1, MAGIC);
4045 mg->mg_moremagic = SvMAGIC(sv);
4046 SvMAGIC_set(sv, mg);
4048 /* Sometimes a magic contains a reference loop, where the sv and
4049 object refer to each other. To prevent a reference loop that
4050 would prevent such objects being freed, we look for such loops
4051 and if we find one we avoid incrementing the object refcount.
4053 Note we cannot do this to avoid self-tie loops as intervening RV must
4054 have its REFCNT incremented to keep it in existence.
4057 if (!obj || obj == sv ||
4058 how == PERL_MAGIC_arylen ||
4059 how == PERL_MAGIC_qr ||
4060 how == PERL_MAGIC_symtab ||
4061 (SvTYPE(obj) == SVt_PVGV &&
4062 (GvSV(obj) == sv || GvHV(obj) == (HV*)sv || GvAV(obj) == (AV*)sv ||
4063 GvCV(obj) == (CV*)sv || GvIOp(obj) == (IO*)sv ||
4064 GvFORM(obj) == (CV*)sv)))
4069 mg->mg_obj = SvREFCNT_inc(obj);
4070 mg->mg_flags |= MGf_REFCOUNTED;
4073 /* Normal self-ties simply pass a null object, and instead of
4074 using mg_obj directly, use the SvTIED_obj macro to produce a
4075 new RV as needed. For glob "self-ties", we are tieing the PVIO
4076 with an RV obj pointing to the glob containing the PVIO. In
4077 this case, to avoid a reference loop, we need to weaken the
4081 if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
4082 obj && SvROK(obj) && GvIO(SvRV(obj)) == (IO*)sv)
4088 mg->mg_len = namlen;
4091 mg->mg_ptr = savepvn(name, namlen);
4092 else if (namlen == HEf_SVKEY)
4093 mg->mg_ptr = (char*)SvREFCNT_inc((SV*)name);
4095 mg->mg_ptr = (char *) name;
4097 mg->mg_virtual = vtable;
4101 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
4106 =for apidoc sv_magic
4108 Adds magic to an SV. First upgrades C<sv> to type C<SVt_PVMG> if necessary,
4109 then adds a new magic item of type C<how> to the head of the magic list.
4111 See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
4112 handling of the C<name> and C<namlen> arguments.
4114 You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
4115 to add more than one instance of the same 'how'.
4121 Perl_sv_magic(pTHX_ register SV *sv, SV *obj, int how, const char *name, I32 namlen)
4127 #ifdef PERL_OLD_COPY_ON_WRITE
4129 sv_force_normal_flags(sv, 0);
4131 if (SvREADONLY(sv)) {
4133 /* its okay to attach magic to shared strings; the subsequent
4134 * upgrade to PVMG will unshare the string */
4135 !(SvFAKE(sv) && SvTYPE(sv) < SVt_PVMG)
4138 && how != PERL_MAGIC_regex_global
4139 && how != PERL_MAGIC_bm
4140 && how != PERL_MAGIC_fm
4141 && how != PERL_MAGIC_sv
4142 && how != PERL_MAGIC_backref
4145 Perl_croak(aTHX_ PL_no_modify);
4148 if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
4149 if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
4150 /* sv_magic() refuses to add a magic of the same 'how' as an
4153 if (how == PERL_MAGIC_taint)
4161 vtable = &PL_vtbl_sv;
4163 case PERL_MAGIC_overload:
4164 vtable = &PL_vtbl_amagic;
4166 case PERL_MAGIC_overload_elem:
4167 vtable = &PL_vtbl_amagicelem;
4169 case PERL_MAGIC_overload_table:
4170 vtable = &PL_vtbl_ovrld;
4173 vtable = &PL_vtbl_bm;
4175 case PERL_MAGIC_regdata:
4176 vtable = &PL_vtbl_regdata;
4178 case PERL_MAGIC_regdatum:
4179 vtable = &PL_vtbl_regdatum;
4181 case PERL_MAGIC_env:
4182 vtable = &PL_vtbl_env;
4185 vtable = &PL_vtbl_fm;
4187 case PERL_MAGIC_envelem:
4188 vtable = &PL_vtbl_envelem;
4190 case PERL_MAGIC_regex_global:
4191 vtable = &PL_vtbl_mglob;
4193 case PERL_MAGIC_isa:
4194 vtable = &PL_vtbl_isa;
4196 case PERL_MAGIC_isaelem:
4197 vtable = &PL_vtbl_isaelem;
4199 case PERL_MAGIC_nkeys:
4200 vtable = &PL_vtbl_nkeys;
4202 case PERL_MAGIC_dbfile:
4205 case PERL_MAGIC_dbline:
4206 vtable = &PL_vtbl_dbline;
4208 #ifdef USE_LOCALE_COLLATE
4209 case PERL_MAGIC_collxfrm:
4210 vtable = &PL_vtbl_collxfrm;
4212 #endif /* USE_LOCALE_COLLATE */
4213 case PERL_MAGIC_tied:
4214 vtable = &PL_vtbl_pack;
4216 case PERL_MAGIC_tiedelem:
4217 case PERL_MAGIC_tiedscalar:
4218 vtable = &PL_vtbl_packelem;
4221 vtable = &PL_vtbl_regexp;
4223 case PERL_MAGIC_sig:
4224 vtable = &PL_vtbl_sig;
4226 case PERL_MAGIC_sigelem:
4227 vtable = &PL_vtbl_sigelem;
4229 case PERL_MAGIC_taint:
4230 vtable = &PL_vtbl_taint;
4232 case PERL_MAGIC_uvar:
4233 vtable = &PL_vtbl_uvar;
4235 case PERL_MAGIC_vec:
4236 vtable = &PL_vtbl_vec;
4238 case PERL_MAGIC_arylen_p:
4239 case PERL_MAGIC_rhash:
4240 case PERL_MAGIC_symtab:
4241 case PERL_MAGIC_vstring:
4244 case PERL_MAGIC_utf8:
4245 vtable = &PL_vtbl_utf8;
4247 case PERL_MAGIC_substr:
4248 vtable = &PL_vtbl_substr;
4250 case PERL_MAGIC_defelem:
4251 vtable = &PL_vtbl_defelem;
4253 case PERL_MAGIC_glob:
4254 vtable = &PL_vtbl_glob;
4256 case PERL_MAGIC_arylen:
4257 vtable = &PL_vtbl_arylen;
4259 case PERL_MAGIC_pos:
4260 vtable = &PL_vtbl_pos;
4262 case PERL_MAGIC_backref:
4263 vtable = &PL_vtbl_backref;
4265 case PERL_MAGIC_ext:
4266 /* Reserved for use by extensions not perl internals. */
4267 /* Useful for attaching extension internal data to perl vars. */
4268 /* Note that multiple extensions may clash if magical scalars */
4269 /* etc holding private data from one are passed to another. */
4273 Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
4276 /* Rest of work is done else where */
4277 mg = sv_magicext(sv,obj,how,vtable,name,namlen);
4280 case PERL_MAGIC_taint:
4283 case PERL_MAGIC_ext:
4284 case PERL_MAGIC_dbfile:
4291 =for apidoc sv_unmagic
4293 Removes all magic of type C<type> from an SV.
4299 Perl_sv_unmagic(pTHX_ SV *sv, int type)
4303 if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
4306 for (mg = *mgp; mg; mg = *mgp) {
4307 if (mg->mg_type == type) {
4308 const MGVTBL* const vtbl = mg->mg_virtual;
4309 *mgp = mg->mg_moremagic;
4310 if (vtbl && vtbl->svt_free)
4311 CALL_FPTR(vtbl->svt_free)(aTHX_ sv, mg);
4312 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
4314 Safefree(mg->mg_ptr);
4315 else if (mg->mg_len == HEf_SVKEY)
4316 SvREFCNT_dec((SV*)mg->mg_ptr);
4317 else if (mg->mg_type == PERL_MAGIC_utf8 && mg->mg_ptr)
4318 Safefree(mg->mg_ptr);
4320 if (mg->mg_flags & MGf_REFCOUNTED)
4321 SvREFCNT_dec(mg->mg_obj);
4325 mgp = &mg->mg_moremagic;
4329 SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_NOK|SVp_POK)) >> PRIVSHIFT;
4330 SvMAGIC_set(sv, NULL);
4337 =for apidoc sv_rvweaken
4339 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
4340 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
4341 push a back-reference to this RV onto the array of backreferences
4342 associated with that magic.
4348 Perl_sv_rvweaken(pTHX_ SV *sv)
4351 if (!SvOK(sv)) /* let undefs pass */
4354 Perl_croak(aTHX_ "Can't weaken a nonreference");
4355 else if (SvWEAKREF(sv)) {
4356 if (ckWARN(WARN_MISC))
4357 Perl_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
4361 Perl_sv_add_backref(aTHX_ tsv, sv);
4367 /* Give tsv backref magic if it hasn't already got it, then push a
4368 * back-reference to sv onto the array associated with the backref magic.
4372 Perl_sv_add_backref(pTHX_ SV *tsv, SV *sv)
4377 if (SvTYPE(tsv) == SVt_PVHV) {
4378 AV **const avp = Perl_hv_backreferences_p(aTHX_ (HV*)tsv);
4382 /* There is no AV in the offical place - try a fixup. */
4383 MAGIC *const mg = mg_find(tsv, PERL_MAGIC_backref);
4386 /* Aha. They've got it stowed in magic. Bring it back. */
4387 av = (AV*)mg->mg_obj;
4388 /* Stop mg_free decreasing the refernce count. */
4390 /* Stop mg_free even calling the destructor, given that
4391 there's no AV to free up. */
4393 sv_unmagic(tsv, PERL_MAGIC_backref);
4402 const MAGIC *const mg
4403 = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
4405 av = (AV*)mg->mg_obj;
4409 sv_magic(tsv, (SV*)av, PERL_MAGIC_backref, NULL, 0);
4410 /* av now has a refcnt of 2, which avoids it getting freed
4411 * before us during global cleanup. The extra ref is removed
4412 * by magic_killbackrefs() when tsv is being freed */
4415 if (AvFILLp(av) >= AvMAX(av)) {
4416 av_extend(av, AvFILLp(av)+1);
4418 AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
4421 /* delete a back-reference to ourselves from the backref magic associated
4422 * with the SV we point to.
4426 S_sv_del_backref(pTHX_ SV *tsv, SV *sv)
4433 if (SvTYPE(tsv) == SVt_PVHV && SvOOK(tsv)) {
4434 av = *Perl_hv_backreferences_p(aTHX_ (HV*)tsv);
4435 /* We mustn't attempt to "fix up" the hash here by moving the
4436 backreference array back to the hv_aux structure, as that is stored
4437 in the main HvARRAY(), and hfreentries assumes that no-one
4438 reallocates HvARRAY() while it is running. */
4441 const MAGIC *const mg
4442 = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
4444 av = (AV *)mg->mg_obj;
4447 if (PL_in_clean_all)
4449 Perl_croak(aTHX_ "panic: del_backref");
4456 /* We shouldn't be in here more than once, but for paranoia reasons lets
4458 for (i = AvFILLp(av); i >= 0; i--) {
4460 const SSize_t fill = AvFILLp(av);
4462 /* We weren't the last entry.
4463 An unordered list has this property that you can take the
4464 last element off the end to fill the hole, and it's still
4465 an unordered list :-)
4470 AvFILLp(av) = fill - 1;
4476 Perl_sv_kill_backrefs(pTHX_ SV *sv, AV *av)
4478 SV **svp = AvARRAY(av);
4480 PERL_UNUSED_ARG(sv);
4482 /* Not sure why the av can get freed ahead of its sv, but somehow it does
4483 in ext/B/t/bytecode.t test 15 (involving print <DATA>) */
4484 if (svp && !SvIS_FREED(av)) {
4485 SV *const *const last = svp + AvFILLp(av);
4487 while (svp <= last) {
4489 SV *const referrer = *svp;
4490 if (SvWEAKREF(referrer)) {
4491 /* XXX Should we check that it hasn't changed? */
4492 SvRV_set(referrer, 0);
4494 SvWEAKREF_off(referrer);
4495 } else if (SvTYPE(referrer) == SVt_PVGV ||
4496 SvTYPE(referrer) == SVt_PVLV) {
4497 /* You lookin' at me? */
4498 assert(GvSTASH(referrer));
4499 assert(GvSTASH(referrer) == (HV*)sv);
4500 GvSTASH(referrer) = 0;
4503 "panic: magic_killbackrefs (flags=%"UVxf")",
4504 (UV)SvFLAGS(referrer));
4512 SvREFCNT_dec(av); /* remove extra count added by sv_add_backref() */
4517 =for apidoc sv_insert
4519 Inserts a string at the specified offset/length within the SV. Similar to
4520 the Perl substr() function.
4526 Perl_sv_insert(pTHX_ SV *bigstr, STRLEN offset, STRLEN len, const char *little, STRLEN littlelen)
4531 register char *midend;
4532 register char *bigend;
4538 Perl_croak(aTHX_ "Can't modify non-existent substring");
4539 SvPV_force(bigstr, curlen);
4540 (void)SvPOK_only_UTF8(bigstr);
4541 if (offset + len > curlen) {
4542 SvGROW(bigstr, offset+len+1);
4543 Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
4544 SvCUR_set(bigstr, offset+len);
4548 i = littlelen - len;
4549 if (i > 0) { /* string might grow */
4550 big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
4551 mid = big + offset + len;
4552 midend = bigend = big + SvCUR(bigstr);
4555 while (midend > mid) /* shove everything down */
4556 *--bigend = *--midend;
4557 Move(little,big+offset,littlelen,char);
4558 SvCUR_set(bigstr, SvCUR(bigstr) + i);
4563 Move(little,SvPVX(bigstr)+offset,len,char);
4568 big = SvPVX(bigstr);
4571 bigend = big + SvCUR(bigstr);
4573 if (midend > bigend)
4574 Perl_croak(aTHX_ "panic: sv_insert");
4576 if (mid - big > bigend - midend) { /* faster to shorten from end */
4578 Move(little, mid, littlelen,char);
4581 i = bigend - midend;
4583 Move(midend, mid, i,char);
4587 SvCUR_set(bigstr, mid - big);
4589 else if ((i = mid - big)) { /* faster from front */
4590 midend -= littlelen;
4592 sv_chop(bigstr,midend-i);
4597 Move(little, mid, littlelen,char);
4599 else if (littlelen) {
4600 midend -= littlelen;
4601 sv_chop(bigstr,midend);
4602 Move(little,midend,littlelen,char);
4605 sv_chop(bigstr,midend);
4611 =for apidoc sv_replace
4613 Make the first argument a copy of the second, then delete the original.
4614 The target SV physically takes over ownership of the body of the source SV
4615 and inherits its flags; however, the target keeps any magic it owns,
4616 and any magic in the source is discarded.
4617 Note that this is a rather specialist SV copying operation; most of the
4618 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
4624 Perl_sv_replace(pTHX_ register SV *sv, register SV *nsv)
4627 const U32 refcnt = SvREFCNT(sv);
4628 SV_CHECK_THINKFIRST_COW_DROP(sv);
4629 if (SvREFCNT(nsv) != 1) {
4630 Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace() (%"
4631 UVuf " != 1)", (UV) SvREFCNT(nsv));
4633 if (SvMAGICAL(sv)) {
4637 sv_upgrade(nsv, SVt_PVMG);
4638 SvMAGIC_set(nsv, SvMAGIC(sv));
4639 SvFLAGS(nsv) |= SvMAGICAL(sv);
4641 SvMAGIC_set(sv, NULL);
4645 assert(!SvREFCNT(sv));
4646 #ifdef DEBUG_LEAKING_SCALARS
4647 sv->sv_flags = nsv->sv_flags;
4648 sv->sv_any = nsv->sv_any;
4649 sv->sv_refcnt = nsv->sv_refcnt;
4650 sv->sv_u = nsv->sv_u;
4652 StructCopy(nsv,sv,SV);
4654 /* Currently could join these into one piece of pointer arithmetic, but
4655 it would be unclear. */
4656 if(SvTYPE(sv) == SVt_IV)
4658 = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
4659 else if (SvTYPE(sv) == SVt_RV) {
4660 SvANY(sv) = &sv->sv_u.svu_rv;
4664 #ifdef PERL_OLD_COPY_ON_WRITE
4665 if (SvIsCOW_normal(nsv)) {
4666 /* We need to follow the pointers around the loop to make the
4667 previous SV point to sv, rather than nsv. */
4670 while ((next = SV_COW_NEXT_SV(current)) != nsv) {
4673 assert(SvPVX_const(current) == SvPVX_const(nsv));
4675 /* Make the SV before us point to the SV after us. */
4677 PerlIO_printf(Perl_debug_log, "previous is\n");
4679 PerlIO_printf(Perl_debug_log,
4680 "move it from 0x%"UVxf" to 0x%"UVxf"\n",
4681 (UV) SV_COW_NEXT_SV(current), (UV) sv);
4683 SV_COW_NEXT_SV_SET(current, sv);
4686 SvREFCNT(sv) = refcnt;
4687 SvFLAGS(nsv) |= SVTYPEMASK; /* Mark as freed */
4693 =for apidoc sv_clear
4695 Clear an SV: call any destructors, free up any memory used by the body,
4696 and free the body itself. The SV's head is I<not> freed, although
4697 its type is set to all 1's so that it won't inadvertently be assumed
4698 to be live during global destruction etc.
4699 This function should only be called when REFCNT is zero. Most of the time
4700 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
4707 Perl_sv_clear(pTHX_ register SV *sv)
4710 const U32 type = SvTYPE(sv);
4711 const struct body_details *const sv_type_details
4712 = bodies_by_type + type;
4715 assert(SvREFCNT(sv) == 0);
4721 if (PL_defstash) { /* Still have a symbol table? */
4726 stash = SvSTASH(sv);
4727 destructor = StashHANDLER(stash,DESTROY);
4729 SV* const tmpref = newRV(sv);
4730 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
4732 PUSHSTACKi(PERLSI_DESTROY);
4737 call_sv((SV*)destructor, G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
4743 if(SvREFCNT(tmpref) < 2) {
4744 /* tmpref is not kept alive! */
4746 SvRV_set(tmpref, NULL);
4749 SvREFCNT_dec(tmpref);
4751 } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
4755 if (PL_in_clean_objs)
4756 Perl_croak(aTHX_ "DESTROY created new reference to dead object '%s'",
4758 /* DESTROY gave object new lease on life */
4764 SvREFCNT_dec(SvSTASH(sv)); /* possibly of changed persuasion */
4765 SvOBJECT_off(sv); /* Curse the object. */
4766 if (type != SVt_PVIO)
4767 --PL_sv_objcount; /* XXX Might want something more general */
4770 if (type >= SVt_PVMG) {
4773 if (type == SVt_PVMG && SvFLAGS(sv) & SVpad_TYPED)
4774 SvREFCNT_dec(SvSTASH(sv));
4779 IoIFP(sv) != PerlIO_stdin() &&
4780 IoIFP(sv) != PerlIO_stdout() &&
4781 IoIFP(sv) != PerlIO_stderr())
4783 io_close((IO*)sv, FALSE);
4785 if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
4786 PerlDir_close(IoDIRP(sv));
4787 IoDIRP(sv) = (DIR*)NULL;
4788 Safefree(IoTOP_NAME(sv));
4789 Safefree(IoFMT_NAME(sv));
4790 Safefree(IoBOTTOM_NAME(sv));
4799 Perl_hv_kill_backrefs(aTHX_ (HV*)sv);
4806 if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
4807 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
4808 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
4809 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
4811 else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV** */
4812 SvREFCNT_dec(LvTARG(sv));