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