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