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