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