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