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