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