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