This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Store GvGP in the SV head union. For all the common lookups [eg GvCV()]
[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 && isGV_with_GP(sv) && 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 (isGV_with_GP(sv)) {
2121             return PTR2IV(glob_2inpuv((GV *)sv, NULL, TRUE));
2122         }
2123
2124         if (!(SvFLAGS(sv) & SVs_PADTMP)) {
2125             if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2126                 report_uninit(sv);
2127         }
2128         if (SvTYPE(sv) < SVt_IV)
2129             /* Typically the caller expects that sv_any is not NULL now.  */
2130             sv_upgrade(sv, SVt_IV);
2131         /* Return 0 from the caller.  */
2132         return TRUE;
2133     }
2134     return FALSE;
2135 }
2136
2137 /*
2138 =for apidoc sv_2iv_flags
2139
2140 Return the integer value of an SV, doing any necessary string
2141 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2142 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2143
2144 =cut
2145 */
2146
2147 IV
2148 Perl_sv_2iv_flags(pTHX_ register SV *sv, I32 flags)
2149 {
2150     dVAR;
2151     if (!sv)
2152         return 0;
2153     if (SvGMAGICAL(sv)) {
2154         if (flags & SV_GMAGIC)
2155             mg_get(sv);
2156         if (SvIOKp(sv))
2157             return SvIVX(sv);
2158         if (SvNOKp(sv)) {
2159             return I_V(SvNVX(sv));
2160         }
2161         if (SvPOKp(sv) && SvLEN(sv)) {
2162             UV value;
2163             const int numtype
2164                 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2165
2166             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2167                 == IS_NUMBER_IN_UV) {
2168                 /* It's definitely an integer */
2169                 if (numtype & IS_NUMBER_NEG) {
2170                     if (value < (UV)IV_MIN)
2171                         return -(IV)value;
2172                 } else {
2173                     if (value < (UV)IV_MAX)
2174                         return (IV)value;
2175                 }
2176             }
2177             if (!numtype) {
2178                 if (ckWARN(WARN_NUMERIC))
2179                     not_a_number(sv);
2180             }
2181             return I_V(Atof(SvPVX_const(sv)));
2182         }
2183         if (SvROK(sv)) {
2184             goto return_rok;
2185         }
2186         assert(SvTYPE(sv) >= SVt_PVMG);
2187         /* This falls through to the report_uninit inside S_sv_2iuv_common.  */
2188     } else if (SvTHINKFIRST(sv)) {
2189         if (SvROK(sv)) {
2190         return_rok:
2191             if (SvAMAGIC(sv)) {
2192                 SV * const tmpstr=AMG_CALLun(sv,numer);
2193                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2194                     return SvIV(tmpstr);
2195                 }
2196             }
2197             return PTR2IV(SvRV(sv));
2198         }
2199         if (SvIsCOW(sv)) {
2200             sv_force_normal_flags(sv, 0);
2201         }
2202         if (SvREADONLY(sv) && !SvOK(sv)) {
2203             if (ckWARN(WARN_UNINITIALIZED))
2204                 report_uninit(sv);
2205             return 0;
2206         }
2207     }
2208     if (!SvIOKp(sv)) {
2209         if (S_sv_2iuv_common(aTHX_ sv))
2210             return 0;
2211     }
2212     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2213         PTR2UV(sv),SvIVX(sv)));
2214     return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2215 }
2216
2217 /*
2218 =for apidoc sv_2uv_flags
2219
2220 Return the unsigned integer value of an SV, doing any necessary string
2221 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2222 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2223
2224 =cut
2225 */
2226
2227 UV
2228 Perl_sv_2uv_flags(pTHX_ register SV *sv, I32 flags)
2229 {
2230     dVAR;
2231     if (!sv)
2232         return 0;
2233     if (SvGMAGICAL(sv)) {
2234         if (flags & SV_GMAGIC)
2235             mg_get(sv);
2236         if (SvIOKp(sv))
2237             return SvUVX(sv);
2238         if (SvNOKp(sv))
2239             return U_V(SvNVX(sv));
2240         if (SvPOKp(sv) && SvLEN(sv)) {
2241             UV value;
2242             const int numtype
2243                 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2244
2245             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2246                 == IS_NUMBER_IN_UV) {
2247                 /* It's definitely an integer */
2248                 if (!(numtype & IS_NUMBER_NEG))
2249                     return value;
2250             }
2251             if (!numtype) {
2252                 if (ckWARN(WARN_NUMERIC))
2253                     not_a_number(sv);
2254             }
2255             return U_V(Atof(SvPVX_const(sv)));
2256         }
2257         if (SvROK(sv)) {
2258             goto return_rok;
2259         }
2260         assert(SvTYPE(sv) >= SVt_PVMG);
2261         /* This falls through to the report_uninit inside S_sv_2iuv_common.  */
2262     } else if (SvTHINKFIRST(sv)) {
2263         if (SvROK(sv)) {
2264         return_rok:
2265             if (SvAMAGIC(sv)) {
2266                 SV *const tmpstr = AMG_CALLun(sv,numer);
2267                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2268                     return SvUV(tmpstr);
2269                 }
2270             }
2271             return PTR2UV(SvRV(sv));
2272         }
2273         if (SvIsCOW(sv)) {
2274             sv_force_normal_flags(sv, 0);
2275         }
2276         if (SvREADONLY(sv) && !SvOK(sv)) {
2277             if (ckWARN(WARN_UNINITIALIZED))
2278                 report_uninit(sv);
2279             return 0;
2280         }
2281     }
2282     if (!SvIOKp(sv)) {
2283         if (S_sv_2iuv_common(aTHX_ sv))
2284             return 0;
2285     }
2286
2287     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2288                           PTR2UV(sv),SvUVX(sv)));
2289     return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2290 }
2291
2292 /*
2293 =for apidoc sv_2nv
2294
2295 Return the num value of an SV, doing any necessary string or integer
2296 conversion, magic etc. Normally used via the C<SvNV(sv)> and C<SvNVx(sv)>
2297 macros.
2298
2299 =cut
2300 */
2301
2302 NV
2303 Perl_sv_2nv(pTHX_ register SV *sv)
2304 {
2305     dVAR;
2306     if (!sv)
2307         return 0.0;
2308     if (SvGMAGICAL(sv)) {
2309         mg_get(sv);
2310         if (SvNOKp(sv))
2311             return SvNVX(sv);
2312         if ((SvPOKp(sv) && SvLEN(sv)) && !SvIOKp(sv)) {
2313             if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2314                 !grok_number(SvPVX_const(sv), SvCUR(sv), NULL))
2315                 not_a_number(sv);
2316             return Atof(SvPVX_const(sv));
2317         }
2318         if (SvIOKp(sv)) {
2319             if (SvIsUV(sv))
2320                 return (NV)SvUVX(sv);
2321             else
2322                 return (NV)SvIVX(sv);
2323         }
2324         if (SvROK(sv)) {
2325             goto return_rok;
2326         }
2327         assert(SvTYPE(sv) >= SVt_PVMG);
2328         /* This falls through to the report_uninit near the end of the
2329            function. */
2330     } else if (SvTHINKFIRST(sv)) {
2331         if (SvROK(sv)) {
2332         return_rok:
2333             if (SvAMAGIC(sv)) {
2334                 SV *const tmpstr = AMG_CALLun(sv,numer);
2335                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2336                     return SvNV(tmpstr);
2337                 }
2338             }
2339             return PTR2NV(SvRV(sv));
2340         }
2341         if (SvIsCOW(sv)) {
2342             sv_force_normal_flags(sv, 0);
2343         }
2344         if (SvREADONLY(sv) && !SvOK(sv)) {
2345             if (ckWARN(WARN_UNINITIALIZED))
2346                 report_uninit(sv);
2347             return 0.0;
2348         }
2349     }
2350     if (SvTYPE(sv) < SVt_NV) {
2351         /* The logic to use SVt_PVNV if necessary is in sv_upgrade.  */
2352         sv_upgrade(sv, SVt_NV);
2353 #ifdef USE_LONG_DOUBLE
2354         DEBUG_c({
2355             STORE_NUMERIC_LOCAL_SET_STANDARD();
2356             PerlIO_printf(Perl_debug_log,
2357                           "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2358                           PTR2UV(sv), SvNVX(sv));
2359             RESTORE_NUMERIC_LOCAL();
2360         });
2361 #else
2362         DEBUG_c({
2363             STORE_NUMERIC_LOCAL_SET_STANDARD();
2364             PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%"NVgf")\n",
2365                           PTR2UV(sv), SvNVX(sv));
2366             RESTORE_NUMERIC_LOCAL();
2367         });
2368 #endif
2369     }
2370     else if (SvTYPE(sv) < SVt_PVNV)
2371         sv_upgrade(sv, SVt_PVNV);
2372     if (SvNOKp(sv)) {
2373         return SvNVX(sv);
2374     }
2375     if (SvIOKp(sv)) {
2376         SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2377 #ifdef NV_PRESERVES_UV
2378         SvNOK_on(sv);
2379 #else
2380         /* Only set the public NV OK flag if this NV preserves the IV  */
2381         /* Check it's not 0xFFFFFFFFFFFFFFFF */
2382         if (SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2383                        : (SvIVX(sv) == I_V(SvNVX(sv))))
2384             SvNOK_on(sv);
2385         else
2386             SvNOKp_on(sv);
2387 #endif
2388     }
2389     else if (SvPOKp(sv) && SvLEN(sv)) {
2390         UV value;
2391         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2392         if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2393             not_a_number(sv);
2394 #ifdef NV_PRESERVES_UV
2395         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2396             == IS_NUMBER_IN_UV) {
2397             /* It's definitely an integer */
2398             SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2399         } else
2400             SvNV_set(sv, Atof(SvPVX_const(sv)));
2401         SvNOK_on(sv);
2402 #else
2403         SvNV_set(sv, Atof(SvPVX_const(sv)));
2404         /* Only set the public NV OK flag if this NV preserves the value in
2405            the PV at least as well as an IV/UV would.
2406            Not sure how to do this 100% reliably. */
2407         /* if that shift count is out of range then Configure's test is
2408            wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2409            UV_BITS */
2410         if (((UV)1 << NV_PRESERVES_UV_BITS) >
2411             U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2412             SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2413         } else if (!(numtype & IS_NUMBER_IN_UV)) {
2414             /* Can't use strtol etc to convert this string, so don't try.
2415                sv_2iv and sv_2uv will use the NV to convert, not the PV.  */
2416             SvNOK_on(sv);
2417         } else {
2418             /* value has been set.  It may not be precise.  */
2419             if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2420                 /* 2s complement assumption for (UV)IV_MIN  */
2421                 SvNOK_on(sv); /* Integer is too negative.  */
2422             } else {
2423                 SvNOKp_on(sv);
2424                 SvIOKp_on(sv);
2425
2426                 if (numtype & IS_NUMBER_NEG) {
2427                     SvIV_set(sv, -(IV)value);
2428                 } else if (value <= (UV)IV_MAX) {
2429                     SvIV_set(sv, (IV)value);
2430                 } else {
2431                     SvUV_set(sv, value);
2432                     SvIsUV_on(sv);
2433                 }
2434
2435                 if (numtype & IS_NUMBER_NOT_INT) {
2436                     /* I believe that even if the original PV had decimals,
2437                        they are lost beyond the limit of the FP precision.
2438                        However, neither is canonical, so both only get p
2439                        flags.  NWC, 2000/11/25 */
2440                     /* Both already have p flags, so do nothing */
2441                 } else {
2442                     const NV nv = SvNVX(sv);
2443                     if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2444                         if (SvIVX(sv) == I_V(nv)) {
2445                             SvNOK_on(sv);
2446                         } else {
2447                             /* It had no "." so it must be integer.  */
2448                         }
2449                         SvIOK_on(sv);
2450                     } else {
2451                         /* between IV_MAX and NV(UV_MAX).
2452                            Could be slightly > UV_MAX */
2453
2454                         if (numtype & IS_NUMBER_NOT_INT) {
2455                             /* UV and NV both imprecise.  */
2456                         } else {
2457                             const UV nv_as_uv = U_V(nv);
2458
2459                             if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2460                                 SvNOK_on(sv);
2461                             }
2462                             SvIOK_on(sv);
2463                         }
2464                     }
2465                 }
2466             }
2467         }
2468 #endif /* NV_PRESERVES_UV */
2469     }
2470     else  {
2471         if (isGV_with_GP(sv)) {
2472             glob_2inpuv((GV *)sv, NULL, TRUE);
2473             return 0.0;
2474         }
2475
2476         if (!PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP) && ckWARN(WARN_UNINITIALIZED))
2477             report_uninit(sv);
2478         assert (SvTYPE(sv) >= SVt_NV);
2479         /* Typically the caller expects that sv_any is not NULL now.  */
2480         /* XXX Ilya implies that this is a bug in callers that assume this
2481            and ideally should be fixed.  */
2482         return 0.0;
2483     }
2484 #if defined(USE_LONG_DOUBLE)
2485     DEBUG_c({
2486         STORE_NUMERIC_LOCAL_SET_STANDARD();
2487         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2488                       PTR2UV(sv), SvNVX(sv));
2489         RESTORE_NUMERIC_LOCAL();
2490     });
2491 #else
2492     DEBUG_c({
2493         STORE_NUMERIC_LOCAL_SET_STANDARD();
2494         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%"NVgf")\n",
2495                       PTR2UV(sv), SvNVX(sv));
2496         RESTORE_NUMERIC_LOCAL();
2497     });
2498 #endif
2499     return SvNVX(sv);
2500 }
2501
2502 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2503  * UV as a string towards the end of buf, and return pointers to start and
2504  * end of it.
2505  *
2506  * We assume that buf is at least TYPE_CHARS(UV) long.
2507  */
2508
2509 static char *
2510 S_uiv_2buf(char *buf, IV iv, UV uv, int is_uv, char **peob)
2511 {
2512     char *ptr = buf + TYPE_CHARS(UV);
2513     char * const ebuf = ptr;
2514     int sign;
2515
2516     if (is_uv)
2517         sign = 0;
2518     else if (iv >= 0) {
2519         uv = iv;
2520         sign = 0;
2521     } else {
2522         uv = -iv;
2523         sign = 1;
2524     }
2525     do {
2526         *--ptr = '0' + (char)(uv % 10);
2527     } while (uv /= 10);
2528     if (sign)
2529         *--ptr = '-';
2530     *peob = ebuf;
2531     return ptr;
2532 }
2533
2534 /* stringify_regexp(): private routine for use by sv_2pv_flags(): converts
2535  * a regexp to its stringified form.
2536  */
2537
2538 static char *
2539 S_stringify_regexp(pTHX_ SV *sv, MAGIC *mg, STRLEN *lp) {
2540     dVAR;
2541     const regexp * const re = (regexp *)mg->mg_obj;
2542
2543     if (!mg->mg_ptr) {
2544         const char *fptr = "msix";
2545         char reflags[6];
2546         char ch;
2547         int left = 0;
2548         int right = 4;
2549         bool need_newline = 0;
2550         U16 reganch = (U16)((re->reganch & PMf_COMPILETIME) >> 12);
2551
2552         while((ch = *fptr++)) {
2553             if(reganch & 1) {
2554                 reflags[left++] = ch;
2555             }
2556             else {
2557                 reflags[right--] = ch;
2558             }
2559             reganch >>= 1;
2560         }
2561         if(left != 4) {
2562             reflags[left] = '-';
2563             left = 5;
2564         }
2565
2566         mg->mg_len = re->prelen + 4 + left;
2567         /*
2568          * If /x was used, we have to worry about a regex ending with a
2569          * comment later being embedded within another regex. If so, we don't
2570          * want this regex's "commentization" to leak out to the right part of
2571          * the enclosing regex, we must cap it with a newline.
2572          *
2573          * So, if /x was used, we scan backwards from the end of the regex. If
2574          * we find a '#' before we find a newline, we need to add a newline
2575          * ourself. If we find a '\n' first (or if we don't find '#' or '\n'),
2576          * we don't need to add anything.  -jfriedl
2577          */
2578         if (PMf_EXTENDED & re->reganch) {
2579             const char *endptr = re->precomp + re->prelen;
2580             while (endptr >= re->precomp) {
2581                 const char c = *(endptr--);
2582                 if (c == '\n')
2583                     break; /* don't need another */
2584                 if (c == '#') {
2585                     /* we end while in a comment, so we need a newline */
2586                     mg->mg_len++; /* save space for it */
2587                     need_newline = 1; /* note to add it */
2588                     break;
2589                 }
2590             }
2591         }
2592
2593         Newx(mg->mg_ptr, mg->mg_len + 1 + left, char);
2594         mg->mg_ptr[0] = '(';
2595         mg->mg_ptr[1] = '?';
2596         Copy(reflags, mg->mg_ptr+2, left, char);
2597         *(mg->mg_ptr+left+2) = ':';
2598         Copy(re->precomp, mg->mg_ptr+3+left, re->prelen, char);
2599         if (need_newline)
2600             mg->mg_ptr[mg->mg_len - 2] = '\n';
2601         mg->mg_ptr[mg->mg_len - 1] = ')';
2602         mg->mg_ptr[mg->mg_len] = 0;
2603     }
2604     PL_reginterp_cnt += re->program[0].next_off;
2605     
2606     if (re->reganch & ROPT_UTF8)
2607         SvUTF8_on(sv);
2608     else
2609         SvUTF8_off(sv);
2610     if (lp)
2611         *lp = mg->mg_len;
2612     return mg->mg_ptr;
2613 }
2614
2615 /*
2616 =for apidoc sv_2pv_flags
2617
2618 Returns a pointer to the string value of an SV, and sets *lp to its length.
2619 If flags includes SV_GMAGIC, does an mg_get() first. Coerces sv to a string
2620 if necessary.
2621 Normally invoked via the C<SvPV_flags> macro. C<sv_2pv()> and C<sv_2pv_nomg>
2622 usually end up here too.
2623
2624 =cut
2625 */
2626
2627 char *
2628 Perl_sv_2pv_flags(pTHX_ register SV *sv, STRLEN *lp, I32 flags)
2629 {
2630     dVAR;
2631     register char *s;
2632
2633     if (!sv) {
2634         if (lp)
2635             *lp = 0;
2636         return (char *)"";
2637     }
2638     if (SvGMAGICAL(sv)) {
2639         if (flags & SV_GMAGIC)
2640             mg_get(sv);
2641         if (SvPOKp(sv)) {
2642             if (lp)
2643                 *lp = SvCUR(sv);
2644             if (flags & SV_MUTABLE_RETURN)
2645                 return SvPVX_mutable(sv);
2646             if (flags & SV_CONST_RETURN)
2647                 return (char *)SvPVX_const(sv);
2648             return SvPVX(sv);
2649         }
2650         if (SvIOKp(sv) || SvNOKp(sv)) {
2651             char tbuf[64];  /* Must fit sprintf/Gconvert of longest IV/NV */
2652             STRLEN len;
2653
2654             if (SvIOKp(sv)) {
2655                 len = SvIsUV(sv) ? my_sprintf(tbuf,"%"UVuf, (UV)SvUVX(sv))
2656                     : my_sprintf(tbuf,"%"IVdf, (IV)SvIVX(sv));
2657             } else {
2658                 Gconvert(SvNVX(sv), NV_DIG, 0, tbuf);
2659                 len = strlen(tbuf);
2660             }
2661             assert(!SvROK(sv));
2662             {
2663                 dVAR;
2664
2665 #ifdef FIXNEGATIVEZERO
2666                 if (len == 2 && tbuf[0] == '-' && tbuf[1] == '0') {
2667                     tbuf[0] = '0';
2668                     tbuf[1] = 0;
2669                     len = 1;
2670                 }
2671 #endif
2672                 SvUPGRADE(sv, SVt_PV);
2673                 if (lp)
2674                     *lp = len;
2675                 s = SvGROW_mutable(sv, len + 1);
2676                 SvCUR_set(sv, len);
2677                 SvPOKp_on(sv);
2678                 return memcpy(s, tbuf, len + 1);
2679             }
2680         }
2681         if (SvROK(sv)) {
2682             goto return_rok;
2683         }
2684         assert(SvTYPE(sv) >= SVt_PVMG);
2685         /* This falls through to the report_uninit near the end of the
2686            function. */
2687     } else if (SvTHINKFIRST(sv)) {
2688         if (SvROK(sv)) {
2689         return_rok:
2690             if (SvAMAGIC(sv)) {
2691                 SV *const tmpstr = AMG_CALLun(sv,string);
2692                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2693                     /* Unwrap this:  */
2694                     /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2695                      */
2696
2697                     char *pv;
2698                     if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2699                         if (flags & SV_CONST_RETURN) {
2700                             pv = (char *) SvPVX_const(tmpstr);
2701                         } else {
2702                             pv = (flags & SV_MUTABLE_RETURN)
2703                                 ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2704                         }
2705                         if (lp)
2706                             *lp = SvCUR(tmpstr);
2707                     } else {
2708                         pv = sv_2pv_flags(tmpstr, lp, flags);
2709                     }
2710                     if (SvUTF8(tmpstr))
2711                         SvUTF8_on(sv);
2712                     else
2713                         SvUTF8_off(sv);
2714                     return pv;
2715                 }
2716             }
2717             {
2718                 SV *tsv;
2719                 MAGIC *mg;
2720                 const SV *const referent = (SV*)SvRV(sv);
2721
2722                 if (!referent) {
2723                     tsv = sv_2mortal(newSVpvs("NULLREF"));
2724                 } else if (SvTYPE(referent) == SVt_PVMG
2725                            && ((SvFLAGS(referent) &
2726                                 (SVs_OBJECT|SVf_OK|SVs_GMG|SVs_SMG|SVs_RMG))
2727                                == (SVs_OBJECT|SVs_SMG))
2728                            && (mg = mg_find(referent, PERL_MAGIC_qr))) {
2729                     return stringify_regexp(sv, mg, lp);
2730                 } else {
2731                     const char *const typestr = sv_reftype(referent, 0);
2732
2733                     tsv = sv_newmortal();
2734                     if (SvOBJECT(referent)) {
2735                         const char *const name = HvNAME_get(SvSTASH(referent));
2736                         Perl_sv_setpvf(aTHX_ tsv, "%s=%s(0x%"UVxf")",
2737                                        name ? name : "__ANON__" , typestr,
2738                                        PTR2UV(referent));
2739                     }
2740                     else
2741                         Perl_sv_setpvf(aTHX_ tsv, "%s(0x%"UVxf")", typestr,
2742                                        PTR2UV(referent));
2743                 }
2744                 if (lp)
2745                     *lp = SvCUR(tsv);
2746                 return SvPVX(tsv);
2747             }
2748         }
2749         if (SvREADONLY(sv) && !SvOK(sv)) {
2750             if (ckWARN(WARN_UNINITIALIZED))
2751                 report_uninit(sv);
2752             if (lp)
2753                 *lp = 0;
2754             return (char *)"";
2755         }
2756     }
2757     if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
2758         /* I'm assuming that if both IV and NV are equally valid then
2759            converting the IV is going to be more efficient */
2760         const U32 isIOK = SvIOK(sv);
2761         const U32 isUIOK = SvIsUV(sv);
2762         char buf[TYPE_CHARS(UV)];
2763         char *ebuf, *ptr;
2764
2765         if (SvTYPE(sv) < SVt_PVIV)
2766             sv_upgrade(sv, SVt_PVIV);
2767         ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
2768         /* inlined from sv_setpvn */
2769         SvGROW_mutable(sv, (STRLEN)(ebuf - ptr + 1));
2770         Move(ptr,SvPVX_mutable(sv),ebuf - ptr,char);
2771         SvCUR_set(sv, ebuf - ptr);
2772         s = SvEND(sv);
2773         *s = '\0';
2774         if (isIOK)
2775             SvIOK_on(sv);
2776         else
2777             SvIOKp_on(sv);
2778         if (isUIOK)
2779             SvIsUV_on(sv);
2780     }
2781     else if (SvNOKp(sv)) {
2782         const int olderrno = errno;
2783         if (SvTYPE(sv) < SVt_PVNV)
2784             sv_upgrade(sv, SVt_PVNV);
2785         /* The +20 is pure guesswork.  Configure test needed. --jhi */
2786         s = SvGROW_mutable(sv, NV_DIG + 20);
2787         /* some Xenix systems wipe out errno here */
2788 #ifdef apollo
2789         if (SvNVX(sv) == 0.0)
2790             (void)strcpy(s,"0");
2791         else
2792 #endif /*apollo*/
2793         {
2794             Gconvert(SvNVX(sv), NV_DIG, 0, s);
2795         }
2796         errno = olderrno;
2797 #ifdef FIXNEGATIVEZERO
2798         if (*s == '-' && s[1] == '0' && !s[2])
2799             strcpy(s,"0");
2800 #endif
2801         while (*s) s++;
2802 #ifdef hcx
2803         if (s[-1] == '.')
2804             *--s = '\0';
2805 #endif
2806     }
2807     else {
2808         if (isGV_with_GP(sv)) {
2809             return glob_2inpuv((GV *)sv, lp, FALSE);
2810         }
2811
2812         if (!PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP) && ckWARN(WARN_UNINITIALIZED))
2813             report_uninit(sv);
2814         if (lp)
2815             *lp = 0;
2816         if (SvTYPE(sv) < SVt_PV)
2817             /* Typically the caller expects that sv_any is not NULL now.  */
2818             sv_upgrade(sv, SVt_PV);
2819         return (char *)"";
2820     }
2821     {
2822         const STRLEN len = s - SvPVX_const(sv);
2823         if (lp) 
2824             *lp = len;
2825         SvCUR_set(sv, len);
2826     }
2827     SvPOK_on(sv);
2828     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
2829                           PTR2UV(sv),SvPVX_const(sv)));
2830     if (flags & SV_CONST_RETURN)
2831         return (char *)SvPVX_const(sv);
2832     if (flags & SV_MUTABLE_RETURN)
2833         return SvPVX_mutable(sv);
2834     return SvPVX(sv);
2835 }
2836
2837 /*
2838 =for apidoc sv_copypv
2839
2840 Copies a stringified representation of the source SV into the
2841 destination SV.  Automatically performs any necessary mg_get and
2842 coercion of numeric values into strings.  Guaranteed to preserve
2843 UTF-8 flag even from overloaded objects.  Similar in nature to
2844 sv_2pv[_flags] but operates directly on an SV instead of just the
2845 string.  Mostly uses sv_2pv_flags to do its work, except when that
2846 would lose the UTF-8'ness of the PV.
2847
2848 =cut
2849 */
2850
2851 void
2852 Perl_sv_copypv(pTHX_ SV *dsv, register SV *ssv)
2853 {
2854     STRLEN len;
2855     const char * const s = SvPV_const(ssv,len);
2856     sv_setpvn(dsv,s,len);
2857     if (SvUTF8(ssv))
2858         SvUTF8_on(dsv);
2859     else
2860         SvUTF8_off(dsv);
2861 }
2862
2863 /*
2864 =for apidoc sv_2pvbyte
2865
2866 Return a pointer to the byte-encoded representation of the SV, and set *lp
2867 to its length.  May cause the SV to be downgraded from UTF-8 as a
2868 side-effect.
2869
2870 Usually accessed via the C<SvPVbyte> macro.
2871
2872 =cut
2873 */
2874
2875 char *
2876 Perl_sv_2pvbyte(pTHX_ register SV *sv, STRLEN *lp)
2877 {
2878     sv_utf8_downgrade(sv,0);
2879     return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
2880 }
2881
2882 /*
2883 =for apidoc sv_2pvutf8
2884
2885 Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
2886 to its length.  May cause the SV to be upgraded to UTF-8 as a side-effect.
2887
2888 Usually accessed via the C<SvPVutf8> macro.
2889
2890 =cut
2891 */
2892
2893 char *
2894 Perl_sv_2pvutf8(pTHX_ register SV *sv, STRLEN *lp)
2895 {
2896     sv_utf8_upgrade(sv);
2897     return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
2898 }
2899
2900
2901 /*
2902 =for apidoc sv_2bool
2903
2904 This function is only called on magical items, and is only used by
2905 sv_true() or its macro equivalent.
2906
2907 =cut
2908 */
2909
2910 bool
2911 Perl_sv_2bool(pTHX_ register SV *sv)
2912 {
2913     dVAR;
2914     SvGETMAGIC(sv);
2915
2916     if (!SvOK(sv))
2917         return 0;
2918     if (SvROK(sv)) {
2919         if (SvAMAGIC(sv)) {
2920             SV * const tmpsv = AMG_CALLun(sv,bool_);
2921             if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2922                 return (bool)SvTRUE(tmpsv);
2923         }
2924         return SvRV(sv) != 0;
2925     }
2926     if (SvPOKp(sv)) {
2927         register XPV* const Xpvtmp = (XPV*)SvANY(sv);
2928         if (Xpvtmp &&
2929                 (*sv->sv_u.svu_pv > '0' ||
2930                 Xpvtmp->xpv_cur > 1 ||
2931                 (Xpvtmp->xpv_cur && *sv->sv_u.svu_pv != '0')))
2932             return 1;
2933         else
2934             return 0;
2935     }
2936     else {
2937         if (SvIOKp(sv))
2938             return SvIVX(sv) != 0;
2939         else {
2940             if (SvNOKp(sv))
2941                 return SvNVX(sv) != 0.0;
2942             else {
2943                 if (isGV_with_GP(sv))
2944                     return TRUE;
2945                 else
2946                     return FALSE;
2947             }
2948         }
2949     }
2950 }
2951
2952 /*
2953 =for apidoc sv_utf8_upgrade
2954
2955 Converts the PV of an SV to its UTF-8-encoded form.
2956 Forces the SV to string form if it is not already.
2957 Always sets the SvUTF8 flag to avoid future validity checks even
2958 if all the bytes have hibit clear.
2959
2960 This is not as a general purpose byte encoding to Unicode interface:
2961 use the Encode extension for that.
2962
2963 =for apidoc sv_utf8_upgrade_flags
2964
2965 Converts the PV of an SV to its UTF-8-encoded form.
2966 Forces the SV to string form if it is not already.
2967 Always sets the SvUTF8 flag to avoid future validity checks even
2968 if all the bytes have hibit clear. If C<flags> has C<SV_GMAGIC> bit set,
2969 will C<mg_get> on C<sv> if appropriate, else not. C<sv_utf8_upgrade> and
2970 C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
2971
2972 This is not as a general purpose byte encoding to Unicode interface:
2973 use the Encode extension for that.
2974
2975 =cut
2976 */
2977
2978 STRLEN
2979 Perl_sv_utf8_upgrade_flags(pTHX_ register SV *sv, I32 flags)
2980 {
2981     dVAR;
2982     if (sv == &PL_sv_undef)
2983         return 0;
2984     if (!SvPOK(sv)) {
2985         STRLEN len = 0;
2986         if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
2987             (void) sv_2pv_flags(sv,&len, flags);
2988             if (SvUTF8(sv))
2989                 return len;
2990         } else {
2991             (void) SvPV_force(sv,len);
2992         }
2993     }
2994
2995     if (SvUTF8(sv)) {
2996         return SvCUR(sv);
2997     }
2998
2999     if (SvIsCOW(sv)) {
3000         sv_force_normal_flags(sv, 0);
3001     }
3002
3003     if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING))
3004         sv_recode_to_utf8(sv, PL_encoding);
3005     else { /* Assume Latin-1/EBCDIC */
3006         /* This function could be much more efficient if we
3007          * had a FLAG in SVs to signal if there are any hibit
3008          * chars in the PV.  Given that there isn't such a flag
3009          * make the loop as fast as possible. */
3010         const U8 * const s = (U8 *) SvPVX_const(sv);
3011         const U8 * const e = (U8 *) SvEND(sv);
3012         const U8 *t = s;
3013         
3014         while (t < e) {
3015             const U8 ch = *t++;
3016             /* Check for hi bit */
3017             if (!NATIVE_IS_INVARIANT(ch)) {
3018                 STRLEN len = SvCUR(sv) + 1; /* Plus the \0 */
3019                 U8 * const recoded = bytes_to_utf8((U8*)s, &len);
3020
3021                 SvPV_free(sv); /* No longer using what was there before. */
3022                 SvPV_set(sv, (char*)recoded);
3023                 SvCUR_set(sv, len - 1);
3024                 SvLEN_set(sv, len); /* No longer know the real size. */
3025                 break;
3026             }
3027         }
3028         /* Mark as UTF-8 even if no hibit - saves scanning loop */
3029         SvUTF8_on(sv);
3030     }
3031     return SvCUR(sv);
3032 }
3033
3034 /*
3035 =for apidoc sv_utf8_downgrade
3036
3037 Attempts to convert the PV of an SV from characters to bytes.
3038 If the PV contains a character beyond byte, this conversion will fail;
3039 in this case, either returns false or, if C<fail_ok> is not
3040 true, croaks.
3041
3042 This is not as a general purpose Unicode to byte encoding interface:
3043 use the Encode extension for that.
3044
3045 =cut
3046 */
3047
3048 bool
3049 Perl_sv_utf8_downgrade(pTHX_ register SV* sv, bool fail_ok)
3050 {
3051     dVAR;
3052     if (SvPOKp(sv) && SvUTF8(sv)) {
3053         if (SvCUR(sv)) {
3054             U8 *s;
3055             STRLEN len;
3056
3057             if (SvIsCOW(sv)) {
3058                 sv_force_normal_flags(sv, 0);
3059             }
3060             s = (U8 *) SvPV(sv, len);
3061             if (!utf8_to_bytes(s, &len)) {
3062                 if (fail_ok)
3063                     return FALSE;
3064                 else {
3065                     if (PL_op)
3066                         Perl_croak(aTHX_ "Wide character in %s",
3067                                    OP_DESC(PL_op));
3068                     else
3069                         Perl_croak(aTHX_ "Wide character");
3070                 }
3071             }
3072             SvCUR_set(sv, len);
3073         }
3074     }
3075     SvUTF8_off(sv);
3076     return TRUE;
3077 }
3078
3079 /*
3080 =for apidoc sv_utf8_encode
3081
3082 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3083 flag off so that it looks like octets again.
3084
3085 =cut
3086 */
3087
3088 void
3089 Perl_sv_utf8_encode(pTHX_ register SV *sv)
3090 {
3091     (void) sv_utf8_upgrade(sv);
3092     if (SvIsCOW(sv)) {
3093         sv_force_normal_flags(sv, 0);
3094     }
3095     if (SvREADONLY(sv)) {
3096         Perl_croak(aTHX_ PL_no_modify);
3097     }
3098     SvUTF8_off(sv);
3099 }
3100
3101 /*
3102 =for apidoc sv_utf8_decode
3103
3104 If the PV of the SV is an octet sequence in UTF-8
3105 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3106 so that it looks like a character. If the PV contains only single-byte
3107 characters, the C<SvUTF8> flag stays being off.
3108 Scans PV for validity and returns false if the PV is invalid UTF-8.
3109
3110 =cut
3111 */
3112
3113 bool
3114 Perl_sv_utf8_decode(pTHX_ register SV *sv)
3115 {
3116     if (SvPOKp(sv)) {
3117         const U8 *c;
3118         const U8 *e;
3119
3120         /* The octets may have got themselves encoded - get them back as
3121          * bytes
3122          */
3123         if (!sv_utf8_downgrade(sv, TRUE))
3124             return FALSE;
3125
3126         /* it is actually just a matter of turning the utf8 flag on, but
3127          * we want to make sure everything inside is valid utf8 first.
3128          */
3129         c = (const U8 *) SvPVX_const(sv);
3130         if (!is_utf8_string(c, SvCUR(sv)+1))
3131             return FALSE;
3132         e = (const U8 *) SvEND(sv);
3133         while (c < e) {
3134             const U8 ch = *c++;
3135             if (!UTF8_IS_INVARIANT(ch)) {
3136                 SvUTF8_on(sv);
3137                 break;
3138             }
3139         }
3140     }
3141     return TRUE;
3142 }
3143
3144 /*
3145 =for apidoc sv_setsv
3146
3147 Copies the contents of the source SV C<ssv> into the destination SV
3148 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3149 function if the source SV needs to be reused. Does not handle 'set' magic.
3150 Loosely speaking, it performs a copy-by-value, obliterating any previous
3151 content of the destination.
3152
3153 You probably want to use one of the assortment of wrappers, such as
3154 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3155 C<SvSetMagicSV_nosteal>.
3156
3157 =for apidoc sv_setsv_flags
3158
3159 Copies the contents of the source SV C<ssv> into the destination SV
3160 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3161 function if the source SV needs to be reused. Does not handle 'set' magic.
3162 Loosely speaking, it performs a copy-by-value, obliterating any previous
3163 content of the destination.
3164 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3165 C<ssv> if appropriate, else not. If the C<flags> parameter has the
3166 C<NOSTEAL> bit set then the buffers of temps will not be stolen. <sv_setsv>
3167 and C<sv_setsv_nomg> are implemented in terms of this function.
3168
3169 You probably want to use one of the assortment of wrappers, such as
3170 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3171 C<SvSetMagicSV_nosteal>.
3172
3173 This is the primary function for copying scalars, and most other
3174 copy-ish functions and macros use this underneath.
3175
3176 =cut
3177 */
3178
3179 static void
3180 S_glob_assign_glob(pTHX_ SV *dstr, SV *sstr, const int dtype)
3181 {
3182     if (dtype != SVt_PVGV) {
3183         const char * const name = GvNAME(sstr);
3184         const STRLEN len = GvNAMELEN(sstr);
3185         /* don't upgrade SVt_PVLV: it can hold a glob */
3186         if (dtype != SVt_PVLV) {
3187             if (dtype >= SVt_PV) {
3188                 SvPV_free(dstr);
3189                 SvPV_set(dstr, 0);
3190                 SvLEN_set(dstr, 0);
3191                 SvCUR_set(dstr, 0);
3192             }
3193             sv_upgrade(dstr, SVt_PVGV);
3194         }
3195         GvSTASH(dstr) = GvSTASH(sstr);
3196         if (GvSTASH(dstr))
3197             Perl_sv_add_backref(aTHX_ (SV*)GvSTASH(dstr), dstr);
3198         GvNAME(dstr) = savepvn(name, len);
3199         GvNAMELEN(dstr) = len;
3200         SvFAKE_on(dstr);        /* can coerce to non-glob */
3201     }
3202
3203 #ifdef GV_UNIQUE_CHECK
3204     if (GvUNIQUE((GV*)dstr)) {
3205         Perl_croak(aTHX_ PL_no_modify);
3206     }
3207 #endif
3208
3209     gp_free((GV*)dstr);
3210     SvSCREAM_off(dstr);
3211     (void)SvOK_off(dstr);
3212     GvINTRO_off(dstr);          /* one-shot flag */
3213     SvSCREAM_on(dstr);
3214     GvGP(dstr) = gp_ref(GvGP(sstr));
3215     if (SvTAINTED(sstr))
3216         SvTAINT(dstr);
3217     if (GvIMPORTED(dstr) != GVf_IMPORTED
3218         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3219         {
3220             GvIMPORTED_on(dstr);
3221         }
3222     GvMULTI_on(dstr);
3223     return;
3224 }
3225
3226 static void
3227 S_glob_assign_ref(pTHX_ SV *dstr, SV *sstr) {
3228     SV * const sref = SvREFCNT_inc(SvRV(sstr));
3229     SV *dref = NULL;
3230     const int intro = GvINTRO(dstr);
3231     SV **location;
3232     U8 import_flag = 0;
3233     const U32 stype = SvTYPE(sref);
3234
3235
3236 #ifdef GV_UNIQUE_CHECK
3237     if (GvUNIQUE((GV*)dstr)) {
3238         Perl_croak(aTHX_ PL_no_modify);
3239     }
3240 #endif
3241
3242     if (intro) {
3243         GvINTRO_off(dstr);      /* one-shot flag */
3244         GvLINE(dstr) = CopLINE(PL_curcop);
3245         GvEGV(dstr) = (GV*)dstr;
3246     }
3247     GvMULTI_on(dstr);
3248     switch (stype) {
3249     case SVt_PVCV:
3250         location = (SV **) &GvCV(dstr);
3251         import_flag = GVf_IMPORTED_CV;
3252         goto common;
3253     case SVt_PVHV:
3254         location = (SV **) &GvHV(dstr);
3255         import_flag = GVf_IMPORTED_HV;
3256         goto common;
3257     case SVt_PVAV:
3258         location = (SV **) &GvAV(dstr);
3259         import_flag = GVf_IMPORTED_AV;
3260         goto common;
3261     case SVt_PVIO:
3262         location = (SV **) &GvIOp(dstr);
3263         goto common;
3264     case SVt_PVFM:
3265         location = (SV **) &GvFORM(dstr);
3266     default:
3267         location = &GvSV(dstr);
3268         import_flag = GVf_IMPORTED_SV;
3269     common:
3270         if (intro) {
3271             if (stype == SVt_PVCV) {
3272                 if (GvCVGEN(dstr) && GvCV(dstr) != (CV*)sref) {
3273                     SvREFCNT_dec(GvCV(dstr));
3274                     GvCV(dstr) = NULL;
3275                     GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3276                     PL_sub_generation++;
3277                 }
3278             }
3279             SAVEGENERICSV(*location);
3280         }
3281         else
3282             dref = *location;
3283         if (stype == SVt_PVCV && *location != sref) {
3284             CV* const cv = (CV*)*location;
3285             if (cv) {
3286                 if (!GvCVGEN((GV*)dstr) &&
3287                     (CvROOT(cv) || CvXSUB(cv)))
3288                     {
3289                         /* Redefining a sub - warning is mandatory if
3290                            it was a const and its value changed. */
3291                         if (CvCONST(cv) && CvCONST((CV*)sref)
3292                             && cv_const_sv(cv) == cv_const_sv((CV*)sref)) {
3293                             /*EMPTY*/
3294                             /* They are 2 constant subroutines generated from
3295                                the same constant. This probably means that
3296                                they are really the "same" proxy subroutine
3297                                instantiated in 2 places. Most likely this is
3298                                when a constant is exported twice.  Don't warn.
3299                             */
3300                         }
3301                         else if (ckWARN(WARN_REDEFINE)
3302                                  || (CvCONST(cv)
3303                                      && (!CvCONST((CV*)sref)
3304                                          || sv_cmp(cv_const_sv(cv),
3305                                                    cv_const_sv((CV*)sref))))) {
3306                             Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
3307                                         CvCONST(cv)
3308                                         ? "Constant subroutine %s::%s redefined"
3309                                         : "Subroutine %s::%s redefined",
3310                                         HvNAME_get(GvSTASH((GV*)dstr)),
3311                                         GvENAME((GV*)dstr));
3312                         }
3313                     }
3314                 if (!intro)
3315                     cv_ckproto(cv, (GV*)dstr,
3316                                SvPOK(sref) ? SvPVX_const(sref) : NULL);
3317             }
3318             GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3319             GvASSUMECV_on(dstr);
3320             PL_sub_generation++;
3321         }
3322         *location = sref;
3323         if (import_flag && !(GvFLAGS(dstr) & import_flag)
3324             && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
3325             GvFLAGS(dstr) |= import_flag;
3326         }
3327         break;
3328     }
3329     if (dref)
3330         SvREFCNT_dec(dref);
3331     if (SvTAINTED(sstr))
3332         SvTAINT(dstr);
3333     return;
3334 }
3335
3336 void
3337 Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV *sstr, I32 flags)
3338 {
3339     dVAR;
3340     register U32 sflags;
3341     register int dtype;
3342     register int stype;
3343
3344     if (sstr == dstr)
3345         return;
3346     SV_CHECK_THINKFIRST_COW_DROP(dstr);
3347     if (!sstr)
3348         sstr = &PL_sv_undef;
3349     stype = SvTYPE(sstr);
3350     dtype = SvTYPE(dstr);
3351
3352     SvAMAGIC_off(dstr);
3353     if ( SvVOK(dstr) )
3354     {
3355         /* need to nuke the magic */
3356         mg_free(dstr);
3357         SvRMAGICAL_off(dstr);
3358     }
3359
3360     /* There's a lot of redundancy below but we're going for speed here */
3361
3362     switch (stype) {
3363     case SVt_NULL:
3364       undef_sstr:
3365         if (dtype != SVt_PVGV) {
3366             (void)SvOK_off(dstr);
3367             return;
3368         }
3369         break;
3370     case SVt_IV:
3371         if (SvIOK(sstr)) {
3372             switch (dtype) {
3373             case SVt_NULL:
3374                 sv_upgrade(dstr, SVt_IV);
3375                 break;
3376             case SVt_NV:
3377             case SVt_RV:
3378             case SVt_PV:
3379                 sv_upgrade(dstr, SVt_PVIV);
3380                 break;
3381             }
3382             (void)SvIOK_only(dstr);
3383             SvIV_set(dstr,  SvIVX(sstr));
3384             if (SvIsUV(sstr))
3385                 SvIsUV_on(dstr);
3386             /* SvTAINTED can only be true if the SV has taint magic, which in
3387                turn means that the SV type is PVMG (or greater). This is the
3388                case statement for SVt_IV, so this cannot be true (whatever gcov
3389                may say).  */
3390             assert(!SvTAINTED(sstr));
3391             return;
3392         }
3393         goto undef_sstr;
3394
3395     case SVt_NV:
3396         if (SvNOK(sstr)) {
3397             switch (dtype) {
3398             case SVt_NULL:
3399             case SVt_IV:
3400                 sv_upgrade(dstr, SVt_NV);
3401                 break;
3402             case SVt_RV:
3403             case SVt_PV:
3404             case SVt_PVIV:
3405                 sv_upgrade(dstr, SVt_PVNV);
3406                 break;
3407             }
3408             SvNV_set(dstr, SvNVX(sstr));
3409             (void)SvNOK_only(dstr);
3410             /* SvTAINTED can only be true if the SV has taint magic, which in
3411                turn means that the SV type is PVMG (or greater). This is the
3412                case statement for SVt_NV, so this cannot be true (whatever gcov
3413                may say).  */
3414             assert(!SvTAINTED(sstr));
3415             return;
3416         }
3417         goto undef_sstr;
3418
3419     case SVt_RV:
3420         if (dtype < SVt_RV)
3421             sv_upgrade(dstr, SVt_RV);
3422         break;
3423     case SVt_PVFM:
3424 #ifdef PERL_OLD_COPY_ON_WRITE
3425         if ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS) {
3426             if (dtype < SVt_PVIV)
3427                 sv_upgrade(dstr, SVt_PVIV);
3428             break;
3429         }
3430         /* Fall through */
3431 #endif
3432     case SVt_PV:
3433         if (dtype < SVt_PV)
3434             sv_upgrade(dstr, SVt_PV);
3435         break;
3436     case SVt_PVIV:
3437         if (dtype < SVt_PVIV)
3438             sv_upgrade(dstr, SVt_PVIV);
3439         break;
3440     case SVt_PVNV:
3441         if (dtype < SVt_PVNV)
3442             sv_upgrade(dstr, SVt_PVNV);
3443         break;
3444     case SVt_PVAV:
3445     case SVt_PVHV:
3446     case SVt_PVCV:
3447     case SVt_PVIO:
3448         {
3449         const char * const type = sv_reftype(sstr,0);
3450         if (PL_op)
3451             Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_NAME(PL_op));
3452         else
3453             Perl_croak(aTHX_ "Bizarre copy of %s", type);
3454         }
3455         break;
3456
3457     case SVt_PVGV:
3458         if (dtype <= SVt_PVGV) {
3459             S_glob_assign_glob(aTHX_ dstr, sstr, dtype);
3460             return;
3461         }
3462         /*FALLTHROUGH*/
3463
3464     default:
3465         if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
3466             mg_get(sstr);
3467             if ((int)SvTYPE(sstr) != stype) {
3468                 stype = SvTYPE(sstr);
3469                 if (stype == SVt_PVGV && dtype <= SVt_PVGV) {
3470                     S_glob_assign_glob(aTHX_ dstr, sstr, dtype);
3471                     return;
3472                 }
3473             }
3474         }
3475         if (stype == SVt_PVLV)
3476             SvUPGRADE(dstr, SVt_PVNV);
3477         else
3478             SvUPGRADE(dstr, (U32)stype);
3479     }
3480
3481     /* dstr may have been upgraded.  */
3482     dtype = SvTYPE(dstr);
3483     sflags = SvFLAGS(sstr);
3484
3485     if (sflags & SVf_ROK) {
3486         if (dtype == SVt_PVGV &&
3487             SvROK(sstr) && SvTYPE(SvRV(sstr)) == SVt_PVGV) {
3488             sstr = SvRV(sstr);
3489             if (sstr == dstr) {
3490                 if (GvIMPORTED(dstr) != GVf_IMPORTED
3491                     && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3492                 {
3493                     GvIMPORTED_on(dstr);
3494                 }
3495                 GvMULTI_on(dstr);
3496                 return;
3497             }
3498             S_glob_assign_glob(aTHX_ dstr, sstr, dtype);
3499             return;
3500         }
3501
3502         if (dtype >= SVt_PV) {
3503             if (dtype == SVt_PVGV) {
3504                 S_glob_assign_ref(aTHX_ dstr, sstr);
3505                 return;
3506             }
3507             if (SvPVX_const(dstr)) {
3508                 SvPV_free(dstr);
3509                 SvLEN_set(dstr, 0);
3510                 SvCUR_set(dstr, 0);
3511             }
3512         }
3513         (void)SvOK_off(dstr);
3514         SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
3515         SvFLAGS(dstr) |= sflags & (SVf_ROK|SVf_AMAGIC);
3516         assert(!(sflags & SVp_NOK));
3517         assert(!(sflags & SVp_IOK));
3518         assert(!(sflags & SVf_NOK));
3519         assert(!(sflags & SVf_IOK));
3520     }
3521     else if (dtype == SVt_PVGV) {
3522         if (!(sflags & SVf_OK)) {
3523             if (ckWARN(WARN_MISC))
3524                 Perl_warner(aTHX_ packWARN(WARN_MISC),
3525                             "Undefined value assigned to typeglob");
3526         }
3527         else {
3528             GV *gv = gv_fetchsv(sstr, GV_ADD, SVt_PVGV);
3529             if (dstr != (SV*)gv) {
3530                 if (GvGP(dstr))
3531                     gp_free((GV*)dstr);
3532                 GvGP(dstr) = gp_ref(GvGP(gv));
3533             }
3534         }
3535     }
3536     else if (sflags & SVp_POK) {
3537         bool isSwipe = 0;
3538
3539         /*
3540          * Check to see if we can just swipe the string.  If so, it's a
3541          * possible small lose on short strings, but a big win on long ones.
3542          * It might even be a win on short strings if SvPVX_const(dstr)
3543          * has to be allocated and SvPVX_const(sstr) has to be freed.
3544          */
3545
3546         /* Whichever path we take through the next code, we want this true,
3547            and doing it now facilitates the COW check.  */
3548         (void)SvPOK_only(dstr);
3549
3550         if (
3551             /* We're not already COW  */
3552             ((sflags & (SVf_FAKE | SVf_READONLY)) != (SVf_FAKE | SVf_READONLY)
3553 #ifndef PERL_OLD_COPY_ON_WRITE
3554              /* or we are, but dstr isn't a suitable target.  */
3555              || (SvFLAGS(dstr) & CAN_COW_MASK) != CAN_COW_FLAGS
3556 #endif
3557              )
3558             &&
3559             !(isSwipe =
3560                  (sflags & SVs_TEMP) &&   /* slated for free anyway? */
3561                  !(sflags & SVf_OOK) &&   /* and not involved in OOK hack? */
3562                  (!(flags & SV_NOSTEAL)) &&
3563                                         /* and we're allowed to steal temps */
3564                  SvREFCNT(sstr) == 1 &&   /* and no other references to it? */
3565                  SvLEN(sstr)    &&        /* and really is a string */
3566                                 /* and won't be needed again, potentially */
3567               !(PL_op && PL_op->op_type == OP_AASSIGN))
3568 #ifdef PERL_OLD_COPY_ON_WRITE
3569             && !((sflags & CAN_COW_MASK) == CAN_COW_FLAGS
3570                  && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
3571                  && SvTYPE(sstr) >= SVt_PVIV)
3572 #endif
3573             ) {
3574             /* Failed the swipe test, and it's not a shared hash key either.
3575                Have to copy the string.  */
3576             STRLEN len = SvCUR(sstr);
3577             SvGROW(dstr, len + 1);      /* inlined from sv_setpvn */
3578             Move(SvPVX_const(sstr),SvPVX(dstr),len,char);
3579             SvCUR_set(dstr, len);
3580             *SvEND(dstr) = '\0';
3581         } else {
3582             /* If PERL_OLD_COPY_ON_WRITE is not defined, then isSwipe will always
3583                be true in here.  */
3584             /* Either it's a shared hash key, or it's suitable for
3585                copy-on-write or we can swipe the string.  */
3586             if (DEBUG_C_TEST) {
3587                 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
3588                 sv_dump(sstr);
3589                 sv_dump(dstr);
3590             }
3591 #ifdef PERL_OLD_COPY_ON_WRITE
3592             if (!isSwipe) {
3593                 /* I believe I should acquire a global SV mutex if
3594                    it's a COW sv (not a shared hash key) to stop
3595                    it going un copy-on-write.
3596                    If the source SV has gone un copy on write between up there
3597                    and down here, then (assert() that) it is of the correct
3598                    form to make it copy on write again */
3599                 if ((sflags & (SVf_FAKE | SVf_READONLY))
3600                     != (SVf_FAKE | SVf_READONLY)) {
3601                     SvREADONLY_on(sstr);
3602                     SvFAKE_on(sstr);
3603                     /* Make the source SV into a loop of 1.
3604                        (about to become 2) */
3605                     SV_COW_NEXT_SV_SET(sstr, sstr);
3606                 }
3607             }
3608 #endif
3609             /* Initial code is common.  */
3610             if (SvPVX_const(dstr)) {    /* we know that dtype >= SVt_PV */
3611                 SvPV_free(dstr);
3612             }
3613
3614             if (!isSwipe) {
3615                 /* making another shared SV.  */
3616                 STRLEN cur = SvCUR(sstr);
3617                 STRLEN len = SvLEN(sstr);
3618 #ifdef PERL_OLD_COPY_ON_WRITE
3619                 if (len) {
3620                     assert (SvTYPE(dstr) >= SVt_PVIV);
3621                     /* SvIsCOW_normal */
3622                     /* splice us in between source and next-after-source.  */
3623                     SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
3624                     SV_COW_NEXT_SV_SET(sstr, dstr);
3625                     SvPV_set(dstr, SvPVX_mutable(sstr));
3626                 } else
3627 #endif
3628                 {
3629                     /* SvIsCOW_shared_hash */
3630                     DEBUG_C(PerlIO_printf(Perl_debug_log,
3631                                           "Copy on write: Sharing hash\n"));
3632
3633                     assert (SvTYPE(dstr) >= SVt_PV);
3634                     SvPV_set(dstr,
3635                              HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
3636                 }
3637                 SvLEN_set(dstr, len);
3638                 SvCUR_set(dstr, cur);
3639                 SvREADONLY_on(dstr);
3640                 SvFAKE_on(dstr);
3641                 /* Relesase a global SV mutex.  */
3642             }
3643             else
3644                 {       /* Passes the swipe test.  */
3645                 SvPV_set(dstr, SvPVX_mutable(sstr));
3646                 SvLEN_set(dstr, SvLEN(sstr));
3647                 SvCUR_set(dstr, SvCUR(sstr));
3648
3649                 SvTEMP_off(dstr);
3650                 (void)SvOK_off(sstr);   /* NOTE: nukes most SvFLAGS on sstr */
3651                 SvPV_set(sstr, NULL);
3652                 SvLEN_set(sstr, 0);
3653                 SvCUR_set(sstr, 0);
3654                 SvTEMP_off(sstr);
3655             }
3656         }
3657         if (sflags & SVp_NOK) {
3658             SvNV_set(dstr, SvNVX(sstr));
3659         }
3660         if (sflags & SVp_IOK) {
3661             SvRELEASE_IVX(dstr);
3662             SvIV_set(dstr, SvIVX(sstr));
3663             /* Must do this otherwise some other overloaded use of 0x80000000
3664                gets confused. I guess SVpbm_VALID */
3665             if (sflags & SVf_IVisUV)
3666                 SvIsUV_on(dstr);
3667         }
3668         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
3669         {
3670             const MAGIC * const smg = SvVOK(sstr);
3671             if (smg) {
3672                 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
3673                          smg->mg_ptr, smg->mg_len);
3674                 SvRMAGICAL_on(dstr);
3675             }
3676         }
3677     }
3678     else if (sflags & (SVp_IOK|SVp_NOK)) {
3679         (void)SvOK_off(dstr);
3680         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
3681         if (sflags & SVp_IOK) {
3682             /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
3683             SvIV_set(dstr, SvIVX(sstr));
3684         }
3685         if (sflags & SVp_NOK) {
3686             SvNV_set(dstr, SvNVX(sstr));
3687         }
3688     }
3689     else {
3690         if (isGV_with_GP(sstr)) {
3691             /* This stringification rule for globs is spread in 3 places.
3692                This feels bad. FIXME.  */
3693             const U32 wasfake = sflags & SVf_FAKE;
3694
3695             /* FAKE globs can get coerced, so need to turn this off
3696                temporarily if it is on.  */
3697             SvFAKE_off(sstr);
3698             gv_efullname3(dstr, (GV *)sstr, "*");
3699             SvFLAGS(sstr) |= wasfake;
3700         }
3701         else
3702             (void)SvOK_off(dstr);
3703     }
3704     if (SvTAINTED(sstr))
3705         SvTAINT(dstr);
3706 }
3707
3708 /*
3709 =for apidoc sv_setsv_mg
3710
3711 Like C<sv_setsv>, but also handles 'set' magic.
3712
3713 =cut
3714 */
3715
3716 void
3717 Perl_sv_setsv_mg(pTHX_ SV *dstr, register SV *sstr)
3718 {
3719     sv_setsv(dstr,sstr);
3720     SvSETMAGIC(dstr);
3721 }
3722
3723 #ifdef PERL_OLD_COPY_ON_WRITE
3724 SV *
3725 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
3726 {
3727     STRLEN cur = SvCUR(sstr);
3728     STRLEN len = SvLEN(sstr);
3729     register char *new_pv;
3730
3731     if (DEBUG_C_TEST) {
3732         PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
3733                       sstr, dstr);
3734         sv_dump(sstr);
3735         if (dstr)
3736                     sv_dump(dstr);
3737     }
3738
3739     if (dstr) {
3740         if (SvTHINKFIRST(dstr))
3741             sv_force_normal_flags(dstr, SV_COW_DROP_PV);
3742         else if (SvPVX_const(dstr))
3743             Safefree(SvPVX_const(dstr));
3744     }
3745     else
3746         new_SV(dstr);
3747     SvUPGRADE(dstr, SVt_PVIV);
3748
3749     assert (SvPOK(sstr));
3750     assert (SvPOKp(sstr));
3751     assert (!SvIOK(sstr));
3752     assert (!SvIOKp(sstr));
3753     assert (!SvNOK(sstr));
3754     assert (!SvNOKp(sstr));
3755
3756     if (SvIsCOW(sstr)) {
3757
3758         if (SvLEN(sstr) == 0) {
3759             /* source is a COW shared hash key.  */
3760             DEBUG_C(PerlIO_printf(Perl_debug_log,
3761                                   "Fast copy on write: Sharing hash\n"));
3762             new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
3763             goto common_exit;
3764         }
3765         SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
3766     } else {
3767         assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
3768         SvUPGRADE(sstr, SVt_PVIV);
3769         SvREADONLY_on(sstr);
3770         SvFAKE_on(sstr);
3771         DEBUG_C(PerlIO_printf(Perl_debug_log,
3772                               "Fast copy on write: Converting sstr to COW\n"));
3773         SV_COW_NEXT_SV_SET(dstr, sstr);
3774     }
3775     SV_COW_NEXT_SV_SET(sstr, dstr);
3776     new_pv = SvPVX_mutable(sstr);
3777
3778   common_exit:
3779     SvPV_set(dstr, new_pv);
3780     SvFLAGS(dstr) = (SVt_PVIV|SVf_POK|SVp_POK|SVf_FAKE|SVf_READONLY);
3781     if (SvUTF8(sstr))
3782         SvUTF8_on(dstr);
3783     SvLEN_set(dstr, len);
3784     SvCUR_set(dstr, cur);
3785     if (DEBUG_C_TEST) {
3786         sv_dump(dstr);
3787     }
3788     return dstr;
3789 }
3790 #endif
3791
3792 /*
3793 =for apidoc sv_setpvn
3794
3795 Copies a string into an SV.  The C<len> parameter indicates the number of
3796 bytes to be copied.  If the C<ptr> argument is NULL the SV will become
3797 undefined.  Does not handle 'set' magic.  See C<sv_setpvn_mg>.
3798
3799 =cut
3800 */
3801
3802 void
3803 Perl_sv_setpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3804 {
3805     dVAR;
3806     register char *dptr;
3807
3808     SV_CHECK_THINKFIRST_COW_DROP(sv);
3809     if (!ptr) {
3810         (void)SvOK_off(sv);
3811         return;
3812     }
3813     else {
3814         /* len is STRLEN which is unsigned, need to copy to signed */
3815         const IV iv = len;
3816         if (iv < 0)
3817             Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen");
3818     }
3819     SvUPGRADE(sv, SVt_PV);
3820
3821     dptr = SvGROW(sv, len + 1);
3822     Move(ptr,dptr,len,char);
3823     dptr[len] = '\0';
3824     SvCUR_set(sv, len);
3825     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
3826     SvTAINT(sv);
3827 }
3828
3829 /*
3830 =for apidoc sv_setpvn_mg
3831
3832 Like C<sv_setpvn>, but also handles 'set' magic.
3833
3834 =cut
3835 */
3836
3837 void
3838 Perl_sv_setpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3839 {
3840     sv_setpvn(sv,ptr,len);
3841     SvSETMAGIC(sv);
3842 }
3843
3844 /*
3845 =for apidoc sv_setpv
3846
3847 Copies a string into an SV.  The string must be null-terminated.  Does not
3848 handle 'set' magic.  See C<sv_setpv_mg>.
3849
3850 =cut
3851 */
3852
3853 void
3854 Perl_sv_setpv(pTHX_ register SV *sv, register const char *ptr)
3855 {
3856     dVAR;
3857     register STRLEN len;
3858
3859     SV_CHECK_THINKFIRST_COW_DROP(sv);
3860     if (!ptr) {
3861         (void)SvOK_off(sv);
3862         return;
3863     }
3864     len = strlen(ptr);
3865     SvUPGRADE(sv, SVt_PV);
3866
3867     SvGROW(sv, len + 1);
3868     Move(ptr,SvPVX(sv),len+1,char);
3869     SvCUR_set(sv, len);
3870     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
3871     SvTAINT(sv);
3872 }
3873
3874 /*
3875 =for apidoc sv_setpv_mg
3876
3877 Like C<sv_setpv>, but also handles 'set' magic.
3878
3879 =cut
3880 */
3881
3882 void
3883 Perl_sv_setpv_mg(pTHX_ register SV *sv, register const char *ptr)
3884 {
3885     sv_setpv(sv,ptr);
3886     SvSETMAGIC(sv);
3887 }
3888
3889 /*
3890 =for apidoc sv_usepvn
3891
3892 Tells an SV to use C<ptr> to find its string value.  Normally the string is
3893 stored inside the SV but sv_usepvn allows the SV to use an outside string.
3894 The C<ptr> should point to memory that was allocated by C<malloc>.  The
3895 string length, C<len>, must be supplied.  This function will realloc the
3896 memory pointed to by C<ptr>, so that pointer should not be freed or used by
3897 the programmer after giving it to sv_usepvn.  Does not handle 'set' magic.
3898 See C<sv_usepvn_mg>.
3899
3900 =cut
3901 */
3902
3903 void
3904 Perl_sv_usepvn(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
3905 {
3906     dVAR;
3907     STRLEN allocate;
3908     SV_CHECK_THINKFIRST_COW_DROP(sv);
3909     SvUPGRADE(sv, SVt_PV);
3910     if (!ptr) {
3911         (void)SvOK_off(sv);
3912         return;
3913     }
3914     if (SvPVX_const(sv))
3915         SvPV_free(sv);
3916
3917     allocate = PERL_STRLEN_ROUNDUP(len + 1);
3918     ptr = saferealloc (ptr, allocate);
3919     SvPV_set(sv, ptr);
3920     SvCUR_set(sv, len);
3921     SvLEN_set(sv, allocate);
3922     *SvEND(sv) = '\0';
3923     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
3924     SvTAINT(sv);
3925 }
3926
3927 /*
3928 =for apidoc sv_usepvn_mg
3929
3930 Like C<sv_usepvn>, but also handles 'set' magic.
3931
3932 =cut
3933 */
3934
3935 void
3936 Perl_sv_usepvn_mg(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
3937 {
3938     sv_usepvn(sv,ptr,len);
3939     SvSETMAGIC(sv);
3940 }
3941
3942 #ifdef PERL_OLD_COPY_ON_WRITE
3943 /* Need to do this *after* making the SV normal, as we need the buffer
3944    pointer to remain valid until after we've copied it.  If we let go too early,
3945    another thread could invalidate it by unsharing last of the same hash key
3946    (which it can do by means other than releasing copy-on-write Svs)
3947    or by changing the other copy-on-write SVs in the loop.  */
3948 STATIC void
3949 S_sv_release_COW(pTHX_ register SV *sv, const char *pvx, STRLEN len, SV *after)
3950 {
3951     if (len) { /* this SV was SvIsCOW_normal(sv) */
3952          /* we need to find the SV pointing to us.  */
3953         SV *current = SV_COW_NEXT_SV(after);
3954
3955         if (current == sv) {
3956             /* The SV we point to points back to us (there were only two of us
3957                in the loop.)
3958                Hence other SV is no longer copy on write either.  */
3959             SvFAKE_off(after);
3960             SvREADONLY_off(after);
3961         } else {
3962             /* We need to follow the pointers around the loop.  */
3963             SV *next;
3964             while ((next = SV_COW_NEXT_SV(current)) != sv) {
3965                 assert (next);
3966                 current = next;
3967                  /* don't loop forever if the structure is bust, and we have
3968                     a pointer into a closed loop.  */
3969                 assert (current != after);
3970                 assert (SvPVX_const(current) == pvx);
3971             }
3972             /* Make the SV before us point to the SV after us.  */
3973             SV_COW_NEXT_SV_SET(current, after);
3974         }
3975     } else {
3976         unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
3977     }
3978 }
3979
3980 int
3981 Perl_sv_release_IVX(pTHX_ register SV *sv)
3982 {
3983     if (SvIsCOW(sv))
3984         sv_force_normal_flags(sv, 0);
3985     SvOOK_off(sv);
3986     return 0;
3987 }
3988 #endif
3989 /*
3990 =for apidoc sv_force_normal_flags
3991
3992 Undo various types of fakery on an SV: if the PV is a shared string, make
3993 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
3994 an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
3995 we do the copy, and is also used locally. If C<SV_COW_DROP_PV> is set
3996 then a copy-on-write scalar drops its PV buffer (if any) and becomes
3997 SvPOK_off rather than making a copy. (Used where this scalar is about to be
3998 set to some other value.) In addition, the C<flags> parameter gets passed to
3999 C<sv_unref_flags()> when unrefing. C<sv_force_normal> calls this function
4000 with flags set to 0.
4001
4002 =cut
4003 */
4004
4005 void
4006 Perl_sv_force_normal_flags(pTHX_ register SV *sv, U32 flags)
4007 {
4008     dVAR;
4009 #ifdef PERL_OLD_COPY_ON_WRITE
4010     if (SvREADONLY(sv)) {
4011         /* At this point I believe I should acquire a global SV mutex.  */
4012         if (SvFAKE(sv)) {
4013             const char * const pvx = SvPVX_const(sv);
4014             const STRLEN len = SvLEN(sv);
4015             const STRLEN cur = SvCUR(sv);
4016             SV * const next = SV_COW_NEXT_SV(sv);   /* next COW sv in the loop. */
4017             if (DEBUG_C_TEST) {
4018                 PerlIO_printf(Perl_debug_log,
4019                               "Copy on write: Force normal %ld\n",
4020                               (long) flags);
4021                 sv_dump(sv);
4022             }
4023             SvFAKE_off(sv);
4024             SvREADONLY_off(sv);
4025             /* This SV doesn't own the buffer, so need to Newx() a new one:  */
4026             SvPV_set(sv, NULL);
4027             SvLEN_set(sv, 0);
4028             if (flags & SV_COW_DROP_PV) {
4029                 /* OK, so we don't need to copy our buffer.  */
4030                 SvPOK_off(sv);
4031             } else {
4032                 SvGROW(sv, cur + 1);
4033                 Move(pvx,SvPVX(sv),cur,char);
4034                 SvCUR_set(sv, cur);
4035                 *SvEND(sv) = '\0';
4036             }
4037             sv_release_COW(sv, pvx, len, next);
4038             if (DEBUG_C_TEST) {
4039                 sv_dump(sv);
4040             }
4041         }
4042         else if (IN_PERL_RUNTIME)
4043             Perl_croak(aTHX_ PL_no_modify);
4044         /* At this point I believe that I can drop the global SV mutex.  */
4045     }
4046 #else
4047     if (SvREADONLY(sv)) {
4048         if (SvFAKE(sv)) {
4049             const char * const pvx = SvPVX_const(sv);
4050             const STRLEN len = SvCUR(sv);
4051             SvFAKE_off(sv);
4052             SvREADONLY_off(sv);
4053             SvPV_set(sv, NULL);
4054             SvLEN_set(sv, 0);
4055             SvGROW(sv, len + 1);
4056             Move(pvx,SvPVX(sv),len,char);
4057             *SvEND(sv) = '\0';
4058             unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
4059         }
4060         else if (IN_PERL_RUNTIME)
4061             Perl_croak(aTHX_ PL_no_modify);
4062     }
4063 #endif
4064     if (SvROK(sv))
4065         sv_unref_flags(sv, flags);
4066     else if (SvFAKE(sv) && SvTYPE(sv) == SVt_PVGV)
4067         sv_unglob(sv);
4068 }
4069
4070 /*
4071 =for apidoc sv_chop
4072
4073 Efficient removal of characters from the beginning of the string buffer.
4074 SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
4075 the string buffer.  The C<ptr> becomes the first character of the adjusted
4076 string. Uses the "OOK hack".
4077 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
4078 refer to the same chunk of data.
4079
4080 =cut
4081 */
4082
4083 void
4084 Perl_sv_chop(pTHX_ register SV *sv, register const char *ptr)
4085 {
4086     register STRLEN delta;
4087     if (!ptr || !SvPOKp(sv))
4088         return;
4089     delta = ptr - SvPVX_const(sv);
4090     SV_CHECK_THINKFIRST(sv);
4091     if (SvTYPE(sv) < SVt_PVIV)
4092         sv_upgrade(sv,SVt_PVIV);
4093
4094     if (!SvOOK(sv)) {
4095         if (!SvLEN(sv)) { /* make copy of shared string */
4096             const char *pvx = SvPVX_const(sv);
4097             const STRLEN len = SvCUR(sv);
4098             SvGROW(sv, len + 1);
4099             Move(pvx,SvPVX(sv),len,char);
4100             *SvEND(sv) = '\0';
4101         }
4102         SvIV_set(sv, 0);
4103         /* Same SvOOK_on but SvOOK_on does a SvIOK_off
4104            and we do that anyway inside the SvNIOK_off
4105         */
4106         SvFLAGS(sv) |= SVf_OOK;
4107     }
4108     SvNIOK_off(sv);
4109     SvLEN_set(sv, SvLEN(sv) - delta);
4110     SvCUR_set(sv, SvCUR(sv) - delta);
4111     SvPV_set(sv, SvPVX(sv) + delta);
4112     SvIV_set(sv, SvIVX(sv) + delta);
4113 }
4114
4115 /*
4116 =for apidoc sv_catpvn
4117
4118 Concatenates the string onto the end of the string which is in the SV.  The
4119 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
4120 status set, then the bytes appended should be valid UTF-8.
4121 Handles 'get' magic, but not 'set' magic.  See C<sv_catpvn_mg>.
4122
4123 =for apidoc sv_catpvn_flags
4124
4125 Concatenates the string onto the end of the string which is in the SV.  The
4126 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
4127 status set, then the bytes appended should be valid UTF-8.
4128 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<dsv> if
4129 appropriate, else not. C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
4130 in terms of this function.
4131
4132 =cut
4133 */
4134
4135 void
4136 Perl_sv_catpvn_flags(pTHX_ register SV *dsv, register const char *sstr, register STRLEN slen, I32 flags)
4137 {
4138     dVAR;
4139     STRLEN dlen;
4140     const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
4141
4142     SvGROW(dsv, dlen + slen + 1);
4143     if (sstr == dstr)
4144         sstr = SvPVX_const(dsv);
4145     Move(sstr, SvPVX(dsv) + dlen, slen, char);
4146     SvCUR_set(dsv, SvCUR(dsv) + slen);
4147     *SvEND(dsv) = '\0';
4148     (void)SvPOK_only_UTF8(dsv);         /* validate pointer */
4149     SvTAINT(dsv);
4150     if (flags & SV_SMAGIC)
4151         SvSETMAGIC(dsv);
4152 }
4153
4154 /*
4155 =for apidoc sv_catsv
4156
4157 Concatenates the string from SV C<ssv> onto the end of the string in
4158 SV C<dsv>.  Modifies C<dsv> but not C<ssv>.  Handles 'get' magic, but
4159 not 'set' magic.  See C<sv_catsv_mg>.
4160
4161 =for apidoc sv_catsv_flags
4162
4163 Concatenates the string from SV C<ssv> onto the end of the string in
4164 SV C<dsv>.  Modifies C<dsv> but not C<ssv>.  If C<flags> has C<SV_GMAGIC>
4165 bit set, will C<mg_get> on the SVs if appropriate, else not. C<sv_catsv>
4166 and C<sv_catsv_nomg> are implemented in terms of this function.
4167
4168 =cut */
4169
4170 void
4171 Perl_sv_catsv_flags(pTHX_ SV *dsv, register SV *ssv, I32 flags)
4172 {
4173     dVAR;
4174     if (ssv) {
4175         STRLEN slen;
4176         const char *spv = SvPV_const(ssv, slen);
4177         if (spv) {
4178             /*  sutf8 and dutf8 were type bool, but under USE_ITHREADS,
4179                 gcc version 2.95.2 20000220 (Debian GNU/Linux) for
4180                 Linux xxx 2.2.17 on sparc64 with gcc -O2, we erroneously
4181                 get dutf8 = 0x20000000, (i.e.  SVf_UTF8) even though
4182                 dsv->sv_flags doesn't have that bit set.
4183                 Andy Dougherty  12 Oct 2001
4184             */
4185             const I32 sutf8 = DO_UTF8(ssv);
4186             I32 dutf8;
4187
4188             if (SvGMAGICAL(dsv) && (flags & SV_GMAGIC))
4189                 mg_get(dsv);
4190             dutf8 = DO_UTF8(dsv);
4191
4192             if (dutf8 != sutf8) {
4193                 if (dutf8) {
4194                     /* Not modifying source SV, so taking a temporary copy. */
4195                     SV* const csv = sv_2mortal(newSVpvn(spv, slen));
4196
4197                     sv_utf8_upgrade(csv);
4198                     spv = SvPV_const(csv, slen);
4199                 }
4200                 else
4201                     sv_utf8_upgrade_nomg(dsv);
4202             }
4203             sv_catpvn_nomg(dsv, spv, slen);
4204         }
4205     }
4206     if (flags & SV_SMAGIC)
4207         SvSETMAGIC(dsv);
4208 }
4209
4210 /*
4211 =for apidoc sv_catpv
4212
4213 Concatenates the string onto the end of the string which is in the SV.
4214 If the SV has the UTF-8 status set, then the bytes appended should be
4215 valid UTF-8.  Handles 'get' magic, but not 'set' magic.  See C<sv_catpv_mg>.
4216
4217 =cut */
4218
4219 void
4220 Perl_sv_catpv(pTHX_ register SV *sv, register const char *ptr)
4221 {
4222     dVAR;
4223     register STRLEN len;
4224     STRLEN tlen;
4225     char *junk;
4226
4227     if (!ptr)
4228         return;
4229     junk = SvPV_force(sv, tlen);
4230     len = strlen(ptr);
4231     SvGROW(sv, tlen + len + 1);
4232     if (ptr == junk)
4233         ptr = SvPVX_const(sv);
4234     Move(ptr,SvPVX(sv)+tlen,len+1,char);
4235     SvCUR_set(sv, SvCUR(sv) + len);
4236     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4237     SvTAINT(sv);
4238 }
4239
4240 /*
4241 =for apidoc sv_catpv_mg
4242
4243 Like C<sv_catpv>, but also handles 'set' magic.
4244
4245 =cut
4246 */
4247
4248 void
4249 Perl_sv_catpv_mg(pTHX_ register SV *sv, register const char *ptr)
4250 {
4251     sv_catpv(sv,ptr);
4252     SvSETMAGIC(sv);
4253 }
4254
4255 /*
4256 =for apidoc newSV
4257
4258 Creates a new SV.  A non-zero C<len> parameter indicates the number of
4259 bytes of preallocated string space the SV should have.  An extra byte for a
4260 trailing NUL is also reserved.  (SvPOK is not set for the SV even if string
4261 space is allocated.)  The reference count for the new SV is set to 1.
4262
4263 In 5.9.3, newSV() replaces the older NEWSV() API, and drops the first
4264 parameter, I<x>, a debug aid which allowed callers to identify themselves.
4265 This aid has been superseded by a new build option, PERL_MEM_LOG (see
4266 L<perlhack/PERL_MEM_LOG>).  The older API is still there for use in XS
4267 modules supporting older perls.
4268
4269 =cut
4270 */
4271
4272 SV *
4273 Perl_newSV(pTHX_ STRLEN len)
4274 {
4275     dVAR;
4276     register SV *sv;
4277
4278     new_SV(sv);
4279     if (len) {
4280         sv_upgrade(sv, SVt_PV);
4281         SvGROW(sv, len + 1);
4282     }
4283     return sv;
4284 }
4285 /*
4286 =for apidoc sv_magicext
4287
4288 Adds magic to an SV, upgrading it if necessary. Applies the
4289 supplied vtable and returns a pointer to the magic added.
4290
4291 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
4292 In particular, you can add magic to SvREADONLY SVs, and add more than
4293 one instance of the same 'how'.
4294
4295 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
4296 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
4297 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
4298 to contain an C<SV*> and is stored as-is with its REFCNT incremented.
4299
4300 (This is now used as a subroutine by C<sv_magic>.)
4301
4302 =cut
4303 */
4304 MAGIC * 
4305 Perl_sv_magicext(pTHX_ SV* sv, SV* obj, int how, MGVTBL *vtable,
4306                  const char* name, I32 namlen)
4307 {
4308     dVAR;
4309     MAGIC* mg;
4310
4311     if (SvTYPE(sv) < SVt_PVMG) {
4312         SvUPGRADE(sv, SVt_PVMG);
4313     }
4314     Newxz(mg, 1, MAGIC);
4315     mg->mg_moremagic = SvMAGIC(sv);
4316     SvMAGIC_set(sv, mg);
4317
4318     /* Sometimes a magic contains a reference loop, where the sv and
4319        object refer to each other.  To prevent a reference loop that
4320        would prevent such objects being freed, we look for such loops
4321        and if we find one we avoid incrementing the object refcount.
4322
4323        Note we cannot do this to avoid self-tie loops as intervening RV must
4324        have its REFCNT incremented to keep it in existence.
4325
4326     */
4327     if (!obj || obj == sv ||
4328         how == PERL_MAGIC_arylen ||
4329         how == PERL_MAGIC_qr ||
4330         how == PERL_MAGIC_symtab ||
4331         (SvTYPE(obj) == SVt_PVGV &&
4332             (GvSV(obj) == sv || GvHV(obj) == (HV*)sv || GvAV(obj) == (AV*)sv ||
4333             GvCV(obj) == (CV*)sv || GvIOp(obj) == (IO*)sv ||
4334             GvFORM(obj) == (CV*)sv)))
4335     {
4336         mg->mg_obj = obj;
4337     }
4338     else {
4339         mg->mg_obj = SvREFCNT_inc(obj);
4340         mg->mg_flags |= MGf_REFCOUNTED;
4341     }
4342
4343     /* Normal self-ties simply pass a null object, and instead of
4344        using mg_obj directly, use the SvTIED_obj macro to produce a
4345        new RV as needed.  For glob "self-ties", we are tieing the PVIO
4346        with an RV obj pointing to the glob containing the PVIO.  In
4347        this case, to avoid a reference loop, we need to weaken the
4348        reference.
4349     */
4350
4351     if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
4352         obj && SvROK(obj) && GvIO(SvRV(obj)) == (IO*)sv)
4353     {
4354       sv_rvweaken(obj);
4355     }
4356
4357     mg->mg_type = how;
4358     mg->mg_len = namlen;
4359     if (name) {
4360         if (namlen > 0)
4361             mg->mg_ptr = savepvn(name, namlen);
4362         else if (namlen == HEf_SVKEY)
4363             mg->mg_ptr = (char*)SvREFCNT_inc((SV*)name);
4364         else
4365             mg->mg_ptr = (char *) name;
4366     }
4367     mg->mg_virtual = vtable;
4368
4369     mg_magical(sv);
4370     if (SvGMAGICAL(sv))
4371         SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
4372     return mg;
4373 }
4374
4375 /*
4376 =for apidoc sv_magic
4377
4378 Adds magic to an SV. First upgrades C<sv> to type C<SVt_PVMG> if necessary,
4379 then adds a new magic item of type C<how> to the head of the magic list.
4380
4381 See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
4382 handling of the C<name> and C<namlen> arguments.
4383
4384 You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
4385 to add more than one instance of the same 'how'.
4386
4387 =cut
4388 */
4389
4390 void
4391 Perl_sv_magic(pTHX_ register SV *sv, SV *obj, int how, const char *name, I32 namlen)
4392 {
4393     dVAR;
4394     MGVTBL *vtable;
4395     MAGIC* mg;
4396
4397 #ifdef PERL_OLD_COPY_ON_WRITE
4398     if (SvIsCOW(sv))
4399         sv_force_normal_flags(sv, 0);
4400 #endif
4401     if (SvREADONLY(sv)) {
4402         if (
4403             /* its okay to attach magic to shared strings; the subsequent
4404              * upgrade to PVMG will unshare the string */
4405             !(SvFAKE(sv) && SvTYPE(sv) < SVt_PVMG)
4406
4407             && IN_PERL_RUNTIME
4408             && how != PERL_MAGIC_regex_global
4409             && how != PERL_MAGIC_bm
4410             && how != PERL_MAGIC_fm
4411             && how != PERL_MAGIC_sv
4412             && how != PERL_MAGIC_backref
4413            )
4414         {
4415             Perl_croak(aTHX_ PL_no_modify);
4416         }
4417     }
4418     if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
4419         if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
4420             /* sv_magic() refuses to add a magic of the same 'how' as an
4421                existing one
4422              */
4423             if (how == PERL_MAGIC_taint) {
4424                 mg->mg_len |= 1;
4425                 /* Any scalar which already had taint magic on which someone
4426                    (erroneously?) did SvIOK_on() or similar will now be
4427                    incorrectly sporting public "OK" flags.  */
4428                 SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
4429             }
4430             return;
4431         }
4432     }
4433
4434     switch (how) {
4435     case PERL_MAGIC_sv:
4436         vtable = &PL_vtbl_sv;
4437         break;
4438     case PERL_MAGIC_overload:
4439         vtable = &PL_vtbl_amagic;
4440         break;
4441     case PERL_MAGIC_overload_elem:
4442         vtable = &PL_vtbl_amagicelem;
4443         break;
4444     case PERL_MAGIC_overload_table:
4445         vtable = &PL_vtbl_ovrld;
4446         break;
4447     case PERL_MAGIC_bm:
4448         vtable = &PL_vtbl_bm;
4449         break;
4450     case PERL_MAGIC_regdata:
4451         vtable = &PL_vtbl_regdata;
4452         break;
4453     case PERL_MAGIC_regdatum:
4454         vtable = &PL_vtbl_regdatum;
4455         break;
4456     case PERL_MAGIC_env:
4457         vtable = &PL_vtbl_env;
4458         break;
4459     case PERL_MAGIC_fm:
4460         vtable = &PL_vtbl_fm;
4461         break;
4462     case PERL_MAGIC_envelem:
4463         vtable = &PL_vtbl_envelem;
4464         break;
4465     case PERL_MAGIC_regex_global:
4466         vtable = &PL_vtbl_mglob;
4467         break;
4468     case PERL_MAGIC_isa:
4469         vtable = &PL_vtbl_isa;
4470         break;
4471     case PERL_MAGIC_isaelem:
4472         vtable = &PL_vtbl_isaelem;
4473         break;
4474     case PERL_MAGIC_nkeys:
4475         vtable = &PL_vtbl_nkeys;
4476         break;
4477     case PERL_MAGIC_dbfile:
4478         vtable = NULL;
4479         break;
4480     case PERL_MAGIC_dbline:
4481         vtable = &PL_vtbl_dbline;
4482         break;
4483 #ifdef USE_LOCALE_COLLATE
4484     case PERL_MAGIC_collxfrm:
4485         vtable = &PL_vtbl_collxfrm;
4486         break;
4487 #endif /* USE_LOCALE_COLLATE */
4488     case PERL_MAGIC_tied:
4489         vtable = &PL_vtbl_pack;
4490         break;
4491     case PERL_MAGIC_tiedelem:
4492     case PERL_MAGIC_tiedscalar:
4493         vtable = &PL_vtbl_packelem;
4494         break;
4495     case PERL_MAGIC_qr:
4496         vtable = &PL_vtbl_regexp;
4497         break;
4498     case PERL_MAGIC_sig:
4499         vtable = &PL_vtbl_sig;
4500         break;
4501     case PERL_MAGIC_sigelem:
4502         vtable = &PL_vtbl_sigelem;
4503         break;
4504     case PERL_MAGIC_taint:
4505         vtable = &PL_vtbl_taint;
4506         break;
4507     case PERL_MAGIC_uvar:
4508         vtable = &PL_vtbl_uvar;
4509         break;
4510     case PERL_MAGIC_vec:
4511         vtable = &PL_vtbl_vec;
4512         break;
4513     case PERL_MAGIC_arylen_p:
4514     case PERL_MAGIC_rhash:
4515     case PERL_MAGIC_symtab:
4516     case PERL_MAGIC_vstring:
4517         vtable = NULL;
4518         break;
4519     case PERL_MAGIC_utf8:
4520         vtable = &PL_vtbl_utf8;
4521         break;
4522     case PERL_MAGIC_substr:
4523         vtable = &PL_vtbl_substr;
4524         break;
4525     case PERL_MAGIC_defelem:
4526         vtable = &PL_vtbl_defelem;
4527         break;
4528     case PERL_MAGIC_arylen:
4529         vtable = &PL_vtbl_arylen;
4530         break;
4531     case PERL_MAGIC_pos:
4532         vtable = &PL_vtbl_pos;
4533         break;
4534     case PERL_MAGIC_backref:
4535         vtable = &PL_vtbl_backref;
4536         break;
4537     case PERL_MAGIC_ext:
4538         /* Reserved for use by extensions not perl internals.           */
4539         /* Useful for attaching extension internal data to perl vars.   */
4540         /* Note that multiple extensions may clash if magical scalars   */
4541         /* etc holding private data from one are passed to another.     */
4542         vtable = NULL;
4543         break;
4544     default:
4545         Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
4546     }
4547
4548     /* Rest of work is done else where */
4549     mg = sv_magicext(sv,obj,how,vtable,name,namlen);
4550
4551     switch (how) {
4552     case PERL_MAGIC_taint:
4553         mg->mg_len = 1;
4554         break;
4555     case PERL_MAGIC_ext:
4556     case PERL_MAGIC_dbfile:
4557         SvRMAGICAL_on(sv);
4558         break;
4559     }
4560 }
4561
4562 /*
4563 =for apidoc sv_unmagic
4564
4565 Removes all magic of type C<type> from an SV.
4566
4567 =cut
4568 */
4569
4570 int
4571 Perl_sv_unmagic(pTHX_ SV *sv, int type)
4572 {
4573     MAGIC* mg;
4574     MAGIC** mgp;
4575     if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
4576         return 0;
4577     mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
4578     for (mg = *mgp; mg; mg = *mgp) {
4579         if (mg->mg_type == type) {
4580             const MGVTBL* const vtbl = mg->mg_virtual;
4581             *mgp = mg->mg_moremagic;
4582             if (vtbl && vtbl->svt_free)
4583                 CALL_FPTR(vtbl->svt_free)(aTHX_ sv, mg);
4584             if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
4585                 if (mg->mg_len > 0)
4586                     Safefree(mg->mg_ptr);
4587                 else if (mg->mg_len == HEf_SVKEY)
4588                     SvREFCNT_dec((SV*)mg->mg_ptr);
4589                 else if (mg->mg_type == PERL_MAGIC_utf8 && mg->mg_ptr)
4590                     Safefree(mg->mg_ptr);
4591             }
4592             if (mg->mg_flags & MGf_REFCOUNTED)
4593                 SvREFCNT_dec(mg->mg_obj);
4594             Safefree(mg);
4595         }
4596         else
4597             mgp = &mg->mg_moremagic;
4598     }
4599     if (!SvMAGIC(sv)) {
4600         SvMAGICAL_off(sv);
4601         SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
4602         SvMAGIC_set(sv, NULL);
4603     }
4604
4605     return 0;
4606 }
4607
4608 /*
4609 =for apidoc sv_rvweaken
4610
4611 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
4612 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
4613 push a back-reference to this RV onto the array of backreferences
4614 associated with that magic.
4615
4616 =cut
4617 */
4618
4619 SV *
4620 Perl_sv_rvweaken(pTHX_ SV *sv)
4621 {
4622     SV *tsv;
4623     if (!SvOK(sv))  /* let undefs pass */
4624         return sv;
4625     if (!SvROK(sv))
4626         Perl_croak(aTHX_ "Can't weaken a nonreference");
4627     else if (SvWEAKREF(sv)) {
4628         if (ckWARN(WARN_MISC))
4629             Perl_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
4630         return sv;
4631     }
4632     tsv = SvRV(sv);
4633     Perl_sv_add_backref(aTHX_ tsv, sv);
4634     SvWEAKREF_on(sv);
4635     SvREFCNT_dec(tsv);
4636     return sv;
4637 }
4638
4639 /* Give tsv backref magic if it hasn't already got it, then push a
4640  * back-reference to sv onto the array associated with the backref magic.
4641  */
4642
4643 void
4644 Perl_sv_add_backref(pTHX_ SV *tsv, SV *sv)
4645 {
4646     dVAR;
4647     AV *av;
4648
4649     if (SvTYPE(tsv) == SVt_PVHV) {
4650         AV **const avp = Perl_hv_backreferences_p(aTHX_ (HV*)tsv);
4651
4652         av = *avp;
4653         if (!av) {
4654             /* There is no AV in the offical place - try a fixup.  */
4655             MAGIC *const mg = mg_find(tsv, PERL_MAGIC_backref);
4656
4657             if (mg) {
4658                 /* Aha. They've got it stowed in magic.  Bring it back.  */
4659                 av = (AV*)mg->mg_obj;
4660                 /* Stop mg_free decreasing the refernce count.  */
4661                 mg->mg_obj = NULL;
4662                 /* Stop mg_free even calling the destructor, given that
4663                    there's no AV to free up.  */
4664                 mg->mg_virtual = 0;
4665                 sv_unmagic(tsv, PERL_MAGIC_backref);
4666             } else {
4667                 av = newAV();
4668                 AvREAL_off(av);
4669                 SvREFCNT_inc(av);
4670             }
4671             *avp = av;
4672         }
4673     } else {
4674         const MAGIC *const mg
4675             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
4676         if (mg)
4677             av = (AV*)mg->mg_obj;
4678         else {
4679             av = newAV();
4680             AvREAL_off(av);
4681             sv_magic(tsv, (SV*)av, PERL_MAGIC_backref, NULL, 0);
4682             /* av now has a refcnt of 2, which avoids it getting freed
4683              * before us during global cleanup. The extra ref is removed
4684              * by magic_killbackrefs() when tsv is being freed */
4685         }
4686     }
4687     if (AvFILLp(av) >= AvMAX(av)) {
4688         av_extend(av, AvFILLp(av)+1);
4689     }
4690     AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
4691 }
4692
4693 /* delete a back-reference to ourselves from the backref magic associated
4694  * with the SV we point to.
4695  */
4696
4697 STATIC void
4698 S_sv_del_backref(pTHX_ SV *tsv, SV *sv)
4699 {
4700     dVAR;
4701     AV *av = NULL;
4702     SV **svp;
4703     I32 i;
4704
4705     if (SvTYPE(tsv) == SVt_PVHV && SvOOK(tsv)) {
4706         av = *Perl_hv_backreferences_p(aTHX_ (HV*)tsv);
4707         /* We mustn't attempt to "fix up" the hash here by moving the
4708            backreference array back to the hv_aux structure, as that is stored
4709            in the main HvARRAY(), and hfreentries assumes that no-one
4710            reallocates HvARRAY() while it is running.  */
4711     }
4712     if (!av) {
4713         const MAGIC *const mg
4714             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
4715         if (mg)
4716             av = (AV *)mg->mg_obj;
4717     }
4718     if (!av) {
4719         if (PL_in_clean_all)
4720             return;
4721         Perl_croak(aTHX_ "panic: del_backref");
4722     }
4723
4724     if (SvIS_FREED(av))
4725         return;
4726
4727     svp = AvARRAY(av);
4728     /* We shouldn't be in here more than once, but for paranoia reasons lets
4729        not assume this.  */
4730     for (i = AvFILLp(av); i >= 0; i--) {
4731         if (svp[i] == sv) {
4732             const SSize_t fill = AvFILLp(av);
4733             if (i != fill) {
4734                 /* We weren't the last entry.
4735                    An unordered list has this property that you can take the
4736                    last element off the end to fill the hole, and it's still
4737                    an unordered list :-)
4738                 */
4739                 svp[i] = svp[fill];
4740             }
4741             svp[fill] = NULL;
4742             AvFILLp(av) = fill - 1;
4743         }
4744     }
4745 }
4746
4747 int
4748 Perl_sv_kill_backrefs(pTHX_ SV *sv, AV *av)
4749 {
4750     SV **svp = AvARRAY(av);
4751
4752     PERL_UNUSED_ARG(sv);
4753
4754     /* Not sure why the av can get freed ahead of its sv, but somehow it does
4755        in ext/B/t/bytecode.t test 15 (involving print <DATA>)  */
4756     if (svp && !SvIS_FREED(av)) {
4757         SV *const *const last = svp + AvFILLp(av);
4758
4759         while (svp <= last) {
4760             if (*svp) {
4761                 SV *const referrer = *svp;
4762                 if (SvWEAKREF(referrer)) {
4763                     /* XXX Should we check that it hasn't changed? */
4764                     SvRV_set(referrer, 0);
4765                     SvOK_off(referrer);
4766                     SvWEAKREF_off(referrer);
4767                 } else if (SvTYPE(referrer) == SVt_PVGV ||
4768                            SvTYPE(referrer) == SVt_PVLV) {
4769                     /* You lookin' at me?  */
4770                     assert(GvSTASH(referrer));
4771                     assert(GvSTASH(referrer) == (HV*)sv);
4772                     GvSTASH(referrer) = 0;
4773                 } else {
4774                     Perl_croak(aTHX_
4775                                "panic: magic_killbackrefs (flags=%"UVxf")",
4776                                (UV)SvFLAGS(referrer));
4777                 }
4778
4779                 *svp = NULL;
4780             }
4781             svp++;
4782         }
4783     }
4784     SvREFCNT_dec(av); /* remove extra count added by sv_add_backref() */
4785     return 0;
4786 }
4787
4788 /*
4789 =for apidoc sv_insert
4790
4791 Inserts a string at the specified offset/length within the SV. Similar to
4792 the Perl substr() function.
4793
4794 =cut
4795 */
4796
4797 void
4798 Perl_sv_insert(pTHX_ SV *bigstr, STRLEN offset, STRLEN len, const char *little, STRLEN littlelen)
4799 {
4800     dVAR;
4801     register char *big;
4802     register char *mid;
4803     register char *midend;
4804     register char *bigend;
4805     register I32 i;
4806     STRLEN curlen;
4807
4808
4809     if (!bigstr)
4810         Perl_croak(aTHX_ "Can't modify non-existent substring");
4811     SvPV_force(bigstr, curlen);
4812     (void)SvPOK_only_UTF8(bigstr);
4813     if (offset + len > curlen) {
4814         SvGROW(bigstr, offset+len+1);
4815         Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
4816         SvCUR_set(bigstr, offset+len);
4817     }
4818