This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
462dc9e9c2b19d154cf3fda0caf0b78597e1fc96
[perl5.git] / sv.c
1 /*    sv.c
2  *
3  *    Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4  *    2000, 2001, 2002, 2003, 2004, 2005, 2006, by Larry Wall and others
5  *
6  *    You may distribute under the terms of either the GNU General Public
7  *    License or the Artistic License, as specified in the README file.
8  *
9  * "I wonder what the Entish is for 'yes' and 'no'," he thought.
10  *
11  *
12  * This file contains the code that creates, manipulates and destroys
13  * scalar values (SVs). The other types (AV, HV, GV, etc.) reuse the
14  * structure of an SV, so their creation and destruction is handled
15  * here; higher-level functions are in av.c, hv.c, and so on. Opcode
16  * level functions (eg. substr, split, join) for each of the types are
17  * in the pp*.c files.
18  */
19
20 #include "EXTERN.h"
21 #define PERL_IN_SV_C
22 #include "perl.h"
23 #include "regcomp.h"
24
25 #define FCALL *f
26
27 #ifdef __Lynx__
28 /* Missing proto on LynxOS */
29   char *gconvert(double, int, int,  char *);
30 #endif
31
32 #ifdef PERL_UTF8_CACHE_ASSERT
33 /* The cache element 0 is the Unicode offset;
34  * the cache element 1 is the byte offset of the element 0;
35  * the cache element 2 is the Unicode length of the substring;
36  * the cache element 3 is the byte length of the substring;
37  * The checking of the substring side would be good
38  * but substr() has enough code paths to make my head spin;
39  * if adding more checks watch out for the following tests:
40  *   t/op/index.t t/op/length.t t/op/pat.t t/op/substr.t
41  *   lib/utf8.t lib/Unicode/Collate/t/index.t
42  * --jhi
43  */
44 #define ASSERT_UTF8_CACHE(cache) \
45     STMT_START { if (cache) { assert((cache)[0] <= (cache)[1]); } } STMT_END
46 #else
47 #define ASSERT_UTF8_CACHE(cache) NOOP
48 #endif
49
50 #ifdef PERL_OLD_COPY_ON_WRITE
51 #define SV_COW_NEXT_SV(sv)      INT2PTR(SV *,SvUVX(sv))
52 #define SV_COW_NEXT_SV_SET(current,next)        SvUV_set(current, PTR2UV(next))
53 /* This is a pessimistic view. Scalar must be purely a read-write PV to copy-
54    on-write.  */
55 #endif
56
57 /* ============================================================================
58
59 =head1 Allocation and deallocation of SVs.
60
61 An SV (or AV, HV, etc.) is allocated in two parts: the head (struct
62 sv, av, hv...) contains type and reference count information, and for
63 many types, a pointer to the body (struct xrv, xpv, xpviv...), which
64 contains fields specific to each type.  Some types store all they need
65 in the head, so don't have a body.
66
67 In all but the most memory-paranoid configuations (ex: PURIFY), heads
68 and bodies are allocated out of arenas, which by default are
69 approximately 4K chunks of memory parcelled up into N heads or bodies.
70 Sv-bodies are allocated by their sv-type, guaranteeing size
71 consistency needed to allocate safely from arrays.
72
73 For SV-heads, the first slot in each arena is reserved, and holds a
74 link to the next arena, some flags, and a note of the number of slots.
75 Snaked through each arena chain is a linked list of free items; when
76 this becomes empty, an extra arena is allocated and divided up into N
77 items which are threaded into the free list.
78
79 SV-bodies are similar, but they use arena-sets by default, which
80 separate the link and info from the arena itself, and reclaim the 1st
81 slot in the arena.  SV-bodies are further described later.
82
83 The following global variables are associated with arenas:
84
85     PL_sv_arenaroot     pointer to list of SV arenas
86     PL_sv_root          pointer to list of free SV structures
87
88     PL_body_arenas      head of linked-list of body arenas
89     PL_body_roots[]     array of pointers to list of free bodies of svtype
90                         arrays are indexed by the svtype needed
91
92 A few special SV heads are not allocated from an arena, but are
93 instead directly created in the interpreter structure, eg PL_sv_undef.
94 The size of arenas can be changed from the default by setting
95 PERL_ARENA_SIZE appropriately at compile time.
96
97 The SV arena serves the secondary purpose of allowing still-live SVs
98 to be located and destroyed during final cleanup.
99
100 At the lowest level, the macros new_SV() and del_SV() grab and free
101 an SV head.  (If debugging with -DD, del_SV() calls the function S_del_sv()
102 to return the SV to the free list with error checking.) new_SV() calls
103 more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
104 SVs in the free list have their SvTYPE field set to all ones.
105
106 At the time of very final cleanup, sv_free_arenas() is called from
107 perl_destruct() to physically free all the arenas allocated since the
108 start of the interpreter.
109
110 Manipulation of any of the PL_*root pointers is protected by enclosing
111 LOCK_SV_MUTEX; ... UNLOCK_SV_MUTEX calls which should Do the Right Thing
112 if threads are enabled.
113
114 The function visit() scans the SV arenas list, and calls a specified
115 function for each SV it finds which is still live - ie which has an SvTYPE
116 other than all 1's, and a non-zero SvREFCNT. visit() is used by the
117 following functions (specified as [function that calls visit()] / [function
118 called by visit() for each SV]):
119
120     sv_report_used() / do_report_used()
121                         dump all remaining SVs (debugging aid)
122
123     sv_clean_objs() / do_clean_objs(),do_clean_named_objs()
124                         Attempt to free all objects pointed to by RVs,
125                         and, unless DISABLE_DESTRUCTOR_KLUDGE is defined,
126                         try to do the same for all objects indirectly
127                         referenced by typeglobs too.  Called once from
128                         perl_destruct(), prior to calling sv_clean_all()
129                         below.
130
131     sv_clean_all() / do_clean_all()
132                         SvREFCNT_dec(sv) each remaining SV, possibly
133                         triggering an sv_free(). It also sets the
134                         SVf_BREAK flag on the SV to indicate that the
135                         refcnt has been artificially lowered, and thus
136                         stopping sv_free() from giving spurious warnings
137                         about SVs which unexpectedly have a refcnt
138                         of zero.  called repeatedly from perl_destruct()
139                         until there are no SVs left.
140
141 =head2 Arena allocator API Summary
142
143 Private API to rest of sv.c
144
145     new_SV(),  del_SV(),
146
147     new_XIV(), del_XIV(),
148     new_XNV(), del_XNV(),
149     etc
150
151 Public API:
152
153     sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
154
155 =cut
156
157 ============================================================================ */
158
159 /*
160  * "A time to plant, and a time to uproot what was planted..."
161  */
162
163 /*
164  * nice_chunk and nice_chunk size need to be set
165  * and queried under the protection of sv_mutex
166  */
167 void
168 Perl_offer_nice_chunk(pTHX_ void *chunk, U32 chunk_size)
169 {
170     dVAR;
171     void *new_chunk;
172     U32 new_chunk_size;
173     LOCK_SV_MUTEX;
174     new_chunk = (void *)(chunk);
175     new_chunk_size = (chunk_size);
176     if (new_chunk_size > PL_nice_chunk_size) {
177         Safefree(PL_nice_chunk);
178         PL_nice_chunk = (char *) new_chunk;
179         PL_nice_chunk_size = new_chunk_size;
180     } else {
181         Safefree(chunk);
182     }
183     UNLOCK_SV_MUTEX;
184 }
185
186 #ifdef DEBUG_LEAKING_SCALARS
187 #  define FREE_SV_DEBUG_FILE(sv) Safefree((sv)->sv_debug_file)
188 #else
189 #  define FREE_SV_DEBUG_FILE(sv)
190 #endif
191
192 #ifdef PERL_POISON
193 #  define SvARENA_CHAIN(sv)     ((sv)->sv_u.svu_rv)
194 /* Whilst I'd love to do this, it seems that things like to check on
195    unreferenced scalars
196 #  define POSION_SV_HEAD(sv)    Poison(sv, 1, struct STRUCT_SV)
197 */
198 #  define POSION_SV_HEAD(sv)    Poison(&SvANY(sv), 1, void *), \
199                                 Poison(&SvREFCNT(sv), 1, U32)
200 #else
201 #  define SvARENA_CHAIN(sv)     SvANY(sv)
202 #  define POSION_SV_HEAD(sv)
203 #endif
204
205 #define plant_SV(p) \
206     STMT_START {                                        \
207         FREE_SV_DEBUG_FILE(p);                          \
208         POSION_SV_HEAD(p);                              \
209         SvARENA_CHAIN(p) = (void *)PL_sv_root;          \
210         SvFLAGS(p) = SVTYPEMASK;                        \
211         PL_sv_root = (p);                               \
212         --PL_sv_count;                                  \
213     } STMT_END
214
215 /* sv_mutex must be held while calling uproot_SV() */
216 #define uproot_SV(p) \
217     STMT_START {                                        \
218         (p) = PL_sv_root;                               \
219         PL_sv_root = (SV*)SvARENA_CHAIN(p);             \
220         ++PL_sv_count;                                  \
221     } STMT_END
222
223
224 /* make some more SVs by adding another arena */
225
226 /* sv_mutex must be held while calling more_sv() */
227 STATIC SV*
228 S_more_sv(pTHX)
229 {
230     dVAR;
231     SV* sv;
232
233     if (PL_nice_chunk) {
234         sv_add_arena(PL_nice_chunk, PL_nice_chunk_size, 0);
235         PL_nice_chunk = NULL;
236         PL_nice_chunk_size = 0;
237     }
238     else {
239         char *chunk;                /* must use New here to match call to */
240         Newx(chunk,PERL_ARENA_SIZE,char);  /* Safefree() in sv_free_arenas() */
241         sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
242     }
243     uproot_SV(sv);
244     return sv;
245 }
246
247 /* new_SV(): return a new, empty SV head */
248
249 #ifdef DEBUG_LEAKING_SCALARS
250 /* provide a real function for a debugger to play with */
251 STATIC SV*
252 S_new_SV(pTHX)
253 {
254     SV* sv;
255
256     LOCK_SV_MUTEX;
257     if (PL_sv_root)
258         uproot_SV(sv);
259     else
260         sv = S_more_sv(aTHX);
261     UNLOCK_SV_MUTEX;
262     SvANY(sv) = 0;
263     SvREFCNT(sv) = 1;
264     SvFLAGS(sv) = 0;
265     sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
266     sv->sv_debug_line = (U16) ((PL_copline == NOLINE) ?
267         (PL_curcop ? CopLINE(PL_curcop) : 0) : PL_copline);
268     sv->sv_debug_inpad = 0;
269     sv->sv_debug_cloned = 0;
270     sv->sv_debug_file = PL_curcop ? savepv(CopFILE(PL_curcop)): NULL;
271     
272     return sv;
273 }
274 #  define new_SV(p) (p)=S_new_SV(aTHX)
275
276 #else
277 #  define new_SV(p) \
278     STMT_START {                                        \
279         LOCK_SV_MUTEX;                                  \
280         if (PL_sv_root)                                 \
281             uproot_SV(p);                               \
282         else                                            \
283             (p) = S_more_sv(aTHX);                      \
284         UNLOCK_SV_MUTEX;                                \
285         SvANY(p) = 0;                                   \
286         SvREFCNT(p) = 1;                                \
287         SvFLAGS(p) = 0;                                 \
288     } STMT_END
289 #endif
290
291
292 /* del_SV(): return an empty SV head to the free list */
293
294 #ifdef DEBUGGING
295
296 #define del_SV(p) \
297     STMT_START {                                        \
298         LOCK_SV_MUTEX;                                  \
299         if (DEBUG_D_TEST)                               \
300             del_sv(p);                                  \
301         else                                            \
302             plant_SV(p);                                \
303         UNLOCK_SV_MUTEX;                                \
304     } STMT_END
305
306 STATIC void
307 S_del_sv(pTHX_ SV *p)
308 {
309     dVAR;
310     if (DEBUG_D_TEST) {
311         SV* sva;
312         bool ok = 0;
313         for (sva = PL_sv_arenaroot; sva; sva = (SV *) SvANY(sva)) {
314             const SV * const sv = sva + 1;
315             const SV * const svend = &sva[SvREFCNT(sva)];
316             if (p >= sv && p < svend) {
317                 ok = 1;
318                 break;
319             }
320         }
321         if (!ok) {
322             if (ckWARN_d(WARN_INTERNAL))        
323                 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
324                             "Attempt to free non-arena SV: 0x%"UVxf
325                             pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
326             return;
327         }
328     }
329     plant_SV(p);
330 }
331
332 #else /* ! DEBUGGING */
333
334 #define del_SV(p)   plant_SV(p)
335
336 #endif /* DEBUGGING */
337
338
339 /*
340 =head1 SV Manipulation Functions
341
342 =for apidoc sv_add_arena
343
344 Given a chunk of memory, link it to the head of the list of arenas,
345 and split it into a list of free SVs.
346
347 =cut
348 */
349
350 void
351 Perl_sv_add_arena(pTHX_ char *ptr, U32 size, U32 flags)
352 {
353     dVAR;
354     SV* const sva = (SV*)ptr;
355     register SV* sv;
356     register SV* svend;
357
358     /* The first SV in an arena isn't an SV. */
359     SvANY(sva) = (void *) PL_sv_arenaroot;              /* ptr to next arena */
360     SvREFCNT(sva) = size / sizeof(SV);          /* number of SV slots */
361     SvFLAGS(sva) = flags;                       /* FAKE if not to be freed */
362
363     PL_sv_arenaroot = sva;
364     PL_sv_root = sva + 1;
365
366     svend = &sva[SvREFCNT(sva) - 1];
367     sv = sva + 1;
368     while (sv < svend) {
369         SvARENA_CHAIN(sv) = (void *)(SV*)(sv + 1);
370 #ifdef DEBUGGING
371         SvREFCNT(sv) = 0;
372 #endif
373         /* Must always set typemask because it's awlays checked in on cleanup
374            when the arenas are walked looking for objects.  */
375         SvFLAGS(sv) = SVTYPEMASK;
376         sv++;
377     }
378     SvARENA_CHAIN(sv) = 0;
379 #ifdef DEBUGGING
380     SvREFCNT(sv) = 0;
381 #endif
382     SvFLAGS(sv) = SVTYPEMASK;
383 }
384
385 /* visit(): call the named function for each non-free SV in the arenas
386  * whose flags field matches the flags/mask args. */
387
388 STATIC I32
389 S_visit(pTHX_ SVFUNC_t f, U32 flags, U32 mask)
390 {
391     dVAR;
392     SV* sva;
393     I32 visited = 0;
394
395     for (sva = PL_sv_arenaroot; sva; sva = (SV*)SvANY(sva)) {
396         register const SV * const svend = &sva[SvREFCNT(sva)];
397         register SV* sv;
398         for (sv = sva + 1; sv < svend; ++sv) {
399             if (SvTYPE(sv) != SVTYPEMASK
400                     && (sv->sv_flags & mask) == flags
401                     && SvREFCNT(sv))
402             {
403                 (FCALL)(aTHX_ sv);
404                 ++visited;
405             }
406         }
407     }
408     return visited;
409 }
410
411 #ifdef DEBUGGING
412
413 /* called by sv_report_used() for each live SV */
414
415 static void
416 do_report_used(pTHX_ SV *sv)
417 {
418     if (SvTYPE(sv) != SVTYPEMASK) {
419         PerlIO_printf(Perl_debug_log, "****\n");
420         sv_dump(sv);
421     }
422 }
423 #endif
424
425 /*
426 =for apidoc sv_report_used
427
428 Dump the contents of all SVs not yet freed. (Debugging aid).
429
430 =cut
431 */
432
433 void
434 Perl_sv_report_used(pTHX)
435 {
436 #ifdef DEBUGGING
437     visit(do_report_used, 0, 0);
438 #else
439     PERL_UNUSED_CONTEXT;
440 #endif
441 }
442
443 /* called by sv_clean_objs() for each live SV */
444
445 static void
446 do_clean_objs(pTHX_ SV *ref)
447 {
448     dVAR;
449     if (SvROK(ref)) {
450         SV * const target = SvRV(ref);
451         if (SvOBJECT(target)) {
452             DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(ref)));
453             if (SvWEAKREF(ref)) {
454                 sv_del_backref(target, ref);
455                 SvWEAKREF_off(ref);
456                 SvRV_set(ref, NULL);
457             } else {
458                 SvROK_off(ref);
459                 SvRV_set(ref, NULL);
460                 SvREFCNT_dec(target);
461             }
462         }
463     }
464
465     /* XXX Might want to check arrays, etc. */
466 }
467
468 /* called by sv_clean_objs() for each live SV */
469
470 #ifndef DISABLE_DESTRUCTOR_KLUDGE
471 static void
472 do_clean_named_objs(pTHX_ SV *sv)
473 {
474     dVAR;
475     if (SvTYPE(sv) == SVt_PVGV && GvGP(sv)) {
476         if ((
477 #ifdef PERL_DONT_CREATE_GVSV
478              GvSV(sv) &&
479 #endif
480              SvOBJECT(GvSV(sv))) ||
481              (GvAV(sv) && SvOBJECT(GvAV(sv))) ||
482              (GvHV(sv) && SvOBJECT(GvHV(sv))) ||
483              (GvIO(sv) && SvOBJECT(GvIO(sv))) ||
484              (GvCV(sv) && SvOBJECT(GvCV(sv))) )
485         {
486             DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning named glob object:\n "), sv_dump(sv)));
487             SvFLAGS(sv) |= SVf_BREAK;
488             SvREFCNT_dec(sv);
489         }
490     }
491 }
492 #endif
493
494 /*
495 =for apidoc sv_clean_objs
496
497 Attempt to destroy all objects not yet freed
498
499 =cut
500 */
501
502 void
503 Perl_sv_clean_objs(pTHX)
504 {
505     dVAR;
506     PL_in_clean_objs = TRUE;
507     visit(do_clean_objs, SVf_ROK, SVf_ROK);
508 #ifndef DISABLE_DESTRUCTOR_KLUDGE
509     /* some barnacles may yet remain, clinging to typeglobs */
510     visit(do_clean_named_objs, SVt_PVGV, SVTYPEMASK);
511 #endif
512     PL_in_clean_objs = FALSE;
513 }
514
515 /* called by sv_clean_all() for each live SV */
516
517 static void
518 do_clean_all(pTHX_ SV *sv)
519 {
520     dVAR;
521     DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
522     SvFLAGS(sv) |= SVf_BREAK;
523     if (PL_comppad == (AV*)sv) {
524         PL_comppad = NULL;
525         PL_curpad = NULL;
526     }
527     SvREFCNT_dec(sv);
528 }
529
530 /*
531 =for apidoc sv_clean_all
532
533 Decrement the refcnt of each remaining SV, possibly triggering a
534 cleanup. This function may have to be called multiple times to free
535 SVs which are in complex self-referential hierarchies.
536
537 =cut
538 */
539
540 I32
541 Perl_sv_clean_all(pTHX)
542 {
543     dVAR;
544     I32 cleaned;
545     PL_in_clean_all = TRUE;
546     cleaned = visit(do_clean_all, 0,0);
547     PL_in_clean_all = FALSE;
548     return cleaned;
549 }
550
551 /*
552   ARENASETS: a meta-arena implementation which separates arena-info
553   into struct arena_set, which contains an array of struct
554   arena_descs, each holding info for a single arena.  By separating
555   the meta-info from the arena, we recover the 1st slot, formerly
556   borrowed for list management.  The arena_set is about the size of an
557   arena, avoiding the needless malloc overhead of a naive linked-list
558
559   The cost is 1 arena-set malloc per ~320 arena-mallocs, + the unused
560   memory in the last arena-set (1/2 on average).  In trade, we get
561   back the 1st slot in each arena (ie 1.7% of a CV-arena, less for
562   smaller types).  The recovery of the wasted space allows use of
563   small arenas for large, rare body types,
564 */
565 struct arena_desc {
566     char       *arena;          /* the raw storage, allocated aligned */
567     size_t      size;           /* its size ~4k typ */
568     int         unit_type;      /* useful for arena audits */
569     /* info for sv-heads (eventually)
570        int count, flags;
571     */
572 };
573
574 struct arena_set;
575
576 /* Get the maximum number of elements in set[] such that struct arena_set
577    will fit within PERL_ARENA_SIZE, which is probabably just under 4K, and
578    therefore likely to be 1 aligned memory page.  */
579
580 #define ARENAS_PER_SET  ((PERL_ARENA_SIZE - sizeof(struct arena_set*) \
581                           - 2 * sizeof(int)) / sizeof (struct arena_desc))
582
583 struct arena_set {
584     struct arena_set* next;
585     int   set_size;             /* ie ARENAS_PER_SET */
586     int   curr;                 /* index of next available arena-desc */
587     struct arena_desc set[ARENAS_PER_SET];
588 };
589
590 #if !ARENASETS
591
592 static void 
593 S_free_arena(pTHX_ void **root) {
594     while (root) {
595         void ** const next = *(void **)root;
596         Safefree(root);
597         root = next;
598     }
599 }
600 #endif
601
602 /*
603 =for apidoc sv_free_arenas
604
605 Deallocate the memory used by all arenas. Note that all the individual SV
606 heads and bodies within the arenas must already have been freed.
607
608 =cut
609 */
610 void
611 Perl_sv_free_arenas(pTHX)
612 {
613     dVAR;
614     SV* sva;
615     SV* svanext;
616     int i;
617
618     /* Free arenas here, but be careful about fake ones.  (We assume
619        contiguity of the fake ones with the corresponding real ones.) */
620
621     for (sva = PL_sv_arenaroot; sva; sva = svanext) {
622         svanext = (SV*) SvANY(sva);
623         while (svanext && SvFAKE(svanext))
624             svanext = (SV*) SvANY(svanext);
625
626         if (!SvFAKE(sva))
627             Safefree(sva);
628     }
629
630 #if ARENASETS
631     {
632         struct arena_set *next, *aroot = (struct arena_set*) PL_body_arenas;
633         
634         for (; aroot; aroot = next) {
635             const int max = aroot->curr;
636             for (i=0; i<max; i++) {
637                 assert(aroot->set[i].arena);
638                 Safefree(aroot->set[i].arena);
639             }
640             next = aroot->next;
641             Safefree(aroot);
642         }
643     }
644 #else
645     S_free_arena(aTHX_ (void**) PL_body_arenas);
646 #endif
647     PL_body_arenas = 0;
648
649     for (i=0; i<PERL_ARENA_ROOTS_SIZE; i++)
650         PL_body_roots[i] = 0;
651
652     Safefree(PL_nice_chunk);
653     PL_nice_chunk = NULL;
654     PL_nice_chunk_size = 0;
655     PL_sv_arenaroot = 0;
656     PL_sv_root = 0;
657 }
658
659 /*
660   Here are mid-level routines that manage the allocation of bodies out
661   of the various arenas.  There are 5 kinds of arenas:
662
663   1. SV-head arenas, which are discussed and handled above
664   2. regular body arenas
665   3. arenas for reduced-size bodies
666   4. Hash-Entry arenas
667   5. pte arenas (thread related)
668
669   Arena types 2 & 3 are chained by body-type off an array of
670   arena-root pointers, which is indexed by svtype.  Some of the
671   larger/less used body types are malloced singly, since a large
672   unused block of them is wasteful.  Also, several svtypes dont have
673   bodies; the data fits into the sv-head itself.  The arena-root
674   pointer thus has a few unused root-pointers (which may be hijacked
675   later for arena types 4,5)
676
677   3 differs from 2 as an optimization; some body types have several
678   unused fields in the front of the structure (which are kept in-place
679   for consistency).  These bodies can be allocated in smaller chunks,
680   because the leading fields arent accessed.  Pointers to such bodies
681   are decremented to point at the unused 'ghost' memory, knowing that
682   the pointers are used with offsets to the real memory.
683
684   HE, HEK arenas are managed separately, with separate code, but may
685   be merge-able later..
686
687   PTE arenas are not sv-bodies, but they share these mid-level
688   mechanics, so are considered here.  The new mid-level mechanics rely
689   on the sv_type of the body being allocated, so we just reserve one
690   of the unused body-slots for PTEs, then use it in those (2) PTE
691   contexts below (line ~10k)
692 */
693
694 /* get_arena(size): when ARENASETS is enabled, this creates
695    custom-sized arenas, otherwize it uses PERL_ARENA_SIZE, as
696    previously done.
697    TBD: export properly for hv.c: S_more_he().
698 */
699 void*
700 Perl_get_arena(pTHX_ int arena_size)
701 {
702 #if !ARENASETS
703     union arena* arp;
704
705     /* allocate and attach arena */
706     Newx(arp, arena_size, char);
707     arp->next = PL_body_arenas;
708     PL_body_arenas = arp;
709     return arp;
710
711 #else
712     struct arena_desc* adesc;
713     struct arena_set *newroot, **aroot = (struct arena_set**) &PL_body_arenas;
714     int curr;
715
716     /* shouldnt need this
717     if (!arena_size)    arena_size = PERL_ARENA_SIZE;
718     */
719
720     /* may need new arena-set to hold new arena */
721     if (!*aroot || (*aroot)->curr >= (*aroot)->set_size) {
722         Newxz(newroot, 1, struct arena_set);
723         newroot->set_size = ARENAS_PER_SET;
724         newroot->next = *aroot;
725         *aroot = newroot;
726         DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", *aroot));
727     }
728
729     /* ok, now have arena-set with at least 1 empty/available arena-desc */
730     curr = (*aroot)->curr++;
731     adesc = &((*aroot)->set[curr]);
732     assert(!adesc->arena);
733     
734     Newxz(adesc->arena, arena_size, char);
735     adesc->size = arena_size;
736     DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p size %d\n", 
737                           curr, adesc->arena, arena_size));
738
739     return adesc->arena;
740 #endif
741 }
742
743
744 /* return a thing to the free list */
745
746 #define del_body(thing, root)                   \
747     STMT_START {                                \
748         void ** const thing_copy = (void **)thing;\
749         LOCK_SV_MUTEX;                          \
750         *thing_copy = *root;                    \
751         *root = (void*)thing_copy;              \
752         UNLOCK_SV_MUTEX;                        \
753     } STMT_END
754
755 /* 
756
757 =head1 SV-Body Allocation
758
759 Allocation of SV-bodies is similar to SV-heads, differing as follows;
760 the allocation mechanism is used for many body types, so is somewhat
761 more complicated, it uses arena-sets, and has no need for still-live
762 SV detection.
763
764 At the outermost level, (new|del)_X*V macros return bodies of the
765 appropriate type.  These macros call either (new|del)_body_type or
766 (new|del)_body_allocated macro pairs, depending on specifics of the
767 type.  Most body types use the former pair, the latter pair is used to
768 allocate body types with "ghost fields".
769
770 "ghost fields" are fields that are unused in certain types, and
771 consequently dont need to actually exist.  They are declared because
772 they're part of a "base type", which allows use of functions as
773 methods.  The simplest examples are AVs and HVs, 2 aggregate types
774 which don't use the fields which support SCALAR semantics.
775
776 For these types, the arenas are carved up into *_allocated size
777 chunks, we thus avoid wasted memory for those unaccessed members.
778 When bodies are allocated, we adjust the pointer back in memory by the
779 size of the bit not allocated, so it's as if we allocated the full
780 structure.  (But things will all go boom if you write to the part that
781 is "not there", because you'll be overwriting the last members of the
782 preceding structure in memory.)
783
784 We calculate the correction using the STRUCT_OFFSET macro. For
785 example, if xpv_allocated is the same structure as XPV then the two
786 OFFSETs sum to zero, and the pointer is unchanged. If the allocated
787 structure is smaller (no initial NV actually allocated) then the net
788 effect is to subtract the size of the NV from the pointer, to return a
789 new pointer as if an initial NV were actually allocated.
790
791 This is the same trick as was used for NV and IV bodies. Ironically it
792 doesn't need to be used for NV bodies any more, because NV is now at
793 the start of the structure. IV bodies don't need it either, because
794 they are no longer allocated.
795
796 In turn, the new_body_* allocators call S_new_body(), which invokes
797 new_body_inline macro, which takes a lock, and takes a body off the
798 linked list at PL_body_roots[sv_type], calling S_more_bodies() if
799 necessary to refresh an empty list.  Then the lock is released, and
800 the body is returned.
801
802 S_more_bodies calls get_arena(), and carves it up into an array of N
803 bodies, which it strings into a linked list.  It looks up arena-size
804 and body-size from the body_details table described below, thus
805 supporting the multiple body-types.
806
807 If PURIFY is defined, or PERL_ARENA_SIZE=0, arenas are not used, and
808 the (new|del)_X*V macros are mapped directly to malloc/free.
809
810 */
811
812 /* 
813
814 For each sv-type, struct body_details bodies_by_type[] carries
815 parameters which control these aspects of SV handling:
816
817 Arena_size determines whether arenas are used for this body type, and if
818 so, how big they are.  PURIFY or PERL_ARENA_SIZE=0 set this field to
819 zero, forcing individual mallocs and frees.
820
821 Body_size determines how big a body is, and therefore how many fit into
822 each arena.  Offset carries the body-pointer adjustment needed for
823 *_allocated body types, and is used in *_allocated macros.
824
825 But its main purpose is to parameterize info needed in
826 Perl_sv_upgrade().  The info here dramatically simplifies the function
827 vs the implementation in 5.8.7, making it table-driven.  All fields
828 are used for this, except for arena_size.
829
830 For the sv-types that have no bodies, arenas are not used, so those
831 PL_body_roots[sv_type] are unused, and can be overloaded.  In
832 something of a special case, SVt_NULL is borrowed for HE arenas;
833 PL_body_roots[SVt_NULL] is filled by S_more_he, but the
834 bodies_by_type[SVt_NULL] slot is not used, as the table is not
835 available in hv.c,
836
837 PTEs also use arenas, but are never seen in Perl_sv_upgrade.
838 Nonetheless, they get their own slot in bodies_by_type[SVt_NULL], so
839 they can just use the same allocation semantics.  At first, PTEs were
840 also overloaded to a non-body sv-type, but this yielded hard-to-find
841 malloc bugs, so was simplified by claiming a new slot.  This choice
842 has no consequence at this time.
843
844 */
845
846 struct body_details {
847     U8 body_size;       /* Size to allocate  */
848     U8 copy;            /* Size of structure to copy (may be shorter)  */
849     U8 offset;
850     unsigned int type : 4;          /* We have space for a sanity check.  */
851     unsigned int cant_upgrade : 1;  /* Cannot upgrade this type */
852     unsigned int zero_nv : 1;       /* zero the NV when upgrading from this */
853     unsigned int arena : 1;         /* Allocated from an arena */
854     size_t arena_size;              /* Size of arena to allocate */
855 };
856
857 #define HADNV FALSE
858 #define NONV TRUE
859
860
861 #ifdef PURIFY
862 /* With -DPURFIY we allocate everything directly, and don't use arenas.
863    This seems a rather elegant way to simplify some of the code below.  */
864 #define HASARENA FALSE
865 #else
866 #define HASARENA TRUE
867 #endif
868 #define NOARENA FALSE
869
870 /* Size the arenas to exactly fit a given number of bodies.  A count
871    of 0 fits the max number bodies into a PERL_ARENA_SIZE.block,
872    simplifying the default.  If count > 0, the arena is sized to fit
873    only that many bodies, allowing arenas to be used for large, rare
874    bodies (XPVFM, XPVIO) without undue waste.  The arena size is
875    limited by PERL_ARENA_SIZE, so we can safely oversize the
876    declarations.
877  */
878 #define FIT_ARENA(count, body_size)                     \
879     (!count || count * body_size > PERL_ARENA_SIZE)     \
880         ? (int)(PERL_ARENA_SIZE / body_size) * body_size : count * body_size
881
882 /* A macro to work out the offset needed to subtract from a pointer to (say)
883
884 typedef struct {
885     STRLEN      xpv_cur;
886     STRLEN      xpv_len;
887 } xpv_allocated;
888
889 to make its members accessible via a pointer to (say)
890
891 struct xpv {
892     NV          xnv_nv;
893     STRLEN      xpv_cur;
894     STRLEN      xpv_len;
895 };
896
897 */
898
899 #define relative_STRUCT_OFFSET(longer, shorter, member) \
900     (STRUCT_OFFSET(shorter, member) - STRUCT_OFFSET(longer, member))
901
902 /* Calculate the length to copy. Specifically work out the length less any
903    final padding the compiler needed to add.  See the comment in sv_upgrade
904    for why copying the padding proved to be a bug.  */
905
906 #define copy_length(type, last_member) \
907         STRUCT_OFFSET(type, last_member) \
908         + sizeof (((type*)SvANY((SV*)0))->last_member)
909
910 static const struct body_details bodies_by_type[] = {
911     { sizeof(HE), 0, 0, SVt_NULL,
912       FALSE, NONV, NOARENA, FIT_ARENA(0, sizeof(HE)) },
913
914     /* IVs are in the head, so the allocation size is 0.
915        However, the slot is overloaded for PTEs.  */
916     { sizeof(struct ptr_tbl_ent), /* This is used for PTEs.  */
917       sizeof(IV), /* This is used to copy out the IV body.  */
918       STRUCT_OFFSET(XPVIV, xiv_iv), SVt_IV, FALSE, NONV,
919       NOARENA /* IVS don't need an arena  */,
920       /* But PTEs need to know the size of their arena  */
921       FIT_ARENA(0, sizeof(struct ptr_tbl_ent))
922     },
923
924     /* 8 bytes on most ILP32 with IEEE doubles */
925     { sizeof(NV), sizeof(NV), 0, SVt_NV, FALSE, HADNV, HASARENA,
926       FIT_ARENA(0, sizeof(NV)) },
927
928     /* RVs are in the head now.  */
929     { 0, 0, 0, SVt_RV, FALSE, NONV, NOARENA, 0 },
930
931     /* 8 bytes on most ILP32 with IEEE doubles */
932     { sizeof(xpv_allocated),
933       copy_length(XPV, xpv_len)
934       - relative_STRUCT_OFFSET(xpv_allocated, XPV, xpv_cur),
935       + relative_STRUCT_OFFSET(xpv_allocated, XPV, xpv_cur),
936       SVt_PV, FALSE, NONV, HASARENA, FIT_ARENA(0, sizeof(xpv_allocated)) },
937
938     /* 12 */
939     { sizeof(xpviv_allocated),
940       copy_length(XPVIV, xiv_u)
941       - relative_STRUCT_OFFSET(xpviv_allocated, XPVIV, xpv_cur),
942       + relative_STRUCT_OFFSET(xpviv_allocated, XPVIV, xpv_cur),
943       SVt_PVIV, FALSE, NONV, HASARENA, FIT_ARENA(0, sizeof(xpviv_allocated)) },
944
945     /* 20 */
946     { sizeof(XPVNV), copy_length(XPVNV, xiv_u), 0, SVt_PVNV, FALSE, HADNV,
947       HASARENA, FIT_ARENA(0, sizeof(XPVNV)) },
948
949     /* 28 */
950     { sizeof(XPVMG), copy_length(XPVMG, xmg_stash), 0, SVt_PVMG, FALSE, HADNV,
951       HASARENA, FIT_ARENA(0, sizeof(XPVMG)) },
952     
953     /* 36 */
954     { sizeof(XPVBM), sizeof(XPVBM), 0, SVt_PVBM, TRUE, HADNV,
955       HASARENA, FIT_ARENA(0, sizeof(XPVBM)) },
956
957     /* 48 */
958     { sizeof(XPVGV), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
959       HASARENA, FIT_ARENA(0, sizeof(XPVGV)) },
960     
961     /* 64 */
962     { sizeof(XPVLV), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
963       HASARENA, FIT_ARENA(0, sizeof(XPVLV)) },
964
965     { sizeof(xpvav_allocated),
966       copy_length(XPVAV, xmg_stash)
967       - relative_STRUCT_OFFSET(xpvav_allocated, XPVAV, xav_fill),
968       + relative_STRUCT_OFFSET(xpvav_allocated, XPVAV, xav_fill),
969       SVt_PVAV, TRUE, HADNV, HASARENA, FIT_ARENA(0, sizeof(xpvav_allocated)) },
970
971     { sizeof(xpvhv_allocated),
972       copy_length(XPVHV, xmg_stash)
973       - relative_STRUCT_OFFSET(xpvhv_allocated, XPVHV, xhv_fill),
974       + relative_STRUCT_OFFSET(xpvhv_allocated, XPVHV, xhv_fill),
975       SVt_PVHV, TRUE, HADNV, HASARENA, FIT_ARENA(0, sizeof(xpvhv_allocated)) },
976
977     /* 56 */
978     { sizeof(xpvcv_allocated), sizeof(xpvcv_allocated),
979       + relative_STRUCT_OFFSET(xpvcv_allocated, XPVCV, xpv_cur),
980       SVt_PVCV, TRUE, NONV, HASARENA, FIT_ARENA(0, sizeof(xpvcv_allocated)) },
981
982     { sizeof(xpvfm_allocated), sizeof(xpvfm_allocated),
983       + relative_STRUCT_OFFSET(xpvfm_allocated, XPVFM, xpv_cur),
984       SVt_PVFM, TRUE, NONV, NOARENA, FIT_ARENA(20, sizeof(xpvfm_allocated)) },
985
986     /* XPVIO is 84 bytes, fits 48x */
987     { sizeof(XPVIO), sizeof(XPVIO), 0, SVt_PVIO, TRUE, HADNV,
988       HASARENA, FIT_ARENA(24, sizeof(XPVIO)) },
989 };
990
991 #define new_body_type(sv_type)          \
992     (void *)((char *)S_new_body(aTHX_ sv_type))
993
994 #define del_body_type(p, sv_type)       \
995     del_body(p, &PL_body_roots[sv_type])
996
997
998 #define new_body_allocated(sv_type)             \
999     (void *)((char *)S_new_body(aTHX_ sv_type)  \
1000              - bodies_by_type[sv_type].offset)
1001
1002 #define del_body_allocated(p, sv_type)          \
1003     del_body(p + bodies_by_type[sv_type].offset, &PL_body_roots[sv_type])
1004
1005
1006 #define my_safemalloc(s)        (void*)safemalloc(s)
1007 #define my_safecalloc(s)        (void*)safecalloc(s, 1)
1008 #define my_safefree(p)  safefree((char*)p)
1009
1010 #ifdef PURIFY
1011
1012 #define new_XNV()       my_safemalloc(sizeof(XPVNV))
1013 #define del_XNV(p)      my_safefree(p)
1014
1015 #define new_XPVNV()     my_safemalloc(sizeof(XPVNV))
1016 #define del_XPVNV(p)    my_safefree(p)
1017
1018 #define new_XPVAV()     my_safemalloc(sizeof(XPVAV))
1019 #define del_XPVAV(p)    my_safefree(p)
1020
1021 #define new_XPVHV()     my_safemalloc(sizeof(XPVHV))
1022 #define del_XPVHV(p)    my_safefree(p)
1023
1024 #define new_XPVMG()     my_safemalloc(sizeof(XPVMG))
1025 #define del_XPVMG(p)    my_safefree(p)
1026
1027 #define new_XPVGV()     my_safemalloc(sizeof(XPVGV))
1028 #define del_XPVGV(p)    my_safefree(p)
1029
1030 #else /* !PURIFY */
1031
1032 #define new_XNV()       new_body_type(SVt_NV)
1033 #define del_XNV(p)      del_body_type(p, SVt_NV)
1034
1035 #define new_XPVNV()     new_body_type(SVt_PVNV)
1036 #define del_XPVNV(p)    del_body_type(p, SVt_PVNV)
1037
1038 #define new_XPVAV()     new_body_allocated(SVt_PVAV)
1039 #define del_XPVAV(p)    del_body_allocated(p, SVt_PVAV)
1040
1041 #define new_XPVHV()     new_body_allocated(SVt_PVHV)
1042 #define del_XPVHV(p)    del_body_allocated(p, SVt_PVHV)
1043
1044 #define new_XPVMG()     new_body_type(SVt_PVMG)
1045 #define del_XPVMG(p)    del_body_type(p, SVt_PVMG)
1046
1047 #define new_XPVGV()     new_body_type(SVt_PVGV)
1048 #define del_XPVGV(p)    del_body_type(p, SVt_PVGV)
1049
1050 #endif /* PURIFY */
1051
1052 /* no arena for you! */
1053
1054 #define new_NOARENA(details) \
1055         my_safemalloc((details)->body_size + (details)->offset)
1056 #define new_NOARENAZ(details) \
1057         my_safecalloc((details)->body_size + (details)->offset)
1058
1059 #ifdef DEBUGGING
1060 static bool done_sanity_check;
1061 #endif
1062
1063 STATIC void *
1064 S_more_bodies (pTHX_ svtype sv_type)
1065 {
1066     dVAR;
1067     void ** const root = &PL_body_roots[sv_type];
1068     const struct body_details * const bdp = &bodies_by_type[sv_type];
1069     const size_t body_size = bdp->body_size;
1070     char *start;
1071     const char *end;
1072
1073     assert(bdp->arena_size);
1074
1075 #ifdef DEBUGGING
1076     if (!done_sanity_check) {
1077         int i = SVt_LAST;
1078
1079         done_sanity_check = TRUE;
1080
1081         while (i--)
1082             assert (bodies_by_type[i].type == i);
1083     }
1084 #endif
1085
1086     start = (char*) Perl_get_arena(aTHX_ bdp->arena_size);
1087
1088     end = start + bdp->arena_size - body_size;
1089
1090 #if !ARENASETS
1091     /* The initial slot is used to link the arenas together, so it isn't to be
1092        linked into the list of ready-to-use bodies.  */
1093     start += body_size;
1094 #else
1095     /* computed count doesnt reflect the 1st slot reservation */
1096     DEBUG_m(PerlIO_printf(Perl_debug_log,
1097                           "arena %p end %p arena-size %d type %d size %d ct %d\n",
1098                           start, end, bdp->arena_size, sv_type, body_size,
1099                           bdp->arena_size / body_size));
1100 #endif
1101
1102     *root = (void *)start;
1103
1104     while (start < end) {
1105         char * const next = start + body_size;
1106         *(void**) start = (void *)next;
1107         start = next;
1108     }
1109     *(void **)start = 0;
1110
1111     return *root;
1112 }
1113
1114 /* grab a new thing from the free list, allocating more if necessary.
1115    The inline version is used for speed in hot routines, and the
1116    function using it serves the rest (unless PURIFY).
1117 */
1118 #define new_body_inline(xpv, sv_type) \
1119     STMT_START { \
1120         void ** const r3wt = &PL_body_roots[sv_type]; \
1121         LOCK_SV_MUTEX; \
1122         xpv = *((void **)(r3wt)) \
1123           ? *((void **)(r3wt)) : S_more_bodies(aTHX_ sv_type); \
1124         *(r3wt) = *(void**)(xpv); \
1125         UNLOCK_SV_MUTEX; \
1126     } STMT_END
1127
1128 #ifndef PURIFY
1129
1130 STATIC void *
1131 S_new_body(pTHX_ svtype sv_type)
1132 {
1133     dVAR;
1134     void *xpv;
1135     new_body_inline(xpv, sv_type);
1136     return xpv;
1137 }
1138
1139 #endif
1140
1141 /*
1142 =for apidoc sv_upgrade
1143
1144 Upgrade an SV to a more complex form.  Generally adds a new body type to the
1145 SV, then copies across as much information as possible from the old body.
1146 You generally want to use the C<SvUPGRADE> macro wrapper. See also C<svtype>.
1147
1148 =cut
1149 */
1150
1151 void
1152 Perl_sv_upgrade(pTHX_ register SV *sv, U32 new_type)
1153 {
1154     dVAR;
1155     void*       old_body;
1156     void*       new_body;
1157     const U32   old_type = SvTYPE(sv);
1158     const struct body_details *new_type_details;
1159     const struct body_details *const old_type_details
1160         = bodies_by_type + old_type;
1161
1162     if (new_type != SVt_PV && SvIsCOW(sv)) {
1163         sv_force_normal_flags(sv, 0);
1164     }
1165
1166     if (old_type == new_type)
1167         return;
1168
1169     if (old_type > new_type)
1170         Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1171                 (int)old_type, (int)new_type);
1172
1173
1174     old_body = SvANY(sv);
1175
1176     /* Copying structures onto other structures that have been neatly zeroed
1177        has a subtle gotcha. Consider XPVMG
1178
1179        +------+------+------+------+------+-------+-------+
1180        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |
1181        +------+------+------+------+------+-------+-------+
1182        0      4      8     12     16     20      24      28
1183
1184        where NVs are aligned to 8 bytes, so that sizeof that structure is
1185        actually 32 bytes long, with 4 bytes of padding at the end:
1186
1187        +------+------+------+------+------+-------+-------+------+
1188        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH | ???  |
1189        +------+------+------+------+------+-------+-------+------+
1190        0      4      8     12     16     20      24      28     32
1191
1192        so what happens if you allocate memory for this structure:
1193
1194        +------+------+------+------+------+-------+-------+------+------+...
1195        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |  GP  | NAME |
1196        +------+------+------+------+------+-------+-------+------+------+...
1197        0      4      8     12     16     20      24      28     32     36
1198
1199        zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1200        expect, because you copy the area marked ??? onto GP. Now, ??? may have
1201        started out as zero once, but it's quite possible that it isn't. So now,
1202        rather than a nicely zeroed GP, you have it pointing somewhere random.
1203        Bugs ensue.
1204
1205        (In fact, GP ends up pointing at a previous GP structure, because the
1206        principle cause of the padding in XPVMG getting garbage is a copy of
1207        sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob)
1208
1209        So we are careful and work out the size of used parts of all the
1210        structures.  */
1211
1212     switch (old_type) {
1213     case SVt_NULL:
1214         break;
1215     case SVt_IV:
1216         if (new_type < SVt_PVIV) {
1217             new_type = (new_type == SVt_NV)
1218                 ? SVt_PVNV : SVt_PVIV;
1219         }
1220         break;
1221     case SVt_NV:
1222         if (new_type < SVt_PVNV) {
1223             new_type = SVt_PVNV;
1224         }
1225         break;
1226     case SVt_RV:
1227         break;
1228     case SVt_PV:
1229         assert(new_type > SVt_PV);
1230         assert(SVt_IV < SVt_PV);
1231         assert(SVt_NV < SVt_PV);
1232         break;
1233     case SVt_PVIV:
1234         break;
1235     case SVt_PVNV:
1236         break;
1237     case SVt_PVMG:
1238         /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1239            there's no way that it can be safely upgraded, because perl.c
1240            expects to Safefree(SvANY(PL_mess_sv))  */
1241         assert(sv != PL_mess_sv);
1242         /* This flag bit is used to mean other things in other scalar types.
1243            Given that it only has meaning inside the pad, it shouldn't be set
1244            on anything that can get upgraded.  */
1245         assert(!SvPAD_TYPED(sv));
1246         break;
1247     default:
1248         if (old_type_details->cant_upgrade)
1249             Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1250                        sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
1251     }
1252     new_type_details = bodies_by_type + new_type;
1253
1254     SvFLAGS(sv) &= ~SVTYPEMASK;
1255     SvFLAGS(sv) |= new_type;
1256
1257     /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1258        the return statements above will have triggered.  */
1259     assert (new_type != SVt_NULL);
1260     switch (new_type) {
1261     case SVt_IV:
1262         assert(old_type == SVt_NULL);
1263         SvANY(sv) = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
1264         SvIV_set(sv, 0);
1265         return;
1266     case SVt_NV:
1267         assert(old_type == SVt_NULL);
1268         SvANY(sv) = new_XNV();
1269         SvNV_set(sv, 0);
1270         return;
1271     case SVt_RV:
1272         assert(old_type == SVt_NULL);
1273         SvANY(sv) = &sv->sv_u.svu_rv;
1274         SvRV_set(sv, 0);
1275         return;
1276     case SVt_PVHV:
1277     case SVt_PVAV:
1278         assert(new_type_details->body_size);
1279
1280 #ifndef PURIFY  
1281         assert(new_type_details->arena);
1282         assert(new_type_details->arena_size);
1283         /* This points to the start of the allocated area.  */
1284         new_body_inline(new_body, new_type);
1285         Zero(new_body, new_type_details->body_size, char);
1286         new_body = ((char *)new_body) - new_type_details->offset;
1287 #else
1288         /* We always allocated the full length item with PURIFY. To do this
1289            we fake things so that arena is false for all 16 types..  */
1290         new_body = new_NOARENAZ(new_type_details);
1291 #endif
1292         SvANY(sv) = new_body;
1293         if (new_type == SVt_PVAV) {
1294             AvMAX(sv)   = -1;
1295             AvFILLp(sv) = -1;
1296             AvREAL_only(sv);
1297         }
1298
1299         /* SVt_NULL isn't the only thing upgraded to AV or HV.
1300            The target created by newSVrv also is, and it can have magic.
1301            However, it never has SvPVX set.
1302         */
1303         if (old_type >= SVt_RV) {
1304             assert(SvPVX_const(sv) == 0);
1305         }
1306
1307         /* Could put this in the else clause below, as PVMG must have SvPVX
1308            0 already (the assertion above)  */
1309         SvPV_set(sv, NULL);
1310
1311         if (old_type >= SVt_PVMG) {
1312             SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic);
1313             SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
1314         }
1315         break;
1316
1317
1318     case SVt_PVIV:
1319         /* XXX Is this still needed?  Was it ever needed?   Surely as there is
1320            no route from NV to PVIV, NOK can never be true  */
1321         assert(!SvNOKp(sv));
1322         assert(!SvNOK(sv));
1323     case SVt_PVIO:
1324     case SVt_PVFM:
1325     case SVt_PVBM:
1326     case SVt_PVGV:
1327     case SVt_PVCV:
1328     case SVt_PVLV:
1329     case SVt_PVMG:
1330     case SVt_PVNV:
1331     case SVt_PV:
1332
1333         assert(new_type_details->body_size);
1334         /* We always allocated the full length item with PURIFY. To do this
1335            we fake things so that arena is false for all 16 types..  */
1336         if(new_type_details->arena) {
1337             /* This points to the start of the allocated area.  */
1338             new_body_inline(new_body, new_type);
1339             Zero(new_body, new_type_details->body_size, char);
1340             new_body = ((char *)new_body) - new_type_details->offset;
1341         } else {
1342             new_body = new_NOARENAZ(new_type_details);
1343         }
1344         SvANY(sv) = new_body;
1345
1346         if (old_type_details->copy) {
1347             Copy((char *)old_body + old_type_details->offset,
1348                  (char *)new_body + old_type_details->offset,
1349                  old_type_details->copy, char);
1350         }
1351
1352 #ifndef NV_ZERO_IS_ALLBITS_ZERO
1353         /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
1354          * correct 0.0 for us.  Otherwise, if the old body didn't have an
1355          * NV slot, but the new one does, then we need to initialise the
1356          * freshly created NV slot with whatever the correct bit pattern is
1357          * for 0.0  */
1358         if (old_type_details->zero_nv && !new_type_details->zero_nv)
1359             SvNV_set(sv, 0);
1360 #endif
1361
1362         if (new_type == SVt_PVIO)
1363             IoPAGE_LEN(sv) = 60;
1364         if (old_type < SVt_RV)
1365             SvPV_set(sv, NULL);
1366         break;
1367     default:
1368         Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1369                    (unsigned long)new_type);
1370     }
1371
1372     if (old_type_details->arena) {
1373         /* If there was an old body, then we need to free it.
1374            Note that there is an assumption that all bodies of types that
1375            can be upgraded came from arenas. Only the more complex non-
1376            upgradable types are allowed to be directly malloc()ed.  */
1377 #ifdef PURIFY
1378         my_safefree(old_body);
1379 #else
1380         del_body((void*)((char*)old_body + old_type_details->offset),
1381                  &PL_body_roots[old_type]);
1382 #endif
1383     }
1384 }
1385
1386 /*
1387 =for apidoc sv_backoff
1388
1389 Remove any string offset. You should normally use the C<SvOOK_off> macro
1390 wrapper instead.
1391
1392 =cut
1393 */
1394
1395 int
1396 Perl_sv_backoff(pTHX_ register SV *sv)
1397 {
1398     PERL_UNUSED_CONTEXT;
1399     assert(SvOOK(sv));
1400     assert(SvTYPE(sv) != SVt_PVHV);
1401     assert(SvTYPE(sv) != SVt_PVAV);
1402     if (SvIVX(sv)) {
1403         const char * const s = SvPVX_const(sv);
1404         SvLEN_set(sv, SvLEN(sv) + SvIVX(sv));
1405         SvPV_set(sv, SvPVX(sv) - SvIVX(sv));
1406         SvIV_set(sv, 0);
1407         Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1408     }
1409     SvFLAGS(sv) &= ~SVf_OOK;
1410     return 0;
1411 }
1412
1413 /*
1414 =for apidoc sv_grow
1415
1416 Expands the character buffer in the SV.  If necessary, uses C<sv_unref> and
1417 upgrades the SV to C<SVt_PV>.  Returns a pointer to the character buffer.
1418 Use the C<SvGROW> wrapper instead.
1419
1420 =cut
1421 */
1422
1423 char *
1424 Perl_sv_grow(pTHX_ register SV *sv, register STRLEN newlen)
1425 {
1426     register char *s;
1427
1428 #ifdef HAS_64K_LIMIT
1429     if (newlen >= 0x10000) {
1430         PerlIO_printf(Perl_debug_log,
1431                       "Allocation too large: %"UVxf"\n", (UV)newlen);
1432         my_exit(1);
1433     }
1434 #endif /* HAS_64K_LIMIT */
1435     if (SvROK(sv))
1436         sv_unref(sv);
1437     if (SvTYPE(sv) < SVt_PV) {
1438         sv_upgrade(sv, SVt_PV);
1439         s = SvPVX_mutable(sv);
1440     }
1441     else if (SvOOK(sv)) {       /* pv is offset? */
1442         sv_backoff(sv);
1443         s = SvPVX_mutable(sv);
1444         if (newlen > SvLEN(sv))
1445             newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1446 #ifdef HAS_64K_LIMIT
1447         if (newlen >= 0x10000)
1448             newlen = 0xFFFF;
1449 #endif
1450     }
1451     else
1452         s = SvPVX_mutable(sv);
1453
1454     if (newlen > SvLEN(sv)) {           /* need more room? */
1455         newlen = PERL_STRLEN_ROUNDUP(newlen);
1456         if (SvLEN(sv) && s) {
1457 #ifdef MYMALLOC
1458             const STRLEN l = malloced_size((void*)SvPVX_const(sv));
1459             if (newlen <= l) {
1460                 SvLEN_set(sv, l);
1461                 return s;
1462             } else
1463 #endif
1464             s = saferealloc(s, newlen);
1465         }
1466         else {
1467             s = safemalloc(newlen);
1468             if (SvPVX_const(sv) && SvCUR(sv)) {
1469                 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1470             }
1471         }
1472         SvPV_set(sv, s);
1473         SvLEN_set(sv, newlen);
1474     }
1475     return s;
1476 }
1477
1478 /*
1479 =for apidoc sv_setiv
1480
1481 Copies an integer into the given SV, upgrading first if necessary.
1482 Does not handle 'set' magic.  See also C<sv_setiv_mg>.
1483
1484 =cut
1485 */
1486
1487 void
1488 Perl_sv_setiv(pTHX_ register SV *sv, IV i)
1489 {
1490     dVAR;
1491     SV_CHECK_THINKFIRST_COW_DROP(sv);
1492     switch (SvTYPE(sv)) {
1493     case SVt_NULL:
1494         sv_upgrade(sv, SVt_IV);
1495         break;
1496     case SVt_NV:
1497         sv_upgrade(sv, SVt_PVNV);
1498         break;
1499     case SVt_RV:
1500     case SVt_PV:
1501         sv_upgrade(sv, SVt_PVIV);
1502         break;
1503
1504     case SVt_PVGV:
1505     case SVt_PVAV:
1506     case SVt_PVHV:
1507     case SVt_PVCV:
1508     case SVt_PVFM:
1509     case SVt_PVIO:
1510         Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1511                    OP_DESC(PL_op));
1512     }
1513     (void)SvIOK_only(sv);                       /* validate number */
1514     SvIV_set(sv, i);
1515     SvTAINT(sv);
1516 }
1517
1518 /*
1519 =for apidoc sv_setiv_mg
1520
1521 Like C<sv_setiv>, but also handles 'set' magic.
1522
1523 =cut
1524 */
1525
1526 void
1527 Perl_sv_setiv_mg(pTHX_ register SV *sv, IV i)
1528 {
1529     sv_setiv(sv,i);
1530     SvSETMAGIC(sv);
1531 }
1532
1533 /*
1534 =for apidoc sv_setuv
1535
1536 Copies an unsigned integer into the given SV, upgrading first if necessary.
1537 Does not handle 'set' magic.  See also C<sv_setuv_mg>.
1538
1539 =cut
1540 */
1541
1542 void
1543 Perl_sv_setuv(pTHX_ register SV *sv, UV u)
1544 {
1545     /* With these two if statements:
1546        u=1.49  s=0.52  cu=72.49  cs=10.64  scripts=270  tests=20865
1547
1548        without
1549        u=1.35  s=0.47  cu=73.45  cs=11.43  scripts=270  tests=20865
1550
1551        If you wish to remove them, please benchmark to see what the effect is
1552     */
1553     if (u <= (UV)IV_MAX) {
1554        sv_setiv(sv, (IV)u);
1555        return;
1556     }
1557     sv_setiv(sv, 0);
1558     SvIsUV_on(sv);
1559     SvUV_set(sv, u);
1560 }
1561
1562 /*
1563 =for apidoc sv_setuv_mg
1564
1565 Like C<sv_setuv>, but also handles 'set' magic.
1566
1567 =cut
1568 */
1569
1570 void
1571 Perl_sv_setuv_mg(pTHX_ register SV *sv, UV u)
1572 {
1573     sv_setiv(sv, 0);
1574     SvIsUV_on(sv);
1575     sv_setuv(sv,u);
1576     SvSETMAGIC(sv);
1577 }
1578
1579 /*
1580 =for apidoc sv_setnv
1581
1582 Copies a double into the given SV, upgrading first if necessary.
1583 Does not handle 'set' magic.  See also C<sv_setnv_mg>.
1584
1585 =cut
1586 */
1587
1588 void
1589 Perl_sv_setnv(pTHX_ register SV *sv, NV num)
1590 {
1591     dVAR;
1592     SV_CHECK_THINKFIRST_COW_DROP(sv);
1593     switch (SvTYPE(sv)) {
1594     case SVt_NULL:
1595     case SVt_IV:
1596         sv_upgrade(sv, SVt_NV);
1597         break;
1598     case SVt_RV:
1599     case SVt_PV:
1600     case SVt_PVIV:
1601         sv_upgrade(sv, SVt_PVNV);
1602         break;
1603
1604     case SVt_PVGV:
1605     case SVt_PVAV:
1606     case SVt_PVHV:
1607     case SVt_PVCV:
1608     case SVt_PVFM:
1609     case SVt_PVIO:
1610         Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1611                    OP_NAME(PL_op));
1612     }
1613     SvNV_set(sv, num);
1614     (void)SvNOK_only(sv);                       /* validate number */
1615     SvTAINT(sv);
1616 }
1617
1618 /*
1619 =for apidoc sv_setnv_mg
1620
1621 Like C<sv_setnv>, but also handles 'set' magic.
1622
1623 =cut
1624 */
1625
1626 void
1627 Perl_sv_setnv_mg(pTHX_ register SV *sv, NV num)
1628 {
1629     sv_setnv(sv,num);
1630     SvSETMAGIC(sv);
1631 }
1632
1633 /* Print an "isn't numeric" warning, using a cleaned-up,
1634  * printable version of the offending string
1635  */
1636
1637 STATIC void
1638 S_not_a_number(pTHX_ SV *sv)
1639 {
1640      dVAR;
1641      SV *dsv;
1642      char tmpbuf[64];
1643      const char *pv;
1644
1645      if (DO_UTF8(sv)) {
1646           dsv = sv_2mortal(newSVpvs(""));
1647           pv = sv_uni_display(dsv, sv, 10, 0);
1648      } else {
1649           char *d = tmpbuf;
1650           const char * const limit = tmpbuf + sizeof(tmpbuf) - 8;
1651           /* each *s can expand to 4 chars + "...\0",
1652              i.e. need room for 8 chars */
1653         
1654           const char *s = SvPVX_const(sv);
1655           const char * const end = s + SvCUR(sv);
1656           for ( ; s < end && d < limit; s++ ) {
1657                int ch = *s & 0xFF;
1658                if (ch & 128 && !isPRINT_LC(ch)) {
1659                     *d++ = 'M';
1660                     *d++ = '-';
1661                     ch &= 127;
1662                }
1663                if (ch == '\n') {
1664                     *d++ = '\\';
1665                     *d++ = 'n';
1666                }
1667                else if (ch == '\r') {
1668                     *d++ = '\\';
1669                     *d++ = 'r';
1670                }
1671                else if (ch == '\f') {
1672                     *d++ = '\\';
1673                     *d++ = 'f';
1674                }
1675                else if (ch == '\\') {
1676                     *d++ = '\\';
1677                     *d++ = '\\';
1678                }
1679                else if (ch == '\0') {
1680                     *d++ = '\\';
1681                     *d++ = '0';
1682                }
1683                else if (isPRINT_LC(ch))
1684                     *d++ = ch;
1685                else {
1686                     *d++ = '^';
1687                     *d++ = toCTRL(ch);
1688                }
1689           }
1690           if (s < end) {
1691                *d++ = '.';
1692                *d++ = '.';
1693                *d++ = '.';
1694           }
1695           *d = '\0';
1696           pv = tmpbuf;
1697     }
1698
1699     if (PL_op)
1700         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1701                     "Argument \"%s\" isn't numeric in %s", pv,
1702                     OP_DESC(PL_op));
1703     else
1704         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1705                     "Argument \"%s\" isn't numeric", pv);
1706 }
1707
1708 /*
1709 =for apidoc looks_like_number
1710
1711 Test if the content of an SV looks like a number (or is a number).
1712 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1713 non-numeric warning), even if your atof() doesn't grok them.
1714
1715 =cut
1716 */
1717
1718 I32
1719 Perl_looks_like_number(pTHX_ SV *sv)
1720 {
1721     register const char *sbegin;
1722     STRLEN len;
1723
1724     if (SvPOK(sv)) {
1725         sbegin = SvPVX_const(sv);
1726         len = SvCUR(sv);
1727     }
1728     else if (SvPOKp(sv))
1729         sbegin = SvPV_const(sv, len);
1730     else
1731         return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1732     return grok_number(sbegin, len, NULL);
1733 }
1734
1735 STATIC char *
1736 S_glob_2inpuv(pTHX_ GV *gv, STRLEN *len, bool want_number)
1737 {
1738     const U32 wasfake = SvFLAGS(gv) & SVf_FAKE;
1739     SV *const buffer = sv_newmortal();
1740
1741     /* FAKE globs can get coerced, so need to turn this off temporarily if it
1742        is on.  */
1743     SvFAKE_off(gv);
1744     gv_efullname3(buffer, gv, "*");
1745     SvFLAGS(gv) |= wasfake;
1746
1747     if (want_number) {
1748         /* We know that all GVs stringify to something that is not-a-number,
1749            so no need to test that.  */
1750         if (ckWARN(WARN_NUMERIC))
1751             not_a_number(buffer);
1752         /* We just want something true to return, so that S_sv_2iuv_common
1753            can tail call us and return true.  */
1754         return (char *) 1;
1755     } else {
1756         return SvPV(buffer, *len);
1757     }
1758 }
1759
1760 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1761    until proven guilty, assume that things are not that bad... */
1762
1763 /*
1764    NV_PRESERVES_UV:
1765
1766    As 64 bit platforms often have an NV that doesn't preserve all bits of
1767    an IV (an assumption perl has been based on to date) it becomes necessary
1768    to remove the assumption that the NV always carries enough precision to
1769    recreate the IV whenever needed, and that the NV is the canonical form.
1770    Instead, IV/UV and NV need to be given equal rights. So as to not lose
1771    precision as a side effect of conversion (which would lead to insanity
1772    and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1773    1) to distinguish between IV/UV/NV slots that have cached a valid
1774       conversion where precision was lost and IV/UV/NV slots that have a
1775       valid conversion which has lost no precision
1776    2) to ensure that if a numeric conversion to one form is requested that
1777       would lose precision, the precise conversion (or differently
1778       imprecise conversion) is also performed and cached, to prevent
1779       requests for different numeric formats on the same SV causing
1780       lossy conversion chains. (lossless conversion chains are perfectly
1781       acceptable (still))
1782
1783
1784    flags are used:
1785    SvIOKp is true if the IV slot contains a valid value
1786    SvIOK  is true only if the IV value is accurate (UV if SvIOK_UV true)
1787    SvNOKp is true if the NV slot contains a valid value
1788    SvNOK  is true only if the NV value is accurate
1789
1790    so
1791    while converting from PV to NV, check to see if converting that NV to an
1792    IV(or UV) would lose accuracy over a direct conversion from PV to
1793    IV(or UV). If it would, cache both conversions, return NV, but mark
1794    SV as IOK NOKp (ie not NOK).
1795
1796    While converting from PV to IV, check to see if converting that IV to an
1797    NV would lose accuracy over a direct conversion from PV to NV. If it
1798    would, cache both conversions, flag similarly.
1799
1800    Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1801    correctly because if IV & NV were set NV *always* overruled.
1802    Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1803    changes - now IV and NV together means that the two are interchangeable:
1804    SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1805
1806    The benefit of this is that operations such as pp_add know that if
1807    SvIOK is true for both left and right operands, then integer addition
1808    can be used instead of floating point (for cases where the result won't
1809    overflow). Before, floating point was always used, which could lead to
1810    loss of precision compared with integer addition.
1811
1812    * making IV and NV equal status should make maths accurate on 64 bit
1813      platforms
1814    * may speed up maths somewhat if pp_add and friends start to use
1815      integers when possible instead of fp. (Hopefully the overhead in
1816      looking for SvIOK and checking for overflow will not outweigh the
1817      fp to integer speedup)
1818    * will slow down integer operations (callers of SvIV) on "inaccurate"
1819      values, as the change from SvIOK to SvIOKp will cause a call into
1820      sv_2iv each time rather than a macro access direct to the IV slot
1821    * should speed up number->string conversion on integers as IV is
1822      favoured when IV and NV are equally accurate
1823
1824    ####################################################################
1825    You had better be using SvIOK_notUV if you want an IV for arithmetic:
1826    SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
1827    On the other hand, SvUOK is true iff UV.
1828    ####################################################################
1829
1830    Your mileage will vary depending your CPU's relative fp to integer
1831    performance ratio.
1832 */
1833
1834 #ifndef NV_PRESERVES_UV
1835 #  define IS_NUMBER_UNDERFLOW_IV 1
1836 #  define IS_NUMBER_UNDERFLOW_UV 2
1837 #  define IS_NUMBER_IV_AND_UV    2
1838 #  define IS_NUMBER_OVERFLOW_IV  4
1839 #  define IS_NUMBER_OVERFLOW_UV  5
1840
1841 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
1842
1843 /* For sv_2nv these three cases are "SvNOK and don't bother casting"  */
1844 STATIC int
1845 S_sv_2iuv_non_preserve(pTHX_ register SV *sv, I32 numtype)
1846 {
1847     dVAR;
1848     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));
1849     if (SvNVX(sv) < (NV)IV_MIN) {
1850         (void)SvIOKp_on(sv);
1851         (void)SvNOK_on(sv);
1852         SvIV_set(sv, IV_MIN);
1853         return IS_NUMBER_UNDERFLOW_IV;
1854     }
1855     if (SvNVX(sv) > (NV)UV_MAX) {
1856         (void)SvIOKp_on(sv);
1857         (void)SvNOK_on(sv);
1858         SvIsUV_on(sv);
1859         SvUV_set(sv, UV_MAX);
1860         return IS_NUMBER_OVERFLOW_UV;
1861     }
1862     (void)SvIOKp_on(sv);
1863     (void)SvNOK_on(sv);
1864     /* Can't use strtol etc to convert this string.  (See truth table in
1865        sv_2iv  */
1866     if (SvNVX(sv) <= (UV)IV_MAX) {
1867         SvIV_set(sv, I_V(SvNVX(sv)));
1868         if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1869             SvIOK_on(sv); /* Integer is precise. NOK, IOK */
1870         } else {
1871             /* Integer is imprecise. NOK, IOKp */
1872         }
1873         return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
1874     }
1875     SvIsUV_on(sv);
1876     SvUV_set(sv, U_V(SvNVX(sv)));
1877     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
1878         if (SvUVX(sv) == UV_MAX) {
1879             /* As we know that NVs don't preserve UVs, UV_MAX cannot
1880                possibly be preserved by NV. Hence, it must be overflow.
1881                NOK, IOKp */
1882             return IS_NUMBER_OVERFLOW_UV;
1883         }
1884         SvIOK_on(sv); /* Integer is precise. NOK, UOK */
1885     } else {
1886         /* Integer is imprecise. NOK, IOKp */
1887     }
1888     return IS_NUMBER_OVERFLOW_IV;
1889 }
1890 #endif /* !NV_PRESERVES_UV*/
1891
1892 STATIC bool
1893 S_sv_2iuv_common(pTHX_ SV *sv) {
1894     dVAR;
1895     if (SvNOKp(sv)) {
1896         /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
1897          * without also getting a cached IV/UV from it at the same time
1898          * (ie PV->NV conversion should detect loss of accuracy and cache
1899          * IV or UV at same time to avoid this. */
1900         /* IV-over-UV optimisation - choose to cache IV if possible */
1901
1902         if (SvTYPE(sv) == SVt_NV)
1903             sv_upgrade(sv, SVt_PVNV);
1904
1905         (void)SvIOKp_on(sv);    /* Must do this first, to clear any SvOOK */
1906         /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
1907            certainly cast into the IV range at IV_MAX, whereas the correct
1908            answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
1909            cases go to UV */
1910         if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
1911             SvIV_set(sv, I_V(SvNVX(sv)));
1912             if (SvNVX(sv) == (NV) SvIVX(sv)
1913 #ifndef NV_PRESERVES_UV
1914                 && (((UV)1 << NV_PRESERVES_UV_BITS) >
1915                     (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
1916                 /* Don't flag it as "accurately an integer" if the number
1917                    came from a (by definition imprecise) NV operation, and
1918                    we're outside the range of NV integer precision */
1919 #endif
1920                 ) {
1921                 SvIOK_on(sv);  /* Can this go wrong with rounding? NWC */
1922                 DEBUG_c(PerlIO_printf(Perl_debug_log,
1923                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
1924                                       PTR2UV(sv),
1925                                       SvNVX(sv),
1926                                       SvIVX(sv)));
1927
1928             } else {
1929                 /* IV not precise.  No need to convert from PV, as NV
1930                    conversion would already have cached IV if it detected
1931                    that PV->IV would be better than PV->NV->IV
1932                    flags already correct - don't set public IOK.  */
1933                 DEBUG_c(PerlIO_printf(Perl_debug_log,
1934                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
1935                                       PTR2UV(sv),
1936                                       SvNVX(sv),
1937                                       SvIVX(sv)));
1938             }
1939             /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
1940                but the cast (NV)IV_MIN rounds to a the value less (more
1941                negative) than IV_MIN which happens to be equal to SvNVX ??
1942                Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
1943                NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
1944                (NV)UVX == NVX are both true, but the values differ. :-(
1945                Hopefully for 2s complement IV_MIN is something like
1946                0x8000000000000000 which will be exact. NWC */
1947         }
1948         else {
1949             SvUV_set(sv, U_V(SvNVX(sv)));
1950             if (
1951                 (SvNVX(sv) == (NV) SvUVX(sv))
1952 #ifndef  NV_PRESERVES_UV
1953                 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
1954                 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
1955                 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
1956                 /* Don't flag it as "accurately an integer" if the number
1957                    came from a (by definition imprecise) NV operation, and
1958                    we're outside the range of NV integer precision */
1959 #endif
1960                 )
1961                 SvIOK_on(sv);
1962             SvIsUV_on(sv);
1963             DEBUG_c(PerlIO_printf(Perl_debug_log,
1964                                   "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
1965                                   PTR2UV(sv),
1966                                   SvUVX(sv),
1967                                   SvUVX(sv)));
1968         }
1969     }
1970     else if (SvPOKp(sv) && SvLEN(sv)) {
1971         UV value;
1972         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
1973         /* We want to avoid a possible problem when we cache an IV/ a UV which
1974            may be later translated to an NV, and the resulting NV is not
1975            the same as the direct translation of the initial string
1976            (eg 123.456 can shortcut to the IV 123 with atol(), but we must
1977            be careful to ensure that the value with the .456 is around if the
1978            NV value is requested in the future).
1979         
1980            This means that if we cache such an IV/a UV, we need to cache the
1981            NV as well.  Moreover, we trade speed for space, and do not
1982            cache the NV if we are sure it's not needed.
1983          */
1984
1985         /* SVt_PVNV is one higher than SVt_PVIV, hence this order  */
1986         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
1987              == IS_NUMBER_IN_UV) {
1988             /* It's definitely an integer, only upgrade to PVIV */
1989             if (SvTYPE(sv) < SVt_PVIV)
1990                 sv_upgrade(sv, SVt_PVIV);
1991             (void)SvIOK_on(sv);
1992         } else if (SvTYPE(sv) < SVt_PVNV)
1993             sv_upgrade(sv, SVt_PVNV);
1994
1995         /* If NVs preserve UVs then we only use the UV value if we know that
1996            we aren't going to call atof() below. If NVs don't preserve UVs
1997            then the value returned may have more precision than atof() will
1998            return, even though value isn't perfectly accurate.  */
1999         if ((numtype & (IS_NUMBER_IN_UV
2000 #ifdef NV_PRESERVES_UV
2001                         | IS_NUMBER_NOT_INT
2002 #endif
2003             )) == IS_NUMBER_IN_UV) {
2004             /* This won't turn off the public IOK flag if it was set above  */
2005             (void)SvIOKp_on(sv);
2006
2007             if (!(numtype & IS_NUMBER_NEG)) {
2008                 /* positive */;
2009                 if (value <= (UV)IV_MAX) {
2010                     SvIV_set(sv, (IV)value);
2011                 } else {
2012                     /* it didn't overflow, and it was positive. */
2013                     SvUV_set(sv, value);
2014                     SvIsUV_on(sv);
2015                 }
2016             } else {
2017                 /* 2s complement assumption  */
2018                 if (value <= (UV)IV_MIN) {
2019                     SvIV_set(sv, -(IV)value);
2020                 } else {
2021                     /* Too negative for an IV.  This is a double upgrade, but
2022                        I'm assuming it will be rare.  */
2023                     if (SvTYPE(sv) < SVt_PVNV)
2024                         sv_upgrade(sv, SVt_PVNV);
2025                     SvNOK_on(sv);
2026                     SvIOK_off(sv);
2027                     SvIOKp_on(sv);
2028                     SvNV_set(sv, -(NV)value);
2029                     SvIV_set(sv, IV_MIN);
2030                 }
2031             }
2032         }
2033         /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2034            will be in the previous block to set the IV slot, and the next
2035            block to set the NV slot.  So no else here.  */
2036         
2037         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2038             != IS_NUMBER_IN_UV) {
2039             /* It wasn't an (integer that doesn't overflow the UV). */
2040             SvNV_set(sv, Atof(SvPVX_const(sv)));
2041
2042             if (! numtype && ckWARN(WARN_NUMERIC))
2043                 not_a_number(sv);
2044
2045 #if defined(USE_LONG_DOUBLE)
2046             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
2047                                   PTR2UV(sv), SvNVX(sv)));
2048 #else
2049             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"NVgf")\n",
2050                                   PTR2UV(sv), SvNVX(sv)));
2051 #endif
2052
2053 #ifdef NV_PRESERVES_UV
2054             (void)SvIOKp_on(sv);
2055             (void)SvNOK_on(sv);
2056             if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2057                 SvIV_set(sv, I_V(SvNVX(sv)));
2058                 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2059                     SvIOK_on(sv);
2060                 } else {
2061                     /*EMPTY*/;  /* Integer is imprecise. NOK, IOKp */
2062                 }
2063                 /* UV will not work better than IV */
2064             } else {
2065                 if (SvNVX(sv) > (NV)UV_MAX) {
2066                     SvIsUV_on(sv);
2067                     /* Integer is inaccurate. NOK, IOKp, is UV */
2068                     SvUV_set(sv, UV_MAX);
2069                 } else {
2070                     SvUV_set(sv, U_V(SvNVX(sv)));
2071                     /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2072                        NV preservse UV so can do correct comparison.  */
2073                     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2074                         SvIOK_on(sv);
2075                     } else {
2076                         /*EMPTY*/;   /* Integer is imprecise. NOK, IOKp, is UV */
2077                     }
2078                 }
2079                 SvIsUV_on(sv);
2080             }
2081 #else /* NV_PRESERVES_UV */
2082             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2083                 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2084                 /* The IV/UV slot will have been set from value returned by
2085                    grok_number above.  The NV slot has just been set using
2086                    Atof.  */
2087                 SvNOK_on(sv);
2088                 assert (SvIOKp(sv));
2089             } else {
2090                 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2091                     U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2092                     /* Small enough to preserve all bits. */
2093                     (void)SvIOKp_on(sv);
2094                     SvNOK_on(sv);
2095                     SvIV_set(sv, I_V(SvNVX(sv)));
2096                     if ((NV)(SvIVX(sv)) == SvNVX(sv))
2097                         SvIOK_on(sv);
2098                     /* Assumption: first non-preserved integer is < IV_MAX,
2099                        this NV is in the preserved range, therefore: */
2100                     if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2101                           < (UV)IV_MAX)) {
2102                         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);
2103                     }
2104                 } else {
2105                     /* IN_UV NOT_INT
2106                          0      0       already failed to read UV.
2107                          0      1       already failed to read UV.
2108                          1      0       you won't get here in this case. IV/UV
2109                                         slot set, public IOK, Atof() unneeded.
2110                          1      1       already read UV.
2111                        so there's no point in sv_2iuv_non_preserve() attempting
2112                        to use atol, strtol, strtoul etc.  */
2113                     sv_2iuv_non_preserve (sv, numtype);
2114                 }
2115             }
2116 #endif /* NV_PRESERVES_UV */
2117         }
2118     }
2119     else  {
2120         if (((SvFLAGS(sv) & (SVp_POK|SVp_SCREAM)) == SVp_SCREAM)
2121             && (SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV)) {
2122             return PTR2IV(glob_2inpuv((GV *)sv, NULL, TRUE));
2123         }
2124         if (SvTYPE(sv) == SVt_PVGV)
2125             sv_dump(sv);
2126
2127         if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2128             if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2129                 report_uninit(sv);
2130         }
2131         if (SvTYPE(sv) < SVt_IV)
2132             /* Typically the caller expects that sv_any is not NULL now.  */
2133             sv_upgrade(sv, SVt_IV);
2134         /* Return 0 from the caller.  */
2135         return TRUE;
2136     }
2137     return FALSE;
2138 }
2139
2140 /*
2141 =for apidoc sv_2iv_flags
2142
2143 Return the integer value of an SV, doing any necessary string
2144 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2145 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2146
2147 =cut
2148 */
2149
2150 IV
2151 Perl_sv_2iv_flags(pTHX_ register SV *sv, I32 flags)
2152 {
2153     dVAR;
2154     if (!sv)
2155         return 0;
2156     if (SvGMAGICAL(sv)) {
2157         if (flags & SV_GMAGIC)
2158             mg_get(sv);
2159         if (SvIOKp(sv))
2160             return SvIVX(sv);
2161         if (SvNOKp(sv)) {
2162             return I_V(SvNVX(sv));
2163         }
2164         if (SvPOKp(sv) && SvLEN(sv)) {
2165             UV value;
2166             const int numtype
2167                 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2168
2169             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2170                 == IS_NUMBER_IN_UV) {
2171                 /* It's definitely an integer */
2172                 if (numtype & IS_NUMBER_NEG) {
2173                     if (value < (UV)IV_MIN)
2174                         return -(IV)value;
2175                 } else {
2176                     if (value < (UV)IV_MAX)
2177                         return (IV)value;
2178                 }
2179             }
2180             if (!numtype) {
2181                 if (ckWARN(WARN_NUMERIC))
2182                     not_a_number(sv);
2183             }
2184             return I_V(Atof(SvPVX_const(sv)));
2185         }
2186         if (SvROK(sv)) {
2187             goto return_rok;
2188         }
2189         assert(SvTYPE(sv) >= SVt_PVMG);
2190         /* This falls through to the report_uninit inside S_sv_2iuv_common.  */
2191     } else if (SvTHINKFIRST(sv)) {
2192         if (SvROK(sv)) {
2193         return_rok:
2194             if (SvAMAGIC(sv)) {
2195                 SV * const tmpstr=AMG_CALLun(sv,numer);
2196                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2197                     return SvIV(tmpstr);
2198                 }
2199             }
2200             return PTR2IV(SvRV(sv));
2201         }
2202         if (SvIsCOW(sv)) {
2203             sv_force_normal_flags(sv, 0);
2204         }
2205         if (SvREADONLY(sv) && !SvOK(sv)) {
2206             if (ckWARN(WARN_UNINITIALIZED))
2207                 report_uninit(sv);
2208             return 0;
2209         }
2210     }
2211     if (!SvIOKp(sv)) {
2212         if (S_sv_2iuv_common(aTHX_ sv))
2213             return 0;
2214     }
2215     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2216         PTR2UV(sv),SvIVX(sv)));
2217     return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2218 }
2219
2220 /*
2221 =for apidoc sv_2uv_flags
2222
2223 Return the unsigned integer value of an SV, doing any necessary string
2224 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2225 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2226
2227 =cut
2228 */
2229
2230 UV
2231 Perl_sv_2uv_flags(pTHX_ register SV *sv, I32 flags)
2232 {
2233     dVAR;
2234     if (!sv)
2235         return 0;
2236     if (SvGMAGICAL(sv)) {
2237         if (flags & SV_GMAGIC)
2238             mg_get(sv);
2239         if (SvIOKp(sv))
2240             return SvUVX(sv);
2241         if (SvNOKp(sv))
2242             return U_V(SvNVX(sv));
2243         if (SvPOKp(sv) && SvLEN(sv)) {
2244             UV value;
2245             const int numtype
2246                 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2247
2248             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2249                 == IS_NUMBER_IN_UV) {
2250                 /* It's definitely an integer */
2251                 if (!(numtype & IS_NUMBER_NEG))
2252                     return value;
2253             }
2254             if (!numtype) {
2255                 if (ckWARN(WARN_NUMERIC))
2256                     not_a_number(sv);
2257             }
2258             return U_V(Atof(SvPVX_const(sv)));
2259         }
2260         if (SvROK(sv)) {
2261             goto return_rok;
2262         }
2263         assert(SvTYPE(sv) >= SVt_PVMG);
2264         /* This falls through to the report_uninit inside S_sv_2iuv_common.  */
2265     } else if (SvTHINKFIRST(sv)) {
2266         if (SvROK(sv)) {
2267         return_rok:
2268             if (SvAMAGIC(sv)) {
2269                 SV *const tmpstr = AMG_CALLun(sv,numer);
2270                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2271                     return SvUV(tmpstr);
2272                 }
2273             }
2274             return PTR2UV(SvRV(sv));
2275         }
2276         if (SvIsCOW(sv)) {
2277             sv_force_normal_flags(sv, 0);
2278         }
2279         if (SvREADONLY(sv) && !SvOK(sv)) {
2280             if (ckWARN(WARN_UNINITIALIZED))
2281                 report_uninit(sv);
2282             return 0;
2283         }
2284     }
2285     if (!SvIOKp(sv)) {
2286         if (S_sv_2iuv_common(aTHX_ sv))
2287             return 0;
2288     }
2289
2290     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2291                           PTR2UV(sv),SvUVX(sv)));
2292     return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2293 }
2294
2295 /*
2296 =for apidoc sv_2nv
2297
2298 Return the num value of an SV, doing any necessary string or integer
2299 conversion, magic etc. Normally used via the C<SvNV(sv)> and C<SvNVx(sv)>
2300 macros.
2301
2302 =cut
2303 */
2304
2305 NV
2306 Perl_sv_2nv(pTHX_ register SV *sv)
2307 {
2308     dVAR;
2309     if (!sv)
2310         return 0.0;
2311     if (SvGMAGICAL(sv)) {
2312         mg_get(sv);
2313         if (SvNOKp(sv))
2314             return SvNVX(sv);
2315         if ((SvPOKp(sv) && SvLEN(sv)) && !SvIOKp(sv)) {
2316             if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2317                 !grok_number(SvPVX_const(sv), SvCUR(sv), NULL))
2318                 not_a_number(sv);
2319             return Atof(SvPVX_const(sv));
2320         }
2321         if (SvIOKp(sv)) {
2322             if (SvIsUV(sv))
2323                 return (NV)SvUVX(sv);
2324             else
2325                 return (NV)SvIVX(sv);
2326         }
2327         if (SvROK(sv)) {
2328             goto return_rok;
2329         }
2330         assert(SvTYPE(sv) >= SVt_PVMG);
2331         /* This falls through to the report_uninit near the end of the
2332            function. */
2333     } else if (SvTHINKFIRST(sv)) {
2334         if (SvROK(sv)) {
2335         return_rok:
2336             if (SvAMAGIC(sv)) {
2337                 SV *const tmpstr = AMG_CALLun(sv,numer);
2338                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2339                     return SvNV(tmpstr);
2340                 }
2341             }
2342             return PTR2NV(SvRV(sv));
2343         }
2344         if (SvIsCOW(sv)) {
2345             sv_force_normal_flags(sv, 0);
2346         }
2347         if (SvREADONLY(sv) && !SvOK(sv)) {
2348             if (ckWARN(WARN_UNINITIALIZED))
2349                 report_uninit(sv);
2350             return 0.0;
2351         }
2352     }
2353     if (SvTYPE(sv) < SVt_NV) {
2354         /* The logic to use SVt_PVNV if necessary is in sv_upgrade.  */
2355         sv_upgrade(sv, SVt_NV);
2356 #ifdef USE_LONG_DOUBLE
2357         DEBUG_c({
2358             STORE_NUMERIC_LOCAL_SET_STANDARD();
2359             PerlIO_printf(Perl_debug_log,
2360                           "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2361                           PTR2UV(sv), SvNVX(sv));
2362             RESTORE_NUMERIC_LOCAL();
2363         });
2364 #else
2365         DEBUG_c({
2366             STORE_NUMERIC_LOCAL_SET_STANDARD();
2367             PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%"NVgf")\n",
2368                           PTR2UV(sv), SvNVX(sv));
2369             RESTORE_NUMERIC_LOCAL();
2370         });
2371 #endif
2372     }
2373     else if (SvTYPE(sv) < SVt_PVNV)
2374         sv_upgrade(sv, SVt_PVNV);
2375     if (SvNOKp(sv)) {
2376         return SvNVX(sv);
2377     }
2378     if (SvIOKp(sv)) {
2379         SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2380 #ifdef NV_PRESERVES_UV
2381         SvNOK_on(sv);
2382 #else
2383         /* Only set the public NV OK flag if this NV preserves the IV  */
2384         /* Check it's not 0xFFFFFFFFFFFFFFFF */
2385         if (SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2386                        : (SvIVX(sv) == I_V(SvNVX(sv))))
2387             SvNOK_on(sv);
2388         else
2389             SvNOKp_on(sv);
2390 #endif
2391     }
2392     else if (SvPOKp(sv) && SvLEN(sv)) {
2393         UV value;
2394         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2395         if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2396             not_a_number(sv);
2397 #ifdef NV_PRESERVES_UV
2398         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2399             == IS_NUMBER_IN_UV) {
2400             /* It's definitely an integer */
2401             SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2402         } else
2403             SvNV_set(sv, Atof(SvPVX_const(sv)));
2404         SvNOK_on(sv);
2405 #else
2406         SvNV_set(sv, Atof(SvPVX_const(sv)));
2407         /* Only set the public NV OK flag if this NV preserves the value in
2408            the PV at least as well as an IV/UV would.
2409            Not sure how to do this 100% reliably. */
2410         /* if that shift count is out of range then Configure's test is
2411            wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2412            UV_BITS */
2413         if (((UV)1 << NV_PRESERVES_UV_BITS) >
2414             U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2415             SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2416         } else if (!(numtype & IS_NUMBER_IN_UV)) {
2417             /* Can't use strtol etc to convert this string, so don't try.
2418                sv_2iv and sv_2uv will use the NV to convert, not the PV.  */
2419             SvNOK_on(sv);
2420         } else {
2421             /* value has been set.  It may not be precise.  */
2422             if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2423                 /* 2s complement assumption for (UV)IV_MIN  */
2424                 SvNOK_on(sv); /* Integer is too negative.  */
2425             } else {
2426                 SvNOKp_on(sv);
2427                 SvIOKp_on(sv);
2428
2429                 if (numtype & IS_NUMBER_NEG) {
2430                     SvIV_set(sv, -(IV)value);
2431                 } else if (value <= (UV)IV_MAX) {
2432                     SvIV_set(sv, (IV)value);
2433                 } else {
2434                     SvUV_set(sv, value);
2435                     SvIsUV_on(sv);
2436                 }
2437
2438                 if (numtype & IS_NUMBER_NOT_INT) {
2439                     /* I believe that even if the original PV had decimals,
2440                        they are lost beyond the limit of the FP precision.
2441                        However, neither is canonical, so both only get p
2442                        flags.  NWC, 2000/11/25 */
2443                     /* Both already have p flags, so do nothing */
2444                 } else {
2445                     const NV nv = SvNVX(sv);
2446                     if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2447                         if (SvIVX(sv) == I_V(nv)) {
2448                             SvNOK_on(sv);
2449                         } else {
2450                             /* It had no "." so it must be integer.  */
2451                         }
2452                         SvIOK_on(sv);
2453                     } else {
2454                         /* between IV_MAX and NV(UV_MAX).
2455                            Could be slightly > UV_MAX */
2456
2457                         if (numtype & IS_NUMBER_NOT_INT) {
2458                             /* UV and NV both imprecise.  */
2459                         } else {
2460                             const UV nv_as_uv = U_V(nv);
2461
2462                             if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2463                                 SvNOK_on(sv);
2464                             }
2465                             SvIOK_on(sv);
2466                         }
2467                     }
2468                 }
2469             }
2470         }
2471 #endif /* NV_PRESERVES_UV */
2472     }
2473     else  {
2474         if (((SvFLAGS(sv) & (SVp_POK|SVp_SCREAM)) == SVp_SCREAM)
2475             && (SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV)) {
2476             glob_2inpuv((GV *)sv, NULL, TRUE);
2477             return 0.0;
2478         }
2479
2480         if (!PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP) && ckWARN(WARN_UNINITIALIZED))
2481             report_uninit(sv);
2482         assert (SvTYPE(sv) >= SVt_NV);
2483         /* Typically the caller expects that sv_any is not NULL now.  */
2484         /* XXX Ilya implies that this is a bug in callers that assume this
2485            and ideally should be fixed.  */
2486         return 0.0;
2487     }
2488 #if defined(USE_LONG_DOUBLE)
2489     DEBUG_c({
2490         STORE_NUMERIC_LOCAL_SET_STANDARD();
2491         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2492                       PTR2UV(sv), SvNVX(sv));
2493         RESTORE_NUMERIC_LOCAL();
2494     });
2495 #else
2496     DEBUG_c({
2497         STORE_NUMERIC_LOCAL_SET_STANDARD();
2498         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%"NVgf")\n",
2499                       PTR2UV(sv), SvNVX(sv));
2500         RESTORE_NUMERIC_LOCAL();
2501     });
2502 #endif
2503     return SvNVX(sv);
2504 }
2505
2506 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2507  * UV as a string towards the end of buf, and return pointers to start and
2508  * end of it.
2509  *
2510  * We assume that buf is at least TYPE_CHARS(UV) long.
2511  */
2512
2513 static char *
2514 S_uiv_2buf(char *buf, IV iv, UV uv, int is_uv, char **peob)
2515 {
2516     char *ptr = buf + TYPE_CHARS(UV);
2517     char * const ebuf = ptr;
2518     int sign;
2519
2520     if (is_uv)
2521         sign = 0;
2522     else if (iv >= 0) {
2523         uv = iv;
2524         sign = 0;
2525     } else {
2526         uv = -iv;
2527         sign = 1;
2528     }
2529     do {
2530         *--ptr = '0' + (char)(uv % 10);
2531     } while (uv /= 10);
2532     if (sign)
2533         *--ptr = '-';
2534     *peob = ebuf;
2535     return ptr;
2536 }
2537
2538 /* stringify_regexp(): private routine for use by sv_2pv_flags(): converts
2539  * a regexp to its stringified form.
2540  */
2541
2542 static char *
2543 S_stringify_regexp(pTHX_ SV *sv, MAGIC *mg, STRLEN *lp) {
2544     dVAR;
2545     const regexp * const re = (regexp *)mg->mg_obj;
2546
2547     if (!mg->mg_ptr) {
2548         const char *fptr = "msix";
2549         char reflags[6];
2550         char ch;
2551         int left = 0;
2552         int right = 4;
2553         bool need_newline = 0;
2554         U16 reganch = (U16)((re->reganch & PMf_COMPILETIME) >> 12);
2555
2556         while((ch = *fptr++)) {
2557             if(reganch & 1) {
2558                 reflags[left++] = ch;
2559             }
2560             else {
2561                 reflags[right--] = ch;
2562             }
2563             reganch >>= 1;
2564         }
2565         if(left != 4) {
2566             reflags[left] = '-';
2567             left = 5;
2568         }
2569
2570         mg->mg_len = re->prelen + 4 + left;
2571         /*
2572          * If /x was used, we have to worry about a regex ending with a
2573          * comment later being embedded within another regex. If so, we don't
2574          * want this regex's "commentization" to leak out to the right part of
2575          * the enclosing regex, we must cap it with a newline.
2576          *
2577          * So, if /x was used, we scan backwards from the end of the regex. If
2578          * we find a '#' before we find a newline, we need to add a newline
2579          * ourself. If we find a '\n' first (or if we don't find '#' or '\n'),
2580          * we don't need to add anything.  -jfriedl
2581          */
2582         if (PMf_EXTENDED & re->reganch) {
2583             const char *endptr = re->precomp + re->prelen;
2584             while (endptr >= re->precomp) {
2585                 const char c = *(endptr--);
2586                 if (c == '\n')
2587                     break; /* don't need another */
2588                 if (c == '#') {
2589                     /* we end while in a comment, so we need a newline */
2590                     mg->mg_len++; /* save space for it */
2591                     need_newline = 1; /* note to add it */
2592                     break;
2593                 }
2594             }
2595         }
2596
2597         Newx(mg->mg_ptr, mg->mg_len + 1 + left, char);
2598         mg->mg_ptr[0] = '(';
2599         mg->mg_ptr[1] = '?';
2600         Copy(reflags, mg->mg_ptr+2, left, char);
2601         *(mg->mg_ptr+left+2) = ':';
2602         Copy(re->precomp, mg->mg_ptr+3+left, re->prelen, char);
2603         if (need_newline)
2604             mg->mg_ptr[mg->mg_len - 2] = '\n';
2605         mg->mg_ptr[mg->mg_len - 1] = ')';
2606         mg->mg_ptr[mg->mg_len] = 0;
2607     }
2608     PL_reginterp_cnt += re->program[0].next_off;
2609     
2610     if (re->reganch & ROPT_UTF8)
2611         SvUTF8_on(sv);
2612     else
2613         SvUTF8_off(sv);
2614     if (lp)
2615         *lp = mg->mg_len;
2616     return mg->mg_ptr;
2617 }
2618
2619 /*
2620 =for apidoc sv_2pv_flags
2621
2622 Returns a pointer to the string value of an SV, and sets *lp to its length.
2623 If flags includes SV_GMAGIC, does an mg_get() first. Coerces sv to a string
2624 if necessary.
2625 Normally invoked via the C<SvPV_flags> macro. C<sv_2pv()> and C<sv_2pv_nomg>
2626 usually end up here too.
2627
2628 =cut
2629 */
2630
2631 char *
2632 Perl_sv_2pv_flags(pTHX_ register SV *sv, STRLEN *lp, I32 flags)
2633 {
2634     dVAR;
2635     register char *s;
2636
2637     if (!sv) {
2638         if (lp)
2639             *lp = 0;
2640         return (char *)"";
2641     }
2642     if (SvGMAGICAL(sv)) {
2643         if (flags & SV_GMAGIC)
2644             mg_get(sv);
2645         if (SvPOKp(sv)) {
2646             if (lp)
2647                 *lp = SvCUR(sv);
2648             if (flags & SV_MUTABLE_RETURN)
2649                 return SvPVX_mutable(sv);
2650             if (flags & SV_CONST_RETURN)
2651                 return (char *)SvPVX_const(sv);
2652             return SvPVX(sv);
2653         }
2654         if (SvIOKp(sv) || SvNOKp(sv)) {
2655             char tbuf[64];  /* Must fit sprintf/Gconvert of longest IV/NV */
2656             STRLEN len;
2657
2658             if (SvIOKp(sv)) {
2659                 len = SvIsUV(sv) ? my_sprintf(tbuf,"%"UVuf, (UV)SvUVX(sv))
2660                     : my_sprintf(tbuf,"%"IVdf, (IV)SvIVX(sv));
2661             } else {
2662                 Gconvert(SvNVX(sv), NV_DIG, 0, tbuf);
2663                 len = strlen(tbuf);
2664             }
2665             assert(!SvROK(sv));
2666             {
2667                 dVAR;
2668
2669 #ifdef FIXNEGATIVEZERO
2670                 if (len == 2 && tbuf[0] == '-' && tbuf[1] == '0') {
2671                     tbuf[0] = '0';
2672                     tbuf[1] = 0;
2673                     len = 1;
2674                 }
2675 #endif
2676                 SvUPGRADE(sv, SVt_PV);
2677                 if (lp)
2678                     *lp = len;
2679                 s = SvGROW_mutable(sv, len + 1);
2680                 SvCUR_set(sv, len);
2681                 SvPOKp_on(sv);
2682                 return memcpy(s, tbuf, len + 1);
2683             }
2684         }
2685         if (SvROK(sv)) {
2686             goto return_rok;
2687         }
2688         assert(SvTYPE(sv) >= SVt_PVMG);
2689         /* This falls through to the report_uninit near the end of the
2690            function. */
2691     } else if (SvTHINKFIRST(sv)) {
2692         if (SvROK(sv)) {
2693         return_rok:
2694             if (SvAMAGIC(sv)) {
2695                 SV *const tmpstr = AMG_CALLun(sv,string);
2696                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2697                     /* Unwrap this:  */
2698                     /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2699                      */
2700
2701                     char *pv;
2702                     if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2703                         if (flags & SV_CONST_RETURN) {
2704                             pv = (char *) SvPVX_const(tmpstr);
2705                         } else {
2706                             pv = (flags & SV_MUTABLE_RETURN)
2707                                 ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2708                         }
2709                         if (lp)
2710                             *lp = SvCUR(tmpstr);
2711                     } else {
2712                         pv = sv_2pv_flags(tmpstr, lp, flags);
2713                     }
2714                     if (SvUTF8(tmpstr))
2715                         SvUTF8_on(sv);
2716                     else
2717                         SvUTF8_off(sv);
2718                     return pv;
2719                 }
2720             }
2721             {
2722                 SV *tsv;
2723                 MAGIC *mg;
2724                 const SV *const referent = (SV*)SvRV(sv);
2725
2726                 if (!referent) {
2727                     tsv = sv_2mortal(newSVpvs("NULLREF"));
2728                 } else if (SvTYPE(referent) == SVt_PVMG
2729                            && ((SvFLAGS(referent) &
2730                                 (SVs_OBJECT|SVf_OK|SVs_GMG|SVs_SMG|SVs_RMG))
2731                                == (SVs_OBJECT|SVs_SMG))
2732                            && (mg = mg_find(referent, PERL_MAGIC_qr))) {
2733                     return stringify_regexp(sv, mg, lp);
2734                 } else {
2735                     const char *const typestr = sv_reftype(referent, 0);
2736
2737                     tsv = sv_newmortal();
2738                     if (SvOBJECT(referent)) {
2739                         const char *const name = HvNAME_get(SvSTASH(referent));
2740                         Perl_sv_setpvf(aTHX_ tsv, "%s=%s(0x%"UVxf")",
2741                                        name ? name : "__ANON__" , typestr,
2742                                        PTR2UV(referent));
2743                     }
2744                     else
2745                         Perl_sv_setpvf(aTHX_ tsv, "%s(0x%"UVxf")", typestr,
2746                                        PTR2UV(referent));
2747                 }
2748                 if (lp)
2749                     *lp = SvCUR(tsv);
2750                 return SvPVX(tsv);
2751             }
2752         }
2753         if (SvREADONLY(sv) && !SvOK(sv)) {
2754             if (ckWARN(WARN_UNINITIALIZED))
2755                 report_uninit(sv);
2756             if (lp)
2757                 *lp = 0;
2758             return (char *)"";
2759         }
2760     }
2761     if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
2762         /* I'm assuming that if both IV and NV are equally valid then
2763            converting the IV is going to be more efficient */
2764         const U32 isIOK = SvIOK(sv);
2765         const U32 isUIOK = SvIsUV(sv);
2766         char buf[TYPE_CHARS(UV)];
2767         char *ebuf, *ptr;
2768
2769         if (SvTYPE(sv) < SVt_PVIV)
2770             sv_upgrade(sv, SVt_PVIV);
2771         ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
2772         /* inlined from sv_setpvn */
2773         SvGROW_mutable(sv, (STRLEN)(ebuf - ptr + 1));
2774         Move(ptr,SvPVX_mutable(sv),ebuf - ptr,char);
2775         SvCUR_set(sv, ebuf - ptr);
2776         s = SvEND(sv);
2777         *s = '\0';
2778         if (isIOK)
2779             SvIOK_on(sv);
2780         else
2781             SvIOKp_on(sv);
2782         if (isUIOK)
2783             SvIsUV_on(sv);
2784     }
2785     else if (SvNOKp(sv)) {
2786         const int olderrno = errno;
2787         if (SvTYPE(sv) < SVt_PVNV)
2788             sv_upgrade(sv, SVt_PVNV);
2789         /* The +20 is pure guesswork.  Configure test needed. --jhi */
2790         s = SvGROW_mutable(sv, NV_DIG + 20);
2791         /* some Xenix systems wipe out errno here */
2792 #ifdef apollo
2793         if (SvNVX(sv) == 0.0)
2794             (void)strcpy(s,"0");
2795         else
2796 #endif /*apollo*/
2797         {
2798             Gconvert(SvNVX(sv), NV_DIG, 0, s);
2799         }
2800         errno = olderrno;
2801 #ifdef FIXNEGATIVEZERO
2802         if (*s == '-' && s[1] == '0' && !s[2])
2803             strcpy(s,"0");
2804 #endif
2805         while (*s) s++;
2806 #ifdef hcx
2807         if (s[-1] == '.')
2808             *--s = '\0';
2809 #endif
2810     }
2811     else {
2812         if (((SvFLAGS(sv) & (SVp_POK|SVp_SCREAM)) == SVp_SCREAM)
2813             && (SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV)) {
2814             return glob_2inpuv((GV *)sv, lp, FALSE);
2815         }
2816
2817         if (!PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP) && ckWARN(WARN_UNINITIALIZED))
2818             report_uninit(sv);
2819         if (lp)
2820             *lp = 0;
2821         if (SvTYPE(sv) < SVt_PV)
2822             /* Typically the caller expects that sv_any is not NULL now.  */
2823             sv_upgrade(sv, SVt_PV);
2824         return (char *)"";
2825     }
2826     {
2827         const STRLEN len = s - SvPVX_const(sv);
2828         if (lp) 
2829             *lp = len;
2830         SvCUR_set(sv, len);
2831     }
2832     SvPOK_on(sv);
2833     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
2834                           PTR2UV(sv),SvPVX_const(sv)));
2835     if (flags & SV_CONST_RETURN)
2836         return (char *)SvPVX_const(sv);
2837     if (flags & SV_MUTABLE_RETURN)
2838         return SvPVX_mutable(sv);
2839     return SvPVX(sv);
2840 }
2841
2842 /*
2843 =for apidoc sv_copypv
2844
2845 Copies a stringified representation of the source SV into the
2846 destination SV.  Automatically performs any necessary mg_get and
2847 coercion of numeric values into strings.  Guaranteed to preserve
2848 UTF-8 flag even from overloaded objects.  Similar in nature to
2849 sv_2pv[_flags] but operates directly on an SV instead of just the
2850 string.  Mostly uses sv_2pv_flags to do its work, except when that
2851 would lose the UTF-8'ness of the PV.
2852
2853 =cut
2854 */
2855
2856 void
2857 Perl_sv_copypv(pTHX_ SV *dsv, register SV *ssv)
2858 {
2859     STRLEN len;
2860     const char * const s = SvPV_const(ssv,len);
2861     sv_setpvn(dsv,s,len);
2862     if (SvUTF8(ssv))
2863         SvUTF8_on(dsv);
2864     else
2865         SvUTF8_off(dsv);
2866 }
2867
2868 /*
2869 =for apidoc sv_2pvbyte
2870
2871 Return a pointer to the byte-encoded representation of the SV, and set *lp
2872 to its length.  May cause the SV to be downgraded from UTF-8 as a
2873 side-effect.
2874
2875 Usually accessed via the C<SvPVbyte> macro.
2876
2877 =cut
2878 */
2879
2880 char *
2881 Perl_sv_2pvbyte(pTHX_ register SV *sv, STRLEN *lp)
2882 {
2883     sv_utf8_downgrade(sv,0);
2884     return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
2885 }
2886
2887 /*
2888 =for apidoc sv_2pvutf8
2889
2890 Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
2891 to its length.  May cause the SV to be upgraded to UTF-8 as a side-effect.
2892
2893 Usually accessed via the C<SvPVutf8> macro.
2894
2895 =cut
2896 */
2897
2898 char *
2899 Perl_sv_2pvutf8(pTHX_ register SV *sv, STRLEN *lp)
2900 {
2901     sv_utf8_upgrade(sv);
2902     return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
2903 }
2904
2905
2906 /*
2907 =for apidoc sv_2bool
2908
2909 This function is only called on magical items, and is only used by
2910 sv_true() or its macro equivalent.
2911
2912 =cut
2913 */
2914
2915 bool
2916 Perl_sv_2bool(pTHX_ register SV *sv)
2917 {
2918     dVAR;
2919     SvGETMAGIC(sv);
2920
2921     if (!SvOK(sv))
2922         return 0;
2923     if (SvROK(sv)) {
2924         if (SvAMAGIC(sv)) {
2925             SV * const tmpsv = AMG_CALLun(sv,bool_);
2926             if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2927                 return (bool)SvTRUE(tmpsv);
2928         }
2929         return SvRV(sv) != 0;
2930     }
2931     if (SvPOKp(sv)) {
2932         register XPV* const Xpvtmp = (XPV*)SvANY(sv);
2933         if (Xpvtmp &&
2934                 (*sv->sv_u.svu_pv > '0' ||
2935                 Xpvtmp->xpv_cur > 1 ||
2936                 (Xpvtmp->xpv_cur && *sv->sv_u.svu_pv != '0')))
2937             return 1;
2938         else
2939             return 0;
2940     }
2941     else {
2942         if (SvIOKp(sv))
2943             return SvIVX(sv) != 0;
2944         else {
2945             if (SvNOKp(sv))
2946                 return SvNVX(sv) != 0.0;
2947             else {
2948                 if ((SvFLAGS(sv) & SVp_SCREAM)
2949                     && (SvTYPE(sv) == (SVt_PVGV) || SvTYPE(sv) == (SVt_PVLV)))
2950                     return TRUE;
2951                 else
2952                     return FALSE;
2953             }
2954         }
2955     }
2956 }
2957
2958 /*
2959 =for apidoc sv_utf8_upgrade
2960
2961 Converts the PV of an SV to its UTF-8-encoded form.
2962 Forces the SV to string form if it is not already.
2963 Always sets the SvUTF8 flag to avoid future validity checks even
2964 if all the bytes have hibit clear.
2965
2966 This is not as a general purpose byte encoding to Unicode interface:
2967 use the Encode extension for that.
2968
2969 =for apidoc sv_utf8_upgrade_flags
2970
2971 Converts the PV of an SV to its UTF-8-encoded form.
2972 Forces the SV to string form if it is not already.
2973 Always sets the SvUTF8 flag to avoid future validity checks even
2974 if all the bytes have hibit clear. If C<flags> has C<SV_GMAGIC> bit set,
2975 will C<mg_get> on C<sv> if appropriate, else not. C<sv_utf8_upgrade> and
2976 C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
2977
2978 This is not as a general purpose byte encoding to Unicode interface:
2979 use the Encode extension for that.
2980
2981 =cut
2982 */
2983
2984 STRLEN
2985 Perl_sv_utf8_upgrade_flags(pTHX_ register SV *sv, I32 flags)
2986 {
2987     dVAR;
2988     if (sv == &PL_sv_undef)
2989         return 0;
2990     if (!SvPOK(sv)) {
2991         STRLEN len = 0;
2992         if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
2993             (void) sv_2pv_flags(sv,&len, flags);
2994             if (SvUTF8(sv))
2995                 return len;
2996         } else {
2997             (void) SvPV_force(sv,len);
2998         }
2999     }
3000
3001     if (SvUTF8(sv)) {
3002         return SvCUR(sv);
3003     }
3004
3005     if (SvIsCOW(sv)) {
3006         sv_force_normal_flags(sv, 0);
3007     }
3008
3009     if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING))
3010         sv_recode_to_utf8(sv, PL_encoding);
3011     else { /* Assume Latin-1/EBCDIC */
3012         /* This function could be much more efficient if we
3013          * had a FLAG in SVs to signal if there are any hibit
3014          * chars in the PV.  Given that there isn't such a flag
3015          * make the loop as fast as possible. */
3016         const U8 * const s = (U8 *) SvPVX_const(sv);
3017         const U8 * const e = (U8 *) SvEND(sv);
3018         const U8 *t = s;
3019         
3020         while (t < e) {
3021             const U8 ch = *t++;
3022             /* Check for hi bit */
3023             if (!NATIVE_IS_INVARIANT(ch)) {
3024                 STRLEN len = SvCUR(sv) + 1; /* Plus the \0 */
3025                 U8 * const recoded = bytes_to_utf8((U8*)s, &len);
3026
3027                 SvPV_free(sv); /* No longer using what was there before. */
3028                 SvPV_set(sv, (char*)recoded);
3029                 SvCUR_set(sv, len - 1);
3030                 SvLEN_set(sv, len); /* No longer know the real size. */
3031                 break;
3032             }
3033         }
3034         /* Mark as UTF-8 even if no hibit - saves scanning loop */
3035         SvUTF8_on(sv);
3036     }
3037     return SvCUR(sv);
3038 }
3039
3040 /*
3041 =for apidoc sv_utf8_downgrade
3042
3043 Attempts to convert the PV of an SV from characters to bytes.
3044 If the PV contains a character beyond byte, this conversion will fail;
3045 in this case, either returns false or, if C<fail_ok> is not
3046 true, croaks.
3047
3048 This is not as a general purpose Unicode to byte encoding interface:
3049 use the Encode extension for that.
3050
3051 =cut
3052 */
3053
3054 bool
3055 Perl_sv_utf8_downgrade(pTHX_ register SV* sv, bool fail_ok)
3056 {
3057     dVAR;
3058     if (SvPOKp(sv) && SvUTF8(sv)) {
3059         if (SvCUR(sv)) {
3060             U8 *s;
3061             STRLEN len;
3062
3063             if (SvIsCOW(sv)) {
3064                 sv_force_normal_flags(sv, 0);
3065             }
3066             s = (U8 *) SvPV(sv, len);
3067             if (!utf8_to_bytes(s, &len)) {
3068                 if (fail_ok)
3069                     return FALSE;
3070                 else {
3071                     if (PL_op)
3072                         Perl_croak(aTHX_ "Wide character in %s",
3073                                    OP_DESC(PL_op));
3074                     else
3075                         Perl_croak(aTHX_ "Wide character");
3076                 }
3077             }
3078             SvCUR_set(sv, len);
3079         }
3080     }
3081     SvUTF8_off(sv);
3082     return TRUE;
3083 }
3084
3085 /*
3086 =for apidoc sv_utf8_encode
3087
3088 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3089 flag off so that it looks like octets again.
3090
3091 =cut
3092 */
3093
3094 void
3095 Perl_sv_utf8_encode(pTHX_ register SV *sv)
3096 {
3097     (void) sv_utf8_upgrade(sv);
3098     if (SvIsCOW(sv)) {
3099         sv_force_normal_flags(sv, 0);
3100     }
3101     if (SvREADONLY(sv)) {
3102         Perl_croak(aTHX_ PL_no_modify);
3103     }
3104     SvUTF8_off(sv);
3105 }
3106
3107 /*
3108 =for apidoc sv_utf8_decode
3109
3110 If the PV of the SV is an octet sequence in UTF-8
3111 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3112 so that it looks like a character. If the PV contains only single-byte
3113 characters, the C<SvUTF8> flag stays being off.
3114 Scans PV for validity and returns false if the PV is invalid UTF-8.
3115
3116 =cut
3117 */
3118
3119 bool
3120 Perl_sv_utf8_decode(pTHX_ register SV *sv)
3121 {
3122     if (SvPOKp(sv)) {
3123         const U8 *c;
3124         const U8 *e;
3125
3126         /* The octets may have got themselves encoded - get them back as
3127          * bytes
3128          */
3129         if (!sv_utf8_downgrade(sv, TRUE))
3130             return FALSE;
3131
3132         /* it is actually just a matter of turning the utf8 flag on, but
3133          * we want to make sure everything inside is valid utf8 first.
3134          */
3135         c = (const U8 *) SvPVX_const(sv);
3136         if (!is_utf8_string(c, SvCUR(sv)+1))
3137             return FALSE;
3138         e = (const U8 *) SvEND(sv);
3139         while (c < e) {
3140             const U8 ch = *c++;
3141             if (!UTF8_IS_INVARIANT(ch)) {
3142                 SvUTF8_on(sv);
3143                 break;
3144             }
3145         }
3146     }
3147     return TRUE;
3148 }
3149
3150 /*
3151 =for apidoc sv_setsv
3152
3153 Copies the contents of the source SV C<ssv> into the destination SV
3154 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3155 function if the source SV needs to be reused. Does not handle 'set' magic.
3156 Loosely speaking, it performs a copy-by-value, obliterating any previous
3157 content of the destination.
3158
3159 You probably want to use one of the assortment of wrappers, such as
3160 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3161 C<SvSetMagicSV_nosteal>.
3162
3163 =for apidoc sv_setsv_flags
3164
3165 Copies the contents of the source SV C<ssv> into the destination SV
3166 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3167 function if the source SV needs to be reused. Does not handle 'set' magic.
3168 Loosely speaking, it performs a copy-by-value, obliterating any previous
3169 content of the destination.
3170 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3171 C<ssv> if appropriate, else not. If the C<flags> parameter has the
3172 C<NOSTEAL> bit set then the buffers of temps will not be stolen. <sv_setsv>
3173 and C<sv_setsv_nomg> are implemented in terms of this function.
3174
3175 You probably want to use one of the assortment of wrappers, such as
3176 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3177 C<SvSetMagicSV_nosteal>.
3178
3179 This is the primary function for copying scalars, and most other
3180 copy-ish functions and macros use this underneath.
3181
3182 =cut
3183 */
3184
3185 static void
3186 S_glob_assign_glob(pTHX_ SV *dstr, SV *sstr, const int dtype)
3187 {
3188     if (dtype != SVt_PVGV) {
3189         const char * const name = GvNAME(sstr);
3190         const STRLEN len = GvNAMELEN(sstr);
3191         /* don't upgrade SVt_PVLV: it can hold a glob */
3192         if (dtype != SVt_PVLV)
3193             sv_upgrade(dstr, SVt_PVGV);
3194         GvSTASH(dstr) = GvSTASH(sstr);
3195         if (GvSTASH(dstr))
3196             Perl_sv_add_backref(aTHX_ (SV*)GvSTASH(dstr), dstr);
3197         GvNAME(dstr) = savepvn(name, len);
3198         GvNAMELEN(dstr) = len;
3199         SvFAKE_on(dstr);        /* can coerce to non-glob */
3200     }
3201
3202 #ifdef GV_UNIQUE_CHECK
3203     if (GvUNIQUE((GV*)dstr)) {
3204         Perl_croak(aTHX_ PL_no_modify);
3205     }
3206 #endif
3207
3208     (void)SvOK_off(dstr);
3209     SvSCREAM_on(dstr);
3210     GvINTRO_off(dstr);          /* one-shot flag */
3211     gp_free((GV*)dstr);
3212     GvGP(dstr) = gp_ref(GvGP(sstr));
3213     if (SvTAINTED(sstr))
3214         SvTAINT(dstr);
3215     if (GvIMPORTED(dstr) != GVf_IMPORTED
3216         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3217         {
3218             GvIMPORTED_on(dstr);
3219         }
3220     GvMULTI_on(dstr);
3221     return;
3222 }
3223
3224 static void
3225 S_glob_assign_ref(pTHX_ SV *dstr, SV *sstr) {
3226     SV * const sref = SvREFCNT_inc(SvRV(sstr));
3227     SV *dref = NULL;
3228     const int intro = GvINTRO(dstr);
3229     SV **location;
3230     U8 import_flag = 0;
3231     const U32 stype = SvTYPE(sref);
3232
3233
3234 #ifdef GV_UNIQUE_CHECK
3235     if (GvUNIQUE((GV*)dstr)) {
3236         Perl_croak(aTHX_ PL_no_modify);
3237     }
3238 #endif
3239
3240     if (intro) {
3241         GvINTRO_off(dstr);      /* one-shot flag */
3242         GvLINE(dstr) = CopLINE(PL_curcop);
3243         GvEGV(dstr) = (GV*)dstr;
3244     }
3245     GvMULTI_on(dstr);
3246     switch (stype) {
3247     case SVt_PVCV:
3248         location = (SV **) &GvCV(dstr);
3249         import_flag = GVf_IMPORTED_CV;
3250         goto common;
3251     case SVt_PVHV:
3252         location = (SV **) &GvHV(dstr);
3253         import_flag = GVf_IMPORTED_HV;
3254         goto common;
3255     case SVt_PVAV:
3256         location = (SV **) &GvAV(dstr);
3257         import_flag = GVf_IMPORTED_AV;
3258         goto common;
3259     case SVt_PVIO:
3260         location = (SV **) &GvIOp(dstr);
3261         goto common;
3262     case SVt_PVFM:
3263         location = (SV **) &GvFORM(dstr);
3264     default:
3265         location = &GvSV(dstr);
3266         import_flag = GVf_IMPORTED_SV;
3267     common:
3268         if (intro) {
3269             if (stype == SVt_PVCV) {
3270                 if (GvCVGEN(dstr) && GvCV(dstr) != (CV*)sref) {
3271                     SvREFCNT_dec(GvCV(dstr));
3272                     GvCV(dstr) = NULL;
3273                     GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3274                     PL_sub_generation++;
3275                 }
3276             }
3277             SAVEGENERICSV(*location);
3278         }
3279         else
3280             dref = *location;
3281         if (stype == SVt_PVCV && *location != sref) {
3282             CV* const cv = (CV*)*location;
3283             if (cv) {
3284                 if (!GvCVGEN((GV*)dstr) &&
3285                     (CvROOT(cv) || CvXSUB(cv)))
3286                     {
3287                         /* Redefining a sub - warning is mandatory if
3288                            it was a const and its value changed. */
3289                         if (CvCONST(cv) && CvCONST((CV*)sref)
3290                             && cv_const_sv(cv) == cv_const_sv((CV*)sref)) {
3291                             /*EMPTY*/
3292                             /* They are 2 constant subroutines generated from
3293                                the same constant. This probably means that
3294                                they are really the "same" proxy subroutine
3295                                instantiated in 2 places. Most likely this is
3296                                when a constant is exported twice.  Don't warn.
3297                             */
3298                         }
3299                         else if (ckWARN(WARN_REDEFINE)
3300                                  || (CvCONST(cv)
3301                                      && (!CvCONST((CV*)sref)
3302                                          || sv_cmp(cv_const_sv(cv),
3303                                                    cv_const_sv((CV*)sref))))) {
3304                             Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
3305                                         CvCONST(cv)
3306                                         ? "Constant subroutine %s::%s redefined"
3307                                         : "Subroutine %s::%s redefined",
3308                                         HvNAME_get(GvSTASH((GV*)dstr)),
3309                                         GvENAME((GV*)dstr));
3310                         }
3311                     }
3312                 if (!intro)
3313                     cv_ckproto(cv, (GV*)dstr,
3314                                SvPOK(sref) ? SvPVX_const(sref) : NULL);
3315             }
3316             GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3317             GvASSUMECV_on(dstr);
3318             PL_sub_generation++;
3319         }
3320         *location = sref;
3321         if (import_flag && !(GvFLAGS(dstr) & import_flag)
3322             && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
3323             GvFLAGS(dstr) |= import_flag;
3324         }
3325         break;
3326     }
3327     if (dref)
3328         SvREFCNT_dec(dref);
3329     if (SvTAINTED(sstr))
3330         SvTAINT(dstr);
3331     return;
3332 }
3333
3334 void
3335 Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV *sstr, I32 flags)
3336 {
3337     dVAR;
3338     register U32 sflags;
3339     register int dtype;
3340     register int stype;
3341
3342     if (sstr == dstr)
3343         return;
3344     SV_CHECK_THINKFIRST_COW_DROP(dstr);
3345     if (!sstr)
3346         sstr = &PL_sv_undef;
3347     stype = SvTYPE(sstr);
3348     dtype = SvTYPE(dstr);
3349
3350     SvAMAGIC_off(dstr);
3351     if ( SvVOK(dstr) )
3352     {
3353         /* need to nuke the magic */
3354         mg_free(dstr);
3355         SvRMAGICAL_off(dstr);
3356     }
3357
3358     /* There's a lot of redundancy below but we're going for speed here */
3359
3360     switch (stype) {
3361     case SVt_NULL:
3362       undef_sstr:
3363         if (dtype != SVt_PVGV) {
3364             (void)SvOK_off(dstr);
3365             return;
3366         }
3367         break;
3368     case SVt_IV:
3369         if (SvIOK(sstr)) {
3370             switch (dtype) {
3371             case SVt_NULL:
3372                 sv_upgrade(dstr, SVt_IV);
3373                 break;
3374             case SVt_NV:
3375             case SVt_RV:
3376             case SVt_PV:
3377                 sv_upgrade(dstr, SVt_PVIV);
3378                 break;
3379             }
3380             (void)SvIOK_only(dstr);
3381             SvIV_set(dstr,  SvIVX(sstr));
3382             if (SvIsUV(sstr))
3383                 SvIsUV_on(dstr);
3384             /* SvTAINTED can only be true if the SV has taint magic, which in
3385                turn means that the SV type is PVMG (or greater). This is the
3386                case statement for SVt_IV, so this cannot be true (whatever gcov
3387                may say).  */
3388             assert(!SvTAINTED(sstr));
3389             return;
3390         }
3391         goto undef_sstr;
3392
3393     case SVt_NV:
3394         if (SvNOK(sstr)) {
3395             switch (dtype) {
3396             case SVt_NULL:
3397             case SVt_IV:
3398                 sv_upgrade(dstr, SVt_NV);
3399                 break;
3400             case SVt_RV:
3401             case SVt_PV:
3402             case SVt_PVIV:
3403                 sv_upgrade(dstr, SVt_PVNV);
3404                 break;
3405             }
3406             SvNV_set(dstr, SvNVX(sstr));
3407             (void)SvNOK_only(dstr);
3408             /* SvTAINTED can only be true if the SV has taint magic, which in
3409                turn means that the SV type is PVMG (or greater). This is the
3410                case statement for SVt_NV, so this cannot be true (whatever gcov
3411                may say).  */
3412             assert(!SvTAINTED(sstr));
3413             return;
3414         }
3415         goto undef_sstr;
3416
3417     case SVt_RV:
3418         if (dtype < SVt_RV)
3419             sv_upgrade(dstr, SVt_RV);
3420         break;
3421     case SVt_PVFM:
3422 #ifdef PERL_OLD_COPY_ON_WRITE
3423         if ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS) {
3424             if (dtype < SVt_PVIV)
3425                 sv_upgrade(dstr, SVt_PVIV);
3426             break;
3427         }
3428         /* Fall through */
3429 #endif
3430     case SVt_PV:
3431         if (dtype < SVt_PV)
3432             sv_upgrade(dstr, SVt_PV);
3433         break;
3434     case SVt_PVIV:
3435         if (dtype < SVt_PVIV)
3436             sv_upgrade(dstr, SVt_PVIV);
3437         break;
3438     case SVt_PVNV:
3439         if (dtype < SVt_PVNV)
3440             sv_upgrade(dstr, SVt_PVNV);
3441         break;
3442     case SVt_PVAV:
3443     case SVt_PVHV:
3444     case SVt_PVCV:
3445     case SVt_PVIO:
3446         {
3447         const char * const type = sv_reftype(sstr,0);
3448         if (PL_op)
3449             Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_NAME(PL_op));
3450         else
3451             Perl_croak(aTHX_ "Bizarre copy of %s", type);
3452         }
3453         break;
3454
3455     case SVt_PVGV:
3456         if (dtype <= SVt_PVGV) {
3457             S_glob_assign_glob(aTHX_ dstr, sstr, dtype);
3458             return;
3459         }
3460         /*FALLTHROUGH*/
3461
3462     default:
3463         if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
3464             mg_get(sstr);
3465             if ((int)SvTYPE(sstr) != stype) {
3466                 stype = SvTYPE(sstr);
3467                 if (stype == SVt_PVGV && dtype <= SVt_PVGV) {
3468                     S_glob_assign_glob(aTHX_ dstr, sstr, dtype);
3469                     return;
3470                 }
3471             }
3472         }
3473         if (stype == SVt_PVLV)
3474             SvUPGRADE(dstr, SVt_PVNV);
3475         else
3476             SvUPGRADE(dstr, (U32)stype);
3477     }
3478
3479     /* dstr may have been upgraded.  */
3480     dtype = SvTYPE(dstr);
3481     sflags = SvFLAGS(sstr);
3482
3483     if (sflags & SVf_ROK) {
3484         if (dtype == SVt_PVGV &&
3485             SvROK(sstr) && SvTYPE(SvRV(sstr)) == SVt_PVGV) {
3486             sstr = SvRV(sstr);
3487             if (sstr == dstr) {
3488                 if (GvIMPORTED(dstr) != GVf_IMPORTED
3489                     && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3490                 {
3491                     GvIMPORTED_on(dstr);
3492                 }
3493                 GvMULTI_on(dstr);
3494                 return;
3495             }
3496             S_glob_assign_glob(aTHX_ dstr, sstr, dtype);
3497             return;
3498         }
3499
3500         if (dtype >= SVt_PV) {
3501             if (dtype == SVt_PVGV) {
3502                 S_glob_assign_ref(aTHX_ dstr, sstr);
3503                 return;
3504             }
3505             if (SvPVX_const(dstr)) {
3506                 SvPV_free(dstr);
3507                 SvLEN_set(dstr, 0);
3508                 SvCUR_set(dstr, 0);
3509             }
3510         }
3511         (void)SvOK_off(dstr);
3512         SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
3513         SvFLAGS(dstr) |= sflags & (SVf_ROK|SVf_AMAGIC);
3514         assert(!(sflags & SVp_NOK));
3515         assert(!(sflags & SVp_IOK));
3516         assert(!(sflags & SVf_NOK));
3517         assert(!(sflags & SVf_IOK));
3518     }
3519     else if (dtype == SVt_PVGV) {
3520         if (!(sflags & SVf_OK)) {
3521             if (ckWARN(WARN_MISC))
3522                 Perl_warner(aTHX_ packWARN(WARN_MISC),
3523                             "Undefined value assigned to typeglob");
3524         }
3525         else {
3526             GV *gv = gv_fetchsv(sstr, GV_ADD, SVt_PVGV);
3527             if (dstr != (SV*)gv) {
3528                 if (GvGP(dstr))
3529                     gp_free((GV*)dstr);
3530                 GvGP(dstr) = gp_ref(GvGP(gv));
3531             }
3532         }
3533     }
3534     else if (sflags & SVp_POK) {
3535         bool isSwipe = 0;
3536
3537         /*
3538          * Check to see if we can just swipe the string.  If so, it's a
3539          * possible small lose on short strings, but a big win on long ones.
3540          * It might even be a win on short strings if SvPVX_const(dstr)
3541          * has to be allocated and SvPVX_const(sstr) has to be freed.
3542          */
3543
3544         /* Whichever path we take through the next code, we want this true,
3545            and doing it now facilitates the COW check.  */
3546         (void)SvPOK_only(dstr);
3547
3548         if (
3549             /* We're not already COW  */
3550             ((sflags & (SVf_FAKE | SVf_READONLY)) != (SVf_FAKE | SVf_READONLY)
3551 #ifndef PERL_OLD_COPY_ON_WRITE
3552              /* or we are, but dstr isn't a suitable target.  */
3553              || (SvFLAGS(dstr) & CAN_COW_MASK) != CAN_COW_FLAGS
3554 #endif
3555              )
3556             &&
3557             !(isSwipe =
3558                  (sflags & SVs_TEMP) &&   /* slated for free anyway? */
3559                  !(sflags & SVf_OOK) &&   /* and not involved in OOK hack? */
3560                  (!(flags & SV_NOSTEAL)) &&
3561                                         /* and we're allowed to steal temps */
3562                  SvREFCNT(sstr) == 1 &&   /* and no other references to it? */
3563                  SvLEN(sstr)    &&        /* and really is a string */
3564                                 /* and won't be needed again, potentially */
3565               !(PL_op && PL_op->op_type == OP_AASSIGN))
3566 #ifdef PERL_OLD_COPY_ON_WRITE
3567             && !((sflags & CAN_COW_MASK) == CAN_COW_FLAGS
3568                  && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
3569                  && SvTYPE(sstr) >= SVt_PVIV)
3570 #endif
3571             ) {
3572             /* Failed the swipe test, and it's not a shared hash key either.
3573                Have to copy the string.  */
3574             STRLEN len = SvCUR(sstr);
3575             SvGROW(dstr, len + 1);      /* inlined from sv_setpvn */
3576             Move(SvPVX_const(sstr),SvPVX(dstr),len,char);
3577             SvCUR_set(dstr, len);
3578             *SvEND(dstr) = '\0';
3579         } else {
3580             /* If PERL_OLD_COPY_ON_WRITE is not defined, then isSwipe will always
3581                be true in here.  */
3582             /* Either it's a shared hash key, or it's suitable for
3583                copy-on-write or we can swipe the string.  */
3584             if (DEBUG_C_TEST) {
3585                 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
3586                 sv_dump(sstr);
3587                 sv_dump(dstr);
3588             }
3589 #ifdef PERL_OLD_COPY_ON_WRITE
3590             if (!isSwipe) {
3591                 /* I believe I should acquire a global SV mutex if
3592                    it's a COW sv (not a shared hash key) to stop
3593                    it going un copy-on-write.
3594                    If the source SV has gone un copy on write between up there
3595                    and down here, then (assert() that) it is of the correct
3596                    form to make it copy on write again */
3597                 if ((sflags & (SVf_FAKE | SVf_READONLY))
3598                     != (SVf_FAKE | SVf_READONLY)) {
3599                     SvREADONLY_on(sstr);
3600                     SvFAKE_on(sstr);
3601                     /* Make the source SV into a loop of 1.
3602                        (about to become 2) */
3603                     SV_COW_NEXT_SV_SET(sstr, sstr);
3604                 }
3605             }
3606 #endif
3607             /* Initial code is common.  */
3608             if (SvPVX_const(dstr)) {    /* we know that dtype >= SVt_PV */
3609                 SvPV_free(dstr);
3610             }
3611
3612             if (!isSwipe) {
3613                 /* making another shared SV.  */
3614                 STRLEN cur = SvCUR(sstr);
3615                 STRLEN len = SvLEN(sstr);
3616 #ifdef PERL_OLD_COPY_ON_WRITE
3617                 if (len) {
3618                     assert (SvTYPE(dstr) >= SVt_PVIV);
3619                     /* SvIsCOW_normal */
3620                     /* splice us in between source and next-after-source.  */
3621                     SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
3622                     SV_COW_NEXT_SV_SET(sstr, dstr);
3623                     SvPV_set(dstr, SvPVX_mutable(sstr));
3624                 } else
3625 #endif
3626                 {
3627                     /* SvIsCOW_shared_hash */
3628                     DEBUG_C(PerlIO_printf(Perl_debug_log,
3629                                           "Copy on write: Sharing hash\n"));
3630
3631                     assert (SvTYPE(dstr) >= SVt_PV);
3632                     SvPV_set(dstr,
3633                              HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
3634                 }
3635                 SvLEN_set(dstr, len);
3636                 SvCUR_set(dstr, cur);
3637                 SvREADONLY_on(dstr);
3638                 SvFAKE_on(dstr);
3639                 /* Relesase a global SV mutex.  */
3640             }
3641             else
3642                 {       /* Passes the swipe test.  */
3643                 SvPV_set(dstr, SvPVX_mutable(sstr));
3644                 SvLEN_set(dstr, SvLEN(sstr));
3645                 SvCUR_set(dstr, SvCUR(sstr));
3646
3647                 SvTEMP_off(dstr);
3648                 (void)SvOK_off(sstr);   /* NOTE: nukes most SvFLAGS on sstr */
3649                 SvPV_set(sstr, NULL);
3650                 SvLEN_set(sstr, 0);
3651                 SvCUR_set(sstr, 0);
3652                 SvTEMP_off(sstr);
3653             }
3654         }
3655         if (sflags & SVp_NOK) {
3656             SvNV_set(dstr, SvNVX(sstr));
3657         }
3658         if (sflags & SVp_IOK) {
3659             SvRELEASE_IVX(dstr);
3660             SvIV_set(dstr, SvIVX(sstr));
3661             /* Must do this otherwise some other overloaded use of 0x80000000
3662                gets confused. I guess SVpbm_VALID */
3663             if (sflags & SVf_IVisUV)
3664                 SvIsUV_on(dstr);
3665         }
3666         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
3667         {
3668             const MAGIC * const smg = SvVOK(sstr);
3669             if (smg) {
3670                 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
3671                          smg->mg_ptr, smg->mg_len);
3672                 SvRMAGICAL_on(dstr);
3673             }
3674         }
3675     }
3676     else if (sflags & (SVp_IOK|SVp_NOK)) {
3677         (void)SvOK_off(dstr);
3678         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
3679         if (sflags & SVp_IOK) {
3680             /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
3681             SvIV_set(dstr, SvIVX(sstr));
3682         }
3683         if (sflags & SVp_NOK) {
3684             SvNV_set(dstr, SvNVX(sstr));
3685         }
3686     }
3687     else {
3688         if ((stype == SVt_PVGV || stype == SVt_PVLV)
3689                  && (sflags & SVp_SCREAM)) {
3690             /* This stringification rule for globs is spread in 3 places.
3691                This feels bad. FIXME.  */
3692             const U32 wasfake = sflags & SVf_FAKE;
3693
3694             /* FAKE globs can get coerced, so need to turn this off
3695                temporarily if it is on.  */
3696             SvFAKE_off(sstr);
3697             gv_efullname3(dstr, (GV *)sstr, "*");
3698             SvFLAGS(sstr) |= wasfake;
3699         }
3700         else
3701             (void)SvOK_off(dstr);
3702     }
3703     if (SvTAINTED(sstr))
3704         SvTAINT(dstr);
3705 }
3706
3707 /*
3708 =for apidoc sv_setsv_mg
3709
3710 Like C<sv_setsv>, but also handles 'set' magic.
3711
3712 =cut
3713 */
3714
3715 void
3716 Perl_sv_setsv_mg(pTHX_ SV *dstr, register SV *sstr)
3717 {
3718     sv_setsv(dstr,sstr);
3719     SvSETMAGIC(dstr);
3720 }
3721
3722 #ifdef PERL_OLD_COPY_ON_WRITE
3723 SV *
3724 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
3725 {
3726     STRLEN cur = SvCUR(sstr);
3727     STRLEN len = SvLEN(sstr);
3728     register char *new_pv;
3729
3730     if (DEBUG_C_TEST) {
3731         PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
3732                       sstr, dstr);
3733         sv_dump(sstr);
3734         if (dstr)
3735                     sv_dump(dstr);
3736     }
3737
3738     if (dstr) {
3739         if (SvTHINKFIRST(dstr))
3740             sv_force_normal_flags(dstr, SV_COW_DROP_PV);
3741         else if (SvPVX_const(dstr))
3742             Safefree(SvPVX_const(dstr));
3743     }
3744     else
3745         new_SV(dstr);
3746     SvUPGRADE(dstr, SVt_PVIV);
3747
3748     assert (SvPOK(sstr));
3749     assert (SvPOKp(sstr));
3750     assert (!SvIOK(sstr));
3751     assert (!SvIOKp(sstr));
3752     assert (!SvNOK(sstr));
3753     assert (!SvNOKp(sstr));
3754
3755     if (SvIsCOW(sstr)) {
3756
3757         if (SvLEN(sstr) == 0) {
3758             /* source is a COW shared hash key.  */
3759             DEBUG_C(PerlIO_printf(Perl_debug_log,
3760                                   "Fast copy on write: Sharing hash\n"));
3761             new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
3762             goto common_exit;
3763         }
3764         SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
3765     } else {
3766         assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
3767         SvUPGRADE(sstr, SVt_PVIV);
3768         SvREADONLY_on(sstr);
3769         SvFAKE_on(sstr);
3770         DEBUG_C(PerlIO_printf(Perl_debug_log,
3771                               "Fast copy on write: Converting sstr to COW\n"));
3772         SV_COW_NEXT_SV_SET(dstr, sstr);
3773     }
3774     SV_COW_NEXT_SV_SET(sstr, dstr);
3775     new_pv = SvPVX_mutable(sstr);
3776
3777   common_exit:
3778     SvPV_set(dstr, new_pv);
3779     SvFLAGS(dstr) = (SVt_PVIV|SVf_POK|SVp_POK|SVf_FAKE|SVf_READONLY);
3780     if (SvUTF8(sstr))
3781         SvUTF8_on(dstr);
3782     SvLEN_set(dstr, len);
3783     SvCUR_set(dstr, cur);
3784     if (DEBUG_C_TEST) {
3785         sv_dump(dstr);
3786     }
3787     return dstr;
3788 }
3789 #endif
3790
3791 /*
3792 =for apidoc sv_setpvn
3793
3794 Copies a string into an SV.  The C<len> parameter indicates the number of
3795 bytes to be copied.  If the C<ptr> argument is NULL the SV will become
3796 undefined.  Does not handle 'set' magic.  See C<sv_setpvn_mg>.
3797
3798 =cut
3799 */
3800
3801 void
3802 Perl_sv_setpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3803 {
3804     dVAR;
3805     register char *dptr;
3806
3807     SV_CHECK_THINKFIRST_COW_DROP(sv);
3808     if (!ptr) {
3809         (void)SvOK_off(sv);
3810         return;
3811     }
3812     else {
3813         /* len is STRLEN which is unsigned, need to copy to signed */
3814         const IV iv = len;
3815         if (iv < 0)
3816             Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen");
3817     }
3818     SvUPGRADE(sv, SVt_PV);
3819
3820     dptr = SvGROW(sv, len + 1);
3821     Move(ptr,dptr,len,char);
3822     dptr[len] = '\0';
3823     SvCUR_set(sv, len);
3824     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
3825     SvTAINT(sv);
3826 }
3827
3828 /*
3829 =for apidoc sv_setpvn_mg
3830
3831 Like C<sv_setpvn>, but also handles 'set' magic.
3832
3833 =cut
3834 */
3835
3836 void
3837 Perl_sv_setpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3838 {
3839     sv_setpvn(sv,ptr,len);
3840     SvSETMAGIC(sv);
3841 }
3842
3843 /*
3844 =for apidoc sv_setpv
3845
3846 Copies a string into an SV.  The string must be null-terminated.  Does not
3847 handle 'set' magic.  See C<sv_setpv_mg>.
3848
3849 =cut
3850 */
3851
3852 void
3853 Perl_sv_setpv(pTHX_ register SV *sv, register const char *ptr)
3854 {
3855     dVAR;
3856     register STRLEN len;
3857
3858     SV_CHECK_THINKFIRST_COW_DROP(sv);
3859     if (!ptr) {
3860         (void)SvOK_off(sv);
3861         return;
3862     }
3863     len = strlen(ptr);
3864     SvUPGRADE(sv, SVt_PV);
3865
3866     SvGROW(sv, len + 1);
3867     Move(ptr,SvPVX(sv),len+1,char);
3868     SvCUR_set(sv, len);
3869     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
3870     SvTAINT(sv);
3871 }
3872
3873 /*
3874 =for apidoc sv_setpv_mg
3875
3876 Like C<sv_setpv>, but also handles 'set' magic.
3877
3878 =cut
3879 */
3880
3881 void
3882 Perl_sv_setpv_mg(pTHX_ register SV *sv, register const char *ptr)
3883 {
3884     sv_setpv(sv,ptr);
3885     SvSETMAGIC(sv);
3886 }
3887
3888 /*
3889 =for apidoc sv_usepvn
3890
3891 Tells an SV to use C<ptr> to find its string value.  Normally the string is
3892 stored inside the SV but sv_usepvn allows the SV to use an outside string.
3893 The C<ptr> should point to memory that was allocated by C<malloc>.  The
3894 string length, C<len>, must be supplied.  This function will realloc the
3895 memory pointed to by C<ptr>, so that pointer should not be freed or used by
3896 the programmer after giving it to sv_usepvn.  Does not handle 'set' magic.
3897 See C<sv_usepvn_mg>.
3898
3899 =cut
3900 */
3901
3902 void
3903 Perl_sv_usepvn(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
3904 {
3905     dVAR;
3906     STRLEN allocate;
3907     SV_CHECK_THINKFIRST_COW_DROP(sv);
3908     SvUPGRADE(sv, SVt_PV);
3909     if (!ptr) {
3910         (void)SvOK_off(sv);
3911         return;
3912     }
3913     if (SvPVX_const(sv))
3914         SvPV_free(sv);
3915
3916     allocate = PERL_STRLEN_ROUNDUP(len + 1);
3917     ptr = saferealloc (ptr, allocate);
3918     SvPV_set(sv, ptr);
3919     SvCUR_set(sv, len);
3920     SvLEN_set(sv, allocate);
3921     *SvEND(sv) = '\0';
3922     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
3923     SvTAINT(sv);
3924 }
3925
3926 /*
3927 =for apidoc sv_usepvn_mg
3928
3929 Like C<sv_usepvn>, but also handles 'set' magic.
3930
3931 =cut
3932 */
3933
3934 void
3935 Perl_sv_usepvn_mg(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
3936 {
3937     sv_usepvn(sv,ptr,len);
3938     SvSETMAGIC(sv);
3939 }
3940
3941 #ifdef PERL_OLD_COPY_ON_WRITE
3942 /* Need to do this *after* making the SV normal, as we need the buffer
3943    pointer to remain valid until after we've copied it.  If we let go too early,
3944    another thread could invalidate it by unsharing last of the same hash key
3945    (which it can do by means other than releasing copy-on-write Svs)
3946    or by changing the other copy-on-write SVs in the loop.  */
3947 STATIC void
3948 S_sv_release_COW(pTHX_ register SV *sv, const char *pvx, STRLEN len, SV *after)
3949 {
3950     if (len) { /* this SV was SvIsCOW_normal(sv) */
3951          /* we need to find the SV pointing to us.  */
3952         SV *current = SV_COW_NEXT_SV(after);
3953
3954         if (current == sv) {
3955             /* The SV we point to points back to us (there were only two of us
3956                in the loop.)
3957                Hence other SV is no longer copy on write either.  */
3958             SvFAKE_off(after);
3959             SvREADONLY_off(after);
3960         } else {
3961             /* We need to follow the pointers around the loop.  */
3962             SV *next;
3963             while ((next = SV_COW_NEXT_SV(current)) != sv) {
3964                 assert (next);
3965                 current = next;
3966                  /* don't loop forever if the structure is bust, and we have
3967                     a pointer into a closed loop.  */
3968                 assert (current != after);
3969                 assert (SvPVX_const(current) == pvx);
3970             }
3971             /* Make the SV before us point to the SV after us.  */
3972             SV_COW_NEXT_SV_SET(current, after);
3973         }
3974     } else {
3975         unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
3976     }
3977 }
3978
3979 int
3980 Perl_sv_release_IVX(pTHX_ register SV *sv)
3981 {
3982     if (SvIsCOW(sv))
3983         sv_force_normal_flags(sv, 0);
3984     SvOOK_off(sv);
3985     return 0;
3986 }
3987 #endif
3988 /*
3989 =for apidoc sv_force_normal_flags
3990
3991 Undo various types of fakery on an SV: if the PV is a shared string, make
3992 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
3993 an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
3994 we do the copy, and is also used locally. If C<SV_COW_DROP_PV> is set
3995 then a copy-on-write scalar drops its PV buffer (if any) and becomes
3996 SvPOK_off rather than making a copy. (Used where this scalar is about to be
3997 set to some other value.) In addition, the C<flags> parameter gets passed to
3998 C<sv_unref_flags()> when unrefing. C<sv_force_normal> calls this function
3999 with flags set to 0.
4000
4001 =cut
4002 */
4003
4004 void
4005 Perl_sv_force_normal_flags(pTHX_ register SV *sv, U32 flags)
4006 {
4007     dVAR;
4008 #ifdef PERL_OLD_COPY_ON_WRITE
4009     if (SvREADONLY(sv)) {
4010         /* At this point I believe I should acquire a global SV mutex.  */
4011         if (SvFAKE(sv)) {
4012             const char * const pvx = SvPVX_const(sv);
4013             const STRLEN len = SvLEN(sv);
4014             const STRLEN cur = SvCUR(sv);
4015             SV * const next = SV_COW_NEXT_SV(sv);   /* next COW sv in the loop. */
4016             if (DEBUG_C_TEST) {
4017                 PerlIO_printf(Perl_debug_log,
4018                               "Copy on write: Force normal %ld\n",
4019                               (long) flags);
4020                 sv_dump(sv);
4021             }
4022             SvFAKE_off(sv);
4023             SvREADONLY_off(sv);
4024             /* This SV doesn't own the buffer, so need to Newx() a new one:  */
4025             SvPV_set(sv, NULL);
4026             SvLEN_set(sv, 0);
4027             if (flags & SV_COW_DROP_PV) {
4028                 /* OK, so we don't need to copy our buffer.  */
4029                 SvPOK_off(sv);
4030             } else {
4031                 SvGROW(sv, cur + 1);
4032                 Move(pvx,SvPVX(sv),cur,char);
4033                 SvCUR_set(sv, cur);
4034                 *SvEND(sv) = '\0';
4035             }
4036             sv_release_COW(sv, pvx, len, next);
4037             if (DEBUG_C_TEST) {
4038                 sv_dump(sv);
4039             }
4040         }
4041         else if (IN_PERL_RUNTIME)
4042             Perl_croak(aTHX_ PL_no_modify);
4043         /* At this point I believe that I can drop the global SV mutex.  */
4044     }
4045 #else
4046     if (SvREADONLY(sv)) {
4047         if (SvFAKE(sv)) {
4048             const char * const pvx = SvPVX_const(sv);
4049             const STRLEN len = SvCUR(sv);
4050             SvFAKE_off(sv);
4051             SvREADONLY_off(sv);
4052             SvPV_set(sv, NULL);
4053             SvLEN_set(sv, 0);
4054             SvGROW(sv, len + 1);
4055             Move(pvx,SvPVX(sv),len,char);
4056             *SvEND(sv) = '\0';
4057             unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4058         }
4059         else if (IN_PERL_RUNTIME)
4060             Perl_croak(aTHX_ PL_no_modify);
4061     }
4062 #endif
4063     if (SvROK(sv))
4064         sv_unref_flags(sv, flags);
4065     else if (SvFAKE(sv) && SvTYPE(sv) == SVt_PVGV)
4066         sv_unglob(sv);
4067 }
4068
4069 /*
4070 =for apidoc sv_chop
4071
4072 Efficient removal of characters from the beginning of the string buffer.
4073 SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
4074 the string buffer.  The C<ptr> becomes the first character of the adjusted
4075 string. Uses the "OOK hack".
4076 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
4077 refer to the same chunk of data.
4078
4079 =cut
4080 */
4081
4082 void
4083 Perl_sv_chop(pTHX_ register SV *sv, register const char *ptr)
4084 {
4085     register STRLEN delta;
4086     if (!ptr || !SvPOKp(sv))
4087         return;
4088     delta = ptr - SvPVX_const(sv);
4089     SV_CHECK_THINKFIRST(sv);
4090     if (SvTYPE(sv) < SVt_PVIV)
4091         sv_upgrade(sv,SVt_PVIV);
4092
4093     if (!SvOOK(sv)) {
4094         if (!SvLEN(sv)) { /* make copy of shared string */
4095             const char *pvx = SvPVX_const(sv);
4096             const STRLEN len = SvCUR(sv);
4097             SvGROW(sv, len + 1);
4098             Move(pvx,SvPVX(sv),len,char);
4099             *SvEND(sv) = '\0';
4100         }
4101         SvIV_set(sv, 0);
4102         /* Same SvOOK_on but SvOOK_on does a SvIOK_off
4103            and we do that anyway inside the SvNIOK_off
4104         */
4105         SvFLAGS(sv) |= SVf_OOK;
4106     }
4107     SvNIOK_off(sv);
4108     SvLEN_set(sv, SvLEN(sv) - delta);
4109     SvCUR_set(sv, SvCUR(sv) - delta);
4110     SvPV_set(sv, SvPVX(sv) + delta);
4111     SvIV_set(sv, SvIVX(sv) + delta);
4112 }
4113
4114 /*
4115 =for apidoc sv_catpvn
4116
4117 Concatenates the string onto the end of the string which is in the SV.  The
4118 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
4119 status set, then the bytes appended should be valid UTF-8.
4120 Handles 'get' magic, but not 'set' magic.  See C<sv_catpvn_mg>.
4121
4122 =for apidoc sv_catpvn_flags
4123
4124 Concatenates the string onto the end of the string which is in the SV.  The
4125 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
4126 status set, then the bytes appended should be valid UTF-8.
4127 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<dsv> if
4128 appropriate, else not. C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
4129 in terms of this function.
4130
4131 =cut
4132 */
4133
4134 void
4135 Perl_sv_catpvn_flags(pTHX_ register SV *dsv, register const char *sstr, register STRLEN slen, I32 flags)
4136 {
4137     dVAR;
4138     STRLEN dlen;
4139     const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
4140
4141     SvGROW(dsv, dlen + slen + 1);
4142     if (sstr == dstr)
4143         sstr = SvPVX_const(dsv);
4144     Move(sstr, SvPVX(dsv) + dlen, slen, char);
4145     SvCUR_set(dsv, SvCUR(dsv) + slen);
4146     *SvEND(dsv) = '\0';
4147     (void)SvPOK_only_UTF8(dsv);         /* validate pointer */
4148     SvTAINT(dsv);
4149     if (flags & SV_SMAGIC)
4150         SvSETMAGIC(dsv);
4151 }
4152
4153 /*
4154 =for apidoc sv_catsv
4155
4156 Concatenates the string from SV C<ssv> onto the end of the string in
4157 SV C<dsv>.  Modifies C<dsv> but not C<ssv>.  Handles 'get' magic, but
4158 not 'set' magic.  See C<sv_catsv_mg>.
4159
4160 =for apidoc sv_catsv_flags
4161
4162 Concatenates the string from SV C<ssv> onto the end of the string in
4163 SV C<dsv>.  Modifies C<dsv> but not C<ssv>.  If C<flags> has C<SV_GMAGIC>
4164 bit set, will C<mg_get> on the SVs if appropriate, else not. C<sv_catsv>
4165 and C<sv_catsv_nomg> are implemented in terms of this function.
4166
4167 =cut */
4168
4169 void
4170 Perl_sv_catsv_flags(pTHX_ SV *dsv, register SV *ssv, I32 flags)
4171 {
4172     dVAR;
4173     if (ssv) {
4174         STRLEN slen;
4175         const char *spv = SvPV_const(ssv, slen);
4176         if (spv) {
4177             /*  sutf8 and dutf8 were type bool, but under USE_ITHREADS,
4178                 gcc version 2.95.2 20000220 (Debian GNU/Linux) for
4179                 Linux xxx 2.2.17 on sparc64 with gcc -O2, we erroneously
4180                 get dutf8 = 0x20000000, (i.e.  SVf_UTF8) even though
4181                 dsv->sv_flags doesn't have that bit set.
4182                 Andy Dougherty  12 Oct 2001
4183             */
4184             const I32 sutf8 = DO_UTF8(ssv);
4185             I32 dutf8;
4186
4187             if (SvGMAGICAL(dsv) && (flags & SV_GMAGIC))
4188                 mg_get(dsv);
4189             dutf8 = DO_UTF8(dsv);
4190
4191             if (dutf8 != sutf8) {
4192                 if (dutf8) {
4193                     /* Not modifying source SV, so taking a temporary copy. */
4194                     SV* const csv = sv_2mortal(newSVpvn(spv, slen));
4195
4196                     sv_utf8_upgrade(csv);
4197                     spv = SvPV_const(csv, slen);
4198                 }
4199                 else
4200                     sv_utf8_upgrade_nomg(dsv);
4201             }
4202             sv_catpvn_nomg(dsv, spv, slen);
4203         }
4204     }
4205     if (flags & SV_SMAGIC)
4206         SvSETMAGIC(dsv);
4207 }
4208
4209 /*
4210 =for apidoc sv_catpv
4211
4212 Concatenates the string onto the end of the string which is in the SV.
4213 If the SV has the UTF-8 status set, then the bytes appended should be
4214 valid UTF-8.  Handles 'get' magic, but not 'set' magic.  See C<sv_catpv_mg>.
4215
4216 =cut */
4217
4218 void
4219 Perl_sv_catpv(pTHX_ register SV *sv, register const char *ptr)
4220 {
4221     dVAR;
4222     register STRLEN len;
4223     STRLEN tlen;
4224     char *junk;
4225
4226     if (!ptr)
4227         return;
4228     junk = SvPV_force(sv, tlen);
4229     len = strlen(ptr);
4230     SvGROW(sv, tlen + len + 1);
4231     if (ptr == junk)
4232         ptr = SvPVX_const(sv);
4233     Move(ptr,SvPVX(sv)+tlen,len+1,char);
4234     SvCUR_set(sv, SvCUR(sv) + len);
4235     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4236     SvTAINT(sv);
4237 }
4238
4239 /*
4240 =for apidoc sv_catpv_mg
4241
4242 Like C<sv_catpv>, but also handles 'set' magic.
4243
4244 =cut
4245 */
4246
4247 void
4248 Perl_sv_catpv_mg(pTHX_ register SV *sv, register const char *ptr)
4249 {
4250     sv_catpv(sv,ptr);
4251     SvSETMAGIC(sv);
4252 }
4253
4254 /*
4255 =for apidoc newSV
4256
4257 Creates a new SV.  A non-zero C<len> parameter indicates the number of
4258 bytes of preallocated string space the SV should have.  An extra byte for a
4259 trailing NUL is also reserved.  (SvPOK is not set for the SV even if string
4260 space is allocated.)  The reference count for the new SV is set to 1.
4261
4262 In 5.9.3, newSV() replaces the older NEWSV() API, and drops the first
4263 parameter, I<x>, a debug aid which allowed callers to identify themselves.
4264 This aid has been superseded by a new build option, PERL_MEM_LOG (see
4265 L<perlhack/PERL_MEM_LOG>).  The older API is still there for use in XS
4266 modules supporting older perls.
4267
4268 =cut
4269 */
4270
4271 SV *
4272 Perl_newSV(pTHX_ STRLEN len)
4273 {
4274     dVAR;
4275     register SV *sv;
4276
4277     new_SV(sv);
4278     if (len) {
4279         sv_upgrade(sv, SVt_PV);
4280         SvGROW(sv, len + 1);
4281     }
4282     return sv;
4283 }
4284 /*
4285 =for apidoc sv_magicext
4286
4287 Adds magic to an SV, upgrading it if necessary. Applies the
4288 supplied vtable and returns a pointer to the magic added.
4289
4290 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
4291 In particular, you can add magic to SvREADONLY SVs, and add more than
4292 one instance of the same 'how'.
4293
4294 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
4295 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
4296 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
4297 to contain an C<SV*> and is stored as-is with its REFCNT incremented.
4298
4299 (This is now used as a subroutine by C<sv_magic>.)
4300
4301 =cut
4302 */
4303 MAGIC * 
4304 Perl_sv_magicext(pTHX_ SV* sv, SV* obj, int how, MGVTBL *vtable,
4305                  const char* name, I32 namlen)
4306 {
4307     dVAR;
4308     MAGIC* mg;
4309
4310     if (SvTYPE(sv) < SVt_PVMG) {
4311         SvUPGRADE(sv, SVt_PVMG);
4312     }
4313     Newxz(mg, 1, MAGIC);
4314     mg->mg_moremagic = SvMAGIC(sv);
4315     SvMAGIC_set(sv, mg);
4316
4317     /* Sometimes a magic contains a reference loop, where the sv and
4318        object refer to each other.  To prevent a reference loop that
4319        would prevent such objects being freed, we look for such loops
4320        and if we find one we avoid incrementing the object refcount.
4321
4322        Note we cannot do this to avoid self-tie loops as intervening RV must
4323        have its REFCNT incremented to keep it in existence.
4324
4325     */
4326     if (!obj || obj == sv ||
4327         how == PERL_MAGIC_arylen ||
4328         how == PERL_MAGIC_qr ||
4329         how == PERL_MAGIC_symtab ||
4330         (SvTYPE(obj) == SVt_PVGV &&
4331             (GvSV(obj) == sv || GvHV(obj) == (HV*)sv || GvAV(obj) == (AV*)sv ||
4332             GvCV(obj) == (CV*)sv || GvIOp(obj) == (IO*)sv ||
4333             GvFORM(obj) == (CV*)sv)))
4334     {
4335         mg->mg_obj = obj;
4336     }
4337     else {
4338         mg->mg_obj = SvREFCNT_inc(obj);
4339         mg->mg_flags |= MGf_REFCOUNTED;
4340     }
4341
4342     /* Normal self-ties simply pass a null object, and instead of
4343        using mg_obj directly, use the SvTIED_obj macro to produce a
4344        new RV as needed.  For glob "self-ties", we are tieing the PVIO
4345        with an RV obj pointing to the glob containing the PVIO.  In
4346        this case, to avoid a reference loop, we need to weaken the
4347        reference.
4348     */
4349
4350     if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
4351         obj && SvROK(obj) && GvIO(SvRV(obj)) == (IO*)sv)
4352     {
4353       sv_rvweaken(obj);
4354     }
4355
4356     mg->mg_type = how;
4357     mg->mg_len = namlen;
4358     if (name) {
4359         if (namlen > 0)
4360             mg->mg_ptr = savepvn(name, namlen);
4361         else if (namlen == HEf_SVKEY)
4362             mg->mg_ptr = (char*)SvREFCNT_inc((SV*)name);
4363         else
4364             mg->mg_ptr = (char *) name;
4365     }
4366     mg->mg_virtual = vtable;
4367
4368     mg_magical(sv);
4369     if (SvGMAGICAL(sv))
4370         SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
4371     return mg;
4372 }
4373
4374 /*
4375 =for apidoc sv_magic
4376
4377 Adds magic to an SV. First upgrades C<sv> to type C<SVt_PVMG> if necessary,
4378 then adds a new magic item of type C<how> to the head of the magic list.
4379
4380 See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
4381 handling of the C<name> and C<namlen> arguments.
4382
4383 You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
4384 to add more than one instance of the same 'how'.
4385
4386 =cut
4387 */
4388
4389 void
4390 Perl_sv_magic(pTHX_ register SV *sv, SV *obj, int how, const char *name, I32 namlen)
4391 {
4392     dVAR;
4393     MGVTBL *vtable;
4394     MAGIC* mg;
4395
4396 #ifdef PERL_OLD_COPY_ON_WRITE
4397     if (SvIsCOW(sv))
4398         sv_force_normal_flags(sv, 0);
4399 #endif
4400     if (SvREADONLY(sv)) {
4401         if (
4402             /* its okay to attach magic to shared strings; the subsequent
4403              * upgrade to PVMG will unshare the string */
4404             !(SvFAKE(sv) && SvTYPE(sv) < SVt_PVMG)
4405
4406             && IN_PERL_RUNTIME
4407             && how != PERL_MAGIC_regex_global
4408             && how != PERL_MAGIC_bm
4409             && how != PERL_MAGIC_fm
4410             && how != PERL_MAGIC_sv
4411             && how != PERL_MAGIC_backref
4412            )
4413         {
4414             Perl_croak(aTHX_ PL_no_modify);
4415         }
4416     }
4417     if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
4418         if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
4419             /* sv_magic() refuses to add a magic of the same 'how' as an
4420                existing one
4421              */
4422             if (how == PERL_MAGIC_taint) {
4423                 mg->mg_len |= 1;
4424                 /* Any scalar which already had taint magic on which someone
4425                    (erroneously?) did SvIOK_on() or similar will now be
4426                    incorrectly sporting public "OK" flags.  */
4427                 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
4428             }
4429             return;
4430         }
4431     }
4432
4433     switch (how) {
4434     case PERL_MAGIC_sv:
4435         vtable = &PL_vtbl_sv;
4436         break;
4437     case PERL_MAGIC_overload:
4438         vtable = &PL_vtbl_amagic;
4439         break;
4440     case PERL_MAGIC_overload_elem:
4441         vtable = &PL_vtbl_amagicelem;
4442         break;
4443     case PERL_MAGIC_overload_table:
4444         vtable = &PL_vtbl_ovrld;
4445         break;
4446     case PERL_MAGIC_bm:
4447         vtable = &PL_vtbl_bm;
4448         break;
4449     case PERL_MAGIC_regdata:
4450         vtable = &PL_vtbl_regdata;
4451         break;
4452     case PERL_MAGIC_regdatum:
4453         vtable = &PL_vtbl_regdatum;
4454         break;
4455     case PERL_MAGIC_env:
4456         vtable = &PL_vtbl_env;
4457         break;
4458     case PERL_MAGIC_fm:
4459         vtable = &PL_vtbl_fm;
4460         break;
4461     case PERL_MAGIC_envelem:
4462         vtable = &PL_vtbl_envelem;
4463         break;
4464     case PERL_MAGIC_regex_global:
4465         vtable = &PL_vtbl_mglob;
4466         break;
4467     case PERL_MAGIC_isa:
4468         vtable = &PL_vtbl_isa;
4469         break;
4470     case PERL_MAGIC_isaelem:
4471         vtable = &PL_vtbl_isaelem;
4472         break;
4473     case PERL_MAGIC_nkeys:
4474         vtable = &PL_vtbl_nkeys;
4475         break;
4476     case PERL_MAGIC_dbfile:
4477         vtable = NULL;
4478         break;
4479     case PERL_MAGIC_dbline:
4480         vtable = &PL_vtbl_dbline;
4481         break;
4482 #ifdef USE_LOCALE_COLLATE
4483     case PERL_MAGIC_collxfrm:
4484         vtable = &PL_vtbl_collxfrm;
4485         break;
4486 #endif /* USE_LOCALE_COLLATE */
4487     case PERL_MAGIC_tied:
4488         vtable = &PL_vtbl_pack;
4489         break;
4490     case PERL_MAGIC_tiedelem:
4491     case PERL_MAGIC_tiedscalar:
4492         vtable = &PL_vtbl_packelem;
4493         break;
4494     case PERL_MAGIC_qr:
4495         vtable = &PL_vtbl_regexp;
4496         break;
4497     case PERL_MAGIC_sig:
4498         vtable = &PL_vtbl_sig;
4499         break;
4500     case PERL_MAGIC_sigelem:
4501         vtable = &PL_vtbl_sigelem;
4502         break;
4503     case PERL_MAGIC_taint:
4504         vtable = &PL_vtbl_taint;
4505         break;
4506     case PERL_MAGIC_uvar:
4507         vtable = &PL_vtbl_uvar;
4508         break;
4509     case PERL_MAGIC_vec:
4510         vtable = &PL_vtbl_vec;
4511         break;
4512     case PERL_MAGIC_arylen_p:
4513     case PERL_MAGIC_rhash:
4514     case PERL_MAGIC_symtab:
4515     case PERL_MAGIC_vstring:
4516         vtable = NULL;
4517         break;
4518     case PERL_MAGIC_utf8:
4519         vtable = &PL_vtbl_utf8;
4520         break;
4521     case PERL_MAGIC_substr:
4522         vtable = &PL_vtbl_substr;
4523         break;
4524     case PERL_MAGIC_defelem:
4525         vtable = &PL_vtbl_defelem;
4526         break;
4527     case PERL_MAGIC_arylen:
4528         vtable = &PL_vtbl_arylen;
4529         break;
4530     case PERL_MAGIC_pos:
4531         vtable = &PL_vtbl_pos;
4532         break;
4533     case PERL_MAGIC_backref:
4534         vtable = &PL_vtbl_backref;
4535         break;
4536     case PERL_MAGIC_ext:
4537         /* Reserved for use by extensions not perl internals.           */
4538         /* Useful for attaching extension internal data to perl vars.   */
4539         /* Note that multiple extensions may clash if magical scalars   */
4540         /* etc holding private data from one are passed to another.     */
4541         vtable = NULL;
4542         break;
4543     default:
4544         Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
4545     }
4546
4547     /* Rest of work is done else where */
4548     mg = sv_magicext(sv,obj,how,vtable,name,namlen);
4549
4550     switch (how) {
4551     case PERL_MAGIC_taint:
4552         mg->mg_len = 1;
4553         break;
4554     case PERL_MAGIC_ext:
4555     case PERL_MAGIC_dbfile:
4556         SvRMAGICAL_on(sv);
4557         break;
4558     }
4559 }
4560
4561 /*
4562 =for apidoc sv_unmagic
4563
4564 Removes all magic of type C<type> from an SV.
4565
4566 =cut
4567 */
4568
4569 int
4570 Perl_sv_unmagic(pTHX_ SV *sv, int type)
4571 {
4572     MAGIC* mg;
4573     MAGIC** mgp;
4574     if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
4575         return 0;
4576     mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
4577     for (mg = *mgp; mg; mg = *mgp) {
4578         if (mg->mg_type == type) {
4579             const MGVTBL* const vtbl = mg->mg_virtual;
4580             *mgp = mg->mg_moremagic;
4581             if (vtbl && vtbl->svt_free)
4582                 CALL_FPTR(vtbl->svt_free)(aTHX_ sv, mg);
4583             if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
4584                 if (mg->mg_len > 0)
4585                     Safefree(mg->mg_ptr);
4586                 else if (mg->mg_len == HEf_SVKEY)
4587                     SvREFCNT_dec((SV*)mg->mg_ptr);
4588                 else if (mg->mg_type == PERL_MAGIC_utf8 && mg->mg_ptr)
4589                     Safefree(mg->mg_ptr);
4590             }
4591             if (mg->mg_flags & MGf_REFCOUNTED)
4592                 SvREFCNT_dec(mg->mg_obj);
4593             Safefree(mg);
4594         }
4595         else
4596             mgp = &mg->mg_moremagic;
4597     }
4598     if (!SvMAGIC(sv)) {
4599         SvMAGICAL_off(sv);
4600         SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
4601         SvMAGIC_set(sv, NULL);
4602     }
4603
4604     return 0;
4605 }
4606
4607 /*
4608 =for apidoc sv_rvweaken
4609
4610 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
4611 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
4612 push a back-reference to this RV onto the array of backreferences
4613 associated with that magic.
4614
4615 =cut
4616 */
4617
4618 SV *
4619 Perl_sv_rvweaken(pTHX_ SV *sv)
4620 {
4621     SV *tsv;
4622     if (!SvOK(sv))  /* let undefs pass */
4623         return sv;
4624     if (!SvROK(sv))
4625         Perl_croak(aTHX_ "Can't weaken a nonreference");
4626     else if (SvWEAKREF(sv)) {
4627         if (ckWARN(WARN_MISC))
4628             Perl_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
4629         return sv;
4630     }
4631     tsv = SvRV(sv);
4632     Perl_sv_add_backref(aTHX_ tsv, sv);
4633     SvWEAKREF_on(sv);
4634     SvREFCNT_dec(tsv);
4635     return sv;
4636 }
4637
4638 /* Give tsv backref magic if it hasn't already got it, then push a
4639  * back-reference to sv onto the array associated with the backref magic.
4640  */
4641
4642 void
4643 Perl_sv_add_backref(pTHX_ SV *tsv, SV *sv)
4644 {
4645     dVAR;
4646     AV *av;
4647
4648     if (SvTYPE(tsv) == SVt_PVHV) {
4649         AV **const avp = Perl_hv_backreferences_p(aTHX_ (HV*)tsv);
4650
4651         av = *avp;
4652         if (!av) {
4653             /* There is no AV in the offical place - try a fixup.  */
4654             MAGIC *const mg = mg_find(tsv, PERL_MAGIC_backref);
4655
4656             if (mg) {
4657                 /* Aha. They've got it stowed in magic.  Bring it back.  */
4658                 av = (AV*)mg->mg_obj;
4659                 /* Stop mg_free decreasing the refernce count.  */
4660                 mg->mg_obj = NULL;
4661                 /* Stop mg_free even calling the destructor, given that
4662                    there's no AV to free up.  */
4663                 mg->mg_virtual = 0;
4664                 sv_unmagic(tsv, PERL_MAGIC_backref);
4665             } else {
4666                 av = newAV();
4667                 AvREAL_off(av);
4668                 SvREFCNT_inc(av);
4669             }
4670             *avp = av;
4671         }
4672     } else {
4673         const MAGIC *const mg
4674             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
4675         if (mg)
4676             av = (AV*)mg->mg_obj;
4677         else {
4678             av = newAV();
4679             AvREAL_off(av);
4680             sv_magic(tsv, (SV*)av, PERL_MAGIC_backref, NULL, 0);
4681             /* av now has a refcnt of 2, which avoids it getting freed
4682              * before us during global cleanup. The extra ref is removed
4683              * by magic_killbackrefs() when tsv is being freed */
4684         }
4685     }
4686     if (AvFILLp(av) >= AvMAX(av)) {
4687         av_extend(av, AvFILLp(av)+1);
4688     }
4689     AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
4690 }
4691
4692 /* delete a back-reference to ourselves from the backref magic associated
4693  * with the SV we point to.
4694  */
4695
4696 STATIC void
4697 S_sv_del_backref(pTHX_ SV *tsv, SV *sv)
4698 {
4699     dVAR;
4700     AV *av = NULL;
4701     SV **svp;
4702     I32 i;
4703
4704     if (SvTYPE(tsv) == SVt_PVHV && SvOOK(tsv)) {
4705         av = *Perl_hv_backreferences_p(aTHX_ (HV*)tsv);
4706         /* We mustn't attempt to "fix up" the hash here by moving the
4707            backreference array back to the hv_aux structure, as that is stored
4708            in the main HvARRAY(), and hfreentries assumes that no-one
4709            reallocates HvARRAY() while it is running.  */
4710     }
4711     if (!av) {
4712         const MAGIC *const mg
4713             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
4714         if (mg)
4715             av = (AV *)mg->mg_obj;
4716     }
4717     if (!av) {
4718         if (PL_in_clean_all)
4719             return;
4720         Perl_croak(aTHX_ "panic: del_backref");
4721     }
4722
4723     if (SvIS_FREED(av))
4724         return;
4725
4726     svp = AvARRAY(av);
4727     /* We shouldn't be in here more than once, but for paranoia reasons lets
4728        not assume this.  */
4729     for (i = AvFILLp(av); i >= 0; i--) {
4730         if (svp[i] == sv) {
4731             const SSize_t fill = AvFILLp(av);
4732             if (i != fill) {
4733                 /* We weren't the last entry.
4734                    An unordered list has this property that you can take the
4735                    last element off the end to fill the hole, and it's still
4736                    an unordered list :-)
4737                 */
4738                 svp[i] = svp[fill];
4739             }
4740             svp[fill] = NULL;
4741             AvFILLp(av) = fill - 1;
4742         }
4743     }
4744 }
4745
4746 int
4747 Perl_sv_kill_backrefs(pTHX_ SV *sv, AV *av)
4748 {
4749     SV **svp = AvARRAY(av);
4750
4751     PERL_UNUSED_ARG(sv);
4752
4753     /* Not sure why the av can get freed ahead of its sv, but somehow it does
4754        in ext/B/t/bytecode.t test 15 (involving print <DATA>)  */
4755     if (svp && !SvIS_FREED(av)) {
4756         SV *const *const last = svp + AvFILLp(av);
4757
4758         while (svp <= last) {
4759             if (*svp) {
4760                 SV *const referrer = *svp;
4761                 if (SvWEAKREF(referrer)) {
4762                     /* XXX Should we check that it hasn't changed? */
4763                     SvRV_set(referrer, 0);
4764                     SvOK_off(referrer);
4765                     SvWEAKREF_off(referrer);
4766                 } else if (SvTYPE(referrer) == SVt_PVGV ||
4767                            SvTYPE(referrer) == SVt_PVLV) {
4768                     /* You lookin' at me?  */
4769                     assert(GvSTASH(referrer));
4770                     assert(GvSTASH(referrer) == (HV*)sv);
4771                     GvSTASH(referrer) = 0;
4772                 } else {
4773                     Perl_croak(aTHX_
4774                                "panic: magic_killbackrefs (flags=%"UVxf")",
4775                                (UV)SvFLAGS(referrer));
4776                 }
4777
4778                 *svp = NULL;
4779             }
4780             svp++;
4781         }
4782     }
4783     SvREFCNT_dec(av); /* remove extra count added by sv_add_backref() */
4784     return 0;
4785 }
4786
4787 /*
4788 =for apidoc sv_insert
4789
4790 Inserts a string at the specified offset/length within the SV. Similar to
4791 the Perl substr() function.
4792
4793 =cut
4794 */