This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
add S_undo_inc_then_croak()
[perl5.git] / sv.c
1 /*    sv.c
2  *
3  *    Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4  *    2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 by Larry Wall
5  *    and others
6  *
7  *    You may distribute under the terms of either the GNU General Public
8  *    License or the Artistic License, as specified in the README file.
9  *
10  */
11
12 /*
13  * 'I wonder what the Entish is for "yes" and "no",' he thought.
14  *                                                      --Pippin
15  *
16  *     [p.480 of _The Lord of the Rings_, III/iv: "Treebeard"]
17  */
18
19 /*
20  *
21  *
22  * This file contains the code that creates, manipulates and destroys
23  * scalar values (SVs). The other types (AV, HV, GV, etc.) reuse the
24  * structure of an SV, so their creation and destruction is handled
25  * here; higher-level functions are in av.c, hv.c, and so on. Opcode
26  * level functions (eg. substr, split, join) for each of the types are
27  * in the pp*.c files.
28  */
29
30 #include "EXTERN.h"
31 #define PERL_IN_SV_C
32 #include "perl.h"
33 #include "regcomp.h"
34 #ifdef __VMS
35 # include <rms.h>
36 #endif
37
38 #ifdef __Lynx__
39 /* Missing proto on LynxOS */
40   char *gconvert(double, int, int,  char *);
41 #endif
42
43 #ifdef USE_QUADMATH
44 #  define SNPRINTF_G(nv, buffer, size, ndig) \
45     quadmath_snprintf(buffer, size, "%.*Qg", (int)ndig, (NV)(nv))
46 #else
47 #  define SNPRINTF_G(nv, buffer, size, ndig) \
48     PERL_UNUSED_RESULT(Gconvert((NV)(nv), (int)ndig, 0, buffer))
49 #endif
50
51 #ifndef SV_COW_THRESHOLD
52 #    define SV_COW_THRESHOLD                    0   /* COW iff len > K */
53 #endif
54 #ifndef SV_COWBUF_THRESHOLD
55 #    define SV_COWBUF_THRESHOLD                 1250 /* COW iff len > K */
56 #endif
57 #ifndef SV_COW_MAX_WASTE_THRESHOLD
58 #    define SV_COW_MAX_WASTE_THRESHOLD          80   /* COW iff (len - cur) < K */
59 #endif
60 #ifndef SV_COWBUF_WASTE_THRESHOLD
61 #    define SV_COWBUF_WASTE_THRESHOLD           80   /* COW iff (len - cur) < K */
62 #endif
63 #ifndef SV_COW_MAX_WASTE_FACTOR_THRESHOLD
64 #    define SV_COW_MAX_WASTE_FACTOR_THRESHOLD   2    /* COW iff len < (cur * K) */
65 #endif
66 #ifndef SV_COWBUF_WASTE_FACTOR_THRESHOLD
67 #    define SV_COWBUF_WASTE_FACTOR_THRESHOLD    2    /* COW iff len < (cur * K) */
68 #endif
69 /* Work around compiler warnings about unsigned >= THRESHOLD when thres-
70    hold is 0. */
71 #if SV_COW_THRESHOLD
72 # define GE_COW_THRESHOLD(cur) ((cur) >= SV_COW_THRESHOLD)
73 #else
74 # define GE_COW_THRESHOLD(cur) 1
75 #endif
76 #if SV_COWBUF_THRESHOLD
77 # define GE_COWBUF_THRESHOLD(cur) ((cur) >= SV_COWBUF_THRESHOLD)
78 #else
79 # define GE_COWBUF_THRESHOLD(cur) 1
80 #endif
81 #if SV_COW_MAX_WASTE_THRESHOLD
82 # define GE_COW_MAX_WASTE_THRESHOLD(cur,len) (((len)-(cur)) < SV_COW_MAX_WASTE_THRESHOLD)
83 #else
84 # define GE_COW_MAX_WASTE_THRESHOLD(cur,len) 1
85 #endif
86 #if SV_COWBUF_WASTE_THRESHOLD
87 # define GE_COWBUF_WASTE_THRESHOLD(cur,len) (((len)-(cur)) < SV_COWBUF_WASTE_THRESHOLD)
88 #else
89 # define GE_COWBUF_WASTE_THRESHOLD(cur,len) 1
90 #endif
91 #if SV_COW_MAX_WASTE_FACTOR_THRESHOLD
92 # define GE_COW_MAX_WASTE_FACTOR_THRESHOLD(cur,len) ((len) < SV_COW_MAX_WASTE_FACTOR_THRESHOLD * (cur))
93 #else
94 # define GE_COW_MAX_WASTE_FACTOR_THRESHOLD(cur,len) 1
95 #endif
96 #if SV_COWBUF_WASTE_FACTOR_THRESHOLD
97 # define GE_COWBUF_WASTE_FACTOR_THRESHOLD(cur,len) ((len) < SV_COWBUF_WASTE_FACTOR_THRESHOLD * (cur))
98 #else
99 # define GE_COWBUF_WASTE_FACTOR_THRESHOLD(cur,len) 1
100 #endif
101
102 #define CHECK_COW_THRESHOLD(cur,len) (\
103     GE_COW_THRESHOLD((cur)) && \
104     GE_COW_MAX_WASTE_THRESHOLD((cur),(len)) && \
105     GE_COW_MAX_WASTE_FACTOR_THRESHOLD((cur),(len)) \
106 )
107 #define CHECK_COWBUF_THRESHOLD(cur,len) (\
108     GE_COWBUF_THRESHOLD((cur)) && \
109     GE_COWBUF_WASTE_THRESHOLD((cur),(len)) && \
110     GE_COWBUF_WASTE_FACTOR_THRESHOLD((cur),(len)) \
111 )
112
113 #ifdef PERL_UTF8_CACHE_ASSERT
114 /* if adding more checks watch out for the following tests:
115  *   t/op/index.t t/op/length.t t/op/pat.t t/op/substr.t
116  *   lib/utf8.t lib/Unicode/Collate/t/index.t
117  * --jhi
118  */
119 #   define ASSERT_UTF8_CACHE(cache) \
120     STMT_START { if (cache) { assert((cache)[0] <= (cache)[1]); \
121                               assert((cache)[2] <= (cache)[3]); \
122                               assert((cache)[3] <= (cache)[1]);} \
123                               } STMT_END
124 #else
125 #   define ASSERT_UTF8_CACHE(cache) NOOP
126 #endif
127
128 /* ============================================================================
129
130 =head1 Allocation and deallocation of SVs.
131 An SV (or AV, HV, etc.) is allocated in two parts: the head (struct
132 sv, av, hv...) contains type and reference count information, and for
133 many types, a pointer to the body (struct xrv, xpv, xpviv...), which
134 contains fields specific to each type.  Some types store all they need
135 in the head, so don't have a body.
136
137 In all but the most memory-paranoid configurations (ex: PURIFY), heads
138 and bodies are allocated out of arenas, which by default are
139 approximately 4K chunks of memory parcelled up into N heads or bodies.
140 Sv-bodies are allocated by their sv-type, guaranteeing size
141 consistency needed to allocate safely from arrays.
142
143 For SV-heads, the first slot in each arena is reserved, and holds a
144 link to the next arena, some flags, and a note of the number of slots.
145 Snaked through each arena chain is a linked list of free items; when
146 this becomes empty, an extra arena is allocated and divided up into N
147 items which are threaded into the free list.
148
149 SV-bodies are similar, but they use arena-sets by default, which
150 separate the link and info from the arena itself, and reclaim the 1st
151 slot in the arena.  SV-bodies are further described later.
152
153 The following global variables are associated with arenas:
154
155  PL_sv_arenaroot     pointer to list of SV arenas
156  PL_sv_root          pointer to list of free SV structures
157
158  PL_body_arenas      head of linked-list of body arenas
159  PL_body_roots[]     array of pointers to list of free bodies of svtype
160                      arrays are indexed by the svtype needed
161
162 A few special SV heads are not allocated from an arena, but are
163 instead directly created in the interpreter structure, eg PL_sv_undef.
164 The size of arenas can be changed from the default by setting
165 PERL_ARENA_SIZE appropriately at compile time.
166
167 The SV arena serves the secondary purpose of allowing still-live SVs
168 to be located and destroyed during final cleanup.
169
170 At the lowest level, the macros new_SV() and del_SV() grab and free
171 an SV head.  (If debugging with -DD, del_SV() calls the function S_del_sv()
172 to return the SV to the free list with error checking.) new_SV() calls
173 more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
174 SVs in the free list have their SvTYPE field set to all ones.
175
176 At the time of very final cleanup, sv_free_arenas() is called from
177 perl_destruct() to physically free all the arenas allocated since the
178 start of the interpreter.
179
180 The function visit() scans the SV arenas list, and calls a specified
181 function for each SV it finds which is still live - ie which has an SvTYPE
182 other than all 1's, and a non-zero SvREFCNT. visit() is used by the
183 following functions (specified as [function that calls visit()] / [function
184 called by visit() for each SV]):
185
186     sv_report_used() / do_report_used()
187                         dump all remaining SVs (debugging aid)
188
189     sv_clean_objs() / do_clean_objs(),do_clean_named_objs(),
190                       do_clean_named_io_objs(),do_curse()
191                         Attempt to free all objects pointed to by RVs,
192                         try to do the same for all objects indir-
193                         ectly referenced by typeglobs too, and
194                         then do a final sweep, cursing any
195                         objects that remain.  Called once from
196                         perl_destruct(), prior to calling sv_clean_all()
197                         below.
198
199     sv_clean_all() / do_clean_all()
200                         SvREFCNT_dec(sv) each remaining SV, possibly
201                         triggering an sv_free(). It also sets the
202                         SVf_BREAK flag on the SV to indicate that the
203                         refcnt has been artificially lowered, and thus
204                         stopping sv_free() from giving spurious warnings
205                         about SVs which unexpectedly have a refcnt
206                         of zero.  called repeatedly from perl_destruct()
207                         until there are no SVs left.
208
209 =head2 Arena allocator API Summary
210
211 Private API to rest of sv.c
212
213     new_SV(),  del_SV(),
214
215     new_XPVNV(), del_XPVGV(),
216     etc
217
218 Public API:
219
220     sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
221
222 =cut
223
224  * ========================================================================= */
225
226 /*
227  * "A time to plant, and a time to uproot what was planted..."
228  */
229
230 #ifdef PERL_MEM_LOG
231 #  define MEM_LOG_NEW_SV(sv, file, line, func)  \
232             Perl_mem_log_new_sv(sv, file, line, func)
233 #  define MEM_LOG_DEL_SV(sv, file, line, func)  \
234             Perl_mem_log_del_sv(sv, file, line, func)
235 #else
236 #  define MEM_LOG_NEW_SV(sv, file, line, func)  NOOP
237 #  define MEM_LOG_DEL_SV(sv, file, line, func)  NOOP
238 #endif
239
240 #ifdef DEBUG_LEAKING_SCALARS
241 #  define FREE_SV_DEBUG_FILE(sv) STMT_START { \
242         if ((sv)->sv_debug_file) PerlMemShared_free((sv)->sv_debug_file); \
243     } STMT_END
244 #  define DEBUG_SV_SERIAL(sv)                                               \
245     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) del_SV\n",    \
246             PTR2UV(sv), (long)(sv)->sv_debug_serial))
247 #else
248 #  define FREE_SV_DEBUG_FILE(sv)
249 #  define DEBUG_SV_SERIAL(sv)   NOOP
250 #endif
251
252 #ifdef PERL_POISON
253 #  define SvARENA_CHAIN(sv)     ((sv)->sv_u.svu_rv)
254 #  define SvARENA_CHAIN_SET(sv,val)     (sv)->sv_u.svu_rv = MUTABLE_SV((val))
255 /* Whilst I'd love to do this, it seems that things like to check on
256    unreferenced scalars
257 #  define POISON_SV_HEAD(sv)    PoisonNew(sv, 1, struct STRUCT_SV)
258 */
259 #  define POISON_SV_HEAD(sv)    PoisonNew(&SvANY(sv), 1, void *), \
260                                 PoisonNew(&SvREFCNT(sv), 1, U32)
261 #else
262 #  define SvARENA_CHAIN(sv)     SvANY(sv)
263 #  define SvARENA_CHAIN_SET(sv,val)     SvANY(sv) = (void *)(val)
264 #  define POISON_SV_HEAD(sv)
265 #endif
266
267 /* Mark an SV head as unused, and add to free list.
268  *
269  * If SVf_BREAK is set, skip adding it to the free list, as this SV had
270  * its refcount artificially decremented during global destruction, so
271  * there may be dangling pointers to it. The last thing we want in that
272  * case is for it to be reused. */
273
274 #define plant_SV(p) \
275     STMT_START {                                        \
276         const U32 old_flags = SvFLAGS(p);                       \
277         MEM_LOG_DEL_SV(p, __FILE__, __LINE__, FUNCTION__);  \
278         DEBUG_SV_SERIAL(p);                             \
279         FREE_SV_DEBUG_FILE(p);                          \
280         POISON_SV_HEAD(p);                              \
281         SvFLAGS(p) = SVTYPEMASK;                        \
282         if (!(old_flags & SVf_BREAK)) {         \
283             SvARENA_CHAIN_SET(p, PL_sv_root);   \
284             PL_sv_root = (p);                           \
285         }                                               \
286         --PL_sv_count;                                  \
287     } STMT_END
288
289 #define uproot_SV(p) \
290     STMT_START {                                        \
291         (p) = PL_sv_root;                               \
292         PL_sv_root = MUTABLE_SV(SvARENA_CHAIN(p));              \
293         ++PL_sv_count;                                  \
294     } STMT_END
295
296
297 /* make some more SVs by adding another arena */
298
299 STATIC SV*
300 S_more_sv(pTHX)
301 {
302     SV* sv;
303     char *chunk;                /* must use New here to match call to */
304     Newx(chunk,PERL_ARENA_SIZE,char);  /* Safefree() in sv_free_arenas() */
305     sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
306     uproot_SV(sv);
307     return sv;
308 }
309
310 /* new_SV(): return a new, empty SV head */
311
312 #ifdef DEBUG_LEAKING_SCALARS
313 /* provide a real function for a debugger to play with */
314 STATIC SV*
315 S_new_SV(pTHX_ const char *file, int line, const char *func)
316 {
317     SV* sv;
318
319     if (PL_sv_root)
320         uproot_SV(sv);
321     else
322         sv = S_more_sv(aTHX);
323     SvANY(sv) = 0;
324     SvREFCNT(sv) = 1;
325     SvFLAGS(sv) = 0;
326     sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
327     sv->sv_debug_line = (U16) (PL_parser && PL_parser->copline != NOLINE
328                 ? PL_parser->copline
329                 :  PL_curcop
330                     ? CopLINE(PL_curcop)
331                     : 0
332             );
333     sv->sv_debug_inpad = 0;
334     sv->sv_debug_parent = NULL;
335     sv->sv_debug_file = PL_curcop ? savesharedpv(CopFILE(PL_curcop)): NULL;
336
337     sv->sv_debug_serial = PL_sv_serial++;
338
339     MEM_LOG_NEW_SV(sv, file, line, func);
340     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) new_SV (from %s:%d [%s])\n",
341             PTR2UV(sv), (long)sv->sv_debug_serial, file, line, func));
342
343     return sv;
344 }
345 #  define new_SV(p) (p)=S_new_SV(aTHX_ __FILE__, __LINE__, FUNCTION__)
346
347 #else
348 #  define new_SV(p) \
349     STMT_START {                                        \
350         if (PL_sv_root)                                 \
351             uproot_SV(p);                               \
352         else                                            \
353             (p) = S_more_sv(aTHX);                      \
354         SvANY(p) = 0;                                   \
355         SvREFCNT(p) = 1;                                \
356         SvFLAGS(p) = 0;                                 \
357         MEM_LOG_NEW_SV(p, __FILE__, __LINE__, FUNCTION__);  \
358     } STMT_END
359 #endif
360
361
362 /* del_SV(): return an empty SV head to the free list */
363
364 #ifdef DEBUGGING
365
366 #define del_SV(p) \
367     STMT_START {                                        \
368         if (DEBUG_D_TEST)                               \
369             del_sv(p);                                  \
370         else                                            \
371             plant_SV(p);                                \
372     } STMT_END
373
374 STATIC void
375 S_del_sv(pTHX_ SV *p)
376 {
377     PERL_ARGS_ASSERT_DEL_SV;
378
379     if (DEBUG_D_TEST) {
380         SV* sva;
381         bool ok = 0;
382         for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
383             const SV * const sv = sva + 1;
384             const SV * const svend = &sva[SvREFCNT(sva)];
385             if (p >= sv && p < svend) {
386                 ok = 1;
387                 break;
388             }
389         }
390         if (!ok) {
391             Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
392                              "Attempt to free non-arena SV: 0x%"UVxf
393                              pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
394             return;
395         }
396     }
397     plant_SV(p);
398 }
399
400 #else /* ! DEBUGGING */
401
402 #define del_SV(p)   plant_SV(p)
403
404 #endif /* DEBUGGING */
405
406 /*
407  * Bodyless IVs and NVs!
408  *
409  * Since 5.9.2, we can avoid allocating a body for SVt_IV-type SVs.
410  * Since the larger IV-holding variants of SVs store their integer
411  * values in their respective bodies, the family of SvIV() accessor
412  * macros would  naively have to branch on the SV type to find the
413  * integer value either in the HEAD or BODY. In order to avoid this
414  * expensive branch, a clever soul has deployed a great hack:
415  * We set up the SvANY pointer such that instead of pointing to a
416  * real body, it points into the memory before the location of the
417  * head. We compute this pointer such that the location of
418  * the integer member of the hypothetical body struct happens to
419  * be the same as the location of the integer member of the bodyless
420  * SV head. This now means that the SvIV() family of accessors can
421  * always read from the (hypothetical or real) body via SvANY.
422  *
423  * Since the 5.21 dev series, we employ the same trick for NVs
424  * if the architecture can support it (NVSIZE <= IVSIZE).
425  */
426
427 /* The following two macros compute the necessary offsets for the above
428  * trick and store them in SvANY for SvIV() (and friends) to use. */
429 #define SET_SVANY_FOR_BODYLESS_IV(sv) \
430         SvANY(sv) = (XPVIV*)((char*)&(sv->sv_u.svu_iv) - STRUCT_OFFSET(XPVIV, xiv_iv))
431
432 #define SET_SVANY_FOR_BODYLESS_NV(sv) \
433         SvANY(sv) = (XPVNV*)((char*)&(sv->sv_u.svu_nv) - STRUCT_OFFSET(XPVNV, xnv_u.xnv_nv))
434
435 /*
436 =head1 SV Manipulation Functions
437
438 =for apidoc sv_add_arena
439
440 Given a chunk of memory, link it to the head of the list of arenas,
441 and split it into a list of free SVs.
442
443 =cut
444 */
445
446 static void
447 S_sv_add_arena(pTHX_ char *const ptr, const U32 size, const U32 flags)
448 {
449     SV *const sva = MUTABLE_SV(ptr);
450     SV* sv;
451     SV* svend;
452
453     PERL_ARGS_ASSERT_SV_ADD_ARENA;
454
455     /* The first SV in an arena isn't an SV. */
456     SvANY(sva) = (void *) PL_sv_arenaroot;              /* ptr to next arena */
457     SvREFCNT(sva) = size / sizeof(SV);          /* number of SV slots */
458     SvFLAGS(sva) = flags;                       /* FAKE if not to be freed */
459
460     PL_sv_arenaroot = sva;
461     PL_sv_root = sva + 1;
462
463     svend = &sva[SvREFCNT(sva) - 1];
464     sv = sva + 1;
465     while (sv < svend) {
466         SvARENA_CHAIN_SET(sv, (sv + 1));
467 #ifdef DEBUGGING
468         SvREFCNT(sv) = 0;
469 #endif
470         /* Must always set typemask because it's always checked in on cleanup
471            when the arenas are walked looking for objects.  */
472         SvFLAGS(sv) = SVTYPEMASK;
473         sv++;
474     }
475     SvARENA_CHAIN_SET(sv, 0);
476 #ifdef DEBUGGING
477     SvREFCNT(sv) = 0;
478 #endif
479     SvFLAGS(sv) = SVTYPEMASK;
480 }
481
482 /* visit(): call the named function for each non-free SV in the arenas
483  * whose flags field matches the flags/mask args. */
484
485 STATIC I32
486 S_visit(pTHX_ SVFUNC_t f, const U32 flags, const U32 mask)
487 {
488     SV* sva;
489     I32 visited = 0;
490
491     PERL_ARGS_ASSERT_VISIT;
492
493     for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
494         const SV * const svend = &sva[SvREFCNT(sva)];
495         SV* sv;
496         for (sv = sva + 1; sv < svend; ++sv) {
497             if (SvTYPE(sv) != (svtype)SVTYPEMASK
498                     && (sv->sv_flags & mask) == flags
499                     && SvREFCNT(sv))
500             {
501                 (*f)(aTHX_ sv);
502                 ++visited;
503             }
504         }
505     }
506     return visited;
507 }
508
509 #ifdef DEBUGGING
510
511 /* called by sv_report_used() for each live SV */
512
513 static void
514 do_report_used(pTHX_ SV *const sv)
515 {
516     if (SvTYPE(sv) != (svtype)SVTYPEMASK) {
517         PerlIO_printf(Perl_debug_log, "****\n");
518         sv_dump(sv);
519     }
520 }
521 #endif
522
523 /*
524 =for apidoc sv_report_used
525
526 Dump the contents of all SVs not yet freed (debugging aid).
527
528 =cut
529 */
530
531 void
532 Perl_sv_report_used(pTHX)
533 {
534 #ifdef DEBUGGING
535     visit(do_report_used, 0, 0);
536 #else
537     PERL_UNUSED_CONTEXT;
538 #endif
539 }
540
541 /* called by sv_clean_objs() for each live SV */
542
543 static void
544 do_clean_objs(pTHX_ SV *const ref)
545 {
546     assert (SvROK(ref));
547     {
548         SV * const target = SvRV(ref);
549         if (SvOBJECT(target)) {
550             DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(ref)));
551             if (SvWEAKREF(ref)) {
552                 sv_del_backref(target, ref);
553                 SvWEAKREF_off(ref);
554                 SvRV_set(ref, NULL);
555             } else {
556                 SvROK_off(ref);
557                 SvRV_set(ref, NULL);
558                 SvREFCNT_dec_NN(target);
559             }
560         }
561     }
562 }
563
564
565 /* clear any slots in a GV which hold objects - except IO;
566  * called by sv_clean_objs() for each live GV */
567
568 static void
569 do_clean_named_objs(pTHX_ SV *const sv)
570 {
571     SV *obj;
572     assert(SvTYPE(sv) == SVt_PVGV);
573     assert(isGV_with_GP(sv));
574     if (!GvGP(sv))
575         return;
576
577     /* freeing GP entries may indirectly free the current GV;
578      * hold onto it while we mess with the GP slots */
579     SvREFCNT_inc(sv);
580
581     if ( ((obj = GvSV(sv) )) && SvOBJECT(obj)) {
582         DEBUG_D((PerlIO_printf(Perl_debug_log,
583                 "Cleaning named glob SV object:\n "), sv_dump(obj)));
584         GvSV(sv) = NULL;
585         SvREFCNT_dec_NN(obj);
586     }
587     if ( ((obj = MUTABLE_SV(GvAV(sv)) )) && SvOBJECT(obj)) {
588         DEBUG_D((PerlIO_printf(Perl_debug_log,
589                 "Cleaning named glob AV object:\n "), sv_dump(obj)));
590         GvAV(sv) = NULL;
591         SvREFCNT_dec_NN(obj);
592     }
593     if ( ((obj = MUTABLE_SV(GvHV(sv)) )) && SvOBJECT(obj)) {
594         DEBUG_D((PerlIO_printf(Perl_debug_log,
595                 "Cleaning named glob HV object:\n "), sv_dump(obj)));
596         GvHV(sv) = NULL;
597         SvREFCNT_dec_NN(obj);
598     }
599     if ( ((obj = MUTABLE_SV(GvCV(sv)) )) && SvOBJECT(obj)) {
600         DEBUG_D((PerlIO_printf(Perl_debug_log,
601                 "Cleaning named glob CV object:\n "), sv_dump(obj)));
602         GvCV_set(sv, NULL);
603         SvREFCNT_dec_NN(obj);
604     }
605     SvREFCNT_dec_NN(sv); /* undo the inc above */
606 }
607
608 /* clear any IO slots in a GV which hold objects (except stderr, defout);
609  * called by sv_clean_objs() for each live GV */
610
611 static void
612 do_clean_named_io_objs(pTHX_ SV *const sv)
613 {
614     SV *obj;
615     assert(SvTYPE(sv) == SVt_PVGV);
616     assert(isGV_with_GP(sv));
617     if (!GvGP(sv) || sv == (SV*)PL_stderrgv || sv == (SV*)PL_defoutgv)
618         return;
619
620     SvREFCNT_inc(sv);
621     if ( ((obj = MUTABLE_SV(GvIO(sv)) )) && SvOBJECT(obj)) {
622         DEBUG_D((PerlIO_printf(Perl_debug_log,
623                 "Cleaning named glob IO object:\n "), sv_dump(obj)));
624         GvIOp(sv) = NULL;
625         SvREFCNT_dec_NN(obj);
626     }
627     SvREFCNT_dec_NN(sv); /* undo the inc above */
628 }
629
630 /* Void wrapper to pass to visit() */
631 static void
632 do_curse(pTHX_ SV * const sv) {
633     if ((PL_stderrgv && GvGP(PL_stderrgv) && (SV*)GvIO(PL_stderrgv) == sv)
634      || (PL_defoutgv && GvGP(PL_defoutgv) && (SV*)GvIO(PL_defoutgv) == sv))
635         return;
636     (void)curse(sv, 0);
637 }
638
639 /*
640 =for apidoc sv_clean_objs
641
642 Attempt to destroy all objects not yet freed.
643
644 =cut
645 */
646
647 void
648 Perl_sv_clean_objs(pTHX)
649 {
650     GV *olddef, *olderr;
651     PL_in_clean_objs = TRUE;
652     visit(do_clean_objs, SVf_ROK, SVf_ROK);
653     /* Some barnacles may yet remain, clinging to typeglobs.
654      * Run the non-IO destructors first: they may want to output
655      * error messages, close files etc */
656     visit(do_clean_named_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
657     visit(do_clean_named_io_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
658     /* And if there are some very tenacious barnacles clinging to arrays,
659        closures, or what have you.... */
660     visit(do_curse, SVs_OBJECT, SVs_OBJECT);
661     olddef = PL_defoutgv;
662     PL_defoutgv = NULL; /* disable skip of PL_defoutgv */
663     if (olddef && isGV_with_GP(olddef))
664         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olddef));
665     olderr = PL_stderrgv;
666     PL_stderrgv = NULL; /* disable skip of PL_stderrgv */
667     if (olderr && isGV_with_GP(olderr))
668         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olderr));
669     SvREFCNT_dec(olddef);
670     PL_in_clean_objs = FALSE;
671 }
672
673 /* called by sv_clean_all() for each live SV */
674
675 static void
676 do_clean_all(pTHX_ SV *const sv)
677 {
678     if (sv == (const SV *) PL_fdpid || sv == (const SV *)PL_strtab) {
679         /* don't clean pid table and strtab */
680         return;
681     }
682     DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%"UVxf"\n", PTR2UV(sv)) ));
683     SvFLAGS(sv) |= SVf_BREAK;
684     SvREFCNT_dec_NN(sv);
685 }
686
687 /*
688 =for apidoc sv_clean_all
689
690 Decrement the refcnt of each remaining SV, possibly triggering a
691 cleanup.  This function may have to be called multiple times to free
692 SVs which are in complex self-referential hierarchies.
693
694 =cut
695 */
696
697 I32
698 Perl_sv_clean_all(pTHX)
699 {
700     I32 cleaned;
701     PL_in_clean_all = TRUE;
702     cleaned = visit(do_clean_all, 0,0);
703     return cleaned;
704 }
705
706 /*
707   ARENASETS: a meta-arena implementation which separates arena-info
708   into struct arena_set, which contains an array of struct
709   arena_descs, each holding info for a single arena.  By separating
710   the meta-info from the arena, we recover the 1st slot, formerly
711   borrowed for list management.  The arena_set is about the size of an
712   arena, avoiding the needless malloc overhead of a naive linked-list.
713
714   The cost is 1 arena-set malloc per ~320 arena-mallocs, + the unused
715   memory in the last arena-set (1/2 on average).  In trade, we get
716   back the 1st slot in each arena (ie 1.7% of a CV-arena, less for
717   smaller types).  The recovery of the wasted space allows use of
718   small arenas for large, rare body types, by changing array* fields
719   in body_details_by_type[] below.
720 */
721 struct arena_desc {
722     char       *arena;          /* the raw storage, allocated aligned */
723     size_t      size;           /* its size ~4k typ */
724     svtype      utype;          /* bodytype stored in arena */
725 };
726
727 struct arena_set;
728
729 /* Get the maximum number of elements in set[] such that struct arena_set
730    will fit within PERL_ARENA_SIZE, which is probably just under 4K, and
731    therefore likely to be 1 aligned memory page.  */
732
733 #define ARENAS_PER_SET  ((PERL_ARENA_SIZE - sizeof(struct arena_set*) \
734                           - 2 * sizeof(int)) / sizeof (struct arena_desc))
735
736 struct arena_set {
737     struct arena_set* next;
738     unsigned int   set_size;    /* ie ARENAS_PER_SET */
739     unsigned int   curr;        /* index of next available arena-desc */
740     struct arena_desc set[ARENAS_PER_SET];
741 };
742
743 /*
744 =for apidoc sv_free_arenas
745
746 Deallocate the memory used by all arenas.  Note that all the individual SV
747 heads and bodies within the arenas must already have been freed.
748
749 =cut
750
751 */
752 void
753 Perl_sv_free_arenas(pTHX)
754 {
755     SV* sva;
756     SV* svanext;
757     unsigned int i;
758
759     /* Free arenas here, but be careful about fake ones.  (We assume
760        contiguity of the fake ones with the corresponding real ones.) */
761
762     for (sva = PL_sv_arenaroot; sva; sva = svanext) {
763         svanext = MUTABLE_SV(SvANY(sva));
764         while (svanext && SvFAKE(svanext))
765             svanext = MUTABLE_SV(SvANY(svanext));
766
767         if (!SvFAKE(sva))
768             Safefree(sva);
769     }
770
771     {
772         struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
773
774         while (aroot) {
775             struct arena_set *current = aroot;
776             i = aroot->curr;
777             while (i--) {
778                 assert(aroot->set[i].arena);
779                 Safefree(aroot->set[i].arena);
780             }
781             aroot = aroot->next;
782             Safefree(current);
783         }
784     }
785     PL_body_arenas = 0;
786
787     i = PERL_ARENA_ROOTS_SIZE;
788     while (i--)
789         PL_body_roots[i] = 0;
790
791     PL_sv_arenaroot = 0;
792     PL_sv_root = 0;
793 }
794
795 /*
796   Here are mid-level routines that manage the allocation of bodies out
797   of the various arenas.  There are 5 kinds of arenas:
798
799   1. SV-head arenas, which are discussed and handled above
800   2. regular body arenas
801   3. arenas for reduced-size bodies
802   4. Hash-Entry arenas
803
804   Arena types 2 & 3 are chained by body-type off an array of
805   arena-root pointers, which is indexed by svtype.  Some of the
806   larger/less used body types are malloced singly, since a large
807   unused block of them is wasteful.  Also, several svtypes dont have
808   bodies; the data fits into the sv-head itself.  The arena-root
809   pointer thus has a few unused root-pointers (which may be hijacked
810   later for arena types 4,5)
811
812   3 differs from 2 as an optimization; some body types have several
813   unused fields in the front of the structure (which are kept in-place
814   for consistency).  These bodies can be allocated in smaller chunks,
815   because the leading fields arent accessed.  Pointers to such bodies
816   are decremented to point at the unused 'ghost' memory, knowing that
817   the pointers are used with offsets to the real memory.
818
819
820 =head1 SV-Body Allocation
821
822 =cut
823
824 Allocation of SV-bodies is similar to SV-heads, differing as follows;
825 the allocation mechanism is used for many body types, so is somewhat
826 more complicated, it uses arena-sets, and has no need for still-live
827 SV detection.
828
829 At the outermost level, (new|del)_X*V macros return bodies of the
830 appropriate type.  These macros call either (new|del)_body_type or
831 (new|del)_body_allocated macro pairs, depending on specifics of the
832 type.  Most body types use the former pair, the latter pair is used to
833 allocate body types with "ghost fields".
834
835 "ghost fields" are fields that are unused in certain types, and
836 consequently don't need to actually exist.  They are declared because
837 they're part of a "base type", which allows use of functions as
838 methods.  The simplest examples are AVs and HVs, 2 aggregate types
839 which don't use the fields which support SCALAR semantics.
840
841 For these types, the arenas are carved up into appropriately sized
842 chunks, we thus avoid wasted memory for those unaccessed members.
843 When bodies are allocated, we adjust the pointer back in memory by the
844 size of the part not allocated, so it's as if we allocated the full
845 structure.  (But things will all go boom if you write to the part that
846 is "not there", because you'll be overwriting the last members of the
847 preceding structure in memory.)
848
849 We calculate the correction using the STRUCT_OFFSET macro on the first
850 member present.  If the allocated structure is smaller (no initial NV
851 actually allocated) then the net effect is to subtract the size of the NV
852 from the pointer, to return a new pointer as if an initial NV were actually
853 allocated.  (We were using structures named *_allocated for this, but
854 this turned out to be a subtle bug, because a structure without an NV
855 could have a lower alignment constraint, but the compiler is allowed to
856 optimised accesses based on the alignment constraint of the actual pointer
857 to the full structure, for example, using a single 64 bit load instruction
858 because it "knows" that two adjacent 32 bit members will be 8-byte aligned.)
859
860 This is the same trick as was used for NV and IV bodies.  Ironically it
861 doesn't need to be used for NV bodies any more, because NV is now at
862 the start of the structure.  IV bodies, and also in some builds NV bodies,
863 don't need it either, because they are no longer allocated.
864
865 In turn, the new_body_* allocators call S_new_body(), which invokes
866 new_body_inline macro, which takes a lock, and takes a body off the
867 linked list at PL_body_roots[sv_type], calling Perl_more_bodies() if
868 necessary to refresh an empty list.  Then the lock is released, and
869 the body is returned.
870
871 Perl_more_bodies allocates a new arena, and carves it up into an array of N
872 bodies, which it strings into a linked list.  It looks up arena-size
873 and body-size from the body_details table described below, thus
874 supporting the multiple body-types.
875
876 If PURIFY is defined, or PERL_ARENA_SIZE=0, arenas are not used, and
877 the (new|del)_X*V macros are mapped directly to malloc/free.
878
879 For each sv-type, struct body_details bodies_by_type[] carries
880 parameters which control these aspects of SV handling:
881
882 Arena_size determines whether arenas are used for this body type, and if
883 so, how big they are.  PURIFY or PERL_ARENA_SIZE=0 set this field to
884 zero, forcing individual mallocs and frees.
885
886 Body_size determines how big a body is, and therefore how many fit into
887 each arena.  Offset carries the body-pointer adjustment needed for
888 "ghost fields", and is used in *_allocated macros.
889
890 But its main purpose is to parameterize info needed in
891 Perl_sv_upgrade().  The info here dramatically simplifies the function
892 vs the implementation in 5.8.8, making it table-driven.  All fields
893 are used for this, except for arena_size.
894
895 For the sv-types that have no bodies, arenas are not used, so those
896 PL_body_roots[sv_type] are unused, and can be overloaded.  In
897 something of a special case, SVt_NULL is borrowed for HE arenas;
898 PL_body_roots[HE_SVSLOT=SVt_NULL] is filled by S_more_he, but the
899 bodies_by_type[SVt_NULL] slot is not used, as the table is not
900 available in hv.c.
901
902 */
903
904 struct body_details {
905     U8 body_size;       /* Size to allocate  */
906     U8 copy;            /* Size of structure to copy (may be shorter)  */
907     U8 offset;          /* Size of unalloced ghost fields to first alloced field*/
908     PERL_BITFIELD8 type : 4;        /* We have space for a sanity check. */
909     PERL_BITFIELD8 cant_upgrade : 1;/* Cannot upgrade this type */
910     PERL_BITFIELD8 zero_nv : 1;     /* zero the NV when upgrading from this */
911     PERL_BITFIELD8 arena : 1;       /* Allocated from an arena */
912     U32 arena_size;                 /* Size of arena to allocate */
913 };
914
915 #define HADNV FALSE
916 #define NONV TRUE
917
918
919 #ifdef PURIFY
920 /* With -DPURFIY we allocate everything directly, and don't use arenas.
921    This seems a rather elegant way to simplify some of the code below.  */
922 #define HASARENA FALSE
923 #else
924 #define HASARENA TRUE
925 #endif
926 #define NOARENA FALSE
927
928 /* Size the arenas to exactly fit a given number of bodies.  A count
929    of 0 fits the max number bodies into a PERL_ARENA_SIZE.block,
930    simplifying the default.  If count > 0, the arena is sized to fit
931    only that many bodies, allowing arenas to be used for large, rare
932    bodies (XPVFM, XPVIO) without undue waste.  The arena size is
933    limited by PERL_ARENA_SIZE, so we can safely oversize the
934    declarations.
935  */
936 #define FIT_ARENA0(body_size)                           \
937     ((size_t)(PERL_ARENA_SIZE / body_size) * body_size)
938 #define FIT_ARENAn(count,body_size)                     \
939     ( count * body_size <= PERL_ARENA_SIZE)             \
940     ? count * body_size                                 \
941     : FIT_ARENA0 (body_size)
942 #define FIT_ARENA(count,body_size)                      \
943    (U32)(count                                          \
944     ? FIT_ARENAn (count, body_size)                     \
945     : FIT_ARENA0 (body_size))
946
947 /* Calculate the length to copy. Specifically work out the length less any
948    final padding the compiler needed to add.  See the comment in sv_upgrade
949    for why copying the padding proved to be a bug.  */
950
951 #define copy_length(type, last_member) \
952         STRUCT_OFFSET(type, last_member) \
953         + sizeof (((type*)SvANY((const SV *)0))->last_member)
954
955 static const struct body_details bodies_by_type[] = {
956     /* HEs use this offset for their arena.  */
957     { 0, 0, 0, SVt_NULL, FALSE, NONV, NOARENA, 0 },
958
959     /* IVs are in the head, so the allocation size is 0.  */
960     { 0,
961       sizeof(IV), /* This is used to copy out the IV body.  */
962       STRUCT_OFFSET(XPVIV, xiv_iv), SVt_IV, FALSE, NONV,
963       NOARENA /* IVS don't need an arena  */, 0
964     },
965
966 #if NVSIZE <= IVSIZE
967     { 0, sizeof(NV),
968       STRUCT_OFFSET(XPVNV, xnv_u),
969       SVt_NV, FALSE, HADNV, NOARENA, 0 },
970 #else
971     { sizeof(NV), sizeof(NV),
972       STRUCT_OFFSET(XPVNV, xnv_u),
973       SVt_NV, FALSE, HADNV, HASARENA, FIT_ARENA(0, sizeof(NV)) },
974 #endif
975
976     { sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur),
977       copy_length(XPV, xpv_len) - STRUCT_OFFSET(XPV, xpv_cur),
978       + STRUCT_OFFSET(XPV, xpv_cur),
979       SVt_PV, FALSE, NONV, HASARENA,
980       FIT_ARENA(0, sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur)) },
981
982     { sizeof(XINVLIST) - STRUCT_OFFSET(XPV, xpv_cur),
983       copy_length(XINVLIST, is_offset) - STRUCT_OFFSET(XPV, xpv_cur),
984       + STRUCT_OFFSET(XPV, xpv_cur),
985       SVt_INVLIST, TRUE, NONV, HASARENA,
986       FIT_ARENA(0, sizeof(XINVLIST) - STRUCT_OFFSET(XPV, xpv_cur)) },
987
988     { sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur),
989       copy_length(XPVIV, xiv_u) - STRUCT_OFFSET(XPV, xpv_cur),
990       + STRUCT_OFFSET(XPV, xpv_cur),
991       SVt_PVIV, FALSE, NONV, HASARENA,
992       FIT_ARENA(0, sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur)) },
993
994     { sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur),
995       copy_length(XPVNV, xnv_u) - STRUCT_OFFSET(XPV, xpv_cur),
996       + STRUCT_OFFSET(XPV, xpv_cur),
997       SVt_PVNV, FALSE, HADNV, HASARENA,
998       FIT_ARENA(0, sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur)) },
999
1000     { sizeof(XPVMG), copy_length(XPVMG, xnv_u), 0, SVt_PVMG, FALSE, HADNV,
1001       HASARENA, FIT_ARENA(0, sizeof(XPVMG)) },
1002
1003     { sizeof(regexp),
1004       sizeof(regexp),
1005       0,
1006       SVt_REGEXP, TRUE, NONV, HASARENA,
1007       FIT_ARENA(0, sizeof(regexp))
1008     },
1009
1010     { sizeof(XPVGV), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
1011       HASARENA, FIT_ARENA(0, sizeof(XPVGV)) },
1012     
1013     { sizeof(XPVLV), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
1014       HASARENA, FIT_ARENA(0, sizeof(XPVLV)) },
1015
1016     { sizeof(XPVAV),
1017       copy_length(XPVAV, xav_alloc),
1018       0,
1019       SVt_PVAV, TRUE, NONV, HASARENA,
1020       FIT_ARENA(0, sizeof(XPVAV)) },
1021
1022     { sizeof(XPVHV),
1023       copy_length(XPVHV, xhv_max),
1024       0,
1025       SVt_PVHV, TRUE, NONV, HASARENA,
1026       FIT_ARENA(0, sizeof(XPVHV)) },
1027
1028     { sizeof(XPVCV),
1029       sizeof(XPVCV),
1030       0,
1031       SVt_PVCV, TRUE, NONV, HASARENA,
1032       FIT_ARENA(0, sizeof(XPVCV)) },
1033
1034     { sizeof(XPVFM),
1035       sizeof(XPVFM),
1036       0,
1037       SVt_PVFM, TRUE, NONV, NOARENA,
1038       FIT_ARENA(20, sizeof(XPVFM)) },
1039
1040     { sizeof(XPVIO),
1041       sizeof(XPVIO),
1042       0,
1043       SVt_PVIO, TRUE, NONV, HASARENA,
1044       FIT_ARENA(24, sizeof(XPVIO)) },
1045 };
1046
1047 #define new_body_allocated(sv_type)             \
1048     (void *)((char *)S_new_body(aTHX_ sv_type)  \
1049              - bodies_by_type[sv_type].offset)
1050
1051 /* return a thing to the free list */
1052
1053 #define del_body(thing, root)                           \
1054     STMT_START {                                        \
1055         void ** const thing_copy = (void **)thing;      \
1056         *thing_copy = *root;                            \
1057         *root = (void*)thing_copy;                      \
1058     } STMT_END
1059
1060 #ifdef PURIFY
1061 #if !(NVSIZE <= IVSIZE)
1062 #  define new_XNV()     safemalloc(sizeof(XPVNV))
1063 #endif
1064 #define new_XPVNV()     safemalloc(sizeof(XPVNV))
1065 #define new_XPVMG()     safemalloc(sizeof(XPVMG))
1066
1067 #define del_XPVGV(p)    safefree(p)
1068
1069 #else /* !PURIFY */
1070
1071 #if !(NVSIZE <= IVSIZE)
1072 #  define new_XNV()     new_body_allocated(SVt_NV)
1073 #endif
1074 #define new_XPVNV()     new_body_allocated(SVt_PVNV)
1075 #define new_XPVMG()     new_body_allocated(SVt_PVMG)
1076
1077 #define del_XPVGV(p)    del_body(p + bodies_by_type[SVt_PVGV].offset,   \
1078                                  &PL_body_roots[SVt_PVGV])
1079
1080 #endif /* PURIFY */
1081
1082 /* no arena for you! */
1083
1084 #define new_NOARENA(details) \
1085         safemalloc((details)->body_size + (details)->offset)
1086 #define new_NOARENAZ(details) \
1087         safecalloc((details)->body_size + (details)->offset, 1)
1088
1089 void *
1090 Perl_more_bodies (pTHX_ const svtype sv_type, const size_t body_size,
1091                   const size_t arena_size)
1092 {
1093     void ** const root = &PL_body_roots[sv_type];
1094     struct arena_desc *adesc;
1095     struct arena_set *aroot = (struct arena_set *) PL_body_arenas;
1096     unsigned int curr;
1097     char *start;
1098     const char *end;
1099     const size_t good_arena_size = Perl_malloc_good_size(arena_size);
1100 #if defined(DEBUGGING) && defined(PERL_GLOBAL_STRUCT)
1101     dVAR;
1102 #endif
1103 #if defined(DEBUGGING) && !defined(PERL_GLOBAL_STRUCT_PRIVATE)
1104     static bool done_sanity_check;
1105
1106     /* PERL_GLOBAL_STRUCT_PRIVATE cannot coexist with global
1107      * variables like done_sanity_check. */
1108     if (!done_sanity_check) {
1109         unsigned int i = SVt_LAST;
1110
1111         done_sanity_check = TRUE;
1112
1113         while (i--)
1114             assert (bodies_by_type[i].type == i);
1115     }
1116 #endif
1117
1118     assert(arena_size);
1119
1120     /* may need new arena-set to hold new arena */
1121     if (!aroot || aroot->curr >= aroot->set_size) {
1122         struct arena_set *newroot;
1123         Newxz(newroot, 1, struct arena_set);
1124         newroot->set_size = ARENAS_PER_SET;
1125         newroot->next = aroot;
1126         aroot = newroot;
1127         PL_body_arenas = (void *) newroot;
1128         DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", (void*)aroot));
1129     }
1130
1131     /* ok, now have arena-set with at least 1 empty/available arena-desc */
1132     curr = aroot->curr++;
1133     adesc = &(aroot->set[curr]);
1134     assert(!adesc->arena);
1135     
1136     Newx(adesc->arena, good_arena_size, char);
1137     adesc->size = good_arena_size;
1138     adesc->utype = sv_type;
1139     DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p size %"UVuf"\n", 
1140                           curr, (void*)adesc->arena, (UV)good_arena_size));
1141
1142     start = (char *) adesc->arena;
1143
1144     /* Get the address of the byte after the end of the last body we can fit.
1145        Remember, this is integer division:  */
1146     end = start + good_arena_size / body_size * body_size;
1147
1148     /* computed count doesn't reflect the 1st slot reservation */
1149 #if defined(MYMALLOC) || defined(HAS_MALLOC_GOOD_SIZE)
1150     DEBUG_m(PerlIO_printf(Perl_debug_log,
1151                           "arena %p end %p arena-size %d (from %d) type %d "
1152                           "size %d ct %d\n",
1153                           (void*)start, (void*)end, (int)good_arena_size,
1154                           (int)arena_size, sv_type, (int)body_size,
1155                           (int)good_arena_size / (int)body_size));
1156 #else
1157     DEBUG_m(PerlIO_printf(Perl_debug_log,
1158                           "arena %p end %p arena-size %d type %d size %d ct %d\n",
1159                           (void*)start, (void*)end,
1160                           (int)arena_size, sv_type, (int)body_size,
1161                           (int)good_arena_size / (int)body_size));
1162 #endif
1163     *root = (void *)start;
1164
1165     while (1) {
1166         /* Where the next body would start:  */
1167         char * const next = start + body_size;
1168
1169         if (next >= end) {
1170             /* This is the last body:  */
1171             assert(next == end);
1172
1173             *(void **)start = 0;
1174             return *root;
1175         }
1176
1177         *(void**) start = (void *)next;
1178         start = next;
1179     }
1180 }
1181
1182 /* grab a new thing from the free list, allocating more if necessary.
1183    The inline version is used for speed in hot routines, and the
1184    function using it serves the rest (unless PURIFY).
1185 */
1186 #define new_body_inline(xpv, sv_type) \
1187     STMT_START { \
1188         void ** const r3wt = &PL_body_roots[sv_type]; \
1189         xpv = (PTR_TBL_ENT_t*) (*((void **)(r3wt))      \
1190           ? *((void **)(r3wt)) : Perl_more_bodies(aTHX_ sv_type, \
1191                                              bodies_by_type[sv_type].body_size,\
1192                                              bodies_by_type[sv_type].arena_size)); \
1193         *(r3wt) = *(void**)(xpv); \
1194     } STMT_END
1195
1196 #ifndef PURIFY
1197
1198 STATIC void *
1199 S_new_body(pTHX_ const svtype sv_type)
1200 {
1201     void *xpv;
1202     new_body_inline(xpv, sv_type);
1203     return xpv;
1204 }
1205
1206 #endif
1207
1208 static const struct body_details fake_rv =
1209     { 0, 0, 0, SVt_IV, FALSE, NONV, NOARENA, 0 };
1210
1211 /*
1212 =for apidoc sv_upgrade
1213
1214 Upgrade an SV to a more complex form.  Generally adds a new body type to the
1215 SV, then copies across as much information as possible from the old body.
1216 It croaks if the SV is already in a more complex form than requested.  You
1217 generally want to use the C<SvUPGRADE> macro wrapper, which checks the type
1218 before calling C<sv_upgrade>, and hence does not croak.  See also
1219 C<L</svtype>>.
1220
1221 =cut
1222 */
1223
1224 void
1225 Perl_sv_upgrade(pTHX_ SV *const sv, svtype new_type)
1226 {
1227     void*       old_body;
1228     void*       new_body;
1229     const svtype old_type = SvTYPE(sv);
1230     const struct body_details *new_type_details;
1231     const struct body_details *old_type_details
1232         = bodies_by_type + old_type;
1233     SV *referant = NULL;
1234
1235     PERL_ARGS_ASSERT_SV_UPGRADE;
1236
1237     if (old_type == new_type)
1238         return;
1239
1240     /* This clause was purposefully added ahead of the early return above to
1241        the shared string hackery for (sort {$a <=> $b} keys %hash), with the
1242        inference by Nick I-S that it would fix other troublesome cases. See
1243        changes 7162, 7163 (f130fd4589cf5fbb24149cd4db4137c8326f49c1 and parent)
1244
1245        Given that shared hash key scalars are no longer PVIV, but PV, there is
1246        no longer need to unshare so as to free up the IVX slot for its proper
1247        purpose. So it's safe to move the early return earlier.  */
1248
1249     if (new_type > SVt_PVMG && SvIsCOW(sv)) {
1250         sv_force_normal_flags(sv, 0);
1251     }
1252
1253     old_body = SvANY(sv);
1254
1255     /* Copying structures onto other structures that have been neatly zeroed
1256        has a subtle gotcha. Consider XPVMG
1257
1258        +------+------+------+------+------+-------+-------+
1259        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |
1260        +------+------+------+------+------+-------+-------+
1261        0      4      8     12     16     20      24      28
1262
1263        where NVs are aligned to 8 bytes, so that sizeof that structure is
1264        actually 32 bytes long, with 4 bytes of padding at the end:
1265
1266        +------+------+------+------+------+-------+-------+------+
1267        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH | ???  |
1268        +------+------+------+------+------+-------+-------+------+
1269        0      4      8     12     16     20      24      28     32
1270
1271        so what happens if you allocate memory for this structure:
1272
1273        +------+------+------+------+------+-------+-------+------+------+...
1274        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |  GP  | NAME |
1275        +------+------+------+------+------+-------+-------+------+------+...
1276        0      4      8     12     16     20      24      28     32     36
1277
1278        zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1279        expect, because you copy the area marked ??? onto GP. Now, ??? may have
1280        started out as zero once, but it's quite possible that it isn't. So now,
1281        rather than a nicely zeroed GP, you have it pointing somewhere random.
1282        Bugs ensue.
1283
1284        (In fact, GP ends up pointing at a previous GP structure, because the
1285        principle cause of the padding in XPVMG getting garbage is a copy of
1286        sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob. Right now
1287        this happens to be moot because XPVGV has been re-ordered, with GP
1288        no longer after STASH)
1289
1290        So we are careful and work out the size of used parts of all the
1291        structures.  */
1292
1293     switch (old_type) {
1294     case SVt_NULL:
1295         break;
1296     case SVt_IV:
1297         if (SvROK(sv)) {
1298             referant = SvRV(sv);
1299             old_type_details = &fake_rv;
1300             if (new_type == SVt_NV)
1301                 new_type = SVt_PVNV;
1302         } else {
1303             if (new_type < SVt_PVIV) {
1304                 new_type = (new_type == SVt_NV)
1305                     ? SVt_PVNV : SVt_PVIV;
1306             }
1307         }
1308         break;
1309     case SVt_NV:
1310         if (new_type < SVt_PVNV) {
1311             new_type = SVt_PVNV;
1312         }
1313         break;
1314     case SVt_PV:
1315         assert(new_type > SVt_PV);
1316         STATIC_ASSERT_STMT(SVt_IV < SVt_PV);
1317         STATIC_ASSERT_STMT(SVt_NV < SVt_PV);
1318         break;
1319     case SVt_PVIV:
1320         break;
1321     case SVt_PVNV:
1322         break;
1323     case SVt_PVMG:
1324         /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1325            there's no way that it can be safely upgraded, because perl.c
1326            expects to Safefree(SvANY(PL_mess_sv))  */
1327         assert(sv != PL_mess_sv);
1328         break;
1329     default:
1330         if (UNLIKELY(old_type_details->cant_upgrade))
1331             Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1332                        sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
1333     }
1334
1335     if (UNLIKELY(old_type > new_type))
1336         Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1337                 (int)old_type, (int)new_type);
1338
1339     new_type_details = bodies_by_type + new_type;
1340
1341     SvFLAGS(sv) &= ~SVTYPEMASK;
1342     SvFLAGS(sv) |= new_type;
1343
1344     /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1345        the return statements above will have triggered.  */
1346     assert (new_type != SVt_NULL);
1347     switch (new_type) {
1348     case SVt_IV:
1349         assert(old_type == SVt_NULL);
1350         SET_SVANY_FOR_BODYLESS_IV(sv);
1351         SvIV_set(sv, 0);
1352         return;
1353     case SVt_NV:
1354         assert(old_type == SVt_NULL);
1355 #if NVSIZE <= IVSIZE
1356         SET_SVANY_FOR_BODYLESS_NV(sv);
1357 #else
1358         SvANY(sv) = new_XNV();
1359 #endif
1360         SvNV_set(sv, 0);
1361         return;
1362     case SVt_PVHV:
1363     case SVt_PVAV:
1364         assert(new_type_details->body_size);
1365
1366 #ifndef PURIFY  
1367         assert(new_type_details->arena);
1368         assert(new_type_details->arena_size);
1369         /* This points to the start of the allocated area.  */
1370         new_body_inline(new_body, new_type);
1371         Zero(new_body, new_type_details->body_size, char);
1372         new_body = ((char *)new_body) - new_type_details->offset;
1373 #else
1374         /* We always allocated the full length item with PURIFY. To do this
1375            we fake things so that arena is false for all 16 types..  */
1376         new_body = new_NOARENAZ(new_type_details);
1377 #endif
1378         SvANY(sv) = new_body;
1379         if (new_type == SVt_PVAV) {
1380             AvMAX(sv)   = -1;
1381             AvFILLp(sv) = -1;
1382             AvREAL_only(sv);
1383             if (old_type_details->body_size) {
1384                 AvALLOC(sv) = 0;
1385             } else {
1386                 /* It will have been zeroed when the new body was allocated.
1387                    Lets not write to it, in case it confuses a write-back
1388                    cache.  */
1389             }
1390         } else {
1391             assert(!SvOK(sv));
1392             SvOK_off(sv);
1393 #ifndef NODEFAULT_SHAREKEYS
1394             HvSHAREKEYS_on(sv);         /* key-sharing on by default */
1395 #endif
1396             /* start with PERL_HASH_DEFAULT_HvMAX+1 buckets: */
1397             HvMAX(sv) = PERL_HASH_DEFAULT_HvMAX;
1398         }
1399
1400         /* SVt_NULL isn't the only thing upgraded to AV or HV.
1401            The target created by newSVrv also is, and it can have magic.
1402            However, it never has SvPVX set.
1403         */
1404         if (old_type == SVt_IV) {
1405             assert(!SvROK(sv));
1406         } else if (old_type >= SVt_PV) {
1407             assert(SvPVX_const(sv) == 0);
1408         }
1409
1410         if (old_type >= SVt_PVMG) {
1411             SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic);
1412             SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
1413         } else {
1414             sv->sv_u.svu_array = NULL; /* or svu_hash  */
1415         }
1416         break;
1417
1418     case SVt_PVIV:
1419         /* XXX Is this still needed?  Was it ever needed?   Surely as there is
1420            no route from NV to PVIV, NOK can never be true  */
1421         assert(!SvNOKp(sv));
1422         assert(!SvNOK(sv));
1423         /* FALLTHROUGH */
1424     case SVt_PVIO:
1425     case SVt_PVFM:
1426     case SVt_PVGV:
1427     case SVt_PVCV:
1428     case SVt_PVLV:
1429     case SVt_INVLIST:
1430     case SVt_REGEXP:
1431     case SVt_PVMG:
1432     case SVt_PVNV:
1433     case SVt_PV:
1434
1435         assert(new_type_details->body_size);
1436         /* We always allocated the full length item with PURIFY. To do this
1437            we fake things so that arena is false for all 16 types..  */
1438         if(new_type_details->arena) {
1439             /* This points to the start of the allocated area.  */
1440             new_body_inline(new_body, new_type);
1441             Zero(new_body, new_type_details->body_size, char);
1442             new_body = ((char *)new_body) - new_type_details->offset;
1443         } else {
1444             new_body = new_NOARENAZ(new_type_details);
1445         }
1446         SvANY(sv) = new_body;
1447
1448         if (old_type_details->copy) {
1449             /* There is now the potential for an upgrade from something without
1450                an offset (PVNV or PVMG) to something with one (PVCV, PVFM)  */
1451             int offset = old_type_details->offset;
1452             int length = old_type_details->copy;
1453
1454             if (new_type_details->offset > old_type_details->offset) {
1455                 const int difference
1456                     = new_type_details->offset - old_type_details->offset;
1457                 offset += difference;
1458                 length -= difference;
1459             }
1460             assert (length >= 0);
1461                 
1462             Copy((char *)old_body + offset, (char *)new_body + offset, length,
1463                  char);
1464         }
1465
1466 #ifndef NV_ZERO_IS_ALLBITS_ZERO
1467         /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
1468          * correct 0.0 for us.  Otherwise, if the old body didn't have an
1469          * NV slot, but the new one does, then we need to initialise the
1470          * freshly created NV slot with whatever the correct bit pattern is
1471          * for 0.0  */
1472         if (old_type_details->zero_nv && !new_type_details->zero_nv
1473             && !isGV_with_GP(sv))
1474             SvNV_set(sv, 0);
1475 #endif
1476
1477         if (UNLIKELY(new_type == SVt_PVIO)) {
1478             IO * const io = MUTABLE_IO(sv);
1479             GV *iogv = gv_fetchpvs("IO::File::", GV_ADD, SVt_PVHV);
1480
1481             SvOBJECT_on(io);
1482             /* Clear the stashcache because a new IO could overrule a package
1483                name */
1484             DEBUG_o(Perl_deb(aTHX_ "sv_upgrade clearing PL_stashcache\n"));
1485             hv_clear(PL_stashcache);
1486
1487             SvSTASH_set(io, MUTABLE_HV(SvREFCNT_inc(GvHV(iogv))));
1488             IoPAGE_LEN(sv) = 60;
1489         }
1490         if (UNLIKELY(new_type == SVt_REGEXP))
1491             sv->sv_u.svu_rx = (regexp *)new_body;
1492         else if (old_type < SVt_PV) {
1493             /* referant will be NULL unless the old type was SVt_IV emulating
1494                SVt_RV */
1495             sv->sv_u.svu_rv = referant;
1496         }
1497         break;
1498     default:
1499         Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1500                    (unsigned long)new_type);
1501     }
1502
1503     /* if this is zero, this is a body-less SVt_NULL, SVt_IV/SVt_RV,
1504        and sometimes SVt_NV */
1505     if (old_type_details->body_size) {
1506 #ifdef PURIFY
1507         safefree(old_body);
1508 #else
1509         /* Note that there is an assumption that all bodies of types that
1510            can be upgraded came from arenas. Only the more complex non-
1511            upgradable types are allowed to be directly malloc()ed.  */
1512         assert(old_type_details->arena);
1513         del_body((void*)((char*)old_body + old_type_details->offset),
1514                  &PL_body_roots[old_type]);
1515 #endif
1516     }
1517 }
1518
1519 /*
1520 =for apidoc sv_backoff
1521
1522 Remove any string offset.  You should normally use the C<SvOOK_off> macro
1523 wrapper instead.
1524
1525 =cut
1526 */
1527
1528 /* prior to 5.000 stable, this function returned the new OOK-less SvFLAGS
1529    prior to 5.23.4 this function always returned 0
1530 */
1531
1532 void
1533 Perl_sv_backoff(SV *const sv)
1534 {
1535     STRLEN delta;
1536     const char * const s = SvPVX_const(sv);
1537
1538     PERL_ARGS_ASSERT_SV_BACKOFF;
1539
1540     assert(SvOOK(sv));
1541     assert(SvTYPE(sv) != SVt_PVHV);
1542     assert(SvTYPE(sv) != SVt_PVAV);
1543
1544     SvOOK_offset(sv, delta);
1545     
1546     SvLEN_set(sv, SvLEN(sv) + delta);
1547     SvPV_set(sv, SvPVX(sv) - delta);
1548     SvFLAGS(sv) &= ~SVf_OOK;
1549     Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1550     return;
1551 }
1552
1553 /*
1554 =for apidoc sv_grow
1555
1556 Expands the character buffer in the SV.  If necessary, uses C<sv_unref> and
1557 upgrades the SV to C<SVt_PV>.  Returns a pointer to the character buffer.
1558 Use the C<SvGROW> wrapper instead.
1559
1560 =cut
1561 */
1562
1563 static void S_sv_uncow(pTHX_ SV * const sv, const U32 flags);
1564
1565 char *
1566 Perl_sv_grow(pTHX_ SV *const sv, STRLEN newlen)
1567 {
1568     char *s;
1569
1570     PERL_ARGS_ASSERT_SV_GROW;
1571
1572     if (SvROK(sv))
1573         sv_unref(sv);
1574     if (SvTYPE(sv) < SVt_PV) {
1575         sv_upgrade(sv, SVt_PV);
1576         s = SvPVX_mutable(sv);
1577     }
1578     else if (SvOOK(sv)) {       /* pv is offset? */
1579         sv_backoff(sv);
1580         s = SvPVX_mutable(sv);
1581         if (newlen > SvLEN(sv))
1582             newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1583     }
1584     else
1585     {
1586         if (SvIsCOW(sv)) S_sv_uncow(aTHX_ sv, 0);
1587         s = SvPVX_mutable(sv);
1588     }
1589
1590 #ifdef PERL_COPY_ON_WRITE
1591     /* the new COW scheme uses SvPVX(sv)[SvLEN(sv)-1] (if spare)
1592      * to store the COW count. So in general, allocate one more byte than
1593      * asked for, to make it likely this byte is always spare: and thus
1594      * make more strings COW-able.
1595      * If the new size is a big power of two, don't bother: we assume the
1596      * caller wanted a nice 2^N sized block and will be annoyed at getting
1597      * 2^N+1.
1598      * Only increment if the allocation isn't MEM_SIZE_MAX,
1599      * otherwise it will wrap to 0.
1600      */
1601     if (newlen & 0xff && newlen != MEM_SIZE_MAX)
1602         newlen++;
1603 #endif
1604
1605 #if defined(PERL_USE_MALLOC_SIZE) && defined(Perl_safesysmalloc_size)
1606 #define PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1607 #endif
1608
1609     if (newlen > SvLEN(sv)) {           /* need more room? */
1610         STRLEN minlen = SvCUR(sv);
1611         minlen += (minlen >> PERL_STRLEN_EXPAND_SHIFT) + 10;
1612         if (newlen < minlen)
1613             newlen = minlen;
1614 #ifndef PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1615
1616         /* Don't round up on the first allocation, as odds are pretty good that
1617          * the initial request is accurate as to what is really needed */
1618         if (SvLEN(sv)) {
1619             STRLEN rounded = PERL_STRLEN_ROUNDUP(newlen);
1620             if (rounded > newlen)
1621                 newlen = rounded;
1622         }
1623 #endif
1624         if (SvLEN(sv) && s) {
1625             s = (char*)saferealloc(s, newlen);
1626         }
1627         else {
1628             s = (char*)safemalloc(newlen);
1629             if (SvPVX_const(sv) && SvCUR(sv)) {
1630                 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1631             }
1632         }
1633         SvPV_set(sv, s);
1634 #ifdef PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1635         /* Do this here, do it once, do it right, and then we will never get
1636            called back into sv_grow() unless there really is some growing
1637            needed.  */
1638         SvLEN_set(sv, Perl_safesysmalloc_size(s));
1639 #else
1640         SvLEN_set(sv, newlen);
1641 #endif
1642     }
1643     return s;
1644 }
1645
1646 /*
1647 =for apidoc sv_setiv
1648
1649 Copies an integer into the given SV, upgrading first if necessary.
1650 Does not handle 'set' magic.  See also C<L</sv_setiv_mg>>.
1651
1652 =cut
1653 */
1654
1655 void
1656 Perl_sv_setiv(pTHX_ SV *const sv, const IV i)
1657 {
1658     PERL_ARGS_ASSERT_SV_SETIV;
1659
1660     SV_CHECK_THINKFIRST_COW_DROP(sv);
1661     switch (SvTYPE(sv)) {
1662     case SVt_NULL:
1663     case SVt_NV:
1664         sv_upgrade(sv, SVt_IV);
1665         break;
1666     case SVt_PV:
1667         sv_upgrade(sv, SVt_PVIV);
1668         break;
1669
1670     case SVt_PVGV:
1671         if (!isGV_with_GP(sv))
1672             break;
1673     case SVt_PVAV:
1674     case SVt_PVHV:
1675     case SVt_PVCV:
1676     case SVt_PVFM:
1677     case SVt_PVIO:
1678         /* diag_listed_as: Can't coerce %s to %s in %s */
1679         Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1680                    OP_DESC(PL_op));
1681         break;
1682     default: NOOP;
1683     }
1684     (void)SvIOK_only(sv);                       /* validate number */
1685     SvIV_set(sv, i);
1686     SvTAINT(sv);
1687 }
1688
1689 /*
1690 =for apidoc sv_setiv_mg
1691
1692 Like C<sv_setiv>, but also handles 'set' magic.
1693
1694 =cut
1695 */
1696
1697 void
1698 Perl_sv_setiv_mg(pTHX_ SV *const sv, const IV i)
1699 {
1700     PERL_ARGS_ASSERT_SV_SETIV_MG;
1701
1702     sv_setiv(sv,i);
1703     SvSETMAGIC(sv);
1704 }
1705
1706 /*
1707 =for apidoc sv_setuv
1708
1709 Copies an unsigned integer into the given SV, upgrading first if necessary.
1710 Does not handle 'set' magic.  See also C<L</sv_setuv_mg>>.
1711
1712 =cut
1713 */
1714
1715 void
1716 Perl_sv_setuv(pTHX_ SV *const sv, const UV u)
1717 {
1718     PERL_ARGS_ASSERT_SV_SETUV;
1719
1720     /* With the if statement to ensure that integers are stored as IVs whenever
1721        possible:
1722        u=1.49  s=0.52  cu=72.49  cs=10.64  scripts=270  tests=20865
1723
1724        without
1725        u=1.35  s=0.47  cu=73.45  cs=11.43  scripts=270  tests=20865
1726
1727        If you wish to remove the following if statement, so that this routine
1728        (and its callers) always return UVs, please benchmark to see what the
1729        effect is. Modern CPUs may be different. Or may not :-)
1730     */
1731     if (u <= (UV)IV_MAX) {
1732        sv_setiv(sv, (IV)u);
1733        return;
1734     }
1735     sv_setiv(sv, 0);
1736     SvIsUV_on(sv);
1737     SvUV_set(sv, u);
1738 }
1739
1740 /*
1741 =for apidoc sv_setuv_mg
1742
1743 Like C<sv_setuv>, but also handles 'set' magic.
1744
1745 =cut
1746 */
1747
1748 void
1749 Perl_sv_setuv_mg(pTHX_ SV *const sv, const UV u)
1750 {
1751     PERL_ARGS_ASSERT_SV_SETUV_MG;
1752
1753     sv_setuv(sv,u);
1754     SvSETMAGIC(sv);
1755 }
1756
1757 /*
1758 =for apidoc sv_setnv
1759
1760 Copies a double into the given SV, upgrading first if necessary.
1761 Does not handle 'set' magic.  See also C<L</sv_setnv_mg>>.
1762
1763 =cut
1764 */
1765
1766 void
1767 Perl_sv_setnv(pTHX_ SV *const sv, const NV num)
1768 {
1769     PERL_ARGS_ASSERT_SV_SETNV;
1770
1771     SV_CHECK_THINKFIRST_COW_DROP(sv);
1772     switch (SvTYPE(sv)) {
1773     case SVt_NULL:
1774     case SVt_IV:
1775         sv_upgrade(sv, SVt_NV);
1776         break;
1777     case SVt_PV:
1778     case SVt_PVIV:
1779         sv_upgrade(sv, SVt_PVNV);
1780         break;
1781
1782     case SVt_PVGV:
1783         if (!isGV_with_GP(sv))
1784             break;
1785     case SVt_PVAV:
1786     case SVt_PVHV:
1787     case SVt_PVCV:
1788     case SVt_PVFM:
1789     case SVt_PVIO:
1790         /* diag_listed_as: Can't coerce %s to %s in %s */
1791         Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1792                    OP_DESC(PL_op));
1793         break;
1794     default: NOOP;
1795     }
1796     SvNV_set(sv, num);
1797     (void)SvNOK_only(sv);                       /* validate number */
1798     SvTAINT(sv);
1799 }
1800
1801 /*
1802 =for apidoc sv_setnv_mg
1803
1804 Like C<sv_setnv>, but also handles 'set' magic.
1805
1806 =cut
1807 */
1808
1809 void
1810 Perl_sv_setnv_mg(pTHX_ SV *const sv, const NV num)
1811 {
1812     PERL_ARGS_ASSERT_SV_SETNV_MG;
1813
1814     sv_setnv(sv,num);
1815     SvSETMAGIC(sv);
1816 }
1817
1818 /* Return a cleaned-up, printable version of sv, for non-numeric, or
1819  * not incrementable warning display.
1820  * Originally part of S_not_a_number().
1821  * The return value may be != tmpbuf.
1822  */
1823
1824 STATIC const char *
1825 S_sv_display(pTHX_ SV *const sv, char *tmpbuf, STRLEN tmpbuf_size) {
1826     const char *pv;
1827
1828      PERL_ARGS_ASSERT_SV_DISPLAY;
1829
1830      if (DO_UTF8(sv)) {
1831           SV *dsv = newSVpvs_flags("", SVs_TEMP);
1832           pv = sv_uni_display(dsv, sv, 32, UNI_DISPLAY_ISPRINT);
1833      } else {
1834           char *d = tmpbuf;
1835           const char * const limit = tmpbuf + tmpbuf_size - 8;
1836           /* each *s can expand to 4 chars + "...\0",
1837              i.e. need room for 8 chars */
1838         
1839           const char *s = SvPVX_const(sv);
1840           const char * const end = s + SvCUR(sv);
1841           for ( ; s < end && d < limit; s++ ) {
1842                int ch = *s & 0xFF;
1843                if (! isASCII(ch) && !isPRINT_LC(ch)) {
1844                     *d++ = 'M';
1845                     *d++ = '-';
1846
1847                     /* Map to ASCII "equivalent" of Latin1 */
1848                     ch = LATIN1_TO_NATIVE(NATIVE_TO_LATIN1(ch) & 127);
1849                }
1850                if (ch == '\n') {
1851                     *d++ = '\\';
1852                     *d++ = 'n';
1853                }
1854                else if (ch == '\r') {
1855                     *d++ = '\\';
1856                     *d++ = 'r';
1857                }
1858                else if (ch == '\f') {
1859                     *d++ = '\\';
1860                     *d++ = 'f';
1861                }
1862                else if (ch == '\\') {
1863                     *d++ = '\\';
1864                     *d++ = '\\';
1865                }
1866                else if (ch == '\0') {
1867                     *d++ = '\\';
1868                     *d++ = '0';
1869                }
1870                else if (isPRINT_LC(ch))
1871                     *d++ = ch;
1872                else {
1873                     *d++ = '^';
1874                     *d++ = toCTRL(ch);
1875                }
1876           }
1877           if (s < end) {
1878                *d++ = '.';
1879                *d++ = '.';
1880                *d++ = '.';
1881           }
1882           *d = '\0';
1883           pv = tmpbuf;
1884     }
1885
1886     return pv;
1887 }
1888
1889 /* Print an "isn't numeric" warning, using a cleaned-up,
1890  * printable version of the offending string
1891  */
1892
1893 STATIC void
1894 S_not_a_number(pTHX_ SV *const sv)
1895 {
1896      char tmpbuf[64];
1897      const char *pv;
1898
1899      PERL_ARGS_ASSERT_NOT_A_NUMBER;
1900
1901      pv = sv_display(sv, tmpbuf, sizeof(tmpbuf));
1902
1903     if (PL_op)
1904         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1905                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1906                     "Argument \"%s\" isn't numeric in %s", pv,
1907                     OP_DESC(PL_op));
1908     else
1909         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1910                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1911                     "Argument \"%s\" isn't numeric", pv);
1912 }
1913
1914 STATIC void
1915 S_not_incrementable(pTHX_ SV *const sv) {
1916      char tmpbuf[64];
1917      const char *pv;
1918
1919      PERL_ARGS_ASSERT_NOT_INCREMENTABLE;
1920
1921      pv = sv_display(sv, tmpbuf, sizeof(tmpbuf));
1922
1923      Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1924                  "Argument \"%s\" treated as 0 in increment (++)", pv);
1925 }
1926
1927 /*
1928 =for apidoc looks_like_number
1929
1930 Test if the content of an SV looks like a number (or is a number).
1931 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1932 non-numeric warning), even if your C<atof()> doesn't grok them.  Get-magic is
1933 ignored.
1934
1935 =cut
1936 */
1937
1938 I32
1939 Perl_looks_like_number(pTHX_ SV *const sv)
1940 {
1941     const char *sbegin;
1942     STRLEN len;
1943     int numtype;
1944
1945     PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER;
1946
1947     if (SvPOK(sv) || SvPOKp(sv)) {
1948         sbegin = SvPV_nomg_const(sv, len);
1949     }
1950     else
1951         return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1952     numtype = grok_number(sbegin, len, NULL);
1953     return ((numtype & IS_NUMBER_TRAILING)) ? 0 : numtype;
1954 }
1955
1956 STATIC bool
1957 S_glob_2number(pTHX_ GV * const gv)
1958 {
1959     PERL_ARGS_ASSERT_GLOB_2NUMBER;
1960
1961     /* We know that all GVs stringify to something that is not-a-number,
1962         so no need to test that.  */
1963     if (ckWARN(WARN_NUMERIC))
1964     {
1965         SV *const buffer = sv_newmortal();
1966         gv_efullname3(buffer, gv, "*");
1967         not_a_number(buffer);
1968     }
1969     /* We just want something true to return, so that S_sv_2iuv_common
1970         can tail call us and return true.  */
1971     return TRUE;
1972 }
1973
1974 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1975    until proven guilty, assume that things are not that bad... */
1976
1977 /*
1978    NV_PRESERVES_UV:
1979
1980    As 64 bit platforms often have an NV that doesn't preserve all bits of
1981    an IV (an assumption perl has been based on to date) it becomes necessary
1982    to remove the assumption that the NV always carries enough precision to
1983    recreate the IV whenever needed, and that the NV is the canonical form.
1984    Instead, IV/UV and NV need to be given equal rights. So as to not lose
1985    precision as a side effect of conversion (which would lead to insanity
1986    and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1987    1) to distinguish between IV/UV/NV slots that have a valid conversion cached
1988       where precision was lost, and IV/UV/NV slots that have a valid conversion
1989       which has lost no precision
1990    2) to ensure that if a numeric conversion to one form is requested that
1991       would lose precision, the precise conversion (or differently
1992       imprecise conversion) is also performed and cached, to prevent
1993       requests for different numeric formats on the same SV causing
1994       lossy conversion chains. (lossless conversion chains are perfectly
1995       acceptable (still))
1996
1997
1998    flags are used:
1999    SvIOKp is true if the IV slot contains a valid value
2000    SvIOK  is true only if the IV value is accurate (UV if SvIOK_UV true)
2001    SvNOKp is true if the NV slot contains a valid value
2002    SvNOK  is true only if the NV value is accurate
2003
2004    so
2005    while converting from PV to NV, check to see if converting that NV to an
2006    IV(or UV) would lose accuracy over a direct conversion from PV to
2007    IV(or UV). If it would, cache both conversions, return NV, but mark
2008    SV as IOK NOKp (ie not NOK).
2009
2010    While converting from PV to IV, check to see if converting that IV to an
2011    NV would lose accuracy over a direct conversion from PV to NV. If it
2012    would, cache both conversions, flag similarly.
2013
2014    Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
2015    correctly because if IV & NV were set NV *always* overruled.
2016    Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
2017    changes - now IV and NV together means that the two are interchangeable:
2018    SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
2019
2020    The benefit of this is that operations such as pp_add know that if
2021    SvIOK is true for both left and right operands, then integer addition
2022    can be used instead of floating point (for cases where the result won't
2023    overflow). Before, floating point was always used, which could lead to
2024    loss of precision compared with integer addition.
2025
2026    * making IV and NV equal status should make maths accurate on 64 bit
2027      platforms
2028    * may speed up maths somewhat if pp_add and friends start to use
2029      integers when possible instead of fp. (Hopefully the overhead in
2030      looking for SvIOK and checking for overflow will not outweigh the
2031      fp to integer speedup)
2032    * will slow down integer operations (callers of SvIV) on "inaccurate"
2033      values, as the change from SvIOK to SvIOKp will cause a call into
2034      sv_2iv each time rather than a macro access direct to the IV slot
2035    * should speed up number->string conversion on integers as IV is
2036      favoured when IV and NV are equally accurate
2037
2038    ####################################################################
2039    You had better be using SvIOK_notUV if you want an IV for arithmetic:
2040    SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
2041    On the other hand, SvUOK is true iff UV.
2042    ####################################################################
2043
2044    Your mileage will vary depending your CPU's relative fp to integer
2045    performance ratio.
2046 */
2047
2048 #ifndef NV_PRESERVES_UV
2049 #  define IS_NUMBER_UNDERFLOW_IV 1
2050 #  define IS_NUMBER_UNDERFLOW_UV 2
2051 #  define IS_NUMBER_IV_AND_UV    2
2052 #  define IS_NUMBER_OVERFLOW_IV  4
2053 #  define IS_NUMBER_OVERFLOW_UV  5
2054
2055 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
2056
2057 /* For sv_2nv these three cases are "SvNOK and don't bother casting"  */
2058 STATIC int
2059 S_sv_2iuv_non_preserve(pTHX_ SV *const sv
2060 #  ifdef DEBUGGING
2061                        , I32 numtype
2062 #  endif
2063                        )
2064 {
2065     PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE;
2066     PERL_UNUSED_CONTEXT;
2067
2068     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));
2069     if (SvNVX(sv) < (NV)IV_MIN) {
2070         (void)SvIOKp_on(sv);
2071         (void)SvNOK_on(sv);
2072         SvIV_set(sv, IV_MIN);
2073         return IS_NUMBER_UNDERFLOW_IV;
2074     }
2075     if (SvNVX(sv) > (NV)UV_MAX) {
2076         (void)SvIOKp_on(sv);
2077         (void)SvNOK_on(sv);
2078         SvIsUV_on(sv);
2079         SvUV_set(sv, UV_MAX);
2080         return IS_NUMBER_OVERFLOW_UV;
2081     }
2082     (void)SvIOKp_on(sv);
2083     (void)SvNOK_on(sv);
2084     /* Can't use strtol etc to convert this string.  (See truth table in
2085        sv_2iv  */
2086     if (SvNVX(sv) <= (UV)IV_MAX) {
2087         SvIV_set(sv, I_V(SvNVX(sv)));
2088         if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2089             SvIOK_on(sv); /* Integer is precise. NOK, IOK */
2090         } else {
2091             /* Integer is imprecise. NOK, IOKp */
2092         }
2093         return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
2094     }
2095     SvIsUV_on(sv);
2096     SvUV_set(sv, U_V(SvNVX(sv)));
2097     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2098         if (SvUVX(sv) == UV_MAX) {
2099             /* As we know that NVs don't preserve UVs, UV_MAX cannot
2100                possibly be preserved by NV. Hence, it must be overflow.
2101                NOK, IOKp */
2102             return IS_NUMBER_OVERFLOW_UV;
2103         }
2104         SvIOK_on(sv); /* Integer is precise. NOK, UOK */
2105     } else {
2106         /* Integer is imprecise. NOK, IOKp */
2107     }
2108     return IS_NUMBER_OVERFLOW_IV;
2109 }
2110 #endif /* !NV_PRESERVES_UV*/
2111
2112 /* If numtype is infnan, set the NV of the sv accordingly.
2113  * If numtype is anything else, try setting the NV using Atof(PV). */
2114 #ifdef USING_MSVC6
2115 #  pragma warning(push)
2116 #  pragma warning(disable:4756;disable:4056)
2117 #endif
2118 static void
2119 S_sv_setnv(pTHX_ SV* sv, int numtype)
2120 {
2121     bool pok = cBOOL(SvPOK(sv));
2122     bool nok = FALSE;
2123     if ((numtype & IS_NUMBER_INFINITY)) {
2124         SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -NV_INF : NV_INF);
2125         nok = TRUE;
2126     }
2127     else if ((numtype & IS_NUMBER_NAN)) {
2128         SvNV_set(sv, NV_NAN);
2129         nok = TRUE;
2130     }
2131     else if (pok) {
2132         SvNV_set(sv, Atof(SvPVX_const(sv)));
2133         /* Purposefully no true nok here, since we don't want to blow
2134          * away the possible IOK/UV of an existing sv. */
2135     }
2136     if (nok) {
2137         SvNOK_only(sv); /* No IV or UV please, this is pure infnan. */
2138         if (pok)
2139             SvPOK_on(sv); /* PV is okay, though. */
2140     }
2141 }
2142 #ifdef USING_MSVC6
2143 #  pragma warning(pop)
2144 #endif
2145
2146 STATIC bool
2147 S_sv_2iuv_common(pTHX_ SV *const sv)
2148 {
2149     PERL_ARGS_ASSERT_SV_2IUV_COMMON;
2150
2151     if (SvNOKp(sv)) {
2152         /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2153          * without also getting a cached IV/UV from it at the same time
2154          * (ie PV->NV conversion should detect loss of accuracy and cache
2155          * IV or UV at same time to avoid this. */
2156         /* IV-over-UV optimisation - choose to cache IV if possible */
2157
2158         if (SvTYPE(sv) == SVt_NV)
2159             sv_upgrade(sv, SVt_PVNV);
2160
2161         (void)SvIOKp_on(sv);    /* Must do this first, to clear any SvOOK */
2162         /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
2163            certainly cast into the IV range at IV_MAX, whereas the correct
2164            answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
2165            cases go to UV */
2166 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2167         if (Perl_isnan(SvNVX(sv))) {
2168             SvUV_set(sv, 0);
2169             SvIsUV_on(sv);
2170             return FALSE;
2171         }
2172 #endif
2173         if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2174             SvIV_set(sv, I_V(SvNVX(sv)));
2175             if (SvNVX(sv) == (NV) SvIVX(sv)
2176 #ifndef NV_PRESERVES_UV
2177                 && SvIVX(sv) != IV_MIN /* avoid negating IV_MIN below */
2178                 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2179                     (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2180                 /* Don't flag it as "accurately an integer" if the number
2181                    came from a (by definition imprecise) NV operation, and
2182                    we're outside the range of NV integer precision */
2183 #endif
2184                 ) {
2185                 if (SvNOK(sv))
2186                     SvIOK_on(sv);  /* Can this go wrong with rounding? NWC */
2187                 else {
2188                     /* scalar has trailing garbage, eg "42a" */
2189                 }
2190                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2191                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
2192                                       PTR2UV(sv),
2193                                       SvNVX(sv),
2194                                       SvIVX(sv)));
2195
2196             } else {
2197                 /* IV not precise.  No need to convert from PV, as NV
2198                    conversion would already have cached IV if it detected
2199                    that PV->IV would be better than PV->NV->IV
2200                    flags already correct - don't set public IOK.  */
2201                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2202                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
2203                                       PTR2UV(sv),
2204                                       SvNVX(sv),
2205                                       SvIVX(sv)));
2206             }
2207             /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2208                but the cast (NV)IV_MIN rounds to a the value less (more
2209                negative) than IV_MIN which happens to be equal to SvNVX ??
2210                Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2211                NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2212                (NV)UVX == NVX are both true, but the values differ. :-(
2213                Hopefully for 2s complement IV_MIN is something like
2214                0x8000000000000000 which will be exact. NWC */
2215         }
2216         else {
2217             SvUV_set(sv, U_V(SvNVX(sv)));
2218             if (
2219                 (SvNVX(sv) == (NV) SvUVX(sv))
2220 #ifndef  NV_PRESERVES_UV
2221                 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2222                 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2223                 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2224                 /* Don't flag it as "accurately an integer" if the number
2225                    came from a (by definition imprecise) NV operation, and
2226                    we're outside the range of NV integer precision */
2227 #endif
2228                 && SvNOK(sv)
2229                 )
2230                 SvIOK_on(sv);
2231             SvIsUV_on(sv);
2232             DEBUG_c(PerlIO_printf(Perl_debug_log,
2233                                   "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
2234                                   PTR2UV(sv),
2235                                   SvUVX(sv),
2236                                   SvUVX(sv)));
2237         }
2238     }
2239     else if (SvPOKp(sv)) {
2240         UV value;
2241         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2242         /* We want to avoid a possible problem when we cache an IV/ a UV which
2243            may be later translated to an NV, and the resulting NV is not
2244            the same as the direct translation of the initial string
2245            (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2246            be careful to ensure that the value with the .456 is around if the
2247            NV value is requested in the future).
2248         
2249            This means that if we cache such an IV/a UV, we need to cache the
2250            NV as well.  Moreover, we trade speed for space, and do not
2251            cache the NV if we are sure it's not needed.
2252          */
2253
2254         /* SVt_PVNV is one higher than SVt_PVIV, hence this order  */
2255         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2256              == IS_NUMBER_IN_UV) {
2257             /* It's definitely an integer, only upgrade to PVIV */
2258             if (SvTYPE(sv) < SVt_PVIV)
2259                 sv_upgrade(sv, SVt_PVIV);
2260             (void)SvIOK_on(sv);
2261         } else if (SvTYPE(sv) < SVt_PVNV)
2262             sv_upgrade(sv, SVt_PVNV);
2263
2264         if ((numtype & (IS_NUMBER_INFINITY | IS_NUMBER_NAN))) {
2265             if (ckWARN(WARN_NUMERIC) && ((numtype & IS_NUMBER_TRAILING)))
2266                 not_a_number(sv);
2267             S_sv_setnv(aTHX_ sv, numtype);
2268             return FALSE;
2269         }
2270
2271         /* If NVs preserve UVs then we only use the UV value if we know that
2272            we aren't going to call atof() below. If NVs don't preserve UVs
2273            then the value returned may have more precision than atof() will
2274            return, even though value isn't perfectly accurate.  */
2275         if ((numtype & (IS_NUMBER_IN_UV
2276 #ifdef NV_PRESERVES_UV
2277                         | IS_NUMBER_NOT_INT
2278 #endif
2279             )) == IS_NUMBER_IN_UV) {
2280             /* This won't turn off the public IOK flag if it was set above  */
2281             (void)SvIOKp_on(sv);
2282
2283             if (!(numtype & IS_NUMBER_NEG)) {
2284                 /* positive */;
2285                 if (value <= (UV)IV_MAX) {
2286                     SvIV_set(sv, (IV)value);
2287                 } else {
2288                     /* it didn't overflow, and it was positive. */
2289                     SvUV_set(sv, value);
2290                     SvIsUV_on(sv);
2291                 }
2292             } else {
2293                 /* 2s complement assumption  */
2294                 if (value <= (UV)IV_MIN) {
2295                     SvIV_set(sv, value == (UV)IV_MIN
2296                                     ? IV_MIN : -(IV)value);
2297                 } else {
2298                     /* Too negative for an IV.  This is a double upgrade, but
2299                        I'm assuming it will be rare.  */
2300                     if (SvTYPE(sv) < SVt_PVNV)
2301                         sv_upgrade(sv, SVt_PVNV);
2302                     SvNOK_on(sv);
2303                     SvIOK_off(sv);
2304                     SvIOKp_on(sv);
2305                     SvNV_set(sv, -(NV)value);
2306                     SvIV_set(sv, IV_MIN);
2307                 }
2308             }
2309         }
2310         /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2311            will be in the previous block to set the IV slot, and the next
2312            block to set the NV slot.  So no else here.  */
2313         
2314         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2315             != IS_NUMBER_IN_UV) {
2316             /* It wasn't an (integer that doesn't overflow the UV). */
2317             S_sv_setnv(aTHX_ sv, numtype);
2318
2319             if (! numtype && ckWARN(WARN_NUMERIC))
2320                 not_a_number(sv);
2321
2322             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" NVgf ")\n",
2323                                   PTR2UV(sv), SvNVX(sv)));
2324
2325 #ifdef NV_PRESERVES_UV
2326             (void)SvIOKp_on(sv);
2327             (void)SvNOK_on(sv);
2328 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2329             if (Perl_isnan(SvNVX(sv))) {
2330                 SvUV_set(sv, 0);
2331                 SvIsUV_on(sv);
2332                 return FALSE;
2333             }
2334 #endif
2335             if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2336                 SvIV_set(sv, I_V(SvNVX(sv)));
2337                 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2338                     SvIOK_on(sv);
2339                 } else {
2340                     NOOP;  /* Integer is imprecise. NOK, IOKp */
2341                 }
2342                 /* UV will not work better than IV */
2343             } else {
2344                 if (SvNVX(sv) > (NV)UV_MAX) {
2345                     SvIsUV_on(sv);
2346                     /* Integer is inaccurate. NOK, IOKp, is UV */
2347                     SvUV_set(sv, UV_MAX);
2348                 } else {
2349                     SvUV_set(sv, U_V(SvNVX(sv)));
2350                     /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2351                        NV preservse UV so can do correct comparison.  */
2352                     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2353                         SvIOK_on(sv);
2354                     } else {
2355                         NOOP;   /* Integer is imprecise. NOK, IOKp, is UV */
2356                     }
2357                 }
2358                 SvIsUV_on(sv);
2359             }
2360 #else /* NV_PRESERVES_UV */
2361             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2362                 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2363                 /* The IV/UV slot will have been set from value returned by
2364                    grok_number above.  The NV slot has just been set using
2365                    Atof.  */
2366                 SvNOK_on(sv);
2367                 assert (SvIOKp(sv));
2368             } else {
2369                 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2370                     U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2371                     /* Small enough to preserve all bits. */
2372                     (void)SvIOKp_on(sv);
2373                     SvNOK_on(sv);
2374                     SvIV_set(sv, I_V(SvNVX(sv)));
2375                     if ((NV)(SvIVX(sv)) == SvNVX(sv))
2376                         SvIOK_on(sv);
2377                     /* Assumption: first non-preserved integer is < IV_MAX,
2378                        this NV is in the preserved range, therefore: */
2379                     if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2380                           < (UV)IV_MAX)) {
2381                         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);
2382                     }
2383                 } else {
2384                     /* IN_UV NOT_INT
2385                          0      0       already failed to read UV.
2386                          0      1       already failed to read UV.
2387                          1      0       you won't get here in this case. IV/UV
2388                                         slot set, public IOK, Atof() unneeded.
2389                          1      1       already read UV.
2390                        so there's no point in sv_2iuv_non_preserve() attempting
2391                        to use atol, strtol, strtoul etc.  */
2392 #  ifdef DEBUGGING
2393                     sv_2iuv_non_preserve (sv, numtype);
2394 #  else
2395                     sv_2iuv_non_preserve (sv);
2396 #  endif
2397                 }
2398             }
2399 #endif /* NV_PRESERVES_UV */
2400         /* It might be more code efficient to go through the entire logic above
2401            and conditionally set with SvIOKp_on() rather than SvIOK(), but it
2402            gets complex and potentially buggy, so more programmer efficient
2403            to do it this way, by turning off the public flags:  */
2404         if (!numtype)
2405             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2406         }
2407     }
2408     else  {
2409         if (isGV_with_GP(sv))
2410             return glob_2number(MUTABLE_GV(sv));
2411
2412         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2413                 report_uninit(sv);
2414         if (SvTYPE(sv) < SVt_IV)
2415             /* Typically the caller expects that sv_any is not NULL now.  */
2416             sv_upgrade(sv, SVt_IV);
2417         /* Return 0 from the caller.  */
2418         return TRUE;
2419     }
2420     return FALSE;
2421 }
2422
2423 /*
2424 =for apidoc sv_2iv_flags
2425
2426 Return the integer value of an SV, doing any necessary string
2427 conversion.  If C<flags> has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.
2428 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2429
2430 =cut
2431 */
2432
2433 IV
2434 Perl_sv_2iv_flags(pTHX_ SV *const sv, const I32 flags)
2435 {
2436     PERL_ARGS_ASSERT_SV_2IV_FLAGS;
2437
2438     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2439          && SvTYPE(sv) != SVt_PVFM);
2440
2441     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2442         mg_get(sv);
2443
2444     if (SvROK(sv)) {
2445         if (SvAMAGIC(sv)) {
2446             SV * tmpstr;
2447             if (flags & SV_SKIP_OVERLOAD)
2448                 return 0;
2449             tmpstr = AMG_CALLunary(sv, numer_amg);
2450             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2451                 return SvIV(tmpstr);
2452             }
2453         }
2454         return PTR2IV(SvRV(sv));
2455     }
2456
2457     if (SvVALID(sv) || isREGEXP(sv)) {
2458         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2459            the same flag bit as SVf_IVisUV, so must not let them cache IVs.
2460            In practice they are extremely unlikely to actually get anywhere
2461            accessible by user Perl code - the only way that I'm aware of is when
2462            a constant subroutine which is used as the second argument to index.
2463
2464            Regexps have no SvIVX and SvNVX fields.
2465         */
2466         assert(isREGEXP(sv) || SvPOKp(sv));
2467         {
2468             UV value;
2469             const char * const ptr =
2470                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2471             const int numtype
2472                 = grok_number(ptr, SvCUR(sv), &value);
2473
2474             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2475                 == IS_NUMBER_IN_UV) {
2476                 /* It's definitely an integer */
2477                 if (numtype & IS_NUMBER_NEG) {
2478                     if (value < (UV)IV_MIN)
2479                         return -(IV)value;
2480                 } else {
2481                     if (value < (UV)IV_MAX)
2482                         return (IV)value;
2483                 }
2484             }
2485
2486             /* Quite wrong but no good choices. */
2487             if ((numtype & IS_NUMBER_INFINITY)) {
2488                 return (numtype & IS_NUMBER_NEG) ? IV_MIN : IV_MAX;
2489             } else if ((numtype & IS_NUMBER_NAN)) {
2490                 return 0; /* So wrong. */
2491             }
2492
2493             if (!numtype) {
2494                 if (ckWARN(WARN_NUMERIC))
2495                     not_a_number(sv);
2496             }
2497             return I_V(Atof(ptr));
2498         }
2499     }
2500
2501     if (SvTHINKFIRST(sv)) {
2502         if (SvREADONLY(sv) && !SvOK(sv)) {
2503             if (ckWARN(WARN_UNINITIALIZED))
2504                 report_uninit(sv);
2505             return 0;
2506         }
2507     }
2508
2509     if (!SvIOKp(sv)) {
2510         if (S_sv_2iuv_common(aTHX_ sv))
2511             return 0;
2512     }
2513
2514     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2515         PTR2UV(sv),SvIVX(sv)));
2516     return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2517 }
2518
2519 /*
2520 =for apidoc sv_2uv_flags
2521
2522 Return the unsigned integer value of an SV, doing any necessary string
2523 conversion.  If C<flags> has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.
2524 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2525
2526 =cut
2527 */
2528
2529 UV
2530 Perl_sv_2uv_flags(pTHX_ SV *const sv, const I32 flags)
2531 {
2532     PERL_ARGS_ASSERT_SV_2UV_FLAGS;
2533
2534     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2535         mg_get(sv);
2536
2537     if (SvROK(sv)) {
2538         if (SvAMAGIC(sv)) {
2539             SV *tmpstr;
2540             if (flags & SV_SKIP_OVERLOAD)
2541                 return 0;
2542             tmpstr = AMG_CALLunary(sv, numer_amg);
2543             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2544                 return SvUV(tmpstr);
2545             }
2546         }
2547         return PTR2UV(SvRV(sv));
2548     }
2549
2550     if (SvVALID(sv) || isREGEXP(sv)) {
2551         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2552            the same flag bit as SVf_IVisUV, so must not let them cache IVs.  
2553            Regexps have no SvIVX and SvNVX fields. */
2554         assert(isREGEXP(sv) || SvPOKp(sv));
2555         {
2556             UV value;
2557             const char * const ptr =
2558                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2559             const int numtype
2560                 = grok_number(ptr, SvCUR(sv), &value);
2561
2562             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2563                 == IS_NUMBER_IN_UV) {
2564                 /* It's definitely an integer */
2565                 if (!(numtype & IS_NUMBER_NEG))
2566                     return value;
2567             }
2568
2569             /* Quite wrong but no good choices. */
2570             if ((numtype & IS_NUMBER_INFINITY)) {
2571                 return UV_MAX; /* So wrong. */
2572             } else if ((numtype & IS_NUMBER_NAN)) {
2573                 return 0; /* So wrong. */
2574             }
2575
2576             if (!numtype) {
2577                 if (ckWARN(WARN_NUMERIC))
2578                     not_a_number(sv);
2579             }
2580             return U_V(Atof(ptr));
2581         }
2582     }
2583
2584     if (SvTHINKFIRST(sv)) {
2585         if (SvREADONLY(sv) && !SvOK(sv)) {
2586             if (ckWARN(WARN_UNINITIALIZED))
2587                 report_uninit(sv);
2588             return 0;
2589         }
2590     }
2591
2592     if (!SvIOKp(sv)) {
2593         if (S_sv_2iuv_common(aTHX_ sv))
2594             return 0;
2595     }
2596
2597     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2598                           PTR2UV(sv),SvUVX(sv)));
2599     return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2600 }
2601
2602 /*
2603 =for apidoc sv_2nv_flags
2604
2605 Return the num value of an SV, doing any necessary string or integer
2606 conversion.  If C<flags> has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.
2607 Normally used via the C<SvNV(sv)> and C<SvNVx(sv)> macros.
2608
2609 =cut
2610 */
2611
2612 NV
2613 Perl_sv_2nv_flags(pTHX_ SV *const sv, const I32 flags)
2614 {
2615     PERL_ARGS_ASSERT_SV_2NV_FLAGS;
2616
2617     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2618          && SvTYPE(sv) != SVt_PVFM);
2619     if (SvGMAGICAL(sv) || SvVALID(sv) || isREGEXP(sv)) {
2620         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2621            the same flag bit as SVf_IVisUV, so must not let them cache NVs.
2622            Regexps have no SvIVX and SvNVX fields.  */
2623         const char *ptr;
2624         if (flags & SV_GMAGIC)
2625             mg_get(sv);
2626         if (SvNOKp(sv))
2627             return SvNVX(sv);
2628         if (SvPOKp(sv) && !SvIOKp(sv)) {
2629             ptr = SvPVX_const(sv);
2630           grokpv:
2631             if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2632                 !grok_number(ptr, SvCUR(sv), NULL))
2633                 not_a_number(sv);
2634             return Atof(ptr);
2635         }
2636         if (SvIOKp(sv)) {
2637             if (SvIsUV(sv))
2638                 return (NV)SvUVX(sv);
2639             else
2640                 return (NV)SvIVX(sv);
2641         }
2642         if (SvROK(sv)) {
2643             goto return_rok;
2644         }
2645         if (isREGEXP(sv)) {
2646             ptr = RX_WRAPPED((REGEXP *)sv);
2647             goto grokpv;
2648         }
2649         assert(SvTYPE(sv) >= SVt_PVMG);
2650         /* This falls through to the report_uninit near the end of the
2651            function. */
2652     } else if (SvTHINKFIRST(sv)) {
2653         if (SvROK(sv)) {
2654         return_rok:
2655             if (SvAMAGIC(sv)) {
2656                 SV *tmpstr;
2657                 if (flags & SV_SKIP_OVERLOAD)
2658                     return 0;
2659                 tmpstr = AMG_CALLunary(sv, numer_amg);
2660                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2661                     return SvNV(tmpstr);
2662                 }
2663             }
2664             return PTR2NV(SvRV(sv));
2665         }
2666         if (SvREADONLY(sv) && !SvOK(sv)) {
2667             if (ckWARN(WARN_UNINITIALIZED))
2668                 report_uninit(sv);
2669             return 0.0;
2670         }
2671     }
2672     if (SvTYPE(sv) < SVt_NV) {
2673         /* The logic to use SVt_PVNV if necessary is in sv_upgrade.  */
2674         sv_upgrade(sv, SVt_NV);
2675         DEBUG_c({
2676             STORE_NUMERIC_LOCAL_SET_STANDARD();
2677             PerlIO_printf(Perl_debug_log,
2678                           "0x%"UVxf" num(%" NVgf ")\n",
2679                           PTR2UV(sv), SvNVX(sv));
2680             RESTORE_NUMERIC_LOCAL();
2681         });
2682     }
2683     else if (SvTYPE(sv) < SVt_PVNV)
2684         sv_upgrade(sv, SVt_PVNV);
2685     if (SvNOKp(sv)) {
2686         return SvNVX(sv);
2687     }
2688     if (SvIOKp(sv)) {
2689         SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2690 #ifdef NV_PRESERVES_UV
2691         if (SvIOK(sv))
2692             SvNOK_on(sv);
2693         else
2694             SvNOKp_on(sv);
2695 #else
2696         /* Only set the public NV OK flag if this NV preserves the IV  */
2697         /* Check it's not 0xFFFFFFFFFFFFFFFF */
2698         if (SvIOK(sv) &&
2699             SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2700                        : (SvIVX(sv) == I_V(SvNVX(sv))))
2701             SvNOK_on(sv);
2702         else
2703             SvNOKp_on(sv);
2704 #endif
2705     }
2706     else if (SvPOKp(sv)) {
2707         UV value;
2708         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2709         if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2710             not_a_number(sv);
2711 #ifdef NV_PRESERVES_UV
2712         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2713             == IS_NUMBER_IN_UV) {
2714             /* It's definitely an integer */
2715             SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2716         } else {
2717             S_sv_setnv(aTHX_ sv, numtype);
2718         }
2719         if (numtype)
2720             SvNOK_on(sv);
2721         else
2722             SvNOKp_on(sv);
2723 #else
2724         SvNV_set(sv, Atof(SvPVX_const(sv)));
2725         /* Only set the public NV OK flag if this NV preserves the value in
2726            the PV at least as well as an IV/UV would.
2727            Not sure how to do this 100% reliably. */
2728         /* if that shift count is out of range then Configure's test is
2729            wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2730            UV_BITS */
2731         if (((UV)1 << NV_PRESERVES_UV_BITS) >
2732             U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2733             SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2734         } else if (!(numtype & IS_NUMBER_IN_UV)) {
2735             /* Can't use strtol etc to convert this string, so don't try.
2736                sv_2iv and sv_2uv will use the NV to convert, not the PV.  */
2737             SvNOK_on(sv);
2738         } else {
2739             /* value has been set.  It may not be precise.  */
2740             if ((numtype & IS_NUMBER_NEG) && (value >= (UV)IV_MIN)) {
2741                 /* 2s complement assumption for (UV)IV_MIN  */
2742                 SvNOK_on(sv); /* Integer is too negative.  */
2743             } else {
2744                 SvNOKp_on(sv);
2745                 SvIOKp_on(sv);
2746
2747                 if (numtype & IS_NUMBER_NEG) {
2748                     /* -IV_MIN is undefined, but we should never reach
2749                      * this point with both IS_NUMBER_NEG and value ==
2750                      * (UV)IV_MIN */
2751                     assert(value != (UV)IV_MIN);
2752                     SvIV_set(sv, -(IV)value);
2753                 } else if (value <= (UV)IV_MAX) {
2754                     SvIV_set(sv, (IV)value);
2755                 } else {
2756                     SvUV_set(sv, value);
2757                     SvIsUV_on(sv);
2758                 }
2759
2760                 if (numtype & IS_NUMBER_NOT_INT) {
2761                     /* I believe that even if the original PV had decimals,
2762                        they are lost beyond the limit of the FP precision.
2763                        However, neither is canonical, so both only get p
2764                        flags.  NWC, 2000/11/25 */
2765                     /* Both already have p flags, so do nothing */
2766                 } else {
2767                     const NV nv = SvNVX(sv);
2768                     /* XXX should this spot have NAN_COMPARE_BROKEN, too? */
2769                     if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2770                         if (SvIVX(sv) == I_V(nv)) {
2771                             SvNOK_on(sv);
2772                         } else {
2773                             /* It had no "." so it must be integer.  */
2774                         }
2775                         SvIOK_on(sv);
2776                     } else {
2777                         /* between IV_MAX and NV(UV_MAX).
2778                            Could be slightly > UV_MAX */
2779
2780                         if (numtype & IS_NUMBER_NOT_INT) {
2781                             /* UV and NV both imprecise.  */
2782                         } else {
2783                             const UV nv_as_uv = U_V(nv);
2784
2785                             if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2786                                 SvNOK_on(sv);
2787                             }
2788                             SvIOK_on(sv);
2789                         }
2790                     }
2791                 }
2792             }
2793         }
2794         /* It might be more code efficient to go through the entire logic above
2795            and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2796            gets complex and potentially buggy, so more programmer efficient
2797            to do it this way, by turning off the public flags:  */
2798         if (!numtype)
2799             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2800 #endif /* NV_PRESERVES_UV */
2801     }
2802     else  {
2803         if (isGV_with_GP(sv)) {
2804             glob_2number(MUTABLE_GV(sv));
2805             return 0.0;
2806         }
2807
2808         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2809             report_uninit(sv);
2810         assert (SvTYPE(sv) >= SVt_NV);
2811         /* Typically the caller expects that sv_any is not NULL now.  */
2812         /* XXX Ilya implies that this is a bug in callers that assume this
2813            and ideally should be fixed.  */
2814         return 0.0;
2815     }
2816     DEBUG_c({
2817         STORE_NUMERIC_LOCAL_SET_STANDARD();
2818         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" NVgf ")\n",
2819                       PTR2UV(sv), SvNVX(sv));
2820         RESTORE_NUMERIC_LOCAL();
2821     });
2822     return SvNVX(sv);
2823 }
2824
2825 /*
2826 =for apidoc sv_2num
2827
2828 Return an SV with the numeric value of the source SV, doing any necessary
2829 reference or overload conversion.  The caller is expected to have handled
2830 get-magic already.
2831
2832 =cut
2833 */
2834
2835 SV *
2836 Perl_sv_2num(pTHX_ SV *const sv)
2837 {
2838     PERL_ARGS_ASSERT_SV_2NUM;
2839
2840     if (!SvROK(sv))
2841         return sv;
2842     if (SvAMAGIC(sv)) {
2843         SV * const tmpsv = AMG_CALLunary(sv, numer_amg);
2844         TAINT_IF(tmpsv && SvTAINTED(tmpsv));
2845         if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2846             return sv_2num(tmpsv);
2847     }
2848     return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2849 }
2850
2851 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2852  * UV as a string towards the end of buf, and return pointers to start and
2853  * end of it.
2854  *
2855  * We assume that buf is at least TYPE_CHARS(UV) long.
2856  */
2857
2858 static char *
2859 S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
2860 {
2861     char *ptr = buf + TYPE_CHARS(UV);
2862     char * const ebuf = ptr;
2863     int sign;
2864
2865     PERL_ARGS_ASSERT_UIV_2BUF;
2866
2867     if (is_uv)
2868         sign = 0;
2869     else if (iv >= 0) {
2870         uv = iv;
2871         sign = 0;
2872     } else {
2873         uv = (iv == IV_MIN) ? (UV)iv : (UV)(-iv);
2874         sign = 1;
2875     }
2876     do {
2877         *--ptr = '0' + (char)(uv % 10);
2878     } while (uv /= 10);
2879     if (sign)
2880         *--ptr = '-';
2881     *peob = ebuf;
2882     return ptr;
2883 }
2884
2885 /* Helper for sv_2pv_flags and sv_vcatpvfn_flags.  If the NV is an
2886  * infinity or a not-a-number, writes the appropriate strings to the
2887  * buffer, including a zero byte.  On success returns the written length,
2888  * excluding the zero byte, on failure (not an infinity, not a nan)
2889  * returns zero, assert-fails on maxlen being too short.
2890  *
2891  * XXX for "Inf", "-Inf", and "NaN", we could have three read-only
2892  * shared string constants we point to, instead of generating a new
2893  * string for each instance. */
2894 STATIC size_t
2895 S_infnan_2pv(NV nv, char* buffer, size_t maxlen, char plus) {
2896     char* s = buffer;
2897     assert(maxlen >= 4);
2898     if (Perl_isinf(nv)) {
2899         if (nv < 0) {
2900             if (maxlen < 5) /* "-Inf\0"  */
2901                 return 0;
2902             *s++ = '-';
2903         } else if (plus) {
2904             *s++ = '+';
2905         }
2906         *s++ = 'I';
2907         *s++ = 'n';
2908         *s++ = 'f';
2909     }
2910     else if (Perl_isnan(nv)) {
2911         *s++ = 'N';
2912         *s++ = 'a';
2913         *s++ = 'N';
2914         /* XXX optionally output the payload mantissa bits as
2915          * "(unsigned)" (to match the nan("...") C99 function,
2916          * or maybe as "(0xhhh...)"  would make more sense...
2917          * provide a format string so that the user can decide?
2918          * NOTE: would affect the maxlen and assert() logic.*/
2919     }
2920     else {
2921       return 0;
2922     }
2923     assert((s == buffer + 3) || (s == buffer + 4));
2924     *s++ = 0;
2925     return s - buffer - 1; /* -1: excluding the zero byte */
2926 }
2927
2928 /*
2929 =for apidoc sv_2pv_flags
2930
2931 Returns a pointer to the string value of an SV, and sets C<*lp> to its length.
2932 If flags has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.  Coerces C<sv> to a
2933 string if necessary.  Normally invoked via the C<SvPV_flags> macro.
2934 C<sv_2pv()> and C<sv_2pv_nomg> usually end up here too.
2935
2936 =cut
2937 */
2938
2939 char *
2940 Perl_sv_2pv_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
2941 {
2942     char *s;
2943
2944     PERL_ARGS_ASSERT_SV_2PV_FLAGS;
2945
2946     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2947          && SvTYPE(sv) != SVt_PVFM);
2948     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2949         mg_get(sv);
2950     if (SvROK(sv)) {
2951         if (SvAMAGIC(sv)) {
2952             SV *tmpstr;
2953             if (flags & SV_SKIP_OVERLOAD)
2954                 return NULL;
2955             tmpstr = AMG_CALLunary(sv, string_amg);
2956             TAINT_IF(tmpstr && SvTAINTED(tmpstr));
2957             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2958                 /* Unwrap this:  */
2959                 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2960                  */
2961
2962                 char *pv;
2963                 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2964                     if (flags & SV_CONST_RETURN) {
2965                         pv = (char *) SvPVX_const(tmpstr);
2966                     } else {
2967                         pv = (flags & SV_MUTABLE_RETURN)
2968                             ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2969                     }
2970                     if (lp)
2971                         *lp = SvCUR(tmpstr);
2972                 } else {
2973                     pv = sv_2pv_flags(tmpstr, lp, flags);
2974                 }
2975                 if (SvUTF8(tmpstr))
2976                     SvUTF8_on(sv);
2977                 else
2978                     SvUTF8_off(sv);
2979                 return pv;
2980             }
2981         }
2982         {
2983             STRLEN len;
2984             char *retval;
2985             char *buffer;
2986             SV *const referent = SvRV(sv);
2987
2988             if (!referent) {
2989                 len = 7;
2990                 retval = buffer = savepvn("NULLREF", len);
2991             } else if (SvTYPE(referent) == SVt_REGEXP &&
2992                        (!(PL_curcop->cop_hints & HINT_NO_AMAGIC) ||
2993                         amagic_is_enabled(string_amg))) {
2994                 REGEXP * const re = (REGEXP *)MUTABLE_PTR(referent);
2995
2996                 assert(re);
2997                         
2998                 /* If the regex is UTF-8 we want the containing scalar to
2999                    have an UTF-8 flag too */
3000                 if (RX_UTF8(re))
3001                     SvUTF8_on(sv);
3002                 else
3003                     SvUTF8_off(sv);     
3004
3005                 if (lp)
3006                     *lp = RX_WRAPLEN(re);
3007  
3008                 return RX_WRAPPED(re);
3009             } else {
3010                 const char *const typestr = sv_reftype(referent, 0);
3011                 const STRLEN typelen = strlen(typestr);
3012                 UV addr = PTR2UV(referent);
3013                 const char *stashname = NULL;
3014                 STRLEN stashnamelen = 0; /* hush, gcc */
3015                 const char *buffer_end;
3016
3017                 if (SvOBJECT(referent)) {
3018                     const HEK *const name = HvNAME_HEK(SvSTASH(referent));
3019
3020                     if (name) {
3021                         stashname = HEK_KEY(name);
3022                         stashnamelen = HEK_LEN(name);
3023
3024                         if (HEK_UTF8(name)) {
3025                             SvUTF8_on(sv);
3026                         } else {
3027                             SvUTF8_off(sv);
3028                         }
3029                     } else {
3030                         stashname = "__ANON__";
3031                         stashnamelen = 8;
3032                     }
3033                     len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
3034                         + 2 * sizeof(UV) + 2 /* )\0 */;
3035                 } else {
3036                     len = typelen + 3 /* (0x */
3037                         + 2 * sizeof(UV) + 2 /* )\0 */;
3038                 }
3039
3040                 Newx(buffer, len, char);
3041                 buffer_end = retval = buffer + len;
3042
3043                 /* Working backwards  */
3044                 *--retval = '\0';
3045                 *--retval = ')';
3046                 do {
3047                     *--retval = PL_hexdigit[addr & 15];
3048                 } while (addr >>= 4);
3049                 *--retval = 'x';
3050                 *--retval = '0';
3051                 *--retval = '(';
3052
3053                 retval -= typelen;
3054                 memcpy(retval, typestr, typelen);
3055
3056                 if (stashname) {
3057                     *--retval = '=';
3058                     retval -= stashnamelen;
3059                     memcpy(retval, stashname, stashnamelen);
3060                 }
3061                 /* retval may not necessarily have reached the start of the
3062                    buffer here.  */
3063                 assert (retval >= buffer);
3064
3065                 len = buffer_end - retval - 1; /* -1 for that \0  */
3066             }
3067             if (lp)
3068                 *lp = len;
3069             SAVEFREEPV(buffer);
3070             return retval;
3071         }
3072     }
3073
3074     if (SvPOKp(sv)) {
3075         if (lp)
3076             *lp = SvCUR(sv);
3077         if (flags & SV_MUTABLE_RETURN)
3078             return SvPVX_mutable(sv);
3079         if (flags & SV_CONST_RETURN)
3080             return (char *)SvPVX_const(sv);
3081         return SvPVX(sv);
3082     }
3083
3084     if (SvIOK(sv)) {
3085         /* I'm assuming that if both IV and NV are equally valid then
3086            converting the IV is going to be more efficient */
3087         const U32 isUIOK = SvIsUV(sv);
3088         char buf[TYPE_CHARS(UV)];
3089         char *ebuf, *ptr;
3090         STRLEN len;
3091
3092         if (SvTYPE(sv) < SVt_PVIV)
3093             sv_upgrade(sv, SVt_PVIV);
3094         ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
3095         len = ebuf - ptr;
3096         /* inlined from sv_setpvn */
3097         s = SvGROW_mutable(sv, len + 1);
3098         Move(ptr, s, len, char);
3099         s += len;
3100         *s = '\0';
3101         SvPOK_on(sv);
3102     }
3103     else if (SvNOK(sv)) {
3104         if (SvTYPE(sv) < SVt_PVNV)
3105             sv_upgrade(sv, SVt_PVNV);
3106         if (SvNVX(sv) == 0.0
3107 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
3108             && !Perl_isnan(SvNVX(sv))
3109 #endif
3110         ) {
3111             s = SvGROW_mutable(sv, 2);
3112             *s++ = '0';
3113             *s = '\0';
3114         } else {
3115             STRLEN len;
3116             STRLEN size = 5; /* "-Inf\0" */
3117
3118             s = SvGROW_mutable(sv, size);
3119             len = S_infnan_2pv(SvNVX(sv), s, size, 0);
3120             if (len > 0) {
3121                 s += len;
3122                 SvPOK_on(sv);
3123             }
3124             else {
3125                 /* some Xenix systems wipe out errno here */
3126                 dSAVE_ERRNO;
3127
3128                 size =
3129                     1 + /* sign */
3130                     1 + /* "." */
3131                     NV_DIG +
3132                     1 + /* "e" */
3133                     1 + /* sign */
3134                     5 + /* exponent digits */
3135                     1 + /* \0 */
3136                     2; /* paranoia */
3137
3138                 s = SvGROW_mutable(sv, size);
3139 #ifndef USE_LOCALE_NUMERIC
3140                 SNPRINTF_G(SvNVX(sv), s, SvLEN(sv), NV_DIG);
3141
3142                 SvPOK_on(sv);
3143 #else
3144                 {
3145                     bool local_radix;
3146                     DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
3147                     STORE_LC_NUMERIC_SET_TO_NEEDED();
3148
3149                     local_radix =
3150                         PL_numeric_local &&
3151                         PL_numeric_radix_sv &&
3152                         SvUTF8(PL_numeric_radix_sv);
3153                     if (local_radix && SvLEN(PL_numeric_radix_sv) > 1) {
3154                         size += SvLEN(PL_numeric_radix_sv) - 1;
3155                         s = SvGROW_mutable(sv, size);
3156                     }
3157
3158                     SNPRINTF_G(SvNVX(sv), s, SvLEN(sv), NV_DIG);
3159
3160                     /* If the radix character is UTF-8, and actually is in the
3161                      * output, turn on the UTF-8 flag for the scalar */
3162                     if (local_radix &&
3163                         instr(s, SvPVX_const(PL_numeric_radix_sv))) {
3164                         SvUTF8_on(sv);
3165                     }
3166
3167                     RESTORE_LC_NUMERIC();
3168                 }
3169
3170                 /* We don't call SvPOK_on(), because it may come to
3171                  * pass that the locale changes so that the
3172                  * stringification we just did is no longer correct.  We
3173                  * will have to re-stringify every time it is needed */
3174 #endif
3175                 RESTORE_ERRNO;
3176             }
3177             while (*s) s++;
3178         }
3179     }
3180     else if (isGV_with_GP(sv)) {
3181         GV *const gv = MUTABLE_GV(sv);
3182         SV *const buffer = sv_newmortal();
3183
3184         gv_efullname3(buffer, gv, "*");
3185
3186         assert(SvPOK(buffer));
3187         if (SvUTF8(buffer))
3188             SvUTF8_on(sv);
3189         if (lp)
3190             *lp = SvCUR(buffer);
3191         return SvPVX(buffer);
3192     }
3193     else if (isREGEXP(sv)) {
3194         if (lp) *lp = RX_WRAPLEN((REGEXP *)sv);
3195         return RX_WRAPPED((REGEXP *)sv);
3196     }
3197     else {
3198         if (lp)
3199             *lp = 0;
3200         if (flags & SV_UNDEF_RETURNS_NULL)
3201             return NULL;
3202         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
3203             report_uninit(sv);
3204         /* Typically the caller expects that sv_any is not NULL now.  */
3205         if (!SvREADONLY(sv) && SvTYPE(sv) < SVt_PV)
3206             sv_upgrade(sv, SVt_PV);
3207         return (char *)"";
3208     }
3209
3210     {
3211         const STRLEN len = s - SvPVX_const(sv);
3212         if (lp) 
3213             *lp = len;
3214         SvCUR_set(sv, len);
3215     }
3216     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3217                           PTR2UV(sv),SvPVX_const(sv)));
3218     if (flags & SV_CONST_RETURN)
3219         return (char *)SvPVX_const(sv);
3220     if (flags & SV_MUTABLE_RETURN)
3221         return SvPVX_mutable(sv);
3222     return SvPVX(sv);
3223 }
3224
3225 /*
3226 =for apidoc sv_copypv
3227
3228 Copies a stringified representation of the source SV into the
3229 destination SV.  Automatically performs any necessary C<mg_get> and
3230 coercion of numeric values into strings.  Guaranteed to preserve
3231 C<UTF8> flag even from overloaded objects.  Similar in nature to
3232 C<sv_2pv[_flags]> but operates directly on an SV instead of just the
3233 string.  Mostly uses C<sv_2pv_flags> to do its work, except when that
3234 would lose the UTF-8'ness of the PV.
3235
3236 =for apidoc sv_copypv_nomg
3237
3238 Like C<sv_copypv>, but doesn't invoke get magic first.
3239
3240 =for apidoc sv_copypv_flags
3241
3242 Implementation of C<sv_copypv> and C<sv_copypv_nomg>.  Calls get magic iff flags
3243 has the C<SV_GMAGIC> bit set.
3244
3245 =cut
3246 */
3247
3248 void
3249 Perl_sv_copypv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
3250 {
3251     STRLEN len;
3252     const char *s;
3253
3254     PERL_ARGS_ASSERT_SV_COPYPV_FLAGS;
3255
3256     s = SvPV_flags_const(ssv,len,(flags & SV_GMAGIC));
3257     sv_setpvn(dsv,s,len);
3258     if (SvUTF8(ssv))
3259         SvUTF8_on(dsv);
3260     else
3261         SvUTF8_off(dsv);
3262 }
3263
3264 /*
3265 =for apidoc sv_2pvbyte
3266
3267 Return a pointer to the byte-encoded representation of the SV, and set C<*lp>
3268 to its length.  May cause the SV to be downgraded from UTF-8 as a
3269 side-effect.
3270
3271 Usually accessed via the C<SvPVbyte> macro.
3272
3273 =cut
3274 */
3275
3276 char *
3277 Perl_sv_2pvbyte(pTHX_ SV *sv, STRLEN *const lp)
3278 {
3279     PERL_ARGS_ASSERT_SV_2PVBYTE;
3280
3281     SvGETMAGIC(sv);
3282     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3283      || isGV_with_GP(sv) || SvROK(sv)) {
3284         SV *sv2 = sv_newmortal();
3285         sv_copypv_nomg(sv2,sv);
3286         sv = sv2;
3287     }
3288     sv_utf8_downgrade(sv,0);
3289     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3290 }
3291
3292 /*
3293 =for apidoc sv_2pvutf8
3294
3295 Return a pointer to the UTF-8-encoded representation of the SV, and set C<*lp>
3296 to its length.  May cause the SV to be upgraded to UTF-8 as a side-effect.
3297
3298 Usually accessed via the C<SvPVutf8> macro.
3299
3300 =cut
3301 */
3302
3303 char *
3304 Perl_sv_2pvutf8(pTHX_ SV *sv, STRLEN *const lp)
3305 {
3306     PERL_ARGS_ASSERT_SV_2PVUTF8;
3307
3308     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3309      || isGV_with_GP(sv) || SvROK(sv))
3310         sv = sv_mortalcopy(sv);
3311     else
3312         SvGETMAGIC(sv);
3313     sv_utf8_upgrade_nomg(sv);
3314     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3315 }
3316
3317
3318 /*
3319 =for apidoc sv_2bool
3320
3321 This macro is only used by C<sv_true()> or its macro equivalent, and only if
3322 the latter's argument is neither C<SvPOK>, C<SvIOK> nor C<SvNOK>.
3323 It calls C<sv_2bool_flags> with the C<SV_GMAGIC> flag.
3324
3325 =for apidoc sv_2bool_flags
3326
3327 This function is only used by C<sv_true()> and friends,  and only if
3328 the latter's argument is neither C<SvPOK>, C<SvIOK> nor C<SvNOK>.  If the flags
3329 contain C<SV_GMAGIC>, then it does an C<mg_get()> first.
3330
3331
3332 =cut
3333 */
3334
3335 bool
3336 Perl_sv_2bool_flags(pTHX_ SV *sv, I32 flags)
3337 {
3338     PERL_ARGS_ASSERT_SV_2BOOL_FLAGS;
3339
3340     restart:
3341     if(flags & SV_GMAGIC) SvGETMAGIC(sv);
3342
3343     if (!SvOK(sv))
3344         return 0;
3345     if (SvROK(sv)) {
3346         if (SvAMAGIC(sv)) {
3347             SV * const tmpsv = AMG_CALLunary(sv, bool__amg);
3348             if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv)))) {
3349                 bool svb;
3350                 sv = tmpsv;
3351                 if(SvGMAGICAL(sv)) {
3352                     flags = SV_GMAGIC;
3353                     goto restart; /* call sv_2bool */
3354                 }
3355                 /* expanded SvTRUE_common(sv, (flags = 0, goto restart)) */
3356                 else if(!SvOK(sv)) {
3357                     svb = 0;
3358                 }
3359                 else if(SvPOK(sv)) {
3360                     svb = SvPVXtrue(sv);
3361                 }
3362                 else if((SvFLAGS(sv) & (SVf_IOK|SVf_NOK))) {
3363                     svb = (SvIOK(sv) && SvIVX(sv) != 0)
3364                         || (SvNOK(sv) && SvNVX(sv) != 0.0);
3365                 }
3366                 else {
3367                     flags = 0;
3368                     goto restart; /* call sv_2bool_nomg */
3369                 }
3370                 return cBOOL(svb);
3371             }
3372         }
3373         return SvRV(sv) != 0;
3374     }
3375     if (isREGEXP(sv))
3376         return
3377           RX_WRAPLEN(sv) > 1 || (RX_WRAPLEN(sv) && *RX_WRAPPED(sv) != '0');
3378     return SvTRUE_common(sv, isGV_with_GP(sv) ? 1 : 0);
3379 }
3380
3381 /*
3382 =for apidoc sv_utf8_upgrade
3383
3384 Converts the PV of an SV to its UTF-8-encoded form.
3385 Forces the SV to string form if it is not already.
3386 Will C<mg_get> on C<sv> if appropriate.
3387 Always sets the C<SvUTF8> flag to avoid future validity checks even
3388 if the whole string is the same in UTF-8 as not.
3389 Returns the number of bytes in the converted string
3390
3391 This is not a general purpose byte encoding to Unicode interface:
3392 use the Encode extension for that.
3393
3394 =for apidoc sv_utf8_upgrade_nomg
3395
3396 Like C<sv_utf8_upgrade>, but doesn't do magic on C<sv>.
3397
3398 =for apidoc sv_utf8_upgrade_flags
3399
3400 Converts the PV of an SV to its UTF-8-encoded form.
3401 Forces the SV to string form if it is not already.
3402 Always sets the SvUTF8 flag to avoid future validity checks even
3403 if all the bytes are invariant in UTF-8.
3404 If C<flags> has C<SV_GMAGIC> bit set,
3405 will C<mg_get> on C<sv> if appropriate, else not.
3406
3407 If C<flags> has C<SV_FORCE_UTF8_UPGRADE> set, this function assumes that the PV
3408 will expand when converted to UTF-8, and skips the extra work of checking for
3409 that.  Typically this flag is used by a routine that has already parsed the
3410 string and found such characters, and passes this information on so that the
3411 work doesn't have to be repeated.
3412
3413 Returns the number of bytes in the converted string.
3414
3415 This is not a general purpose byte encoding to Unicode interface:
3416 use the Encode extension for that.
3417
3418 =for apidoc sv_utf8_upgrade_flags_grow
3419
3420 Like C<sv_utf8_upgrade_flags>, but has an additional parameter C<extra>, which is
3421 the number of unused bytes the string of C<sv> is guaranteed to have free after
3422 it upon return.  This allows the caller to reserve extra space that it intends
3423 to fill, to avoid extra grows.
3424
3425 C<sv_utf8_upgrade>, C<sv_utf8_upgrade_nomg>, and C<sv_utf8_upgrade_flags>
3426 are implemented in terms of this function.
3427
3428 Returns the number of bytes in the converted string (not including the spares).
3429
3430 =cut
3431
3432 (One might think that the calling routine could pass in the position of the
3433 first variant character when it has set SV_FORCE_UTF8_UPGRADE, so it wouldn't
3434 have to be found again.  But that is not the case, because typically when the
3435 caller is likely to use this flag, it won't be calling this routine unless it
3436 finds something that won't fit into a byte.  Otherwise it tries to not upgrade
3437 and just use bytes.  But some things that do fit into a byte are variants in
3438 utf8, and the caller may not have been keeping track of these.)
3439
3440 If the routine itself changes the string, it adds a trailing C<NUL>.  Such a
3441 C<NUL> isn't guaranteed due to having other routines do the work in some input
3442 cases, or if the input is already flagged as being in utf8.
3443
3444 The speed of this could perhaps be improved for many cases if someone wanted to
3445 write a fast function that counts the number of variant characters in a string,
3446 especially if it could return the position of the first one.
3447
3448 */
3449
3450 STRLEN
3451 Perl_sv_utf8_upgrade_flags_grow(pTHX_ SV *const sv, const I32 flags, STRLEN extra)
3452 {
3453     PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
3454
3455     if (sv == &PL_sv_undef)
3456         return 0;
3457     if (!SvPOK_nog(sv)) {
3458         STRLEN len = 0;
3459         if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3460             (void) sv_2pv_flags(sv,&len, flags);
3461             if (SvUTF8(sv)) {
3462                 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3463                 return len;
3464             }
3465         } else {
3466             (void) SvPV_force_flags(sv,len,flags & SV_GMAGIC);
3467         }
3468     }
3469
3470     if (SvUTF8(sv)) {
3471         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3472         return SvCUR(sv);
3473     }
3474
3475     if (SvIsCOW(sv)) {
3476         S_sv_uncow(aTHX_ sv, 0);
3477     }
3478
3479     if (IN_ENCODING && !(flags & SV_UTF8_NO_ENCODING)) {
3480         sv_recode_to_utf8(sv, _get_encoding());
3481         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3482         return SvCUR(sv);
3483     }
3484
3485     if (SvCUR(sv) == 0) {
3486         if (extra) SvGROW(sv, extra);
3487     } else { /* Assume Latin-1/EBCDIC */
3488         /* This function could be much more efficient if we
3489          * had a FLAG in SVs to signal if there are any variant
3490          * chars in the PV.  Given that there isn't such a flag
3491          * make the loop as fast as possible (although there are certainly ways
3492          * to speed this up, eg. through vectorization) */
3493         U8 * s = (U8 *) SvPVX_const(sv);
3494         U8 * e = (U8 *) SvEND(sv);
3495         U8 *t = s;
3496         STRLEN two_byte_count = 0;
3497         
3498         if (flags & SV_FORCE_UTF8_UPGRADE) goto must_be_utf8;
3499
3500         /* See if really will need to convert to utf8.  We mustn't rely on our
3501          * incoming SV being well formed and having a trailing '\0', as certain
3502          * code in pp_formline can send us partially built SVs. */
3503
3504         while (t < e) {
3505             const U8 ch = *t++;
3506             if (NATIVE_BYTE_IS_INVARIANT(ch)) continue;
3507
3508             t--;    /* t already incremented; re-point to first variant */
3509             two_byte_count = 1;
3510             goto must_be_utf8;
3511         }
3512
3513         /* utf8 conversion not needed because all are invariants.  Mark as
3514          * UTF-8 even if no variant - saves scanning loop */
3515         SvUTF8_on(sv);
3516         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3517         return SvCUR(sv);
3518
3519       must_be_utf8:
3520
3521         /* Here, the string should be converted to utf8, either because of an
3522          * input flag (two_byte_count = 0), or because a character that
3523          * requires 2 bytes was found (two_byte_count = 1).  t points either to
3524          * the beginning of the string (if we didn't examine anything), or to
3525          * the first variant.  In either case, everything from s to t - 1 will
3526          * occupy only 1 byte each on output.
3527          *
3528          * There are two main ways to convert.  One is to create a new string
3529          * and go through the input starting from the beginning, appending each
3530          * converted value onto the new string as we go along.  It's probably
3531          * best to allocate enough space in the string for the worst possible
3532          * case rather than possibly running out of space and having to
3533          * reallocate and then copy what we've done so far.  Since everything
3534          * from s to t - 1 is invariant, the destination can be initialized
3535          * with these using a fast memory copy
3536          *
3537          * The other way is to figure out exactly how big the string should be
3538          * by parsing the entire input.  Then you don't have to make it big
3539          * enough to handle the worst possible case, and more importantly, if
3540          * the string you already have is large enough, you don't have to
3541          * allocate a new string, you can copy the last character in the input
3542          * string to the final position(s) that will be occupied by the
3543          * converted string and go backwards, stopping at t, since everything
3544          * before that is invariant.
3545          *
3546          * There are advantages and disadvantages to each method.
3547          *
3548          * In the first method, we can allocate a new string, do the memory
3549          * copy from the s to t - 1, and then proceed through the rest of the
3550          * string byte-by-byte.
3551          *
3552          * In the second method, we proceed through the rest of the input
3553          * string just calculating how big the converted string will be.  Then
3554          * there are two cases:
3555          *  1)  if the string has enough extra space to handle the converted
3556          *      value.  We go backwards through the string, converting until we
3557          *      get to the position we are at now, and then stop.  If this
3558          *      position is far enough along in the string, this method is
3559          *      faster than the other method.  If the memory copy were the same
3560          *      speed as the byte-by-byte loop, that position would be about
3561          *      half-way, as at the half-way mark, parsing to the end and back
3562          *      is one complete string's parse, the same amount as starting
3563          *      over and going all the way through.  Actually, it would be
3564          *      somewhat less than half-way, as it's faster to just count bytes
3565          *      than to also copy, and we don't have the overhead of allocating
3566          *      a new string, changing the scalar to use it, and freeing the
3567          *      existing one.  But if the memory copy is fast, the break-even
3568          *      point is somewhere after half way.  The counting loop could be
3569          *      sped up by vectorization, etc, to move the break-even point
3570          *      further towards the beginning.
3571          *  2)  if the string doesn't have enough space to handle the converted
3572          *      value.  A new string will have to be allocated, and one might
3573          *      as well, given that, start from the beginning doing the first
3574          *      method.  We've spent extra time parsing the string and in
3575          *      exchange all we've gotten is that we know precisely how big to
3576          *      make the new one.  Perl is more optimized for time than space,
3577          *      so this case is a loser.
3578          * So what I've decided to do is not use the 2nd method unless it is
3579          * guaranteed that a new string won't have to be allocated, assuming
3580          * the worst case.  I also decided not to put any more conditions on it
3581          * than this, for now.  It seems likely that, since the worst case is
3582          * twice as big as the unknown portion of the string (plus 1), we won't
3583          * be guaranteed enough space, causing us to go to the first method,
3584          * unless the string is short, or the first variant character is near
3585          * the end of it.  In either of these cases, it seems best to use the
3586          * 2nd method.  The only circumstance I can think of where this would
3587          * be really slower is if the string had once had much more data in it
3588          * than it does now, but there is still a substantial amount in it  */
3589
3590         {
3591             STRLEN invariant_head = t - s;
3592             STRLEN size = invariant_head + (e - t) * 2 + 1 + extra;
3593             if (SvLEN(sv) < size) {
3594
3595                 /* Here, have decided to allocate a new string */
3596
3597                 U8 *dst;
3598                 U8 *d;
3599
3600                 Newx(dst, size, U8);
3601
3602                 /* If no known invariants at the beginning of the input string,
3603                  * set so starts from there.  Otherwise, can use memory copy to
3604                  * get up to where we are now, and then start from here */
3605
3606                 if (invariant_head == 0) {
3607                     d = dst;
3608                 } else {
3609                     Copy(s, dst, invariant_head, char);
3610                     d = dst + invariant_head;
3611                 }
3612
3613                 while (t < e) {
3614                     append_utf8_from_native_byte(*t, &d);
3615                     t++;
3616                 }
3617                 *d = '\0';
3618                 SvPV_free(sv); /* No longer using pre-existing string */
3619                 SvPV_set(sv, (char*)dst);
3620                 SvCUR_set(sv, d - dst);
3621                 SvLEN_set(sv, size);
3622             } else {
3623
3624                 /* Here, have decided to get the exact size of the string.
3625                  * Currently this happens only when we know that there is
3626                  * guaranteed enough space to fit the converted string, so
3627                  * don't have to worry about growing.  If two_byte_count is 0,
3628                  * then t points to the first byte of the string which hasn't
3629                  * been examined yet.  Otherwise two_byte_count is 1, and t
3630                  * points to the first byte in the string that will expand to
3631                  * two.  Depending on this, start examining at t or 1 after t.
3632                  * */
3633
3634                 U8 *d = t + two_byte_count;
3635
3636
3637                 /* Count up the remaining bytes that expand to two */
3638
3639                 while (d < e) {
3640                     const U8 chr = *d++;
3641                     if (! NATIVE_BYTE_IS_INVARIANT(chr)) two_byte_count++;
3642                 }
3643
3644                 /* The string will expand by just the number of bytes that
3645                  * occupy two positions.  But we are one afterwards because of
3646                  * the increment just above.  This is the place to put the
3647                  * trailing NUL, and to set the length before we decrement */
3648
3649                 d += two_byte_count;
3650                 SvCUR_set(sv, d - s);
3651                 *d-- = '\0';
3652
3653
3654                 /* Having decremented d, it points to the position to put the
3655                  * very last byte of the expanded string.  Go backwards through
3656                  * the string, copying and expanding as we go, stopping when we
3657                  * get to the part that is invariant the rest of the way down */
3658
3659                 e--;
3660                 while (e >= t) {
3661                     if (NATIVE_BYTE_IS_INVARIANT(*e)) {
3662                         *d-- = *e;
3663                     } else {
3664                         *d-- = UTF8_EIGHT_BIT_LO(*e);
3665                         *d-- = UTF8_EIGHT_BIT_HI(*e);
3666                     }
3667                     e--;
3668                 }
3669             }
3670
3671             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3672                 /* Update pos. We do it at the end rather than during
3673                  * the upgrade, to avoid slowing down the common case
3674                  * (upgrade without pos).
3675                  * pos can be stored as either bytes or characters.  Since
3676                  * this was previously a byte string we can just turn off
3677                  * the bytes flag. */
3678                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3679                 if (mg) {
3680                     mg->mg_flags &= ~MGf_BYTES;
3681                 }
3682                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3683                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3684             }
3685         }
3686     }
3687
3688     /* Mark as UTF-8 even if no variant - saves scanning loop */
3689     SvUTF8_on(sv);
3690     return SvCUR(sv);
3691 }
3692
3693 /*
3694 =for apidoc sv_utf8_downgrade
3695
3696 Attempts to convert the PV of an SV from characters to bytes.
3697 If the PV contains a character that cannot fit
3698 in a byte, this conversion will fail;
3699 in this case, either returns false or, if C<fail_ok> is not
3700 true, croaks.
3701
3702 This is not a general purpose Unicode to byte encoding interface:
3703 use the C<Encode> extension for that.
3704
3705 =cut
3706 */
3707
3708 bool
3709 Perl_sv_utf8_downgrade(pTHX_ SV *const sv, const bool fail_ok)
3710 {
3711     PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
3712
3713     if (SvPOKp(sv) && SvUTF8(sv)) {
3714         if (SvCUR(sv)) {
3715             U8 *s;
3716             STRLEN len;
3717             int mg_flags = SV_GMAGIC;
3718
3719             if (SvIsCOW(sv)) {
3720                 S_sv_uncow(aTHX_ sv, 0);
3721             }
3722             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3723                 /* update pos */
3724                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3725                 if (mg && mg->mg_len > 0 && mg->mg_flags & MGf_BYTES) {
3726                         mg->mg_len = sv_pos_b2u_flags(sv, mg->mg_len,
3727                                                 SV_GMAGIC|SV_CONST_RETURN);
3728                         mg_flags = 0; /* sv_pos_b2u does get magic */
3729                 }
3730                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3731                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3732
3733             }
3734             s = (U8 *) SvPV_flags(sv, len, mg_flags);
3735
3736             if (!utf8_to_bytes(s, &len)) {
3737                 if (fail_ok)
3738                     return FALSE;
3739                 else {
3740                     if (PL_op)
3741                         Perl_croak(aTHX_ "Wide character in %s",
3742                                    OP_DESC(PL_op));
3743                     else
3744                         Perl_croak(aTHX_ "Wide character");
3745                 }
3746             }
3747             SvCUR_set(sv, len);
3748         }
3749     }
3750     SvUTF8_off(sv);
3751     return TRUE;
3752 }
3753
3754 /*
3755 =for apidoc sv_utf8_encode
3756
3757 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3758 flag off so that it looks like octets again.
3759
3760 =cut
3761 */
3762
3763 void
3764 Perl_sv_utf8_encode(pTHX_ SV *const sv)
3765 {
3766     PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3767
3768     if (SvREADONLY(sv)) {
3769         sv_force_normal_flags(sv, 0);
3770     }
3771     (void) sv_utf8_upgrade(sv);
3772     SvUTF8_off(sv);
3773 }
3774
3775 /*
3776 =for apidoc sv_utf8_decode
3777
3778 If the PV of the SV is an octet sequence in UTF-8
3779 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3780 so that it looks like a character.  If the PV contains only single-byte
3781 characters, the C<SvUTF8> flag stays off.
3782 Scans PV for validity and returns false if the PV is invalid UTF-8.
3783
3784 =cut
3785 */
3786
3787 bool
3788 Perl_sv_utf8_decode(pTHX_ SV *const sv)
3789 {
3790     PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3791
3792     if (SvPOKp(sv)) {
3793         const U8 *start, *c;
3794         const U8 *e;
3795
3796         /* The octets may have got themselves encoded - get them back as
3797          * bytes
3798          */
3799         if (!sv_utf8_downgrade(sv, TRUE))
3800             return FALSE;
3801
3802         /* it is actually just a matter of turning the utf8 flag on, but
3803          * we want to make sure everything inside is valid utf8 first.
3804          */
3805         c = start = (const U8 *) SvPVX_const(sv);
3806         if (!is_utf8_string(c, SvCUR(sv)))
3807             return FALSE;
3808         e = (const U8 *) SvEND(sv);
3809         while (c < e) {
3810             const U8 ch = *c++;
3811             if (!UTF8_IS_INVARIANT(ch)) {
3812                 SvUTF8_on(sv);
3813                 break;
3814             }
3815         }
3816         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3817             /* XXX Is this dead code?  XS_utf8_decode calls SvSETMAGIC
3818                    after this, clearing pos.  Does anything on CPAN
3819                    need this? */
3820             /* adjust pos to the start of a UTF8 char sequence */
3821             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3822             if (mg) {
3823                 I32 pos = mg->mg_len;
3824                 if (pos > 0) {
3825                     for (c = start + pos; c > start; c--) {
3826                         if (UTF8_IS_START(*c))
3827                             break;
3828                     }
3829                     mg->mg_len  = c - start;
3830                 }
3831             }
3832             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3833                 magic_setutf8(sv,mg); /* clear UTF8 cache */
3834         }
3835     }
3836     return TRUE;
3837 }
3838
3839 /*
3840 =for apidoc sv_setsv
3841
3842 Copies the contents of the source SV C<ssv> into the destination SV
3843 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3844 function if the source SV needs to be reused.  Does not handle 'set' magic on
3845 destination SV.  Calls 'get' magic on source SV.  Loosely speaking, it
3846 performs a copy-by-value, obliterating any previous content of the
3847 destination.
3848
3849 You probably want to use one of the assortment of wrappers, such as
3850 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3851 C<SvSetMagicSV_nosteal>.
3852
3853 =for apidoc sv_setsv_flags
3854
3855 Copies the contents of the source SV C<ssv> into the destination SV
3856 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3857 function if the source SV needs to be reused.  Does not handle 'set' magic.
3858 Loosely speaking, it performs a copy-by-value, obliterating any previous
3859 content of the destination.
3860 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3861 C<ssv> if appropriate, else not.  If the C<flags>
3862 parameter has the C<SV_NOSTEAL> bit set then the
3863 buffers of temps will not be stolen.  C<sv_setsv>
3864 and C<sv_setsv_nomg> are implemented in terms of this function.
3865
3866 You probably want to use one of the assortment of wrappers, such as
3867 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3868 C<SvSetMagicSV_nosteal>.
3869
3870 This is the primary function for copying scalars, and most other
3871 copy-ish functions and macros use this underneath.
3872
3873 =cut
3874 */
3875
3876 static void
3877 S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
3878 {
3879     I32 mro_changes = 0; /* 1 = method, 2 = isa, 3 = recursive isa */
3880     HV *old_stash = NULL;
3881
3882     PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3883
3884     if (dtype != SVt_PVGV && !isGV_with_GP(dstr)) {
3885         const char * const name = GvNAME(sstr);
3886         const STRLEN len = GvNAMELEN(sstr);
3887         {
3888             if (dtype >= SVt_PV) {
3889                 SvPV_free(dstr);
3890                 SvPV_set(dstr, 0);
3891                 SvLEN_set(dstr, 0);
3892                 SvCUR_set(dstr, 0);
3893             }
3894             SvUPGRADE(dstr, SVt_PVGV);
3895             (void)SvOK_off(dstr);
3896             isGV_with_GP_on(dstr);
3897         }
3898         GvSTASH(dstr) = GvSTASH(sstr);
3899         if (GvSTASH(dstr))
3900             Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
3901         gv_name_set(MUTABLE_GV(dstr), name, len,
3902                         GV_ADD | (GvNAMEUTF8(sstr) ? SVf_UTF8 : 0 ));
3903         SvFAKE_on(dstr);        /* can coerce to non-glob */
3904     }
3905
3906     if(GvGP(MUTABLE_GV(sstr))) {
3907         /* If source has method cache entry, clear it */
3908         if(GvCVGEN(sstr)) {
3909             SvREFCNT_dec(GvCV(sstr));
3910             GvCV_set(sstr, NULL);
3911             GvCVGEN(sstr) = 0;
3912         }
3913         /* If source has a real method, then a method is
3914            going to change */
3915         else if(
3916          GvCV((const GV *)sstr) && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3917         ) {
3918             mro_changes = 1;
3919         }
3920     }
3921
3922     /* If dest already had a real method, that's a change as well */
3923     if(
3924         !mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)
3925      && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3926     ) {
3927         mro_changes = 1;
3928     }
3929
3930     /* We don't need to check the name of the destination if it was not a
3931        glob to begin with. */
3932     if(dtype == SVt_PVGV) {
3933         const char * const name = GvNAME((const GV *)dstr);
3934         if(
3935             strEQ(name,"ISA")
3936          /* The stash may have been detached from the symbol table, so
3937             check its name. */
3938          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3939         )
3940             mro_changes = 2;
3941         else {
3942             const STRLEN len = GvNAMELEN(dstr);
3943             if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
3944              || (len == 1 && name[0] == ':')) {
3945                 mro_changes = 3;
3946
3947                 /* Set aside the old stash, so we can reset isa caches on
3948                    its subclasses. */
3949                 if((old_stash = GvHV(dstr)))
3950                     /* Make sure we do not lose it early. */
3951                     SvREFCNT_inc_simple_void_NN(
3952                      sv_2mortal((SV *)old_stash)
3953                     );
3954             }
3955         }
3956
3957         SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
3958     }
3959
3960     /* freeing dstr's GP might free sstr (e.g. *x = $x),
3961      * so temporarily protect it */
3962     ENTER;
3963     SAVEFREESV(SvREFCNT_inc_simple_NN(sstr));
3964     gp_free(MUTABLE_GV(dstr));
3965     GvINTRO_off(dstr);          /* one-shot flag */
3966     GvGP_set(dstr, gp_ref(GvGP(sstr)));
3967     LEAVE;
3968
3969     if (SvTAINTED(sstr))
3970         SvTAINT(dstr);
3971     if (GvIMPORTED(dstr) != GVf_IMPORTED
3972         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3973         {
3974             GvIMPORTED_on(dstr);
3975         }
3976     GvMULTI_on(dstr);
3977     if(mro_changes == 2) {
3978       if (GvAV((const GV *)sstr)) {
3979         MAGIC *mg;
3980         SV * const sref = (SV *)GvAV((const GV *)dstr);
3981         if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3982             if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3983                 AV * const ary = newAV();
3984                 av_push(ary, mg->mg_obj); /* takes the refcount */
3985                 mg->mg_obj = (SV *)ary;
3986             }
3987             av_push((AV *)mg->mg_obj, SvREFCNT_inc_simple_NN(dstr));
3988         }
3989         else sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
3990       }
3991       mro_isa_changed_in(GvSTASH(dstr));
3992     }
3993     else if(mro_changes == 3) {
3994         HV * const stash = GvHV(dstr);
3995         if(old_stash ? (HV *)HvENAME_get(old_stash) : stash)
3996             mro_package_moved(
3997                 stash, old_stash,
3998                 (GV *)dstr, 0
3999             );
4000     }
4001     else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
4002     if (GvIO(dstr) && dtype == SVt_PVGV) {
4003         DEBUG_o(Perl_deb(aTHX_
4004                         "glob_assign_glob clearing PL_stashcache\n"));
4005         /* It's a cache. It will rebuild itself quite happily.
4006            It's a lot of effort to work out exactly which key (or keys)
4007            might be invalidated by the creation of the this file handle.
4008          */
4009         hv_clear(PL_stashcache);
4010     }
4011     return;
4012 }
4013
4014 void
4015 Perl_gv_setref(pTHX_ SV *const dstr, SV *const sstr)
4016 {
4017     SV * const sref = SvRV(sstr);
4018     SV *dref;
4019     const int intro = GvINTRO(dstr);
4020     SV **location;
4021     U8 import_flag = 0;
4022     const U32 stype = SvTYPE(sref);
4023
4024     PERL_ARGS_ASSERT_GV_SETREF;
4025
4026     if (intro) {
4027         GvINTRO_off(dstr);      /* one-shot flag */
4028         GvLINE(dstr) = CopLINE(PL_curcop);
4029         GvEGV(dstr) = MUTABLE_GV(dstr);
4030     }
4031     GvMULTI_on(dstr);
4032     switch (stype) {
4033     case SVt_PVCV:
4034         location = (SV **) &(GvGP(dstr)->gp_cv); /* XXX bypassing GvCV_set */
4035         import_flag = GVf_IMPORTED_CV;
4036         goto common;
4037     case SVt_PVHV:
4038         location = (SV **) &GvHV(dstr);
4039         import_flag = GVf_IMPORTED_HV;
4040         goto common;
4041     case SVt_PVAV:
4042         location = (SV **) &GvAV(dstr);
4043         import_flag = GVf_IMPORTED_AV;
4044         goto common;
4045     case SVt_PVIO:
4046         location = (SV **) &GvIOp(dstr);
4047         goto common;
4048     case SVt_PVFM:
4049         location = (SV **) &GvFORM(dstr);
4050         goto common;
4051     default:
4052         location = &GvSV(dstr);
4053         import_flag = GVf_IMPORTED_SV;
4054     common:
4055         if (intro) {
4056             if (stype == SVt_PVCV) {
4057                 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
4058                 if (GvCVGEN(dstr)) {
4059                     SvREFCNT_dec(GvCV(dstr));
4060                     GvCV_set(dstr, NULL);
4061                     GvCVGEN(dstr) = 0; /* Switch off cacheness. */
4062                 }
4063             }
4064             /* SAVEt_GVSLOT takes more room on the savestack and has more
4065                overhead in leave_scope than SAVEt_GENERIC_SV.  But for CVs
4066                leave_scope needs access to the GV so it can reset method
4067                caches.  We must use SAVEt_GVSLOT whenever the type is
4068                SVt_PVCV, even if the stash is anonymous, as the stash may
4069                gain a name somehow before leave_scope. */
4070             if (stype == SVt_PVCV) {
4071                 /* There is no save_pushptrptrptr.  Creating it for this
4072                    one call site would be overkill.  So inline the ss add
4073                    routines here. */
4074                 dSS_ADD;
4075                 SS_ADD_PTR(dstr);
4076                 SS_ADD_PTR(location);
4077                 SS_ADD_PTR(SvREFCNT_inc(*location));
4078                 SS_ADD_UV(SAVEt_GVSLOT);
4079                 SS_ADD_END(4);
4080             }
4081             else SAVEGENERICSV(*location);
4082         }
4083         dref = *location;
4084         if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
4085             CV* const cv = MUTABLE_CV(*location);
4086             if (cv) {
4087                 if (!GvCVGEN((const GV *)dstr) &&
4088                     (CvROOT(cv) || CvXSUB(cv)) &&
4089                     /* redundant check that avoids creating the extra SV
4090                        most of the time: */
4091                     (CvCONST(cv) || ckWARN(WARN_REDEFINE)))
4092                     {
4093                         SV * const new_const_sv =
4094                             CvCONST((const CV *)sref)
4095                                  ? cv_const_sv((const CV *)sref)
4096                                  : NULL;
4097                         report_redefined_cv(
4098                            sv_2mortal(Perl_newSVpvf(aTHX_
4099                                 "%"HEKf"::%"HEKf,
4100                                 HEKfARG(
4101                                  HvNAME_HEK(GvSTASH((const GV *)dstr))
4102                                 ),
4103                                 HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr)))
4104                            )),
4105                            cv,
4106                            CvCONST((const CV *)sref) ? &new_const_sv : NULL
4107                         );
4108                     }
4109                 if (!intro)
4110                     cv_ckproto_len_flags(cv, (const GV *)dstr,
4111                                    SvPOK(sref) ? CvPROTO(sref) : NULL,
4112                                    SvPOK(sref) ? CvPROTOLEN(sref) : 0,
4113                                    SvPOK(sref) ? SvUTF8(sref) : 0);
4114             }
4115             GvCVGEN(dstr) = 0; /* Switch off cacheness. */
4116             GvASSUMECV_on(dstr);
4117             if(GvSTASH(dstr)) { /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
4118                 if (intro && GvREFCNT(dstr) > 1) {
4119                     /* temporary remove extra savestack's ref */
4120                     --GvREFCNT(dstr);
4121                     gv_method_changed(dstr);
4122                     ++GvREFCNT(dstr);
4123                 }
4124                 else gv_method_changed(dstr);
4125             }
4126         }
4127         *location = SvREFCNT_inc_simple_NN(sref);
4128         if (import_flag && !(GvFLAGS(dstr) & import_flag)
4129             && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
4130             GvFLAGS(dstr) |= import_flag;
4131         }
4132
4133         if (stype == SVt_PVHV) {
4134             const char * const name = GvNAME((GV*)dstr);
4135             const STRLEN len = GvNAMELEN(dstr);
4136             if (
4137                 (
4138                    (len > 1 && name[len-2] == ':' && name[len-1] == ':')
4139                 || (len == 1 && name[0] == ':')
4140                 )
4141              && (!dref || HvENAME_get(dref))
4142             ) {
4143                 mro_package_moved(
4144                     (HV *)sref, (HV *)dref,
4145                     (GV *)dstr, 0
4146                 );
4147             }
4148         }
4149         else if (
4150             stype == SVt_PVAV && sref != dref
4151          && strEQ(GvNAME((GV*)dstr), "ISA")
4152          /* The stash may have been detached from the symbol table, so
4153             check its name before doing anything. */
4154          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
4155         ) {
4156             MAGIC *mg;
4157             MAGIC * const omg = dref && SvSMAGICAL(dref)
4158                                  ? mg_find(dref, PERL_MAGIC_isa)
4159                                  : NULL;
4160             if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
4161                 if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
4162                     AV * const ary = newAV();
4163                     av_push(ary, mg->mg_obj); /* takes the refcount */
4164                     mg->mg_obj = (SV *)ary;
4165                 }
4166                 if (omg) {
4167                     if (SvTYPE(omg->mg_obj) == SVt_PVAV) {
4168                         SV **svp = AvARRAY((AV *)omg->mg_obj);
4169                         I32 items = AvFILLp((AV *)omg->mg_obj) + 1;
4170                         while (items--)
4171                             av_push(
4172                              (AV *)mg->mg_obj,
4173                              SvREFCNT_inc_simple_NN(*svp++)
4174                             );
4175                     }
4176                     else
4177                         av_push(
4178                          (AV *)mg->mg_obj,
4179                          SvREFCNT_inc_simple_NN(omg->mg_obj)
4180                         );
4181                 }
4182                 else
4183                     av_push((AV *)mg->mg_obj,SvREFCNT_inc_simple_NN(dstr));
4184             }
4185             else
4186             {
4187                 SSize_t i;
4188                 sv_magic(
4189                  sref, omg ? omg->mg_obj : dstr, PERL_MAGIC_isa, NULL, 0
4190                 );
4191                 for (i = 0; i <= AvFILL(sref); ++i) {
4192                     SV **elem = av_fetch ((AV*)sref, i, 0);
4193                     if (elem) {
4194                         sv_magic(
4195                           *elem, sref, PERL_MAGIC_isaelem, NULL, i
4196                         );
4197                     }
4198                 }
4199                 mg = mg_find(sref, PERL_MAGIC_isa);
4200             }
4201             /* Since the *ISA assignment could have affected more than
4202                one stash, don't call mro_isa_changed_in directly, but let
4203                magic_clearisa do it for us, as it already has the logic for
4204                dealing with globs vs arrays of globs. */
4205             assert(mg);
4206             Perl_magic_clearisa(aTHX_ NULL, mg);
4207         }
4208         else if (stype == SVt_PVIO) {
4209             DEBUG_o(Perl_deb(aTHX_ "gv_setref clearing PL_stashcache\n"));
4210             /* It's a cache. It will rebuild itself quite happily.
4211                It's a lot of effort to work out exactly which key (or keys)
4212                might be invalidated by the creation of the this file handle.
4213             */
4214             hv_clear(PL_stashcache);
4215         }
4216         break;
4217     }
4218     if (!intro) SvREFCNT_dec(dref);
4219     if (SvTAINTED(sstr))
4220         SvTAINT(dstr);
4221     return;
4222 }
4223
4224
4225
4226
4227 #ifdef PERL_DEBUG_READONLY_COW
4228 # include <sys/mman.h>
4229
4230 # ifndef PERL_MEMORY_DEBUG_HEADER_SIZE
4231 #  define PERL_MEMORY_DEBUG_HEADER_SIZE 0
4232 # endif
4233
4234 void
4235 Perl_sv_buf_to_ro(pTHX_ SV *sv)
4236 {
4237     struct perl_memory_debug_header * const header =
4238         (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4239     const MEM_SIZE len = header->size;
4240     PERL_ARGS_ASSERT_SV_BUF_TO_RO;
4241 # ifdef PERL_TRACK_MEMPOOL
4242     if (!header->readonly) header->readonly = 1;
4243 # endif
4244     if (mprotect(header, len, PROT_READ))
4245         Perl_warn(aTHX_ "mprotect RW for COW string %p %lu failed with %d",
4246                          header, len, errno);
4247 }
4248
4249 static void
4250 S_sv_buf_to_rw(pTHX_ SV *sv)
4251 {
4252     struct perl_memory_debug_header * const header =
4253         (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4254     const MEM_SIZE len = header->size;
4255     PERL_ARGS_ASSERT_SV_BUF_TO_RW;
4256     if (mprotect(header, len, PROT_READ|PROT_WRITE))
4257         Perl_warn(aTHX_ "mprotect for COW string %p %lu failed with %d",
4258                          header, len, errno);
4259 # ifdef PERL_TRACK_MEMPOOL
4260     header->readonly = 0;
4261 # endif
4262 }
4263
4264 #else
4265 # define sv_buf_to_ro(sv)       NOOP
4266 # define sv_buf_to_rw(sv)       NOOP
4267 #endif
4268
4269 void
4270 Perl_sv_setsv_flags(pTHX_ SV *dstr, SV* sstr, const I32 flags)
4271 {
4272     U32 sflags;
4273     int dtype;
4274     svtype stype;
4275
4276     PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
4277
4278     if (UNLIKELY( sstr == dstr ))
4279         return;
4280
4281     if (SvIS_FREED(dstr)) {
4282         Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
4283                    " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
4284     }
4285     SV_CHECK_THINKFIRST_COW_DROP(dstr);
4286     if (UNLIKELY( !sstr ))
4287         sstr = &PL_sv_undef;
4288     if (SvIS_FREED(sstr)) {
4289         Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
4290                    (void*)sstr, (void*)dstr);
4291     }
4292     stype = SvTYPE(sstr);
4293     dtype = SvTYPE(dstr);
4294
4295     /* There's a lot of redundancy below but we're going for speed here */
4296
4297     switch (stype) {
4298     case SVt_NULL:
4299       undef_sstr:
4300         if (LIKELY( dtype != SVt_PVGV && dtype != SVt_PVLV )) {
4301             (void)SvOK_off(dstr);
4302             return;
4303         }
4304         break;
4305     case SVt_IV:
4306         if (SvIOK(sstr)) {
4307             switch (dtype) {
4308             case SVt_NULL:
4309                 /* For performance, we inline promoting to type SVt_IV. */
4310                 /* We're starting from SVt_NULL, so provided that define is
4311                  * actual 0, we don't have to unset any SV type flags
4312                  * to promote to SVt_IV. */
4313                 STATIC_ASSERT_STMT(SVt_NULL == 0);
4314                 SET_SVANY_FOR_BODYLESS_IV(dstr);
4315                 SvFLAGS(dstr) |= SVt_IV;
4316                 break;
4317             case SVt_NV:
4318             case SVt_PV:
4319                 sv_upgrade(dstr, SVt_PVIV);
4320                 break;
4321             case SVt_PVGV:
4322             case SVt_PVLV:
4323                 goto end_of_first_switch;
4324             }
4325             (void)SvIOK_only(dstr);
4326             SvIV_set(dstr,  SvIVX(sstr));
4327             if (SvIsUV(sstr))
4328                 SvIsUV_on(dstr);
4329             /* SvTAINTED can only be true if the SV has taint magic, which in
4330                turn means that the SV type is PVMG (or greater). This is the
4331                case statement for SVt_IV, so this cannot be true (whatever gcov
4332                may say).  */
4333             assert(!SvTAINTED(sstr));
4334             return;
4335         }
4336         if (!SvROK(sstr))
4337             goto undef_sstr;
4338         if (dtype < SVt_PV && dtype != SVt_IV)
4339             sv_upgrade(dstr, SVt_IV);
4340         break;
4341
4342     case SVt_NV:
4343         if (LIKELY( SvNOK(sstr) )) {
4344             switch (dtype) {
4345             case SVt_NULL:
4346             case SVt_IV:
4347                 sv_upgrade(dstr, SVt_NV);
4348                 break;
4349             case SVt_PV:
4350             case SVt_PVIV:
4351                 sv_upgrade(dstr, SVt_PVNV);
4352                 break;
4353             case SVt_PVGV:
4354             case SVt_PVLV:
4355                 goto end_of_first_switch;
4356             }
4357             SvNV_set(dstr, SvNVX(sstr));
4358             (void)SvNOK_only(dstr);
4359             /* SvTAINTED can only be true if the SV has taint magic, which in
4360                turn means that the SV type is PVMG (or greater). This is the
4361                case statement for SVt_NV, so this cannot be true (whatever gcov
4362                may say).  */
4363             assert(!SvTAINTED(sstr));
4364             return;
4365         }
4366         goto undef_sstr;
4367
4368     case SVt_PV:
4369         if (dtype < SVt_PV)
4370             sv_upgrade(dstr, SVt_PV);
4371         break;
4372     case SVt_PVIV:
4373         if (dtype < SVt_PVIV)
4374             sv_upgrade(dstr, SVt_PVIV);
4375         break;
4376     case SVt_PVNV:
4377         if (dtype < SVt_PVNV)
4378             sv_upgrade(dstr, SVt_PVNV);
4379         break;
4380     default:
4381         {
4382         const char * const type = sv_reftype(sstr,0);
4383         if (PL_op)
4384             /* diag_listed_as: Bizarre copy of %s */
4385             Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
4386         else
4387             Perl_croak(aTHX_ "Bizarre copy of %s", type);
4388         }
4389         NOT_REACHED; /* NOTREACHED */
4390
4391     case SVt_REGEXP:
4392       upgregexp:
4393         if (dtype < SVt_REGEXP)
4394         {
4395             if (dtype >= SVt_PV) {
4396                 SvPV_free(dstr);
4397                 SvPV_set(dstr, 0);
4398                 SvLEN_set(dstr, 0);
4399                 SvCUR_set(dstr, 0);
4400             }
4401             sv_upgrade(dstr, SVt_REGEXP);
4402         }
4403         break;
4404
4405         case SVt_INVLIST:
4406     case SVt_PVLV:
4407     case SVt_PVGV:
4408     case SVt_PVMG:
4409         if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
4410             mg_get(sstr);
4411             if (SvTYPE(sstr) != stype)
4412                 stype = SvTYPE(sstr);
4413         }
4414         if (isGV_with_GP(sstr) && dtype <= SVt_PVLV) {
4415                     glob_assign_glob(dstr, sstr, dtype);
4416                     return;
4417         }
4418         if (stype == SVt_PVLV)
4419         {
4420             if (isREGEXP(sstr)) goto upgregexp;
4421             SvUPGRADE(dstr, SVt_PVNV);
4422         }
4423         else
4424             SvUPGRADE(dstr, (svtype)stype);
4425     }
4426  end_of_first_switch:
4427
4428     /* dstr may have been upgraded.  */
4429     dtype = SvTYPE(dstr);
4430     sflags = SvFLAGS(sstr);
4431
4432     if (UNLIKELY( dtype == SVt_PVCV )) {
4433         /* Assigning to a subroutine sets the prototype.  */
4434         if (SvOK(sstr)) {
4435             STRLEN len;
4436             const char *const ptr = SvPV_const(sstr, len);
4437
4438             SvGROW(dstr, len + 1);
4439             Copy(ptr, SvPVX(dstr), len + 1, char);
4440             SvCUR_set(dstr, len);
4441             SvPOK_only(dstr);
4442             SvFLAGS(dstr) |= sflags & SVf_UTF8;
4443             CvAUTOLOAD_off(dstr);
4444         } else {
4445             SvOK_off(dstr);
4446         }
4447     }
4448     else if (UNLIKELY(dtype == SVt_PVAV || dtype == SVt_PVHV
4449              || dtype == SVt_PVFM))
4450     {
4451         const char * const type = sv_reftype(dstr,0);
4452         if (PL_op)
4453             /* diag_listed_as: Cannot copy to %s */
4454             Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
4455         else
4456             Perl_croak(aTHX_ "Cannot copy to %s", type);
4457     } else if (sflags & SVf_ROK) {
4458         if (isGV_with_GP(dstr)
4459             && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
4460             sstr = SvRV(sstr);
4461             if (sstr == dstr) {
4462                 if (GvIMPORTED(dstr) != GVf_IMPORTED
4463                     && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4464                 {
4465                     GvIMPORTED_on(dstr);
4466                 }
4467                 GvMULTI_on(dstr);
4468                 return;
4469             }
4470             glob_assign_glob(dstr, sstr, dtype);
4471             return;
4472         }
4473
4474         if (dtype >= SVt_PV) {
4475             if (isGV_with_GP(dstr)) {
4476                 gv_setref(dstr, sstr);
4477                 return;
4478             }
4479             if (SvPVX_const(dstr)) {
4480                 SvPV_free(dstr);
4481                 SvLEN_set(dstr, 0);
4482                 SvCUR_set(dstr, 0);
4483             }
4484         }
4485         (void)SvOK_off(dstr);
4486         SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4487         SvFLAGS(dstr) |= sflags & SVf_ROK;
4488         assert(!(sflags & SVp_NOK));
4489         assert(!(sflags & SVp_IOK));
4490         assert(!(sflags & SVf_NOK));
4491         assert(!(sflags & SVf_IOK));
4492     }
4493     else if (isGV_with_GP(dstr)) {
4494         if (!(sflags & SVf_OK)) {
4495             Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4496                            "Undefined value assigned to typeglob");
4497         }
4498         else {
4499             GV *gv = gv_fetchsv_nomg(sstr, GV_ADD, SVt_PVGV);
4500             if (dstr != (const SV *)gv) {
4501                 const char * const name = GvNAME((const GV *)dstr);
4502                 const STRLEN len = GvNAMELEN(dstr);
4503                 HV *old_stash = NULL;
4504                 bool reset_isa = FALSE;
4505                 if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
4506                  || (len == 1 && name[0] == ':')) {
4507                     /* Set aside the old stash, so we can reset isa caches
4508                        on its subclasses. */
4509                     if((old_stash = GvHV(dstr))) {
4510                         /* Make sure we do not lose it early. */
4511                         SvREFCNT_inc_simple_void_NN(
4512                          sv_2mortal((SV *)old_stash)
4513                         );
4514                     }
4515                     reset_isa = TRUE;
4516                 }
4517
4518                 if (GvGP(dstr)) {
4519                     SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
4520                     gp_free(MUTABLE_GV(dstr));
4521                 }
4522                 GvGP_set(dstr, gp_ref(GvGP(gv)));
4523
4524                 if (reset_isa) {
4525                     HV * const stash = GvHV(dstr);
4526                     if(
4527                         old_stash ? (HV *)HvENAME_get(old_stash) : stash
4528                     )
4529                         mro_package_moved(
4530                          stash, old_stash,
4531                          (GV *)dstr, 0
4532                         );
4533                 }
4534             }
4535         }
4536     }
4537     else if ((dtype == SVt_REGEXP || dtype == SVt_PVLV)
4538           && (stype == SVt_REGEXP || isREGEXP(sstr))) {
4539         reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4540     }
4541     else if (sflags & SVp_POK) {
4542         const STRLEN cur = SvCUR(sstr);
4543         const STRLEN len = SvLEN(sstr);
4544
4545         /*
4546          * We have three basic ways to copy the string:
4547          *
4548          *  1. Swipe
4549          *  2. Copy-on-write
4550          *  3. Actual copy
4551          * 
4552          * Which we choose is based on various factors.  The following
4553          * things are listed in order of speed, fastest to slowest:
4554          *  - Swipe
4555          *  - Copying a short string
4556          *  - Copy-on-write bookkeeping
4557          *  - malloc
4558          *  - Copying a long string
4559          * 
4560          * We swipe the string (steal the string buffer) if the SV on the
4561          * rhs is about to be freed anyway (TEMP and refcnt==1).  This is a
4562          * big win on long strings.  It should be a win on short strings if
4563          * SvPVX_const(dstr) has to be allocated.  If not, it should not 
4564          * slow things down, as SvPVX_const(sstr) would have been freed
4565          * soon anyway.
4566          * 
4567          * We also steal the buffer from a PADTMP (operator target) if it
4568          * is â€˜long enough’.  For short strings, a swipe does not help
4569          * here, as it causes more malloc calls the next time the target
4570          * is used.  Benchmarks show that even if SvPVX_const(dstr) has to
4571          * be allocated it is still not worth swiping PADTMPs for short
4572          * strings, as the savings here are small.
4573          * 
4574          * If swiping is not an option, then we see whether it is
4575          * worth using copy-on-write.  If the lhs already has a buf-
4576          * fer big enough and the string is short, we skip it and fall back
4577          * to method 3, since memcpy is faster for short strings than the
4578          * later bookkeeping overhead that copy-on-write entails.
4579
4580          * If the rhs is not a copy-on-write string yet, then we also
4581          * consider whether the buffer is too large relative to the string
4582          * it holds.  Some operations such as readline allocate a large
4583          * buffer in the expectation of reusing it.  But turning such into
4584          * a COW buffer is counter-productive because it increases memory
4585          * usage by making readline allocate a new large buffer the sec-
4586          * ond time round.  So, if the buffer is too large, again, we use
4587          * method 3 (copy).
4588          * 
4589          * Finally, if there is no buffer on the left, or the buffer is too 
4590          * small, then we use copy-on-write and make both SVs share the
4591          * string buffer.
4592          *
4593          */
4594
4595         /* Whichever path we take through the next code, we want this true,
4596            and doing it now facilitates the COW check.  */
4597         (void)SvPOK_only(dstr);
4598
4599         if (
4600                  (              /* Either ... */
4601                                 /* slated for free anyway (and not COW)? */
4602                     (sflags & (SVs_TEMP|SVf_IsCOW)) == SVs_TEMP
4603                                 /* or a swipable TARG */
4604                  || ((sflags &
4605                            (SVs_PADTMP|SVf_READONLY|SVf_PROTECT|SVf_IsCOW))
4606                        == SVs_PADTMP
4607                                 /* whose buffer is worth stealing */
4608                      && CHECK_COWBUF_THRESHOLD(cur,len)
4609                     )
4610                  ) &&
4611                  !(sflags & SVf_OOK) &&   /* and not involved in OOK hack? */
4612                  (!(flags & SV_NOSTEAL)) &&
4613                                         /* and we're allowed to steal temps */
4614                  SvREFCNT(sstr) == 1 &&   /* and no other references to it? */
4615                  len)             /* and really is a string */
4616         {       /* Passes the swipe test.  */
4617             if (SvPVX_const(dstr))      /* we know that dtype >= SVt_PV */
4618                 SvPV_free(dstr);
4619             SvPV_set(dstr, SvPVX_mutable(sstr));
4620             SvLEN_set(dstr, SvLEN(sstr));
4621             SvCUR_set(dstr, SvCUR(sstr));
4622
4623             SvTEMP_off(dstr);
4624             (void)SvOK_off(sstr);       /* NOTE: nukes most SvFLAGS on sstr */
4625             SvPV_set(sstr, NULL);
4626             SvLEN_set(sstr, 0);
4627             SvCUR_set(sstr, 0);
4628             SvTEMP_off(sstr);
4629         }
4630         else if (flags & SV_COW_SHARED_HASH_KEYS
4631               &&
4632 #ifdef PERL_COPY_ON_WRITE
4633                  (sflags & SVf_IsCOW
4634                    ? (!len ||
4635                        (  (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
4636                           /* If this is a regular (non-hek) COW, only so
4637                              many COW "copies" are possible. */
4638                        && CowREFCNT(sstr) != SV_COW_REFCNT_MAX  ))
4639                    : (  (sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4640                      && !(SvFLAGS(dstr) & SVf_BREAK)
4641                      && CHECK_COW_THRESHOLD(cur,len) && cur+1 < len
4642                      && (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
4643                     ))
4644 #else
4645                  sflags & SVf_IsCOW
4646               && !(SvFLAGS(dstr) & SVf_BREAK)
4647 #endif
4648             ) {
4649             /* Either it's a shared hash key, or it's suitable for
4650                copy-on-write.  */
4651             if (DEBUG_C_TEST) {
4652                 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4653                 sv_dump(sstr);
4654                 sv_dump(dstr);
4655             }
4656 #ifdef PERL_ANY_COW
4657             if (!(sflags & SVf_IsCOW)) {
4658                     SvIsCOW_on(sstr);
4659                     CowREFCNT(sstr) = 0;
4660             }
4661 #endif
4662             if (SvPVX_const(dstr)) {    /* we know that dtype >= SVt_PV */
4663                 SvPV_free(dstr);
4664             }
4665
4666 #ifdef PERL_ANY_COW
4667             if (len) {
4668                     if (sflags & SVf_IsCOW) {
4669                         sv_buf_to_rw(sstr);
4670                     }
4671                     CowREFCNT(sstr)++;
4672                     SvPV_set(dstr, SvPVX_mutable(sstr));
4673                     sv_buf_to_ro(sstr);
4674             } else
4675 #endif
4676             {
4677                     /* SvIsCOW_shared_hash */
4678                     DEBUG_C(PerlIO_printf(Perl_debug_log,
4679                                           "Copy on write: Sharing hash\n"));
4680
4681                     assert (SvTYPE(dstr) >= SVt_PV);
4682                     SvPV_set(dstr,
4683                              HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
4684             }
4685             SvLEN_set(dstr, len);
4686             SvCUR_set(dstr, cur);
4687             SvIsCOW_on(dstr);
4688         } else {
4689             /* Failed the swipe test, and we cannot do copy-on-write either.
4690                Have to copy the string.  */
4691             SvGROW(dstr, cur + 1);      /* inlined from sv_setpvn */
4692             Move(SvPVX_const(sstr),SvPVX(dstr),cur,char);
4693             SvCUR_set(dstr, cur);
4694             *SvEND(dstr) = '\0';
4695         }
4696         if (sflags & SVp_NOK) {
4697             SvNV_set(dstr, SvNVX(sstr));
4698         }
4699         if (sflags & SVp_IOK) {
4700             SvIV_set(dstr, SvIVX(sstr));
4701             /* Must do this otherwise some other overloaded use of 0x80000000
4702                gets confused. I guess SVpbm_VALID */
4703             if (sflags & SVf_IVisUV)
4704                 SvIsUV_on(dstr);
4705         }
4706         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4707         {
4708             const MAGIC * const smg = SvVSTRING_mg(sstr);
4709             if (smg) {
4710                 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4711                          smg->mg_ptr, smg->mg_len);
4712                 SvRMAGICAL_on(dstr);
4713             }
4714         }
4715     }
4716     else if (sflags & (SVp_IOK|SVp_NOK)) {
4717         (void)SvOK_off(dstr);
4718         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
4719         if (sflags & SVp_IOK) {
4720             /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
4721             SvIV_set(dstr, SvIVX(sstr));
4722         }
4723         if (sflags & SVp_NOK) {
4724             SvNV_set(dstr, SvNVX(sstr));
4725         }
4726     }
4727     else {
4728         if (isGV_with_GP(sstr)) {
4729             gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
4730         }
4731         else
4732             (void)SvOK_off(dstr);
4733     }
4734     if (SvTAINTED(sstr))
4735         SvTAINT(dstr);
4736 }
4737
4738 /*
4739 =for apidoc sv_setsv_mg
4740
4741 Like C<sv_setsv>, but also handles 'set' magic.
4742
4743 =cut
4744 */
4745
4746 void
4747 Perl_sv_setsv_mg(pTHX_ SV *const dstr, SV *const sstr)
4748 {
4749     PERL_ARGS_ASSERT_SV_SETSV_MG;
4750
4751     sv_setsv(dstr,sstr);
4752     SvSETMAGIC(dstr);
4753 }
4754
4755 #ifdef PERL_ANY_COW
4756 #  define SVt_COW SVt_PV
4757 SV *
4758 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4759 {
4760     STRLEN cur = SvCUR(sstr);
4761     STRLEN len = SvLEN(sstr);
4762     char *new_pv;
4763 #if defined(PERL_DEBUG_READONLY_COW) && defined(PERL_COPY_ON_WRITE)
4764     const bool already = cBOOL(SvIsCOW(sstr));
4765 #endif
4766
4767     PERL_ARGS_ASSERT_SV_SETSV_COW;
4768
4769     if (DEBUG_C_TEST) {
4770         PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4771                       (void*)sstr, (void*)dstr);
4772         sv_dump(sstr);
4773         if (dstr)
4774                     sv_dump(dstr);
4775     }
4776
4777     if (dstr) {
4778         if (SvTHINKFIRST(dstr))
4779             sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4780         else if (SvPVX_const(dstr))
4781             Safefree(SvPVX_mutable(dstr));
4782     }
4783     else
4784         new_SV(dstr);
4785     SvUPGRADE(dstr, SVt_COW);
4786
4787     assert (SvPOK(sstr));
4788     assert (SvPOKp(sstr));
4789
4790     if (SvIsCOW(sstr)) {
4791
4792         if (SvLEN(sstr) == 0) {
4793             /* source is a COW shared hash key.  */
4794             DEBUG_C(PerlIO_printf(Perl_debug_log,
4795                                   "Fast copy on write: Sharing hash\n"));
4796             new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
4797             goto common_exit;
4798         }
4799         assert(SvCUR(sstr)+1 < SvLEN(sstr));
4800         assert(CowREFCNT(sstr) < SV_COW_REFCNT_MAX);
4801     } else {
4802         assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4803         SvUPGRADE(sstr, SVt_COW);
4804         SvIsCOW_on(sstr);
4805         DEBUG_C(PerlIO_printf(Perl_debug_log,
4806                               "Fast copy on write: Converting sstr to COW\n"));
4807         CowREFCNT(sstr) = 0;    
4808     }
4809 #  ifdef PERL_DEBUG_READONLY_COW
4810     if (already) sv_buf_to_rw(sstr);
4811 #  endif
4812     CowREFCNT(sstr)++;  
4813     new_pv = SvPVX_mutable(sstr);
4814     sv_buf_to_ro(sstr);
4815
4816   common_exit:
4817     SvPV_set(dstr, new_pv);
4818     SvFLAGS(dstr) = (SVt_COW|SVf_POK|SVp_POK|SVf_IsCOW);
4819     if (SvUTF8(sstr))
4820         SvUTF8_on(dstr);
4821     SvLEN_set(dstr, len);
4822     SvCUR_set(dstr, cur);
4823     if (DEBUG_C_TEST) {
4824         sv_dump(dstr);
4825     }
4826     return dstr;
4827 }
4828 #endif
4829
4830 /*
4831 =for apidoc sv_setpvn
4832
4833 Copies a string (possibly containing embedded C<NUL> characters) into an SV.
4834 The C<len> parameter indicates the number of
4835 bytes to be copied.  If the C<ptr> argument is NULL the SV will become
4836 undefined.  Does not handle 'set' magic.  See C<L</sv_setpvn_mg>>.
4837
4838 =cut
4839 */
4840
4841 void
4842 Perl_sv_setpvn(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4843 {
4844     char *dptr;
4845
4846     PERL_ARGS_ASSERT_SV_SETPVN;
4847
4848     SV_CHECK_THINKFIRST_COW_DROP(sv);
4849     if (!ptr) {
4850         (void)SvOK_off(sv);
4851         return;
4852     }
4853     else {
4854         /* len is STRLEN which is unsigned, need to copy to signed */
4855         const IV iv = len;
4856         if (iv < 0)
4857             Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen %"
4858                        IVdf, iv);
4859     }
4860     SvUPGRADE(sv, SVt_PV);
4861
4862     dptr = SvGROW(sv, len + 1);
4863     Move(ptr,dptr,len,char);
4864     dptr[len] = '\0';
4865     SvCUR_set(sv, len);
4866     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4867     SvTAINT(sv);
4868     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4869 }
4870
4871 /*
4872 =for apidoc sv_setpvn_mg
4873
4874 Like C<sv_setpvn>, but also handles 'set' magic.
4875
4876 =cut
4877 */
4878
4879 void
4880 Perl_sv_setpvn_mg(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4881 {
4882     PERL_ARGS_ASSERT_SV_SETPVN_MG;
4883
4884     sv_setpvn(sv,ptr,len);
4885     SvSETMAGIC(sv);
4886 }
4887
4888 /*
4889 =for apidoc sv_setpv
4890
4891 Copies a string into an SV.  The string must be terminated with a C<NUL>
4892 character.
4893 Does not handle 'set' magic.  See C<L</sv_setpv_mg>>.
4894
4895 =cut
4896 */
4897
4898 void
4899 Perl_sv_setpv(pTHX_ SV *const sv, const char *const ptr)
4900 {
4901     STRLEN len;
4902
4903     PERL_ARGS_ASSERT_SV_SETPV;
4904
4905     SV_CHECK_THINKFIRST_COW_DROP(sv);
4906     if (!ptr) {
4907         (void)SvOK_off(sv);
4908         return;
4909     }
4910     len = strlen(ptr);
4911     SvUPGRADE(sv, SVt_PV);
4912
4913     SvGROW(sv, len + 1);
4914     Move(ptr,SvPVX(sv),len+1,char);
4915     SvCUR_set(sv, len);
4916     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4917     SvTAINT(sv);
4918     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4919 }
4920
4921 /*
4922 =for apidoc sv_setpv_mg
4923
4924 Like C<sv_setpv>, but also handles 'set' magic.
4925
4926 =cut
4927 */
4928
4929 void
4930 Perl_sv_setpv_mg(pTHX_ SV *const sv, const char *const ptr)
4931 {
4932     PERL_ARGS_ASSERT_SV_SETPV_MG;
4933
4934     sv_setpv(sv,ptr);
4935     SvSETMAGIC(sv);
4936 }
4937
4938 void
4939 Perl_sv_sethek(pTHX_ SV *const sv, const HEK *const hek)
4940 {
4941     PERL_ARGS_ASSERT_SV_SETHEK;
4942
4943     if (!hek) {
4944         return;
4945     }
4946
4947     if (HEK_LEN(hek) == HEf_SVKEY) {
4948         sv_setsv(sv, *(SV**)HEK_KEY(hek));
4949         return;
4950     } else {
4951         const int flags = HEK_FLAGS(hek);
4952         if (flags & HVhek_WASUTF8) {
4953             STRLEN utf8_len = HEK_LEN(hek);
4954             char *as_utf8 = (char *)bytes_to_utf8((U8*)HEK_KEY(hek), &utf8_len);
4955             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
4956             SvUTF8_on(sv);
4957             return;
4958         } else if (flags & HVhek_UNSHARED) {
4959             sv_setpvn(sv, HEK_KEY(hek), HEK_LEN(hek));
4960             if (HEK_UTF8(hek))
4961                 SvUTF8_on(sv);
4962             else SvUTF8_off(sv);
4963             return;
4964         }
4965         {
4966             SV_CHECK_THINKFIRST_COW_DROP(sv);
4967             SvUPGRADE(sv, SVt_PV);
4968             SvPV_free(sv);
4969             SvPV_set(sv,(char *)HEK_KEY(share_hek_hek(hek)));
4970             SvCUR_set(sv, HEK_LEN(hek));
4971             SvLEN_set(sv, 0);
4972             SvIsCOW_on(sv);
4973             SvPOK_on(sv);
4974             if (HEK_UTF8(hek))
4975                 SvUTF8_on(sv);
4976             else SvUTF8_off(sv);
4977             return;
4978         }
4979     }
4980 }
4981
4982
4983 /*
4984 =for apidoc sv_usepvn_flags
4985
4986 Tells an SV to use C<ptr> to find its string value.  Normally the
4987 string is stored inside the SV, but sv_usepvn allows the SV to use an
4988 outside string.  C<ptr> should point to memory that was allocated
4989 by L<C<Newx>|perlclib/Memory Management and String Handling>.  It must be
4990 the start of a C<Newx>-ed block of memory, and not a pointer to the
4991 middle of it (beware of L<C<OOK>|perlguts/Offsets> and copy-on-write),
4992 and not be from a non-C<Newx> memory allocator like C<malloc>.  The
4993 string length, C<len>, must be supplied.  By default this function
4994 will C<Renew> (i.e. realloc, move) the memory pointed to by C<ptr>,
4995 so that pointer should not be freed or used by the programmer after
4996 giving it to C<sv_usepvn>, and neither should any pointers from "behind"
4997 that pointer (e.g. ptr + 1) be used.
4998
4999 If S<C<flags & SV_SMAGIC>> is true, will call C<SvSETMAGIC>.  If
5000 S<C<flags> & SV_HAS_TRAILING_NUL>> is true, then C<ptr[len]> must be C<NUL>,
5001 and the realloc
5002 will be skipped (i.e. the buffer is actually at least 1 byte longer than
5003 C<len>, and already meets the requirements for storing in C<SvPVX>).
5004
5005 =cut
5006 */
5007
5008 void
5009 Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
5010 {
5011     STRLEN allocate;
5012
5013     PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
5014
5015     SV_CHECK_THINKFIRST_COW_DROP(sv);
5016     SvUPGRADE(sv, SVt_PV);
5017     if (!ptr) {
5018         (void)SvOK_off(sv);
5019         if (flags & SV_SMAGIC)
5020             SvSETMAGIC(sv);
5021         return;
5022     }
5023     if (SvPVX_const(sv))
5024         SvPV_free(sv);
5025
5026 #ifdef DEBUGGING
5027     if (flags & SV_HAS_TRAILING_NUL)
5028         assert(ptr[len] == '\0');
5029 #endif
5030
5031     allocate = (flags & SV_HAS_TRAILING_NUL)
5032         ? len + 1 :
5033 #ifdef Perl_safesysmalloc_size
5034         len + 1;
5035 #else 
5036         PERL_STRLEN_ROUNDUP(len + 1);
5037 #endif
5038     if (flags & SV_HAS_TRAILING_NUL) {
5039         /* It's long enough - do nothing.
5040            Specifically Perl_newCONSTSUB is relying on this.  */
5041     } else {
5042 #ifdef DEBUGGING
5043         /* Force a move to shake out bugs in callers.  */
5044         char *new_ptr = (char*)safemalloc(allocate);
5045         Copy(ptr, new_ptr, len, char);
5046         PoisonFree(ptr,len,char);
5047         Safefree(ptr);
5048         ptr = new_ptr;
5049 #else
5050         ptr = (char*) saferealloc (ptr, allocate);
5051 #endif
5052     }
5053 #ifdef Perl_safesysmalloc_size
5054     SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
5055 #else
5056     SvLEN_set(sv, allocate);
5057 #endif
5058     SvCUR_set(sv, len);
5059     SvPV_set(sv, ptr);
5060     if (!(flags & SV_HAS_TRAILING_NUL)) {
5061         ptr[len] = '\0';
5062     }
5063     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5064     SvTAINT(sv);
5065     if (flags & SV_SMAGIC)
5066         SvSETMAGIC(sv);
5067 }
5068
5069 /*
5070 =for apidoc sv_force_normal_flags
5071
5072 Undo various types of fakery on an SV, where fakery means
5073 "more than" a string: if the PV is a shared string, make
5074 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
5075 an C<xpvmg>; if we're a copy-on-write scalar, this is the on-write time when
5076 we do the copy, and is also used locally; if this is a
5077 vstring, drop the vstring magic.  If C<SV_COW_DROP_PV> is set
5078 then a copy-on-write scalar drops its PV buffer (if any) and becomes
5079 C<SvPOK_off> rather than making a copy.  (Used where this
5080 scalar is about to be set to some other value.)  In addition,
5081 the C<flags> parameter gets passed to C<sv_unref_flags()>
5082 when unreffing.  C<sv_force_normal> calls this function
5083 with flags set to 0.
5084
5085 This function is expected to be used to signal to perl that this SV is
5086 about to be written to, and any extra book-keeping needs to be taken care
5087 of.  Hence, it croaks on read-only values.
5088
5089 =cut
5090 */
5091
5092 static void
5093 S_sv_uncow(pTHX_ SV * const sv, const U32 flags)
5094 {
5095     assert(SvIsCOW(sv));
5096     {
5097 #ifdef PERL_ANY_COW
5098         const char * const pvx = SvPVX_const(sv);
5099         const STRLEN len = SvLEN(sv);
5100         const STRLEN cur = SvCUR(sv);
5101
5102         if (DEBUG_C_TEST) {
5103                 PerlIO_printf(Perl_debug_log,
5104                               "Copy on write: Force normal %ld\n",
5105                               (long) flags);
5106                 sv_dump(sv);
5107         }
5108         SvIsCOW_off(sv);
5109 # ifdef PERL_COPY_ON_WRITE
5110         if (len) {
5111             /* Must do this first, since the CowREFCNT uses SvPVX and
5112             we need to write to CowREFCNT, or de-RO the whole buffer if we are
5113             the only owner left of the buffer. */
5114             sv_buf_to_rw(sv); /* NOOP if RO-ing not supported */
5115             {
5116                 U8 cowrefcnt = CowREFCNT(sv);
5117                 if(cowrefcnt != 0) {
5118                     cowrefcnt--;
5119                     CowREFCNT(sv) = cowrefcnt;
5120                     sv_buf_to_ro(sv);
5121                     goto copy_over;
5122                 }
5123             }
5124             /* Else we are the only owner of the buffer. */
5125         }
5126         else
5127 # endif
5128         {
5129             /* This SV doesn't own the buffer, so need to Newx() a new one:  */
5130             copy_over:
5131             SvPV_set(sv, NULL);
5132             SvCUR_set(sv, 0);
5133             SvLEN_set(sv, 0);
5134             if (flags & SV_COW_DROP_PV) {
5135                 /* OK, so we don't need to copy our buffer.  */
5136                 SvPOK_off(sv);
5137             } else {
5138                 SvGROW(sv, cur + 1);
5139                 Move(pvx,SvPVX(sv),cur,char);
5140                 SvCUR_set(sv, cur);
5141                 *SvEND(sv) = '\0';
5142             }
5143             if (len) {
5144             } else {
5145                 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5146             }
5147             if (DEBUG_C_TEST) {
5148                 sv_dump(sv);
5149             }
5150         }
5151 #else
5152             const char * const pvx = SvPVX_const(sv);
5153             const STRLEN len = SvCUR(sv);
5154             SvIsCOW_off(sv);
5155             SvPV_set(sv, NULL);
5156             SvLEN_set(sv, 0);
5157             if (flags & SV_COW_DROP_PV) {
5158                 /* OK, so we don't need to copy our buffer.  */
5159                 SvPOK_off(sv);
5160             } else {
5161                 SvGROW(sv, len + 1);
5162                 Move(pvx,SvPVX(sv),len,char);
5163                 *SvEND(sv) = '\0';
5164             }
5165             unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5166 #endif
5167     }
5168 }
5169
5170 void
5171 Perl_sv_force_normal_flags(pTHX_ SV *const sv, const U32 flags)
5172 {
5173     PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
5174
5175     if (SvREADONLY(sv))
5176         Perl_croak_no_modify();
5177     else if (SvIsCOW(sv) && LIKELY(SvTYPE(sv) != SVt_PVHV))
5178         S_sv_uncow(aTHX_ sv, flags);
5179     if (SvROK(sv))
5180         sv_unref_flags(sv, flags);
5181     else if (SvFAKE(sv) && isGV_with_GP(sv))
5182         sv_unglob(sv, flags);
5183     else if (SvFAKE(sv) && isREGEXP(sv)) {
5184         /* Need to downgrade the REGEXP to a simple(r) scalar. This is analogous
5185            to sv_unglob. We only need it here, so inline it.  */
5186         const bool islv = SvTYPE(sv) == SVt_PVLV;
5187         const svtype new_type =
5188           islv ? SVt_NULL : SvMAGIC(sv) || SvSTASH(sv) ? SVt_PVMG : SVt_PV;
5189         SV *const temp = newSV_type(new_type);
5190         regexp *const temp_p = ReANY((REGEXP *)sv);
5191
5192         if (new_type == SVt_PVMG) {
5193             SvMAGIC_set(temp, SvMAGIC(sv));
5194             SvMAGIC_set(sv, NULL);
5195             SvSTASH_set(temp, SvSTASH(sv));
5196             SvSTASH_set(sv, NULL);
5197         }
5198         if (!islv) SvCUR_set(temp, SvCUR(sv));
5199         /* Remember that SvPVX is in the head, not the body.  But
5200            RX_WRAPPED is in the body. */
5201         assert(ReANY((REGEXP *)sv)->mother_re);
5202         /* Their buffer is already owned by someone else. */
5203         if (flags & SV_COW_DROP_PV) {
5204             /* SvLEN is already 0.  For SVt_REGEXP, we have a brand new
5205                zeroed body.  For SVt_PVLV, it should have been set to 0
5206                before turning into a regexp. */
5207             assert(!SvLEN(islv ? sv : temp));
5208             sv->sv_u.svu_pv = 0;
5209         }
5210         else {
5211             sv->sv_u.svu_pv = savepvn(RX_WRAPPED((REGEXP *)sv), SvCUR(sv));
5212             SvLEN_set(islv ? sv : temp, SvCUR(sv)+1);
5213             SvPOK_on(sv);
5214         }
5215
5216         /* Now swap the rest of the bodies. */
5217
5218         SvFAKE_off(sv);
5219         if (!islv) {
5220             SvFLAGS(sv) &= ~SVTYPEMASK;
5221             SvFLAGS(sv) |= new_type;
5222             SvANY(sv) = SvANY(temp);
5223         }
5224
5225         SvFLAGS(temp) &= ~(SVTYPEMASK);
5226         SvFLAGS(temp) |= SVt_REGEXP|SVf_FAKE;
5227         SvANY(temp) = temp_p;
5228         temp->sv_u.svu_rx = (regexp *)temp_p;
5229
5230         SvREFCNT_dec_NN(temp);
5231     }
5232     else if (SvVOK(sv)) sv_unmagic(sv, PERL_MAGIC_vstring);
5233 }
5234
5235 /*
5236 =for apidoc sv_chop
5237
5238 Efficient removal of characters from the beginning of the string buffer.
5239 C<SvPOK(sv)>, or at least C<SvPOKp(sv)>, must be true and C<ptr> must be a
5240 pointer to somewhere inside the string buffer.  C<ptr> becomes the first
5241 character of the adjusted string.  Uses the C<OOK> hack.  On return, only
5242 C<SvPOK(sv)> and C<SvPOKp(sv)> among the C<OK> flags will be true.
5243
5244 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
5245 refer to the same chunk of data.
5246
5247 The unfortunate similarity of this function's name to that of Perl's C<chop>
5248 operator is strictly coincidental.  This function works from the left;
5249 C<chop> works from the right.
5250
5251 =cut
5252 */
5253
5254 void
5255 Perl_sv_chop(pTHX_ SV *const sv, const char *const ptr)
5256 {
5257     STRLEN delta;
5258     STRLEN old_delta;
5259     U8 *p;
5260 #ifdef DEBUGGING
5261     const U8 *evacp;
5262     STRLEN evacn;
5263 #endif
5264     STRLEN max_delta;
5265
5266     PERL_ARGS_ASSERT_SV_CHOP;
5267
5268     if (!ptr || !SvPOKp(sv))
5269         return;
5270     delta = ptr - SvPVX_const(sv);
5271     if (!delta) {
5272         /* Nothing to do.  */
5273         return;
5274     }
5275     max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
5276     if (delta > max_delta)
5277         Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
5278                    ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
5279     /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), so don't use ptr any more */
5280     SV_CHECK_THINKFIRST(sv);
5281     SvPOK_only_UTF8(sv);
5282
5283     if (!SvOOK(sv)) {
5284         if (!SvLEN(sv)) { /* make copy of shared string */
5285             const char *pvx = SvPVX_const(sv);
5286             const STRLEN len = SvCUR(sv);
5287             SvGROW(sv, len + 1);
5288             Move(pvx,SvPVX(sv),len,char);
5289             *SvEND(sv) = '\0';
5290         }
5291         SvOOK_on(sv);
5292         old_delta = 0;
5293     } else {
5294         SvOOK_offset(sv, old_delta);
5295     }
5296     SvLEN_set(sv, SvLEN(sv) - delta);
5297     SvCUR_set(sv, SvCUR(sv) - delta);
5298     SvPV_set(sv, SvPVX(sv) + delta);
5299
5300     p = (U8 *)SvPVX_const(sv);
5301
5302 #ifdef DEBUGGING
5303     /* how many bytes were evacuated?  we will fill them with sentinel
5304        bytes, except for the part holding the new offset of course. */
5305     evacn = delta;
5306     if (old_delta)
5307         evacn += (old_delta < 0x100 ? 1 : 1 + sizeof(STRLEN));
5308     assert(evacn);
5309     assert(evacn <= delta + old_delta);
5310     evacp = p - evacn;
5311 #endif
5312
5313     /* This sets 'delta' to the accumulated value of all deltas so far */
5314     delta += old_delta;
5315     assert(delta);
5316
5317     /* If 'delta' fits in a byte, store it just prior to the new beginning of
5318      * the string; otherwise store a 0 byte there and store 'delta' just prior
5319      * to that, using as many bytes as a STRLEN occupies.  Thus it overwrites a
5320      * portion of the chopped part of the string */
5321     if (delta < 0x100) {
5322         *--p = (U8) delta;
5323     } else {
5324         *--p = 0;
5325         p -= sizeof(STRLEN);
5326         Copy((U8*)&delta, p, sizeof(STRLEN), U8);
5327     }
5328
5329 #ifdef DEBUGGING
5330     /* Fill the preceding buffer with sentinals to verify that no-one is
5331        using it.  */
5332     while (p > evacp) {
5333         --p;
5334         *p = (U8)PTR2UV(p);
5335     }
5336 #endif
5337 }
5338
5339 /*
5340 =for apidoc sv_catpvn
5341
5342 Concatenates the string onto the end of the string which is in the SV.
5343 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
5344 status set, then the bytes appended should be valid UTF-8.
5345 Handles 'get' magic, but not 'set' magic.  See C<L</sv_catpvn_mg>>.
5346
5347 =for apidoc sv_catpvn_flags
5348
5349 Concatenates the string onto the end of the string which is in the SV.  The
5350 C<len> indicates number of bytes to copy.
5351
5352 By default, the string appended is assumed to be valid UTF-8 if the SV has
5353 the UTF-8 status set, and a string of bytes otherwise.  One can force the
5354 appended string to be interpreted as UTF-8 by supplying the C<SV_CATUTF8>
5355 flag, and as bytes by supplying the C<SV_CATBYTES> flag; the SV or the
5356 string appended will be upgraded to UTF-8 if necessary.
5357
5358 If C<flags> has the C<SV_SMAGIC> bit set, will
5359 C<mg_set> on C<dsv> afterwards if appropriate.
5360 C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
5361 in terms of this function.
5362
5363 =cut
5364 */
5365
5366 void
5367 Perl_sv_catpvn_flags(pTHX_ SV *const dsv, const char *sstr, const STRLEN slen, const I32 flags)
5368 {
5369     STRLEN dlen;
5370     const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
5371
5372     PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
5373     assert((flags & (SV_CATBYTES|SV_CATUTF8)) != (SV_CATBYTES|SV_CATUTF8));
5374
5375     if (!(flags & SV_CATBYTES) || !SvUTF8(dsv)) {
5376       if (flags & SV_CATUTF8 && !SvUTF8(dsv)) {
5377          sv_utf8_upgrade_flags_grow(dsv, 0, slen + 1);
5378          dlen = SvCUR(dsv);
5379       }
5380       else SvGROW(dsv, dlen + slen + 1);
5381       if (sstr == dstr)
5382         sstr = SvPVX_const(dsv);
5383       Move(sstr, SvPVX(dsv) + dlen, slen, char);
5384       SvCUR_set(dsv, SvCUR(dsv) + slen);
5385     }
5386     else {
5387         /* We inline bytes_to_utf8, to avoid an extra malloc. */
5388         const char * const send = sstr + slen;
5389         U8 *d;
5390
5391         /* Something this code does not account for, which I think is
5392            impossible; it would require the same pv to be treated as
5393            bytes *and* utf8, which would indicate a bug elsewhere. */
5394         assert(sstr != dstr);
5395
5396         SvGROW(dsv, dlen + slen * 2 + 1);
5397         d = (U8 *)SvPVX(dsv) + dlen;
5398
5399         while (sstr < send) {
5400             append_utf8_from_native_byte(*sstr, &d);
5401             sstr++;
5402         }
5403         SvCUR_set(dsv, d-(const U8 *)SvPVX(dsv));
5404     }
5405     *SvEND(dsv) = '\0';
5406     (void)SvPOK_only_UTF8(dsv);         /* validate pointer */
5407     SvTAINT(dsv);
5408     if (flags & SV_SMAGIC)
5409         SvSETMAGIC(dsv);
5410 }
5411
5412 /*
5413 =for apidoc sv_catsv
5414
5415 Concatenates the string from SV C<ssv> onto the end of the string in SV
5416 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5417 Handles 'get' magic on both SVs, but no 'set' magic.  See C<L</sv_catsv_mg>>
5418 and C<L</sv_catsv_nomg>>.
5419
5420 =for apidoc sv_catsv_flags
5421
5422 Concatenates the string from SV C<ssv> onto the end of the string in SV
5423 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5424 If C<flags> has the C<SV_GMAGIC> bit set, will call C<mg_get> on both SVs if
5425 appropriate.  If C<flags> has the C<SV_SMAGIC> bit set, C<mg_set> will be called on
5426 the modified SV afterward, if appropriate.  C<sv_catsv>, C<sv_catsv_nomg>,
5427 and C<sv_catsv_mg> are implemented in terms of this function.
5428
5429 =cut */
5430
5431 void
5432 Perl_sv_catsv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
5433 {
5434     PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
5435
5436     if (ssv) {
5437         STRLEN slen;
5438         const char *spv = SvPV_flags_const(ssv, slen, flags);
5439         if (flags & SV_GMAGIC)
5440                 SvGETMAGIC(dsv);
5441         sv_catpvn_flags(dsv, spv, slen,
5442                             DO_UTF8(ssv) ? SV_CATUTF8 : SV_CATBYTES);
5443         if (flags & SV_SMAGIC)
5444                 SvSETMAGIC(dsv);
5445     }
5446 }
5447
5448 /*
5449 =for apidoc sv_catpv
5450
5451 Concatenates the C<NUL>-terminated string onto the end of the string which is
5452 in the SV.
5453 If the SV has the UTF-8 status set, then the bytes appended should be
5454 valid UTF-8.  Handles 'get' magic, but not 'set' magic.  See
5455 C<L</sv_catpv_mg>>.
5456
5457 =cut */
5458
5459 void
5460 Perl_sv_catpv(pTHX_ SV *const sv, const char *ptr)
5461 {
5462     STRLEN len;
5463     STRLEN tlen;
5464     char *junk;
5465
5466     PERL_ARGS_ASSERT_SV_CATPV;
5467
5468     if (!ptr)
5469         return;
5470     junk = SvPV_force(sv, tlen);
5471     len = strlen(ptr);
5472     SvGROW(sv, tlen + len + 1);
5473     if (ptr == junk)
5474         ptr = SvPVX_const(sv);
5475     Move(ptr,SvPVX(sv)+tlen,len+1,char);
5476     SvCUR_set(sv, SvCUR(sv) + len);
5477     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5478     SvTAINT(sv);
5479 }
5480
5481 /*
5482 =for apidoc sv_catpv_flags
5483
5484 Concatenates the C<NUL>-terminated string onto the end of the string which is
5485 in the SV.
5486 If the SV has the UTF-8 status set, then the bytes appended should
5487 be valid UTF-8.  If C<flags> has the C<SV_SMAGIC> bit set, will C<mg_set>
5488 on the modified SV if appropriate.
5489
5490 =cut
5491 */
5492
5493 void
5494 Perl_sv_catpv_flags(pTHX_ SV *dstr, const char *sstr, const I32 flags)
5495 {
5496     PERL_ARGS_ASSERT_SV_CATPV_FLAGS;
5497     sv_catpvn_flags(dstr, sstr, strlen(sstr), flags);
5498 }
5499
5500 /*
5501 =for apidoc sv_catpv_mg
5502
5503 Like C<sv_catpv>, but also handles 'set' magic.
5504
5505 =cut
5506 */
5507
5508 void
5509 Perl_sv_catpv_mg(pTHX_ SV *const sv, const char *const ptr)
5510 {
5511     PERL_ARGS_ASSERT_SV_CATPV_MG;
5512
5513     sv_catpv(sv,ptr);
5514     SvSETMAGIC(sv);
5515 }
5516
5517 /*
5518 =for apidoc newSV
5519
5520 Creates a new SV.  A non-zero C<len> parameter indicates the number of
5521 bytes of preallocated string space the SV should have.  An extra byte for a
5522 trailing C<NUL> is also reserved.  (C<SvPOK> is not set for the SV even if string
5523 space is allocated.)  The reference count for the new SV is set to 1.
5524
5525 In 5.9.3, C<newSV()> replaces the older C<NEWSV()> API, and drops the first
5526 parameter, I<x>, a debug aid which allowed callers to identify themselves.
5527 This aid has been superseded by a new build option, C<PERL_MEM_LOG> (see
5528 L<perlhacktips/PERL_MEM_LOG>).  The older API is still there for use in XS
5529 modules supporting older perls.
5530
5531 =cut
5532 */
5533
5534 SV *
5535 Perl_newSV(pTHX_ const STRLEN len)
5536 {
5537     SV *sv;
5538
5539     new_SV(sv);
5540     if (len) {
5541         sv_grow(sv, len + 1);
5542     }
5543     return sv;
5544 }
5545 /*
5546 =for apidoc sv_magicext
5547
5548 Adds magic to an SV, upgrading it if necessary.  Applies the
5549 supplied C<vtable> and returns a pointer to the magic added.
5550
5551 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
5552 In particular, you can add magic to C<SvREADONLY> SVs, and add more than
5553 one instance of the same C<how>.
5554
5555 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
5556 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
5557 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
5558 to contain an SV* and is stored as-is with its C<REFCNT> incremented.
5559
5560 (This is now used as a subroutine by C<sv_magic>.)
5561
5562 =cut
5563 */
5564 MAGIC * 
5565 Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how, 
5566                 const MGVTBL *const vtable, const char *const name, const I32 namlen)
5567 {
5568     MAGIC* mg;
5569
5570     PERL_ARGS_ASSERT_SV_MAGICEXT;
5571
5572     SvUPGRADE(sv, SVt_PVMG);
5573     Newxz(mg, 1, MAGIC);
5574     mg->mg_moremagic = SvMAGIC(sv);
5575     SvMAGIC_set(sv, mg);
5576
5577     /* Sometimes a magic contains a reference loop, where the sv and
5578        object refer to each other.  To prevent a reference loop that
5579        would prevent such objects being freed, we look for such loops
5580        and if we find one we avoid incrementing the object refcount.
5581
5582        Note we cannot do this to avoid self-tie loops as intervening RV must
5583        have its REFCNT incremented to keep it in existence.
5584
5585     */
5586     if (!obj || obj == sv ||
5587         how == PERL_MAGIC_arylen ||
5588         how == PERL_MAGIC_symtab ||
5589         (SvTYPE(obj) == SVt_PVGV &&
5590             (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
5591              || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
5592              || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
5593     {
5594         mg->mg_obj = obj;
5595     }
5596     else {
5597         mg->mg_obj = SvREFCNT_inc_simple(obj);
5598         mg->mg_flags |= MGf_REFCOUNTED;
5599     }
5600
5601     /* Normal self-ties simply pass a null object, and instead of
5602        using mg_obj directly, use the SvTIED_obj macro to produce a
5603        new RV as needed.  For glob "self-ties", we are tieing the PVIO
5604        with an RV obj pointing to the glob containing the PVIO.  In
5605        this case, to avoid a reference loop, we need to weaken the
5606        reference.
5607     */
5608
5609     if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
5610         obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
5611     {
5612       sv_rvweaken(obj);
5613     }
5614
5615     mg->mg_type = how;
5616     mg->mg_len = namlen;
5617     if (name) {
5618         if (namlen > 0)
5619             mg->mg_ptr = savepvn(name, namlen);
5620         else if (namlen == HEf_SVKEY) {
5621             /* Yes, this is casting away const. This is only for the case of
5622                HEf_SVKEY. I think we need to document this aberation of the
5623                constness of the API, rather than making name non-const, as
5624                that change propagating outwards a long way.  */
5625             mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
5626         } else
5627             mg->mg_ptr = (char *) name;
5628     }
5629     mg->mg_virtual = (MGVTBL *) vtable;
5630
5631     mg_magical(sv);
5632     return mg;
5633 }
5634
5635 MAGIC *
5636 Perl_sv_magicext_mglob(pTHX_ SV *sv)
5637 {
5638     PERL_ARGS_ASSERT_SV_MAGICEXT_MGLOB;
5639     if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y') {
5640         /* This sv is only a delegate.  //g magic must be attached to
5641            its target. */
5642         vivify_defelem(sv);
5643         sv = LvTARG(sv);
5644     }
5645     return sv_magicext(sv, NULL, PERL_MAGIC_regex_global,
5646                        &PL_vtbl_mglob, 0, 0);
5647 }
5648
5649 /*
5650 =for apidoc sv_magic
5651
5652 Adds magic to an SV.  First upgrades C<sv> to type C<SVt_PVMG> if
5653 necessary, then adds a new magic item of type C<how> to the head of the
5654 magic list.
5655
5656 See C<L</sv_magicext>> (which C<sv_magic> now calls) for a description of the
5657 handling of the C<name> and C<namlen> arguments.
5658
5659 You need to use C<sv_magicext> to add magic to C<SvREADONLY> SVs and also
5660 to add more than one instance of the same C<how>.
5661
5662 =cut
5663 */
5664
5665 void
5666 Perl_sv_magic(pTHX_ SV *const sv, SV *const obj, const int how,
5667              const char *const name, const I32 namlen)
5668 {
5669     const MGVTBL *vtable;
5670     MAGIC* mg;
5671     unsigned int flags;
5672     unsigned int vtable_index;
5673
5674     PERL_ARGS_ASSERT_SV_MAGIC;
5675
5676     if (how < 0 || (unsigned)how >= C_ARRAY_LENGTH(PL_magic_data)
5677         || ((flags = PL_magic_data[how]),
5678             (vtable_index = flags & PERL_MAGIC_VTABLE_MASK)
5679             > magic_vtable_max))
5680         Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
5681
5682     /* PERL_MAGIC_ext is reserved for use by extensions not perl internals.
5683        Useful for attaching extension internal data to perl vars.
5684        Note that multiple extensions may clash if magical scalars
5685        etc holding private data from one are passed to another. */
5686
5687     vtable = (vtable_index == magic_vtable_max)
5688         ? NULL : PL_magic_vtables + vtable_index;
5689
5690     if (SvREADONLY(sv)) {
5691         if (
5692             !PERL_MAGIC_TYPE_READONLY_ACCEPTABLE(how)
5693            )
5694         {
5695             Perl_croak_no_modify();
5696         }
5697     }
5698     if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5699         if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
5700             /* sv_magic() refuses to add a magic of the same 'how' as an
5701                existing one
5702              */
5703             if (how == PERL_MAGIC_taint)
5704                 mg->mg_len |= 1;
5705             return;
5706         }
5707     }
5708
5709     /* Force pos to be stored as characters, not bytes. */
5710     if (SvMAGICAL(sv) && DO_UTF8(sv)
5711       && (mg = mg_find(sv, PERL_MAGIC_regex_global))
5712       && mg->mg_len != -1
5713       && mg->mg_flags & MGf_BYTES) {
5714         mg->mg_len = (SSize_t)sv_pos_b2u_flags(sv, (STRLEN)mg->mg_len,
5715                                                SV_CONST_RETURN);
5716         mg->mg_flags &= ~MGf_BYTES;
5717     }
5718
5719     /* Rest of work is done else where */
5720     mg = sv_magicext(sv,obj,how,vtable,name,namlen);
5721
5722     switch (how) {
5723     case PERL_MAGIC_taint:
5724         mg->mg_len = 1;
5725         break;
5726     case PERL_MAGIC_ext:
5727     case PERL_MAGIC_dbfile:
5728         SvRMAGICAL_on(sv);
5729         break;
5730     }
5731 }
5732
5733 static int
5734 S_sv_unmagicext_flags(pTHX_ SV *const sv, const int type, MGVTBL *vtbl, const U32 flags)
5735 {
5736     MAGIC* mg;
5737     MAGIC** mgp;
5738
5739     assert(flags <= 1);
5740
5741     if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
5742         return 0;
5743     mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
5744     for (mg = *mgp; mg; mg = *mgp) {
5745         const MGVTBL* const virt = mg->mg_virtual;
5746         if (mg->mg_type == type && (!flags || virt == vtbl)) {
5747             *mgp = mg->mg_moremagic;
5748             if (virt && virt->svt_free)
5749                 virt->svt_free(aTHX_ sv, mg);
5750             if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
5751                 if (mg->mg_len > 0)
5752                     Safefree(mg->mg_ptr);
5753                 else if (mg->mg_len == HEf_SVKEY)
5754                     SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
5755                 else if (mg->mg_type == PERL_MAGIC_utf8)
5756                     Safefree(mg->mg_ptr);
5757             }
5758             if (mg->mg_flags & MGf_REFCOUNTED)
5759                 SvREFCNT_dec(mg->mg_obj);
5760             Safefree(mg);
5761         }
5762         else
5763             mgp = &mg->mg_moremagic;
5764     }
5765     if (SvMAGIC(sv)) {
5766         if (SvMAGICAL(sv))      /* if we're under save_magic, wait for restore_magic; */
5767             mg_magical(sv);     /*    else fix the flags now */
5768     }
5769     else
5770         SvMAGICAL_off(sv);
5771
5772     return 0;
5773 }
5774
5775 /*
5776 =for apidoc sv_unmagic
5777
5778 Removes all magic of type C<type> from an SV.
5779
5780 =cut
5781 */
5782
5783 int
5784 Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
5785 {
5786     PERL_ARGS_ASSERT_SV_UNMAGIC;
5787     return S_sv_unmagicext_flags(aTHX_ sv, type, NULL, 0);
5788 }
5789
5790 /*
5791 =for apidoc sv_unmagicext
5792
5793 Removes all magic of type C<type> with the specified C<vtbl> from an SV.
5794
5795 =cut
5796 */
5797
5798 int
5799 Perl_sv_unmagicext(pTHX_ SV *const sv, const int type, MGVTBL *vtbl)
5800 {
5801     PERL_ARGS_ASSERT_SV_UNMAGICEXT;
5802     return S_sv_unmagicext_flags(aTHX_ sv, type, vtbl, 1);
5803 }
5804
5805 /*
5806 =for apidoc sv_rvweaken
5807
5808 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5809 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5810 push a back-reference to this RV onto the array of backreferences
5811 associated with that magic.  If the RV is magical, set magic will be
5812 called after the RV is cleared.
5813
5814 =cut
5815 */
5816
5817 SV *
5818 Perl_sv_rvweaken(pTHX_ SV *const sv)
5819 {
5820     SV *tsv;
5821
5822     PERL_ARGS_ASSERT_SV_RVWEAKEN;
5823
5824     if (!SvOK(sv))  /* let undefs pass */
5825         return sv;
5826     if (!SvROK(sv))
5827         Perl_croak(aTHX_ "Can't weaken a nonreference");
5828     else if (SvWEAKREF(sv)) {
5829         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
5830         return sv;
5831     }
5832     else if (SvREADONLY(sv)) croak_no_modify();
5833     tsv = SvRV(sv);
5834     Perl_sv_add_backref(aTHX_ tsv, sv);
5835     SvWEAKREF_on(sv);
5836     SvREFCNT_dec_NN(tsv);
5837     return sv;
5838 }
5839
5840 /*
5841 =for apidoc sv_get_backrefs
5842
5843 If C<sv> is the target of a weak reference then it returns the back
5844 references structure associated with the sv; otherwise return C<NULL>.
5845
5846 When returning a non-null result the type of the return is relevant. If it
5847 is an AV then the elements of the AV are the weak reference RVs which
5848 point at this item. If it is any other type then the item itself is the
5849 weak reference.
5850
5851 See also C<Perl_sv_add_backref()>, C<Perl_sv_del_backref()>,
5852 C<Perl_sv_kill_backrefs()>
5853
5854 =cut
5855 */
5856
5857 SV *
5858 Perl_sv_get_backrefs(SV *const sv)
5859 {
5860     SV *backrefs= NULL;
5861
5862     PERL_ARGS_ASSERT_SV_GET_BACKREFS;
5863
5864     /* find slot to store array or singleton backref */
5865
5866     if (SvTYPE(sv) == SVt_PVHV) {
5867         if (SvOOK(sv)) {
5868             struct xpvhv_aux * const iter = HvAUX((HV *)sv);
5869             backrefs = (SV *)iter->xhv_backreferences;
5870         }
5871     } else if (SvMAGICAL(sv)) {
5872         MAGIC *mg = mg_find(sv, PERL_MAGIC_backref);
5873         if (mg)
5874             backrefs = mg->mg_obj;
5875     }
5876     return backrefs;
5877 }
5878
5879 /* Give tsv backref magic if it hasn't already got it, then push a
5880  * back-reference to sv onto the array associated with the backref magic.
5881  *
5882  * As an optimisation, if there's only one backref and it's not an AV,
5883  * store it directly in the HvAUX or mg_obj slot, avoiding the need to
5884  * allocate an AV. (Whether the slot holds an AV tells us whether this is
5885  * active.)
5886  */
5887
5888 /* A discussion about the backreferences array and its refcount:
5889  *
5890  * The AV holding the backreferences is pointed to either as the mg_obj of
5891  * PERL_MAGIC_backref, or in the specific case of a HV, from the
5892  * xhv_backreferences field. The array is created with a refcount
5893  * of 2. This means that if during global destruction the array gets
5894  * picked on before its parent to have its refcount decremented by the
5895  * random zapper, it won't actually be freed, meaning it's still there for
5896  * when its parent gets freed.
5897  *
5898  * When the parent SV is freed, the extra ref is killed by
5899  * Perl_sv_kill_backrefs.  The other ref is killed, in the case of magic,
5900  * by mg_free() / MGf_REFCOUNTED, or for a hash, by Perl_hv_kill_backrefs.
5901  *
5902  * When a single backref SV is stored directly, it is not reference
5903  * counted.
5904  */
5905
5906 void
5907 Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
5908 {
5909     SV **svp;
5910     AV *av = NULL;
5911     MAGIC *mg = NULL;
5912
5913     PERL_ARGS_ASSERT_SV_ADD_BACKREF;
5914
5915     /* find slot to store array or singleton backref */
5916
5917     if (SvTYPE(tsv) == SVt_PVHV) {
5918         svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5919     } else {
5920         if (SvMAGICAL(tsv))
5921             mg = mg_find(tsv, PERL_MAGIC_backref);
5922         if (!mg)
5923             mg = sv_magicext(tsv, NULL, PERL_MAGIC_backref, &PL_vtbl_backref, NULL, 0);
5924         svp = &(mg->mg_obj);
5925     }
5926
5927     /* create or retrieve the array */
5928
5929     if (   (!*svp && SvTYPE(sv) == SVt_PVAV)
5930         || (*svp && SvTYPE(*svp) != SVt_PVAV)
5931     ) {
5932         /* create array */
5933         if (mg)
5934             mg->mg_flags |= MGf_REFCOUNTED;
5935         av = newAV();
5936         AvREAL_off(av);
5937         SvREFCNT_inc_simple_void_NN(av);
5938         /* av now has a refcnt of 2; see discussion above */
5939         av_extend(av, *svp ? 2 : 1);
5940         if (*svp) {
5941             /* move single existing backref to the array */
5942             AvARRAY(av)[++AvFILLp(av)] = *svp; /* av_push() */
5943         }
5944         *svp = (SV*)av;
5945     }
5946     else {
5947         av = MUTABLE_AV(*svp);
5948         if (!av) {
5949             /* optimisation: store single backref directly in HvAUX or mg_obj */
5950             *svp = sv;
5951             return;
5952         }
5953         assert(SvTYPE(av) == SVt_PVAV);
5954         if (AvFILLp(av) >= AvMAX(av)) {
5955             av_extend(av, AvFILLp(av)+1);
5956         }
5957     }
5958     /* push new backref */
5959     AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
5960 }
5961
5962 /* delete a back-reference to ourselves from the backref magic associated
5963  * with the SV we point to.
5964  */
5965
5966 void
5967 Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
5968 {
5969     SV **svp = NULL;
5970
5971     PERL_ARGS_ASSERT_SV_DEL_BACKREF;
5972
5973     if (SvTYPE(tsv) == SVt_PVHV) {
5974         if (SvOOK(tsv))
5975             svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5976     }
5977     else if (SvIS_FREED(tsv) && PL_phase == PERL_PHASE_DESTRUCT) {
5978         /* It's possible for the the last (strong) reference to tsv to have
5979            become freed *before* the last thing holding a weak reference.
5980            If both survive longer than the backreferences array, then when
5981            the referent's reference count drops to 0 and it is freed, it's
5982            not able to chase the backreferences, so they aren't NULLed.
5983
5984            For example, a CV holds a weak reference to its stash. If both the
5985            CV and the stash survive longer than the backreferences array,
5986            and the CV gets picked for the SvBREAK() treatment first,
5987            *and* it turns out that the stash is only being kept alive because
5988            of an our variable in the pad of the CV, then midway during CV
5989            destruction the stash gets freed, but CvSTASH() isn't set to NULL.
5990            It ends up pointing to the freed HV. Hence it's chased in here, and
5991            if this block wasn't here, it would hit the !svp panic just below.
5992
5993            I don't believe that "better" destruction ordering is going to help
5994            here - during global destruction there's always going to be the
5995            chance that something goes out of order. We've tried to make it
5996            foolproof before, and it only resulted in evolutionary pressure on
5997            fools. Which made us look foolish for our hubris. :-(
5998         */
5999         return;
6000     }
6001     else {
6002         MAGIC *const mg
6003             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
6004         svp =  mg ? &(mg->mg_obj) : NULL;
6005     }
6006
6007     if (!svp)
6008         Perl_croak(aTHX_ "panic: del_backref, svp=0");
6009     if (!*svp) {
6010         /* It's possible that sv is being freed recursively part way through the
6011            freeing of tsv. If this happens, the backreferences array of tsv has
6012            already been freed, and so svp will be NULL. If this is the case,
6013            we should not panic. Instead, nothing needs doing, so return.  */
6014         if (PL_phase == PERL_PHASE_DESTRUCT && SvREFCNT(tsv) == 0)
6015             return;
6016         Perl_croak(aTHX_ "panic: del_backref, *svp=%p phase=%s refcnt=%" UVuf,
6017                    (void*)*svp, PL_phase_names[PL_phase], (UV)SvREFCNT(tsv));
6018     }
6019
6020     if (SvTYPE(*svp) == SVt_PVAV) {
6021 #ifdef DEBUGGING
6022         int count = 1;
6023 #endif
6024         AV * const av = (AV*)*svp;
6025         SSize_t fill;
6026         assert(!SvIS_FREED(av));
6027         fill = AvFILLp(av);
6028         assert(fill > -1);
6029         svp = AvARRAY(av);
6030         /* for an SV with N weak references to it, if all those
6031          * weak refs are deleted, then sv_del_backref will be called
6032          * N times and O(N^2) compares will be done within the backref
6033          * array. To ameliorate this potential slowness, we:
6034          * 1) make sure this code is as tight as possible;
6035          * 2) when looking for SV, look for it at both the head and tail of the
6036          *    array first before searching the rest, since some create/destroy
6037          *    patterns will cause the backrefs to be freed in order.
6038          */
6039         if (*svp == sv) {
6040             AvARRAY(av)++;
6041             AvMAX(av)--;
6042         }
6043         else {
6044             SV **p = &svp[fill];
6045             SV *const topsv = *p;
6046             if (topsv != sv) {
6047 #ifdef DEBUGGING
6048                 count = 0;
6049 #endif
6050                 while (--p > svp) {
6051                     if (*p == sv) {
6052                         /* We weren't the last entry.
6053                            An unordered list has this property that you
6054                            can take the last element off the end to fill
6055                            the hole, and it's still an unordered list :-)
6056                         */
6057                         *p = topsv;
6058 #ifdef DEBUGGING
6059                         count++;
6060 #else
6061                         break; /* should only be one */
6062 #endif
6063                     }
6064                 }
6065             }
6066         }
6067         assert(count ==1);
6068         AvFILLp(av) = fill-1;
6069     }
6070     else if (SvIS_FREED(*svp) && PL_phase == PERL_PHASE_DESTRUCT) {
6071         /* freed AV; skip */
6072     }
6073     else {
6074         /* optimisation: only a single backref, stored directly */
6075         if (*svp != sv)
6076             Perl_croak(aTHX_ "panic: del_backref, *svp=%p, sv=%p",
6077                        (void*)*svp, (void*)sv);
6078         *svp = NULL;
6079     }
6080
6081 }
6082
6083 void
6084 Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
6085 {
6086     SV **svp;
6087     SV **last;
6088     bool is_array;
6089
6090     PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
6091
6092     if (!av)
6093         return;
6094
6095     /* after multiple passes through Perl_sv_clean_all() for a thingy
6096      * that has badly leaked, the backref array may have gotten freed,
6097      * since we only protect it against 1 round of cleanup */
6098     if (SvIS_FREED(av)) {
6099         if (PL_in_clean_all) /* All is fair */
6100             return;
6101         Perl_croak(aTHX_
6102                    "panic: magic_killbackrefs (freed backref AV/SV)");
6103     }
6104
6105
6106     is_array = (SvTYPE(av) == SVt_PVAV);
6107     if (is_array) {
6108         assert(!SvIS_FREED(av));
6109         svp = AvARRAY(av);
6110         if (svp)
6111             last = svp + AvFILLp(av);
6112     }
6113     else {
6114         /* optimisation: only a single backref, stored directly */
6115         svp = (SV**)&av;
6116         last = svp;
6117     }
6118
6119     if (svp) {
6120         while (svp <= last) {
6121             if (*svp) {
6122                 SV *const referrer = *svp;
6123                 if (SvWEAKREF(referrer)) {
6124                     /* XXX Should we check that it hasn't changed? */
6125                     assert(SvROK(referrer));
6126                     SvRV_set(referrer, 0);
6127                     SvOK_off(referrer);
6128                     SvWEAKREF_off(referrer);
6129                     SvSETMAGIC(referrer);
6130                 } else if (SvTYPE(referrer) == SVt_PVGV ||
6131                            SvTYPE(referrer) == SVt_PVLV) {
6132                     assert(SvTYPE(sv) == SVt_PVHV); /* stash backref */
6133                     /* You lookin' at me?  */
6134                     assert(GvSTASH(referrer));
6135                     assert(GvSTASH(referrer) == (const HV *)sv);
6136                     GvSTASH(referrer) = 0;
6137                 } else if (SvTYPE(referrer) == SVt_PVCV ||
6138                            SvTYPE(referrer) == SVt_PVFM) {
6139                     if (SvTYPE(sv) == SVt_PVHV) { /* stash backref */
6140                         /* You lookin' at me?  */
6141                         assert(CvSTASH(referrer));
6142                         assert(CvSTASH(referrer) == (const HV *)sv);
6143                         SvANY(MUTABLE_CV(referrer))->xcv_stash = 0;
6144                     }
6145                     else {
6146                         assert(SvTYPE(sv) == SVt_PVGV);
6147                         /* You lookin' at me?  */
6148                         assert(CvGV(referrer));
6149                         assert(CvGV(referrer) == (const GV *)sv);
6150                         anonymise_cv_maybe(MUTABLE_GV(sv),
6151                                                 MUTABLE_CV(referrer));
6152                     }
6153
6154                 } else {
6155                     Perl_croak(aTHX_
6156                                "panic: magic_killbackrefs (flags=%"UVxf")",
6157                                (UV)SvFLAGS(referrer));
6158                 }
6159
6160                 if (is_array)
6161                     *svp = NULL;
6162             }
6163             svp++;
6164         }
6165     }
6166     if (is_array) {
6167         AvFILLp(av) = -1;
6168         SvREFCNT_dec_NN(av); /* remove extra count added by sv_add_backref() */
6169     }
6170     return;
6171 }
6172
6173 /*
6174 =for apidoc sv_insert
6175
6176 Inserts a string at the specified offset/length within the SV.  Similar to
6177 the Perl C<substr()> function.  Handles get magic.
6178
6179 =for apidoc sv_insert_flags
6180
6181 Same as C<sv_insert>, but the extra C<flags> are passed to the
6182 C<SvPV_force_flags> that applies to C<bigstr>.
6183
6184 =cut
6185 */
6186
6187 void
6188 Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen, const U32 flags)
6189 {
6190     char *big;
6191     char *mid;
6192     char *midend;
6193     char *bigend;
6194     SSize_t i;          /* better be sizeof(STRLEN) or bad things happen */
6195     STRLEN curlen;
6196
6197     PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
6198
6199     SvPV_force_flags(bigstr, curlen, flags);
6200     (void)SvPOK_only_UTF8(bigstr);
6201     if (offset + len > curlen) {
6202         SvGROW(bigstr, offset+len+1);
6203         Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
6204         SvCUR_set(bigstr, offset+len);
6205     }
6206
6207     SvTAINT(bigstr);
6208     i = littlelen - len;
6209     if (i > 0) {                        /* string might grow */
6210         big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
6211         mid = big + offset + len;
6212         midend = bigend = big + SvCUR(bigstr);
6213         bigend += i;
6214         *bigend = '\0';
6215         while (midend > mid)            /* shove everything down */
6216             *--bigend = *--midend;
6217         Move(little,big+offset,littlelen,char);
6218         SvCUR_set(bigstr, SvCUR(bigstr) + i);
6219         SvSETMAGIC(bigstr);
6220         return;
6221     }
6222     else if (i == 0) {
6223         Move(little,SvPVX(bigstr)+offset,len,char);
6224         SvSETMAGIC(bigstr);
6225         return;
6226     }
6227
6228     big = SvPVX(bigstr);
6229     mid = big + offset;
6230     midend = mid + len;
6231     bigend = big + SvCUR(bigstr);
6232
6233     if (midend > bigend)
6234         Perl_croak(aTHX_ "panic: sv_insert, midend=%p, bigend=%p",
6235                    midend, bigend);
6236
6237     if (mid - big > bigend - midend) {  /* faster to shorten from end */
6238         if (littlelen) {
6239             Move(little, mid, littlelen,char);
6240             mid += littlelen;
6241         }
6242         i = bigend - midend;
6243         if (i > 0) {
6244             Move(midend, mid, i,char);
6245             mid += i;
6246         }
6247         *mid = '\0';
6248         SvCUR_set(bigstr, mid - big);
6249     }
6250     else if ((i = mid - big)) { /* faster from front */
6251         midend -= littlelen;
6252         mid = midend;
6253         Move(big, midend - i, i, char);
6254         sv_chop(bigstr,midend-i);
6255         if (littlelen)
6256             Move(little, mid, littlelen,char);
6257     }
6258     else if (littlelen) {
6259         midend -= littlelen;
6260         sv_chop(bigstr,midend);
6261         Move(little,midend,littlelen,char);
6262     }
6263     else {
6264         sv_chop(bigstr,midend);
6265     }
6266     SvSETMAGIC(bigstr);
6267 }
6268
6269 /*
6270 =for apidoc sv_replace
6271
6272 Make the first argument a copy of the second, then delete the original.
6273 The target SV physically takes over ownership of the body of the source SV
6274 and inherits its flags; however, the target keeps any magic it owns,
6275 and any magic in the source is discarded.
6276 Note that this is a rather specialist SV copying operation; most of the
6277 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
6278
6279 =cut
6280 */
6281
6282 void
6283 Perl_sv_replace(pTHX_ SV *const sv, SV *const nsv)
6284 {
6285     const U32 refcnt = SvREFCNT(sv);
6286
6287     PERL_ARGS_ASSERT_SV_REPLACE;
6288
6289     SV_CHECK_THINKFIRST_COW_DROP(sv);
6290     if (SvREFCNT(nsv) != 1) {
6291         Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
6292                    " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
6293     }
6294     if (SvMAGICAL(sv)) {
6295         if (SvMAGICAL(nsv))
6296             mg_free(nsv);
6297         else
6298             sv_upgrade(nsv, SVt_PVMG);
6299         SvMAGIC_set(nsv, SvMAGIC(sv));
6300         SvFLAGS(nsv) |= SvMAGICAL(sv);
6301         SvMAGICAL_off(sv);
6302         SvMAGIC_set(sv, NULL);
6303     }
6304     SvREFCNT(sv) = 0;
6305     sv_clear(sv);
6306     assert(!SvREFCNT(sv));
6307 #ifdef DEBUG_LEAKING_SCALARS
6308     sv->sv_flags  = nsv->sv_flags;
6309     sv->sv_any    = nsv->sv_any;
6310     sv->sv_refcnt = nsv->sv_refcnt;
6311     sv->sv_u      = nsv->sv_u;
6312 #else
6313     StructCopy(nsv,sv,SV);
6314 #endif
6315     if(SvTYPE(sv) == SVt_IV) {
6316         SET_SVANY_FOR_BODYLESS_IV(sv);
6317     }
6318         
6319
6320     SvREFCNT(sv) = refcnt;
6321     SvFLAGS(nsv) |= SVTYPEMASK;         /* Mark as freed */
6322     SvREFCNT(nsv) = 0;
6323     del_SV(nsv);
6324 }
6325
6326 /* We're about to free a GV which has a CV that refers back to us.
6327  * If that CV will outlive us, make it anonymous (i.e. fix up its CvGV
6328  * field) */
6329
6330 STATIC void
6331 S_anonymise_cv_maybe(pTHX_ GV *gv, CV* cv)
6332 {
6333     SV *gvname;
6334     GV *anongv;
6335
6336     PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE;
6337
6338     /* be assertive! */
6339     assert(SvREFCNT(gv) == 0);
6340     assert(isGV(gv) && isGV_with_GP(gv));
6341     assert(GvGP(gv));
6342     assert(!CvANON(cv));
6343     assert(CvGV(cv) == gv);
6344     assert(!CvNAMED(cv));
6345
6346     /* will the CV shortly be freed by gp_free() ? */
6347     if (GvCV(gv) == cv && GvGP(gv)->gp_refcnt < 2 && SvREFCNT(cv) < 2) {
6348         SvANY(cv)->xcv_gv_u.xcv_gv = NULL;
6349         return;
6350     }
6351
6352     /* if not, anonymise: */
6353     gvname = (GvSTASH(gv) && HvNAME(GvSTASH(gv)) && HvENAME(GvSTASH(gv)))
6354                     ? newSVhek(HvENAME_HEK(GvSTASH(gv)))
6355                     : newSVpvn_flags( "__ANON__", 8, 0 );
6356     sv_catpvs(gvname, "::__ANON__");
6357     anongv = gv_fetchsv(gvname, GV_ADDMULTI, SVt_PVCV);
6358     SvREFCNT_dec_NN(gvname);
6359
6360     CvANON_on(cv);
6361     CvCVGV_RC_on(cv);
6362     SvANY(cv)->xcv_gv_u.xcv_gv = MUTABLE_GV(SvREFCNT_inc(anongv));
6363 }
6364
6365
6366 /*
6367 =for apidoc sv_clear
6368
6369 Clear an SV: call any destructors, free up any memory used by the body,
6370 and free the body itself.  The SV's head is I<not> freed, although
6371 its type is set to all 1's so that it won't inadvertently be assumed
6372 to be live during global destruction etc.
6373 This function should only be called when C<REFCNT> is zero.  Most of the time
6374 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
6375 instead.
6376
6377 =cut
6378 */
6379
6380 void
6381 Perl_sv_clear(pTHX_ SV *const orig_sv)
6382 {
6383     dVAR;
6384     HV *stash;
6385     U32 type;
6386     const struct body_details *sv_type_details;
6387     SV* iter_sv = NULL;
6388     SV* next_sv = NULL;
6389     SV *sv = orig_sv;
6390     STRLEN hash_index = 0; /* initialise to make Coverity et al happy.
6391                               Not strictly necessary */
6392
6393     PERL_ARGS_ASSERT_SV_CLEAR;
6394
6395     /* within this loop, sv is the SV currently being freed, and
6396      * iter_sv is the most recent AV or whatever that's being iterated
6397      * over to provide more SVs */
6398
6399     while (sv) {
6400
6401         type = SvTYPE(sv);
6402
6403         assert(SvREFCNT(sv) == 0);
6404         assert(SvTYPE(sv) != (svtype)SVTYPEMASK);
6405
6406         if (type <= SVt_IV) {
6407             /* See the comment in sv.h about the collusion between this
6408              * early return and the overloading of the NULL slots in the
6409              * size table.  */
6410             if (SvROK(sv))
6411                 goto free_rv;
6412             SvFLAGS(sv) &= SVf_BREAK;
6413             SvFLAGS(sv) |= SVTYPEMASK;
6414             goto free_head;
6415         }
6416
6417         /* objs are always >= MG, but pad names use the SVs_OBJECT flag
6418            for another purpose  */
6419         assert(!SvOBJECT(sv) || type >= SVt_PVMG);
6420
6421         if (type >= SVt_PVMG) {
6422             if (SvOBJECT(sv)) {
6423                 if (!curse(sv, 1)) goto get_next_sv;
6424                 type = SvTYPE(sv); /* destructor may have changed it */
6425             }
6426             /* Free back-references before magic, in case the magic calls
6427              * Perl code that has weak references to sv. */
6428             if (type == SVt_PVHV) {
6429                 Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
6430                 if (SvMAGIC(sv))
6431                     mg_free(sv);
6432             }
6433             else if (SvMAGIC(sv)) {
6434                 /* Free back-references before other types of magic. */
6435                 sv_unmagic(sv, PERL_MAGIC_backref);
6436                 mg_free(sv);
6437             }
6438             SvMAGICAL_off(sv);
6439         }
6440         switch (type) {
6441             /* case SVt_INVLIST: */
6442         case SVt_PVIO:
6443             if (IoIFP(sv) &&
6444                 IoIFP(sv) != PerlIO_stdin() &&
6445                 IoIFP(sv) != PerlIO_stdout() &&
6446                 IoIFP(sv) != PerlIO_stderr() &&
6447                 !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6448             {
6449                 io_close(MUTABLE_IO(sv), NULL, FALSE,
6450                          (IoTYPE(sv) == IoTYPE_WRONLY ||
6451                           IoTYPE(sv) == IoTYPE_RDWR   ||
6452                           IoTYPE(sv) == IoTYPE_APPEND));
6453             }
6454             if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6455                 PerlDir_close(IoDIRP(sv));
6456             IoDIRP(sv) = (DIR*)NULL;
6457             Safefree(IoTOP_NAME(sv));
6458             Safefree(IoFMT_NAME(sv));
6459             Safefree(IoBOTTOM_NAME(sv));
6460             if ((const GV *)sv == PL_statgv)
6461                 PL_statgv = NULL;
6462             goto freescalar;
6463         case SVt_REGEXP:
6464             /* FIXME for plugins */
6465           freeregexp:
6466             pregfree2((REGEXP*) sv);
6467             goto freescalar;
6468         case SVt_PVCV:
6469         case SVt_PVFM:
6470             cv_undef(MUTABLE_CV(sv));
6471             /* If we're in a stash, we don't own a reference to it.
6472              * However it does have a back reference to us, which needs to
6473              * be cleared.  */
6474             if ((stash = CvSTASH(sv)))
6475                 sv_del_backref(MUTABLE_SV(stash), sv);
6476             goto freescalar;
6477         case SVt_PVHV:
6478             if (PL_last_swash_hv == (const HV *)sv) {
6479                 PL_last_swash_hv = NULL;
6480             }
6481             if (HvTOTALKEYS((HV*)sv) > 0) {
6482                 const HEK *hek;
6483                 /* this statement should match the one at the beginning of
6484                  * hv_undef_flags() */
6485                 if (   PL_phase != PERL_PHASE_DESTRUCT
6486                     && (hek = HvNAME_HEK((HV*)sv)))
6487                 {
6488                     if (PL_stashcache) {
6489                         DEBUG_o(Perl_deb(aTHX_
6490                             "sv_clear clearing PL_stashcache for '%"HEKf
6491                             "'\n",
6492                              HEKfARG(hek)));
6493                         (void)hv_deletehek(PL_stashcache,
6494                                            hek, G_DISCARD);
6495                     }
6496                     hv_name_set((HV*)sv, NULL, 0, 0);
6497                 }
6498
6499                 /* save old iter_sv in unused SvSTASH field */
6500                 assert(!SvOBJECT(sv));
6501                 SvSTASH(sv) = (HV*)iter_sv;
6502                 iter_sv = sv;
6503
6504                 /* save old hash_index in unused SvMAGIC field */
6505                 assert(!SvMAGICAL(sv));
6506                 assert(!SvMAGIC(sv));
6507                 ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index = hash_index;
6508                 hash_index = 0;
6509
6510                 next_sv = Perl_hfree_next_entry(aTHX_ (HV*)sv, &hash_index);
6511                 goto get_next_sv; /* process this new sv */
6512             }
6513             /* free empty hash */
6514             Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6515             assert(!HvARRAY((HV*)sv));
6516             break;
6517         case SVt_PVAV:
6518             {
6519                 AV* av = MUTABLE_AV(sv);
6520                 if (PL_comppad == av) {
6521                     PL_comppad = NULL;
6522                     PL_curpad = NULL;
6523                 }
6524                 if (AvREAL(av) && AvFILLp(av) > -1) {
6525                     next_sv = AvARRAY(av)[AvFILLp(av)--];
6526                     /* save old iter_sv in top-most slot of AV,
6527                      * and pray that it doesn't get wiped in the meantime */
6528                     AvARRAY(av)[AvMAX(av)] = iter_sv;
6529                     iter_sv = sv;
6530                     goto get_next_sv; /* process this new sv */
6531                 }
6532                 Safefree(AvALLOC(av));
6533             }
6534
6535             break;
6536         case SVt_PVLV:
6537             if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
6538                 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
6539                 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
6540                 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
6541             }
6542             else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV**  */
6543                 SvREFCNT_dec(LvTARG(sv));
6544             if (isREGEXP(sv)) goto freeregexp;
6545             /* FALLTHROUGH */
6546         case SVt_PVGV:
6547             if (isGV_with_GP(sv)) {
6548                 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
6549                    && HvENAME_get(stash))
6550                     mro_method_changed_in(stash);
6551                 gp_free(MUTABLE_GV(sv));
6552                 if (GvNAME_HEK(sv))
6553                     unshare_hek(GvNAME_HEK(sv));
6554                 /* If we're in a stash, we don't own a reference to it.
6555                  * However it does have a back reference to us, which
6556                  * needs to be cleared.  */
6557                 if (!SvVALID(sv) && (stash = GvSTASH(sv)))
6558                         sv_del_backref(MUTABLE_SV(stash), sv);
6559             }
6560             /* FIXME. There are probably more unreferenced pointers to SVs
6561              * in the interpreter struct that we should check and tidy in
6562              * a similar fashion to this:  */
6563             /* See also S_sv_unglob, which does the same thing. */
6564             if ((const GV *)sv == PL_last_in_gv)
6565                 PL_last_in_gv = NULL;
6566             else if ((const GV *)sv == PL_statgv)
6567                 PL_statgv = NULL;
6568             else if ((const GV *)sv == PL_stderrgv)
6569                 PL_stderrgv = NULL;
6570             /* FALLTHROUGH */
6571         case SVt_PVMG:
6572         case SVt_PVNV:
6573         case SVt_PVIV:
6574         case SVt_INVLIST:
6575         case SVt_PV:
6576           freescalar:
6577             /* Don't bother with SvOOK_off(sv); as we're only going to
6578              * free it.  */
6579             if (SvOOK(sv)) {
6580                 STRLEN offset;
6581                 SvOOK_offset(sv, offset);
6582                 SvPV_set(sv, SvPVX_mutable(sv) - offset);
6583                 /* Don't even bother with turning off the OOK flag.  */
6584             }
6585             if (SvROK(sv)) {
6586             free_rv:
6587                 {
6588                     SV * const target = SvRV(sv);
6589                     if (SvWEAKREF(sv))
6590                         sv_del_backref(target, sv);
6591                     else
6592                         next_sv = target;
6593                 }
6594             }
6595 #ifdef PERL_ANY_COW
6596             else if (SvPVX_const(sv)
6597                      && !(SvTYPE(sv) == SVt_PVIO
6598                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6599             {
6600                 if (SvIsCOW(sv)) {
6601                     if (DEBUG_C_TEST) {
6602                         PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
6603                         sv_dump(sv);
6604                     }
6605                     if (SvLEN(sv)) {
6606                         if (CowREFCNT(sv)) {
6607                             sv_buf_to_rw(sv);
6608                             CowREFCNT(sv)--;
6609                             sv_buf_to_ro(sv);
6610                             SvLEN_set(sv, 0);
6611                         }
6612                     } else {
6613                         unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6614                     }
6615
6616                 }
6617                 if (SvLEN(sv)) {
6618                     Safefree(SvPVX_mutable(sv));
6619                 }
6620             }
6621 #else
6622             else if (SvPVX_const(sv) && SvLEN(sv)
6623                      && !(SvTYPE(sv) == SVt_PVIO
6624                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6625                 Safefree(SvPVX_mutable(sv));
6626             else if (SvPVX_const(sv) && SvIsCOW(sv)) {
6627                 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6628             }
6629 #endif
6630             break;
6631         case SVt_NV:
6632             break;
6633         }
6634
6635       free_body:
6636
6637         SvFLAGS(sv) &= SVf_BREAK;
6638         SvFLAGS(sv) |= SVTYPEMASK;
6639
6640         sv_type_details = bodies_by_type + type;
6641         if (sv_type_details->arena) {
6642             del_body(((char *)SvANY(sv) + sv_type_details->offset),
6643                      &PL_body_roots[type]);
6644         }
6645         else if (sv_type_details->body_size) {
6646             safefree(SvANY(sv));
6647         }
6648
6649       free_head:
6650         /* caller is responsible for freeing the head of the original sv */
6651         if (sv != orig_sv && !SvREFCNT(sv))
6652             del_SV(sv);
6653
6654         /* grab and free next sv, if any */
6655       get_next_sv:
6656         while (1) {
6657             sv = NULL;
6658             if (next_sv) {
6659                 sv = next_sv;
6660                 next_sv = NULL;
6661             }
6662             else if (!iter_sv) {
6663                 break;
6664             } else if (SvTYPE(iter_sv) == SVt_PVAV) {
6665                 AV *const av = (AV*)iter_sv;
6666                 if (AvFILLp(av) > -1) {
6667                     sv = AvARRAY(av)[AvFILLp(av)--];
6668                 }
6669                 else { /* no more elements of current AV to free */
6670                     sv = iter_sv;
6671                     type = SvTYPE(sv);
6672                     /* restore previous value, squirrelled away */
6673                     iter_sv = AvARRAY(av)[AvMAX(av)];
6674                     Safefree(AvALLOC(av));
6675                     goto free_body;
6676                 }
6677             } else if (SvTYPE(iter_sv) == SVt_PVHV) {
6678                 sv = Perl_hfree_next_entry(aTHX_ (HV*)iter_sv, &hash_index);
6679                 if (!sv && !HvTOTALKEYS((HV *)iter_sv)) {
6680                     /* no more elements of current HV to free */
6681                     sv = iter_sv;
6682                     type = SvTYPE(sv);
6683                     /* Restore previous values of iter_sv and hash_index,
6684                      * squirrelled away */
6685                     assert(!SvOBJECT(sv));
6686                     iter_sv = (SV*)SvSTASH(sv);
6687                     assert(!SvMAGICAL(sv));
6688                     hash_index = ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index;
6689 #ifdef DEBUGGING
6690                     /* perl -DA does not like rubbish in SvMAGIC. */
6691                     SvMAGIC_set(sv, 0);
6692 #endif
6693
6694                     /* free any remaining detritus from the hash struct */
6695                     Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6696                     assert(!HvARRAY((HV*)sv));
6697                     goto free_body;
6698                 }
6699             }
6700
6701             /* unrolled SvREFCNT_dec and sv_free2 follows: */
6702
6703             if (!sv)
6704                 continue;
6705             if (!SvREFCNT(sv)) {
6706                 sv_free(sv);
6707                 continue;
6708             }
6709             if (--(SvREFCNT(sv)))
6710                 continue;
6711 #ifdef DEBUGGING
6712             if (SvTEMP(sv)) {
6713                 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6714                          "Attempt to free temp prematurely: SV 0x%"UVxf
6715                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6716                 continue;
6717             }
6718 #endif
6719             if (SvIMMORTAL(sv)) {
6720                 /* make sure SvREFCNT(sv)==0 happens very seldom */
6721                 SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6722                 continue;
6723             }
6724             break;
6725         } /* while 1 */
6726
6727     } /* while sv */
6728 }
6729
6730 /* This routine curses the sv itself, not the object referenced by sv. So
6731    sv does not have to be ROK. */
6732
6733 static bool
6734 S_curse(pTHX_ SV * const sv, const bool check_refcnt) {
6735     PERL_ARGS_ASSERT_CURSE;
6736     assert(SvOBJECT(sv));
6737
6738     if (PL_defstash &&  /* Still have a symbol table? */
6739         SvDESTROYABLE(sv))
6740     {
6741         dSP;
6742         HV* stash;
6743         do {
6744           stash = SvSTASH(sv);
6745           assert(SvTYPE(stash) == SVt_PVHV);
6746           if (HvNAME(stash)) {
6747             CV* destructor = NULL;
6748             assert (SvOOK(stash));
6749             if (!SvOBJECT(stash)) destructor = (CV *)SvSTASH(stash);
6750             if (!destructor || HvMROMETA(stash)->destroy_gen
6751                                 != PL_sub_generation)
6752             {
6753                 GV * const gv =
6754                     gv_fetchmeth_autoload(stash, "DESTROY", 7, 0);
6755                 if (gv) destructor = GvCV(gv);
6756                 if (!SvOBJECT(stash))
6757                 {
6758                     SvSTASH(stash) =
6759                         destructor ? (HV *)destructor : ((HV *)0)+1;
6760                     HvAUX(stash)->xhv_mro_meta->destroy_gen =
6761                         PL_sub_generation;
6762                 }
6763             }
6764             assert(!destructor || destructor == ((CV *)0)+1
6765                 || SvTYPE(destructor) == SVt_PVCV);
6766             if (destructor && destructor != ((CV *)0)+1
6767                 /* A constant subroutine can have no side effects, so
6768                    don't bother calling it.  */
6769                 && !CvCONST(destructor)
6770                 /* Don't bother calling an empty destructor or one that
6771                    returns immediately. */
6772                 && (CvISXSUB(destructor)
6773                 || (CvSTART(destructor)
6774                     && (CvSTART(destructor)->op_next->op_type
6775                                         != OP_LEAVESUB)
6776                     && (CvSTART(destructor)->op_next->op_type
6777                                         != OP_PUSHMARK
6778                         || CvSTART(destructor)->op_next->op_next->op_type
6779                                         != OP_RETURN
6780                        )
6781                    ))
6782                )
6783             {
6784                 SV* const tmpref = newRV(sv);
6785                 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
6786                 ENTER;
6787                 PUSHSTACKi(PERLSI_DESTROY);
6788                 EXTEND(SP, 2);
6789                 PUSHMARK(SP);
6790                 PUSHs(tmpref);
6791                 PUTBACK;
6792                 call_sv(MUTABLE_SV(destructor),
6793                             G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
6794                 POPSTACK;
6795                 SPAGAIN;
6796                 LEAVE;
6797                 if(SvREFCNT(tmpref) < 2) {
6798                     /* tmpref is not kept alive! */
6799                     SvREFCNT(sv)--;
6800                     SvRV_set(tmpref, NULL);
6801                     SvROK_off(tmpref);
6802                 }
6803                 SvREFCNT_dec_NN(tmpref);
6804             }
6805           }
6806         } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
6807
6808
6809         if (check_refcnt && SvREFCNT(sv)) {
6810             if (PL_in_clean_objs)
6811                 Perl_croak(aTHX_
6812                   "DESTROY created new reference to dead object '%"HEKf"'",
6813                    HEKfARG(HvNAME_HEK(stash)));
6814             /* DESTROY gave object new lease on life */
6815             return FALSE;
6816         }
6817     }
6818
6819     if (SvOBJECT(sv)) {
6820         HV * const stash = SvSTASH(sv);
6821         /* Curse before freeing the stash, as freeing the stash could cause
6822            a recursive call into S_curse. */
6823         SvOBJECT_off(sv);       /* Curse the object. */
6824         SvSTASH_set(sv,0);      /* SvREFCNT_dec may try to read this */
6825         SvREFCNT_dec(stash); /* possibly of changed persuasion */
6826     }
6827     return TRUE;
6828 }
6829
6830 /*
6831 =for apidoc sv_newref
6832
6833 Increment an SV's reference count.  Use the C<SvREFCNT_inc()> wrapper
6834 instead.
6835
6836 =cut
6837 */
6838
6839 SV *
6840 Perl_sv_newref(pTHX_ SV *const sv)
6841 {
6842     PERL_UNUSED_CONTEXT;
6843     if (sv)
6844         (SvREFCNT(sv))++;
6845     return sv;
6846 }
6847
6848 /*
6849 =for apidoc sv_free
6850
6851 Decrement an SV's reference count, and if it drops to zero, call
6852 C<sv_clear> to invoke destructors and free up any memory used by
6853 the body; finally, deallocating the SV's head itself.
6854 Normally called via a wrapper macro C<SvREFCNT_dec>.
6855
6856 =cut
6857 */
6858
6859 void
6860 Perl_sv_free(pTHX_ SV *const sv)
6861 {
6862     SvREFCNT_dec(sv);
6863 }
6864
6865
6866 /* Private helper function for SvREFCNT_dec().
6867  * Called with rc set to original SvREFCNT(sv), where rc == 0 or 1 */
6868
6869 void
6870 Perl_sv_free2(pTHX_ SV *const sv, const U32 rc)
6871 {
6872     dVAR;
6873
6874     PERL_ARGS_ASSERT_SV_FREE2;
6875
6876     if (LIKELY( rc == 1 )) {
6877         /* normal case */
6878         SvREFCNT(sv) = 0;
6879
6880 #ifdef DEBUGGING
6881         if (SvTEMP(sv)) {
6882             Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6883                              "Attempt to free temp prematurely: SV 0x%"UVxf
6884                              pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6885             return;
6886         }
6887 #endif
6888         if (SvIMMORTAL(sv)) {
6889             /* make sure SvREFCNT(sv)==0 happens very seldom */
6890             SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6891             return;
6892         }
6893         sv_clear(sv);
6894         if (! SvREFCNT(sv)) /* may have have been resurrected */
6895             del_SV(sv);
6896         return;
6897     }
6898
6899     /* handle exceptional cases */
6900
6901     assert(rc == 0);
6902
6903     if (SvFLAGS(sv) & SVf_BREAK)
6904         /* this SV's refcnt has been artificially decremented to
6905          * trigger cleanup */
6906         return;
6907     if (PL_in_clean_all) /* All is fair */
6908         return;
6909     if (SvIMMORTAL(sv)) {
6910         /* make sure SvREFCNT(sv)==0 happens very seldom */
6911         SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6912         return;
6913     }
6914     if (ckWARN_d(WARN_INTERNAL)) {
6915 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
6916         Perl_dump_sv_child(aTHX_ sv);
6917 #else
6918     #ifdef DEBUG_LEAKING_SCALARS
6919         sv_dump(sv);
6920     #endif
6921 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6922         if (PL_warnhook == PERL_WARNHOOK_FATAL
6923             || ckDEAD(packWARN(WARN_INTERNAL))) {
6924             /* Don't let Perl_warner cause us to escape our fate:  */
6925             abort();
6926         }
6927 #endif
6928         /* This may not return:  */
6929         Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
6930                     "Attempt to free unreferenced scalar: SV 0x%"UVxf
6931                     pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6932 #endif
6933     }
6934 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6935     abort();
6936 #endif
6937
6938 }
6939
6940
6941 /*
6942 =for apidoc sv_len
6943
6944 Returns the length of the string in the SV.  Handles magic and type
6945 coercion and sets the UTF8 flag appropriately.  See also C<L</SvCUR>>, which
6946 gives raw access to the C<xpv_cur> slot.
6947
6948 =cut
6949 */
6950
6951 STRLEN
6952 Perl_sv_len(pTHX_ SV *const sv)
6953 {
6954     STRLEN len;
6955
6956     if (!sv)
6957         return 0;
6958
6959     (void)SvPV_const(sv, len);
6960     return len;
6961 }
6962
6963 /*
6964 =for apidoc sv_len_utf8
6965
6966 Returns the number of characters in the string in an SV, counting wide
6967 UTF-8 bytes as a single character.  Handles magic and type coercion.
6968
6969 =cut
6970 */
6971
6972 /*
6973  * The length is cached in PERL_MAGIC_utf8, in the mg_len field.  Also the
6974  * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
6975  * (Note that the mg_len is not the length of the mg_ptr field.
6976  * This allows the cache to store the character length of the string without
6977  * needing to malloc() extra storage to attach to the mg_ptr.)
6978  *
6979  */
6980
6981 STRLEN
6982 Perl_sv_len_utf8(pTHX_ SV *const sv)
6983 {
6984     if (!sv)
6985         return 0;
6986
6987     SvGETMAGIC(sv);
6988     return sv_len_utf8_nomg(sv);
6989 }
6990
6991 STRLEN
6992 Perl_sv_len_utf8_nomg(pTHX_ SV * const sv)
6993 {
6994     STRLEN len;
6995     const U8 *s = (U8*)SvPV_nomg_const(sv, len);
6996
6997     PERL_ARGS_ASSERT_SV_LEN_UTF8_NOMG;
6998
6999     if (PL_utf8cache && SvUTF8(sv)) {
7000             STRLEN ulen;
7001             MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
7002
7003             if (mg && (mg->mg_len != -1 || mg->mg_ptr)) {
7004                 if (mg->mg_len != -1)
7005                     ulen = mg->mg_len;
7006                 else {
7007                     /* We can use the offset cache for a headstart.
7008                        The longer value is stored in the first pair.  */
7009                     STRLEN *cache = (STRLEN *) mg->mg_ptr;
7010
7011                     ulen = cache[0] + Perl_utf8_length(aTHX_ s + cache[1],
7012                                                        s + len);
7013                 }
7014                 
7015                 if (PL_utf8cache < 0) {
7016                     const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
7017                     assert_uft8_cache_coherent("sv_len_utf8", ulen, real, sv);
7018                 }
7019             }
7020             else {
7021                 ulen = Perl_utf8_length(aTHX_ s, s + len);
7022                 utf8_mg_len_cache_update(sv, &mg, ulen);
7023             }
7024             return ulen;
7025     }
7026     return SvUTF8(sv) ? Perl_utf8_length(aTHX_ s, s + len) : len;
7027 }
7028
7029 /* Walk forwards to find the byte corresponding to the passed in UTF-8
7030    offset.  */
7031 static STRLEN
7032 S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
7033                       STRLEN *const uoffset_p, bool *const at_end)
7034 {
7035     const U8 *s = start;
7036     STRLEN uoffset = *uoffset_p;
7037
7038     PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
7039
7040     while (s < send && uoffset) {
7041         --uoffset;
7042         s += UTF8SKIP(s);
7043     }
7044     if (s == send) {
7045         *at_end = TRUE;
7046     }
7047     else if (s > send) {
7048         *at_end = TRUE;
7049         /* This is the existing behaviour. Possibly it should be a croak, as
7050            it's actually a bounds error  */
7051         s = send;
7052     }
7053     *uoffset_p -= uoffset;
7054     return s - start;
7055 }
7056
7057 /* Given the length of the string in both bytes and UTF-8 characters, decide
7058    whether to walk forwards or backwards to find the byte corresponding to
7059    the passed in UTF-8 offset.  */
7060 static STRLEN
7061 S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
7062                     STRLEN uoffset, const STRLEN uend)
7063 {
7064     STRLEN backw = uend - uoffset;
7065
7066     PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
7067
7068     if (uoffset < 2 * backw) {
7069         /* The assumption is that going forwards is twice the speed of going
7070            forward (that's where the 2 * backw comes from).
7071            (The real figure of course depends on the UTF-8 data.)  */
7072         const U8 *s = start;
7073
7074         while (s < send && uoffset--)
7075             s += UTF8SKIP(s);
7076         assert (s <= send);
7077         if (s > send)
7078             s = send;
7079         return s - start;
7080     }
7081
7082     while (backw--) {
7083         send--;
7084         while (UTF8_IS_CONTINUATION(*send))
7085             send--;
7086     }
7087     return send - start;
7088 }
7089
7090 /* For the string representation of the given scalar, find the byte
7091    corresponding to the passed in UTF-8 offset.  uoffset0 and boffset0
7092    give another position in the string, *before* the sought offset, which
7093    (which is always true, as 0, 0 is a valid pair of positions), which should
7094    help reduce the amount of linear searching.
7095    If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
7096    will be used to reduce the amount of linear searching. The cache will be
7097    created if necessary, and the found value offered to it for update.  */
7098 static STRLEN
7099 S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
7100                     const U8 *const send, STRLEN uoffset,
7101                     STRLEN uoffset0, STRLEN boffset0)
7102 {
7103     STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy.  */
7104     bool found = FALSE;
7105     bool at_end = FALSE;
7106
7107     PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
7108
7109     assert (uoffset >= uoffset0);
7110
7111     if (!uoffset)
7112         return 0;
7113
7114     if (!SvREADONLY(sv) && !SvGMAGICAL(sv) && SvPOK(sv)
7115         && PL_utf8cache
7116         && (*mgp || (SvTYPE(sv) >= SVt_PVMG &&
7117                      (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) {
7118         if ((*mgp)->mg_ptr) {
7119             STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
7120             if (cache[0] == uoffset) {
7121                 /* An exact match. */
7122                 return cache[1];
7123             }
7124             if (cache[2] == uoffset) {
7125                 /* An exact match. */
7126                 return cache[3];
7127             }
7128
7129             if (cache[0] < uoffset) {
7130                 /* The cache already knows part of the way.   */
7131                 if (cache[0] > uoffset0) {
7132                     /* The cache knows more than the passed in pair  */
7133                     uoffset0 = cache[0];
7134                     boffset0 = cache[1];
7135                 }
7136                 if ((*mgp)->mg_len != -1) {
7137                     /* And we know the end too.  */
7138                     boffset = boffset0
7139                         + sv_pos_u2b_midway(start + boffset0, send,
7140                                               uoffset - uoffset0,
7141                                               (*mgp)->mg_len - uoffset0);
7142                 } else {
7143                     uoffset -= uoffset0;
7144                     boffset = boffset0
7145                         + sv_pos_u2b_forwards(start + boffset0,
7146                                               send, &uoffset, &at_end);
7147                     uoffset += uoffset0;
7148                 }
7149             }
7150             else if (cache[2] < uoffset) {
7151                 /* We're between the two cache entries.  */
7152                 if (cache[2] > uoffset0) {
7153                     /* and the cache knows more than the passed in pair  */
7154                     uoffset0 = cache[2];
7155                     boffset0 = cache[3];
7156                 }
7157
7158                 boffset = boffset0
7159                     + sv_pos_u2b_midway(start + boffset0,
7160                                           start + cache[1],
7161                                           uoffset - uoffset0,
7162                                           cache[0] - uoffset0);
7163             } else {
7164                 boffset = boffset0
7165                     + sv_pos_u2b_midway(start + boffset0,
7166                                           start + cache[3],
7167                                           uoffset - uoffset0,
7168                                           cache[2] - uoffset0);
7169             }
7170             found = TRUE;
7171         }
7172         else if ((*mgp)->mg_len != -1) {
7173             /* If we can take advantage of a passed in offset, do so.  */
7174             /* In fact, offset0 is either 0, or less than offset, so don't
7175                need to worry about the other possibility.  */
7176             boffset = boffset0
7177                 + sv_pos_u2b_midway(start + boffset0, send,
7178                                       uoffset - uoffset0,
7179                                       (*mgp)->mg_len - uoffset0);
7180             found = TRUE;
7181         }
7182     }
7183
7184     if (!found || PL_utf8cache < 0) {
7185         STRLEN real_boffset;
7186         uoffset -= uoffset0;
7187         real_boffset = boffset0 + sv_pos_u2b_forwards(start + boffset0,
7188                                                       send, &uoffset, &at_end);
7189         uoffset += uoffset0;
7190
7191         if (found && PL_utf8cache < 0)
7192             assert_uft8_cache_coherent("sv_pos_u2b_cache", boffset,
7193                                        real_boffset, sv);
7194         boffset = real_boffset;
7195     }
7196
7197     if (PL_utf8cache && !SvGMAGICAL(sv) && SvPOK(sv)) {
7198         if (at_end)
7199             utf8_mg_len_cache_update(sv, mgp, uoffset);
7200         else
7201             utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
7202     }
7203     return boffset;
7204 }
7205
7206
7207 /*
7208 =for apidoc sv_pos_u2b_flags
7209
7210 Converts the offset from a count of UTF-8 chars from
7211 the start of the string, to a count of the equivalent number of bytes; if
7212 C<lenp> is non-zero, it does the same to C<lenp>, but this time starting from
7213 C<offset>, rather than from the start
7214 of the string.  Handles type coercion.
7215 C<flags> is passed to C<SvPV_flags>, and usually should be
7216 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7217
7218 =cut
7219 */
7220
7221 /*
7222  * sv_pos_u2b_flags() uses, like sv_pos_b2u(), the mg_ptr of the potential
7223  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7224  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7225  *
7226  */
7227
7228 STRLEN
7229 Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp,
7230                       U32 flags)
7231 {
7232     const U8 *start;
7233     STRLEN len;
7234     STRLEN boffset;
7235
7236     PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS;
7237
7238     start = (U8*)SvPV_flags(sv, len, flags);
7239     if (len) {
7240         const U8 * const send = start + len;
7241         MAGIC *mg = NULL;
7242         boffset = sv_pos_u2b_cached(sv, &mg, start, send, uoffset, 0, 0);
7243
7244         if (lenp
7245             && *lenp /* don't bother doing work for 0, as its bytes equivalent
7246                         is 0, and *lenp is already set to that.  */) {
7247             /* Convert the relative offset to absolute.  */
7248             const STRLEN uoffset2 = uoffset + *lenp;
7249             const STRLEN boffset2
7250                 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
7251                                       uoffset, boffset) - boffset;
7252
7253             *lenp = boffset2;
7254         }
7255     } else {
7256         if (lenp)
7257             *lenp = 0;
7258         boffset = 0;
7259     }
7260
7261     return boffset;
7262 }
7263
7264 /*
7265 =for apidoc sv_pos_u2b
7266
7267 Converts the value pointed to by C<offsetp> from a count of UTF-8 chars from
7268 the start of the string, to a count of the equivalent number of bytes; if
7269 C<lenp> is non-zero, it does the same to C<lenp>, but this time starting from
7270 the offset, rather than from the start of the string.  Handles magic and
7271 type coercion.
7272
7273 Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
7274 than 2Gb.
7275
7276 =cut
7277 */
7278
7279 /*
7280  * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
7281  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7282  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7283  *
7284  */
7285
7286 /* This function is subject to size and sign problems */
7287
7288 void
7289 Perl_sv_pos_u2b(pTHX_ SV *const sv, I32 *const offsetp, I32 *const lenp)
7290 {
7291     PERL_ARGS_ASSERT_SV_POS_U2B;
7292
7293     if (lenp) {
7294         STRLEN ulen = (STRLEN)*lenp;
7295         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, &ulen,
7296                                          SV_GMAGIC|SV_CONST_RETURN);
7297         *lenp = (I32)ulen;
7298     } else {
7299         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, NULL,
7300                                          SV_GMAGIC|SV_CONST_RETURN);
7301     }
7302 }
7303
7304 static void
7305 S_utf8_mg_len_cache_update(pTHX_ SV *const sv, MAGIC **const mgp,
7306                            const STRLEN ulen)
7307 {
7308     PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE;
7309     if (SvREADONLY(sv) || SvGMAGICAL(sv) || !SvPOK(sv))
7310         return;
7311
7312     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7313                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7314         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, &PL_vtbl_utf8, 0, 0);
7315     }
7316     assert(*mgp);
7317
7318     (*mgp)->mg_len = ulen;
7319 }
7320
7321 /* Create and update the UTF8 magic offset cache, with the proffered utf8/
7322    byte length pairing. The (byte) length of the total SV is passed in too,
7323    as blen, because for some (more esoteric) SVs, the call to SvPV_const()
7324    may not have updated SvCUR, so we can't rely on reading it directly.
7325
7326    The proffered utf8/byte length pairing isn't used if the cache already has
7327    two pairs, and swapping either for the proffered pair would increase the
7328    RMS of the intervals between known byte offsets.
7329
7330    The cache itself consists of 4 STRLEN values
7331    0: larger UTF-8 offset
7332    1: corresponding byte offset
7333    2: smaller UTF-8 offset
7334    3: corresponding byte offset
7335
7336    Unused cache pairs have the value 0, 0.
7337    Keeping the cache "backwards" means that the invariant of
7338    cache[0] >= cache[2] is maintained even with empty slots, which means that
7339    the code that uses it doesn't need to worry if only 1 entry has actually
7340    been set to non-zero.  It also makes the "position beyond the end of the
7341    cache" logic much simpler, as the first slot is always the one to start
7342    from.   
7343 */
7344 static void
7345 S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
7346                            const STRLEN utf8, const STRLEN blen)
7347 {
7348     STRLEN *cache;
7349
7350     PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
7351
7352     if (SvREADONLY(sv))
7353         return;
7354
7355     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7356                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7357         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
7358                            0);
7359         (*mgp)->mg_len = -1;
7360     }
7361     assert(*mgp);
7362
7363     if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
7364         Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
7365         (*mgp)->mg_ptr = (char *) cache;
7366     }
7367     assert(cache);
7368
7369     if (PL_utf8cache < 0 && SvPOKp(sv)) {
7370         /* SvPOKp() because, if sv is a reference, then SvPVX() is actually
7371            a pointer.  Note that we no longer cache utf8 offsets on refer-
7372            ences, but this check is still a good idea, for robustness.  */
7373         const U8 *start = (const U8 *) SvPVX_const(sv);
7374         const STRLEN realutf8 = utf8_length(start, start + byte);
7375
7376         assert_uft8_cache_coherent("utf8_mg_pos_cache_update", utf8, realutf8,
7377                                    sv);
7378     }
7379
7380     /* Cache is held with the later position first, to simplify the code
7381        that deals with unbounded ends.  */
7382        
7383     ASSERT_UTF8_CACHE(cache);
7384     if (cache[1] == 0) {
7385         /* Cache is totally empty  */
7386         cache[0] = utf8;
7387         cache[1] = byte;
7388     } else if (cache[3] == 0) {
7389         if (byte > cache[1]) {
7390             /* New one is larger, so goes first.  */
7391             cache[2] = cache[0];
7392             cache[3] = cache[1];
7393             cache[0] = utf8;
7394             cache[1] = byte;
7395         } else {
7396             cache[2] = utf8;
7397             cache[3] = byte;
7398         }
7399     } else {
7400 /* float casts necessary? XXX */
7401 #define THREEWAY_SQUARE(a,b,c,d) \
7402             ((float)((d) - (c))) * ((float)((d) - (c))) \
7403             + ((float)((c) - (b))) * ((float)((c) - (b))) \
7404                + ((float)((b) - (a))) * ((float)((b) - (a)))
7405
7406         /* Cache has 2 slots in use, and we know three potential pairs.
7407            Keep the two that give the lowest RMS distance. Do the
7408            calculation in bytes simply because we always know the byte
7409            length.  squareroot has the same ordering as the positive value,
7410            so don't bother with the actual square root.  */
7411         if (byte > cache[1]) {
7412             /* New position is after the existing pair of pairs.  */
7413             const float keep_earlier
7414                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
7415             const float keep_later
7416                 = THREEWAY_SQUARE(0, cache[1], byte, blen);
7417
7418             if (keep_later < keep_earlier) {
7419                 cache[2] = cache[0];
7420                 cache[3] = cache[1];
7421             }
7422             cache[0] = utf8;
7423             cache[1] = byte;
7424         }
7425         else {
7426             const float keep_later = THREEWAY_SQUARE(0, byte, cache[1], blen);
7427             float b, c, keep_earlier;
7428             if (byte > cache[3]) {
7429                 /* New position is between the existing pair of pairs.  */
7430                 b = (float)cache[3];
7431                 c = (float)byte;
7432             } else {
7433                 /* New position is before the existing pair of pairs.  */
7434                 b = (float)byte;
7435                 c = (float)cache[3];
7436             }
7437             keep_earlier = THREEWAY_SQUARE(0, b, c, blen);
7438             if (byte > cache[3]) {
7439                 if (keep_later < keep_earlier) {
7440                     cache[2] = utf8;
7441                     cache[3] = byte;
7442                 }
7443                 else {
7444                     cache[0] = utf8;
7445                     cache[1] = byte;
7446                 }
7447             }
7448             else {
7449                 if (! (keep_later < keep_earlier)) {
7450                     cache[0] = cache[2];
7451                     cache[1] = cache[3];
7452                 }
7453                 cache[2] = utf8;
7454                 cache[3] = byte;
7455             }
7456         }
7457     }
7458     ASSERT_UTF8_CACHE(cache);
7459 }
7460
7461 /* We already know all of the way, now we may be able to walk back.  The same
7462    assumption is made as in S_sv_pos_u2b_midway(), namely that walking
7463    backward is half the speed of walking forward. */
7464 static STRLEN
7465 S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
7466                     const U8 *end, STRLEN endu)
7467 {
7468     const STRLEN forw = target - s;
7469     STRLEN backw = end - target;
7470
7471     PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
7472
7473     if (forw < 2 * backw) {
7474         return utf8_length(s, target);
7475     }
7476
7477     while (end > target) {
7478         end--;
7479         while (UTF8_IS_CONTINUATION(*end)) {
7480             end--;
7481         }
7482         endu--;
7483     }
7484     return endu;
7485 }
7486
7487 /*
7488 =for apidoc sv_pos_b2u_flags
7489
7490 Converts C<offset> from a count of bytes from the start of the string, to
7491 a count of the equivalent number of UTF-8 chars.  Handles type coercion.
7492 C<flags> is passed to C<SvPV_flags>, and usually should be
7493 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7494
7495 =cut
7496 */
7497
7498 /*
7499  * sv_pos_b2u_flags() uses, like sv_pos_u2b_flags(), the mg_ptr of the
7500  * potential PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8
7501  * and byte offsets.
7502  *
7503  */
7504 STRLEN
7505 Perl_sv_pos_b2u_flags(pTHX_ SV *const sv, STRLEN const offset, U32 flags)
7506 {
7507     const U8* s;
7508     STRLEN len = 0; /* Actually always set, but let's keep gcc happy.  */
7509     STRLEN blen;
7510     MAGIC* mg = NULL;
7511     const U8* send;
7512     bool found = FALSE;
7513
7514     PERL_ARGS_ASSERT_SV_POS_B2U_FLAGS;
7515
7516     s = (const U8*)SvPV_flags(sv, blen, flags);
7517
7518     if (blen < offset)
7519         Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset, blen=%"UVuf
7520                    ", byte=%"UVuf, (UV)blen, (UV)offset);
7521
7522     send = s + offset;
7523
7524     if (!SvREADONLY(sv)
7525         && PL_utf8cache
7526         && SvTYPE(sv) >= SVt_PVMG
7527         && (mg = mg_find(sv, PERL_MAGIC_utf8)))
7528     {
7529         if (mg->mg_ptr) {
7530             STRLEN * const cache = (STRLEN *) mg->mg_ptr;
7531             if (cache[1] == offset) {
7532                 /* An exact match. */
7533                 return cache[0];
7534             }
7535             if (cache[3] == offset) {
7536                 /* An exact match. */
7537                 return cache[2];
7538             }
7539
7540             if (cache[1] < offset) {
7541                 /* We already know part of the way. */
7542                 if (mg->mg_len != -1) {
7543                     /* Actually, we know the end too.  */
7544                     len = cache[0]
7545                         + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
7546                                               s + blen, mg->mg_len - cache[0]);
7547                 } else {
7548                     len = cache[0] + utf8_length(s + cache[1], send);
7549                 }
7550             }
7551             else if (cache[3] < offset) {
7552                 /* We're between the two cached pairs, so we do the calculation
7553                    offset by the byte/utf-8 positions for the earlier pair,
7554                    then add the utf-8 characters from the string start to
7555                    there.  */
7556                 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
7557                                           s + cache[1], cache[0] - cache[2])
7558                     + cache[2];
7559
7560             }
7561             else { /* cache[3] > offset */
7562                 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
7563                                           cache[2]);
7564
7565             }
7566             ASSERT_UTF8_CACHE(cache);
7567             found = TRUE;
7568         } else if (mg->mg_len != -1) {
7569             len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
7570             found = TRUE;
7571         }
7572     }
7573     if (!found || PL_utf8cache < 0) {
7574         const STRLEN real_len = utf8_length(s, send);
7575
7576         if (found && PL_utf8cache < 0)
7577             assert_uft8_cache_coherent("sv_pos_b2u", len, real_len, sv);
7578         len = real_len;
7579     }
7580
7581     if (PL_utf8cache) {
7582         if (blen == offset)
7583             utf8_mg_len_cache_update(sv, &mg, len);
7584         else
7585             utf8_mg_pos_cache_update(sv, &mg, offset, len, blen);
7586     }
7587
7588     return len;
7589 }
7590
7591 /*
7592 =for apidoc sv_pos_b2u
7593
7594 Converts the value pointed to by C<offsetp> from a count of bytes from the
7595 start of the string, to a count of the equivalent number of UTF-8 chars.
7596 Handles magic and type coercion.
7597
7598 Use C<sv_pos_b2u_flags> in preference, which correctly handles strings
7599 longer than 2Gb.
7600
7601 =cut
7602 */
7603
7604 /*
7605  * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
7606  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7607  * byte offsets.
7608  *
7609  */
7610 void
7611 Perl_sv_pos_b2u(pTHX_ SV *const sv, I32 *const offsetp)
7612 {
7613     PERL_ARGS_ASSERT_SV_POS_B2U;
7614
7615     if (!sv)
7616         return;
7617
7618     *offsetp = (I32)sv_pos_b2u_flags(sv, (STRLEN)*offsetp,
7619                                      SV_GMAGIC|SV_CONST_RETURN);
7620 }
7621
7622 static void
7623 S_assert_uft8_cache_coherent(pTHX_ const char *const func, STRLEN from_cache,
7624                              STRLEN real, SV *const sv)
7625 {
7626     PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT;
7627
7628     /* As this is debugging only code, save space by keeping this test here,
7629        rather than inlining it in all the callers.  */
7630     if (from_cache == real)
7631         return;
7632
7633     /* Need to turn the assertions off otherwise we may recurse infinitely
7634        while printing error messages.  */
7635     SAVEI8(PL_utf8cache);
7636     PL_utf8cache = 0;
7637     Perl_croak(aTHX_ "panic: %s cache %"UVuf" real %"UVuf" for %"SVf,
7638                func, (UV) from_cache, (UV) real, SVfARG(sv));
7639 }
7640
7641 /*
7642 =for apidoc sv_eq
7643
7644 Returns a boolean indicating whether the strings in the two SVs are
7645 identical.  Is UTF-8 and S<C<'use bytes'>> aware, handles get magic, and will
7646 coerce its args to strings if necessary.
7647
7648 =for apidoc sv_eq_flags
7649
7650 Returns a boolean indicating whether the strings in the two SVs are
7651 identical.  Is UTF-8 and S<C<'use bytes'>> aware and coerces its args to strings
7652 if necessary.  If the flags has the C<SV_GMAGIC> bit set, it handles get-magic, too.
7653
7654 =cut
7655 */
7656
7657 I32
7658 Perl_sv_eq_flags(pTHX_ SV *sv1, SV *sv2, const U32 flags)
7659 {
7660     const char *pv1;
7661     STRLEN cur1;
7662     const char *pv2;
7663     STRLEN cur2;
7664     I32  eq     = 0;
7665     SV* svrecode = NULL;
7666
7667     if (!sv1) {
7668         pv1 = "";
7669         cur1 = 0;
7670     }
7671     else {
7672         /* if pv1 and pv2 are the same, second SvPV_const call may
7673          * invalidate pv1 (if we are handling magic), so we may need to
7674          * make a copy */
7675         if (sv1 == sv2 && flags & SV_GMAGIC
7676          && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
7677             pv1 = SvPV_const(sv1, cur1);
7678             sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
7679         }
7680         pv1 = SvPV_flags_const(sv1, cur1, flags);
7681     }
7682
7683     if (!sv2){
7684         pv2 = "";
7685         cur2 = 0;
7686     }
7687     else
7688         pv2 = SvPV_flags_const(sv2, cur2, flags);
7689
7690     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7691         /* Differing utf8ness.
7692          * Do not UTF8size the comparands as a side-effect. */
7693          if (IN_ENCODING) {
7694               if (SvUTF8(sv1)) {
7695                    svrecode = newSVpvn(pv2, cur2);
7696                    sv_recode_to_utf8(svrecode, _get_encoding());
7697                    pv2 = SvPV_const(svrecode, cur2);
7698               }
7699               else {
7700                    svrecode = newSVpvn(pv1, cur1);
7701                    sv_recode_to_utf8(svrecode, _get_encoding());
7702                    pv1 = SvPV_const(svrecode, cur1);
7703               }
7704               /* Now both are in UTF-8. */
7705               if (cur1 != cur2) {
7706                    SvREFCNT_dec_NN(svrecode);
7707                    return FALSE;
7708               }
7709          }
7710          else {
7711               if (SvUTF8(sv1)) {
7712                   /* sv1 is the UTF-8 one  */
7713                   return bytes_cmp_utf8((const U8*)pv2, cur2,
7714                                         (const U8*)pv1, cur1) == 0;
7715               }
7716               else {
7717                   /* sv2 is the UTF-8 one  */
7718                   return bytes_cmp_utf8((const U8*)pv1, cur1,
7719                                         (const U8*)pv2, cur2) == 0;
7720               }
7721          }
7722     }
7723
7724     if (cur1 == cur2)
7725         eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
7726         
7727     SvREFCNT_dec(svrecode);
7728
7729     return eq;
7730 }
7731
7732 /*
7733 =for apidoc sv_cmp
7734
7735 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7736 string in C<sv1> is less than, equal to, or greater than the string in
7737 C<sv2>.  Is UTF-8 and S<C<'use bytes'>> aware, handles get magic, and will
7738 coerce its args to strings if necessary.  See also C<L</sv_cmp_locale>>.
7739
7740 =for apidoc sv_cmp_flags
7741
7742 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7743 string in C<sv1> is less than, equal to, or greater than the string in
7744 C<sv2>.  Is UTF-8 and S<C<'use bytes'>> aware and will coerce its args to strings
7745 if necessary.  If the flags has the C<SV_GMAGIC> bit set, it handles get magic.  See
7746 also C<L</sv_cmp_locale_flags>>.
7747
7748 =cut
7749 */
7750
7751 I32
7752 Perl_sv_cmp(pTHX_ SV *const sv1, SV *const sv2)
7753 {
7754     return sv_cmp_flags(sv1, sv2, SV_GMAGIC);
7755 }
7756
7757 I32
7758 Perl_sv_cmp_flags(pTHX_ SV *const sv1, SV *const sv2,
7759                   const U32 flags)
7760 {
7761     STRLEN cur1, cur2;
7762     const char *pv1, *pv2;
7763     I32  cmp;
7764     SV *svrecode = NULL;
7765
7766     if (!sv1) {
7767         pv1 = "";
7768         cur1 = 0;
7769     }
7770     else
7771         pv1 = SvPV_flags_const(sv1, cur1, flags);
7772
7773     if (!sv2) {
7774         pv2 = "";
7775         cur2 = 0;
7776     }
7777     else
7778         pv2 = SvPV_flags_const(sv2, cur2, flags);
7779
7780     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7781         /* Differing utf8ness.
7782          * Do not UTF8size the comparands as a side-effect. */
7783         if (SvUTF8(sv1)) {
7784             if (IN_ENCODING) {
7785                  svrecode = newSVpvn(pv2, cur2);
7786                  sv_recode_to_utf8(svrecode, _get_encoding());
7787                  pv2 = SvPV_const(svrecode, cur2);
7788             }
7789             else {
7790                 const int retval = -bytes_cmp_utf8((const U8*)pv2, cur2,
7791                                                    (const U8*)pv1, cur1);
7792                 return retval ? retval < 0 ? -1 : +1 : 0;
7793             }
7794         }
7795         else {
7796             if (IN_ENCODING) {
7797                  svrecode = newSVpvn(pv1, cur1);
7798                  sv_recode_to_utf8(svrecode, _get_encoding());
7799                  pv1 = SvPV_const(svrecode, cur1);
7800             }
7801             else {
7802                 const int retval = bytes_cmp_utf8((const U8*)pv1, cur1,
7803                                                   (const U8*)pv2, cur2);
7804                 return retval ? retval < 0 ? -1 : +1 : 0;
7805             }
7806         }
7807     }
7808
7809     /* Here, if both are non-NULL, then they have the same UTF8ness. */
7810
7811     if (!cur1) {
7812         cmp = cur2 ? -1 : 0;
7813     } else if (!cur2) {
7814         cmp = 1;
7815     } else {
7816         STRLEN shortest_len = cur1 < cur2 ? cur1 : cur2;
7817
7818 #ifdef EBCDIC
7819         if (! DO_UTF8(sv1)) {
7820 #endif
7821             const I32 retval = memcmp((const void*)pv1,
7822                                       (const void*)pv2,
7823                                       shortest_len);
7824             if (retval) {
7825                 cmp = retval < 0 ? -1 : 1;
7826             } else if (cur1 == cur2) {
7827                 cmp = 0;
7828             } else {
7829                 cmp = cur1 < cur2 ? -1 : 1;
7830             }
7831 #ifdef EBCDIC
7832         }
7833         else {  /* Both are to be treated as UTF-EBCDIC */
7834
7835             /* EBCDIC UTF-8 is complicated by the fact that it is based on I8
7836              * which remaps code points 0-255.  We therefore generally have to
7837              * unmap back to the original values to get an accurate comparison.
7838              * But we don't have to do that for UTF-8 invariants, as by
7839              * definition, they aren't remapped, nor do we have to do it for
7840              * above-latin1 code points, as they also aren't remapped.  (This
7841              * code also works on ASCII platforms, but the memcmp() above is
7842              * much faster). */
7843
7844             const char *e = pv1 + shortest_len;
7845
7846             /* Find the first bytes that differ between the two strings */
7847             while (pv1 < e && *pv1 == *pv2) {
7848                 pv1++;
7849                 pv2++;
7850             }
7851
7852
7853             if (pv1 == e) { /* Are the same all the way to the end */
7854                 if (cur1 == cur2) {
7855                     cmp = 0;
7856                 } else {
7857                     cmp = cur1 < cur2 ? -1 : 1;
7858                 }
7859             }
7860             else   /* Here *pv1 and *pv2 are not equal, but all bytes earlier
7861                     * in the strings were.  The current bytes may or may not be
7862                     * at the beginning of a character.  But neither or both are
7863                     * (or else earlier bytes would have been different).  And
7864                     * if we are in the middle of a character, the two
7865                     * characters are comprised of the same number of bytes
7866                     * (because in this case the start bytes are the same, and
7867                     * the start bytes encode the character's length). */
7868                  if (UTF8_IS_INVARIANT(*pv1))
7869             {
7870                 /* If both are invariants; can just compare directly */
7871                 if (UTF8_IS_INVARIANT(*pv2)) {
7872                     cmp = ((U8) *pv1 < (U8) *pv2) ? -1 : 1;
7873                 }
7874                 else   /* Since *pv1 is invariant, it is the whole character,
7875                           which means it is at the beginning of a character.
7876                           That means pv2 is also at the beginning of a
7877                           character (see earlier comment).  Since it isn't
7878                           invariant, it must be a start byte.  If it starts a
7879                           character whose code point is above 255, that
7880                           character is greater than any single-byte char, which
7881                           *pv1 is */
7882                       if (UTF8_IS_ABOVE_LATIN1_START(*pv2))
7883                 {
7884                     cmp = -1;
7885                 }
7886                 else {
7887                     /* Here, pv2 points to a character composed of 2 bytes
7888                      * whose code point is < 256.  Get its code point and
7889                      * compare with *pv1 */
7890                     cmp = ((U8) *pv1 < EIGHT_BIT_UTF8_TO_NATIVE(*pv2, *(pv2 + 1)))
7891                            ?  -1
7892                            : 1;
7893                 }
7894             }
7895             else   /* The code point starting at pv1 isn't a single byte */
7896                  if (UTF8_IS_INVARIANT(*pv2))
7897             {
7898                 /* But here, the code point starting at *pv2 is a single byte,
7899                  * and so *pv1 must begin a character, hence is a start byte.
7900                  * If that character is above 255, it is larger than any
7901                  * single-byte char, which *pv2 is */
7902                 if (UTF8_IS_ABOVE_LATIN1_START(*pv1)) {
7903                     cmp = 1;
7904                 }
7905                 else {
7906                     /* Here, pv1 points to a character composed of 2 bytes
7907                      * whose code point is < 256.  Get its code point and
7908                      * compare with the single byte character *pv2 */
7909                     cmp = (EIGHT_BIT_UTF8_TO_NATIVE(*pv1, *(pv1 + 1)) < (U8) *pv2)
7910                           ?  -1
7911                           : 1;
7912                 }
7913             }
7914             else   /* Here, we've ruled out either *pv1 and *pv2 being
7915                       invariant.  That means both are part of variants, but not
7916                       necessarily at the start of a character */
7917                  if (   UTF8_IS_ABOVE_LATIN1_START(*pv1)
7918                      || UTF8_IS_ABOVE_LATIN1_START(*pv2))
7919             {
7920                 /* Here, at least one is the start of a character, which means
7921                  * the other is also a start byte.  And the code point of at
7922                  * least one of the characters is above 255.  It is a
7923                  * characteristic of UTF-EBCDIC that all start bytes for
7924                  * above-latin1 code points are well behaved as far as code
7925                  * point comparisons go, and all are larger than all other
7926                  * start bytes, so the comparison with those is also well
7927                  * behaved */
7928                 cmp = ((U8) *pv1 < (U8) *pv2) ? -1 : 1;
7929             }
7930             else {
7931                 /* Here both *pv1 and *pv2 are part of variant characters.
7932                  * They could be both continuations, or both start characters.
7933                  * (One or both could even be an illegal start character (for
7934                  * an overlong) which for the purposes of sorting we treat as
7935                  * legal. */
7936                 if (UTF8_IS_CONTINUATION(*pv1)) {
7937
7938                     /* If they are continuations for code points above 255,
7939                      * then comparing the current byte is sufficient, as there
7940                      * is no remapping of these and so the comparison is
7941                      * well-behaved.   We determine if they are such
7942                      * continuations by looking at the preceding byte.  It
7943                      * could be a start byte, from which we can tell if it is
7944                      * for an above 255 code point.  Or it could be a
7945                      * continuation, which means the character occupies at
7946                      * least 3 bytes, so must be above 255.  */
7947                     if (   UTF8_IS_CONTINUATION(*(pv2 - 1))
7948                         || UTF8_IS_ABOVE_LATIN1_START(*(pv2 -1)))
7949                     {
7950                         cmp = ((U8) *pv1 < (U8) *pv2) ? -1 : 1;
7951                         goto cmp_done;
7952                     }
7953
7954                     /* Here, the continuations are for code points below 256;
7955                      * back up one to get to the start byte */
7956                     pv1--;
7957                     pv2--;
7958                 }
7959
7960                 /* We need to get the actual native code point of each of these
7961                  * variants in order to compare them */
7962                 cmp =  (  EIGHT_BIT_UTF8_TO_NATIVE(*pv1, *(pv1 + 1))
7963                         < EIGHT_BIT_UTF8_TO_NATIVE(*pv2, *(pv2 + 1)))
7964                         ? -1
7965                         : 1;
7966             }
7967         }
7968       cmp_done: ;
7969 #endif
7970     }
7971
7972     SvREFCNT_dec(svrecode);
7973
7974     return cmp;
7975 }
7976
7977 /*
7978 =for apidoc sv_cmp_locale
7979
7980 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
7981 S<C<'use bytes'>> aware, handles get magic, and will coerce its args to strings
7982 if necessary.  See also C<L</sv_cmp>>.
7983
7984 =for apidoc sv_cmp_locale_flags
7985
7986 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
7987 S<C<'use bytes'>> aware and will coerce its args to strings if necessary.  If
7988 the flags contain C<SV_GMAGIC>, it handles get magic.  See also
7989 C<L</sv_cmp_flags>>.
7990
7991 =cut
7992 */
7993
7994 I32
7995 Perl_sv_cmp_locale(pTHX_ SV *const sv1, SV *const sv2)
7996 {
7997     return sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC);
7998 }
7999
8000 I32
8001 Perl_sv_cmp_locale_flags(pTHX_ SV *const sv1, SV *const sv2,
8002                          const U32 flags)
8003 {
8004 #ifdef USE_LOCALE_COLLATE
8005
8006     char *pv1, *pv2;
8007     STRLEN len1, len2;
8008     I32 retval;
8009
8010     if (PL_collation_standard)
8011         goto raw_compare;
8012
8013     len1 = 0;
8014     pv1 = sv1 ? sv_collxfrm_flags(sv1, &len1, flags) : (char *) NULL;
8015     len2 = 0;
8016     pv2 = sv2 ? sv_collxfrm_flags(sv2, &len2, flags) : (char *) NULL;
8017
8018     if (!pv1 || !len1) {
8019         if (pv2 && len2)
8020             return -1;
8021         else
8022             goto raw_compare;
8023     }
8024     else {
8025         if (!pv2 || !len2)
8026             return 1;
8027     }
8028
8029     retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
8030
8031     if (retval)
8032         return retval < 0 ? -1 : 1;
8033
8034     /*
8035      * When the result of collation is equality, that doesn't mean
8036      * that there are no differences -- some locales exclude some
8037      * characters from consideration.  So to avoid false equalities,
8038      * we use the raw string as a tiebreaker.
8039      */
8040
8041   raw_compare:
8042     /* FALLTHROUGH */
8043
8044 #else
8045     PERL_UNUSED_ARG(flags);
8046 #endif /* USE_LOCALE_COLLATE */
8047
8048     return sv_cmp(sv1, sv2);
8049 }
8050
8051
8052 #ifdef USE_LOCALE_COLLATE
8053
8054 /*
8055 =for apidoc sv_collxfrm
8056
8057 This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag.  See
8058 C<L</sv_collxfrm_flags>>.
8059
8060 =for apidoc sv_collxfrm_flags
8061
8062 Add Collate Transform magic to an SV if it doesn't already have it.  If the
8063 flags contain C<SV_GMAGIC>, it handles get-magic.
8064
8065 Any scalar variable may carry C<PERL_MAGIC_collxfrm> magic that contains the
8066 scalar data of the variable, but transformed to such a format that a normal
8067 memory comparison can be used to compare the data according to the locale
8068 settings.
8069
8070 =cut
8071 */
8072
8073 char *
8074 Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp, const I32 flags)
8075 {
8076     MAGIC *mg;
8077
8078     PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS;
8079
8080     mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
8081     if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
8082         const char *s;
8083         char *xf;
8084         STRLEN len, xlen;
8085
8086         if (mg)
8087             Safefree(mg->mg_ptr);
8088         s = SvPV_flags_const(sv, len, flags);
8089         if ((xf = mem_collxfrm(s, len, &xlen))) {
8090             if (! mg) {
8091                 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
8092                                  0, 0);
8093                 assert(mg);
8094             }
8095             mg->mg_ptr = xf;
8096             mg->mg_len = xlen;
8097         }
8098         else {
8099             if (mg) {
8100                 mg->mg_ptr = NULL;
8101                 mg->mg_len = -1;
8102             }
8103         }
8104     }
8105     if (mg && mg->mg_ptr) {
8106         *nxp = mg->mg_len;
8107         return mg->mg_ptr + sizeof(PL_collation_ix);
8108     }
8109     else {
8110         *nxp = 0;
8111         return NULL;
8112     }
8113 }
8114
8115 #endif /* USE_LOCALE_COLLATE */
8116
8117 static char *
8118 S_sv_gets_append_to_utf8(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8119 {
8120     SV * const tsv = newSV(0);
8121     ENTER;
8122     SAVEFREESV(tsv);
8123     sv_gets(tsv, fp, 0);
8124     sv_utf8_upgrade_nomg(tsv);
8125     SvCUR_set(sv,append);
8126     sv_catsv(sv,tsv);
8127     LEAVE;
8128     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8129 }
8130
8131 static char *
8132 S_sv_gets_read_record(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8133 {
8134     SSize_t bytesread;
8135     const STRLEN recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
8136       /* Grab the size of the record we're getting */
8137     char *buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
8138     
8139     /* Go yank in */
8140 #ifdef __VMS
8141     int fd;
8142     Stat_t st;
8143
8144     /* With a true, record-oriented file on VMS, we need to use read directly
8145      * to ensure that we respect RMS record boundaries.  The user is responsible
8146      * for providing a PL_rs value that corresponds to the FAB$W_MRS (maximum
8147      * record size) field.  N.B. This is likely to produce invalid results on
8148      * varying-width character data when a record ends mid-character.
8149      */
8150     fd = PerlIO_fileno(fp);
8151     if (fd != -1
8152         && PerlLIO_fstat(fd, &st) == 0
8153         && (st.st_fab_rfm == FAB$C_VAR
8154             || st.st_fab_rfm == FAB$C_VFC
8155             || st.st_fab_rfm == FAB$C_FIX)) {
8156
8157         bytesread = PerlLIO_read(fd, buffer, recsize);
8158     }
8159     else /* in-memory file from PerlIO::Scalar
8160           * or not a record-oriented file
8161           */
8162 #endif
8163     {
8164         bytesread = PerlIO_read(fp, buffer, recsize);
8165
8166         /* At this point, the logic in sv_get() means that sv will
8167            be treated as utf-8 if the handle is utf8.
8168         */
8169         if (PerlIO_isutf8(fp) && bytesread > 0) {
8170             char *bend = buffer + bytesread;
8171             char *bufp = buffer;
8172             size_t charcount = 0;
8173             bool charstart = TRUE;
8174             STRLEN skip = 0;
8175
8176             while (charcount < recsize) {
8177                 /* count accumulated characters */
8178                 while (bufp < bend) {
8179                     if (charstart) {
8180                         skip = UTF8SKIP(bufp);
8181                     }
8182                     if (bufp + skip > bend) {
8183                         /* partial at the end */
8184                         charstart = FALSE;
8185                         break;
8186                     }
8187                     else {
8188                         ++charcount;
8189                         bufp += skip;
8190                         charstart = TRUE;
8191                     }
8192                 }
8193
8194                 if (charcount < recsize) {
8195                     STRLEN readsize;
8196                     STRLEN bufp_offset = bufp - buffer;
8197                     SSize_t morebytesread;
8198
8199                     /* originally I read enough to fill any incomplete
8200                        character and the first byte of the next
8201                        character if needed, but if there's many
8202                        multi-byte encoded characters we're going to be
8203                        making a read call for every character beyond
8204                        the original read size.
8205
8206                        So instead, read the rest of the character if
8207                        any, and enough bytes to match at least the
8208                        start bytes for each character we're going to
8209                        read.
8210                     */
8211                     if (charstart)
8212                         readsize = recsize - charcount;
8213                     else 
8214                         readsize = skip - (bend - bufp) + recsize - charcount - 1;
8215                     buffer = SvGROW(sv, append + bytesread + readsize + 1) + append;
8216                     bend = buffer + bytesread;
8217                     morebytesread = PerlIO_read(fp, bend, readsize);
8218                     if (morebytesread <= 0) {
8219                         /* we're done, if we still have incomplete
8220                            characters the check code in sv_gets() will
8221                            warn about them.
8222
8223                            I'd originally considered doing
8224                            PerlIO_ungetc() on all but the lead
8225                            character of the incomplete character, but
8226                            read() doesn't do that, so I don't.
8227                         */
8228                         break;
8229                     }
8230
8231                     /* prepare to scan some more */
8232                     bytesread += morebytesread;
8233                     bend = buffer + bytesread;
8234                     bufp = buffer + bufp_offset;
8235                 }
8236             }
8237         }
8238     }
8239
8240     if (bytesread < 0)
8241         bytesread = 0;
8242     SvCUR_set(sv, bytesread + append);
8243     buffer[bytesread] = '\0';
8244     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8245 }
8246
8247 /*
8248 =for apidoc sv_gets
8249
8250 Get a line from the filehandle and store it into the SV, optionally
8251 appending to the currently-stored string.  If C<append> is not 0, the
8252 line is appended to the SV instead of overwriting it.  C<append> should
8253 be set to the byte offset that the appended string should start at
8254 in the SV (typically, C<SvCUR(sv)> is a suitable choice).
8255
8256 =cut
8257 */
8258
8259 char *
8260 Perl_sv_gets(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8261 {
8262     const char *rsptr;
8263     STRLEN rslen;
8264     STDCHAR rslast;
8265     STDCHAR *bp;
8266     SSize_t cnt;
8267     int i = 0;
8268     int rspara = 0;
8269
8270     PERL_ARGS_ASSERT_SV_GETS;
8271
8272     if (SvTHINKFIRST(sv))
8273         sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
8274     /* XXX. If you make this PVIV, then copy on write can copy scalars read
8275        from <>.
8276        However, perlbench says it's slower, because the existing swipe code
8277        is faster than copy on write.
8278        Swings and roundabouts.  */
8279     SvUPGRADE(sv, SVt_PV);
8280
8281     if (append) {
8282         /* line is going to be appended to the existing buffer in the sv */
8283         if (PerlIO_isutf8(fp)) {
8284             if (!SvUTF8(sv)) {
8285                 sv_utf8_upgrade_nomg(sv);
8286                 sv_pos_u2b(sv,&append,0);
8287             }
8288         } else if (SvUTF8(sv)) {
8289             return S_sv_gets_append_to_utf8(aTHX_ sv, fp, append);
8290         }
8291     }
8292
8293     SvPOK_only(sv);
8294     if (!append) {
8295         /* not appending - "clear" the string by setting SvCUR to 0,
8296          * the pv is still avaiable. */
8297         SvCUR_set(sv,0);
8298     }
8299     if (PerlIO_isutf8(fp))
8300         SvUTF8_on(sv);
8301
8302     if (IN_PERL_COMPILETIME) {
8303         /* we always read code in line mode */
8304         rsptr = "\n";
8305         rslen = 1;
8306     }
8307     else if (RsSNARF(PL_rs)) {
8308         /* If it is a regular disk file use size from stat() as estimate
8309            of amount we are going to read -- may result in mallocing
8310            more memory than we really need if the layers below reduce
8311            the size we read (e.g. CRLF or a gzip layer).
8312          */
8313         Stat_t st;
8314         int fd = PerlIO_fileno(fp);
8315         if (fd >= 0 && (PerlLIO_fstat(fd, &st) == 0) && S_ISREG(st.st_mode))  {
8316             const Off_t offset = PerlIO_tell(fp);
8317             if (offset != (Off_t) -1 && st.st_size + append > offset) {
8318 #ifdef PERL_COPY_ON_WRITE
8319                 /* Add an extra byte for the sake of copy-on-write's
8320                  * buffer reference count. */
8321                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 2));
8322 #else
8323                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
8324 #endif
8325             }
8326         }
8327         rsptr = NULL;
8328         rslen = 0;
8329     }
8330     else if (RsRECORD(PL_rs)) {
8331         return S_sv_gets_read_record(aTHX_ sv, fp, append);
8332     }
8333     else if (RsPARA(PL_rs)) {
8334         rsptr = "\n\n";
8335         rslen = 2;
8336         rspara = 1;
8337     }
8338     else {
8339         /* Get $/ i.e. PL_rs into same encoding as stream wants */
8340         if (PerlIO_isutf8(fp)) {
8341             rsptr = SvPVutf8(PL_rs, rslen);
8342         }
8343         else {
8344             if (SvUTF8(PL_rs)) {
8345                 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
8346                     Perl_croak(aTHX_ "Wide character in $/");
8347                 }
8348             }
8349             /* extract the raw pointer to the record separator */
8350             rsptr = SvPV_const(PL_rs, rslen);
8351         }
8352     }
8353
8354     /* rslast is the last character in the record separator
8355      * note we don't use rslast except when rslen is true, so the
8356      * null assign is a placeholder. */
8357     rslast = rslen ? rsptr[rslen - 1] : '\0';
8358
8359     if (rspara) {               /* have to do this both before and after */
8360         do {                    /* to make sure file boundaries work right */
8361             if (PerlIO_eof(fp))
8362                 return 0;
8363             i = PerlIO_getc(fp);
8364             if (i != '\n') {
8365                 if (i == -1)
8366                     return 0;
8367                 PerlIO_ungetc(fp,i);
8368                 break;
8369             }
8370         } while (i != EOF);
8371     }
8372
8373     /* See if we know enough about I/O mechanism to cheat it ! */
8374
8375     /* This used to be #ifdef test - it is made run-time test for ease
8376        of abstracting out stdio interface. One call should be cheap
8377        enough here - and may even be a macro allowing compile
8378        time optimization.
8379      */
8380
8381     if (PerlIO_fast_gets(fp)) {
8382     /*
8383      * We can do buffer based IO operations on this filehandle.
8384      *
8385      * This means we can bypass a lot of subcalls and process
8386      * the buffer directly, it also means we know the upper bound
8387      * on the amount of data we might read of the current buffer
8388      * into our sv. Knowing this allows us to preallocate the pv
8389      * to be able to hold that maximum, which allows us to simplify
8390      * a lot of logic. */
8391
8392     /*
8393      * We're going to steal some values from the stdio struct
8394      * and put EVERYTHING in the innermost loop into registers.
8395      */
8396     STDCHAR *ptr;       /* pointer into fp's read-ahead buffer */
8397     STRLEN bpx;         /* length of the data in the target sv
8398                            used to fix pointers after a SvGROW */
8399     I32 shortbuffered;  /* If the pv buffer is shorter than the amount
8400                            of data left in the read-ahead buffer.
8401                            If 0 then the pv buffer can hold the full
8402                            amount left, otherwise this is the amount it
8403                            can hold. */
8404
8405     /* Here is some breathtakingly efficient cheating */
8406
8407     /* When you read the following logic resist the urge to think
8408      * of record separators that are 1 byte long. They are an
8409      * uninteresting special (simple) case.
8410      *
8411      * Instead think of record separators which are at least 2 bytes
8412      * long, and keep in mind that we need to deal with such
8413      * separators when they cross a read-ahead buffer boundary.
8414      *
8415      * Also consider that we need to gracefully deal with separators
8416      * that may be longer than a single read ahead buffer.
8417      *
8418      * Lastly do not forget we want to copy the delimiter as well. We
8419      * are copying all data in the file _up_to_and_including_ the separator
8420      * itself.
8421      *
8422      * Now that you have all that in mind here is what is happening below:
8423      *
8424      * 1. When we first enter the loop we do some memory book keeping to see
8425      * how much free space there is in the target SV. (This sub assumes that
8426      * it is operating on the same SV most of the time via $_ and that it is
8427      * going to be able to reuse the same pv buffer each call.) If there is
8428      * "enough" room then we set "shortbuffered" to how much space there is
8429      * and start reading forward.
8430      *
8431      * 2. When we scan forward we copy from the read-ahead buffer to the target
8432      * SV's pv buffer. While we go we watch for the end of the read-ahead buffer,
8433      * and the end of the of pv, as well as for the "rslast", which is the last
8434      * char of the separator.
8435      *
8436      * 3. When scanning forward if we see rslast then we jump backwards in *pv*
8437      * (which has a "complete" record up to the point we saw rslast) and check
8438      * it to see if it matches the separator. If it does we are done. If it doesn't
8439      * we continue on with the scan/copy.
8440      *
8441      * 4. If we run out of read-ahead buffer (cnt goes to 0) then we have to get
8442      * the IO system to read the next buffer. We do this by doing a getc(), which
8443      * returns a single char read (or EOF), and prefills the buffer, and also
8444      * allows us to find out how full the buffer is.  We use this information to
8445      * SvGROW() the sv to the size remaining in the buffer, after which we copy
8446      * the returned single char into the target sv, and then go back into scan
8447      * forward mode.
8448      *
8449      * 5. If we run out of write-buffer then we SvGROW() it by the size of the
8450      * remaining space in the read-buffer.
8451      *
8452      * Note that this code despite its twisty-turny nature is pretty darn slick.
8453      * It manages single byte separators, multi-byte cross boundary separators,
8454      * and cross-read-buffer separators cleanly and efficiently at the cost
8455      * of potentially greatly overallocating the target SV.
8456      *
8457      * Yves
8458      */
8459
8460
8461     /* get the number of bytes remaining in the read-ahead buffer
8462      * on first call on a given fp this will return 0.*/
8463     cnt = PerlIO_get_cnt(fp);
8464
8465     /* make sure we have the room */
8466     if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
8467         /* Not room for all of it
8468            if we are looking for a separator and room for some
8469          */
8470         if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
8471             /* just process what we have room for */
8472             shortbuffered = cnt - SvLEN(sv) + append + 1;
8473             cnt -= shortbuffered;
8474         }
8475         else {
8476             /* ensure that the target sv has enough room to hold
8477              * the rest of the read-ahead buffer */
8478             shortbuffered = 0;
8479             /* remember that cnt can be negative */
8480             SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
8481         }
8482     }
8483     else {
8484         /* we have enough room to hold the full buffer, lets scream */
8485         shortbuffered = 0;
8486     }
8487
8488     /* extract the pointer to sv's string buffer, offset by append as necessary */
8489     bp = (STDCHAR*)SvPVX_const(sv) + append;  /* move these two too to registers */
8490     /* extract the point to the read-ahead buffer */
8491     ptr = (STDCHAR*)PerlIO_get_ptr(fp);
8492
8493     /* some trace debug output */
8494     DEBUG_P(PerlIO_printf(Perl_debug_log,
8495         "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
8496     DEBUG_P(PerlIO_printf(Perl_debug_log,
8497         "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"
8498          UVuf"\n",
8499                PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8500                PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
8501
8502     for (;;) {
8503       screamer:
8504         /* if there is stuff left in the read-ahead buffer */
8505         if (cnt > 0) {
8506             /* if there is a separator */
8507             if (rslen) {
8508                 /* loop until we hit the end of the read-ahead buffer */
8509                 while (cnt > 0) {                    /* this     |  eat */
8510                     /* scan forward copying and searching for rslast as we go */
8511                     cnt--;
8512                     if ((*bp++ = *ptr++) == rslast)  /* really   |  dust */
8513                         goto thats_all_folks;        /* screams  |  sed :-) */
8514                 }
8515             }
8516             else {
8517                 /* no separator, slurp the full buffer */
8518                 Copy(ptr, bp, cnt, char);            /* this     |  eat */
8519                 bp += cnt;                           /* screams  |  dust */
8520                 ptr += cnt;                          /* louder   |  sed :-) */
8521                 cnt = 0;
8522                 assert (!shortbuffered);
8523                 goto cannot_be_shortbuffered;
8524             }
8525         }
8526         
8527         if (shortbuffered) {            /* oh well, must extend */
8528             /* we didnt have enough room to fit the line into the target buffer
8529              * so we must extend the target buffer and keep going */
8530             cnt = shortbuffered;
8531             shortbuffered = 0;
8532             bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
8533             SvCUR_set(sv, bpx);
8534             /* extned the target sv's buffer so it can hold the full read-ahead buffer */
8535             SvGROW(sv, SvLEN(sv) + append + cnt + 2);
8536             bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
8537             continue;
8538         }
8539
8540     cannot_be_shortbuffered:
8541         /* we need to refill the read-ahead buffer if possible */
8542
8543         DEBUG_P(PerlIO_printf(Perl_debug_log,
8544                              "Screamer: going to getc, ptr=%"UVuf", cnt=%"IVdf"\n",
8545                               PTR2UV(ptr),(IV)cnt));
8546         PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
8547
8548         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8549            "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"UVuf"\n",
8550             PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8551             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8552
8553         /*
8554             call PerlIO_getc() to let it prefill the lookahead buffer
8555
8556             This used to call 'filbuf' in stdio form, but as that behaves like
8557             getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
8558             another abstraction.
8559
8560             Note we have to deal with the char in 'i' if we are not at EOF
8561         */
8562         i   = PerlIO_getc(fp);          /* get more characters */
8563
8564         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8565            "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"UVuf"\n",
8566             PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8567             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8568
8569         /* find out how much is left in the read-ahead buffer, and rextract its pointer */
8570         cnt = PerlIO_get_cnt(fp);
8571         ptr = (STDCHAR*)PerlIO_get_ptr(fp);     /* reregisterize cnt and ptr */
8572         DEBUG_P(PerlIO_printf(Perl_debug_log,
8573             "Screamer: after getc, ptr=%"UVuf", cnt=%"IVdf"\n",
8574             PTR2UV(ptr),(IV)cnt));
8575
8576         if (i == EOF)                   /* all done for ever? */
8577             goto thats_really_all_folks;
8578
8579         /* make sure we have enough space in the target sv */
8580         bpx = bp - (STDCHAR*)SvPVX_const(sv);   /* box up before relocation */
8581         SvCUR_set(sv, bpx);
8582         SvGROW(sv, bpx + cnt + 2);
8583         bp = (STDCHAR*)SvPVX_const(sv) + bpx;   /* unbox after relocation */
8584
8585         /* copy of the char we got from getc() */
8586         *bp++ = (STDCHAR)i;             /* store character from PerlIO_getc */
8587
8588         /* make sure we deal with the i being the last character of a separator */
8589         if (rslen && (STDCHAR)i == rslast)  /* all done for now? */
8590             goto thats_all_folks;
8591     }
8592
8593   thats_all_folks:
8594     /* check if we have actually found the separator - only really applies
8595      * when rslen > 1 */
8596     if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
8597           memNE((char*)bp - rslen, rsptr, rslen))
8598         goto screamer;                          /* go back to the fray */
8599   thats_really_all_folks:
8600     if (shortbuffered)
8601         cnt += shortbuffered;
8602         DEBUG_P(PerlIO_printf(Perl_debug_log,
8603              "Screamer: quitting, ptr=%"UVuf", cnt=%"IVdf"\n",PTR2UV(ptr),(IV)cnt));
8604     PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt);  /* put these back or we're in trouble */
8605     DEBUG_P(PerlIO_printf(Perl_debug_log,
8606         "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"UVuf
8607         "\n",
8608         PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8609         PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8610     *bp = '\0';
8611     SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv));      /* set length */
8612     DEBUG_P(PerlIO_printf(Perl_debug_log,
8613         "Screamer: done, len=%ld, string=|%.*s|\n",
8614         (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
8615     }
8616    else
8617     {
8618        /*The big, slow, and stupid way. */
8619 #ifdef USE_HEAP_INSTEAD_OF_STACK        /* Even slower way. */
8620         STDCHAR *buf = NULL;
8621         Newx(buf, 8192, STDCHAR);
8622         assert(buf);
8623 #else
8624         STDCHAR buf[8192];
8625 #endif
8626
8627       screamer2:
8628         if (rslen) {
8629             const STDCHAR * const bpe = buf + sizeof(buf);
8630             bp = buf;
8631             while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
8632                 ; /* keep reading */
8633             cnt = bp - buf;
8634         }
8635         else {
8636             cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
8637             /* Accommodate broken VAXC compiler, which applies U8 cast to
8638              * both args of ?: operator, causing EOF to change into 255
8639              */
8640             if (cnt > 0)
8641                  i = (U8)buf[cnt - 1];
8642             else
8643                  i = EOF;
8644         }
8645
8646         if (cnt < 0)
8647             cnt = 0;  /* we do need to re-set the sv even when cnt <= 0 */
8648         if (append)
8649             sv_catpvn_nomg(sv, (char *) buf, cnt);
8650         else
8651             sv_setpvn(sv, (char *) buf, cnt);   /* "nomg" is implied */
8652
8653         if (i != EOF &&                 /* joy */
8654             (!rslen ||
8655              SvCUR(sv) < rslen ||
8656              memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
8657         {
8658             append = -1;
8659             /*
8660              * If we're reading from a TTY and we get a short read,
8661              * indicating that the user hit his EOF character, we need
8662              * to notice it now, because if we try to read from the TTY
8663              * again, the EOF condition will disappear.
8664              *
8665              * The comparison of cnt to sizeof(buf) is an optimization
8666              * that prevents unnecessary calls to feof().
8667              *
8668              * - jik 9/25/96
8669              */
8670             if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
8671                 goto screamer2;
8672         }
8673
8674 #ifdef USE_HEAP_INSTEAD_OF_STACK
8675         Safefree(buf);
8676 #endif
8677     }
8678
8679     if (rspara) {               /* have to do this both before and after */
8680         while (i != EOF) {      /* to make sure file boundaries work right */
8681             i = PerlIO_getc(fp);
8682             if (i != '\n') {
8683                 PerlIO_ungetc(fp,i);
8684                 break;
8685             }
8686         }
8687     }
8688
8689     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8690 }
8691
8692 /*
8693 =for apidoc sv_inc
8694
8695 Auto-increment of the value in the SV, doing string to numeric conversion
8696 if necessary.  Handles 'get' magic and operator overloading.
8697
8698 =cut
8699 */
8700
8701 void
8702 Perl_sv_inc(pTHX_ SV *const sv)
8703 {
8704     if (!sv)
8705         return;
8706     SvGETMAGIC(sv);
8707     sv_inc_nomg(sv);
8708 }
8709
8710 /*
8711 =for apidoc sv_inc_nomg
8712
8713 Auto-increment of the value in the SV, doing string to numeric conversion
8714 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8715
8716 =cut
8717 */
8718
8719 void
8720 Perl_sv_inc_nomg(pTHX_ SV *const sv)
8721 {
8722     char *d;
8723     int flags;
8724
8725     if (!sv)
8726         return;
8727     if (SvTHINKFIRST(sv)) {
8728         if (SvREADONLY(sv)) {
8729                 Perl_croak_no_modify();
8730         }
8731         if (SvROK(sv)) {
8732             IV i;
8733             if (SvAMAGIC(sv) && AMG_CALLunary(sv, inc_amg))
8734                 return;
8735             i = PTR2IV(SvRV(sv));
8736             sv_unref(sv);
8737             sv_setiv(sv, i);
8738         }
8739         else sv_force_normal_flags(sv, 0);
8740     }
8741     flags = SvFLAGS(sv);
8742     if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
8743         /* It's (privately or publicly) a float, but not tested as an
8744            integer, so test it to see. */
8745         (void) SvIV(sv);
8746         flags = SvFLAGS(sv);
8747     }
8748     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8749         /* It's publicly an integer, or privately an integer-not-float */
8750 #ifdef PERL_PRESERVE_IVUV
8751       oops_its_int:
8752 #endif
8753         if (SvIsUV(sv)) {
8754             if (SvUVX(sv) == UV_MAX)
8755                 sv_setnv(sv, UV_MAX_P1);
8756             else
8757                 (void)SvIOK_only_UV(sv);
8758                 SvUV_set(sv, SvUVX(sv) + 1);
8759         } else {
8760             if (SvIVX(sv) == IV_MAX)
8761                 sv_setuv(sv, (UV)IV_MAX + 1);
8762             else {
8763                 (void)SvIOK_only(sv);
8764                 SvIV_set(sv, SvIVX(sv) + 1);
8765             }   
8766         }
8767         return;
8768     }
8769     if (flags & SVp_NOK) {
8770         const NV was = SvNVX(sv);
8771         if (LIKELY(!Perl_isinfnan(was)) &&
8772             NV_OVERFLOWS_INTEGERS_AT &&
8773             was >= NV_OVERFLOWS_INTEGERS_AT) {
8774             /* diag_listed_as: Lost precision when %s %f by 1 */
8775             Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8776                            "Lost precision when incrementing %" NVff " by 1",
8777                            was);
8778         }
8779         (void)SvNOK_only(sv);
8780         SvNV_set(sv, was + 1.0);
8781         return;
8782     }
8783
8784     /* treat AV/HV/CV/FM/IO and non-fake GVs as immutable */
8785     if (SvTYPE(sv) >= SVt_PVAV || (isGV_with_GP(sv) && !SvFAKE(sv)))
8786         Perl_croak_no_modify();
8787
8788     if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
8789         if ((flags & SVTYPEMASK) < SVt_PVIV)
8790             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
8791         (void)SvIOK_only(sv);
8792         SvIV_set(sv, 1);
8793         return;
8794     }
8795     d = SvPVX(sv);
8796     while (isALPHA(*d)) d++;
8797     while (isDIGIT(*d)) d++;
8798     if (d < SvEND(sv)) {
8799         const int numtype = grok_number_flags(SvPVX_const(sv), SvCUR(sv), NULL, PERL_SCAN_TRAILING);
8800 #ifdef PERL_PRESERVE_IVUV
8801         /* Got to punt this as an integer if needs be, but we don't issue
8802            warnings. Probably ought to make the sv_iv_please() that does
8803            the conversion if possible, and silently.  */
8804         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8805             /* Need to try really hard to see if it's an integer.
8806                9.22337203685478e+18 is an integer.
8807                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8808                so $a="9.22337203685478e+18"; $a+0; $a++
8809                needs to be the same as $a="9.22337203685478e+18"; $a++
8810                or we go insane. */
8811         
8812             (void) sv_2iv(sv);
8813             if (SvIOK(sv))
8814                 goto oops_its_int;
8815
8816             /* sv_2iv *should* have made this an NV */
8817             if (flags & SVp_NOK) {
8818                 (void)SvNOK_only(sv);
8819                 SvNV_set(sv, SvNVX(sv) + 1.0);
8820                 return;
8821             }
8822             /* I don't think we can get here. Maybe I should assert this
8823                And if we do get here I suspect that sv_setnv will croak. NWC
8824                Fall through. */
8825             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8826                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8827         }
8828 #endif /* PERL_PRESERVE_IVUV */
8829         if (!numtype && ckWARN(WARN_NUMERIC))
8830             not_incrementable(sv);
8831         sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
8832         return;
8833     }
8834     d--;
8835     while (d >= SvPVX_const(sv)) {
8836         if (isDIGIT(*d)) {
8837             if (++*d <= '9')
8838                 return;
8839             *(d--) = '0';
8840         }
8841         else {
8842 #ifdef EBCDIC
8843             /* MKS: The original code here died if letters weren't consecutive.
8844              * at least it didn't have to worry about non-C locales.  The
8845              * new code assumes that ('z'-'a')==('Z'-'A'), letters are
8846              * arranged in order (although not consecutively) and that only
8847              * [A-Za-z] are accepted by isALPHA in the C locale.
8848              */
8849             if (isALPHA_FOLD_NE(*d, 'z')) {
8850                 do { ++*d; } while (!isALPHA(*d));
8851                 return;
8852             }
8853             *(d--) -= 'z' - 'a';
8854 #else
8855             ++*d;
8856             if (isALPHA(*d))
8857                 return;
8858             *(d--) -= 'z' - 'a' + 1;
8859 #endif
8860         }
8861     }
8862     /* oh,oh, the number grew */
8863     SvGROW(sv, SvCUR(sv) + 2);
8864     SvCUR_set(sv, SvCUR(sv) + 1);
8865     for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
8866         *d = d[-1];
8867     if (isDIGIT(d[1]))
8868         *d = '1';
8869     else
8870         *d = d[1];
8871 }
8872
8873 /*
8874 =for apidoc sv_dec
8875
8876 Auto-decrement of the value in the SV, doing string to numeric conversion
8877 if necessary.  Handles 'get' magic and operator overloading.
8878
8879 =cut
8880 */
8881
8882 void
8883 Perl_sv_dec(pTHX_ SV *const sv)
8884 {
8885     if (!sv)
8886         return;
8887     SvGETMAGIC(sv);
8888     sv_dec_nomg(sv);
8889 }
8890
8891 /*
8892 =for apidoc sv_dec_nomg
8893
8894 Auto-decrement of the value in the SV, doing string to numeric conversion
8895 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8896
8897 =cut
8898 */
8899
8900 void
8901 Perl_sv_dec_nomg(pTHX_ SV *const sv)
8902 {
8903     int flags;
8904
8905     if (!sv)
8906         return;
8907     if (SvTHINKFIRST(sv)) {
8908         if (SvREADONLY(sv)) {
8909                 Perl_croak_no_modify();
8910         }
8911         if (SvROK(sv)) {
8912             IV i;
8913             if (SvAMAGIC(sv) && AMG_CALLunary(sv, dec_amg))
8914                 return;
8915             i = PTR2IV(SvRV(sv));
8916             sv_unref(sv);
8917             sv_setiv(sv, i);
8918         }
8919         else sv_force_normal_flags(sv, 0);
8920     }
8921     /* Unlike sv_inc we don't have to worry about string-never-numbers
8922        and keeping them magic. But we mustn't warn on punting */
8923     flags = SvFLAGS(sv);
8924     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8925         /* It's publicly an integer, or privately an integer-not-float */
8926 #ifdef PERL_PRESERVE_IVUV
8927       oops_its_int:
8928 #endif
8929         if (SvIsUV(sv)) {
8930             if (SvUVX(sv) == 0) {
8931                 (void)SvIOK_only(sv);
8932                 SvIV_set(sv, -1);
8933             }
8934             else {
8935                 (void)SvIOK_only_UV(sv);
8936                 SvUV_set(sv, SvUVX(sv) - 1);
8937             }   
8938         } else {
8939             if (SvIVX(sv) == IV_MIN) {
8940                 sv_setnv(sv, (NV)IV_MIN);
8941                 goto oops_its_num;
8942             }
8943             else {
8944                 (void)SvIOK_only(sv);
8945                 SvIV_set(sv, SvIVX(sv) - 1);
8946             }   
8947         }
8948         return;
8949     }
8950     if (flags & SVp_NOK) {
8951     oops_its_num:
8952         {
8953             const NV was = SvNVX(sv);
8954             if (LIKELY(!Perl_isinfnan(was)) &&
8955                 NV_OVERFLOWS_INTEGERS_AT &&
8956                 was <= -NV_OVERFLOWS_INTEGERS_AT) {
8957                 /* diag_listed_as: Lost precision when %s %f by 1 */
8958                 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8959                                "Lost precision when decrementing %" NVff " by 1",
8960                                was);
8961             }
8962             (void)SvNOK_only(sv);
8963             SvNV_set(sv, was - 1.0);
8964             return;
8965         }
8966     }
8967
8968     /* treat AV/HV/CV/FM/IO and non-fake GVs as immutable */
8969     if (SvTYPE(sv) >= SVt_PVAV || (isGV_with_GP(sv) && !SvFAKE(sv)))
8970         Perl_croak_no_modify();
8971
8972     if (!(flags & SVp_POK)) {
8973         if ((flags & SVTYPEMASK) < SVt_PVIV)
8974             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
8975         SvIV_set(sv, -1);
8976         (void)SvIOK_only(sv);
8977         return;
8978     }
8979 #ifdef PERL_PRESERVE_IVUV
8980     {
8981         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
8982         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8983             /* Need to try really hard to see if it's an integer.
8984                9.22337203685478e+18 is an integer.
8985                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8986                so $a="9.22337203685478e+18"; $a+0; $a--
8987                needs to be the same as $a="9.22337203685478e+18"; $a--
8988                or we go insane. */
8989         
8990             (void) sv_2iv(sv);
8991             if (SvIOK(sv))
8992                 goto oops_its_int;
8993
8994             /* sv_2iv *should* have made this an NV */
8995             if (flags & SVp_NOK) {
8996                 (void)SvNOK_only(sv);
8997                 SvNV_set(sv, SvNVX(sv) - 1.0);
8998                 return;
8999             }
9000             /* I don't think we can get here. Maybe I should assert this
9001                And if we do get here I suspect that sv_setnv will croak. NWC
9002                Fall through. */
9003             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
9004                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
9005         }
9006     }
9007 #endif /* PERL_PRESERVE_IVUV */
9008     sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0);   /* punt */
9009 }
9010
9011 /* this define is used to eliminate a chunk of duplicated but shared logic
9012  * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
9013  * used anywhere but here - yves
9014  */
9015 #define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
9016     STMT_START {      \
9017         SSize_t ix = ++PL_tmps_ix;              \
9018         if (UNLIKELY(ix >= PL_tmps_max))        \
9019             ix = tmps_grow_p(ix);                       \
9020         PL_tmps_stack[ix] = (AnSv); \
9021     } STMT_END
9022
9023 /*
9024 =for apidoc sv_mortalcopy
9025
9026 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
9027 The new SV is marked as mortal.  It will be destroyed "soon", either by an
9028 explicit call to C<FREETMPS>, or by an implicit call at places such as
9029 statement boundaries.  See also C<L</sv_newmortal>> and C<L</sv_2mortal>>.
9030
9031 =cut
9032 */
9033
9034 /* Make a string that will exist for the duration of the expression
9035  * evaluation.  Actually, it may have to last longer than that, but
9036  * hopefully we won't free it until it has been assigned to a
9037  * permanent location. */
9038
9039 SV *
9040 Perl_sv_mortalcopy_flags(pTHX_ SV *const oldstr, U32 flags)
9041 {
9042     SV *sv;
9043
9044     if (flags & SV_GMAGIC)
9045         SvGETMAGIC(oldstr); /* before new_SV, in case it dies */
9046     new_SV(sv);
9047     sv_setsv_flags(sv,oldstr,flags & ~SV_GMAGIC);
9048     PUSH_EXTEND_MORTAL__SV_C(sv);
9049     SvTEMP_on(sv);
9050     return sv;
9051 }
9052
9053 /*
9054 =for apidoc sv_newmortal
9055
9056 Creates a new null SV which is mortal.  The reference count of the SV is
9057 set to 1.  It will be destroyed "soon", either by an explicit call to
9058 C<FREETMPS>, or by an implicit call at places such as statement boundaries.
9059 See also C<L</sv_mortalcopy>> and C<L</sv_2mortal>>.
9060
9061 =cut
9062 */
9063
9064 SV *
9065 Perl_sv_newmortal(pTHX)
9066 {
9067     SV *sv;
9068
9069     new_SV(sv);
9070     SvFLAGS(sv) = SVs_TEMP;
9071     PUSH_EXTEND_MORTAL__SV_C(sv);
9072     return sv;
9073 }
9074
9075
9076 /*
9077 =for apidoc newSVpvn_flags
9078
9079 Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
9080 characters) into it.  The reference count for the
9081 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
9082 string.  You are responsible for ensuring that the source string is at least
9083 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
9084 Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
9085 If C<SVs_TEMP> is set, then C<sv_2mortal()> is called on the result before
9086 returning.  If C<SVf_UTF8> is set, C<s>
9087 is considered to be in UTF-8 and the
9088 C<SVf_UTF8> flag will be set on the new SV.
9089 C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
9090
9091     #define newSVpvn_utf8(s, len, u)                    \
9092         newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
9093
9094 =cut
9095 */
9096
9097 SV *
9098 Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
9099 {
9100     SV *sv;
9101
9102     /* All the flags we don't support must be zero.
9103        And we're new code so I'm going to assert this from the start.  */
9104     assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
9105     new_SV(sv);
9106     sv_setpvn(sv,s,len);
9107
9108     /* This code used to do a sv_2mortal(), however we now unroll the call to
9109      * sv_2mortal() and do what it does ourselves here.  Since we have asserted
9110      * that flags can only have the SVf_UTF8 and/or SVs_TEMP flags set above we
9111      * can use it to enable the sv flags directly (bypassing SvTEMP_on), which
9112      * in turn means we dont need to mask out the SVf_UTF8 flag below, which
9113      * means that we eliminate quite a few steps than it looks - Yves
9114      * (explaining patch by gfx) */
9115
9116     SvFLAGS(sv) |= flags;
9117
9118     if(flags & SVs_TEMP){
9119         PUSH_EXTEND_MORTAL__SV_C(sv);
9120     }
9121
9122     return sv;
9123 }
9124
9125 /*
9126 =for apidoc sv_2mortal
9127
9128 Marks an existing SV as mortal.  The SV will be destroyed "soon", either
9129 by an explicit call to C<FREETMPS>, or by an implicit call at places such as
9130 statement boundaries.  C<SvTEMP()> is turned on which means that the SV's
9131 string buffer can be "stolen" if this SV is copied.  See also
9132 C<L</sv_newmortal>> and C<L</sv_mortalcopy>>.
9133
9134 =cut
9135 */
9136
9137 SV *
9138 Perl_sv_2mortal(pTHX_ SV *const sv)
9139 {
9140     dVAR;
9141     if (!sv)
9142         return sv;
9143     if (SvIMMORTAL(sv))
9144         return sv;
9145     PUSH_EXTEND_MORTAL__SV_C(sv);
9146     SvTEMP_on(sv);
9147     return sv;
9148 }
9149
9150 /*
9151 =for apidoc newSVpv
9152
9153 Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
9154 characters) into it.  The reference count for the
9155 SV is set to 1.  If C<len> is zero, Perl will compute the length using
9156 C<strlen()>, (which means if you use this option, that C<s> can't have embedded
9157 C<NUL> characters and has to have a terminating C<NUL> byte).
9158
9159 For efficiency, consider using C<newSVpvn> instead.
9160
9161 =cut
9162 */
9163
9164 SV *
9165 Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
9166 {
9167     SV *sv;
9168
9169     new_SV(sv);
9170     sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
9171     return sv;
9172 }
9173
9174 /*
9175 =for apidoc newSVpvn
9176
9177 Creates a new SV and copies a string into it, which may contain C<NUL> characters
9178 (C<\0>) and other binary data.  The reference count for the SV is set to 1.
9179 Note that if C<len> is zero, Perl will create a zero length (Perl) string.  You
9180 are responsible for ensuring that the source buffer is at least
9181 C<len> bytes long.  If the C<buffer> argument is NULL the new SV will be
9182 undefined.
9183
9184 =cut
9185 */
9186
9187 SV *
9188 Perl_newSVpvn(pTHX_ const char *const buffer, const STRLEN len)
9189 {
9190     SV *sv;
9191     new_SV(sv);
9192     sv_setpvn(sv,buffer,len);
9193     return sv;
9194 }
9195
9196 /*
9197 =for apidoc newSVhek
9198
9199 Creates a new SV from the hash key structure.  It will generate scalars that
9200 point to the shared string table where possible.  Returns a new (undefined)
9201 SV if C<hek> is NULL.
9202
9203 =cut
9204 */
9205
9206 SV *
9207 Perl_newSVhek(pTHX_ const HEK *const hek)
9208 {
9209     if (!hek) {
9210         SV *sv;
9211
9212         new_SV(sv);
9213         return sv;
9214     }
9215
9216     if (HEK_LEN(hek) == HEf_SVKEY) {
9217         return newSVsv(*(SV**)HEK_KEY(hek));
9218     } else {
9219         const int flags = HEK_FLAGS(hek);
9220         if (flags & HVhek_WASUTF8) {
9221             /* Trouble :-)
9222                Andreas would like keys he put in as utf8 to come back as utf8
9223             */
9224             STRLEN utf8_len = HEK_LEN(hek);
9225             SV * const sv = newSV_type(SVt_PV);
9226             char *as_utf8 = (char *)bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
9227             /* bytes_to_utf8() allocates a new string, which we can repurpose: */
9228             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
9229             SvUTF8_on (sv);
9230             return sv;
9231         } else if (flags & HVhek_UNSHARED) {
9232             /* A hash that isn't using shared hash keys has to have
9233                the flag in every key so that we know not to try to call
9234                share_hek_hek on it.  */
9235
9236             SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
9237             if (HEK_UTF8(hek))
9238                 SvUTF8_on (sv);
9239             return sv;
9240         }
9241         /* This will be overwhelminly the most common case.  */
9242         {
9243             /* Inline most of newSVpvn_share(), because share_hek_hek() is far
9244                more efficient than sharepvn().  */
9245             SV *sv;
9246
9247             new_SV(sv);
9248             sv_upgrade(sv, SVt_PV);
9249             SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
9250             SvCUR_set(sv, HEK_LEN(hek));
9251             SvLEN_set(sv, 0);
9252             SvIsCOW_on(sv);
9253             SvPOK_on(sv);
9254             if (HEK_UTF8(hek))
9255                 SvUTF8_on(sv);
9256             return sv;
9257         }
9258     }
9259 }
9260
9261 /*
9262 =for apidoc newSVpvn_share
9263
9264 Creates a new SV with its C<SvPVX_const> pointing to a shared string in the string
9265 table.  If the string does not already exist in the table, it is
9266 created first.  Turns on the C<SvIsCOW> flag (or C<READONLY>
9267 and C<FAKE> in 5.16 and earlier).  If the C<hash> parameter
9268 is non-zero, that value is used; otherwise the hash is computed.
9269 The string's hash can later be retrieved from the SV
9270 with the C<SvSHARED_HASH()> macro.  The idea here is
9271 that as the string table is used for shared hash keys these strings will have
9272 C<SvPVX_const == HeKEY> and hash lookup will avoid string compare.
9273
9274 =cut
9275 */
9276
9277 SV *
9278 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
9279 {
9280     dVAR;
9281     SV *sv;
9282     bool is_utf8 = FALSE;
9283     const char *const orig_src = src;
9284
9285     if (len < 0) {
9286         STRLEN tmplen = -len;
9287         is_utf8 = TRUE;
9288         /* See the note in hv.c:hv_fetch() --jhi */
9289         src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
9290         len = tmplen;
9291     }
9292     if (!hash)
9293         PERL_HASH(hash, src, len);
9294     new_SV(sv);
9295     /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
9296        changes here, update it there too.  */
9297     sv_upgrade(sv, SVt_PV);
9298     SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
9299     SvCUR_set(sv, len);
9300     SvLEN_set(sv, 0);
9301     SvIsCOW_on(sv);
9302     SvPOK_on(sv);
9303     if (is_utf8)
9304         SvUTF8_on(sv);
9305     if (src != orig_src)
9306         Safefree(src);
9307     return sv;
9308 }
9309
9310 /*
9311 =for apidoc newSVpv_share
9312
9313 Like C<newSVpvn_share>, but takes a C<NUL>-terminated string instead of a
9314 string/length pair.
9315
9316 =cut
9317 */
9318
9319 SV *
9320 Perl_newSVpv_share(pTHX_ const char *src, U32 hash)
9321 {
9322     return newSVpvn_share(src, strlen(src), hash);
9323 }
9324
9325 #if defined(PERL_IMPLICIT_CONTEXT)
9326
9327 /* pTHX_ magic can't cope with varargs, so this is a no-context
9328  * version of the main function, (which may itself be aliased to us).
9329  * Don't access this version directly.
9330  */
9331
9332 SV *
9333 Perl_newSVpvf_nocontext(const char *const pat, ...)
9334 {
9335     dTHX;
9336     SV *sv;
9337     va_list args;
9338
9339     PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
9340
9341     va_start(args, pat);
9342     sv = vnewSVpvf(pat, &args);
9343     va_end(args);
9344     return sv;
9345 }
9346 #endif
9347
9348 /*
9349 =for apidoc newSVpvf
9350
9351 Creates a new SV and initializes it with the string formatted like
9352 C<sv_catpvf>.
9353
9354 =cut
9355 */
9356
9357 SV *
9358 Perl_newSVpvf(pTHX_ const char *const pat, ...)
9359 {
9360     SV *sv;
9361     va_list args;
9362
9363     PERL_ARGS_ASSERT_NEWSVPVF;
9364
9365     va_start(args, pat);
9366     sv = vnewSVpvf(pat, &args);
9367     va_end(args);
9368     return sv;
9369 }
9370
9371 /* backend for newSVpvf() and newSVpvf_nocontext() */
9372
9373 SV *
9374 Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
9375 {
9376     SV *sv;
9377
9378     PERL_ARGS_ASSERT_VNEWSVPVF;
9379
9380     new_SV(sv);
9381     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9382     return sv;
9383 }
9384
9385 /*
9386 =for apidoc newSVnv
9387
9388 Creates a new SV and copies a floating point value into it.
9389 The reference count for the SV is set to 1.
9390
9391 =cut
9392 */
9393
9394 SV *
9395 Perl_newSVnv(pTHX_ const NV n)
9396 {
9397     SV *sv;
9398
9399     new_SV(sv);
9400     sv_setnv(sv,n);
9401     return sv;
9402 }
9403
9404 /*
9405 =for apidoc newSViv
9406
9407 Creates a new SV and copies an integer into it.  The reference count for the
9408 SV is set to 1.
9409
9410 =cut
9411 */
9412
9413 SV *
9414 Perl_newSViv(pTHX_ const IV i)
9415 {
9416     SV *sv;
9417
9418     new_SV(sv);
9419
9420     /* Inlining ONLY the small relevant subset of sv_setiv here
9421      * for performance. Makes a significant difference. */
9422
9423     /* We're starting from SVt_FIRST, so provided that's
9424      * actual 0, we don't have to unset any SV type flags
9425      * to promote to SVt_IV. */
9426     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9427
9428     SET_SVANY_FOR_BODYLESS_IV(sv);
9429     SvFLAGS(sv) |= SVt_IV;
9430     (void)SvIOK_on(sv);
9431
9432     SvIV_set(sv, i);
9433     SvTAINT(sv);
9434
9435     return sv;
9436 }
9437
9438 /*
9439 =for apidoc newSVuv
9440
9441 Creates a new SV and copies an unsigned integer into it.
9442 The reference count for the SV is set to 1.
9443
9444 =cut
9445 */
9446
9447 SV *
9448 Perl_newSVuv(pTHX_ const UV u)
9449 {
9450     SV *sv;
9451
9452     /* Inlining ONLY the small relevant subset of sv_setuv here
9453      * for performance. Makes a significant difference. */
9454
9455     /* Using ivs is more efficient than using uvs - see sv_setuv */
9456     if (u <= (UV)IV_MAX) {
9457         return newSViv((IV)u);
9458     }
9459
9460     new_SV(sv);
9461
9462     /* We're starting from SVt_FIRST, so provided that's
9463      * actual 0, we don't have to unset any SV type flags
9464      * to promote to SVt_IV. */
9465     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9466
9467     SET_SVANY_FOR_BODYLESS_IV(sv);
9468     SvFLAGS(sv) |= SVt_IV;
9469     (void)SvIOK_on(sv);
9470     (void)SvIsUV_on(sv);
9471
9472     SvUV_set(sv, u);
9473     SvTAINT(sv);
9474
9475     return sv;
9476 }
9477
9478 /*
9479 =for apidoc newSV_type
9480
9481 Creates a new SV, of the type specified.  The reference count for the new SV
9482 is set to 1.
9483
9484 =cut
9485 */
9486
9487 SV *
9488 Perl_newSV_type(pTHX_ const svtype type)
9489 {
9490     SV *sv;
9491
9492     new_SV(sv);
9493     ASSUME(SvTYPE(sv) == SVt_FIRST);
9494     if(type != SVt_FIRST)
9495         sv_upgrade(sv, type);
9496     return sv;
9497 }
9498
9499 /*
9500 =for apidoc newRV_noinc
9501
9502 Creates an RV wrapper for an SV.  The reference count for the original
9503 SV is B<not> incremented.
9504
9505 =cut
9506 */
9507
9508 SV *
9509 Perl_newRV_noinc(pTHX_ SV *const tmpRef)
9510 {
9511     SV *sv;
9512
9513     PERL_ARGS_ASSERT_NEWRV_NOINC;
9514
9515     new_SV(sv);
9516
9517     /* We're starting from SVt_FIRST, so provided that's
9518      * actual 0, we don't have to unset any SV type flags
9519      * to promote to SVt_IV. */
9520     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9521
9522     SET_SVANY_FOR_BODYLESS_IV(sv);
9523     SvFLAGS(sv) |= SVt_IV;
9524     SvROK_on(sv);
9525     SvIV_set(sv, 0);
9526
9527     SvTEMP_off(tmpRef);
9528     SvRV_set(sv, tmpRef);
9529
9530     return sv;
9531 }
9532
9533 /* newRV_inc is the official function name to use now.
9534  * newRV_inc is in fact #defined to newRV in sv.h
9535  */
9536
9537 SV *
9538 Perl_newRV(pTHX_ SV *const sv)
9539 {
9540     PERL_ARGS_ASSERT_NEWRV;
9541
9542     return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
9543 }
9544
9545 /*
9546 =for apidoc newSVsv
9547
9548 Creates a new SV which is an exact duplicate of the original SV.
9549 (Uses C<sv_setsv>.)
9550
9551 =cut
9552 */
9553
9554 SV *
9555 Perl_newSVsv(pTHX_ SV *const old)
9556 {
9557     SV *sv;
9558
9559     if (!old)
9560         return NULL;
9561     if (SvTYPE(old) == (svtype)SVTYPEMASK) {
9562         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
9563         return NULL;
9564     }
9565     /* Do this here, otherwise we leak the new SV if this croaks. */
9566     SvGETMAGIC(old);
9567     new_SV(sv);
9568     /* SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
9569        with SvTEMP_off and SvTEMP_on round a call to sv_setsv.  */
9570     sv_setsv_flags(sv, old, SV_NOSTEAL);
9571     return sv;
9572 }
9573
9574 /*
9575 =for apidoc sv_reset
9576
9577 Underlying implementation for the C<reset> Perl function.
9578 Note that the perl-level function is vaguely deprecated.
9579
9580 =cut
9581 */
9582
9583 void
9584 Perl_sv_reset(pTHX_ const char *s, HV *const stash)
9585 {
9586     PERL_ARGS_ASSERT_SV_RESET;
9587
9588     sv_resetpvn(*s ? s : NULL, strlen(s), stash);
9589 }
9590
9591 void
9592 Perl_sv_resetpvn(pTHX_ const char *s, STRLEN len, HV * const stash)
9593 {
9594     char todo[PERL_UCHAR_MAX+1];
9595     const char *send;
9596
9597     if (!stash || SvTYPE(stash) != SVt_PVHV)
9598         return;
9599
9600     if (!s) {           /* reset ?? searches */
9601         MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
9602         if (mg) {
9603             const U32 count = mg->mg_len / sizeof(PMOP**);
9604             PMOP **pmp = (PMOP**) mg->mg_ptr;
9605             PMOP *const *const end = pmp + count;
9606
9607             while (pmp < end) {
9608 #ifdef USE_ITHREADS
9609                 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
9610 #else
9611                 (*pmp)->op_pmflags &= ~PMf_USED;
9612 #endif
9613                 ++pmp;
9614             }
9615         }
9616         return;
9617     }
9618
9619     /* reset variables */
9620
9621     if (!HvARRAY(stash))
9622         return;
9623
9624     Zero(todo, 256, char);
9625     send = s + len;
9626     while (s < send) {
9627         I32 max;
9628         I32 i = (unsigned char)*s;
9629         if (s[1] == '-') {
9630             s += 2;
9631         }
9632         max = (unsigned char)*s++;
9633         for ( ; i <= max; i++) {
9634             todo[i] = 1;
9635         }
9636         for (i = 0; i <= (I32) HvMAX(stash); i++) {
9637             HE *entry;
9638             for (entry = HvARRAY(stash)[i];
9639                  entry;
9640                  entry = HeNEXT(entry))
9641             {
9642                 GV *gv;
9643                 SV *sv;
9644
9645                 if (!todo[(U8)*HeKEY(entry)])
9646                     continue;
9647                 gv = MUTABLE_GV(HeVAL(entry));
9648                 sv = GvSV(gv);
9649                 if (sv && !SvREADONLY(sv)) {
9650                     SV_CHECK_THINKFIRST_COW_DROP(sv);
9651                     if (!isGV(sv)) SvOK_off(sv);
9652                 }
9653                 if (GvAV(gv)) {
9654                     av_clear(GvAV(gv));
9655                 }
9656                 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
9657                     hv_clear(GvHV(gv));
9658                 }
9659             }
9660         }
9661     }
9662 }
9663
9664 /*
9665 =for apidoc sv_2io
9666
9667 Using various gambits, try to get an IO from an SV: the IO slot if its a
9668 GV; or the recursive result if we're an RV; or the IO slot of the symbol
9669 named after the PV if we're a string.
9670
9671 'Get' magic is ignored on the C<sv> passed in, but will be called on
9672 C<SvRV(sv)> if C<sv> is an RV.
9673
9674 =cut
9675 */
9676
9677 IO*
9678 Perl_sv_2io(pTHX_ SV *const sv)
9679 {
9680     IO* io;
9681     GV* gv;
9682
9683     PERL_ARGS_ASSERT_SV_2IO;
9684
9685     switch (SvTYPE(sv)) {
9686     case SVt_PVIO:
9687         io = MUTABLE_IO(sv);
9688         break;
9689     case SVt_PVGV:
9690     case SVt_PVLV:
9691         if (isGV_with_GP(sv)) {
9692             gv = MUTABLE_GV(sv);
9693             io = GvIO(gv);
9694             if (!io)
9695                 Perl_croak(aTHX_ "Bad filehandle: %"HEKf,
9696                                     HEKfARG(GvNAME_HEK(gv)));
9697             break;
9698         }
9699         /* FALLTHROUGH */
9700     default:
9701         if (!SvOK(sv))
9702             Perl_croak(aTHX_ PL_no_usym, "filehandle");
9703         if (SvROK(sv)) {
9704             SvGETMAGIC(SvRV(sv));
9705             return sv_2io(SvRV(sv));
9706         }
9707         gv = gv_fetchsv_nomg(sv, 0, SVt_PVIO);
9708         if (gv)
9709             io = GvIO(gv);
9710         else
9711             io = 0;
9712         if (!io) {
9713             SV *newsv = sv;
9714             if (SvGMAGICAL(sv)) {
9715                 newsv = sv_newmortal();
9716                 sv_setsv_nomg(newsv, sv);
9717             }
9718             Perl_croak(aTHX_ "Bad filehandle: %"SVf, SVfARG(newsv));
9719         }
9720         break;
9721     }
9722     return io;
9723 }
9724
9725 /*
9726 =for apidoc sv_2cv
9727
9728 Using various gambits, try to get a CV from an SV; in addition, try if
9729 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
9730 The flags in C<lref> are passed to C<gv_fetchsv>.
9731
9732 =cut
9733 */
9734
9735 CV *
9736 Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
9737 {
9738     GV *gv = NULL;
9739     CV *cv = NULL;
9740
9741     PERL_ARGS_ASSERT_SV_2CV;
9742
9743     if (!sv) {
9744         *st = NULL;
9745         *gvp = NULL;
9746         return NULL;
9747     }
9748     switch (SvTYPE(sv)) {
9749     case SVt_PVCV:
9750         *st = CvSTASH(sv);
9751         *gvp = NULL;
9752         return MUTABLE_CV(sv);
9753     case SVt_PVHV:
9754     case SVt_PVAV:
9755         *st = NULL;
9756         *gvp = NULL;
9757         return NULL;
9758     default:
9759         SvGETMAGIC(sv);
9760         if (SvROK(sv)) {
9761             if (SvAMAGIC(sv))
9762                 sv = amagic_deref_call(sv, to_cv_amg);
9763
9764             sv = SvRV(sv);
9765             if (SvTYPE(sv) == SVt_PVCV) {
9766                 cv = MUTABLE_CV(sv);
9767                 *gvp = NULL;
9768                 *st = CvSTASH(cv);
9769                 return cv;
9770             }
9771             else if(SvGETMAGIC(sv), isGV_with_GP(sv))
9772                 gv = MUTABLE_GV(sv);
9773             else
9774                 Perl_croak(aTHX_ "Not a subroutine reference");
9775         }
9776         else if (isGV_with_GP(sv)) {
9777             gv = MUTABLE_GV(sv);
9778         }
9779         else {
9780             gv = gv_fetchsv_nomg(sv, lref, SVt_PVCV);
9781         }
9782         *gvp = gv;
9783         if (!gv) {
9784             *st = NULL;
9785             return NULL;
9786         }
9787         /* Some flags to gv_fetchsv mean don't really create the GV  */
9788         if (!isGV_with_GP(gv)) {
9789             *st = NULL;
9790             return NULL;
9791         }
9792         *st = GvESTASH(gv);
9793         if (lref & ~GV_ADDMG && !GvCVu(gv)) {
9794             /* XXX this is probably not what they think they're getting.
9795              * It has the same effect as "sub name;", i.e. just a forward
9796              * declaration! */
9797             newSTUB(gv,0);
9798         }
9799         return GvCVu(gv);
9800     }
9801 }
9802
9803 /*
9804 =for apidoc sv_true
9805
9806 Returns true if the SV has a true value by Perl's rules.
9807 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
9808 instead use an in-line version.
9809
9810 =cut
9811 */
9812
9813 I32
9814 Perl_sv_true(pTHX_ SV *const sv)
9815 {
9816     if (!sv)
9817         return 0;
9818     if (SvPOK(sv)) {
9819         const XPV* const tXpv = (XPV*)SvANY(sv);
9820         if (tXpv &&
9821                 (tXpv->xpv_cur > 1 ||
9822                 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
9823             return 1;
9824         else
9825             return 0;
9826     }
9827     else {
9828         if (SvIOK(sv))
9829             return SvIVX(sv) != 0;
9830         else {
9831             if (SvNOK(sv))
9832                 return SvNVX(sv) != 0.0;
9833             else
9834                 return sv_2bool(sv);
9835         }
9836     }
9837 }
9838
9839 /*
9840 =for apidoc sv_pvn_force
9841
9842 Get a sensible string out of the SV somehow.
9843 A private implementation of the C<SvPV_force> macro for compilers which
9844 can't cope with complex macro expressions.  Always use the macro instead.
9845
9846 =for apidoc sv_pvn_force_flags
9847
9848 Get a sensible string out of the SV somehow.
9849 If C<flags> has the C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
9850 appropriate, else not.  C<sv_pvn_force> and C<sv_pvn_force_nomg> are
9851 implemented in terms of this function.
9852 You normally want to use the various wrapper macros instead: see
9853 C<L</SvPV_force>> and C<L</SvPV_force_nomg>>.
9854
9855 =cut
9856 */
9857
9858 char *
9859 Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
9860 {
9861     PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
9862
9863     if (flags & SV_GMAGIC) SvGETMAGIC(sv);
9864     if (SvTHINKFIRST(sv) && (!SvROK(sv) || SvREADONLY(sv)))
9865         sv_force_normal_flags(sv, 0);
9866
9867     if (SvPOK(sv)) {
9868         if (lp)
9869             *lp = SvCUR(sv);
9870     }
9871     else {
9872         char *s;
9873         STRLEN len;
9874  
9875         if (SvTYPE(sv) > SVt_PVLV
9876             || isGV_with_GP(sv))
9877             /* diag_listed_as: Can't coerce %s to %s in %s */
9878             Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
9879                 OP_DESC(PL_op));
9880         s = sv_2pv_flags(sv, &len, flags &~ SV_GMAGIC);
9881         if (!s) {
9882           s = (char *)"";
9883         }
9884         if (lp)
9885             *lp = len;
9886
9887         if (SvTYPE(sv) < SVt_PV ||
9888             s != SvPVX_const(sv)) {     /* Almost, but not quite, sv_setpvn() */
9889             if (SvROK(sv))
9890                 sv_unref(sv);
9891             SvUPGRADE(sv, SVt_PV);              /* Never FALSE */
9892             SvGROW(sv, len + 1);
9893             Move(s,SvPVX(sv),len,char);
9894             SvCUR_set(sv, len);
9895             SvPVX(sv)[len] = '\0';
9896         }
9897         if (!SvPOK(sv)) {
9898             SvPOK_on(sv);               /* validate pointer */
9899             SvTAINT(sv);
9900             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
9901                                   PTR2UV(sv),SvPVX_const(sv)));
9902         }
9903     }
9904     (void)SvPOK_only_UTF8(sv);
9905     return SvPVX_mutable(sv);
9906 }
9907
9908 /*
9909 =for apidoc sv_pvbyten_force
9910
9911 The backend for the C<SvPVbytex_force> macro.  Always use the macro
9912 instead.
9913
9914 =cut
9915 */
9916
9917 char *
9918 Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
9919 {
9920     PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
9921
9922     sv_pvn_force(sv,lp);
9923     sv_utf8_downgrade(sv,0);
9924     *lp = SvCUR(sv);
9925     return SvPVX(sv);
9926 }
9927
9928 /*
9929 =for apidoc sv_pvutf8n_force
9930
9931 The backend for the C<SvPVutf8x_force> macro.  Always use the macro
9932 instead.
9933
9934 =cut
9935 */
9936
9937 char *
9938 Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
9939 {
9940     PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
9941
9942     sv_pvn_force(sv,0);
9943     sv_utf8_upgrade_nomg(sv);
9944     *lp = SvCUR(sv);
9945     return SvPVX(sv);
9946 }
9947
9948 /*
9949 =for apidoc sv_reftype
9950
9951 Returns a string describing what the SV is a reference to.
9952
9953 If ob is true and the SV is blessed, the string is the class name,
9954 otherwise it is the type of the SV, "SCALAR", "ARRAY" etc.
9955
9956 =cut
9957 */
9958
9959 const char *
9960 Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
9961 {
9962     PERL_ARGS_ASSERT_SV_REFTYPE;
9963     if (ob && SvOBJECT(sv)) {
9964         return SvPV_nolen_const(sv_ref(NULL, sv, ob));
9965     }
9966     else {
9967         /* WARNING - There is code, for instance in mg.c, that assumes that
9968          * the only reason that sv_reftype(sv,0) would return a string starting
9969          * with 'L' or 'S' is that it is a LVALUE or a SCALAR.
9970          * Yes this a dodgy way to do type checking, but it saves practically reimplementing
9971          * this routine inside other subs, and it saves time.
9972          * Do not change this assumption without searching for "dodgy type check" in
9973          * the code.
9974          * - Yves */
9975         switch (SvTYPE(sv)) {
9976         case SVt_NULL:
9977         case SVt_IV:
9978         case SVt_NV:
9979         case SVt_PV:
9980         case SVt_PVIV:
9981         case SVt_PVNV:
9982         case SVt_PVMG:
9983                                 if (SvVOK(sv))
9984                                     return "VSTRING";
9985                                 if (SvROK(sv))
9986                                     return "REF";
9987                                 else
9988                                     return "SCALAR";
9989
9990         case SVt_PVLV:          return (char *)  (SvROK(sv) ? "REF"
9991                                 /* tied lvalues should appear to be
9992                                  * scalars for backwards compatibility */
9993                                 : (isALPHA_FOLD_EQ(LvTYPE(sv), 't'))
9994                                     ? "SCALAR" : "LVALUE");
9995         case SVt_PVAV:          return "ARRAY";
9996         case SVt_PVHV:          return "HASH";
9997         case SVt_PVCV:          return "CODE";
9998         case SVt_PVGV:          return (char *) (isGV_with_GP(sv)
9999                                     ? "GLOB" : "SCALAR");
10000         case SVt_PVFM:          return "FORMAT";
10001         case SVt_PVIO:          return "IO";
10002         case SVt_INVLIST:       return "INVLIST";
10003         case SVt_REGEXP:        return "REGEXP";
10004         default:                return "UNKNOWN";
10005         }
10006     }
10007 }
10008
10009 /*
10010 =for apidoc sv_ref
10011
10012 Returns a SV describing what the SV passed in is a reference to.
10013
10014 dst can be a SV to be set to the description or NULL, in which case a
10015 mortal SV is returned.
10016
10017 If ob is true and the SV is blessed, the description is the class
10018 name, otherwise it is the type of the SV, "SCALAR", "ARRAY" etc.
10019
10020 =cut
10021 */
10022
10023 SV *
10024 Perl_sv_ref(pTHX_ SV *dst, const SV *const sv, const int ob)
10025 {
10026     PERL_ARGS_ASSERT_SV_REF;
10027
10028     if (!dst)
10029         dst = sv_newmortal();
10030
10031     if (ob && SvOBJECT(sv)) {
10032         HvNAME_get(SvSTASH(sv))
10033                     ? sv_sethek(dst, HvNAME_HEK(SvSTASH(sv)))
10034                     : sv_setpvn(dst, "__ANON__", 8);
10035     }
10036     else {
10037         const char * reftype = sv_reftype(sv, 0);
10038         sv_setpv(dst, reftype);
10039     }
10040     return dst;
10041 }
10042
10043 /*
10044 =for apidoc sv_isobject
10045
10046 Returns a boolean indicating whether the SV is an RV pointing to a blessed
10047 object.  If the SV is not an RV, or if the object is not blessed, then this
10048 will return false.
10049
10050 =cut
10051 */
10052
10053 int
10054 Perl_sv_isobject(pTHX_ SV *sv)
10055 {
10056     if (!sv)
10057         return 0;
10058     SvGETMAGIC(sv);
10059     if (!SvROK(sv))
10060         return 0;
10061     sv = SvRV(sv);
10062     if (!SvOBJECT(sv))
10063         return 0;
10064     return 1;
10065 }
10066
10067 /*
10068 =for apidoc sv_isa
10069
10070 Returns a boolean indicating whether the SV is blessed into the specified
10071 class.  This does not check for subtypes; use C<sv_derived_from> to verify
10072 an inheritance relationship.
10073
10074 =cut
10075 */
10076
10077 int
10078 Perl_sv_isa(pTHX_ SV *sv, const char *const name)
10079 {
10080     const char *hvname;
10081
10082     PERL_ARGS_ASSERT_SV_ISA;
10083
10084     if (!sv)
10085         return 0;
10086     SvGETMAGIC(sv);
10087     if (!SvROK(sv))
10088         return 0;
10089     sv = SvRV(sv);
10090     if (!SvOBJECT(sv))
10091         return 0;
10092     hvname = HvNAME_get(SvSTASH(sv));
10093     if (!hvname)
10094         return 0;
10095
10096     return strEQ(hvname, name);
10097 }
10098
10099 /*
10100 =for apidoc newSVrv
10101
10102 Creates a new SV for the existing RV, C<rv>, to point to.  If C<rv> is not an
10103 RV then it will be upgraded to one.  If C<classname> is non-null then the new
10104 SV will be blessed in the specified package.  The new SV is returned and its
10105 reference count is 1.  The reference count 1 is owned by C<rv>.
10106
10107 =cut
10108 */
10109
10110 SV*
10111 Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
10112 {
10113     SV *sv;
10114
10115     PERL_ARGS_ASSERT_NEWSVRV;
10116
10117     new_SV(sv);
10118
10119     SV_CHECK_THINKFIRST_COW_DROP(rv);
10120
10121     if (UNLIKELY( SvTYPE(rv) >= SVt_PVMG )) {
10122         const U32 refcnt = SvREFCNT(rv);
10123         SvREFCNT(rv) = 0;
10124         sv_clear(rv);
10125         SvFLAGS(rv) = 0;
10126         SvREFCNT(rv) = refcnt;
10127
10128         sv_upgrade(rv, SVt_IV);
10129     } else if (SvROK(rv)) {
10130         SvREFCNT_dec(SvRV(rv));
10131     } else {
10132         prepare_SV_for_RV(rv);
10133     }
10134
10135     SvOK_off(rv);
10136     SvRV_set(rv, sv);
10137     SvROK_on(rv);
10138
10139     if (classname) {
10140         HV* const stash = gv_stashpv(classname, GV_ADD);
10141         (void)sv_bless(rv, stash);
10142     }
10143     return sv;
10144 }
10145
10146 SV *
10147 Perl_newSVavdefelem(pTHX_ AV *av, SSize_t ix, bool extendible)
10148 {
10149     SV * const lv = newSV_type(SVt_PVLV);
10150     PERL_ARGS_ASSERT_NEWSVAVDEFELEM;
10151     LvTYPE(lv) = 'y';
10152     sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
10153     LvTARG(lv) = SvREFCNT_inc_simple_NN(av);
10154     LvSTARGOFF(lv) = ix;
10155     LvTARGLEN(lv) = extendible ? 1 : (STRLEN)UV_MAX;
10156     return lv;
10157 }
10158
10159 /*
10160 =for apidoc sv_setref_pv
10161
10162 Copies a pointer into a new SV, optionally blessing the SV.  The C<rv>
10163 argument will be upgraded to an RV.  That RV will be modified to point to
10164 the new SV.  If the C<pv> argument is C<NULL>, then C<PL_sv_undef> will be placed
10165 into the SV.  The C<classname> argument indicates the package for the
10166 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10167 will have a reference count of 1, and the RV will be returned.
10168
10169 Do not use with other Perl types such as HV, AV, SV, CV, because those
10170 objects will become corrupted by the pointer copy process.
10171
10172 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
10173
10174 =cut
10175 */
10176
10177 SV*
10178 Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
10179 {
10180     PERL_ARGS_ASSERT_SV_SETREF_PV;
10181
10182     if (!pv) {
10183         sv_setsv(rv, &PL_sv_undef);
10184         SvSETMAGIC(rv);
10185     }
10186     else
10187         sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
10188     return rv;
10189 }
10190
10191 /*
10192 =for apidoc sv_setref_iv
10193
10194 Copies an integer into a new SV, optionally blessing the SV.  The C<rv>
10195 argument will be upgraded to an RV.  That RV will be modified to point to
10196 the new SV.  The C<classname> argument indicates the package for the
10197 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10198 will have a reference count of 1, and the RV will be returned.
10199
10200 =cut
10201 */
10202
10203 SV*
10204 Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
10205 {
10206     PERL_ARGS_ASSERT_SV_SETREF_IV;
10207
10208     sv_setiv(newSVrv(rv,classname), iv);
10209     return rv;
10210 }
10211
10212 /*
10213 =for apidoc sv_setref_uv
10214
10215 Copies an unsigned integer into a new SV, optionally blessing the SV.  The C<rv>
10216 argument will be upgraded to an RV.  That RV will be modified to point to
10217 the new SV.  The C<classname> argument indicates the package for the
10218 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10219 will have a reference count of 1, and the RV will be returned.
10220
10221 =cut
10222 */
10223
10224 SV*
10225 Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
10226 {
10227     PERL_ARGS_ASSERT_SV_SETREF_UV;
10228
10229     sv_setuv(newSVrv(rv,classname), uv);
10230     return rv;
10231 }
10232
10233 /*
10234 =for apidoc sv_setref_nv
10235
10236 Copies a double into a new SV, optionally blessing the SV.  The C<rv>
10237 argument will be upgraded to an RV.  That RV will be modified to point to
10238 the new SV.  The C<classname> argument indicates the package for the
10239 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10240 will have a reference count of 1, and the RV will be returned.
10241
10242 =cut
10243 */
10244
10245 SV*
10246 Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
10247 {
10248     PERL_ARGS_ASSERT_SV_SETREF_NV;
10249
10250     sv_setnv(newSVrv(rv,classname), nv);
10251     return rv;
10252 }
10253
10254 /*
10255 =for apidoc sv_setref_pvn
10256
10257 Copies a string into a new SV, optionally blessing the SV.  The length of the
10258 string must be specified with C<n>.  The C<rv> argument will be upgraded to
10259 an RV.  That RV will be modified to point to the new SV.  The C<classname>
10260 argument indicates the package for the blessing.  Set C<classname> to
10261 C<NULL> to avoid the blessing.  The new SV will have a reference count
10262 of 1, and the RV will be returned.
10263
10264 Note that C<sv_setref_pv> copies the pointer while this copies the string.
10265
10266 =cut
10267 */
10268
10269 SV*
10270 Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
10271                    const char *const pv, const STRLEN n)
10272 {
10273     PERL_ARGS_ASSERT_SV_SETREF_PVN;
10274
10275     sv_setpvn(newSVrv(rv,classname), pv, n);
10276     return rv;
10277 }
10278
10279 /*
10280 =for apidoc sv_bless
10281
10282 Blesses an SV into a specified package.  The SV must be an RV.  The package
10283 must be designated by its stash (see C<L</gv_stashpv>>).  The reference count
10284 of the SV is unaffected.
10285
10286 =cut
10287 */
10288
10289 SV*
10290 Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
10291 {
10292     SV *tmpRef;
10293     HV *oldstash = NULL;
10294
10295     PERL_ARGS_ASSERT_SV_BLESS;
10296
10297     SvGETMAGIC(sv);
10298     if (!SvROK(sv))
10299         Perl_croak(aTHX_ "Can't bless non-reference value");
10300     tmpRef = SvRV(sv);
10301     if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY|SVf_PROTECT)) {
10302         if (SvREADONLY(tmpRef))
10303             Perl_croak_no_modify();
10304         if (SvOBJECT(tmpRef)) {
10305             oldstash = SvSTASH(tmpRef);
10306         }
10307     }
10308     SvOBJECT_on(tmpRef);
10309     SvUPGRADE(tmpRef, SVt_PVMG);
10310     SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
10311     SvREFCNT_dec(oldstash);
10312
10313     if(SvSMAGICAL(tmpRef))
10314         if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
10315             mg_set(tmpRef);
10316
10317
10318
10319     return sv;
10320 }
10321
10322 /* Downgrades a PVGV to a PVMG. If it's actually a PVLV, we leave the type
10323  * as it is after unglobbing it.
10324  */
10325
10326 PERL_STATIC_INLINE void
10327 S_sv_unglob(pTHX_ SV *const sv, U32 flags)
10328 {
10329     void *xpvmg;
10330     HV *stash;
10331     SV * const temp = flags & SV_COW_DROP_PV ? NULL : sv_newmortal();
10332
10333     PERL_ARGS_ASSERT_SV_UNGLOB;
10334
10335     assert(SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV);
10336     SvFAKE_off(sv);
10337     if (!(flags & SV_COW_DROP_PV))
10338         gv_efullname3(temp, MUTABLE_GV(sv), "*");
10339
10340     SvREFCNT_inc_simple_void_NN(sv_2mortal(sv));
10341     if (GvGP(sv)) {
10342         if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
10343            && HvNAME_get(stash))
10344             mro_method_changed_in(stash);
10345         gp_free(MUTABLE_GV(sv));
10346     }
10347     if (GvSTASH(sv)) {
10348         sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
10349         GvSTASH(sv) = NULL;
10350     }
10351     GvMULTI_off(sv);
10352     if (GvNAME_HEK(sv)) {
10353         unshare_hek(GvNAME_HEK(sv));
10354     }
10355     isGV_with_GP_off(sv);
10356
10357     if(SvTYPE(sv) == SVt_PVGV) {
10358         /* need to keep SvANY(sv) in the right arena */
10359         xpvmg = new_XPVMG();
10360         StructCopy(SvANY(sv), xpvmg, XPVMG);
10361         del_XPVGV(SvANY(sv));
10362         SvANY(sv) = xpvmg;
10363
10364         SvFLAGS(sv) &= ~SVTYPEMASK;
10365         SvFLAGS(sv) |= SVt_PVMG;
10366     }
10367
10368     /* Intentionally not calling any local SET magic, as this isn't so much a
10369        set operation as merely an internal storage change.  */
10370     if (flags & SV_COW_DROP_PV) SvOK_off(sv);
10371     else sv_setsv_flags(sv, temp, 0);
10372
10373     if ((const GV *)sv == PL_last_in_gv)
10374         PL_last_in_gv = NULL;
10375     else if ((const GV *)sv == PL_statgv)
10376         PL_statgv = NULL;
10377 }
10378
10379 /*
10380 =for apidoc sv_unref_flags
10381
10382 Unsets the RV status of the SV, and decrements the reference count of
10383 whatever was being referenced by the RV.  This can almost be thought of
10384 as a reversal of C<newSVrv>.  The C<cflags> argument can contain
10385 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
10386 (otherwise the decrementing is conditional on the reference count being
10387 different from one or the reference being a readonly SV).
10388 See C<L</SvROK_off>>.
10389
10390 =cut
10391 */
10392
10393 void
10394 Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
10395 {
10396     SV* const target = SvRV(ref);
10397
10398     PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
10399
10400     if (SvWEAKREF(ref)) {
10401         sv_del_backref(target, ref);
10402         SvWEAKREF_off(ref);
10403         SvRV_set(ref, NULL);
10404         return;
10405     }
10406     SvRV_set(ref, NULL);
10407     SvROK_off(ref);
10408     /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
10409        assigned to as BEGIN {$a = \"Foo"} will fail.  */
10410     if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
10411         SvREFCNT_dec_NN(target);
10412     else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
10413         sv_2mortal(target);     /* Schedule for freeing later */
10414 }
10415
10416 /*
10417 =for apidoc sv_untaint
10418
10419 Untaint an SV.  Use C<SvTAINTED_off> instead.
10420
10421 =cut
10422 */
10423
10424 void
10425 Perl_sv_untaint(pTHX_ SV *const sv)
10426 {
10427     PERL_ARGS_ASSERT_SV_UNTAINT;
10428     PERL_UNUSED_CONTEXT;
10429
10430     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
10431         MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
10432         if (mg)
10433             mg->mg_len &= ~1;
10434     }
10435 }
10436
10437 /*
10438 =for apidoc sv_tainted
10439
10440 Test an SV for taintedness.  Use C<SvTAINTED> instead.
10441
10442 =cut
10443 */
10444
10445 bool
10446 Perl_sv_tainted(pTHX_ SV *const sv)
10447 {
10448     PERL_ARGS_ASSERT_SV_TAINTED;
10449     PERL_UNUSED_CONTEXT;
10450
10451     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
10452         const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
10453         if (mg && (mg->mg_len & 1) )
10454             return TRUE;
10455     }
10456     return FALSE;
10457 }
10458
10459 /*
10460 =for apidoc sv_setpviv
10461
10462 Copies an integer into the given SV, also updating its string value.
10463 Does not handle 'set' magic.  See C<L</sv_setpviv_mg>>.
10464
10465 =cut
10466 */
10467
10468 void
10469 Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
10470 {
10471     char buf[TYPE_CHARS(UV)];
10472     char *ebuf;
10473     char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
10474
10475     PERL_ARGS_ASSERT_SV_SETPVIV;
10476
10477     sv_setpvn(sv, ptr, ebuf - ptr);
10478 }
10479
10480 /*
10481 =for apidoc sv_setpviv_mg
10482
10483 Like C<sv_setpviv>, but also handles 'set' magic.
10484
10485 =cut
10486 */
10487
10488 void
10489 Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
10490 {
10491     PERL_ARGS_ASSERT_SV_SETPVIV_MG;
10492
10493     sv_setpviv(sv, iv);
10494     SvSETMAGIC(sv);
10495 }
10496
10497 #if defined(PERL_IMPLICIT_CONTEXT)
10498
10499 /* pTHX_ magic can't cope with varargs, so this is a no-context
10500  * version of the main function, (which may itself be aliased to us).
10501  * Don't access this version directly.
10502  */
10503
10504 void
10505 Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
10506 {
10507     dTHX;
10508     va_list args;
10509
10510     PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
10511
10512     va_start(args, pat);
10513     sv_vsetpvf(sv, pat, &args);
10514     va_end(args);
10515 }
10516
10517 /* pTHX_ magic can't cope with varargs, so this is a no-context
10518  * version of the main function, (which may itself be aliased to us).
10519  * Don't access this version directly.
10520  */
10521
10522 void
10523 Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10524 {
10525     dTHX;
10526     va_list args;
10527
10528     PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
10529
10530     va_start(args, pat);
10531     sv_vsetpvf_mg(sv, pat, &args);
10532     va_end(args);
10533 }
10534 #endif
10535
10536 /*
10537 =for apidoc sv_setpvf
10538
10539 Works like C<sv_catpvf> but copies the text into the SV instead of
10540 appending it.  Does not handle 'set' magic.  See C<L</sv_setpvf_mg>>.
10541
10542 =cut
10543 */
10544
10545 void
10546 Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
10547 {
10548     va_list args;
10549
10550     PERL_ARGS_ASSERT_SV_SETPVF;
10551
10552     va_start(args, pat);
10553     sv_vsetpvf(sv, pat, &args);
10554     va_end(args);
10555 }
10556
10557 /*
10558 =for apidoc sv_vsetpvf
10559
10560 Works like C<sv_vcatpvf> but copies the text into the SV instead of
10561 appending it.  Does not handle 'set' magic.  See C<L</sv_vsetpvf_mg>>.
10562
10563 Usually used via its frontend C<sv_setpvf>.
10564
10565 =cut
10566 */
10567
10568 void
10569 Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10570 {
10571     PERL_ARGS_ASSERT_SV_VSETPVF;
10572
10573     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10574 }
10575
10576 /*
10577 =for apidoc sv_setpvf_mg
10578
10579 Like C<sv_setpvf>, but also handles 'set' magic.
10580
10581 =cut
10582 */
10583
10584 void
10585 Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10586 {
10587     va_list args;
10588
10589     PERL_ARGS_ASSERT_SV_SETPVF_MG;
10590
10591     va_start(args, pat);
10592     sv_vsetpvf_mg(sv, pat, &args);
10593     va_end(args);
10594 }
10595
10596 /*
10597 =for apidoc sv_vsetpvf_mg
10598
10599 Like C<sv_vsetpvf>, but also handles 'set' magic.
10600
10601 Usually used via its frontend C<sv_setpvf_mg>.
10602
10603 =cut
10604 */
10605
10606 void
10607 Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10608 {
10609     PERL_ARGS_ASSERT_SV_VSETPVF_MG;
10610
10611     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10612     SvSETMAGIC(sv);
10613 }
10614
10615 #if defined(PERL_IMPLICIT_CONTEXT)
10616
10617 /* pTHX_ magic can't cope with varargs, so this is a no-context
10618  * version of the main function, (which may itself be aliased to us).
10619  * Don't access this version directly.
10620  */
10621
10622 void
10623 Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
10624 {
10625     dTHX;
10626     va_list args;
10627
10628     PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
10629
10630     va_start(args, pat);
10631     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10632     va_end(args);
10633 }
10634
10635 /* pTHX_ magic can't cope with varargs, so this is a no-context
10636  * version of the main function, (which may itself be aliased to us).
10637  * Don't access this version directly.
10638  */
10639
10640 void
10641 Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10642 {
10643     dTHX;
10644     va_list args;
10645
10646     PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
10647
10648     va_start(args, pat);
10649     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10650     SvSETMAGIC(sv);
10651     va_end(args);
10652 }
10653 #endif
10654
10655 /*
10656 =for apidoc sv_catpvf
10657
10658 Processes its arguments like C<sv_catpvfn>, and appends the formatted
10659 output to an SV.  As with C<sv_catpvfn> called with a non-null C-style
10660 variable argument list, argument reordering is not supported.
10661 If the appended data contains "wide" characters
10662 (including, but not limited to, SVs with a UTF-8 PV formatted with C<%s>,
10663 and characters >255 formatted with C<%c>), the original SV might get
10664 upgraded to UTF-8.  Handles 'get' magic, but not 'set' magic.  See
10665 C<L</sv_catpvf_mg>>.  If the original SV was UTF-8, the pattern should be
10666 valid UTF-8; if the original SV was bytes, the pattern should be too.
10667
10668 =cut */
10669
10670 void
10671 Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
10672 {
10673     va_list args;
10674
10675     PERL_ARGS_ASSERT_SV_CATPVF;
10676
10677     va_start(args, pat);
10678     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10679     va_end(args);
10680 }
10681
10682 /*
10683 =for apidoc sv_vcatpvf
10684
10685 Processes its arguments like C<sv_catpvfn> called with a non-null C-style
10686 variable argument list, and appends the formatted
10687 to an SV.  Does not handle 'set' magic.  See C<L</sv_vcatpvf_mg>>.
10688
10689 Usually used via its frontend C<sv_catpvf>.
10690
10691 =cut
10692 */
10693
10694 void
10695 Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10696 {
10697     PERL_ARGS_ASSERT_SV_VCATPVF;
10698
10699     sv_vcatpvfn_flags(sv, pat, strlen(pat), args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10700 }
10701
10702 /*
10703 =for apidoc sv_catpvf_mg
10704
10705 Like C<sv_catpvf>, but also handles 'set' magic.
10706
10707 =cut
10708 */
10709
10710 void
10711 Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10712 {
10713     va_list args;
10714
10715     PERL_ARGS_ASSERT_SV_CATPVF_MG;
10716
10717     va_start(args, pat);
10718     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10719     SvSETMAGIC(sv);
10720     va_end(args);
10721 }
10722
10723 /*
10724 =for apidoc sv_vcatpvf_mg
10725
10726 Like C<sv_vcatpvf>, but also handles 'set' magic.
10727
10728 Usually used via its frontend C<sv_catpvf_mg>.
10729
10730 =cut
10731 */
10732
10733 void
10734 Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10735 {
10736     PERL_ARGS_ASSERT_SV_VCATPVF_MG;
10737
10738     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10739     SvSETMAGIC(sv);
10740 }
10741
10742 /*
10743 =for apidoc sv_vsetpvfn
10744
10745 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
10746 appending it.
10747
10748 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
10749
10750 =cut
10751 */
10752
10753 void
10754 Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10755                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10756 {
10757     PERL_ARGS_ASSERT_SV_VSETPVFN;
10758
10759     sv_setpvs(sv, "");
10760     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, 0);
10761 }
10762
10763
10764 /*
10765  * Warn of missing argument to sprintf. The value used in place of such
10766  * arguments should be &PL_sv_no; an undefined value would yield
10767  * inappropriate "use of uninit" warnings [perl #71000].
10768  */
10769 STATIC void
10770 S_warn_vcatpvfn_missing_argument(pTHX) {
10771     if (ckWARN(WARN_MISSING)) {
10772         Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
10773                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
10774     }
10775 }
10776
10777
10778 STATIC I32
10779 S_expect_number(pTHX_ char **const pattern)
10780 {
10781     I32 var = 0;
10782
10783     PERL_ARGS_ASSERT_EXPECT_NUMBER;
10784
10785     switch (**pattern) {
10786     case '1': case '2': case '3':
10787     case '4': case '5': case '6':
10788     case '7': case '8': case '9':
10789         var = *(*pattern)++ - '0';
10790         while (isDIGIT(**pattern)) {
10791             const I32 tmp = var * 10 + (*(*pattern)++ - '0');
10792             if (tmp < var)
10793                 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
10794             var = tmp;
10795         }
10796     }
10797     return var;
10798 }
10799
10800 STATIC char *
10801 S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
10802 {
10803     const int neg = nv < 0;
10804     UV uv;
10805
10806     PERL_ARGS_ASSERT_F0CONVERT;
10807
10808     if (UNLIKELY(Perl_isinfnan(nv))) {
10809         STRLEN n = S_infnan_2pv(nv, endbuf - *len, *len, 0);
10810         *len = n;
10811         return endbuf - n;
10812     }
10813     if (neg)
10814         nv = -nv;
10815     if (nv < UV_MAX) {
10816         char *p = endbuf;
10817         nv += 0.5;
10818         uv = (UV)nv;
10819         if (uv & 1 && uv == nv)
10820             uv--;                       /* Round to even */
10821         do {
10822             const unsigned dig = uv % 10;
10823             *--p = '0' + dig;
10824         } while (uv /= 10);
10825         if (neg)
10826             *--p = '-';
10827         *len = endbuf - p;
10828         return p;
10829     }
10830     return NULL;
10831 }
10832
10833
10834 /*
10835 =for apidoc sv_vcatpvfn
10836
10837 =for apidoc sv_vcatpvfn_flags
10838
10839 Processes its arguments like C<vsprintf> and appends the formatted output
10840 to an SV.  Uses an array of SVs if the C-style variable argument list is
10841 missing (C<NULL>). Argument reordering (using format specifiers like C<%2$d>
10842 or C<%*2$d>) is supported only when using an array of SVs; using a C-style
10843 C<va_list> argument list with a format string that uses argument reordering
10844 will yield an exception.
10845
10846 When running with taint checks enabled, indicates via
10847 C<maybe_tainted> if results are untrustworthy (often due to the use of
10848 locales).
10849
10850 If called as C<sv_vcatpvfn> or flags has the C<SV_GMAGIC> bit set, calls get magic.
10851
10852 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
10853
10854 =cut
10855 */
10856
10857 #define VECTORIZE_ARGS  vecsv = va_arg(*args, SV*);\
10858                         vecstr = (U8*)SvPV_const(vecsv,veclen);\
10859                         vec_utf8 = DO_UTF8(vecsv);
10860
10861 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
10862
10863 void
10864 Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10865                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10866 {
10867     PERL_ARGS_ASSERT_SV_VCATPVFN;
10868
10869     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, SV_GMAGIC|SV_SMAGIC);
10870 }
10871
10872 #ifdef LONGDOUBLE_DOUBLEDOUBLE
10873 /* The first double can be as large as 2**1023, or '1' x '0' x 1023.
10874  * The second double can be as small as 2**-1074, or '0' x 1073 . '1'.
10875  * The sum of them can be '1' . '0' x 2096 . '1', with implied radix point
10876  * after the first 1023 zero bits.
10877  *
10878  * XXX The 2098 is quite large (262.25 bytes) and therefore some sort
10879  * of dynamically growing buffer might be better, start at just 16 bytes
10880  * (for example) and grow only when necessary.  Or maybe just by looking
10881  * at the exponents of the two doubles? */
10882 #  define DOUBLEDOUBLE_MAXBITS 2098
10883 #endif
10884
10885 /* vhex will contain the values (0..15) of the hex digits ("nybbles"
10886  * of 4 bits); 1 for the implicit 1, and the mantissa bits, four bits
10887  * per xdigit.  For the double-double case, this can be rather many.
10888  * The non-double-double-long-double overshoots since all bits of NV
10889  * are not mantissa bits, there are also exponent bits. */
10890 #ifdef LONGDOUBLE_DOUBLEDOUBLE
10891 #  define VHEX_SIZE (3+DOUBLEDOUBLE_MAXBITS/4)
10892 #else
10893 #  define VHEX_SIZE (1+(NVSIZE * 8)/4)
10894 #endif
10895
10896 /* If we do not have a known long double format, (including not using
10897  * long doubles, or long doubles being equal to doubles) then we will
10898  * fall back to the ldexp/frexp route, with which we can retrieve at
10899  * most as many bits as our widest unsigned integer type is.  We try
10900  * to get a 64-bit unsigned integer even if we are not using a 64-bit UV.
10901  *
10902  * (If you want to test the case of UVSIZE == 4, NVSIZE == 8,
10903  *  set the MANTISSATYPE to int and the MANTISSASIZE to 4.)
10904  */
10905 #if defined(HAS_QUAD) && defined(Uquad_t)
10906 #  define MANTISSATYPE Uquad_t
10907 #  define MANTISSASIZE 8
10908 #else
10909 #  define MANTISSATYPE UV
10910 #  define MANTISSASIZE UVSIZE
10911 #endif
10912
10913 #if defined(DOUBLE_LITTLE_ENDIAN) || defined(LONGDOUBLE_LITTLE_ENDIAN)
10914 #  define HEXTRACT_LITTLE_ENDIAN
10915 #elif defined(DOUBLE_BIG_ENDIAN) || defined(LONGDOUBLE_BIG_ENDIAN)
10916 #  define HEXTRACT_BIG_ENDIAN
10917 #else
10918 #  define HEXTRACT_MIX_ENDIAN
10919 #endif
10920
10921 /* S_hextract() is a helper for Perl_sv_vcatpvfn_flags, for extracting
10922  * the hexadecimal values (for %a/%A).  The nv is the NV where the value
10923  * are being extracted from (either directly from the long double in-memory
10924  * presentation, or from the uquad computed via frexp+ldexp).  frexp also
10925  * is used to update the exponent.  vhex is the pointer to the beginning
10926  * of the output buffer (of VHEX_SIZE).
10927  *
10928  * The tricky part is that S_hextract() needs to be called twice:
10929  * the first time with vend as NULL, and the second time with vend as
10930  * the pointer returned by the first call.  What happens is that on
10931  * the first round the output size is computed, and the intended
10932  * extraction sanity checked.  On the second round the actual output
10933  * (the extraction of the hexadecimal values) takes place.
10934  * Sanity failures cause fatal failures during both rounds. */
10935 STATIC U8*
10936 S_hextract(pTHX_ const NV nv, int* exponent, U8* vhex, U8* vend)
10937 {
10938     U8* v = vhex;
10939     int ix;
10940     int ixmin = 0, ixmax = 0;
10941
10942     /* XXX Inf/NaN/denormal handling in the HEXTRACT_IMPLICIT_BIT,
10943      * and elsewhere. */
10944
10945     /* These macros are just to reduce typos, they have multiple
10946      * repetitions below, but usually only one (or sometimes two)
10947      * of them is really being used. */
10948     /* HEXTRACT_OUTPUT() extracts the high nybble first. */
10949 #define HEXTRACT_OUTPUT_HI(ix) (*v++ = nvp[ix] >> 4)
10950 #define HEXTRACT_OUTPUT_LO(ix) (*v++ = nvp[ix] & 0xF)
10951 #define HEXTRACT_OUTPUT(ix) \
10952     STMT_START { \
10953       HEXTRACT_OUTPUT_HI(ix); HEXTRACT_OUTPUT_LO(ix); \
10954    } STMT_END
10955 #define HEXTRACT_COUNT(ix, c) \
10956     STMT_START { \
10957       v += c; if (ix < ixmin) ixmin = ix; else if (ix > ixmax) ixmax = ix; \
10958    } STMT_END
10959 #define HEXTRACT_BYTE(ix) \
10960     STMT_START { \
10961       if (vend) HEXTRACT_OUTPUT(ix); else HEXTRACT_COUNT(ix, 2); \
10962    } STMT_END
10963 #define HEXTRACT_LO_NYBBLE(ix) \
10964     STMT_START { \
10965       if (vend) HEXTRACT_OUTPUT_LO(ix); else HEXTRACT_COUNT(ix, 1); \
10966    } STMT_END
10967     /* HEXTRACT_TOP_NYBBLE is just convenience disguise,
10968      * to make it look less odd when the top bits of a NV
10969      * are extracted using HEXTRACT_LO_NYBBLE: the highest
10970      * order bits can be in the "low nybble" of a byte. */
10971 #define HEXTRACT_TOP_NYBBLE(ix) HEXTRACT_LO_NYBBLE(ix)
10972 #define HEXTRACT_BYTES_LE(a, b) \
10973     for (ix = a; ix >= b; ix--) { HEXTRACT_BYTE(ix); }
10974 #define HEXTRACT_BYTES_BE(a, b) \
10975     for (ix = a; ix <= b; ix++) { HEXTRACT_BYTE(ix); }
10976 #define HEXTRACT_IMPLICIT_BIT(nv) \
10977     STMT_START { \
10978         if (vend) *v++ = ((nv) == 0.0) ? 0 : 1; else v++; \
10979    } STMT_END
10980
10981 /* Most formats do.  Those which don't should undef this. */
10982 #define HEXTRACT_HAS_IMPLICIT_BIT
10983 /* Many formats do.  Those which don't should undef this. */
10984 #define HEXTRACT_HAS_TOP_NYBBLE
10985
10986     /* HEXTRACTSIZE is the maximum number of xdigits. */
10987 #if defined(USE_LONG_DOUBLE) && defined(LONGDOUBLE_DOUBLEDOUBLE)
10988 #  define HEXTRACTSIZE (2+DOUBLEDOUBLE_MAXBITS/4)
10989 #else
10990 #  define HEXTRACTSIZE 2 * NVSIZE
10991 #endif
10992
10993     const U8* vmaxend = vhex + HEXTRACTSIZE;
10994     PERL_UNUSED_VAR(ix); /* might happen */
10995     (void)Perl_frexp(PERL_ABS(nv), exponent);
10996     if (vend && (vend <= vhex || vend > vmaxend)) {
10997         /* diag_listed_as: Hexadecimal float: internal error (%s) */
10998         Perl_croak(aTHX_ "Hexadecimal float: internal error (entry)");
10999     }
11000     {
11001         /* First check if using long doubles. */
11002 #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE)
11003 #  if LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN
11004         /* Used in e.g. VMS and HP-UX IA-64, e.g. -0.1L:
11005          * 9a 99 99 99 99 99 99 99 99 99 99 99 99 99 fb 3f */
11006         /* The bytes 13..0 are the mantissa/fraction,
11007          * the 15,14 are the sign+exponent. */
11008         const U8* nvp = (const U8*)(&nv);
11009         HEXTRACT_IMPLICIT_BIT(nv);
11010 #   undef HEXTRACT_HAS_TOP_NYBBLE
11011         HEXTRACT_BYTES_LE(13, 0);
11012 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN
11013         /* Used in e.g. Solaris Sparc and HP-UX PA-RISC, e.g. -0.1L:
11014          * bf fb 99 99 99 99 99 99 99 99 99 99 99 99 99 9a */
11015         /* The bytes 2..15 are the mantissa/fraction,
11016          * the 0,1 are the sign+exponent. */
11017         const U8* nvp = (const U8*)(&nv);
11018         HEXTRACT_IMPLICIT_BIT(nv);
11019 #   undef HEXTRACT_HAS_TOP_NYBBLE
11020         HEXTRACT_BYTES_BE(2, 15);
11021 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN
11022         /* x86 80-bit "extended precision", 64 bits of mantissa / fraction /
11023          * significand, 15 bits of exponent, 1 bit of sign.  NVSIZE can
11024          * be either 12 (ILP32, Solaris x86) or 16 (LP64, Linux and OS X),
11025          * meaning that 2 or 6 bytes are empty padding. */
11026         /* The bytes 7..0 are the mantissa/fraction */
11027         const U8* nvp = (const U8*)(&nv);
11028 #    undef HEXTRACT_HAS_IMPLICIT_BIT
11029 #    undef HEXTRACT_HAS_TOP_NYBBLE
11030         HEXTRACT_BYTES_LE(7, 0);
11031 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN
11032         /* Does this format ever happen? (Wikipedia says the Motorola
11033          * 6888x math coprocessors used format _like_ this but padded
11034          * to 96 bits with 16 unused bits between the exponent and the
11035          * mantissa.) */
11036         const U8* nvp = (const U8*)(&nv);
11037 #    undef HEXTRACT_HAS_IMPLICIT_BIT
11038 #    undef HEXTRACT_HAS_TOP_NYBBLE
11039         HEXTRACT_BYTES_BE(0, 7);
11040 #  else
11041 #    define HEXTRACT_FALLBACK
11042         /* Double-double format: two doubles next to each other.
11043          * The first double is the high-order one, exactly like
11044          * it would be for a "lone" double.  The second double
11045          * is shifted down using the exponent so that that there
11046          * are no common bits.  The tricky part is that the value
11047          * of the double-double is the SUM of the two doubles and
11048          * the second one can be also NEGATIVE.
11049          *
11050          * Because of this tricky construction the bytewise extraction we
11051          * use for the other long double formats doesn't work, we must
11052          * extract the values bit by bit.
11053          *
11054          * The little-endian double-double is used .. somewhere?
11055          *
11056          * The big endian double-double is used in e.g. PPC/Power (AIX)
11057          * and MIPS (SGI).
11058          *
11059          * The mantissa bits are in two separate stretches, e.g. for -0.1L:
11060          * 9a 99 99 99 99 99 59 bc 9a 99 99 99 99 99 b9 3f (LE)
11061          * 3f b9 99 99 99 99 99 9a bc 59 99 99 99 99 99 9a (BE)
11062          */
11063 #  endif
11064 #else /* #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE) */
11065         /* Using normal doubles, not long doubles.
11066          *
11067          * We generate 4-bit xdigits (nybble/nibble) instead of 8-bit
11068          * bytes, since we might need to handle printf precision, and
11069          * also need to insert the radix. */
11070 #  if NVSIZE == 8
11071 #    ifdef HEXTRACT_LITTLE_ENDIAN
11072         /* 0 1 2 3 4 5 6 7 (MSB = 7, LSB = 0, 6+7 = exponent+sign) */
11073         const U8* nvp = (const U8*)(&nv);
11074         HEXTRACT_IMPLICIT_BIT(nv);
11075         HEXTRACT_TOP_NYBBLE(6);
11076         HEXTRACT_BYTES_LE(5, 0);
11077 #    elif defined(HEXTRACT_BIG_ENDIAN)
11078         /* 7 6 5 4 3 2 1 0 (MSB = 7, LSB = 0, 6+7 = exponent+sign) */
11079         const U8* nvp = (const U8*)(&nv);
11080         HEXTRACT_IMPLICIT_BIT(nv);
11081         HEXTRACT_TOP_NYBBLE(1);
11082         HEXTRACT_BYTES_BE(2, 7);
11083 #    elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_LE_BE
11084         /* 4 5 6 7 0 1 2 3 (MSB = 7, LSB = 0, 6:7 = nybble:exponent:sign) */
11085         const U8* nvp = (const U8*)(&nv);
11086         HEXTRACT_IMPLICIT_BIT(nv);
11087         HEXTRACT_TOP_NYBBLE(2); /* 6 */
11088         HEXTRACT_BYTE(1); /* 5 */
11089         HEXTRACT_BYTE(0); /* 4 */
11090         HEXTRACT_BYTE(7); /* 3 */
11091         HEXTRACT_BYTE(6); /* 2 */
11092         HEXTRACT_BYTE(5); /* 1 */
11093         HEXTRACT_BYTE(4); /* 0 */
11094 #    elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_BE_LE
11095         /* 3 2 1 0 7 6 5 4 (MSB = 7, LSB = 0, 7:6 = sign:exponent:nybble) */
11096         const U8* nvp = (const U8*)(&nv);
11097         HEXTRACT_IMPLICIT_BIT(nv);
11098         HEXTRACT_TOP_NYBBLE(5); /* 6 */
11099         HEXTRACT_BYTE(6); /* 5 */
11100         HEXTRACT_BYTE(7); /* 4 */
11101         HEXTRACT_BYTE(0); /* 3 */
11102         HEXTRACT_BYTE(1); /* 2 */
11103         HEXTRACT_BYTE(2); /* 1 */
11104         HEXTRACT_BYTE(3); /* 0 */
11105 #    else
11106 #      define HEXTRACT_FALLBACK
11107 #    endif
11108 #  else
11109 #    define HEXTRACT_FALLBACK
11110 #  endif
11111 #endif /* #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE) #else */
11112 #  ifdef HEXTRACT_FALLBACK
11113 #    undef HEXTRACT_HAS_TOP_NYBBLE /* Meaningless, but consistent. */
11114         /* The fallback is used for the double-double format, and
11115          * for unknown long double formats, and for unknown double
11116          * formats, or in general unknown NV formats. */
11117         if (nv == (NV)0.0) {
11118             if (vend)
11119                 *v++ = 0;
11120             else
11121                 v++;
11122             *exponent = 0;
11123         }
11124         else {
11125             NV d = nv < 0 ? -nv : nv;
11126             NV e = (NV)1.0;
11127             U8 ha = 0x0; /* hexvalue accumulator */
11128             U8 hd = 0x8; /* hexvalue digit */
11129
11130             /* Shift d and e (and update exponent) so that e <= d < 2*e,
11131              * this is essentially manual frexp(). Multiplying by 0.5 and
11132              * doubling should be lossless in binary floating point. */
11133
11134             *exponent = 1;
11135
11136             while (e > d) {
11137                 e *= (NV)0.5;
11138                 (*exponent)--;
11139             }
11140             /* Now d >= e */
11141
11142             while (d >= e + e) {
11143                 e += e;
11144                 (*exponent)++;
11145             }
11146             /* Now e <= d < 2*e */
11147
11148             /* First extract the leading hexdigit (the implicit bit). */
11149             if (d >= e) {
11150                 d -= e;
11151                 if (vend)
11152                     *v++ = 1;
11153                 else
11154                     v++;
11155             }
11156             else {
11157                 if (vend)
11158                     *v++ = 0;
11159                 else
11160                     v++;
11161             }
11162             e *= (NV)0.5;
11163
11164             /* Then extract the remaining hexdigits. */
11165             while (d > (NV)0.0) {
11166                 if (d >= e) {
11167                     ha |= hd;
11168                     d -= e;
11169                 }
11170                 if (hd == 1) {
11171                     /* Output or count in groups of four bits,
11172                      * that is, when the hexdigit is down to one. */
11173                     if (vend)
11174                         *v++ = ha;
11175                     else
11176                         v++;
11177                     /* Reset the hexvalue. */
11178                     ha = 0x0;
11179                     hd = 0x8;
11180                 }
11181                 else
11182                     hd >>= 1;
11183                 e *= (NV)0.5;
11184             }
11185
11186             /* Flush possible pending hexvalue. */
11187             if (ha) {
11188                 if (vend)
11189                     *v++ = ha;
11190                 else
11191                     v++;
11192             }
11193         }
11194 #  endif
11195     }
11196     /* Croak for various reasons: if the output pointer escaped the
11197      * output buffer, if the extraction index escaped the extraction
11198      * buffer, or if the ending output pointer didn't match the
11199      * previously computed value. */
11200     if (v <= vhex || v - vhex >= VHEX_SIZE ||
11201         /* For double-double the ixmin and ixmax stay at zero,
11202          * which is convenient since the HEXTRACTSIZE is tricky
11203          * for double-double. */
11204         ixmin < 0 || ixmax >= NVSIZE ||
11205         (vend && v != vend)) {
11206         /* diag_listed_as: Hexadecimal float: internal error (%s) */
11207         Perl_croak(aTHX_ "Hexadecimal float: internal error (overflow)");
11208     }
11209     return v;
11210 }
11211
11212 /* Helper for sv_vcatpvfn_flags().  */
11213 #define FETCH_VCATPVFN_ARGUMENT(var, in_range, expr)   \
11214     STMT_START {                                       \
11215         if (in_range)                                  \
11216             (var) = (expr);                            \
11217         else {                                         \
11218             (var) = &PL_sv_no; /* [perl #71000] */     \
11219             arg_missing = TRUE;                        \
11220         }                                              \
11221     } STMT_END
11222
11223 void
11224 Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
11225                        va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted,
11226                        const U32 flags)
11227 {
11228     char *p;
11229     char *q;
11230     const char *patend;
11231     STRLEN origlen;
11232     I32 svix = 0;
11233     static const char nullstr[] = "(null)";
11234     SV *argsv = NULL;
11235     bool has_utf8 = DO_UTF8(sv);    /* has the result utf8? */
11236     const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
11237     SV *nsv = NULL;
11238     /* Times 4: a decimal digit takes more than 3 binary digits.
11239      * NV_DIG: mantissa takes than many decimal digits.
11240      * Plus 32: Playing safe. */
11241     char ebuf[IV_DIG * 4 + NV_DIG + 32];
11242     bool no_redundant_warning = FALSE; /* did we use any explicit format parameter index? */
11243     bool hexfp = FALSE; /* hexadecimal floating point? */
11244
11245     DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
11246
11247     PERL_ARGS_ASSERT_SV_VCATPVFN_FLAGS;
11248     PERL_UNUSED_ARG(maybe_tainted);
11249
11250     if (flags & SV_GMAGIC)
11251         SvGETMAGIC(sv);
11252
11253     /* no matter what, this is a string now */
11254     (void)SvPV_force_nomg(sv, origlen);
11255
11256     /* special-case "", "%s", and "%-p" (SVf - see below) */
11257     if (patlen == 0) {
11258         if (svmax && ckWARN(WARN_REDUNDANT))
11259             Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
11260                         PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
11261         return;
11262     }
11263     if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
11264         if (svmax > 1 && ckWARN(WARN_REDUNDANT))
11265             Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
11266                         PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
11267
11268         if (args) {
11269             const char * const s = va_arg(*args, char*);
11270             sv_catpv_nomg(sv, s ? s : nullstr);
11271         }
11272         else if (svix < svmax) {
11273             /* we want get magic on the source but not the target. sv_catsv can't do that, though */
11274             SvGETMAGIC(*svargs);
11275             sv_catsv_nomg(sv, *svargs);
11276         }
11277         else
11278             S_warn_vcatpvfn_missing_argument(aTHX);
11279         return;
11280     }
11281     if (args && patlen == 3 && pat[0] == '%' &&
11282                 pat[1] == '-' && pat[2] == 'p') {
11283         if (svmax > 1 && ckWARN(WARN_REDUNDANT))
11284             Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
11285                         PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
11286         argsv = MUTABLE_SV(va_arg(*args, void*));
11287         sv_catsv_nomg(sv, argsv);
11288         return;
11289     }
11290
11291 #if !defined(USE_LONG_DOUBLE) && !defined(USE_QUADMATH)
11292     /* special-case "%.<number>[gf]" */
11293     if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
11294          && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
11295         unsigned digits = 0;
11296         const char *pp;
11297
11298         pp = pat + 2;
11299         while (*pp >= '0' && *pp <= '9')
11300             digits = 10 * digits + (*pp++ - '0');
11301
11302         /* XXX: Why do this `svix < svmax` test? Couldn't we just
11303            format the first argument and WARN_REDUNDANT if svmax > 1?
11304            Munged by Nicholas Clark in v5.13.0-209-g95ea86d */
11305         if (pp - pat == (int)patlen - 1 && svix < svmax) {
11306             const NV nv = SvNV(*svargs);
11307             if (LIKELY(!Perl_isinfnan(nv))) {
11308                 if (*pp == 'g') {
11309                     /* Add check for digits != 0 because it seems that some
11310                        gconverts are buggy in this case, and we don't yet have
11311                        a Configure test for this.  */
11312                     if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
11313                         /* 0, point, slack */
11314                         STORE_LC_NUMERIC_SET_TO_NEEDED();
11315                         SNPRINTF_G(nv, ebuf, size, digits);
11316                         sv_catpv_nomg(sv, ebuf);
11317                         if (*ebuf)      /* May return an empty string for digits==0 */
11318                             return;
11319                     }
11320                 } else if (!digits) {
11321                     STRLEN l;
11322
11323                     if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
11324                         sv_catpvn_nomg(sv, p, l);
11325                         return;
11326                     }
11327                 }
11328             }
11329         }
11330     }
11331 #endif /* !USE_LONG_DOUBLE */
11332
11333     if (!args && svix < svmax && DO_UTF8(*svargs))
11334         has_utf8 = TRUE;
11335
11336     patend = (char*)pat + patlen;
11337     for (p = (char*)pat; p < patend; p = q) {
11338         bool alt = FALSE;
11339         bool left = FALSE;
11340         bool vectorize = FALSE;
11341         bool vectorarg = FALSE;
11342         bool vec_utf8 = FALSE;
11343         char fill = ' ';
11344         char plus = 0;
11345         char intsize = 0;
11346         STRLEN width = 0;
11347         STRLEN zeros = 0;
11348         bool has_precis = FALSE;
11349         STRLEN precis = 0;
11350         const I32 osvix = svix;
11351         bool is_utf8 = FALSE;  /* is this item utf8?   */
11352         bool used_explicit_ix = FALSE;
11353         bool arg_missing = FALSE;
11354 #ifdef HAS_LDBL_SPRINTF_BUG
11355         /* This is to try to fix a bug with irix/nonstop-ux/powerux and
11356            with sfio - Allen <allens@cpan.org> */
11357         bool fix_ldbl_sprintf_bug = FALSE;
11358 #endif
11359
11360         char esignbuf[4];
11361         U8 utf8buf[UTF8_MAXBYTES+1];
11362         STRLEN esignlen = 0;
11363
11364         const char *eptr = NULL;
11365         const char *fmtstart;
11366         STRLEN elen = 0;
11367         SV *vecsv = NULL;
11368         const U8 *vecstr = NULL;
11369         STRLEN veclen = 0;
11370         char c = 0;
11371         int i;
11372         unsigned base = 0;
11373         IV iv = 0;
11374         UV uv = 0;
11375         /* We need a long double target in case HAS_LONG_DOUBLE,
11376          * even without USE_LONG_DOUBLE, so that we can printf with
11377          * long double formats, even without NV being long double.
11378          * But we call the target 'fv' instead of 'nv', since most of
11379          * the time it is not (most compilers these days recognize
11380          * "long double", even if only as a synonym for "double").
11381         */
11382 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE && \
11383         defined(PERL_PRIgldbl) && !defined(USE_QUADMATH)
11384         long double fv;
11385 #  ifdef Perl_isfinitel
11386 #    define FV_ISFINITE(x) Perl_isfinitel(x)
11387 #  endif
11388 #  define FV_GF PERL_PRIgldbl
11389 #    if defined(__VMS) && defined(__ia64) && defined(__IEEE_FLOAT)
11390        /* Work around breakage in OTS$CVT_FLOAT_T_X */
11391 #      define NV_TO_FV(nv,fv) STMT_START {                   \
11392                                            double _dv = nv;  \
11393                                            fv = Perl_isnan(_dv) ? LDBL_QNAN : _dv; \
11394                               } STMT_END
11395 #    else
11396 #      define NV_TO_FV(nv,fv) (fv)=(nv)
11397 #    endif
11398 #else
11399         NV fv;
11400 #  define FV_GF NVgf
11401 #  define NV_TO_FV(nv,fv) (fv)=(nv)
11402 #endif
11403 #ifndef FV_ISFINITE
11404 #  define FV_ISFINITE(x) Perl_isfinite((NV)(x))
11405 #endif
11406         NV nv;
11407         STRLEN have;
11408         STRLEN need;
11409         STRLEN gap;
11410         const char *dotstr = ".";
11411         STRLEN dotstrlen = 1;
11412         I32 efix = 0; /* explicit format parameter index */
11413         I32 ewix = 0; /* explicit width index */
11414         I32 epix = 0; /* explicit precision index */
11415         I32 evix = 0; /* explicit vector index */
11416         bool asterisk = FALSE;
11417         bool infnan = FALSE;
11418
11419         /* echo everything up to the next format specification */
11420         for (q = p; q < patend && *q != '%'; ++q) ;
11421         if (q > p) {
11422             if (has_utf8 && !pat_utf8)
11423                 sv_catpvn_nomg_utf8_upgrade(sv, p, q - p, nsv);
11424             else
11425                 sv_catpvn_nomg(sv, p, q - p);
11426             p = q;
11427         }
11428         if (q++ >= patend)
11429             break;
11430
11431         fmtstart = q;
11432
11433 /*
11434     We allow format specification elements in this order:
11435         \d+\$              explicit format parameter index
11436         [-+ 0#]+           flags
11437         v|\*(\d+\$)?v      vector with optional (optionally specified) arg
11438         0                  flag (as above): repeated to allow "v02"     
11439         \d+|\*(\d+\$)?     width using optional (optionally specified) arg
11440         \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
11441         [hlqLV]            size
11442     [%bcdefginopsuxDFOUX] format (mandatory)
11443 */
11444
11445         if (args) {
11446 /*  
11447         As of perl5.9.3, printf format checking is on by default.
11448         Internally, perl uses %p formats to provide an escape to
11449         some extended formatting.  This block deals with those
11450         extensions: if it does not match, (char*)q is reset and
11451         the normal format processing code is used.
11452
11453         Currently defined extensions are:
11454                 %p              include pointer address (standard)      
11455                 %-p     (SVf)   include an SV (previously %_)
11456                 %-<num>p        include an SV with precision <num>      
11457                 %2p             include a HEK
11458                 %3p             include a HEK with precision of 256
11459                 %4p             char* preceded by utf8 flag and length
11460                 %<num>p         (where num is 1 or > 4) reserved for future
11461                                 extensions
11462
11463         Robin Barker 2005-07-14 (but modified since)
11464
11465                 %1p     (VDf)   removed.  RMB 2007-10-19
11466 */
11467             char* r = q; 
11468             bool sv = FALSE;    
11469             STRLEN n = 0;
11470             if (*q == '-')
11471                 sv = *q++;
11472             else if (strnEQ(q, UTF8f, sizeof(UTF8f)-1)) { /* UTF8f */
11473                 /* The argument has already gone through cBOOL, so the cast
11474                    is safe. */
11475                 is_utf8 = (bool)va_arg(*args, int);
11476                 elen = va_arg(*args, UV);
11477                 /* if utf8 length is larger than 0x7ffff..., then it might
11478                  * have been a signed value that wrapped */
11479                 if (elen  > ((~(STRLEN)0) >> 1)) {
11480                     assert(0); /* in DEBUGGING build we want to crash */
11481                     elen= 0; /* otherwise we want to treat this as an empty string */
11482                 }
11483                 eptr = va_arg(*args, char *);
11484                 q += sizeof(UTF8f)-1;
11485                 goto string;
11486             }
11487             n = expect_number(&q);
11488             if (*q++ == 'p') {
11489                 if (sv) {                       /* SVf */
11490                     if (n) {
11491                         precis = n;
11492                         has_precis = TRUE;
11493                     }
11494                     argsv = MUTABLE_SV(va_arg(*args, void*));
11495                     eptr = SvPV_const(argsv, elen);
11496                     if (DO_UTF8(argsv))
11497                         is_utf8 = TRUE;
11498                     goto string;
11499                 }
11500                 else if (n==2 || n==3) {        /* HEKf */
11501                     HEK * const hek = va_arg(*args, HEK *);
11502                     eptr = HEK_KEY(hek);
11503                     elen = HEK_LEN(hek);
11504                     if (HEK_UTF8(hek)) is_utf8 = TRUE;
11505                     if (n==3) precis = 256, has_precis = TRUE;
11506                     goto string;
11507                 }
11508                 else if (n) {
11509                     Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
11510                                      "internal %%<num>p might conflict with future printf extensions");
11511                 }
11512             }
11513             q = r; 
11514         }
11515
11516         if ( (width = expect_number(&q)) ) {
11517             if (*q == '$') {
11518                 if (args)
11519                     Perl_croak_nocontext(
11520                         "Cannot yet reorder sv_catpvfn() arguments from va_list");
11521                 ++q;
11522                 efix = width;
11523                 used_explicit_ix = TRUE;
11524             } else {
11525                 goto gotwidth;
11526             }
11527         }
11528
11529         /* FLAGS */
11530
11531         while (*q) {
11532             switch (*q) {
11533             case ' ':
11534             case '+':
11535                 if (plus == '+' && *q == ' ') /* '+' over ' ' */
11536                     q++;
11537                 else
11538                     plus = *q++;
11539                 continue;
11540
11541             case '-':
11542                 left = TRUE;
11543                 q++;
11544                 continue;
11545
11546             case '0':
11547                 fill = *q++;
11548                 continue;
11549
11550             case '#':
11551                 alt = TRUE;
11552                 q++;
11553                 continue;
11554
11555             default:
11556                 break;
11557             }
11558             break;
11559         }
11560
11561       tryasterisk:
11562         if (*q == '*') {
11563             q++;
11564             if ( (ewix = expect_number(&q)) ) {
11565                 if (*q++ == '$') {
11566                     if (args)
11567                         Perl_croak_nocontext(
11568                             "Cannot yet reorder sv_catpvfn() arguments from va_list");
11569                     used_explicit_ix = TRUE;
11570                 } else
11571                     goto unknown;
11572             }
11573             asterisk = TRUE;
11574         }
11575         if (*q == 'v') {
11576             q++;
11577             if (vectorize)
11578                 goto unknown;
11579             if ((vectorarg = asterisk)) {
11580                 evix = ewix;
11581                 ewix = 0;
11582                 asterisk = FALSE;
11583             }
11584             vectorize = TRUE;
11585             goto tryasterisk;
11586         }
11587
11588         if (!asterisk)
11589         {
11590             if( *q == '0' )
11591                 fill = *q++;
11592             width = expect_number(&q);
11593         }
11594
11595         if (vectorize && vectorarg) {
11596             /* vectorizing, but not with the default "." */
11597             if (args)
11598                 vecsv = va_arg(*args, SV*);
11599             else if (evix) {
11600                 FETCH_VCATPVFN_ARGUMENT(
11601                     vecsv, evix > 0 && evix <= svmax, svargs[evix-1]);
11602             } else {
11603                 FETCH_VCATPVFN_ARGUMENT(
11604                     vecsv, svix < svmax, svargs[svix++]);
11605             }
11606             dotstr = SvPV_const(vecsv, dotstrlen);
11607             /* Keep the DO_UTF8 test *after* the SvPV call, else things go
11608                bad with tied or overloaded values that return UTF8.  */
11609             if (DO_UTF8(vecsv))
11610                 is_utf8 = TRUE;
11611             else if (has_utf8) {
11612                 vecsv = sv_mortalcopy(vecsv);
11613                 sv_utf8_upgrade(vecsv);
11614                 dotstr = SvPV_const(vecsv, dotstrlen);
11615                 is_utf8 = TRUE;
11616             }               
11617         }
11618
11619         if (asterisk) {
11620             if (args)
11621                 i = va_arg(*args, int);
11622             else
11623                 i = (ewix ? ewix <= svmax : svix < svmax) ?
11624                     SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
11625             left |= (i < 0);
11626             width = (i < 0) ? -i : i;
11627         }
11628       gotwidth:
11629
11630         /* PRECISION */
11631
11632         if (*q == '.') {
11633             q++;
11634             if (*q == '*') {
11635                 q++;
11636                 if ( (epix = expect_number(&q)) ) {
11637                     if (*q++ == '$') {
11638                         if (args)
11639                             Perl_croak_nocontext(
11640                                 "Cannot yet reorder sv_catpvfn() arguments from va_list");
11641                         used_explicit_ix = TRUE;
11642                     } else
11643                         goto unknown;
11644                 }
11645                 if (args)
11646                     i = va_arg(*args, int);
11647                 else {
11648                     SV *precsv;
11649                     if (epix)
11650                         FETCH_VCATPVFN_ARGUMENT(
11651                             precsv, epix > 0 && epix <= svmax, svargs[epix-1]);
11652                     else
11653                         FETCH_VCATPVFN_ARGUMENT(
11654                             precsv, svix < svmax, svargs[svix++]);
11655                     i = precsv == &PL_sv_no ? 0 : SvIVx(precsv);
11656                 }
11657                 precis = i;
11658                 has_precis = !(i < 0);
11659             }
11660             else {
11661                 precis = 0;
11662                 while (isDIGIT(*q))
11663                     precis = precis * 10 + (*q++ - '0');
11664                 has_precis = TRUE;
11665             }
11666         }
11667
11668         if (vectorize) {
11669             if (args) {
11670                 VECTORIZE_ARGS
11671             }
11672             else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
11673                 vecsv = svargs[efix ? efix-1 : svix++];
11674                 vecstr = (U8*)SvPV_const(vecsv,veclen);
11675                 vec_utf8 = DO_UTF8(vecsv);
11676
11677                 /* if this is a version object, we need to convert
11678                  * back into v-string notation and then let the
11679                  * vectorize happen normally
11680                  */
11681                 if (sv_isobject(vecsv) && sv_derived_from(vecsv, "version")) {
11682                     if ( hv_exists(MUTABLE_HV(SvRV(vecsv)), "alpha", 5 ) ) {
11683                         Perl_ck_warner_d(aTHX_ packWARN(WARN_PRINTF),
11684                         "vector argument not supported with alpha versions");
11685                         goto vdblank;
11686                     }
11687                     vecsv = sv_newmortal();
11688                     scan_vstring((char *)vecstr, (char *)vecstr + veclen,
11689                                  vecsv);
11690                     vecstr = (U8*)SvPV_const(vecsv, veclen);
11691                     vec_utf8 = DO_UTF8(vecsv);
11692                 }
11693             }
11694             else {
11695               vdblank:
11696                 vecstr = (U8*)"";
11697                 veclen = 0;
11698             }
11699         }
11700
11701         /* SIZE */
11702
11703         switch (*q) {
11704 #ifdef WIN32
11705         case 'I':                       /* Ix, I32x, and I64x */
11706 #  ifdef USE_64_BIT_INT
11707             if (q[1] == '6' && q[2] == '4') {
11708                 q += 3;
11709                 intsize = 'q';
11710                 break;
11711             }
11712 #  endif
11713             if (q[1] == '3' && q[2] == '2') {
11714                 q += 3;
11715                 break;
11716             }
11717 #  ifdef USE_64_BIT_INT
11718             intsize = 'q';
11719 #  endif
11720             q++;
11721             break;
11722 #endif
11723 #if (IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)) || \
11724     (IVSIZE == 4 && !defined(HAS_LONG_DOUBLE))
11725         case 'L':                       /* Ld */
11726             /* FALLTHROUGH */
11727 #  ifdef USE_QUADMATH
11728         case 'Q':
11729             /* FALLTHROUGH */
11730 #  endif
11731 #  if IVSIZE >= 8
11732         case 'q':                       /* qd */
11733 #  endif
11734             intsize = 'q';
11735             q++;
11736             break;
11737 #endif
11738         case 'l':
11739             ++q;
11740 #if (IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)) || \
11741     (IVSIZE == 4 && !defined(HAS_LONG_DOUBLE))
11742             if (*q == 'l') {    /* lld, llf */
11743                 intsize = 'q';
11744                 ++q;
11745             }
11746             else
11747 #endif
11748                 intsize = 'l';
11749             break;
11750         case 'h':
11751             if (*++q == 'h') {  /* hhd, hhu */
11752                 intsize = 'c';
11753                 ++q;
11754             }
11755             else
11756                 intsize = 'h';
11757             break;
11758         case 'V':
11759         case 'z':
11760         case 't':
11761 #ifdef I_STDINT
11762         case 'j':
11763 #endif
11764             intsize = *q++;
11765             break;
11766         }
11767
11768         /* CONVERSION */
11769
11770         if (*q == '%') {
11771             eptr = q++;
11772             elen = 1;
11773             if (vectorize) {
11774                 c = '%';
11775                 goto unknown;
11776             }
11777             goto string;
11778         }
11779
11780         if (!vectorize && !args) {
11781             if (efix) {
11782                 const I32 i = efix-1;
11783                 FETCH_VCATPVFN_ARGUMENT(argsv, i >= 0 && i < svmax, svargs[i]);
11784             } else {
11785                 FETCH_VCATPVFN_ARGUMENT(argsv, svix >= 0 && svix < svmax,
11786                                         svargs[svix++]);
11787             }
11788         }
11789
11790         if (argsv && strchr("BbcDdiOopuUXx",*q)) {
11791             /* XXX va_arg(*args) case? need peek, use va_copy? */
11792             SvGETMAGIC(argsv);
11793             if (UNLIKELY(SvAMAGIC(argsv)))
11794                 argsv = sv_2num(argsv);
11795             infnan = UNLIKELY(isinfnansv(argsv));
11796         }
11797
11798         switch (c = *q++) {
11799
11800             /* STRINGS */
11801
11802         case 'c':
11803             if (vectorize)
11804                 goto unknown;
11805             if (infnan)
11806                 Perl_croak(aTHX_ "Cannot printf %"NVgf" with '%c'",
11807                            /* no va_arg() case */
11808                            SvNV_nomg(argsv), (int)c);
11809             uv = (args) ? va_arg(*args, int) : SvIV_nomg(argsv);
11810             if ((uv > 255 ||
11811                  (!UVCHR_IS_INVARIANT(uv) && SvUTF8(sv)))
11812                 && !IN_BYTES) {
11813                 eptr = (char*)utf8buf;
11814                 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
11815                 is_utf8 = TRUE;
11816             }
11817             else {
11818                 c = (char)uv;
11819                 eptr = &c;
11820                 elen = 1;
11821             }
11822             goto string;
11823
11824         case 's':
11825             if (vectorize)
11826                 goto unknown;
11827             if (args) {
11828                 eptr = va_arg(*args, char*);
11829                 if (eptr)
11830                     elen = strlen(eptr);
11831                 else {
11832                     eptr = (char *)nullstr;
11833                     elen = sizeof nullstr - 1;
11834                 }
11835             }
11836             else {
11837                 eptr = SvPV_const(argsv, elen);
11838                 if (DO_UTF8(argsv)) {
11839                     STRLEN old_precis = precis;
11840                     if (has_precis && precis < elen) {
11841                         STRLEN ulen = sv_or_pv_len_utf8(argsv, eptr, elen);
11842                         STRLEN p = precis > ulen ? ulen : precis;
11843                         precis = sv_or_pv_pos_u2b(argsv, eptr, p, 0);
11844                                                         /* sticks at end */
11845                     }
11846                     if (width) { /* fudge width (can't fudge elen) */
11847                         if (has_precis && precis < elen)
11848                             width += precis - old_precis;
11849                         else
11850                             width +=
11851                                 elen - sv_or_pv_len_utf8(argsv,eptr,elen);
11852                     }
11853                     is_utf8 = TRUE;
11854                 }
11855             }
11856
11857         string:
11858             if (has_precis && precis < elen)
11859                 elen = precis;
11860             break;
11861
11862             /* INTEGERS */
11863
11864         case 'p':
11865             if (infnan) {
11866                 goto floating_point;
11867             }
11868             if (alt || vectorize)
11869                 goto unknown;
11870             uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
11871             base = 16;
11872             goto integer;
11873
11874         case 'D':
11875 #ifdef IV_IS_QUAD
11876             intsize = 'q';
11877 #else
11878             intsize = 'l';
11879 #endif
11880             /* FALLTHROUGH */
11881         case 'd':
11882         case 'i':
11883             if (infnan) {
11884                 goto floating_point;
11885             }
11886             if (vectorize) {
11887                 STRLEN ulen;
11888                 if (!veclen)
11889                     goto donevalidconversion;
11890                 if (vec_utf8)
11891                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
11892                                         UTF8_ALLOW_ANYUV);
11893                 else {
11894                     uv = *vecstr;
11895                     ulen = 1;
11896                 }
11897                 vecstr += ulen;
11898                 veclen -= ulen;
11899                 if (plus)
11900                      esignbuf[esignlen++] = plus;
11901             }
11902             else if (args) {
11903                 switch (intsize) {
11904                 case 'c':       iv = (char)va_arg(*args, int); break;
11905                 case 'h':       iv = (short)va_arg(*args, int); break;
11906                 case 'l':       iv = va_arg(*args, long); break;
11907                 case 'V':       iv = va_arg(*args, IV); break;
11908                 case 'z':       iv = va_arg(*args, SSize_t); break;
11909 #ifdef HAS_PTRDIFF_T
11910                 case 't':       iv = va_arg(*args, ptrdiff_t); break;
11911 #endif
11912                 default:        iv = va_arg(*args, int); break;
11913 #ifdef I_STDINT
11914                 case 'j':       iv = va_arg(*args, intmax_t); break;
11915 #endif
11916                 case 'q':
11917 #if IVSIZE >= 8
11918                                 iv = va_arg(*args, Quad_t); break;
11919 #else
11920                                 goto unknown;
11921 #endif
11922                 }
11923             }
11924             else {
11925                 IV tiv = SvIV_nomg(argsv); /* work around GCC bug #13488 */
11926                 switch (intsize) {
11927                 case 'c':       iv = (char)tiv; break;
11928                 case 'h':       iv = (short)tiv; break;
11929                 case 'l':       iv = (long)tiv; break;
11930                 case 'V':
11931                 default:        iv = tiv; break;
11932                 case 'q':
11933 #if IVSIZE >= 8
11934                                 iv = (Quad_t)tiv; break;
11935 #else
11936                                 goto unknown;
11937 #endif
11938                 }
11939             }
11940             if ( !vectorize )   /* we already set uv above */
11941             {
11942                 if (iv >= 0) {
11943                     uv = iv;
11944                     if (plus)
11945                         esignbuf[esignlen++] = plus;
11946                 }
11947                 else {
11948                     uv = (iv == IV_MIN) ? (UV)iv : (UV)(-iv);
11949                     esignbuf[esignlen++] = '-';
11950                 }
11951             }
11952             base = 10;
11953             goto integer;
11954
11955         case 'U':
11956 #ifdef IV_IS_QUAD
11957             intsize = 'q';
11958 #else
11959             intsize = 'l';
11960 #endif
11961             /* FALLTHROUGH */
11962         case 'u':
11963             base = 10;
11964             goto uns_integer;
11965
11966         case 'B':
11967         case 'b':
11968             base = 2;
11969             goto uns_integer;
11970
11971         case 'O':
11972 #ifdef IV_IS_QUAD
11973             intsize = 'q';
11974 #else
11975             intsize = 'l';
11976 #endif
11977             /* FALLTHROUGH */
11978         case 'o':
11979             base = 8;
11980             goto uns_integer;
11981
11982         case 'X':
11983         case 'x':
11984             base = 16;
11985
11986         uns_integer:
11987             if (infnan) {
11988                 goto floating_point;
11989             }
11990             if (vectorize) {
11991                 STRLEN ulen;
11992         vector:
11993                 if (!veclen)
11994                     goto donevalidconversion;
11995                 if (vec_utf8)
11996                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
11997                                         UTF8_ALLOW_ANYUV);
11998                 else {
11999                     uv = *vecstr;
12000                     ulen = 1;
12001                 }
12002                 vecstr += ulen;
12003                 veclen -= ulen;
12004             }
12005             else if (args) {
12006                 switch (intsize) {
12007                 case 'c':  uv = (unsigned char)va_arg(*args, unsigned); break;
12008                 case 'h':  uv = (unsigned short)va_arg(*args, unsigned); break;
12009                 case 'l':  uv = va_arg(*args, unsigned long); break;
12010                 case 'V':  uv = va_arg(*args, UV); break;
12011                 case 'z':  uv = va_arg(*args, Size_t); break;
12012 #ifdef HAS_PTRDIFF_T
12013                 case 't':  uv = va_arg(*args, ptrdiff_t); break; /* will sign extend, but there is no uptrdiff_t, so oh well */
12014 #endif
12015 #ifdef I_STDINT
12016                 case 'j':  uv = va_arg(*args, uintmax_t); break;
12017 #endif
12018                 default:   uv = va_arg(*args, unsigned); break;
12019                 case 'q':
12020 #if IVSIZE >= 8
12021                            uv = va_arg(*args, Uquad_t); break;
12022 #else
12023                            goto unknown;
12024 #endif
12025                 }
12026             }
12027             else {
12028                 UV tuv = SvUV_nomg(argsv); /* work around GCC bug #13488 */
12029                 switch (intsize) {
12030                 case 'c':       uv = (unsigned char)tuv; break;
12031                 case 'h':       uv = (unsigned short)tuv; break;
12032                 case 'l':       uv = (unsigned long)tuv; break;
12033                 case 'V':
12034                 default:        uv = tuv; break;
12035                 case 'q':
12036 #if IVSIZE >= 8
12037                                 uv = (Uquad_t)tuv; break;
12038 #else
12039                                 goto unknown;
12040 #endif
12041                 }
12042             }
12043
12044         integer:
12045             {
12046                 char *ptr = ebuf + sizeof ebuf;
12047                 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */
12048                 unsigned dig;
12049                 zeros = 0;
12050
12051                 switch (base) {
12052                 case 16:
12053                     p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit);
12054                     do {
12055                         dig = uv & 15;
12056                         *--ptr = p[dig];
12057                     } while (uv >>= 4);
12058                     if (tempalt) {
12059                         esignbuf[esignlen++] = '0';
12060                         esignbuf[esignlen++] = c;  /* 'x' or 'X' */
12061                     }
12062                     break;
12063                 case 8:
12064                     do {
12065                         dig = uv & 7;
12066                         *--ptr = '0' + dig;
12067                     } while (uv >>= 3);
12068                     if (alt && *ptr != '0')
12069                         *--ptr = '0';
12070                     break;
12071                 case 2:
12072                     do {
12073                         dig = uv & 1;
12074                         *--ptr = '0' + dig;
12075                     } while (uv >>= 1);
12076                     if (tempalt) {
12077                         esignbuf[esignlen++] = '0';
12078                         esignbuf[esignlen++] = c;
12079                     }
12080                     break;
12081                 default:                /* it had better be ten or less */
12082                     do {
12083                         dig = uv % base;
12084                         *--ptr = '0' + dig;
12085                     } while (uv /= base);
12086                     break;
12087                 }
12088                 elen = (ebuf + sizeof ebuf) - ptr;
12089                 eptr = ptr;
12090                 if (has_precis) {
12091                     if (precis > elen)
12092                         zeros = precis - elen;
12093                     else if (precis == 0 && elen == 1 && *eptr == '0'
12094                              && !(base == 8 && alt)) /* "%#.0o" prints "0" */
12095                         elen = 0;
12096
12097                 /* a precision nullifies the 0 flag. */
12098                     if (fill == '0')
12099                         fill = ' ';
12100                 }
12101             }
12102             break;
12103
12104             /* FLOATING POINT */
12105
12106         floating_point:
12107
12108         case 'F':
12109             c = 'f';            /* maybe %F isn't supported here */
12110             /* FALLTHROUGH */
12111         case 'e': case 'E':
12112         case 'f':
12113         case 'g': case 'G':
12114         case 'a': case 'A':
12115             if (vectorize)
12116                 goto unknown;
12117
12118             /* This is evil, but floating point is even more evil */
12119
12120             /* for SV-style calling, we can only get NV
12121                for C-style calling, we assume %f is double;
12122                for simplicity we allow any of %Lf, %llf, %qf for long double
12123             */
12124             switch (intsize) {
12125             case 'V':
12126 #if defined(USE_LONG_DOUBLE) || defined(USE_QUADMATH)
12127                 intsize = 'q';
12128 #endif
12129                 break;
12130 /* [perl #20339] - we should accept and ignore %lf rather than die */
12131             case 'l':
12132                 /* FALLTHROUGH */
12133             default:
12134 #if defined(USE_LONG_DOUBLE) || defined(USE_QUADMATH)
12135                 intsize = args ? 0 : 'q';
12136 #endif
12137                 break;
12138             case 'q':
12139 #if defined(HAS_LONG_DOUBLE)
12140                 break;
12141 #else
12142                 /* FALLTHROUGH */
12143 #endif
12144             case 'c':
12145             case 'h':
12146             case 'z':
12147             case 't':
12148             case 'j':
12149                 goto unknown;
12150             }
12151
12152             /* Now we need (long double) if intsize == 'q', else (double). */
12153             if (args) {
12154                 /* Note: do not pull NVs off the va_list with va_arg()
12155                  * (pull doubles instead) because if you have a build
12156                  * with long doubles, you would always be pulling long
12157                  * doubles, which would badly break anyone using only
12158                  * doubles (i.e. the majority of builds). In other
12159                  * words, you cannot mix doubles and long doubles.
12160                  * The only case where you can pull off long doubles
12161                  * is when the format specifier explicitly asks so with
12162                  * e.g. "%Lg". */
12163 #ifdef USE_QUADMATH
12164                 fv = intsize == 'q' ?
12165                     va_arg(*args, NV) : va_arg(*args, double);
12166                 nv = fv;
12167 #elif LONG_DOUBLESIZE > DOUBLESIZE
12168                 if (intsize == 'q') {
12169                     fv = va_arg(*args, long double);
12170                     nv = fv;
12171                 } else {
12172                     nv = va_arg(*args, double);
12173                     NV_TO_FV(nv, fv);
12174                 }
12175 #else
12176                 nv = va_arg(*args, double);
12177                 fv = nv;
12178 #endif
12179             }
12180             else
12181             {
12182                 if (!infnan) SvGETMAGIC(argsv);
12183                 nv = SvNV_nomg(argsv);
12184                 NV_TO_FV(nv, fv);
12185             }
12186
12187             need = 0;
12188             /* frexp() (or frexpl) has some unspecified behaviour for
12189              * nan/inf/-inf, so let's avoid calling that on non-finites. */
12190             if (isALPHA_FOLD_NE(c, 'e') && FV_ISFINITE(fv)) {
12191                 i = PERL_INT_MIN;
12192                 (void)Perl_frexp((NV)fv, &i);
12193                 if (i == PERL_INT_MIN)
12194                     Perl_die(aTHX_ "panic: frexp: %"FV_GF, fv);
12195                 /* Do not set hexfp earlier since we want to printf
12196                  * Inf/NaN for Inf/NaN, not their hexfp. */
12197                 hexfp = isALPHA_FOLD_EQ(c, 'a');
12198                 if (UNLIKELY(hexfp)) {
12199                     /* This seriously overshoots in most cases, but
12200                      * better the undershooting.  Firstly, all bytes
12201                      * of the NV are not mantissa, some of them are
12202                      * exponent.  Secondly, for the reasonably common
12203                      * long doubles case, the "80-bit extended", two
12204                      * or six bytes of the NV are unused. */
12205                     need +=
12206                         (fv < 0) ? 1 : 0 + /* possible unary minus */
12207                         2 + /* "0x" */
12208                         1 + /* the very unlikely carry */
12209                         1 + /* "1" */
12210                         1 + /* "." */
12211                         2 * NVSIZE + /* 2 hexdigits for each byte */
12212                         2 + /* "p+" */
12213                         6 + /* exponent: sign, plus up to 16383 (quad fp) */
12214                         1;   /* \0 */
12215 #ifdef LONGDOUBLE_DOUBLEDOUBLE
12216                     /* However, for the "double double", we need more.
12217                      * Since each double has their own exponent, the
12218                      * doubles may float (haha) rather far from each
12219                      * other, and the number of required bits is much
12220                      * larger, up to total of DOUBLEDOUBLE_MAXBITS bits.
12221                      * See the definition of DOUBLEDOUBLE_MAXBITS.
12222                      *
12223                      * Need 2 hexdigits for each byte. */
12224                     need += (DOUBLEDOUBLE_MAXBITS/8 + 1) * 2;
12225                     /* the size for the exponent already added */
12226 #endif
12227 #ifdef USE_LOCALE_NUMERIC
12228                         STORE_LC_NUMERIC_SET_TO_NEEDED();
12229                         if (PL_numeric_radix_sv && IN_LC(LC_NUMERIC))
12230                             need += SvLEN(PL_numeric_radix_sv);
12231                         RESTORE_LC_NUMERIC();
12232 #endif
12233                 }
12234                 else if (i > 0) {
12235                     need = BIT_DIGITS(i);
12236                 } /* if i < 0, the number of digits is hard to predict. */
12237             }
12238             need += has_precis ? precis : 6; /* known default */
12239
12240             if (need < width)
12241                 need = width;
12242
12243 #ifdef HAS_LDBL_SPRINTF_BUG
12244             /* This is to try to fix a bug with irix/nonstop-ux/powerux and
12245                with sfio - Allen <allens@cpan.org> */
12246
12247 #  ifdef DBL_MAX
12248 #    define MY_DBL_MAX DBL_MAX
12249 #  else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
12250 #    if DOUBLESIZE >= 8
12251 #      define MY_DBL_MAX 1.7976931348623157E+308L
12252 #    else
12253 #      define MY_DBL_MAX 3.40282347E+38L
12254 #    endif
12255 #  endif
12256
12257 #  ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
12258 #    define MY_DBL_MAX_BUG 1L
12259 #  else
12260 #    define MY_DBL_MAX_BUG MY_DBL_MAX
12261 #  endif
12262
12263 #  ifdef DBL_MIN
12264 #    define MY_DBL_MIN DBL_MIN
12265 #  else  /* XXX guessing! -Allen */
12266 #    if DOUBLESIZE >= 8
12267 #      define MY_DBL_MIN 2.2250738585072014E-308L
12268 #    else
12269 #      define MY_DBL_MIN 1.17549435E-38L
12270 #    endif
12271 #  endif
12272
12273             if ((intsize == 'q') && (c == 'f') &&
12274                 ((fv < MY_DBL_MAX_BUG) && (fv > -MY_DBL_MAX_BUG)) &&
12275                 (need < DBL_DIG)) {
12276                 /* it's going to be short enough that
12277                  * long double precision is not needed */
12278
12279                 if ((fv <= 0L) && (fv >= -0L))
12280                     fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
12281                 else {
12282                     /* would use Perl_fp_class as a double-check but not
12283                      * functional on IRIX - see perl.h comments */
12284
12285                     if ((fv >= MY_DBL_MIN) || (fv <= -MY_DBL_MIN)) {
12286                         /* It's within the range that a double can represent */
12287 #if defined(DBL_MAX) && !defined(DBL_MIN)
12288                         if ((fv >= ((long double)1/DBL_MAX)) ||
12289                             (fv <= (-(long double)1/DBL_MAX)))
12290 #endif
12291                         fix_ldbl_sprintf_bug = TRUE;
12292                     }
12293                 }
12294                 if (fix_ldbl_sprintf_bug == TRUE) {
12295                     double temp;
12296
12297                     intsize = 0;
12298                     temp = (double)fv;
12299                     fv = (NV)temp;
12300                 }
12301             }
12302
12303 #  undef MY_DBL_MAX
12304 #  undef MY_DBL_MAX_BUG
12305 #  undef MY_DBL_MIN
12306
12307 #endif /* HAS_LDBL_SPRINTF_BUG */
12308
12309             need += 20; /* fudge factor */
12310             if (PL_efloatsize < need) {
12311                 Safefree(PL_efloatbuf);
12312                 PL_efloatsize = need + 20; /* more fudge */
12313                 Newx(PL_efloatbuf, PL_efloatsize, char);
12314                 PL_efloatbuf[0] = '\0';
12315             }
12316
12317             if ( !(width || left || plus || alt) && fill != '0'
12318                  && has_precis && intsize != 'q'        /* Shortcuts */
12319                  && LIKELY(!Perl_isinfnan((NV)fv)) ) {
12320                 /* See earlier comment about buggy Gconvert when digits,
12321                    aka precis is 0  */
12322                 if ( c == 'g' && precis ) {
12323                     STORE_LC_NUMERIC_SET_TO_NEEDED();
12324                     SNPRINTF_G(fv, PL_efloatbuf, PL_efloatsize, precis);
12325                     /* May return an empty string for digits==0 */
12326                     if (*PL_efloatbuf) {
12327                         elen = strlen(PL_efloatbuf);
12328                         goto float_converted;
12329                     }
12330                 } else if ( c == 'f' && !precis ) {
12331                     if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
12332                         break;
12333                 }
12334             }
12335
12336             if (UNLIKELY(hexfp)) {
12337                 /* Hexadecimal floating point. */
12338                 char* p = PL_efloatbuf;
12339                 U8 vhex[VHEX_SIZE];
12340                 U8* v = vhex; /* working pointer to vhex */
12341                 U8* vend; /* pointer to one beyond last digit of vhex */
12342                 U8* vfnz = NULL; /* first non-zero */
12343                 U8* vlnz = NULL; /* last non-zero */
12344                 const bool lower = (c == 'a');
12345                 /* At output the values of vhex (up to vend) will
12346                  * be mapped through the xdig to get the actual
12347                  * human-readable xdigits. */
12348                 const char* xdig = PL_hexdigit;
12349                 int zerotail = 0; /* how many extra zeros to append */
12350                 int exponent = 0; /* exponent of the floating point input */
12351                 bool hexradix = FALSE; /* should we output the radix */
12352
12353                 /* XXX: denormals, NaN, Inf.
12354                  *
12355                  * For example with denormals, (assuming the vanilla
12356                  * 64-bit double): the exponent is zero. 1xp-1074 is
12357                  * the smallest denormal and the smallest double, it
12358                  * should be output as 0x0.0000000000001p-1022 to
12359                  * match its internal structure. */
12360
12361                 vend = S_hextract(aTHX_ nv, &exponent, vhex, NULL);
12362                 S_hextract(aTHX_ nv, &exponent, vhex, vend);
12363
12364 #if NVSIZE > DOUBLESIZE
12365 #  ifdef HEXTRACT_HAS_IMPLICIT_BIT
12366                 /* In this case there is an implicit bit,
12367                  * and therefore the exponent is shifted shift by one. */
12368                 exponent--;
12369 #  else
12370                 /* In this case there is no implicit bit,
12371                  * and the exponent is shifted by the first xdigit. */
12372                 exponent -= 4;
12373 #  endif
12374 #endif
12375
12376                 if (fv < 0
12377                     || Perl_signbit(nv)
12378                   )
12379                     *p++ = '-';
12380                 else if (plus)
12381                     *p++ = plus;
12382                 *p++ = '0';
12383                 if (lower) {
12384                     *p++ = 'x';
12385                 }
12386                 else {
12387                     *p++ = 'X';
12388                     xdig += 16; /* Use uppercase hex. */
12389                 }
12390
12391                 /* Find the first non-zero xdigit. */
12392                 for (v = vhex; v < vend; v++) {
12393                     if (*v) {
12394                         vfnz = v;
12395                         break;
12396                     }
12397                 }
12398
12399                 if (vfnz) {
12400                     /* Find the last non-zero xdigit. */
12401                     for (v = vend - 1; v >= vhex; v--) {
12402                         if (*v) {
12403                             vlnz = v;
12404                             break;
12405                         }
12406                     }
12407
12408 #if NVSIZE == DOUBLESIZE
12409                     if (fv != 0.0)
12410                         exponent--;
12411 #endif
12412
12413                     if (precis > 0) {
12414                         if ((SSize_t)(precis + 1) < vend - vhex) {
12415                             bool round;
12416
12417                             v = vhex + precis + 1;
12418                             /* Round away from zero: if the tail
12419                              * beyond the precis xdigits is equal to
12420                              * or greater than 0x8000... */
12421                             round = *v > 0x8;
12422                             if (!round && *v == 0x8) {
12423                                 for (v++; v < vend; v++) {
12424                                     if (*v) {
12425                                         round = TRUE;
12426                                         break;
12427                                     }
12428                                 }
12429                             }
12430                             if (round) {
12431                                 for (v = vhex + precis; v >= vhex; v--) {
12432                                     if (*v < 0xF) {
12433                                         (*v)++;
12434                                         break;
12435                                     }
12436                                     *v = 0;
12437                                     if (v == vhex) {
12438                                         /* If the carry goes all the way to
12439                                          * the front, we need to output
12440                                          * a single '1'. This goes against
12441                                          * the "xdigit and then radix"
12442                                          * but since this is "cannot happen"
12443                                          * category, that is probably good. */
12444                                         *p++ = xdig[1];
12445                                     }
12446                                 }
12447                             }
12448                             /* The new effective "last non zero". */
12449                             vlnz = vhex + precis;
12450                         }
12451                         else {
12452                             zerotail = precis - (vlnz - vhex);
12453                         }
12454                     }
12455
12456                     v = vhex;
12457                     *p++ = xdig[*v++];
12458
12459                     /* If there are non-zero xdigits, the radix
12460                      * is output after the first one. */
12461                     if (vfnz < vlnz) {
12462                       hexradix = TRUE;
12463                     }
12464                 }
12465                 else {
12466                     *p++ = '0';
12467                     exponent = 0;
12468                     zerotail = precis;
12469                 }
12470
12471                 /* The radix is always output if precis, or if alt. */
12472                 if (precis > 0 || alt) {
12473                   hexradix = TRUE;
12474                 }
12475
12476                 if (hexradix) {
12477 #ifndef USE_LOCALE_NUMERIC
12478                         *p++ = '.';
12479 #else
12480                         STORE_LC_NUMERIC_SET_TO_NEEDED();
12481                         if (PL_numeric_radix_sv && IN_LC(LC_NUMERIC)) {
12482                             STRLEN n;
12483                             const char* r = SvPV(PL_numeric_radix_sv, n);
12484                             Copy(r, p, n, char);
12485                             p += n;
12486                         }
12487                         else {
12488                             *p++ = '.';
12489                         }
12490                         RESTORE_LC_NUMERIC();
12491 #endif
12492                 }
12493
12494                 if (vlnz) {
12495                     while (v <= vlnz)
12496                         *p++ = xdig[*v++];
12497                 }
12498
12499                 if (zerotail > 0) {
12500                   while (zerotail--) {
12501                     *p++ = '0';
12502                   }
12503                 }
12504
12505                 elen = p - PL_efloatbuf;
12506                 elen += my_snprintf(p, PL_efloatsize - elen,
12507                                     "%c%+d", lower ? 'p' : 'P',
12508                                     exponent);
12509
12510                 if (elen < width) {
12511                     if (left) {
12512                         /* Pad the back with spaces. */
12513                         memset(PL_efloatbuf + elen, ' ', width - elen);
12514                     }
12515                     else if (fill == '0') {
12516                         /* Insert the zeros between the "0x" and
12517                          * the digits, otherwise we end up with
12518                          * "0000xHHH..." */
12519                         STRLEN nzero = width - elen;
12520                         char* zerox = PL_efloatbuf + 2;
12521                         Move(zerox, zerox + nzero,  elen - 2, char);
12522                         memset(zerox, fill, nzero);
12523                     }
12524                     else {
12525                         /* Move it to the right. */
12526                         Move(PL_efloatbuf, PL_efloatbuf + width - elen,
12527                              elen, char);
12528                         /* Pad the front with spaces. */
12529                         memset(PL_efloatbuf, ' ', width - elen);
12530                     }
12531                     elen = width;
12532                 }
12533             }
12534             else {
12535                 elen = S_infnan_2pv(nv, PL_efloatbuf, PL_efloatsize, plus);
12536                 if (elen) {
12537                     /* Not affecting infnan output: precision, alt, fill. */
12538                     if (elen < width) {
12539                         if (left) {
12540                             /* Pack the back with spaces. */
12541                             memset(PL_efloatbuf + elen, ' ', width - elen);
12542                         } else {
12543                             /* Move it to the right. */
12544                             Move(PL_efloatbuf, PL_efloatbuf + width - elen,
12545                                  elen, char);
12546                             /* Pad the front with spaces. */
12547                             memset(PL_efloatbuf, ' ', width - elen);
12548                         }
12549                         elen = width;
12550                     }
12551                 }
12552             }
12553
12554             if (elen == 0) {
12555                 char *ptr = ebuf + sizeof ebuf;
12556                 *--ptr = '\0';
12557                 *--ptr = c;
12558 #if defined(USE_QUADMATH)
12559                 if (intsize == 'q') {
12560                     /* "g" -> "Qg" */
12561                     *--ptr = 'Q';
12562                 }
12563                 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
12564 #elif defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
12565                 /* Note that this is HAS_LONG_DOUBLE and PERL_PRIfldbl,
12566                  * not USE_LONG_DOUBLE and NVff.  In other words,
12567                  * this needs to work without USE_LONG_DOUBLE. */
12568                 if (intsize == 'q') {
12569                     /* Copy the one or more characters in a long double
12570                      * format before the 'base' ([efgEFG]) character to
12571                      * the format string. */
12572                     static char const ldblf[] = PERL_PRIfldbl;
12573                     char const *p = ldblf + sizeof(ldblf) - 3;
12574                     while (p >= ldblf) { *--ptr = *p--; }
12575                 }
12576 #endif
12577                 if (has_precis) {
12578                     base = precis;
12579                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
12580                     *--ptr = '.';
12581                 }
12582                 if (width) {
12583                     base = width;
12584                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
12585                 }
12586                 if (fill == '0')
12587                     *--ptr = fill;
12588                 if (left)
12589                     *--ptr = '-';
12590                 if (plus)
12591                     *--ptr = plus;
12592                 if (alt)
12593                     *--ptr = '#';
12594                 *--ptr = '%';
12595
12596                 /* No taint.  Otherwise we are in the strange situation
12597                  * where printf() taints but print($float) doesn't.
12598                  * --jhi */
12599
12600                 STORE_LC_NUMERIC_SET_TO_NEEDED();
12601
12602                 /* hopefully the above makes ptr a very constrained format
12603                  * that is safe to use, even though it's not literal */
12604                 GCC_DIAG_IGNORE(-Wformat-nonliteral);
12605 #ifdef USE_QUADMATH
12606                 {
12607                     const char* qfmt = quadmath_format_single(ptr);
12608                     if (!qfmt)
12609                         Perl_croak_nocontext("panic: quadmath invalid format \"%s\"", ptr);
12610                     elen = quadmath_snprintf(PL_efloatbuf, PL_efloatsize,
12611                                              qfmt, nv);
12612                     if ((IV)elen == -1)
12613                         Perl_croak_nocontext("panic: quadmath_snprintf failed, format \"%s\"", qfmt);
12614                     if (qfmt != ptr)
12615                         Safefree(qfmt);
12616                 }
12617 #elif defined(HAS_LONG_DOUBLE)
12618                 elen = ((intsize == 'q')
12619                         ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, fv)
12620                         : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)fv));
12621 #else
12622                 elen = my_sprintf(PL_efloatbuf, ptr, fv);
12623 #endif
12624                 GCC_DIAG_RESTORE;
12625             }
12626
12627         float_converted:
12628             eptr = PL_efloatbuf;
12629             assert((IV)elen > 0); /* here zero elen is bad */
12630
12631 #ifdef USE_LOCALE_NUMERIC
12632             /* If the decimal point character in the string is UTF-8, make the
12633              * output utf8 */
12634             if (PL_numeric_radix_sv && SvUTF8(PL_numeric_radix_sv)
12635                 && instr(eptr, SvPVX_const(PL_numeric_radix_sv)))
12636             {
12637                 is_utf8 = TRUE;
12638             }
12639 #endif
12640
12641             break;
12642
12643             /* SPECIAL */
12644
12645         case 'n':
12646             if (vectorize)
12647                 goto unknown;
12648             i = SvCUR(sv) - origlen;
12649             if (args) {
12650                 switch (intsize) {
12651                 case 'c':       *(va_arg(*args, char*)) = i; break;
12652                 case 'h':       *(va_arg(*args, short*)) = i; break;
12653                 default:        *(va_arg(*args, int*)) = i; break;
12654                 case 'l':       *(va_arg(*args, long*)) = i; break;
12655                 case 'V':       *(va_arg(*args, IV*)) = i; break;
12656                 case 'z':       *(va_arg(*args, SSize_t*)) = i; break;
12657 #ifdef HAS_PTRDIFF_T
12658                 case 't':       *(va_arg(*args, ptrdiff_t*)) = i; break;
12659 #endif
12660 #ifdef I_STDINT
12661                 case 'j':       *(va_arg(*args, intmax_t*)) = i; break;
12662 #endif
12663                 case 'q':
12664 #if IVSIZE >= 8
12665                                 *(va_arg(*args, Quad_t*)) = i; break;
12666 #else
12667                                 goto unknown;
12668 #endif
12669                 }
12670             }
12671             else
12672                 sv_setuv_mg(argsv, has_utf8 ? (UV)sv_len_utf8(sv) : (UV)i);
12673             goto donevalidconversion;
12674
12675             /* UNKNOWN */
12676
12677         default:
12678       unknown:
12679             if (!args
12680                 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
12681                 && ckWARN(WARN_PRINTF))
12682             {
12683                 SV * const msg = sv_newmortal();
12684                 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
12685                           (PL_op->op_type == OP_PRTF) ? "" : "s");
12686                 if (fmtstart < patend) {
12687                     const char * const fmtend = q < patend ? q : patend;
12688                     const char * f;
12689                     sv_catpvs(msg, "\"%");
12690                     for (f = fmtstart; f < fmtend; f++) {
12691                         if (isPRINT(*f)) {
12692                             sv_catpvn_nomg(msg, f, 1);
12693                         } else {
12694                             Perl_sv_catpvf(aTHX_ msg,
12695                                            "\\%03"UVof, (UV)*f & 0xFF);
12696                         }
12697                     }
12698                     sv_catpvs(msg, "\"");
12699                 } else {
12700                     sv_catpvs(msg, "end of string");
12701                 }
12702                 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, SVfARG(msg)); /* yes, this is reentrant */
12703             }
12704
12705             /* output mangled stuff ... */
12706             if (c == '\0')
12707                 --q;
12708             eptr = p;
12709             elen = q - p;
12710
12711             /* ... right here, because formatting flags should not apply */
12712             SvGROW(sv, SvCUR(sv) + elen + 1);
12713             p = SvEND(sv);
12714             Copy(eptr, p, elen, char);
12715             p += elen;
12716             *p = '\0';
12717             SvCUR_set(sv, p - SvPVX_const(sv));
12718             svix = osvix;
12719             continue;   /* not "break" */
12720         }
12721
12722         if (is_utf8 != has_utf8) {
12723             if (is_utf8) {
12724                 if (SvCUR(sv))
12725                     sv_utf8_upgrade(sv);
12726             }
12727             else {
12728                 const STRLEN old_elen = elen;
12729                 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
12730                 sv_utf8_upgrade(nsv);
12731                 eptr = SvPVX_const(nsv);
12732                 elen = SvCUR(nsv);
12733
12734                 if (width) { /* fudge width (can't fudge elen) */
12735                     width += elen - old_elen;
12736                 }
12737                 is_utf8 = TRUE;
12738             }
12739         }
12740
12741         /* signed value that's wrapped? */
12742         assert(elen  <= ((~(STRLEN)0) >> 1));
12743         have = esignlen + zeros + elen;
12744         if (have < zeros)
12745             croak_memory_wrap();
12746
12747         need = (have > width ? have : width);
12748         gap = need - have;
12749
12750         if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
12751             croak_memory_wrap();
12752         SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
12753         p = SvEND(sv);
12754         if (esignlen && fill == '0') {
12755             int i;
12756             for (i = 0; i < (int)esignlen; i++)
12757                 *p++ = esignbuf[i];
12758         }
12759         if (gap && !left) {
12760             memset(p, fill, gap);
12761             p += gap;
12762         }
12763         if (esignlen && fill != '0') {
12764             int i;
12765             for (i = 0; i < (int)esignlen; i++)
12766                 *p++ = esignbuf[i];
12767         }
12768         if (zeros) {
12769             int i;
12770             for (i = zeros; i; i--)
12771                 *p++ = '0';
12772         }
12773         if (elen) {
12774             Copy(eptr, p, elen, char);
12775             p += elen;
12776         }
12777         if (gap && left) {
12778             memset(p, ' ', gap);
12779             p += gap;
12780         }
12781         if (vectorize) {
12782             if (veclen) {
12783                 Copy(dotstr, p, dotstrlen, char);
12784                 p += dotstrlen;
12785             }
12786             else
12787                 vectorize = FALSE;              /* done iterating over vecstr */
12788         }
12789         if (is_utf8)
12790             has_utf8 = TRUE;
12791         if (has_utf8)
12792             SvUTF8_on(sv);
12793         *p = '\0';
12794         SvCUR_set(sv, p - SvPVX_const(sv));
12795         if (vectorize) {
12796             esignlen = 0;
12797             goto vector;
12798         }
12799
12800       donevalidconversion:
12801         if (used_explicit_ix)
12802             no_redundant_warning = TRUE;
12803         if (arg_missing)
12804             S_warn_vcatpvfn_missing_argument(aTHX);
12805     }
12806
12807     /* Now that we've consumed all our printf format arguments (svix)
12808      * do we have things left on the stack that we didn't use?
12809      */
12810     if (!no_redundant_warning && svmax >= svix + 1 && ckWARN(WARN_REDUNDANT)) {
12811         Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
12812                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
12813     }
12814
12815     SvTAINT(sv);
12816
12817     RESTORE_LC_NUMERIC();   /* Done outside loop, so don't have to save/restore
12818                                each iteration. */
12819 }
12820
12821 /* =========================================================================
12822
12823 =head1 Cloning an interpreter
12824
12825 =cut
12826
12827 All the macros and functions in this section are for the private use of
12828 the main function, perl_clone().
12829
12830 The foo_dup() functions make an exact copy of an existing foo thingy.
12831 During the course of a cloning, a hash table is used to map old addresses
12832 to new addresses.  The table is created and manipulated with the
12833 ptr_table_* functions.
12834
12835  * =========================================================================*/
12836
12837
12838 #if defined(USE_ITHREADS)
12839
12840 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
12841 #ifndef GpREFCNT_inc
12842 #  define GpREFCNT_inc(gp)      ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
12843 #endif
12844
12845
12846 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact
12847    that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
12848    If this changes, please unmerge ss_dup.
12849    Likewise, sv_dup_inc_multiple() relies on this fact.  */
12850 #define sv_dup_inc_NN(s,t)      SvREFCNT_inc_NN(sv_dup_inc(s,t))
12851 #define av_dup(s,t)     MUTABLE_AV(sv_dup((const SV *)s,t))
12852 #define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
12853 #define hv_dup(s,t)     MUTABLE_HV(sv_dup((const SV *)s,t))
12854 #define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
12855 #define cv_dup(s,t)     MUTABLE_CV(sv_dup((const SV *)s,t))
12856 #define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t))
12857 #define io_dup(s,t)     MUTABLE_IO(sv_dup((const SV *)s,t))
12858 #define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t))
12859 #define gv_dup(s,t)     MUTABLE_GV(sv_dup((const SV *)s,t))
12860 #define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t))
12861 #define SAVEPV(p)       ((p) ? savepv(p) : NULL)
12862 #define SAVEPVN(p,n)    ((p) ? savepvn(p,n) : NULL)
12863
12864 /* clone a parser */
12865
12866 yy_parser *
12867 Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
12868 {
12869     yy_parser *parser;
12870
12871     PERL_ARGS_ASSERT_PARSER_DUP;
12872
12873     if (!proto)
12874         return NULL;
12875
12876     /* look for it in the table first */
12877     parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
12878     if (parser)
12879         return parser;
12880
12881     /* create anew and remember what it is */
12882     Newxz(parser, 1, yy_parser);
12883     ptr_table_store(PL_ptr_table, proto, parser);
12884
12885     /* XXX these not yet duped */
12886     parser->old_parser = NULL;
12887     parser->stack = NULL;
12888     parser->ps = NULL;
12889     parser->stack_size = 0;
12890     /* XXX parser->stack->state = 0; */
12891
12892     /* XXX eventually, just Copy() most of the parser struct ? */
12893
12894     parser->lex_brackets = proto->lex_brackets;
12895     parser->lex_casemods = proto->lex_casemods;
12896     parser->lex_brackstack = savepvn(proto->lex_brackstack,
12897                     (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
12898     parser->lex_casestack = savepvn(proto->lex_casestack,
12899                     (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
12900     parser->lex_defer   = proto->lex_defer;
12901     parser->lex_dojoin  = proto->lex_dojoin;
12902     parser->lex_formbrack = proto->lex_formbrack;
12903     parser->lex_inpat   = proto->lex_inpat;
12904     parser->lex_inwhat  = proto->lex_inwhat;
12905     parser->lex_op      = proto->lex_op;
12906     parser->lex_repl    = sv_dup_inc(proto->lex_repl, param);
12907     parser->lex_starts  = proto->lex_starts;
12908     parser->lex_stuff   = sv_dup_inc(proto->lex_stuff, param);
12909     parser->multi_close = proto->multi_close;
12910     parser->multi_open  = proto->multi_open;
12911     parser->multi_start = proto->multi_start;
12912     parser->multi_end   = proto->multi_end;
12913     parser->preambled   = proto->preambled;
12914     parser->sublex_info = proto->sublex_info; /* XXX not quite right */
12915     parser->linestr     = sv_dup_inc(proto->linestr, param);
12916     parser->expect      = proto->expect;
12917     parser->copline     = proto->copline;
12918     parser->last_lop_op = proto->last_lop_op;
12919     parser->lex_state   = proto->lex_state;
12920     parser->rsfp        = fp_dup(proto->rsfp, '<', param);
12921     /* rsfp_filters entries have fake IoDIRP() */
12922     parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
12923     parser->in_my       = proto->in_my;
12924     parser->in_my_stash = hv_dup(proto->in_my_stash, param);
12925     parser->error_count = proto->error_count;
12926
12927
12928     parser->linestr     = sv_dup_inc(proto->linestr, param);
12929
12930     {
12931         char * const ols = SvPVX(proto->linestr);
12932         char * const ls  = SvPVX(parser->linestr);
12933
12934         parser->bufptr      = ls + (proto->bufptr >= ols ?
12935                                     proto->bufptr -  ols : 0);
12936         parser->oldbufptr   = ls + (proto->oldbufptr >= ols ?
12937                                     proto->oldbufptr -  ols : 0);
12938         parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
12939                                     proto->oldoldbufptr -  ols : 0);
12940         parser->linestart   = ls + (proto->linestart >= ols ?
12941                                     proto->linestart -  ols : 0);
12942         parser->last_uni    = ls + (proto->last_uni >= ols ?
12943                                     proto->last_uni -  ols : 0);
12944         parser->last_lop    = ls + (proto->last_lop >= ols ?
12945                                     proto->last_lop -  ols : 0);
12946
12947         parser->bufend      = ls + SvCUR(parser->linestr);
12948     }
12949
12950     Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
12951
12952
12953     Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
12954     Copy(proto->nexttype, parser->nexttype, 5,  I32);
12955     parser->nexttoke    = proto->nexttoke;
12956
12957     /* XXX should clone saved_curcop here, but we aren't passed
12958      * proto_perl; so do it in perl_clone_using instead */
12959
12960     return parser;
12961 }
12962
12963
12964 /* duplicate a file handle */
12965
12966 PerlIO *
12967 Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
12968 {
12969     PerlIO *ret;
12970
12971     PERL_ARGS_ASSERT_FP_DUP;
12972     PERL_UNUSED_ARG(type);
12973
12974     if (!fp)
12975         return (PerlIO*)NULL;
12976
12977     /* look for it in the table first */
12978     ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
12979     if (ret)
12980         return ret;
12981
12982     /* create anew and remember what it is */
12983 #ifdef __amigaos4__
12984     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE|PERLIO_DUP_FD);
12985 #else
12986     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
12987 #endif
12988     ptr_table_store(PL_ptr_table, fp, ret);
12989     return ret;
12990 }
12991
12992 /* duplicate a directory handle */
12993
12994 DIR *
12995 Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
12996 {
12997     DIR *ret;
12998
12999 #if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
13000     DIR *pwd;
13001     const Direntry_t *dirent;
13002     char smallbuf[256];
13003     char *name = NULL;
13004     STRLEN len = 0;
13005     long pos;
13006 #endif
13007
13008     PERL_UNUSED_CONTEXT;
13009     PERL_ARGS_ASSERT_DIRP_DUP;
13010
13011     if (!dp)
13012         return (DIR*)NULL;
13013
13014     /* look for it in the table first */
13015     ret = (DIR*)ptr_table_fetch(PL_ptr_table, dp);
13016     if (ret)
13017         return ret;
13018
13019 #if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
13020
13021     PERL_UNUSED_ARG(param);
13022
13023     /* create anew */
13024
13025     /* open the current directory (so we can switch back) */
13026     if (!(pwd = PerlDir_open("."))) return (DIR *)NULL;
13027
13028     /* chdir to our dir handle and open the present working directory */
13029     if (fchdir(my_dirfd(dp)) < 0 || !(ret = PerlDir_open("."))) {
13030         PerlDir_close(pwd);
13031         return (DIR *)NULL;
13032     }
13033     /* Now we should have two dir handles pointing to the same dir. */
13034
13035     /* Be nice to the calling code and chdir back to where we were. */
13036     /* XXX If this fails, then what? */
13037     PERL_UNUSED_RESULT(fchdir(my_dirfd(pwd)));
13038
13039     /* We have no need of the pwd handle any more. */
13040     PerlDir_close(pwd);
13041
13042 #ifdef DIRNAMLEN
13043 # define d_namlen(d) (d)->d_namlen
13044 #else
13045 # define d_namlen(d) strlen((d)->d_name)
13046 #endif
13047     /* Iterate once through dp, to get the file name at the current posi-
13048        tion. Then step back. */
13049     pos = PerlDir_tell(dp);
13050     if ((dirent = PerlDir_read(dp))) {
13051         len = d_namlen(dirent);
13052         if (len <= sizeof smallbuf) name = smallbuf;
13053         else Newx(name, len, char);
13054         Move(dirent->d_name, name, len, char);
13055     }
13056     PerlDir_seek(dp, pos);
13057
13058     /* Iterate through the new dir handle, till we find a file with the
13059        right name. */
13060     if (!dirent) /* just before the end */
13061         for(;;) {
13062             pos = PerlDir_tell(ret);
13063             if (PerlDir_read(ret)) continue; /* not there yet */
13064             PerlDir_seek(ret, pos); /* step back */
13065             break;
13066         }
13067     else {
13068         const long pos0 = PerlDir_tell(ret);
13069         for(;;) {
13070             pos = PerlDir_tell(ret);
13071             if ((dirent = PerlDir_read(ret))) {
13072                 if (len == (STRLEN)d_namlen(dirent)
13073                     && memEQ(name, dirent->d_name, len)) {
13074                     /* found it */
13075                     PerlDir_seek(ret, pos); /* step back */
13076                     break;
13077                 }
13078                 /* else we are not there yet; keep iterating */
13079             }
13080             else { /* This is not meant to happen. The best we can do is
13081                       reset the iterator to the beginning. */
13082                 PerlDir_seek(ret, pos0);
13083                 break;
13084             }
13085         }
13086     }
13087 #undef d_namlen
13088
13089     if (name && name != smallbuf)
13090         Safefree(name);
13091 #endif
13092
13093 #ifdef WIN32
13094     ret = win32_dirp_dup(dp, param);
13095 #endif
13096
13097     /* pop it in the pointer table */
13098     if (ret)
13099         ptr_table_store(PL_ptr_table, dp, ret);
13100
13101     return ret;
13102 }
13103
13104 /* duplicate a typeglob */
13105
13106 GP *
13107 Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
13108 {
13109     GP *ret;
13110
13111     PERL_ARGS_ASSERT_GP_DUP;
13112
13113     if (!gp)
13114         return (GP*)NULL;
13115     /* look for it in the table first */
13116     ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
13117     if (ret)
13118         return ret;
13119
13120     /* create anew and remember what it is */
13121     Newxz(ret, 1, GP);
13122     ptr_table_store(PL_ptr_table, gp, ret);
13123
13124     /* clone */
13125     /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
13126        on Newxz() to do this for us.  */
13127     ret->gp_sv          = sv_dup_inc(gp->gp_sv, param);
13128     ret->gp_io          = io_dup_inc(gp->gp_io, param);
13129     ret->gp_form        = cv_dup_inc(gp->gp_form, param);
13130     ret->gp_av          = av_dup_inc(gp->gp_av, param);
13131     ret->gp_hv          = hv_dup_inc(gp->gp_hv, param);
13132     ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
13133     ret->gp_cv          = cv_dup_inc(gp->gp_cv, param);
13134     ret->gp_cvgen       = gp->gp_cvgen;
13135     ret->gp_line        = gp->gp_line;
13136     ret->gp_file_hek    = hek_dup(gp->gp_file_hek, param);
13137     return ret;
13138 }
13139
13140 /* duplicate a chain of magic */
13141
13142 MAGIC *
13143 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
13144 {
13145     MAGIC *mgret = NULL;
13146     MAGIC **mgprev_p = &mgret;
13147
13148     PERL_ARGS_ASSERT_MG_DUP;
13149
13150     for (; mg; mg = mg->mg_moremagic) {
13151         MAGIC *nmg;
13152
13153         if ((param->flags & CLONEf_JOIN_IN)
13154                 && mg->mg_type == PERL_MAGIC_backref)
13155             /* when joining, we let the individual SVs add themselves to
13156              * backref as needed. */
13157             continue;
13158
13159         Newx(nmg, 1, MAGIC);
13160         *mgprev_p = nmg;
13161         mgprev_p = &(nmg->mg_moremagic);
13162
13163         /* There was a comment "XXX copy dynamic vtable?" but as we don't have
13164            dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
13165            from the original commit adding Perl_mg_dup() - revision 4538.
13166            Similarly there is the annotation "XXX random ptr?" next to the
13167            assignment to nmg->mg_ptr.  */
13168         *nmg = *mg;
13169
13170         /* FIXME for plugins
13171         if (nmg->mg_type == PERL_MAGIC_qr) {
13172             nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
13173         }
13174         else
13175         */
13176         nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
13177                           ? nmg->mg_type == PERL_MAGIC_backref
13178                                 /* The backref AV has its reference
13179                                  * count deliberately bumped by 1 */
13180                                 ? SvREFCNT_inc(av_dup_inc((const AV *)
13181                                                     nmg->mg_obj, param))
13182                                 : sv_dup_inc(nmg->mg_obj, param)
13183                           : sv_dup(nmg->mg_obj, param);
13184
13185         if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
13186             if (nmg->mg_len > 0) {
13187                 nmg->mg_ptr     = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
13188                 if (nmg->mg_type == PERL_MAGIC_overload_table &&
13189                         AMT_AMAGIC((AMT*)nmg->mg_ptr))
13190                 {
13191                     AMT * const namtp = (AMT*)nmg->mg_ptr;
13192                     sv_dup_inc_multiple((SV**)(namtp->table),
13193                                         (SV**)(namtp->table), NofAMmeth, param);
13194                 }
13195             }
13196             else if (nmg->mg_len == HEf_SVKEY)
13197                 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
13198         }
13199         if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
13200             nmg->mg_virtual->svt_dup(aTHX_ nmg, param);
13201         }
13202     }
13203     return mgret;
13204 }
13205
13206 #endif /* USE_ITHREADS */
13207
13208 struct ptr_tbl_arena {
13209     struct ptr_tbl_arena *next;
13210     struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers.  */
13211 };
13212
13213 /* create a new pointer-mapping table */
13214
13215 PTR_TBL_t *
13216 Perl_ptr_table_new(pTHX)
13217 {
13218     PTR_TBL_t *tbl;
13219     PERL_UNUSED_CONTEXT;
13220
13221     Newx(tbl, 1, PTR_TBL_t);
13222     tbl->tbl_max        = 511;
13223     tbl->tbl_items      = 0;
13224     tbl->tbl_arena      = NULL;
13225     tbl->tbl_arena_next = NULL;
13226     tbl->tbl_arena_end  = NULL;
13227     Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
13228     return tbl;
13229 }
13230
13231 #define PTR_TABLE_HASH(ptr) \
13232   ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
13233
13234 /* map an existing pointer using a table */
13235
13236 STATIC PTR_TBL_ENT_t *
13237 S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
13238 {
13239     PTR_TBL_ENT_t *tblent;
13240     const UV hash = PTR_TABLE_HASH(sv);
13241
13242     PERL_ARGS_ASSERT_PTR_TABLE_FIND;
13243
13244     tblent = tbl->tbl_ary[hash & tbl->tbl_max];
13245     for (; tblent; tblent = tblent->next) {
13246         if (tblent->oldval == sv)
13247             return tblent;
13248     }
13249     return NULL;
13250 }
13251
13252 void *
13253 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
13254 {
13255     PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
13256
13257     PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
13258     PERL_UNUSED_CONTEXT;
13259
13260     return tblent ? tblent->newval : NULL;
13261 }
13262
13263 /* add a new entry to a pointer-mapping table 'tbl'.  In hash terms, 'oldsv' is
13264  * the key; 'newsv' is the value.  The names "old" and "new" are specific to
13265  * the core's typical use of ptr_tables in thread cloning. */
13266
13267 void
13268 Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
13269 {
13270     PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
13271
13272     PERL_ARGS_ASSERT_PTR_TABLE_STORE;
13273     PERL_UNUSED_CONTEXT;
13274
13275     if (tblent) {
13276         tblent->newval = newsv;
13277     } else {
13278         const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
13279
13280         if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
13281             struct ptr_tbl_arena *new_arena;
13282
13283             Newx(new_arena, 1, struct ptr_tbl_arena);
13284             new_arena->next = tbl->tbl_arena;
13285             tbl->tbl_arena = new_arena;
13286             tbl->tbl_arena_next = new_arena->array;
13287             tbl->tbl_arena_end = C_ARRAY_END(new_arena->array);
13288         }
13289
13290         tblent = tbl->tbl_arena_next++;
13291
13292         tblent->oldval = oldsv;
13293         tblent->newval = newsv;
13294         tblent->next = tbl->tbl_ary[entry];
13295         tbl->tbl_ary[entry] = tblent;
13296         tbl->tbl_items++;
13297         if (tblent->next && tbl->tbl_items > tbl->tbl_max)
13298             ptr_table_split(tbl);
13299     }
13300 }
13301
13302 /* double the hash bucket size of an existing ptr table */
13303
13304 void
13305 Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
13306 {
13307     PTR_TBL_ENT_t **ary = tbl->tbl_ary;
13308     const UV oldsize = tbl->tbl_max + 1;
13309     UV newsize = oldsize * 2;
13310     UV i;
13311
13312     PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
13313     PERL_UNUSED_CONTEXT;
13314
13315     Renew(ary, newsize, PTR_TBL_ENT_t*);
13316     Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
13317     tbl->tbl_max = --newsize;
13318     tbl->tbl_ary = ary;
13319     for (i=0; i < oldsize; i++, ary++) {
13320         PTR_TBL_ENT_t **entp = ary;
13321         PTR_TBL_ENT_t *ent = *ary;
13322         PTR_TBL_ENT_t **curentp;
13323         if (!ent)
13324             continue;
13325         curentp = ary + oldsize;
13326         do {
13327             if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
13328                 *entp = ent->next;
13329                 ent->next = *curentp;
13330                 *curentp = ent;
13331             }
13332             else
13333                 entp = &ent->next;
13334             ent = *entp;
13335         } while (ent);
13336     }
13337 }
13338
13339 /* remove all the entries from a ptr table */
13340 /* Deprecated - will be removed post 5.14 */
13341
13342 void
13343 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
13344 {
13345     PERL_UNUSED_CONTEXT;
13346     if (tbl && tbl->tbl_items) {
13347         struct ptr_tbl_arena *arena = tbl->tbl_arena;
13348
13349         Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent *);
13350
13351         while (arena) {
13352             struct ptr_tbl_arena *next = arena->next;
13353
13354             Safefree(arena);
13355             arena = next;
13356         };
13357
13358         tbl->tbl_items = 0;
13359         tbl->tbl_arena = NULL;
13360         tbl->tbl_arena_next = NULL;
13361         tbl->tbl_arena_end = NULL;
13362     }
13363 }
13364
13365 /* clear and free a ptr table */
13366
13367 void
13368 Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
13369 {
13370     struct ptr_tbl_arena *arena;
13371
13372     PERL_UNUSED_CONTEXT;
13373
13374     if (!tbl) {
13375         return;
13376     }
13377
13378     arena = tbl->tbl_arena;
13379
13380     while (arena) {
13381         struct ptr_tbl_arena *next = arena->next;
13382
13383         Safefree(arena);
13384         arena = next;
13385     }
13386
13387     Safefree(tbl->tbl_ary);
13388     Safefree(tbl);
13389 }
13390
13391 #if defined(USE_ITHREADS)
13392
13393 void
13394 Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
13395 {
13396     PERL_ARGS_ASSERT_RVPV_DUP;
13397
13398     assert(!isREGEXP(sstr));
13399     if (SvROK(sstr)) {
13400         if (SvWEAKREF(sstr)) {
13401             SvRV_set(dstr, sv_dup(SvRV_const(sstr), param));
13402             if (param->flags & CLONEf_JOIN_IN) {
13403                 /* if joining, we add any back references individually rather
13404                  * than copying the whole backref array */
13405                 Perl_sv_add_backref(aTHX_ SvRV(dstr), dstr);
13406             }
13407         }
13408         else
13409             SvRV_set(dstr, sv_dup_inc(SvRV_const(sstr), param));
13410     }
13411     else if (SvPVX_const(sstr)) {
13412         /* Has something there */
13413         if (SvLEN(sstr)) {
13414             /* Normal PV - clone whole allocated space */
13415             SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
13416             /* sstr may not be that normal, but actually copy on write.
13417                But we are a true, independent SV, so:  */
13418             SvIsCOW_off(dstr);
13419         }
13420         else {
13421             /* Special case - not normally malloced for some reason */
13422             if (isGV_with_GP(sstr)) {
13423                 /* Don't need to do anything here.  */
13424             }
13425             else if ((SvIsCOW(sstr))) {
13426                 /* A "shared" PV - clone it as "shared" PV */
13427                 SvPV_set(dstr,
13428                          HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
13429                                          param)));
13430             }
13431             else {
13432                 /* Some other special case - random pointer */
13433                 SvPV_set(dstr, (char *) SvPVX_const(sstr));             
13434             }
13435         }
13436     }
13437     else {
13438         /* Copy the NULL */
13439         SvPV_set(dstr, NULL);
13440     }
13441 }
13442
13443 /* duplicate a list of SVs. source and dest may point to the same memory.  */
13444 static SV **
13445 S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
13446                       SSize_t items, CLONE_PARAMS *const param)
13447 {
13448     PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
13449
13450     while (items-- > 0) {
13451         *dest++ = sv_dup_inc(*source++, param);
13452     }
13453
13454     return dest;
13455 }
13456
13457 /* duplicate an SV of any type (including AV, HV etc) */
13458
13459 static SV *
13460 S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
13461 {
13462     dVAR;
13463     SV *dstr;
13464
13465     PERL_ARGS_ASSERT_SV_DUP_COMMON;
13466
13467     if (SvTYPE(sstr) == (svtype)SVTYPEMASK) {
13468 #ifdef DEBUG_LEAKING_SCALARS_ABORT
13469         abort();
13470 #endif
13471         return NULL;
13472     }
13473     /* look for it in the table first */
13474     dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
13475     if (dstr)
13476         return dstr;
13477
13478     if(param->flags & CLONEf_JOIN_IN) {
13479         /** We are joining here so we don't want do clone
13480             something that is bad **/
13481         if (SvTYPE(sstr) == SVt_PVHV) {
13482             const HEK * const hvname = HvNAME_HEK(sstr);
13483             if (hvname) {
13484                 /** don't clone stashes if they already exist **/
13485                 dstr = MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
13486                                                 HEK_UTF8(hvname) ? SVf_UTF8 : 0));
13487                 ptr_table_store(PL_ptr_table, sstr, dstr);
13488                 return dstr;
13489             }
13490         }
13491         else if (SvTYPE(sstr) == SVt_PVGV && !SvFAKE(sstr)) {
13492             HV *stash = GvSTASH(sstr);
13493             const HEK * hvname;
13494             if (stash && (hvname = HvNAME_HEK(stash))) {
13495                 /** don't clone GVs if they already exist **/
13496                 SV **svp;
13497                 stash = gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
13498                                     HEK_UTF8(hvname) ? SVf_UTF8 : 0);
13499                 svp = hv_fetch(
13500                         stash, GvNAME(sstr),
13501                         GvNAMEUTF8(sstr)
13502                             ? -GvNAMELEN(sstr)
13503                             :  GvNAMELEN(sstr),
13504                         0
13505                       );
13506                 if (svp && *svp && SvTYPE(*svp) == SVt_PVGV) {
13507                     ptr_table_store(PL_ptr_table, sstr, *svp);
13508                     return *svp;
13509                 }
13510             }
13511         }
13512     }
13513
13514     /* create anew and remember what it is */
13515     new_SV(dstr);
13516
13517 #ifdef DEBUG_LEAKING_SCALARS
13518     dstr->sv_debug_optype = sstr->sv_debug_optype;
13519     dstr->sv_debug_line = sstr->sv_debug_line;
13520     dstr->sv_debug_inpad = sstr->sv_debug_inpad;
13521     dstr->sv_debug_parent = (SV*)sstr;
13522     FREE_SV_DEBUG_FILE(dstr);
13523     dstr->sv_debug_file = savesharedpv(sstr->sv_debug_file);
13524 #endif
13525
13526     ptr_table_store(PL_ptr_table, sstr, dstr);
13527
13528     /* clone */
13529     SvFLAGS(dstr)       = SvFLAGS(sstr);
13530     SvFLAGS(dstr)       &= ~SVf_OOK;            /* don't propagate OOK hack */
13531     SvREFCNT(dstr)      = 0;                    /* must be before any other dups! */
13532
13533 #ifdef DEBUGGING
13534     if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
13535         PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
13536                       (void*)PL_watch_pvx, SvPVX_const(sstr));
13537 #endif
13538
13539     /* don't clone objects whose class has asked us not to */
13540     if (SvOBJECT(sstr)
13541      && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE))
13542     {
13543         SvFLAGS(dstr) = 0;
13544         return dstr;
13545     }
13546
13547     switch (SvTYPE(sstr)) {
13548     case SVt_NULL:
13549         SvANY(dstr)     = NULL;
13550         break;
13551     case SVt_IV:
13552         SET_SVANY_FOR_BODYLESS_IV(dstr);
13553         if(SvROK(sstr)) {
13554             Perl_rvpv_dup(aTHX_ dstr, sstr, param);
13555         } else {
13556             SvIV_set(dstr, SvIVX(sstr));
13557         }
13558         break;
13559     case SVt_NV:
13560 #if NVSIZE <= IVSIZE
13561         SET_SVANY_FOR_BODYLESS_NV(dstr);
13562 #else
13563         SvANY(dstr)     = new_XNV();
13564 #endif
13565         SvNV_set(dstr, SvNVX(sstr));
13566         break;
13567     default:
13568         {
13569             /* These are all the types that need complex bodies allocating.  */
13570             void *new_body;
13571             const svtype sv_type = SvTYPE(sstr);
13572             const struct body_details *const sv_type_details
13573                 = bodies_by_type + sv_type;
13574
13575             switch (sv_type) {
13576             default:
13577                 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
13578                 break;
13579
13580             case SVt_PVGV:
13581             case SVt_PVIO:
13582             case SVt_PVFM:
13583             case SVt_PVHV:
13584             case SVt_PVAV:
13585             case SVt_PVCV:
13586             case SVt_PVLV:
13587             case SVt_REGEXP:
13588             case SVt_PVMG:
13589             case SVt_PVNV:
13590             case SVt_PVIV:
13591             case SVt_INVLIST:
13592             case SVt_PV:
13593                 assert(sv_type_details->body_size);
13594                 if (sv_type_details->arena) {
13595                     new_body_inline(new_body, sv_type);
13596                     new_body
13597                         = (void*)((char*)new_body - sv_type_details->offset);
13598                 } else {
13599                     new_body = new_NOARENA(sv_type_details);
13600                 }
13601             }
13602             assert(new_body);
13603             SvANY(dstr) = new_body;
13604
13605 #ifndef PURIFY
13606             Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
13607                  ((char*)SvANY(dstr)) + sv_type_details->offset,
13608                  sv_type_details->copy, char);
13609 #else
13610             Copy(((char*)SvANY(sstr)),
13611                  ((char*)SvANY(dstr)),
13612                  sv_type_details->body_size + sv_type_details->offset, char);
13613 #endif
13614
13615             if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
13616                 && !isGV_with_GP(dstr)
13617                 && !isREGEXP(dstr)
13618                 && !(sv_type == SVt_PVIO && !(IoFLAGS(dstr) & IOf_FAKE_DIRP)))
13619                 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
13620
13621             /* The Copy above means that all the source (unduplicated) pointers
13622                are now in the destination.  We can check the flags and the
13623                pointers in either, but it's possible that there's less cache
13624                missing by always going for the destination.
13625                FIXME - instrument and check that assumption  */
13626             if (sv_type >= SVt_PVMG) {
13627                 if (SvMAGIC(dstr))
13628                     SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
13629                 if (SvOBJECT(dstr) && SvSTASH(dstr))
13630                     SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
13631                 else SvSTASH_set(dstr, 0); /* don't copy DESTROY cache */
13632             }
13633
13634             /* The cast silences a GCC warning about unhandled types.  */
13635             switch ((int)sv_type) {
13636             case SVt_PV:
13637                 break;
13638             case SVt_PVIV:
13639                 break;
13640             case SVt_PVNV:
13641                 break;
13642             case SVt_PVMG:
13643                 break;
13644             case SVt_REGEXP:
13645               duprex:
13646                 /* FIXME for plugins */
13647                 dstr->sv_u.svu_rx = ((REGEXP *)dstr)->sv_any;
13648                 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
13649                 break;
13650             case SVt_PVLV:
13651                 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
13652                 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
13653                     LvTARG(dstr) = dstr;
13654                 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
13655                     LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
13656                 else
13657                     LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
13658                 if (isREGEXP(sstr)) goto duprex;
13659             case SVt_PVGV:
13660                 /* non-GP case already handled above */
13661                 if(isGV_with_GP(sstr)) {
13662                     GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
13663                     /* Don't call sv_add_backref here as it's going to be
13664                        created as part of the magic cloning of the symbol
13665                        table--unless this is during a join and the stash
13666                        is not actually being cloned.  */
13667                     /* Danger Will Robinson - GvGP(dstr) isn't initialised
13668                        at the point of this comment.  */
13669                     GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
13670                     if (param->flags & CLONEf_JOIN_IN)
13671                         Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
13672                     GvGP_set(dstr, gp_dup(GvGP(sstr), param));
13673                     (void)GpREFCNT_inc(GvGP(dstr));
13674                 }
13675                 break;
13676             case SVt_PVIO:
13677                 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
13678                 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
13679                     /* I have no idea why fake dirp (rsfps)
13680                        should be treated differently but otherwise
13681                        we end up with leaks -- sky*/
13682                     IoTOP_GV(dstr)      = gv_dup_inc(IoTOP_GV(dstr), param);
13683                     IoFMT_GV(dstr)      = gv_dup_inc(IoFMT_GV(dstr), param);
13684                     IoBOTTOM_GV(dstr)   = gv_dup_inc(IoBOTTOM_GV(dstr), param);
13685                 } else {
13686                     IoTOP_GV(dstr)      = gv_dup(IoTOP_GV(dstr), param);
13687                     IoFMT_GV(dstr)      = gv_dup(IoFMT_GV(dstr), param);
13688                     IoBOTTOM_GV(dstr)   = gv_dup(IoBOTTOM_GV(dstr), param);
13689                     if (IoDIRP(dstr)) {
13690                         IoDIRP(dstr)    = dirp_dup(IoDIRP(dstr), param);
13691                     } else {
13692                         NOOP;
13693                         /* IoDIRP(dstr) is already a copy of IoDIRP(sstr)  */
13694                     }
13695                     IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(dstr), param);
13696                 }
13697                 if (IoOFP(dstr) == IoIFP(sstr))
13698                     IoOFP(dstr) = IoIFP(dstr);
13699                 else
13700                     IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
13701                 IoTOP_NAME(dstr)        = SAVEPV(IoTOP_NAME(dstr));
13702                 IoFMT_NAME(dstr)        = SAVEPV(IoFMT_NAME(dstr));
13703                 IoBOTTOM_NAME(dstr)     = SAVEPV(IoBOTTOM_NAME(dstr));
13704                 break;
13705             case SVt_PVAV:
13706                 /* avoid cloning an empty array */
13707                 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
13708                     SV **dst_ary, **src_ary;
13709                     SSize_t items = AvFILLp((const AV *)sstr) + 1;
13710
13711                     src_ary = AvARRAY((const AV *)sstr);
13712                     Newxz(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
13713                     ptr_table_store(PL_ptr_table, src_ary, dst_ary);
13714                     AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
13715                     AvALLOC((const AV *)dstr) = dst_ary;
13716                     if (AvREAL((const AV *)sstr)) {
13717                         dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
13718                                                       param);
13719                     }
13720                     else {
13721                         while (items-- > 0)
13722                             *dst_ary++ = sv_dup(*src_ary++, param);
13723                     }
13724                     items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
13725                     while (items-- > 0) {
13726                         *dst_ary++ = NULL;
13727                     }
13728                 }
13729                 else {
13730                     AvARRAY(MUTABLE_AV(dstr))   = NULL;
13731                     AvALLOC((const AV *)dstr)   = (SV**)NULL;
13732                     AvMAX(  (const AV *)dstr)   = -1;
13733                     AvFILLp((const AV *)dstr)   = -1;
13734                 }
13735                 break;
13736             case SVt_PVHV:
13737                 if (HvARRAY((const HV *)sstr)) {
13738                     STRLEN i = 0;
13739                     const bool sharekeys = !!HvSHAREKEYS(sstr);
13740                     XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
13741                     XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
13742                     char *darray;
13743                     Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
13744                         + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
13745                         char);
13746                     HvARRAY(dstr) = (HE**)darray;
13747                     while (i <= sxhv->xhv_max) {
13748                         const HE * const source = HvARRAY(sstr)[i];
13749                         HvARRAY(dstr)[i] = source
13750                             ? he_dup(source, sharekeys, param) : 0;
13751                         ++i;
13752                     }
13753                     if (SvOOK(sstr)) {
13754                         const struct xpvhv_aux * const saux = HvAUX(sstr);
13755                         struct xpvhv_aux * const daux = HvAUX(dstr);
13756                         /* This flag isn't copied.  */
13757                         SvOOK_on(dstr);
13758
13759                         if (saux->xhv_name_count) {
13760                             HEK ** const sname = saux->xhv_name_u.xhvnameu_names;
13761                             const I32 count
13762                              = saux->xhv_name_count < 0
13763                                 ? -saux->xhv_name_count
13764                                 :  saux->xhv_name_count;
13765                             HEK **shekp = sname + count;
13766                             HEK **dhekp;
13767                             Newx(daux->xhv_name_u.xhvnameu_names, count, HEK *);
13768                             dhekp = daux->xhv_name_u.xhvnameu_names + count;
13769                             while (shekp-- > sname) {
13770                                 dhekp--;
13771                                 *dhekp = hek_dup(*shekp, param);
13772                             }
13773                         }
13774                         else {
13775                             daux->xhv_name_u.xhvnameu_name
13776                                 = hek_dup(saux->xhv_name_u.xhvnameu_name,
13777                                           param);
13778                         }
13779                         daux->xhv_name_count = saux->xhv_name_count;
13780
13781                         daux->xhv_fill_lazy = saux->xhv_fill_lazy;
13782                         daux->xhv_aux_flags = saux->xhv_aux_flags;
13783 #ifdef PERL_HASH_RANDOMIZE_KEYS
13784                         daux->xhv_rand = saux->xhv_rand;
13785                         daux->xhv_last_rand = saux->xhv_last_rand;
13786 #endif
13787                         daux->xhv_riter = saux->xhv_riter;
13788                         daux->xhv_eiter = saux->xhv_eiter
13789                             ? he_dup(saux->xhv_eiter,
13790                                         cBOOL(HvSHAREKEYS(sstr)), param) : 0;
13791                         /* backref array needs refcnt=2; see sv_add_backref */
13792                         daux->xhv_backreferences =
13793                             (param->flags & CLONEf_JOIN_IN)
13794                                 /* when joining, we let the individual GVs and
13795                                  * CVs add themselves to backref as
13796                                  * needed. This avoids pulling in stuff
13797                                  * that isn't required, and simplifies the
13798                                  * case where stashes aren't cloned back
13799                                  * if they already exist in the parent
13800                                  * thread */
13801                             ? NULL
13802                             : saux->xhv_backreferences
13803                                 ? (SvTYPE(saux->xhv_backreferences) == SVt_PVAV)
13804                                     ? MUTABLE_AV(SvREFCNT_inc(
13805                                           sv_dup_inc((const SV *)
13806                                             saux->xhv_backreferences, param)))
13807                                     : MUTABLE_AV(sv_dup((const SV *)
13808                                             saux->xhv_backreferences, param))
13809                                 : 0;
13810
13811                         daux->xhv_mro_meta = saux->xhv_mro_meta
13812                             ? mro_meta_dup(saux->xhv_mro_meta, param)
13813                             : 0;
13814
13815                         /* Record stashes for possible cloning in Perl_clone(). */
13816                         if (HvNAME(sstr))
13817                             av_push(param->stashes, dstr);
13818                     }
13819                 }
13820                 else
13821                     HvARRAY(MUTABLE_HV(dstr)) = NULL;
13822                 break;
13823             case SVt_PVCV:
13824                 if (!(param->flags & CLONEf_COPY_STACKS)) {
13825                     CvDEPTH(dstr) = 0;
13826                 }
13827                 /* FALLTHROUGH */
13828             case SVt_PVFM:
13829                 /* NOTE: not refcounted */
13830                 SvANY(MUTABLE_CV(dstr))->xcv_stash =
13831                     hv_dup(CvSTASH(dstr), param);
13832                 if ((param->flags & CLONEf_JOIN_IN) && CvSTASH(dstr))
13833                     Perl_sv_add_backref(aTHX_ MUTABLE_SV(CvSTASH(dstr)), dstr);
13834                 if (!CvISXSUB(dstr)) {
13835                     OP_REFCNT_LOCK;
13836                     CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
13837                     OP_REFCNT_UNLOCK;
13838                     CvSLABBED_off(dstr);
13839                 } else if (CvCONST(dstr)) {
13840                     CvXSUBANY(dstr).any_ptr =
13841                         sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
13842                 }
13843                 assert(!CvSLABBED(dstr));
13844                 if (CvDYNFILE(dstr)) CvFILE(dstr) = SAVEPV(CvFILE(dstr));
13845                 if (CvNAMED(dstr))
13846                     SvANY((CV *)dstr)->xcv_gv_u.xcv_hek =
13847                         hek_dup(CvNAME_HEK((CV *)sstr), param);
13848                 /* don't dup if copying back - CvGV isn't refcounted, so the
13849                  * duped GV may never be freed. A bit of a hack! DAPM */
13850                 else
13851                   SvANY(MUTABLE_CV(dstr))->xcv_gv_u.xcv_gv =
13852                     CvCVGV_RC(dstr)
13853                     ? gv_dup_inc(CvGV(sstr), param)
13854                     : (param->flags & CLONEf_JOIN_IN)
13855                         ? NULL
13856                         : gv_dup(CvGV(sstr), param);
13857
13858                 if (!CvISXSUB(sstr)) {
13859                     PADLIST * padlist = CvPADLIST(sstr);
13860                     if(padlist)
13861                         padlist = padlist_dup(padlist, param);
13862                     CvPADLIST_set(dstr, padlist);
13863                 } else
13864 /* unthreaded perl can't sv_dup so we dont support unthreaded's CvHSCXT */
13865                     PoisonPADLIST(dstr);
13866
13867                 CvOUTSIDE(dstr) =
13868                     CvWEAKOUTSIDE(sstr)
13869                     ? cv_dup(    CvOUTSIDE(dstr), param)
13870                     : cv_dup_inc(CvOUTSIDE(dstr), param);
13871                 break;
13872             }
13873         }
13874     }
13875
13876     return dstr;
13877  }
13878
13879 SV *
13880 Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
13881 {
13882     PERL_ARGS_ASSERT_SV_DUP_INC;
13883     return sstr ? SvREFCNT_inc(sv_dup_common(sstr, param)) : NULL;
13884 }
13885
13886 SV *
13887 Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
13888 {
13889     SV *dstr = sstr ? sv_dup_common(sstr, param) : NULL;
13890     PERL_ARGS_ASSERT_SV_DUP;
13891
13892     /* Track every SV that (at least initially) had a reference count of 0.
13893        We need to do this by holding an actual reference to it in this array.
13894        If we attempt to cheat, turn AvREAL_off(), and store only pointers
13895        (akin to the stashes hash, and the perl stack), we come unstuck if
13896        a weak reference (or other SV legitimately SvREFCNT() == 0 for this
13897        thread) is manipulated in a CLONE method, because CLONE runs before the
13898        unreferenced array is walked to find SVs still with SvREFCNT() == 0
13899        (and fix things up by giving each a reference via the temps stack).
13900        Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and
13901        then SvREFCNT_dec(), it will be cleaned up (and added to the free list)
13902        before the walk of unreferenced happens and a reference to that is SV
13903        added to the temps stack. At which point we have the same SV considered
13904        to be in use, and free to be re-used. Not good.
13905     */
13906     if (dstr && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dstr)) {
13907         assert(param->unreferenced);
13908         av_push(param->unreferenced, SvREFCNT_inc(dstr));
13909     }
13910
13911     return dstr;
13912 }
13913
13914 /* duplicate a context */
13915
13916 PERL_CONTEXT *
13917 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
13918 {
13919     PERL_CONTEXT *ncxs;
13920
13921     PERL_ARGS_ASSERT_CX_DUP;
13922
13923     if (!cxs)
13924         return (PERL_CONTEXT*)NULL;
13925
13926     /* look for it in the table first */
13927     ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
13928     if (ncxs)
13929         return ncxs;
13930
13931     /* create anew and remember what it is */
13932     Newx(ncxs, max + 1, PERL_CONTEXT);
13933     ptr_table_store(PL_ptr_table, cxs, ncxs);
13934     Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
13935
13936     while (ix >= 0) {
13937         PERL_CONTEXT * const ncx = &ncxs[ix];
13938         if (CxTYPE(ncx) == CXt_SUBST) {
13939             Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
13940         }
13941         else {
13942             ncx->blk_oldcop = (COP*)any_dup(ncx->blk_oldcop, param->proto_perl);
13943             switch (CxTYPE(ncx)) {
13944             case CXt_SUB:
13945                 ncx->blk_sub.cv         = cv_dup_inc(ncx->blk_sub.cv, param);
13946                 if(CxHASARGS(ncx)){
13947                     ncx->blk_sub.savearray = av_dup_inc(ncx->blk_sub.savearray,param);
13948                 } else {
13949                     ncx->blk_sub.savearray = NULL;
13950                 }
13951                 ncx->blk_sub.prevcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
13952                                            ncx->blk_sub.prevcomppad);
13953                 break;
13954             case CXt_EVAL:
13955                 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
13956                                                       param);
13957                 ncx->blk_eval.cur_text  = sv_dup(ncx->blk_eval.cur_text, param);
13958                 ncx->blk_eval.cv = cv_dup(ncx->blk_eval.cv, param);
13959                 break;
13960             case CXt_LOOP_LAZYSV:
13961                 ncx->blk_loop.state_u.lazysv.end
13962                     = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
13963                 /* Fallthrough: duplicate lazysv.cur by using the ary.ary
13964                    duplication code instead.
13965                    We are taking advantage of (1) av_dup_inc and sv_dup_inc
13966                    actually being the same function, and (2) order
13967                    equivalence of the two unions.
13968                    We can assert the later [but only at run time :-(]  */
13969                 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
13970                         (void *) &ncx->blk_loop.state_u.lazysv.cur);
13971                 /* FALLTHROUGH */
13972             case CXt_LOOP_FOR:
13973                 ncx->blk_loop.state_u.ary.ary
13974                     = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
13975                 /* FALLTHROUGH */
13976             case CXt_LOOP_LAZYIV:
13977             case CXt_LOOP_PLAIN:
13978                 /* code common to all CXt_LOOP_* types */
13979                 if (CxPADLOOP(ncx)) {
13980                     PADOFFSET off = ncx->blk_loop.itervar_u.svp
13981                                     - &CX_CURPAD_SV(ncx->blk_loop, 0);
13982                     ncx->blk_loop.oldcomppad =
13983                                     (PAD*)ptr_table_fetch(PL_ptr_table,
13984                                                 ncx->blk_loop.oldcomppad);
13985                     ncx->blk_loop.itervar_u.svp =
13986                                     &CX_CURPAD_SV(ncx->blk_loop, off);
13987
13988                 }
13989                 else {
13990                     ncx->blk_loop.itervar_u.gv
13991                         = gv_dup((const GV *)ncx->blk_loop.itervar_u.gv,
13992                                     param);
13993                 }
13994                 break;
13995             case CXt_FORMAT:
13996                 ncx->blk_format.cv      = cv_dup(ncx->blk_format.cv, param);
13997                 ncx->blk_format.gv      = gv_dup(ncx->blk_format.gv, param);
13998                 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
13999                                                      param);
14000                 break;
14001             case CXt_BLOCK:
14002             case CXt_NULL:
14003             case CXt_WHEN:
14004             case CXt_GIVEN:
14005                 break;
14006             }
14007         }
14008         --ix;
14009     }
14010     return ncxs;
14011 }
14012
14013 /* duplicate a stack info structure */
14014
14015 PERL_SI *
14016 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
14017 {
14018     PERL_SI *nsi;
14019
14020     PERL_ARGS_ASSERT_SI_DUP;
14021
14022     if (!si)
14023         return (PERL_SI*)NULL;
14024
14025     /* look for it in the table first */
14026     nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
14027     if (nsi)
14028         return nsi;
14029
14030     /* create anew and remember what it is */
14031     Newxz(nsi, 1, PERL_SI);
14032     ptr_table_store(PL_ptr_table, si, nsi);
14033
14034     nsi->si_stack       = av_dup_inc(si->si_stack, param);
14035     nsi->si_cxix        = si->si_cxix;
14036     nsi->si_cxmax       = si->si_cxmax;
14037     nsi->si_cxstack     = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
14038     nsi->si_type        = si->si_type;
14039     nsi->si_prev        = si_dup(si->si_prev, param);
14040     nsi->si_next        = si_dup(si->si_next, param);
14041     nsi->si_markoff     = si->si_markoff;
14042
14043     return nsi;
14044 }
14045
14046 #define POPINT(ss,ix)   ((ss)[--(ix)].any_i32)
14047 #define TOPINT(ss,ix)   ((ss)[ix].any_i32)
14048 #define POPLONG(ss,ix)  ((ss)[--(ix)].any_long)
14049 #define TOPLONG(ss,ix)  ((ss)[ix].any_long)
14050 #define POPIV(ss,ix)    ((ss)[--(ix)].any_iv)
14051 #define TOPIV(ss,ix)    ((ss)[ix].any_iv)
14052 #define POPUV(ss,ix)    ((ss)[--(ix)].any_uv)
14053 #define TOPUV(ss,ix)    ((ss)[ix].any_uv)
14054 #define POPBOOL(ss,ix)  ((ss)[--(ix)].any_bool)
14055 #define TOPBOOL(ss,ix)  ((ss)[ix].any_bool)
14056 #define POPPTR(ss,ix)   ((ss)[--(ix)].any_ptr)
14057 #define TOPPTR(ss,ix)   ((ss)[ix].any_ptr)
14058 #define POPDPTR(ss,ix)  ((ss)[--(ix)].any_dptr)
14059 #define TOPDPTR(ss,ix)  ((ss)[ix].any_dptr)
14060 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
14061 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
14062
14063 /* XXXXX todo */
14064 #define pv_dup_inc(p)   SAVEPV(p)
14065 #define pv_dup(p)       SAVEPV(p)
14066 #define svp_dup_inc(p,pp)       any_dup(p,pp)
14067
14068 /* map any object to the new equivent - either something in the
14069  * ptr table, or something in the interpreter structure
14070  */
14071
14072 void *
14073 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
14074 {
14075     void *ret;
14076
14077     PERL_ARGS_ASSERT_ANY_DUP;
14078
14079     if (!v)
14080         return (void*)NULL;
14081
14082     /* look for it in the table first */
14083     ret = ptr_table_fetch(PL_ptr_table, v);
14084     if (ret)
14085         return ret;
14086
14087     /* see if it is part of the interpreter structure */
14088     if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
14089         ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
14090     else {
14091         ret = v;
14092     }
14093
14094     return ret;
14095 }
14096
14097 /* duplicate the save stack */
14098
14099 ANY *
14100 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
14101 {
14102     dVAR;
14103     ANY * const ss      = proto_perl->Isavestack;
14104     const I32 max       = proto_perl->Isavestack_max;
14105     I32 ix              = proto_perl->Isavestack_ix;
14106     ANY *nss;
14107     const SV *sv;
14108     const GV *gv;
14109     const AV *av;
14110     const HV *hv;
14111     void* ptr;
14112     int intval;
14113     long longval;
14114     GP *gp;
14115     IV iv;
14116     I32 i;
14117     char *c = NULL;
14118     void (*dptr) (void*);
14119     void (*dxptr) (pTHX_ void*);
14120
14121     PERL_ARGS_ASSERT_SS_DUP;
14122
14123     Newxz(nss, max, ANY);
14124
14125     while (ix > 0) {
14126         const UV uv = POPUV(ss,ix);
14127         const U8 type = (U8)uv & SAVE_MASK;
14128
14129         TOPUV(nss,ix) = uv;
14130         switch (type) {
14131         case SAVEt_CLEARSV:
14132         case SAVEt_CLEARPADRANGE:
14133             break;
14134         case SAVEt_HELEM:               /* hash element */
14135         case SAVEt_SV:                  /* scalar reference */
14136             sv = (const SV *)POPPTR(ss,ix);
14137             TOPPTR(nss,ix) = SvREFCNT_inc(sv_dup_inc(sv, param));
14138             /* FALLTHROUGH */
14139         case SAVEt_ITEM:                        /* normal string */
14140         case SAVEt_GVSV:                        /* scalar slot in GV */
14141             sv = (const SV *)POPPTR(ss,ix);
14142             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14143             if (type == SAVEt_SV)
14144                 break;
14145             /* FALLTHROUGH */
14146         case SAVEt_FREESV:
14147         case SAVEt_MORTALIZESV:
14148         case SAVEt_READONLY_OFF:
14149             sv = (const SV *)POPPTR(ss,ix);
14150             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14151             break;
14152         case SAVEt_FREEPADNAME:
14153             ptr = POPPTR(ss,ix);
14154             TOPPTR(nss,ix) = padname_dup((PADNAME *)ptr, param);
14155             PadnameREFCNT((PADNAME *)TOPPTR(nss,ix))++;
14156             break;
14157         case SAVEt_SHARED_PVREF:                /* char* in shared space */
14158             c = (char*)POPPTR(ss,ix);
14159             TOPPTR(nss,ix) = savesharedpv(c);
14160             ptr = POPPTR(ss,ix);
14161             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14162             break;
14163         case SAVEt_GENERIC_SVREF:               /* generic sv */
14164         case SAVEt_SVREF:                       /* scalar reference */
14165             sv = (const SV *)POPPTR(ss,ix);
14166             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14167             if (type == SAVEt_SVREF)
14168                 SvREFCNT_inc_simple_void((SV *)TOPPTR(nss,ix));
14169             ptr = POPPTR(ss,ix);
14170             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
14171             break;
14172         case SAVEt_GVSLOT:              /* any slot in GV */
14173             sv = (const SV *)POPPTR(ss,ix);
14174             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14175             ptr = POPPTR(ss,ix);
14176             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
14177             sv = (const SV *)POPPTR(ss,ix);
14178             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14179             break;
14180         case SAVEt_HV:                          /* hash reference */
14181         case SAVEt_AV:                          /* array reference */
14182             sv = (const SV *) POPPTR(ss,ix);
14183             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14184             /* FALLTHROUGH */
14185         case SAVEt_COMPPAD:
14186         case SAVEt_NSTAB:
14187             sv = (const SV *) POPPTR(ss,ix);
14188             TOPPTR(nss,ix) = sv_dup(sv, param);
14189             break;
14190         case SAVEt_INT:                         /* int reference */
14191             ptr = POPPTR(ss,ix);
14192             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14193             intval = (int)POPINT(ss,ix);
14194             TOPINT(nss,ix) = intval;
14195             break;
14196         case SAVEt_LONG:                        /* long reference */
14197             ptr = POPPTR(ss,ix);
14198             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14199             longval = (long)POPLONG(ss,ix);
14200             TOPLONG(nss,ix) = longval;
14201             break;
14202         case SAVEt_I32:                         /* I32 reference */
14203             ptr = POPPTR(ss,ix);
14204             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14205             i = POPINT(ss,ix);
14206             TOPINT(nss,ix) = i;
14207             break;
14208         case SAVEt_IV:                          /* IV reference */
14209         case SAVEt_STRLEN:                      /* STRLEN/size_t ref */
14210             ptr = POPPTR(ss,ix);
14211             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14212             iv = POPIV(ss,ix);
14213             TOPIV(nss,ix) = iv;
14214             break;
14215         case SAVEt_HPTR:                        /* HV* reference */
14216         case SAVEt_APTR:                        /* AV* reference */
14217         case SAVEt_SPTR:                        /* SV* reference */
14218             ptr = POPPTR(ss,ix);
14219             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14220             sv = (const SV *)POPPTR(ss,ix);
14221             TOPPTR(nss,ix) = sv_dup(sv, param);
14222             break;
14223         case SAVEt_VPTR:                        /* random* reference */
14224             ptr = POPPTR(ss,ix);
14225             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14226             /* FALLTHROUGH */
14227         case SAVEt_INT_SMALL:
14228         case SAVEt_I32_SMALL:
14229         case SAVEt_I16:                         /* I16 reference */
14230         case SAVEt_I8:                          /* I8 reference */
14231         case SAVEt_BOOL:
14232             ptr = POPPTR(ss,ix);
14233             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14234             break;
14235         case SAVEt_GENERIC_PVREF:               /* generic char* */
14236         case SAVEt_PPTR:                        /* char* reference */
14237             ptr = POPPTR(ss,ix);
14238             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14239             c = (char*)POPPTR(ss,ix);
14240             TOPPTR(nss,ix) = pv_dup(c);
14241             break;
14242         case SAVEt_GP:                          /* scalar reference */
14243             gp = (GP*)POPPTR(ss,ix);
14244             TOPPTR(nss,ix) = gp = gp_dup(gp, param);
14245             (void)GpREFCNT_inc(gp);
14246             gv = (const GV *)POPPTR(ss,ix);
14247             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
14248             break;
14249         case SAVEt_FREEOP:
14250             ptr = POPPTR(ss,ix);
14251             if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
14252                 /* these are assumed to be refcounted properly */
14253                 OP *o;
14254                 switch (((OP*)ptr)->op_type) {
14255                 case OP_LEAVESUB:
14256                 case OP_LEAVESUBLV:
14257                 case OP_LEAVEEVAL:
14258                 case OP_LEAVE:
14259                 case OP_SCOPE:
14260                 case OP_LEAVEWRITE:
14261                     TOPPTR(nss,ix) = ptr;
14262                     o = (OP*)ptr;
14263                     OP_REFCNT_LOCK;
14264                     (void) OpREFCNT_inc(o);
14265                     OP_REFCNT_UNLOCK;
14266                     break;
14267                 default:
14268                     TOPPTR(nss,ix) = NULL;
14269                     break;
14270                 }
14271             }
14272             else
14273                 TOPPTR(nss,ix) = NULL;
14274             break;
14275         case SAVEt_FREECOPHH:
14276             ptr = POPPTR(ss,ix);
14277             TOPPTR(nss,ix) = cophh_copy((COPHH *)ptr);
14278             break;
14279         case SAVEt_ADELETE:
14280             av = (const AV *)POPPTR(ss,ix);
14281             TOPPTR(nss,ix) = av_dup_inc(av, param);
14282             i = POPINT(ss,ix);
14283             TOPINT(nss,ix) = i;
14284             break;
14285         case SAVEt_DELETE:
14286             hv = (const HV *)POPPTR(ss,ix);
14287             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
14288             i = POPINT(ss,ix);
14289             TOPINT(nss,ix) = i;
14290             /* FALLTHROUGH */
14291         case SAVEt_FREEPV:
14292             c = (char*)POPPTR(ss,ix);
14293             TOPPTR(nss,ix) = pv_dup_inc(c);
14294             break;
14295         case SAVEt_STACK_POS:           /* Position on Perl stack */
14296             i = POPINT(ss,ix);
14297             TOPINT(nss,ix) = i;
14298             break;
14299         case SAVEt_DESTRUCTOR:
14300             ptr = POPPTR(ss,ix);
14301             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
14302             dptr = POPDPTR(ss,ix);
14303             TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
14304                                         any_dup(FPTR2DPTR(void *, dptr),
14305                                                 proto_perl));
14306             break;
14307         case SAVEt_DESTRUCTOR_X:
14308             ptr = POPPTR(ss,ix);
14309             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
14310             dxptr = POPDXPTR(ss,ix);
14311             TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
14312                                          any_dup(FPTR2DPTR(void *, dxptr),
14313                                                  proto_perl));
14314             break;
14315         case SAVEt_REGCONTEXT:
14316         case SAVEt_ALLOC:
14317             ix -= uv >> SAVE_TIGHT_SHIFT;
14318             break;
14319         case SAVEt_AELEM:               /* array element */
14320             sv = (const SV *)POPPTR(ss,ix);
14321             TOPPTR(nss,ix) = SvREFCNT_inc(sv_dup_inc(sv, param));
14322             i = POPINT(ss,ix);
14323             TOPINT(nss,ix) = i;
14324             av = (const AV *)POPPTR(ss,ix);
14325             TOPPTR(nss,ix) = av_dup_inc(av, param);
14326             break;
14327         case SAVEt_OP:
14328             ptr = POPPTR(ss,ix);
14329             TOPPTR(nss,ix) = ptr;
14330             break;
14331         case SAVEt_HINTS:
14332             ptr = POPPTR(ss,ix);
14333             ptr = cophh_copy((COPHH*)ptr);
14334             TOPPTR(nss,ix) = ptr;
14335             i = POPINT(ss,ix);
14336             TOPINT(nss,ix) = i;
14337             if (i & HINT_LOCALIZE_HH) {
14338                 hv = (const HV *)POPPTR(ss,ix);
14339                 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
14340             }
14341             break;
14342         case SAVEt_PADSV_AND_MORTALIZE:
14343             longval = (long)POPLONG(ss,ix);
14344             TOPLONG(nss,ix) = longval;
14345             ptr = POPPTR(ss,ix);
14346             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14347             sv = (const SV *)POPPTR(ss,ix);
14348             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14349             break;
14350         case SAVEt_SET_SVFLAGS:
14351             i = POPINT(ss,ix);
14352             TOPINT(nss,ix) = i;
14353             i = POPINT(ss,ix);
14354             TOPINT(nss,ix) = i;
14355             sv = (const SV *)POPPTR(ss,ix);
14356             TOPPTR(nss,ix) = sv_dup(sv, param);
14357             break;
14358         case SAVEt_COMPILE_WARNINGS:
14359             ptr = POPPTR(ss,ix);
14360             TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
14361             break;
14362         case SAVEt_PARSER:
14363             ptr = POPPTR(ss,ix);
14364             TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
14365             break;
14366         default:
14367             Perl_croak(aTHX_
14368                        "panic: ss_dup inconsistency (%"IVdf")", (IV) type);
14369         }
14370     }
14371
14372     return nss;
14373 }
14374
14375
14376 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
14377  * flag to the result. This is done for each stash before cloning starts,
14378  * so we know which stashes want their objects cloned */
14379
14380 static void
14381 do_mark_cloneable_stash(pTHX_ SV *const sv)
14382 {
14383     const HEK * const hvname = HvNAME_HEK((const HV *)sv);
14384     if (hvname) {
14385         GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
14386         SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
14387         if (cloner && GvCV(cloner)) {
14388             dSP;
14389             UV status;
14390
14391             ENTER;
14392             SAVETMPS;
14393             PUSHMARK(SP);
14394             mXPUSHs(newSVhek(hvname));
14395             PUTBACK;
14396             call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
14397             SPAGAIN;
14398             status = POPu;
14399             PUTBACK;
14400             FREETMPS;
14401             LEAVE;
14402             if (status)
14403                 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
14404         }
14405     }
14406 }
14407
14408
14409
14410 /*
14411 =for apidoc perl_clone
14412
14413 Create and return a new interpreter by cloning the current one.
14414
14415 C<perl_clone> takes these flags as parameters:
14416
14417 C<CLONEf_COPY_STACKS> - is used to, well, copy the stacks also,
14418 without it we only clone the data and zero the stacks,
14419 with it we copy the stacks and the new perl interpreter is
14420 ready to run at the exact same point as the previous one.
14421 The pseudo-fork code uses C<COPY_STACKS> while the
14422 threads->create doesn't.
14423
14424 C<CLONEf_KEEP_PTR_TABLE> -
14425 C<perl_clone> keeps a ptr_table with the pointer of the old
14426 variable as a key and the new variable as a value,
14427 this allows it to check if something has been cloned and not
14428 clone it again but rather just use the value and increase the
14429 refcount.  If C<KEEP_PTR_TABLE> is not set then C<perl_clone> will kill
14430 the ptr_table using the function
14431 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
14432 reason to keep it around is if you want to dup some of your own
14433 variable who are outside the graph perl scans, an example of this
14434 code is in F<threads.xs> create.
14435
14436 C<CLONEf_CLONE_HOST> -
14437 This is a win32 thing, it is ignored on unix, it tells perls
14438 win32host code (which is c++) to clone itself, this is needed on
14439 win32 if you want to run two threads at the same time,
14440 if you just want to do some stuff in a separate perl interpreter
14441 and then throw it away and return to the original one,
14442 you don't need to do anything.
14443
14444 =cut
14445 */
14446
14447 /* XXX the above needs expanding by someone who actually understands it ! */
14448 EXTERN_C PerlInterpreter *
14449 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
14450
14451 PerlInterpreter *
14452 perl_clone(PerlInterpreter *proto_perl, UV flags)
14453 {
14454    dVAR;
14455 #ifdef PERL_IMPLICIT_SYS
14456
14457     PERL_ARGS_ASSERT_PERL_CLONE;
14458
14459    /* perlhost.h so we need to call into it
14460    to clone the host, CPerlHost should have a c interface, sky */
14461
14462 #ifndef __amigaos4__
14463    if (flags & CLONEf_CLONE_HOST) {
14464        return perl_clone_host(proto_perl,flags);
14465    }
14466 #endif
14467    return perl_clone_using(proto_perl, flags,
14468                             proto_perl->IMem,
14469                             proto_perl->IMemShared,
14470                             proto_perl->IMemParse,
14471                             proto_perl->IEnv,
14472                             proto_perl->IStdIO,
14473                             proto_perl->ILIO,
14474                             proto_perl->IDir,
14475                             proto_perl->ISock,
14476                             proto_perl->IProc);
14477 }
14478
14479 PerlInterpreter *
14480 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
14481                  struct IPerlMem* ipM, struct IPerlMem* ipMS,
14482                  struct IPerlMem* ipMP, struct IPerlEnv* ipE,
14483                  struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
14484                  struct IPerlDir* ipD, struct IPerlSock* ipS,
14485                  struct IPerlProc* ipP)
14486 {
14487     /* XXX many of the string copies here can be optimized if they're
14488      * constants; they need to be allocated as common memory and just
14489      * their pointers copied. */
14490
14491     IV i;
14492     CLONE_PARAMS clone_params;
14493     CLONE_PARAMS* const param = &clone_params;
14494
14495     PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
14496
14497     PERL_ARGS_ASSERT_PERL_CLONE_USING;
14498 #else           /* !PERL_IMPLICIT_SYS */
14499     IV i;
14500     CLONE_PARAMS clone_params;
14501     CLONE_PARAMS* param = &clone_params;
14502     PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
14503
14504     PERL_ARGS_ASSERT_PERL_CLONE;
14505 #endif          /* PERL_IMPLICIT_SYS */
14506
14507     /* for each stash, determine whether its objects should be cloned */
14508     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
14509     PERL_SET_THX(my_perl);
14510
14511 #ifdef DEBUGGING
14512     PoisonNew(my_perl, 1, PerlInterpreter);
14513     PL_op = NULL;
14514     PL_curcop = NULL;
14515     PL_defstash = NULL; /* may be used by perl malloc() */
14516     PL_markstack = 0;
14517     PL_scopestack = 0;
14518     PL_scopestack_name = 0;
14519     PL_savestack = 0;
14520     PL_savestack_ix = 0;
14521     PL_savestack_max = -1;
14522     PL_sig_pending = 0;
14523     PL_parser = NULL;
14524     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
14525     Zero(&PL_padname_undef, 1, PADNAME);
14526     Zero(&PL_padname_const, 1, PADNAME);
14527 #  ifdef DEBUG_LEAKING_SCALARS
14528     PL_sv_serial = (((UV)my_perl >> 2) & 0xfff) * 1000000;
14529 #  endif
14530 #  ifdef PERL_TRACE_OPS
14531     Zero(PL_op_exec_cnt, OP_max+2, UV);
14532 #  endif
14533 #else   /* !DEBUGGING */
14534     Zero(my_perl, 1, PerlInterpreter);
14535 #endif  /* DEBUGGING */
14536
14537 #ifdef PERL_IMPLICIT_SYS
14538     /* host pointers */
14539     PL_Mem              = ipM;
14540     PL_MemShared        = ipMS;
14541     PL_MemParse         = ipMP;
14542     PL_Env              = ipE;
14543     PL_StdIO            = ipStd;
14544     PL_LIO              = ipLIO;
14545     PL_Dir              = ipD;
14546     PL_Sock             = ipS;
14547     PL_Proc             = ipP;
14548 #endif          /* PERL_IMPLICIT_SYS */
14549
14550
14551     param->flags = flags;
14552     /* Nothing in the core code uses this, but we make it available to
14553        extensions (using mg_dup).  */
14554     param->proto_perl = proto_perl;
14555     /* Likely nothing will use this, but it is initialised to be consistent
14556        with Perl_clone_params_new().  */
14557     param->new_perl = my_perl;
14558     param->unreferenced = NULL;
14559
14560
14561     INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
14562
14563     PL_body_arenas = NULL;
14564     Zero(&PL_body_roots, 1, PL_body_roots);
14565     
14566     PL_sv_count         = 0;
14567     PL_sv_root          = NULL;
14568     PL_sv_arenaroot     = NULL;
14569
14570     PL_debug            = proto_perl->Idebug;
14571
14572     /* dbargs array probably holds garbage */
14573     PL_dbargs           = NULL;
14574
14575     PL_compiling = proto_perl->Icompiling;
14576
14577     /* pseudo environmental stuff */
14578     PL_origargc         = proto_perl->Iorigargc;
14579     PL_origargv         = proto_perl->Iorigargv;
14580
14581 #ifndef NO_TAINT_SUPPORT
14582     /* Set tainting stuff before PerlIO_debug can possibly get called */
14583     PL_tainting         = proto_perl->Itainting;
14584     PL_taint_warn       = proto_perl->Itaint_warn;
14585 #else
14586     PL_tainting         = FALSE;
14587     PL_taint_warn       = FALSE;
14588 #endif
14589
14590     PL_minus_c          = proto_perl->Iminus_c;
14591
14592     PL_localpatches     = proto_perl->Ilocalpatches;
14593     PL_splitstr         = proto_perl->Isplitstr;
14594     PL_minus_n          = proto_perl->Iminus_n;
14595     PL_minus_p          = proto_perl->Iminus_p;
14596     PL_minus_l          = proto_perl->Iminus_l;
14597     PL_minus_a          = proto_perl->Iminus_a;
14598     PL_minus_E          = proto_perl->Iminus_E;
14599     PL_minus_F          = proto_perl->Iminus_F;
14600     PL_doswitches       = proto_perl->Idoswitches;
14601     PL_dowarn           = proto_perl->Idowarn;
14602 #ifdef PERL_SAWAMPERSAND
14603     PL_sawampersand     = proto_perl->Isawampersand;
14604 #endif
14605     PL_unsafe           = proto_perl->Iunsafe;
14606     PL_perldb           = proto_perl->Iperldb;
14607     PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
14608     PL_exit_flags       = proto_perl->Iexit_flags;
14609
14610     /* XXX time(&PL_basetime) when asked for? */
14611     PL_basetime         = proto_perl->Ibasetime;
14612
14613     PL_maxsysfd         = proto_perl->Imaxsysfd;
14614     PL_statusvalue      = proto_perl->Istatusvalue;
14615 #ifdef __VMS
14616     PL_statusvalue_vms  = proto_perl->Istatusvalue_vms;
14617 #else
14618     PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
14619 #endif
14620
14621     /* RE engine related */
14622     PL_regmatch_slab    = NULL;
14623     PL_reg_curpm        = NULL;
14624
14625     PL_sub_generation   = proto_perl->Isub_generation;
14626
14627     /* funky return mechanisms */
14628     PL_forkprocess      = proto_perl->Iforkprocess;
14629
14630     /* internal state */
14631     PL_maxo             = proto_perl->Imaxo;
14632
14633     PL_main_start       = proto_perl->Imain_start;
14634     PL_eval_root        = proto_perl->Ieval_root;
14635     PL_eval_start       = proto_perl->Ieval_start;
14636
14637     PL_filemode         = proto_perl->Ifilemode;
14638     PL_lastfd           = proto_perl->Ilastfd;
14639     PL_oldname          = proto_perl->Ioldname;         /* XXX not quite right */
14640     PL_Argv             = NULL;
14641     PL_Cmd              = NULL;
14642     PL_gensym           = proto_perl->Igensym;
14643
14644     PL_laststatval      = proto_perl->Ilaststatval;
14645     PL_laststype        = proto_perl->Ilaststype;
14646     PL_mess_sv          = NULL;
14647
14648     PL_profiledata      = NULL;
14649
14650     PL_generation       = proto_perl->Igeneration;
14651
14652     PL_in_clean_objs    = proto_perl->Iin_clean_objs;
14653     PL_in_clean_all     = proto_perl->Iin_clean_all;
14654
14655     PL_delaymagic_uid   = proto_perl->Idelaymagic_uid;
14656     PL_delaymagic_euid  = proto_perl->Idelaymagic_euid;
14657     PL_delaymagic_gid   = proto_perl->Idelaymagic_gid;
14658     PL_delaymagic_egid  = proto_perl->Idelaymagic_egid;
14659     PL_nomemok          = proto_perl->Inomemok;
14660     PL_an               = proto_perl->Ian;
14661     PL_evalseq          = proto_perl->Ievalseq;
14662     PL_origenviron      = proto_perl->Iorigenviron;     /* XXX not quite right */
14663     PL_origalen         = proto_perl->Iorigalen;
14664
14665     PL_sighandlerp      = proto_perl->Isighandlerp;
14666
14667     PL_runops           = proto_perl->Irunops;
14668
14669     PL_subline          = proto_perl->Isubline;
14670
14671     PL_cv_has_eval      = proto_perl->Icv_has_eval;
14672
14673 #ifdef FCRYPT
14674     PL_cryptseen        = proto_perl->Icryptseen;
14675 #endif
14676
14677 #ifdef USE_LOCALE_COLLATE
14678     PL_collation_ix     = proto_perl->Icollation_ix;
14679     PL_collation_standard       = proto_perl->Icollation_standard;
14680     PL_collxfrm_base    = proto_perl->Icollxfrm_base;
14681     PL_collxfrm_mult    = proto_perl->Icollxfrm_mult;
14682 #endif /* USE_LOCALE_COLLATE */
14683
14684 #ifdef USE_LOCALE_NUMERIC
14685     PL_numeric_standard = proto_perl->Inumeric_standard;
14686     PL_numeric_local    = proto_perl->Inumeric_local;
14687 #endif /* !USE_LOCALE_NUMERIC */
14688
14689     /* Did the locale setup indicate UTF-8? */
14690     PL_utf8locale       = proto_perl->Iutf8locale;
14691     PL_in_utf8_CTYPE_locale = proto_perl->Iin_utf8_CTYPE_locale;
14692     /* Unicode features (see perlrun/-C) */
14693     PL_unicode          = proto_perl->Iunicode;
14694
14695     /* Pre-5.8 signals control */
14696     PL_signals          = proto_perl->Isignals;
14697
14698     /* times() ticks per second */
14699     PL_clocktick        = proto_perl->Iclocktick;
14700
14701     /* Recursion stopper for PerlIO_find_layer */
14702     PL_in_load_module   = proto_perl->Iin_load_module;
14703
14704     /* sort() routine */
14705     PL_sort_RealCmp     = proto_perl->Isort_RealCmp;
14706
14707     /* Not really needed/useful since the reenrant_retint is "volatile",
14708      * but do it for consistency's sake. */
14709     PL_reentrant_retint = proto_perl->Ireentrant_retint;
14710
14711     /* Hooks to shared SVs and locks. */
14712     PL_sharehook        = proto_perl->Isharehook;
14713     PL_lockhook         = proto_perl->Ilockhook;
14714     PL_unlockhook       = proto_perl->Iunlockhook;
14715     PL_threadhook       = proto_perl->Ithreadhook;
14716     PL_destroyhook      = proto_perl->Idestroyhook;
14717     PL_signalhook       = proto_perl->Isignalhook;
14718
14719     PL_globhook         = proto_perl->Iglobhook;
14720
14721     /* swatch cache */
14722     PL_last_swash_hv    = NULL; /* reinits on demand */
14723     PL_last_swash_klen  = 0;
14724     PL_last_swash_key[0]= '\0';
14725     PL_last_swash_tmps  = (U8*)NULL;
14726     PL_last_swash_slen  = 0;
14727
14728     PL_srand_called     = proto_perl->Isrand_called;
14729     Copy(&(proto_perl->Irandom_state), &PL_random_state, 1, PL_RANDOM_STATE_TYPE);
14730
14731     if (flags & CLONEf_COPY_STACKS) {
14732         /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
14733         PL_tmps_ix              = proto_perl->Itmps_ix;
14734         PL_tmps_max             = proto_perl->Itmps_max;
14735         PL_tmps_floor           = proto_perl->Itmps_floor;
14736
14737         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
14738          * NOTE: unlike the others! */
14739         PL_scopestack_ix        = proto_perl->Iscopestack_ix;
14740         PL_scopestack_max       = proto_perl->Iscopestack_max;
14741
14742         /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
14743          * NOTE: unlike the others! */
14744         PL_savestack_ix         = proto_perl->Isavestack_ix;
14745         PL_savestack_max        = proto_perl->Isavestack_max;
14746     }
14747
14748     PL_start_env        = proto_perl->Istart_env;       /* XXXXXX */
14749     PL_top_env          = &PL_start_env;
14750
14751     PL_op               = proto_perl->Iop;
14752
14753     PL_Sv               = NULL;
14754     PL_Xpv              = (XPV*)NULL;
14755     my_perl->Ina        = proto_perl->Ina;
14756
14757     PL_statbuf          = proto_perl->Istatbuf;
14758     PL_statcache        = proto_perl->Istatcache;
14759
14760 #ifndef NO_TAINT_SUPPORT
14761     PL_tainted          = proto_perl->Itainted;
14762 #else
14763     PL_tainted          = FALSE;
14764 #endif
14765     PL_curpm            = proto_perl->Icurpm;   /* XXX No PMOP ref count */
14766
14767     PL_chopset          = proto_perl->Ichopset; /* XXX never deallocated */
14768
14769     PL_restartjmpenv    = proto_perl->Irestartjmpenv;
14770     PL_restartop        = proto_perl->Irestartop;
14771     PL_in_eval          = proto_perl->Iin_eval;
14772     PL_delaymagic       = proto_perl->Idelaymagic;
14773     PL_phase            = proto_perl->Iphase;
14774     PL_localizing       = proto_perl->Ilocalizing;
14775
14776     PL_hv_fetch_ent_mh  = NULL;
14777     PL_modcount         = proto_perl->Imodcount;
14778     PL_lastgotoprobe    = NULL;
14779     PL_dumpindent       = proto_perl->Idumpindent;
14780
14781     PL_efloatbuf        = NULL;         /* reinits on demand */
14782     PL_efloatsize       = 0;                    /* reinits on demand */
14783
14784     /* regex stuff */
14785
14786     PL_colorset         = 0;            /* reinits PL_colors[] */
14787     /*PL_colors[6]      = {0,0,0,0,0,0};*/
14788
14789     /* Pluggable optimizer */
14790     PL_peepp            = proto_perl->Ipeepp;
14791     PL_rpeepp           = proto_perl->Irpeepp;
14792     /* op_free() hook */
14793     PL_opfreehook       = proto_perl->Iopfreehook;
14794
14795 #ifdef USE_REENTRANT_API
14796     /* XXX: things like -Dm will segfault here in perlio, but doing
14797      *  PERL_SET_CONTEXT(proto_perl);
14798      * breaks too many other things
14799      */
14800     Perl_reentrant_init(aTHX);
14801 #endif
14802
14803     /* create SV map for pointer relocation */
14804     PL_ptr_table = ptr_table_new();
14805
14806     /* initialize these special pointers as early as possible */
14807     init_constants();
14808     ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
14809     ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
14810     ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
14811     ptr_table_store(PL_ptr_table, &proto_perl->Ipadname_const,
14812                     &PL_padname_const);
14813
14814     /* create (a non-shared!) shared string table */
14815     PL_strtab           = newHV();
14816     HvSHAREKEYS_off(PL_strtab);
14817     hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
14818     ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
14819
14820     Zero(PL_sv_consts, SV_CONSTS_COUNT, SV*);
14821
14822     /* This PV will be free'd special way so must set it same way op.c does */
14823     PL_compiling.cop_file    = savesharedpv(PL_compiling.cop_file);
14824     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
14825
14826     ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
14827     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
14828     CopHINTHASH_set(&PL_compiling, cophh_copy(CopHINTHASH_get(&PL_compiling)));
14829     PL_curcop           = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
14830
14831     param->stashes      = newAV();  /* Setup array of objects to call clone on */
14832     /* This makes no difference to the implementation, as it always pushes
14833        and shifts pointers to other SVs without changing their reference
14834        count, with the array becoming empty before it is freed. However, it
14835        makes it conceptually clear what is going on, and will avoid some
14836        work inside av.c, filling slots between AvFILL() and AvMAX() with
14837        &PL_sv_undef, and SvREFCNT_dec()ing those.  */
14838     AvREAL_off(param->stashes);
14839
14840     if (!(flags & CLONEf_COPY_STACKS)) {
14841         param->unreferenced = newAV();
14842     }
14843
14844 #ifdef PERLIO_LAYERS
14845     /* Clone PerlIO tables as soon as we can handle general xx_dup() */
14846     PerlIO_clone(aTHX_ proto_perl, param);
14847 #endif
14848
14849     PL_envgv            = gv_dup_inc(proto_perl->Ienvgv, param);
14850     PL_incgv            = gv_dup_inc(proto_perl->Iincgv, param);
14851     PL_hintgv           = gv_dup_inc(proto_perl->Ihintgv, param);
14852     PL_origfilename     = SAVEPV(proto_perl->Iorigfilename);
14853     PL_xsubfilename     = proto_perl->Ixsubfilename;
14854     PL_diehook          = sv_dup_inc(proto_perl->Idiehook, param);
14855     PL_warnhook         = sv_dup_inc(proto_perl->Iwarnhook, param);
14856
14857     /* switches */
14858     PL_patchlevel       = sv_dup_inc(proto_perl->Ipatchlevel, param);
14859     PL_inplace          = SAVEPV(proto_perl->Iinplace);
14860     PL_e_script         = sv_dup_inc(proto_perl->Ie_script, param);
14861
14862     /* magical thingies */
14863
14864     PL_encoding         = sv_dup(proto_perl->Iencoding, param);
14865     PL_lex_encoding     = sv_dup(proto_perl->Ilex_encoding, param);
14866
14867     sv_setpvs(PERL_DEBUG_PAD(0), "");   /* For regex debugging. */
14868     sv_setpvs(PERL_DEBUG_PAD(1), "");   /* ext/re needs these */
14869     sv_setpvs(PERL_DEBUG_PAD(2), "");   /* even without DEBUGGING. */
14870
14871    
14872     /* Clone the regex array */
14873     /* ORANGE FIXME for plugins, probably in the SV dup code.
14874        newSViv(PTR2IV(CALLREGDUPE(
14875        INT2PTR(REGEXP *, SvIVX(regex)), param))))
14876     */
14877     PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
14878     PL_regex_pad = AvARRAY(PL_regex_padav);
14879
14880     PL_stashpadmax      = proto_perl->Istashpadmax;
14881     PL_stashpadix       = proto_perl->Istashpadix ;
14882     Newx(PL_stashpad, PL_stashpadmax, HV *);
14883     {
14884         PADOFFSET o = 0;
14885         for (; o < PL_stashpadmax; ++o)
14886             PL_stashpad[o] = hv_dup(proto_perl->Istashpad[o], param);
14887     }
14888
14889     /* shortcuts to various I/O objects */
14890     PL_ofsgv            = gv_dup_inc(proto_perl->Iofsgv, param);
14891     PL_stdingv          = gv_dup(proto_perl->Istdingv, param);
14892     PL_stderrgv         = gv_dup(proto_perl->Istderrgv, param);
14893     PL_defgv            = gv_dup(proto_perl->Idefgv, param);
14894     PL_argvgv           = gv_dup_inc(proto_perl->Iargvgv, param);
14895     PL_argvoutgv        = gv_dup(proto_perl->Iargvoutgv, param);
14896     PL_argvout_stack    = av_dup_inc(proto_perl->Iargvout_stack, param);
14897
14898     /* shortcuts to regexp stuff */
14899     PL_replgv           = gv_dup_inc(proto_perl->Ireplgv, param);
14900
14901     /* shortcuts to misc objects */
14902     PL_errgv            = gv_dup(proto_perl->Ierrgv, param);
14903
14904     /* shortcuts to debugging objects */
14905     PL_DBgv             = gv_dup_inc(proto_perl->IDBgv, param);
14906     PL_DBline           = gv_dup_inc(proto_perl->IDBline, param);
14907     PL_DBsub            = gv_dup_inc(proto_perl->IDBsub, param);
14908     PL_DBsingle         = sv_dup(proto_perl->IDBsingle, param);
14909     PL_DBtrace          = sv_dup(proto_perl->IDBtrace, param);
14910     PL_DBsignal         = sv_dup(proto_perl->IDBsignal, param);
14911     Copy(proto_perl->IDBcontrol, PL_DBcontrol, DBVARMG_COUNT, IV);
14912
14913     /* symbol tables */
14914     PL_defstash         = hv_dup_inc(proto_perl->Idefstash, param);
14915     PL_curstash         = hv_dup_inc(proto_perl->Icurstash, param);
14916     PL_debstash         = hv_dup(proto_perl->Idebstash, param);
14917     PL_globalstash      = hv_dup(proto_perl->Iglobalstash, param);
14918     PL_curstname        = sv_dup_inc(proto_perl->Icurstname, param);
14919
14920     PL_beginav          = av_dup_inc(proto_perl->Ibeginav, param);
14921     PL_beginav_save     = av_dup_inc(proto_perl->Ibeginav_save, param);
14922     PL_checkav_save     = av_dup_inc(proto_perl->Icheckav_save, param);
14923     PL_unitcheckav      = av_dup_inc(proto_perl->Iunitcheckav, param);
14924     PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
14925     PL_endav            = av_dup_inc(proto_perl->Iendav, param);
14926     PL_checkav          = av_dup_inc(proto_perl->Icheckav, param);
14927     PL_initav           = av_dup_inc(proto_perl->Iinitav, param);
14928     PL_savebegin        = proto_perl->Isavebegin;
14929
14930     PL_isarev           = hv_dup_inc(proto_perl->Iisarev, param);
14931
14932     /* subprocess state */
14933     PL_fdpid            = av_dup_inc(proto_perl->Ifdpid, param);
14934
14935     if (proto_perl->Iop_mask)
14936         PL_op_mask      = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
14937     else
14938         PL_op_mask      = NULL;
14939     /* PL_asserting        = proto_perl->Iasserting; */
14940
14941     /* current interpreter roots */
14942     PL_main_cv          = cv_dup_inc(proto_perl->Imain_cv, param);
14943     OP_REFCNT_LOCK;
14944     PL_main_root        = OpREFCNT_inc(proto_perl->Imain_root);
14945     OP_REFCNT_UNLOCK;
14946
14947     /* runtime control stuff */
14948     PL_curcopdb         = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
14949
14950     PL_preambleav       = av_dup_inc(proto_perl->Ipreambleav, param);
14951
14952     PL_ors_sv           = sv_dup_inc(proto_perl->Iors_sv, param);
14953
14954     /* interpreter atexit processing */
14955     PL_exitlistlen      = proto_perl->Iexitlistlen;
14956     if (PL_exitlistlen) {
14957         Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
14958         Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
14959     }
14960     else
14961         PL_exitlist     = (PerlExitListEntry*)NULL;
14962
14963     PL_my_cxt_size = proto_perl->Imy_cxt_size;
14964     if (PL_my_cxt_size) {
14965         Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
14966         Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
14967 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
14968         Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
14969         Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
14970 #endif
14971     }
14972     else {
14973         PL_my_cxt_list  = (void**)NULL;
14974 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
14975         PL_my_cxt_keys  = (const char**)NULL;
14976 #endif
14977     }
14978     PL_modglobal        = hv_dup_inc(proto_perl->Imodglobal, param);
14979     PL_custom_op_names  = hv_dup_inc(proto_perl->Icustom_op_names,param);
14980     PL_custom_op_descs  = hv_dup_inc(proto_perl->Icustom_op_descs,param);
14981     PL_custom_ops       = hv_dup_inc(proto_perl->Icustom_ops, param);
14982
14983     PL_compcv                   = cv_dup(proto_perl->Icompcv, param);
14984
14985     PAD_CLONE_VARS(proto_perl, param);
14986
14987 #ifdef HAVE_INTERP_INTERN
14988     sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
14989 #endif
14990
14991     PL_DBcv             = cv_dup(proto_perl->IDBcv, param);
14992
14993 #ifdef PERL_USES_PL_PIDSTATUS
14994     PL_pidstatus        = newHV();                      /* XXX flag for cloning? */
14995 #endif
14996     PL_osname           = SAVEPV(proto_perl->Iosname);
14997     PL_parser           = parser_dup(proto_perl->Iparser, param);
14998
14999     /* XXX this only works if the saved cop has already been cloned */
15000     if (proto_perl->Iparser) {
15001         PL_parser->saved_curcop = (COP*)any_dup(
15002                                     proto_perl->Iparser->saved_curcop,
15003                                     proto_perl);
15004     }
15005
15006     PL_subname          = sv_dup_inc(proto_perl->Isubname, param);
15007
15008 #ifdef USE_LOCALE_CTYPE
15009     /* Should we warn if uses locale? */
15010     PL_warn_locale      = sv_dup_inc(proto_perl->Iwarn_locale, param);
15011 #endif
15012
15013 #ifdef USE_LOCALE_COLLATE
15014     PL_collation_name   = SAVEPV(proto_perl->Icollation_name);
15015 #endif /* USE_LOCALE_COLLATE */
15016
15017 #ifdef USE_LOCALE_NUMERIC
15018     PL_numeric_name     = SAVEPV(proto_perl->Inumeric_name);
15019     PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
15020 #endif /* !USE_LOCALE_NUMERIC */
15021
15022     /* Unicode inversion lists */
15023     PL_Latin1           = sv_dup_inc(proto_perl->ILatin1, param);
15024     PL_UpperLatin1      = sv_dup_inc(proto_perl->IUpperLatin1, param);
15025     PL_AboveLatin1      = sv_dup_inc(proto_perl->IAboveLatin1, param);
15026     PL_InBitmap         = sv_dup_inc(proto_perl->IInBitmap, param);
15027
15028     PL_NonL1NonFinalFold = sv_dup_inc(proto_perl->INonL1NonFinalFold, param);
15029     PL_HasMultiCharFold = sv_dup_inc(proto_perl->IHasMultiCharFold, param);
15030
15031     /* utf8 character class swashes */
15032     for (i = 0; i < POSIX_SWASH_COUNT; i++) {
15033         PL_utf8_swash_ptrs[i] = sv_dup_inc(proto_perl->Iutf8_swash_ptrs[i], param);
15034     }
15035     for (i = 0; i < POSIX_CC_COUNT; i++) {
15036         PL_XPosix_ptrs[i] = sv_dup_inc(proto_perl->IXPosix_ptrs[i], param);
15037     }
15038     PL_GCB_invlist = sv_dup_inc(proto_perl->IGCB_invlist, param);
15039     PL_SB_invlist = sv_dup_inc(proto_perl->ISB_invlist, param);
15040     PL_WB_invlist = sv_dup_inc(proto_perl->IWB_invlist, param);
15041     PL_utf8_mark        = sv_dup_inc(proto_perl->Iutf8_mark, param);
15042     PL_utf8_toupper     = sv_dup_inc(proto_perl->Iutf8_toupper, param);
15043     PL_utf8_totitle     = sv_dup_inc(proto_perl->Iutf8_totitle, param);
15044     PL_utf8_tolower     = sv_dup_inc(proto_perl->Iutf8_tolower, param);
15045     PL_utf8_tofold      = sv_dup_inc(proto_perl->Iutf8_tofold, param);
15046     PL_utf8_idstart     = sv_dup_inc(proto_perl->Iutf8_idstart, param);
15047     PL_utf8_xidstart    = sv_dup_inc(proto_perl->Iutf8_xidstart, param);
15048     PL_utf8_perl_idstart = sv_dup_inc(proto_perl->Iutf8_perl_idstart, param);
15049     PL_utf8_perl_idcont = sv_dup_inc(proto_perl->Iutf8_perl_idcont, param);
15050     PL_utf8_idcont      = sv_dup_inc(proto_perl->Iutf8_idcont, param);
15051     PL_utf8_xidcont     = sv_dup_inc(proto_perl->Iutf8_xidcont, param);
15052     PL_utf8_foldable    = sv_dup_inc(proto_perl->Iutf8_foldable, param);
15053     PL_utf8_charname_begin = sv_dup_inc(proto_perl->Iutf8_charname_begin, param);
15054     PL_utf8_charname_continue = sv_dup_inc(proto_perl->Iutf8_charname_continue, param);
15055
15056     if (proto_perl->Ipsig_pend) {
15057         Newxz(PL_psig_pend, SIG_SIZE, int);
15058     }
15059     else {
15060         PL_psig_pend    = (int*)NULL;
15061     }
15062
15063     if (proto_perl->Ipsig_name) {
15064         Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
15065         sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
15066                             param);
15067         PL_psig_ptr = PL_psig_name + SIG_SIZE;
15068     }
15069     else {
15070         PL_psig_ptr     = (SV**)NULL;
15071         PL_psig_name    = (SV**)NULL;
15072     }
15073
15074     if (flags & CLONEf_COPY_STACKS) {
15075         Newx(PL_tmps_stack, PL_tmps_max, SV*);
15076         sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
15077                             PL_tmps_ix+1, param);
15078
15079         /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
15080         i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
15081         Newxz(PL_markstack, i, I32);
15082         PL_markstack_max        = PL_markstack + (proto_perl->Imarkstack_max
15083                                                   - proto_perl->Imarkstack);
15084         PL_markstack_ptr        = PL_markstack + (proto_perl->Imarkstack_ptr
15085                                                   - proto_perl->Imarkstack);
15086         Copy(proto_perl->Imarkstack, PL_markstack,
15087              PL_markstack_ptr - PL_markstack + 1, I32);
15088
15089         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
15090          * NOTE: unlike the others! */
15091         Newxz(PL_scopestack, PL_scopestack_max, I32);
15092         Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
15093
15094 #ifdef DEBUGGING
15095         Newxz(PL_scopestack_name, PL_scopestack_max, const char *);
15096         Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
15097 #endif
15098         /* reset stack AV to correct length before its duped via
15099          * PL_curstackinfo */
15100         AvFILLp(proto_perl->Icurstack) =
15101                             proto_perl->Istack_sp - proto_perl->Istack_base;
15102
15103         /* NOTE: si_dup() looks at PL_markstack */
15104         PL_curstackinfo         = si_dup(proto_perl->Icurstackinfo, param);
15105
15106         /* PL_curstack          = PL_curstackinfo->si_stack; */
15107         PL_curstack             = av_dup(proto_perl->Icurstack, param);
15108         PL_mainstack            = av_dup(proto_perl->Imainstack, param);
15109
15110         /* next PUSHs() etc. set *(PL_stack_sp+1) */
15111         PL_stack_base           = AvARRAY(PL_curstack);
15112         PL_stack_sp             = PL_stack_base + (proto_perl->Istack_sp
15113                                                    - proto_perl->Istack_base);
15114         PL_stack_max            = PL_stack_base + AvMAX(PL_curstack);
15115
15116         /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
15117         PL_savestack            = ss_dup(proto_perl, param);
15118     }
15119     else {
15120         init_stacks();
15121         ENTER;                  /* perl_destruct() wants to LEAVE; */
15122     }
15123
15124     PL_statgv           = gv_dup(proto_perl->Istatgv, param);
15125     PL_statname         = sv_dup_inc(proto_perl->Istatname, param);
15126
15127     PL_rs               = sv_dup_inc(proto_perl->Irs, param);
15128     PL_last_in_gv       = gv_dup(proto_perl->Ilast_in_gv, param);
15129     PL_defoutgv         = gv_dup_inc(proto_perl->Idefoutgv, param);
15130     PL_toptarget        = sv_dup_inc(proto_perl->Itoptarget, param);
15131     PL_bodytarget       = sv_dup_inc(proto_perl->Ibodytarget, param);
15132     PL_formtarget       = sv_dup(proto_perl->Iformtarget, param);
15133
15134     PL_errors           = sv_dup_inc(proto_perl->Ierrors, param);
15135
15136     PL_sortcop          = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
15137     PL_firstgv          = gv_dup_inc(proto_perl->Ifirstgv, param);
15138     PL_secondgv         = gv_dup_inc(proto_perl->Isecondgv, param);
15139
15140     PL_stashcache       = newHV();
15141
15142     PL_watchaddr        = (char **) ptr_table_fetch(PL_ptr_table,
15143                                             proto_perl->Iwatchaddr);
15144     PL_watchok          = PL_watchaddr ? * PL_watchaddr : NULL;
15145     if (PL_debug && PL_watchaddr) {
15146         PerlIO_printf(Perl_debug_log,
15147           "WATCHING: %"UVxf" cloned as %"UVxf" with value %"UVxf"\n",
15148           PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
15149           PTR2UV(PL_watchok));
15150     }
15151
15152     PL_registered_mros  = hv_dup_inc(proto_perl->Iregistered_mros, param);
15153     PL_blockhooks       = av_dup_inc(proto_perl->Iblockhooks, param);
15154     PL_utf8_foldclosures = hv_dup_inc(proto_perl->Iutf8_foldclosures, param);
15155
15156     /* Call the ->CLONE method, if it exists, for each of the stashes
15157        identified by sv_dup() above.
15158     */
15159     while(av_tindex(param->stashes) != -1) {
15160         HV* const stash = MUTABLE_HV(av_shift(param->stashes));
15161         GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
15162         if (cloner && GvCV(cloner)) {
15163             dSP;
15164             ENTER;
15165             SAVETMPS;
15166             PUSHMARK(SP);
15167             mXPUSHs(newSVhek(HvNAME_HEK(stash)));
15168             PUTBACK;
15169             call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
15170             FREETMPS;
15171             LEAVE;
15172         }
15173     }
15174
15175     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
15176         ptr_table_free(PL_ptr_table);
15177         PL_ptr_table = NULL;
15178     }
15179
15180     if (!(flags & CLONEf_COPY_STACKS)) {
15181         unreferenced_to_tmp_stack(param->unreferenced);
15182     }
15183
15184     SvREFCNT_dec(param->stashes);
15185
15186     /* orphaned? eg threads->new inside BEGIN or use */
15187     if (PL_compcv && ! SvREFCNT(PL_compcv)) {
15188         SvREFCNT_inc_simple_void(PL_compcv);
15189         SAVEFREESV(PL_compcv);
15190     }
15191
15192     return my_perl;
15193 }
15194
15195 static void
15196 S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
15197 {
15198     PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK;
15199     
15200     if (AvFILLp(unreferenced) > -1) {
15201         SV **svp = AvARRAY(unreferenced);
15202         SV **const last = svp + AvFILLp(unreferenced);
15203         SSize_t count = 0;
15204
15205         do {
15206             if (SvREFCNT(*svp) == 1)
15207                 ++count;
15208         } while (++svp <= last);
15209
15210         EXTEND_MORTAL(count);
15211         svp = AvARRAY(unreferenced);
15212
15213         do {
15214             if (SvREFCNT(*svp) == 1) {
15215                 /* Our reference is the only one to this SV. This means that
15216                    in this thread, the scalar effectively has a 0 reference.
15217                    That doesn't work (cleanup never happens), so donate our
15218                    reference to it onto the save stack. */
15219                 PL_tmps_stack[++PL_tmps_ix] = *svp;
15220             } else {
15221                 /* As an optimisation, because we are already walking the
15222                    entire array, instead of above doing either
15223                    SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead
15224                    release our reference to the scalar, so that at the end of
15225                    the array owns zero references to the scalars it happens to
15226                    point to. We are effectively converting the array from
15227                    AvREAL() on to AvREAL() off. This saves the av_clear()
15228                    (triggered by the SvREFCNT_dec(unreferenced) below) from
15229                    walking the array a second time.  */
15230                 SvREFCNT_dec(*svp);
15231             }
15232
15233         } while (++svp <= last);
15234         AvREAL_off(unreferenced);
15235     }
15236     SvREFCNT_dec_NN(unreferenced);
15237 }
15238
15239 void
15240 Perl_clone_params_del(CLONE_PARAMS *param)
15241 {
15242     /* This seemingly funky ordering keeps the build with PERL_GLOBAL_STRUCT
15243        happy: */
15244     PerlInterpreter *const to = param->new_perl;
15245     dTHXa(to);
15246     PerlInterpreter *const was = PERL_GET_THX;
15247
15248     PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
15249
15250     if (was != to) {
15251         PERL_SET_THX(to);
15252     }
15253
15254     SvREFCNT_dec(param->stashes);
15255     if (param->unreferenced)
15256         unreferenced_to_tmp_stack(param->unreferenced);
15257
15258     Safefree(param);
15259
15260     if (was != to) {
15261         PERL_SET_THX(was);
15262     }
15263 }
15264
15265 CLONE_PARAMS *
15266 Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
15267 {
15268     dVAR;
15269     /* Need to play this game, as newAV() can call safesysmalloc(), and that
15270        does a dTHX; to get the context from thread local storage.
15271        FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
15272        a version that passes in my_perl.  */
15273     PerlInterpreter *const was = PERL_GET_THX;
15274     CLONE_PARAMS *param;
15275
15276     PERL_ARGS_ASSERT_CLONE_PARAMS_NEW;
15277
15278     if (was != to) {
15279         PERL_SET_THX(to);
15280     }
15281
15282     /* Given that we've set the context, we can do this unshared.  */
15283     Newx(param, 1, CLONE_PARAMS);
15284
15285     param->flags = 0;
15286     param->proto_perl = from;
15287     param->new_perl = to;
15288     param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV);
15289     AvREAL_off(param->stashes);
15290     param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV);
15291
15292     if (was != to) {
15293         PERL_SET_THX(was);
15294     }
15295     return param;
15296 }
15297
15298 #endif /* USE_ITHREADS */
15299
15300 void
15301 Perl_init_constants(pTHX)
15302 {
15303     SvREFCNT(&PL_sv_undef)      = SvREFCNT_IMMORTAL;
15304     SvFLAGS(&PL_sv_undef)       = SVf_READONLY|SVf_PROTECT|SVt_NULL;
15305     SvANY(&PL_sv_undef)         = NULL;
15306
15307     SvANY(&PL_sv_no)            = new_XPVNV();
15308     SvREFCNT(&PL_sv_no)         = SvREFCNT_IMMORTAL;
15309     SvFLAGS(&PL_sv_no)          = SVt_PVNV|SVf_READONLY|SVf_PROTECT
15310                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
15311                                   |SVp_POK|SVf_POK;
15312
15313     SvANY(&PL_sv_yes)           = new_XPVNV();
15314     SvREFCNT(&PL_sv_yes)        = SvREFCNT_IMMORTAL;
15315     SvFLAGS(&PL_sv_yes)         = SVt_PVNV|SVf_READONLY|SVf_PROTECT
15316                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
15317                                   |SVp_POK|SVf_POK;
15318
15319     SvPV_set(&PL_sv_no, (char*)PL_No);
15320     SvCUR_set(&PL_sv_no, 0);
15321     SvLEN_set(&PL_sv_no, 0);
15322     SvIV_set(&PL_sv_no, 0);
15323     SvNV_set(&PL_sv_no, 0);
15324
15325     SvPV_set(&PL_sv_yes, (char*)PL_Yes);
15326     SvCUR_set(&PL_sv_yes, 1);
15327     SvLEN_set(&PL_sv_yes, 0);
15328     SvIV_set(&PL_sv_yes, 1);
15329     SvNV_set(&PL_sv_yes, 1);
15330
15331     PadnamePV(&PL_padname_const) = (char *)PL_No;
15332 }
15333
15334 /*
15335 =head1 Unicode Support
15336
15337 =for apidoc sv_recode_to_utf8
15338
15339 C<encoding> is assumed to be an C<Encode> object, on entry the PV
15340 of C<sv> is assumed to be octets in that encoding, and C<sv>
15341 will be converted into Unicode (and UTF-8).
15342
15343 If C<sv> already is UTF-8 (or if it is not C<POK>), or if C<encoding>
15344 is not a reference, nothing is done to C<sv>.  If C<encoding> is not
15345 an C<Encode::XS> Encoding object, bad things will happen.
15346 (See F<cpan/Encode/encoding.pm> and L<Encode>.)
15347
15348 The PV of C<sv> is returned.
15349
15350 =cut */
15351
15352 char *
15353 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
15354 {
15355     PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
15356
15357     if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
15358         SV *uni;
15359         STRLEN len;
15360         const char *s;
15361         dSP;
15362         SV *nsv = sv;
15363         ENTER;
15364         PUSHSTACK;
15365         SAVETMPS;
15366         if (SvPADTMP(nsv)) {
15367             nsv = sv_newmortal();
15368             SvSetSV_nosteal(nsv, sv);
15369         }
15370         save_re_context();
15371         PUSHMARK(sp);
15372         EXTEND(SP, 3);
15373         PUSHs(encoding);
15374         PUSHs(nsv);
15375 /*
15376   NI-S 2002/07/09
15377   Passing sv_yes is wrong - it needs to be or'ed set of constants
15378   for Encode::XS, while UTf-8 decode (currently) assumes a true value means
15379   remove converted chars from source.
15380
15381   Both will default the value - let them.
15382
15383         XPUSHs(&PL_sv_yes);
15384 */
15385         PUTBACK;
15386         call_method("decode", G_SCALAR);
15387         SPAGAIN;
15388         uni = POPs;
15389         PUTBACK;
15390         s = SvPV_const(uni, len);
15391         if (s != SvPVX_const(sv)) {
15392             SvGROW(sv, len + 1);
15393             Move(s, SvPVX(sv), len + 1, char);
15394             SvCUR_set(sv, len);
15395         }
15396         FREETMPS;
15397         POPSTACK;
15398         LEAVE;
15399         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
15400             /* clear pos and any utf8 cache */
15401             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
15402             if (mg)
15403                 mg->mg_len = -1;
15404             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
15405                 magic_setutf8(sv,mg); /* clear UTF8 cache */
15406         }
15407         SvUTF8_on(sv);
15408         return SvPVX(sv);
15409     }
15410     return SvPOKp(sv) ? SvPVX(sv) : NULL;
15411 }
15412
15413 /*
15414 =for apidoc sv_cat_decode
15415
15416 C<encoding> is assumed to be an C<Encode> object, the PV of C<ssv> is
15417 assumed to be octets in that encoding and decoding the input starts
15418 from the position which S<C<(PV + *offset)>> pointed to.  C<dsv> will be
15419 concatenated with the decoded UTF-8 string from C<ssv>.  Decoding will terminate
15420 when the string C<tstr> appears in decoding output or the input ends on
15421 the PV of C<ssv>.  The value which C<offset> points will be modified
15422 to the last input position on C<ssv>.
15423
15424 Returns TRUE if the terminator was found, else returns FALSE.
15425
15426 =cut */
15427
15428 bool
15429 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
15430                    SV *ssv, int *offset, char *tstr, int tlen)
15431 {
15432     bool ret = FALSE;
15433
15434     PERL_ARGS_ASSERT_SV_CAT_DECODE;
15435
15436     if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding)) {
15437         SV *offsv;
15438         dSP;
15439         ENTER;
15440         SAVETMPS;
15441         save_re_context();
15442         PUSHMARK(sp);
15443         EXTEND(SP, 6);
15444         PUSHs(encoding);
15445         PUSHs(dsv);
15446         PUSHs(ssv);
15447         offsv = newSViv(*offset);
15448         mPUSHs(offsv);
15449         mPUSHp(tstr, tlen);
15450         PUTBACK;
15451         call_method("cat_decode", G_SCALAR);
15452         SPAGAIN;
15453         ret = SvTRUE(TOPs);
15454         *offset = SvIV(offsv);
15455         PUTBACK;
15456         FREETMPS;
15457         LEAVE;
15458     }
15459     else
15460         Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
15461     return ret;
15462
15463 }
15464
15465 /* ---------------------------------------------------------------------
15466  *
15467  * support functions for report_uninit()
15468  */
15469
15470 /* the maxiumum size of array or hash where we will scan looking
15471  * for the undefined element that triggered the warning */
15472
15473 #define FUV_MAX_SEARCH_SIZE 1000
15474
15475 /* Look for an entry in the hash whose value has the same SV as val;
15476  * If so, return a mortal copy of the key. */
15477
15478 STATIC SV*
15479 S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
15480 {
15481     dVAR;
15482     HE **array;
15483     I32 i;
15484
15485     PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
15486
15487     if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
15488                         (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
15489         return NULL;
15490
15491     array = HvARRAY(hv);
15492
15493     for (i=HvMAX(hv); i>=0; i--) {
15494         HE *entry;
15495         for (entry = array[i]; entry; entry = HeNEXT(entry)) {
15496             if (HeVAL(entry) != val)
15497                 continue;
15498             if (    HeVAL(entry) == &PL_sv_undef ||
15499                     HeVAL(entry) == &PL_sv_placeholder)
15500                 continue;
15501             if (!HeKEY(entry))
15502                 return NULL;
15503             if (HeKLEN(entry) == HEf_SVKEY)
15504                 return sv_mortalcopy(HeKEY_sv(entry));
15505             return sv_2mortal(newSVhek(HeKEY_hek(entry)));
15506         }
15507     }
15508     return NULL;
15509 }
15510
15511 /* Look for an entry in the array whose value has the same SV as val;
15512  * If so, return the index, otherwise return -1. */
15513
15514 STATIC I32
15515 S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
15516 {
15517     PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
15518
15519     if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
15520                         (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
15521         return -1;
15522
15523     if (val != &PL_sv_undef) {
15524         SV ** const svp = AvARRAY(av);
15525         I32 i;
15526
15527         for (i=AvFILLp(av); i>=0; i--)
15528             if (svp[i] == val)
15529                 return i;
15530     }
15531     return -1;
15532 }
15533
15534 /* varname(): return the name of a variable, optionally with a subscript.
15535  * If gv is non-zero, use the name of that global, along with gvtype (one
15536  * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
15537  * targ.  Depending on the value of the subscript_type flag, return:
15538  */
15539
15540 #define FUV_SUBSCRIPT_NONE      1       /* "@foo"          */
15541 #define FUV_SUBSCRIPT_ARRAY     2       /* "$foo[aindex]"  */
15542 #define FUV_SUBSCRIPT_HASH      3       /* "$foo{keyname}" */
15543 #define FUV_SUBSCRIPT_WITHIN    4       /* "within @foo"   */
15544
15545 SV*
15546 Perl_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
15547         const SV *const keyname, I32 aindex, int subscript_type)
15548 {
15549
15550     SV * const name = sv_newmortal();
15551     if (gv && isGV(gv)) {
15552         char buffer[2];
15553         buffer[0] = gvtype;
15554         buffer[1] = 0;
15555
15556         /* as gv_fullname4(), but add literal '^' for $^FOO names  */
15557
15558         gv_fullname4(name, gv, buffer, 0);
15559
15560         if ((unsigned int)SvPVX(name)[1] <= 26) {
15561             buffer[0] = '^';
15562             buffer[1] = SvPVX(name)[1] + 'A' - 1;
15563
15564             /* Swap the 1 unprintable control character for the 2 byte pretty
15565                version - ie substr($name, 1, 1) = $buffer; */
15566             sv_insert(name, 1, 1, buffer, 2);
15567         }
15568     }
15569     else {
15570         CV * const cv = gv ? ((CV *)gv) : find_runcv(NULL);
15571         PADNAME *sv;
15572
15573         assert(!cv || SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM);
15574
15575         if (!cv || !CvPADLIST(cv))
15576             return NULL;
15577         sv = padnamelist_fetch(PadlistNAMES(CvPADLIST(cv)), targ);
15578         sv_setpvn(name, PadnamePV(sv), PadnameLEN(sv));
15579         SvUTF8_on(name);
15580     }
15581
15582     if (subscript_type == FUV_SUBSCRIPT_HASH) {
15583         SV * const sv = newSV(0);
15584         *SvPVX(name) = '$';
15585         Perl_sv_catpvf(aTHX_ name, "{%s}",
15586             pv_pretty(sv, SvPVX_const(keyname), SvCUR(keyname), 32, NULL, NULL,
15587                     PERL_PV_PRETTY_DUMP | PERL_PV_ESCAPE_UNI_DETECT ));
15588         SvREFCNT_dec_NN(sv);
15589     }
15590     else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
15591         *SvPVX(name) = '$';
15592         Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
15593     }
15594     else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
15595         /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
15596         Perl_sv_insert_flags(aTHX_ name, 0, 0,  STR_WITH_LEN("within "), 0);
15597     }
15598
15599     return name;
15600 }
15601
15602
15603 /*
15604 =for apidoc find_uninit_var
15605
15606 Find the name of the undefined variable (if any) that caused the operator
15607 to issue a "Use of uninitialized value" warning.
15608 If match is true, only return a name if its value matches C<uninit_sv>.
15609 So roughly speaking, if a unary operator (such as C<OP_COS>) generates a
15610 warning, then following the direct child of the op may yield an
15611 C<OP_PADSV> or C<OP_GV> that gives the name of the undefined variable.  On the
15612 other hand, with C<OP_ADD> there are two branches to follow, so we only print
15613 the variable name if we get an exact match.
15614 C<desc_p> points to a string pointer holding the description of the op.
15615 This may be updated if needed.
15616
15617 The name is returned as a mortal SV.
15618
15619 Assumes that C<PL_op> is the OP that originally triggered the error, and that
15620 C<PL_comppad>/C<PL_curpad> points to the currently executing pad.
15621
15622 =cut
15623 */
15624
15625 STATIC SV *
15626 S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
15627                   bool match, const char **desc_p)
15628 {
15629     dVAR;
15630     SV *sv;
15631     const GV *gv;
15632     const OP *o, *o2, *kid;
15633
15634     PERL_ARGS_ASSERT_FIND_UNINIT_VAR;
15635
15636     if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
15637                             uninit_sv == &PL_sv_placeholder)))
15638         return NULL;
15639
15640     switch (obase->op_type) {
15641
15642     case OP_RV2AV:
15643     case OP_RV2HV:
15644     case OP_PADAV:
15645     case OP_PADHV:
15646       {
15647         const bool pad  = (    obase->op_type == OP_PADAV
15648                             || obase->op_type == OP_PADHV
15649                             || obase->op_type == OP_PADRANGE
15650                           );
15651
15652         const bool hash = (    obase->op_type == OP_PADHV
15653                             || obase->op_type == OP_RV2HV
15654                             || (obase->op_type == OP_PADRANGE
15655                                 && SvTYPE(PAD_SVl(obase->op_targ)) == SVt_PVHV)
15656                           );
15657         I32 index = 0;
15658         SV *keysv = NULL;
15659         int subscript_type = FUV_SUBSCRIPT_WITHIN;
15660
15661         if (pad) { /* @lex, %lex */
15662             sv = PAD_SVl(obase->op_targ);
15663             gv = NULL;
15664         }
15665         else {
15666             if (cUNOPx(obase)->op_first->op_type == OP_GV) {
15667             /* @global, %global */
15668                 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
15669                 if (!gv)
15670                     break;
15671                 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
15672             }
15673             else if (obase == PL_op) /* @{expr}, %{expr} */
15674                 return find_uninit_var(cUNOPx(obase)->op_first,
15675                                                 uninit_sv, match, desc_p);
15676             else /* @{expr}, %{expr} as a sub-expression */
15677                 return NULL;
15678         }
15679
15680         /* attempt to find a match within the aggregate */
15681         if (hash) {
15682             keysv = find_hash_subscript((const HV*)sv, uninit_sv);
15683             if (keysv)
15684                 subscript_type = FUV_SUBSCRIPT_HASH;
15685         }
15686         else {
15687             index = find_array_subscript((const AV *)sv, uninit_sv);
15688             if (index >= 0)
15689                 subscript_type = FUV_SUBSCRIPT_ARRAY;
15690         }
15691
15692         if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
15693             break;
15694
15695         return varname(gv, (char)(hash ? '%' : '@'), obase->op_targ,
15696                                     keysv, index, subscript_type);
15697       }
15698
15699     case OP_RV2SV:
15700         if (cUNOPx(obase)->op_first->op_type == OP_GV) {
15701             /* $global */
15702             gv = cGVOPx_gv(cUNOPx(obase)->op_first);
15703             if (!gv || !GvSTASH(gv))
15704                 break;
15705             if (match && (GvSV(gv) != uninit_sv))
15706                 break;
15707             return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
15708         }
15709         /* ${expr} */
15710         return find_uninit_var(cUNOPx(obase)->op_first, uninit_sv, 1, desc_p);
15711
15712     case OP_PADSV:
15713         if (match && PAD_SVl(obase->op_targ) != uninit_sv)
15714             break;
15715         return varname(NULL, '$', obase->op_targ,
15716                                     NULL, 0, FUV_SUBSCRIPT_NONE);
15717
15718     case OP_GVSV:
15719         gv = cGVOPx_gv(obase);
15720         if (!gv || (match && GvSV(gv) != uninit_sv) || !GvSTASH(gv))
15721             break;
15722         return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
15723
15724     case OP_AELEMFAST_LEX:
15725         if (match) {
15726             SV **svp;
15727             AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
15728             if (!av || SvRMAGICAL(av))
15729                 break;
15730             svp = av_fetch(av, (I8)obase->op_private, FALSE);
15731             if (!svp || *svp != uninit_sv)
15732                 break;
15733         }
15734         return varname(NULL, '$', obase->op_targ,
15735                        NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
15736     case OP_AELEMFAST:
15737         {
15738             gv = cGVOPx_gv(obase);
15739             if (!gv)
15740                 break;
15741             if (match) {
15742                 SV **svp;
15743                 AV *const av = GvAV(gv);
15744                 if (!av || SvRMAGICAL(av))
15745                     break;
15746                 svp = av_fetch(av, (I8)obase->op_private, FALSE);
15747                 if (!svp || *svp != uninit_sv)
15748                     break;
15749             }
15750             return varname(gv, '$', 0,
15751                     NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
15752         }
15753         NOT_REACHED; /* NOTREACHED */
15754
15755     case OP_EXISTS:
15756         o = cUNOPx(obase)->op_first;
15757         if (!o || o->op_type != OP_NULL ||
15758                 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
15759             break;
15760         return find_uninit_var(cBINOPo->op_last, uninit_sv, match, desc_p);
15761
15762     case OP_AELEM:
15763     case OP_HELEM:
15764     {
15765         bool negate = FALSE;
15766
15767         if (PL_op == obase)
15768             /* $a[uninit_expr] or $h{uninit_expr} */
15769             return find_uninit_var(cBINOPx(obase)->op_last,
15770                                                 uninit_sv, match, desc_p);
15771
15772         gv = NULL;
15773         o = cBINOPx(obase)->op_first;
15774         kid = cBINOPx(obase)->op_last;
15775
15776         /* get the av or hv, and optionally the gv */
15777         sv = NULL;
15778         if  (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
15779             sv = PAD_SV(o->op_targ);
15780         }
15781         else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
15782                 && cUNOPo->op_first->op_type == OP_GV)
15783         {
15784             gv = cGVOPx_gv(cUNOPo->op_first);
15785             if (!gv)
15786                 break;
15787             sv = o->op_type
15788                 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
15789         }
15790         if (!sv)
15791             break;
15792
15793         if (kid && kid->op_type == OP_NEGATE) {
15794             negate = TRUE;
15795             kid = cUNOPx(kid)->op_first;
15796         }
15797
15798         if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
15799             /* index is constant */
15800             SV* kidsv;
15801             if (negate) {
15802                 kidsv = newSVpvs_flags("-", SVs_TEMP);
15803                 sv_catsv(kidsv, cSVOPx_sv(kid));
15804             }
15805             else
15806                 kidsv = cSVOPx_sv(kid);
15807             if (match) {
15808                 if (SvMAGICAL(sv))
15809                     break;
15810                 if (obase->op_type == OP_HELEM) {
15811                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), kidsv, 0, 0);
15812                     if (!he || HeVAL(he) != uninit_sv)
15813                         break;
15814                 }
15815                 else {
15816                     SV * const  opsv = cSVOPx_sv(kid);
15817                     const IV  opsviv = SvIV(opsv);
15818                     SV * const * const svp = av_fetch(MUTABLE_AV(sv),
15819                         negate ? - opsviv : opsviv,
15820                         FALSE);
15821                     if (!svp || *svp != uninit_sv)
15822                         break;
15823                 }
15824             }
15825             if (obase->op_type == OP_HELEM)
15826                 return varname(gv, '%', o->op_targ,
15827                             kidsv, 0, FUV_SUBSCRIPT_HASH);
15828             else
15829                 return varname(gv, '@', o->op_targ, NULL,
15830                     negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
15831                     FUV_SUBSCRIPT_ARRAY);
15832         }
15833         else  {
15834             /* index is an expression;
15835              * attempt to find a match within the aggregate */
15836             if (obase->op_type == OP_HELEM) {
15837                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
15838                 if (keysv)
15839                     return varname(gv, '%', o->op_targ,
15840                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
15841             }
15842             else {
15843                 const I32 index
15844                     = find_array_subscript((const AV *)sv, uninit_sv);
15845                 if (index >= 0)
15846                     return varname(gv, '@', o->op_targ,
15847                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
15848             }
15849             if (match)
15850                 break;
15851             return varname(gv,
15852                 (char)((o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
15853                 ? '@' : '%'),
15854                 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
15855         }
15856         NOT_REACHED; /* NOTREACHED */
15857     }
15858
15859     case OP_MULTIDEREF: {
15860         /* If we were executing OP_MULTIDEREF when the undef warning
15861          * triggered, then it must be one of the index values within
15862          * that triggered it. If not, then the only possibility is that
15863          * the value retrieved by the last aggregate lookup might be the
15864          * culprit. For the former, we set PL_multideref_pc each time before
15865          * using an index, so work though the item list until we reach
15866          * that point. For the latter, just work through the entire item
15867          * list; the last aggregate retrieved will be the candidate.
15868          */
15869
15870         /* the named aggregate, if any */
15871         PADOFFSET agg_targ = 0;
15872         GV       *agg_gv   = NULL;
15873         /* the last-seen index */
15874         UV        index_type;
15875         PADOFFSET index_targ;
15876         GV       *index_gv;
15877         IV        index_const_iv = 0; /* init for spurious compiler warn */
15878         SV       *index_const_sv;
15879         int       depth = 0;  /* how many array/hash lookups we've done */
15880
15881         UNOP_AUX_item *items = cUNOP_AUXx(obase)->op_aux;
15882         UNOP_AUX_item *last = NULL;
15883         UV actions = items->uv;
15884         bool is_hv;
15885
15886         if (PL_op == obase) {
15887             last = PL_multideref_pc;
15888             assert(last >= items && last <= items + items[-1].uv);
15889         }
15890
15891         assert(actions);
15892
15893         while (1) {
15894             is_hv = FALSE;
15895             switch (actions & MDEREF_ACTION_MASK) {
15896
15897             case MDEREF_reload:
15898                 actions = (++items)->uv;
15899                 continue;
15900
15901             case MDEREF_HV_padhv_helem:               /* $lex{...} */
15902                 is_hv = TRUE;
15903                 /* FALLTHROUGH */
15904             case MDEREF_AV_padav_aelem:               /* $lex[...] */
15905                 agg_targ = (++items)->pad_offset;
15906                 agg_gv = NULL;
15907                 break;
15908
15909             case MDEREF_HV_gvhv_helem:                /* $pkg{...} */
15910                 is_hv = TRUE;
15911                 /* FALLTHROUGH */
15912             case MDEREF_AV_gvav_aelem:                /* $pkg[...] */
15913                 agg_targ = 0;
15914                 agg_gv = (GV*)UNOP_AUX_item_sv(++items);
15915                 assert(isGV_with_GP(agg_gv));
15916                 break;
15917
15918             case MDEREF_HV_gvsv_vivify_rv2hv_helem:   /* $pkg->{...} */
15919             case MDEREF_HV_padsv_vivify_rv2hv_helem:  /* $lex->{...} */
15920                 ++items;
15921                 /* FALLTHROUGH */
15922             case MDEREF_HV_pop_rv2hv_helem:           /* expr->{...} */
15923             case MDEREF_HV_vivify_rv2hv_helem:        /* vivify, ->{...} */
15924                 agg_targ = 0;
15925                 agg_gv   = NULL;
15926                 is_hv    = TRUE;
15927                 break;
15928
15929             case MDEREF_AV_gvsv_vivify_rv2av_aelem:   /* $pkg->[...] */
15930             case MDEREF_AV_padsv_vivify_rv2av_aelem:  /* $lex->[...] */
15931                 ++items;
15932                 /* FALLTHROUGH */
15933             case MDEREF_AV_pop_rv2av_aelem:           /* expr->[...] */
15934             case MDEREF_AV_vivify_rv2av_aelem:        /* vivify, ->[...] */
15935                 agg_targ = 0;
15936                 agg_gv   = NULL;
15937             } /* switch */
15938
15939             index_targ     = 0;
15940             index_gv       = NULL;
15941             index_const_sv = NULL;
15942
15943             index_type = (actions & MDEREF_INDEX_MASK);
15944             switch (index_type) {
15945             case MDEREF_INDEX_none:
15946                 break;
15947             case MDEREF_INDEX_const:
15948                 if (is_hv)
15949                     index_const_sv = UNOP_AUX_item_sv(++items)
15950                 else
15951                     index_const_iv = (++items)->iv;
15952                 break;
15953             case MDEREF_INDEX_padsv:
15954                 index_targ = (++items)->pad_offset;
15955                 break;
15956             case MDEREF_INDEX_gvsv:
15957                 index_gv = (GV*)UNOP_AUX_item_sv(++items);
15958                 assert(isGV_with_GP(index_gv));
15959                 break;
15960             }
15961
15962             if (index_type != MDEREF_INDEX_none)
15963                 depth++;
15964
15965             if (   index_type == MDEREF_INDEX_none
15966                 || (actions & MDEREF_FLAG_last)
15967                 || (last && items == last)
15968             )
15969                 break;
15970
15971             actions >>= MDEREF_SHIFT;
15972         } /* while */
15973
15974         if (PL_op == obase) {
15975             /* index was undef */
15976
15977             *desc_p = (    (actions & MDEREF_FLAG_last)
15978                         && (obase->op_private
15979                                 & (OPpMULTIDEREF_EXISTS|OPpMULTIDEREF_DELETE)))
15980                         ?
15981                             (obase->op_private & OPpMULTIDEREF_EXISTS)
15982                                 ? "exists"
15983                                 : "delete"
15984                         : is_hv ? "hash element" : "array element";
15985             assert(index_type != MDEREF_INDEX_none);
15986             if (index_gv)
15987                 return varname(index_gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
15988             if (index_targ)
15989                 return varname(NULL, '$', index_targ,
15990                                     NULL, 0, FUV_SUBSCRIPT_NONE);
15991             assert(is_hv); /* AV index is an IV and can't be undef */
15992             /* can a const HV index ever be undef? */
15993             return NULL;
15994         }
15995
15996         /* the SV returned by pp_multideref() was undef, if anything was */
15997
15998         if (depth != 1)
15999             break;
16000
16001         if (agg_targ)
16002             sv = PAD_SV(agg_targ);
16003         else if (agg_gv)
16004             sv = is_hv ? MUTABLE_SV(GvHV(agg_gv)) : MUTABLE_SV(GvAV(agg_gv));
16005         else
16006             break;
16007
16008         if (index_type == MDEREF_INDEX_const) {
16009             if (match) {
16010                 if (SvMAGICAL(sv))
16011                     break;
16012                 if (is_hv) {
16013                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), index_const_sv, 0, 0);
16014                     if (!he || HeVAL(he) != uninit_sv)
16015                         break;
16016                 }
16017                 else {
16018                     SV * const * const svp =
16019                             av_fetch(MUTABLE_AV(sv), index_const_iv, FALSE);
16020                     if (!svp || *svp != uninit_sv)
16021                         break;
16022                 }
16023             }
16024             return is_hv
16025                 ? varname(agg_gv, '%', agg_targ,
16026                                 index_const_sv, 0,    FUV_SUBSCRIPT_HASH)
16027                 : varname(agg_gv, '@', agg_targ,
16028                                 NULL, index_const_iv, FUV_SUBSCRIPT_ARRAY);
16029         }
16030         else  {
16031             /* index is an var */
16032             if (is_hv) {
16033                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
16034                 if (keysv)
16035                     return varname(agg_gv, '%', agg_targ,
16036                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
16037             }
16038             else {
16039                 const I32 index
16040                     = find_array_subscript((const AV *)sv, uninit_sv);
16041                 if (index >= 0)
16042                     return varname(agg_gv, '@', agg_targ,
16043                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
16044             }
16045             if (match)
16046                 break;
16047             return varname(agg_gv,
16048                 is_hv ? '%' : '@',
16049                 agg_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
16050         }
16051         NOT_REACHED; /* NOTREACHED */
16052     }
16053
16054     case OP_AASSIGN:
16055         /* only examine RHS */
16056         return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv,
16057                                                                 match, desc_p);
16058
16059     case OP_OPEN:
16060         o = cUNOPx(obase)->op_first;
16061         if (   o->op_type == OP_PUSHMARK
16062            || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)
16063         )
16064             o = OpSIBLING(o);
16065
16066         if (!OpHAS_SIBLING(o)) {
16067             /* one-arg version of open is highly magical */
16068
16069             if (o->op_type == OP_GV) { /* open FOO; */
16070                 gv = cGVOPx_gv(o);
16071                 if (match && GvSV(gv) != uninit_sv)
16072                     break;
16073                 return varname(gv, '$', 0,
16074                             NULL, 0, FUV_SUBSCRIPT_NONE);
16075             }
16076             /* other possibilities not handled are:
16077              * open $x; or open my $x;  should return '${*$x}'
16078              * open expr;               should return '$'.expr ideally
16079              */
16080              break;
16081         }
16082         goto do_op;
16083
16084     /* ops where $_ may be an implicit arg */
16085     case OP_TRANS:
16086     case OP_TRANSR:
16087     case OP_SUBST:
16088     case OP_MATCH:
16089         if ( !(obase->op_flags & OPf_STACKED)) {
16090             if (uninit_sv == DEFSV)
16091                 return newSVpvs_flags("$_", SVs_TEMP);
16092             else if (obase->op_targ
16093                   && uninit_sv == PAD_SVl(obase->op_targ))
16094                 return varname(NULL, '$', obase->op_targ, NULL, 0,
16095                                FUV_SUBSCRIPT_NONE);
16096         }
16097         goto do_op;
16098
16099     case OP_PRTF:
16100     case OP_PRINT:
16101     case OP_SAY:
16102         match = 1; /* print etc can return undef on defined args */
16103         /* skip filehandle as it can't produce 'undef' warning  */
16104         o = cUNOPx(obase)->op_first;
16105         if ((obase->op_flags & OPf_STACKED)
16106             &&
16107                (   o->op_type == OP_PUSHMARK
16108                || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)))
16109             o = OpSIBLING(OpSIBLING(o));
16110         goto do_op2;
16111
16112
16113     case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
16114     case OP_CUSTOM: /* XS or custom code could trigger random warnings */
16115
16116         /* the following ops are capable of returning PL_sv_undef even for
16117          * defined arg(s) */
16118
16119     case OP_BACKTICK:
16120     case OP_PIPE_OP:
16121     case OP_FILENO:
16122     case OP_BINMODE:
16123     case OP_TIED:
16124     case OP_GETC:
16125     case OP_SYSREAD:
16126     case OP_SEND:
16127     case OP_IOCTL:
16128     case OP_SOCKET:
16129     case OP_SOCKPAIR:
16130     case OP_BIND:
16131     case OP_CONNECT:
16132     case OP_LISTEN:
16133     case OP_ACCEPT:
16134     case OP_SHUTDOWN:
16135     case OP_SSOCKOPT:
16136     case OP_GETPEERNAME:
16137     case OP_FTRREAD:
16138     case OP_FTRWRITE:
16139     case OP_FTREXEC:
16140     case OP_FTROWNED:
16141     case OP_FTEREAD:
16142     case OP_FTEWRITE:
16143     case OP_FTEEXEC:
16144     case OP_FTEOWNED:
16145     case OP_FTIS:
16146     case OP_FTZERO:
16147     case OP_FTSIZE:
16148     case OP_FTFILE:
16149     case OP_FTDIR:
16150     case OP_FTLINK:
16151     case OP_FTPIPE:
16152     case OP_FTSOCK:
16153     case OP_FTBLK:
16154     case OP_FTCHR:
16155     case OP_FTTTY:
16156     case OP_FTSUID:
16157     case OP_FTSGID:
16158     case OP_FTSVTX:
16159     case OP_FTTEXT:
16160     case OP_FTBINARY:
16161     case OP_FTMTIME:
16162     case OP_FTATIME:
16163     case OP_FTCTIME:
16164     case OP_READLINK:
16165     case OP_OPEN_DIR:
16166     case OP_READDIR:
16167     case OP_TELLDIR:
16168     case OP_SEEKDIR:
16169     case OP_REWINDDIR:
16170     case OP_CLOSEDIR:
16171     case OP_GMTIME:
16172     case OP_ALARM:
16173     case OP_SEMGET:
16174     case OP_GETLOGIN:
16175     case OP_UNDEF:
16176     case OP_SUBSTR:
16177     case OP_AEACH:
16178     case OP_EACH:
16179     case OP_SORT:
16180     case OP_CALLER:
16181     case OP_DOFILE:
16182     case OP_PROTOTYPE:
16183     case OP_NCMP:
16184     case OP_SMARTMATCH:
16185     case OP_UNPACK:
16186     case OP_SYSOPEN:
16187     case OP_SYSSEEK:
16188         match = 1;
16189         goto do_op;
16190
16191     case OP_ENTERSUB:
16192     case OP_GOTO:
16193         /* XXX tmp hack: these two may call an XS sub, and currently
16194           XS subs don't have a SUB entry on the context stack, so CV and
16195           pad determination goes wrong, and BAD things happen. So, just
16196           don't try to determine the value under those circumstances.
16197           Need a better fix at dome point. DAPM 11/2007 */
16198         break;
16199
16200     case OP_FLIP:
16201     case OP_FLOP:
16202     {
16203         GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
16204         if (gv && GvSV(gv) == uninit_sv)
16205             return newSVpvs_flags("$.", SVs_TEMP);
16206         goto do_op;
16207     }
16208
16209     case OP_POS:
16210         /* def-ness of rval pos() is independent of the def-ness of its arg */
16211         if ( !(obase->op_flags & OPf_MOD))
16212             break;
16213
16214     case OP_SCHOMP:
16215     case OP_CHOMP:
16216         if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
16217             return newSVpvs_flags("${$/}", SVs_TEMP);
16218         /* FALLTHROUGH */
16219
16220     default:
16221     do_op:
16222         if (!(obase->op_flags & OPf_KIDS))
16223             break;
16224         o = cUNOPx(obase)->op_first;
16225         
16226     do_op2:
16227         if (!o)
16228             break;
16229
16230         /* This loop checks all the kid ops, skipping any that cannot pos-
16231          * sibly be responsible for the uninitialized value; i.e., defined
16232          * constants and ops that return nothing.  If there is only one op
16233          * left that is not skipped, then we *know* it is responsible for
16234          * the uninitialized value.  If there is more than one op left, we
16235          * have to look for an exact match in the while() loop below.
16236          * Note that we skip padrange, because the individual pad ops that
16237          * it replaced are still in the tree, so we work on them instead.
16238          */
16239         o2 = NULL;
16240         for (kid=o; kid; kid = OpSIBLING(kid)) {
16241             const OPCODE type = kid->op_type;
16242             if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
16243               || (type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
16244               || (type == OP_PUSHMARK)
16245               || (type == OP_PADRANGE)
16246             )
16247             continue;
16248
16249             if (o2) { /* more than one found */
16250                 o2 = NULL;
16251                 break;
16252             }
16253             o2 = kid;
16254         }
16255         if (o2)
16256             return find_uninit_var(o2, uninit_sv, match, desc_p);
16257
16258         /* scan all args */
16259         while (o) {
16260             sv = find_uninit_var(o, uninit_sv, 1, desc_p);
16261             if (sv)
16262                 return sv;
16263             o = OpSIBLING(o);
16264         }
16265         break;
16266     }
16267     return NULL;
16268 }
16269
16270
16271 /*
16272 =for apidoc report_uninit
16273
16274 Print appropriate "Use of uninitialized variable" warning.
16275
16276 =cut
16277 */
16278
16279 void
16280 Perl_report_uninit(pTHX_ const SV *uninit_sv)
16281 {
16282     const char *desc = NULL;
16283     SV* varname = NULL;
16284
16285     if (PL_op) {
16286         desc = PL_op->op_type == OP_STRINGIFY && PL_op->op_folded
16287                 ? "join or string"
16288                 : OP_DESC(PL_op);
16289         if (uninit_sv && PL_curpad) {
16290             varname = find_uninit_var(PL_op, uninit_sv, 0, &desc);
16291             if (varname)
16292                 sv_insert(varname, 0, 0, " ", 1);
16293         }
16294     }
16295     else if (PL_curstackinfo->si_type == PERLSI_SORT && cxstack_ix == 0)
16296         /* we've reached the end of a sort block or sub,
16297          * and the uninit value is probably what that code returned */
16298         desc = "sort";
16299
16300     /* PL_warn_uninit_sv is constant */
16301     GCC_DIAG_IGNORE(-Wformat-nonliteral);
16302     if (desc)
16303         /* diag_listed_as: Use of uninitialized value%s */
16304         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit_sv,
16305                 SVfARG(varname ? varname : &PL_sv_no),
16306                 " in ", desc);
16307     else
16308         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
16309                 "", "", "");
16310     GCC_DIAG_RESTORE;
16311 }
16312
16313 /*
16314  * ex: set ts=8 sts=4 sw=4 et:
16315  */