d7703e2e65f155099f7d2de1810f94ff070162bd
[p5sagit/p5-mst-13.2.git] / sv.c
1 /*    sv.c
2  *
3  *    Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4  *    2000, 2001, 2002, 2003, 2004, 2005, 2006, by Larry Wall and others
5  *
6  *    You may distribute under the terms of either the GNU General Public
7  *    License or the Artistic License, as specified in the README file.
8  *
9  * "I wonder what the Entish is for 'yes' and 'no'," he thought.
10  *
11  *
12  * This file contains the code that creates, manipulates and destroys
13  * scalar values (SVs). The other types (AV, HV, GV, etc.) reuse the
14  * structure of an SV, so their creation and destruction is handled
15  * here; higher-level functions are in av.c, hv.c, and so on. Opcode
16  * level functions (eg. substr, split, join) for each of the types are
17  * in the pp*.c files.
18  */
19
20 #include "EXTERN.h"
21 #define PERL_IN_SV_C
22 #include "perl.h"
23 #include "regcomp.h"
24
25 #define FCALL *f
26
27 #ifdef __Lynx__
28 /* Missing proto on LynxOS */
29   char *gconvert(double, int, int,  char *);
30 #endif
31
32 #ifdef PERL_UTF8_CACHE_ASSERT
33 /* The cache element 0 is the Unicode offset;
34  * the cache element 1 is the byte offset of the element 0;
35  * the cache element 2 is the Unicode length of the substring;
36  * the cache element 3 is the byte length of the substring;
37  * The checking of the substring side would be good
38  * but substr() has enough code paths to make my head spin;
39  * if adding more checks watch out for the following tests:
40  *   t/op/index.t t/op/length.t t/op/pat.t t/op/substr.t
41  *   lib/utf8.t lib/Unicode/Collate/t/index.t
42  * --jhi
43  */
44 #define ASSERT_UTF8_CACHE(cache) \
45         STMT_START { if (cache) { assert((cache)[0] <= (cache)[1]); } } STMT_END
46 #else
47 #define ASSERT_UTF8_CACHE(cache) NOOP
48 #endif
49
50 #ifdef PERL_OLD_COPY_ON_WRITE
51 #define SV_COW_NEXT_SV(sv)      INT2PTR(SV *,SvUVX(sv))
52 #define SV_COW_NEXT_SV_SET(current,next)        SvUV_set(current, PTR2UV(next))
53 /* This is a pessimistic view. Scalar must be purely a read-write PV to copy-
54    on-write.  */
55 #endif
56
57 /* ============================================================================
58
59 =head1 Allocation and deallocation of SVs.
60
61 An SV (or AV, HV, etc.) is allocated in two parts: the head (struct 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 In all but the most memory-paranoid configuations (ex: PURIFY), this
67 allocation is done using arenas, which by default are approximately 4K
68 chunks of memory parcelled up into N heads or bodies (of same size).
69 Sv-bodies are allocated by their sv-type, guaranteeing size
70 consistency needed to allocate safely from arrays.
71
72 The first slot in each arena is reserved, and is used to hold a link
73 to the next arena.  In the case of heads, the unused first slot also
74 contains some flags and a note of the number of slots.  Snaked through
75 each arena chain is a linked list of free items; when this becomes
76 empty, an extra arena is allocated and divided up into N items which
77 are threaded into the free list.
78
79 The following global variables are associated with arenas:
80
81     PL_sv_arenaroot     pointer to list of SV arenas
82     PL_sv_root          pointer to list of free SV structures
83
84     PL_body_arenaroots[]  array of pointers to list of arenas, 1 per svtype
85     PL_body_roots[]       array of pointers to list of free bodies of svtype
86                           arrays are indexed by the svtype needed
87
88 Note that some of the larger and more rarely used body types (eg
89 xpvio) are not allocated using arenas, but are instead just
90 malloc()/free()ed as required.
91
92 In addition, a few SV heads are not allocated from an arena, but are
93 instead directly created as static or auto variables, eg PL_sv_undef.
94 The size of arenas can be changed from the default by setting
95 PERL_ARENA_SIZE appropriately at compile time.
96
97 The SV arena serves the secondary purpose of allowing still-live SVs
98 to be located and destroyed during final cleanup.
99
100 At the lowest level, the macros new_SV() and del_SV() grab and free
101 an SV head.  (If debugging with -DD, del_SV() calls the function S_del_sv()
102 to return the SV to the free list with error checking.) new_SV() calls
103 more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
104 SVs in the free list have their SvTYPE field set to all ones.
105
106 Similarly, there are macros new_XIV()/del_XIV(), new_XNV()/del_XNV() etc
107 that allocate and return individual body types. Normally these are mapped
108 to the arena-manipulating functions new_xiv()/del_xiv() etc, but may be
109 instead mapped directly to malloc()/free() if PURIFY is defined. The
110 new/del functions remove from, or add to, the appropriate PL_foo_root
111 list, and call more_xiv() etc to add a new arena if the list is empty.
112
113 At the time of very final cleanup, sv_free_arenas() is called from
114 perl_destruct() to physically free all the arenas allocated since the
115 start of the interpreter.
116
117 Manipulation of any of the PL_*root pointers is protected by enclosing
118 LOCK_SV_MUTEX; ... UNLOCK_SV_MUTEX calls which should Do the Right Thing
119 if threads are enabled.
120
121 The function visit() scans the SV arenas list, and calls a specified
122 function for each SV it finds which is still live - ie which has an SvTYPE
123 other than all 1's, and a non-zero SvREFCNT. visit() is used by the
124 following functions (specified as [function that calls visit()] / [function
125 called by visit() for each SV]):
126
127     sv_report_used() / do_report_used()
128                         dump all remaining SVs (debugging aid)
129
130     sv_clean_objs() / do_clean_objs(),do_clean_named_objs()
131                         Attempt to free all objects pointed to by RVs,
132                         and, unless DISABLE_DESTRUCTOR_KLUDGE is defined,
133                         try to do the same for all objects indirectly
134                         referenced by typeglobs too.  Called once from
135                         perl_destruct(), prior to calling sv_clean_all()
136                         below.
137
138     sv_clean_all() / do_clean_all()
139                         SvREFCNT_dec(sv) each remaining SV, possibly
140                         triggering an sv_free(). It also sets the
141                         SVf_BREAK flag on the SV to indicate that the
142                         refcnt has been artificially lowered, and thus
143                         stopping sv_free() from giving spurious warnings
144                         about SVs which unexpectedly have a refcnt
145                         of zero.  called repeatedly from perl_destruct()
146                         until there are no SVs left.
147
148 =head2 Arena allocator API Summary
149
150 Private API to rest of sv.c
151
152     new_SV(),  del_SV(),
153
154     new_XIV(), del_XIV(),
155     new_XNV(), del_XNV(),
156     etc
157
158 Public API:
159
160     sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
161
162
163 =cut
164
165 ============================================================================ */
166
167
168
169 /*
170  * "A time to plant, and a time to uproot what was planted..."
171  */
172
173 /*
174  * nice_chunk and nice_chunk size need to be set
175  * and queried under the protection of sv_mutex
176  */
177 void
178 Perl_offer_nice_chunk(pTHX_ void *chunk, U32 chunk_size)
179 {
180     dVAR;
181     void *new_chunk;
182     U32 new_chunk_size;
183     LOCK_SV_MUTEX;
184     new_chunk = (void *)(chunk);
185     new_chunk_size = (chunk_size);
186     if (new_chunk_size > PL_nice_chunk_size) {
187         Safefree(PL_nice_chunk);
188         PL_nice_chunk = (char *) new_chunk;
189         PL_nice_chunk_size = new_chunk_size;
190     } else {
191         Safefree(chunk);
192     }
193     UNLOCK_SV_MUTEX;
194 }
195
196 #ifdef DEBUG_LEAKING_SCALARS
197 #  define FREE_SV_DEBUG_FILE(sv) Safefree((sv)->sv_debug_file)
198 #else
199 #  define FREE_SV_DEBUG_FILE(sv)
200 #endif
201
202 #ifdef PERL_POISON
203 #  define SvARENA_CHAIN(sv)     ((sv)->sv_u.svu_rv)
204 /* Whilst I'd love to do this, it seems that things like to check on
205    unreferenced scalars
206 #  define POSION_SV_HEAD(sv)    Poison(sv, 1, struct STRUCT_SV)
207 */
208 #  define POSION_SV_HEAD(sv)    Poison(&SvANY(sv), 1, void *), \
209                                 Poison(&SvREFCNT(sv), 1, U32)
210 #else
211 #  define SvARENA_CHAIN(sv)     SvANY(sv)
212 #  define POSION_SV_HEAD(sv)
213 #endif
214
215 #define plant_SV(p) \
216     STMT_START {                                        \
217         FREE_SV_DEBUG_FILE(p);                          \
218         POSION_SV_HEAD(p);                              \
219         SvARENA_CHAIN(p) = (void *)PL_sv_root;          \
220         SvFLAGS(p) = SVTYPEMASK;                        \
221         PL_sv_root = (p);                               \
222         --PL_sv_count;                                  \
223     } STMT_END
224
225 /* sv_mutex must be held while calling uproot_SV() */
226 #define uproot_SV(p) \
227     STMT_START {                                        \
228         (p) = PL_sv_root;                               \
229         PL_sv_root = (SV*)SvARENA_CHAIN(p);                     \
230         ++PL_sv_count;                                  \
231     } STMT_END
232
233
234 /* make some more SVs by adding another arena */
235
236 /* sv_mutex must be held while calling more_sv() */
237 STATIC SV*
238 S_more_sv(pTHX)
239 {
240     dVAR;
241     SV* sv;
242
243     if (PL_nice_chunk) {
244         sv_add_arena(PL_nice_chunk, PL_nice_chunk_size, 0);
245         PL_nice_chunk = NULL;
246         PL_nice_chunk_size = 0;
247     }
248     else {
249         char *chunk;                /* must use New here to match call to */
250         Newx(chunk,PERL_ARENA_SIZE,char);   /* Safefree() in sv_free_arenas()     */
251         sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
252     }
253     uproot_SV(sv);
254     return sv;
255 }
256
257 /* new_SV(): return a new, empty SV head */
258
259 #ifdef DEBUG_LEAKING_SCALARS
260 /* provide a real function for a debugger to play with */
261 STATIC SV*
262 S_new_SV(pTHX)
263 {
264     SV* sv;
265
266     LOCK_SV_MUTEX;
267     if (PL_sv_root)
268         uproot_SV(sv);
269     else
270         sv = S_more_sv(aTHX);
271     UNLOCK_SV_MUTEX;
272     SvANY(sv) = 0;
273     SvREFCNT(sv) = 1;
274     SvFLAGS(sv) = 0;
275     sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
276     sv->sv_debug_line = (U16) ((PL_copline == NOLINE) ?
277         (PL_curcop ? CopLINE(PL_curcop) : 0) : PL_copline);
278     sv->sv_debug_inpad = 0;
279     sv->sv_debug_cloned = 0;
280     sv->sv_debug_file = PL_curcop ? savepv(CopFILE(PL_curcop)): NULL;
281     
282     return sv;
283 }
284 #  define new_SV(p) (p)=S_new_SV(aTHX)
285
286 #else
287 #  define new_SV(p) \
288     STMT_START {                                        \
289         LOCK_SV_MUTEX;                                  \
290         if (PL_sv_root)                                 \
291             uproot_SV(p);                               \
292         else                                            \
293             (p) = S_more_sv(aTHX);                      \
294         UNLOCK_SV_MUTEX;                                \
295         SvANY(p) = 0;                                   \
296         SvREFCNT(p) = 1;                                \
297         SvFLAGS(p) = 0;                                 \
298     } STMT_END
299 #endif
300
301
302 /* del_SV(): return an empty SV head to the free list */
303
304 #ifdef DEBUGGING
305
306 #define del_SV(p) \
307     STMT_START {                                        \
308         LOCK_SV_MUTEX;                                  \
309         if (DEBUG_D_TEST)                               \
310             del_sv(p);                                  \
311         else                                            \
312             plant_SV(p);                                \
313         UNLOCK_SV_MUTEX;                                \
314     } STMT_END
315
316 STATIC void
317 S_del_sv(pTHX_ SV *p)
318 {
319     dVAR;
320     if (DEBUG_D_TEST) {
321         SV* sva;
322         bool ok = 0;
323         for (sva = PL_sv_arenaroot; sva; sva = (SV *) SvANY(sva)) {
324             const SV * const sv = sva + 1;
325             const SV * const svend = &sva[SvREFCNT(sva)];
326             if (p >= sv && p < svend) {
327                 ok = 1;
328                 break;
329             }
330         }
331         if (!ok) {
332             if (ckWARN_d(WARN_INTERNAL))        
333                 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
334                             "Attempt to free non-arena SV: 0x%"UVxf
335                             pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
336             return;
337         }
338     }
339     plant_SV(p);
340 }
341
342 #else /* ! DEBUGGING */
343
344 #define del_SV(p)   plant_SV(p)
345
346 #endif /* DEBUGGING */
347
348
349 /*
350 =head1 SV Manipulation Functions
351
352 =for apidoc sv_add_arena
353
354 Given a chunk of memory, link it to the head of the list of arenas,
355 and split it into a list of free SVs.
356
357 =cut
358 */
359
360 void
361 Perl_sv_add_arena(pTHX_ char *ptr, U32 size, U32 flags)
362 {
363     dVAR;
364     SV* const sva = (SV*)ptr;
365     register SV* sv;
366     register SV* svend;
367
368     /* The first SV in an arena isn't an SV. */
369     SvANY(sva) = (void *) PL_sv_arenaroot;              /* ptr to next arena */
370     SvREFCNT(sva) = size / sizeof(SV);          /* number of SV slots */
371     SvFLAGS(sva) = flags;                       /* FAKE if not to be freed */
372
373     PL_sv_arenaroot = sva;
374     PL_sv_root = sva + 1;
375
376     svend = &sva[SvREFCNT(sva) - 1];
377     sv = sva + 1;
378     while (sv < svend) {
379         SvARENA_CHAIN(sv) = (void *)(SV*)(sv + 1);
380 #ifdef DEBUGGING
381         SvREFCNT(sv) = 0;
382 #endif
383         /* Must always set typemask because it's awlays checked in on cleanup
384            when the arenas are walked looking for objects.  */
385         SvFLAGS(sv) = SVTYPEMASK;
386         sv++;
387     }
388     SvARENA_CHAIN(sv) = 0;
389 #ifdef DEBUGGING
390     SvREFCNT(sv) = 0;
391 #endif
392     SvFLAGS(sv) = SVTYPEMASK;
393 }
394
395 /* visit(): call the named function for each non-free SV in the arenas
396  * whose flags field matches the flags/mask args. */
397
398 STATIC I32
399 S_visit(pTHX_ SVFUNC_t f, U32 flags, U32 mask)
400 {
401     dVAR;
402     SV* sva;
403     I32 visited = 0;
404
405     for (sva = PL_sv_arenaroot; sva; sva = (SV*)SvANY(sva)) {
406         register const SV * const svend = &sva[SvREFCNT(sva)];
407         register SV* sv;
408         for (sv = sva + 1; sv < svend; ++sv) {
409             if (SvTYPE(sv) != SVTYPEMASK
410                     && (sv->sv_flags & mask) == flags
411                     && SvREFCNT(sv))
412             {
413                 (FCALL)(aTHX_ sv);
414                 ++visited;
415             }
416         }
417     }
418     return visited;
419 }
420
421 #ifdef DEBUGGING
422
423 /* called by sv_report_used() for each live SV */
424
425 static void
426 do_report_used(pTHX_ SV *sv)
427 {
428     if (SvTYPE(sv) != SVTYPEMASK) {
429         PerlIO_printf(Perl_debug_log, "****\n");
430         sv_dump(sv);
431     }
432 }
433 #endif
434
435 /*
436 =for apidoc sv_report_used
437
438 Dump the contents of all SVs not yet freed. (Debugging aid).
439
440 =cut
441 */
442
443 void
444 Perl_sv_report_used(pTHX)
445 {
446 #ifdef DEBUGGING
447     visit(do_report_used, 0, 0);
448 #endif
449 }
450
451 /* called by sv_clean_objs() for each live SV */
452
453 static void
454 do_clean_objs(pTHX_ SV *ref)
455 {
456     dVAR;
457     if (SvROK(ref)) {
458         SV * const target = SvRV(ref);
459         if (SvOBJECT(target)) {
460             DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(ref)));
461             if (SvWEAKREF(ref)) {
462                 sv_del_backref(target, ref);
463                 SvWEAKREF_off(ref);
464                 SvRV_set(ref, NULL);
465             } else {
466                 SvROK_off(ref);
467                 SvRV_set(ref, NULL);
468                 SvREFCNT_dec(target);
469             }
470         }
471     }
472
473     /* XXX Might want to check arrays, etc. */
474 }
475
476 /* called by sv_clean_objs() for each live SV */
477
478 #ifndef DISABLE_DESTRUCTOR_KLUDGE
479 static void
480 do_clean_named_objs(pTHX_ SV *sv)
481 {
482     dVAR;
483     if (SvTYPE(sv) == SVt_PVGV && GvGP(sv)) {
484         if ((
485 #ifdef PERL_DONT_CREATE_GVSV
486              GvSV(sv) &&
487 #endif
488              SvOBJECT(GvSV(sv))) ||
489              (GvAV(sv) && SvOBJECT(GvAV(sv))) ||
490              (GvHV(sv) && SvOBJECT(GvHV(sv))) ||
491              (GvIO(sv) && SvOBJECT(GvIO(sv))) ||
492              (GvCV(sv) && SvOBJECT(GvCV(sv))) )
493         {
494             DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning named glob object:\n "), sv_dump(sv)));
495             SvFLAGS(sv) |= SVf_BREAK;
496             SvREFCNT_dec(sv);
497         }
498     }
499 }
500 #endif
501
502 /*
503 =for apidoc sv_clean_objs
504
505 Attempt to destroy all objects not yet freed
506
507 =cut
508 */
509
510 void
511 Perl_sv_clean_objs(pTHX)
512 {
513     dVAR;
514     PL_in_clean_objs = TRUE;
515     visit(do_clean_objs, SVf_ROK, SVf_ROK);
516 #ifndef DISABLE_DESTRUCTOR_KLUDGE
517     /* some barnacles may yet remain, clinging to typeglobs */
518     visit(do_clean_named_objs, SVt_PVGV, SVTYPEMASK);
519 #endif
520     PL_in_clean_objs = FALSE;
521 }
522
523 /* called by sv_clean_all() for each live SV */
524
525 static void
526 do_clean_all(pTHX_ SV *sv)
527 {
528     dVAR;
529     DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
530     SvFLAGS(sv) |= SVf_BREAK;
531     if (PL_comppad == (AV*)sv) {
532         PL_comppad = NULL;
533         PL_curpad = Null(SV**);
534     }
535     SvREFCNT_dec(sv);
536 }
537
538 /*
539 =for apidoc sv_clean_all
540
541 Decrement the refcnt of each remaining SV, possibly triggering a
542 cleanup. This function may have to be called multiple times to free
543 SVs which are in complex self-referential hierarchies.
544
545 =cut
546 */
547
548 I32
549 Perl_sv_clean_all(pTHX)
550 {
551     dVAR;
552     I32 cleaned;
553     PL_in_clean_all = TRUE;
554     cleaned = visit(do_clean_all, 0,0);
555     PL_in_clean_all = FALSE;
556     return cleaned;
557 }
558
559 /*
560   ARENASETS: a meta-arena implementation which separates arena-info
561   into struct arena_set, which contains an array of struct
562   arena_descs, each holding info for a single arena.  By separating
563   the meta-info from the arena, we recover the 1st slot, formerly
564   borrowed for list management.  The arena_set is about the size of an
565   arena, avoiding the needless malloc overhead of a naive linked-list
566
567   The cost is 1 arena-set malloc per ~320 arena-mallocs, + the unused
568   memory in the last arena-set (1/2 on average).  In trade, we get
569   back the 1st slot in each arena (ie 1.7% of a CV-arena, less for
570   others)
571
572   union arena is declared with a fixed size, but is intended to vary
573   by type, allowing their use for big, rare body-types where theres
574   currently too much wastage (unused arena slots)
575 */
576 #define ARENASETS 1
577
578 struct arena_desc {
579     char       *arena;          /* the raw storage, allocated aligned */
580     size_t      size;           /* its size ~4k typ */
581     int         unit_type;      /* useful for arena audits */
582     /* info for sv-heads (eventually)
583        int count, flags;
584     */
585 };
586
587 struct arena_set;
588
589 /* Get the maximum number of elements in set[] such that struct arena_set
590    will fit within PERL_ARENA_SIZE, which is probabably just under 4K, and
591    therefore likely to be 1 aligned memory page.  */
592
593 #define ARENAS_PER_SET  ((PERL_ARENA_SIZE - sizeof(struct arena_set*) \
594                           - 2 * sizeof(int)) / sizeof (struct arena_desc))
595
596 struct arena_set {
597     struct arena_set* next;
598     int   set_size;             /* ie ARENAS_PER_SET */
599     int   curr;                 /* index of next available arena-desc */
600     struct arena_desc set[ARENAS_PER_SET];
601 };
602
603 #if !ARENASETS
604
605 static void 
606 S_free_arena(pTHX_ void **root) {
607     while (root) {
608         void ** const next = *(void **)root;
609         Safefree(root);
610         root = next;
611     }
612 }
613 #endif
614
615 /*
616 =for apidoc sv_free_arenas
617
618 Deallocate the memory used by all arenas. Note that all the individual SV
619 heads and bodies within the arenas must already have been freed.
620
621 =cut
622 */
623 void
624 Perl_sv_free_arenas(pTHX)
625 {
626     dVAR;
627     SV* sva;
628     SV* svanext;
629     int i;
630
631     /* Free arenas here, but be careful about fake ones.  (We assume
632        contiguity of the fake ones with the corresponding real ones.) */
633
634     for (sva = PL_sv_arenaroot; sva; sva = svanext) {
635         svanext = (SV*) SvANY(sva);
636         while (svanext && SvFAKE(svanext))
637             svanext = (SV*) SvANY(svanext);
638
639         if (!SvFAKE(sva))
640             Safefree(sva);
641     }
642
643 #if ARENASETS
644     {
645         struct arena_set *next, *aroot = (struct arena_set*) PL_body_arenas;
646         
647         for (; aroot; aroot = next) {
648             int max = aroot->curr;
649             for (i=0; i<max; i++) {
650                 assert(aroot->set[i].arena);
651                 Safefree(aroot->set[i].arena);
652             }
653             next = aroot->next;
654             Safefree(aroot);
655         }
656     }
657 #else
658     S_free_arena(aTHX_ (void**) PL_body_arenas);
659 #endif
660
661     for (i=0; i<SVt_LAST; i++)
662         PL_body_roots[i] = 0;
663
664     Safefree(PL_nice_chunk);
665     PL_nice_chunk = NULL;
666     PL_nice_chunk_size = 0;
667     PL_sv_arenaroot = 0;
668     PL_sv_root = 0;
669 }
670
671 /*
672   Here are mid-level routines that manage the allocation of bodies out
673   of the various arenas.  There are 5 kinds of arenas:
674
675   1. SV-head arenas, which are discussed and handled above
676   2. regular body arenas
677   3. arenas for reduced-size bodies
678   4. Hash-Entry arenas
679   5. pte arenas (thread related)
680
681   Arena types 2 & 3 are chained by body-type off an array of
682   arena-root pointers, which is indexed by svtype.  Some of the
683   larger/less used body types are malloced singly, since a large
684   unused block of them is wasteful.  Also, several svtypes dont have
685   bodies; the data fits into the sv-head itself.  The arena-root
686   pointer thus has a few unused root-pointers (which may be hijacked
687   later for arena types 4,5)
688
689   3 differs from 2 as an optimization; some body types have several
690   unused fields in the front of the structure (which are kept in-place
691   for consistency).  These bodies can be allocated in smaller chunks,
692   because the leading fields arent accessed.  Pointers to such bodies
693   are decremented to point at the unused 'ghost' memory, knowing that
694   the pointers are used with offsets to the real memory.
695
696   HE, HEK arenas are managed separately, with separate code, but may
697   be merge-able later..
698
699   PTE arenas are not sv-bodies, but they share these mid-level
700   mechanics, so are considered here.  The new mid-level mechanics rely
701   on the sv_type of the body being allocated, so we just reserve one
702   of the unused body-slots for PTEs, then use it in those (2) PTE
703   contexts below (line ~10k)
704 */
705
706 /* get_arena(size): when ARENASETS is enabled, this creates
707    custom-sized arenas, otherwize it uses PERL_ARENA_SIZE, as
708    previously done.
709    TBD: export properly for hv.c: S_more_he().
710 */
711 void*
712 Perl_get_arena(pTHX_ int arena_size)
713 {
714 #if !ARENASETS
715     union arena* arp;
716
717     /* allocate and attach arena */
718     Newx(arp, PERL_ARENA_SIZE, char);
719     arp->next = PL_body_arenas;
720     PL_body_arenas = arp;
721     return arp;
722
723 #else
724     struct arena_desc* adesc;
725     struct arena_set *newroot, *aroot = (struct arena_set*) PL_body_arenas;
726     int curr;
727
728     if (!arena_size)
729         arena_size = PERL_ARENA_SIZE;
730
731     /* may need new arena-set to hold new arena */
732     if (!aroot || aroot->curr >= aroot->set_size) {
733         Newxz(newroot, 1, struct arena_set);
734         newroot->set_size = ARENAS_PER_SET;
735         newroot->next = aroot;
736         aroot = newroot;
737         DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", aroot));
738     }
739
740     /* ok, now have arena-set with at least 1 empty/available arena-desc */
741     curr = aroot->curr++;
742     adesc = &aroot->set[curr];
743     assert(!adesc->arena);
744     
745     /* old fixed-size way
746        Newxz(adesc->arena, 1, union arena);
747        adesc->size = sizeof(union arena);
748     */
749     /* new buggy way    */
750     Newxz(adesc->arena, arena_size, char);
751     adesc->size = arena_size;
752
753     /* adesc->count = sizeof(struct arena)/size; */
754     
755     DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p\n", curr, aroot));
756
757     return adesc->arena;
758 #endif
759 }
760
761 STATIC void *
762 S_more_bodies (pTHX_ size_t size, svtype sv_type)
763 {
764     dVAR;
765     void ** const root = &PL_body_roots[sv_type];
766     char *start;
767     const char *end;
768     const size_t count = PERL_ARENA_SIZE / size;
769
770     start = (char*) Perl_get_arena(aTHX_ PERL_ARENA_SIZE); /* get a raw arena */
771
772     end = start + (count-1) * size;
773
774 #if !ARENASETS
775     /* The initial slot is used to link the arenas together, so it isn't to be
776        linked into the list of ready-to-use bodies.  */
777     start += size;
778 #endif
779
780     *root = (void *)start;
781
782     while (start < end) {
783         char * const next = start + size;
784         *(void**) start = (void *)next;
785         start = next;
786     }
787     *(void **)start = 0;
788
789     return *root;
790 }
791
792 /* grab a new thing from the free list, allocating more if necessary */
793
794 /* 1st, the inline version  */
795
796 #define new_body_inline(xpv, size, sv_type) \
797     STMT_START { \
798         void ** const r3wt = &PL_body_roots[sv_type]; \
799         LOCK_SV_MUTEX; \
800         xpv = *((void **)(r3wt)) \
801           ? *((void **)(r3wt)) : S_more_bodies(aTHX_ size, sv_type); \
802         *(r3wt) = *(void**)(xpv); \
803         UNLOCK_SV_MUTEX; \
804     } STMT_END
805
806 /* now use the inline version in the proper function */
807
808 #ifndef PURIFY
809
810 /* This isn't being used with -DPURIFY, so don't declare it. Otherwise
811    compilers issue warnings.  */
812
813 STATIC void *
814 S_new_body(pTHX_ size_t size, svtype sv_type)
815 {
816     dVAR;
817     void *xpv;
818     new_body_inline(xpv, size, sv_type);
819     return xpv;
820 }
821
822 #endif
823
824 /* return a thing to the free list */
825
826 #define del_body(thing, root)                   \
827     STMT_START {                                \
828         void ** const thing_copy = (void **)thing;\
829         LOCK_SV_MUTEX;                          \
830         *thing_copy = *root;                    \
831         *root = (void*)thing_copy;              \
832         UNLOCK_SV_MUTEX;                        \
833     } STMT_END
834
835 /* 
836    Revisiting type 3 arenas, there are 4 body-types which have some
837    members that are never accessed.  They are XPV, XPVIV, XPVAV,
838    XPVHV, which have corresponding types: xpv_allocated,
839    xpviv_allocated, xpvav_allocated, xpvhv_allocated,
840
841    For these types, the arenas are carved up into *_allocated size
842    chunks, we thus avoid wasted memory for those unaccessed members.
843    When bodies are allocated, we adjust the pointer back in memory by
844    the size of the bit not allocated, so it's as if we allocated the
845    full structure.  (But things will all go boom if you write to the
846    part that is "not there", because you'll be overwriting the last
847    members of the preceding structure in memory.)
848
849    We calculate the correction using the STRUCT_OFFSET macro. For example, if
850    xpv_allocated is the same structure as XPV then the two OFFSETs sum to zero,
851    and the pointer is unchanged. If the allocated structure is smaller (no
852    initial NV actually allocated) then the net effect is to subtract the size
853    of the NV from the pointer, to return a new pointer as if an initial NV were
854    actually allocated.
855
856    This is the same trick as was used for NV and IV bodies. Ironically it
857    doesn't need to be used for NV bodies any more, because NV is now at the
858    start of the structure. IV bodies don't need it either, because they are
859    no longer allocated.  */
860
861 /* The following 2 arrays hide the above details in a pair of
862    lookup-tables, allowing us to be body-type agnostic.
863
864    size maps svtype to its body's allocated size.
865    offset maps svtype to the body-pointer adjustment needed
866
867    NB: elements in latter are 0 or <0, and are added during
868    allocation, and subtracted during deallocation.  It may be clearer
869    to invert the values, and call it shrinkage_by_svtype.
870 */
871
872 struct body_details {
873     size_t size;        /* Size to allocate  */
874     size_t copy;        /* Size of structure to copy (may be shorter)  */
875     size_t offset;
876     bool cant_upgrade;  /* Can upgrade this type */
877     bool zero_nv;       /* zero the NV when upgrading from this */
878     bool arena;         /* Allocated from an arena */
879 };
880
881 #define HADNV FALSE
882 #define NONV TRUE
883
884 #ifdef PURIFY
885 /* With -DPURFIY we allocate everything directly, and don't use arenas.
886    This seems a rather elegant way to simplify some of the code below.  */
887 #define HASARENA FALSE
888 #else
889 #define HASARENA TRUE
890 #endif
891 #define NOARENA FALSE
892
893 /* A macro to work out the offset needed to subtract from a pointer to (say)
894
895 typedef struct {
896     STRLEN      xpv_cur;
897     STRLEN      xpv_len;
898 } xpv_allocated;
899
900 to make its members accessible via a pointer to (say)
901
902 struct xpv {
903     NV          xnv_nv;
904     STRLEN      xpv_cur;
905     STRLEN      xpv_len;
906 };
907
908 */
909
910 #define relative_STRUCT_OFFSET(longer, shorter, member) \
911     (STRUCT_OFFSET(shorter, member) - STRUCT_OFFSET(longer, member))
912
913 /* Calculate the length to copy. Specifically work out the length less any
914    final padding the compiler needed to add.  See the comment in sv_upgrade
915    for why copying the padding proved to be a bug.  */
916
917 #define copy_length(type, last_member) \
918         STRUCT_OFFSET(type, last_member) \
919         + sizeof (((type*)SvANY((SV*)0))->last_member)
920
921 static const struct body_details bodies_by_type[] = {
922     {0, 0, 0, FALSE, NONV, NOARENA},
923     /* IVs are in the head, so the allocation size is 0  */
924     {0, sizeof(IV), STRUCT_OFFSET(XPVIV, xiv_iv), FALSE, NONV, NOARENA},
925     /* 8 bytes on most ILP32 with IEEE doubles */
926     {sizeof(NV), sizeof(NV), 0, FALSE, HADNV, HASARENA},
927     /* RVs are in the head now */
928     /* However, this slot is overloaded and used by the pte  */
929     {0, 0, 0, FALSE, NONV, NOARENA},
930     /* 8 bytes on most ILP32 with IEEE doubles */
931     {sizeof(xpv_allocated),
932      copy_length(XPV, xpv_len)
933      - relative_STRUCT_OFFSET(xpv_allocated, XPV, xpv_cur),
934      + relative_STRUCT_OFFSET(xpv_allocated, XPV, xpv_cur),
935      FALSE, NONV, HASARENA},
936     /* 12 */
937     {sizeof(xpviv_allocated),
938      copy_length(XPVIV, xiv_u)
939      - relative_STRUCT_OFFSET(xpviv_allocated, XPVIV, xpv_cur),
940      + relative_STRUCT_OFFSET(xpviv_allocated, XPVIV, xpv_cur),
941      FALSE, NONV, HASARENA},
942     /* 20 */
943     {sizeof(XPVNV), copy_length(XPVNV, xiv_u), 0, FALSE, HADNV, HASARENA},
944     /* 28 */
945     {sizeof(XPVMG), copy_length(XPVMG, xmg_stash), 0, FALSE, HADNV, HASARENA},
946     /* 36 */
947     {sizeof(XPVBM), sizeof(XPVBM), 0, TRUE, HADNV, HASARENA},
948     /* 48 */
949     {sizeof(XPVGV), sizeof(XPVGV), 0, TRUE, HADNV, HASARENA},
950     /* 64 */
951     {sizeof(XPVLV), sizeof(XPVLV), 0, TRUE, HADNV, HASARENA},
952     /* 20 */
953     {sizeof(xpvav_allocated),
954      copy_length(XPVAV, xmg_stash)
955      - relative_STRUCT_OFFSET(xpvav_allocated, XPVAV, xav_fill),
956      + relative_STRUCT_OFFSET(xpvav_allocated, XPVAV, xav_fill),
957      TRUE, HADNV, HASARENA},
958     /* 20 */
959     {sizeof(xpvhv_allocated),
960      copy_length(XPVHV, xmg_stash)
961      - relative_STRUCT_OFFSET(xpvhv_allocated, XPVHV, xhv_fill),
962      + relative_STRUCT_OFFSET(xpvhv_allocated, XPVHV, xhv_fill),
963      TRUE, HADNV, HASARENA},
964     /* 76 */
965     {sizeof(XPVCV), sizeof(XPVCV), 0, TRUE, HADNV, HASARENA},
966     /* 80 */
967     {sizeof(XPVFM), sizeof(XPVFM), 0, TRUE, HADNV, NOARENA},
968     /* 84 */
969     {sizeof(XPVIO), sizeof(XPVIO), 0, TRUE, HADNV, NOARENA}
970 };
971
972 #define new_body_type(sv_type)                  \
973     (void *)((char *)S_new_body(aTHX_ bodies_by_type[sv_type].size, sv_type))
974
975 #define del_body_type(p, sv_type)       \
976     del_body(p, &PL_body_roots[sv_type])
977
978
979 #define new_body_allocated(sv_type)             \
980     (void *)((char *)S_new_body(aTHX_ bodies_by_type[sv_type].size, sv_type)\
981              - bodies_by_type[sv_type].offset)
982
983 #define del_body_allocated(p, sv_type)          \
984     del_body(p + bodies_by_type[sv_type].offset, &PL_body_roots[sv_type])
985
986
987 #define my_safemalloc(s)        (void*)safemalloc(s)
988 #define my_safecalloc(s)        (void*)safecalloc(s, 1)
989 #define my_safefree(p)  safefree((char*)p)
990
991 #ifdef PURIFY
992
993 #define new_XNV()       my_safemalloc(sizeof(XPVNV))
994 #define del_XNV(p)      my_safefree(p)
995
996 #define new_XPVNV()     my_safemalloc(sizeof(XPVNV))
997 #define del_XPVNV(p)    my_safefree(p)
998
999 #define new_XPVAV()     my_safemalloc(sizeof(XPVAV))
1000 #define del_XPVAV(p)    my_safefree(p)
1001
1002 #define new_XPVHV()     my_safemalloc(sizeof(XPVHV))
1003 #define del_XPVHV(p)    my_safefree(p)
1004
1005 #define new_XPVMG()     my_safemalloc(sizeof(XPVMG))
1006 #define del_XPVMG(p)    my_safefree(p)
1007
1008 #define new_XPVGV()     my_safemalloc(sizeof(XPVGV))
1009 #define del_XPVGV(p)    my_safefree(p)
1010
1011 #else /* !PURIFY */
1012
1013 #define new_XNV()       new_body_type(SVt_NV)
1014 #define del_XNV(p)      del_body_type(p, SVt_NV)
1015
1016 #define new_XPVNV()     new_body_type(SVt_PVNV)
1017 #define del_XPVNV(p)    del_body_type(p, SVt_PVNV)
1018
1019 #define new_XPVAV()     new_body_allocated(SVt_PVAV)
1020 #define del_XPVAV(p)    del_body_allocated(p, SVt_PVAV)
1021
1022 #define new_XPVHV()     new_body_allocated(SVt_PVHV)
1023 #define del_XPVHV(p)    del_body_allocated(p, SVt_PVHV)
1024
1025 #define new_XPVMG()     new_body_type(SVt_PVMG)
1026 #define del_XPVMG(p)    del_body_type(p, SVt_PVMG)
1027
1028 #define new_XPVGV()     new_body_type(SVt_PVGV)
1029 #define del_XPVGV(p)    del_body_type(p, SVt_PVGV)
1030
1031 #endif /* PURIFY */
1032
1033 /* no arena for you! */
1034
1035 #define new_NOARENA(details) \
1036         my_safemalloc((details)->size + (details)->offset)
1037 #define new_NOARENAZ(details) \
1038         my_safecalloc((details)->size + (details)->offset)
1039
1040 /*
1041 =for apidoc sv_upgrade
1042
1043 Upgrade an SV to a more complex form.  Generally adds a new body type to the
1044 SV, then copies across as much information as possible from the old body.
1045 You generally want to use the C<SvUPGRADE> macro wrapper. See also C<svtype>.
1046
1047 =cut
1048 */
1049
1050 void
1051 Perl_sv_upgrade(pTHX_ register SV *sv, U32 new_type)
1052 {
1053     dVAR;
1054     void*       old_body;
1055     void*       new_body;
1056     const U32   old_type = SvTYPE(sv);
1057     const struct body_details *const old_type_details
1058         = bodies_by_type + old_type;
1059     const struct body_details *new_type_details = bodies_by_type + new_type;
1060
1061     if (new_type != SVt_PV && SvIsCOW(sv)) {
1062         sv_force_normal_flags(sv, 0);
1063     }
1064
1065     if (old_type == new_type)
1066         return;
1067
1068     if (old_type > new_type)
1069         Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1070                 (int)old_type, (int)new_type);
1071
1072
1073     old_body = SvANY(sv);
1074
1075     /* Copying structures onto other structures that have been neatly zeroed
1076        has a subtle gotcha. Consider XPVMG
1077
1078        +------+------+------+------+------+-------+-------+
1079        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |
1080        +------+------+------+------+------+-------+-------+
1081        0      4      8     12     16     20      24      28
1082
1083        where NVs are aligned to 8 bytes, so that sizeof that structure is
1084        actually 32 bytes long, with 4 bytes of padding at the end:
1085
1086        +------+------+------+------+------+-------+-------+------+
1087        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH | ???  |
1088        +------+------+------+------+------+-------+-------+------+
1089        0      4      8     12     16     20      24      28     32
1090
1091        so what happens if you allocate memory for this structure:
1092
1093        +------+------+------+------+------+-------+-------+------+------+...
1094        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |  GP  | NAME |
1095        +------+------+------+------+------+-------+-------+------+------+...
1096        0      4      8     12     16     20      24      28     32     36
1097
1098        zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1099        expect, because you copy the area marked ??? onto GP. Now, ??? may have
1100        started out as zero once, but it's quite possible that it isn't. So now,
1101        rather than a nicely zeroed GP, you have it pointing somewhere random.
1102        Bugs ensue.
1103
1104        (In fact, GP ends up pointing at a previous GP structure, because the
1105        principle cause of the padding in XPVMG getting garbage is a copy of
1106        sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob)
1107
1108        So we are careful and work out the size of used parts of all the
1109        structures.  */
1110
1111     switch (old_type) {
1112     case SVt_NULL:
1113         break;
1114     case SVt_IV:
1115         if (new_type < SVt_PVIV) {
1116             new_type = (new_type == SVt_NV)
1117                 ? SVt_PVNV : SVt_PVIV;
1118             new_type_details = bodies_by_type + new_type;
1119         }
1120         break;
1121     case SVt_NV:
1122         if (new_type < SVt_PVNV) {
1123             new_type = SVt_PVNV;
1124             new_type_details = bodies_by_type + new_type;
1125         }
1126         break;
1127     case SVt_RV:
1128         break;
1129     case SVt_PV:
1130         assert(new_type > SVt_PV);
1131         assert(SVt_IV < SVt_PV);
1132         assert(SVt_NV < SVt_PV);
1133         break;
1134     case SVt_PVIV:
1135         break;
1136     case SVt_PVNV:
1137         break;
1138     case SVt_PVMG:
1139         /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1140            there's no way that it can be safely upgraded, because perl.c
1141            expects to Safefree(SvANY(PL_mess_sv))  */
1142         assert(sv != PL_mess_sv);
1143         /* This flag bit is used to mean other things in other scalar types.
1144            Given that it only has meaning inside the pad, it shouldn't be set
1145            on anything that can get upgraded.  */
1146         assert((SvFLAGS(sv) & SVpad_TYPED) == 0);
1147         break;
1148     default:
1149         if (old_type_details->cant_upgrade)
1150             Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1151                        sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
1152     }
1153
1154     SvFLAGS(sv) &= ~SVTYPEMASK;
1155     SvFLAGS(sv) |= new_type;
1156
1157     /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1158        the return statements above will have triggered.  */
1159     assert (new_type != SVt_NULL);
1160     switch (new_type) {
1161     case SVt_IV:
1162         assert(old_type == SVt_NULL);
1163         SvANY(sv) = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
1164         SvIV_set(sv, 0);
1165         return;
1166     case SVt_NV:
1167         assert(old_type == SVt_NULL);
1168         SvANY(sv) = new_XNV();
1169         SvNV_set(sv, 0);
1170         return;
1171     case SVt_RV:
1172         assert(old_type == SVt_NULL);
1173         SvANY(sv) = &sv->sv_u.svu_rv;
1174         SvRV_set(sv, 0);
1175         return;
1176     case SVt_PVHV:
1177     case SVt_PVAV:
1178         assert(new_type_details->size);
1179
1180 #ifndef PURIFY  
1181         assert(new_type_details->arena);
1182         /* This points to the start of the allocated area.  */
1183         new_body_inline(new_body, new_type_details->size, new_type);
1184         Zero(new_body, new_type_details->size, char);
1185         new_body = ((char *)new_body) - new_type_details->offset;
1186 #else
1187         /* We always allocated the full length item with PURIFY. To do this
1188            we fake things so that arena is false for all 16 types..  */
1189         new_body = new_NOARENAZ(new_type_details);
1190 #endif
1191         SvANY(sv) = new_body;
1192         if (new_type == SVt_PVAV) {
1193             AvMAX(sv)   = -1;
1194             AvFILLp(sv) = -1;
1195             AvREAL_only(sv);
1196         }
1197
1198         /* SVt_NULL isn't the only thing upgraded to AV or HV.
1199            The target created by newSVrv also is, and it can have magic.
1200            However, it never has SvPVX set.
1201         */
1202         if (old_type >= SVt_RV) {
1203             assert(SvPVX_const(sv) == 0);
1204         }
1205
1206         /* Could put this in the else clause below, as PVMG must have SvPVX
1207            0 already (the assertion above)  */
1208         SvPV_set(sv, NULL);
1209
1210         if (old_type >= SVt_PVMG) {
1211             SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_magic);
1212             SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
1213         }
1214         break;
1215
1216
1217     case SVt_PVIV:
1218         /* XXX Is this still needed?  Was it ever needed?   Surely as there is
1219            no route from NV to PVIV, NOK can never be true  */
1220         assert(!SvNOKp(sv));
1221         assert(!SvNOK(sv));
1222     case SVt_PVIO:
1223     case SVt_PVFM:
1224     case SVt_PVBM:
1225     case SVt_PVGV:
1226     case SVt_PVCV:
1227     case SVt_PVLV:
1228     case SVt_PVMG:
1229     case SVt_PVNV:
1230     case SVt_PV:
1231
1232         assert(new_type_details->size);
1233         /* We always allocated the full length item with PURIFY. To do this
1234            we fake things so that arena is false for all 16 types..  */
1235         if(new_type_details->arena) {
1236             /* This points to the start of the allocated area.  */
1237             new_body_inline(new_body, new_type_details->size, new_type);
1238             Zero(new_body, new_type_details->size, char);
1239             new_body = ((char *)new_body) - new_type_details->offset;
1240         } else {
1241             new_body = new_NOARENAZ(new_type_details);
1242         }
1243         SvANY(sv) = new_body;
1244
1245         if (old_type_details->copy) {
1246             Copy((char *)old_body + old_type_details->offset,
1247                  (char *)new_body + old_type_details->offset,
1248                  old_type_details->copy, char);
1249         }
1250
1251 #ifndef NV_ZERO_IS_ALLBITS_ZERO
1252         /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
1253          * correct 0.0 for us.  Otherwise, if the old body didn't have an
1254          * NV slot, but the new one does, then we need to initialise the
1255          * freshly created NV slot with whatever the correct bit pattern is
1256          * for 0.0  */
1257         if (old_type_details->zero_nv && !new_type_details->zero_nv)
1258             SvNV_set(sv, 0);
1259 #endif
1260
1261         if (new_type == SVt_PVIO)
1262             IoPAGE_LEN(sv) = 60;
1263         if (old_type < SVt_RV)
1264             SvPV_set(sv, NULL);
1265         break;
1266     default:
1267         Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1268                    (unsigned long)new_type);
1269     }
1270
1271     if (old_type_details->size) {
1272         /* If the old body had an allocated size, then we need to free it.  */
1273 #ifdef PURIFY
1274         my_safefree(old_body);
1275 #else
1276         del_body((void*)((char*)old_body + old_type_details->offset),
1277                  &PL_body_roots[old_type]);
1278 #endif
1279     }
1280 }
1281
1282 /*
1283 =for apidoc sv_backoff
1284
1285 Remove any string offset. You should normally use the C<SvOOK_off> macro
1286 wrapper instead.
1287
1288 =cut
1289 */
1290
1291 int
1292 Perl_sv_backoff(pTHX_ register SV *sv)
1293 {
1294     assert(SvOOK(sv));
1295     assert(SvTYPE(sv) != SVt_PVHV);
1296     assert(SvTYPE(sv) != SVt_PVAV);
1297     if (SvIVX(sv)) {
1298         const char * const s = SvPVX_const(sv);
1299         SvLEN_set(sv, SvLEN(sv) + SvIVX(sv));
1300         SvPV_set(sv, SvPVX(sv) - SvIVX(sv));
1301         SvIV_set(sv, 0);
1302         Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1303     }
1304     SvFLAGS(sv) &= ~SVf_OOK;
1305     return 0;
1306 }
1307
1308 /*
1309 =for apidoc sv_grow
1310
1311 Expands the character buffer in the SV.  If necessary, uses C<sv_unref> and
1312 upgrades the SV to C<SVt_PV>.  Returns a pointer to the character buffer.
1313 Use the C<SvGROW> wrapper instead.
1314
1315 =cut
1316 */
1317
1318 char *
1319 Perl_sv_grow(pTHX_ register SV *sv, register STRLEN newlen)
1320 {
1321     register char *s;
1322
1323 #ifdef HAS_64K_LIMIT
1324     if (newlen >= 0x10000) {
1325         PerlIO_printf(Perl_debug_log,
1326                       "Allocation too large: %"UVxf"\n", (UV)newlen);
1327         my_exit(1);
1328     }
1329 #endif /* HAS_64K_LIMIT */
1330     if (SvROK(sv))
1331         sv_unref(sv);
1332     if (SvTYPE(sv) < SVt_PV) {
1333         sv_upgrade(sv, SVt_PV);
1334         s = SvPVX_mutable(sv);
1335     }
1336     else if (SvOOK(sv)) {       /* pv is offset? */
1337         sv_backoff(sv);
1338         s = SvPVX_mutable(sv);
1339         if (newlen > SvLEN(sv))
1340             newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1341 #ifdef HAS_64K_LIMIT
1342         if (newlen >= 0x10000)
1343             newlen = 0xFFFF;
1344 #endif
1345     }
1346     else
1347         s = SvPVX_mutable(sv);
1348
1349     if (newlen > SvLEN(sv)) {           /* need more room? */
1350         newlen = PERL_STRLEN_ROUNDUP(newlen);
1351         if (SvLEN(sv) && s) {
1352 #ifdef MYMALLOC
1353             const STRLEN l = malloced_size((void*)SvPVX_const(sv));
1354             if (newlen <= l) {
1355                 SvLEN_set(sv, l);
1356                 return s;
1357             } else
1358 #endif
1359             s = saferealloc(s, newlen);
1360         }
1361         else {
1362             s = safemalloc(newlen);
1363             if (SvPVX_const(sv) && SvCUR(sv)) {
1364                 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1365             }
1366         }
1367         SvPV_set(sv, s);
1368         SvLEN_set(sv, newlen);
1369     }
1370     return s;
1371 }
1372
1373 /*
1374 =for apidoc sv_setiv
1375
1376 Copies an integer into the given SV, upgrading first if necessary.
1377 Does not handle 'set' magic.  See also C<sv_setiv_mg>.
1378
1379 =cut
1380 */
1381
1382 void
1383 Perl_sv_setiv(pTHX_ register SV *sv, IV i)
1384 {
1385     dVAR;
1386     SV_CHECK_THINKFIRST_COW_DROP(sv);
1387     switch (SvTYPE(sv)) {
1388     case SVt_NULL:
1389         sv_upgrade(sv, SVt_IV);
1390         break;
1391     case SVt_NV:
1392         sv_upgrade(sv, SVt_PVNV);
1393         break;
1394     case SVt_RV:
1395     case SVt_PV:
1396         sv_upgrade(sv, SVt_PVIV);
1397         break;
1398
1399     case SVt_PVGV:
1400     case SVt_PVAV:
1401     case SVt_PVHV:
1402     case SVt_PVCV:
1403     case SVt_PVFM:
1404     case SVt_PVIO:
1405         Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1406                    OP_DESC(PL_op));
1407     }
1408     (void)SvIOK_only(sv);                       /* validate number */
1409     SvIV_set(sv, i);
1410     SvTAINT(sv);
1411 }
1412
1413 /*
1414 =for apidoc sv_setiv_mg
1415
1416 Like C<sv_setiv>, but also handles 'set' magic.
1417
1418 =cut
1419 */
1420
1421 void
1422 Perl_sv_setiv_mg(pTHX_ register SV *sv, IV i)
1423 {
1424     sv_setiv(sv,i);
1425     SvSETMAGIC(sv);
1426 }
1427
1428 /*
1429 =for apidoc sv_setuv
1430
1431 Copies an unsigned integer into the given SV, upgrading first if necessary.
1432 Does not handle 'set' magic.  See also C<sv_setuv_mg>.
1433
1434 =cut
1435 */
1436
1437 void
1438 Perl_sv_setuv(pTHX_ register SV *sv, UV u)
1439 {
1440     /* With these two if statements:
1441        u=1.49  s=0.52  cu=72.49  cs=10.64  scripts=270  tests=20865
1442
1443        without
1444        u=1.35  s=0.47  cu=73.45  cs=11.43  scripts=270  tests=20865
1445
1446        If you wish to remove them, please benchmark to see what the effect is
1447     */
1448     if (u <= (UV)IV_MAX) {
1449        sv_setiv(sv, (IV)u);
1450        return;
1451     }
1452     sv_setiv(sv, 0);
1453     SvIsUV_on(sv);
1454     SvUV_set(sv, u);
1455 }
1456
1457 /*
1458 =for apidoc sv_setuv_mg
1459
1460 Like C<sv_setuv>, but also handles 'set' magic.
1461
1462 =cut
1463 */
1464
1465 void
1466 Perl_sv_setuv_mg(pTHX_ register SV *sv, UV u)
1467 {
1468     sv_setiv(sv, 0);
1469     SvIsUV_on(sv);
1470     sv_setuv(sv,u);
1471     SvSETMAGIC(sv);
1472 }
1473
1474 /*
1475 =for apidoc sv_setnv
1476
1477 Copies a double into the given SV, upgrading first if necessary.
1478 Does not handle 'set' magic.  See also C<sv_setnv_mg>.
1479
1480 =cut
1481 */
1482
1483 void
1484 Perl_sv_setnv(pTHX_ register SV *sv, NV num)
1485 {
1486     dVAR;
1487     SV_CHECK_THINKFIRST_COW_DROP(sv);
1488     switch (SvTYPE(sv)) {
1489     case SVt_NULL:
1490     case SVt_IV:
1491         sv_upgrade(sv, SVt_NV);
1492         break;
1493     case SVt_RV:
1494     case SVt_PV:
1495     case SVt_PVIV:
1496         sv_upgrade(sv, SVt_PVNV);
1497         break;
1498
1499     case SVt_PVGV:
1500     case SVt_PVAV:
1501     case SVt_PVHV:
1502     case SVt_PVCV:
1503     case SVt_PVFM:
1504     case SVt_PVIO:
1505         Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1506                    OP_NAME(PL_op));
1507     }
1508     SvNV_set(sv, num);
1509     (void)SvNOK_only(sv);                       /* validate number */
1510     SvTAINT(sv);
1511 }
1512
1513 /*
1514 =for apidoc sv_setnv_mg
1515
1516 Like C<sv_setnv>, but also handles 'set' magic.
1517
1518 =cut
1519 */
1520
1521 void
1522 Perl_sv_setnv_mg(pTHX_ register SV *sv, NV num)
1523 {
1524     sv_setnv(sv,num);
1525     SvSETMAGIC(sv);
1526 }
1527
1528 /* Print an "isn't numeric" warning, using a cleaned-up,
1529  * printable version of the offending string
1530  */
1531
1532 STATIC void
1533 S_not_a_number(pTHX_ SV *sv)
1534 {
1535      dVAR;
1536      SV *dsv;
1537      char tmpbuf[64];
1538      const char *pv;
1539
1540      if (DO_UTF8(sv)) {
1541           dsv = sv_2mortal(newSVpvs(""));
1542           pv = sv_uni_display(dsv, sv, 10, 0);
1543      } else {
1544           char *d = tmpbuf;
1545           const char * const limit = tmpbuf + sizeof(tmpbuf) - 8;
1546           /* each *s can expand to 4 chars + "...\0",
1547              i.e. need room for 8 chars */
1548         
1549           const char *s = SvPVX_const(sv);
1550           const char * const end = s + SvCUR(sv);
1551           for ( ; s < end && d < limit; s++ ) {
1552                int ch = *s & 0xFF;
1553                if (ch & 128 && !isPRINT_LC(ch)) {
1554                     *d++ = 'M';
1555                     *d++ = '-';
1556                     ch &= 127;
1557                }
1558                if (ch == '\n') {
1559                     *d++ = '\\';
1560                     *d++ = 'n';
1561                }
1562                else if (ch == '\r') {
1563                     *d++ = '\\';
1564                     *d++ = 'r';
1565                }
1566                else if (ch == '\f') {
1567                     *d++ = '\\';
1568                     *d++ = 'f';
1569                }
1570                else if (ch == '\\') {
1571                     *d++ = '\\';
1572                     *d++ = '\\';
1573                }
1574                else if (ch == '\0') {
1575                     *d++ = '\\';
1576                     *d++ = '0';
1577                }
1578                else if (isPRINT_LC(ch))
1579                     *d++ = ch;
1580                else {
1581                     *d++ = '^';
1582                     *d++ = toCTRL(ch);
1583                }
1584           }
1585           if (s < end) {
1586                *d++ = '.';
1587                *d++ = '.';
1588                *d++ = '.';
1589           }
1590           *d = '\0';
1591           pv = tmpbuf;
1592     }
1593
1594     if (PL_op)
1595         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1596                     "Argument \"%s\" isn't numeric in %s", pv,
1597                     OP_DESC(PL_op));
1598     else
1599         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1600                     "Argument \"%s\" isn't numeric", pv);
1601 }
1602
1603 /*
1604 =for apidoc looks_like_number
1605
1606 Test if the content of an SV looks like a number (or is a number).
1607 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1608 non-numeric warning), even if your atof() doesn't grok them.
1609
1610 =cut
1611 */
1612
1613 I32
1614 Perl_looks_like_number(pTHX_ SV *sv)
1615 {
1616     register const char *sbegin;
1617     STRLEN len;
1618
1619     if (SvPOK(sv)) {
1620         sbegin = SvPVX_const(sv);
1621         len = SvCUR(sv);
1622     }
1623     else if (SvPOKp(sv))
1624         sbegin = SvPV_const(sv, len);
1625     else
1626         return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1627     return grok_number(sbegin, len, NULL);
1628 }
1629
1630 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1631    until proven guilty, assume that things are not that bad... */
1632
1633 /*
1634    NV_PRESERVES_UV:
1635
1636    As 64 bit platforms often have an NV that doesn't preserve all bits of
1637    an IV (an assumption perl has been based on to date) it becomes necessary
1638    to remove the assumption that the NV always carries enough precision to
1639    recreate the IV whenever needed, and that the NV is the canonical form.
1640    Instead, IV/UV and NV need to be given equal rights. So as to not lose
1641    precision as a side effect of conversion (which would lead to insanity
1642    and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1643    1) to distinguish between IV/UV/NV slots that have cached a valid
1644       conversion where precision was lost and IV/UV/NV slots that have a
1645       valid conversion which has lost no precision
1646    2) to ensure that if a numeric conversion to one form is requested that
1647       would lose precision, the precise conversion (or differently
1648       imprecise conversion) is also performed and cached, to prevent
1649       requests for different numeric formats on the same SV causing
1650       lossy conversion chains. (lossless conversion chains are perfectly
1651       acceptable (still))
1652
1653
1654    flags are used:
1655    SvIOKp is true if the IV slot contains a valid value
1656    SvIOK  is true only if the IV value is accurate (UV if SvIOK_UV true)
1657    SvNOKp is true if the NV slot contains a valid value
1658    SvNOK  is true only if the NV value is accurate
1659
1660    so
1661    while converting from PV to NV, check to see if converting that NV to an
1662    IV(or UV) would lose accuracy over a direct conversion from PV to
1663    IV(or UV). If it would, cache both conversions, return NV, but mark
1664    SV as IOK NOKp (ie not NOK).
1665
1666    While converting from PV to IV, check to see if converting that IV to an
1667    NV would lose accuracy over a direct conversion from PV to NV. If it
1668    would, cache both conversions, flag similarly.
1669
1670    Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1671    correctly because if IV & NV were set NV *always* overruled.
1672    Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1673    changes - now IV and NV together means that the two are interchangeable:
1674    SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1675
1676    The benefit of this is that operations such as pp_add know that if
1677    SvIOK is true for both left and right operands, then integer addition
1678    can be used instead of floating point (for cases where the result won't
1679    overflow). Before, floating point was always used, which could lead to
1680    loss of precision compared with integer addition.
1681
1682    * making IV and NV equal status should make maths accurate on 64 bit
1683      platforms
1684    * may speed up maths somewhat if pp_add and friends start to use
1685      integers when possible instead of fp. (Hopefully the overhead in
1686      looking for SvIOK and checking for overflow will not outweigh the
1687      fp to integer speedup)
1688    * will slow down integer operations (callers of SvIV) on "inaccurate"
1689      values, as the change from SvIOK to SvIOKp will cause a call into
1690      sv_2iv each time rather than a macro access direct to the IV slot
1691    * should speed up number->string conversion on integers as IV is
1692      favoured when IV and NV are equally accurate
1693
1694    ####################################################################
1695    You had better be using SvIOK_notUV if you want an IV for arithmetic:
1696    SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
1697    On the other hand, SvUOK is true iff UV.
1698    ####################################################################
1699
1700    Your mileage will vary depending your CPU's relative fp to integer
1701    performance ratio.
1702 */
1703
1704 #ifndef NV_PRESERVES_UV
1705 #  define IS_NUMBER_UNDERFLOW_IV 1
1706 #  define IS_NUMBER_UNDERFLOW_UV 2
1707 #  define IS_NUMBER_IV_AND_UV    2
1708 #  define IS_NUMBER_OVERFLOW_IV  4
1709 #  define IS_NUMBER_OVERFLOW_UV  5
1710
1711 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
1712
1713 /* For sv_2nv these three cases are "SvNOK and don't bother casting"  */
1714 STATIC int
1715 S_sv_2iuv_non_preserve(pTHX_ register SV *sv, I32 numtype)
1716 {
1717     dVAR;
1718     DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_2iuv_non '%s', IV=0x%"UVxf" NV=%"NVgf" inttype=%"UVXf"\n", SvPVX_const(sv), SvIVX(sv), SvNVX(sv), (UV)numtype));
1719     if (SvNVX(sv) < (NV)IV_MIN) {
1720         (void)SvIOKp_on(sv);
1721         (void)SvNOK_on(sv);
1722         SvIV_set(sv, IV_MIN);
1723         return IS_NUMBER_UNDERFLOW_IV;
1724     }
1725     if (SvNVX(sv) > (NV)UV_MAX) {
1726         (void)SvIOKp_on(sv);
1727         (void)SvNOK_on(sv);
1728         SvIsUV_on(sv);
1729         SvUV_set(sv, UV_MAX);
1730         return IS_NUMBER_OVERFLOW_UV;
1731     }
1732     (void)SvIOKp_on(sv);
1733     (void)SvNOK_on(sv);
1734     /* Can't use strtol etc to convert this string.  (See truth table in
1735        sv_2iv  */
1736     if (SvNVX(sv) <= (UV)IV_MAX) {
1737         SvIV_set(sv, I_V(SvNVX(sv)));
1738         if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1739             SvIOK_on(sv); /* Integer is precise. NOK, IOK */
1740         } else {
1741             /* Integer is imprecise. NOK, IOKp */
1742         }
1743         return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
1744     }
1745     SvIsUV_on(sv);
1746     SvUV_set(sv, U_V(SvNVX(sv)));
1747     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
1748         if (SvUVX(sv) == UV_MAX) {
1749             /* As we know that NVs don't preserve UVs, UV_MAX cannot
1750                possibly be preserved by NV. Hence, it must be overflow.
1751                NOK, IOKp */
1752             return IS_NUMBER_OVERFLOW_UV;
1753         }
1754         SvIOK_on(sv); /* Integer is precise. NOK, UOK */
1755     } else {
1756         /* Integer is imprecise. NOK, IOKp */
1757     }
1758     return IS_NUMBER_OVERFLOW_IV;
1759 }
1760 #endif /* !NV_PRESERVES_UV*/
1761
1762 STATIC bool
1763 S_sv_2iuv_common(pTHX_ SV *sv) {
1764     dVAR;
1765     if (SvNOKp(sv)) {
1766         /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
1767          * without also getting a cached IV/UV from it at the same time
1768          * (ie PV->NV conversion should detect loss of accuracy and cache
1769          * IV or UV at same time to avoid this. */
1770         /* IV-over-UV optimisation - choose to cache IV if possible */
1771
1772         if (SvTYPE(sv) == SVt_NV)
1773             sv_upgrade(sv, SVt_PVNV);
1774
1775         (void)SvIOKp_on(sv);    /* Must do this first, to clear any SvOOK */
1776         /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
1777            certainly cast into the IV range at IV_MAX, whereas the correct
1778            answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
1779            cases go to UV */
1780         if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
1781             SvIV_set(sv, I_V(SvNVX(sv)));
1782             if (SvNVX(sv) == (NV) SvIVX(sv)
1783 #ifndef NV_PRESERVES_UV
1784                 && (((UV)1 << NV_PRESERVES_UV_BITS) >
1785                     (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
1786                 /* Don't flag it as "accurately an integer" if the number
1787                    came from a (by definition imprecise) NV operation, and
1788                    we're outside the range of NV integer precision */
1789 #endif
1790                 ) {
1791                 SvIOK_on(sv);  /* Can this go wrong with rounding? NWC */
1792                 DEBUG_c(PerlIO_printf(Perl_debug_log,
1793                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
1794                                       PTR2UV(sv),
1795                                       SvNVX(sv),
1796                                       SvIVX(sv)));
1797
1798             } else {
1799                 /* IV not precise.  No need to convert from PV, as NV
1800                    conversion would already have cached IV if it detected
1801                    that PV->IV would be better than PV->NV->IV
1802                    flags already correct - don't set public IOK.  */
1803                 DEBUG_c(PerlIO_printf(Perl_debug_log,
1804                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
1805                                       PTR2UV(sv),
1806                                       SvNVX(sv),
1807                                       SvIVX(sv)));
1808             }
1809             /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
1810                but the cast (NV)IV_MIN rounds to a the value less (more
1811                negative) than IV_MIN which happens to be equal to SvNVX ??
1812                Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
1813                NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
1814                (NV)UVX == NVX are both true, but the values differ. :-(
1815                Hopefully for 2s complement IV_MIN is something like
1816                0x8000000000000000 which will be exact. NWC */
1817         }
1818         else {
1819             SvUV_set(sv, U_V(SvNVX(sv)));
1820             if (
1821                 (SvNVX(sv) == (NV) SvUVX(sv))
1822 #ifndef  NV_PRESERVES_UV
1823                 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
1824                 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
1825                 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
1826                 /* Don't flag it as "accurately an integer" if the number
1827                    came from a (by definition imprecise) NV operation, and
1828                    we're outside the range of NV integer precision */
1829 #endif
1830                 )
1831                 SvIOK_on(sv);
1832             SvIsUV_on(sv);
1833             DEBUG_c(PerlIO_printf(Perl_debug_log,
1834                                   "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
1835                                   PTR2UV(sv),
1836                                   SvUVX(sv),
1837                                   SvUVX(sv)));
1838         }
1839     }
1840     else if (SvPOKp(sv) && SvLEN(sv)) {
1841         UV value;
1842         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
1843         /* We want to avoid a possible problem when we cache an IV/ a UV which
1844            may be later translated to an NV, and the resulting NV is not
1845            the same as the direct translation of the initial string
1846            (eg 123.456 can shortcut to the IV 123 with atol(), but we must
1847            be careful to ensure that the value with the .456 is around if the
1848            NV value is requested in the future).
1849         
1850            This means that if we cache such an IV/a UV, we need to cache the
1851            NV as well.  Moreover, we trade speed for space, and do not
1852            cache the NV if we are sure it's not needed.
1853          */
1854
1855         /* SVt_PVNV is one higher than SVt_PVIV, hence this order  */
1856         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
1857              == IS_NUMBER_IN_UV) {
1858             /* It's definitely an integer, only upgrade to PVIV */
1859             if (SvTYPE(sv) < SVt_PVIV)
1860                 sv_upgrade(sv, SVt_PVIV);
1861             (void)SvIOK_on(sv);
1862         } else if (SvTYPE(sv) < SVt_PVNV)
1863             sv_upgrade(sv, SVt_PVNV);
1864
1865         /* If NVs preserve UVs then we only use the UV value if we know that
1866            we aren't going to call atof() below. If NVs don't preserve UVs
1867            then the value returned may have more precision than atof() will
1868            return, even though value isn't perfectly accurate.  */
1869         if ((numtype & (IS_NUMBER_IN_UV
1870 #ifdef NV_PRESERVES_UV
1871                         | IS_NUMBER_NOT_INT
1872 #endif
1873             )) == IS_NUMBER_IN_UV) {
1874             /* This won't turn off the public IOK flag if it was set above  */
1875             (void)SvIOKp_on(sv);
1876
1877             if (!(numtype & IS_NUMBER_NEG)) {
1878                 /* positive */;
1879                 if (value <= (UV)IV_MAX) {
1880                     SvIV_set(sv, (IV)value);
1881                 } else {
1882                     /* it didn't overflow, and it was positive. */
1883                     SvUV_set(sv, value);
1884                     SvIsUV_on(sv);
1885                 }
1886             } else {
1887                 /* 2s complement assumption  */
1888                 if (value <= (UV)IV_MIN) {
1889                     SvIV_set(sv, -(IV)value);
1890                 } else {
1891                     /* Too negative for an IV.  This is a double upgrade, but
1892                        I'm assuming it will be rare.  */
1893                     if (SvTYPE(sv) < SVt_PVNV)
1894                         sv_upgrade(sv, SVt_PVNV);
1895                     SvNOK_on(sv);
1896                     SvIOK_off(sv);
1897                     SvIOKp_on(sv);
1898                     SvNV_set(sv, -(NV)value);
1899                     SvIV_set(sv, IV_MIN);
1900                 }
1901             }
1902         }
1903         /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
1904            will be in the previous block to set the IV slot, and the next
1905            block to set the NV slot.  So no else here.  */
1906         
1907         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
1908             != IS_NUMBER_IN_UV) {
1909             /* It wasn't an (integer that doesn't overflow the UV). */
1910             SvNV_set(sv, Atof(SvPVX_const(sv)));
1911
1912             if (! numtype && ckWARN(WARN_NUMERIC))
1913                 not_a_number(sv);
1914
1915 #if defined(USE_LONG_DOUBLE)
1916             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" PERL_PRIgldbl ")\n",
1917                                   PTR2UV(sv), SvNVX(sv)));
1918 #else
1919             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"NVgf")\n",
1920                                   PTR2UV(sv), SvNVX(sv)));
1921 #endif
1922
1923 #ifdef NV_PRESERVES_UV
1924             (void)SvIOKp_on(sv);
1925             (void)SvNOK_on(sv);
1926             if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
1927                 SvIV_set(sv, I_V(SvNVX(sv)));
1928                 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
1929                     SvIOK_on(sv);
1930                 } else {
1931                     /* Integer is imprecise. NOK, IOKp */
1932                 }
1933                 /* UV will not work better than IV */
1934             } else {
1935                 if (SvNVX(sv) > (NV)UV_MAX) {
1936                     SvIsUV_on(sv);
1937                     /* Integer is inaccurate. NOK, IOKp, is UV */
1938                     SvUV_set(sv, UV_MAX);
1939                 } else {
1940                     SvUV_set(sv, U_V(SvNVX(sv)));
1941                     /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
1942                        NV preservse UV so can do correct comparison.  */
1943                     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
1944                         SvIOK_on(sv);
1945                     } else {
1946                         /* Integer is imprecise. NOK, IOKp, is UV */
1947                     }
1948                 }
1949                 SvIsUV_on(sv);
1950             }
1951 #else /* NV_PRESERVES_UV */
1952             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
1953                 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
1954                 /* The IV/UV slot will have been set from value returned by
1955                    grok_number above.  The NV slot has just been set using
1956                    Atof.  */
1957                 SvNOK_on(sv);
1958                 assert (SvIOKp(sv));
1959             } else {
1960                 if (((UV)1 << NV_PRESERVES_UV_BITS) >
1961                     U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
1962                     /* Small enough to preserve all bits. */
1963                     (void)SvIOKp_on(sv);
1964                     SvNOK_on(sv);
1965                     SvIV_set(sv, I_V(SvNVX(sv)));
1966                     if ((NV)(SvIVX(sv)) == SvNVX(sv))
1967                         SvIOK_on(sv);
1968                     /* Assumption: first non-preserved integer is < IV_MAX,
1969                        this NV is in the preserved range, therefore: */
1970                     if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
1971                           < (UV)IV_MAX)) {
1972                         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);
1973                     }
1974                 } else {
1975                     /* IN_UV NOT_INT
1976                          0      0       already failed to read UV.
1977                          0      1       already failed to read UV.
1978                          1      0       you won't get here in this case. IV/UV
1979                                         slot set, public IOK, Atof() unneeded.
1980                          1      1       already read UV.
1981                        so there's no point in sv_2iuv_non_preserve() attempting
1982                        to use atol, strtol, strtoul etc.  */
1983                     sv_2iuv_non_preserve (sv, numtype);
1984                 }
1985             }
1986 #endif /* NV_PRESERVES_UV */
1987         }
1988     }
1989     else  {
1990         if (!(SvFLAGS(sv) & SVs_PADTMP)) {
1991             if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
1992                 report_uninit(sv);
1993         }
1994         if (SvTYPE(sv) < SVt_IV)
1995             /* Typically the caller expects that sv_any is not NULL now.  */
1996             sv_upgrade(sv, SVt_IV);
1997         /* Return 0 from the caller.  */
1998         return TRUE;
1999     }
2000     return FALSE;
2001 }
2002
2003 /*
2004 =for apidoc sv_2iv_flags
2005
2006 Return the integer value of an SV, doing any necessary string
2007 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2008 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2009
2010 =cut
2011 */
2012
2013 IV
2014 Perl_sv_2iv_flags(pTHX_ register SV *sv, I32 flags)
2015 {
2016     dVAR;
2017     if (!sv)
2018         return 0;
2019     if (SvGMAGICAL(sv)) {
2020         if (flags & SV_GMAGIC)
2021             mg_get(sv);
2022         if (SvIOKp(sv))
2023             return SvIVX(sv);
2024         if (SvNOKp(sv)) {
2025             return I_V(SvNVX(sv));
2026         }
2027         if (SvPOKp(sv) && SvLEN(sv)) {
2028             UV value;
2029             const int numtype
2030                 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2031
2032             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2033                 == IS_NUMBER_IN_UV) {
2034                 /* It's definitely an integer */
2035                 if (numtype & IS_NUMBER_NEG) {
2036                     if (value < (UV)IV_MIN)
2037                         return -(IV)value;
2038                 } else {
2039                     if (value < (UV)IV_MAX)
2040                         return (IV)value;
2041                 }
2042             }
2043             if (!numtype) {
2044                 if (ckWARN(WARN_NUMERIC))
2045                     not_a_number(sv);
2046             }
2047             return I_V(Atof(SvPVX_const(sv)));
2048         }
2049         if (SvROK(sv)) {
2050             goto return_rok;
2051         }
2052         assert(SvTYPE(sv) >= SVt_PVMG);
2053         /* This falls through to the report_uninit inside S_sv_2iuv_common.  */
2054     } else if (SvTHINKFIRST(sv)) {
2055         if (SvROK(sv)) {
2056         return_rok:
2057             if (SvAMAGIC(sv)) {
2058                 SV * const tmpstr=AMG_CALLun(sv,numer);
2059                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2060                     return SvIV(tmpstr);
2061                 }
2062             }
2063             return PTR2IV(SvRV(sv));
2064         }
2065         if (SvIsCOW(sv)) {
2066             sv_force_normal_flags(sv, 0);
2067         }
2068         if (SvREADONLY(sv) && !SvOK(sv)) {
2069             if (ckWARN(WARN_UNINITIALIZED))
2070                 report_uninit(sv);
2071             return 0;
2072         }
2073     }
2074     if (!SvIOKp(sv)) {
2075         if (S_sv_2iuv_common(aTHX_ sv))
2076             return 0;
2077     }
2078     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2079         PTR2UV(sv),SvIVX(sv)));
2080     return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2081 }
2082
2083 /*
2084 =for apidoc sv_2uv_flags
2085
2086 Return the unsigned integer value of an SV, doing any necessary string
2087 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2088 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2089
2090 =cut
2091 */
2092
2093 UV
2094 Perl_sv_2uv_flags(pTHX_ register SV *sv, I32 flags)
2095 {
2096     dVAR;
2097     if (!sv)
2098         return 0;
2099     if (SvGMAGICAL(sv)) {
2100         if (flags & SV_GMAGIC)
2101             mg_get(sv);
2102         if (SvIOKp(sv))
2103             return SvUVX(sv);
2104         if (SvNOKp(sv))
2105             return U_V(SvNVX(sv));
2106         if (SvPOKp(sv) && SvLEN(sv)) {
2107             UV value;
2108             const int numtype
2109                 = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2110
2111             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2112                 == IS_NUMBER_IN_UV) {
2113                 /* It's definitely an integer */
2114                 if (!(numtype & IS_NUMBER_NEG))
2115                     return value;
2116             }
2117             if (!numtype) {
2118                 if (ckWARN(WARN_NUMERIC))
2119                     not_a_number(sv);
2120             }
2121             return U_V(Atof(SvPVX_const(sv)));
2122         }
2123         if (SvROK(sv)) {
2124             goto return_rok;
2125         }
2126         assert(SvTYPE(sv) >= SVt_PVMG);
2127         /* This falls through to the report_uninit inside S_sv_2iuv_common.  */
2128     } else if (SvTHINKFIRST(sv)) {
2129         if (SvROK(sv)) {
2130         return_rok:
2131             if (SvAMAGIC(sv)) {
2132                 SV *const tmpstr = AMG_CALLun(sv,numer);
2133                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2134                     return SvUV(tmpstr);
2135                 }
2136             }
2137             return PTR2UV(SvRV(sv));
2138         }
2139         if (SvIsCOW(sv)) {
2140             sv_force_normal_flags(sv, 0);
2141         }
2142         if (SvREADONLY(sv) && !SvOK(sv)) {
2143             if (ckWARN(WARN_UNINITIALIZED))
2144                 report_uninit(sv);
2145             return 0;
2146         }
2147     }
2148     if (!SvIOKp(sv)) {
2149         if (S_sv_2iuv_common(aTHX_ sv))
2150             return 0;
2151     }
2152
2153     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2154                           PTR2UV(sv),SvUVX(sv)));
2155     return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2156 }
2157
2158 /*
2159 =for apidoc sv_2nv
2160
2161 Return the num value of an SV, doing any necessary string or integer
2162 conversion, magic etc. Normally used via the C<SvNV(sv)> and C<SvNVx(sv)>
2163 macros.
2164
2165 =cut
2166 */
2167
2168 NV
2169 Perl_sv_2nv(pTHX_ register SV *sv)
2170 {
2171     dVAR;
2172     if (!sv)
2173         return 0.0;
2174     if (SvGMAGICAL(sv)) {
2175         mg_get(sv);
2176         if (SvNOKp(sv))
2177             return SvNVX(sv);
2178         if (SvPOKp(sv) && SvLEN(sv)) {
2179             if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2180                 !grok_number(SvPVX_const(sv), SvCUR(sv), NULL))
2181                 not_a_number(sv);
2182             return Atof(SvPVX_const(sv));
2183         }
2184         if (SvIOKp(sv)) {
2185             if (SvIsUV(sv))
2186                 return (NV)SvUVX(sv);
2187             else
2188                 return (NV)SvIVX(sv);
2189         }
2190         if (SvROK(sv)) {
2191             goto return_rok;
2192         }
2193         assert(SvTYPE(sv) >= SVt_PVMG);
2194         /* This falls through to the report_uninit near the end of the
2195            function. */
2196     } else if (SvTHINKFIRST(sv)) {
2197         if (SvROK(sv)) {
2198         return_rok:
2199             if (SvAMAGIC(sv)) {
2200                 SV *const tmpstr = AMG_CALLun(sv,numer);
2201                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2202                     return SvNV(tmpstr);
2203                 }
2204             }
2205             return PTR2NV(SvRV(sv));
2206         }
2207         if (SvIsCOW(sv)) {
2208             sv_force_normal_flags(sv, 0);
2209         }
2210         if (SvREADONLY(sv) && !SvOK(sv)) {
2211             if (ckWARN(WARN_UNINITIALIZED))
2212                 report_uninit(sv);
2213             return 0.0;
2214         }
2215     }
2216     if (SvTYPE(sv) < SVt_NV) {
2217         /* The logic to use SVt_PVNV if necessary is in sv_upgrade.  */
2218         sv_upgrade(sv, SVt_NV);
2219 #ifdef USE_LONG_DOUBLE
2220         DEBUG_c({
2221             STORE_NUMERIC_LOCAL_SET_STANDARD();
2222             PerlIO_printf(Perl_debug_log,
2223                           "0x%"UVxf" num(%" PERL_PRIgldbl ")\n",
2224                           PTR2UV(sv), SvNVX(sv));
2225             RESTORE_NUMERIC_LOCAL();
2226         });
2227 #else
2228         DEBUG_c({
2229             STORE_NUMERIC_LOCAL_SET_STANDARD();
2230             PerlIO_printf(Perl_debug_log, "0x%"UVxf" num(%"NVgf")\n",
2231                           PTR2UV(sv), SvNVX(sv));
2232             RESTORE_NUMERIC_LOCAL();
2233         });
2234 #endif
2235     }
2236     else if (SvTYPE(sv) < SVt_PVNV)
2237         sv_upgrade(sv, SVt_PVNV);
2238     if (SvNOKp(sv)) {
2239         return SvNVX(sv);
2240     }
2241     if (SvIOKp(sv)) {
2242         SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2243 #ifdef NV_PRESERVES_UV
2244         SvNOK_on(sv);
2245 #else
2246         /* Only set the public NV OK flag if this NV preserves the IV  */
2247         /* Check it's not 0xFFFFFFFFFFFFFFFF */
2248         if (SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2249                        : (SvIVX(sv) == I_V(SvNVX(sv))))
2250             SvNOK_on(sv);
2251         else
2252             SvNOKp_on(sv);
2253 #endif
2254     }
2255     else if (SvPOKp(sv) && SvLEN(sv)) {
2256         UV value;
2257         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2258         if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2259             not_a_number(sv);
2260 #ifdef NV_PRESERVES_UV
2261         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2262             == IS_NUMBER_IN_UV) {
2263             /* It's definitely an integer */
2264             SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2265         } else
2266             SvNV_set(sv, Atof(SvPVX_const(sv)));
2267         SvNOK_on(sv);
2268 #else
2269         SvNV_set(sv, Atof(SvPVX_const(sv)));
2270         /* Only set the public NV OK flag if this NV preserves the value in
2271            the PV at least as well as an IV/UV would.
2272            Not sure how to do this 100% reliably. */
2273         /* if that shift count is out of range then Configure's test is
2274            wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2275            UV_BITS */
2276         if (((UV)1 << NV_PRESERVES_UV_BITS) >
2277             U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2278             SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2279         } else if (!(numtype & IS_NUMBER_IN_UV)) {
2280             /* Can't use strtol etc to convert this string, so don't try.
2281                sv_2iv and sv_2uv will use the NV to convert, not the PV.  */
2282             SvNOK_on(sv);
2283         } else {
2284             /* value has been set.  It may not be precise.  */
2285             if ((numtype & IS_NUMBER_NEG) && (value > (UV)IV_MIN)) {
2286                 /* 2s complement assumption for (UV)IV_MIN  */
2287                 SvNOK_on(sv); /* Integer is too negative.  */
2288             } else {
2289                 SvNOKp_on(sv);
2290                 SvIOKp_on(sv);
2291
2292                 if (numtype & IS_NUMBER_NEG) {
2293                     SvIV_set(sv, -(IV)value);
2294                 } else if (value <= (UV)IV_MAX) {
2295                     SvIV_set(sv, (IV)value);
2296                 } else {
2297                     SvUV_set(sv, value);
2298                     SvIsUV_on(sv);
2299                 }
2300
2301                 if (numtype & IS_NUMBER_NOT_INT) {
2302                     /* I believe that even if the original PV had decimals,
2303                        they are lost beyond the limit of the FP precision.
2304                        However, neither is canonical, so both only get p
2305                        flags.  NWC, 2000/11/25 */
2306                     /* Both already have p flags, so do nothing */
2307                 } else {
2308                     const NV nv = SvNVX(sv);
2309                     if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2310                         if (SvIVX(sv) == I_V(nv)) {
2311                             SvNOK_on(sv);
2312                         } else {
2313                             /* It had no "." so it must be integer.  */
2314                         }
2315                         SvIOK_on(sv);
2316                     } else {
2317                         /* between IV_MAX and NV(UV_MAX).
2318                            Could be slightly > UV_MAX */
2319
2320                         if (numtype & IS_NUMBER_NOT_INT) {
2321                             /* UV and NV both imprecise.  */
2322                         } else {
2323                             const UV nv_as_uv = U_V(nv);
2324
2325                             if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2326                                 SvNOK_on(sv);
2327                             }
2328                             SvIOK_on(sv);
2329                         }
2330                     }
2331                 }
2332             }
2333         }
2334 #endif /* NV_PRESERVES_UV */
2335     }
2336     else  {
2337         if (!PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP) && ckWARN(WARN_UNINITIALIZED))
2338             report_uninit(sv);
2339         assert (SvTYPE(sv) >= SVt_NV);
2340         /* Typically the caller expects that sv_any is not NULL now.  */
2341         /* XXX Ilya implies that this is a bug in callers that assume this
2342            and ideally should be fixed.  */
2343         return 0.0;
2344     }
2345 #if defined(USE_LONG_DOUBLE)
2346     DEBUG_c({
2347         STORE_NUMERIC_LOCAL_SET_STANDARD();
2348         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" PERL_PRIgldbl ")\n",
2349                       PTR2UV(sv), SvNVX(sv));
2350         RESTORE_NUMERIC_LOCAL();
2351     });
2352 #else
2353     DEBUG_c({
2354         STORE_NUMERIC_LOCAL_SET_STANDARD();
2355         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 1nv(%"NVgf")\n",
2356                       PTR2UV(sv), SvNVX(sv));
2357         RESTORE_NUMERIC_LOCAL();
2358     });
2359 #endif
2360     return SvNVX(sv);
2361 }
2362
2363 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2364  * UV as a string towards the end of buf, and return pointers to start and
2365  * end of it.
2366  *
2367  * We assume that buf is at least TYPE_CHARS(UV) long.
2368  */
2369
2370 static char *
2371 S_uiv_2buf(char *buf, IV iv, UV uv, int is_uv, char **peob)
2372 {
2373     char *ptr = buf + TYPE_CHARS(UV);
2374     char * const ebuf = ptr;
2375     int sign;
2376
2377     if (is_uv)
2378         sign = 0;
2379     else if (iv >= 0) {
2380         uv = iv;
2381         sign = 0;
2382     } else {
2383         uv = -iv;
2384         sign = 1;
2385     }
2386     do {
2387         *--ptr = '0' + (char)(uv % 10);
2388     } while (uv /= 10);
2389     if (sign)
2390         *--ptr = '-';
2391     *peob = ebuf;
2392     return ptr;
2393 }
2394
2395 /* stringify_regexp(): private routine for use by sv_2pv_flags(): converts
2396  * a regexp to its stringified form.
2397  */
2398
2399 static char *
2400 S_stringify_regexp(pTHX_ SV *sv, MAGIC *mg, STRLEN *lp) {
2401     dVAR;
2402     const regexp * const re = (regexp *)mg->mg_obj;
2403
2404     if (!mg->mg_ptr) {
2405         const char *fptr = "msix";
2406         char reflags[6];
2407         char ch;
2408         int left = 0;
2409         int right = 4;
2410         bool need_newline = 0;
2411         U16 reganch = (U16)((re->reganch & PMf_COMPILETIME) >> 12);
2412
2413         while((ch = *fptr++)) {
2414             if(reganch & 1) {
2415                 reflags[left++] = ch;
2416             }
2417             else {
2418                 reflags[right--] = ch;
2419             }
2420             reganch >>= 1;
2421         }
2422         if(left != 4) {
2423             reflags[left] = '-';
2424             left = 5;
2425         }
2426
2427         mg->mg_len = re->prelen + 4 + left;
2428         /*
2429          * If /x was used, we have to worry about a regex ending with a
2430          * comment later being embedded within another regex. If so, we don't
2431          * want this regex's "commentization" to leak out to the right part of
2432          * the enclosing regex, we must cap it with a newline.
2433          *
2434          * So, if /x was used, we scan backwards from the end of the regex. If
2435          * we find a '#' before we find a newline, we need to add a newline
2436          * ourself. If we find a '\n' first (or if we don't find '#' or '\n'),
2437          * we don't need to add anything.  -jfriedl
2438          */
2439         if (PMf_EXTENDED & re->reganch) {
2440             const char *endptr = re->precomp + re->prelen;
2441             while (endptr >= re->precomp) {
2442                 const char c = *(endptr--);
2443                 if (c == '\n')
2444                     break; /* don't need another */
2445                 if (c == '#') {
2446                     /* we end while in a comment, so we need a newline */
2447                     mg->mg_len++; /* save space for it */
2448                     need_newline = 1; /* note to add it */
2449                     break;
2450                 }
2451             }
2452         }
2453
2454         Newx(mg->mg_ptr, mg->mg_len + 1 + left, char);
2455         mg->mg_ptr[0] = '(';
2456         mg->mg_ptr[1] = '?';
2457         Copy(reflags, mg->mg_ptr+2, left, char);
2458         *(mg->mg_ptr+left+2) = ':';
2459         Copy(re->precomp, mg->mg_ptr+3+left, re->prelen, char);
2460         if (need_newline)
2461             mg->mg_ptr[mg->mg_len - 2] = '\n';
2462         mg->mg_ptr[mg->mg_len - 1] = ')';
2463         mg->mg_ptr[mg->mg_len] = 0;
2464     }
2465     PL_reginterp_cnt += re->program[0].next_off;
2466     
2467     if (re->reganch & ROPT_UTF8)
2468         SvUTF8_on(sv);
2469     else
2470         SvUTF8_off(sv);
2471     if (lp)
2472         *lp = mg->mg_len;
2473     return mg->mg_ptr;
2474 }
2475
2476 /*
2477 =for apidoc sv_2pv_flags
2478
2479 Returns a pointer to the string value of an SV, and sets *lp to its length.
2480 If flags includes SV_GMAGIC, does an mg_get() first. Coerces sv to a string
2481 if necessary.
2482 Normally invoked via the C<SvPV_flags> macro. C<sv_2pv()> and C<sv_2pv_nomg>
2483 usually end up here too.
2484
2485 =cut
2486 */
2487
2488 char *
2489 Perl_sv_2pv_flags(pTHX_ register SV *sv, STRLEN *lp, I32 flags)
2490 {
2491     dVAR;
2492     register char *s;
2493
2494     if (!sv) {
2495         if (lp)
2496             *lp = 0;
2497         return (char *)"";
2498     }
2499     if (SvGMAGICAL(sv)) {
2500         if (flags & SV_GMAGIC)
2501             mg_get(sv);
2502         if (SvPOKp(sv)) {
2503             if (lp)
2504                 *lp = SvCUR(sv);
2505             if (flags & SV_MUTABLE_RETURN)
2506                 return SvPVX_mutable(sv);
2507             if (flags & SV_CONST_RETURN)
2508                 return (char *)SvPVX_const(sv);
2509             return SvPVX(sv);
2510         }
2511         if (SvIOKp(sv) || SvNOKp(sv)) {
2512             char tbuf[64];  /* Must fit sprintf/Gconvert of longest IV/NV */
2513             STRLEN len;
2514
2515             if (SvIOKp(sv)) {
2516                 len = SvIsUV(sv) ? my_sprintf(tbuf,"%"UVuf, (UV)SvUVX(sv))
2517                     : my_sprintf(tbuf,"%"IVdf, (IV)SvIVX(sv));
2518             } else {
2519                 Gconvert(SvNVX(sv), NV_DIG, 0, tbuf);
2520                 len = strlen(tbuf);
2521             }
2522             if (SvROK(sv)) {    /* XXX Skip this when sv_pvn_force calls */
2523                 /* Sneaky stuff here */
2524                 SV * const tsv = newSVpvn(tbuf, len);
2525
2526                 sv_2mortal(tsv);
2527                 if (lp)
2528                     *lp = SvCUR(tsv);
2529                 return SvPVX(tsv);
2530             }
2531             else {
2532                 dVAR;
2533
2534 #ifdef FIXNEGATIVEZERO
2535                 if (len == 2 && tbuf[0] == '-' && tbuf[1] == '0') {
2536                     tbuf[0] = '0';
2537                     tbuf[1] = 0;
2538                     len = 1;
2539                 }
2540 #endif
2541                 SvUPGRADE(sv, SVt_PV);
2542                 if (lp)
2543                     *lp = len;
2544                 s = SvGROW_mutable(sv, len + 1);
2545                 SvCUR_set(sv, len);
2546                 SvPOKp_on(sv);
2547                 return memcpy(s, tbuf, len + 1);
2548             }
2549         }
2550         if (SvROK(sv)) {
2551             goto return_rok;
2552         }
2553         assert(SvTYPE(sv) >= SVt_PVMG);
2554         /* This falls through to the report_uninit near the end of the
2555            function. */
2556     } else if (SvTHINKFIRST(sv)) {
2557         if (SvROK(sv)) {
2558         return_rok:
2559             if (SvAMAGIC(sv)) {
2560                 SV *const tmpstr = AMG_CALLun(sv,string);
2561                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2562                     /* Unwrap this:  */
2563                     /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2564                      */
2565
2566                     char *pv;
2567                     if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2568                         if (flags & SV_CONST_RETURN) {
2569                             pv = (char *) SvPVX_const(tmpstr);
2570                         } else {
2571                             pv = (flags & SV_MUTABLE_RETURN)
2572                                 ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2573                         }
2574                         if (lp)
2575                             *lp = SvCUR(tmpstr);
2576                     } else {
2577                         pv = sv_2pv_flags(tmpstr, lp, flags);
2578                     }
2579                     if (SvUTF8(tmpstr))
2580                         SvUTF8_on(sv);
2581                     else
2582                         SvUTF8_off(sv);
2583                     return pv;
2584                 }
2585             }
2586             {
2587                 SV *tsv;
2588                 MAGIC *mg;
2589                 const SV *const referent = (SV*)SvRV(sv);
2590
2591                 if (!referent) {
2592                     tsv = sv_2mortal(newSVpvs("NULLREF"));
2593                 } else if (SvTYPE(referent) == SVt_PVMG
2594                            && ((SvFLAGS(referent) &
2595                                 (SVs_OBJECT|SVf_OK|SVs_GMG|SVs_SMG|SVs_RMG))
2596                                == (SVs_OBJECT|SVs_SMG))
2597                            && (mg = mg_find(referent, PERL_MAGIC_qr))) {
2598                     return stringify_regexp(sv, mg, lp);
2599                 } else {
2600                     const char *const typestr = sv_reftype(referent, 0);
2601
2602                     tsv = sv_newmortal();
2603                     if (SvOBJECT(referent)) {
2604                         const char *const name = HvNAME_get(SvSTASH(referent));
2605                         Perl_sv_setpvf(aTHX_ tsv, "%s=%s(0x%"UVxf")",
2606                                        name ? name : "__ANON__" , typestr,
2607                                        PTR2UV(referent));
2608                     }
2609                     else
2610                         Perl_sv_setpvf(aTHX_ tsv, "%s(0x%"UVxf")", typestr,
2611                                        PTR2UV(referent));
2612                 }
2613                 if (lp)
2614                     *lp = SvCUR(tsv);
2615                 return SvPVX(tsv);
2616             }
2617         }
2618         if (SvREADONLY(sv) && !SvOK(sv)) {
2619             if (ckWARN(WARN_UNINITIALIZED))
2620                 report_uninit(sv);
2621             if (lp)
2622                 *lp = 0;
2623             return (char *)"";
2624         }
2625     }
2626     if (SvIOK(sv) || ((SvIOKp(sv) && !SvNOKp(sv)))) {
2627         /* I'm assuming that if both IV and NV are equally valid then
2628            converting the IV is going to be more efficient */
2629         const U32 isIOK = SvIOK(sv);
2630         const U32 isUIOK = SvIsUV(sv);
2631         char buf[TYPE_CHARS(UV)];
2632         char *ebuf, *ptr;
2633
2634         if (SvTYPE(sv) < SVt_PVIV)
2635             sv_upgrade(sv, SVt_PVIV);
2636         ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
2637         /* inlined from sv_setpvn */
2638         SvGROW_mutable(sv, (STRLEN)(ebuf - ptr + 1));
2639         Move(ptr,SvPVX_mutable(sv),ebuf - ptr,char);
2640         SvCUR_set(sv, ebuf - ptr);
2641         s = SvEND(sv);
2642         *s = '\0';
2643         if (isIOK)
2644             SvIOK_on(sv);
2645         else
2646             SvIOKp_on(sv);
2647         if (isUIOK)
2648             SvIsUV_on(sv);
2649     }
2650     else if (SvNOKp(sv)) {
2651         const int olderrno = errno;
2652         if (SvTYPE(sv) < SVt_PVNV)
2653             sv_upgrade(sv, SVt_PVNV);
2654         /* The +20 is pure guesswork.  Configure test needed. --jhi */
2655         s = SvGROW_mutable(sv, NV_DIG + 20);
2656         /* some Xenix systems wipe out errno here */
2657 #ifdef apollo
2658         if (SvNVX(sv) == 0.0)
2659             (void)strcpy(s,"0");
2660         else
2661 #endif /*apollo*/
2662         {
2663             Gconvert(SvNVX(sv), NV_DIG, 0, s);
2664         }
2665         errno = olderrno;
2666 #ifdef FIXNEGATIVEZERO
2667         if (*s == '-' && s[1] == '0' && !s[2])
2668             strcpy(s,"0");
2669 #endif
2670         while (*s) s++;
2671 #ifdef hcx
2672         if (s[-1] == '.')
2673             *--s = '\0';
2674 #endif
2675     }
2676     else {
2677         if (!PL_localizing && !(SvFLAGS(sv) & SVs_PADTMP) && ckWARN(WARN_UNINITIALIZED))
2678             report_uninit(sv);
2679         if (lp)
2680             *lp = 0;
2681         if (SvTYPE(sv) < SVt_PV)
2682             /* Typically the caller expects that sv_any is not NULL now.  */
2683             sv_upgrade(sv, SVt_PV);
2684         return (char *)"";
2685     }
2686     {
2687         const STRLEN len = s - SvPVX_const(sv);
2688         if (lp) 
2689             *lp = len;
2690         SvCUR_set(sv, len);
2691     }
2692     SvPOK_on(sv);
2693     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
2694                           PTR2UV(sv),SvPVX_const(sv)));
2695     if (flags & SV_CONST_RETURN)
2696         return (char *)SvPVX_const(sv);
2697     if (flags & SV_MUTABLE_RETURN)
2698         return SvPVX_mutable(sv);
2699     return SvPVX(sv);
2700 }
2701
2702 /*
2703 =for apidoc sv_copypv
2704
2705 Copies a stringified representation of the source SV into the
2706 destination SV.  Automatically performs any necessary mg_get and
2707 coercion of numeric values into strings.  Guaranteed to preserve
2708 UTF-8 flag even from overloaded objects.  Similar in nature to
2709 sv_2pv[_flags] but operates directly on an SV instead of just the
2710 string.  Mostly uses sv_2pv_flags to do its work, except when that
2711 would lose the UTF-8'ness of the PV.
2712
2713 =cut
2714 */
2715
2716 void
2717 Perl_sv_copypv(pTHX_ SV *dsv, register SV *ssv)
2718 {
2719     STRLEN len;
2720     const char * const s = SvPV_const(ssv,len);
2721     sv_setpvn(dsv,s,len);
2722     if (SvUTF8(ssv))
2723         SvUTF8_on(dsv);
2724     else
2725         SvUTF8_off(dsv);
2726 }
2727
2728 /*
2729 =for apidoc sv_2pvbyte
2730
2731 Return a pointer to the byte-encoded representation of the SV, and set *lp
2732 to its length.  May cause the SV to be downgraded from UTF-8 as a
2733 side-effect.
2734
2735 Usually accessed via the C<SvPVbyte> macro.
2736
2737 =cut
2738 */
2739
2740 char *
2741 Perl_sv_2pvbyte(pTHX_ register SV *sv, STRLEN *lp)
2742 {
2743     sv_utf8_downgrade(sv,0);
2744     return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
2745 }
2746
2747 /*
2748 =for apidoc sv_2pvutf8
2749
2750 Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
2751 to its length.  May cause the SV to be upgraded to UTF-8 as a side-effect.
2752
2753 Usually accessed via the C<SvPVutf8> macro.
2754
2755 =cut
2756 */
2757
2758 char *
2759 Perl_sv_2pvutf8(pTHX_ register SV *sv, STRLEN *lp)
2760 {
2761     sv_utf8_upgrade(sv);
2762     return lp ? SvPV(sv,*lp) : SvPV_nolen(sv);
2763 }
2764
2765
2766 /*
2767 =for apidoc sv_2bool
2768
2769 This function is only called on magical items, and is only used by
2770 sv_true() or its macro equivalent.
2771
2772 =cut
2773 */
2774
2775 bool
2776 Perl_sv_2bool(pTHX_ register SV *sv)
2777 {
2778     dVAR;
2779     SvGETMAGIC(sv);
2780
2781     if (!SvOK(sv))
2782         return 0;
2783     if (SvROK(sv)) {
2784         if (SvAMAGIC(sv)) {
2785             SV * const tmpsv = AMG_CALLun(sv,bool_);
2786             if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2787                 return (bool)SvTRUE(tmpsv);
2788         }
2789         return SvRV(sv) != 0;
2790     }
2791     if (SvPOKp(sv)) {
2792         register XPV* const Xpvtmp = (XPV*)SvANY(sv);
2793         if (Xpvtmp &&
2794                 (*sv->sv_u.svu_pv > '0' ||
2795                 Xpvtmp->xpv_cur > 1 ||
2796                 (Xpvtmp->xpv_cur && *sv->sv_u.svu_pv != '0')))
2797             return 1;
2798         else
2799             return 0;
2800     }
2801     else {
2802         if (SvIOKp(sv))
2803             return SvIVX(sv) != 0;
2804         else {
2805             if (SvNOKp(sv))
2806                 return SvNVX(sv) != 0.0;
2807             else
2808                 return FALSE;
2809         }
2810     }
2811 }
2812
2813 /*
2814 =for apidoc sv_utf8_upgrade
2815
2816 Converts the PV of an SV to its UTF-8-encoded form.
2817 Forces the SV to string form if it is not already.
2818 Always sets the SvUTF8 flag to avoid future validity checks even
2819 if all the bytes have hibit clear.
2820
2821 This is not as a general purpose byte encoding to Unicode interface:
2822 use the Encode extension for that.
2823
2824 =for apidoc sv_utf8_upgrade_flags
2825
2826 Converts the PV of an SV to its UTF-8-encoded form.
2827 Forces the SV to string form if it is not already.
2828 Always sets the SvUTF8 flag to avoid future validity checks even
2829 if all the bytes have hibit clear. If C<flags> has C<SV_GMAGIC> bit set,
2830 will C<mg_get> on C<sv> if appropriate, else not. C<sv_utf8_upgrade> and
2831 C<sv_utf8_upgrade_nomg> are implemented in terms of this function.
2832
2833 This is not as a general purpose byte encoding to Unicode interface:
2834 use the Encode extension for that.
2835
2836 =cut
2837 */
2838
2839 STRLEN
2840 Perl_sv_utf8_upgrade_flags(pTHX_ register SV *sv, I32 flags)
2841 {
2842     dVAR;
2843     if (sv == &PL_sv_undef)
2844         return 0;
2845     if (!SvPOK(sv)) {
2846         STRLEN len = 0;
2847         if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
2848             (void) sv_2pv_flags(sv,&len, flags);
2849             if (SvUTF8(sv))
2850                 return len;
2851         } else {
2852             (void) SvPV_force(sv,len);
2853         }
2854     }
2855
2856     if (SvUTF8(sv)) {
2857         return SvCUR(sv);
2858     }
2859
2860     if (SvIsCOW(sv)) {
2861         sv_force_normal_flags(sv, 0);
2862     }
2863
2864     if (PL_encoding && !(flags & SV_UTF8_NO_ENCODING))
2865         sv_recode_to_utf8(sv, PL_encoding);
2866     else { /* Assume Latin-1/EBCDIC */
2867         /* This function could be much more efficient if we
2868          * had a FLAG in SVs to signal if there are any hibit
2869          * chars in the PV.  Given that there isn't such a flag
2870          * make the loop as fast as possible. */
2871         const U8 * const s = (U8 *) SvPVX_const(sv);
2872         const U8 * const e = (U8 *) SvEND(sv);
2873         const U8 *t = s;
2874         
2875         while (t < e) {
2876             const U8 ch = *t++;
2877             /* Check for hi bit */
2878             if (!NATIVE_IS_INVARIANT(ch)) {
2879                 STRLEN len = SvCUR(sv) + 1; /* Plus the \0 */
2880                 U8 * const recoded = bytes_to_utf8((U8*)s, &len);
2881
2882                 SvPV_free(sv); /* No longer using what was there before. */
2883                 SvPV_set(sv, (char*)recoded);
2884                 SvCUR_set(sv, len - 1);
2885                 SvLEN_set(sv, len); /* No longer know the real size. */
2886                 break;
2887             }
2888         }
2889         /* Mark as UTF-8 even if no hibit - saves scanning loop */
2890         SvUTF8_on(sv);
2891     }
2892     return SvCUR(sv);
2893 }
2894
2895 /*
2896 =for apidoc sv_utf8_downgrade
2897
2898 Attempts to convert the PV of an SV from characters to bytes.
2899 If the PV contains a character beyond byte, this conversion will fail;
2900 in this case, either returns false or, if C<fail_ok> is not
2901 true, croaks.
2902
2903 This is not as a general purpose Unicode to byte encoding interface:
2904 use the Encode extension for that.
2905
2906 =cut
2907 */
2908
2909 bool
2910 Perl_sv_utf8_downgrade(pTHX_ register SV* sv, bool fail_ok)
2911 {
2912     dVAR;
2913     if (SvPOKp(sv) && SvUTF8(sv)) {
2914         if (SvCUR(sv)) {
2915             U8 *s;
2916             STRLEN len;
2917
2918             if (SvIsCOW(sv)) {
2919                 sv_force_normal_flags(sv, 0);
2920             }
2921             s = (U8 *) SvPV(sv, len);
2922             if (!utf8_to_bytes(s, &len)) {
2923                 if (fail_ok)
2924                     return FALSE;
2925                 else {
2926                     if (PL_op)
2927                         Perl_croak(aTHX_ "Wide character in %s",
2928                                    OP_DESC(PL_op));
2929                     else
2930                         Perl_croak(aTHX_ "Wide character");
2931                 }
2932             }
2933             SvCUR_set(sv, len);
2934         }
2935     }
2936     SvUTF8_off(sv);
2937     return TRUE;
2938 }
2939
2940 /*
2941 =for apidoc sv_utf8_encode
2942
2943 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
2944 flag off so that it looks like octets again.
2945
2946 =cut
2947 */
2948
2949 void
2950 Perl_sv_utf8_encode(pTHX_ register SV *sv)
2951 {
2952     (void) sv_utf8_upgrade(sv);
2953     if (SvIsCOW(sv)) {
2954         sv_force_normal_flags(sv, 0);
2955     }
2956     if (SvREADONLY(sv)) {
2957         Perl_croak(aTHX_ PL_no_modify);
2958     }
2959     SvUTF8_off(sv);
2960 }
2961
2962 /*
2963 =for apidoc sv_utf8_decode
2964
2965 If the PV of the SV is an octet sequence in UTF-8
2966 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
2967 so that it looks like a character. If the PV contains only single-byte
2968 characters, the C<SvUTF8> flag stays being off.
2969 Scans PV for validity and returns false if the PV is invalid UTF-8.
2970
2971 =cut
2972 */
2973
2974 bool
2975 Perl_sv_utf8_decode(pTHX_ register SV *sv)
2976 {
2977     if (SvPOKp(sv)) {
2978         const U8 *c;
2979         const U8 *e;
2980
2981         /* The octets may have got themselves encoded - get them back as
2982          * bytes
2983          */
2984         if (!sv_utf8_downgrade(sv, TRUE))
2985             return FALSE;
2986
2987         /* it is actually just a matter of turning the utf8 flag on, but
2988          * we want to make sure everything inside is valid utf8 first.
2989          */
2990         c = (const U8 *) SvPVX_const(sv);
2991         if (!is_utf8_string(c, SvCUR(sv)+1))
2992             return FALSE;
2993         e = (const U8 *) SvEND(sv);
2994         while (c < e) {
2995             const U8 ch = *c++;
2996             if (!UTF8_IS_INVARIANT(ch)) {
2997                 SvUTF8_on(sv);
2998                 break;
2999             }
3000         }
3001     }
3002     return TRUE;
3003 }
3004
3005 /*
3006 =for apidoc sv_setsv
3007
3008 Copies the contents of the source SV C<ssv> into the destination SV
3009 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3010 function if the source SV needs to be reused. Does not handle 'set' magic.
3011 Loosely speaking, it performs a copy-by-value, obliterating any previous
3012 content of the destination.
3013
3014 You probably want to use one of the assortment of wrappers, such as
3015 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3016 C<SvSetMagicSV_nosteal>.
3017
3018 =for apidoc sv_setsv_flags
3019
3020 Copies the contents of the source SV C<ssv> into the destination SV
3021 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3022 function if the source SV needs to be reused. Does not handle 'set' magic.
3023 Loosely speaking, it performs a copy-by-value, obliterating any previous
3024 content of the destination.
3025 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3026 C<ssv> if appropriate, else not. If the C<flags> parameter has the
3027 C<NOSTEAL> bit set then the buffers of temps will not be stolen. <sv_setsv>
3028 and C<sv_setsv_nomg> are implemented in terms of this function.
3029
3030 You probably want to use one of the assortment of wrappers, such as
3031 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3032 C<SvSetMagicSV_nosteal>.
3033
3034 This is the primary function for copying scalars, and most other
3035 copy-ish functions and macros use this underneath.
3036
3037 =cut
3038 */
3039
3040 static void
3041 S_glob_assign(pTHX_ SV *dstr, SV *sstr, const int dtype)
3042 {
3043     if (dtype != SVt_PVGV) {
3044         const char * const name = GvNAME(sstr);
3045         const STRLEN len = GvNAMELEN(sstr);
3046         /* don't upgrade SVt_PVLV: it can hold a glob */
3047         if (dtype != SVt_PVLV)
3048             sv_upgrade(dstr, SVt_PVGV);
3049         sv_magic(dstr, dstr, PERL_MAGIC_glob, NULL, 0);
3050         GvSTASH(dstr) = GvSTASH(sstr);
3051         if (GvSTASH(dstr))
3052             Perl_sv_add_backref(aTHX_ (SV*)GvSTASH(dstr), dstr);
3053         GvNAME(dstr) = savepvn(name, len);
3054         GvNAMELEN(dstr) = len;
3055         SvFAKE_on(dstr);        /* can coerce to non-glob */
3056     }
3057
3058 #ifdef GV_UNIQUE_CHECK
3059     if (GvUNIQUE((GV*)dstr)) {
3060         Perl_croak(aTHX_ PL_no_modify);
3061     }
3062 #endif
3063
3064     (void)SvOK_off(dstr);
3065     GvINTRO_off(dstr);          /* one-shot flag */
3066     gp_free((GV*)dstr);
3067     GvGP(dstr) = gp_ref(GvGP(sstr));
3068     if (SvTAINTED(sstr))
3069         SvTAINT(dstr);
3070     if (GvIMPORTED(dstr) != GVf_IMPORTED
3071         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3072         {
3073             GvIMPORTED_on(dstr);
3074         }
3075     GvMULTI_on(dstr);
3076     return;
3077 }
3078
3079 static void
3080 S_pvgv_assign(pTHX_ SV *dstr, SV *sstr) {
3081     SV * const sref = SvREFCNT_inc(SvRV(sstr));
3082     SV *dref = NULL;
3083     const int intro = GvINTRO(dstr);
3084
3085 #ifdef GV_UNIQUE_CHECK
3086     if (GvUNIQUE((GV*)dstr)) {
3087         Perl_croak(aTHX_ PL_no_modify);
3088     }
3089 #endif
3090
3091     if (intro) {
3092         GvINTRO_off(dstr);      /* one-shot flag */
3093         GvLINE(dstr) = CopLINE(PL_curcop);
3094         GvEGV(dstr) = (GV*)dstr;
3095     }
3096     GvMULTI_on(dstr);
3097     switch (SvTYPE(sref)) {
3098     case SVt_PVAV:
3099         if (intro)
3100             SAVEGENERICSV(GvAV(dstr));
3101         else
3102             dref = (SV*)GvAV(dstr);
3103         GvAV(dstr) = (AV*)sref;
3104         if (!GvIMPORTED_AV(dstr)
3105             && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3106             {
3107                 GvIMPORTED_AV_on(dstr);
3108             }
3109         break;
3110     case SVt_PVHV:
3111         if (intro)
3112             SAVEGENERICSV(GvHV(dstr));
3113         else
3114             dref = (SV*)GvHV(dstr);
3115         GvHV(dstr) = (HV*)sref;
3116         if (!GvIMPORTED_HV(dstr)
3117             && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3118             {
3119                 GvIMPORTED_HV_on(dstr);
3120             }
3121         break;
3122     case SVt_PVCV:
3123         if (intro) {
3124             if (GvCVGEN(dstr) && GvCV(dstr) != (CV*)sref) {
3125                 SvREFCNT_dec(GvCV(dstr));
3126                 GvCV(dstr) = NULL;
3127                 GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3128                 PL_sub_generation++;
3129             }
3130             SAVEGENERICSV(GvCV(dstr));
3131         }
3132         else
3133             dref = (SV*)GvCV(dstr);
3134         if (GvCV(dstr) != (CV*)sref) {
3135             CV* const cv = GvCV(dstr);
3136             if (cv) {
3137                 if (!GvCVGEN((GV*)dstr) &&
3138                     (CvROOT(cv) || CvXSUB(cv)))
3139                     {
3140                         /* Redefining a sub - warning is mandatory if
3141                            it was a const and its value changed. */
3142                         if (CvCONST(cv) && CvCONST((CV*)sref)
3143                             && cv_const_sv(cv) == cv_const_sv((CV*)sref)) {
3144                             /* They are 2 constant subroutines generated from
3145                                the same constant. This probably means that
3146                                they are really the "same" proxy subroutine
3147                                instantiated in 2 places. Most likely this is
3148                                when a constant is exported twice.  Don't warn.
3149                             */
3150                         }
3151                         else if (ckWARN(WARN_REDEFINE)
3152                                  || (CvCONST(cv)
3153                                      && (!CvCONST((CV*)sref)
3154                                          || sv_cmp(cv_const_sv(cv),
3155                                                    cv_const_sv((CV*)sref))))) {
3156                             Perl_warner(aTHX_ packWARN(WARN_REDEFINE),
3157                                         CvCONST(cv)
3158                                         ? "Constant subroutine %s::%s redefined"
3159                                         : "Subroutine %s::%s redefined",
3160                                         HvNAME_get(GvSTASH((GV*)dstr)),
3161                                         GvENAME((GV*)dstr));
3162                         }
3163                     }
3164                 if (!intro)
3165                     cv_ckproto(cv, (GV*)dstr,
3166                                SvPOK(sref) ? SvPVX_const(sref) : NULL);
3167             }
3168             GvCV(dstr) = (CV*)sref;
3169             GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3170             GvASSUMECV_on(dstr);
3171             PL_sub_generation++;
3172         }
3173         if (!GvIMPORTED_CV(dstr) && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
3174             GvIMPORTED_CV_on(dstr);
3175         }
3176         break;
3177     case SVt_PVIO:
3178         if (intro)
3179             SAVEGENERICSV(GvIOp(dstr));
3180         else
3181             dref = (SV*)GvIOp(dstr);
3182         GvIOp(dstr) = (IO*)sref;
3183         break;
3184     case SVt_PVFM:
3185         if (intro)
3186             SAVEGENERICSV(GvFORM(dstr));
3187         else
3188             dref = (SV*)GvFORM(dstr);
3189         GvFORM(dstr) = (CV*)sref;
3190         break;
3191     default:
3192         if (intro)
3193             SAVEGENERICSV(GvSV(dstr));
3194         else
3195             dref = (SV*)GvSV(dstr);
3196         GvSV(dstr) = sref;
3197         if (!GvIMPORTED_SV(dstr) && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
3198             GvIMPORTED_SV_on(dstr);
3199         }
3200         break;
3201     }
3202     if (dref)
3203         SvREFCNT_dec(dref);
3204     if (SvTAINTED(sstr))
3205         SvTAINT(dstr);
3206     return;
3207 }
3208
3209 void
3210 Perl_sv_setsv_flags(pTHX_ SV *dstr, register SV *sstr, I32 flags)
3211 {
3212     dVAR;
3213     register U32 sflags;
3214     register int dtype;
3215     register int stype;
3216
3217     if (sstr == dstr)
3218         return;
3219     SV_CHECK_THINKFIRST_COW_DROP(dstr);
3220     if (!sstr)
3221         sstr = &PL_sv_undef;
3222     stype = SvTYPE(sstr);
3223     dtype = SvTYPE(dstr);
3224
3225     SvAMAGIC_off(dstr);
3226     if ( SvVOK(dstr) )
3227     {
3228         /* need to nuke the magic */
3229         mg_free(dstr);
3230         SvRMAGICAL_off(dstr);
3231     }
3232
3233     /* There's a lot of redundancy below but we're going for speed here */
3234
3235     switch (stype) {
3236     case SVt_NULL:
3237       undef_sstr:
3238         if (dtype != SVt_PVGV) {
3239             (void)SvOK_off(dstr);
3240             return;
3241         }
3242         break;
3243     case SVt_IV:
3244         if (SvIOK(sstr)) {
3245             switch (dtype) {
3246             case SVt_NULL:
3247                 sv_upgrade(dstr, SVt_IV);
3248                 break;
3249             case SVt_NV:
3250                 sv_upgrade(dstr, SVt_PVNV);
3251                 break;
3252             case SVt_RV:
3253             case SVt_PV:
3254                 sv_upgrade(dstr, SVt_PVIV);
3255                 break;
3256             }
3257             (void)SvIOK_only(dstr);
3258             SvIV_set(dstr,  SvIVX(sstr));
3259             if (SvIsUV(sstr))
3260                 SvIsUV_on(dstr);
3261             /* SvTAINTED can only be true if the SV has taint magic, which in
3262                turn means that the SV type is PVMG (or greater). This is the
3263                case statement for SVt_IV, so this cannot be true (whatever gcov
3264                may say).  */
3265             assert(!SvTAINTED(sstr));
3266             return;
3267         }
3268         goto undef_sstr;
3269
3270     case SVt_NV:
3271         if (SvNOK(sstr)) {
3272             switch (dtype) {
3273             case SVt_NULL:
3274             case SVt_IV:
3275                 sv_upgrade(dstr, SVt_NV);
3276                 break;
3277             case SVt_RV:
3278             case SVt_PV:
3279             case SVt_PVIV:
3280                 sv_upgrade(dstr, SVt_PVNV);
3281                 break;
3282             }
3283             SvNV_set(dstr, SvNVX(sstr));
3284             (void)SvNOK_only(dstr);
3285             /* SvTAINTED can only be true if the SV has taint magic, which in
3286                turn means that the SV type is PVMG (or greater). This is the
3287                case statement for SVt_NV, so this cannot be true (whatever gcov
3288                may say).  */
3289             assert(!SvTAINTED(sstr));
3290             return;
3291         }
3292         goto undef_sstr;
3293
3294     case SVt_RV:
3295         if (dtype < SVt_RV)
3296             sv_upgrade(dstr, SVt_RV);
3297         else if (dtype == SVt_PVGV &&
3298                  SvROK(sstr) && SvTYPE(SvRV(sstr)) == SVt_PVGV) {
3299             sstr = SvRV(sstr);
3300             if (sstr == dstr) {
3301                 if (GvIMPORTED(dstr) != GVf_IMPORTED
3302                     && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3303                 {
3304                     GvIMPORTED_on(dstr);
3305                 }
3306                 GvMULTI_on(dstr);
3307                 return;
3308             }
3309             S_glob_assign(aTHX_ dstr, sstr, dtype);
3310             return;
3311         }
3312         break;
3313     case SVt_PVFM:
3314 #ifdef PERL_OLD_COPY_ON_WRITE
3315         if ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS) {
3316             if (dtype < SVt_PVIV)
3317                 sv_upgrade(dstr, SVt_PVIV);
3318             break;
3319         }
3320         /* Fall through */
3321 #endif
3322     case SVt_PV:
3323         if (dtype < SVt_PV)
3324             sv_upgrade(dstr, SVt_PV);
3325         break;
3326     case SVt_PVIV:
3327         if (dtype < SVt_PVIV)
3328             sv_upgrade(dstr, SVt_PVIV);
3329         break;
3330     case SVt_PVNV:
3331         if (dtype < SVt_PVNV)
3332             sv_upgrade(dstr, SVt_PVNV);
3333         break;
3334     case SVt_PVAV:
3335     case SVt_PVHV:
3336     case SVt_PVCV:
3337     case SVt_PVIO:
3338         {
3339         const char * const type = sv_reftype(sstr,0);
3340         if (PL_op)
3341             Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_NAME(PL_op));
3342         else
3343             Perl_croak(aTHX_ "Bizarre copy of %s", type);
3344         }
3345         break;
3346
3347     case SVt_PVGV:
3348         if (dtype <= SVt_PVGV) {
3349             S_glob_assign(aTHX_ dstr, sstr, dtype);
3350             return;
3351         }
3352         /* FALL THROUGH */
3353
3354     default:
3355         if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
3356             mg_get(sstr);
3357             if ((int)SvTYPE(sstr) != stype) {
3358                 stype = SvTYPE(sstr);
3359                 if (stype == SVt_PVGV && dtype <= SVt_PVGV) {
3360                     S_glob_assign(aTHX_ dstr, sstr, dtype);
3361                     return;
3362                 }
3363             }
3364         }
3365         if (stype == SVt_PVLV)
3366             SvUPGRADE(dstr, SVt_PVNV);
3367         else
3368             SvUPGRADE(dstr, (U32)stype);
3369     }
3370
3371     sflags = SvFLAGS(sstr);
3372
3373     if (sflags & SVf_ROK) {
3374         if (dtype >= SVt_PV) {
3375             if (dtype == SVt_PVGV) {
3376                 S_pvgv_assign(aTHX_ dstr, sstr);
3377                 return;
3378             }
3379             if (SvPVX_const(dstr)) {
3380                 SvPV_free(dstr);
3381                 SvLEN_set(dstr, 0);
3382                 SvCUR_set(dstr, 0);
3383             }
3384         }
3385         (void)SvOK_off(dstr);
3386         SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
3387         SvFLAGS(dstr) |= sflags & (SVf_ROK|SVf_AMAGIC);
3388         assert(!(sflags & SVp_NOK));
3389         assert(!(sflags & SVp_IOK));
3390         assert(!(sflags & SVf_NOK));
3391         assert(!(sflags & SVf_IOK));
3392     }
3393     else if (sflags & SVp_POK) {
3394         bool isSwipe = 0;
3395
3396         /*
3397          * Check to see if we can just swipe the string.  If so, it's a
3398          * possible small lose on short strings, but a big win on long ones.
3399          * It might even be a win on short strings if SvPVX_const(dstr)
3400          * has to be allocated and SvPVX_const(sstr) has to be freed.
3401          */
3402
3403         /* Whichever path we take through the next code, we want this true,
3404            and doing it now facilitates the COW check.  */
3405         (void)SvPOK_only(dstr);
3406
3407         if (
3408             /* We're not already COW  */
3409             ((sflags & (SVf_FAKE | SVf_READONLY)) != (SVf_FAKE | SVf_READONLY)
3410 #ifndef PERL_OLD_COPY_ON_WRITE
3411              /* or we are, but dstr isn't a suitable target.  */
3412              || (SvFLAGS(dstr) & CAN_COW_MASK) != CAN_COW_FLAGS
3413 #endif
3414              )
3415             &&
3416             !(isSwipe =
3417                  (sflags & SVs_TEMP) &&   /* slated for free anyway? */
3418                  !(sflags & SVf_OOK) &&   /* and not involved in OOK hack? */
3419                  (!(flags & SV_NOSTEAL)) &&
3420                                         /* and we're allowed to steal temps */
3421                  SvREFCNT(sstr) == 1 &&   /* and no other references to it? */
3422                  SvLEN(sstr)    &&        /* and really is a string */
3423                                 /* and won't be needed again, potentially */
3424               !(PL_op && PL_op->op_type == OP_AASSIGN))
3425 #ifdef PERL_OLD_COPY_ON_WRITE
3426             && !((sflags & CAN_COW_MASK) == CAN_COW_FLAGS
3427                  && (SvFLAGS(dstr) & CAN_COW_MASK) == CAN_COW_FLAGS
3428                  && SvTYPE(sstr) >= SVt_PVIV)
3429 #endif
3430             ) {
3431             /* Failed the swipe test, and it's not a shared hash key either.
3432                Have to copy the string.  */
3433             STRLEN len = SvCUR(sstr);
3434             SvGROW(dstr, len + 1);      /* inlined from sv_setpvn */
3435             Move(SvPVX_const(sstr),SvPVX(dstr),len,char);
3436             SvCUR_set(dstr, len);
3437             *SvEND(dstr) = '\0';
3438         } else {
3439             /* If PERL_OLD_COPY_ON_WRITE is not defined, then isSwipe will always
3440                be true in here.  */
3441             /* Either it's a shared hash key, or it's suitable for
3442                copy-on-write or we can swipe the string.  */
3443             if (DEBUG_C_TEST) {
3444                 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
3445                 sv_dump(sstr);
3446                 sv_dump(dstr);
3447             }
3448 #ifdef PERL_OLD_COPY_ON_WRITE
3449             if (!isSwipe) {
3450                 /* I believe I should acquire a global SV mutex if
3451                    it's a COW sv (not a shared hash key) to stop
3452                    it going un copy-on-write.
3453                    If the source SV has gone un copy on write between up there
3454                    and down here, then (assert() that) it is of the correct
3455                    form to make it copy on write again */
3456                 if ((sflags & (SVf_FAKE | SVf_READONLY))
3457                     != (SVf_FAKE | SVf_READONLY)) {
3458                     SvREADONLY_on(sstr);
3459                     SvFAKE_on(sstr);
3460                     /* Make the source SV into a loop of 1.
3461                        (about to become 2) */
3462                     SV_COW_NEXT_SV_SET(sstr, sstr);
3463                 }
3464             }
3465 #endif
3466             /* Initial code is common.  */
3467             if (SvPVX_const(dstr)) {    /* we know that dtype >= SVt_PV */
3468                 SvPV_free(dstr);
3469             }
3470
3471             if (!isSwipe) {
3472                 /* making another shared SV.  */
3473                 STRLEN cur = SvCUR(sstr);
3474                 STRLEN len = SvLEN(sstr);
3475 #ifdef PERL_OLD_COPY_ON_WRITE
3476                 if (len) {
3477                     assert (SvTYPE(dstr) >= SVt_PVIV);
3478                     /* SvIsCOW_normal */
3479                     /* splice us in between source and next-after-source.  */
3480                     SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
3481                     SV_COW_NEXT_SV_SET(sstr, dstr);
3482                     SvPV_set(dstr, SvPVX_mutable(sstr));
3483                 } else
3484 #endif
3485                 {
3486                     /* SvIsCOW_shared_hash */
3487                     DEBUG_C(PerlIO_printf(Perl_debug_log,
3488                                           "Copy on write: Sharing hash\n"));
3489
3490                     assert (SvTYPE(dstr) >= SVt_PV);
3491                     SvPV_set(dstr,
3492                              HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
3493                 }
3494                 SvLEN_set(dstr, len);
3495                 SvCUR_set(dstr, cur);
3496                 SvREADONLY_on(dstr);
3497                 SvFAKE_on(dstr);
3498                 /* Relesase a global SV mutex.  */
3499             }
3500             else
3501                 {       /* Passes the swipe test.  */
3502                 SvPV_set(dstr, SvPVX_mutable(sstr));
3503                 SvLEN_set(dstr, SvLEN(sstr));
3504                 SvCUR_set(dstr, SvCUR(sstr));
3505
3506                 SvTEMP_off(dstr);
3507                 (void)SvOK_off(sstr);   /* NOTE: nukes most SvFLAGS on sstr */
3508                 SvPV_set(sstr, NULL);
3509                 SvLEN_set(sstr, 0);
3510                 SvCUR_set(sstr, 0);
3511                 SvTEMP_off(sstr);
3512             }
3513         }
3514         if (sflags & SVp_NOK) {
3515             SvNV_set(dstr, SvNVX(sstr));
3516         }
3517         if (sflags & SVp_IOK) {
3518             SvRELEASE_IVX(dstr);
3519             SvIV_set(dstr, SvIVX(sstr));
3520             /* Must do this otherwise some other overloaded use of 0x80000000
3521                gets confused. I guess SVpbm_VALID */
3522             if (sflags & SVf_IVisUV)
3523                 SvIsUV_on(dstr);
3524         }
3525         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
3526         {
3527             const MAGIC * const smg = SvVOK(sstr);
3528             if (smg) {
3529                 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
3530                          smg->mg_ptr, smg->mg_len);
3531                 SvRMAGICAL_on(dstr);
3532             }
3533         }
3534     }
3535     else if (sflags & (SVp_IOK|SVp_NOK)) {
3536         (void)SvOK_off(dstr);
3537         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
3538         if (sflags & SVp_IOK) {
3539             /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
3540             SvIV_set(dstr, SvIVX(sstr));
3541         }
3542         if (sflags & SVp_NOK) {
3543             SvFLAGS(dstr) |= sflags & (SVf_NOK|SVp_NOK);
3544             SvNV_set(dstr, SvNVX(sstr));
3545         }
3546     }
3547     else {
3548         if (dtype == SVt_PVGV) {
3549             if (ckWARN(WARN_MISC))
3550                 Perl_warner(aTHX_ packWARN(WARN_MISC), "Undefined value assigned to typeglob");
3551         }
3552         else
3553             (void)SvOK_off(dstr);
3554     }
3555     if (SvTAINTED(sstr))
3556         SvTAINT(dstr);
3557 }
3558
3559 /*
3560 =for apidoc sv_setsv_mg
3561
3562 Like C<sv_setsv>, but also handles 'set' magic.
3563
3564 =cut
3565 */
3566
3567 void
3568 Perl_sv_setsv_mg(pTHX_ SV *dstr, register SV *sstr)
3569 {
3570     sv_setsv(dstr,sstr);
3571     SvSETMAGIC(dstr);
3572 }
3573
3574 #ifdef PERL_OLD_COPY_ON_WRITE
3575 SV *
3576 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
3577 {
3578     STRLEN cur = SvCUR(sstr);
3579     STRLEN len = SvLEN(sstr);
3580     register char *new_pv;
3581
3582     if (DEBUG_C_TEST) {
3583         PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
3584                       sstr, dstr);
3585         sv_dump(sstr);
3586         if (dstr)
3587                     sv_dump(dstr);
3588     }
3589
3590     if (dstr) {
3591         if (SvTHINKFIRST(dstr))
3592             sv_force_normal_flags(dstr, SV_COW_DROP_PV);
3593         else if (SvPVX_const(dstr))
3594             Safefree(SvPVX_const(dstr));
3595     }
3596     else
3597         new_SV(dstr);
3598     SvUPGRADE(dstr, SVt_PVIV);
3599
3600     assert (SvPOK(sstr));
3601     assert (SvPOKp(sstr));
3602     assert (!SvIOK(sstr));
3603     assert (!SvIOKp(sstr));
3604     assert (!SvNOK(sstr));
3605     assert (!SvNOKp(sstr));
3606
3607     if (SvIsCOW(sstr)) {
3608
3609         if (SvLEN(sstr) == 0) {
3610             /* source is a COW shared hash key.  */
3611             DEBUG_C(PerlIO_printf(Perl_debug_log,
3612                                   "Fast copy on write: Sharing hash\n"));
3613             new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
3614             goto common_exit;
3615         }
3616         SV_COW_NEXT_SV_SET(dstr, SV_COW_NEXT_SV(sstr));
3617     } else {
3618         assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
3619         SvUPGRADE(sstr, SVt_PVIV);
3620         SvREADONLY_on(sstr);
3621         SvFAKE_on(sstr);
3622         DEBUG_C(PerlIO_printf(Perl_debug_log,
3623                               "Fast copy on write: Converting sstr to COW\n"));
3624         SV_COW_NEXT_SV_SET(dstr, sstr);
3625     }
3626     SV_COW_NEXT_SV_SET(sstr, dstr);
3627     new_pv = SvPVX_mutable(sstr);
3628
3629   common_exit:
3630     SvPV_set(dstr, new_pv);
3631     SvFLAGS(dstr) = (SVt_PVIV|SVf_POK|SVp_POK|SVf_FAKE|SVf_READONLY);
3632     if (SvUTF8(sstr))
3633         SvUTF8_on(dstr);
3634     SvLEN_set(dstr, len);
3635     SvCUR_set(dstr, cur);
3636     if (DEBUG_C_TEST) {
3637         sv_dump(dstr);
3638     }
3639     return dstr;
3640 }
3641 #endif
3642
3643 /*
3644 =for apidoc sv_setpvn
3645
3646 Copies a string into an SV.  The C<len> parameter indicates the number of
3647 bytes to be copied.  If the C<ptr> argument is NULL the SV will become
3648 undefined.  Does not handle 'set' magic.  See C<sv_setpvn_mg>.
3649
3650 =cut
3651 */
3652
3653 void
3654 Perl_sv_setpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3655 {
3656     dVAR;
3657     register char *dptr;
3658
3659     SV_CHECK_THINKFIRST_COW_DROP(sv);
3660     if (!ptr) {
3661         (void)SvOK_off(sv);
3662         return;
3663     }
3664     else {
3665         /* len is STRLEN which is unsigned, need to copy to signed */
3666         const IV iv = len;
3667         if (iv < 0)
3668             Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen");
3669     }
3670     SvUPGRADE(sv, SVt_PV);
3671
3672     dptr = SvGROW(sv, len + 1);
3673     Move(ptr,dptr,len,char);
3674     dptr[len] = '\0';
3675     SvCUR_set(sv, len);
3676     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
3677     SvTAINT(sv);
3678 }
3679
3680 /*
3681 =for apidoc sv_setpvn_mg
3682
3683 Like C<sv_setpvn>, but also handles 'set' magic.
3684
3685 =cut
3686 */
3687
3688 void
3689 Perl_sv_setpvn_mg(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
3690 {
3691     sv_setpvn(sv,ptr,len);
3692     SvSETMAGIC(sv);
3693 }
3694
3695 /*
3696 =for apidoc sv_setpv
3697
3698 Copies a string into an SV.  The string must be null-terminated.  Does not
3699 handle 'set' magic.  See C<sv_setpv_mg>.
3700
3701 =cut
3702 */
3703
3704 void
3705 Perl_sv_setpv(pTHX_ register SV *sv, register const char *ptr)
3706 {
3707     dVAR;
3708     register STRLEN len;
3709
3710     SV_CHECK_THINKFIRST_COW_DROP(sv);
3711     if (!ptr) {
3712         (void)SvOK_off(sv);
3713         return;
3714     }
3715     len = strlen(ptr);
3716     SvUPGRADE(sv, SVt_PV);
3717
3718     SvGROW(sv, len + 1);
3719     Move(ptr,SvPVX(sv),len+1,char);
3720     SvCUR_set(sv, len);
3721     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
3722     SvTAINT(sv);
3723 }
3724
3725 /*
3726 =for apidoc sv_setpv_mg
3727
3728 Like C<sv_setpv>, but also handles 'set' magic.
3729
3730 =cut
3731 */
3732
3733 void
3734 Perl_sv_setpv_mg(pTHX_ register SV *sv, register const char *ptr)
3735 {
3736     sv_setpv(sv,ptr);
3737     SvSETMAGIC(sv);
3738 }
3739
3740 /*
3741 =for apidoc sv_usepvn
3742
3743 Tells an SV to use C<ptr> to find its string value.  Normally the string is
3744 stored inside the SV but sv_usepvn allows the SV to use an outside string.
3745 The C<ptr> should point to memory that was allocated by C<malloc>.  The
3746 string length, C<len>, must be supplied.  This function will realloc the
3747 memory pointed to by C<ptr>, so that pointer should not be freed or used by
3748 the programmer after giving it to sv_usepvn.  Does not handle 'set' magic.
3749 See C<sv_usepvn_mg>.
3750
3751 =cut
3752 */
3753
3754 void
3755 Perl_sv_usepvn(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
3756 {
3757     dVAR;
3758     STRLEN allocate;
3759     SV_CHECK_THINKFIRST_COW_DROP(sv);
3760     SvUPGRADE(sv, SVt_PV);
3761     if (!ptr) {
3762         (void)SvOK_off(sv);
3763         return;
3764     }
3765     if (SvPVX_const(sv))
3766         SvPV_free(sv);
3767
3768     allocate = PERL_STRLEN_ROUNDUP(len + 1);
3769     ptr = saferealloc (ptr, allocate);
3770     SvPV_set(sv, ptr);
3771     SvCUR_set(sv, len);
3772     SvLEN_set(sv, allocate);
3773     *SvEND(sv) = '\0';
3774     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
3775     SvTAINT(sv);
3776 }
3777
3778 /*
3779 =for apidoc sv_usepvn_mg
3780
3781 Like C<sv_usepvn>, but also handles 'set' magic.
3782
3783 =cut
3784 */
3785
3786 void
3787 Perl_sv_usepvn_mg(pTHX_ register SV *sv, register char *ptr, register STRLEN len)
3788 {
3789     sv_usepvn(sv,ptr,len);
3790     SvSETMAGIC(sv);
3791 }
3792
3793 #ifdef PERL_OLD_COPY_ON_WRITE
3794 /* Need to do this *after* making the SV normal, as we need the buffer
3795    pointer to remain valid until after we've copied it.  If we let go too early,
3796    another thread could invalidate it by unsharing last of the same hash key
3797    (which it can do by means other than releasing copy-on-write Svs)
3798    or by changing the other copy-on-write SVs in the loop.  */
3799 STATIC void
3800 S_sv_release_COW(pTHX_ register SV *sv, const char *pvx, STRLEN len, SV *after)
3801 {
3802     if (len) { /* this SV was SvIsCOW_normal(sv) */
3803          /* we need to find the SV pointing to us.  */
3804         SV *current = SV_COW_NEXT_SV(after);
3805
3806         if (current == sv) {
3807             /* The SV we point to points back to us (there were only two of us
3808                in the loop.)
3809                Hence other SV is no longer copy on write either.  */
3810             SvFAKE_off(after);
3811             SvREADONLY_off(after);
3812         } else {
3813             /* We need to follow the pointers around the loop.  */
3814             SV *next;
3815             while ((next = SV_COW_NEXT_SV(current)) != sv) {
3816                 assert (next);
3817                 current = next;
3818                  /* don't loop forever if the structure is bust, and we have
3819                     a pointer into a closed loop.  */
3820                 assert (current != after);
3821                 assert (SvPVX_const(current) == pvx);
3822             }
3823             /* Make the SV before us point to the SV after us.  */
3824             SV_COW_NEXT_SV_SET(current, after);
3825         }
3826     } else {
3827         unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
3828     }
3829 }
3830
3831 int
3832 Perl_sv_release_IVX(pTHX_ register SV *sv)
3833 {
3834     if (SvIsCOW(sv))
3835         sv_force_normal_flags(sv, 0);
3836     SvOOK_off(sv);
3837     return 0;
3838 }
3839 #endif
3840 /*
3841 =for apidoc sv_force_normal_flags
3842
3843 Undo various types of fakery on an SV: if the PV is a shared string, make
3844 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
3845 an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
3846 we do the copy, and is also used locally. If C<SV_COW_DROP_PV> is set
3847 then a copy-on-write scalar drops its PV buffer (if any) and becomes
3848 SvPOK_off rather than making a copy. (Used where this scalar is about to be
3849 set to some other value.) In addition, the C<flags> parameter gets passed to
3850 C<sv_unref_flags()> when unrefing. C<sv_force_normal> calls this function
3851 with flags set to 0.
3852
3853 =cut
3854 */
3855
3856 void
3857 Perl_sv_force_normal_flags(pTHX_ register SV *sv, U32 flags)
3858 {
3859     dVAR;
3860 #ifdef PERL_OLD_COPY_ON_WRITE
3861     if (SvREADONLY(sv)) {
3862         /* At this point I believe I should acquire a global SV mutex.  */
3863         if (SvFAKE(sv)) {
3864             const char * const pvx = SvPVX_const(sv);
3865             const STRLEN len = SvLEN(sv);
3866             const STRLEN cur = SvCUR(sv);
3867             SV * const next = SV_COW_NEXT_SV(sv);   /* next COW sv in the loop. */
3868             if (DEBUG_C_TEST) {
3869                 PerlIO_printf(Perl_debug_log,
3870                               "Copy on write: Force normal %ld\n",
3871                               (long) flags);
3872                 sv_dump(sv);
3873             }
3874             SvFAKE_off(sv);
3875             SvREADONLY_off(sv);
3876             /* This SV doesn't own the buffer, so need to Newx() a new one:  */
3877             SvPV_set(sv, NULL);
3878             SvLEN_set(sv, 0);
3879             if (flags & SV_COW_DROP_PV) {
3880                 /* OK, so we don't need to copy our buffer.  */
3881                 SvPOK_off(sv);
3882             } else {
3883                 SvGROW(sv, cur + 1);
3884                 Move(pvx,SvPVX(sv),cur,char);
3885                 SvCUR_set(sv, cur);
3886                 *SvEND(sv) = '\0';
3887             }
3888             sv_release_COW(sv, pvx, len, next);
3889             if (DEBUG_C_TEST) {
3890                 sv_dump(sv);
3891             }
3892         }
3893         else if (IN_PERL_RUNTIME)
3894             Perl_croak(aTHX_ PL_no_modify);
3895         /* At this point I believe that I can drop the global SV mutex.  */
3896     }
3897 #else
3898     if (SvREADONLY(sv)) {
3899         if (SvFAKE(sv)) {
3900             const char * const pvx = SvPVX_const(sv);
3901             const STRLEN len = SvCUR(sv);
3902             SvFAKE_off(sv);
3903             SvREADONLY_off(sv);
3904             SvPV_set(sv, NULL);
3905             SvLEN_set(sv, 0);
3906             SvGROW(sv, len + 1);
3907             Move(pvx,SvPVX(sv),len,char);
3908             *SvEND(sv) = '\0';
3909             unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
3910         }
3911         else if (IN_PERL_RUNTIME)
3912             Perl_croak(aTHX_ PL_no_modify);
3913     }
3914 #endif
3915     if (SvROK(sv))
3916         sv_unref_flags(sv, flags);
3917     else if (SvFAKE(sv) && SvTYPE(sv) == SVt_PVGV)
3918         sv_unglob(sv);
3919 }
3920
3921 /*
3922 =for apidoc sv_chop
3923
3924 Efficient removal of characters from the beginning of the string buffer.
3925 SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
3926 the string buffer.  The C<ptr> becomes the first character of the adjusted
3927 string. Uses the "OOK hack".
3928 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
3929 refer to the same chunk of data.
3930
3931 =cut
3932 */
3933
3934 void
3935 Perl_sv_chop(pTHX_ register SV *sv, register const char *ptr)
3936 {
3937     register STRLEN delta;
3938     if (!ptr || !SvPOKp(sv))
3939         return;
3940     delta = ptr - SvPVX_const(sv);
3941     SV_CHECK_THINKFIRST(sv);
3942     if (SvTYPE(sv) < SVt_PVIV)
3943         sv_upgrade(sv,SVt_PVIV);
3944
3945     if (!SvOOK(sv)) {
3946         if (!SvLEN(sv)) { /* make copy of shared string */
3947             const char *pvx = SvPVX_const(sv);
3948             const STRLEN len = SvCUR(sv);
3949             SvGROW(sv, len + 1);
3950             Move(pvx,SvPVX(sv),len,char);
3951             *SvEND(sv) = '\0';
3952         }
3953         SvIV_set(sv, 0);
3954         /* Same SvOOK_on but SvOOK_on does a SvIOK_off
3955            and we do that anyway inside the SvNIOK_off
3956         */
3957         SvFLAGS(sv) |= SVf_OOK;
3958     }
3959     SvNIOK_off(sv);
3960     SvLEN_set(sv, SvLEN(sv) - delta);
3961     SvCUR_set(sv, SvCUR(sv) - delta);
3962     SvPV_set(sv, SvPVX(sv) + delta);
3963     SvIV_set(sv, SvIVX(sv) + delta);
3964 }
3965
3966 /*
3967 =for apidoc sv_catpvn
3968
3969 Concatenates the string onto the end of the string which is in the SV.  The
3970 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
3971 status set, then the bytes appended should be valid UTF-8.
3972 Handles 'get' magic, but not 'set' magic.  See C<sv_catpvn_mg>.
3973
3974 =for apidoc sv_catpvn_flags
3975
3976 Concatenates the string onto the end of the string which is in the SV.  The
3977 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
3978 status set, then the bytes appended should be valid UTF-8.
3979 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<dsv> if
3980 appropriate, else not. C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
3981 in terms of this function.
3982
3983 =cut
3984 */
3985
3986 void
3987 Perl_sv_catpvn_flags(pTHX_ register SV *dsv, register const char *sstr, register STRLEN slen, I32 flags)
3988 {
3989     dVAR;
3990     STRLEN dlen;
3991     const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
3992
3993     SvGROW(dsv, dlen + slen + 1);
3994     if (sstr == dstr)
3995         sstr = SvPVX_const(dsv);
3996     Move(sstr, SvPVX(dsv) + dlen, slen, char);
3997     SvCUR_set(dsv, SvCUR(dsv) + slen);
3998     *SvEND(dsv) = '\0';
3999     (void)SvPOK_only_UTF8(dsv);         /* validate pointer */
4000     SvTAINT(dsv);
4001     if (flags & SV_SMAGIC)
4002         SvSETMAGIC(dsv);
4003 }
4004
4005 /*
4006 =for apidoc sv_catsv
4007
4008 Concatenates the string from SV C<ssv> onto the end of the string in
4009 SV C<dsv>.  Modifies C<dsv> but not C<ssv>.  Handles 'get' magic, but
4010 not 'set' magic.  See C<sv_catsv_mg>.
4011
4012 =for apidoc sv_catsv_flags
4013
4014 Concatenates the string from SV C<ssv> onto the end of the string in
4015 SV C<dsv>.  Modifies C<dsv> but not C<ssv>.  If C<flags> has C<SV_GMAGIC>
4016 bit set, will C<mg_get> on the SVs if appropriate, else not. C<sv_catsv>
4017 and C<sv_catsv_nomg> are implemented in terms of this function.
4018
4019 =cut */
4020
4021 void
4022 Perl_sv_catsv_flags(pTHX_ SV *dsv, register SV *ssv, I32 flags)
4023 {
4024     dVAR;
4025     if (ssv) {
4026         STRLEN slen;
4027         const char *spv = SvPV_const(ssv, slen);
4028         if (spv) {
4029             /*  sutf8 and dutf8 were type bool, but under USE_ITHREADS,
4030                 gcc version 2.95.2 20000220 (Debian GNU/Linux) for
4031                 Linux xxx 2.2.17 on sparc64 with gcc -O2, we erroneously
4032                 get dutf8 = 0x20000000, (i.e.  SVf_UTF8) even though
4033                 dsv->sv_flags doesn't have that bit set.
4034                 Andy Dougherty  12 Oct 2001
4035             */
4036             const I32 sutf8 = DO_UTF8(ssv);
4037             I32 dutf8;
4038
4039             if (SvGMAGICAL(dsv) && (flags & SV_GMAGIC))
4040                 mg_get(dsv);
4041             dutf8 = DO_UTF8(dsv);
4042
4043             if (dutf8 != sutf8) {
4044                 if (dutf8) {
4045                     /* Not modifying source SV, so taking a temporary copy. */
4046                     SV* const csv = sv_2mortal(newSVpvn(spv, slen));
4047
4048                     sv_utf8_upgrade(csv);
4049                     spv = SvPV_const(csv, slen);
4050                 }
4051                 else
4052                     sv_utf8_upgrade_nomg(dsv);
4053             }
4054             sv_catpvn_nomg(dsv, spv, slen);
4055         }
4056     }
4057     if (flags & SV_SMAGIC)
4058         SvSETMAGIC(dsv);
4059 }
4060
4061 /*
4062 =for apidoc sv_catpv
4063
4064 Concatenates the string onto the end of the string which is in the SV.
4065 If the SV has the UTF-8 status set, then the bytes appended should be
4066 valid UTF-8.  Handles 'get' magic, but not 'set' magic.  See C<sv_catpv_mg>.
4067
4068 =cut */
4069
4070 void
4071 Perl_sv_catpv(pTHX_ register SV *sv, register const char *ptr)
4072 {
4073     dVAR;
4074     register STRLEN len;
4075     STRLEN tlen;
4076     char *junk;
4077
4078     if (!ptr)
4079         return;
4080     junk = SvPV_force(sv, tlen);
4081     len = strlen(ptr);
4082     SvGROW(sv, tlen + len + 1);
4083     if (ptr == junk)
4084         ptr = SvPVX_const(sv);
4085     Move(ptr,SvPVX(sv)+tlen,len+1,char);
4086     SvCUR_set(sv, SvCUR(sv) + len);
4087     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4088     SvTAINT(sv);
4089 }
4090
4091 /*
4092 =for apidoc sv_catpv_mg
4093
4094 Like C<sv_catpv>, but also handles 'set' magic.
4095
4096 =cut
4097 */
4098
4099 void
4100 Perl_sv_catpv_mg(pTHX_ register SV *sv, register const char *ptr)
4101 {
4102     sv_catpv(sv,ptr);
4103     SvSETMAGIC(sv);
4104 }
4105
4106 /*
4107 =for apidoc newSV
4108
4109 Creates a new SV.  A non-zero C<len> parameter indicates the number of
4110 bytes of preallocated string space the SV should have.  An extra byte for a
4111 trailing NUL is also reserved.  (SvPOK is not set for the SV even if string
4112 space is allocated.)  The reference count for the new SV is set to 1.
4113
4114 In 5.9.3, newSV() replaces the older NEWSV() API, and drops the first
4115 parameter, I<x>, a debug aid which allowed callers to identify themselves.
4116 This aid has been superseded by a new build option, PERL_MEM_LOG (see
4117 L<perlhack/PERL_MEM_LOG>).  The older API is still there for use in XS
4118 modules supporting older perls.
4119
4120 =cut
4121 */
4122
4123 SV *
4124 Perl_newSV(pTHX_ STRLEN len)
4125 {
4126     dVAR;
4127     register SV *sv;
4128
4129     new_SV(sv);
4130     if (len) {
4131         sv_upgrade(sv, SVt_PV);
4132         SvGROW(sv, len + 1);
4133     }
4134     return sv;
4135 }
4136 /*
4137 =for apidoc sv_magicext
4138
4139 Adds magic to an SV, upgrading it if necessary. Applies the
4140 supplied vtable and returns a pointer to the magic added.
4141
4142 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
4143 In particular, you can add magic to SvREADONLY SVs, and add more than
4144 one instance of the same 'how'.
4145
4146 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
4147 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
4148 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
4149 to contain an C<SV*> and is stored as-is with its REFCNT incremented.
4150
4151 (This is now used as a subroutine by C<sv_magic>.)
4152
4153 =cut
4154 */
4155 MAGIC * 
4156 Perl_sv_magicext(pTHX_ SV* sv, SV* obj, int how, MGVTBL *vtable,
4157                  const char* name, I32 namlen)
4158 {
4159     dVAR;
4160     MAGIC* mg;
4161
4162     if (SvTYPE(sv) < SVt_PVMG) {
4163         SvUPGRADE(sv, SVt_PVMG);
4164     }
4165     Newxz(mg, 1, MAGIC);
4166     mg->mg_moremagic = SvMAGIC(sv);
4167     SvMAGIC_set(sv, mg);
4168
4169     /* Sometimes a magic contains a reference loop, where the sv and
4170        object refer to each other.  To prevent a reference loop that
4171        would prevent such objects being freed, we look for such loops
4172        and if we find one we avoid incrementing the object refcount.
4173
4174        Note we cannot do this to avoid self-tie loops as intervening RV must
4175        have its REFCNT incremented to keep it in existence.
4176
4177     */
4178     if (!obj || obj == sv ||
4179         how == PERL_MAGIC_arylen ||
4180         how == PERL_MAGIC_qr ||
4181         how == PERL_MAGIC_symtab ||
4182         (SvTYPE(obj) == SVt_PVGV &&
4183             (GvSV(obj) == sv || GvHV(obj) == (HV*)sv || GvAV(obj) == (AV*)sv ||
4184             GvCV(obj) == (CV*)sv || GvIOp(obj) == (IO*)sv ||
4185             GvFORM(obj) == (CV*)sv)))
4186     {
4187         mg->mg_obj = obj;
4188     }
4189     else {
4190         mg->mg_obj = SvREFCNT_inc(obj);
4191         mg->mg_flags |= MGf_REFCOUNTED;
4192     }
4193
4194     /* Normal self-ties simply pass a null object, and instead of
4195        using mg_obj directly, use the SvTIED_obj macro to produce a
4196        new RV as needed.  For glob "self-ties", we are tieing the PVIO
4197        with an RV obj pointing to the glob containing the PVIO.  In
4198        this case, to avoid a reference loop, we need to weaken the
4199        reference.
4200     */
4201
4202     if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
4203         obj && SvROK(obj) && GvIO(SvRV(obj)) == (IO*)sv)
4204     {
4205       sv_rvweaken(obj);
4206     }
4207
4208     mg->mg_type = how;
4209     mg->mg_len = namlen;
4210     if (name) {
4211         if (namlen > 0)
4212             mg->mg_ptr = savepvn(name, namlen);
4213         else if (namlen == HEf_SVKEY)
4214             mg->mg_ptr = (char*)SvREFCNT_inc((SV*)name);
4215         else
4216             mg->mg_ptr = (char *) name;
4217     }
4218     mg->mg_virtual = vtable;
4219
4220     mg_magical(sv);
4221     if (SvGMAGICAL(sv))
4222         SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK|SVf_POK);
4223     return mg;
4224 }
4225
4226 /*
4227 =for apidoc sv_magic
4228
4229 Adds magic to an SV. First upgrades C<sv> to type C<SVt_PVMG> if necessary,
4230 then adds a new magic item of type C<how> to the head of the magic list.
4231
4232 See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
4233 handling of the C<name> and C<namlen> arguments.
4234
4235 You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
4236 to add more than one instance of the same 'how'.
4237
4238 =cut
4239 */
4240
4241 void
4242 Perl_sv_magic(pTHX_ register SV *sv, SV *obj, int how, const char *name, I32 namlen)
4243 {
4244     dVAR;
4245     MGVTBL *vtable;
4246     MAGIC* mg;
4247
4248 #ifdef PERL_OLD_COPY_ON_WRITE
4249     if (SvIsCOW(sv))
4250         sv_force_normal_flags(sv, 0);
4251 #endif
4252     if (SvREADONLY(sv)) {
4253         if (
4254             /* its okay to attach magic to shared strings; the subsequent
4255              * upgrade to PVMG will unshare the string */
4256             !(SvFAKE(sv) && SvTYPE(sv) < SVt_PVMG)
4257
4258             && IN_PERL_RUNTIME
4259             && how != PERL_MAGIC_regex_global
4260             && how != PERL_MAGIC_bm
4261             && how != PERL_MAGIC_fm
4262             && how != PERL_MAGIC_sv
4263             && how != PERL_MAGIC_backref
4264            )
4265         {
4266             Perl_croak(aTHX_ PL_no_modify);
4267         }
4268     }
4269     if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
4270         if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
4271             /* sv_magic() refuses to add a magic of the same 'how' as an
4272                existing one
4273              */
4274             if (how == PERL_MAGIC_taint)
4275                 mg->mg_len |= 1;
4276             return;
4277         }
4278     }
4279
4280     switch (how) {
4281     case PERL_MAGIC_sv:
4282         vtable = &PL_vtbl_sv;
4283         break;
4284     case PERL_MAGIC_overload:
4285         vtable = &PL_vtbl_amagic;
4286         break;
4287     case PERL_MAGIC_overload_elem:
4288         vtable = &PL_vtbl_amagicelem;
4289         break;
4290     case PERL_MAGIC_overload_table:
4291         vtable = &PL_vtbl_ovrld;
4292         break;
4293     case PERL_MAGIC_bm:
4294         vtable = &PL_vtbl_bm;
4295         break;
4296     case PERL_MAGIC_regdata:
4297         vtable = &PL_vtbl_regdata;
4298         break;
4299     case PERL_MAGIC_regdatum:
4300         vtable = &PL_vtbl_regdatum;
4301         break;
4302     case PERL_MAGIC_env:
4303         vtable = &PL_vtbl_env;
4304         break;
4305     case PERL_MAGIC_fm:
4306         vtable = &PL_vtbl_fm;
4307         break;
4308     case PERL_MAGIC_envelem:
4309         vtable = &PL_vtbl_envelem;
4310         break;
4311     case PERL_MAGIC_regex_global:
4312         vtable = &PL_vtbl_mglob;
4313         break;
4314     case PERL_MAGIC_isa:
4315         vtable = &PL_vtbl_isa;
4316         break;
4317     case PERL_MAGIC_isaelem:
4318         vtable = &PL_vtbl_isaelem;
4319         break;
4320     case PERL_MAGIC_nkeys:
4321         vtable = &PL_vtbl_nkeys;
4322         break;
4323     case PERL_MAGIC_dbfile:
4324         vtable = NULL;
4325         break;
4326     case PERL_MAGIC_dbline:
4327         vtable = &PL_vtbl_dbline;
4328         break;
4329 #ifdef USE_LOCALE_COLLATE
4330     case PERL_MAGIC_collxfrm:
4331         vtable = &PL_vtbl_collxfrm;
4332         break;
4333 #endif /* USE_LOCALE_COLLATE */
4334     case PERL_MAGIC_tied:
4335         vtable = &PL_vtbl_pack;
4336         break;
4337     case PERL_MAGIC_tiedelem:
4338     case PERL_MAGIC_tiedscalar:
4339         vtable = &PL_vtbl_packelem;
4340         break;
4341     case PERL_MAGIC_qr:
4342         vtable = &PL_vtbl_regexp;
4343         break;
4344     case PERL_MAGIC_sig:
4345         vtable = &PL_vtbl_sig;
4346         break;
4347     case PERL_MAGIC_sigelem:
4348         vtable = &PL_vtbl_sigelem;
4349         break;
4350     case PERL_MAGIC_taint:
4351         vtable = &PL_vtbl_taint;
4352         break;
4353     case PERL_MAGIC_uvar:
4354         vtable = &PL_vtbl_uvar;
4355         break;
4356     case PERL_MAGIC_vec:
4357         vtable = &PL_vtbl_vec;
4358         break;
4359     case PERL_MAGIC_arylen_p:
4360     case PERL_MAGIC_rhash:
4361     case PERL_MAGIC_symtab:
4362     case PERL_MAGIC_vstring:
4363         vtable = NULL;
4364         break;
4365     case PERL_MAGIC_utf8:
4366         vtable = &PL_vtbl_utf8;
4367         break;
4368     case PERL_MAGIC_substr:
4369         vtable = &PL_vtbl_substr;
4370         break;
4371     case PERL_MAGIC_defelem:
4372         vtable = &PL_vtbl_defelem;
4373         break;
4374     case PERL_MAGIC_glob:
4375         vtable = &PL_vtbl_glob;
4376         break;
4377     case PERL_MAGIC_arylen:
4378         vtable = &PL_vtbl_arylen;
4379         break;
4380     case PERL_MAGIC_pos:
4381         vtable = &PL_vtbl_pos;
4382         break;
4383     case PERL_MAGIC_backref:
4384         vtable = &PL_vtbl_backref;
4385         break;
4386     case PERL_MAGIC_ext:
4387         /* Reserved for use by extensions not perl internals.           */
4388         /* Useful for attaching extension internal data to perl vars.   */
4389         /* Note that multiple extensions may clash if magical scalars   */
4390         /* etc holding private data from one are passed to another.     */
4391         vtable = NULL;
4392         break;
4393     default:
4394         Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
4395     }
4396
4397     /* Rest of work is done else where */
4398     mg = sv_magicext(sv,obj,how,vtable,name,namlen);
4399
4400     switch (how) {
4401     case PERL_MAGIC_taint:
4402         mg->mg_len = 1;
4403         break;
4404     case PERL_MAGIC_ext:
4405     case PERL_MAGIC_dbfile:
4406         SvRMAGICAL_on(sv);
4407         break;
4408     }
4409 }
4410
4411 /*
4412 =for apidoc sv_unmagic
4413
4414 Removes all magic of type C<type> from an SV.
4415
4416 =cut
4417 */
4418
4419 int
4420 Perl_sv_unmagic(pTHX_ SV *sv, int type)
4421 {
4422     MAGIC* mg;
4423     MAGIC** mgp;
4424     if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
4425         return 0;
4426     mgp = &SvMAGIC(sv);
4427     for (mg = *mgp; mg; mg = *mgp) {
4428         if (mg->mg_type == type) {
4429             const MGVTBL* const vtbl = mg->mg_virtual;
4430             *mgp = mg->mg_moremagic;
4431             if (vtbl && vtbl->svt_free)
4432                 CALL_FPTR(vtbl->svt_free)(aTHX_ sv, mg);
4433             if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
4434                 if (mg->mg_len > 0)
4435                     Safefree(mg->mg_ptr);
4436                 else if (mg->mg_len == HEf_SVKEY)
4437                     SvREFCNT_dec((SV*)mg->mg_ptr);
4438                 else if (mg->mg_type == PERL_MAGIC_utf8 && mg->mg_ptr)
4439                     Safefree(mg->mg_ptr);
4440             }
4441             if (mg->mg_flags & MGf_REFCOUNTED)
4442                 SvREFCNT_dec(mg->mg_obj);
4443             Safefree(mg);
4444         }
4445         else
4446             mgp = &mg->mg_moremagic;
4447     }
4448     if (!SvMAGIC(sv)) {
4449         SvMAGICAL_off(sv);
4450         SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_NOK|SVp_POK)) >> PRIVSHIFT;
4451         SvMAGIC_set(sv, NULL);
4452     }
4453
4454     return 0;
4455 }
4456
4457 /*
4458 =for apidoc sv_rvweaken
4459
4460 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
4461 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
4462 push a back-reference to this RV onto the array of backreferences
4463 associated with that magic.
4464
4465 =cut
4466 */
4467
4468 SV *
4469 Perl_sv_rvweaken(pTHX_ SV *sv)
4470 {
4471     SV *tsv;
4472     if (!SvOK(sv))  /* let undefs pass */
4473         return sv;
4474     if (!SvROK(sv))
4475         Perl_croak(aTHX_ "Can't weaken a nonreference");
4476     else if (SvWEAKREF(sv)) {
4477         if (ckWARN(WARN_MISC))
4478             Perl_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
4479         return sv;
4480     }
4481     tsv = SvRV(sv);
4482     Perl_sv_add_backref(aTHX_ tsv, sv);
4483     SvWEAKREF_on(sv);
4484     SvREFCNT_dec(tsv);
4485     return sv;
4486 }
4487
4488 /* Give tsv backref magic if it hasn't already got it, then push a
4489  * back-reference to sv onto the array associated with the backref magic.
4490  */
4491
4492 void
4493 Perl_sv_add_backref(pTHX_ SV *tsv, SV *sv)
4494 {
4495     dVAR;
4496     AV *av;
4497
4498     if (SvTYPE(tsv) == SVt_PVHV) {
4499         AV **const avp = Perl_hv_backreferences_p(aTHX_ (HV*)tsv);
4500
4501         av = *avp;
4502         if (!av) {
4503             /* There is no AV in the offical place - try a fixup.  */
4504             MAGIC *const mg = mg_find(tsv, PERL_MAGIC_backref);
4505
4506             if (mg) {
4507                 /* Aha. They've got it stowed in magic.  Bring it back.  */
4508                 av = (AV*)mg->mg_obj;
4509                 /* Stop mg_free decreasing the refernce count.  */
4510                 mg->mg_obj = NULL;
4511                 /* Stop mg_free even calling the destructor, given that
4512                    there's no AV to free up.  */
4513                 mg->mg_virtual = 0;
4514                 sv_unmagic(tsv, PERL_MAGIC_backref);
4515             } else {
4516                 av = newAV();
4517                 AvREAL_off(av);
4518                 SvREFCNT_inc(av);
4519             }
4520             *avp = av;
4521         }
4522     } else {
4523         const MAGIC *const mg
4524             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
4525         if (mg)
4526             av = (AV*)mg->mg_obj;
4527         else {
4528             av = newAV();
4529             AvREAL_off(av);
4530             sv_magic(tsv, (SV*)av, PERL_MAGIC_backref, NULL, 0);
4531             /* av now has a refcnt of 2, which avoids it getting freed
4532              * before us during global cleanup. The extra ref is removed
4533              * by magic_killbackrefs() when tsv is being freed */
4534         }
4535     }
4536     if (AvFILLp(av) >= AvMAX(av)) {
4537         av_extend(av, AvFILLp(av)+1);
4538     }
4539     AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
4540 }
4541
4542 /* delete a back-reference to ourselves from the backref magic associated
4543  * with the SV we point to.
4544  */
4545
4546 STATIC void
4547 S_sv_del_backref(pTHX_ SV *tsv, SV *sv)
4548 {
4549     dVAR;
4550     AV *av = NULL;
4551     SV **svp;
4552     I32 i;
4553
4554     if (SvTYPE(tsv) == SVt_PVHV && SvOOK(tsv)) {
4555         av = *Perl_hv_backreferences_p(aTHX_ (HV*)tsv);
4556         /* We mustn't attempt to "fix up" the hash here by moving the
4557            backreference array back to the hv_aux structure, as that is stored
4558            in the main HvARRAY(), and hfreentries assumes that no-one
4559            reallocates HvARRAY() while it is running.  */
4560     }
4561     if (!av) {
4562         const MAGIC *const mg
4563             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
4564         if (mg)
4565             av = (AV *)mg->mg_obj;
4566     }
4567     if (!av) {
4568         if (PL_in_clean_all)
4569             return;
4570         Perl_croak(aTHX_ "panic: del_backref");
4571     }
4572
4573     if (SvIS_FREED(av))
4574         return;
4575
4576     svp = AvARRAY(av);
4577     /* We shouldn't be in here more than once, but for paranoia reasons lets
4578        not assume this.  */
4579     for (i = AvFILLp(av); i >= 0; i--) {
4580         if (svp[i] == sv) {
4581             const SSize_t fill = AvFILLp(av);
4582             if (i != fill) {
4583                 /* We weren't the last entry.
4584                    An unordered list has this property that you can take the
4585                    last element off the end to fill the hole, and it's still
4586                    an unordered list :-)
4587                 */
4588                 svp[i] = svp[fill];
4589             }
4590             svp[fill] = NULL;
4591             AvFILLp(av) = fill - 1;
4592         }
4593     }
4594 }
4595
4596 int
4597 Perl_sv_kill_backrefs(pTHX_ SV *sv, AV *av)
4598 {
4599     SV **svp = AvARRAY(av);
4600
4601     PERL_UNUSED_ARG(sv);
4602
4603     /* Not sure why the av can get freed ahead of its sv, but somehow it does
4604        in ext/B/t/bytecode.t test 15 (involving print <DATA>)  */
4605     if (svp && !SvIS_FREED(av)) {
4606         SV *const *const last = svp + AvFILLp(av);
4607
4608         while (svp <= last) {
4609             if (*svp) {
4610                 SV *const referrer = *svp;
4611                 if (SvWEAKREF(referrer)) {
4612                     /* XXX Should we check that it hasn't changed? */
4613                     SvRV_set(referrer, 0);
4614                     SvOK_off(referrer);
4615                     SvWEAKREF_off(referrer);
4616                 } else if (SvTYPE(referrer) == SVt_PVGV ||
4617                            SvTYPE(referrer) == SVt_PVLV) {
4618                     /* You lookin' at me?  */
4619                     assert(GvSTASH(referrer));
4620                     assert(GvSTASH(referrer) == (HV*)sv);
4621                     GvSTASH(referrer) = 0;
4622                 } else {
4623                     Perl_croak(aTHX_
4624                                "panic: magic_killbackrefs (flags=%"UVxf")",
4625                                (UV)SvFLAGS(referrer));
4626                 }
4627
4628                 *svp = NULL;
4629             }
4630             svp++;
4631         }
4632     }
4633     SvREFCNT_dec(av); /* remove extra count added by sv_add_backref() */
4634     return 0;
4635 }
4636
4637 /*
4638 =for apidoc sv_insert
4639
4640 Inserts a string at the specified offset/length within the SV. Similar to
4641 the Perl substr() function.
4642
4643 =cut
4644 */
4645
4646 void
4647 Perl_sv_insert(pTHX_ SV *bigstr, STRLEN offset, STRLEN len, const char *little, STRLEN littlelen)
4648 {
4649     dVAR;
4650     register char *big;
4651     register char *mid;
4652     register char *midend;
4653     register char *bigend;
4654     register I32 i;
4655     STRLEN curlen;
4656
4657
4658     if (!bigstr)
4659         Perl_croak(aTHX_ "Can't modify non-existent substring");
4660     SvPV_force(bigstr, curlen);
4661     (void)SvPOK_only_UTF8(bigstr);
4662     if (offset + len > curlen) {
4663         SvGROW(bigstr, offset+len+1);
4664         Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
4665         SvCUR_set(bigstr, offset+len);
4666     }
4667
4668     SvTAINT(bigstr);
4669     i = littlelen - len;
4670     if (i > 0) {                        /* string might grow */
4671         big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
4672         mid = big + offset + len;
4673         midend = bigend = big + SvCUR(bigstr);
4674         bigend += i;
4675         *bigend = '\0';
4676         while (midend > mid)            /* shove everything down */
4677             *--bigend = *--midend;
4678         Move(little,big+offset,littlelen,char);
4679         SvCUR_set(bigstr, SvCUR(bigstr) + i);
4680         SvSETMAGIC(bigstr);
4681         return;
4682     }
4683     else if (i == 0) {
4684         Move(little,SvPVX(bigstr)+offset,len,char);
4685         SvSETMAGIC(bigstr);
4686         return;
4687     }
4688
4689     big = SvPVX(bigstr);
4690     mid = big + offset;
4691     midend = mid + len;
4692     bigend = big + SvCUR(bigstr);
4693
4694     if (midend > bigend)
4695         Perl_croak(aTHX_ "panic: sv_insert");
4696
4697     if (mid - big > bigend - midend) {  /* faster to shorten from end */
4698         if (littlelen) {
4699             Move(little, mid, littlelen,char);
4700             mid += littlelen;
4701         }
4702         i = bigend - midend;
4703         if (i > 0) {
4704             Move(midend, mid, i,char);
4705             mid += i;
4706         }
4707         *mid = '\0';
4708         SvCUR_set(bigstr, mid - big);
4709     }
4710     else if ((i = mid - big)) { /* faster from front */
4711         midend -= littlelen;
4712         mid = midend;
4713         sv_chop(bigstr,midend-i);
4714         big += i;
4715         while (i--)
4716             *--midend = *--big;
4717         if (littlelen)
4718             Move(little, mid, littlelen,char);
4719     }
4720     else if (littlelen) {
4721         midend -= littlelen;
4722         sv_chop(bigstr,midend);
4723         Move(little,midend,littlelen,char);
4724     }
4725     else {
4726         sv_chop(bigstr,midend);
4727     }
4728     SvSETMAGIC(bigstr);
4729 }
4730
4731 /*
4732 =for apidoc sv_replace
4733
4734 Make the first argument a copy of the second, then delete the original.
4735 The target SV physically takes over ownership of the body of the source SV
4736 and inherits its flags; however, the target keeps any magic it owns,
4737 and any magic in the source is discarded.
4738 Note that this is a rather specialist SV copying operation; most of the
4739 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
4740
4741 =cut
4742 */
4743
4744 void
4745 Perl_sv_replace(pTHX_ register SV *sv, register SV *nsv)
4746 {
4747     dVAR;
4748     const U32 refcnt = SvREFCNT(sv);
4749     SV_CHECK_THINKFIRST_COW_DROP(sv);
4750     if (SvREFCNT(nsv) != 1) {
4751         Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace() (%"
4752                    UVuf " != 1)", (UV) SvREFCNT(nsv));
4753     }
4754     if (SvMAGICAL(sv)) {
4755         if (SvMAGICAL(nsv))
4756             mg_free(nsv);
4757         else
4758             sv_upgrade(nsv, SVt_PVMG);
4759         SvMAGIC_set(nsv, SvMAGIC(sv));
4760         SvFLAGS(nsv) |= SvMAGICAL(sv);
4761         SvMAGICAL_off(sv);
4762         SvMAGIC_set(sv, NULL);
4763     }
4764     SvREFCNT(sv) = 0;
4765     sv_clear(sv);
4766     assert(!SvREFCNT(sv));
4767 #ifdef DEBUG_LEAKING_SCALARS
4768     sv->sv_flags  = nsv->sv_flags;
4769     sv->sv_any    = nsv->sv_any;
4770     sv->sv_refcnt = nsv->sv_refcnt;
4771     sv->sv_u      = nsv->sv_u;
4772 #else
4773     StructCopy(nsv,sv,SV);
4774 #endif
4775     /* Currently could join these into one piece of pointer arithmetic, but
4776        it would be unclear.  */
4777     if(SvTYPE(sv) == SVt_IV)
4778         SvANY(sv)
4779             = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
4780     else if (SvTYPE(sv) == SVt_RV) {
4781         SvANY(sv) = &sv->sv_u.svu_rv;
4782     }
4783         
4784
4785 #ifdef PERL_OLD_COPY_ON_WRITE
4786     if (SvIsCOW_normal(nsv)) {
4787         /* We need to follow the pointers around the loop to make the
4788            previous SV point to sv, rather than nsv.  */
4789         SV *next;
4790         SV *current = nsv;
4791         while ((next = SV_COW_NEXT_SV(current)) != nsv) {
4792             assert(next);
4793             current = next;
4794             assert(SvPVX_const(current) == SvPVX_const(nsv));
4795         }
4796         /* Make the SV before us point to the SV after us.  */
4797         if (DEBUG_C_TEST) {
4798             PerlIO_printf(Perl_debug_log, "previous is\n");
4799             sv_dump(current);
4800             PerlIO_printf(Perl_debug_log,
4801                           "move it from 0x%"UVxf" to 0x%"UVxf"\n",
4802                           (UV) SV_COW_NEXT_SV(current), (UV) sv);
4803         }
4804         SV_COW_NEXT_SV_SET(current, sv);
4805     }
4806 #endif
4807     SvREFCNT(sv) = refcnt;
4808     SvFLAGS(nsv) |= SVTYPEMASK;         /* Mark as freed */
4809     SvREFCNT(nsv) = 0;
4810     del_SV(nsv);
4811 }
4812
4813 /*
4814 =for apidoc sv_clear
4815
4816 Clear an SV: call any destructors, free up any memory used by the body,
4817 and free the body itself. The SV's head is I<not> freed, although
4818 its type is set to all 1's so that it won't inadvertently be assumed
4819 to be live during global destruction etc.
4820 This function should only be called when REFCNT is zero. Most of the time
4821 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
4822 instead.
4823
4824 =cut
4825 */
4826
4827 void
4828 Perl_sv_clear(pTHX_ register SV *sv)
4829 {
4830     dVAR;
4831     const U32 type = SvTYPE(sv);
4832     const struct body_details *const sv_type_details
4833         = bodies_by_type + type;
4834
4835     assert(sv);
4836     assert(SvREFCNT(sv) == 0);
4837
4838     if (type <= SVt_IV)
4839         return;
4840
4841     if (SvOBJECT(sv)) {
4842         if (PL_defstash) {              /* Still have a symbol table? */
4843             dSP;
4844             HV* stash;
4845             do {        
4846                 CV* destructor;
4847                 stash = SvSTASH(sv);
4848                 destructor = StashHANDLER(stash,DESTROY);
4849                 if (destructor) {
4850                     SV* const tmpref = newRV(sv);
4851                     SvREADONLY_on(tmpref);   /* DESTROY() could be naughty */
4852                     ENTER;
4853                     PUSHSTACKi(PERLSI_DESTROY);
4854                     EXTEND(SP, 2);
4855                     PUSHMARK(SP);
4856                     PUSHs(tmpref);
4857                     PUTBACK;
4858                     call_sv((SV*)destructor, G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
4859                 
4860                 
4861                     POPSTACK;
4862                     SPAGAIN;
4863                     LEAVE;
4864                     if(SvREFCNT(tmpref) < 2) {
4865                         /* tmpref is not kept alive! */
4866                         SvREFCNT(sv)--;
4867                         SvRV_set(tmpref, NULL);
4868                         SvROK_off(tmpref);
4869                     }
4870                     SvREFCNT_dec(tmpref);
4871                 }
4872             } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
4873
4874
4875             if (SvREFCNT(sv)) {
4876                 if (PL_in_clean_objs)
4877                     Perl_croak(aTHX_ "DESTROY created new reference to dead object '%s'",
4878                           HvNAME_get(stash));
4879                 /* DESTROY gave object new lease on life */
4880                 return;
4881             }
4882         }
4883
4884         if (SvOBJECT(sv)) {
4885             SvREFCNT_dec(SvSTASH(sv));  /* possibly of changed persuasion */
4886             SvOBJECT_off(sv);   /* Curse the object. */
4887             if (type != SVt_PVIO)
4888                 --PL_sv_objcount;       /* XXX Might want something more general */
4889         }
4890     }
4891     if (type >= SVt_PVMG) {
4892         if (SvMAGIC(sv))
4893             mg_free(sv);
4894         if (type == SVt_PVMG && SvFLAGS(sv) & SVpad_TYPED)
4895             SvREFCNT_dec(SvSTASH(sv));
4896     }
4897     switch (type) {
4898     case SVt_PVIO:
4899         if (IoIFP(sv) &&
4900             IoIFP(sv) != PerlIO_stdin() &&
4901             IoIFP(sv) != PerlIO_stdout() &&
4902             IoIFP(sv) != PerlIO_stderr())
4903         {
4904             io_close((IO*)sv, FALSE);
4905         }
4906         if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
4907             PerlDir_close(IoDIRP(sv));
4908         IoDIRP(sv) = (DIR*)NULL;
4909         Safefree(IoTOP_NAME(sv));
4910         Safefree(IoFMT_NAME(sv));
4911         Safefree(IoBOTTOM_NAME(sv));
4912         goto freescalar;
4913     case SVt_PVBM:
4914         goto freescalar;
4915     case SVt_PVCV:
4916     case SVt_PVFM:
4917         cv_undef((CV*)sv);
4918         goto freescalar;
4919     case SVt_PVHV:
4920         Perl_hv_kill_backrefs(aTHX_ (HV*)sv);
4921         hv_undef((HV*)sv);
4922         break;
4923     case SVt_PVAV:
4924         av_undef((AV*)sv);
4925         break;
4926     case SVt_PVLV:
4927         if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
4928             SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
4929             HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
4930             PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
4931         }
4932         else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV**  */
4933             SvREFCNT_dec(LvTARG(sv));
4934         goto freescalar;
4935     case SVt_PVGV:
4936         gp_free((GV*)sv);
4937         Safefree(GvNAME(sv));
4938         /* If we're in a stash, we don't own a reference to it. However it does
4939            have a back reference to us, which needs to be cleared.  */
4940         if (GvSTASH(sv))
4941             sv_del_backref((SV*)GvSTASH(sv), sv);
4942     case SVt_PVMG:
4943     case SVt_PVNV:
4944     case SVt_PVIV:
4945       freescalar:
4946         /* Don't bother with SvOOK_off(sv); as we're only going to free it.  */
4947         if (SvOOK(sv)) {
4948             SvPV_set(sv, SvPVX_mutable(sv) - SvIVX(sv));
4949             /* Don't even bother with turning off the OOK flag.  */
4950         }
4951     case SVt_PV:
4952     case SVt_RV:
4953         if (SvROK(sv)) {
4954             SV *target = SvRV(sv);
4955             if (SvWEAKREF(sv))
4956                 sv_del_backref(target, sv);
4957             else
4958                 SvREFCNT_dec(target);
4959         }
4960 #ifdef PERL_OLD_COPY_ON_WRITE
4961         else if (SvPVX_const(sv)) {
4962             if (SvIsCOW(sv)) {
4963                 /* I believe I need to grab the global SV mutex here and
4964                    then recheck the COW status.  */
4965                 if (DEBUG_C_TEST) {
4966                     PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
4967                     sv_dump(sv);
4968                 }
4969                 sv_release_COW(sv, SvPVX_const(sv), SvLEN(sv),
4970                                SV_COW_NEXT_SV(sv));
4971                 /* And drop it here.  */
4972                 SvFAKE_off(sv);
4973             } else if (SvLEN(sv)) {
4974                 Safefree(SvPVX_const(sv));
4975             }
4976         }
4977 #else
4978         else if (SvPVX_const(sv) && SvLEN(sv))
4979             Safefree(SvPVX_mutable(sv));
4980         else if (SvPVX_const(sv) && SvREADONLY(sv) && SvFAKE(sv)) {
4981             unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
4982             SvFAKE_off(sv);
4983         }
4984 #endif
4985         break;
4986     case SVt_NV:
4987         break;
4988     }
4989
4990     SvFLAGS(sv) &= SVf_BREAK;
4991     SvFLAGS(sv) |= SVTYPEMASK;
4992
4993     if (sv_type_details->arena) {
4994         del_body(((char *)SvANY(sv) + sv_type_details->offset),
4995                  &PL_body_roots[type]);
4996     }
4997     else if (sv_type_details->size) {
4998         my_safefree(SvANY(sv));
4999     }
5000 }
5001
5002 /*
5003 =for apidoc sv_newref
5004
5005 Increment an SV's reference count. Use the C<SvREFCNT_inc()> wrapper
5006 instead.
5007
5008 =cut
5009 */
5010
5011 SV *
5012 Perl_sv_newref(pTHX_ SV *sv)
5013 {
5014     if (sv)
5015         (SvREFCNT(sv))++;
5016     return sv;
5017 }
5018
5019 /*
5020 =for apidoc sv_free
5021
5022 Decrement an SV's reference count, and if it drops to zero, call
5023 C<sv_clear> to invoke destructors and free up any memory used by
5024 the body; finally, deallocate the SV's head itself.
5025 Normally called via a wrapper macro C<SvREFCNT_dec>.
5026
5027 =cut
5028 */
5029
5030 void
5031 Perl_sv_free(pTHX_ SV *sv)
5032 {
5033     dVAR;
5034     if (!sv)
5035         return;
5036     if (SvREFCNT(sv) == 0) {
5037         if (SvFLAGS(sv) & SVf_BREAK)
5038             /* this SV's refcnt has been artificially decremented to
5039              * trigger cleanup */
5040             return;
5041         if (PL_in_clean_all) /* All is fair */
5042             return;
5043         if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
5044             /* make sure SvREFCNT(sv)==0 happens very seldom */
5045             SvREFCNT(sv) = (~(U32)0)/2;
5046             return;
5047         }
5048         if (ckWARN_d(WARN_INTERNAL)) {
5049             Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
5050                         "Attempt to free unreferenced scalar: SV 0x%"UVxf
5051                         pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
5052 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
5053             Perl_dump_sv_child(aTHX_ sv);
5054 #endif
5055         }
5056         return;
5057     }
5058     if (--(SvREFCNT(sv)) > 0)
5059         return;
5060     Perl_sv_free2(aTHX_ sv);
5061 }
5062
5063 void
5064 Perl_sv_free2(pTHX_ SV *sv)
5065 {
5066     dVAR;
5067 #ifdef DEBUGGING
5068     if (SvTEMP(sv)) {
5069         if (ckWARN_d(WARN_DEBUGGING))
5070             Perl_warner(aTHX_ packWARN(WARN_DEBUGGING),
5071                         "Attempt to free temp prematurely: SV 0x%"UVxf
5072                         pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
5073         return;
5074     }
5075 #endif
5076     if (SvREADONLY(sv) && SvIMMORTAL(sv)) {
5077         /* make sure SvREFCNT(sv)==0 happens very seldom */
5078         SvREFCNT(sv) = (~(U32)0)/2;
5079         return;
5080     }
5081     sv_clear(sv);
5082     if (! SvREFCNT(sv))
5083         del_SV(sv);
5084 }
5085
5086 /*
5087 =for apidoc sv_len
5088
5089 Returns the length of the string in the SV. Handles magic and type
5090 coercion.  See also C<SvCUR>, which gives raw access to the xpv_cur slot.
5091
5092 =cut
5093 */
5094
5095 STRLEN
5096 Perl_sv_len(pTHX_ register SV *sv)
5097 {
5098     STRLEN len;
5099
5100     if (!sv)
5101         return 0;
5102
5103     if (SvGMAGICAL(sv))
5104         len = mg_length(sv);
5105     else
5106         (void)SvPV_const(sv, len);
5107     return len;
5108 }
5109
5110 /*
5111 =for apidoc sv_len_utf8
5112
5113 Returns the number of characters in the string in an SV, counting wide
5114 UTF-8 bytes as a single character. Handles magic and type coercion.
5115
5116 =cut
5117 */
5118
5119 /*
5120  * The length is cached in PERL_UTF8_magic, in the mg_len field.  Also the
5121  * mg_ptr is used, by sv_pos_u2b(), see the comments of S_utf8_mg_pos_init().
5122  * (Note that the mg_len is not the length of the mg_ptr field.)
5123  *
5124  */
5125
5126 STRLEN
5127 Perl_sv_len_utf8(pTHX_ register SV *sv)
5128 {
5129     if (!sv)
5130         return 0;
5131
5132     if (SvGMAGICAL(sv))
5133         return mg_length(sv);
5134     else
5135     {
5136         STRLEN len, ulen;
5137         const U8 *s = (U8*)SvPV_const(sv, len);
5138         MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : 0;
5139
5140         if (mg && mg->mg_len != -1 && (mg->mg_len > 0 || len == 0)) {
5141             ulen = mg->mg_len;
5142 #ifdef PERL_UTF8_CACHE_ASSERT
5143             assert(ulen == Perl_utf8_length(aTHX_ s, s + len));
5144 #endif
5145         }
5146         else {
5147             ulen = Perl_utf8_length(aTHX_ s, s + len);
5148             if (!mg && !SvREADONLY(sv)) {
5149                 sv_magic(sv, 0, PERL_MAGIC_utf8, 0, 0);
5150                 mg = mg_find(sv, PERL_MAGIC_utf8);
5151                 assert(mg);
5152             }
5153             if (mg)
5154                 mg->mg_len = ulen;
5155         }
5156         return ulen;
5157     }
5158 }
5159
5160 /* S_utf8_mg_pos_init() is used to initialize the mg_ptr field of
5161  * a PERL_UTF8_magic.  The mg_ptr is used to store the mapping
5162  * between UTF-8 and byte offsets.  There are two (substr offset and substr
5163  * length, the i offset, PERL_MAGIC_UTF8_CACHESIZE) times two (UTF-8 offset
5164  * and byte offset) cache positions.
5165  *
5166  * The mg_len field is used by sv_len_utf8(), see its comments.
5167  * Note that the mg_len is not the length of the mg_ptr field.
5168  *
5169  */
5170 STATIC bool
5171 S_utf8_mg_pos_init(pTHX_ SV *sv, MAGIC **mgp, STRLEN **cachep, I32 i,
5172                    I32 offsetp, const U8 *s, const U8 *start)
5173 {
5174     bool found = FALSE;
5175
5176     if (SvMAGICAL(sv) && !SvREADONLY(sv)) {
5177         if (!*mgp)
5178             *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0, 0);
5179         assert(*mgp);
5180
5181         if ((*mgp)->mg_ptr)
5182             *cachep = (STRLEN *) (*mgp)->mg_ptr;
5183         else {
5184             Newxz(*cachep, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
5185             (*mgp)->mg_ptr = (char *) *cachep;
5186         }
5187         assert(*cachep);
5188
5189         (*cachep)[i]   = offsetp;
5190         (*cachep)[i+1] = s - start;
5191         found = TRUE;
5192     }
5193
5194     return found;
5195 }
5196
5197 /*
5198  * S_utf8_mg_pos() is used to query and update mg_ptr field of
5199  * a PERL_UTF8_magic.  The mg_ptr is used to store the mapping
5200  * between UTF-8 and byte offsets.  See also the comments of
5201  * S_utf8_mg_pos_init().
5202  *
5203  */
5204 STATIC bool
5205 S_utf8_mg_pos(pTHX_ SV *sv, MAGIC **mgp, STRLEN **cachep, I32 i, I32 *offsetp, I32 uoff, const U8 **sp, const U8 *start, const U8 *send)
5206 {
5207     bool found = FALSE;
5208
5209     if (SvMAGICAL(sv) && !SvREADONLY(sv)) {
5210         if (!*mgp)
5211             *mgp = mg_find(sv, PERL_MAGIC_utf8);
5212         if (*mgp && (*mgp)->mg_ptr) {
5213             *cachep = (STRLEN *) (*mgp)->mg_ptr;
5214             ASSERT_UTF8_CACHE(*cachep);
5215             if ((*cachep)[i] == (STRLEN)uoff)   /* An exact match. */
5216                  found = TRUE;
5217             else {                      /* We will skip to the right spot. */
5218                  STRLEN forw  = 0;
5219                  STRLEN backw = 0;
5220                  const U8* p = NULL;
5221
5222                  /* The assumption is that going backward is half
5223                   * the speed of going forward (that's where the
5224                   * 2 * backw in the below comes from).  (The real
5225                   * figure of course depends on the UTF-8 data.) */
5226
5227                  if ((*cachep)[i] > (STRLEN)uoff) {
5228                       forw  = uoff;
5229                       backw = (*cachep)[i] - (STRLEN)uoff;
5230
5231                       if (forw < 2 * backw)
5232                            p = start;
5233                       else
5234                            p = start + (*cachep)[i+1];
5235                  }
5236                  /* Try this only for the substr offset (i == 0),
5237                   * not for the substr length (i == 2). */
5238                  else if (i == 0) { /* (*cachep)[i] < uoff */
5239                       const STRLEN ulen = sv_len_utf8(sv);
5240
5241                       if ((STRLEN)uoff < ulen) {
5242                            forw  = (STRLEN)uoff - (*cachep)[i];
5243                            backw = ulen - (STRLEN)uoff;
5244
5245                            if (forw < 2 * backw)
5246                                 p = start + (*cachep)[i+1];
5247                            else
5248                                 p = send;
5249                       }
5250
5251                       /* If the string is not long enough for uoff,
5252                        * we could extend it, but not at this low a level. */
5253                  }
5254
5255                  if (p) {
5256                       if (forw < 2 * backw) {
5257                            while (forw--)
5258                                 p += UTF8SKIP(p);
5259                       }
5260                       else {
5261                            while (backw--) {
5262                                 p--;
5263                                 while (UTF8_IS_CONTINUATION(*p))
5264                                      p--;
5265                            }
5266                       }
5267
5268                       /* Update the cache. */
5269                       (*cachep)[i]   = (STRLEN)uoff;
5270                       (*cachep)[i+1] = p - start;
5271
5272                       /* Drop the stale "length" cache */
5273                       if (i == 0) {
5274                           (*cachep)[2] = 0;
5275                           (*cachep)[3] = 0;
5276                       }
5277
5278                       found = TRUE;
5279                  }
5280             }
5281             if (found) {        /* Setup the return values. */
5282                  *offsetp = (*cachep)[i+1];
5283                  *sp = start + *offsetp;
5284                  if (*sp >= send) {
5285                       *sp = send;
5286                       *offsetp = send - start;
5287                  }
5288                  else if (*sp < start) {
5289                       *sp = start;
5290                       *offsetp = 0;
5291                  }
5292             }
5293         }
5294 #ifdef PERL_UTF8_CACHE_ASSERT
5295         if (found) {
5296              U8 *s = start;
5297              I32 n = uoff;
5298
5299              while (n-- && s < send)
5300                   s += UTF8SKIP(s);
5301
5302              if (i == 0) {
5303                   assert(*offsetp == s - start);
5304                   assert((*cachep)[0] == (STRLEN)uoff);
5305                   assert((*cachep)[1] == *offsetp);
5306              }
5307              ASSERT_UTF8_CACHE(*cachep);
5308         }
5309 #endif
5310     }
5311
5312     return found;
5313 }
5314
5315 /*
5316 =for apidoc sv_pos_u2b
5317
5318 Converts the value pointed to by offsetp from a count of UTF-8 chars from
5319 the start of the string, to a count of the equivalent number of bytes; if
5320 lenp is non-zero, it does the same to lenp, but this time starting from
5321 the offset, rather than from the start of the string. Handles magic and
5322 type coercion.
5323
5324 =cut
5325 */
5326
5327 /*
5328  * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
5329  * PERL_UTF8_magic of the sv to store the mapping between UTF-8 and
5330  * byte offsets.  See also the comments of S_utf8_mg_pos().
5331  *
5332  */
5333
5334 void
5335 Perl_sv_pos_u2b(pTHX_ register SV *sv, I32* offsetp, I32* lenp)
5336 {
5337     const U8 *start;
5338     STRLEN len;
5339
5340     if (!sv)
5341         return;
5342
5343     start = (U8*)SvPV_const(sv, len);
5344     if (len) {
5345         STRLEN boffset = 0;
5346         STRLEN *cache = NULL;
5347         const U8 *s = start;
5348         I32 uoffset = *offsetp;
5349         const U8 * const send = s + len;
5350         MAGIC *mg = NULL;
5351         bool found = utf8_mg_pos(sv, &mg, &cache, 0, offsetp, *offsetp, &s, start, send);
5352
5353          if (!found && uoffset > 0) {
5354               while (s < send && uoffset--)
5355                    s += UTF8SKIP(s);
5356               if (s >= send)
5357                    s = send;
5358               if (utf8_mg_pos_init(sv, &mg, &cache, 0, *offsetp, s, start))
5359                   boffset = cache[1];
5360               *offsetp = s - start;
5361          }
5362          if (lenp) {
5363               found = FALSE;
5364               start = s;
5365               if (utf8_mg_pos(sv, &mg, &cache, 2, lenp, *lenp, &s, start, send)) {
5366                   *lenp -= boffset;
5367                   found = TRUE;
5368               }
5369               if (!found && *lenp > 0) {
5370                    I32 ulen = *lenp;
5371                    if (ulen > 0)
5372                         while (s < send && ulen--)
5373                              s += UTF8SKIP(s);
5374                    if (s >= send)
5375                         s = send;
5376                    utf8_mg_pos_init(sv, &mg, &cache, 2, *lenp, s, start);
5377               }
5378               *lenp = s - start;
5379          }
5380          ASSERT_UTF8_CACHE(cache);
5381     }
5382     else {
5383          *offsetp = 0;
5384          if (lenp)
5385               *lenp = 0;
5386     }
5387
5388     return;
5389 }
5390
5391 /*
5392 =for apidoc sv_pos_b2u
5393
5394 Converts the value pointed to by offsetp from a count of bytes from the
5395 start of the string, to a count of the equivalent number of UTF-8 chars.
5396 Handles magic and type coercion.
5397
5398 =cut
5399 */
5400
5401 /*
5402  * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
5403  * PERL_UTF8_magic of the sv to store the mapping between UTF-8 and
5404  * byte offsets.  See also the comments of S_utf8_mg_pos().
5405  *
5406  */
5407
5408 void
5409 Perl_sv_pos_b2u(pTHX_ register SV* sv, I32* offsetp)
5410 {
5411     const U8* s;
5412     STRLEN len;
5413
5414     if (!sv)
5415         return;
5416
5417     s = (const U8*)SvPV_const(sv, len);
5418     if ((I32)len < *offsetp)
5419         Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset");
5420     else {
5421         const U8* send = s + *offsetp;
5422         MAGIC* mg = NULL;
5423         STRLEN *cache = NULL;
5424
5425         len = 0;
5426
5427         if (SvMAGICAL(sv) && !SvREADONLY(sv)) {
5428             mg = mg_find(sv, PERL_MAGIC_utf8);
5429             if (mg && mg->mg_ptr) {
5430                 cache = (STRLEN *) mg->mg_ptr;
5431                 if (cache[1] == (STRLEN)*offsetp) {
5432                     /* An exact match. */
5433                     *offsetp = cache[0];
5434
5435                     return;
5436                 }
5437                 else if (cache[1] < (STRLEN)*offsetp) {
5438                     /* We already know part of the way. */
5439                     len = cache[0];
5440                     s  += cache[1];
5441                     /* Let the below loop do the rest. */
5442                 }
5443                 else { /* cache[1] > *offsetp */
5444                     /* We already know all of the way, now we may
5445                      * be able to walk back.  The same assumption
5446                      * is made as in S_utf8_mg_pos(), namely that
5447                      * walking backward is twice slower than
5448                      * walking forward. */
5449                     const STRLEN forw  = *offsetp;
5450                     STRLEN backw = cache[1] - *offsetp;
5451
5452                     if (!(forw < 2 * backw)) {
5453                         const U8 *p = s + cache[1];
5454                         STRLEN ubackw = 0;
5455                         
5456                         cache[1] -= backw;
5457
5458                         while (backw--) {
5459                             p--;
5460                             while (UTF8_IS_CONTINUATION(*p)) {
5461                                 p--;
5462                                 backw--;
5463                             }
5464                             ubackw++;
5465                         }
5466
5467                         cache[0] -= ubackw;
5468                         *offsetp = cache[0];
5469
5470                         /* Drop the stale "length" cache */
5471                         cache[2] = 0;
5472                         cache[3] = 0;
5473
5474                         return;
5475                     }
5476                 }
5477             }
5478             ASSERT_UTF8_CACHE(cache);
5479         }
5480
5481         while (s < send) {
5482             STRLEN n = 1;
5483
5484             /* Call utf8n_to_uvchr() to validate the sequence
5485              * (unless a simple non-UTF character) */
5486             if (!UTF8_IS_INVARIANT(*s))
5487                 utf8n_to_uvchr(s, UTF8SKIP(s), &n, 0);
5488             if (n > 0) {
5489                 s += n;
5490                 len++;
5491             }
5492             else
5493                 break;
5494         }
5495
5496         if (!SvREADONLY(sv)) {
5497             if (!mg) {
5498                 sv_magic(sv, 0, PERL_MAGIC_utf8, 0, 0);
5499                 mg = mg_find(sv, PERL_MAGIC_utf8);
5500             }
5501             assert(mg);
5502
5503             if (!mg->mg_ptr) {
5504                 Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
5505                 mg->mg_ptr = (char *) cache;
5506             }
5507             assert(cache);
5508
5509             cache[0] = len;
5510             cache[1] = *offsetp;
5511             /* Drop the stale "length" cache */
5512             cache[2] = 0;
5513             cache[3] = 0;
5514         }
5515
5516         *offsetp = len;
5517     }
5518     return;
5519 }
5520
5521 /*
5522 =for apidoc sv_eq
5523
5524 Returns a boolean indicating whether the strings in the two SVs are
5525 identical. Is UTF-8 and 'use bytes' aware, handles get magic, and will
5526 coerce its args to strings if necessary.
5527
5528 =cut
5529 */
5530
5531 I32
5532 Perl_sv_eq(pTHX_ register SV *sv1, register SV *sv2)
5533 {
5534     dVAR;
5535     const char *pv1;
5536     STRLEN cur1;
5537     const char *pv2;
5538     STRLEN cur2;
5539     I32  eq     = 0;
5540     char *tpv   = NULL;
5541     SV* svrecode = NULL;
5542
5543     if (!sv1) {
5544         pv1 = "";
5545         cur1 = 0;
5546     }
5547     else
5548         pv1 = SvPV_const(sv1, cur1);
5549
5550     if (!sv2){
5551         pv2 = "";
5552         cur2 = 0;
5553     }
5554     else
5555         pv2 = SvPV_const(sv2, cur2);
5556
5557     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
5558         /* Differing utf8ness.
5559          * Do not UTF8size the comparands as a side-effect. */
5560          if (PL_encoding) {
5561               if (SvUTF8(sv1)) {
5562                    svrecode = newSVpvn(pv2, cur2);
5563                    sv_recode_to_utf8(svrecode, PL_encoding);
5564                    pv2 = SvPV_const(svrecode, cur2);
5565               }
5566               else {
5567                    svrecode = newSVpvn(pv1, cur1);
5568                    sv_recode_to_utf8(svrecode, PL_encoding);
5569                    pv1 = SvPV_const(svrecode, cur1);
5570               }
5571               /* Now both are in UTF-8. */
5572               if (cur1 != cur2) {
5573                    SvREFCNT_dec(svrecode);
5574                    return FALSE;
5575               }
5576          }
5577          else {
5578               bool is_utf8 = TRUE;
5579
5580               if (SvUTF8(sv1)) {
5581                    /* sv1 is the UTF-8 one,
5582                     * if is equal it must be downgrade-able */
5583                    char * const pv = (char*)bytes_from_utf8((const U8*)pv1,
5584                                                      &cur1, &is_utf8);
5585                    if (pv != pv1)
5586                         pv1 = tpv = pv;
5587               }
5588               else {
5589                    /* sv2 is the UTF-8 one,
5590                     * if is equal it must be downgrade-able */
5591                    char * const pv = (char *)bytes_from_utf8((const U8*)pv2,
5592                                                       &cur2, &is_utf8);
5593                    if (pv != pv2)
5594                         pv2 = tpv = pv;
5595               }
5596               if (is_utf8) {
5597                    /* Downgrade not possible - cannot be eq */
5598                    assert (tpv == 0);
5599                    return FALSE;
5600               }
5601          }
5602     }
5603
5604     if (cur1 == cur2)
5605         eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
5606         
5607     if (svrecode)
5608          SvREFCNT_dec(svrecode);
5609
5610     if (tpv)
5611         Safefree(tpv);
5612
5613     return eq;
5614 }
5615
5616 /*
5617 =for apidoc sv_cmp
5618
5619 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
5620 string in C<sv1> is less than, equal to, or greater than the string in
5621 C<sv2>. Is UTF-8 and 'use bytes' aware, handles get magic, and will
5622 coerce its args to strings if necessary.  See also C<sv_cmp_locale>.
5623
5624 =cut
5625 */
5626
5627 I32
5628 Perl_sv_cmp(pTHX_ register SV *sv1, register SV *sv2)
5629 {
5630     dVAR;
5631     STRLEN cur1, cur2;
5632     const char *pv1, *pv2;
5633     char *tpv = NULL;
5634     I32  cmp;
5635     SV *svrecode = NULL;
5636
5637     if (!sv1) {
5638         pv1 = "";
5639         cur1 = 0;
5640     }
5641     else
5642         pv1 = SvPV_const(sv1, cur1);
5643
5644     if (!sv2) {
5645         pv2 = "";
5646         cur2 = 0;
5647     }
5648     else
5649         pv2 = SvPV_const(sv2, cur2);
5650
5651     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
5652         /* Differing utf8ness.
5653          * Do not UTF8size the comparands as a side-effect. */
5654         if (SvUTF8(sv1)) {
5655             if (PL_encoding) {
5656                  svrecode = newSVpvn(pv2, cur2);
5657                  sv_recode_to_utf8(svrecode, PL_encoding);
5658                  pv2 = SvPV_const(svrecode, cur2);
5659             }
5660             else {
5661                  pv2 = tpv = (char*)bytes_to_utf8((const U8*)pv2, &cur2);
5662             }
5663         }
5664         else {
5665             if (PL_encoding) {
5666                  svrecode = newSVpvn(pv1, cur1);
5667                  sv_recode_to_utf8(svrecode, PL_encoding);
5668                  pv1 = SvPV_const(svrecode, cur1);
5669             }
5670             else {
5671                  pv1 = tpv = (char*)bytes_to_utf8((const U8*)pv1, &cur1);
5672             }
5673         }
5674     }
5675
5676     if (!cur1) {
5677         cmp = cur2 ? -1 : 0;
5678     } else if (!cur2) {
5679         cmp = 1;
5680     } else {
5681         const I32 retval = memcmp((const void*)pv1, (const void*)pv2, cur1 < cur2 ? cur1 : cur2);
5682
5683         if (retval) {
5684             cmp = retval < 0 ? -1 : 1;
5685         } else if (cur1 == cur2) {
5686             cmp = 0;
5687         } else {
5688             cmp = cur1 < cur2 ? -1 : 1;
5689         }
5690     }
5691
5692     if (svrecode)
5693          SvREFCNT_dec(svrecode);
5694
5695     if (tpv)
5696         Safefree(tpv);
5697
5698     return cmp;
5699 }
5700
5701 /*
5702 =for apidoc sv_cmp_locale
5703
5704 Compares the strings in two SVs in a locale-aware manner. Is UTF-8 and
5705 'use bytes' aware, handles get magic, and will coerce its args to strings
5706 if necessary.  See also C<sv_cmp_locale>.  See also C<sv_cmp>.
5707
5708 =cut
5709 */
5710
5711 I32
5712 Perl_sv_cmp_locale(pTHX_ register SV *sv1, register SV *sv2)
5713 {
5714     dVAR;
5715 #ifdef USE_LOCALE_COLLATE
5716
5717     char *pv1, *pv2;
5718     STRLEN len1, len2;
5719     I32 retval;
5720
5721     if (PL_collation_standard)
5722         goto raw_compare;
5723
5724     len1 = 0;
5725     pv1 = sv1 ? sv_collxfrm(sv1, &len1) : (char *) NULL;
5726     len2 = 0;
5727     pv2 = sv2 ? sv_collxfrm(sv2, &len2) : (char *) NULL;
5728
5729     if (!pv1 || !len1) {
5730         if (pv2 && len2)
5731             return -1;
5732         else
5733             goto raw_compare;
5734     }
5735     else {
5736         if (!pv2 || !len2)
5737             return 1;
5738     }
5739
5740     retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
5741
5742     if (retval)
5743         return retval < 0 ? -1 : 1;
5744
5745     /*
5746      * When the result of collation is equality, that doesn't mean
5747      * that there are no differences -- some locales exclude some
5748      * characters from consideration.  So to avoid false equalities,
5749      * we use the raw string as a tiebreaker.
5750      */
5751
5752   raw_compare:
5753     /* FALL THROUGH */
5754
5755 #endif /* USE_LOCALE_COLLATE */
5756
5757     return sv_cmp(sv1, sv2);
5758 }
5759
5760
5761 #ifdef USE_LOCALE_COLLATE
5762
5763 /*
5764 =for apidoc sv_collxfrm
5765
5766 Add Collate Transform magic to an SV if it doesn't already have it.
5767
5768 Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
5769 scalar data of the variable, but transformed to such a format that a normal
5770 memory comparison can be used to compare the data according to the locale
5771 settings.
5772
5773 =cut
5774 */
5775
5776 char *
5777 Perl_sv_collxfrm(pTHX_ SV *sv, STRLEN *nxp)
5778 {
5779     dVAR;
5780     MAGIC *mg;
5781
5782     mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
5783     if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
5784         const char *s;
5785         char *xf;
5786         STRLEN len, xlen;
5787
5788         if (mg)
5789             Safefree(mg->mg_ptr);
5790         s = SvPV_const(sv, len);
5791         if ((xf = mem_collxfrm(s, len, &xlen))) {
5792             if (SvREADONLY(sv)) {
5793                 SAVEFREEPV(xf);
5794                 *nxp = xlen;
5795                 return xf + sizeof(PL_collation_ix);
5796             }
5797             if (! mg) {
5798                 sv_magic(sv, 0, PERL_MAGIC_collxfrm, 0, 0);
5799                 mg = mg_find(sv, PERL_MAGIC_collxfrm);
5800                 assert(mg);
5801             }
5802             mg->mg_ptr = xf;
5803             mg->mg_len = xlen;
5804         }
5805         else {
5806             if (mg) {
5807                 mg->mg_ptr = NULL;
5808                 mg->mg_len = -1;
5809             }
5810         }
5811     }
5812     if (mg && mg->mg_ptr) {
5813         *nxp = mg->mg_len;
5814         return mg->mg_ptr + sizeof(PL_collation_ix);
5815     }
5816     else {
5817         *nxp = 0;
5818         return NULL;
5819     }
5820 }
5821
5822 #endif /* USE_LOCALE_COLLATE */
5823
5824 /*
5825 =for apidoc sv_gets
5826
5827 Get a line from the filehandle and store it into the SV, optionally
5828 appending to the currently-stored string.
5829
5830 =cut
5831 */
5832
5833 char *
5834 Perl_sv_gets(pTHX_ register SV *sv, register PerlIO *fp, I32 append)
5835 {
5836     dVAR;
5837     const char *rsptr;
5838     STRLEN rslen;
5839     register STDCHAR rslast;
5840     register STDCHAR *bp;
5841     register I32 cnt;
5842     I32 i = 0;
5843     I32 rspara = 0;
5844     I32 recsize;
5845
5846     if (SvTHINKFIRST(sv))
5847         sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
5848     /* XXX. If you make this PVIV, then copy on write can copy scalars read
5849        from <>.
5850        However, perlbench says it's slower, because the existing swipe code
5851        is faster than copy on write.
5852        Swings and roundabouts.  */
5853     SvUPGRADE(sv, SVt_PV);
5854
5855     SvSCREAM_off(sv);
5856
5857     if (append) {
5858         if (PerlIO_isutf8(fp)) {
5859             if (!SvUTF8(sv)) {
5860                 sv_utf8_upgrade_nomg(sv);
5861                 sv_pos_u2b(sv,&append,0);
5862             }
5863         } else if (SvUTF8(sv)) {
5864             SV * const tsv = newSV(0);
5865             sv_gets(tsv, fp, 0);
5866             sv_utf8_upgrade_nomg(tsv);
5867             SvCUR_set(sv,append);
5868             sv_catsv(sv,tsv);
5869             sv_free(tsv);
5870             goto return_string_or_null;
5871         }
5872     }
5873
5874     SvPOK_only(sv);
5875     if (PerlIO_isutf8(fp))
5876         SvUTF8_on(sv);
5877
5878     if (IN_PERL_COMPILETIME) {
5879         /* we always read code in line mode */
5880         rsptr = "\n";
5881         rslen = 1;
5882     }
5883     else if (RsSNARF(PL_rs)) {
5884         /* If it is a regular disk file use size from stat() as estimate
5885            of amount we are going to read - may result in malloc-ing
5886            more memory than we realy need if layers bellow reduce
5887            size we read (e.g. CRLF or a gzip layer)
5888          */
5889         Stat_t st;
5890         if (!PerlLIO_fstat(PerlIO_fileno(fp), &st) && S_ISREG(st.st_mode))  {
5891             const Off_t offset = PerlIO_tell(fp);
5892             if (offset != (Off_t) -1 && st.st_size + append > offset) {
5893                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
5894             }
5895         }
5896         rsptr = NULL;
5897         rslen = 0;
5898     }
5899     else if (RsRECORD(PL_rs)) {
5900       I32 bytesread;
5901       char *buffer;
5902
5903       /* Grab the size of the record we're getting */
5904       recsize = SvIV(SvRV(PL_rs));
5905       buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
5906       /* Go yank in */
5907 #ifdef VMS
5908       /* VMS wants read instead of fread, because fread doesn't respect */
5909       /* RMS record boundaries. This is not necessarily a good thing to be */
5910       /* doing, but we've got no other real choice - except avoid stdio
5911          as implementation - perhaps write a :vms layer ?
5912        */
5913       bytesread = PerlLIO_read(PerlIO_fileno(fp), buffer, recsize);
5914 #else
5915       bytesread = PerlIO_read(fp, buffer, recsize);
5916 #endif
5917       if (bytesread < 0)
5918           bytesread = 0;
5919       SvCUR_set(sv, bytesread += append);
5920       buffer[bytesread] = '\0';
5921       goto return_string_or_null;
5922     }
5923     else if (RsPARA(PL_rs)) {
5924         rsptr = "\n\n";
5925         rslen = 2;
5926         rspara = 1;
5927     }
5928     else {
5929         /* Get $/ i.e. PL_rs into same encoding as stream wants */
5930         if (PerlIO_isutf8(fp)) {
5931             rsptr = SvPVutf8(PL_rs, rslen);
5932         }
5933         else {
5934             if (SvUTF8(PL_rs)) {
5935                 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
5936                     Perl_croak(aTHX_ "Wide character in $/");
5937                 }
5938             }
5939             rsptr = SvPV_const(PL_rs, rslen);
5940         }
5941     }
5942
5943     rslast = rslen ? rsptr[rslen - 1] : '\0';
5944
5945     if (rspara) {               /* have to do this both before and after */
5946         do {                    /* to make sure file boundaries work right */
5947             if (PerlIO_eof(fp))
5948                 return 0;
5949             i = PerlIO_getc(fp);
5950             if (i != '\n') {
5951                 if (i == -1)
5952                     return 0;
5953                 PerlIO_ungetc(fp,i);
5954                 break;
5955             }
5956         } while (i != EOF);
5957     }
5958
5959     /* See if we know enough about I/O mechanism to cheat it ! */
5960
5961     /* This used to be #ifdef test - it is made run-time test for ease
5962        of abstracting out stdio interface. One call should be cheap
5963        enough here - and may even be a macro allowing compile
5964        time optimization.
5965      */
5966
5967     if (PerlIO_fast_gets(fp)) {
5968
5969     /*
5970      * We're going to steal some values from the stdio struct
5971      * and put EVERYTHING in the innermost loop into registers.
5972      */
5973     register STDCHAR *ptr;
5974     STRLEN bpx;
5975     I32 shortbuffered;
5976
5977 #if defined(VMS) && defined(PERLIO_IS_STDIO)
5978     /* An ungetc()d char is handled separately from the regular
5979      * buffer, so we getc() it back out and stuff it in the buffer.
5980      */
5981     i = PerlIO_getc(fp);
5982     if (i == EOF) return 0;
5983     *(--((*fp)->_ptr)) = (unsigned char) i;
5984     (*fp)->_cnt++;
5985 #endif
5986
5987     /* Here is some breathtakingly efficient cheating */
5988
5989     cnt = PerlIO_get_cnt(fp);                   /* get count into register */
5990     /* make sure we have the room */
5991     if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
5992         /* Not room for all of it
5993            if we are looking for a separator and room for some
5994          */
5995         if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
5996             /* just process what we have room for */
5997             shortbuffered = cnt - SvLEN(sv) + append + 1;
5998             cnt -= shortbuffered;
5999         }
6000         else {
6001             shortbuffered = 0;
6002             /* remember that cnt can be negative */
6003             SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
6004         }
6005     }
6006     else
6007         shortbuffered = 0;
6008     bp = (STDCHAR*)SvPVX_const(sv) + append;  /* move these two too to registers */
6009     ptr = (STDCHAR*)PerlIO_get_ptr(fp);
6010     DEBUG_P(PerlIO_printf(Perl_debug_log,
6011         "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
6012     DEBUG_P(PerlIO_printf(Perl_debug_log,
6013         "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
6014                PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
6015                PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
6016     for (;;) {
6017       screamer:
6018         if (cnt > 0) {
6019             if (rslen) {
6020                 while (cnt > 0) {                    /* this     |  eat */
6021                     cnt--;
6022                     if ((*bp++ = *ptr++) == rslast)  /* really   |  dust */
6023                         goto thats_all_folks;        /* screams  |  sed :-) */
6024                 }
6025             }
6026             else {
6027                 Copy(ptr, bp, cnt, char);            /* this     |  eat */
6028                 bp += cnt;                           /* screams  |  dust */
6029                 ptr += cnt;                          /* louder   |  sed :-) */
6030                 cnt = 0;
6031             }
6032         }
6033         
6034         if (shortbuffered) {            /* oh well, must extend */
6035             cnt = shortbuffered;
6036             shortbuffered = 0;
6037             bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
6038             SvCUR_set(sv, bpx);
6039             SvGROW(sv, SvLEN(sv) + append + cnt + 2);
6040             bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
6041             continue;
6042         }
6043
6044         DEBUG_P(PerlIO_printf(Perl_debug_log,
6045                               "Screamer: going to getc, ptr=%"UVuf", cnt=%ld\n",
6046                               PTR2UV(ptr),(long)cnt));
6047         PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
6048 #if 0
6049         DEBUG_P(PerlIO_printf(Perl_debug_log,
6050             "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
6051             PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
6052             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
6053 #endif
6054         /* This used to call 'filbuf' in stdio form, but as that behaves like
6055            getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
6056            another abstraction.  */
6057         i   = PerlIO_getc(fp);          /* get more characters */
6058 #if 0
6059         DEBUG_P(PerlIO_printf(Perl_debug_log,
6060             "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
6061             PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
6062             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
6063 #endif
6064         cnt = PerlIO_get_cnt(fp);
6065         ptr = (STDCHAR*)PerlIO_get_ptr(fp);     /* reregisterize cnt and ptr */
6066         DEBUG_P(PerlIO_printf(Perl_debug_log,
6067             "Screamer: after getc, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
6068
6069         if (i == EOF)                   /* all done for ever? */
6070             goto thats_really_all_folks;
6071
6072         bpx = bp - (STDCHAR*)SvPVX_const(sv);   /* box up before relocation */
6073         SvCUR_set(sv, bpx);
6074         SvGROW(sv, bpx + cnt + 2);
6075         bp = (STDCHAR*)SvPVX_const(sv) + bpx;   /* unbox after relocation */
6076
6077         *bp++ = (STDCHAR)i;             /* store character from PerlIO_getc */
6078
6079         if (rslen && (STDCHAR)i == rslast)  /* all done for now? */
6080             goto thats_all_folks;
6081     }
6082
6083 thats_all_folks:
6084     if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
6085           memNE((char*)bp - rslen, rsptr, rslen))
6086         goto screamer;                          /* go back to the fray */
6087 thats_really_all_folks:
6088     if (shortbuffered)
6089         cnt += shortbuffered;
6090         DEBUG_P(PerlIO_printf(Perl_debug_log,
6091             "Screamer: quitting, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
6092     PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt);  /* put these back or we're in trouble */
6093     DEBUG_P(PerlIO_printf(Perl_debug_log,
6094         "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%ld, base=%"UVuf"\n",
6095         PTR2UV(PerlIO_get_ptr(fp)), (long)PerlIO_get_cnt(fp),
6096         PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
6097     *bp = '\0';
6098     SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv));      /* set length */
6099     DEBUG_P(PerlIO_printf(Perl_debug_log,
6100         "Screamer: done, len=%ld, string=|%.*s|\n",
6101         (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
6102     }
6103    else
6104     {
6105        /*The big, slow, and stupid way. */
6106 #ifdef USE_HEAP_INSTEAD_OF_STACK        /* Even slower way. */
6107         STDCHAR *buf = NULL;
6108         Newx(buf, 8192, STDCHAR);
6109         assert(buf);
6110 #else
6111         STDCHAR buf[8192];
6112 #endif
6113
6114 screamer2:
6115         if (rslen) {
6116             register const STDCHAR * const bpe = buf + sizeof(buf);
6117             bp = buf;
6118             while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
6119                 ; /* keep reading */
6120             cnt = bp - buf;
6121         }
6122         else {
6123             cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
6124             /* Accomodate broken VAXC compiler, which applies U8 cast to
6125              * both args of ?: operator, causing EOF to change into 255
6126              */
6127             if (cnt > 0)
6128                  i = (U8)buf[cnt - 1];
6129             else
6130                  i = EOF;
6131         }
6132
6133         if (cnt < 0)
6134             cnt = 0;  /* we do need to re-set the sv even when cnt <= 0 */
6135         if (append)
6136              sv_catpvn(sv, (char *) buf, cnt);
6137         else
6138              sv_setpvn(sv, (char *) buf, cnt);
6139
6140         if (i != EOF &&                 /* joy */
6141             (!rslen ||
6142              SvCUR(sv) < rslen ||
6143              memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
6144         {
6145             append = -1;
6146             /*
6147              * If we're reading from a TTY and we get a short read,
6148              * indicating that the user hit his EOF character, we need
6149              * to notice it now, because if we try to read from the TTY
6150              * again, the EOF condition will disappear.
6151              *
6152              * The comparison of cnt to sizeof(buf) is an optimization
6153              * that prevents unnecessary calls to feof().
6154              *
6155              * - jik 9/25/96
6156              */
6157             if (!(cnt < sizeof(buf) && PerlIO_eof(fp)))
6158                 goto screamer2;
6159         }
6160
6161 #ifdef USE_HEAP_INSTEAD_OF_STACK
6162         Safefree(buf);
6163 #endif
6164     }
6165
6166     if (rspara) {               /* have to do this both before and after */
6167         while (i != EOF) {      /* to make sure file boundaries work right */
6168             i = PerlIO_getc(fp);
6169             if (i != '\n') {
6170                 PerlIO_ungetc(fp,i);
6171                 break;
6172             }
6173         }
6174     }
6175
6176 return_string_or_null:
6177     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
6178 }
6179
6180 /*
6181 =for apidoc sv_inc
6182
6183 Auto-increment of the value in the SV, doing string to numeric conversion
6184 if necessary. Handles 'get' magic.
6185
6186 =cut
6187 */
6188
6189 void
6190 Perl_sv_inc(pTHX_ register SV *sv)
6191 {
6192     dVAR;
6193     register char *d;
6194     int flags;
6195
6196     if (!sv)
6197         return;
6198     SvGETMAGIC(sv);
6199     if (SvTHINKFIRST(sv)) {
6200         if (SvIsCOW(sv))
6201             sv_force_normal_flags(sv, 0);
6202         if (SvREADONLY(sv)) {
6203             if (IN_PERL_RUNTIME)
6204                 Perl_croak(aTHX_ PL_no_modify);
6205         }
6206         if (SvROK(sv)) {
6207             IV i;
6208             if (SvAMAGIC(sv) && AMG_CALLun(sv,inc))
6209                 return;
6210             i = PTR2IV(SvRV(sv));
6211             sv_unref(sv);
6212             sv_setiv(sv, i);
6213         }
6214     }
6215     flags = SvFLAGS(sv);
6216     if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
6217         /* It's (privately or publicly) a float, but not tested as an
6218            integer, so test it to see. */
6219         (void) SvIV(sv);
6220         flags = SvFLAGS(sv);
6221     }
6222     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
6223         /* It's publicly an integer, or privately an integer-not-float */
6224 #ifdef PERL_PRESERVE_IVUV
6225       oops_its_int:
6226 #endif
6227         if (SvIsUV(sv)) {
6228             if (SvUVX(sv) == UV_MAX)
6229                 sv_setnv(sv, UV_MAX_P1);
6230             else
6231                 (void)SvIOK_only_UV(sv);
6232                 SvUV_set(sv, SvUVX(sv) + 1);
6233         } else {
6234             if (SvIVX(sv) == IV_MAX)
6235                 sv_setuv(sv, (UV)IV_MAX + 1);
6236             else {
6237                 (void)SvIOK_only(sv);
6238                 SvIV_set(sv, SvIVX(sv) + 1);
6239             }   
6240         }
6241         return;
6242     }
6243     if (flags & SVp_NOK) {
6244         (void)SvNOK_only(sv);
6245         SvNV_set(sv, SvNVX(sv) + 1.0);
6246         return;
6247     }
6248
6249     if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
6250         if ((flags & SVTYPEMASK) < SVt_PVIV)
6251             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
6252         (void)SvIOK_only(sv);
6253         SvIV_set(sv, 1);
6254         return;
6255     }
6256     d = SvPVX(sv);
6257     while (isALPHA(*d)) d++;
6258     while (isDIGIT(*d)) d++;
6259     if (*d) {
6260 #ifdef PERL_PRESERVE_IVUV
6261         /* Got to punt this as an integer if needs be, but we don't issue
6262            warnings. Probably ought to make the sv_iv_please() that does
6263            the conversion if possible, and silently.  */
6264         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
6265         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
6266             /* Need to try really hard to see if it's an integer.
6267                9.22337203685478e+18 is an integer.
6268                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
6269                so $a="9.22337203685478e+18"; $a+0; $a++
6270                needs to be the same as $a="9.22337203685478e+18"; $a++
6271                or we go insane. */
6272         
6273             (void) sv_2iv(sv);
6274             if (SvIOK(sv))
6275                 goto oops_its_int;
6276
6277             /* sv_2iv *should* have made this an NV */
6278             if (flags & SVp_NOK) {
6279                 (void)SvNOK_only(sv);
6280                 SvNV_set(sv, SvNVX(sv) + 1.0);
6281                 return;
6282             }
6283             /* I don't think we can get here. Maybe I should assert this
6284                And if we do get here I suspect that sv_setnv will croak. NWC
6285                Fall through. */
6286 #if defined(USE_LONG_DOUBLE)
6287             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"PERL_PRIgldbl"\n",
6288                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
6289 #else
6290             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
6291                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
6292 #endif
6293         }
6294 #endif /* PERL_PRESERVE_IVUV */
6295         sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
6296         return;
6297     }
6298     d--;
6299     while (d >= SvPVX_const(sv)) {
6300         if (isDIGIT(*d)) {
6301             if (++*d <= '9')
6302                 return;
6303             *(d--) = '0';
6304         }
6305         else {
6306 #ifdef EBCDIC
6307             /* MKS: The original code here died if letters weren't consecutive.
6308              * at least it didn't have to worry about non-C locales.  The
6309              * new code assumes that ('z'-'a')==('Z'-'A'), letters are
6310              * arranged in order (although not consecutively) and that only
6311              * [A-Za-z] are accepted by isALPHA in the C locale.
6312              */
6313             if (*d != 'z' && *d != 'Z') {
6314                 do { ++*d; } while (!isALPHA(*d));
6315                 return;
6316             }
6317             *(d--) -= 'z' - 'a';
6318 #else
6319             ++*d;
6320             if (isALPHA(*d))
6321                 return;
6322             *(d--) -= 'z' - 'a' + 1;
6323 #endif
6324         }
6325     }
6326     /* oh,oh, the number grew */
6327     SvGROW(sv, SvCUR(sv) + 2);
6328     SvCUR_set(sv, SvCUR(sv) + 1);
6329     for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
6330         *d = d[-1];
6331     if (isDIGIT(d[1]))
6332         *d = '1';
6333     else
6334         *d = d[1];
6335 }
6336
6337 /*
6338 =for apidoc sv_dec
6339
6340 Auto-decrement of the value in the SV, doing string to numeric conversion
6341 if necessary. Handles 'get' magic.
6342
6343 =cut
6344 */
6345
6346 void
6347 Perl_sv_dec(pTHX_ register SV *sv)
6348 {
6349     dVAR;
6350     int flags;
6351
6352     if (!sv)
6353         return;
6354     SvGETMAGIC(sv);
6355     if (SvTHINKFIRST(sv)) {
6356         if (SvIsCOW(sv))
6357             sv_force_normal_flags(sv, 0);
6358         if (SvREADONLY(sv)) {
6359             if (IN_PERL_RUNTIME)
6360                 Perl_croak(aTHX_ PL_no_modify);
6361         }
6362         if (SvROK(sv)) {
6363             IV i;
6364             if (SvAMAGIC(sv) && AMG_CALLun(sv,dec))
6365                 return;
6366             i = PTR2IV(SvRV(sv));
6367             sv_unref(sv);
6368             sv_setiv(sv, i);
6369         }
6370     }
6371     /* Unlike sv_inc we don't have to worry about string-never-numbers
6372        and keeping them magic. But we mustn't warn on punting */
6373     flags = SvFLAGS(sv);
6374     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
6375         /* It's publicly an integer, or privately an integer-not-float */
6376 #ifdef PERL_PRESERVE_IVUV
6377       oops_its_int:
6378 #endif
6379         if (SvIsUV(sv)) {
6380             if (SvUVX(sv) == 0) {
6381                 (void)SvIOK_only(sv);
6382                 SvIV_set(sv, -1);
6383             }
6384             else {
6385                 (void)SvIOK_only_UV(sv);
6386                 SvUV_set(sv, SvUVX(sv) - 1);
6387             }   
6388         } else {
6389             if (SvIVX(sv) == IV_MIN)
6390                 sv_setnv(sv, (NV)IV_MIN - 1.0);
6391             else {
6392                 (void)SvIOK_only(sv);
6393                 SvIV_set(sv, SvIVX(sv) - 1);
6394             }   
6395         }
6396         return;
6397     }
6398     if (flags & SVp_NOK) {
6399         SvNV_set(sv, SvNVX(sv) - 1.0);
6400         (void)SvNOK_only(sv);
6401         return;
6402     }
6403     if (!(flags & SVp_POK)) {
6404         if ((flags & SVTYPEMASK) < SVt_PVIV)
6405             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
6406         SvIV_set(sv, -1);
6407         (void)SvIOK_only(sv);
6408         return;
6409     }
6410 #ifdef PERL_PRESERVE_IVUV
6411     {
6412         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
6413         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
6414             /* Need to try really hard to see if it's an integer.
6415                9.22337203685478e+18 is an integer.
6416                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
6417                so $a="9.22337203685478e+18"; $a+0; $a--
6418                needs to be the same as $a="9.22337203685478e+18"; $a--
6419                or we go insane. */
6420         
6421             (void) sv_2iv(sv);
6422             if (SvIOK(sv))
6423                 goto oops_its_int;
6424
6425             /* sv_2iv *should* have made this an NV */
6426             if (flags & SVp_NOK) {
6427                 (void)SvNOK_only(sv);
6428                 SvNV_set(sv, SvNVX(sv) - 1.0);
6429                 return;
6430             }
6431             /* I don't think we can get here. Maybe I should assert this
6432                And if we do get here I suspect that sv_setnv will croak. NWC
6433                Fall through. */
6434 #if defined(USE_LONG_DOUBLE)
6435             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"PERL_PRIgldbl"\n",
6436                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
6437 #else
6438             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
6439                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
6440 #endif
6441         }
6442     }
6443 #endif /* PERL_PRESERVE_IVUV */
6444     sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0);   /* punt */
6445 }
6446
6447 /*
6448 =for apidoc sv_mortalcopy
6449
6450 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
6451 The new SV is marked as mortal. It will be destroyed "soon", either by an
6452 explicit call to FREETMPS, or by an implicit call at places such as
6453 statement boundaries.  See also C<sv_newmortal> and C<sv_2mortal>.
6454
6455 =cut
6456 */
6457
6458 /* Make a string that will exist for the duration of the expression
6459  * evaluation.  Actually, it may have to last longer than that, but
6460  * hopefully we won't free it until it has been assigned to a
6461  * permanent location. */
6462
6463 SV *
6464 Perl_sv_mortalcopy(pTHX_ SV *oldstr)
6465 {
6466     dVAR;
6467     register SV *sv;
6468
6469     new_SV(sv);
6470     sv_setsv(sv,oldstr);
6471     EXTEND_MORTAL(1);
6472     PL_tmps_stack[++PL_tmps_ix] = sv;
6473     SvTEMP_on(sv);
6474     return sv;
6475 }
6476
6477 /*
6478 =for apidoc sv_newmortal
6479
6480 Creates a new null SV which is mortal.  The reference count of the SV is
6481 set to 1. It will be destroyed "soon", either by an explicit call to
6482 FREETMPS, or by an implicit call at places such as statement boundaries.
6483 See also C<sv_mortalcopy> and C<sv_2mortal>.
6484
6485 =cut
6486 */
6487
6488 SV *
6489 Perl_sv_newmortal(pTHX)
6490 {
6491     dVAR;
6492     register SV *sv;
6493
6494     new_SV(sv);
6495     SvFLAGS(sv) = SVs_TEMP;
6496     EXTEND_MORTAL(1);
6497     PL_tmps_stack[++PL_tmps_ix] = sv;
6498     return sv;
6499 }
6500
6501 /*
6502 =for apidoc sv_2mortal
6503
6504 Marks an existing SV as mortal.  The SV will be destroyed "soon", either
6505 by an explicit call to FREETMPS, or by an implicit call at places such as
6506 statement boundaries.  SvTEMP() is turned on which means that the SV's
6507 string buffer can be "stolen" if this SV is copied. See also C<sv_newmortal>
6508 and C<sv_mortalcopy>.
6509
6510 =cut
6511 */
6512
6513 SV *
6514 Perl_sv_2mortal(pTHX_ register SV *sv)
6515 {
6516     dVAR;
6517     if (!sv)
6518         return NULL;
6519     if (SvREADONLY(sv) && SvIMMORTAL(sv))
6520         return sv;
6521     EXTEND_MORTAL(1);
6522     PL_tmps_stack[++PL_tmps_ix] = sv;
6523     SvTEMP_on(sv);
6524     return sv;
6525 }
6526
6527 /*
6528 =for apidoc newSVpv
6529
6530 Creates a new SV and copies a string into it.  The reference count for the
6531 SV is set to 1.  If C<len> is zero, Perl will compute the length using
6532 strlen().  For efficiency, consider using C<newSVpvn> instead.
6533
6534 =cut
6535 */
6536
6537 SV *
6538 Perl_newSVpv(pTHX_ const char *s, STRLEN len)
6539 {
6540     dVAR;
6541     register SV *sv;
6542
6543     new_SV(sv);
6544     sv_setpvn(sv,s,len ? len : strlen(s));
6545     return sv;
6546 }
6547
6548 /*
6549 =for apidoc newSVpvn
6550
6551 Creates a new SV and copies a string into it.  The reference count for the
6552 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
6553 string.  You are responsible for ensuring that the source string is at least
6554 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
6555
6556 =cut
6557 */
6558
6559 SV *
6560 Perl_newSVpvn(pTHX_ const char *s, STRLEN len)
6561 {
6562     dVAR;
6563     register SV *sv;
6564
6565     new_SV(sv);
6566     sv_setpvn(sv,s,len);
6567     return sv;
6568 }
6569
6570
6571 /*
6572 =for apidoc newSVhek
6573
6574 Creates a new SV from the hash key structure.  It will generate scalars that
6575 point to the shared string table where possible. Returns a new (undefined)
6576 SV if the hek is NULL.
6577
6578 =cut
6579 */
6580
6581 SV *
6582 Perl_newSVhek(pTHX_ const HEK *hek)
6583 {
6584     dVAR;
6585     if (!hek) {
6586         SV *sv;
6587
6588         new_SV(sv);
6589         return sv;
6590     }
6591
6592     if (HEK_LEN(hek) == HEf_SVKEY) {
6593         return newSVsv(*(SV**)HEK_KEY(hek));
6594     } else {
6595         const int flags = HEK_FLAGS(hek);
6596         if (flags & HVhek_WASUTF8) {
6597             /* Trouble :-)
6598                Andreas would like keys he put in as utf8 to come back as utf8
6599             */
6600             STRLEN utf8_len = HEK_LEN(hek);
6601             const U8 *as_utf8 = bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
6602             SV * const sv = newSVpvn ((const char*)as_utf8, utf8_len);
6603
6604             SvUTF8_on (sv);
6605             Safefree (as_utf8); /* bytes_to_utf8() allocates a new string */
6606             return sv;
6607         } else if (flags & HVhek_REHASH) {
6608             /* We don't have a pointer to the hv, so we have to replicate the
6609                flag into every HEK. This hv is using custom a hasing
6610                algorithm. Hence we can't return a shared string scalar, as
6611                that would contain the (wrong) hash value, and might get passed
6612                into an hv routine with a regular hash  */
6613
6614             SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
6615             if (HEK_UTF8(hek))
6616                 SvUTF8_on (sv);
6617             return sv;
6618         }
6619         /* This will be overwhelminly the most common case.  */
6620         return newSVpvn_share(HEK_KEY(hek),
6621                               (HEK_UTF8(hek) ? -HEK_LEN(hek) : HEK_LEN(hek)),
6622                               HEK_HASH(hek));
6623     }
6624 }
6625
6626 /*
6627 =for apidoc newSVpvn_share
6628
6629 Creates a new SV with its SvPVX_const pointing to a shared string in the string
6630 table. If the string does not already exist in the table, it is created
6631 first.  Turns on READONLY and FAKE.  The string's hash is stored in the UV
6632 slot of the SV; if the C<hash> parameter is non-zero, that value is used;
6633 otherwise the hash is computed.  The idea here is that as the string table
6634 is used for shared hash keys these strings will have SvPVX_const == HeKEY and
6635 hash lookup will avoid string compare.
6636
6637 =cut
6638 */
6639
6640 SV *
6641 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
6642 {
6643     dVAR;
6644     register SV *sv;
6645     bool is_utf8 = FALSE;
6646     if (len < 0) {
6647         STRLEN tmplen = -len;
6648         is_utf8 = TRUE;
6649         /* See the note in hv.c:hv_fetch() --jhi */
6650         src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
6651         len = tmplen;
6652     }
6653     if (!hash)
6654         PERL_HASH(hash, src, len);
6655     new_SV(sv);
6656     sv_upgrade(sv, SVt_PV);
6657     SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
6658     SvCUR_set(sv, len);
6659     SvLEN_set(sv, 0);
6660     SvREADONLY_on(sv);
6661     SvFAKE_on(sv);
6662     SvPOK_on(sv);
6663     if (is_utf8)
6664         SvUTF8_on(sv);
6665     return sv;
6666 }
6667
6668
6669 #if defined(PERL_IMPLICIT_CONTEXT)
6670
6671 /* pTHX_ magic can't cope with varargs, so this is a no-context
6672  * version of the main function, (which may itself be aliased to us).
6673  * Don't access this version directly.
6674  */
6675
6676 SV *
6677 Perl_newSVpvf_nocontext(const char* pat, ...)
6678 {
6679     dTHX;
6680     register SV *sv;
6681     va_list args;
6682     va_start(args, pat);
6683     sv = vnewSVpvf(pat, &args);
6684     va_end(args);
6685     return sv;
6686 }
6687 #endif
6688
6689 /*
6690 =for apidoc newSVpvf
6691
6692 Creates a new SV and initializes it with the string formatted like
6693 C<sprintf>.
6694
6695 =cut
6696 */
6697
6698 SV *
6699 Perl_newSVpvf(pTHX_ const char* pat, ...)
6700 {
6701     register SV *sv;
6702     va_list args;
6703     va_start(args, pat);
6704     sv = vnewSVpvf(pat, &args);
6705     va_end(args);
6706     return sv;
6707 }
6708
6709 /* backend for newSVpvf() and newSVpvf_nocontext() */
6710
6711 SV *
6712 Perl_vnewSVpvf(pTHX_ const char* pat, va_list* args)
6713 {
6714     dVAR;
6715     register SV *sv;
6716     new_SV(sv);
6717     sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
6718     return sv;
6719 }
6720
6721 /*
6722 =for apidoc newSVnv
6723
6724 Creates a new SV and copies a floating point value into it.
6725 The reference count for the SV is set to 1.
6726
6727 =cut
6728 */
6729
6730 SV *
6731 Perl_newSVnv(pTHX_ NV n)
6732 {
6733     dVAR;
6734     register SV *sv;
6735
6736     new_SV(sv);
6737     sv_setnv(sv,n);
6738     return sv;
6739 }
6740
6741 /*
6742 =for apidoc newSViv
6743
6744 Creates a new SV and copies an integer into it.  The reference count for the
6745 SV is set to 1.
6746
6747 =cut
6748 */
6749
6750 SV *
6751 Perl_newSViv(pTHX_ IV i)
6752 {
6753     dVAR;
6754     register SV *sv;
6755
6756     new_SV(sv);
6757     sv_setiv(sv,i);
6758     return sv;
6759 }
6760
6761 /*
6762 =for apidoc newSVuv
6763
6764 Creates a new SV and copies an unsigned integer into it.
6765 The reference count for the SV is set to 1.
6766
6767 =cut
6768 */
6769
6770 SV *
6771 Perl_newSVuv(pTHX_ UV u)
6772 {
6773     dVAR;
6774     register SV *sv;
6775
6776     new_SV(sv);
6777     sv_setuv(sv,u);
6778     return sv;
6779 }
6780
6781 /*
6782 =for apidoc newRV_noinc
6783
6784 Creates an RV wrapper for an SV.  The reference count for the original
6785 SV is B<not> incremented.
6786
6787 =cut
6788 */
6789
6790 SV *
6791 Perl_newRV_noinc(pTHX_ SV *tmpRef)
6792 {
6793     dVAR;
6794     register SV *sv;
6795
6796     new_SV(sv);
6797     sv_upgrade(sv, SVt_RV);
6798     SvTEMP_off(tmpRef);
6799     SvRV_set(sv, tmpRef);
6800     SvROK_on(sv);
6801     return sv;
6802 }
6803
6804 /* newRV_inc is the official function name to use now.
6805  * newRV_inc is in fact #defined to newRV in sv.h
6806  */
6807
6808 SV *
6809 Perl_newRV(pTHX_ SV *tmpRef)
6810 {
6811     dVAR;
6812     return newRV_noinc(SvREFCNT_inc(tmpRef));
6813 }
6814
6815 /*
6816 =for apidoc newSVsv
6817
6818 Creates a new SV which is an exact duplicate of the original SV.
6819 (Uses C<sv_setsv>).
6820
6821 =cut
6822 */
6823
6824 SV *
6825 Perl_newSVsv(pTHX_ register SV *old)
6826 {
6827     dVAR;
6828     register SV *sv;
6829
6830     if (!old)
6831         return NULL;
6832     if (SvTYPE(old) == SVTYPEMASK) {
6833         if (ckWARN_d(WARN_INTERNAL))
6834             Perl_warner(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
6835         return NULL;
6836     }
6837     new_SV(sv);
6838     /* SV_GMAGIC is the default for sv_setv()
6839        SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
6840        with SvTEMP_off and SvTEMP_on round a call to sv_setsv.  */
6841     sv_setsv_flags(sv, old, SV_GMAGIC | SV_NOSTEAL);
6842     return sv;
6843 }
6844
6845 /*
6846 =for apidoc sv_reset
6847
6848 Underlying implementation for the C<reset> Perl function.
6849 Note that the perl-level function is vaguely deprecated.
6850
6851 =cut
6852 */
6853
6854 void
6855 Perl_sv_reset(pTHX_ register const char *s, HV *stash)
6856 {
6857     dVAR;
6858     char todo[PERL_UCHAR_MAX+1];
6859
6860     if (!stash)
6861         return;
6862
6863     if (!*s) {          /* reset ?? searches */
6864         MAGIC * const mg = mg_find((SV *)stash, PERL_MAGIC_symtab);
6865         if (mg) {
6866             PMOP *pm = (PMOP *) mg->mg_obj;
6867             while (pm) {
6868                 pm->op_pmdynflags &= ~PMdf_USED;
6869                 pm = pm->op_pmnext;
6870             }
6871         }
6872         return;
6873     }
6874
6875     /* reset variables */
6876
6877     if (!HvARRAY(stash))
6878         return;
6879
6880     Zero(todo, 256, char);
6881     while (*s) {
6882         I32 max;
6883         I32 i = (unsigned char)*s;
6884         if (s[1] == '-') {
6885             s += 2;
6886         }
6887         max = (unsigned char)*s++;
6888         for ( ; i <= max; i++) {
6889             todo[i] = 1;
6890         }
6891         for (i = 0; i <= (I32) HvMAX(stash); i++) {
6892             HE *entry;
6893             for (entry = HvARRAY(stash)[i];
6894                  entry;
6895                  entry = HeNEXT(entry))
6896             {
6897                 register GV *gv;
6898                 register SV *sv;
6899
6900                 if (!todo[(U8)*HeKEY(entry)])
6901                     continue;
6902                 gv = (GV*)HeVAL(entry);
6903                 sv = GvSV(gv);
6904                 if (sv) {
6905                     if (SvTHINKFIRST(sv)) {
6906                         if (!SvREADONLY(sv) && SvROK(sv))
6907                             sv_unref(sv);
6908                         /* XXX Is this continue a bug? Why should THINKFIRST
6909                            exempt us from resetting arrays and hashes?  */
6910                         continue;
6911                     }
6912                     SvOK_off(sv);
6913                     if (SvTYPE(sv) >= SVt_PV) {
6914                         SvCUR_set(sv, 0);
6915                         if (SvPVX_const(sv) != NULL)
6916                             *SvPVX(sv) = '\0';
6917                         SvTAINT(sv);
6918                     }
6919                 }
6920                 if (GvAV(gv)) {
6921                     av_clear(GvAV(gv));
6922                 }
6923                 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
6924 #if defined(VMS)
6925                     Perl_die(aTHX_ "Can't reset %%ENV on this system");
6926 #else /* ! VMS */
6927                     hv_clear(GvHV(gv));
6928 #  if defined(USE_ENVIRON_ARRAY)
6929                     if (gv == PL_envgv)
6930                         my_clearenv();
6931 #  endif /* USE_ENVIRON_ARRAY */
6932 #endif /* VMS */
6933                 }
6934             }
6935         }
6936     }
6937 }
6938
6939 /*
6940 =for apidoc sv_2io
6941
6942 Using various gambits, try to get an IO from an SV: the IO slot if its a
6943 GV; or the recursive result if we're an RV; or the IO slot of the symbol
6944 named after the PV if we're a string.
6945
6946 =cut
6947 */
6948
6949 IO*
6950 Perl_sv_2io(pTHX_ SV *sv)
6951 {
6952     IO* io;
6953     GV* gv;
6954
6955     switch (SvTYPE(sv)) {
6956     case SVt_PVIO:
6957         io = (IO*)sv;
6958         break;
6959     case SVt_PVGV:
6960         gv = (GV*)sv;
6961         io = GvIO(gv);
6962         if (!io)
6963             Perl_croak(aTHX_ "Bad filehandle: %s", GvNAME(gv));
6964         break;
6965     default:
6966         if (!SvOK(sv))
6967             Perl_croak(aTHX_ PL_no_usym, "filehandle");
6968         if (SvROK(sv))
6969             return sv_2io(SvRV(sv));
6970         gv = gv_fetchsv(sv, 0, SVt_PVIO);
6971         if (gv)
6972             io = GvIO(gv);
6973         else
6974             io = 0;
6975         if (!io)
6976             Perl_croak(aTHX_ "Bad filehandle: %"SVf, sv);
6977         break;
6978     }
6979     return io;
6980 }
6981
6982 /*
6983 =for apidoc sv_2cv
6984
6985 Using various gambits, try to get a CV from an SV; in addition, try if
6986 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
6987 The flags in C<lref> are passed to sv_fetchsv.
6988
6989 =cut
6990 */
6991
6992 CV *
6993 Perl_sv_2cv(pTHX_ SV *sv, HV **st, GV **gvp, I32 lref)
6994 {
6995     dVAR;
6996     GV *gv = NULL;
6997     CV *cv = NULL;
6998
6999     if (!sv) {
7000         *st = NULL;
7001         *gvp = NULL;
7002         return NULL;
7003     }
7004     switch (SvTYPE(sv)) {
7005     case SVt_PVCV:
7006         *st = CvSTASH(sv);
7007         *gvp = NULL;
7008         return (CV*)sv;
7009     case SVt_PVHV:
7010     case SVt_PVAV:
7011         *st = NULL;
7012         *gvp = NULL;
7013         return NULL;
7014     case SVt_PVGV:
7015         gv = (GV*)sv;
7016         *gvp = gv;
7017         *st = GvESTASH(gv);
7018         goto fix_gv;
7019
7020     default:
7021         SvGETMAGIC(sv);
7022         if (SvROK(sv)) {
7023             SV * const *sp = &sv;       /* Used in tryAMAGICunDEREF macro. */
7024             tryAMAGICunDEREF(to_cv);
7025
7026             sv = SvRV(sv);
7027             if (SvTYPE(sv) == SVt_PVCV) {
7028                 cv = (CV*)sv;
7029                 *gvp = NULL;
7030                 *st = CvSTASH(cv);
7031                 return cv;
7032             }
7033             else if(isGV(sv))
7034                 gv = (GV*)sv;
7035             else
7036                 Perl_croak(aTHX_ "Not a subroutine reference");
7037         }
7038         else if (isGV(sv))
7039             gv = (GV*)sv;
7040         else
7041             gv = gv_fetchsv(sv, lref, SVt_PVCV);
7042         *gvp = gv;
7043         if (!gv) {
7044             *st = NULL;
7045             return NULL;
7046         }
7047         /* Some flags to gv_fetchsv mean don't really create the GV  */
7048         if (SvTYPE(gv) != SVt_PVGV) {
7049             *st = NULL;
7050             return NULL;
7051         }
7052         *st = GvESTASH(gv);
7053     fix_gv:
7054         if (lref && !GvCVu(gv)) {
7055             SV *tmpsv;
7056             ENTER;
7057             tmpsv = newSV(0);
7058             gv_efullname3(tmpsv, gv, NULL);
7059             /* XXX this is probably not what they think they're getting.
7060              * It has the same effect as "sub name;", i.e. just a forward
7061              * declaration! */
7062             newSUB(start_subparse(FALSE, 0),
7063                    newSVOP(OP_CONST, 0, tmpsv),
7064                    Nullop,
7065                    Nullop);
7066             LEAVE;
7067             if (!GvCVu(gv))
7068                 Perl_croak(aTHX_ "Unable to create sub named \"%"SVf"\"",
7069                            sv);
7070         }
7071         return GvCVu(gv);
7072     }
7073 }
7074
7075 /*
7076 =for apidoc sv_true
7077
7078 Returns true if the SV has a true value by Perl's rules.
7079 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
7080 instead use an in-line version.
7081
7082 =cut
7083 */
7084
7085 I32
7086 Perl_sv_true(pTHX_ register SV *sv)
7087 {
7088     if (!sv)
7089         return 0;
7090     if (SvPOK(sv)) {
7091         register const XPV* const tXpv = (XPV*)SvANY(sv);
7092         if (tXpv &&
7093                 (tXpv->xpv_cur > 1 ||
7094                 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
7095             return 1;
7096         else
7097             return 0;
7098     }
7099     else {
7100         if (SvIOK(sv))
7101             return SvIVX(sv) != 0;
7102         else {
7103             if (SvNOK(sv))
7104                 return SvNVX(sv) != 0.0;
7105             else
7106                 return sv_2bool(sv);
7107         }
7108     }
7109 }
7110
7111 /*
7112 =for apidoc sv_pvn_force
7113
7114 Get a sensible string out of the SV somehow.
7115 A private implementation of the C<SvPV_force> macro for compilers which
7116 can't cope with complex macro expressions. Always use the macro instead.
7117
7118 =for apidoc sv_pvn_force_flags
7119
7120 Get a sensible string out of the SV somehow.
7121 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
7122 appropriate, else not. C<sv_pvn_force> and C<sv_pvn_force_nomg> are
7123 implemented in terms of this function.
7124 You normally want to use the various wrapper macros instead: see
7125 C<SvPV_force> and C<SvPV_force_nomg>
7126
7127 =cut
7128 */
7129
7130 char *
7131 Perl_sv_pvn_force_flags(pTHX_ SV *sv, STRLEN *lp, I32 flags)
7132 {
7133     dVAR;
7134     if (SvTHINKFIRST(sv) && !SvROK(sv))
7135         sv_force_normal_flags(sv, 0);
7136
7137     if (SvPOK(sv)) {
7138         if (lp)
7139             *lp = SvCUR(sv);
7140     }
7141     else {
7142         char *s;
7143         STRLEN len;
7144  
7145         if (SvREADONLY(sv) && !(flags & SV_MUTABLE_RETURN)) {
7146             const char * const ref = sv_reftype(sv,0);
7147             if (PL_op)
7148                 Perl_croak(aTHX_ "Can't coerce readonly %s to string in %s",
7149                            ref, OP_NAME(PL_op));
7150             else
7151                 Perl_croak(aTHX_ "Can't coerce readonly %s to string", ref);
7152         }
7153         if (SvTYPE(sv) > SVt_PVLV && SvTYPE(sv) != SVt_PVFM)
7154             Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
7155                 OP_NAME(PL_op));
7156         s = sv_2pv_flags(sv, &len, flags);
7157         if (lp)
7158             *lp = len;
7159
7160         if (s != SvPVX_const(sv)) {     /* Almost, but not quite, sv_setpvn() */
7161             if (SvROK(sv))
7162                 sv_unref(sv);
7163             SvUPGRADE(sv, SVt_PV);              /* Never FALSE */
7164             SvGROW(sv, len + 1);
7165             Move(s,SvPVX(sv),len,char);
7166             SvCUR_set(sv, len);
7167             *SvEND(sv) = '\0';
7168         }
7169         if (!SvPOK(sv)) {
7170             SvPOK_on(sv);               /* validate pointer */
7171             SvTAINT(sv);
7172             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
7173                                   PTR2UV(sv),SvPVX_const(sv)));
7174         }
7175     }
7176     return SvPVX_mutable(sv);
7177 }
7178
7179 /*
7180 =for apidoc sv_pvbyten_force
7181
7182 The backend for the C<SvPVbytex_force> macro. Always use the macro instead.
7183
7184 =cut
7185 */
7186
7187 char *
7188 Perl_sv_pvbyten_force(pTHX_ SV *sv, STRLEN *lp)
7189 {
7190     sv_pvn_force(sv,lp);
7191     sv_utf8_downgrade(sv,0);
7192     *lp = SvCUR(sv);
7193     return SvPVX(sv);
7194 }
7195
7196 /*
7197 =for apidoc sv_pvutf8n_force
7198
7199 The backend for the C<SvPVutf8x_force> macro. Always use the macro instead.
7200
7201 =cut
7202 */
7203
7204 char *
7205 Perl_sv_pvutf8n_force(pTHX_ SV *sv, STRLEN *lp)
7206 {
7207     sv_pvn_force(sv,lp);
7208     sv_utf8_upgrade(sv);
7209     *lp = SvCUR(sv);
7210     return SvPVX(sv);
7211 }
7212
7213 /*
7214 =for apidoc sv_reftype
7215
7216 Returns a string describing what the SV is a reference to.
7217
7218 =cut
7219 */
7220
7221 char *
7222 Perl_sv_reftype(pTHX_ const SV *sv, int ob)
7223 {
7224     /* The fact that I don't need to downcast to char * everywhere, only in ?:
7225        inside return suggests a const propagation bug in g++.  */
7226     if (ob && SvOBJECT(sv)) {
7227         char * const name = HvNAME_get(SvSTASH(sv));
7228         return name ? name : (char *) "__ANON__";
7229     }
7230     else {
7231         switch (SvTYPE(sv)) {
7232         case SVt_NULL:
7233         case SVt_IV:
7234         case SVt_NV:
7235         case SVt_RV:
7236         case SVt_PV:
7237         case SVt_PVIV:
7238         case SVt_PVNV:
7239         case SVt_PVMG:
7240         case SVt_PVBM:
7241                                 if (SvVOK(sv))
7242                                     return "VSTRING";
7243                                 if (SvROK(sv))
7244                                     return "REF";
7245                                 else
7246                                     return "SCALAR";
7247
7248         case SVt_PVLV:          return (char *)  (SvROK(sv) ? "REF"
7249                                 /* tied lvalues should appear to be
7250                                  * scalars for backwards compatitbility */
7251                                 : (LvTYPE(sv) == 't' || LvTYPE(sv) == 'T')
7252                                     ? "SCALAR" : "LVALUE");
7253         case SVt_PVAV:          return "ARRAY";
7254         case SVt_PVHV:          return "HASH";
7255         case SVt_PVCV:          return "CODE";
7256         case SVt_PVGV:          return "GLOB";
7257         case SVt_PVFM:          return "FORMAT";
7258         case SVt_PVIO:          return "IO";
7259         default:                return "UNKNOWN";
7260         }
7261     }
7262 }
7263
7264 /*
7265 =for apidoc sv_isobject
7266
7267 Returns a boolean indicating whether the SV is an RV pointing to a blessed
7268 object.  If the SV is not an RV, or if the object is not blessed, then this
7269 will return false.
7270
7271 =cut
7272 */
7273
7274 int
7275 Perl_sv_isobject(pTHX_ SV *sv)
7276 {
7277     if (!sv)
7278         return 0;
7279     SvGETMAGIC(sv);
7280     if (!SvROK(sv))
7281         return 0;
7282     sv = (SV*)SvRV(sv);
7283     if (!SvOBJECT(sv))
7284         return 0;
7285     return 1;
7286 }
7287
7288 /*
7289 =for apidoc sv_isa
7290
7291 Returns a boolean indicating whether the SV is blessed into the specified
7292 class.  This does not check for subtypes; use C<sv_derived_from> to verify
7293 an inheritance relationship.
7294
7295 =cut
7296 */
7297
7298 int
7299 Perl_sv_isa(pTHX_ SV *sv, const char *name)
7300 {
7301     const char *hvname;
7302     if (!sv)
7303         return 0;
7304     SvGETMAGIC(sv);
7305     if (!SvROK(sv))
7306         return 0;
7307     sv = (SV*)SvRV(sv);
7308     if (!SvOBJECT(sv))
7309         return 0;
7310     hvname = HvNAME_get(SvSTASH(sv));
7311     if (!hvname)
7312         return 0;
7313
7314     return strEQ(hvname, name);
7315 }
7316
7317 /*
7318 =for apidoc newSVrv
7319
7320 Creates a new SV for the RV, C<rv>, to point to.  If C<rv> is not an RV then
7321 it will be upgraded to one.  If C<classname> is non-null then the new SV will
7322 be blessed in the specified package.  The new SV is returned and its
7323 reference count is 1.
7324
7325 =cut
7326 */
7327
7328 SV*
7329 Perl_newSVrv(pTHX_ SV *rv, const char *classname)
7330 {
7331     dVAR;
7332     SV *sv;
7333
7334     new_SV(sv);
7335
7336     SV_CHECK_THINKFIRST_COW_DROP(rv);
7337     SvAMAGIC_off(rv);
7338
7339     if (SvTYPE(rv) >= SVt_PVMG) {
7340         const U32 refcnt = SvREFCNT(rv);
7341         SvREFCNT(rv) = 0;
7342         sv_clear(rv);
7343         SvFLAGS(rv) = 0;
7344         SvREFCNT(rv) = refcnt;
7345     }
7346
7347     if (SvTYPE(rv) < SVt_RV)
7348         sv_upgrade(rv, SVt_RV);
7349     else if (SvTYPE(rv) > SVt_RV) {
7350         SvPV_free(rv);
7351         SvCUR_set(rv, 0);
7352         SvLEN_set(rv, 0);
7353     }
7354
7355     SvOK_off(rv);
7356     SvRV_set(rv, sv);
7357     SvROK_on(rv);
7358
7359     if (classname) {
7360         HV* const stash = gv_stashpv(classname, TRUE);
7361         (void)sv_bless(rv, stash);
7362     }
7363     return sv;
7364 }
7365
7366 /*
7367 =for apidoc sv_setref_pv
7368
7369 Copies a pointer into a new SV, optionally blessing the SV.  The C<rv>
7370 argument will be upgraded to an RV.  That RV will be modified to point to
7371 the new SV.  If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
7372 into the SV.  The C<classname> argument indicates the package for the
7373 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
7374 will have a reference count of 1, and the RV will be returned.
7375
7376 Do not use with other Perl types such as HV, AV, SV, CV, because those
7377 objects will become corrupted by the pointer copy process.
7378
7379 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
7380
7381 =cut
7382 */
7383
7384 SV*
7385 Perl_sv_setref_pv(pTHX_ SV *rv, const char *classname, void *pv)
7386 {
7387     dVAR;
7388     if (!pv) {
7389         sv_setsv(rv, &PL_sv_undef);
7390         SvSETMAGIC(rv);
7391     }
7392     else
7393         sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
7394     return rv;
7395 }
7396
7397 /*
7398 =for apidoc sv_setref_iv
7399
7400 Copies an integer into a new SV, optionally blessing the SV.  The C<rv>
7401 argument will be upgraded to an RV.  That RV will be modified to point to
7402 the new SV.  The C<classname> argument indicates the package for the
7403 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
7404 will have a reference count of 1, and the RV will be returned.
7405
7406 =cut
7407 */
7408
7409 SV*
7410 Perl_sv_setref_iv(pTHX_ SV *rv, const char *classname, IV iv)
7411 {
7412     sv_setiv(newSVrv(rv,classname), iv);
7413     return rv;
7414 }
7415
7416 /*
7417 =for apidoc sv_setref_uv
7418
7419 Copies an unsigned integer into a new SV, optionally blessing the SV.  The C<rv>
7420 argument will be upgraded to an RV.  That RV will be modified to point to
7421 the new SV.  The C<classname> argument indicates the package for the
7422 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
7423 will have a reference count of 1, and the RV will be returned.
7424
7425 =cut
7426 */
7427
7428 SV*
7429 Perl_sv_setref_uv(pTHX_ SV *rv, const char *classname, UV uv)
7430 {
7431     sv_setuv(newSVrv(rv,classname), uv);
7432     return rv;
7433 }
7434
7435 /*
7436 =for apidoc sv_setref_nv
7437
7438 Copies a double into a new SV, optionally blessing the SV.  The C<rv>
7439 argument will be upgraded to an RV.  That RV will be modified to point to
7440 the new SV.  The C<classname> argument indicates the package for the
7441 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
7442 will have a reference count of 1, and the RV will be returned.
7443
7444 =cut
7445 */
7446
7447 SV*
7448 Perl_sv_setref_nv(pTHX_ SV *rv, const char *classname, NV nv)
7449 {
7450     sv_setnv(newSVrv(rv,classname), nv);
7451     return rv;
7452 }
7453
7454 /*
7455 =for apidoc sv_setref_pvn
7456
7457 Copies a string into a new SV, optionally blessing the SV.  The length of the
7458 string must be specified with C<n>.  The C<rv> argument will be upgraded to
7459 an RV.  That RV will be modified to point to the new SV.  The C<classname>
7460 argument indicates the package for the blessing.  Set C<classname> to
7461 C<NULL> to avoid the blessing.  The new SV will have a reference count
7462 of 1, and the RV will be returned.
7463
7464 Note that C<sv_setref_pv> copies the pointer while this copies the string.
7465
7466 =cut
7467 */
7468
7469 SV*
7470 Perl_sv_setref_pvn(pTHX_ SV *rv, const char *classname, const char *pv, STRLEN n)
7471 {
7472     sv_setpvn(newSVrv(rv,classname), pv, n);
7473     return rv;
7474 }
7475
7476 /*
7477 =for apidoc sv_bless
7478
7479 Blesses an SV into a specified package.  The SV must be an RV.  The package
7480 must be designated by its stash (see C<gv_stashpv()>).  The reference count
7481 of the SV is unaffected.
7482
7483 =cut
7484 */
7485
7486 SV*
7487 Perl_sv_bless(pTHX_ SV *sv, HV *stash)
7488 {
7489     dVAR;
7490     SV *tmpRef;
7491     if (!SvROK(sv))
7492         Perl_croak(aTHX_ "Can't bless non-reference value");
7493     tmpRef = SvRV(sv);
7494     if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY)) {
7495         if (SvREADONLY(tmpRef))
7496             Perl_croak(aTHX_ PL_no_modify);
7497         if (SvOBJECT(tmpRef)) {
7498             if (SvTYPE(tmpRef) != SVt_PVIO)
7499                 --PL_sv_objcount;
7500             SvREFCNT_dec(SvSTASH(tmpRef));
7501         }
7502     }
7503     SvOBJECT_on(tmpRef);
7504     if (SvTYPE(tmpRef) != SVt_PVIO)
7505         ++PL_sv_objcount;
7506     SvUPGRADE(tmpRef, SVt_PVMG);
7507     SvSTASH_set(tmpRef, (HV*)SvREFCNT_inc(stash));
7508
7509     if (Gv_AMG(stash))
7510         SvAMAGIC_on(sv);
7511     else
7512         SvAMAGIC_off(sv);
7513
7514     if(SvSMAGICAL(tmpRef))
7515         if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
7516             mg_set(tmpRef);
7517
7518
7519
7520     return sv;
7521 }
7522
7523 /* Downgrades a PVGV to a PVMG.
7524  */
7525
7526 STATIC void
7527 S_sv_unglob(pTHX_ SV *sv)
7528 {
7529     dVAR;
7530     void *xpvmg;
7531
7532     assert(SvTYPE(sv) == SVt_PVGV);
7533     SvFAKE_off(sv);
7534     if (GvGP(sv))
7535         gp_free((GV*)sv);
7536     if (GvSTASH(sv)) {
7537         sv_del_backref((SV*)GvSTASH(sv), sv);
7538         GvSTASH(sv) = NULL;
7539     }
7540     sv_unmagic(sv, PERL_MAGIC_glob);
7541     Safefree(GvNAME(sv));
7542     GvMULTI_off(sv);
7543
7544     /* need to keep SvANY(sv) in the right arena */
7545     xpvmg = new_XPVMG();
7546     StructCopy(SvANY(sv), xpvmg, XPVMG);
7547     del_XPVGV(SvANY(sv));
7548     SvANY(sv) = xpvmg;
7549
7550     SvFLAGS(sv) &= ~SVTYPEMASK;
7551     SvFLAGS(sv) |= SVt_PVMG;
7552 }
7553
7554 /*
7555 =for apidoc sv_unref_flags
7556
7557 Unsets the RV status of the SV, and decrements the reference count of
7558 whatever was being referenced by the RV.  This can almost be thought of
7559 as a reversal of C<newSVrv>.  The C<cflags> argument can contain
7560 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
7561 (otherwise the decrementing is conditional on the reference count being
7562 different from one or the reference being a readonly SV).
7563 See C<SvROK_off>.
7564
7565 =cut
7566 */
7567
7568 void
7569 Perl_sv_unref_flags(pTHX_ SV *ref, U32 flags)
7570 {
7571     SV* const target = SvRV(ref);
7572
7573     if (SvWEAKREF(ref)) {
7574         sv_del_backref(target, ref);
7575         SvWEAKREF_off(ref);
7576         SvRV_set(ref, NULL);
7577         return;
7578     }
7579     SvRV_set(ref, NULL);
7580     SvROK_off(ref);
7581     /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
7582        assigned to as BEGIN {$a = \"Foo"} will fail.  */
7583     if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
7584         SvREFCNT_dec(target);
7585     else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
7586         sv_2mortal(target);     /* Schedule for freeing later */
7587 }
7588
7589 /*
7590 =for apidoc sv_untaint
7591
7592 Untaint an SV. Use C<SvTAINTED_off> instead.
7593 =cut
7594 */
7595
7596 void
7597 Perl_sv_untaint(pTHX_ SV *sv)
7598 {
7599     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
7600         MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
7601         if (mg)
7602             mg->mg_len &= ~1;
7603     }
7604 }
7605
7606 /*
7607 =for apidoc sv_tainted
7608
7609 Test an SV for taintedness. Use C<SvTAINTED> instead.
7610 =cut
7611 */
7612
7613 bool
7614 Perl_sv_tainted(pTHX_ SV *sv)
7615 {
7616     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
7617         const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
7618         if (mg && (mg->mg_len & 1) )
7619             return TRUE;
7620     }
7621     return FALSE;
7622 }
7623
7624 /*
7625 =for apidoc sv_setpviv
7626
7627 Copies an integer into the given SV, also updating its string value.
7628 Does not handle 'set' magic.  See C<sv_setpviv_mg>.
7629
7630 =cut
7631 */
7632
7633 void
7634 Perl_sv_setpviv(pTHX_ SV *sv, IV iv)
7635 {
7636     char buf[TYPE_CHARS(UV)];
7637     char *ebuf;
7638     char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
7639
7640     sv_setpvn(sv, ptr, ebuf - ptr);
7641 }
7642
7643 /*
7644 =for apidoc sv_setpviv_mg
7645
7646 Like C<sv_setpviv>, but also handles 'set' magic.
7647
7648 =cut
7649 */
7650
7651 void
7652 Perl_sv_setpviv_mg(pTHX_ SV *sv, IV iv)
7653 {
7654     sv_setpviv(sv, iv);
7655     SvSETMAGIC(sv);
7656 }
7657
7658 #if defined(PERL_IMPLICIT_CONTEXT)
7659
7660 /* pTHX_ magic can't cope with varargs, so this is a no-context
7661  * version of the main function, (which may itself be aliased to us).
7662  * Don't access this version directly.
7663  */
7664
7665 void
7666 Perl_sv_setpvf_nocontext(SV *sv, const char* pat, ...)
7667 {
7668     dTHX;
7669     va_list args;
7670     va_start(args, pat);
7671     sv_vsetpvf(sv, pat, &args);
7672     va_end(args);
7673 }
7674
7675 /* pTHX_ magic can't cope with varargs, so this is a no-context
7676  * version of the main function, (which may itself be aliased to us).
7677  * Don't access this version directly.
7678  */
7679
7680 void
7681 Perl_sv_setpvf_mg_nocontext(SV *sv, const char* pat, ...)
7682 {
7683     dTHX;
7684     va_list args;
7685     va_start(args, pat);
7686     sv_vsetpvf_mg(sv, pat, &args);
7687     va_end(args);
7688 }
7689 #endif
7690
7691 /*
7692 =for apidoc sv_setpvf
7693
7694 Works like C<sv_catpvf> but copies the text into the SV instead of
7695 appending it.  Does not handle 'set' magic.  See C<sv_setpvf_mg>.
7696
7697 =cut
7698 */
7699
7700 void
7701 Perl_sv_setpvf(pTHX_ SV *sv, const char* pat, ...)
7702 {
7703     va_list args;
7704     va_start(args, pat);
7705     sv_vsetpvf(sv, pat, &args);
7706     va_end(args);
7707 }
7708
7709 /*
7710 =for apidoc sv_vsetpvf
7711
7712 Works like C<sv_vcatpvf> but copies the text into the SV instead of
7713 appending it.  Does not handle 'set' magic.  See C<sv_vsetpvf_mg>.
7714
7715 Usually used via its frontend C<sv_setpvf>.
7716
7717 =cut
7718 */
7719
7720 void
7721 Perl_sv_vsetpvf(pTHX_ SV *sv, const char* pat, va_list* args)
7722 {
7723     sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
7724 }
7725
7726 /*
7727 =for apidoc sv_setpvf_mg
7728
7729 Like C<sv_setpvf>, but also handles 'set' magic.
7730
7731 =cut
7732 */
7733
7734 void
7735 Perl_sv_setpvf_mg(pTHX_ SV *sv, const char* pat, ...)
7736 {
7737     va_list args;
7738     va_start(args, pat);
7739     sv_vsetpvf_mg(sv, pat, &args);
7740     va_end(args);
7741 }
7742
7743 /*
7744 =for apidoc sv_vsetpvf_mg
7745
7746 Like C<sv_vsetpvf>, but also handles 'set' magic.
7747
7748 Usually used via its frontend C<sv_setpvf_mg>.
7749
7750 =cut
7751 */
7752
7753 void
7754 Perl_sv_vsetpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
7755 {
7756     sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
7757     SvSETMAGIC(sv);
7758 }
7759
7760 #if defined(PERL_IMPLICIT_CONTEXT)
7761
7762 /* pTHX_ magic can't cope with varargs, so this is a no-context
7763  * version of the main function, (which may itself be aliased to us).
7764  * Don't access this version directly.
7765  */
7766
7767 void
7768 Perl_sv_catpvf_nocontext(SV *sv, const char* pat, ...)
7769 {
7770     dTHX;
7771     va_list args;
7772     va_start(args, pat);
7773     sv_vcatpvf(sv, pat, &args);
7774     va_end(args);
7775 }
7776
7777 /* pTHX_ magic can't cope with varargs, so this is a no-context
7778  * version of the main function, (which may itself be aliased to us).
7779  * Don't access this version directly.
7780  */
7781
7782 void
7783 Perl_sv_catpvf_mg_nocontext(SV *sv, const char* pat, ...)
7784 {
7785     dTHX;
7786     va_list args;
7787     va_start(args, pat);
7788     sv_vcatpvf_mg(sv, pat, &args);
7789     va_end(args);
7790 }
7791 #endif
7792
7793 /*
7794 =for apidoc sv_catpvf
7795
7796 Processes its arguments like C<sprintf> and appends the formatted
7797 output to an SV.  If the appended data contains "wide" characters
7798 (including, but not limited to, SVs with a UTF-8 PV formatted with %s,
7799 and characters >255 formatted with %c), the original SV might get
7800 upgraded to UTF-8.  Handles 'get' magic, but not 'set' magic.  See
7801 C<sv_catpvf_mg>. If the original SV was UTF-8, the pattern should be
7802 valid UTF-8; if the original SV was bytes, the pattern should be too.
7803
7804 =cut */
7805
7806 void
7807 Perl_sv_catpvf(pTHX_ SV *sv, const char* pat, ...)
7808 {
7809     va_list args;
7810     va_start(args, pat);
7811     sv_vcatpvf(sv, pat, &args);
7812     va_end(args);
7813 }
7814
7815 /*
7816 =for apidoc sv_vcatpvf
7817
7818 Processes its arguments like C<vsprintf> and appends the formatted output
7819 to an SV.  Does not handle 'set' magic.  See C<sv_vcatpvf_mg>.
7820
7821 Usually used via its frontend C<sv_catpvf>.
7822
7823 =cut
7824 */
7825
7826 void
7827 Perl_sv_vcatpvf(pTHX_ SV *sv, const char* pat, va_list* args)
7828 {
7829     sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
7830 }
7831
7832 /*
7833 =for apidoc sv_catpvf_mg
7834
7835 Like C<sv_catpvf>, but also handles 'set' magic.
7836
7837 =cut
7838 */
7839
7840 void
7841 Perl_sv_catpvf_mg(pTHX_ SV *sv, const char* pat, ...)
7842 {
7843     va_list args;
7844     va_start(args, pat);
7845     sv_vcatpvf_mg(sv, pat, &args);
7846     va_end(args);
7847 }
7848
7849 /*
7850 =for apidoc sv_vcatpvf_mg
7851
7852 Like C<sv_vcatpvf>, but also handles 'set' magic.
7853
7854 Usually used via its frontend C<sv_catpvf_mg>.
7855
7856 =cut
7857 */
7858
7859 void
7860 Perl_sv_vcatpvf_mg(pTHX_ SV *sv, const char* pat, va_list* args)
7861 {
7862     sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
7863     SvSETMAGIC(sv);
7864 }
7865
7866 /*
7867 =for apidoc sv_vsetpvfn
7868
7869 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
7870 appending it.
7871
7872 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
7873
7874 =cut
7875 */
7876
7877 void
7878 Perl_sv_vsetpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
7879 {
7880     sv_setpvn(sv, "", 0);
7881     sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, maybe_tainted);
7882 }
7883
7884 STATIC I32
7885 S_expect_number(pTHX_ char** pattern)
7886 {
7887     dVAR;
7888     I32 var = 0;
7889     switch (**pattern) {
7890     case '1': case '2': case '3':
7891     case '4': case '5': case '6':
7892     case '7': case '8': case '9':
7893         var = *(*pattern)++ - '0';
7894         while (isDIGIT(**pattern)) {
7895             I32 tmp = var * 10 + (*(*pattern)++ - '0');
7896             if (tmp < var)
7897                 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_NAME(PL_op) : "sv_vcatpvfn"));
7898             var = tmp;
7899         }
7900     }
7901     return var;
7902 }
7903
7904 STATIC char *
7905 S_F0convert(NV nv, char *endbuf, STRLEN *len)
7906 {
7907     const int neg = nv < 0;
7908     UV uv;
7909
7910     if (neg)
7911         nv = -nv;
7912     if (nv < UV_MAX) {
7913         char *p = endbuf;
7914         nv += 0.5;
7915         uv = (UV)nv;
7916         if (uv & 1 && uv == nv)
7917             uv--;                       /* Round to even */
7918         do {
7919             const unsigned dig = uv % 10;
7920             *--p = '0' + dig;
7921         } while (uv /= 10);
7922         if (neg)
7923             *--p = '-';
7924         *len = endbuf - p;
7925         return p;
7926     }
7927     return NULL;
7928 }
7929
7930
7931 /*
7932 =for apidoc sv_vcatpvfn
7933
7934 Processes its arguments like C<vsprintf> and appends the formatted output
7935 to an SV.  Uses an array of SVs if the C style variable argument list is
7936 missing (NULL).  When running with taint checks enabled, indicates via
7937 C<maybe_tainted> if results are untrustworthy (often due to the use of
7938 locales).
7939
7940 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
7941
7942 =cut
7943 */
7944
7945
7946 #define VECTORIZE_ARGS  vecsv = va_arg(*args, SV*);\
7947                         vecstr = (U8*)SvPV_const(vecsv,veclen);\
7948                         vec_utf8 = DO_UTF8(vecsv);
7949
7950 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
7951
7952 void
7953 Perl_sv_vcatpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV **svargs, I32 svmax, bool *maybe_tainted)
7954 {
7955     dVAR;
7956     char *p;
7957     char *q;
7958     const char *patend;
7959     STRLEN origlen;
7960     I32 svix = 0;
7961     static const char nullstr[] = "(null)";
7962     SV *argsv = NULL;
7963     bool has_utf8 = DO_UTF8(sv);    /* has the result utf8? */
7964     const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
7965     SV *nsv = NULL;
7966     /* Times 4: a decimal digit takes more than 3 binary digits.
7967      * NV_DIG: mantissa takes than many decimal digits.
7968      * Plus 32: Playing safe. */
7969     char ebuf[IV_DIG * 4 + NV_DIG + 32];
7970     /* large enough for "%#.#f" --chip */
7971     /* what about long double NVs? --jhi */
7972
7973     PERL_UNUSED_ARG(maybe_tainted);
7974
7975     /* no matter what, this is a string now */
7976     (void)SvPV_force(sv, origlen);
7977
7978     /* special-case "", "%s", and "%-p" (SVf - see below) */
7979     if (patlen == 0)
7980         return;
7981     if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
7982         if (args) {
7983             const char * const s = va_arg(*args, char*);
7984             sv_catpv(sv, s ? s : nullstr);
7985         }
7986         else if (svix < svmax) {
7987             sv_catsv(sv, *svargs);
7988         }
7989         return;
7990     }
7991     if (args && patlen == 3 && pat[0] == '%' &&
7992                 pat[1] == '-' && pat[2] == 'p') {
7993         argsv = va_arg(*args, SV*);
7994         sv_catsv(sv, argsv);
7995         return;
7996     }
7997
7998 #ifndef USE_LONG_DOUBLE
7999     /* special-case "%.<number>[gf]" */
8000     if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
8001          && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
8002         unsigned digits = 0;
8003         const char *pp;
8004
8005         pp = pat + 2;
8006         while (*pp >= '0' && *pp <= '9')
8007             digits = 10 * digits + (*pp++ - '0');
8008         if (pp - pat == (int)patlen - 1) {
8009             NV nv;
8010
8011             if (svix < svmax)
8012                 nv = SvNV(*svargs);
8013             else
8014                 return;
8015             if (*pp == 'g') {
8016                 /* Add check for digits != 0 because it seems that some
8017                    gconverts are buggy in this case, and we don't yet have
8018                    a Configure test for this.  */
8019                 if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
8020                      /* 0, point, slack */
8021                     Gconvert(nv, (int)digits, 0, ebuf);
8022                     sv_catpv(sv, ebuf);
8023                     if (*ebuf)  /* May return an empty string for digits==0 */
8024                         return;
8025                 }
8026             } else if (!digits) {
8027                 STRLEN l;
8028
8029                 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
8030                     sv_catpvn(sv, p, l);
8031                     return;
8032                 }
8033             }
8034         }
8035     }
8036 #endif /* !USE_LONG_DOUBLE */
8037
8038     if (!args && svix < svmax && DO_UTF8(*svargs))
8039         has_utf8 = TRUE;
8040
8041     patend = (char*)pat + patlen;
8042     for (p = (char*)pat; p < patend; p = q) {
8043         bool alt = FALSE;
8044         bool left = FALSE;
8045         bool vectorize = FALSE;
8046         bool vectorarg = FALSE;
8047         bool vec_utf8 = FALSE;
8048         char fill = ' ';
8049         char plus = 0;
8050         char intsize = 0;
8051         STRLEN width = 0;
8052         STRLEN zeros = 0;
8053         bool has_precis = FALSE;
8054         STRLEN precis = 0;
8055         const I32 osvix = svix;
8056         bool is_utf8 = FALSE;  /* is this item utf8?   */
8057 #ifdef HAS_LDBL_SPRINTF_BUG
8058         /* This is to try to fix a bug with irix/nonstop-ux/powerux and
8059            with sfio - Allen <allens@cpan.org> */
8060         bool fix_ldbl_sprintf_bug = FALSE;
8061 #endif
8062
8063         char esignbuf[4];
8064         U8 utf8buf[UTF8_MAXBYTES+1];
8065         STRLEN esignlen = 0;
8066
8067         const char *eptr = NULL;
8068         STRLEN elen = 0;
8069         SV *vecsv = NULL;
8070         const U8 *vecstr = Null(U8*);
8071         STRLEN veclen = 0;
8072         char c = 0;
8073         int i;
8074         unsigned base = 0;
8075         IV iv = 0;
8076         UV uv = 0;
8077         /* we need a long double target in case HAS_LONG_DOUBLE but
8078            not USE_LONG_DOUBLE
8079         */
8080 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE
8081         long double nv;
8082 #else
8083         NV nv;
8084 #endif
8085         STRLEN have;
8086         STRLEN need;
8087         STRLEN gap;
8088         const char *dotstr = ".";
8089         STRLEN dotstrlen = 1;
8090         I32 efix = 0; /* explicit format parameter index */
8091         I32 ewix = 0; /* explicit width index */
8092         I32 epix = 0; /* explicit precision index */
8093         I32 evix = 0; /* explicit vector index */
8094         bool asterisk = FALSE;
8095
8096         /* echo everything up to the next format specification */
8097         for (q = p; q < patend && *q != '%'; ++q) ;
8098         if (q > p) {
8099             if (has_utf8 && !pat_utf8)
8100                 sv_catpvn_utf8_upgrade(sv, p, q - p, nsv);
8101             else
8102                 sv_catpvn(sv, p, q - p);
8103             p = q;
8104         }
8105         if (q++ >= patend)
8106             break;
8107
8108 /*
8109     We allow format specification elements in this order:
8110         \d+\$              explicit format parameter index
8111         [-+ 0#]+           flags
8112         v|\*(\d+\$)?v      vector with optional (optionally specified) arg
8113         0                  flag (as above): repeated to allow "v02"     
8114         \d+|\*(\d+\$)?     width using optional (optionally specified) arg
8115         \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
8116         [hlqLV]            size
8117     [%bcdefginopsuxDFOUX] format (mandatory)
8118 */
8119
8120         if (args) {
8121 /*  
8122         As of perl5.9.3, printf format checking is on by default.
8123         Internally, perl uses %p formats to provide an escape to
8124         some extended formatting.  This block deals with those
8125         extensions: if it does not match, (char*)q is reset and
8126         the normal format processing code is used.
8127
8128         Currently defined extensions are:
8129                 %p              include pointer address (standard)      
8130                 %-p     (SVf)   include an SV (previously %_)
8131                 %-<num>p        include an SV with precision <num>      
8132                 %1p     (VDf)   include a v-string (as %vd)
8133                 %<num>p         reserved for future extensions
8134
8135         Robin Barker 2005-07-14
8136 */
8137             char* r = q; 
8138             bool sv = FALSE;    
8139             STRLEN n = 0;
8140             if (*q == '-')
8141                 sv = *q++;
8142             n = expect_number(&q);
8143             if (*q++ == 'p') {
8144                 if (sv) {                       /* SVf */
8145                     if (n) {
8146                         precis = n;
8147                         has_precis = TRUE;
8148                     }
8149                     argsv = va_arg(*args, SV*);
8150                     eptr = SvPVx_const(argsv, elen);
8151                     if (DO_UTF8(argsv))
8152                         is_utf8 = TRUE;
8153                     goto string;
8154                 }
8155 #if vdNUMBER
8156                 else if (n == vdNUMBER) {       /* VDf */
8157                     vectorize = TRUE;
8158                     VECTORIZE_ARGS
8159                     goto format_vd;
8160                 }
8161 #endif
8162                 else if (n) {
8163                     if (ckWARN_d(WARN_INTERNAL))
8164                         Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
8165                         "internal %%<num>p might conflict with future printf extensions");
8166                 }
8167             }
8168             q = r; 
8169         }
8170
8171         if ( (width = expect_number(&q)) ) {
8172             if (*q == '$') {
8173                 ++q;
8174                 efix = width;
8175             } else {
8176                 goto gotwidth;
8177             }
8178         }
8179
8180         /* FLAGS */
8181
8182         while (*q) {
8183             switch (*q) {
8184             case ' ':
8185             case '+':
8186                 plus = *q++;
8187                 continue;
8188
8189             case '-':
8190                 left = TRUE;
8191                 q++;
8192                 continue;
8193
8194             case '0':
8195                 fill = *q++;
8196                 continue;
8197
8198             case '#':
8199                 alt = TRUE;
8200                 q++;
8201                 continue;
8202
8203             default:
8204                 break;
8205             }
8206             break;
8207         }
8208
8209       tryasterisk:
8210         if (*q == '*') {
8211             q++;
8212             if ( (ewix = expect_number(&q)) )
8213                 if (*q++ != '$')
8214                     goto unknown;
8215             asterisk = TRUE;
8216         }
8217         if (*q == 'v') {
8218             q++;
8219             if (vectorize)
8220                 goto unknown;
8221             if ((vectorarg = asterisk)) {
8222                 evix = ewix;
8223                 ewix = 0;
8224                 asterisk = FALSE;
8225             }
8226             vectorize = TRUE;
8227             goto tryasterisk;
8228         }
8229
8230         if (!asterisk)
8231         {
8232             if( *q == '0' )
8233                 fill = *q++;
8234             width = expect_number(&q);
8235         }
8236
8237         if (vectorize) {
8238             if (vectorarg) {
8239                 if (args)
8240                     vecsv = va_arg(*args, SV*);
8241                 else if (evix) {
8242                     vecsv = (evix > 0 && evix <= svmax)
8243                         ? svargs[evix-1] : &PL_sv_undef;
8244                 } else {
8245                     vecsv = svix < svmax ? svargs[svix++] : &PL_sv_undef;
8246                 }
8247                 dotstr = SvPV_const(vecsv, dotstrlen);
8248                 /* Keep the DO_UTF8 test *after* the SvPV call, else things go
8249                    bad with tied or overloaded values that return UTF8.  */
8250                 if (DO_UTF8(vecsv))
8251                     is_utf8 = TRUE;
8252                 else if (has_utf8) {
8253                     vecsv = sv_mortalcopy(vecsv);
8254                     sv_utf8_upgrade(vecsv);
8255                     dotstr = SvPV_const(vecsv, dotstrlen);
8256                     is_utf8 = TRUE;
8257                 }                   
8258             }
8259             if (args) {
8260                 VECTORIZE_ARGS
8261             }
8262             else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
8263                 vecsv = svargs[efix ? efix-1 : svix++];
8264                 vecstr = (U8*)SvPV_const(vecsv,veclen);
8265                 vec_utf8 = DO_UTF8(vecsv);
8266
8267                 /* if this is a version object, we need to convert
8268                  * back into v-string notation and then let the
8269                  * vectorize happen normally
8270                  */
8271                 if (sv_derived_from(vecsv, "version")) {
8272                     char *version = savesvpv(vecsv);
8273                     if ( hv_exists((HV*)SvRV(vecsv), "alpha", 5 ) ) {
8274                         Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
8275                         "vector argument not supported with alpha versions");
8276                         goto unknown;
8277                     }
8278                     vecsv = sv_newmortal();
8279                     /* scan_vstring is expected to be called during
8280                      * tokenization, so we need to fake up the end
8281                      * of the buffer for it
8282                      */
8283                     PL_bufend = version + veclen;
8284                     scan_vstring(version, vecsv);
8285                     vecstr = (U8*)SvPV_const(vecsv, veclen);
8286                     vec_utf8 = DO_UTF8(vecsv);
8287                     Safefree(version);
8288                 }
8289             }
8290             else {
8291                 vecstr = (U8*)"";
8292                 veclen = 0;
8293             }
8294         }
8295
8296         if (asterisk) {
8297             if (args)
8298                 i = va_arg(*args, int);
8299             else
8300                 i = (ewix ? ewix <= svmax : svix < svmax) ?
8301                     SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
8302             left |= (i < 0);
8303             width = (i < 0) ? -i : i;
8304         }
8305       gotwidth:
8306
8307         /* PRECISION */
8308
8309         if (*q == '.') {
8310             q++;
8311             if (*q == '*') {
8312                 q++;
8313                 if ( ((epix = expect_number(&q))) && (*q++ != '$') )
8314                     goto unknown;
8315                 /* XXX: todo, support specified precision parameter */
8316                 if (epix)
8317                     goto unknown;
8318                 if (args)
8319                     i = va_arg(*args, int);
8320                 else
8321                     i = (ewix ? ewix <= svmax : svix < svmax)
8322                         ? SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
8323                 precis = (i < 0) ? 0 : i;
8324             }
8325             else {
8326                 precis = 0;
8327                 while (isDIGIT(*q))
8328                     precis = precis * 10 + (*q++ - '0');
8329             }
8330             has_precis = TRUE;
8331         }
8332
8333         /* SIZE */
8334
8335         switch (*q) {
8336 #ifdef WIN32
8337         case 'I':                       /* Ix, I32x, and I64x */
8338 #  ifdef WIN64
8339             if (q[1] == '6' && q[2] == '4') {
8340                 q += 3;
8341                 intsize = 'q';
8342                 break;
8343             }
8344 #  endif
8345             if (q[1] == '3' && q[2] == '2') {
8346                 q += 3;
8347                 break;
8348             }
8349 #  ifdef WIN64
8350             intsize = 'q';
8351 #  endif
8352             q++;
8353             break;
8354 #endif
8355 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
8356         case 'L':                       /* Ld */
8357             /* FALL THROUGH */
8358 #ifdef HAS_QUAD
8359         case 'q':                       /* qd */
8360 #endif
8361             intsize = 'q';
8362             q++;
8363             break;
8364 #endif
8365         case 'l':
8366 #if defined(HAS_QUAD) || defined(HAS_LONG_DOUBLE)
8367             if (*(q + 1) == 'l') {      /* lld, llf */
8368                 intsize = 'q';
8369                 q += 2;
8370                 break;
8371              }
8372 #endif
8373             /* FALL THROUGH */
8374         case 'h':
8375             /* FALL THROUGH */
8376         case 'V':
8377             intsize = *q++;
8378             break;
8379         }
8380
8381         /* CONVERSION */
8382
8383         if (*q == '%') {
8384             eptr = q++;
8385             elen = 1;
8386             if (vectorize) {
8387                 c = '%';
8388                 goto unknown;
8389             }
8390             goto string;
8391         }
8392
8393         if (!vectorize && !args) {
8394             if (efix) {
8395                 const I32 i = efix-1;
8396                 argsv = (i >= 0 && i < svmax) ? svargs[i] : &PL_sv_undef;
8397             } else {
8398                 argsv = (svix >= 0 && svix < svmax)
8399                     ? svargs[svix++] : &PL_sv_undef;
8400             }
8401         }
8402
8403         switch (c = *q++) {
8404
8405             /* STRINGS */
8406
8407         case 'c':
8408             if (vectorize)
8409                 goto unknown;
8410             uv = (args) ? va_arg(*args, int) : SvIVx(argsv);
8411             if ((uv > 255 ||
8412                  (!UNI_IS_INVARIANT(uv) && SvUTF8(sv)))
8413                 && !IN_BYTES) {
8414                 eptr = (char*)utf8buf;
8415                 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
8416                 is_utf8 = TRUE;
8417             }
8418             else {
8419                 c = (char)uv;
8420                 eptr = &c;
8421                 elen = 1;
8422             }
8423             goto string;
8424
8425         case 's':
8426             if (vectorize)
8427                 goto unknown;
8428             if (args) {
8429                 eptr = va_arg(*args, char*);
8430                 if (eptr)
8431 #ifdef MACOS_TRADITIONAL
8432                   /* On MacOS, %#s format is used for Pascal strings */
8433                   if (alt)
8434                     elen = *eptr++;
8435                   else
8436 #endif
8437                     elen = strlen(eptr);
8438                 else {
8439                     eptr = (char *)nullstr;
8440                     elen = sizeof nullstr - 1;
8441                 }
8442             }
8443             else {
8444                 eptr = SvPVx_const(argsv, elen);
8445                 if (DO_UTF8(argsv)) {
8446                     if (has_precis && precis < elen) {
8447                         I32 p = precis;
8448                         sv_pos_u2b(argsv, &p, 0); /* sticks at end */
8449                         precis = p;
8450                     }
8451                     if (width) { /* fudge width (can't fudge elen) */
8452                         width += elen - sv_len_utf8(argsv);
8453                     }
8454                     is_utf8 = TRUE;
8455                 }
8456             }
8457
8458         string:
8459             if (has_precis && elen > precis)
8460                 elen = precis;
8461             break;
8462
8463             /* INTEGERS */
8464
8465         case 'p':
8466             if (alt || vectorize)
8467                 goto unknown;
8468             uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
8469             base = 16;
8470             goto integer;
8471
8472         case 'D':
8473 #ifdef IV_IS_QUAD
8474             intsize = 'q';
8475 #else
8476             intsize = 'l';
8477 #endif
8478             /* FALL THROUGH */
8479         case 'd':
8480         case 'i':
8481 #if vdNUMBER
8482         format_vd:
8483 #endif
8484             if (vectorize) {
8485                 STRLEN ulen;
8486                 if (!veclen)
8487                     continue;
8488                 if (vec_utf8)
8489                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
8490                                         UTF8_ALLOW_ANYUV);
8491                 else {
8492                     uv = *vecstr;
8493                     ulen = 1;
8494                 }
8495                 vecstr += ulen;
8496                 veclen -= ulen;
8497                 if (plus)
8498                      esignbuf[esignlen++] = plus;
8499             }
8500             else if (args) {
8501                 switch (intsize) {
8502                 case 'h':       iv = (short)va_arg(*args, int); break;
8503                 case 'l':       iv = va_arg(*args, long); break;
8504                 case 'V':       iv = va_arg(*args, IV); break;
8505                 default:        iv = va_arg(*args, int); break;
8506 #ifdef HAS_QUAD
8507                 case 'q':       iv = va_arg(*args, Quad_t); break;
8508 #endif
8509                 }
8510             }
8511             else {
8512                 IV tiv = SvIVx(argsv); /* work around GCC bug #13488 */
8513                 switch (intsize) {
8514                 case 'h':       iv = (short)tiv; break;
8515                 case 'l':       iv = (long)tiv; break;
8516                 case 'V':
8517                 default:        iv = tiv; break;
8518 #ifdef HAS_QUAD
8519                 case 'q':       iv = (Quad_t)tiv; break;
8520 #endif
8521                 }
8522             }
8523             if ( !vectorize )   /* we already set uv above */
8524             {
8525                 if (iv >= 0) {
8526                     uv = iv;
8527                     if (plus)
8528                         esignbuf[esignlen++] = plus;
8529                 }
8530                 else {
8531                     uv = -iv;
8532                     esignbuf[esignlen++] = '-';
8533                 }
8534             }
8535             base = 10;
8536             goto integer;
8537
8538         case 'U':
8539 #ifdef IV_IS_QUAD
8540             intsize = 'q';
8541 #else
8542             intsize = 'l';
8543 #endif
8544             /* FALL THROUGH */
8545         case 'u':
8546             base = 10;
8547             goto uns_integer;
8548
8549         case 'b':
8550             base = 2;
8551             goto uns_integer;
8552
8553         case 'O':
8554 #ifdef IV_IS_QUAD
8555             intsize = 'q';
8556 #else
8557             intsize = 'l';
8558 #endif
8559             /* FALL THROUGH */
8560         case 'o':
8561             base = 8;
8562             goto uns_integer;
8563
8564         case 'X':
8565         case 'x':
8566             base = 16;
8567
8568         uns_integer:
8569             if (vectorize) {
8570                 STRLEN ulen;
8571         vector:
8572                 if (!veclen)
8573                     continue;
8574                 if (vec_utf8)
8575                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
8576                                         UTF8_ALLOW_ANYUV);
8577                 else {
8578                     uv = *vecstr;
8579                     ulen = 1;
8580                 }
8581                 vecstr += ulen;
8582                 veclen -= ulen;
8583             }
8584             else if (args) {
8585                 switch (intsize) {
8586                 case 'h':  uv = (unsigned short)va_arg(*args, unsigned); break;
8587                 case 'l':  uv = va_arg(*args, unsigned long); break;
8588                 case 'V':  uv = va_arg(*args, UV); break;
8589                 default:   uv = va_arg(*args, unsigned); break;
8590 #ifdef HAS_QUAD
8591                 case 'q':  uv = va_arg(*args, Uquad_t); break;
8592 #endif
8593                 }
8594             }
8595             else {
8596                 UV tuv = SvUVx(argsv); /* work around GCC bug #13488 */
8597                 switch (intsize) {
8598                 case 'h':       uv = (unsigned short)tuv; break;
8599                 case 'l':       uv = (unsigned long)tuv; break;
8600                 case 'V':
8601                 default:        uv = tuv; break;
8602 #ifdef HAS_QUAD
8603                 case 'q':       uv = (Uquad_t)tuv; break;
8604 #endif
8605                 }
8606             }
8607
8608         integer:
8609             {
8610                 char *ptr = ebuf + sizeof ebuf;
8611                 switch (base) {
8612                     unsigned dig;
8613                 case 16:
8614                     if (!uv)
8615                         alt = FALSE;
8616                     p = (char*)((c == 'X')
8617                                 ? "0123456789ABCDEF" : "0123456789abcdef");
8618                     do {
8619                         dig = uv & 15;
8620                         *--ptr = p[dig];
8621                     } while (uv >>= 4);
8622                     if (alt) {
8623                         esignbuf[esignlen++] = '0';
8624                         esignbuf[esignlen++] = c;  /* 'x' or 'X' */
8625                     }
8626                     break;
8627                 case 8:
8628                     do {
8629                         dig = uv & 7;
8630                         *--ptr = '0' + dig;
8631                     } while (uv >>= 3);
8632                     if (alt && *ptr != '0')
8633                         *--ptr = '0';
8634                     break;
8635                 case 2:
8636                     if (!uv)
8637                         alt = FALSE;
8638                     do {
8639                         dig = uv & 1;
8640                         *--ptr = '0' + dig;
8641                     } while (uv >>= 1);
8642                     if (alt) {
8643                         esignbuf[esignlen++] = '0';
8644                         esignbuf[esignlen++] = 'b';
8645                     }
8646                     break;
8647                 default:                /* it had better be ten or less */
8648                     do {
8649                         dig = uv % base;
8650                         *--ptr = '0' + dig;
8651                     } while (uv /= base);
8652                     break;
8653                 }
8654                 elen = (ebuf + sizeof ebuf) - ptr;
8655                 eptr = ptr;
8656                 if (has_precis) {
8657                     if (precis > elen)
8658                         zeros = precis - elen;
8659                     else if (precis == 0 && elen == 1 && *eptr == '0')
8660                         elen = 0;
8661                 }
8662             }
8663             break;
8664
8665             /* FLOATING POINT */
8666
8667         case 'F':
8668             c = 'f';            /* maybe %F isn't supported here */
8669             /* FALL THROUGH */
8670         case 'e': case 'E':
8671         case 'f':
8672         case 'g': case 'G':
8673             if (vectorize)
8674                 goto unknown;
8675
8676             /* This is evil, but floating point is even more evil */
8677
8678             /* for SV-style calling, we can only get NV
8679                for C-style calling, we assume %f is double;
8680                for simplicity we allow any of %Lf, %llf, %qf for long double
8681             */
8682             switch (intsize) {
8683             case 'V':
8684 #if defined(USE_LONG_DOUBLE)
8685                 intsize = 'q';
8686 #endif
8687                 break;
8688 /* [perl #20339] - we should accept and ignore %lf rather than die */
8689             case 'l':
8690                 /* FALL THROUGH */
8691             default:
8692 #if defined(USE_LONG_DOUBLE)
8693                 intsize = args ? 0 : 'q';
8694 #endif
8695                 break;
8696             case 'q':
8697 #if defined(HAS_LONG_DOUBLE)
8698                 break;
8699 #else
8700                 /* FALL THROUGH */
8701 #endif
8702             case 'h':
8703                 goto unknown;
8704             }
8705
8706             /* now we need (long double) if intsize == 'q', else (double) */
8707             nv = (args) ?
8708 #if LONG_DOUBLESIZE > DOUBLESIZE
8709                 intsize == 'q' ?
8710                     va_arg(*args, long double) :
8711                     va_arg(*args, double)
8712 #else
8713                     va_arg(*args, double)
8714 #endif
8715                 : SvNVx(argsv);
8716
8717             need = 0;
8718             if (c != 'e' && c != 'E') {
8719                 i = PERL_INT_MIN;
8720                 /* FIXME: if HAS_LONG_DOUBLE but not USE_LONG_DOUBLE this
8721                    will cast our (long double) to (double) */
8722                 (void)Perl_frexp(nv, &i);
8723                 if (i == PERL_INT_MIN)
8724                     Perl_die(aTHX_ "panic: frexp");
8725                 if (i > 0)
8726                     need = BIT_DIGITS(i);
8727             }
8728             need += has_precis ? precis : 6; /* known default */
8729
8730             if (need < width)
8731                 need = width;
8732
8733 #ifdef HAS_LDBL_SPRINTF_BUG
8734             /* This is to try to fix a bug with irix/nonstop-ux/powerux and
8735                with sfio - Allen <allens@cpan.org> */
8736
8737 #  ifdef DBL_MAX
8738 #    define MY_DBL_MAX DBL_MAX
8739 #  else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
8740 #    if DOUBLESIZE >= 8
8741 #      define MY_DBL_MAX 1.7976931348623157E+308L
8742 #    else
8743 #      define MY_DBL_MAX 3.40282347E+38L
8744 #    endif
8745 #  endif
8746
8747 #  ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
8748 #    define MY_DBL_MAX_BUG 1L
8749 #  else
8750 #    define MY_DBL_MAX_BUG MY_DBL_MAX
8751 #  endif
8752
8753 #  ifdef DBL_MIN
8754 #    define MY_DBL_MIN DBL_MIN
8755 #  else  /* XXX guessing! -Allen */
8756 #    if DOUBLESIZE >= 8
8757 #      define MY_DBL_MIN 2.2250738585072014E-308L
8758 #    else
8759 #      define MY_DBL_MIN 1.17549435E-38L
8760 #    endif
8761 #  endif
8762
8763             if ((intsize == 'q') && (c == 'f') &&
8764                 ((nv < MY_DBL_MAX_BUG) && (nv > -MY_DBL_MAX_BUG)) &&
8765                 (need < DBL_DIG)) {
8766                 /* it's going to be short enough that
8767                  * long double precision is not needed */
8768
8769                 if ((nv <= 0L) && (nv >= -0L))
8770                     fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
8771                 else {
8772                     /* would use Perl_fp_class as a double-check but not
8773                      * functional on IRIX - see perl.h comments */
8774
8775                     if ((nv >= MY_DBL_MIN) || (nv <= -MY_DBL_MIN)) {
8776                         /* It's within the range that a double can represent */
8777 #if defined(DBL_MAX) && !defined(DBL_MIN)
8778                         if ((nv >= ((long double)1/DBL_MAX)) ||
8779                             (nv <= (-(long double)1/DBL_MAX)))
8780 #endif
8781                         fix_ldbl_sprintf_bug = TRUE;
8782                     }
8783                 }
8784                 if (fix_ldbl_sprintf_bug == TRUE) {
8785                     double temp;
8786
8787                     intsize = 0;
8788                     temp = (double)nv;
8789                     nv = (NV)temp;
8790                 }
8791             }
8792
8793 #  undef MY_DBL_MAX
8794 #  undef MY_DBL_MAX_BUG
8795 #  undef MY_DBL_MIN
8796
8797 #endif /* HAS_LDBL_SPRINTF_BUG */
8798
8799             need += 20; /* fudge factor */
8800             if (PL_efloatsize < need) {
8801                 Safefree(PL_efloatbuf);
8802                 PL_efloatsize = need + 20; /* more fudge */
8803                 Newx(PL_efloatbuf, PL_efloatsize, char);
8804                 PL_efloatbuf[0] = '\0';
8805             }
8806
8807             if ( !(width || left || plus || alt) && fill != '0'
8808                  && has_precis && intsize != 'q' ) {    /* Shortcuts */
8809                 /* See earlier comment about buggy Gconvert when digits,
8810                    aka precis is 0  */
8811                 if ( c == 'g' && precis) {
8812                     Gconvert((NV)nv, (int)precis, 0, PL_efloatbuf);
8813                     /* May return an empty string for digits==0 */
8814                     if (*PL_efloatbuf) {
8815                         elen = strlen(PL_efloatbuf);
8816                         goto float_converted;
8817                     }
8818                 } else if ( c == 'f' && !precis) {
8819                     if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
8820                         break;
8821                 }
8822             }
8823             {
8824                 char *ptr = ebuf + sizeof ebuf;
8825                 *--ptr = '\0';
8826                 *--ptr = c;
8827                 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
8828 #if defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
8829                 if (intsize == 'q') {
8830                     /* Copy the one or more characters in a long double
8831                      * format before the 'base' ([efgEFG]) character to
8832                      * the format string. */
8833                     static char const prifldbl[] = PERL_PRIfldbl;
8834                     char const *p = prifldbl + sizeof(prifldbl) - 3;
8835                     while (p >= prifldbl) { *--ptr = *p--; }
8836                 }
8837 #endif
8838                 if (has_precis) {
8839                     base = precis;
8840                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
8841                     *--ptr = '.';
8842                 }
8843                 if (width) {
8844                     base = width;
8845                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
8846                 }
8847                 if (fill == '0')
8848                     *--ptr = fill;
8849                 if (left)
8850                     *--ptr = '-';
8851                 if (plus)
8852                     *--ptr = plus;
8853                 if (alt)
8854                     *--ptr = '#';
8855                 *--ptr = '%';
8856
8857                 /* No taint.  Otherwise we are in the strange situation
8858                  * where printf() taints but print($float) doesn't.
8859                  * --jhi */
8860 #if defined(HAS_LONG_DOUBLE)
8861                 elen = ((intsize == 'q')
8862                         ? my_sprintf(PL_efloatbuf, ptr, nv)
8863                         : my_sprintf(PL_efloatbuf, ptr, (double)nv));
8864 #else
8865                 elen = my_sprintf(PL_efloatbuf, ptr, nv);
8866 #endif
8867             }
8868         float_converted:
8869             eptr = PL_efloatbuf;
8870             break;
8871
8872             /* SPECIAL */
8873
8874         case 'n':
8875             if (vectorize)
8876                 goto unknown;
8877             i = SvCUR(sv) - origlen;
8878             if (args) {
8879                 switch (intsize) {
8880                 case 'h':       *(va_arg(*args, short*)) = i; break;
8881                 default:        *(va_arg(*args, int*)) = i; break;
8882                 case 'l':       *(va_arg(*args, long*)) = i; break;
8883                 case 'V':       *(va_arg(*args, IV*)) = i; break;
8884 #ifdef HAS_QUAD
8885                 case 'q':       *(va_arg(*args, Quad_t*)) = i; break;
8886 #endif
8887                 }
8888             }
8889             else
8890                 sv_setuv_mg(argsv, (UV)i);
8891             continue;   /* not "break" */
8892
8893             /* UNKNOWN */
8894
8895         default:
8896       unknown:
8897             if (!args
8898                 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
8899                 && ckWARN(WARN_PRINTF))
8900             {
8901                 SV * const msg = sv_newmortal();
8902                 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
8903                           (PL_op->op_type == OP_PRTF) ? "" : "s");
8904                 if (c) {
8905                     if (isPRINT(c))
8906                         Perl_sv_catpvf(aTHX_ msg,
8907                                        "\"%%%c\"", c & 0xFF);
8908                     else
8909                         Perl_sv_catpvf(aTHX_ msg,
8910                                        "\"%%\\%03"UVof"\"",
8911                                        (UV)c & 0xFF);
8912                 } else
8913                     sv_catpvs(msg, "end of string");
8914                 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, msg); /* yes, this is reentrant */
8915             }
8916
8917             /* output mangled stuff ... */
8918             if (c == '\0')
8919                 --q;
8920             eptr = p;
8921             elen = q - p;
8922
8923             /* ... right here, because formatting flags should not apply */
8924             SvGROW(sv, SvCUR(sv) + elen + 1);
8925             p = SvEND(sv);
8926             Copy(eptr, p, elen, char);
8927             p += elen;
8928             *p = '\0';
8929             SvCUR_set(sv, p - SvPVX_const(sv));
8930             svix = osvix;
8931             continue;   /* not "break" */
8932         }
8933
8934         /* calculate width before utf8_upgrade changes it */
8935         have = esignlen + zeros + elen;
8936         if (have < zeros)
8937             Perl_croak_nocontext(PL_memory_wrap);
8938
8939         if (is_utf8 != has_utf8) {
8940              if (is_utf8) {
8941                   if (SvCUR(sv))
8942                        sv_utf8_upgrade(sv);
8943              }
8944              else {
8945                   SV * const nsv = sv_2mortal(newSVpvn(eptr, elen));
8946                   sv_utf8_upgrade(nsv);
8947                   eptr = SvPVX_const(nsv);
8948                   elen = SvCUR(nsv);
8949              }
8950              SvGROW(sv, SvCUR(sv) + elen + 1);
8951              p = SvEND(sv);
8952              *p = '\0';
8953         }
8954
8955         need = (have > width ? have : width);
8956         gap = need - have;
8957
8958         if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
8959             Perl_croak_nocontext(PL_memory_wrap);
8960         SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
8961         p = SvEND(sv);
8962         if (esignlen && fill == '0') {
8963             int i;
8964             for (i = 0; i < (int)esignlen; i++)
8965                 *p++ = esignbuf[i];
8966         }
8967         if (gap && !left) {
8968             memset(p, fill, gap);
8969             p += gap;
8970         }
8971         if (esignlen && fill != '0') {
8972             int i;
8973             for (i = 0; i < (int)esignlen; i++)
8974                 *p++ = esignbuf[i];
8975         }
8976         if (zeros) {
8977             int i;
8978             for (i = zeros; i; i--)
8979                 *p++ = '0';
8980         }
8981         if (elen) {
8982             Copy(eptr, p, elen, char);
8983             p += elen;
8984         }
8985         if (gap && left) {
8986             memset(p, ' ', gap);
8987             p += gap;
8988         }
8989         if (vectorize) {
8990             if (veclen) {
8991                 Copy(dotstr, p, dotstrlen, char);
8992                 p += dotstrlen;
8993             }
8994             else
8995                 vectorize = FALSE;              /* done iterating over vecstr */
8996         }
8997         if (is_utf8)
8998             has_utf8 = TRUE;
8999         if (has_utf8)
9000             SvUTF8_on(sv);
9001         *p = '\0';
9002         SvCUR_set(sv, p - SvPVX_const(sv));
9003         if (vectorize) {
9004             esignlen = 0;
9005             goto vector;
9006         }
9007     }
9008 }
9009
9010 /* =========================================================================
9011
9012 =head1 Cloning an interpreter
9013
9014 All the macros and functions in this section are for the private use of
9015 the main function, perl_clone().
9016
9017 The foo_dup() functions make an exact copy of an existing foo thinngy.
9018 During the course of a cloning, a hash table is used to map old addresses
9019 to new addresses. The table is created and manipulated with the
9020 ptr_table_* functions.
9021
9022 =cut
9023
9024 ============================================================================*/
9025
9026
9027 #if defined(USE_ITHREADS)
9028
9029 #ifndef GpREFCNT_inc
9030 #  define GpREFCNT_inc(gp)      ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
9031 #endif
9032
9033
9034 #define sv_dup_inc(s,t) SvREFCNT_inc(sv_dup(s,t))
9035 #define av_dup(s,t)     (AV*)sv_dup((SV*)s,t)
9036 #define av_dup_inc(s,t) (AV*)SvREFCNT_inc(sv_dup((SV*)s,t))
9037 #define hv_dup(s,t)     (HV*)sv_dup((SV*)s,t)
9038 #define hv_dup_inc(s,t) (HV*)SvREFCNT_inc(sv_dup((SV*)s,t))
9039 #define cv_dup(s,t)     (CV*)sv_dup((SV*)s,t)
9040 #define cv_dup_inc(s,t) (CV*)SvREFCNT_inc(sv_dup((SV*)s,t))
9041 #define io_dup(s,t)     (IO*)sv_dup((SV*)s,t)
9042 #define io_dup_inc(s,t) (IO*)SvREFCNT_inc(sv_dup((SV*)s,t))
9043 #define gv_dup(s,t)     (GV*)sv_dup((SV*)s,t)
9044 #define gv_dup_inc(s,t) (GV*)SvREFCNT_inc(sv_dup((SV*)s,t))
9045 #define SAVEPV(p)       ((p) ? savepv(p) : NULL)
9046 #define SAVEPVN(p,n)    ((p) ? savepvn(p,n) : NULL)
9047
9048
9049 /* Duplicate a regexp. Required reading: pregcomp() and pregfree() in
9050    regcomp.c. AMS 20010712 */
9051
9052 REGEXP *
9053 Perl_re_dup(pTHX_ const REGEXP *r, CLONE_PARAMS *param)
9054 {
9055     dVAR;
9056     REGEXP *ret;
9057     int i, len, npar;
9058     struct reg_substr_datum *s;
9059
9060     if (!r)
9061         return (REGEXP *)NULL;
9062
9063     if ((ret = (REGEXP *)ptr_table_fetch(PL_ptr_table, r)))
9064         return ret;
9065
9066     len = r->offsets[0];
9067     npar = r->nparens+1;
9068
9069     Newxc(ret, sizeof(regexp) + (len+1)*sizeof(regnode), char, regexp);
9070     Copy(r->program, ret->program, len+1, regnode);
9071
9072     Newx(ret->startp, npar, I32);
9073     Copy(r->startp, ret->startp, npar, I32);
9074     Newx(ret->endp, npar, I32);
9075     Copy(r->startp, ret->startp, npar, I32);
9076
9077     Newx(ret->substrs, 1, struct reg_substr_data);
9078     for (s = ret->substrs->data, i = 0; i < 3; i++, s++) {
9079         s->min_offset = r->substrs->data[i].min_offset;
9080         s->max_offset = r->substrs->data[i].max_offset;
9081         s->substr     = sv_dup_inc(r->substrs->data[i].substr, param);
9082         s->utf8_substr = sv_dup_inc(r->substrs->data[i].utf8_substr, param);
9083     }
9084
9085     ret->regstclass = NULL;
9086     if (r->data) {
9087         struct reg_data *d;
9088         const int count = r->data->count;
9089         int i;
9090
9091         Newxc(d, sizeof(struct reg_data) + count*sizeof(void *),
9092                 char, struct reg_data);
9093         Newx(d->what, count, U8);
9094
9095         d->count = count;
9096         for (i = 0; i < count; i++) {
9097             d->what[i] = r->data->what[i];
9098             switch (d->what[i]) {
9099                 /* legal options are one of: sfpont
9100                    see also regcomp.h and pregfree() */
9101             case 's':
9102                 d->data[i] = sv_dup_inc((SV *)r->data->data[i], param);
9103                 break;
9104             case 'p':
9105                 d->data[i] = av_dup_inc((AV *)r->data->data[i], param);
9106                 break;
9107             case 'f':
9108                 /* This is cheating. */
9109                 Newx(d->data[i], 1, struct regnode_charclass_class);
9110                 StructCopy(r->data->data[i], d->data[i],
9111                             struct regnode_charclass_class);
9112                 ret->regstclass = (regnode*)d->data[i];
9113                 break;
9114             case 'o':
9115                 /* Compiled op trees are readonly, and can thus be
9116                    shared without duplication. */
9117                 OP_REFCNT_LOCK;
9118                 d->data[i] = (void*)OpREFCNT_inc((OP*)r->data->data[i]);
9119                 OP_REFCNT_UNLOCK;
9120                 break;
9121             case 'n':
9122                 d->data[i] = r->data->data[i];
9123                 break;
9124             case 't':
9125                 d->data[i] = r->data->data[i];
9126                 OP_REFCNT_LOCK;
9127                 ((reg_trie_data*)d->data[i])->refcount++;
9128                 OP_REFCNT_UNLOCK;
9129                 break;
9130             default:
9131                 Perl_croak(aTHX_ "panic: re_dup unknown data code '%c'", r->data->what[i]);
9132             }
9133         }
9134
9135         ret->data = d;
9136     }
9137     else
9138         ret->data = NULL;
9139
9140     Newx(ret->offsets, 2*len+1, U32);
9141     Copy(r->offsets, ret->offsets, 2*len+1, U32);
9142
9143     ret->precomp        = SAVEPVN(r->precomp, r->prelen);
9144     ret->refcnt         = r->refcnt;
9145     ret->minlen         = r->minlen;
9146     ret->prelen         = r->prelen;
9147     ret->nparens        = r->nparens;
9148     ret->lastparen      = r->lastparen;
9149     ret->lastcloseparen = r->lastcloseparen;
9150     ret->reganch        = r->reganch;
9151
9152     ret->sublen         = r->sublen;
9153
9154     if (RX_MATCH_COPIED(ret))
9155         ret->subbeg  = SAVEPVN(r->subbeg, r->sublen);
9156     else
9157         ret->subbeg = NULL;
9158 #ifdef PERL_OLD_COPY_ON_WRITE
9159     ret->saved_copy = NULL;
9160 #endif
9161
9162     ptr_table_store(PL_ptr_table, r, ret);
9163     return ret;
9164 }
9165
9166 /* duplicate a file handle */
9167
9168 PerlIO *
9169 Perl_fp_dup(pTHX_ PerlIO *fp, char type, CLONE_PARAMS *param)
9170 {
9171     PerlIO *ret;
9172
9173     PERL_UNUSED_ARG(type);
9174
9175     if (!fp)
9176         return (PerlIO*)NULL;
9177
9178     /* look for it in the table first */
9179     ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
9180     if (ret)
9181         return ret;
9182
9183     /* create anew and remember what it is */
9184     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
9185     ptr_table_store(PL_ptr_table, fp, ret);
9186     return ret;
9187 }
9188
9189 /* duplicate a directory handle */
9190
9191 DIR *
9192 Perl_dirp_dup(pTHX_ DIR *dp)
9193 {
9194     if (!dp)
9195         return (DIR*)NULL;
9196     /* XXX TODO */
9197     return dp;
9198 }
9199
9200 /* duplicate a typeglob */
9201
9202 GP *
9203 Perl_gp_dup(pTHX_ GP *gp, CLONE_PARAMS* param)
9204 {
9205     GP *ret;
9206     if (!gp)
9207         return (GP*)NULL;
9208     /* look for it in the table first */
9209     ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
9210     if (ret)
9211         return ret;
9212
9213     /* create anew and remember what it is */
9214     Newxz(ret, 1, GP);
9215     ptr_table_store(PL_ptr_table, gp, ret);
9216
9217     /* clone */
9218     ret->gp_refcnt      = 0;                    /* must be before any other dups! */
9219     ret->gp_sv          = sv_dup_inc(gp->gp_sv, param);
9220     ret->gp_io          = io_dup_inc(gp->gp_io, param);
9221     ret->gp_form        = cv_dup_inc(gp->gp_form, param);
9222     ret->gp_av          = av_dup_inc(gp->gp_av, param);
9223     ret->gp_hv          = hv_dup_inc(gp->gp_hv, param);
9224     ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
9225     ret->gp_cv          = cv_dup_inc(gp->gp_cv, param);
9226     ret->gp_cvgen       = gp->gp_cvgen;
9227     ret->gp_line        = gp->gp_line;
9228     ret->gp_file        = gp->gp_file;          /* points to COP.cop_file */
9229     return ret;
9230 }
9231
9232 /* duplicate a chain of magic */
9233
9234 MAGIC *
9235 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS* param)
9236 {
9237     MAGIC *mgprev = (MAGIC*)NULL;
9238     MAGIC *mgret;
9239     if (!mg)
9240         return (MAGIC*)NULL;
9241     /* look for it in the table first */
9242     mgret = (MAGIC*)ptr_table_fetch(PL_ptr_table, mg);
9243     if (mgret)
9244         return mgret;
9245
9246     for (; mg; mg = mg->mg_moremagic) {
9247         MAGIC *nmg;
9248         Newxz(nmg, 1, MAGIC);
9249         if (mgprev)
9250             mgprev->mg_moremagic = nmg;
9251         else
9252             mgret = nmg;
9253         nmg->mg_virtual = mg->mg_virtual;       /* XXX copy dynamic vtable? */
9254         nmg->mg_private = mg->mg_private;
9255         nmg->mg_type    = mg->mg_type;
9256         nmg->mg_flags   = mg->mg_flags;
9257         if (mg->mg_type == PERL_MAGIC_qr) {
9258             nmg->mg_obj = (SV*)re_dup((REGEXP*)mg->mg_obj, param);
9259         }
9260         else if(mg->mg_type == PERL_MAGIC_backref) {
9261             /* The backref AV has its reference count deliberately bumped by
9262                1.  */
9263             nmg->mg_obj = SvREFCNT_inc(av_dup_inc((AV*) mg->mg_obj, param));
9264         }
9265         else if (mg->mg_type == PERL_MAGIC_symtab) {
9266             nmg->mg_obj = mg->mg_obj;
9267         }
9268         else {
9269             nmg->mg_obj = (mg->mg_flags & MGf_REFCOUNTED)
9270                               ? sv_dup_inc(mg->mg_obj, param)
9271                               : sv_dup(mg->mg_obj, param);
9272         }
9273         nmg->mg_len     = mg->mg_len;
9274         nmg->mg_ptr     = mg->mg_ptr;   /* XXX random ptr? */
9275         if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
9276             if (mg->mg_len > 0) {
9277                 nmg->mg_ptr     = SAVEPVN(mg->mg_ptr, mg->mg_len);
9278                 if (mg->mg_type == PERL_MAGIC_overload_table &&
9279                         AMT_AMAGIC((AMT*)mg->mg_ptr))
9280                 {
9281                     const AMT * const amtp = (AMT*)mg->mg_ptr;
9282                     AMT * const namtp = (AMT*)nmg->mg_ptr;
9283                     I32 i;
9284                     for (i = 1; i < NofAMmeth; i++) {
9285                         namtp->table[i] = cv_dup_inc(amtp->table[i], param);
9286                     }
9287                 }
9288             }
9289             else if (mg->mg_len == HEf_SVKEY)
9290                 nmg->mg_ptr     = (char*)sv_dup_inc((SV*)mg->mg_ptr, param);
9291         }
9292         if ((mg->mg_flags & MGf_DUP) && mg->mg_virtual && mg->mg_virtual->svt_dup) {
9293             CALL_FPTR(nmg->mg_virtual->svt_dup)(aTHX_ nmg, param);
9294         }
9295         mgprev = nmg;
9296     }
9297     return mgret;
9298 }
9299
9300 /* create a new pointer-mapping table */
9301
9302 PTR_TBL_t *
9303 Perl_ptr_table_new(pTHX)
9304 {
9305     PTR_TBL_t *tbl;
9306     Newxz(tbl, 1, PTR_TBL_t);
9307     tbl->tbl_max        = 511;
9308     tbl->tbl_items      = 0;
9309     Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
9310     return tbl;
9311 }
9312
9313 #define PTR_TABLE_HASH(ptr) \
9314   ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
9315
9316 /* 
9317    we use the PTE_SVSLOT 'reservation' made above, both here (in the
9318    following define) and at call to new_body_inline made below in 
9319    Perl_ptr_table_store()
9320  */
9321
9322 #define del_pte(p)     del_body_type(p, PTE_SVSLOT)
9323
9324 /* map an existing pointer using a table */
9325
9326 STATIC PTR_TBL_ENT_t *
9327 S_ptr_table_find(pTHX_ PTR_TBL_t *tbl, const void *sv) {
9328     PTR_TBL_ENT_t *tblent;
9329     const UV hash = PTR_TABLE_HASH(sv);
9330     assert(tbl);
9331     tblent = tbl->tbl_ary[hash & tbl->tbl_max];
9332     for (; tblent; tblent = tblent->next) {
9333         if (tblent->oldval == sv)
9334             return tblent;
9335     }
9336     return 0;
9337 }
9338
9339 void *
9340 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *tbl, const void *sv)
9341 {
9342     PTR_TBL_ENT_t const *const tblent = S_ptr_table_find(aTHX_ tbl, sv);
9343     return tblent ? tblent->newval : (void *) 0;
9344 }
9345
9346 /* add a new entry to a pointer-mapping table */
9347
9348 void
9349 Perl_ptr_table_store(pTHX_ PTR_TBL_t *tbl, const void *oldsv, void *newsv)
9350 {
9351     PTR_TBL_ENT_t *tblent = S_ptr_table_find(aTHX_ tbl, oldsv);
9352
9353     if (tblent) {
9354         tblent->newval = newsv;
9355     } else {
9356         const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
9357
9358         new_body_inline(tblent, sizeof(struct ptr_tbl_ent), PTE_SVSLOT);
9359         tblent->oldval = oldsv;
9360         tblent->newval = newsv;
9361         tblent->next = tbl->tbl_ary[entry];
9362         tbl->tbl_ary[entry] = tblent;
9363         tbl->tbl_items++;
9364         if (tblent->next && tbl->tbl_items > tbl->tbl_max)
9365             ptr_table_split(tbl);
9366     }
9367 }
9368
9369 /* double the hash bucket size of an existing ptr table */
9370
9371 void
9372 Perl_ptr_table_split(pTHX_ PTR_TBL_t *tbl)
9373 {
9374     PTR_TBL_ENT_t **ary = tbl->tbl_ary;
9375     const UV oldsize = tbl->tbl_max + 1;
9376     UV newsize = oldsize * 2;
9377     UV i;
9378
9379     Renew(ary, newsize, PTR_TBL_ENT_t*);
9380     Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
9381     tbl->tbl_max = --newsize;
9382     tbl->tbl_ary = ary;
9383     for (i=0; i < oldsize; i++, ary++) {
9384         PTR_TBL_ENT_t **curentp, **entp, *ent;
9385         if (!*ary)
9386             continue;
9387         curentp = ary + oldsize;
9388         for (entp = ary, ent = *ary; ent; ent = *entp) {
9389             if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
9390                 *entp = ent->next;
9391                 ent->next = *curentp;
9392                 *curentp = ent;
9393                 continue;
9394             }
9395             else
9396                 entp = &ent->next;
9397         }
9398     }
9399 }
9400
9401 /* remove all the entries from a ptr table */
9402
9403 void
9404 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *tbl)
9405 {
9406     if (tbl && tbl->tbl_items) {
9407         register PTR_TBL_ENT_t * const * const array = tbl->tbl_ary;
9408         UV riter = tbl->tbl_max;
9409
9410         do {
9411             PTR_TBL_ENT_t *entry = array[riter];
9412
9413             while (entry) {
9414                 PTR_TBL_ENT_t * const oentry = entry;
9415                 entry = entry->next;
9416                 del_pte(oentry);
9417             }
9418         } while (riter--);
9419
9420         tbl->tbl_items = 0;
9421     }
9422 }
9423
9424 /* clear and free a ptr table */
9425
9426 void
9427 Perl_ptr_table_free(pTHX_ PTR_TBL_t *tbl)
9428 {
9429     if (!tbl) {
9430         return;
9431     }
9432     ptr_table_clear(tbl);
9433     Safefree(tbl->tbl_ary);
9434     Safefree(tbl);
9435 }
9436
9437
9438 void
9439 Perl_rvpv_dup(pTHX_ SV *dstr, const SV *sstr, CLONE_PARAMS* param)
9440 {
9441     if (SvROK(sstr)) {
9442         SvRV_set(dstr, SvWEAKREF(sstr)
9443                        ? sv_dup(SvRV(sstr), param)
9444                        : sv_dup_inc(SvRV(sstr), param));
9445
9446     }
9447     else if (SvPVX_const(sstr)) {
9448         /* Has something there */
9449         if (SvLEN(sstr)) {
9450             /* Normal PV - clone whole allocated space */
9451             SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
9452             if (SvREADONLY(sstr) && SvFAKE(sstr)) {
9453                 /* Not that normal - actually sstr is copy on write.
9454                    But we are a true, independant SV, so:  */
9455                 SvREADONLY_off(dstr);
9456                 SvFAKE_off(dstr);
9457             }
9458         }
9459         else {
9460             /* Special case - not normally malloced for some reason */
9461             if ((SvREADONLY(sstr) && SvFAKE(sstr))) {
9462                 /* A "shared" PV - clone it as "shared" PV */
9463                 SvPV_set(dstr,
9464                          HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
9465                                          param)));
9466             }
9467             else {
9468                 /* Some other special case - random pointer */
9469                 SvPV_set(dstr, SvPVX(sstr));            
9470             }
9471         }
9472     }
9473     else {
9474         /* Copy the Null */
9475         if (SvTYPE(dstr) == SVt_RV)
9476             SvRV_set(dstr, NULL);
9477         else
9478             SvPV_set(dstr, NULL);
9479     }
9480 }
9481
9482 /* duplicate an SV of any type (including AV, HV etc) */
9483
9484 SV *
9485 Perl_sv_dup(pTHX_ const SV *sstr, CLONE_PARAMS* param)
9486 {
9487     dVAR;
9488     SV *dstr;
9489
9490     if (!sstr || SvTYPE(sstr) == SVTYPEMASK)
9491         return NULL;
9492     /* look for it in the table first */
9493     dstr = (SV*)ptr_table_fetch(PL_ptr_table, sstr);
9494     if (dstr)
9495         return dstr;
9496
9497     if(param->flags & CLONEf_JOIN_IN) {
9498         /** We are joining here so we don't want do clone
9499             something that is bad **/
9500         if (SvTYPE(sstr) == SVt_PVHV) {
9501             const char * const hvname = HvNAME_get(sstr);
9502             if (hvname)
9503                 /** don't clone stashes if they already exist **/
9504                 return (SV*)gv_stashpv(hvname,0);
9505         }
9506     }
9507
9508     /* create anew and remember what it is */
9509     new_SV(dstr);
9510
9511 #ifdef DEBUG_LEAKING_SCALARS
9512     dstr->sv_debug_optype = sstr->sv_debug_optype;
9513     dstr->sv_debug_line = sstr->sv_debug_line;
9514     dstr->sv_debug_inpad = sstr->sv_debug_inpad;
9515     dstr->sv_debug_cloned = 1;
9516     dstr->sv_debug_file = savepv(sstr->sv_debug_file);
9517 #endif
9518
9519     ptr_table_store(PL_ptr_table, sstr, dstr);
9520
9521     /* clone */
9522     SvFLAGS(dstr)       = SvFLAGS(sstr);
9523     SvFLAGS(dstr)       &= ~SVf_OOK;            /* don't propagate OOK hack */
9524     SvREFCNT(dstr)      = 0;                    /* must be before any other dups! */
9525
9526 #ifdef DEBUGGING
9527     if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
9528         PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
9529                       PL_watch_pvx, SvPVX_const(sstr));
9530 #endif
9531
9532     /* don't clone objects whose class has asked us not to */
9533     if (SvOBJECT(sstr) && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE)) {
9534         SvFLAGS(dstr) &= ~SVTYPEMASK;
9535         SvOBJECT_off(dstr);
9536         return dstr;
9537     }
9538
9539     switch (SvTYPE(sstr)) {
9540     case SVt_NULL:
9541         SvANY(dstr)     = NULL;
9542         break;
9543     case SVt_IV:
9544         SvANY(dstr)     = (XPVIV*)((char*)&(dstr->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv));
9545         SvIV_set(dstr, SvIVX(sstr));
9546         break;
9547     case SVt_NV:
9548         SvANY(dstr)     = new_XNV();
9549         SvNV_set(dstr, SvNVX(sstr));
9550         break;
9551     case SVt_RV:
9552         SvANY(dstr)     = &(dstr->sv_u.svu_rv);
9553         Perl_rvpv_dup(aTHX_ dstr, sstr, param);
9554         break;
9555     default:
9556         {
9557             /* These are all the types that need complex bodies allocating.  */
9558             void *new_body;
9559             const svtype sv_type = SvTYPE(sstr);
9560             const struct body_details *const sv_type_details
9561                 = bodies_by_type + sv_type;
9562
9563             switch (sv_type) {
9564             default:
9565                 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]",
9566                            (IV)SvTYPE(sstr));
9567                 break;
9568
9569             case SVt_PVGV:
9570                 if (GvUNIQUE((GV*)sstr)) {
9571                     /* Do sharing here, and fall through */
9572                 }
9573             case SVt_PVIO:
9574             case SVt_PVFM:
9575             case SVt_PVHV:
9576             case SVt_PVAV:
9577             case SVt_PVBM:
9578             case SVt_PVCV:
9579             case SVt_PVLV:
9580             case SVt_PVMG:
9581             case SVt_PVNV:
9582             case SVt_PVIV:
9583             case SVt_PV:
9584                 assert(sv_type_details->size);
9585                 if (sv_type_details->arena) {
9586                     new_body_inline(new_body, sv_type_details->size, sv_type);
9587                     new_body
9588                         = (void*)((char*)new_body - sv_type_details->offset);
9589                 } else {
9590                     new_body = new_NOARENA(sv_type_details);
9591                 }
9592             }
9593             assert(new_body);
9594             SvANY(dstr) = new_body;
9595
9596 #ifndef PURIFY
9597             Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
9598                  ((char*)SvANY(dstr)) + sv_type_details->offset,
9599                  sv_type_details->copy, char);
9600 #else
9601             Copy(((char*)SvANY(sstr)),
9602                  ((char*)SvANY(dstr)),
9603                  sv_type_details->size + sv_type_details->offset, char);
9604 #endif
9605
9606             if (sv_type != SVt_PVAV && sv_type != SVt_PVHV)
9607                 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
9608
9609             /* The Copy above means that all the source (unduplicated) pointers
9610                are now in the destination.  We can check the flags and the
9611                pointers in either, but it's possible that there's less cache
9612                missing by always going for the destination.
9613                FIXME - instrument and check that assumption  */
9614             if (sv_type >= SVt_PVMG) {
9615                 if (SvMAGIC(dstr))
9616                     SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
9617                 if (SvSTASH(dstr))
9618                     SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
9619             }
9620
9621             /* The cast silences a GCC warning about unhandled types.  */
9622             switch ((int)sv_type) {
9623             case SVt_PV:
9624                 break;
9625             case SVt_PVIV:
9626                 break;
9627             case SVt_PVNV:
9628                 break;
9629             case SVt_PVMG:
9630                 break;
9631             case SVt_PVBM:
9632                 break;
9633             case SVt_PVLV:
9634                 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
9635                 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
9636                     LvTARG(dstr) = dstr;
9637                 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
9638                     LvTARG(dstr) = (SV*)he_dup((HE*)LvTARG(dstr), 0, param);
9639                 else
9640                     LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
9641                 break;
9642             case SVt_PVGV:
9643                 GvNAME(dstr)    = SAVEPVN(GvNAME(dstr), GvNAMELEN(dstr));
9644                 GvSTASH(dstr)   = hv_dup(GvSTASH(dstr), param);
9645                 /* Don't call sv_add_backref here as it's going to be created
9646                    as part of the magic cloning of the symbol table.  */
9647                 GvGP(dstr)      = gp_dup(GvGP(dstr), param);
9648                 (void)GpREFCNT_inc(GvGP(dstr));
9649                 break;
9650             case SVt_PVIO:
9651                 IoIFP(dstr)     = fp_dup(IoIFP(dstr), IoTYPE(dstr), param);
9652                 if (IoOFP(dstr) == IoIFP(sstr))
9653                     IoOFP(dstr) = IoIFP(dstr);
9654                 else
9655                     IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
9656                 /* PL_rsfp_filters entries have fake IoDIRP() */
9657                 if (IoDIRP(dstr) && !(IoFLAGS(dstr) & IOf_FAKE_DIRP))
9658                     IoDIRP(dstr)        = dirp_dup(IoDIRP(dstr));
9659                 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
9660                     /* I have no idea why fake dirp (rsfps)
9661                        should be treated differently but otherwise
9662                        we end up with leaks -- sky*/
9663                     IoTOP_GV(dstr)      = gv_dup_inc(IoTOP_GV(dstr), param);
9664                     IoFMT_GV(dstr)      = gv_dup_inc(IoFMT_GV(dstr), param);
9665                     IoBOTTOM_GV(dstr)   = gv_dup_inc(IoBOTTOM_GV(dstr), param);
9666                 } else {
9667                     IoTOP_GV(dstr)      = gv_dup(IoTOP_GV(dstr), param);
9668                     IoFMT_GV(dstr)      = gv_dup(IoFMT_GV(dstr), param);
9669                     IoBOTTOM_GV(dstr)   = gv_dup(IoBOTTOM_GV(dstr), param);
9670                 }
9671                 IoTOP_NAME(dstr)        = SAVEPV(IoTOP_NAME(dstr));
9672                 IoFMT_NAME(dstr)        = SAVEPV(IoFMT_NAME(dstr));
9673                 IoBOTTOM_NAME(dstr)     = SAVEPV(IoBOTTOM_NAME(dstr));
9674                 break;
9675             case SVt_PVAV:
9676                 if (AvARRAY((AV*)sstr)) {
9677                     SV **dst_ary, **src_ary;
9678                     SSize_t items = AvFILLp((AV*)sstr) + 1;
9679
9680                     src_ary = AvARRAY((AV*)sstr);
9681                     Newxz(dst_ary, AvMAX((AV*)sstr)+1, SV*);
9682                     ptr_table_store(PL_ptr_table, src_ary, dst_ary);
9683                     SvPV_set(dstr, (char*)dst_ary);
9684                     AvALLOC((AV*)dstr) = dst_ary;
9685                     if (AvREAL((AV*)sstr)) {
9686                         while (items-- > 0)
9687                             *dst_ary++ = sv_dup_inc(*src_ary++, param);
9688                     }
9689                     else {
9690                         while (items-- > 0)
9691                             *dst_ary++ = sv_dup(*src_ary++, param);
9692                     }
9693                     items = AvMAX((AV*)sstr) - AvFILLp((AV*)sstr);
9694                     while (items-- > 0) {
9695                         *dst_ary++ = &PL_sv_undef;
9696                     }
9697                 }
9698                 else {
9699                     SvPV_set(dstr, NULL);
9700                     AvALLOC((AV*)dstr)  = (SV**)NULL;
9701                 }
9702                 break;
9703             case SVt_PVHV:
9704                 {
9705                     HEK *hvname = NULL;
9706
9707                     if (HvARRAY((HV*)sstr)) {
9708                         STRLEN i = 0;
9709                         const bool sharekeys = !!HvSHAREKEYS(sstr);
9710                         XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
9711                         XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
9712                         char *darray;
9713                         Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
9714                             + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
9715                             char);
9716                         HvARRAY(dstr) = (HE**)darray;
9717                         while (i <= sxhv->xhv_max) {
9718                             const HE *source = HvARRAY(sstr)[i];
9719                             HvARRAY(dstr)[i] = source
9720                                 ? he_dup(source, sharekeys, param) : 0;
9721                             ++i;
9722                         }
9723                         if (SvOOK(sstr)) {
9724                             struct xpvhv_aux * const saux = HvAUX(sstr);
9725                             struct xpvhv_aux * const daux = HvAUX(dstr);
9726                             /* This flag isn't copied.  */
9727                             /* SvOOK_on(hv) attacks the IV flags.  */
9728                             SvFLAGS(dstr) |= SVf_OOK;
9729
9730                             hvname = saux->xhv_name;
9731                             daux->xhv_name
9732                                 = hvname ? hek_dup(hvname, param) : hvname;
9733
9734                             daux->xhv_riter = saux->xhv_riter;
9735                             daux->xhv_eiter = saux->xhv_eiter
9736                                 ? he_dup(saux->xhv_eiter,
9737                                          (bool)!!HvSHAREKEYS(sstr), param) : 0;
9738                             daux->xhv_backreferences = saux->xhv_backreferences
9739                                 ? (AV*) SvREFCNT_inc(
9740                                                      sv_dup((SV*)saux->
9741                                                             xhv_backreferences,
9742                                                             param))
9743                                 : 0;
9744                         }
9745                     }
9746                     else {
9747                         SvPV_set(dstr, NULL);
9748                     }
9749                     /* Record stashes for possible cloning in Perl_clone(). */
9750                     if(hvname)
9751                         av_push(param->stashes, dstr);
9752                 }
9753                 break;
9754             case SVt_PVFM:
9755             case SVt_PVCV:
9756                 /* NOTE: not refcounted */
9757                 CvSTASH(dstr)   = hv_dup(CvSTASH(dstr), param);
9758                 OP_REFCNT_LOCK;
9759                 CvROOT(dstr)    = OpREFCNT_inc(CvROOT(dstr));
9760                 OP_REFCNT_UNLOCK;
9761                 if (CvCONST(dstr)) {
9762                     CvXSUBANY(dstr).any_ptr = GvUNIQUE(CvGV(dstr)) ?
9763                         SvREFCNT_inc(CvXSUBANY(dstr).any_ptr) :
9764                         sv_dup_inc((SV *)CvXSUBANY(dstr).any_ptr, param);
9765                 }
9766                 /* don't dup if copying back - CvGV isn't refcounted, so the
9767                  * duped GV may never be freed. A bit of a hack! DAPM */
9768                 CvGV(dstr)      = (param->flags & CLONEf_JOIN_IN) ?
9769                     NULL : gv_dup(CvGV(dstr), param) ;
9770                 if (!(param->flags & CLONEf_COPY_STACKS)) {
9771                     CvDEPTH(dstr) = 0;
9772                 }
9773                 PAD_DUP(CvPADLIST(dstr), CvPADLIST(sstr), param);
9774                 CvOUTSIDE(dstr) =
9775                     CvWEAKOUTSIDE(sstr)
9776                     ? cv_dup(    CvOUTSIDE(dstr), param)
9777                     : cv_dup_inc(CvOUTSIDE(dstr), param);
9778                 if (!CvXSUB(dstr))
9779                     CvFILE(dstr) = SAVEPV(CvFILE(dstr));
9780                 break;
9781             }
9782         }
9783     }
9784
9785     if (SvOBJECT(dstr) && SvTYPE(dstr) != SVt_PVIO)
9786         ++PL_sv_objcount;
9787
9788     return dstr;
9789  }
9790
9791 /* duplicate a context */
9792
9793 PERL_CONTEXT *
9794 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
9795 {
9796     PERL_CONTEXT *ncxs;
9797
9798     if (!cxs)
9799         return (PERL_CONTEXT*)NULL;
9800
9801     /* look for it in the table first */
9802     ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
9803     if (ncxs)
9804         return ncxs;
9805
9806     /* create anew and remember what it is */
9807     Newxz(ncxs, max + 1, PERL_CONTEXT);
9808     ptr_table_store(PL_ptr_table, cxs, ncxs);
9809
9810     while (ix >= 0) {
9811         PERL_CONTEXT * const cx = &cxs[ix];
9812         PERL_CONTEXT * const ncx = &ncxs[ix];
9813         ncx->cx_type    = cx->cx_type;
9814         if (CxTYPE(cx) == CXt_SUBST) {
9815             Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
9816         }
9817         else {
9818             ncx->blk_oldsp      = cx->blk_oldsp;
9819             ncx->blk_oldcop     = cx->blk_oldcop;
9820             ncx->blk_oldmarksp  = cx->blk_oldmarksp;
9821             ncx->blk_oldscopesp = cx->blk_oldscopesp;
9822             ncx->blk_oldpm      = cx->blk_oldpm;
9823             ncx->blk_gimme      = cx->blk_gimme;
9824             switch (CxTYPE(cx)) {
9825             case CXt_SUB:
9826                 ncx->blk_sub.cv         = (cx->blk_sub.olddepth == 0
9827                                            ? cv_dup_inc(cx->blk_sub.cv, param)
9828                                            : cv_dup(cx->blk_sub.cv,param));
9829                 ncx->blk_sub.argarray   = (cx->blk_sub.hasargs
9830                                            ? av_dup_inc(cx->blk_sub.argarray, param)
9831                                            : NULL);
9832                 ncx->blk_sub.savearray  = av_dup_inc(cx->blk_sub.savearray, param);
9833                 ncx->blk_sub.olddepth   = cx->blk_sub.olddepth;
9834                 ncx->blk_sub.hasargs    = cx->blk_sub.hasargs;
9835                 ncx->blk_sub.lval       = cx->blk_sub.lval;
9836                 ncx->blk_sub.retop      = cx->blk_sub.retop;
9837                 break;
9838             case CXt_EVAL:
9839                 ncx->blk_eval.old_in_eval = cx->blk_eval.old_in_eval;
9840                 ncx->blk_eval.old_op_type = cx->blk_eval.old_op_type;
9841                 ncx->blk_eval.old_namesv = sv_dup_inc(cx->blk_eval.old_namesv, param);
9842                 ncx->blk_eval.old_eval_root = cx->blk_eval.old_eval_root;
9843                 ncx->blk_eval.cur_text  = sv_dup(cx->blk_eval.cur_text, param);
9844                 ncx->blk_eval.retop = cx->blk_eval.retop;
9845                 break;
9846             case CXt_LOOP:
9847                 ncx->blk_loop.label     = cx->blk_loop.label;
9848                 ncx->blk_loop.resetsp   = cx->blk_loop.resetsp;
9849                 ncx->blk_loop.redo_op   = cx->blk_loop.redo_op;
9850                 ncx->blk_loop.next_op   = cx->blk_loop.next_op;
9851                 ncx->blk_loop.last_op   = cx->blk_loop.last_op;
9852                 ncx->blk_loop.iterdata  = (CxPADLOOP(cx)
9853                                            ? cx->blk_loop.iterdata
9854                                            : gv_dup((GV*)cx->blk_loop.iterdata, param));
9855                 ncx->blk_loop.oldcomppad
9856                     = (PAD*)ptr_table_fetch(PL_ptr_table,
9857                                             cx->blk_loop.oldcomppad);
9858                 ncx->blk_loop.itersave  = sv_dup_inc(cx->blk_loop.itersave, param);
9859                 ncx->blk_loop.iterlval  = sv_dup_inc(cx->blk_loop.iterlval, param);
9860                 ncx->blk_loop.iterary   = av_dup_inc(cx->blk_loop.iterary, param);
9861                 ncx->blk_loop.iterix    = cx->blk_loop.iterix;
9862                 ncx->blk_loop.itermax   = cx->blk_loop.itermax;
9863                 break;
9864             case CXt_FORMAT:
9865                 ncx->blk_sub.cv         = cv_dup(cx->blk_sub.cv, param);
9866                 ncx->blk_sub.gv         = gv_dup(cx->blk_sub.gv, param);
9867                 ncx->blk_sub.dfoutgv    = gv_dup_inc(cx->blk_sub.dfoutgv, param);
9868                 ncx->blk_sub.hasargs    = cx->blk_sub.hasargs;
9869                 ncx->blk_sub.retop      = cx->blk_sub.retop;
9870                 break;
9871             case CXt_BLOCK:
9872             case CXt_NULL:
9873                 break;
9874             }
9875         }
9876         --ix;
9877     }
9878     return ncxs;
9879 }
9880
9881 /* duplicate a stack info structure */
9882
9883 PERL_SI *
9884 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
9885 {
9886     PERL_SI *nsi;
9887
9888     if (!si)
9889         return (PERL_SI*)NULL;
9890
9891     /* look for it in the table first */
9892     nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
9893     if (nsi)
9894         return nsi;
9895
9896     /* create anew and remember what it is */
9897     Newxz(nsi, 1, PERL_SI);
9898     ptr_table_store(PL_ptr_table, si, nsi);
9899
9900     nsi->si_stack       = av_dup_inc(si->si_stack, param);
9901     nsi->si_cxix        = si->si_cxix;
9902     nsi->si_cxmax       = si->si_cxmax;
9903     nsi->si_cxstack     = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
9904     nsi->si_type        = si->si_type;
9905     nsi->si_prev        = si_dup(si->si_prev, param);
9906     nsi->si_next        = si_dup(si->si_next, param);
9907     nsi->si_markoff     = si->si_markoff;
9908
9909     return nsi;
9910 }
9911
9912 #define POPINT(ss,ix)   ((ss)[--(ix)].any_i32)
9913 #define TOPINT(ss,ix)   ((ss)[ix].any_i32)
9914 #define POPLONG(ss,ix)  ((ss)[--(ix)].any_long)
9915 #define TOPLONG(ss,ix)  ((ss)[ix].any_long)
9916 #define POPIV(ss,ix)    ((ss)[--(ix)].any_iv)
9917 #define TOPIV(ss,ix)    ((ss)[ix].any_iv)
9918 #define POPBOOL(ss,ix)  ((ss)[--(ix)].any_bool)
9919 #define TOPBOOL(ss,ix)  ((ss)[ix].any_bool)
9920 #define POPPTR(ss,ix)   ((ss)[--(ix)].any_ptr)
9921 #define TOPPTR(ss,ix)   ((ss)[ix].any_ptr)
9922 #define POPDPTR(ss,ix)  ((ss)[--(ix)].any_dptr)
9923 #define TOPDPTR(ss,ix)  ((ss)[ix].any_dptr)
9924 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
9925 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
9926
9927 /* XXXXX todo */
9928 #define pv_dup_inc(p)   SAVEPV(p)
9929 #define pv_dup(p)       SAVEPV(p)
9930 #define svp_dup_inc(p,pp)       any_dup(p,pp)
9931
9932 /* map any object to the new equivent - either something in the
9933  * ptr table, or something in the interpreter structure
9934  */
9935
9936 void *
9937 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
9938 {
9939     void *ret;
9940
9941     if (!v)
9942         return (void*)NULL;
9943
9944     /* look for it in the table first */
9945     ret = ptr_table_fetch(PL_ptr_table, v);
9946     if (ret)
9947         return ret;
9948
9949     /* see if it is part of the interpreter structure */
9950     if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
9951         ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
9952     else {
9953         ret = v;
9954     }
9955
9956     return ret;
9957 }
9958
9959 /* duplicate the save stack */
9960
9961 ANY *
9962 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
9963 {
9964     ANY * const ss      = proto_perl->Tsavestack;
9965     const I32 max       = proto_perl->Tsavestack_max;
9966     I32 ix              = proto_perl->Tsavestack_ix;
9967     ANY *nss;
9968     SV *sv;
9969     GV *gv;
9970     AV *av;
9971     HV *hv;
9972     void* ptr;
9973     int intval;
9974     long longval;
9975     GP *gp;
9976     IV iv;
9977     char *c = NULL;
9978     void (*dptr) (void*);
9979     void (*dxptr) (pTHX_ void*);
9980
9981     Newxz(nss, max, ANY);
9982
9983     while (ix > 0) {
9984         I32 i = POPINT(ss,ix);
9985         TOPINT(nss,ix) = i;
9986         switch (i) {
9987         case SAVEt_ITEM:                        /* normal string */
9988             sv = (SV*)POPPTR(ss,ix);
9989             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
9990             sv = (SV*)POPPTR(ss,ix);
9991             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
9992             break;
9993         case SAVEt_SV:                          /* scalar reference */
9994             sv = (SV*)POPPTR(ss,ix);
9995             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
9996             gv = (GV*)POPPTR(ss,ix);
9997             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
9998             break;
9999         case SAVEt_GENERIC_PVREF:               /* generic char* */
10000             c = (char*)POPPTR(ss,ix);
10001             TOPPTR(nss,ix) = pv_dup(c);
10002             ptr = POPPTR(ss,ix);
10003             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10004             break;
10005         case SAVEt_SHARED_PVREF:                /* char* in shared space */
10006             c = (char*)POPPTR(ss,ix);
10007             TOPPTR(nss,ix) = savesharedpv(c);
10008             ptr = POPPTR(ss,ix);
10009             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10010             break;
10011         case SAVEt_GENERIC_SVREF:               /* generic sv */
10012         case SAVEt_SVREF:                       /* scalar reference */
10013             sv = (SV*)POPPTR(ss,ix);
10014             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
10015             ptr = POPPTR(ss,ix);
10016             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
10017             break;
10018         case SAVEt_AV:                          /* array reference */
10019             av = (AV*)POPPTR(ss,ix);
10020             TOPPTR(nss,ix) = av_dup_inc(av, param);
10021             gv = (GV*)POPPTR(ss,ix);
10022             TOPPTR(nss,ix) = gv_dup(gv, param);
10023             break;
10024         case SAVEt_HV:                          /* hash reference */
10025             hv = (HV*)POPPTR(ss,ix);
10026             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
10027             gv = (GV*)POPPTR(ss,ix);
10028             TOPPTR(nss,ix) = gv_dup(gv, param);
10029             break;
10030         case SAVEt_INT:                         /* int reference */
10031             ptr = POPPTR(ss,ix);
10032             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10033             intval = (int)POPINT(ss,ix);
10034             TOPINT(nss,ix) = intval;
10035             break;
10036         case SAVEt_LONG:                        /* long reference */
10037             ptr = POPPTR(ss,ix);
10038             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10039             longval = (long)POPLONG(ss,ix);
10040             TOPLONG(nss,ix) = longval;
10041             break;
10042         case SAVEt_I32:                         /* I32 reference */
10043         case SAVEt_I16:                         /* I16 reference */
10044         case SAVEt_I8:                          /* I8 reference */
10045             ptr = POPPTR(ss,ix);
10046             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10047             i = POPINT(ss,ix);
10048             TOPINT(nss,ix) = i;
10049             break;
10050         case SAVEt_IV:                          /* IV reference */
10051             ptr = POPPTR(ss,ix);
10052             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10053             iv = POPIV(ss,ix);
10054             TOPIV(nss,ix) = iv;
10055             break;
10056         case SAVEt_SPTR:                        /* SV* reference */
10057             ptr = POPPTR(ss,ix);
10058             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10059             sv = (SV*)POPPTR(ss,ix);
10060             TOPPTR(nss,ix) = sv_dup(sv, param);
10061             break;
10062         case SAVEt_VPTR:                        /* random* reference */
10063             ptr = POPPTR(ss,ix);
10064             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10065             ptr = POPPTR(ss,ix);
10066             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10067             break;
10068         case SAVEt_PPTR:                        /* char* reference */
10069             ptr = POPPTR(ss,ix);
10070             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10071             c = (char*)POPPTR(ss,ix);
10072             TOPPTR(nss,ix) = pv_dup(c);
10073             break;
10074         case SAVEt_HPTR:                        /* HV* reference */
10075             ptr = POPPTR(ss,ix);
10076             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10077             hv = (HV*)POPPTR(ss,ix);
10078             TOPPTR(nss,ix) = hv_dup(hv, param);
10079             break;
10080         case SAVEt_APTR:                        /* AV* reference */
10081             ptr = POPPTR(ss,ix);
10082             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10083             av = (AV*)POPPTR(ss,ix);
10084             TOPPTR(nss,ix) = av_dup(av, param);
10085             break;
10086         case SAVEt_NSTAB:
10087             gv = (GV*)POPPTR(ss,ix);
10088             TOPPTR(nss,ix) = gv_dup(gv, param);
10089             break;
10090         case SAVEt_GP:                          /* scalar reference */
10091             gp = (GP*)POPPTR(ss,ix);
10092             TOPPTR(nss,ix) = gp = gp_dup(gp, param);
10093             (void)GpREFCNT_inc(gp);
10094             gv = (GV*)POPPTR(ss,ix);
10095             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
10096             c = (char*)POPPTR(ss,ix);
10097             TOPPTR(nss,ix) = pv_dup(c);
10098             iv = POPIV(ss,ix);
10099             TOPIV(nss,ix) = iv;
10100             iv = POPIV(ss,ix);
10101             TOPIV(nss,ix) = iv;
10102             break;
10103         case SAVEt_FREESV:
10104         case SAVEt_MORTALIZESV:
10105             sv = (SV*)POPPTR(ss,ix);
10106             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
10107             break;
10108         case SAVEt_FREEOP:
10109             ptr = POPPTR(ss,ix);
10110             if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
10111                 /* these are assumed to be refcounted properly */
10112                 OP *o;
10113                 switch (((OP*)ptr)->op_type) {
10114                 case OP_LEAVESUB:
10115                 case OP_LEAVESUBLV:
10116                 case OP_LEAVEEVAL:
10117                 case OP_LEAVE:
10118                 case OP_SCOPE:
10119                 case OP_LEAVEWRITE:
10120                     TOPPTR(nss,ix) = ptr;
10121                     o = (OP*)ptr;
10122                     OpREFCNT_inc(o);
10123                     break;
10124                 default:
10125                     TOPPTR(nss,ix) = Nullop;
10126                     break;
10127                 }
10128             }
10129             else
10130                 TOPPTR(nss,ix) = Nullop;
10131             break;
10132         case SAVEt_FREEPV:
10133             c = (char*)POPPTR(ss,ix);
10134             TOPPTR(nss,ix) = pv_dup_inc(c);
10135             break;
10136         case SAVEt_CLEARSV:
10137             longval = POPLONG(ss,ix);
10138             TOPLONG(nss,ix) = longval;
10139             break;
10140         case SAVEt_DELETE:
10141             hv = (HV*)POPPTR(ss,ix);
10142             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
10143             c = (char*)POPPTR(ss,ix);
10144             TOPPTR(nss,ix) = pv_dup_inc(c);
10145             i = POPINT(ss,ix);
10146             TOPINT(nss,ix) = i;
10147             break;
10148         case SAVEt_DESTRUCTOR:
10149             ptr = POPPTR(ss,ix);
10150             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
10151             dptr = POPDPTR(ss,ix);
10152             TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
10153                                         any_dup(FPTR2DPTR(void *, dptr),
10154                                                 proto_perl));
10155             break;
10156         case SAVEt_DESTRUCTOR_X:
10157             ptr = POPPTR(ss,ix);
10158             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
10159             dxptr = POPDXPTR(ss,ix);
10160             TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
10161                                          any_dup(FPTR2DPTR(void *, dxptr),
10162                                                  proto_perl));
10163             break;
10164         case SAVEt_REGCONTEXT:
10165         case SAVEt_ALLOC:
10166             i = POPINT(ss,ix);
10167             TOPINT(nss,ix) = i;
10168             ix -= i;
10169             break;
10170         case SAVEt_STACK_POS:           /* Position on Perl stack */
10171             i = POPINT(ss,ix);
10172             TOPINT(nss,ix) = i;
10173             break;
10174         case SAVEt_AELEM:               /* array element */
10175             sv = (SV*)POPPTR(ss,ix);
10176             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
10177             i = POPINT(ss,ix);
10178             TOPINT(nss,ix) = i;
10179             av = (AV*)POPPTR(ss,ix);
10180             TOPPTR(nss,ix) = av_dup_inc(av, param);
10181             break;
10182         case SAVEt_HELEM:               /* hash element */
10183             sv = (SV*)POPPTR(ss,ix);
10184             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
10185             sv = (SV*)POPPTR(ss,ix);
10186             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
10187             hv = (HV*)POPPTR(ss,ix);
10188             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
10189             break;
10190         case SAVEt_OP:
10191             ptr = POPPTR(ss,ix);
10192             TOPPTR(nss,ix) = ptr;
10193             break;
10194         case SAVEt_HINTS:
10195             i = POPINT(ss,ix);
10196             TOPINT(nss,ix) = i;
10197             break;
10198         case SAVEt_COMPPAD:
10199             av = (AV*)POPPTR(ss,ix);
10200             TOPPTR(nss,ix) = av_dup(av, param);
10201             break;
10202         case SAVEt_PADSV:
10203             longval = (long)POPLONG(ss,ix);
10204             TOPLONG(nss,ix) = longval;
10205             ptr = POPPTR(ss,ix);
10206             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10207             sv = (SV*)POPPTR(ss,ix);
10208             TOPPTR(nss,ix) = sv_dup(sv, param);
10209             break;
10210         case SAVEt_BOOL:
10211             ptr = POPPTR(ss,ix);
10212             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
10213             longval = (long)POPBOOL(ss,ix);
10214             TOPBOOL(nss,ix) = (bool)longval;
10215             break;
10216         case SAVEt_SET_SVFLAGS:
10217             i = POPINT(ss,ix);
10218             TOPINT(nss,ix) = i;
10219             i = POPINT(ss,ix);
10220             TOPINT(nss,ix) = i;
10221             sv = (SV*)POPPTR(ss,ix);
10222             TOPPTR(nss,ix) = sv_dup(sv, param);
10223             break;
10224         default:
10225             Perl_croak(aTHX_ "panic: ss_dup inconsistency");
10226         }
10227     }
10228
10229     return nss;
10230 }
10231
10232
10233 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
10234  * flag to the result. This is done for each stash before cloning starts,
10235  * so we know which stashes want their objects cloned */
10236
10237 static void
10238 do_mark_cloneable_stash(pTHX_ SV *sv)
10239 {
10240     const HEK * const hvname = HvNAME_HEK((HV*)sv);
10241     if (hvname) {
10242         GV* const cloner = gv_fetchmethod_autoload((HV*)sv, "CLONE_SKIP", 0);
10243         SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
10244         if (cloner && GvCV(cloner)) {
10245             dSP;
10246             UV status;
10247
10248             ENTER;
10249             SAVETMPS;
10250             PUSHMARK(SP);
10251             XPUSHs(sv_2mortal(newSVhek(hvname)));
10252             PUTBACK;
10253             call_sv((SV*)GvCV(cloner), G_SCALAR);
10254             SPAGAIN;
10255             status = POPu;
10256             PUTBACK;
10257             FREETMPS;
10258             LEAVE;
10259             if (status)
10260                 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
10261         }
10262     }
10263 }
10264
10265
10266
10267 /*
10268 =for apidoc perl_clone
10269
10270 Create and return a new interpreter by cloning the current one.
10271
10272 perl_clone takes these flags as parameters:
10273
10274 CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
10275 without it we only clone the data and zero the stacks,
10276 with it we copy the stacks and the new perl interpreter is
10277 ready to run at the exact same point as the previous one.
10278 The pseudo-fork code uses COPY_STACKS while the
10279 threads->new doesn't.
10280
10281 CLONEf_KEEP_PTR_TABLE
10282 perl_clone keeps a ptr_table with the pointer of the old
10283 variable as a key and the new variable as a value,
10284 this allows it to check if something has been cloned and not
10285 clone it again but rather just use the value and increase the
10286 refcount. If KEEP_PTR_TABLE is not set then perl_clone will kill
10287 the ptr_table using the function
10288 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
10289 reason to keep it around is if you want to dup some of your own
10290 variable who are outside the graph perl scans, example of this
10291 code is in threads.xs create
10292
10293 CLONEf_CLONE_HOST
10294 This is a win32 thing, it is ignored on unix, it tells perls
10295 win32host code (which is c++) to clone itself, this is needed on
10296 win32 if you want to run two threads at the same time,
10297 if you just want to do some stuff in a separate perl interpreter
10298 and then throw it away and return to the original one,
10299 you don't need to do anything.
10300
10301 =cut
10302 */
10303
10304 /* XXX the above needs expanding by someone who actually understands it ! */
10305 EXTERN_C PerlInterpreter *
10306 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
10307
10308 PerlInterpreter *
10309 perl_clone(PerlInterpreter *proto_perl, UV flags)
10310 {
10311    dVAR;
10312 #ifdef PERL_IMPLICIT_SYS
10313
10314    /* perlhost.h so we need to call into it
10315    to clone the host, CPerlHost should have a c interface, sky */
10316
10317    if (flags & CLONEf_CLONE_HOST) {
10318        return perl_clone_host(proto_perl,flags);
10319    }
10320    return perl_clone_using(proto_perl, flags,
10321                             proto_perl->IMem,
10322                             proto_perl->IMemShared,
10323                             proto_perl->IMemParse,
10324                             proto_perl->IEnv,
10325                             proto_perl->IStdIO,
10326                             proto_perl->ILIO,
10327                             proto_perl->IDir,
10328                             proto_perl->ISock,
10329                             proto_perl->IProc);
10330 }
10331
10332 PerlInterpreter *
10333 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
10334                  struct IPerlMem* ipM, struct IPerlMem* ipMS,
10335                  struct IPerlMem* ipMP, struct IPerlEnv* ipE,
10336                  struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
10337                  struct IPerlDir* ipD, struct IPerlSock* ipS,
10338                  struct IPerlProc* ipP)
10339 {
10340     /* XXX many of the string copies here can be optimized if they're
10341      * constants; they need to be allocated as common memory and just
10342      * their pointers copied. */
10343
10344     IV i;
10345     CLONE_PARAMS clone_params;
10346     CLONE_PARAMS* param = &clone_params;
10347
10348     PerlInterpreter *my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
10349     /* for each stash, determine whether its objects should be cloned */
10350     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
10351     PERL_SET_THX(my_perl);
10352
10353 #  ifdef DEBUGGING
10354     Poison(my_perl, 1, PerlInterpreter);
10355     PL_op = Nullop;
10356     PL_curcop = (COP *)Nullop;
10357     PL_markstack = 0;
10358     PL_scopestack = 0;
10359     PL_savestack = 0;
10360     PL_savestack_ix = 0;
10361     PL_savestack_max = -1;
10362     PL_sig_pending = 0;
10363     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
10364 #  else /* !DEBUGGING */
10365     Zero(my_perl, 1, PerlInterpreter);
10366 #  endif        /* DEBUGGING */
10367
10368     /* host pointers */
10369     PL_Mem              = ipM;
10370     PL_MemShared        = ipMS;
10371     PL_MemParse         = ipMP;
10372     PL_Env              = ipE;
10373     PL_StdIO            = ipStd;
10374     PL_LIO              = ipLIO;
10375     PL_Dir              = ipD;
10376     PL_Sock             = ipS;
10377     PL_Proc             = ipP;
10378 #else           /* !PERL_IMPLICIT_SYS */
10379     IV i;
10380     CLONE_PARAMS clone_params;
10381     CLONE_PARAMS* param = &clone_params;
10382     PerlInterpreter *my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
10383     /* for each stash, determine whether its objects should be cloned */
10384     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
10385     PERL_SET_THX(my_perl);
10386
10387 #    ifdef DEBUGGING
10388     Poison(my_perl, 1, PerlInterpreter);
10389     PL_op = Nullop;
10390     PL_curcop = (COP *)Nullop;
10391     PL_markstack = 0;
10392     PL_scopestack = 0;
10393     PL_savestack = 0;
10394     PL_savestack_ix = 0;
10395     PL_savestack_max = -1;
10396     PL_sig_pending = 0;
10397     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
10398 #    else       /* !DEBUGGING */
10399     Zero(my_perl, 1, PerlInterpreter);
10400 #    endif      /* DEBUGGING */
10401 #endif          /* PERL_IMPLICIT_SYS */
10402     param->flags = flags;
10403     param->proto_perl = proto_perl;
10404
10405     INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
10406
10407     PL_body_arenas = NULL;
10408     Zero(&PL_body_roots, 1, PL_body_roots);
10409     
10410     PL_nice_chunk       = NULL;
10411     PL_nice_chunk_size  = 0;
10412     PL_sv_count         = 0;
10413     PL_sv_objcount      = 0;
10414     PL_sv_root          = NULL;
10415     PL_sv_arenaroot     = NULL;
10416
10417     PL_debug            = proto_perl->Idebug;
10418
10419     PL_hash_seed        = proto_perl->Ihash_seed;
10420     PL_rehash_seed      = proto_perl->Irehash_seed;
10421
10422 #ifdef USE_REENTRANT_API
10423     /* XXX: things like -Dm will segfault here in perlio, but doing
10424      *  PERL_SET_CONTEXT(proto_perl);
10425      * breaks too many other things
10426      */
10427     Perl_reentrant_init(aTHX);
10428 #endif
10429
10430     /* create SV map for pointer relocation */
10431     PL_ptr_table = ptr_table_new();
10432
10433     /* initialize these special pointers as early as possible */
10434     SvANY(&PL_sv_undef)         = NULL;
10435     SvREFCNT(&PL_sv_undef)      = (~(U32)0)/2;
10436     SvFLAGS(&PL_sv_undef)       = SVf_READONLY|SVt_NULL;
10437     ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
10438
10439     SvANY(&PL_sv_no)            = new_XPVNV();
10440     SvREFCNT(&PL_sv_no)         = (~(U32)0)/2;
10441     SvFLAGS(&PL_sv_no)          = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
10442                                   |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
10443     SvPV_set(&PL_sv_no, SAVEPVN(PL_No, 0));
10444     SvCUR_set(&PL_sv_no, 0);
10445     SvLEN_set(&PL_sv_no, 1);
10446     SvIV_set(&PL_sv_no, 0);
10447     SvNV_set(&PL_sv_no, 0);
10448     ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
10449
10450     SvANY(&PL_sv_yes)           = new_XPVNV();
10451     SvREFCNT(&PL_sv_yes)        = (~(U32)0)/2;
10452     SvFLAGS(&PL_sv_yes)         = SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
10453                                   |SVp_POK|SVf_POK|SVf_READONLY|SVt_PVNV;
10454     SvPV_set(&PL_sv_yes, SAVEPVN(PL_Yes, 1));
10455     SvCUR_set(&PL_sv_yes, 1);
10456     SvLEN_set(&PL_sv_yes, 2);
10457     SvIV_set(&PL_sv_yes, 1);
10458     SvNV_set(&PL_sv_yes, 1);
10459     ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
10460
10461     /* create (a non-shared!) shared string table */
10462     PL_strtab           = newHV();
10463     HvSHAREKEYS_off(PL_strtab);
10464     hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
10465     ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
10466
10467     PL_compiling = proto_perl->Icompiling;
10468
10469     /* These two PVs will be free'd special way so must set them same way op.c does */
10470     PL_compiling.cop_stashpv = savesharedpv(PL_compiling.cop_stashpv);
10471     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_stashpv, PL_compiling.cop_stashpv);
10472
10473     PL_compiling.cop_file    = savesharedpv(PL_compiling.cop_file);
10474     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
10475
10476     ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
10477     if (!specialWARN(PL_compiling.cop_warnings))
10478         PL_compiling.cop_warnings = sv_dup_inc(PL_compiling.cop_warnings, param);
10479     if (!specialCopIO(PL_compiling.cop_io))
10480         PL_compiling.cop_io = sv_dup_inc(PL_compiling.cop_io, param);
10481     PL_curcop           = (COP*)any_dup(proto_perl->Tcurcop, proto_perl);
10482
10483     /* pseudo environmental stuff */
10484     PL_origargc         = proto_perl->Iorigargc;
10485     PL_origargv         = proto_perl->Iorigargv;
10486
10487     param->stashes      = newAV();  /* Setup array of objects to call clone on */
10488
10489     /* Set tainting stuff before PerlIO_debug can possibly get called */
10490     PL_tainting         = proto_perl->Itainting;
10491     PL_taint_warn       = proto_perl->Itaint_warn;
10492
10493 #ifdef PERLIO_LAYERS
10494     /* Clone PerlIO tables as soon as we can handle general xx_dup() */
10495     PerlIO_clone(aTHX_ proto_perl, param);
10496 #endif
10497
10498     PL_envgv            = gv_dup(proto_perl->Ienvgv, param);
10499     PL_incgv            = gv_dup(proto_perl->Iincgv, param);
10500     PL_hintgv           = gv_dup(proto_perl->Ihintgv, param);
10501     PL_origfilename     = SAVEPV(proto_perl->Iorigfilename);
10502     PL_diehook          = sv_dup_inc(proto_perl->Idiehook, param);
10503     PL_warnhook         = sv_dup_inc(proto_perl->Iwarnhook, param);
10504
10505     /* switches */
10506     PL_minus_c          = proto_perl->Iminus_c;
10507     PL_patchlevel       = sv_dup_inc(proto_perl->Ipatchlevel, param);
10508     PL_localpatches     = proto_perl->Ilocalpatches;
10509     PL_splitstr         = proto_perl->Isplitstr;
10510     PL_preprocess       = proto_perl->Ipreprocess;
10511     PL_minus_n          = proto_perl->Iminus_n;
10512     PL_minus_p          = proto_perl->Iminus_p;
10513     PL_minus_l          = proto_perl->Iminus_l;
10514     PL_minus_a          = proto_perl->Iminus_a;
10515     PL_minus_E          = proto_perl->Iminus_E;
10516     PL_minus_F          = proto_perl->Iminus_F;
10517     PL_doswitches       = proto_perl->Idoswitches;
10518     PL_dowarn           = proto_perl->Idowarn;
10519     PL_doextract        = proto_perl->Idoextract;
10520     PL_sawampersand     = proto_perl->Isawampersand;
10521     PL_unsafe           = proto_perl->Iunsafe;
10522     PL_inplace          = SAVEPV(proto_perl->Iinplace);
10523     PL_e_script         = sv_dup_inc(proto_perl->Ie_script, param);
10524     PL_perldb           = proto_perl->Iperldb;
10525     PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
10526     PL_exit_flags       = proto_perl->Iexit_flags;
10527
10528     /* magical thingies */
10529     /* XXX time(&PL_basetime) when asked for? */
10530     PL_basetime         = proto_perl->Ibasetime;
10531     PL_formfeed         = sv_dup(proto_perl->Iformfeed, param);
10532
10533     PL_maxsysfd         = proto_perl->Imaxsysfd;
10534     PL_multiline        = proto_perl->Imultiline;
10535     PL_statusvalue      = proto_perl->Istatusvalue;
10536 #ifdef VMS
10537     PL_statusvalue_vms  = proto_perl->Istatusvalue_vms;
10538 #else
10539     PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
10540 #endif
10541     PL_encoding         = sv_dup(proto_perl->Iencoding, param);
10542
10543     sv_setpvn(PERL_DEBUG_PAD(0), "", 0);        /* For regex debugging. */
10544     sv_setpvn(PERL_DEBUG_PAD(1), "", 0);        /* ext/re needs these */
10545     sv_setpvn(PERL_DEBUG_PAD(2), "", 0);        /* even without DEBUGGING. */
10546
10547     /* Clone the regex array */
10548     PL_regex_padav = newAV();
10549     {
10550         const I32 len = av_len((AV*)proto_perl->Iregex_padav);
10551         SV* const * const regexen = AvARRAY((AV*)proto_perl->Iregex_padav);
10552         IV i;
10553         av_push(PL_regex_padav,
10554                 sv_dup_inc(regexen[0],param));
10555         for(i = 1; i <= len; i++) {
10556             const SV * const regex = regexen[i];
10557             SV * const sv =
10558                 SvREPADTMP(regex)
10559                     ? sv_dup_inc(regex, param)
10560                     : SvREFCNT_inc(
10561                         newSViv(PTR2IV(re_dup(
10562                                 INT2PTR(REGEXP *, SvIVX(regex)), param))))
10563                 ;
10564             av_push(PL_regex_padav, sv);
10565         }
10566     }
10567     PL_regex_pad = AvARRAY(PL_regex_padav);
10568
10569     /* shortcuts to various I/O objects */
10570     PL_stdingv          = gv_dup(proto_perl->Istdingv, param);
10571     PL_stderrgv         = gv_dup(proto_perl->Istderrgv, param);
10572     PL_defgv            = gv_dup(proto_perl->Idefgv, param);
10573     PL_argvgv           = gv_dup(proto_perl->Iargvgv, param);
10574     PL_argvoutgv        = gv_dup(proto_perl->Iargvoutgv, param);
10575     PL_argvout_stack    = av_dup_inc(proto_perl->Iargvout_stack, param);
10576
10577     /* shortcuts to regexp stuff */
10578     PL_replgv           = gv_dup(proto_perl->Ireplgv, param);
10579
10580     /* shortcuts to misc objects */
10581     PL_errgv            = gv_dup(proto_perl->Ierrgv, param);
10582
10583     /* shortcuts to debugging objects */
10584     PL_DBgv             = gv_dup(proto_perl->IDBgv, param);
10585     PL_DBline           = gv_dup(proto_perl->IDBline, param);
10586     PL_DBsub            = gv_dup(proto_perl->IDBsub, param);
10587     PL_DBsingle         = sv_dup(proto_perl->IDBsingle, param);
10588     PL_DBtrace          = sv_dup(proto_perl->IDBtrace, param);
10589     PL_DBsignal         = sv_dup(proto_perl->IDBsignal, param);
10590     PL_DBassertion      = sv_dup(proto_perl->IDBassertion, param);
10591     PL_lineary          = av_dup(proto_perl->Ilineary, param);
10592     PL_dbargs           = av_dup(proto_perl->Idbargs, param);
10593
10594     /* symbol tables */
10595     PL_defstash         = hv_dup_inc(proto_perl->Tdefstash, param);
10596     PL_curstash         = hv_dup(proto_perl->Tcurstash, param);
10597     PL_debstash         = hv_dup(proto_perl->Idebstash, param);
10598     PL_globalstash      = hv_dup(proto_perl->Iglobalstash, param);
10599     PL_curstname        = sv_dup_inc(proto_perl->Icurstname, param);
10600
10601     PL_beginav          = av_dup_inc(proto_perl->Ibeginav, param);
10602     PL_beginav_save     = av_dup_inc(proto_perl->Ibeginav_save, param);
10603     PL_checkav_save     = av_dup_inc(proto_perl->Icheckav_save, param);
10604     PL_endav            = av_dup_inc(proto_perl->Iendav, param);
10605     PL_checkav          = av_dup_inc(proto_perl->Icheckav, param);
10606     PL_initav           = av_dup_inc(proto_perl->Iinitav, param);
10607
10608     PL_sub_generation   = proto_perl->Isub_generation;
10609
10610     /* funky return mechanisms */
10611     PL_forkprocess      = proto_perl->Iforkprocess;
10612
10613     /* subprocess state */
10614     PL_fdpid            = av_dup_inc(proto_perl->Ifdpid, param);
10615
10616     /* internal state */
10617     PL_maxo             = proto_perl->Imaxo;
10618     if (proto_perl->Iop_mask)
10619         PL_op_mask      = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
10620     else
10621         PL_op_mask      = NULL;
10622     /* PL_asserting        = proto_perl->Iasserting; */
10623
10624     /* current interpreter roots */
10625     PL_main_cv          = cv_dup_inc(proto_perl->Imain_cv, param);
10626     PL_main_root        = OpREFCNT_inc(proto_perl->Imain_root);
10627     PL_main_start       = proto_perl->Imain_start;
10628     PL_eval_root        = proto_perl->Ieval_root;
10629     PL_eval_start       = proto_perl->Ieval_start;
10630
10631     /* runtime control stuff */
10632     PL_curcopdb         = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
10633     PL_copline          = proto_perl->Icopline;
10634
10635     PL_filemode         = proto_perl->Ifilemode;
10636     PL_lastfd           = proto_perl->Ilastfd;
10637     PL_oldname          = proto_perl->Ioldname;         /* XXX not quite right */
10638     PL_Argv             = NULL;
10639     PL_Cmd              = NULL;
10640     PL_gensym           = proto_perl->Igensym;
10641     PL_preambled        = proto_perl->Ipreambled;
10642     PL_preambleav       = av_dup_inc(proto_perl->Ipreambleav, param);
10643     PL_laststatval      = proto_perl->Ilaststatval;
10644     PL_laststype        = proto_perl->Ilaststype;
10645     PL_mess_sv          = NULL;
10646
10647     PL_ors_sv           = sv_dup_inc(proto_perl->Iors_sv, param);
10648
10649     /* interpreter atexit processing */
10650     PL_exitlistlen      = proto_perl->Iexitlistlen;
10651     if (PL_exitlistlen) {
10652         Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
10653         Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
10654     }
10655     else
10656         PL_exitlist     = (PerlExitListEntry*)NULL;
10657
10658     PL_my_cxt_size = proto_perl->Imy_cxt_size;
10659     if (PL_my_cxt_size) {
10660         Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
10661         Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
10662     }
10663     else
10664         PL_my_cxt_list  = (void**)NULL;
10665     PL_modglobal        = hv_dup_inc(proto_perl->Imodglobal, param);
10666     PL_custom_op_names  = hv_dup_inc(proto_perl->Icustom_op_names,param);
10667     PL_custom_op_descs  = hv_dup_inc(proto_perl->Icustom_op_descs,param);
10668
10669     PL_profiledata      = NULL;
10670     PL_rsfp             = fp_dup(proto_perl->Irsfp, '<', param);
10671     /* PL_rsfp_filters entries have fake IoDIRP() */
10672     PL_rsfp_filters     = av_dup_inc(proto_perl->Irsfp_filters, param);
10673
10674     PL_compcv                   = cv_dup(proto_perl->Icompcv, param);
10675
10676     PAD_CLONE_VARS(proto_perl, param);
10677
10678 #ifdef HAVE_INTERP_INTERN
10679     sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
10680 #endif
10681
10682     /* more statics moved here */
10683     PL_generation       = proto_perl->Igeneration;
10684     PL_DBcv             = cv_dup(proto_perl->IDBcv, param);
10685
10686     PL_in_clean_objs    = proto_perl->Iin_clean_objs;
10687     PL_in_clean_all     = proto_perl->Iin_clean_all;
10688
10689     PL_uid              = proto_perl->Iuid;
10690     PL_euid             = proto_perl->Ieuid;
10691     PL_gid              = proto_perl->Igid;
10692     PL_egid             = proto_perl->Iegid;
10693     PL_nomemok          = proto_perl->Inomemok;
10694     PL_an               = proto_perl->Ian;
10695     PL_evalseq          = proto_perl->Ievalseq;
10696     PL_origenviron      = proto_perl->Iorigenviron;     /* XXX not quite right */
10697     PL_origalen         = proto_perl->Iorigalen;
10698 #ifdef PERL_USES_PL_PIDSTATUS
10699     PL_pidstatus        = newHV();                      /* XXX flag for cloning? */
10700 #endif
10701     PL_osname           = SAVEPV(proto_perl->Iosname);
10702     PL_sighandlerp      = proto_perl->Isighandlerp;
10703
10704     PL_runops           = proto_perl->Irunops;
10705
10706     Copy(proto_perl->Itokenbuf, PL_tokenbuf, 256, char);
10707
10708 #ifdef CSH
10709     PL_cshlen           = proto_perl->Icshlen;
10710     PL_cshname          = proto_perl->Icshname; /* XXX never deallocated */
10711 #endif
10712
10713     PL_lex_state        = proto_perl->Ilex_state;
10714     PL_lex_defer        = proto_perl->Ilex_defer;
10715     PL_lex_expect       = proto_perl->Ilex_expect;
10716     PL_lex_formbrack    = proto_perl->Ilex_formbrack;
10717     PL_lex_dojoin       = proto_perl->Ilex_dojoin;
10718     PL_lex_starts       = proto_perl->Ilex_starts;
10719     PL_lex_stuff        = sv_dup_inc(proto_perl->Ilex_stuff, param);
10720     PL_lex_repl         = sv_dup_inc(proto_perl->Ilex_repl, param);
10721     PL_lex_op           = proto_perl->Ilex_op;
10722     PL_lex_inpat        = proto_perl->Ilex_inpat;
10723     PL_lex_inwhat       = proto_perl->Ilex_inwhat;
10724     PL_lex_brackets     = proto_perl->Ilex_brackets;
10725     i = (PL_lex_brackets < 120 ? 120 : PL_lex_brackets);
10726     PL_lex_brackstack   = SAVEPVN(proto_perl->Ilex_brackstack,i);
10727     PL_lex_casemods     = proto_perl->Ilex_casemods;
10728     i = (PL_lex_casemods < 12 ? 12 : PL_lex_casemods);
10729     PL_lex_casestack    = SAVEPVN(proto_perl->Ilex_casestack,i);
10730
10731     Copy(proto_perl->Inextval, PL_nextval, 5, YYSTYPE);
10732     Copy(proto_perl->Inexttype, PL_nexttype, 5, I32);
10733     PL_nexttoke         = proto_perl->Inexttoke;
10734
10735     /* XXX This is probably masking the deeper issue of why
10736      * SvANY(proto_perl->Ilinestr) can be NULL at this point. For test case:
10737      * http://archive.develooper.com/perl5-porters%40perl.org/msg83298.html
10738      * (A little debugging with a watchpoint on it may help.)
10739      */
10740     if (SvANY(proto_perl->Ilinestr)) {
10741         PL_linestr              = sv_dup_inc(proto_perl->Ilinestr, param);
10742         i = proto_perl->Ibufptr - SvPVX_const(proto_perl->Ilinestr);
10743         PL_bufptr               = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
10744         i = proto_perl->Ioldbufptr - SvPVX_const(proto_perl->Ilinestr);
10745         PL_oldbufptr    = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
10746         i = proto_perl->Ioldoldbufptr - SvPVX_const(proto_perl->Ilinestr);
10747         PL_oldoldbufptr = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
10748         i = proto_perl->Ilinestart - SvPVX_const(proto_perl->Ilinestr);
10749         PL_linestart    = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
10750     }
10751     else {
10752         PL_linestr = newSV(79);
10753         sv_upgrade(PL_linestr,SVt_PVIV);
10754         sv_setpvn(PL_linestr,"",0);
10755         PL_bufptr = PL_oldbufptr = PL_oldoldbufptr = PL_linestart = SvPVX(PL_linestr);
10756     }
10757     PL_bufend           = SvPVX(PL_linestr) + SvCUR(PL_linestr);
10758     PL_pending_ident    = proto_perl->Ipending_ident;
10759     PL_sublex_info      = proto_perl->Isublex_info;     /* XXX not quite right */
10760
10761     PL_expect           = proto_perl->Iexpect;
10762
10763     PL_multi_start      = proto_perl->Imulti_start;
10764     PL_multi_end        = proto_perl->Imulti_end;
10765     PL_multi_open       = proto_perl->Imulti_open;
10766     PL_multi_close      = proto_perl->Imulti_close;
10767
10768     PL_error_count      = proto_perl->Ierror_count;
10769     PL_subline          = proto_perl->Isubline;
10770     PL_subname          = sv_dup_inc(proto_perl->Isubname, param);
10771
10772     /* XXX See comment on SvANY(proto_perl->Ilinestr) above */
10773     if (SvANY(proto_perl->Ilinestr)) {
10774         i = proto_perl->Ilast_uni - SvPVX_const(proto_perl->Ilinestr);
10775         PL_last_uni             = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
10776         i = proto_perl->Ilast_lop - SvPVX_const(proto_perl->Ilinestr);
10777         PL_last_lop             = SvPVX(PL_linestr) + (i < 0 ? 0 : i);
10778         PL_last_lop_op  = proto_perl->Ilast_lop_op;
10779     }
10780     else {
10781         PL_last_uni     = SvPVX(PL_linestr);
10782         PL_last_lop     = SvPVX(PL_linestr);
10783         PL_last_lop_op  = 0;
10784     }
10785     PL_in_my            = proto_perl->Iin_my;
10786     PL_in_my_stash      = hv_dup(proto_perl->Iin_my_stash, param);
10787 #ifdef FCRYPT
10788     PL_cryptseen        = proto_perl->Icryptseen;
10789 #endif
10790
10791     PL_hints            = proto_perl->Ihints;
10792
10793     PL_amagic_generation        = proto_perl->Iamagic_generation;
10794
10795 #ifdef USE_LOCALE_COLLATE
10796     PL_collation_ix     = proto_perl->Icollation_ix;
10797     PL_collation_name   = SAVEPV(proto_perl->Icollation_name);
10798     PL_collation_standard       = proto_perl->Icollation_standard;
10799     PL_collxfrm_base    = proto_perl->Icollxfrm_base;
10800     PL_collxfrm_mult    = proto_perl->Icollxfrm_mult;
10801 #endif /* USE_LOCALE_COLLATE */
10802
10803 #ifdef USE_LOCALE_NUMERIC
10804     PL_numeric_name     = SAVEPV(proto_perl->Inumeric_name);
10805     PL_numeric_standard = proto_perl->Inumeric_standard;
10806     PL_numeric_local    = proto_perl->Inumeric_local;
10807     PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
10808 #endif /* !USE_LOCALE_NUMERIC */
10809
10810     /* utf8 character classes */
10811     PL_utf8_alnum       = sv_dup_inc(proto_perl->Iutf8_alnum, param);
10812     PL_utf8_alnumc      = sv_dup_inc(proto_perl->Iutf8_alnumc, param);
10813     PL_utf8_ascii       = sv_dup_inc(proto_perl->Iutf8_ascii, param);
10814     PL_utf8_alpha       = sv_dup_inc(proto_perl->Iutf8_alpha, param);
10815     PL_utf8_space       = sv_dup_inc(proto_perl->Iutf8_space, param);
10816     PL_utf8_cntrl       = sv_dup_inc(proto_perl->Iutf8_cntrl, param);
10817     PL_utf8_graph       = sv_dup_inc(proto_perl->Iutf8_graph, param);
10818     PL_utf8_digit       = sv_dup_inc(proto_perl->Iutf8_digit, param);
10819     PL_utf8_upper       = sv_dup_inc(proto_perl->Iutf8_upper, param);
10820     PL_utf8_lower       = sv_dup_inc(proto_perl->Iutf8_lower, param);
10821     PL_utf8_print       = sv_dup_inc(proto_perl->Iutf8_print, param);
10822     PL_utf8_punct       = sv_dup_inc(proto_perl->Iutf8_punct, param);
10823     PL_utf8_xdigit      = sv_dup_inc(proto_perl->Iutf8_xdigit, param);
10824     PL_utf8_mark        = sv_dup_inc(proto_perl->Iutf8_mark, param);
10825     PL_utf8_toupper     = sv_dup_inc(proto_perl->Iutf8_toupper, param);
10826     PL_utf8_totitle     = sv_dup_inc(proto_perl->Iutf8_totitle, param);
10827     PL_utf8_tolower     = sv_dup_inc(proto_perl->Iutf8_tolower, param);
10828     PL_utf8_tofold      = sv_dup_inc(proto_perl->Iutf8_tofold, param);
10829     PL_utf8_idstart     = sv_dup_inc(proto_perl->Iutf8_idstart, param);
10830     PL_utf8_idcont      = sv_dup_inc(proto_perl->Iutf8_idcont, param);
10831
10832     /* Did the locale setup indicate UTF-8? */
10833     PL_utf8locale       = proto_perl->Iutf8locale;
10834     /* Unicode features (see perlrun/-C) */
10835     PL_unicode          = proto_perl->Iunicode;
10836
10837     /* Pre-5.8 signals control */
10838     PL_signals          = proto_perl->Isignals;
10839
10840     /* times() ticks per second */
10841     PL_clocktick        = proto_perl->Iclocktick;
10842
10843     /* Recursion stopper for PerlIO_find_layer */
10844     PL_in_load_module   = proto_perl->Iin_load_module;
10845
10846     /* sort() routine */
10847     PL_sort_RealCmp     = proto_perl->Isort_RealCmp;
10848
10849     /* Not really needed/useful since the reenrant_retint is "volatile",
10850      * but do it for consistency's sake. */
10851     PL_reentrant_retint = proto_perl->Ireentrant_retint;
10852
10853     /* Hooks to shared SVs and locks. */
10854     PL_sharehook        = proto_perl->Isharehook;
10855     PL_lockhook         = proto_perl->Ilockhook;
10856     PL_unlockhook       = proto_perl->Iunlockhook;
10857     PL_threadhook       = proto_perl->Ithreadhook;
10858
10859     PL_runops_std       = proto_perl->Irunops_std;
10860     PL_runops_dbg       = proto_perl->Irunops_dbg;
10861
10862 #ifdef THREADS_HAVE_PIDS
10863     PL_ppid             = proto_perl->Ippid;
10864 #endif
10865
10866     /* swatch cache */
10867     PL_last_swash_hv    = NULL; /* reinits on demand */
10868     PL_last_swash_klen  = 0;
10869     PL_last_swash_key[0]= '\0';
10870     PL_last_swash_tmps  = (U8*)NULL;
10871     PL_last_swash_slen  = 0;
10872
10873     PL_glob_index       = proto_perl->Iglob_index;
10874     PL_srand_called     = proto_perl->Isrand_called;
10875     PL_uudmap['M']      = 0;            /* reinits on demand */
10876     PL_bitcount         = NULL; /* reinits on demand */
10877
10878     if (proto_perl->Ipsig_pend) {
10879         Newxz(PL_psig_pend, SIG_SIZE, int);
10880     }
10881     else {
10882         PL_psig_pend    = (int*)NULL;
10883     }
10884
10885     if (proto_perl->Ipsig_ptr) {
10886         Newxz(PL_psig_ptr,  SIG_SIZE, SV*);
10887         Newxz(PL_psig_name, SIG_SIZE, SV*);
10888         for (i = 1; i < SIG_SIZE; i++) {
10889             PL_psig_ptr[i]  = sv_dup_inc(proto_perl->Ipsig_ptr[i], param);
10890             PL_psig_name[i] = sv_dup_inc(proto_perl->Ipsig_name[i], param);
10891         }
10892     }
10893     else {
10894         PL_psig_ptr     = (SV**)NULL;
10895         PL_psig_name    = (SV**)NULL;
10896     }
10897
10898     /* thrdvar.h stuff */
10899
10900     if (flags & CLONEf_COPY_STACKS) {
10901         /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
10902         PL_tmps_ix              = proto_perl->Ttmps_ix;
10903         PL_tmps_max             = proto_perl->Ttmps_max;
10904         PL_tmps_floor           = proto_perl->Ttmps_floor;
10905         Newxz(PL_tmps_stack, PL_tmps_max, SV*);
10906         i = 0;
10907         while (i <= PL_tmps_ix) {
10908             PL_tmps_stack[i]    = sv_dup_inc(proto_perl->Ttmps_stack[i], param);
10909             ++i;
10910         }
10911
10912         /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
10913         i = proto_perl->Tmarkstack_max - proto_perl->Tmarkstack;
10914         Newxz(PL_markstack, i, I32);
10915         PL_markstack_max        = PL_markstack + (proto_perl->Tmarkstack_max
10916                                                   - proto_perl->Tmarkstack);
10917         PL_markstack_ptr        = PL_markstack + (proto_perl->Tmarkstack_ptr
10918                                                   - proto_perl->Tmarkstack);
10919         Copy(proto_perl->Tmarkstack, PL_markstack,
10920              PL_markstack_ptr - PL_markstack + 1, I32);
10921
10922         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
10923          * NOTE: unlike the others! */
10924         PL_scopestack_ix        = proto_perl->Tscopestack_ix;
10925         PL_scopestack_max       = proto_perl->Tscopestack_max;
10926         Newxz(PL_scopestack, PL_scopestack_max, I32);
10927         Copy(proto_perl->Tscopestack, PL_scopestack, PL_scopestack_ix, I32);
10928
10929         /* NOTE: si_dup() looks at PL_markstack */
10930         PL_curstackinfo         = si_dup(proto_perl->Tcurstackinfo, param);
10931
10932         /* PL_curstack          = PL_curstackinfo->si_stack; */
10933         PL_curstack             = av_dup(proto_perl->Tcurstack, param);
10934         PL_mainstack            = av_dup(proto_perl->Tmainstack, param);
10935
10936         /* next PUSHs() etc. set *(PL_stack_sp+1) */
10937         PL_stack_base           = AvARRAY(PL_curstack);
10938         PL_stack_sp             = PL_stack_base + (proto_perl->Tstack_sp
10939                                                    - proto_perl->Tstack_base);
10940         PL_stack_max            = PL_stack_base + AvMAX(PL_curstack);
10941
10942         /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
10943          * NOTE: unlike the others! */
10944         PL_savestack_ix         = proto_perl->Tsavestack_ix;
10945         PL_savestack_max        = proto_perl->Tsavestack_max;
10946         /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
10947         PL_savestack            = ss_dup(proto_perl, param);
10948     }
10949     else {
10950         init_stacks();
10951         ENTER;                  /* perl_destruct() wants to LEAVE; */
10952
10953         /* although we're not duplicating the tmps stack, we should still
10954          * add entries for any SVs on the tmps stack that got cloned by a
10955          * non-refcount means (eg a temp in @_); otherwise they will be
10956          * orphaned
10957          */
10958         for (i = 0; i<= proto_perl->Ttmps_ix; i++) {
10959             SV * const nsv = (SV*)ptr_table_fetch(PL_ptr_table,
10960                     proto_perl->Ttmps_stack[i]);
10961             if (nsv && !SvREFCNT(nsv)) {
10962                 EXTEND_MORTAL(1);
10963                 PL_tmps_stack[++PL_tmps_ix] = SvREFCNT_inc(nsv);
10964             }
10965         }
10966     }
10967
10968     PL_start_env        = proto_perl->Tstart_env;       /* XXXXXX */
10969     PL_top_env          = &PL_start_env;
10970
10971     PL_op               = proto_perl->Top;
10972
10973     PL_Sv               = NULL;
10974     PL_Xpv              = (XPV*)NULL;
10975     PL_na               = proto_perl->Tna;
10976
10977     PL_statbuf          = proto_perl->Tstatbuf;
10978     PL_statcache        = proto_perl->Tstatcache;
10979     PL_statgv           = gv_dup(proto_perl->Tstatgv, param);
10980     PL_statname         = sv_dup_inc(proto_perl->Tstatname, param);
10981 #ifdef HAS_TIMES
10982     PL_timesbuf         = proto_perl->Ttimesbuf;
10983 #endif
10984
10985     PL_tainted          = proto_perl->Ttainted;
10986     PL_curpm            = proto_perl->Tcurpm;   /* XXX No PMOP ref count */
10987     PL_rs               = sv_dup_inc(proto_perl->Trs, param);
10988     PL_last_in_gv       = gv_dup(proto_perl->Tlast_in_gv, param);
10989     PL_ofs_sv           = sv_dup_inc(proto_perl->Tofs_sv, param);
10990     PL_defoutgv         = gv_dup_inc(proto_perl->Tdefoutgv, param);
10991     PL_chopset          = proto_perl->Tchopset; /* XXX never deallocated */
10992     PL_toptarget        = sv_dup_inc(proto_perl->Ttoptarget, param);
10993     PL_bodytarget       = sv_dup_inc(proto_perl->Tbodytarget, param);
10994     PL_formtarget       = sv_dup(proto_perl->Tformtarget, param);
10995
10996     PL_restartop        = proto_perl->Trestartop;
10997     PL_in_eval          = proto_perl->Tin_eval;
10998     PL_delaymagic       = proto_perl->Tdelaymagic;
10999     PL_dirty            = proto_perl->Tdirty;
11000     PL_localizing       = proto_perl->Tlocalizing;
11001
11002     PL_errors           = sv_dup_inc(proto_perl->Terrors, param);
11003     PL_hv_fetch_ent_mh  = Nullhe;
11004     PL_modcount         = proto_perl->Tmodcount;
11005     PL_lastgotoprobe    = Nullop;
11006     PL_dumpindent       = proto_perl->Tdumpindent;
11007
11008     PL_sortcop          = (OP*)any_dup(proto_perl->Tsortcop, proto_perl);
11009     PL_sortstash        = hv_dup(proto_perl->Tsortstash, param);
11010     PL_firstgv          = gv_dup(proto_perl->Tfirstgv, param);
11011     PL_secondgv         = gv_dup(proto_perl->Tsecondgv, param);
11012     PL_efloatbuf        = NULL;         /* reinits on demand */
11013     PL_efloatsize       = 0;                    /* reinits on demand */
11014
11015     /* regex stuff */
11016
11017     PL_screamfirst      = NULL;
11018     PL_screamnext       = NULL;
11019     PL_maxscream        = -1;                   /* reinits on demand */
11020     PL_lastscream       = NULL;
11021
11022     PL_watchaddr        = NULL;
11023     PL_watchok          = NULL;
11024
11025     PL_regdummy         = proto_perl->Tregdummy;
11026     PL_regprecomp       = NULL;
11027     PL_regnpar          = 0;
11028     PL_regsize          = 0;
11029     PL_colorset         = 0;            /* reinits PL_colors[] */
11030     /*PL_colors[6]      = {0,0,0,0,0,0};*/
11031     PL_reginput         = NULL;
11032     PL_regbol           = NULL;
11033     PL_regeol           = NULL;
11034     PL_regstartp        = (I32*)NULL;
11035     PL_regendp          = (I32*)NULL;
11036     PL_reglastparen     = (U32*)NULL;
11037     PL_reglastcloseparen        = (U32*)NULL;
11038     PL_regtill          = NULL;
11039     PL_reg_start_tmp    = (char**)NULL;
11040     PL_reg_start_tmpl   = 0;
11041     PL_regdata          = (struct reg_data*)NULL;
11042     PL_bostr            = NULL;
11043     PL_reg_flags        = 0;
11044     PL_reg_eval_set     = 0;
11045     PL_regnarrate       = 0;
11046     PL_regprogram       = (regnode*)NULL;
11047     PL_regindent        = 0;
11048     PL_regcc            = (CURCUR*)NULL;
11049     PL_reg_call_cc      = (struct re_cc_state*)NULL;
11050     PL_reg_re           = (regexp*)NULL;
11051     PL_reg_ganch        = NULL;
11052     PL_reg_sv           = NULL;
11053     PL_reg_match_utf8   = FALSE;
11054     PL_reg_magic        = (MAGIC*)NULL;
11055     PL_reg_oldpos       = 0;
11056     PL_reg_oldcurpm     = (PMOP*)NULL;
11057     PL_reg_curpm        = (PMOP*)NULL;
11058     PL_reg_oldsaved     = NULL;
11059     PL_reg_oldsavedlen  = 0;
11060 #ifdef PERL_OLD_COPY_ON_WRITE
11061     PL_nrs              = NULL;
11062 #endif
11063     PL_reg_maxiter      = 0;
11064     PL_reg_leftiter     = 0;
11065     PL_reg_poscache     = NULL;
11066     PL_reg_poscache_size= 0;
11067
11068     /* RE engine - function pointers */
11069     PL_regcompp         = proto_perl->Tregcompp;
11070     PL_regexecp         = proto_perl->Tregexecp;
11071     PL_regint_start     = proto_perl->Tregint_start;
11072     PL_regint_string    = proto_perl->Tregint_string;
11073     PL_regfree          = proto_perl->Tregfree;
11074
11075     PL_reginterp_cnt    = 0;
11076     PL_reg_starttry     = 0;
11077
11078     /* Pluggable optimizer */
11079     PL_peepp            = proto_perl->Tpeepp;
11080
11081     PL_stashcache       = newHV();
11082
11083     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
11084         ptr_table_free(PL_ptr_table);
11085         PL_ptr_table = NULL;
11086     }
11087
11088     /* Call the ->CLONE method, if it exists, for each of the stashes
11089        identified by sv_dup() above.
11090     */
11091     while(av_len(param->stashes) != -1) {
11092         HV* const stash = (HV*) av_shift(param->stashes);
11093         GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
11094         if (cloner && GvCV(cloner)) {
11095             dSP;
11096             ENTER;
11097             SAVETMPS;
11098             PUSHMARK(SP);
11099             XPUSHs(sv_2mortal(newSVhek(HvNAME_HEK(stash))));
11100             PUTBACK;
11101             call_sv((SV*)GvCV(cloner), G_DISCARD);
11102             FREETMPS;
11103             LEAVE;
11104         }
11105     }
11106
11107     SvREFCNT_dec(param->stashes);
11108
11109     /* orphaned? eg threads->new inside BEGIN or use */
11110     if (PL_compcv && ! SvREFCNT(PL_compcv)) {
11111         (void)SvREFCNT_inc(PL_compcv);
11112         SAVEFREESV(PL_compcv);
11113     }
11114
11115     return my_perl;
11116 }
11117
11118 #endif /* USE_ITHREADS */
11119
11120 /*
11121 =head1 Unicode Support
11122
11123 =for apidoc sv_recode_to_utf8
11124
11125 The encoding is assumed to be an Encode object, on entry the PV
11126 of the sv is assumed to be octets in that encoding, and the sv
11127 will be converted into Unicode (and UTF-8).
11128
11129 If the sv already is UTF-8 (or if it is not POK), or if the encoding
11130 is not a reference, nothing is done to the sv.  If the encoding is not
11131 an C<Encode::XS> Encoding object, bad things will happen.
11132 (See F<lib/encoding.pm> and L<Encode>).
11133
11134 The PV of the sv is returned.
11135
11136 =cut */
11137
11138 char *
11139 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
11140 {
11141     dVAR;
11142     if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
11143         SV *uni;
11144         STRLEN len;
11145         const char *s;
11146         dSP;
11147         ENTER;
11148         SAVETMPS;
11149         save_re_context();
11150         PUSHMARK(sp);
11151         EXTEND(SP, 3);
11152         XPUSHs(encoding);
11153         XPUSHs(sv);
11154 /*
11155   NI-S 2002/07/09
11156   Passing sv_yes is wrong - it needs to be or'ed set of constants
11157   for Encode::XS, while UTf-8 decode (currently) assumes a true value means
11158   remove converted chars from source.
11159
11160   Both will default the value - let them.
11161
11162         XPUSHs(&PL_sv_yes);
11163 */
11164         PUTBACK;
11165         call_method("decode", G_SCALAR);
11166         SPAGAIN;
11167         uni = POPs;
11168         PUTBACK;
11169         s = SvPV_const(uni, len);
11170         if (s != SvPVX_const(sv)) {
11171             SvGROW(sv, len + 1);
11172             Move(s, SvPVX(sv), len + 1, char);
11173             SvCUR_set(sv, len);
11174         }
11175         FREETMPS;
11176         LEAVE;
11177         SvUTF8_on(sv);
11178         return SvPVX(sv);
11179     }
11180     return SvPOKp(sv) ? SvPVX(sv) : NULL;
11181 }
11182
11183 /*
11184 =for apidoc sv_cat_decode
11185
11186 The encoding is assumed to be an Encode object, the PV of the ssv is
11187 assumed to be octets in that encoding and decoding the input starts
11188 from the position which (PV + *offset) pointed to.  The dsv will be
11189 concatenated the decoded UTF-8 string from ssv.  Decoding will terminate
11190 when the string tstr appears in decoding output or the input ends on
11191 the PV of the ssv. The value which the offset points will be modified
11192 to the last input position on the ssv.
11193
11194 Returns TRUE if the terminator was found, else returns FALSE.
11195
11196 =cut */
11197
11198 bool
11199 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
11200                    SV *ssv, int *offset, char *tstr, int tlen)
11201 {
11202     dVAR;
11203     bool ret = FALSE;
11204     if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding) && offset) {
11205         SV *offsv;
11206         dSP;
11207         ENTER;
11208         SAVETMPS;
11209         save_re_context();
11210         PUSHMARK(sp);
11211         EXTEND(SP, 6);
11212         XPUSHs(encoding);
11213         XPUSHs(dsv);
11214         XPUSHs(ssv);
11215         XPUSHs(offsv = sv_2mortal(newSViv(*offset)));
11216         XPUSHs(sv_2mortal(newSVpvn(tstr, tlen)));
11217         PUTBACK;
11218         call_method("cat_decode", G_SCALAR);
11219         SPAGAIN;
11220         ret = SvTRUE(TOPs);
11221         *offset = SvIV(offsv);
11222         PUTBACK;
11223         FREETMPS;
11224         LEAVE;
11225     }
11226     else
11227         Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
11228     return ret;
11229
11230 }
11231
11232 /* ---------------------------------------------------------------------
11233  *
11234  * support functions for report_uninit()
11235  */
11236
11237 /* the maxiumum size of array or hash where we will scan looking
11238  * for the undefined element that triggered the warning */
11239
11240 #define FUV_MAX_SEARCH_SIZE 1000
11241
11242 /* Look for an entry in the hash whose value has the same SV as val;
11243  * If so, return a mortal copy of the key. */
11244
11245 STATIC SV*
11246 S_find_hash_subscript(pTHX_ HV *hv, SV* val)
11247 {
11248     dVAR;
11249     register HE **array;
11250     I32 i;
11251
11252     if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
11253                         (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
11254         return NULL;
11255
11256     array = HvARRAY(hv);
11257
11258     for (i=HvMAX(hv); i>0; i--) {
11259         register HE *entry;
11260         for (entry = array[i]; entry; entry = HeNEXT(entry)) {
11261             if (HeVAL(entry) != val)
11262                 continue;
11263             if (    HeVAL(entry) == &PL_sv_undef ||
11264                     HeVAL(entry) == &PL_sv_placeholder)
11265                 continue;
11266             if (!HeKEY(entry))
11267                 return NULL;
11268             if (HeKLEN(entry) == HEf_SVKEY)
11269                 return sv_mortalcopy(HeKEY_sv(entry));
11270             return sv_2mortal(newSVpvn(HeKEY(entry), HeKLEN(entry)));
11271         }
11272     }
11273     return NULL;
11274 }
11275
11276 /* Look for an entry in the array whose value has the same SV as val;
11277  * If so, return the index, otherwise return -1. */
11278
11279 STATIC I32
11280 S_find_array_subscript(pTHX_ AV *av, SV* val)
11281 {
11282     dVAR;
11283     SV** svp;
11284     I32 i;
11285     if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
11286                         (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
11287         return -1;
11288
11289     svp = AvARRAY(av);
11290     for (i=AvFILLp(av); i>=0; i--) {
11291         if (svp[i] == val && svp[i] != &PL_sv_undef)
11292             return i;
11293     }
11294     return -1;
11295 }
11296
11297 /* S_varname(): return the name of a variable, optionally with a subscript.
11298  * If gv is non-zero, use the name of that global, along with gvtype (one
11299  * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
11300  * targ.  Depending on the value of the subscript_type flag, return:
11301  */
11302
11303 #define FUV_SUBSCRIPT_NONE      1       /* "@foo"          */
11304 #define FUV_SUBSCRIPT_ARRAY     2       /* "$foo[aindex]"  */
11305 #define FUV_SUBSCRIPT_HASH      3       /* "$foo{keyname}" */
11306 #define FUV_SUBSCRIPT_WITHIN    4       /* "within @foo"   */
11307
11308 STATIC SV*
11309 S_varname(pTHX_ GV *gv, const char gvtype, PADOFFSET targ,
11310         SV* keyname, I32 aindex, int subscript_type)
11311 {
11312
11313     SV * const name = sv_newmortal();
11314     if (gv) {
11315         char buffer[2];
11316         buffer[0] = gvtype;
11317         buffer[1] = 0;
11318
11319         /* as gv_fullname4(), but add literal '^' for $^FOO names  */
11320
11321         gv_fullname4(name, gv, buffer, 0);
11322
11323         if ((unsigned int)SvPVX(name)[1] <= 26) {
11324             buffer[0] = '^';
11325             buffer[1] = SvPVX(name)[1] + 'A' - 1;
11326
11327             /* Swap the 1 unprintable control character for the 2 byte pretty
11328                version - ie substr($name, 1, 1) = $buffer; */
11329             sv_insert(name, 1, 1, buffer, 2);
11330         }
11331     }
11332     else {
11333         U32 unused;
11334         CV * const cv = find_runcv(&unused);
11335         SV *sv;
11336         AV *av;
11337
11338         if (!cv || !CvPADLIST(cv))
11339             return NULL;
11340         av = (AV*)(*av_fetch(CvPADLIST(cv), 0, FALSE));
11341         sv = *av_fetch(av, targ, FALSE);
11342         /* SvLEN in a pad name is not to be trusted */
11343         sv_setpv(name, SvPV_nolen_const(sv));
11344     }
11345
11346     if (subscript_type == FUV_SUBSCRIPT_HASH) {
11347         SV * const sv = newSV(0);
11348         *SvPVX(name) = '$';
11349         Perl_sv_catpvf(aTHX_ name, "{%s}",
11350             pv_display(sv,SvPVX_const(keyname), SvCUR(keyname), 0, 32));
11351         SvREFCNT_dec(sv);
11352     }
11353     else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
11354         *SvPVX(name) = '$';
11355         Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
11356     }
11357     else if (subscript_type == FUV_SUBSCRIPT_WITHIN)
11358         Perl_sv_insert(aTHX_ name, 0, 0,  STR_WITH_LEN("within "));
11359
11360     return name;
11361 }
11362
11363
11364 /*
11365 =for apidoc find_uninit_var
11366
11367 Find the name of the undefined variable (if any) that caused the operator o
11368 to issue a "Use of uninitialized value" warning.
11369 If match is true, only return a name if it's value matches uninit_sv.
11370 So roughly speaking, if a unary operator (such as OP_COS) generates a
11371 warning, then following the direct child of the op may yield an
11372 OP_PADSV or OP_GV that gives the name of the undefined variable. On the
11373 other hand, with OP_ADD there are two branches to follow, so we only print
11374 the variable name if we get an exact match.
11375
11376 The name is returned as a mortal SV.
11377
11378 Assumes that PL_op is the op that originally triggered the error, and that
11379 PL_comppad/PL_curpad points to the currently executing pad.
11380
11381 =cut
11382 */
11383
11384 STATIC SV *
11385 S_find_uninit_var(pTHX_ OP* obase, SV* uninit_sv, bool match)
11386 {
11387     dVAR;
11388     SV *sv;
11389     AV *av;
11390     GV *gv;
11391     OP *o, *o2, *kid;
11392
11393     if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
11394                             uninit_sv == &PL_sv_placeholder)))
11395         return NULL;
11396
11397     switch (obase->op_type) {
11398
11399     case OP_RV2AV:
11400     case OP_RV2HV:
11401     case OP_PADAV:
11402     case OP_PADHV:
11403       {
11404         const bool pad  = (obase->op_type == OP_PADAV || obase->op_type == OP_PADHV);
11405         const bool hash = (obase->op_type == OP_PADHV || obase->op_type == OP_RV2HV);
11406         I32 index = 0;
11407         SV *keysv = NULL;
11408         int subscript_type = FUV_SUBSCRIPT_WITHIN;
11409
11410         if (pad) { /* @lex, %lex */
11411             sv = PAD_SVl(obase->op_targ);
11412             gv = NULL;
11413         }
11414         else {
11415             if (cUNOPx(obase)->op_first->op_type == OP_GV) {
11416             /* @global, %global */
11417                 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
11418                 if (!gv)
11419                     break;
11420                 sv = hash ? (SV*)GvHV(gv): (SV*)GvAV(gv);
11421             }
11422             else /* @{expr}, %{expr} */
11423                 return find_uninit_var(cUNOPx(obase)->op_first,
11424                                                     uninit_sv, match);
11425         }
11426
11427         /* attempt to find a match within the aggregate */
11428         if (hash) {
11429             keysv = S_find_hash_subscript(aTHX_ (HV*)sv, uninit_sv);
11430             if (keysv)
11431                 subscript_type = FUV_SUBSCRIPT_HASH;
11432         }
11433         else {
11434             index = S_find_array_subscript(aTHX_ (AV*)sv, uninit_sv);
11435             if (index >= 0)
11436                 subscript_type = FUV_SUBSCRIPT_ARRAY;
11437         }
11438
11439         if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
11440             break;
11441
11442         return varname(gv, hash ? '%' : '@', obase->op_targ,
11443                                     keysv, index, subscript_type);
11444       }
11445
11446     case OP_PADSV:
11447         if (match && PAD_SVl(obase->op_targ) != uninit_sv)
11448             break;
11449         return varname(NULL, '$', obase->op_targ,
11450                                     NULL, 0, FUV_SUBSCRIPT_NONE);
11451
11452     case OP_GVSV:
11453         gv = cGVOPx_gv(obase);
11454         if (!gv || (match && GvSV(gv) != uninit_sv))
11455             break;
11456         return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
11457
11458     case OP_AELEMFAST:
11459         if (obase->op_flags & OPf_SPECIAL) { /* lexical array */
11460             if (match) {
11461                 SV **svp;
11462                 av = (AV*)PAD_SV(obase->op_targ);
11463                 if (!av || SvRMAGICAL(av))
11464                     break;
11465                 svp = av_fetch(av, (I32)obase->op_private, FALSE);
11466                 if (!svp || *svp != uninit_sv)
11467                     break;
11468             }
11469             return varname(NULL, '$', obase->op_targ,
11470                     NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
11471         }
11472         else {
11473             gv = cGVOPx_gv(obase);
11474             if (!gv)
11475                 break;
11476             if (match) {
11477                 SV **svp;
11478                 av = GvAV(gv);
11479                 if (!av || SvRMAGICAL(av))
11480                     break;
11481                 svp = av_fetch(av, (I32)obase->op_private, FALSE);
11482                 if (!svp || *svp != uninit_sv)
11483                     break;
11484             }
11485             return varname(gv, '$', 0,
11486                     NULL, (I32)obase->op_private, FUV_SUBSCRIPT_ARRAY);
11487         }
11488         break;
11489
11490     case OP_EXISTS:
11491         o = cUNOPx(obase)->op_first;
11492         if (!o || o->op_type != OP_NULL ||
11493                 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
11494             break;
11495         return find_uninit_var(cBINOPo->op_last, uninit_sv, match);
11496
11497     case OP_AELEM:
11498     case OP_HELEM:
11499         if (PL_op == obase)
11500             /* $a[uninit_expr] or $h{uninit_expr} */
11501             return find_uninit_var(cBINOPx(obase)->op_last, uninit_sv, match);
11502
11503         gv = NULL;
11504         o = cBINOPx(obase)->op_first;
11505         kid = cBINOPx(obase)->op_last;
11506
11507         /* get the av or hv, and optionally the gv */
11508         sv = NULL;
11509         if  (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
11510             sv = PAD_SV(o->op_targ);
11511         }
11512         else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
11513                 && cUNOPo->op_first->op_type == OP_GV)
11514         {
11515             gv = cGVOPx_gv(cUNOPo->op_first);
11516             if (!gv)
11517                 break;
11518             sv = o->op_type == OP_RV2HV ? (SV*)GvHV(gv) : (SV*)GvAV(gv);
11519         }
11520         if (!sv)
11521             break;
11522
11523         if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
11524             /* index is constant */
11525             if (match) {
11526                 if (SvMAGICAL(sv))
11527                     break;
11528                 if (obase->op_type == OP_HELEM) {
11529                     HE* he = hv_fetch_ent((HV*)sv, cSVOPx_sv(kid), 0, 0);
11530                     if (!he || HeVAL(he) != uninit_sv)
11531                         break;
11532                 }
11533                 else {
11534                     SV * const * const svp = av_fetch((AV*)sv, SvIV(cSVOPx_sv(kid)), FALSE);
11535                     if (!svp || *svp != uninit_sv)
11536                         break;
11537                 }
11538             }
11539             if (obase->op_type == OP_HELEM)
11540                 return varname(gv, '%', o->op_targ,
11541                             cSVOPx_sv(kid), 0, FUV_SUBSCRIPT_HASH);
11542             else
11543                 return varname(gv, '@', o->op_targ, NULL,
11544                             SvIV(cSVOPx_sv(kid)), FUV_SUBSCRIPT_ARRAY);
11545         }
11546         else  {
11547             /* index is an expression;
11548              * attempt to find a match within the aggregate */
11549             if (obase->op_type == OP_HELEM) {
11550                 SV * const keysv = S_find_hash_subscript(aTHX_ (HV*)sv, uninit_sv);
11551                 if (keysv)
11552                     return varname(gv, '%', o->op_targ,
11553                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
11554             }
11555             else {
11556                 const I32 index = S_find_array_subscript(aTHX_ (AV*)sv, uninit_sv);
11557                 if (index >= 0)
11558                     return varname(gv, '@', o->op_targ,
11559                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
11560             }
11561             if (match)
11562                 break;
11563             return varname(gv,
11564                 (o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
11565                 ? '@' : '%',
11566                 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
11567         }
11568
11569         break;
11570
11571     case OP_AASSIGN:
11572         /* only examine RHS */
11573         return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv, match);
11574
11575     case OP_OPEN:
11576         o = cUNOPx(obase)->op_first;
11577         if (o->op_type == OP_PUSHMARK)
11578             o = o->op_sibling;
11579
11580         if (!o->op_sibling) {
11581             /* one-arg version of open is highly magical */
11582
11583             if (o->op_type == OP_GV) { /* open FOO; */
11584                 gv = cGVOPx_gv(o);
11585                 if (match && GvSV(gv) != uninit_sv)
11586                     break;
11587                 return varname(gv, '$', 0,
11588                             NULL, 0, FUV_SUBSCRIPT_NONE);
11589             }
11590             /* other possibilities not handled are:
11591              * open $x; or open my $x;  should return '${*$x}'
11592              * open expr;               should return '$'.expr ideally
11593              */
11594              break;
11595         }
11596         goto do_op;
11597
11598     /* ops where $_ may be an implicit arg */
11599     case OP_TRANS:
11600     case OP_SUBST:
11601     case OP_MATCH:
11602         if ( !(obase->op_flags & OPf_STACKED)) {
11603             if (uninit_sv == ((obase->op_private & OPpTARGET_MY)
11604                                  ? PAD_SVl(obase->op_targ)
11605                                  : DEFSV))
11606             {
11607                 sv = sv_newmortal();
11608                 sv_setpvn(sv, "$_", 2);
11609                 return sv;
11610             }
11611         }
11612         goto do_op;
11613
11614     case OP_PRTF:
11615     case OP_PRINT:
11616         /* skip filehandle as it can't produce 'undef' warning  */
11617         o = cUNOPx(obase)->op_first;
11618         if ((obase->op_flags & OPf_STACKED) && o->op_type == OP_PUSHMARK)
11619             o = o->op_sibling->op_sibling;
11620         goto do_op2;
11621
11622
11623     case OP_RV2SV:
11624     case OP_CUSTOM:
11625     case OP_ENTERSUB:
11626         match = 1; /* XS or custom code could trigger random warnings */
11627         goto do_op;
11628
11629     case OP_SCHOMP:
11630     case OP_CHOMP:
11631         if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
11632             return sv_2mortal(newSVpvs("${$/}"));
11633         /* FALL THROUGH */
11634
11635     default:
11636     do_op:
11637         if (!(obase->op_flags & OPf_KIDS))
11638             break;
11639         o = cUNOPx(obase)->op_first;
11640         
11641     do_op2:
11642         if (!o)
11643             break;
11644
11645         /* if all except one arg are constant, or have no side-effects,
11646          * or are optimized away, then it's unambiguous */
11647         o2 = Nullop;
11648         for (kid=o; kid; kid = kid->op_sibling) {
11649             if (kid &&
11650                 (    (kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid)))
11651                   || (kid->op_type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
11652                   || (kid->op_type == OP_PUSHMARK)
11653                 )
11654             )
11655                 continue;
11656             if (o2) { /* more than one found */
11657                 o2 = Nullop;
11658                 break;
11659             }
11660             o2 = kid;
11661         }
11662         if (o2)
11663             return find_uninit_var(o2, uninit_sv, match);
11664
11665         /* scan all args */
11666         while (o) {
11667             sv = find_uninit_var(o, uninit_sv, 1);
11668             if (sv)
11669                 return sv;
11670             o = o->op_sibling;
11671         }
11672         break;
11673     }
11674     return NULL;
11675 }
11676
11677
11678 /*
11679 =for apidoc report_uninit
11680
11681 Print appropriate "Use of uninitialized variable" warning
11682
11683 =cut
11684 */
11685
11686 void
11687 Perl_report_uninit(pTHX_ SV* uninit_sv)
11688 {
11689     dVAR;
11690     if (PL_op) {
11691         SV* varname = NULL;
11692         if (uninit_sv) {
11693             varname = find_uninit_var(PL_op, uninit_sv,0);
11694             if (varname)
11695                 sv_insert(varname, 0, 0, " ", 1);
11696         }
11697         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
11698                 varname ? SvPV_nolen_const(varname) : "",
11699                 " in ", OP_DESC(PL_op));
11700     }
11701     else
11702         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
11703                     "", "", "");
11704 }
11705
11706 /*
11707  * Local variables:
11708  * c-indentation-style: bsd
11709  * c-basic-offset: 4
11710  * indent-tabs-mode: t
11711  * End:
11712  *
11713  * ex: set ts=8 sts=4 sw=4 noet:
11714  */