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