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