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