3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4 * 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 by Larry Wall
7 * You may distribute under the terms of either the GNU General Public
8 * License or the Artistic License, as specified in the README file.
13 * 'I wonder what the Entish is for "yes" and "no",' he thought.
16 * [p.480 of _The Lord of the Rings_, III/iv: "Treebeard"]
22 * This file contains the code that creates, manipulates and destroys
23 * scalar values (SVs). The other types (AV, HV, GV, etc.) reuse the
24 * structure of an SV, so their creation and destruction is handled
25 * here; higher-level functions are in av.c, hv.c, and so on. Opcode
26 * level functions (eg. substr, split, join) for each of the types are
39 # if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L && !defined(__VMS)
48 /* Missing proto on LynxOS */
49 char *gconvert(double, int, int, char *);
52 #ifdef PERL_NEW_COPY_ON_WRITE
53 # ifndef SV_COW_THRESHOLD
54 # define SV_COW_THRESHOLD 0 /* COW iff len > K */
56 # ifndef SV_COWBUF_THRESHOLD
57 # define SV_COWBUF_THRESHOLD 1250 /* COW iff len > K */
59 # ifndef SV_COW_MAX_WASTE_THRESHOLD
60 # define SV_COW_MAX_WASTE_THRESHOLD 80 /* COW iff (len - cur) < K */
62 # ifndef SV_COWBUF_WASTE_THRESHOLD
63 # define SV_COWBUF_WASTE_THRESHOLD 80 /* COW iff (len - cur) < K */
65 # ifndef SV_COW_MAX_WASTE_FACTOR_THRESHOLD
66 # define SV_COW_MAX_WASTE_FACTOR_THRESHOLD 2 /* COW iff len < (cur * K) */
68 # ifndef SV_COWBUF_WASTE_FACTOR_THRESHOLD
69 # define SV_COWBUF_WASTE_FACTOR_THRESHOLD 2 /* COW iff len < (cur * K) */
72 /* Work around compiler warnings about unsigned >= THRESHOLD when thres-
75 # define GE_COW_THRESHOLD(cur) ((cur) >= SV_COW_THRESHOLD)
77 # define GE_COW_THRESHOLD(cur) 1
79 #if SV_COWBUF_THRESHOLD
80 # define GE_COWBUF_THRESHOLD(cur) ((cur) >= SV_COWBUF_THRESHOLD)
82 # define GE_COWBUF_THRESHOLD(cur) 1
84 #if SV_COW_MAX_WASTE_THRESHOLD
85 # define GE_COW_MAX_WASTE_THRESHOLD(cur,len) (((len)-(cur)) < SV_COW_MAX_WASTE_THRESHOLD)
87 # define GE_COW_MAX_WASTE_THRESHOLD(cur,len) 1
89 #if SV_COWBUF_WASTE_THRESHOLD
90 # define GE_COWBUF_WASTE_THRESHOLD(cur,len) (((len)-(cur)) < SV_COWBUF_WASTE_THRESHOLD)
92 # define GE_COWBUF_WASTE_THRESHOLD(cur,len) 1
94 #if SV_COW_MAX_WASTE_FACTOR_THRESHOLD
95 # define GE_COW_MAX_WASTE_FACTOR_THRESHOLD(cur,len) ((len) < SV_COW_MAX_WASTE_FACTOR_THRESHOLD * (cur))
97 # define GE_COW_MAX_WASTE_FACTOR_THRESHOLD(cur,len) 1
99 #if SV_COWBUF_WASTE_FACTOR_THRESHOLD
100 # define GE_COWBUF_WASTE_FACTOR_THRESHOLD(cur,len) ((len) < SV_COWBUF_WASTE_FACTOR_THRESHOLD * (cur))
102 # define GE_COWBUF_WASTE_FACTOR_THRESHOLD(cur,len) 1
105 #define CHECK_COW_THRESHOLD(cur,len) (\
106 GE_COW_THRESHOLD((cur)) && \
107 GE_COW_MAX_WASTE_THRESHOLD((cur),(len)) && \
108 GE_COW_MAX_WASTE_FACTOR_THRESHOLD((cur),(len)) \
110 #define CHECK_COWBUF_THRESHOLD(cur,len) (\
111 GE_COWBUF_THRESHOLD((cur)) && \
112 GE_COWBUF_WASTE_THRESHOLD((cur),(len)) && \
113 GE_COWBUF_WASTE_FACTOR_THRESHOLD((cur),(len)) \
115 /* void Gconvert: on Linux at least, gcvt (which Gconvert gets deffed to),
116 * has a mandatory return value, even though that value is just the same
119 #ifdef PERL_UTF8_CACHE_ASSERT
120 /* if adding more checks watch out for the following tests:
121 * t/op/index.t t/op/length.t t/op/pat.t t/op/substr.t
122 * lib/utf8.t lib/Unicode/Collate/t/index.t
125 # define ASSERT_UTF8_CACHE(cache) \
126 STMT_START { if (cache) { assert((cache)[0] <= (cache)[1]); \
127 assert((cache)[2] <= (cache)[3]); \
128 assert((cache)[3] <= (cache)[1]);} \
131 # define ASSERT_UTF8_CACHE(cache) NOOP
134 #ifdef PERL_OLD_COPY_ON_WRITE
135 #define SV_COW_NEXT_SV(sv) INT2PTR(SV *,SvUVX(sv))
136 #define SV_COW_NEXT_SV_SET(current,next) SvUV_set(current, PTR2UV(next))
139 /* ============================================================================
141 =head1 Allocation and deallocation of SVs.
142 An SV (or AV, HV, etc.) is allocated in two parts: the head (struct
143 sv, av, hv...) contains type and reference count information, and for
144 many types, a pointer to the body (struct xrv, xpv, xpviv...), which
145 contains fields specific to each type. Some types store all they need
146 in the head, so don't have a body.
148 In all but the most memory-paranoid configurations (ex: PURIFY), heads
149 and bodies are allocated out of arenas, which by default are
150 approximately 4K chunks of memory parcelled up into N heads or bodies.
151 Sv-bodies are allocated by their sv-type, guaranteeing size
152 consistency needed to allocate safely from arrays.
154 For SV-heads, the first slot in each arena is reserved, and holds a
155 link to the next arena, some flags, and a note of the number of slots.
156 Snaked through each arena chain is a linked list of free items; when
157 this becomes empty, an extra arena is allocated and divided up into N
158 items which are threaded into the free list.
160 SV-bodies are similar, but they use arena-sets by default, which
161 separate the link and info from the arena itself, and reclaim the 1st
162 slot in the arena. SV-bodies are further described later.
164 The following global variables are associated with arenas:
166 PL_sv_arenaroot pointer to list of SV arenas
167 PL_sv_root pointer to list of free SV structures
169 PL_body_arenas head of linked-list of body arenas
170 PL_body_roots[] array of pointers to list of free bodies of svtype
171 arrays are indexed by the svtype needed
173 A few special SV heads are not allocated from an arena, but are
174 instead directly created in the interpreter structure, eg PL_sv_undef.
175 The size of arenas can be changed from the default by setting
176 PERL_ARENA_SIZE appropriately at compile time.
178 The SV arena serves the secondary purpose of allowing still-live SVs
179 to be located and destroyed during final cleanup.
181 At the lowest level, the macros new_SV() and del_SV() grab and free
182 an SV head. (If debugging with -DD, del_SV() calls the function S_del_sv()
183 to return the SV to the free list with error checking.) new_SV() calls
184 more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
185 SVs in the free list have their SvTYPE field set to all ones.
187 At the time of very final cleanup, sv_free_arenas() is called from
188 perl_destruct() to physically free all the arenas allocated since the
189 start of the interpreter.
191 The function visit() scans the SV arenas list, and calls a specified
192 function for each SV it finds which is still live - ie which has an SvTYPE
193 other than all 1's, and a non-zero SvREFCNT. visit() is used by the
194 following functions (specified as [function that calls visit()] / [function
195 called by visit() for each SV]):
197 sv_report_used() / do_report_used()
198 dump all remaining SVs (debugging aid)
200 sv_clean_objs() / do_clean_objs(),do_clean_named_objs(),
201 do_clean_named_io_objs(),do_curse()
202 Attempt to free all objects pointed to by RVs,
203 try to do the same for all objects indir-
204 ectly referenced by typeglobs too, and
205 then do a final sweep, cursing any
206 objects that remain. Called once from
207 perl_destruct(), prior to calling sv_clean_all()
210 sv_clean_all() / do_clean_all()
211 SvREFCNT_dec(sv) each remaining SV, possibly
212 triggering an sv_free(). It also sets the
213 SVf_BREAK flag on the SV to indicate that the
214 refcnt has been artificially lowered, and thus
215 stopping sv_free() from giving spurious warnings
216 about SVs which unexpectedly have a refcnt
217 of zero. called repeatedly from perl_destruct()
218 until there are no SVs left.
220 =head2 Arena allocator API Summary
222 Private API to rest of sv.c
226 new_XPVNV(), del_XPVGV(),
231 sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
235 * ========================================================================= */
238 * "A time to plant, and a time to uproot what was planted..."
242 # define MEM_LOG_NEW_SV(sv, file, line, func) \
243 Perl_mem_log_new_sv(sv, file, line, func)
244 # define MEM_LOG_DEL_SV(sv, file, line, func) \
245 Perl_mem_log_del_sv(sv, file, line, func)
247 # define MEM_LOG_NEW_SV(sv, file, line, func) NOOP
248 # define MEM_LOG_DEL_SV(sv, file, line, func) NOOP
251 #ifdef DEBUG_LEAKING_SCALARS
252 # define FREE_SV_DEBUG_FILE(sv) STMT_START { \
253 if ((sv)->sv_debug_file) PerlMemShared_free((sv)->sv_debug_file); \
255 # define DEBUG_SV_SERIAL(sv) \
256 DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) del_SV\n", \
257 PTR2UV(sv), (long)(sv)->sv_debug_serial))
259 # define FREE_SV_DEBUG_FILE(sv)
260 # define DEBUG_SV_SERIAL(sv) NOOP
264 # define SvARENA_CHAIN(sv) ((sv)->sv_u.svu_rv)
265 # define SvARENA_CHAIN_SET(sv,val) (sv)->sv_u.svu_rv = MUTABLE_SV((val))
266 /* Whilst I'd love to do this, it seems that things like to check on
268 # define POSION_SV_HEAD(sv) PoisonNew(sv, 1, struct STRUCT_SV)
270 # define POSION_SV_HEAD(sv) PoisonNew(&SvANY(sv), 1, void *), \
271 PoisonNew(&SvREFCNT(sv), 1, U32)
273 # define SvARENA_CHAIN(sv) SvANY(sv)
274 # define SvARENA_CHAIN_SET(sv,val) SvANY(sv) = (void *)(val)
275 # define POSION_SV_HEAD(sv)
278 /* Mark an SV head as unused, and add to free list.
280 * If SVf_BREAK is set, skip adding it to the free list, as this SV had
281 * its refcount artificially decremented during global destruction, so
282 * there may be dangling pointers to it. The last thing we want in that
283 * case is for it to be reused. */
285 #define plant_SV(p) \
287 const U32 old_flags = SvFLAGS(p); \
288 MEM_LOG_DEL_SV(p, __FILE__, __LINE__, FUNCTION__); \
289 DEBUG_SV_SERIAL(p); \
290 FREE_SV_DEBUG_FILE(p); \
292 SvFLAGS(p) = SVTYPEMASK; \
293 if (!(old_flags & SVf_BREAK)) { \
294 SvARENA_CHAIN_SET(p, PL_sv_root); \
300 #define uproot_SV(p) \
303 PL_sv_root = MUTABLE_SV(SvARENA_CHAIN(p)); \
308 /* make some more SVs by adding another arena */
315 char *chunk; /* must use New here to match call to */
316 Newx(chunk,PERL_ARENA_SIZE,char); /* Safefree() in sv_free_arenas() */
317 sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
322 /* new_SV(): return a new, empty SV head */
324 #ifdef DEBUG_LEAKING_SCALARS
325 /* provide a real function for a debugger to play with */
327 S_new_SV(pTHX_ const char *file, int line, const char *func)
334 sv = S_more_sv(aTHX);
338 sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
339 sv->sv_debug_line = (U16) (PL_parser && PL_parser->copline != NOLINE
345 sv->sv_debug_inpad = 0;
346 sv->sv_debug_parent = NULL;
347 sv->sv_debug_file = PL_curcop ? savesharedpv(CopFILE(PL_curcop)): NULL;
349 sv->sv_debug_serial = PL_sv_serial++;
351 MEM_LOG_NEW_SV(sv, file, line, func);
352 DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) new_SV (from %s:%d [%s])\n",
353 PTR2UV(sv), (long)sv->sv_debug_serial, file, line, func));
357 # define new_SV(p) (p)=S_new_SV(aTHX_ __FILE__, __LINE__, FUNCTION__)
365 (p) = S_more_sv(aTHX); \
369 MEM_LOG_NEW_SV(p, __FILE__, __LINE__, FUNCTION__); \
374 /* del_SV(): return an empty SV head to the free list */
387 S_del_sv(pTHX_ SV *p)
391 PERL_ARGS_ASSERT_DEL_SV;
396 for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
397 const SV * const sv = sva + 1;
398 const SV * const svend = &sva[SvREFCNT(sva)];
399 if (p >= sv && p < svend) {
405 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
406 "Attempt to free non-arena SV: 0x%"UVxf
407 pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
414 #else /* ! DEBUGGING */
416 #define del_SV(p) plant_SV(p)
418 #endif /* DEBUGGING */
422 =head1 SV Manipulation Functions
424 =for apidoc sv_add_arena
426 Given a chunk of memory, link it to the head of the list of arenas,
427 and split it into a list of free SVs.
433 S_sv_add_arena(pTHX_ char *const ptr, const U32 size, const U32 flags)
436 SV *const sva = MUTABLE_SV(ptr);
440 PERL_ARGS_ASSERT_SV_ADD_ARENA;
442 /* The first SV in an arena isn't an SV. */
443 SvANY(sva) = (void *) PL_sv_arenaroot; /* ptr to next arena */
444 SvREFCNT(sva) = size / sizeof(SV); /* number of SV slots */
445 SvFLAGS(sva) = flags; /* FAKE if not to be freed */
447 PL_sv_arenaroot = sva;
448 PL_sv_root = sva + 1;
450 svend = &sva[SvREFCNT(sva) - 1];
453 SvARENA_CHAIN_SET(sv, (sv + 1));
457 /* Must always set typemask because it's always checked in on cleanup
458 when the arenas are walked looking for objects. */
459 SvFLAGS(sv) = SVTYPEMASK;
462 SvARENA_CHAIN_SET(sv, 0);
466 SvFLAGS(sv) = SVTYPEMASK;
469 /* visit(): call the named function for each non-free SV in the arenas
470 * whose flags field matches the flags/mask args. */
473 S_visit(pTHX_ SVFUNC_t f, const U32 flags, const U32 mask)
479 PERL_ARGS_ASSERT_VISIT;
481 for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
482 const SV * const svend = &sva[SvREFCNT(sva)];
484 for (sv = sva + 1; sv < svend; ++sv) {
485 if (SvTYPE(sv) != (svtype)SVTYPEMASK
486 && (sv->sv_flags & mask) == flags
499 /* called by sv_report_used() for each live SV */
502 do_report_used(pTHX_ SV *const sv)
504 if (SvTYPE(sv) != (svtype)SVTYPEMASK) {
505 PerlIO_printf(Perl_debug_log, "****\n");
512 =for apidoc sv_report_used
514 Dump the contents of all SVs not yet freed (debugging aid).
520 Perl_sv_report_used(pTHX)
523 visit(do_report_used, 0, 0);
529 /* called by sv_clean_objs() for each live SV */
532 do_clean_objs(pTHX_ SV *const ref)
537 SV * const target = SvRV(ref);
538 if (SvOBJECT(target)) {
539 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(ref)));
540 if (SvWEAKREF(ref)) {
541 sv_del_backref(target, ref);
547 SvREFCNT_dec_NN(target);
554 /* clear any slots in a GV which hold objects - except IO;
555 * called by sv_clean_objs() for each live GV */
558 do_clean_named_objs(pTHX_ SV *const sv)
562 assert(SvTYPE(sv) == SVt_PVGV);
563 assert(isGV_with_GP(sv));
567 /* freeing GP entries may indirectly free the current GV;
568 * hold onto it while we mess with the GP slots */
571 if ( ((obj = GvSV(sv) )) && SvOBJECT(obj)) {
572 DEBUG_D((PerlIO_printf(Perl_debug_log,
573 "Cleaning named glob SV object:\n "), sv_dump(obj)));
575 SvREFCNT_dec_NN(obj);
577 if ( ((obj = MUTABLE_SV(GvAV(sv)) )) && SvOBJECT(obj)) {
578 DEBUG_D((PerlIO_printf(Perl_debug_log,
579 "Cleaning named glob AV object:\n "), sv_dump(obj)));
581 SvREFCNT_dec_NN(obj);
583 if ( ((obj = MUTABLE_SV(GvHV(sv)) )) && SvOBJECT(obj)) {
584 DEBUG_D((PerlIO_printf(Perl_debug_log,
585 "Cleaning named glob HV object:\n "), sv_dump(obj)));
587 SvREFCNT_dec_NN(obj);
589 if ( ((obj = MUTABLE_SV(GvCV(sv)) )) && SvOBJECT(obj)) {
590 DEBUG_D((PerlIO_printf(Perl_debug_log,
591 "Cleaning named glob CV object:\n "), sv_dump(obj)));
593 SvREFCNT_dec_NN(obj);
595 SvREFCNT_dec_NN(sv); /* undo the inc above */
598 /* clear any IO slots in a GV which hold objects (except stderr, defout);
599 * called by sv_clean_objs() for each live GV */
602 do_clean_named_io_objs(pTHX_ SV *const sv)
606 assert(SvTYPE(sv) == SVt_PVGV);
607 assert(isGV_with_GP(sv));
608 if (!GvGP(sv) || sv == (SV*)PL_stderrgv || sv == (SV*)PL_defoutgv)
612 if ( ((obj = MUTABLE_SV(GvIO(sv)) )) && SvOBJECT(obj)) {
613 DEBUG_D((PerlIO_printf(Perl_debug_log,
614 "Cleaning named glob IO object:\n "), sv_dump(obj)));
616 SvREFCNT_dec_NN(obj);
618 SvREFCNT_dec_NN(sv); /* undo the inc above */
621 /* Void wrapper to pass to visit() */
623 do_curse(pTHX_ SV * const sv) {
624 if ((PL_stderrgv && GvGP(PL_stderrgv) && (SV*)GvIO(PL_stderrgv) == sv)
625 || (PL_defoutgv && GvGP(PL_defoutgv) && (SV*)GvIO(PL_defoutgv) == sv))
631 =for apidoc sv_clean_objs
633 Attempt to destroy all objects not yet freed.
639 Perl_sv_clean_objs(pTHX)
643 PL_in_clean_objs = TRUE;
644 visit(do_clean_objs, SVf_ROK, SVf_ROK);
645 /* Some barnacles may yet remain, clinging to typeglobs.
646 * Run the non-IO destructors first: they may want to output
647 * error messages, close files etc */
648 visit(do_clean_named_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
649 visit(do_clean_named_io_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
650 /* And if there are some very tenacious barnacles clinging to arrays,
651 closures, or what have you.... */
652 visit(do_curse, SVs_OBJECT, SVs_OBJECT);
653 olddef = PL_defoutgv;
654 PL_defoutgv = NULL; /* disable skip of PL_defoutgv */
655 if (olddef && isGV_with_GP(olddef))
656 do_clean_named_io_objs(aTHX_ MUTABLE_SV(olddef));
657 olderr = PL_stderrgv;
658 PL_stderrgv = NULL; /* disable skip of PL_stderrgv */
659 if (olderr && isGV_with_GP(olderr))
660 do_clean_named_io_objs(aTHX_ MUTABLE_SV(olderr));
661 SvREFCNT_dec(olddef);
662 PL_in_clean_objs = FALSE;
665 /* called by sv_clean_all() for each live SV */
668 do_clean_all(pTHX_ SV *const sv)
671 if (sv == (const SV *) PL_fdpid || sv == (const SV *)PL_strtab) {
672 /* don't clean pid table and strtab */
675 DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
676 SvFLAGS(sv) |= SVf_BREAK;
681 =for apidoc sv_clean_all
683 Decrement the refcnt of each remaining SV, possibly triggering a
684 cleanup. This function may have to be called multiple times to free
685 SVs which are in complex self-referential hierarchies.
691 Perl_sv_clean_all(pTHX)
695 PL_in_clean_all = TRUE;
696 cleaned = visit(do_clean_all, 0,0);
701 ARENASETS: a meta-arena implementation which separates arena-info
702 into struct arena_set, which contains an array of struct
703 arena_descs, each holding info for a single arena. By separating
704 the meta-info from the arena, we recover the 1st slot, formerly
705 borrowed for list management. The arena_set is about the size of an
706 arena, avoiding the needless malloc overhead of a naive linked-list.
708 The cost is 1 arena-set malloc per ~320 arena-mallocs, + the unused
709 memory in the last arena-set (1/2 on average). In trade, we get
710 back the 1st slot in each arena (ie 1.7% of a CV-arena, less for
711 smaller types). The recovery of the wasted space allows use of
712 small arenas for large, rare body types, by changing array* fields
713 in body_details_by_type[] below.
716 char *arena; /* the raw storage, allocated aligned */
717 size_t size; /* its size ~4k typ */
718 svtype utype; /* bodytype stored in arena */
723 /* Get the maximum number of elements in set[] such that struct arena_set
724 will fit within PERL_ARENA_SIZE, which is probably just under 4K, and
725 therefore likely to be 1 aligned memory page. */
727 #define ARENAS_PER_SET ((PERL_ARENA_SIZE - sizeof(struct arena_set*) \
728 - 2 * sizeof(int)) / sizeof (struct arena_desc))
731 struct arena_set* next;
732 unsigned int set_size; /* ie ARENAS_PER_SET */
733 unsigned int curr; /* index of next available arena-desc */
734 struct arena_desc set[ARENAS_PER_SET];
738 =for apidoc sv_free_arenas
740 Deallocate the memory used by all arenas. Note that all the individual SV
741 heads and bodies within the arenas must already have been freed.
747 Perl_sv_free_arenas(pTHX)
754 /* Free arenas here, but be careful about fake ones. (We assume
755 contiguity of the fake ones with the corresponding real ones.) */
757 for (sva = PL_sv_arenaroot; sva; sva = svanext) {
758 svanext = MUTABLE_SV(SvANY(sva));
759 while (svanext && SvFAKE(svanext))
760 svanext = MUTABLE_SV(SvANY(svanext));
767 struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
770 struct arena_set *current = aroot;
773 assert(aroot->set[i].arena);
774 Safefree(aroot->set[i].arena);
782 i = PERL_ARENA_ROOTS_SIZE;
784 PL_body_roots[i] = 0;
791 Here are mid-level routines that manage the allocation of bodies out
792 of the various arenas. There are 5 kinds of arenas:
794 1. SV-head arenas, which are discussed and handled above
795 2. regular body arenas
796 3. arenas for reduced-size bodies
799 Arena types 2 & 3 are chained by body-type off an array of
800 arena-root pointers, which is indexed by svtype. Some of the
801 larger/less used body types are malloced singly, since a large
802 unused block of them is wasteful. Also, several svtypes dont have
803 bodies; the data fits into the sv-head itself. The arena-root
804 pointer thus has a few unused root-pointers (which may be hijacked
805 later for arena types 4,5)
807 3 differs from 2 as an optimization; some body types have several
808 unused fields in the front of the structure (which are kept in-place
809 for consistency). These bodies can be allocated in smaller chunks,
810 because the leading fields arent accessed. Pointers to such bodies
811 are decremented to point at the unused 'ghost' memory, knowing that
812 the pointers are used with offsets to the real memory.
815 =head1 SV-Body Allocation
817 Allocation of SV-bodies is similar to SV-heads, differing as follows;
818 the allocation mechanism is used for many body types, so is somewhat
819 more complicated, it uses arena-sets, and has no need for still-live
822 At the outermost level, (new|del)_X*V macros return bodies of the
823 appropriate type. These macros call either (new|del)_body_type or
824 (new|del)_body_allocated macro pairs, depending on specifics of the
825 type. Most body types use the former pair, the latter pair is used to
826 allocate body types with "ghost fields".
828 "ghost fields" are fields that are unused in certain types, and
829 consequently don't need to actually exist. They are declared because
830 they're part of a "base type", which allows use of functions as
831 methods. The simplest examples are AVs and HVs, 2 aggregate types
832 which don't use the fields which support SCALAR semantics.
834 For these types, the arenas are carved up into appropriately sized
835 chunks, we thus avoid wasted memory for those unaccessed members.
836 When bodies are allocated, we adjust the pointer back in memory by the
837 size of the part not allocated, so it's as if we allocated the full
838 structure. (But things will all go boom if you write to the part that
839 is "not there", because you'll be overwriting the last members of the
840 preceding structure in memory.)
842 We calculate the correction using the STRUCT_OFFSET macro on the first
843 member present. If the allocated structure is smaller (no initial NV
844 actually allocated) then the net effect is to subtract the size of the NV
845 from the pointer, to return a new pointer as if an initial NV were actually
846 allocated. (We were using structures named *_allocated for this, but
847 this turned out to be a subtle bug, because a structure without an NV
848 could have a lower alignment constraint, but the compiler is allowed to
849 optimised accesses based on the alignment constraint of the actual pointer
850 to the full structure, for example, using a single 64 bit load instruction
851 because it "knows" that two adjacent 32 bit members will be 8-byte aligned.)
853 This is the same trick as was used for NV and IV bodies. Ironically it
854 doesn't need to be used for NV bodies any more, because NV is now at
855 the start of the structure. IV bodies don't need it either, because
856 they are no longer allocated.
858 In turn, the new_body_* allocators call S_new_body(), which invokes
859 new_body_inline macro, which takes a lock, and takes a body off the
860 linked list at PL_body_roots[sv_type], calling Perl_more_bodies() if
861 necessary to refresh an empty list. Then the lock is released, and
862 the body is returned.
864 Perl_more_bodies allocates a new arena, and carves it up into an array of N
865 bodies, which it strings into a linked list. It looks up arena-size
866 and body-size from the body_details table described below, thus
867 supporting the multiple body-types.
869 If PURIFY is defined, or PERL_ARENA_SIZE=0, arenas are not used, and
870 the (new|del)_X*V macros are mapped directly to malloc/free.
872 For each sv-type, struct body_details bodies_by_type[] carries
873 parameters which control these aspects of SV handling:
875 Arena_size determines whether arenas are used for this body type, and if
876 so, how big they are. PURIFY or PERL_ARENA_SIZE=0 set this field to
877 zero, forcing individual mallocs and frees.
879 Body_size determines how big a body is, and therefore how many fit into
880 each arena. Offset carries the body-pointer adjustment needed for
881 "ghost fields", and is used in *_allocated macros.
883 But its main purpose is to parameterize info needed in
884 Perl_sv_upgrade(). The info here dramatically simplifies the function
885 vs the implementation in 5.8.8, making it table-driven. All fields
886 are used for this, except for arena_size.
888 For the sv-types that have no bodies, arenas are not used, so those
889 PL_body_roots[sv_type] are unused, and can be overloaded. In
890 something of a special case, SVt_NULL is borrowed for HE arenas;
891 PL_body_roots[HE_SVSLOT=SVt_NULL] is filled by S_more_he, but the
892 bodies_by_type[SVt_NULL] slot is not used, as the table is not
897 struct body_details {
898 U8 body_size; /* Size to allocate */
899 U8 copy; /* Size of structure to copy (may be shorter) */
901 unsigned int type : 4; /* We have space for a sanity check. */
902 unsigned int cant_upgrade : 1; /* Cannot upgrade this type */
903 unsigned int zero_nv : 1; /* zero the NV when upgrading from this */
904 unsigned int arena : 1; /* Allocated from an arena */
905 size_t arena_size; /* Size of arena to allocate */
913 /* With -DPURFIY we allocate everything directly, and don't use arenas.
914 This seems a rather elegant way to simplify some of the code below. */
915 #define HASARENA FALSE
917 #define HASARENA TRUE
919 #define NOARENA FALSE
921 /* Size the arenas to exactly fit a given number of bodies. A count
922 of 0 fits the max number bodies into a PERL_ARENA_SIZE.block,
923 simplifying the default. If count > 0, the arena is sized to fit
924 only that many bodies, allowing arenas to be used for large, rare
925 bodies (XPVFM, XPVIO) without undue waste. The arena size is
926 limited by PERL_ARENA_SIZE, so we can safely oversize the
929 #define FIT_ARENA0(body_size) \
930 ((size_t)(PERL_ARENA_SIZE / body_size) * body_size)
931 #define FIT_ARENAn(count,body_size) \
932 ( count * body_size <= PERL_ARENA_SIZE) \
933 ? count * body_size \
934 : FIT_ARENA0 (body_size)
935 #define FIT_ARENA(count,body_size) \
937 ? FIT_ARENAn (count, body_size) \
938 : FIT_ARENA0 (body_size)
940 /* Calculate the length to copy. Specifically work out the length less any
941 final padding the compiler needed to add. See the comment in sv_upgrade
942 for why copying the padding proved to be a bug. */
944 #define copy_length(type, last_member) \
945 STRUCT_OFFSET(type, last_member) \
946 + sizeof (((type*)SvANY((const SV *)0))->last_member)
948 static const struct body_details bodies_by_type[] = {
949 /* HEs use this offset for their arena. */
950 { 0, 0, 0, SVt_NULL, FALSE, NONV, NOARENA, 0 },
952 /* IVs are in the head, so the allocation size is 0. */
954 sizeof(IV), /* This is used to copy out the IV body. */
955 STRUCT_OFFSET(XPVIV, xiv_iv), SVt_IV, FALSE, NONV,
956 NOARENA /* IVS don't need an arena */, 0
959 { sizeof(NV), sizeof(NV),
960 STRUCT_OFFSET(XPVNV, xnv_u),
961 SVt_NV, FALSE, HADNV, HASARENA, FIT_ARENA(0, sizeof(NV)) },
963 { sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur),
964 copy_length(XPV, xpv_len) - STRUCT_OFFSET(XPV, xpv_cur),
965 + STRUCT_OFFSET(XPV, xpv_cur),
966 SVt_PV, FALSE, NONV, HASARENA,
967 FIT_ARENA(0, sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur)) },
969 { sizeof(XINVLIST) - STRUCT_OFFSET(XPV, xpv_cur),
970 copy_length(XINVLIST, is_offset) - STRUCT_OFFSET(XPV, xpv_cur),
971 + STRUCT_OFFSET(XPV, xpv_cur),
972 SVt_INVLIST, TRUE, NONV, HASARENA,
973 FIT_ARENA(0, sizeof(XINVLIST) - STRUCT_OFFSET(XPV, xpv_cur)) },
975 { sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur),
976 copy_length(XPVIV, xiv_u) - STRUCT_OFFSET(XPV, xpv_cur),
977 + STRUCT_OFFSET(XPV, xpv_cur),
978 SVt_PVIV, FALSE, NONV, HASARENA,
979 FIT_ARENA(0, sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur)) },
981 { sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur),
982 copy_length(XPVNV, xnv_u) - STRUCT_OFFSET(XPV, xpv_cur),
983 + STRUCT_OFFSET(XPV, xpv_cur),
984 SVt_PVNV, FALSE, HADNV, HASARENA,
985 FIT_ARENA(0, sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur)) },
987 { sizeof(XPVMG), copy_length(XPVMG, xnv_u), 0, SVt_PVMG, FALSE, HADNV,
988 HASARENA, FIT_ARENA(0, sizeof(XPVMG)) },
993 SVt_REGEXP, TRUE, NONV, HASARENA,
994 FIT_ARENA(0, sizeof(regexp))
997 { sizeof(XPVGV), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
998 HASARENA, FIT_ARENA(0, sizeof(XPVGV)) },
1000 { sizeof(XPVLV), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
1001 HASARENA, FIT_ARENA(0, sizeof(XPVLV)) },
1004 copy_length(XPVAV, xav_alloc),
1006 SVt_PVAV, TRUE, NONV, HASARENA,
1007 FIT_ARENA(0, sizeof(XPVAV)) },
1010 copy_length(XPVHV, xhv_max),
1012 SVt_PVHV, TRUE, NONV, HASARENA,
1013 FIT_ARENA(0, sizeof(XPVHV)) },
1018 SVt_PVCV, TRUE, NONV, HASARENA,
1019 FIT_ARENA(0, sizeof(XPVCV)) },
1024 SVt_PVFM, TRUE, NONV, NOARENA,
1025 FIT_ARENA(20, sizeof(XPVFM)) },
1030 SVt_PVIO, TRUE, NONV, HASARENA,
1031 FIT_ARENA(24, sizeof(XPVIO)) },
1034 #define new_body_allocated(sv_type) \
1035 (void *)((char *)S_new_body(aTHX_ sv_type) \
1036 - bodies_by_type[sv_type].offset)
1038 /* return a thing to the free list */
1040 #define del_body(thing, root) \
1042 void ** const thing_copy = (void **)thing; \
1043 *thing_copy = *root; \
1044 *root = (void*)thing_copy; \
1049 #define new_XNV() safemalloc(sizeof(XPVNV))
1050 #define new_XPVNV() safemalloc(sizeof(XPVNV))
1051 #define new_XPVMG() safemalloc(sizeof(XPVMG))
1053 #define del_XPVGV(p) safefree(p)
1057 #define new_XNV() new_body_allocated(SVt_NV)
1058 #define new_XPVNV() new_body_allocated(SVt_PVNV)
1059 #define new_XPVMG() new_body_allocated(SVt_PVMG)
1061 #define del_XPVGV(p) del_body(p + bodies_by_type[SVt_PVGV].offset, \
1062 &PL_body_roots[SVt_PVGV])
1066 /* no arena for you! */
1068 #define new_NOARENA(details) \
1069 safemalloc((details)->body_size + (details)->offset)
1070 #define new_NOARENAZ(details) \
1071 safecalloc((details)->body_size + (details)->offset, 1)
1074 Perl_more_bodies (pTHX_ const svtype sv_type, const size_t body_size,
1075 const size_t arena_size)
1078 void ** const root = &PL_body_roots[sv_type];
1079 struct arena_desc *adesc;
1080 struct arena_set *aroot = (struct arena_set *) PL_body_arenas;
1084 const size_t good_arena_size = Perl_malloc_good_size(arena_size);
1085 #if defined(DEBUGGING) && !defined(PERL_GLOBAL_STRUCT_PRIVATE)
1086 static bool done_sanity_check;
1088 /* PERL_GLOBAL_STRUCT_PRIVATE cannot coexist with global
1089 * variables like done_sanity_check. */
1090 if (!done_sanity_check) {
1091 unsigned int i = SVt_LAST;
1093 done_sanity_check = TRUE;
1096 assert (bodies_by_type[i].type == i);
1102 /* may need new arena-set to hold new arena */
1103 if (!aroot || aroot->curr >= aroot->set_size) {
1104 struct arena_set *newroot;
1105 Newxz(newroot, 1, struct arena_set);
1106 newroot->set_size = ARENAS_PER_SET;
1107 newroot->next = aroot;
1109 PL_body_arenas = (void *) newroot;
1110 DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", (void*)aroot));
1113 /* ok, now have arena-set with at least 1 empty/available arena-desc */
1114 curr = aroot->curr++;
1115 adesc = &(aroot->set[curr]);
1116 assert(!adesc->arena);
1118 Newx(adesc->arena, good_arena_size, char);
1119 adesc->size = good_arena_size;
1120 adesc->utype = sv_type;
1121 DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p size %"UVuf"\n",
1122 curr, (void*)adesc->arena, (UV)good_arena_size));
1124 start = (char *) adesc->arena;
1126 /* Get the address of the byte after the end of the last body we can fit.
1127 Remember, this is integer division: */
1128 end = start + good_arena_size / body_size * body_size;
1130 /* computed count doesn't reflect the 1st slot reservation */
1131 #if defined(MYMALLOC) || defined(HAS_MALLOC_GOOD_SIZE)
1132 DEBUG_m(PerlIO_printf(Perl_debug_log,
1133 "arena %p end %p arena-size %d (from %d) type %d "
1135 (void*)start, (void*)end, (int)good_arena_size,
1136 (int)arena_size, sv_type, (int)body_size,
1137 (int)good_arena_size / (int)body_size));
1139 DEBUG_m(PerlIO_printf(Perl_debug_log,
1140 "arena %p end %p arena-size %d type %d size %d ct %d\n",
1141 (void*)start, (void*)end,
1142 (int)arena_size, sv_type, (int)body_size,
1143 (int)good_arena_size / (int)body_size));
1145 *root = (void *)start;
1148 /* Where the next body would start: */
1149 char * const next = start + body_size;
1152 /* This is the last body: */
1153 assert(next == end);
1155 *(void **)start = 0;
1159 *(void**) start = (void *)next;
1164 /* grab a new thing from the free list, allocating more if necessary.
1165 The inline version is used for speed in hot routines, and the
1166 function using it serves the rest (unless PURIFY).
1168 #define new_body_inline(xpv, sv_type) \
1170 void ** const r3wt = &PL_body_roots[sv_type]; \
1171 xpv = (PTR_TBL_ENT_t*) (*((void **)(r3wt)) \
1172 ? *((void **)(r3wt)) : Perl_more_bodies(aTHX_ sv_type, \
1173 bodies_by_type[sv_type].body_size,\
1174 bodies_by_type[sv_type].arena_size)); \
1175 *(r3wt) = *(void**)(xpv); \
1181 S_new_body(pTHX_ const svtype sv_type)
1185 new_body_inline(xpv, sv_type);
1191 static const struct body_details fake_rv =
1192 { 0, 0, 0, SVt_IV, FALSE, NONV, NOARENA, 0 };
1195 =for apidoc sv_upgrade
1197 Upgrade an SV to a more complex form. Generally adds a new body type to the
1198 SV, then copies across as much information as possible from the old body.
1199 It croaks if the SV is already in a more complex form than requested. You
1200 generally want to use the C<SvUPGRADE> macro wrapper, which checks the type
1201 before calling C<sv_upgrade>, and hence does not croak. See also
1208 Perl_sv_upgrade(pTHX_ SV *const sv, svtype new_type)
1213 const svtype old_type = SvTYPE(sv);
1214 const struct body_details *new_type_details;
1215 const struct body_details *old_type_details
1216 = bodies_by_type + old_type;
1217 SV *referant = NULL;
1219 PERL_ARGS_ASSERT_SV_UPGRADE;
1221 if (old_type == new_type)
1224 /* This clause was purposefully added ahead of the early return above to
1225 the shared string hackery for (sort {$a <=> $b} keys %hash), with the
1226 inference by Nick I-S that it would fix other troublesome cases. See
1227 changes 7162, 7163 (f130fd4589cf5fbb24149cd4db4137c8326f49c1 and parent)
1229 Given that shared hash key scalars are no longer PVIV, but PV, there is
1230 no longer need to unshare so as to free up the IVX slot for its proper
1231 purpose. So it's safe to move the early return earlier. */
1233 if (new_type > SVt_PVMG && SvIsCOW(sv)) {
1234 sv_force_normal_flags(sv, 0);
1237 old_body = SvANY(sv);
1239 /* Copying structures onto other structures that have been neatly zeroed
1240 has a subtle gotcha. Consider XPVMG
1242 +------+------+------+------+------+-------+-------+
1243 | NV | CUR | LEN | IV | MAGIC | STASH |
1244 +------+------+------+------+------+-------+-------+
1245 0 4 8 12 16 20 24 28
1247 where NVs are aligned to 8 bytes, so that sizeof that structure is
1248 actually 32 bytes long, with 4 bytes of padding at the end:
1250 +------+------+------+------+------+-------+-------+------+
1251 | NV | CUR | LEN | IV | MAGIC | STASH | ??? |
1252 +------+------+------+------+------+-------+-------+------+
1253 0 4 8 12 16 20 24 28 32
1255 so what happens if you allocate memory for this structure:
1257 +------+------+------+------+------+-------+-------+------+------+...
1258 | NV | CUR | LEN | IV | MAGIC | STASH | GP | NAME |
1259 +------+------+------+------+------+-------+-------+------+------+...
1260 0 4 8 12 16 20 24 28 32 36
1262 zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1263 expect, because you copy the area marked ??? onto GP. Now, ??? may have
1264 started out as zero once, but it's quite possible that it isn't. So now,
1265 rather than a nicely zeroed GP, you have it pointing somewhere random.
1268 (In fact, GP ends up pointing at a previous GP structure, because the
1269 principle cause of the padding in XPVMG getting garbage is a copy of
1270 sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob. Right now
1271 this happens to be moot because XPVGV has been re-ordered, with GP
1272 no longer after STASH)
1274 So we are careful and work out the size of used parts of all the
1282 referant = SvRV(sv);
1283 old_type_details = &fake_rv;
1284 if (new_type == SVt_NV)
1285 new_type = SVt_PVNV;
1287 if (new_type < SVt_PVIV) {
1288 new_type = (new_type == SVt_NV)
1289 ? SVt_PVNV : SVt_PVIV;
1294 if (new_type < SVt_PVNV) {
1295 new_type = SVt_PVNV;
1299 assert(new_type > SVt_PV);
1300 assert(SVt_IV < SVt_PV);
1301 assert(SVt_NV < SVt_PV);
1308 /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1309 there's no way that it can be safely upgraded, because perl.c
1310 expects to Safefree(SvANY(PL_mess_sv)) */
1311 assert(sv != PL_mess_sv);
1312 /* This flag bit is used to mean other things in other scalar types.
1313 Given that it only has meaning inside the pad, it shouldn't be set
1314 on anything that can get upgraded. */
1315 assert(!SvPAD_TYPED(sv));
1318 if (UNLIKELY(old_type_details->cant_upgrade))
1319 Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1320 sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
1323 if (UNLIKELY(old_type > new_type))
1324 Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1325 (int)old_type, (int)new_type);
1327 new_type_details = bodies_by_type + new_type;
1329 SvFLAGS(sv) &= ~SVTYPEMASK;
1330 SvFLAGS(sv) |= new_type;
1332 /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1333 the return statements above will have triggered. */
1334 assert (new_type != SVt_NULL);
1337 assert(old_type == SVt_NULL);
1338 SvANY(sv) = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
1342 assert(old_type == SVt_NULL);
1343 SvANY(sv) = new_XNV();
1348 assert(new_type_details->body_size);
1351 assert(new_type_details->arena);
1352 assert(new_type_details->arena_size);
1353 /* This points to the start of the allocated area. */
1354 new_body_inline(new_body, new_type);
1355 Zero(new_body, new_type_details->body_size, char);
1356 new_body = ((char *)new_body) - new_type_details->offset;
1358 /* We always allocated the full length item with PURIFY. To do this
1359 we fake things so that arena is false for all 16 types.. */
1360 new_body = new_NOARENAZ(new_type_details);
1362 SvANY(sv) = new_body;
1363 if (new_type == SVt_PVAV) {
1367 if (old_type_details->body_size) {
1370 /* It will have been zeroed when the new body was allocated.
1371 Lets not write to it, in case it confuses a write-back
1377 #ifndef NODEFAULT_SHAREKEYS
1378 HvSHAREKEYS_on(sv); /* key-sharing on by default */
1380 /* start with PERL_HASH_DEFAULT_HvMAX+1 buckets: */
1381 HvMAX(sv) = PERL_HASH_DEFAULT_HvMAX;
1384 /* SVt_NULL isn't the only thing upgraded to AV or HV.
1385 The target created by newSVrv also is, and it can have magic.
1386 However, it never has SvPVX set.
1388 if (old_type == SVt_IV) {
1390 } else if (old_type >= SVt_PV) {
1391 assert(SvPVX_const(sv) == 0);
1394 if (old_type >= SVt_PVMG) {
1395 SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic);
1396 SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
1398 sv->sv_u.svu_array = NULL; /* or svu_hash */
1403 /* XXX Is this still needed? Was it ever needed? Surely as there is
1404 no route from NV to PVIV, NOK can never be true */
1405 assert(!SvNOKp(sv));
1418 assert(new_type_details->body_size);
1419 /* We always allocated the full length item with PURIFY. To do this
1420 we fake things so that arena is false for all 16 types.. */
1421 if(new_type_details->arena) {
1422 /* This points to the start of the allocated area. */
1423 new_body_inline(new_body, new_type);
1424 Zero(new_body, new_type_details->body_size, char);
1425 new_body = ((char *)new_body) - new_type_details->offset;
1427 new_body = new_NOARENAZ(new_type_details);
1429 SvANY(sv) = new_body;
1431 if (old_type_details->copy) {
1432 /* There is now the potential for an upgrade from something without
1433 an offset (PVNV or PVMG) to something with one (PVCV, PVFM) */
1434 int offset = old_type_details->offset;
1435 int length = old_type_details->copy;
1437 if (new_type_details->offset > old_type_details->offset) {
1438 const int difference
1439 = new_type_details->offset - old_type_details->offset;
1440 offset += difference;
1441 length -= difference;
1443 assert (length >= 0);
1445 Copy((char *)old_body + offset, (char *)new_body + offset, length,
1449 #ifndef NV_ZERO_IS_ALLBITS_ZERO
1450 /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
1451 * correct 0.0 for us. Otherwise, if the old body didn't have an
1452 * NV slot, but the new one does, then we need to initialise the
1453 * freshly created NV slot with whatever the correct bit pattern is
1455 if (old_type_details->zero_nv && !new_type_details->zero_nv
1456 && !isGV_with_GP(sv))
1460 if (UNLIKELY(new_type == SVt_PVIO)) {
1461 IO * const io = MUTABLE_IO(sv);
1462 GV *iogv = gv_fetchpvs("IO::File::", GV_ADD, SVt_PVHV);
1465 /* Clear the stashcache because a new IO could overrule a package
1467 DEBUG_o(Perl_deb(aTHX_ "sv_upgrade clearing PL_stashcache\n"));
1468 hv_clear(PL_stashcache);
1470 SvSTASH_set(io, MUTABLE_HV(SvREFCNT_inc(GvHV(iogv))));
1471 IoPAGE_LEN(sv) = 60;
1473 if (UNLIKELY(new_type == SVt_REGEXP))
1474 sv->sv_u.svu_rx = (regexp *)new_body;
1475 else if (old_type < SVt_PV) {
1476 /* referant will be NULL unless the old type was SVt_IV emulating
1478 sv->sv_u.svu_rv = referant;
1482 Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1483 (unsigned long)new_type);
1486 if (old_type > SVt_IV) {
1490 /* Note that there is an assumption that all bodies of types that
1491 can be upgraded came from arenas. Only the more complex non-
1492 upgradable types are allowed to be directly malloc()ed. */
1493 assert(old_type_details->arena);
1494 del_body((void*)((char*)old_body + old_type_details->offset),
1495 &PL_body_roots[old_type]);
1501 =for apidoc sv_backoff
1503 Remove any string offset. You should normally use the C<SvOOK_off> macro
1510 Perl_sv_backoff(pTHX_ SV *const sv)
1513 const char * const s = SvPVX_const(sv);
1515 PERL_ARGS_ASSERT_SV_BACKOFF;
1516 PERL_UNUSED_CONTEXT;
1519 assert(SvTYPE(sv) != SVt_PVHV);
1520 assert(SvTYPE(sv) != SVt_PVAV);
1522 SvOOK_offset(sv, delta);
1524 SvLEN_set(sv, SvLEN(sv) + delta);
1525 SvPV_set(sv, SvPVX(sv) - delta);
1526 Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1527 SvFLAGS(sv) &= ~SVf_OOK;
1534 Expands the character buffer in the SV. If necessary, uses C<sv_unref> and
1535 upgrades the SV to C<SVt_PV>. Returns a pointer to the character buffer.
1536 Use the C<SvGROW> wrapper instead.
1541 static void S_sv_uncow(pTHX_ SV * const sv, const U32 flags);
1544 Perl_sv_grow(pTHX_ SV *const sv, STRLEN newlen)
1548 PERL_ARGS_ASSERT_SV_GROW;
1552 if (SvTYPE(sv) < SVt_PV) {
1553 sv_upgrade(sv, SVt_PV);
1554 s = SvPVX_mutable(sv);
1556 else if (SvOOK(sv)) { /* pv is offset? */
1558 s = SvPVX_mutable(sv);
1559 if (newlen > SvLEN(sv))
1560 newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1564 if (SvIsCOW(sv)) S_sv_uncow(aTHX_ sv, 0);
1565 s = SvPVX_mutable(sv);
1568 #ifdef PERL_NEW_COPY_ON_WRITE
1569 /* the new COW scheme uses SvPVX(sv)[SvLEN(sv)-1] (if spare)
1570 * to store the COW count. So in general, allocate one more byte than
1571 * asked for, to make it likely this byte is always spare: and thus
1572 * make more strings COW-able.
1573 * If the new size is a big power of two, don't bother: we assume the
1574 * caller wanted a nice 2^N sized block and will be annoyed at getting
1580 #if defined(PERL_USE_MALLOC_SIZE) && defined(Perl_safesysmalloc_size)
1581 #define PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1584 if (newlen > SvLEN(sv)) { /* need more room? */
1585 STRLEN minlen = SvCUR(sv);
1586 minlen += (minlen >> PERL_STRLEN_EXPAND_SHIFT) + 10;
1587 if (newlen < minlen)
1589 #ifndef PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1591 /* Don't round up on the first allocation, as odds are pretty good that
1592 * the initial request is accurate as to what is really needed */
1594 newlen = PERL_STRLEN_ROUNDUP(newlen);
1597 if (SvLEN(sv) && s) {
1598 s = (char*)saferealloc(s, newlen);
1601 s = (char*)safemalloc(newlen);
1602 if (SvPVX_const(sv) && SvCUR(sv)) {
1603 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1607 #ifdef PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1608 /* Do this here, do it once, do it right, and then we will never get
1609 called back into sv_grow() unless there really is some growing
1611 SvLEN_set(sv, Perl_safesysmalloc_size(s));
1613 SvLEN_set(sv, newlen);
1620 =for apidoc sv_setiv
1622 Copies an integer into the given SV, upgrading first if necessary.
1623 Does not handle 'set' magic. See also C<sv_setiv_mg>.
1629 Perl_sv_setiv(pTHX_ SV *const sv, const IV i)
1633 PERL_ARGS_ASSERT_SV_SETIV;
1635 SV_CHECK_THINKFIRST_COW_DROP(sv);
1636 switch (SvTYPE(sv)) {
1639 sv_upgrade(sv, SVt_IV);
1642 sv_upgrade(sv, SVt_PVIV);
1646 if (!isGV_with_GP(sv))
1653 /* diag_listed_as: Can't coerce %s to %s in %s */
1654 Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1658 (void)SvIOK_only(sv); /* validate number */
1664 =for apidoc sv_setiv_mg
1666 Like C<sv_setiv>, but also handles 'set' magic.
1672 Perl_sv_setiv_mg(pTHX_ SV *const sv, const IV i)
1674 PERL_ARGS_ASSERT_SV_SETIV_MG;
1681 =for apidoc sv_setuv
1683 Copies an unsigned integer into the given SV, upgrading first if necessary.
1684 Does not handle 'set' magic. See also C<sv_setuv_mg>.
1690 Perl_sv_setuv(pTHX_ SV *const sv, const UV u)
1692 PERL_ARGS_ASSERT_SV_SETUV;
1694 /* With the if statement to ensure that integers are stored as IVs whenever
1696 u=1.49 s=0.52 cu=72.49 cs=10.64 scripts=270 tests=20865
1699 u=1.35 s=0.47 cu=73.45 cs=11.43 scripts=270 tests=20865
1701 If you wish to remove the following if statement, so that this routine
1702 (and its callers) always return UVs, please benchmark to see what the
1703 effect is. Modern CPUs may be different. Or may not :-)
1705 if (u <= (UV)IV_MAX) {
1706 sv_setiv(sv, (IV)u);
1715 =for apidoc sv_setuv_mg
1717 Like C<sv_setuv>, but also handles 'set' magic.
1723 Perl_sv_setuv_mg(pTHX_ SV *const sv, const UV u)
1725 PERL_ARGS_ASSERT_SV_SETUV_MG;
1732 =for apidoc sv_setnv
1734 Copies a double into the given SV, upgrading first if necessary.
1735 Does not handle 'set' magic. See also C<sv_setnv_mg>.
1741 Perl_sv_setnv(pTHX_ SV *const sv, const NV num)
1745 PERL_ARGS_ASSERT_SV_SETNV;
1747 SV_CHECK_THINKFIRST_COW_DROP(sv);
1748 switch (SvTYPE(sv)) {
1751 sv_upgrade(sv, SVt_NV);
1755 sv_upgrade(sv, SVt_PVNV);
1759 if (!isGV_with_GP(sv))
1766 /* diag_listed_as: Can't coerce %s to %s in %s */
1767 Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1772 (void)SvNOK_only(sv); /* validate number */
1777 =for apidoc sv_setnv_mg
1779 Like C<sv_setnv>, but also handles 'set' magic.
1785 Perl_sv_setnv_mg(pTHX_ SV *const sv, const NV num)
1787 PERL_ARGS_ASSERT_SV_SETNV_MG;
1793 /* Print an "isn't numeric" warning, using a cleaned-up,
1794 * printable version of the offending string
1798 S_not_a_number(pTHX_ SV *const sv)
1805 PERL_ARGS_ASSERT_NOT_A_NUMBER;
1808 dsv = newSVpvs_flags("", SVs_TEMP);
1809 pv = sv_uni_display(dsv, sv, 10, UNI_DISPLAY_ISPRINT);
1812 const char * const limit = tmpbuf + sizeof(tmpbuf) - 8;
1813 /* each *s can expand to 4 chars + "...\0",
1814 i.e. need room for 8 chars */
1816 const char *s = SvPVX_const(sv);
1817 const char * const end = s + SvCUR(sv);
1818 for ( ; s < end && d < limit; s++ ) {
1820 if (! isASCII(ch) && !isPRINT_LC(ch)) {
1824 /* Map to ASCII "equivalent" of Latin1 */
1825 ch = LATIN1_TO_NATIVE(NATIVE_TO_LATIN1(ch) & 127);
1831 else if (ch == '\r') {
1835 else if (ch == '\f') {
1839 else if (ch == '\\') {
1843 else if (ch == '\0') {
1847 else if (isPRINT_LC(ch))
1864 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1865 /* diag_listed_as: Argument "%s" isn't numeric%s */
1866 "Argument \"%s\" isn't numeric in %s", pv,
1869 Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1870 /* diag_listed_as: Argument "%s" isn't numeric%s */
1871 "Argument \"%s\" isn't numeric", pv);
1875 =for apidoc looks_like_number
1877 Test if the content of an SV looks like a number (or is a number).
1878 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1879 non-numeric warning), even if your atof() doesn't grok them. Get-magic is
1886 Perl_looks_like_number(pTHX_ SV *const sv)
1891 PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER;
1893 if (SvPOK(sv) || SvPOKp(sv)) {
1894 sbegin = SvPV_nomg_const(sv, len);
1897 return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1898 return grok_number(sbegin, len, NULL);
1902 S_glob_2number(pTHX_ GV * const gv)
1904 PERL_ARGS_ASSERT_GLOB_2NUMBER;
1906 /* We know that all GVs stringify to something that is not-a-number,
1907 so no need to test that. */
1908 if (ckWARN(WARN_NUMERIC))
1910 SV *const buffer = sv_newmortal();
1911 gv_efullname3(buffer, gv, "*");
1912 not_a_number(buffer);
1914 /* We just want something true to return, so that S_sv_2iuv_common
1915 can tail call us and return true. */
1919 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1920 until proven guilty, assume that things are not that bad... */
1925 As 64 bit platforms often have an NV that doesn't preserve all bits of
1926 an IV (an assumption perl has been based on to date) it becomes necessary
1927 to remove the assumption that the NV always carries enough precision to
1928 recreate the IV whenever needed, and that the NV is the canonical form.
1929 Instead, IV/UV and NV need to be given equal rights. So as to not lose
1930 precision as a side effect of conversion (which would lead to insanity
1931 and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1932 1) to distinguish between IV/UV/NV slots that have a valid conversion cached
1933 where precision was lost, and IV/UV/NV slots that have a valid conversion
1934 which has lost no precision
1935 2) to ensure that if a numeric conversion to one form is requested that
1936 would lose precision, the precise conversion (or differently
1937 imprecise conversion) is also performed and cached, to prevent
1938 requests for different numeric formats on the same SV causing
1939 lossy conversion chains. (lossless conversion chains are perfectly
1944 SvIOKp is true if the IV slot contains a valid value
1945 SvIOK is true only if the IV value is accurate (UV if SvIOK_UV true)
1946 SvNOKp is true if the NV slot contains a valid value
1947 SvNOK is true only if the NV value is accurate
1950 while converting from PV to NV, check to see if converting that NV to an
1951 IV(or UV) would lose accuracy over a direct conversion from PV to
1952 IV(or UV). If it would, cache both conversions, return NV, but mark
1953 SV as IOK NOKp (ie not NOK).
1955 While converting from PV to IV, check to see if converting that IV to an
1956 NV would lose accuracy over a direct conversion from PV to NV. If it
1957 would, cache both conversions, flag similarly.
1959 Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1960 correctly because if IV & NV were set NV *always* overruled.
1961 Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1962 changes - now IV and NV together means that the two are interchangeable:
1963 SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1965 The benefit of this is that operations such as pp_add know that if
1966 SvIOK is true for both left and right operands, then integer addition
1967 can be used instead of floating point (for cases where the result won't
1968 overflow). Before, floating point was always used, which could lead to
1969 loss of precision compared with integer addition.
1971 * making IV and NV equal status should make maths accurate on 64 bit
1973 * may speed up maths somewhat if pp_add and friends start to use
1974 integers when possible instead of fp. (Hopefully the overhead in
1975 looking for SvIOK and checking for overflow will not outweigh the
1976 fp to integer speedup)
1977 * will slow down integer operations (callers of SvIV) on "inaccurate"
1978 values, as the change from SvIOK to SvIOKp will cause a call into
1979 sv_2iv each time rather than a macro access direct to the IV slot
1980 * should speed up number->string conversion on integers as IV is
1981 favoured when IV and NV are equally accurate
1983 ####################################################################
1984 You had better be using SvIOK_notUV if you want an IV for arithmetic:
1985 SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
1986 On the other hand, SvUOK is true iff UV.
1987 ####################################################################
1989 Your mileage will vary depending your CPU's relative fp to integer
1993 #ifndef NV_PRESERVES_UV
1994 # define IS_NUMBER_UNDERFLOW_IV 1
1995 # define IS_NUMBER_UNDERFLOW_UV 2
1996 # define IS_NUMBER_IV_AND_UV 2
1997 # define IS_NUMBER_OVERFLOW_IV 4
1998 # define IS_NUMBER_OVERFLOW_UV 5
2000 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
2002 /* For sv_2nv these three cases are "SvNOK and don't bother casting" */
2004 S_sv_2iuv_non_preserve(pTHX_ SV *const sv
2012 PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE;
2014 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));
2015 if (SvNVX(sv) < (NV)IV_MIN) {
2016 (void)SvIOKp_on(sv);
2018 SvIV_set(sv, IV_MIN);
2019 return IS_NUMBER_UNDERFLOW_IV;
2021 if (SvNVX(sv) > (NV)UV_MAX) {
2022 (void)SvIOKp_on(sv);
2025 SvUV_set(sv, UV_MAX);
2026 return IS_NUMBER_OVERFLOW_UV;
2028 (void)SvIOKp_on(sv);
2030 /* Can't use strtol etc to convert this string. (See truth table in
2032 if (SvNVX(sv) <= (UV)IV_MAX) {
2033 SvIV_set(sv, I_V(SvNVX(sv)));
2034 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2035 SvIOK_on(sv); /* Integer is precise. NOK, IOK */
2037 /* Integer is imprecise. NOK, IOKp */
2039 return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
2042 SvUV_set(sv, U_V(SvNVX(sv)));
2043 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2044 if (SvUVX(sv) == UV_MAX) {
2045 /* As we know that NVs don't preserve UVs, UV_MAX cannot
2046 possibly be preserved by NV. Hence, it must be overflow.
2048 return IS_NUMBER_OVERFLOW_UV;
2050 SvIOK_on(sv); /* Integer is precise. NOK, UOK */
2052 /* Integer is imprecise. NOK, IOKp */
2054 return IS_NUMBER_OVERFLOW_IV;
2056 #endif /* !NV_PRESERVES_UV*/
2059 S_sv_2iuv_common(pTHX_ SV *const sv)
2063 PERL_ARGS_ASSERT_SV_2IUV_COMMON;
2066 /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2067 * without also getting a cached IV/UV from it at the same time
2068 * (ie PV->NV conversion should detect loss of accuracy and cache
2069 * IV or UV at same time to avoid this. */
2070 /* IV-over-UV optimisation - choose to cache IV if possible */
2072 if (SvTYPE(sv) == SVt_NV)
2073 sv_upgrade(sv, SVt_PVNV);
2075 (void)SvIOKp_on(sv); /* Must do this first, to clear any SvOOK */
2076 /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
2077 certainly cast into the IV range at IV_MAX, whereas the correct
2078 answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
2080 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2081 if (Perl_isnan(SvNVX(sv))) {
2087 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2088 SvIV_set(sv, I_V(SvNVX(sv)));
2089 if (SvNVX(sv) == (NV) SvIVX(sv)
2090 #ifndef NV_PRESERVES_UV
2091 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2092 (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2093 /* Don't flag it as "accurately an integer" if the number
2094 came from a (by definition imprecise) NV operation, and
2095 we're outside the range of NV integer precision */
2099 SvIOK_on(sv); /* Can this go wrong with rounding? NWC */
2101 /* scalar has trailing garbage, eg "42a" */
2103 DEBUG_c(PerlIO_printf(Perl_debug_log,
2104 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
2110 /* IV not precise. No need to convert from PV, as NV
2111 conversion would already have cached IV if it detected
2112 that PV->IV would be better than PV->NV->IV
2113 flags already correct - don't set public IOK. */
2114 DEBUG_c(PerlIO_printf(Perl_debug_log,
2115 "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
2120 /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2121 but the cast (NV)IV_MIN rounds to a the value less (more
2122 negative) than IV_MIN which happens to be equal to SvNVX ??
2123 Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2124 NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2125 (NV)UVX == NVX are both true, but the values differ. :-(
2126 Hopefully for 2s complement IV_MIN is something like
2127 0x8000000000000000 which will be exact. NWC */
2130 SvUV_set(sv, U_V(SvNVX(sv)));
2132 (SvNVX(sv) == (NV) SvUVX(sv))
2133 #ifndef NV_PRESERVES_UV
2134 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2135 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2136 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2137 /* Don't flag it as "accurately an integer" if the number
2138 came from a (by definition imprecise) NV operation, and
2139 we're outside the range of NV integer precision */
2145 DEBUG_c(PerlIO_printf(Perl_debug_log,
2146 "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
2152 else if (SvPOKp(sv)) {
2154 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2155 /* We want to avoid a possible problem when we cache an IV/ a UV which
2156 may be later translated to an NV, and the resulting NV is not
2157 the same as the direct translation of the initial string
2158 (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2159 be careful to ensure that the value with the .456 is around if the
2160 NV value is requested in the future).
2162 This means that if we cache such an IV/a UV, we need to cache the
2163 NV as well. Moreover, we trade speed for space, and do not
2164 cache the NV if we are sure it's not needed.
2167 /* SVt_PVNV is one higher than SVt_PVIV, hence this order */
2168 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2169 == IS_NUMBER_IN_UV) {
2170 /* It's definitely an integer, only upgrade to PVIV */
2171 if (SvTYPE(sv) < SVt_PVIV)
2172 sv_upgrade(sv, SVt_PVIV);
2174 } else if (SvTYPE(sv) < SVt_PVNV)
2175 sv_upgrade(sv, SVt_PVNV);
2177 /* If NVs preserve UVs then we only use the UV value if we know that
2178 we aren't going to call atof() below. If NVs don't preserve UVs
2179 then the value returned may have more precision than atof() will
2180 return, even though value isn't perfectly accurate. */
2181 if ((numtype & (IS_NUMBER_IN_UV
2182 #ifdef NV_PRESERVES_UV
2185 )) == IS_NUMBER_IN_UV) {
2186 /* This won't turn off the public IOK flag if it was set above */
2187 (void)SvIOKp_on(sv);
2189 if (!(numtype & IS_NUMBER_NEG)) {
2191 if (value <= (UV)IV_MAX) {
2192 SvIV_set(sv, (IV)value);
2194 /* it didn't overflow, and it was positive. */
2195 SvUV_set(sv, value);
2199 /* 2s complement assumption */
2200 if (value <= (UV)IV_MIN) {
2201 SvIV_set(sv, -(IV)value);
2203 /* Too negative for an IV. This is a double upgrade, but
2204 I'm assuming it will be rare. */
2205 if (SvTYPE(sv) < SVt_PVNV)
2206 sv_upgrade(sv, SVt_PVNV);
2210 SvNV_set(sv, -(NV)value);
2211 SvIV_set(sv, IV_MIN);
2215 /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2216 will be in the previous block to set the IV slot, and the next
2217 block to set the NV slot. So no else here. */
2219 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2220 != IS_NUMBER_IN_UV) {
2221 /* It wasn't an (integer that doesn't overflow the UV). */
2222 SvNV_set(sv, Atof(SvPVX_const(sv)));
2224 if (! numtype && ckWARN(WARN_NUMERIC))
2227 #if defined(USE_LONG_DOUBLE)
2228 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
2229 PTR2UV(sv), SvNVX(sv)));
2231 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"NVgf")\n",
2232 PTR2UV(sv), SvNVX(sv)));
2235 #ifdef NV_PRESERVES_UV
2236 (void)SvIOKp_on(sv);
2238 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2239 SvIV_set(sv, I_V(SvNVX(sv)));
2240 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2243 NOOP; /* Integer is imprecise. NOK, IOKp */
2245 /* UV will not work better than IV */
2247 if (SvNVX(sv) > (NV)UV_MAX) {
2249 /* Integer is inaccurate. NOK, IOKp, is UV */
2250 SvUV_set(sv, UV_MAX);
2252 SvUV_set(sv, U_V(SvNVX(sv)));
2253 /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2254 NV preservse UV so can do correct comparison. */
2255 if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2258 NOOP; /* Integer is imprecise. NOK, IOKp, is UV */
2263 #else /* NV_PRESERVES_UV */
2264 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2265 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2266 /* The IV/UV slot will have been set from value returned by
2267 grok_number above. The NV slot has just been set using
2270 assert (SvIOKp(sv));
2272 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2273 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2274 /* Small enough to preserve all bits. */
2275 (void)SvIOKp_on(sv);
2277 SvIV_set(sv, I_V(SvNVX(sv)));
2278 if ((NV)(SvIVX(sv)) == SvNVX(sv))
2280 /* Assumption: first non-preserved integer is < IV_MAX,
2281 this NV is in the preserved range, therefore: */
2282 if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2284 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);
2288 0 0 already failed to read UV.
2289 0 1 already failed to read UV.
2290 1 0 you won't get here in this case. IV/UV
2291 slot set, public IOK, Atof() unneeded.
2292 1 1 already read UV.
2293 so there's no point in sv_2iuv_non_preserve() attempting
2294 to use atol, strtol, strtoul etc. */
2296 sv_2iuv_non_preserve (sv, numtype);
2298 sv_2iuv_non_preserve (sv);
2302 #endif /* NV_PRESERVES_UV */
2303 /* It might be more code efficient to go through the entire logic above
2304 and conditionally set with SvIOKp_on() rather than SvIOK(), but it
2305 gets complex and potentially buggy, so more programmer efficient
2306 to do it this way, by turning off the public flags: */
2308 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2312 if (isGV_with_GP(sv))
2313 return glob_2number(MUTABLE_GV(sv));
2315 if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2317 if (SvTYPE(sv) < SVt_IV)
2318 /* Typically the caller expects that sv_any is not NULL now. */
2319 sv_upgrade(sv, SVt_IV);
2320 /* Return 0 from the caller. */
2327 =for apidoc sv_2iv_flags
2329 Return the integer value of an SV, doing any necessary string
2330 conversion. If flags includes SV_GMAGIC, does an mg_get() first.
2331 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2337 Perl_sv_2iv_flags(pTHX_ SV *const sv, const I32 flags)
2341 PERL_ARGS_ASSERT_SV_2IV_FLAGS;
2343 assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2344 && SvTYPE(sv) != SVt_PVFM);
2346 if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2352 if (flags & SV_SKIP_OVERLOAD)
2354 tmpstr = AMG_CALLunary(sv, numer_amg);
2355 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2356 return SvIV(tmpstr);
2359 return PTR2IV(SvRV(sv));
2362 if (SvVALID(sv) || isREGEXP(sv)) {
2363 /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2364 the same flag bit as SVf_IVisUV, so must not let them cache IVs.
2365 In practice they are extremely unlikely to actually get anywhere
2366 accessible by user Perl code - the only way that I'm aware of is when
2367 a constant subroutine which is used as the second argument to index.
2369 Regexps have no SvIVX and SvNVX fields.
2371 assert(isREGEXP(sv) || SvPOKp(sv));
2374 const char * const ptr =
2375 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2377 = grok_number(ptr, SvCUR(sv), &value);
2379 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2380 == IS_NUMBER_IN_UV) {
2381 /* It's definitely an integer */
2382 if (numtype & IS_NUMBER_NEG) {
2383 if (value < (UV)IV_MIN)
2386 if (value < (UV)IV_MAX)
2391 if (ckWARN(WARN_NUMERIC))
2394 return I_V(Atof(ptr));
2398 if (SvTHINKFIRST(sv)) {
2399 #ifdef PERL_OLD_COPY_ON_WRITE
2401 sv_force_normal_flags(sv, 0);
2404 if (SvREADONLY(sv) && !SvOK(sv)) {
2405 if (ckWARN(WARN_UNINITIALIZED))
2412 if (S_sv_2iuv_common(aTHX_ sv))
2416 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2417 PTR2UV(sv),SvIVX(sv)));
2418 return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2422 =for apidoc sv_2uv_flags
2424 Return the unsigned integer value of an SV, doing any necessary string
2425 conversion. If flags includes SV_GMAGIC, does an mg_get() first.
2426 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2432 Perl_sv_2uv_flags(pTHX_ SV *const sv, const I32 flags)
2436 PERL_ARGS_ASSERT_SV_2UV_FLAGS;
2438 if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2444 if (flags & SV_SKIP_OVERLOAD)
2446 tmpstr = AMG_CALLunary(sv, numer_amg);
2447 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2448 return SvUV(tmpstr);
2451 return PTR2UV(SvRV(sv));
2454 if (SvVALID(sv) || isREGEXP(sv)) {
2455 /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2456 the same flag bit as SVf_IVisUV, so must not let them cache IVs.
2457 Regexps have no SvIVX and SvNVX fields. */
2458 assert(isREGEXP(sv) || SvPOKp(sv));
2461 const char * const ptr =
2462 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2464 = grok_number(ptr, SvCUR(sv), &value);
2466 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2467 == IS_NUMBER_IN_UV) {
2468 /* It's definitely an integer */
2469 if (!(numtype & IS_NUMBER_NEG))
2473 if (ckWARN(WARN_NUMERIC))
2476 return U_V(Atof(ptr));
2480 if (SvTHINKFIRST(sv)) {
2481 #ifdef PERL_OLD_COPY_ON_WRITE
2483 sv_force_normal_flags(sv, 0);
2486 if (SvREADONLY(sv) && !SvOK(sv)) {
2487 if (ckWARN(WARN_UNINITIALIZED))
2494 if (S_sv_2iuv_common(aTHX_ sv))
2498 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2499 PTR2UV(sv),SvUVX(sv)));
2500 return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2504 =for apidoc sv_2nv_flags
2506 Return the num value of an SV, doing any necessary string or integer
2507 conversion. If flags includes SV_GMAGIC, does an mg_get() first.
2508 Normally used via the C<SvNV(sv)> and C<SvNVx(sv)> macros.
2514 Perl_sv_2nv_flags(pTHX_ SV *const sv, const I32 flags)
2518 PERL_ARGS_ASSERT_SV_2NV_FLAGS;
2520 assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2521 && SvTYPE(sv) != SVt_PVFM);
2522 if (SvGMAGICAL(sv) || SvVALID(sv) || isREGEXP(sv)) {
2523 /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2524 the same flag bit as SVf_IVisUV, so must not let them cache NVs.
2525 Regexps have no SvIVX and SvNVX fields. */
2527 if (flags & SV_GMAGIC)
2531 if (SvPOKp(sv) && !SvIOKp(sv)) {
2532 ptr = SvPVX_const(sv);
2534 if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2535 !grok_number(ptr, SvCUR(sv), NULL))
2541 return (NV)SvUVX(sv);
2543 return (NV)SvIVX(sv);
2549 ptr = RX_WRAPPED((REGEXP *)sv);
2552 assert(SvTYPE(sv) >= SVt_PVMG);
2553 /* This falls through to the report_uninit near the end of the
2555 } else if (SvTHINKFIRST(sv)) {
2560 if (flags & SV_SKIP_OVERLOAD)
2562 tmpstr = AMG_CALLunary(sv, numer_amg);
2563 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2564 return SvNV(tmpstr);
2567 return PTR2NV(SvRV(sv));
2569 #ifdef PERL_OLD_COPY_ON_WRITE
2571 sv_force_normal_flags(sv, 0);
2574 if (SvREADONLY(sv) && !SvOK(sv)) {
2575 if (ckWARN(WARN_UNINITIALIZED))
2580 if (SvTYPE(sv) < SVt_NV) {
2581 /* The logic to use SVt_PVNV if necessary is in sv_upgrade. */
2582 sv_upgrade(sv, SVt_NV);
2583 #ifdef USE_LONG_DOUBLE
2585 STORE_NUMERIC_LOCAL_SET_STANDARD();
2586 PerlIO_printf(Perl_debug_log,
2587 "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2588 PTR2UV(sv), SvNVX(sv));
2589 RESTORE_NUMERIC_LOCAL();
2593 STORE_NUMERIC_LOCAL_SET_STANDARD();
2594 PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%"NVgf")\n",
2595 PTR2UV(sv), SvNVX(sv));
2596 RESTORE_NUMERIC_LOCAL();
2600 else if (SvTYPE(sv) < SVt_PVNV)
2601 sv_upgrade(sv, SVt_PVNV);
2606 SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2607 #ifdef NV_PRESERVES_UV
2613 /* Only set the public NV OK flag if this NV preserves the IV */
2614 /* Check it's not 0xFFFFFFFFFFFFFFFF */
2616 SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2617 : (SvIVX(sv) == I_V(SvNVX(sv))))
2623 else if (SvPOKp(sv)) {
2625 const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2626 if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2628 #ifdef NV_PRESERVES_UV
2629 if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2630 == IS_NUMBER_IN_UV) {
2631 /* It's definitely an integer */
2632 SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2634 SvNV_set(sv, Atof(SvPVX_const(sv)));
2640 SvNV_set(sv, Atof(SvPVX_const(sv)));
2641 /* Only set the public NV OK flag if this NV preserves the value in
2642 the PV at least as well as an IV/UV would.
2643 Not sure how to do this 100% reliably. */
2644 /* if that shift count is out of range then Configure's test is
2645 wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2647 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2648 U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2649 SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2650 } else if (!(numtype & IS_NUMBER_IN_UV)) {
2651 /* Can't use strtol etc to convert this string, so don't try.
2652 sv_2iv and sv_2uv will use the NV to convert, not the PV. */
2655 /* value has been set. It may not be precise. */
2656 if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2657 /* 2s complement assumption for (UV)IV_MIN */
2658 SvNOK_on(sv); /* Integer is too negative. */
2663 if (numtype & IS_NUMBER_NEG) {
2664 SvIV_set(sv, -(IV)value);
2665 } else if (value <= (UV)IV_MAX) {
2666 SvIV_set(sv, (IV)value);
2668 SvUV_set(sv, value);
2672 if (numtype & IS_NUMBER_NOT_INT) {
2673 /* I believe that even if the original PV had decimals,
2674 they are lost beyond the limit of the FP precision.
2675 However, neither is canonical, so both only get p
2676 flags. NWC, 2000/11/25 */
2677 /* Both already have p flags, so do nothing */
2679 const NV nv = SvNVX(sv);
2680 if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2681 if (SvIVX(sv) == I_V(nv)) {
2684 /* It had no "." so it must be integer. */
2688 /* between IV_MAX and NV(UV_MAX).
2689 Could be slightly > UV_MAX */
2691 if (numtype & IS_NUMBER_NOT_INT) {
2692 /* UV and NV both imprecise. */
2694 const UV nv_as_uv = U_V(nv);
2696 if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2705 /* It might be more code efficient to go through the entire logic above
2706 and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2707 gets complex and potentially buggy, so more programmer efficient
2708 to do it this way, by turning off the public flags: */
2710 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2711 #endif /* NV_PRESERVES_UV */
2714 if (isGV_with_GP(sv)) {
2715 glob_2number(MUTABLE_GV(sv));
2719 if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2721 assert (SvTYPE(sv) >= SVt_NV);
2722 /* Typically the caller expects that sv_any is not NULL now. */
2723 /* XXX Ilya implies that this is a bug in callers that assume this
2724 and ideally should be fixed. */
2727 #if defined(USE_LONG_DOUBLE)
2729 STORE_NUMERIC_LOCAL_SET_STANDARD();
2730 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2731 PTR2UV(sv), SvNVX(sv));
2732 RESTORE_NUMERIC_LOCAL();
2736 STORE_NUMERIC_LOCAL_SET_STANDARD();
2737 PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%"NVgf")\n",
2738 PTR2UV(sv), SvNVX(sv));
2739 RESTORE_NUMERIC_LOCAL();
2748 Return an SV with the numeric value of the source SV, doing any necessary
2749 reference or overload conversion. You must use the C<SvNUM(sv)> macro to
2750 access this function.
2756 Perl_sv_2num(pTHX_ SV *const sv)
2758 PERL_ARGS_ASSERT_SV_2NUM;
2763 SV * const tmpsv = AMG_CALLunary(sv, numer_amg);
2764 TAINT_IF(tmpsv && SvTAINTED(tmpsv));
2765 if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2766 return sv_2num(tmpsv);
2768 return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2771 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2772 * UV as a string towards the end of buf, and return pointers to start and
2775 * We assume that buf is at least TYPE_CHARS(UV) long.
2779 S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
2781 char *ptr = buf + TYPE_CHARS(UV);
2782 char * const ebuf = ptr;
2785 PERL_ARGS_ASSERT_UIV_2BUF;
2797 *--ptr = '0' + (char)(uv % 10);
2806 =for apidoc sv_2pv_flags
2808 Returns a pointer to the string value of an SV, and sets *lp to its length.
2809 If flags includes SV_GMAGIC, does an mg_get() first. Coerces sv to a
2810 string if necessary. Normally invoked via the C<SvPV_flags> macro.
2811 C<sv_2pv()> and C<sv_2pv_nomg> usually end up here too.
2817 Perl_sv_2pv_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
2822 PERL_ARGS_ASSERT_SV_2PV_FLAGS;
2824 assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2825 && SvTYPE(sv) != SVt_PVFM);
2826 if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2831 if (flags & SV_SKIP_OVERLOAD)
2833 tmpstr = AMG_CALLunary(sv, string_amg);
2834 TAINT_IF(tmpstr && SvTAINTED(tmpstr));
2835 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2837 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2841 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2842 if (flags & SV_CONST_RETURN) {
2843 pv = (char *) SvPVX_const(tmpstr);
2845 pv = (flags & SV_MUTABLE_RETURN)
2846 ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2849 *lp = SvCUR(tmpstr);
2851 pv = sv_2pv_flags(tmpstr, lp, flags);
2864 SV *const referent = SvRV(sv);
2868 retval = buffer = savepvn("NULLREF", len);
2869 } else if (SvTYPE(referent) == SVt_REGEXP &&
2870 (!(PL_curcop->cop_hints & HINT_NO_AMAGIC) ||
2871 amagic_is_enabled(string_amg))) {
2872 REGEXP * const re = (REGEXP *)MUTABLE_PTR(referent);
2876 /* If the regex is UTF-8 we want the containing scalar to
2877 have an UTF-8 flag too */
2884 *lp = RX_WRAPLEN(re);
2886 return RX_WRAPPED(re);
2888 const char *const typestr = sv_reftype(referent, 0);
2889 const STRLEN typelen = strlen(typestr);
2890 UV addr = PTR2UV(referent);
2891 const char *stashname = NULL;
2892 STRLEN stashnamelen = 0; /* hush, gcc */
2893 const char *buffer_end;
2895 if (SvOBJECT(referent)) {
2896 const HEK *const name = HvNAME_HEK(SvSTASH(referent));
2899 stashname = HEK_KEY(name);
2900 stashnamelen = HEK_LEN(name);
2902 if (HEK_UTF8(name)) {
2908 stashname = "__ANON__";
2911 len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
2912 + 2 * sizeof(UV) + 2 /* )\0 */;
2914 len = typelen + 3 /* (0x */
2915 + 2 * sizeof(UV) + 2 /* )\0 */;
2918 Newx(buffer, len, char);
2919 buffer_end = retval = buffer + len;
2921 /* Working backwards */
2925 *--retval = PL_hexdigit[addr & 15];
2926 } while (addr >>= 4);
2932 memcpy(retval, typestr, typelen);
2936 retval -= stashnamelen;
2937 memcpy(retval, stashname, stashnamelen);
2939 /* retval may not necessarily have reached the start of the
2941 assert (retval >= buffer);
2943 len = buffer_end - retval - 1; /* -1 for that \0 */
2955 if (flags & SV_MUTABLE_RETURN)
2956 return SvPVX_mutable(sv);
2957 if (flags & SV_CONST_RETURN)
2958 return (char *)SvPVX_const(sv);
2963 /* I'm assuming that if both IV and NV are equally valid then
2964 converting the IV is going to be more efficient */
2965 const U32 isUIOK = SvIsUV(sv);
2966 char buf[TYPE_CHARS(UV)];
2970 if (SvTYPE(sv) < SVt_PVIV)
2971 sv_upgrade(sv, SVt_PVIV);
2972 ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
2974 /* inlined from sv_setpvn */
2975 s = SvGROW_mutable(sv, len + 1);
2976 Move(ptr, s, len, char);
2981 else if (SvNOK(sv)) {
2982 if (SvTYPE(sv) < SVt_PVNV)
2983 sv_upgrade(sv, SVt_PVNV);
2984 if (SvNVX(sv) == 0.0) {
2985 s = SvGROW_mutable(sv, 2);
2990 /* The +20 is pure guesswork. Configure test needed. --jhi */
2991 s = SvGROW_mutable(sv, NV_DIG + 20);
2992 /* some Xenix systems wipe out errno here */
2994 #ifndef USE_LOCALE_NUMERIC
2995 PERL_UNUSED_RESULT(Gconvert(SvNVX(sv), NV_DIG, 0, s));
2999 DECLARE_STORE_LC_NUMERIC_SET_TO_NEEDED();
3000 PERL_UNUSED_RESULT(Gconvert(SvNVX(sv), NV_DIG, 0, s));
3002 /* If the radix character is UTF-8, and actually is in the
3003 * output, turn on the UTF-8 flag for the scalar */
3004 if (PL_numeric_local
3005 && PL_numeric_radix_sv && SvUTF8(PL_numeric_radix_sv)
3006 && instr(s, SvPVX_const(PL_numeric_radix_sv)))
3010 RESTORE_LC_NUMERIC();
3013 /* We don't call SvPOK_on(), because it may come to pass that the
3014 * locale changes so that the stringification we just did is no
3015 * longer correct. We will have to re-stringify every time it is
3022 else if (isGV_with_GP(sv)) {
3023 GV *const gv = MUTABLE_GV(sv);
3024 SV *const buffer = sv_newmortal();
3026 gv_efullname3(buffer, gv, "*");
3028 assert(SvPOK(buffer));
3032 *lp = SvCUR(buffer);
3033 return SvPVX(buffer);
3035 else if (isREGEXP(sv)) {
3036 if (lp) *lp = RX_WRAPLEN((REGEXP *)sv);
3037 return RX_WRAPPED((REGEXP *)sv);
3042 if (flags & SV_UNDEF_RETURNS_NULL)
3044 if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
3046 /* Typically the caller expects that sv_any is not NULL now. */
3047 if (!SvREADONLY(sv) && SvTYPE(sv) < SVt_PV)
3048 sv_upgrade(sv, SVt_PV);
3053 const STRLEN len = s - SvPVX_const(sv);
3058 DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3059 PTR2UV(sv),SvPVX_const(sv)));
3060 if (flags & SV_CONST_RETURN)
3061 return (char *)SvPVX_const(sv);
3062 if (flags & SV_MUTABLE_RETURN)
3063 return SvPVX_mutable(sv);
3068 =for apidoc sv_copypv
3070 Copies a stringified representation of the source SV into the
3071 destination SV. Automatically performs any necessary mg_get and
3072 coercion of numeric values into strings. Guaranteed to preserve
3073 UTF8 flag even from overloaded objects. Similar in nature to
3074 sv_2pv[_flags] but operates directly on an SV instead of just the
3075 string. Mostly uses sv_2pv_flags to do its work, except when that
3076 would lose the UTF-8'ness of the PV.
3078 =for apidoc sv_copypv_nomg
3080 Like sv_copypv, but doesn't invoke get magic first.
3082 =for apidoc sv_copypv_flags
3084 Implementation of sv_copypv and sv_copypv_nomg. Calls get magic iff flags
3091 Perl_sv_copypv(pTHX_ SV *const dsv, SV *const ssv)
3093 PERL_ARGS_ASSERT_SV_COPYPV;
3095 sv_copypv_flags(dsv, ssv, 0);
3099 Perl_sv_copypv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
3104 PERL_ARGS_ASSERT_SV_COPYPV_FLAGS;
3106 if ((flags & SV_GMAGIC) && SvGMAGICAL(ssv))
3108 s = SvPV_nomg_const(ssv,len);
3109 sv_setpvn(dsv,s,len);
3117 =for apidoc sv_2pvbyte
3119 Return a pointer to the byte-encoded representation of the SV, and set *lp
3120 to its length. May cause the SV to be downgraded from UTF-8 as a
3123 Usually accessed via the C<SvPVbyte> macro.
3129 Perl_sv_2pvbyte(pTHX_ SV *sv, STRLEN *const lp)
3131 PERL_ARGS_ASSERT_SV_2PVBYTE;
3134 if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3135 || isGV_with_GP(sv) || SvROK(sv)) {
3136 SV *sv2 = sv_newmortal();
3137 sv_copypv_nomg(sv2,sv);
3140 sv_utf8_downgrade(sv,0);
3141 return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3145 =for apidoc sv_2pvutf8
3147 Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
3148 to its length. May cause the SV to be upgraded to UTF-8 as a side-effect.
3150 Usually accessed via the C<SvPVutf8> macro.
3156 Perl_sv_2pvutf8(pTHX_ SV *sv, STRLEN *const lp)
3158 PERL_ARGS_ASSERT_SV_2PVUTF8;
3160 if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3161 || isGV_with_GP(sv) || SvROK(sv))
3162 sv = sv_mortalcopy(sv);
3165 sv_utf8_upgrade_nomg(sv);
3166 return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3171 =for apidoc sv_2bool
3173 This macro is only used by sv_true() or its macro equivalent, and only if
3174 the latter's argument is neither SvPOK, SvIOK nor SvNOK.
3175 It calls sv_2bool_flags with the SV_GMAGIC flag.
3177 =for apidoc sv_2bool_flags
3179 This function is only used by sv_true() and friends, and only if
3180 the latter's argument is neither SvPOK, SvIOK nor SvNOK. If the flags
3181 contain SV_GMAGIC, then it does an mg_get() first.
3188 Perl_sv_2bool_flags(pTHX_ SV *sv, I32 flags)
3192 PERL_ARGS_ASSERT_SV_2BOOL_FLAGS;
3195 if(flags & SV_GMAGIC) SvGETMAGIC(sv);
3201 SV * const tmpsv = AMG_CALLunary(sv, bool__amg);
3202 if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv)))) {
3205 if(SvGMAGICAL(sv)) {
3207 goto restart; /* call sv_2bool */
3209 /* expanded SvTRUE_common(sv, (flags = 0, goto restart)) */
3210 else if(!SvOK(sv)) {
3213 else if(SvPOK(sv)) {
3214 svb = SvPVXtrue(sv);
3216 else if((SvFLAGS(sv) & (SVf_IOK|SVf_NOK))) {
3217 svb = (SvIOK(sv) && SvIVX(sv) != 0)
3218 || (SvNOK(sv) && SvNVX(sv) != 0.0);
3222 goto restart; /* call sv_2bool_nomg */
3227 return SvRV(sv) != 0;
3231 RX_WRAPLEN(sv) > 1 || (RX_WRAPLEN(sv) && *RX_WRAPPED(sv) != '0');
3232 return SvTRUE_common(sv, isGV_with_GP(sv) ? 1 : 0);
3236 =for apidoc sv_utf8_upgrade
3238 Converts the PV of an SV to its UTF-8-encoded form.
3239 Forces the SV to string form if it is not already.
3240 Will C<mg_get> on C<sv> if appropriate.
3241 Always sets the SvUTF8 flag to avoid future validity checks even
3242 if the whole string is the same in UTF-8 as not.
3243 Returns the number of bytes in the converted string
3245 This is not a general purpose byte encoding to Unicode interface:
3246 use the Encode extension for that.
3248 =for apidoc sv_utf8_upgrade_nomg
3250 Like sv_utf8_upgrade, but doesn't do magic on C<sv>.
3252 =for apidoc sv_utf8_upgrade_flags
3254 Converts the PV of an SV to its UTF-8-encoded form.
3255 Forces the SV to string form if it is not already.
3256 Always sets the SvUTF8 flag to avoid future validity checks even
3257 if all the bytes are invariant in UTF-8.
3258 If C<flags> has C<SV_GMAGIC> bit set,
3259 will C<mg_get> on C<sv> if appropriate, else not.
3261 If C<flags> has SV_FORCE_UTF8_UPGRADE set, this function assumes that the PV
3262 will expand when converted to UTF-8, and skips the extra work of checking for
3263 that. Typically this flag is used by a routine that has already parsed the
3264 string and found such characters, and passes this information on so that the
3265 work doesn't have to be repeated.
3267 Returns the number of bytes in the converted string.
3269 This is not a general purpose byte encoding to Unicode interface:
3270 use the Encode extension for that.
3272 =for apidoc sv_utf8_upgrade_flags_grow
3274 Like sv_utf8_upgrade_flags, but has an additional parameter C<extra>, which is
3275 the number of unused bytes the string of 'sv' is guaranteed to have free after
3276 it upon return. This allows the caller to reserve extra space that it intends
3277 to fill, to avoid extra grows.
3279 C<sv_utf8_upgrade>, C<sv_utf8_upgrade_nomg>, and C<sv_utf8_upgrade_flags>
3280 are implemented in terms of this function.
3282 Returns the number of bytes in the converted string (not including the spares).
3286 (One might think that the calling routine could pass in the position of the
3287 first variant character when it has set SV_FORCE_UTF8_UPGRADE, so it wouldn't
3288 have to be found again. But that is not the case, because typically when the
3289 caller is likely to use this flag, it won't be calling this routine unless it
3290 finds something that won't fit into a byte. Otherwise it tries to not upgrade
3291 and just use bytes. But some things that do fit into a byte are variants in
3292 utf8, and the caller may not have been keeping track of these.)
3294 If the routine itself changes the string, it adds a trailing C<NUL>. Such a
3295 C<NUL> isn't guaranteed due to having other routines do the work in some input
3296 cases, or if the input is already flagged as being in utf8.
3298 The speed of this could perhaps be improved for many cases if someone wanted to
3299 write a fast function that counts the number of variant characters in a string,
3300 especially if it could return the position of the first one.
3305 Perl_sv_utf8_upgrade_flags_grow(pTHX_ SV *const sv, const I32 flags, STRLEN extra)
3309 PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
3311 if (sv == &PL_sv_undef)
3313 if (!SvPOK_nog(sv)) {
3315 if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3316 (void) sv_2pv_flags(sv,&len, flags);
3318 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3322 (void) SvPV_force_flags(sv,len,flags & SV_GMAGIC);
3327 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3332 S_sv_uncow(aTHX_ sv, 0);
3335 if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING)) {
3336 sv_recode_to_utf8(sv, PL_encoding);
3337 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3341 if (SvCUR(sv) == 0) {
3342 if (extra) SvGROW(sv, extra);
3343 } else { /* Assume Latin-1/EBCDIC */
3344 /* This function could be much more efficient if we
3345 * had a FLAG in SVs to signal if there are any variant
3346 * chars in the PV. Given that there isn't such a flag
3347 * make the loop as fast as possible (although there are certainly ways
3348 * to speed this up, eg. through vectorization) */
3349 U8 * s = (U8 *) SvPVX_const(sv);
3350 U8 * e = (U8 *) SvEND(sv);
3352 STRLEN two_byte_count = 0;
3354 if (flags & SV_FORCE_UTF8_UPGRADE) goto must_be_utf8;
3356 /* See if really will need to convert to utf8. We mustn't rely on our
3357 * incoming SV being well formed and having a trailing '\0', as certain
3358 * code in pp_formline can send us partially built SVs. */
3362 if (NATIVE_BYTE_IS_INVARIANT(ch)) continue;
3364 t--; /* t already incremented; re-point to first variant */
3369 /* utf8 conversion not needed because all are invariants. Mark as
3370 * UTF-8 even if no variant - saves scanning loop */
3372 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3377 /* Here, the string should be converted to utf8, either because of an
3378 * input flag (two_byte_count = 0), or because a character that
3379 * requires 2 bytes was found (two_byte_count = 1). t points either to
3380 * the beginning of the string (if we didn't examine anything), or to
3381 * the first variant. In either case, everything from s to t - 1 will
3382 * occupy only 1 byte each on output.
3384 * There are two main ways to convert. One is to create a new string
3385 * and go through the input starting from the beginning, appending each
3386 * converted value onto the new string as we go along. It's probably
3387 * best to allocate enough space in the string for the worst possible
3388 * case rather than possibly running out of space and having to
3389 * reallocate and then copy what we've done so far. Since everything
3390 * from s to t - 1 is invariant, the destination can be initialized
3391 * with these using a fast memory copy
3393 * The other way is to figure out exactly how big the string should be
3394 * by parsing the entire input. Then you don't have to make it big
3395 * enough to handle the worst possible case, and more importantly, if
3396 * the string you already have is large enough, you don't have to
3397 * allocate a new string, you can copy the last character in the input
3398 * string to the final position(s) that will be occupied by the
3399 * converted string and go backwards, stopping at t, since everything
3400 * before that is invariant.
3402 * There are advantages and disadvantages to each method.
3404 * In the first method, we can allocate a new string, do the memory
3405 * copy from the s to t - 1, and then proceed through the rest of the
3406 * string byte-by-byte.
3408 * In the second method, we proceed through the rest of the input
3409 * string just calculating how big the converted string will be. Then
3410 * there are two cases:
3411 * 1) if the string has enough extra space to handle the converted
3412 * value. We go backwards through the string, converting until we
3413 * get to the position we are at now, and then stop. If this
3414 * position is far enough along in the string, this method is
3415 * faster than the other method. If the memory copy were the same
3416 * speed as the byte-by-byte loop, that position would be about
3417 * half-way, as at the half-way mark, parsing to the end and back
3418 * is one complete string's parse, the same amount as starting
3419 * over and going all the way through. Actually, it would be
3420 * somewhat less than half-way, as it's faster to just count bytes
3421 * than to also copy, and we don't have the overhead of allocating
3422 * a new string, changing the scalar to use it, and freeing the
3423 * existing one. But if the memory copy is fast, the break-even
3424 * point is somewhere after half way. The counting loop could be
3425 * sped up by vectorization, etc, to move the break-even point
3426 * further towards the beginning.
3427 * 2) if the string doesn't have enough space to handle the converted
3428 * value. A new string will have to be allocated, and one might
3429 * as well, given that, start from the beginning doing the first
3430 * method. We've spent extra time parsing the string and in
3431 * exchange all we've gotten is that we know precisely how big to
3432 * make the new one. Perl is more optimized for time than space,
3433 * so this case is a loser.
3434 * So what I've decided to do is not use the 2nd method unless it is
3435 * guaranteed that a new string won't have to be allocated, assuming
3436 * the worst case. I also decided not to put any more conditions on it
3437 * than this, for now. It seems likely that, since the worst case is
3438 * twice as big as the unknown portion of the string (plus 1), we won't
3439 * be guaranteed enough space, causing us to go to the first method,
3440 * unless the string is short, or the first variant character is near
3441 * the end of it. In either of these cases, it seems best to use the
3442 * 2nd method. The only circumstance I can think of where this would
3443 * be really slower is if the string had once had much more data in it
3444 * than it does now, but there is still a substantial amount in it */
3447 STRLEN invariant_head = t - s;
3448 STRLEN size = invariant_head + (e - t) * 2 + 1 + extra;
3449 if (SvLEN(sv) < size) {
3451 /* Here, have decided to allocate a new string */
3456 Newx(dst, size, U8);
3458 /* If no known invariants at the beginning of the input string,
3459 * set so starts from there. Otherwise, can use memory copy to
3460 * get up to where we are now, and then start from here */
3462 if (invariant_head <= 0) {
3465 Copy(s, dst, invariant_head, char);
3466 d = dst + invariant_head;
3470 append_utf8_from_native_byte(*t, &d);
3474 SvPV_free(sv); /* No longer using pre-existing string */
3475 SvPV_set(sv, (char*)dst);
3476 SvCUR_set(sv, d - dst);
3477 SvLEN_set(sv, size);
3480 /* Here, have decided to get the exact size of the string.
3481 * Currently this happens only when we know that there is
3482 * guaranteed enough space to fit the converted string, so
3483 * don't have to worry about growing. If two_byte_count is 0,
3484 * then t points to the first byte of the string which hasn't
3485 * been examined yet. Otherwise two_byte_count is 1, and t
3486 * points to the first byte in the string that will expand to
3487 * two. Depending on this, start examining at t or 1 after t.
3490 U8 *d = t + two_byte_count;
3493 /* Count up the remaining bytes that expand to two */
3496 const U8 chr = *d++;
3497 if (! NATIVE_BYTE_IS_INVARIANT(chr)) two_byte_count++;
3500 /* The string will expand by just the number of bytes that
3501 * occupy two positions. But we are one afterwards because of
3502 * the increment just above. This is the place to put the
3503 * trailing NUL, and to set the length before we decrement */
3505 d += two_byte_count;
3506 SvCUR_set(sv, d - s);
3510 /* Having decremented d, it points to the position to put the
3511 * very last byte of the expanded string. Go backwards through
3512 * the string, copying and expanding as we go, stopping when we
3513 * get to the part that is invariant the rest of the way down */
3517 if (NATIVE_BYTE_IS_INVARIANT(*e)) {
3520 *d-- = UTF8_EIGHT_BIT_LO(*e);
3521 *d-- = UTF8_EIGHT_BIT_HI(*e);
3527 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3528 /* Update pos. We do it at the end rather than during
3529 * the upgrade, to avoid slowing down the common case
3530 * (upgrade without pos).
3531 * pos can be stored as either bytes or characters. Since
3532 * this was previously a byte string we can just turn off
3533 * the bytes flag. */
3534 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3536 mg->mg_flags &= ~MGf_BYTES;
3538 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3539 magic_setutf8(sv,mg); /* clear UTF8 cache */
3544 /* Mark as UTF-8 even if no variant - saves scanning loop */
3550 =for apidoc sv_utf8_downgrade
3552 Attempts to convert the PV of an SV from characters to bytes.
3553 If the PV contains a character that cannot fit
3554 in a byte, this conversion will fail;
3555 in this case, either returns false or, if C<fail_ok> is not
3558 This is not a general purpose Unicode to byte encoding interface:
3559 use the Encode extension for that.
3565 Perl_sv_utf8_downgrade(pTHX_ SV *const sv, const bool fail_ok)
3569 PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
3571 if (SvPOKp(sv) && SvUTF8(sv)) {
3575 int mg_flags = SV_GMAGIC;
3578 S_sv_uncow(aTHX_ sv, 0);
3580 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3582 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3583 if (mg && mg->mg_len > 0 && mg->mg_flags & MGf_BYTES) {
3584 mg->mg_len = sv_pos_b2u_flags(sv, mg->mg_len,
3585 SV_GMAGIC|SV_CONST_RETURN);
3586 mg_flags = 0; /* sv_pos_b2u does get magic */
3588 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3589 magic_setutf8(sv,mg); /* clear UTF8 cache */
3592 s = (U8 *) SvPV_flags(sv, len, mg_flags);
3594 if (!utf8_to_bytes(s, &len)) {
3599 Perl_croak(aTHX_ "Wide character in %s",
3602 Perl_croak(aTHX_ "Wide character");
3613 =for apidoc sv_utf8_encode
3615 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3616 flag off so that it looks like octets again.
3622 Perl_sv_utf8_encode(pTHX_ SV *const sv)
3624 PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3626 if (SvREADONLY(sv)) {
3627 sv_force_normal_flags(sv, 0);
3629 (void) sv_utf8_upgrade(sv);
3634 =for apidoc sv_utf8_decode
3636 If the PV of the SV is an octet sequence in UTF-8
3637 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3638 so that it looks like a character. If the PV contains only single-byte
3639 characters, the C<SvUTF8> flag stays off.
3640 Scans PV for validity and returns false if the PV is invalid UTF-8.
3646 Perl_sv_utf8_decode(pTHX_ SV *const sv)
3648 PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3651 const U8 *start, *c;
3654 /* The octets may have got themselves encoded - get them back as
3657 if (!sv_utf8_downgrade(sv, TRUE))
3660 /* it is actually just a matter of turning the utf8 flag on, but
3661 * we want to make sure everything inside is valid utf8 first.
3663 c = start = (const U8 *) SvPVX_const(sv);
3664 if (!is_utf8_string(c, SvCUR(sv)))
3666 e = (const U8 *) SvEND(sv);
3669 if (!UTF8_IS_INVARIANT(ch)) {
3674 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3675 /* XXX Is this dead code? XS_utf8_decode calls SvSETMAGIC
3676 after this, clearing pos. Does anything on CPAN
3678 /* adjust pos to the start of a UTF8 char sequence */
3679 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3681 I32 pos = mg->mg_len;
3683 for (c = start + pos; c > start; c--) {
3684 if (UTF8_IS_START(*c))
3687 mg->mg_len = c - start;
3690 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3691 magic_setutf8(sv,mg); /* clear UTF8 cache */
3698 =for apidoc sv_setsv
3700 Copies the contents of the source SV C<ssv> into the destination SV
3701 C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
3702 function if the source SV needs to be reused. Does not handle 'set' magic on
3703 destination SV. Calls 'get' magic on source SV. Loosely speaking, it
3704 performs a copy-by-value, obliterating any previous content of the
3707 You probably want to use one of the assortment of wrappers, such as
3708 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3709 C<SvSetMagicSV_nosteal>.
3711 =for apidoc sv_setsv_flags
3713 Copies the contents of the source SV C<ssv> into the destination SV
3714 C<dsv>. The source SV may be destroyed if it is mortal, so don't use this
3715 function if the source SV needs to be reused. Does not handle 'set' magic.
3716 Loosely speaking, it performs a copy-by-value, obliterating any previous
3717 content of the destination.
3718 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3719 C<ssv> if appropriate, else not. If the C<flags>
3720 parameter has the C<SV_NOSTEAL> bit set then the
3721 buffers of temps will not be stolen. <sv_setsv>
3722 and C<sv_setsv_nomg> are implemented in terms of this function.
3724 You probably want to use one of the assortment of wrappers, such as
3725 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3726 C<SvSetMagicSV_nosteal>.
3728 This is the primary function for copying scalars, and most other
3729 copy-ish functions and macros use this underneath.
3735 S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
3737 I32 mro_changes = 0; /* 1 = method, 2 = isa, 3 = recursive isa */
3738 HV *old_stash = NULL;
3740 PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3742 if (dtype != SVt_PVGV && !isGV_with_GP(dstr)) {
3743 const char * const name = GvNAME(sstr);
3744 const STRLEN len = GvNAMELEN(sstr);
3746 if (dtype >= SVt_PV) {
3752 SvUPGRADE(dstr, SVt_PVGV);
3753 (void)SvOK_off(dstr);
3754 isGV_with_GP_on(dstr);
3756 GvSTASH(dstr) = GvSTASH(sstr);
3758 Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
3759 gv_name_set(MUTABLE_GV(dstr), name, len,
3760 GV_ADD | (GvNAMEUTF8(sstr) ? SVf_UTF8 : 0 ));
3761 SvFAKE_on(dstr); /* can coerce to non-glob */
3764 if(GvGP(MUTABLE_GV(sstr))) {
3765 /* If source has method cache entry, clear it */
3767 SvREFCNT_dec(GvCV(sstr));
3768 GvCV_set(sstr, NULL);
3771 /* If source has a real method, then a method is
3774 GvCV((const GV *)sstr) && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3780 /* If dest already had a real method, that's a change as well */
3782 !mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)
3783 && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3788 /* We don't need to check the name of the destination if it was not a
3789 glob to begin with. */
3790 if(dtype == SVt_PVGV) {
3791 const char * const name = GvNAME((const GV *)dstr);
3794 /* The stash may have been detached from the symbol table, so
3796 && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3800 const STRLEN len = GvNAMELEN(dstr);
3801 if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
3802 || (len == 1 && name[0] == ':')) {
3805 /* Set aside the old stash, so we can reset isa caches on
3807 if((old_stash = GvHV(dstr)))
3808 /* Make sure we do not lose it early. */
3809 SvREFCNT_inc_simple_void_NN(
3810 sv_2mortal((SV *)old_stash)
3815 SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
3818 gp_free(MUTABLE_GV(dstr));
3819 GvINTRO_off(dstr); /* one-shot flag */
3820 GvGP_set(dstr, gp_ref(GvGP(sstr)));
3821 if (SvTAINTED(sstr))
3823 if (GvIMPORTED(dstr) != GVf_IMPORTED
3824 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3826 GvIMPORTED_on(dstr);
3829 if(mro_changes == 2) {
3830 if (GvAV((const GV *)sstr)) {
3832 SV * const sref = (SV *)GvAV((const GV *)dstr);
3833 if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3834 if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3835 AV * const ary = newAV();
3836 av_push(ary, mg->mg_obj); /* takes the refcount */
3837 mg->mg_obj = (SV *)ary;
3839 av_push((AV *)mg->mg_obj, SvREFCNT_inc_simple_NN(dstr));
3841 else sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
3843 mro_isa_changed_in(GvSTASH(dstr));
3845 else if(mro_changes == 3) {
3846 HV * const stash = GvHV(dstr);
3847 if(old_stash ? (HV *)HvENAME_get(old_stash) : stash)
3853 else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
3854 if (GvIO(dstr) && dtype == SVt_PVGV) {
3855 DEBUG_o(Perl_deb(aTHX_
3856 "glob_assign_glob clearing PL_stashcache\n"));
3857 /* It's a cache. It will rebuild itself quite happily.
3858 It's a lot of effort to work out exactly which key (or keys)
3859 might be invalidated by the creation of the this file handle.
3861 hv_clear(PL_stashcache);
3867 S_glob_assign_ref(pTHX_ SV *const dstr, SV *const sstr)
3869 SV * const sref = SvRV(sstr);
3871 const int intro = GvINTRO(dstr);
3874 const U32 stype = SvTYPE(sref);
3876 PERL_ARGS_ASSERT_GLOB_ASSIGN_REF;
3879 GvINTRO_off(dstr); /* one-shot flag */
3880 GvLINE(dstr) = CopLINE(PL_curcop);
3881 GvEGV(dstr) = MUTABLE_GV(dstr);
3886 location = (SV **) &(GvGP(dstr)->gp_cv); /* XXX bypassing GvCV_set */
3887 import_flag = GVf_IMPORTED_CV;
3890 location = (SV **) &GvHV(dstr);
3891 import_flag = GVf_IMPORTED_HV;
3894 location = (SV **) &GvAV(dstr);
3895 import_flag = GVf_IMPORTED_AV;
3898 location = (SV **) &GvIOp(dstr);
3901 location = (SV **) &GvFORM(dstr);
3904 location = &GvSV(dstr);
3905 import_flag = GVf_IMPORTED_SV;
3908 if (stype == SVt_PVCV) {
3909 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
3910 if (GvCVGEN(dstr)) {
3911 SvREFCNT_dec(GvCV(dstr));
3912 GvCV_set(dstr, NULL);
3913 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3916 /* SAVEt_GVSLOT takes more room on the savestack and has more
3917 overhead in leave_scope than SAVEt_GENERIC_SV. But for CVs
3918 leave_scope needs access to the GV so it can reset method
3919 caches. We must use SAVEt_GVSLOT whenever the type is
3920 SVt_PVCV, even if the stash is anonymous, as the stash may
3921 gain a name somehow before leave_scope. */
3922 if (stype == SVt_PVCV) {
3923 /* There is no save_pushptrptrptr. Creating it for this
3924 one call site would be overkill. So inline the ss add
3928 SS_ADD_PTR(location);
3929 SS_ADD_PTR(SvREFCNT_inc(*location));
3930 SS_ADD_UV(SAVEt_GVSLOT);
3933 else SAVEGENERICSV(*location);
3936 if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
3937 CV* const cv = MUTABLE_CV(*location);
3939 if (!GvCVGEN((const GV *)dstr) &&
3940 (CvROOT(cv) || CvXSUB(cv)) &&
3941 /* redundant check that avoids creating the extra SV
3942 most of the time: */
3943 (CvCONST(cv) || ckWARN(WARN_REDEFINE)))
3945 SV * const new_const_sv =
3946 CvCONST((const CV *)sref)
3947 ? cv_const_sv((const CV *)sref)
3949 report_redefined_cv(
3950 sv_2mortal(Perl_newSVpvf(aTHX_
3953 HvNAME_HEK(GvSTASH((const GV *)dstr))
3955 HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr)))
3958 CvCONST((const CV *)sref) ? &new_const_sv : NULL
3962 cv_ckproto_len_flags(cv, (const GV *)dstr,
3963 SvPOK(sref) ? CvPROTO(sref) : NULL,
3964 SvPOK(sref) ? CvPROTOLEN(sref) : 0,
3965 SvPOK(sref) ? SvUTF8(sref) : 0);
3967 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3968 GvASSUMECV_on(dstr);
3969 if(GvSTASH(dstr)) gv_method_changed(dstr); /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
3971 *location = SvREFCNT_inc_simple_NN(sref);
3972 if (import_flag && !(GvFLAGS(dstr) & import_flag)
3973 && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
3974 GvFLAGS(dstr) |= import_flag;
3976 if (stype == SVt_PVHV) {
3977 const char * const name = GvNAME((GV*)dstr);
3978 const STRLEN len = GvNAMELEN(dstr);
3981 (len > 1 && name[len-2] == ':' && name[len-1] == ':')
3982 || (len == 1 && name[0] == ':')
3984 && (!dref || HvENAME_get(dref))
3987 (HV *)sref, (HV *)dref,
3993 stype == SVt_PVAV && sref != dref
3994 && strEQ(GvNAME((GV*)dstr), "ISA")
3995 /* The stash may have been detached from the symbol table, so
3996 check its name before doing anything. */
3997 && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
4000 MAGIC * const omg = dref && SvSMAGICAL(dref)
4001 ? mg_find(dref, PERL_MAGIC_isa)
4003 if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
4004 if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
4005 AV * const ary = newAV();
4006 av_push(ary, mg->mg_obj); /* takes the refcount */
4007 mg->mg_obj = (SV *)ary;
4010 if (SvTYPE(omg->mg_obj) == SVt_PVAV) {
4011 SV **svp = AvARRAY((AV *)omg->mg_obj);
4012 I32 items = AvFILLp((AV *)omg->mg_obj) + 1;
4016 SvREFCNT_inc_simple_NN(*svp++)
4022 SvREFCNT_inc_simple_NN(omg->mg_obj)
4026 av_push((AV *)mg->mg_obj,SvREFCNT_inc_simple_NN(dstr));
4031 sref, omg ? omg->mg_obj : dstr, PERL_MAGIC_isa, NULL, 0
4033 mg = mg_find(sref, PERL_MAGIC_isa);
4035 /* Since the *ISA assignment could have affected more than
4036 one stash, don't call mro_isa_changed_in directly, but let
4037 magic_clearisa do it for us, as it already has the logic for
4038 dealing with globs vs arrays of globs. */
4040 Perl_magic_clearisa(aTHX_ NULL, mg);
4042 else if (stype == SVt_PVIO) {
4043 DEBUG_o(Perl_deb(aTHX_ "glob_assign_ref clearing PL_stashcache\n"));
4044 /* It's a cache. It will rebuild itself quite happily.
4045 It's a lot of effort to work out exactly which key (or keys)
4046 might be invalidated by the creation of the this file handle.
4048 hv_clear(PL_stashcache);
4052 if (!intro) SvREFCNT_dec(dref);
4053 if (SvTAINTED(sstr))
4061 #ifdef PERL_DEBUG_READONLY_COW
4062 # include <sys/mman.h>
4064 # ifndef PERL_MEMORY_DEBUG_HEADER_SIZE
4065 # define PERL_MEMORY_DEBUG_HEADER_SIZE 0
4069 Perl_sv_buf_to_ro(pTHX_ SV *sv)
4071 struct perl_memory_debug_header * const header =
4072 (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4073 const MEM_SIZE len = header->size;
4074 PERL_ARGS_ASSERT_SV_BUF_TO_RO;
4075 # ifdef PERL_TRACK_MEMPOOL
4076 if (!header->readonly) header->readonly = 1;
4078 if (mprotect(header, len, PROT_READ))
4079 Perl_warn(aTHX_ "mprotect RW for COW string %p %lu failed with %d",
4080 header, len, errno);
4084 S_sv_buf_to_rw(pTHX_ SV *sv)
4086 struct perl_memory_debug_header * const header =
4087 (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4088 const MEM_SIZE len = header->size;
4089 PERL_ARGS_ASSERT_SV_BUF_TO_RW;
4090 if (mprotect(header, len, PROT_READ|PROT_WRITE))
4091 Perl_warn(aTHX_ "mprotect for COW string %p %lu failed with %d",
4092 header, len, errno);
4093 # ifdef PERL_TRACK_MEMPOOL
4094 header->readonly = 0;
4099 # define sv_buf_to_ro(sv) NOOP
4100 # define sv_buf_to_rw(sv) NOOP
4104 Perl_sv_setsv_flags(pTHX_ SV *dstr, SV* sstr, const I32 flags)
4111 PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
4116 if (SvIS_FREED(dstr)) {
4117 Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
4118 " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
4120 SV_CHECK_THINKFIRST_COW_DROP(dstr);
4122 sstr = &PL_sv_undef;
4123 if (SvIS_FREED(sstr)) {
4124 Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
4125 (void*)sstr, (void*)dstr);
4127 stype = SvTYPE(sstr);
4128 dtype = SvTYPE(dstr);
4130 /* There's a lot of redundancy below but we're going for speed here */
4135 if (dtype != SVt_PVGV && dtype != SVt_PVLV) {
4136 (void)SvOK_off(dstr);
4144 sv_upgrade(dstr, SVt_IV);
4148 sv_upgrade(dstr, SVt_PVIV);
4152 goto end_of_first_switch;
4154 (void)SvIOK_only(dstr);
4155 SvIV_set(dstr, SvIVX(sstr));
4158 /* SvTAINTED can only be true if the SV has taint magic, which in
4159 turn means that the SV type is PVMG (or greater). This is the
4160 case statement for SVt_IV, so this cannot be true (whatever gcov
4162 assert(!SvTAINTED(sstr));
4167 if (dtype < SVt_PV && dtype != SVt_IV)
4168 sv_upgrade(dstr, SVt_IV);
4176 sv_upgrade(dstr, SVt_NV);
4180 sv_upgrade(dstr, SVt_PVNV);
4184 goto end_of_first_switch;
4186 SvNV_set(dstr, SvNVX(sstr));
4187 (void)SvNOK_only(dstr);
4188 /* SvTAINTED can only be true if the SV has taint magic, which in
4189 turn means that the SV type is PVMG (or greater). This is the
4190 case statement for SVt_NV, so this cannot be true (whatever gcov
4192 assert(!SvTAINTED(sstr));
4199 sv_upgrade(dstr, SVt_PV);
4202 if (dtype < SVt_PVIV)
4203 sv_upgrade(dstr, SVt_PVIV);
4206 if (dtype < SVt_PVNV)
4207 sv_upgrade(dstr, SVt_PVNV);
4211 const char * const type = sv_reftype(sstr,0);
4213 /* diag_listed_as: Bizarre copy of %s */
4214 Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
4216 Perl_croak(aTHX_ "Bizarre copy of %s", type);
4218 NOT_REACHED; /* NOTREACHED */
4222 if (dtype < SVt_REGEXP)
4224 if (dtype >= SVt_PV) {
4230 sv_upgrade(dstr, SVt_REGEXP);
4238 if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
4240 if (SvTYPE(sstr) != stype)
4241 stype = SvTYPE(sstr);
4243 if (isGV_with_GP(sstr) && dtype <= SVt_PVLV) {
4244 glob_assign_glob(dstr, sstr, dtype);
4247 if (stype == SVt_PVLV)
4249 if (isREGEXP(sstr)) goto upgregexp;
4250 SvUPGRADE(dstr, SVt_PVNV);
4253 SvUPGRADE(dstr, (svtype)stype);
4255 end_of_first_switch:
4257 /* dstr may have been upgraded. */
4258 dtype = SvTYPE(dstr);
4259 sflags = SvFLAGS(sstr);
4261 if (dtype == SVt_PVCV) {
4262 /* Assigning to a subroutine sets the prototype. */
4265 const char *const ptr = SvPV_const(sstr, len);
4267 SvGROW(dstr, len + 1);
4268 Copy(ptr, SvPVX(dstr), len + 1, char);
4269 SvCUR_set(dstr, len);
4271 SvFLAGS(dstr) |= sflags & SVf_UTF8;
4272 CvAUTOLOAD_off(dstr);
4277 else if (dtype == SVt_PVAV || dtype == SVt_PVHV || dtype == SVt_PVFM) {
4278 const char * const type = sv_reftype(dstr,0);
4280 /* diag_listed_as: Cannot copy to %s */
4281 Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
4283 Perl_croak(aTHX_ "Cannot copy to %s", type);
4284 } else if (sflags & SVf_ROK) {
4285 if (isGV_with_GP(dstr)
4286 && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
4289 if (GvIMPORTED(dstr) != GVf_IMPORTED
4290 && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4292 GvIMPORTED_on(dstr);
4297 glob_assign_glob(dstr, sstr, dtype);
4301 if (dtype >= SVt_PV) {
4302 if (isGV_with_GP(dstr)) {
4303 glob_assign_ref(dstr, sstr);
4306 if (SvPVX_const(dstr)) {
4312 (void)SvOK_off(dstr);
4313 SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4314 SvFLAGS(dstr) |= sflags & SVf_ROK;
4315 assert(!(sflags & SVp_NOK));
4316 assert(!(sflags & SVp_IOK));
4317 assert(!(sflags & SVf_NOK));
4318 assert(!(sflags & SVf_IOK));
4320 else if (isGV_with_GP(dstr)) {
4321 if (!(sflags & SVf_OK)) {
4322 Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4323 "Undefined value assigned to typeglob");
4326 GV *gv = gv_fetchsv_nomg(sstr, GV_ADD, SVt_PVGV);
4327 if (dstr != (const SV *)gv) {
4328 const char * const name = GvNAME((const GV *)dstr);
4329 const STRLEN len = GvNAMELEN(dstr);
4330 HV *old_stash = NULL;
4331 bool reset_isa = FALSE;
4332 if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
4333 || (len == 1 && name[0] == ':')) {
4334 /* Set aside the old stash, so we can reset isa caches
4335 on its subclasses. */
4336 if((old_stash = GvHV(dstr))) {
4337 /* Make sure we do not lose it early. */
4338 SvREFCNT_inc_simple_void_NN(
4339 sv_2mortal((SV *)old_stash)
4346 SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
4347 gp_free(MUTABLE_GV(dstr));
4349 GvGP_set(dstr, gp_ref(GvGP(gv)));
4352 HV * const stash = GvHV(dstr);
4354 old_stash ? (HV *)HvENAME_get(old_stash) : stash
4364 else if ((dtype == SVt_REGEXP || dtype == SVt_PVLV)
4365 && (stype == SVt_REGEXP || isREGEXP(sstr))) {
4366 reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4368 else if (sflags & SVp_POK) {
4369 const STRLEN cur = SvCUR(sstr);
4370 const STRLEN len = SvLEN(sstr);
4373 * We have three basic ways to copy the string:
4379 * Which we choose is based on various factors. The following
4380 * things are listed in order of speed, fastest to slowest:
4382 * - Copying a short string
4383 * - Copy-on-write bookkeeping
4385 * - Copying a long string
4387 * We swipe the string (steal the string buffer) if the SV on the
4388 * rhs is about to be freed anyway (TEMP and refcnt==1). This is a
4389 * big win on long strings. It should be a win on short strings if
4390 * SvPVX_const(dstr) has to be allocated. If not, it should not
4391 * slow things down, as SvPVX_const(sstr) would have been freed
4394 * We also steal the buffer from a PADTMP (operator target) if it
4395 * is ‘long enough’. For short strings, a swipe does not help
4396 * here, as it causes more malloc calls the next time the target
4397 * is used. Benchmarks show that even if SvPVX_const(dstr) has to
4398 * be allocated it is still not worth swiping PADTMPs for short
4399 * strings, as the savings here are small.
4401 * If the rhs is already flagged as a copy-on-write string and COW
4402 * is possible here, we use copy-on-write and make both SVs share
4403 * the string buffer.
4405 * If the rhs is not flagged as copy-on-write, then we see whether
4406 * it is worth upgrading it to such. If the lhs already has a buf-
4407 * fer big enough and the string is short, we skip it and fall back
4408 * to method 3, since memcpy is faster for short strings than the
4409 * later bookkeeping overhead that copy-on-write entails.
4411 * If there is no buffer on the left, or the buffer is too small,
4412 * then we use copy-on-write.
4415 /* Whichever path we take through the next code, we want this true,
4416 and doing it now facilitates the COW check. */
4417 (void)SvPOK_only(dstr);
4421 /* slated for free anyway (and not COW)? */
4422 (sflags & (SVs_TEMP|SVf_IsCOW)) == SVs_TEMP
4423 /* or a swipable TARG */
4424 || ((sflags & (SVs_PADTMP|SVf_READONLY|SVf_IsCOW))
4426 /* whose buffer is worth stealing */
4427 && CHECK_COWBUF_THRESHOLD(cur,len)
4430 !(sflags & SVf_OOK) && /* and not involved in OOK hack? */
4431 (!(flags & SV_NOSTEAL)) &&
4432 /* and we're allowed to steal temps */
4433 SvREFCNT(sstr) == 1 && /* and no other references to it? */
4434 len) /* and really is a string */
4435 { /* Passes the swipe test. */
4436 if (SvPVX_const(dstr)) /* we know that dtype >= SVt_PV */
4438 SvPV_set(dstr, SvPVX_mutable(sstr));
4439 SvLEN_set(dstr, SvLEN(sstr));
4440 SvCUR_set(dstr, SvCUR(sstr));
4443 (void)SvOK_off(sstr); /* NOTE: nukes most SvFLAGS on sstr */
4444 SvPV_set(sstr, NULL);
4449 else if (flags & SV_COW_SHARED_HASH_KEYS
4451 #ifdef PERL_OLD_COPY_ON_WRITE
4452 ( sflags & SVf_IsCOW
4453 || ( (sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4454 && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
4455 && SvTYPE(sstr) >= SVt_PVIV && len
4458 #elif defined(PERL_NEW_COPY_ON_WRITE)
4461 ( (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
4462 /* If this is a regular (non-hek) COW, only so
4463 many COW "copies" are possible. */
4464 && CowREFCNT(sstr) != SV_COW_REFCNT_MAX ))
4465 : ( (sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4466 && !(SvFLAGS(dstr) & SVf_BREAK)
4467 && CHECK_COW_THRESHOLD(cur,len) && cur+1 < len
4468 && (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
4472 && !(SvFLAGS(dstr) & SVf_BREAK)
4475 /* Either it's a shared hash key, or it's suitable for
4478 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4483 if (!(sflags & SVf_IsCOW)) {
4485 # ifdef PERL_OLD_COPY_ON_WRITE
4486 /* Make the source SV into a loop of 1.
4487 (about to become 2) */
4488 SV_COW_NEXT_SV_SET(sstr, sstr);
4490 CowREFCNT(sstr) = 0;
4494 if (SvPVX_const(dstr)) { /* we know that dtype >= SVt_PV */
4500 # ifdef PERL_OLD_COPY_ON_WRITE
4501 assert (SvTYPE(dstr) >= SVt_PVIV);
4502 /* SvIsCOW_normal */
4503 /* splice us in between source and next-after-source. */
4504 SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
4505 SV_COW_NEXT_SV_SET(sstr, dstr);
4507 if (sflags & SVf_IsCOW) {
4512 SvPV_set(dstr, SvPVX_mutable(sstr));
4517 /* SvIsCOW_shared_hash */
4518 DEBUG_C(PerlIO_printf(Perl_debug_log,
4519 "Copy on write: Sharing hash\n"));
4521 assert (SvTYPE(dstr) >= SVt_PV);
4523 HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
4525 SvLEN_set(dstr, len);
4526 SvCUR_set(dstr, cur);
4529 /* Failed the swipe test, and we cannot do copy-on-write either.
4530 Have to copy the string. */
4531 SvGROW(dstr, cur + 1); /* inlined from sv_setpvn */
4532 Move(SvPVX_const(sstr),SvPVX(dstr),cur,char);
4533 SvCUR_set(dstr, cur);
4534 *SvEND(dstr) = '\0';
4536 if (sflags & SVp_NOK) {
4537 SvNV_set(dstr, SvNVX(sstr));
4539 if (sflags & SVp_IOK) {
4540 SvIV_set(dstr, SvIVX(sstr));
4541 /* Must do this otherwise some other overloaded use of 0x80000000
4542 gets confused. I guess SVpbm_VALID */
4543 if (sflags & SVf_IVisUV)
4546 SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4548 const MAGIC * const smg = SvVSTRING_mg(sstr);
4550 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4551 smg->mg_ptr, smg->mg_len);
4552 SvRMAGICAL_on(dstr);
4556 else if (sflags & (SVp_IOK|SVp_NOK)) {
4557 (void)SvOK_off(dstr);
4558 SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
4559 if (sflags & SVp_IOK) {
4560 /* XXXX Do we want to set IsUV for IV(ROK)? Be extra safe... */
4561 SvIV_set(dstr, SvIVX(sstr));
4563 if (sflags & SVp_NOK) {
4564 SvNV_set(dstr, SvNVX(sstr));
4568 if (isGV_with_GP(sstr)) {
4569 gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
4572 (void)SvOK_off(dstr);
4574 if (SvTAINTED(sstr))
4579 =for apidoc sv_setsv_mg
4581 Like C<sv_setsv>, but also handles 'set' magic.
4587 Perl_sv_setsv_mg(pTHX_ SV *const dstr, SV *const sstr)
4589 PERL_ARGS_ASSERT_SV_SETSV_MG;
4591 sv_setsv(dstr,sstr);
4596 # ifdef PERL_OLD_COPY_ON_WRITE
4597 # define SVt_COW SVt_PVIV
4599 # define SVt_COW SVt_PV
4602 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4604 STRLEN cur = SvCUR(sstr);
4605 STRLEN len = SvLEN(sstr);
4607 #if defined(PERL_DEBUG_READONLY_COW) && defined(PERL_NEW_COPY_ON_WRITE)
4608 const bool already = cBOOL(SvIsCOW(sstr));
4611 PERL_ARGS_ASSERT_SV_SETSV_COW;
4614 PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4615 (void*)sstr, (void*)dstr);