This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Make *inline.h behave like *.c
[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<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 int
1529 Perl_sv_backoff(SV *const sv)
1530 {
1531     STRLEN delta;
1532     const char * const s = SvPVX_const(sv);
1533
1534     PERL_ARGS_ASSERT_SV_BACKOFF;
1535
1536     assert(SvOOK(sv));
1537     assert(SvTYPE(sv) != SVt_PVHV);
1538     assert(SvTYPE(sv) != SVt_PVAV);
1539
1540     SvOOK_offset(sv, delta);
1541     
1542     SvLEN_set(sv, SvLEN(sv) + delta);
1543     SvPV_set(sv, SvPVX(sv) - delta);
1544     Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1545     SvFLAGS(sv) &= ~SVf_OOK;
1546     return 0;
1547 }
1548
1549 /*
1550 =for apidoc sv_grow
1551
1552 Expands the character buffer in the SV.  If necessary, uses C<sv_unref> and
1553 upgrades the SV to C<SVt_PV>.  Returns a pointer to the character buffer.
1554 Use the C<SvGROW> wrapper instead.
1555
1556 =cut
1557 */
1558
1559 static void S_sv_uncow(pTHX_ SV * const sv, const U32 flags);
1560
1561 char *
1562 Perl_sv_grow(pTHX_ SV *const sv, STRLEN newlen)
1563 {
1564     char *s;
1565
1566     PERL_ARGS_ASSERT_SV_GROW;
1567
1568     if (SvROK(sv))
1569         sv_unref(sv);
1570     if (SvTYPE(sv) < SVt_PV) {
1571         sv_upgrade(sv, SVt_PV);
1572         s = SvPVX_mutable(sv);
1573     }
1574     else if (SvOOK(sv)) {       /* pv is offset? */
1575         sv_backoff(sv);
1576         s = SvPVX_mutable(sv);
1577         if (newlen > SvLEN(sv))
1578             newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1579     }
1580     else
1581     {
1582         if (SvIsCOW(sv)) S_sv_uncow(aTHX_ sv, 0);
1583         s = SvPVX_mutable(sv);
1584     }
1585
1586 #ifdef PERL_COPY_ON_WRITE
1587     /* the new COW scheme uses SvPVX(sv)[SvLEN(sv)-1] (if spare)
1588      * to store the COW count. So in general, allocate one more byte than
1589      * asked for, to make it likely this byte is always spare: and thus
1590      * make more strings COW-able.
1591      * If the new size is a big power of two, don't bother: we assume the
1592      * caller wanted a nice 2^N sized block and will be annoyed at getting
1593      * 2^N+1.
1594      * Only increment if the allocation isn't MEM_SIZE_MAX,
1595      * otherwise it will wrap to 0.
1596      */
1597     if (newlen & 0xff && newlen != MEM_SIZE_MAX)
1598         newlen++;
1599 #endif
1600
1601 #if defined(PERL_USE_MALLOC_SIZE) && defined(Perl_safesysmalloc_size)
1602 #define PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1603 #endif
1604
1605     if (newlen > SvLEN(sv)) {           /* need more room? */
1606         STRLEN minlen = SvCUR(sv);
1607         minlen += (minlen >> PERL_STRLEN_EXPAND_SHIFT) + 10;
1608         if (newlen < minlen)
1609             newlen = minlen;
1610 #ifndef PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1611
1612         /* Don't round up on the first allocation, as odds are pretty good that
1613          * the initial request is accurate as to what is really needed */
1614         if (SvLEN(sv)) {
1615             STRLEN rounded = PERL_STRLEN_ROUNDUP(newlen);
1616             if (rounded > newlen)
1617                 newlen = rounded;
1618         }
1619 #endif
1620         if (SvLEN(sv) && s) {
1621             s = (char*)saferealloc(s, newlen);
1622         }
1623         else {
1624             s = (char*)safemalloc(newlen);
1625             if (SvPVX_const(sv) && SvCUR(sv)) {
1626                 Move(SvPVX_const(sv), s, (newlen < SvCUR(sv)) ? newlen : SvCUR(sv), char);
1627             }
1628         }
1629         SvPV_set(sv, s);
1630 #ifdef PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1631         /* Do this here, do it once, do it right, and then we will never get
1632            called back into sv_grow() unless there really is some growing
1633            needed.  */
1634         SvLEN_set(sv, Perl_safesysmalloc_size(s));
1635 #else
1636         SvLEN_set(sv, newlen);
1637 #endif
1638     }
1639     return s;
1640 }
1641
1642 /*
1643 =for apidoc sv_setiv
1644
1645 Copies an integer into the given SV, upgrading first if necessary.
1646 Does not handle 'set' magic.  See also C<sv_setiv_mg>.
1647
1648 =cut
1649 */
1650
1651 void
1652 Perl_sv_setiv(pTHX_ SV *const sv, const IV i)
1653 {
1654     PERL_ARGS_ASSERT_SV_SETIV;
1655
1656     SV_CHECK_THINKFIRST_COW_DROP(sv);
1657     switch (SvTYPE(sv)) {
1658     case SVt_NULL:
1659     case SVt_NV:
1660         sv_upgrade(sv, SVt_IV);
1661         break;
1662     case SVt_PV:
1663         sv_upgrade(sv, SVt_PVIV);
1664         break;
1665
1666     case SVt_PVGV:
1667         if (!isGV_with_GP(sv))
1668             break;
1669     case SVt_PVAV:
1670     case SVt_PVHV:
1671     case SVt_PVCV:
1672     case SVt_PVFM:
1673     case SVt_PVIO:
1674         /* diag_listed_as: Can't coerce %s to %s in %s */
1675         Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1676                    OP_DESC(PL_op));
1677         break;
1678     default: NOOP;
1679     }
1680     (void)SvIOK_only(sv);                       /* validate number */
1681     SvIV_set(sv, i);
1682     SvTAINT(sv);
1683 }
1684
1685 /*
1686 =for apidoc sv_setiv_mg
1687
1688 Like C<sv_setiv>, but also handles 'set' magic.
1689
1690 =cut
1691 */
1692
1693 void
1694 Perl_sv_setiv_mg(pTHX_ SV *const sv, const IV i)
1695 {
1696     PERL_ARGS_ASSERT_SV_SETIV_MG;
1697
1698     sv_setiv(sv,i);
1699     SvSETMAGIC(sv);
1700 }
1701
1702 /*
1703 =for apidoc sv_setuv
1704
1705 Copies an unsigned integer into the given SV, upgrading first if necessary.
1706 Does not handle 'set' magic.  See also C<sv_setuv_mg>.
1707
1708 =cut
1709 */
1710
1711 void
1712 Perl_sv_setuv(pTHX_ SV *const sv, const UV u)
1713 {
1714     PERL_ARGS_ASSERT_SV_SETUV;
1715
1716     /* With the if statement to ensure that integers are stored as IVs whenever
1717        possible:
1718        u=1.49  s=0.52  cu=72.49  cs=10.64  scripts=270  tests=20865
1719
1720        without
1721        u=1.35  s=0.47  cu=73.45  cs=11.43  scripts=270  tests=20865
1722
1723        If you wish to remove the following if statement, so that this routine
1724        (and its callers) always return UVs, please benchmark to see what the
1725        effect is. Modern CPUs may be different. Or may not :-)
1726     */
1727     if (u <= (UV)IV_MAX) {
1728        sv_setiv(sv, (IV)u);
1729        return;
1730     }
1731     sv_setiv(sv, 0);
1732     SvIsUV_on(sv);
1733     SvUV_set(sv, u);
1734 }
1735
1736 /*
1737 =for apidoc sv_setuv_mg
1738
1739 Like C<sv_setuv>, but also handles 'set' magic.
1740
1741 =cut
1742 */
1743
1744 void
1745 Perl_sv_setuv_mg(pTHX_ SV *const sv, const UV u)
1746 {
1747     PERL_ARGS_ASSERT_SV_SETUV_MG;
1748
1749     sv_setuv(sv,u);
1750     SvSETMAGIC(sv);
1751 }
1752
1753 /*
1754 =for apidoc sv_setnv
1755
1756 Copies a double into the given SV, upgrading first if necessary.
1757 Does not handle 'set' magic.  See also C<sv_setnv_mg>.
1758
1759 =cut
1760 */
1761
1762 void
1763 Perl_sv_setnv(pTHX_ SV *const sv, const NV num)
1764 {
1765     PERL_ARGS_ASSERT_SV_SETNV;
1766
1767     SV_CHECK_THINKFIRST_COW_DROP(sv);
1768     switch (SvTYPE(sv)) {
1769     case SVt_NULL:
1770     case SVt_IV:
1771         sv_upgrade(sv, SVt_NV);
1772         break;
1773     case SVt_PV:
1774     case SVt_PVIV:
1775         sv_upgrade(sv, SVt_PVNV);
1776         break;
1777
1778     case SVt_PVGV:
1779         if (!isGV_with_GP(sv))
1780             break;
1781     case SVt_PVAV:
1782     case SVt_PVHV:
1783     case SVt_PVCV:
1784     case SVt_PVFM:
1785     case SVt_PVIO:
1786         /* diag_listed_as: Can't coerce %s to %s in %s */
1787         Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1788                    OP_DESC(PL_op));
1789         break;
1790     default: NOOP;
1791     }
1792     SvNV_set(sv, num);
1793     (void)SvNOK_only(sv);                       /* validate number */
1794     SvTAINT(sv);
1795 }
1796
1797 /*
1798 =for apidoc sv_setnv_mg
1799
1800 Like C<sv_setnv>, but also handles 'set' magic.
1801
1802 =cut
1803 */
1804
1805 void
1806 Perl_sv_setnv_mg(pTHX_ SV *const sv, const NV num)
1807 {
1808     PERL_ARGS_ASSERT_SV_SETNV_MG;
1809
1810     sv_setnv(sv,num);
1811     SvSETMAGIC(sv);
1812 }
1813
1814 /* Return a cleaned-up, printable version of sv, for non-numeric, or
1815  * not incrementable warning display.
1816  * Originally part of S_not_a_number().
1817  * The return value may be != tmpbuf.
1818  */
1819
1820 STATIC const char *
1821 S_sv_display(pTHX_ SV *const sv, char *tmpbuf, STRLEN tmpbuf_size) {
1822     const char *pv;
1823
1824      PERL_ARGS_ASSERT_SV_DISPLAY;
1825
1826      if (DO_UTF8(sv)) {
1827           SV *dsv = newSVpvs_flags("", SVs_TEMP);
1828           pv = sv_uni_display(dsv, sv, 32, UNI_DISPLAY_ISPRINT);
1829      } else {
1830           char *d = tmpbuf;
1831           const char * const limit = tmpbuf + tmpbuf_size - 8;
1832           /* each *s can expand to 4 chars + "...\0",
1833              i.e. need room for 8 chars */
1834         
1835           const char *s = SvPVX_const(sv);
1836           const char * const end = s + SvCUR(sv);
1837           for ( ; s < end && d < limit; s++ ) {
1838                int ch = *s & 0xFF;
1839                if (! isASCII(ch) && !isPRINT_LC(ch)) {
1840                     *d++ = 'M';
1841                     *d++ = '-';
1842
1843                     /* Map to ASCII "equivalent" of Latin1 */
1844                     ch = LATIN1_TO_NATIVE(NATIVE_TO_LATIN1(ch) & 127);
1845                }
1846                if (ch == '\n') {
1847                     *d++ = '\\';
1848                     *d++ = 'n';
1849                }
1850                else if (ch == '\r') {
1851                     *d++ = '\\';
1852                     *d++ = 'r';
1853                }
1854                else if (ch == '\f') {
1855                     *d++ = '\\';
1856                     *d++ = 'f';
1857                }
1858                else if (ch == '\\') {
1859                     *d++ = '\\';
1860                     *d++ = '\\';
1861                }
1862                else if (ch == '\0') {
1863                     *d++ = '\\';
1864                     *d++ = '0';
1865                }
1866                else if (isPRINT_LC(ch))
1867                     *d++ = ch;
1868                else {
1869                     *d++ = '^';
1870                     *d++ = toCTRL(ch);
1871                }
1872           }
1873           if (s < end) {
1874                *d++ = '.';
1875                *d++ = '.';
1876                *d++ = '.';
1877           }
1878           *d = '\0';
1879           pv = tmpbuf;
1880     }
1881
1882     return pv;
1883 }
1884
1885 /* Print an "isn't numeric" warning, using a cleaned-up,
1886  * printable version of the offending string
1887  */
1888
1889 STATIC void
1890 S_not_a_number(pTHX_ SV *const sv)
1891 {
1892      char tmpbuf[64];
1893      const char *pv;
1894
1895      PERL_ARGS_ASSERT_NOT_A_NUMBER;
1896
1897      pv = sv_display(sv, tmpbuf, sizeof(tmpbuf));
1898
1899     if (PL_op)
1900         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1901                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1902                     "Argument \"%s\" isn't numeric in %s", pv,
1903                     OP_DESC(PL_op));
1904     else
1905         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1906                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1907                     "Argument \"%s\" isn't numeric", pv);
1908 }
1909
1910 STATIC void
1911 S_not_incrementable(pTHX_ SV *const sv) {
1912      char tmpbuf[64];
1913      const char *pv;
1914
1915      PERL_ARGS_ASSERT_NOT_INCREMENTABLE;
1916
1917      pv = sv_display(sv, tmpbuf, sizeof(tmpbuf));
1918
1919      Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1920                  "Argument \"%s\" treated as 0 in increment (++)", pv);
1921 }
1922
1923 /*
1924 =for apidoc looks_like_number
1925
1926 Test if the content of an SV looks like a number (or is a number).
1927 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1928 non-numeric warning), even if your atof() doesn't grok them.  Get-magic is
1929 ignored.
1930
1931 =cut
1932 */
1933
1934 I32
1935 Perl_looks_like_number(pTHX_ SV *const sv)
1936 {
1937     const char *sbegin;
1938     STRLEN len;
1939     int numtype;
1940
1941     PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER;
1942
1943     if (SvPOK(sv) || SvPOKp(sv)) {
1944         sbegin = SvPV_nomg_const(sv, len);
1945     }
1946     else
1947         return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1948     numtype = grok_number(sbegin, len, NULL);
1949     return ((numtype & IS_NUMBER_TRAILING)) ? 0 : numtype;
1950 }
1951
1952 STATIC bool
1953 S_glob_2number(pTHX_ GV * const gv)
1954 {
1955     PERL_ARGS_ASSERT_GLOB_2NUMBER;
1956
1957     /* We know that all GVs stringify to something that is not-a-number,
1958         so no need to test that.  */
1959     if (ckWARN(WARN_NUMERIC))
1960     {
1961         SV *const buffer = sv_newmortal();
1962         gv_efullname3(buffer, gv, "*");
1963         not_a_number(buffer);
1964     }
1965     /* We just want something true to return, so that S_sv_2iuv_common
1966         can tail call us and return true.  */
1967     return TRUE;
1968 }
1969
1970 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1971    until proven guilty, assume that things are not that bad... */
1972
1973 /*
1974    NV_PRESERVES_UV:
1975
1976    As 64 bit platforms often have an NV that doesn't preserve all bits of
1977    an IV (an assumption perl has been based on to date) it becomes necessary
1978    to remove the assumption that the NV always carries enough precision to
1979    recreate the IV whenever needed, and that the NV is the canonical form.
1980    Instead, IV/UV and NV need to be given equal rights. So as to not lose
1981    precision as a side effect of conversion (which would lead to insanity
1982    and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1983    1) to distinguish between IV/UV/NV slots that have a valid conversion cached
1984       where precision was lost, and IV/UV/NV slots that have a valid conversion
1985       which has lost no precision
1986    2) to ensure that if a numeric conversion to one form is requested that
1987       would lose precision, the precise conversion (or differently
1988       imprecise conversion) is also performed and cached, to prevent
1989       requests for different numeric formats on the same SV causing
1990       lossy conversion chains. (lossless conversion chains are perfectly
1991       acceptable (still))
1992
1993
1994    flags are used:
1995    SvIOKp is true if the IV slot contains a valid value
1996    SvIOK  is true only if the IV value is accurate (UV if SvIOK_UV true)
1997    SvNOKp is true if the NV slot contains a valid value
1998    SvNOK  is true only if the NV value is accurate
1999
2000    so
2001    while converting from PV to NV, check to see if converting that NV to an
2002    IV(or UV) would lose accuracy over a direct conversion from PV to
2003    IV(or UV). If it would, cache both conversions, return NV, but mark
2004    SV as IOK NOKp (ie not NOK).
2005
2006    While converting from PV to IV, check to see if converting that IV to an
2007    NV would lose accuracy over a direct conversion from PV to NV. If it
2008    would, cache both conversions, flag similarly.
2009
2010    Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
2011    correctly because if IV & NV were set NV *always* overruled.
2012    Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
2013    changes - now IV and NV together means that the two are interchangeable:
2014    SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
2015
2016    The benefit of this is that operations such as pp_add know that if
2017    SvIOK is true for both left and right operands, then integer addition
2018    can be used instead of floating point (for cases where the result won't
2019    overflow). Before, floating point was always used, which could lead to
2020    loss of precision compared with integer addition.
2021
2022    * making IV and NV equal status should make maths accurate on 64 bit
2023      platforms
2024    * may speed up maths somewhat if pp_add and friends start to use
2025      integers when possible instead of fp. (Hopefully the overhead in
2026      looking for SvIOK and checking for overflow will not outweigh the
2027      fp to integer speedup)
2028    * will slow down integer operations (callers of SvIV) on "inaccurate"
2029      values, as the change from SvIOK to SvIOKp will cause a call into
2030      sv_2iv each time rather than a macro access direct to the IV slot
2031    * should speed up number->string conversion on integers as IV is
2032      favoured when IV and NV are equally accurate
2033
2034    ####################################################################
2035    You had better be using SvIOK_notUV if you want an IV for arithmetic:
2036    SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
2037    On the other hand, SvUOK is true iff UV.
2038    ####################################################################
2039
2040    Your mileage will vary depending your CPU's relative fp to integer
2041    performance ratio.
2042 */
2043
2044 #ifndef NV_PRESERVES_UV
2045 #  define IS_NUMBER_UNDERFLOW_IV 1
2046 #  define IS_NUMBER_UNDERFLOW_UV 2
2047 #  define IS_NUMBER_IV_AND_UV    2
2048 #  define IS_NUMBER_OVERFLOW_IV  4
2049 #  define IS_NUMBER_OVERFLOW_UV  5
2050
2051 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
2052
2053 /* For sv_2nv these three cases are "SvNOK and don't bother casting"  */
2054 STATIC int
2055 S_sv_2iuv_non_preserve(pTHX_ SV *const sv
2056 #  ifdef DEBUGGING
2057                        , I32 numtype
2058 #  endif
2059                        )
2060 {
2061     PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE;
2062     PERL_UNUSED_CONTEXT;
2063
2064     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));
2065     if (SvNVX(sv) < (NV)IV_MIN) {
2066         (void)SvIOKp_on(sv);
2067         (void)SvNOK_on(sv);
2068         SvIV_set(sv, IV_MIN);
2069         return IS_NUMBER_UNDERFLOW_IV;
2070     }
2071     if (SvNVX(sv) > (NV)UV_MAX) {
2072         (void)SvIOKp_on(sv);
2073         (void)SvNOK_on(sv);
2074         SvIsUV_on(sv);
2075         SvUV_set(sv, UV_MAX);
2076         return IS_NUMBER_OVERFLOW_UV;
2077     }
2078     (void)SvIOKp_on(sv);
2079     (void)SvNOK_on(sv);
2080     /* Can't use strtol etc to convert this string.  (See truth table in
2081        sv_2iv  */
2082     if (SvNVX(sv) <= (UV)IV_MAX) {
2083         SvIV_set(sv, I_V(SvNVX(sv)));
2084         if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2085             SvIOK_on(sv); /* Integer is precise. NOK, IOK */
2086         } else {
2087             /* Integer is imprecise. NOK, IOKp */
2088         }
2089         return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
2090     }
2091     SvIsUV_on(sv);
2092     SvUV_set(sv, U_V(SvNVX(sv)));
2093     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2094         if (SvUVX(sv) == UV_MAX) {
2095             /* As we know that NVs don't preserve UVs, UV_MAX cannot
2096                possibly be preserved by NV. Hence, it must be overflow.
2097                NOK, IOKp */
2098             return IS_NUMBER_OVERFLOW_UV;
2099         }
2100         SvIOK_on(sv); /* Integer is precise. NOK, UOK */
2101     } else {
2102         /* Integer is imprecise. NOK, IOKp */
2103     }
2104     return IS_NUMBER_OVERFLOW_IV;
2105 }
2106 #endif /* !NV_PRESERVES_UV*/
2107
2108 /* If numtype is infnan, set the NV of the sv accordingly.
2109  * If numtype is anything else, try setting the NV using Atof(PV). */
2110 #ifdef USING_MSVC6
2111 #  pragma warning(push)
2112 #  pragma warning(disable:4756;disable:4056)
2113 #endif
2114 static void
2115 S_sv_setnv(pTHX_ SV* sv, int numtype)
2116 {
2117     bool pok = cBOOL(SvPOK(sv));
2118     bool nok = FALSE;
2119     if ((numtype & IS_NUMBER_INFINITY)) {
2120         SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -NV_INF : NV_INF);
2121         nok = TRUE;
2122     }
2123     else if ((numtype & IS_NUMBER_NAN)) {
2124         SvNV_set(sv, NV_NAN);
2125         nok = TRUE;
2126     }
2127     else if (pok) {
2128         SvNV_set(sv, Atof(SvPVX_const(sv)));
2129         /* Purposefully no true nok here, since we don't want to blow
2130          * away the possible IOK/UV of an existing sv. */
2131     }
2132     if (nok) {
2133         SvNOK_only(sv); /* No IV or UV please, this is pure infnan. */
2134         if (pok)
2135             SvPOK_on(sv); /* PV is okay, though. */
2136     }
2137 }
2138 #ifdef USING_MSVC6
2139 #  pragma warning(pop)
2140 #endif
2141
2142 STATIC bool
2143 S_sv_2iuv_common(pTHX_ SV *const sv)
2144 {
2145     PERL_ARGS_ASSERT_SV_2IUV_COMMON;
2146
2147     if (SvNOKp(sv)) {
2148         /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2149          * without also getting a cached IV/UV from it at the same time
2150          * (ie PV->NV conversion should detect loss of accuracy and cache
2151          * IV or UV at same time to avoid this. */
2152         /* IV-over-UV optimisation - choose to cache IV if possible */
2153
2154         if (SvTYPE(sv) == SVt_NV)
2155             sv_upgrade(sv, SVt_PVNV);
2156
2157         (void)SvIOKp_on(sv);    /* Must do this first, to clear any SvOOK */
2158         /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
2159            certainly cast into the IV range at IV_MAX, whereas the correct
2160            answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
2161            cases go to UV */
2162 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2163         if (Perl_isnan(SvNVX(sv))) {
2164             SvUV_set(sv, 0);
2165             SvIsUV_on(sv);
2166             return FALSE;
2167         }
2168 #endif
2169         if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2170             SvIV_set(sv, I_V(SvNVX(sv)));
2171             if (SvNVX(sv) == (NV) SvIVX(sv)
2172 #ifndef NV_PRESERVES_UV
2173                 && SvIVX(sv) != IV_MIN /* avoid negating IV_MIN below */
2174                 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2175                     (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2176                 /* Don't flag it as "accurately an integer" if the number
2177                    came from a (by definition imprecise) NV operation, and
2178                    we're outside the range of NV integer precision */
2179 #endif
2180                 ) {
2181                 if (SvNOK(sv))
2182                     SvIOK_on(sv);  /* Can this go wrong with rounding? NWC */
2183                 else {
2184                     /* scalar has trailing garbage, eg "42a" */
2185                 }
2186                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2187                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (precise)\n",
2188                                       PTR2UV(sv),
2189                                       SvNVX(sv),
2190                                       SvIVX(sv)));
2191
2192             } else {
2193                 /* IV not precise.  No need to convert from PV, as NV
2194                    conversion would already have cached IV if it detected
2195                    that PV->IV would be better than PV->NV->IV
2196                    flags already correct - don't set public IOK.  */
2197                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2198                                       "0x%"UVxf" iv(%"NVgf" => %"IVdf") (imprecise)\n",
2199                                       PTR2UV(sv),
2200                                       SvNVX(sv),
2201                                       SvIVX(sv)));
2202             }
2203             /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2204                but the cast (NV)IV_MIN rounds to a the value less (more
2205                negative) than IV_MIN which happens to be equal to SvNVX ??
2206                Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2207                NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2208                (NV)UVX == NVX are both true, but the values differ. :-(
2209                Hopefully for 2s complement IV_MIN is something like
2210                0x8000000000000000 which will be exact. NWC */
2211         }
2212         else {
2213             SvUV_set(sv, U_V(SvNVX(sv)));
2214             if (
2215                 (SvNVX(sv) == (NV) SvUVX(sv))
2216 #ifndef  NV_PRESERVES_UV
2217                 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2218                 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2219                 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2220                 /* Don't flag it as "accurately an integer" if the number
2221                    came from a (by definition imprecise) NV operation, and
2222                    we're outside the range of NV integer precision */
2223 #endif
2224                 && SvNOK(sv)
2225                 )
2226                 SvIOK_on(sv);
2227             SvIsUV_on(sv);
2228             DEBUG_c(PerlIO_printf(Perl_debug_log,
2229                                   "0x%"UVxf" 2iv(%"UVuf" => %"IVdf") (as unsigned)\n",
2230                                   PTR2UV(sv),
2231                                   SvUVX(sv),
2232                                   SvUVX(sv)));
2233         }
2234     }
2235     else if (SvPOKp(sv)) {
2236         UV value;
2237         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2238         /* We want to avoid a possible problem when we cache an IV/ a UV which
2239            may be later translated to an NV, and the resulting NV is not
2240            the same as the direct translation of the initial string
2241            (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2242            be careful to ensure that the value with the .456 is around if the
2243            NV value is requested in the future).
2244         
2245            This means that if we cache such an IV/a UV, we need to cache the
2246            NV as well.  Moreover, we trade speed for space, and do not
2247            cache the NV if we are sure it's not needed.
2248          */
2249
2250         /* SVt_PVNV is one higher than SVt_PVIV, hence this order  */
2251         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2252              == IS_NUMBER_IN_UV) {
2253             /* It's definitely an integer, only upgrade to PVIV */
2254             if (SvTYPE(sv) < SVt_PVIV)
2255                 sv_upgrade(sv, SVt_PVIV);
2256             (void)SvIOK_on(sv);
2257         } else if (SvTYPE(sv) < SVt_PVNV)
2258             sv_upgrade(sv, SVt_PVNV);
2259
2260         if ((numtype & (IS_NUMBER_INFINITY | IS_NUMBER_NAN))) {
2261             if (ckWARN(WARN_NUMERIC) && ((numtype & IS_NUMBER_TRAILING)))
2262                 not_a_number(sv);
2263             S_sv_setnv(aTHX_ sv, numtype);
2264             return FALSE;
2265         }
2266
2267         /* If NVs preserve UVs then we only use the UV value if we know that
2268            we aren't going to call atof() below. If NVs don't preserve UVs
2269            then the value returned may have more precision than atof() will
2270            return, even though value isn't perfectly accurate.  */
2271         if ((numtype & (IS_NUMBER_IN_UV
2272 #ifdef NV_PRESERVES_UV
2273                         | IS_NUMBER_NOT_INT
2274 #endif
2275             )) == IS_NUMBER_IN_UV) {
2276             /* This won't turn off the public IOK flag if it was set above  */
2277             (void)SvIOKp_on(sv);
2278
2279             if (!(numtype & IS_NUMBER_NEG)) {
2280                 /* positive */;
2281                 if (value <= (UV)IV_MAX) {
2282                     SvIV_set(sv, (IV)value);
2283                 } else {
2284                     /* it didn't overflow, and it was positive. */
2285                     SvUV_set(sv, value);
2286                     SvIsUV_on(sv);
2287                 }
2288             } else {
2289                 /* 2s complement assumption  */
2290                 if (value <= (UV)IV_MIN) {
2291                     SvIV_set(sv, value == (UV)IV_MIN
2292                                     ? IV_MIN : -(IV)value);
2293                 } else {
2294                     /* Too negative for an IV.  This is a double upgrade, but
2295                        I'm assuming it will be rare.  */
2296                     if (SvTYPE(sv) < SVt_PVNV)
2297                         sv_upgrade(sv, SVt_PVNV);
2298                     SvNOK_on(sv);
2299                     SvIOK_off(sv);
2300                     SvIOKp_on(sv);
2301                     SvNV_set(sv, -(NV)value);
2302                     SvIV_set(sv, IV_MIN);
2303                 }
2304             }
2305         }
2306         /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2307            will be in the previous block to set the IV slot, and the next
2308            block to set the NV slot.  So no else here.  */
2309         
2310         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2311             != IS_NUMBER_IN_UV) {
2312             /* It wasn't an (integer that doesn't overflow the UV). */
2313             S_sv_setnv(aTHX_ sv, numtype);
2314
2315             if (! numtype && ckWARN(WARN_NUMERIC))
2316                 not_a_number(sv);
2317
2318             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%" NVgf ")\n",
2319                                   PTR2UV(sv), SvNVX(sv)));
2320
2321 #ifdef NV_PRESERVES_UV
2322             (void)SvIOKp_on(sv);
2323             (void)SvNOK_on(sv);
2324 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2325             if (Perl_isnan(SvNVX(sv))) {
2326                 SvUV_set(sv, 0);
2327                 SvIsUV_on(sv);
2328                 return FALSE;
2329             }
2330 #endif
2331             if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2332                 SvIV_set(sv, I_V(SvNVX(sv)));
2333                 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2334                     SvIOK_on(sv);
2335                 } else {
2336                     NOOP;  /* Integer is imprecise. NOK, IOKp */
2337                 }
2338                 /* UV will not work better than IV */
2339             } else {
2340                 if (SvNVX(sv) > (NV)UV_MAX) {
2341                     SvIsUV_on(sv);
2342                     /* Integer is inaccurate. NOK, IOKp, is UV */
2343                     SvUV_set(sv, UV_MAX);
2344                 } else {
2345                     SvUV_set(sv, U_V(SvNVX(sv)));
2346                     /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2347                        NV preservse UV so can do correct comparison.  */
2348                     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2349                         SvIOK_on(sv);
2350                     } else {
2351                         NOOP;   /* Integer is imprecise. NOK, IOKp, is UV */
2352                     }
2353                 }
2354                 SvIsUV_on(sv);
2355             }
2356 #else /* NV_PRESERVES_UV */
2357             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2358                 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2359                 /* The IV/UV slot will have been set from value returned by
2360                    grok_number above.  The NV slot has just been set using
2361                    Atof.  */
2362                 SvNOK_on(sv);
2363                 assert (SvIOKp(sv));
2364             } else {
2365                 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2366                     U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2367                     /* Small enough to preserve all bits. */
2368                     (void)SvIOKp_on(sv);
2369                     SvNOK_on(sv);
2370                     SvIV_set(sv, I_V(SvNVX(sv)));
2371                     if ((NV)(SvIVX(sv)) == SvNVX(sv))
2372                         SvIOK_on(sv);
2373                     /* Assumption: first non-preserved integer is < IV_MAX,
2374                        this NV is in the preserved range, therefore: */
2375                     if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2376                           < (UV)IV_MAX)) {
2377                         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);
2378                     }
2379                 } else {
2380                     /* IN_UV NOT_INT
2381                          0      0       already failed to read UV.
2382                          0      1       already failed to read UV.
2383                          1      0       you won't get here in this case. IV/UV
2384                                         slot set, public IOK, Atof() unneeded.
2385                          1      1       already read UV.
2386                        so there's no point in sv_2iuv_non_preserve() attempting
2387                        to use atol, strtol, strtoul etc.  */
2388 #  ifdef DEBUGGING
2389                     sv_2iuv_non_preserve (sv, numtype);
2390 #  else
2391                     sv_2iuv_non_preserve (sv);
2392 #  endif
2393                 }
2394             }
2395 #endif /* NV_PRESERVES_UV */
2396         /* It might be more code efficient to go through the entire logic above
2397            and conditionally set with SvIOKp_on() rather than SvIOK(), but it
2398            gets complex and potentially buggy, so more programmer efficient
2399            to do it this way, by turning off the public flags:  */
2400         if (!numtype)
2401             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2402         }
2403     }
2404     else  {
2405         if (isGV_with_GP(sv))
2406             return glob_2number(MUTABLE_GV(sv));
2407
2408         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2409                 report_uninit(sv);
2410         if (SvTYPE(sv) < SVt_IV)
2411             /* Typically the caller expects that sv_any is not NULL now.  */
2412             sv_upgrade(sv, SVt_IV);
2413         /* Return 0 from the caller.  */
2414         return TRUE;
2415     }
2416     return FALSE;
2417 }
2418
2419 /*
2420 =for apidoc sv_2iv_flags
2421
2422 Return the integer value of an SV, doing any necessary string
2423 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2424 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2425
2426 =cut
2427 */
2428
2429 IV
2430 Perl_sv_2iv_flags(pTHX_ SV *const sv, const I32 flags)
2431 {
2432     PERL_ARGS_ASSERT_SV_2IV_FLAGS;
2433
2434     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2435          && SvTYPE(sv) != SVt_PVFM);
2436
2437     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2438         mg_get(sv);
2439
2440     if (SvROK(sv)) {
2441         if (SvAMAGIC(sv)) {
2442             SV * tmpstr;
2443             if (flags & SV_SKIP_OVERLOAD)
2444                 return 0;
2445             tmpstr = AMG_CALLunary(sv, numer_amg);
2446             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2447                 return SvIV(tmpstr);
2448             }
2449         }
2450         return PTR2IV(SvRV(sv));
2451     }
2452
2453     if (SvVALID(sv) || isREGEXP(sv)) {
2454         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2455            the same flag bit as SVf_IVisUV, so must not let them cache IVs.
2456            In practice they are extremely unlikely to actually get anywhere
2457            accessible by user Perl code - the only way that I'm aware of is when
2458            a constant subroutine which is used as the second argument to index.
2459
2460            Regexps have no SvIVX and SvNVX fields.
2461         */
2462         assert(isREGEXP(sv) || SvPOKp(sv));
2463         {
2464             UV value;
2465             const char * const ptr =
2466                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2467             const int numtype
2468                 = grok_number(ptr, SvCUR(sv), &value);
2469
2470             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2471                 == IS_NUMBER_IN_UV) {
2472                 /* It's definitely an integer */
2473                 if (numtype & IS_NUMBER_NEG) {
2474                     if (value < (UV)IV_MIN)
2475                         return -(IV)value;
2476                 } else {
2477                     if (value < (UV)IV_MAX)
2478                         return (IV)value;
2479                 }
2480             }
2481
2482             /* Quite wrong but no good choices. */
2483             if ((numtype & IS_NUMBER_INFINITY)) {
2484                 return (numtype & IS_NUMBER_NEG) ? IV_MIN : IV_MAX;
2485             } else if ((numtype & IS_NUMBER_NAN)) {
2486                 return 0; /* So wrong. */
2487             }
2488
2489             if (!numtype) {
2490                 if (ckWARN(WARN_NUMERIC))
2491                     not_a_number(sv);
2492             }
2493             return I_V(Atof(ptr));
2494         }
2495     }
2496
2497     if (SvTHINKFIRST(sv)) {
2498         if (SvREADONLY(sv) && !SvOK(sv)) {
2499             if (ckWARN(WARN_UNINITIALIZED))
2500                 report_uninit(sv);
2501             return 0;
2502         }
2503     }
2504
2505     if (!SvIOKp(sv)) {
2506         if (S_sv_2iuv_common(aTHX_ sv))
2507             return 0;
2508     }
2509
2510     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2iv(%"IVdf")\n",
2511         PTR2UV(sv),SvIVX(sv)));
2512     return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2513 }
2514
2515 /*
2516 =for apidoc sv_2uv_flags
2517
2518 Return the unsigned integer value of an SV, doing any necessary string
2519 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2520 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2521
2522 =cut
2523 */
2524
2525 UV
2526 Perl_sv_2uv_flags(pTHX_ SV *const sv, const I32 flags)
2527 {
2528     PERL_ARGS_ASSERT_SV_2UV_FLAGS;
2529
2530     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2531         mg_get(sv);
2532
2533     if (SvROK(sv)) {
2534         if (SvAMAGIC(sv)) {
2535             SV *tmpstr;
2536             if (flags & SV_SKIP_OVERLOAD)
2537                 return 0;
2538             tmpstr = AMG_CALLunary(sv, numer_amg);
2539             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2540                 return SvUV(tmpstr);
2541             }
2542         }
2543         return PTR2UV(SvRV(sv));
2544     }
2545
2546     if (SvVALID(sv) || isREGEXP(sv)) {
2547         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2548            the same flag bit as SVf_IVisUV, so must not let them cache IVs.  
2549            Regexps have no SvIVX and SvNVX fields. */
2550         assert(isREGEXP(sv) || SvPOKp(sv));
2551         {
2552             UV value;
2553             const char * const ptr =
2554                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2555             const int numtype
2556                 = grok_number(ptr, SvCUR(sv), &value);
2557
2558             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2559                 == IS_NUMBER_IN_UV) {
2560                 /* It's definitely an integer */
2561                 if (!(numtype & IS_NUMBER_NEG))
2562                     return value;
2563             }
2564
2565             /* Quite wrong but no good choices. */
2566             if ((numtype & IS_NUMBER_INFINITY)) {
2567                 return UV_MAX; /* So wrong. */
2568             } else if ((numtype & IS_NUMBER_NAN)) {
2569                 return 0; /* So wrong. */
2570             }
2571
2572             if (!numtype) {
2573                 if (ckWARN(WARN_NUMERIC))
2574                     not_a_number(sv);
2575             }
2576             return U_V(Atof(ptr));
2577         }
2578     }
2579
2580     if (SvTHINKFIRST(sv)) {
2581         if (SvREADONLY(sv) && !SvOK(sv)) {
2582             if (ckWARN(WARN_UNINITIALIZED))
2583                 report_uninit(sv);
2584             return 0;
2585         }
2586     }
2587
2588     if (!SvIOKp(sv)) {
2589         if (S_sv_2iuv_common(aTHX_ sv))
2590             return 0;
2591     }
2592
2593     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2uv(%"UVuf")\n",
2594                           PTR2UV(sv),SvUVX(sv)));
2595     return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2596 }
2597
2598 /*
2599 =for apidoc sv_2nv_flags
2600
2601 Return the num value of an SV, doing any necessary string or integer
2602 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
2603 Normally used via the C<SvNV(sv)> and C<SvNVx(sv)> macros.
2604
2605 =cut
2606 */
2607
2608 NV
2609 Perl_sv_2nv_flags(pTHX_ SV *const sv, const I32 flags)
2610 {
2611     PERL_ARGS_ASSERT_SV_2NV_FLAGS;
2612
2613     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2614          && SvTYPE(sv) != SVt_PVFM);
2615     if (SvGMAGICAL(sv) || SvVALID(sv) || isREGEXP(sv)) {
2616         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2617            the same flag bit as SVf_IVisUV, so must not let them cache NVs.
2618            Regexps have no SvIVX and SvNVX fields.  */
2619         const char *ptr;
2620         if (flags & SV_GMAGIC)
2621             mg_get(sv);
2622         if (SvNOKp(sv))
2623             return SvNVX(sv);
2624         if (SvPOKp(sv) && !SvIOKp(sv)) {
2625             ptr = SvPVX_const(sv);
2626           grokpv:
2627             if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2628                 !grok_number(ptr, SvCUR(sv), NULL))
2629                 not_a_number(sv);
2630             return Atof(ptr);
2631         }
2632         if (SvIOKp(sv)) {
2633             if (SvIsUV(sv))
2634                 return (NV)SvUVX(sv);
2635             else
2636                 return (NV)SvIVX(sv);
2637         }
2638         if (SvROK(sv)) {
2639             goto return_rok;
2640         }
2641         if (isREGEXP(sv)) {
2642             ptr = RX_WRAPPED((REGEXP *)sv);
2643             goto grokpv;
2644         }
2645         assert(SvTYPE(sv) >= SVt_PVMG);
2646         /* This falls through to the report_uninit near the end of the
2647            function. */
2648     } else if (SvTHINKFIRST(sv)) {
2649         if (SvROK(sv)) {
2650         return_rok:
2651             if (SvAMAGIC(sv)) {
2652                 SV *tmpstr;
2653                 if (flags & SV_SKIP_OVERLOAD)
2654                     return 0;
2655                 tmpstr = AMG_CALLunary(sv, numer_amg);
2656                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2657                     return SvNV(tmpstr);
2658                 }
2659             }
2660             return PTR2NV(SvRV(sv));
2661         }
2662         if (SvREADONLY(sv) && !SvOK(sv)) {
2663             if (ckWARN(WARN_UNINITIALIZED))
2664                 report_uninit(sv);
2665             return 0.0;
2666         }
2667     }
2668     if (SvTYPE(sv) < SVt_NV) {
2669         /* The logic to use SVt_PVNV if necessary is in sv_upgrade.  */
2670         sv_upgrade(sv, SVt_NV);
2671         DEBUG_c({
2672             STORE_NUMERIC_LOCAL_SET_STANDARD();
2673             PerlIO_printf(Perl_debug_log,
2674                           "0x%"UVxf" num(%" NVgf ")\n",
2675                           PTR2UV(sv), SvNVX(sv));
2676             RESTORE_NUMERIC_LOCAL();
2677         });
2678     }
2679     else if (SvTYPE(sv) < SVt_PVNV)
2680         sv_upgrade(sv, SVt_PVNV);
2681     if (SvNOKp(sv)) {
2682         return SvNVX(sv);
2683     }
2684     if (SvIOKp(sv)) {
2685         SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2686 #ifdef NV_PRESERVES_UV
2687         if (SvIOK(sv))
2688             SvNOK_on(sv);
2689         else
2690             SvNOKp_on(sv);
2691 #else
2692         /* Only set the public NV OK flag if this NV preserves the IV  */
2693         /* Check it's not 0xFFFFFFFFFFFFFFFF */
2694         if (SvIOK(sv) &&
2695             SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2696                        : (SvIVX(sv) == I_V(SvNVX(sv))))
2697             SvNOK_on(sv);
2698         else
2699             SvNOKp_on(sv);
2700 #endif
2701     }
2702     else if (SvPOKp(sv)) {
2703         UV value;
2704         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2705         if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2706             not_a_number(sv);
2707 #ifdef NV_PRESERVES_UV
2708         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2709             == IS_NUMBER_IN_UV) {
2710             /* It's definitely an integer */
2711             SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2712         } else {
2713             S_sv_setnv(aTHX_ sv, numtype);
2714         }
2715         if (numtype)
2716             SvNOK_on(sv);
2717         else
2718             SvNOKp_on(sv);
2719 #else
2720         SvNV_set(sv, Atof(SvPVX_const(sv)));
2721         /* Only set the public NV OK flag if this NV preserves the value in
2722            the PV at least as well as an IV/UV would.
2723            Not sure how to do this 100% reliably. */
2724         /* if that shift count is out of range then Configure's test is
2725            wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2726            UV_BITS */
2727         if (((UV)1 << NV_PRESERVES_UV_BITS) >
2728             U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2729             SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2730         } else if (!(numtype & IS_NUMBER_IN_UV)) {
2731             /* Can't use strtol etc to convert this string, so don't try.
2732                sv_2iv and sv_2uv will use the NV to convert, not the PV.  */
2733             SvNOK_on(sv);
2734         } else {
2735             /* value has been set.  It may not be precise.  */
2736             if ((numtype & IS_NUMBER_NEG) && (value >= (UV)IV_MIN)) {
2737                 /* 2s complement assumption for (UV)IV_MIN  */
2738                 SvNOK_on(sv); /* Integer is too negative.  */
2739             } else {
2740                 SvNOKp_on(sv);
2741                 SvIOKp_on(sv);
2742
2743                 if (numtype & IS_NUMBER_NEG) {
2744                     /* -IV_MIN is undefined, but we should never reach
2745                      * this point with both IS_NUMBER_NEG and value ==
2746                      * (UV)IV_MIN */
2747                     assert(value != (UV)IV_MIN);
2748                     SvIV_set(sv, -(IV)value);
2749                 } else if (value <= (UV)IV_MAX) {
2750                     SvIV_set(sv, (IV)value);
2751                 } else {
2752                     SvUV_set(sv, value);
2753                     SvIsUV_on(sv);
2754                 }
2755
2756                 if (numtype & IS_NUMBER_NOT_INT) {
2757                     /* I believe that even if the original PV had decimals,
2758                        they are lost beyond the limit of the FP precision.
2759                        However, neither is canonical, so both only get p
2760                        flags.  NWC, 2000/11/25 */
2761                     /* Both already have p flags, so do nothing */
2762                 } else {
2763                     const NV nv = SvNVX(sv);
2764                     /* XXX should this spot have NAN_COMPARE_BROKEN, too? */
2765                     if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2766                         if (SvIVX(sv) == I_V(nv)) {
2767                             SvNOK_on(sv);
2768                         } else {
2769                             /* It had no "." so it must be integer.  */
2770                         }
2771                         SvIOK_on(sv);
2772                     } else {
2773                         /* between IV_MAX and NV(UV_MAX).
2774                            Could be slightly > UV_MAX */
2775
2776                         if (numtype & IS_NUMBER_NOT_INT) {
2777                             /* UV and NV both imprecise.  */
2778                         } else {
2779                             const UV nv_as_uv = U_V(nv);
2780
2781                             if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2782                                 SvNOK_on(sv);
2783                             }
2784                             SvIOK_on(sv);
2785                         }
2786                     }
2787                 }
2788             }
2789         }
2790         /* It might be more code efficient to go through the entire logic above
2791            and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2792            gets complex and potentially buggy, so more programmer efficient
2793            to do it this way, by turning off the public flags:  */
2794         if (!numtype)
2795             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2796 #endif /* NV_PRESERVES_UV */
2797     }
2798     else  {
2799         if (isGV_with_GP(sv)) {
2800             glob_2number(MUTABLE_GV(sv));
2801             return 0.0;
2802         }
2803
2804         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2805             report_uninit(sv);
2806         assert (SvTYPE(sv) >= SVt_NV);
2807         /* Typically the caller expects that sv_any is not NULL now.  */
2808         /* XXX Ilya implies that this is a bug in callers that assume this
2809            and ideally should be fixed.  */
2810         return 0.0;
2811     }
2812     DEBUG_c({
2813         STORE_NUMERIC_LOCAL_SET_STANDARD();
2814         PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2nv(%" NVgf ")\n",
2815                       PTR2UV(sv), SvNVX(sv));
2816         RESTORE_NUMERIC_LOCAL();
2817     });
2818     return SvNVX(sv);
2819 }
2820
2821 /*
2822 =for apidoc sv_2num
2823
2824 Return an SV with the numeric value of the source SV, doing any necessary
2825 reference or overload conversion.  The caller is expected to have handled
2826 get-magic already.
2827
2828 =cut
2829 */
2830
2831 SV *
2832 Perl_sv_2num(pTHX_ SV *const sv)
2833 {
2834     PERL_ARGS_ASSERT_SV_2NUM;
2835
2836     if (!SvROK(sv))
2837         return sv;
2838     if (SvAMAGIC(sv)) {
2839         SV * const tmpsv = AMG_CALLunary(sv, numer_amg);
2840         TAINT_IF(tmpsv && SvTAINTED(tmpsv));
2841         if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2842             return sv_2num(tmpsv);
2843     }
2844     return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2845 }
2846
2847 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2848  * UV as a string towards the end of buf, and return pointers to start and
2849  * end of it.
2850  *
2851  * We assume that buf is at least TYPE_CHARS(UV) long.
2852  */
2853
2854 static char *
2855 S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
2856 {
2857     char *ptr = buf + TYPE_CHARS(UV);
2858     char * const ebuf = ptr;
2859     int sign;
2860
2861     PERL_ARGS_ASSERT_UIV_2BUF;
2862
2863     if (is_uv)
2864         sign = 0;
2865     else if (iv >= 0) {
2866         uv = iv;
2867         sign = 0;
2868     } else {
2869         uv = (iv == IV_MIN) ? (UV)iv : (UV)(-iv);
2870         sign = 1;
2871     }
2872     do {
2873         *--ptr = '0' + (char)(uv % 10);
2874     } while (uv /= 10);
2875     if (sign)
2876         *--ptr = '-';
2877     *peob = ebuf;
2878     return ptr;
2879 }
2880
2881 /* Helper for sv_2pv_flags and sv_vcatpvfn_flags.  If the NV is an
2882  * infinity or a not-a-number, writes the appropriate strings to the
2883  * buffer, including a zero byte.  On success returns the written length,
2884  * excluding the zero byte, on failure (not an infinity, not a nan)
2885  * returns zero, assert-fails on maxlen being too short.
2886  *
2887  * XXX for "Inf", "-Inf", and "NaN", we could have three read-only
2888  * shared string constants we point to, instead of generating a new
2889  * string for each instance. */
2890 STATIC size_t
2891 S_infnan_2pv(NV nv, char* buffer, size_t maxlen, char plus) {
2892     char* s = buffer;
2893     assert(maxlen >= 4);
2894     if (Perl_isinf(nv)) {
2895         if (nv < 0) {
2896             if (maxlen < 5) /* "-Inf\0"  */
2897                 return 0;
2898             *s++ = '-';
2899         } else if (plus) {
2900             *s++ = '+';
2901         }
2902         *s++ = 'I';
2903         *s++ = 'n';
2904         *s++ = 'f';
2905     }
2906     else if (Perl_isnan(nv)) {
2907         *s++ = 'N';
2908         *s++ = 'a';
2909         *s++ = 'N';
2910         /* XXX optionally output the payload mantissa bits as
2911          * "(unsigned)" (to match the nan("...") C99 function,
2912          * or maybe as "(0xhhh...)"  would make more sense...
2913          * provide a format string so that the user can decide?
2914          * NOTE: would affect the maxlen and assert() logic.*/
2915     }
2916     else {
2917       return 0;
2918     }
2919     assert((s == buffer + 3) || (s == buffer + 4));
2920     *s++ = 0;
2921     return s - buffer - 1; /* -1: excluding the zero byte */
2922 }
2923
2924 /*
2925 =for apidoc sv_2pv_flags
2926
2927 Returns a pointer to the string value of an SV, and sets *lp to its length.
2928 If flags includes SV_GMAGIC, does an mg_get() first.  Coerces sv to a
2929 string if necessary.  Normally invoked via the C<SvPV_flags> macro.
2930 C<sv_2pv()> and C<sv_2pv_nomg> usually end up here too.
2931
2932 =cut
2933 */
2934
2935 char *
2936 Perl_sv_2pv_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
2937 {
2938     char *s;
2939
2940     PERL_ARGS_ASSERT_SV_2PV_FLAGS;
2941
2942     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2943          && SvTYPE(sv) != SVt_PVFM);
2944     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2945         mg_get(sv);
2946     if (SvROK(sv)) {
2947         if (SvAMAGIC(sv)) {
2948             SV *tmpstr;
2949             if (flags & SV_SKIP_OVERLOAD)
2950                 return NULL;
2951             tmpstr = AMG_CALLunary(sv, string_amg);
2952             TAINT_IF(tmpstr && SvTAINTED(tmpstr));
2953             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2954                 /* Unwrap this:  */
2955                 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2956                  */
2957
2958                 char *pv;
2959                 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2960                     if (flags & SV_CONST_RETURN) {
2961                         pv = (char *) SvPVX_const(tmpstr);
2962                     } else {
2963                         pv = (flags & SV_MUTABLE_RETURN)
2964                             ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2965                     }
2966                     if (lp)
2967                         *lp = SvCUR(tmpstr);
2968                 } else {
2969                     pv = sv_2pv_flags(tmpstr, lp, flags);
2970                 }
2971                 if (SvUTF8(tmpstr))
2972                     SvUTF8_on(sv);
2973                 else
2974                     SvUTF8_off(sv);
2975                 return pv;
2976             }
2977         }
2978         {
2979             STRLEN len;
2980             char *retval;
2981             char *buffer;
2982             SV *const referent = SvRV(sv);
2983
2984             if (!referent) {
2985                 len = 7;
2986                 retval = buffer = savepvn("NULLREF", len);
2987             } else if (SvTYPE(referent) == SVt_REGEXP &&
2988                        (!(PL_curcop->cop_hints & HINT_NO_AMAGIC) ||
2989                         amagic_is_enabled(string_amg))) {
2990                 REGEXP * const re = (REGEXP *)MUTABLE_PTR(referent);
2991
2992                 assert(re);
2993                         
2994                 /* If the regex is UTF-8 we want the containing scalar to
2995                    have an UTF-8 flag too */
2996                 if (RX_UTF8(re))
2997                     SvUTF8_on(sv);
2998                 else
2999                     SvUTF8_off(sv);     
3000
3001                 if (lp)
3002                     *lp = RX_WRAPLEN(re);
3003  
3004                 return RX_WRAPPED(re);
3005             } else {
3006                 const char *const typestr = sv_reftype(referent, 0);
3007                 const STRLEN typelen = strlen(typestr);
3008                 UV addr = PTR2UV(referent);
3009                 const char *stashname = NULL;
3010                 STRLEN stashnamelen = 0; /* hush, gcc */
3011                 const char *buffer_end;
3012
3013                 if (SvOBJECT(referent)) {
3014                     const HEK *const name = HvNAME_HEK(SvSTASH(referent));
3015
3016                     if (name) {
3017                         stashname = HEK_KEY(name);
3018                         stashnamelen = HEK_LEN(name);
3019
3020                         if (HEK_UTF8(name)) {
3021                             SvUTF8_on(sv);
3022                         } else {
3023                             SvUTF8_off(sv);
3024                         }
3025                     } else {
3026                         stashname = "__ANON__";
3027                         stashnamelen = 8;
3028                     }
3029                     len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
3030                         + 2 * sizeof(UV) + 2 /* )\0 */;
3031                 } else {
3032                     len = typelen + 3 /* (0x */
3033                         + 2 * sizeof(UV) + 2 /* )\0 */;
3034                 }
3035
3036                 Newx(buffer, len, char);
3037                 buffer_end = retval = buffer + len;
3038
3039                 /* Working backwards  */
3040                 *--retval = '\0';
3041                 *--retval = ')';
3042                 do {
3043                     *--retval = PL_hexdigit[addr & 15];
3044                 } while (addr >>= 4);
3045                 *--retval = 'x';
3046                 *--retval = '0';
3047                 *--retval = '(';
3048
3049                 retval -= typelen;
3050                 memcpy(retval, typestr, typelen);
3051
3052                 if (stashname) {
3053                     *--retval = '=';
3054                     retval -= stashnamelen;
3055                     memcpy(retval, stashname, stashnamelen);
3056                 }
3057                 /* retval may not necessarily have reached the start of the
3058                    buffer here.  */
3059                 assert (retval >= buffer);
3060
3061                 len = buffer_end - retval - 1; /* -1 for that \0  */
3062             }
3063             if (lp)
3064                 *lp = len;
3065             SAVEFREEPV(buffer);
3066             return retval;
3067         }
3068     }
3069
3070     if (SvPOKp(sv)) {
3071         if (lp)
3072             *lp = SvCUR(sv);
3073         if (flags & SV_MUTABLE_RETURN)
3074             return SvPVX_mutable(sv);
3075         if (flags & SV_CONST_RETURN)
3076             return (char *)SvPVX_const(sv);
3077         return SvPVX(sv);
3078     }
3079
3080     if (SvIOK(sv)) {
3081         /* I'm assuming that if both IV and NV are equally valid then
3082            converting the IV is going to be more efficient */
3083         const U32 isUIOK = SvIsUV(sv);
3084         char buf[TYPE_CHARS(UV)];
3085         char *ebuf, *ptr;
3086         STRLEN len;
3087
3088         if (SvTYPE(sv) < SVt_PVIV)
3089             sv_upgrade(sv, SVt_PVIV);
3090         ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
3091         len = ebuf - ptr;
3092         /* inlined from sv_setpvn */
3093         s = SvGROW_mutable(sv, len + 1);
3094         Move(ptr, s, len, char);
3095         s += len;
3096         *s = '\0';
3097         SvPOK_on(sv);
3098     }
3099     else if (SvNOK(sv)) {
3100         if (SvTYPE(sv) < SVt_PVNV)
3101             sv_upgrade(sv, SVt_PVNV);
3102         if (SvNVX(sv) == 0.0
3103 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
3104             && !Perl_isnan(SvNVX(sv))
3105 #endif
3106         ) {
3107             s = SvGROW_mutable(sv, 2);
3108             *s++ = '0';
3109             *s = '\0';
3110         } else {
3111             STRLEN len;
3112             STRLEN size = 5; /* "-Inf\0" */
3113
3114             s = SvGROW_mutable(sv, size);
3115             len = S_infnan_2pv(SvNVX(sv), s, size, 0);
3116             if (len > 0) {
3117                 s += len;
3118                 SvPOK_on(sv);
3119             }
3120             else {
3121                 /* some Xenix systems wipe out errno here */
3122                 dSAVE_ERRNO;
3123
3124                 size =
3125                     1 + /* sign */
3126                     1 + /* "." */
3127                     NV_DIG +
3128                     1 + /* "e" */
3129                     1 + /* sign */
3130                     5 + /* exponent digits */
3131                     1 + /* \0 */
3132                     2; /* paranoia */
3133
3134                 s = SvGROW_mutable(sv, size);
3135 #ifndef USE_LOCALE_NUMERIC
3136                 SNPRINTF_G(SvNVX(sv), s, SvLEN(sv), NV_DIG);
3137
3138                 SvPOK_on(sv);
3139 #else
3140                 {
3141                     bool local_radix;
3142                     DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
3143                     STORE_LC_NUMERIC_SET_TO_NEEDED();
3144
3145                     local_radix =
3146                         PL_numeric_local &&
3147                         PL_numeric_radix_sv &&
3148                         SvUTF8(PL_numeric_radix_sv);
3149                     if (local_radix && SvLEN(PL_numeric_radix_sv) > 1) {
3150                         size += SvLEN(PL_numeric_radix_sv) - 1;
3151                         s = SvGROW_mutable(sv, size);
3152                     }
3153
3154                     SNPRINTF_G(SvNVX(sv), s, SvLEN(sv), NV_DIG);
3155
3156                     /* If the radix character is UTF-8, and actually is in the
3157                      * output, turn on the UTF-8 flag for the scalar */
3158                     if (local_radix &&
3159                         instr(s, SvPVX_const(PL_numeric_radix_sv))) {
3160                         SvUTF8_on(sv);
3161                     }
3162
3163                     RESTORE_LC_NUMERIC();
3164                 }
3165
3166                 /* We don't call SvPOK_on(), because it may come to
3167                  * pass that the locale changes so that the
3168                  * stringification we just did is no longer correct.  We
3169                  * will have to re-stringify every time it is needed */
3170 #endif
3171                 RESTORE_ERRNO;
3172             }
3173             while (*s) s++;
3174         }
3175     }
3176     else if (isGV_with_GP(sv)) {
3177         GV *const gv = MUTABLE_GV(sv);
3178         SV *const buffer = sv_newmortal();
3179
3180         gv_efullname3(buffer, gv, "*");
3181
3182         assert(SvPOK(buffer));
3183         if (SvUTF8(buffer))
3184             SvUTF8_on(sv);
3185         if (lp)
3186             *lp = SvCUR(buffer);
3187         return SvPVX(buffer);
3188     }
3189     else if (isREGEXP(sv)) {
3190         if (lp) *lp = RX_WRAPLEN((REGEXP *)sv);
3191         return RX_WRAPPED((REGEXP *)sv);
3192     }
3193     else {
3194         if (lp)
3195             *lp = 0;
3196         if (flags & SV_UNDEF_RETURNS_NULL)
3197             return NULL;
3198         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
3199             report_uninit(sv);
3200         /* Typically the caller expects that sv_any is not NULL now.  */
3201         if (!SvREADONLY(sv) && SvTYPE(sv) < SVt_PV)
3202             sv_upgrade(sv, SVt_PV);
3203         return (char *)"";
3204     }
3205
3206     {
3207         const STRLEN len = s - SvPVX_const(sv);
3208         if (lp) 
3209             *lp = len;
3210         SvCUR_set(sv, len);
3211     }
3212     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
3213                           PTR2UV(sv),SvPVX_const(sv)));
3214     if (flags & SV_CONST_RETURN)
3215         return (char *)SvPVX_const(sv);
3216     if (flags & SV_MUTABLE_RETURN)
3217         return SvPVX_mutable(sv);
3218     return SvPVX(sv);
3219 }
3220
3221 /*
3222 =for apidoc sv_copypv
3223
3224 Copies a stringified representation of the source SV into the
3225 destination SV.  Automatically performs any necessary mg_get and
3226 coercion of numeric values into strings.  Guaranteed to preserve
3227 UTF8 flag even from overloaded objects.  Similar in nature to
3228 sv_2pv[_flags] but operates directly on an SV instead of just the
3229 string.  Mostly uses sv_2pv_flags to do its work, except when that
3230 would lose the UTF-8'ness of the PV.
3231
3232 =for apidoc sv_copypv_nomg
3233
3234 Like sv_copypv, but doesn't invoke get magic first.
3235
3236 =for apidoc sv_copypv_flags
3237
3238 Implementation of sv_copypv and sv_copypv_nomg.  Calls get magic iff flags
3239 include SV_GMAGIC.
3240
3241 =cut
3242 */
3243
3244 void
3245 Perl_sv_copypv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
3246 {
3247     STRLEN len;
3248     const char *s;
3249
3250     PERL_ARGS_ASSERT_SV_COPYPV_FLAGS;
3251
3252     s = SvPV_flags_const(ssv,len,(flags & SV_GMAGIC));
3253     sv_setpvn(dsv,s,len);
3254     if (SvUTF8(ssv))
3255         SvUTF8_on(dsv);
3256     else
3257         SvUTF8_off(dsv);
3258 }
3259
3260 /*
3261 =for apidoc sv_2pvbyte
3262
3263 Return a pointer to the byte-encoded representation of the SV, and set *lp
3264 to its length.  May cause the SV to be downgraded from UTF-8 as a
3265 side-effect.
3266
3267 Usually accessed via the C<SvPVbyte> macro.
3268
3269 =cut
3270 */
3271
3272 char *
3273 Perl_sv_2pvbyte(pTHX_ SV *sv, STRLEN *const lp)
3274 {
3275     PERL_ARGS_ASSERT_SV_2PVBYTE;
3276
3277     SvGETMAGIC(sv);
3278     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3279      || isGV_with_GP(sv) || SvROK(sv)) {
3280         SV *sv2 = sv_newmortal();
3281         sv_copypv_nomg(sv2,sv);
3282         sv = sv2;
3283     }
3284     sv_utf8_downgrade(sv,0);
3285     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3286 }
3287
3288 /*
3289 =for apidoc sv_2pvutf8
3290
3291 Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
3292 to its length.  May cause the SV to be upgraded to UTF-8 as a side-effect.
3293
3294 Usually accessed via the C<SvPVutf8> macro.
3295
3296 =cut
3297 */
3298
3299 char *
3300 Perl_sv_2pvutf8(pTHX_ SV *sv, STRLEN *const lp)
3301 {
3302     PERL_ARGS_ASSERT_SV_2PVUTF8;
3303
3304     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3305      || isGV_with_GP(sv) || SvROK(sv))
3306         sv = sv_mortalcopy(sv);
3307     else
3308         SvGETMAGIC(sv);
3309     sv_utf8_upgrade_nomg(sv);
3310     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3311 }
3312
3313
3314 /*
3315 =for apidoc sv_2bool
3316
3317 This macro is only used by sv_true() or its macro equivalent, and only if
3318 the latter's argument is neither SvPOK, SvIOK nor SvNOK.
3319 It calls sv_2bool_flags with the SV_GMAGIC flag.
3320
3321 =for apidoc sv_2bool_flags
3322
3323 This function is only used by sv_true() and friends,  and only if
3324 the latter's argument is neither SvPOK, SvIOK nor SvNOK.  If the flags
3325 contain SV_GMAGIC, then it does an mg_get() first.
3326
3327
3328 =cut
3329 */
3330
3331 bool
3332 Perl_sv_2bool_flags(pTHX_ SV *sv, I32 flags)
3333 {
3334     PERL_ARGS_ASSERT_SV_2BOOL_FLAGS;
3335
3336     restart:
3337     if(flags & SV_GMAGIC) SvGETMAGIC(sv);
3338
3339     if (!SvOK(sv))
3340         return 0;
3341     if (SvROK(sv)) {
3342         if (SvAMAGIC(sv)) {
3343             SV * const tmpsv = AMG_CALLunary(sv, bool__amg);
3344             if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv)))) {
3345                 bool svb;
3346                 sv = tmpsv;
3347                 if(SvGMAGICAL(sv)) {
3348                     flags = SV_GMAGIC;
3349                     goto restart; /* call sv_2bool */
3350                 }
3351                 /* expanded SvTRUE_common(sv, (flags = 0, goto restart)) */
3352                 else if(!SvOK(sv)) {
3353                     svb = 0;
3354                 }
3355                 else if(SvPOK(sv)) {
3356                     svb = SvPVXtrue(sv);
3357                 }
3358                 else if((SvFLAGS(sv) & (SVf_IOK|SVf_NOK))) {
3359                     svb = (SvIOK(sv) && SvIVX(sv) != 0)
3360                         || (SvNOK(sv) && SvNVX(sv) != 0.0);
3361                 }
3362                 else {
3363                     flags = 0;
3364                     goto restart; /* call sv_2bool_nomg */
3365                 }
3366                 return cBOOL(svb);
3367             }
3368         }
3369         return SvRV(sv) != 0;
3370     }
3371     if (isREGEXP(sv))
3372         return
3373           RX_WRAPLEN(sv) > 1 || (RX_WRAPLEN(sv) && *RX_WRAPPED(sv) != '0');
3374     return SvTRUE_common(sv, isGV_with_GP(sv) ? 1 : 0);
3375 }
3376
3377 /*
3378 =for apidoc sv_utf8_upgrade
3379
3380 Converts the PV of an SV to its UTF-8-encoded form.
3381 Forces the SV to string form if it is not already.
3382 Will C<mg_get> on C<sv> if appropriate.
3383 Always sets the SvUTF8 flag to avoid future validity checks even
3384 if the whole string is the same in UTF-8 as not.
3385 Returns the number of bytes in the converted string
3386
3387 This is not a general purpose byte encoding to Unicode interface:
3388 use the Encode extension for that.
3389
3390 =for apidoc sv_utf8_upgrade_nomg
3391
3392 Like sv_utf8_upgrade, but doesn't do magic on C<sv>.
3393
3394 =for apidoc sv_utf8_upgrade_flags
3395
3396 Converts the PV of an SV to its UTF-8-encoded form.
3397 Forces the SV to string form if it is not already.
3398 Always sets the SvUTF8 flag to avoid future validity checks even
3399 if all the bytes are invariant in UTF-8.
3400 If C<flags> has C<SV_GMAGIC> bit set,
3401 will C<mg_get> on C<sv> if appropriate, else not.
3402
3403 If C<flags> has SV_FORCE_UTF8_UPGRADE set, this function assumes that the PV
3404 will expand when converted to UTF-8, and skips the extra work of checking for
3405 that.  Typically this flag is used by a routine that has already parsed the
3406 string and found such characters, and passes this information on so that the
3407 work doesn't have to be repeated.
3408
3409 Returns the number of bytes in the converted string.
3410
3411 This is not a general purpose byte encoding to Unicode interface:
3412 use the Encode extension for that.
3413
3414 =for apidoc sv_utf8_upgrade_flags_grow
3415
3416 Like sv_utf8_upgrade_flags, but has an additional parameter C<extra>, which is
3417 the number of unused bytes the string of 'sv' is guaranteed to have free after
3418 it upon return.  This allows the caller to reserve extra space that it intends
3419 to fill, to avoid extra grows.
3420
3421 C<sv_utf8_upgrade>, C<sv_utf8_upgrade_nomg>, and C<sv_utf8_upgrade_flags>
3422 are implemented in terms of this function.
3423
3424 Returns the number of bytes in the converted string (not including the spares).
3425
3426 =cut
3427
3428 (One might think that the calling routine could pass in the position of the
3429 first variant character when it has set SV_FORCE_UTF8_UPGRADE, so it wouldn't
3430 have to be found again.  But that is not the case, because typically when the
3431 caller is likely to use this flag, it won't be calling this routine unless it
3432 finds something that won't fit into a byte.  Otherwise it tries to not upgrade
3433 and just use bytes.  But some things that do fit into a byte are variants in
3434 utf8, and the caller may not have been keeping track of these.)
3435
3436 If the routine itself changes the string, it adds a trailing C<NUL>.  Such a
3437 C<NUL> isn't guaranteed due to having other routines do the work in some input
3438 cases, or if the input is already flagged as being in utf8.
3439
3440 The speed of this could perhaps be improved for many cases if someone wanted to
3441 write a fast function that counts the number of variant characters in a string,
3442 especially if it could return the position of the first one.
3443
3444 */
3445
3446 STRLEN
3447 Perl_sv_utf8_upgrade_flags_grow(pTHX_ SV *const sv, const I32 flags, STRLEN extra)
3448 {
3449     PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
3450
3451     if (sv == &PL_sv_undef)
3452         return 0;
3453     if (!SvPOK_nog(sv)) {
3454         STRLEN len = 0;
3455         if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3456             (void) sv_2pv_flags(sv,&len, flags);
3457             if (SvUTF8(sv)) {
3458                 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3459                 return len;
3460             }
3461         } else {
3462             (void) SvPV_force_flags(sv,len,flags & SV_GMAGIC);
3463         }
3464     }
3465
3466     if (SvUTF8(sv)) {
3467         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3468         return SvCUR(sv);
3469     }
3470
3471     if (SvIsCOW(sv)) {
3472         S_sv_uncow(aTHX_ sv, 0);
3473     }
3474
3475     if (IN_ENCODING && !(flags & SV_UTF8_NO_ENCODING)) {
3476         sv_recode_to_utf8(sv, _get_encoding());
3477         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3478         return SvCUR(sv);
3479     }
3480
3481     if (SvCUR(sv) == 0) {
3482         if (extra) SvGROW(sv, extra);
3483     } else { /* Assume Latin-1/EBCDIC */
3484         /* This function could be much more efficient if we
3485          * had a FLAG in SVs to signal if there are any variant
3486          * chars in the PV.  Given that there isn't such a flag
3487          * make the loop as fast as possible (although there are certainly ways
3488          * to speed this up, eg. through vectorization) */
3489         U8 * s = (U8 *) SvPVX_const(sv);
3490         U8 * e = (U8 *) SvEND(sv);
3491         U8 *t = s;
3492         STRLEN two_byte_count = 0;
3493         
3494         if (flags & SV_FORCE_UTF8_UPGRADE) goto must_be_utf8;
3495
3496         /* See if really will need to convert to utf8.  We mustn't rely on our
3497          * incoming SV being well formed and having a trailing '\0', as certain
3498          * code in pp_formline can send us partially built SVs. */
3499
3500         while (t < e) {
3501             const U8 ch = *t++;
3502             if (NATIVE_BYTE_IS_INVARIANT(ch)) continue;
3503
3504             t--;    /* t already incremented; re-point to first variant */
3505             two_byte_count = 1;
3506             goto must_be_utf8;
3507         }
3508
3509         /* utf8 conversion not needed because all are invariants.  Mark as
3510          * UTF-8 even if no variant - saves scanning loop */
3511         SvUTF8_on(sv);
3512         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3513         return SvCUR(sv);
3514
3515       must_be_utf8:
3516
3517         /* Here, the string should be converted to utf8, either because of an
3518          * input flag (two_byte_count = 0), or because a character that
3519          * requires 2 bytes was found (two_byte_count = 1).  t points either to
3520          * the beginning of the string (if we didn't examine anything), or to
3521          * the first variant.  In either case, everything from s to t - 1 will
3522          * occupy only 1 byte each on output.
3523          *
3524          * There are two main ways to convert.  One is to create a new string
3525          * and go through the input starting from the beginning, appending each
3526          * converted value onto the new string as we go along.  It's probably
3527          * best to allocate enough space in the string for the worst possible
3528          * case rather than possibly running out of space and having to
3529          * reallocate and then copy what we've done so far.  Since everything
3530          * from s to t - 1 is invariant, the destination can be initialized
3531          * with these using a fast memory copy
3532          *
3533          * The other way is to figure out exactly how big the string should be
3534          * by parsing the entire input.  Then you don't have to make it big
3535          * enough to handle the worst possible case, and more importantly, if
3536          * the string you already have is large enough, you don't have to
3537          * allocate a new string, you can copy the last character in the input
3538          * string to the final position(s) that will be occupied by the
3539          * converted string and go backwards, stopping at t, since everything
3540          * before that is invariant.
3541          *
3542          * There are advantages and disadvantages to each method.
3543          *
3544          * In the first method, we can allocate a new string, do the memory
3545          * copy from the s to t - 1, and then proceed through the rest of the
3546          * string byte-by-byte.
3547          *
3548          * In the second method, we proceed through the rest of the input
3549          * string just calculating how big the converted string will be.  Then
3550          * there are two cases:
3551          *  1)  if the string has enough extra space to handle the converted
3552          *      value.  We go backwards through the string, converting until we
3553          *      get to the position we are at now, and then stop.  If this
3554          *      position is far enough along in the string, this method is
3555          *      faster than the other method.  If the memory copy were the same
3556          *      speed as the byte-by-byte loop, that position would be about
3557          *      half-way, as at the half-way mark, parsing to the end and back
3558          *      is one complete string's parse, the same amount as starting
3559          *      over and going all the way through.  Actually, it would be
3560          *      somewhat less than half-way, as it's faster to just count bytes
3561          *      than to also copy, and we don't have the overhead of allocating
3562          *      a new string, changing the scalar to use it, and freeing the
3563          *      existing one.  But if the memory copy is fast, the break-even
3564          *      point is somewhere after half way.  The counting loop could be
3565          *      sped up by vectorization, etc, to move the break-even point
3566          *      further towards the beginning.
3567          *  2)  if the string doesn't have enough space to handle the converted
3568          *      value.  A new string will have to be allocated, and one might
3569          *      as well, given that, start from the beginning doing the first
3570          *      method.  We've spent extra time parsing the string and in
3571          *      exchange all we've gotten is that we know precisely how big to
3572          *      make the new one.  Perl is more optimized for time than space,
3573          *      so this case is a loser.
3574          * So what I've decided to do is not use the 2nd method unless it is
3575          * guaranteed that a new string won't have to be allocated, assuming
3576          * the worst case.  I also decided not to put any more conditions on it
3577          * than this, for now.  It seems likely that, since the worst case is
3578          * twice as big as the unknown portion of the string (plus 1), we won't
3579          * be guaranteed enough space, causing us to go to the first method,
3580          * unless the string is short, or the first variant character is near
3581          * the end of it.  In either of these cases, it seems best to use the
3582          * 2nd method.  The only circumstance I can think of where this would
3583          * be really slower is if the string had once had much more data in it
3584          * than it does now, but there is still a substantial amount in it  */
3585
3586         {
3587             STRLEN invariant_head = t - s;
3588             STRLEN size = invariant_head + (e - t) * 2 + 1 + extra;
3589             if (SvLEN(sv) < size) {
3590
3591                 /* Here, have decided to allocate a new string */
3592
3593                 U8 *dst;
3594                 U8 *d;
3595
3596                 Newx(dst, size, U8);
3597
3598                 /* If no known invariants at the beginning of the input string,
3599                  * set so starts from there.  Otherwise, can use memory copy to
3600                  * get up to where we are now, and then start from here */
3601
3602                 if (invariant_head == 0) {
3603                     d = dst;
3604                 } else {
3605                     Copy(s, dst, invariant_head, char);
3606                     d = dst + invariant_head;
3607                 }
3608
3609                 while (t < e) {
3610                     append_utf8_from_native_byte(*t, &d);
3611                     t++;
3612                 }
3613                 *d = '\0';
3614                 SvPV_free(sv); /* No longer using pre-existing string */
3615                 SvPV_set(sv, (char*)dst);
3616                 SvCUR_set(sv, d - dst);
3617                 SvLEN_set(sv, size);
3618             } else {
3619
3620                 /* Here, have decided to get the exact size of the string.
3621                  * Currently this happens only when we know that there is
3622                  * guaranteed enough space to fit the converted string, so
3623                  * don't have to worry about growing.  If two_byte_count is 0,
3624                  * then t points to the first byte of the string which hasn't
3625                  * been examined yet.  Otherwise two_byte_count is 1, and t
3626                  * points to the first byte in the string that will expand to
3627                  * two.  Depending on this, start examining at t or 1 after t.
3628                  * */
3629
3630                 U8 *d = t + two_byte_count;
3631
3632
3633                 /* Count up the remaining bytes that expand to two */
3634
3635                 while (d < e) {
3636                     const U8 chr = *d++;
3637                     if (! NATIVE_BYTE_IS_INVARIANT(chr)) two_byte_count++;
3638                 }
3639
3640                 /* The string will expand by just the number of bytes that
3641                  * occupy two positions.  But we are one afterwards because of
3642                  * the increment just above.  This is the place to put the
3643                  * trailing NUL, and to set the length before we decrement */
3644
3645                 d += two_byte_count;
3646                 SvCUR_set(sv, d - s);
3647                 *d-- = '\0';
3648
3649
3650                 /* Having decremented d, it points to the position to put the
3651                  * very last byte of the expanded string.  Go backwards through
3652                  * the string, copying and expanding as we go, stopping when we
3653                  * get to the part that is invariant the rest of the way down */
3654
3655                 e--;
3656                 while (e >= t) {
3657                     if (NATIVE_BYTE_IS_INVARIANT(*e)) {
3658                         *d-- = *e;
3659                     } else {
3660                         *d-- = UTF8_EIGHT_BIT_LO(*e);
3661                         *d-- = UTF8_EIGHT_BIT_HI(*e);
3662                     }
3663                     e--;
3664                 }
3665             }
3666
3667             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3668                 /* Update pos. We do it at the end rather than during
3669                  * the upgrade, to avoid slowing down the common case
3670                  * (upgrade without pos).
3671                  * pos can be stored as either bytes or characters.  Since
3672                  * this was previously a byte string we can just turn off
3673                  * the bytes flag. */
3674                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3675                 if (mg) {
3676                     mg->mg_flags &= ~MGf_BYTES;
3677                 }
3678                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3679                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3680             }
3681         }
3682     }
3683
3684     /* Mark as UTF-8 even if no variant - saves scanning loop */
3685     SvUTF8_on(sv);
3686     return SvCUR(sv);
3687 }
3688
3689 /*
3690 =for apidoc sv_utf8_downgrade
3691
3692 Attempts to convert the PV of an SV from characters to bytes.
3693 If the PV contains a character that cannot fit
3694 in a byte, this conversion will fail;
3695 in this case, either returns false or, if C<fail_ok> is not
3696 true, croaks.
3697
3698 This is not a general purpose Unicode to byte encoding interface:
3699 use the Encode extension for that.
3700
3701 =cut
3702 */
3703
3704 bool
3705 Perl_sv_utf8_downgrade(pTHX_ SV *const sv, const bool fail_ok)
3706 {
3707     PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
3708
3709     if (SvPOKp(sv) && SvUTF8(sv)) {
3710         if (SvCUR(sv)) {
3711             U8 *s;
3712             STRLEN len;
3713             int mg_flags = SV_GMAGIC;
3714
3715             if (SvIsCOW(sv)) {
3716                 S_sv_uncow(aTHX_ sv, 0);
3717             }
3718             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3719                 /* update pos */
3720                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3721                 if (mg && mg->mg_len > 0 && mg->mg_flags & MGf_BYTES) {
3722                         mg->mg_len = sv_pos_b2u_flags(sv, mg->mg_len,
3723                                                 SV_GMAGIC|SV_CONST_RETURN);
3724                         mg_flags = 0; /* sv_pos_b2u does get magic */
3725                 }
3726                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3727                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3728
3729             }
3730             s = (U8 *) SvPV_flags(sv, len, mg_flags);
3731
3732             if (!utf8_to_bytes(s, &len)) {
3733                 if (fail_ok)
3734                     return FALSE;
3735                 else {
3736                     if (PL_op)
3737                         Perl_croak(aTHX_ "Wide character in %s",
3738                                    OP_DESC(PL_op));
3739                     else
3740                         Perl_croak(aTHX_ "Wide character");
3741                 }
3742             }
3743             SvCUR_set(sv, len);
3744         }
3745     }
3746     SvUTF8_off(sv);
3747     return TRUE;
3748 }
3749
3750 /*
3751 =for apidoc sv_utf8_encode
3752
3753 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3754 flag off so that it looks like octets again.
3755
3756 =cut
3757 */
3758
3759 void
3760 Perl_sv_utf8_encode(pTHX_ SV *const sv)
3761 {
3762     PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3763
3764     if (SvREADONLY(sv)) {
3765         sv_force_normal_flags(sv, 0);
3766     }
3767     (void) sv_utf8_upgrade(sv);
3768     SvUTF8_off(sv);
3769 }
3770
3771 /*
3772 =for apidoc sv_utf8_decode
3773
3774 If the PV of the SV is an octet sequence in UTF-8
3775 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3776 so that it looks like a character.  If the PV contains only single-byte
3777 characters, the C<SvUTF8> flag stays off.
3778 Scans PV for validity and returns false if the PV is invalid UTF-8.
3779
3780 =cut
3781 */
3782
3783 bool
3784 Perl_sv_utf8_decode(pTHX_ SV *const sv)
3785 {
3786     PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3787
3788     if (SvPOKp(sv)) {
3789         const U8 *start, *c;
3790         const U8 *e;
3791
3792         /* The octets may have got themselves encoded - get them back as
3793          * bytes
3794          */
3795         if (!sv_utf8_downgrade(sv, TRUE))
3796             return FALSE;
3797
3798         /* it is actually just a matter of turning the utf8 flag on, but
3799          * we want to make sure everything inside is valid utf8 first.
3800          */
3801         c = start = (const U8 *) SvPVX_const(sv);
3802         if (!is_utf8_string(c, SvCUR(sv)))
3803             return FALSE;
3804         e = (const U8 *) SvEND(sv);
3805         while (c < e) {
3806             const U8 ch = *c++;
3807             if (!UTF8_IS_INVARIANT(ch)) {
3808                 SvUTF8_on(sv);
3809                 break;
3810             }
3811         }
3812         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3813             /* XXX Is this dead code?  XS_utf8_decode calls SvSETMAGIC
3814                    after this, clearing pos.  Does anything on CPAN
3815                    need this? */
3816             /* adjust pos to the start of a UTF8 char sequence */
3817             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3818             if (mg) {
3819                 I32 pos = mg->mg_len;
3820                 if (pos > 0) {
3821                     for (c = start + pos; c > start; c--) {
3822                         if (UTF8_IS_START(*c))
3823                             break;
3824                     }
3825                     mg->mg_len  = c - start;
3826                 }
3827             }
3828             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3829                 magic_setutf8(sv,mg); /* clear UTF8 cache */
3830         }
3831     }
3832     return TRUE;
3833 }
3834
3835 /*
3836 =for apidoc sv_setsv
3837
3838 Copies the contents of the source SV C<ssv> into the destination SV
3839 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3840 function if the source SV needs to be reused.  Does not handle 'set' magic on
3841 destination SV.  Calls 'get' magic on source SV.  Loosely speaking, it
3842 performs a copy-by-value, obliterating any previous content of the
3843 destination.
3844
3845 You probably want to use one of the assortment of wrappers, such as
3846 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3847 C<SvSetMagicSV_nosteal>.
3848
3849 =for apidoc sv_setsv_flags
3850
3851 Copies the contents of the source SV C<ssv> into the destination SV
3852 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3853 function if the source SV needs to be reused.  Does not handle 'set' magic.
3854 Loosely speaking, it performs a copy-by-value, obliterating any previous
3855 content of the destination.
3856 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3857 C<ssv> if appropriate, else not.  If the C<flags>
3858 parameter has the C<SV_NOSTEAL> bit set then the
3859 buffers of temps will not be stolen.  <sv_setsv>
3860 and C<sv_setsv_nomg> are implemented in terms of this function.
3861
3862 You probably want to use one of the assortment of wrappers, such as
3863 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3864 C<SvSetMagicSV_nosteal>.
3865
3866 This is the primary function for copying scalars, and most other
3867 copy-ish functions and macros use this underneath.
3868
3869 =cut
3870 */
3871
3872 static void
3873 S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
3874 {
3875     I32 mro_changes = 0; /* 1 = method, 2 = isa, 3 = recursive isa */
3876     HV *old_stash = NULL;
3877
3878     PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3879
3880     if (dtype != SVt_PVGV && !isGV_with_GP(dstr)) {
3881         const char * const name = GvNAME(sstr);
3882         const STRLEN len = GvNAMELEN(sstr);
3883         {
3884             if (dtype >= SVt_PV) {
3885                 SvPV_free(dstr);
3886                 SvPV_set(dstr, 0);
3887                 SvLEN_set(dstr, 0);
3888                 SvCUR_set(dstr, 0);
3889             }
3890             SvUPGRADE(dstr, SVt_PVGV);
3891             (void)SvOK_off(dstr);
3892             isGV_with_GP_on(dstr);
3893         }
3894         GvSTASH(dstr) = GvSTASH(sstr);
3895         if (GvSTASH(dstr))
3896             Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
3897         gv_name_set(MUTABLE_GV(dstr), name, len,
3898                         GV_ADD | (GvNAMEUTF8(sstr) ? SVf_UTF8 : 0 ));
3899         SvFAKE_on(dstr);        /* can coerce to non-glob */
3900     }
3901
3902     if(GvGP(MUTABLE_GV(sstr))) {
3903         /* If source has method cache entry, clear it */
3904         if(GvCVGEN(sstr)) {
3905             SvREFCNT_dec(GvCV(sstr));
3906             GvCV_set(sstr, NULL);
3907             GvCVGEN(sstr) = 0;
3908         }
3909         /* If source has a real method, then a method is
3910            going to change */
3911         else if(
3912          GvCV((const GV *)sstr) && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3913         ) {
3914             mro_changes = 1;
3915         }
3916     }
3917
3918     /* If dest already had a real method, that's a change as well */
3919     if(
3920         !mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)
3921      && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3922     ) {
3923         mro_changes = 1;
3924     }
3925
3926     /* We don't need to check the name of the destination if it was not a
3927        glob to begin with. */
3928     if(dtype == SVt_PVGV) {
3929         const char * const name = GvNAME((const GV *)dstr);
3930         if(
3931             strEQ(name,"ISA")
3932          /* The stash may have been detached from the symbol table, so
3933             check its name. */
3934          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3935         )
3936             mro_changes = 2;
3937         else {
3938             const STRLEN len = GvNAMELEN(dstr);
3939             if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
3940              || (len == 1 && name[0] == ':')) {
3941                 mro_changes = 3;
3942
3943                 /* Set aside the old stash, so we can reset isa caches on
3944                    its subclasses. */
3945                 if((old_stash = GvHV(dstr)))
3946                     /* Make sure we do not lose it early. */
3947                     SvREFCNT_inc_simple_void_NN(
3948                      sv_2mortal((SV *)old_stash)
3949                     );
3950             }
3951         }
3952
3953         SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
3954     }
3955
3956     gp_free(MUTABLE_GV(dstr));
3957     GvINTRO_off(dstr);          /* one-shot flag */
3958     GvGP_set(dstr, gp_ref(GvGP(sstr)));
3959     if (SvTAINTED(sstr))
3960         SvTAINT(dstr);
3961     if (GvIMPORTED(dstr) != GVf_IMPORTED
3962         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3963         {
3964             GvIMPORTED_on(dstr);
3965         }
3966     GvMULTI_on(dstr);
3967     if(mro_changes == 2) {
3968       if (GvAV((const GV *)sstr)) {
3969         MAGIC *mg;
3970         SV * const sref = (SV *)GvAV((const GV *)dstr);
3971         if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3972             if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3973                 AV * const ary = newAV();
3974                 av_push(ary, mg->mg_obj); /* takes the refcount */
3975                 mg->mg_obj = (SV *)ary;
3976             }
3977             av_push((AV *)mg->mg_obj, SvREFCNT_inc_simple_NN(dstr));
3978         }
3979         else sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
3980       }
3981       mro_isa_changed_in(GvSTASH(dstr));
3982     }
3983     else if(mro_changes == 3) {
3984         HV * const stash = GvHV(dstr);
3985         if(old_stash ? (HV *)HvENAME_get(old_stash) : stash)
3986             mro_package_moved(
3987                 stash, old_stash,
3988                 (GV *)dstr, 0
3989             );
3990     }
3991     else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
3992     if (GvIO(dstr) && dtype == SVt_PVGV) {
3993         DEBUG_o(Perl_deb(aTHX_
3994                         "glob_assign_glob clearing PL_stashcache\n"));
3995         /* It's a cache. It will rebuild itself quite happily.
3996            It's a lot of effort to work out exactly which key (or keys)
3997            might be invalidated by the creation of the this file handle.
3998          */
3999         hv_clear(PL_stashcache);
4000     }
4001     return;
4002 }
4003
4004 void
4005 Perl_gv_setref(pTHX_ SV *const dstr, SV *const sstr)
4006 {
4007     SV * const sref = SvRV(sstr);
4008     SV *dref;
4009     const int intro = GvINTRO(dstr);
4010     SV **location;
4011     U8 import_flag = 0;
4012     const U32 stype = SvTYPE(sref);
4013
4014     PERL_ARGS_ASSERT_GV_SETREF;
4015
4016     if (intro) {
4017         GvINTRO_off(dstr);      /* one-shot flag */
4018         GvLINE(dstr) = CopLINE(PL_curcop);
4019         GvEGV(dstr) = MUTABLE_GV(dstr);
4020     }
4021     GvMULTI_on(dstr);
4022     switch (stype) {
4023     case SVt_PVCV:
4024         location = (SV **) &(GvGP(dstr)->gp_cv); /* XXX bypassing GvCV_set */
4025         import_flag = GVf_IMPORTED_CV;
4026         goto common;
4027     case SVt_PVHV:
4028         location = (SV **) &GvHV(dstr);
4029         import_flag = GVf_IMPORTED_HV;
4030         goto common;
4031     case SVt_PVAV:
4032         location = (SV **) &GvAV(dstr);
4033         import_flag = GVf_IMPORTED_AV;
4034         goto common;
4035     case SVt_PVIO:
4036         location = (SV **) &GvIOp(dstr);
4037         goto common;
4038     case SVt_PVFM:
4039         location = (SV **) &GvFORM(dstr);
4040         goto common;
4041     default:
4042         location = &GvSV(dstr);
4043         import_flag = GVf_IMPORTED_SV;
4044     common:
4045         if (intro) {
4046             if (stype == SVt_PVCV) {
4047                 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
4048                 if (GvCVGEN(dstr)) {
4049                     SvREFCNT_dec(GvCV(dstr));
4050                     GvCV_set(dstr, NULL);
4051                     GvCVGEN(dstr) = 0; /* Switch off cacheness. */
4052                 }
4053             }
4054             /* SAVEt_GVSLOT takes more room on the savestack and has more
4055                overhead in leave_scope than SAVEt_GENERIC_SV.  But for CVs
4056                leave_scope needs access to the GV so it can reset method
4057                caches.  We must use SAVEt_GVSLOT whenever the type is
4058                SVt_PVCV, even if the stash is anonymous, as the stash may
4059                gain a name somehow before leave_scope. */
4060             if (stype == SVt_PVCV) {
4061                 /* There is no save_pushptrptrptr.  Creating it for this
4062                    one call site would be overkill.  So inline the ss add
4063                    routines here. */
4064                 dSS_ADD;
4065                 SS_ADD_PTR(dstr);
4066                 SS_ADD_PTR(location);
4067                 SS_ADD_PTR(SvREFCNT_inc(*location));
4068                 SS_ADD_UV(SAVEt_GVSLOT);
4069                 SS_ADD_END(4);
4070             }
4071             else SAVEGENERICSV(*location);
4072         }
4073         dref = *location;
4074         if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
4075             CV* const cv = MUTABLE_CV(*location);
4076             if (cv) {
4077                 if (!GvCVGEN((const GV *)dstr) &&
4078                     (CvROOT(cv) || CvXSUB(cv)) &&
4079                     /* redundant check that avoids creating the extra SV
4080                        most of the time: */
4081                     (CvCONST(cv) || ckWARN(WARN_REDEFINE)))
4082                     {
4083                         SV * const new_const_sv =
4084                             CvCONST((const CV *)sref)
4085                                  ? cv_const_sv((const CV *)sref)
4086                                  : NULL;
4087                         report_redefined_cv(
4088                            sv_2mortal(Perl_newSVpvf(aTHX_
4089                                 "%"HEKf"::%"HEKf,
4090                                 HEKfARG(
4091                                  HvNAME_HEK(GvSTASH((const GV *)dstr))
4092                                 ),
4093                                 HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr)))
4094                            )),
4095                            cv,
4096                            CvCONST((const CV *)sref) ? &new_const_sv : NULL
4097                         );
4098                     }
4099                 if (!intro)
4100                     cv_ckproto_len_flags(cv, (const GV *)dstr,
4101                                    SvPOK(sref) ? CvPROTO(sref) : NULL,
4102                                    SvPOK(sref) ? CvPROTOLEN(sref) : 0,
4103                                    SvPOK(sref) ? SvUTF8(sref) : 0);
4104             }
4105             GvCVGEN(dstr) = 0; /* Switch off cacheness. */
4106             GvASSUMECV_on(dstr);
4107             if(GvSTASH(dstr)) { /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
4108                 if (intro && GvREFCNT(dstr) > 1) {
4109                     /* temporary remove extra savestack's ref */
4110                     --GvREFCNT(dstr);
4111                     gv_method_changed(dstr);
4112                     ++GvREFCNT(dstr);
4113                 }
4114                 else gv_method_changed(dstr);
4115             }
4116         }
4117         *location = SvREFCNT_inc_simple_NN(sref);
4118         if (import_flag && !(GvFLAGS(dstr) & import_flag)
4119             && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
4120             GvFLAGS(dstr) |= import_flag;
4121         }
4122         if (import_flag == GVf_IMPORTED_SV) {
4123             if (intro) {
4124                 save_aliased_sv((GV *)dstr);
4125             }
4126             /* Turn off the flag if sref is not referenced elsewhere,
4127                even by weak refs.  (SvRMAGICAL is a pessimistic check for
4128                back refs.)  */
4129             if (SvREFCNT(sref) <= 2 && !SvRMAGICAL(sref))
4130                 GvALIASED_SV_off(dstr);
4131             else
4132                 GvALIASED_SV_on(dstr);
4133         }
4134         if (stype == SVt_PVHV) {
4135             const char * const name = GvNAME((GV*)dstr);
4136             const STRLEN len = GvNAMELEN(dstr);
4137             if (
4138                 (
4139                    (len > 1 && name[len-2] == ':' && name[len-1] == ':')
4140                 || (len == 1 && name[0] == ':')
4141                 )
4142              && (!dref || HvENAME_get(dref))
4143             ) {
4144                 mro_package_moved(
4145                     (HV *)sref, (HV *)dref,
4146                     (GV *)dstr, 0
4147                 );
4148             }
4149         }
4150         else if (
4151             stype == SVt_PVAV && sref != dref
4152          && strEQ(GvNAME((GV*)dstr), "ISA")
4153          /* The stash may have been detached from the symbol table, so
4154             check its name before doing anything. */
4155          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
4156         ) {
4157             MAGIC *mg;
4158             MAGIC * const omg = dref && SvSMAGICAL(dref)
4159                                  ? mg_find(dref, PERL_MAGIC_isa)
4160                                  : NULL;
4161             if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
4162                 if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
4163                     AV * const ary = newAV();
4164                     av_push(ary, mg->mg_obj); /* takes the refcount */
4165                     mg->mg_obj = (SV *)ary;
4166                 }
4167                 if (omg) {
4168                     if (SvTYPE(omg->mg_obj) == SVt_PVAV) {
4169                         SV **svp = AvARRAY((AV *)omg->mg_obj);
4170                         I32 items = AvFILLp((AV *)omg->mg_obj) + 1;
4171                         while (items--)
4172                             av_push(
4173                              (AV *)mg->mg_obj,
4174                              SvREFCNT_inc_simple_NN(*svp++)
4175                             );
4176                     }
4177                     else
4178                         av_push(
4179                          (AV *)mg->mg_obj,
4180                          SvREFCNT_inc_simple_NN(omg->mg_obj)
4181                         );
4182                 }
4183                 else
4184                     av_push((AV *)mg->mg_obj,SvREFCNT_inc_simple_NN(dstr));
4185             }
4186             else
4187             {
4188                 sv_magic(
4189                  sref, omg ? omg->mg_obj : dstr, PERL_MAGIC_isa, NULL, 0
4190                 );
4191                 mg = mg_find(sref, PERL_MAGIC_isa);
4192             }
4193             /* Since the *ISA assignment could have affected more than
4194                one stash, don't call mro_isa_changed_in directly, but let
4195                magic_clearisa do it for us, as it already has the logic for
4196                dealing with globs vs arrays of globs. */
4197             assert(mg);
4198             Perl_magic_clearisa(aTHX_ NULL, mg);
4199         }
4200         else if (stype == SVt_PVIO) {
4201             DEBUG_o(Perl_deb(aTHX_ "gv_setref clearing PL_stashcache\n"));
4202             /* It's a cache. It will rebuild itself quite happily.
4203                It's a lot of effort to work out exactly which key (or keys)
4204                might be invalidated by the creation of the this file handle.
4205             */
4206             hv_clear(PL_stashcache);
4207         }
4208         break;
4209     }
4210     if (!intro) SvREFCNT_dec(dref);
4211     if (SvTAINTED(sstr))
4212         SvTAINT(dstr);
4213     return;
4214 }
4215
4216
4217
4218
4219 #ifdef PERL_DEBUG_READONLY_COW
4220 # include <sys/mman.h>
4221
4222 # ifndef PERL_MEMORY_DEBUG_HEADER_SIZE
4223 #  define PERL_MEMORY_DEBUG_HEADER_SIZE 0
4224 # endif
4225
4226 void
4227 Perl_sv_buf_to_ro(pTHX_ SV *sv)
4228 {
4229     struct perl_memory_debug_header * const header =
4230         (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4231     const MEM_SIZE len = header->size;
4232     PERL_ARGS_ASSERT_SV_BUF_TO_RO;
4233 # ifdef PERL_TRACK_MEMPOOL
4234     if (!header->readonly) header->readonly = 1;
4235 # endif
4236     if (mprotect(header, len, PROT_READ))
4237         Perl_warn(aTHX_ "mprotect RW for COW string %p %lu failed with %d",
4238                          header, len, errno);
4239 }
4240
4241 static void
4242 S_sv_buf_to_rw(pTHX_ SV *sv)
4243 {
4244     struct perl_memory_debug_header * const header =
4245         (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4246     const MEM_SIZE len = header->size;
4247     PERL_ARGS_ASSERT_SV_BUF_TO_RW;
4248     if (mprotect(header, len, PROT_READ|PROT_WRITE))
4249         Perl_warn(aTHX_ "mprotect for COW string %p %lu failed with %d",
4250                          header, len, errno);
4251 # ifdef PERL_TRACK_MEMPOOL
4252     header->readonly = 0;
4253 # endif
4254 }
4255
4256 #else
4257 # define sv_buf_to_ro(sv)       NOOP
4258 # define sv_buf_to_rw(sv)       NOOP
4259 #endif
4260
4261 void
4262 Perl_sv_setsv_flags(pTHX_ SV *dstr, SV* sstr, const I32 flags)
4263 {
4264     U32 sflags;
4265     int dtype;
4266     svtype stype;
4267
4268     PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
4269
4270     if (UNLIKELY( sstr == dstr ))
4271         return;
4272
4273     if (SvIS_FREED(dstr)) {
4274         Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
4275                    " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
4276     }
4277     SV_CHECK_THINKFIRST_COW_DROP(dstr);
4278     if (UNLIKELY( !sstr ))
4279         sstr = &PL_sv_undef;
4280     if (SvIS_FREED(sstr)) {
4281         Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
4282                    (void*)sstr, (void*)dstr);
4283     }
4284     stype = SvTYPE(sstr);
4285     dtype = SvTYPE(dstr);
4286
4287     /* There's a lot of redundancy below but we're going for speed here */
4288
4289     switch (stype) {
4290     case SVt_NULL:
4291       undef_sstr:
4292         if (LIKELY( dtype != SVt_PVGV && dtype != SVt_PVLV )) {
4293             (void)SvOK_off(dstr);
4294             return;
4295         }
4296         break;
4297     case SVt_IV:
4298         if (SvIOK(sstr)) {
4299             switch (dtype) {
4300             case SVt_NULL:
4301                 /* For performance, we inline promoting to type SVt_IV. */
4302                 /* We're starting from SVt_NULL, so provided that define is
4303                  * actual 0, we don't have to unset any SV type flags
4304                  * to promote to SVt_IV. */
4305                 STATIC_ASSERT_STMT(SVt_NULL == 0);
4306                 SET_SVANY_FOR_BODYLESS_IV(dstr);
4307                 SvFLAGS(dstr) |= SVt_IV;
4308                 break;
4309             case SVt_NV:
4310             case SVt_PV:
4311                 sv_upgrade(dstr, SVt_PVIV);
4312                 break;
4313             case SVt_PVGV:
4314             case SVt_PVLV:
4315                 goto end_of_first_switch;
4316             }
4317             (void)SvIOK_only(dstr);
4318             SvIV_set(dstr,  SvIVX(sstr));
4319             if (SvIsUV(sstr))
4320                 SvIsUV_on(dstr);
4321             /* SvTAINTED can only be true if the SV has taint magic, which in
4322                turn means that the SV type is PVMG (or greater). This is the
4323                case statement for SVt_IV, so this cannot be true (whatever gcov
4324                may say).  */
4325             assert(!SvTAINTED(sstr));
4326             return;
4327         }
4328         if (!SvROK(sstr))
4329             goto undef_sstr;
4330         if (dtype < SVt_PV && dtype != SVt_IV)
4331             sv_upgrade(dstr, SVt_IV);
4332         break;
4333
4334     case SVt_NV:
4335         if (LIKELY( SvNOK(sstr) )) {
4336             switch (dtype) {
4337             case SVt_NULL:
4338             case SVt_IV:
4339                 sv_upgrade(dstr, SVt_NV);
4340                 break;
4341             case SVt_PV:
4342             case SVt_PVIV:
4343                 sv_upgrade(dstr, SVt_PVNV);
4344                 break;
4345             case SVt_PVGV:
4346             case SVt_PVLV:
4347                 goto end_of_first_switch;
4348             }
4349             SvNV_set(dstr, SvNVX(sstr));
4350             (void)SvNOK_only(dstr);
4351             /* SvTAINTED can only be true if the SV has taint magic, which in
4352                turn means that the SV type is PVMG (or greater). This is the
4353                case statement for SVt_NV, so this cannot be true (whatever gcov
4354                may say).  */
4355             assert(!SvTAINTED(sstr));
4356             return;
4357         }
4358         goto undef_sstr;
4359
4360     case SVt_PV:
4361         if (dtype < SVt_PV)
4362             sv_upgrade(dstr, SVt_PV);
4363         break;
4364     case SVt_PVIV:
4365         if (dtype < SVt_PVIV)
4366             sv_upgrade(dstr, SVt_PVIV);
4367         break;
4368     case SVt_PVNV:
4369         if (dtype < SVt_PVNV)
4370             sv_upgrade(dstr, SVt_PVNV);
4371         break;
4372     default:
4373         {
4374         const char * const type = sv_reftype(sstr,0);
4375         if (PL_op)
4376             /* diag_listed_as: Bizarre copy of %s */
4377             Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
4378         else
4379             Perl_croak(aTHX_ "Bizarre copy of %s", type);
4380         }
4381         NOT_REACHED; /* NOTREACHED */
4382
4383     case SVt_REGEXP:
4384       upgregexp:
4385         if (dtype < SVt_REGEXP)
4386         {
4387             if (dtype >= SVt_PV) {
4388                 SvPV_free(dstr);
4389                 SvPV_set(dstr, 0);
4390                 SvLEN_set(dstr, 0);
4391                 SvCUR_set(dstr, 0);
4392             }
4393             sv_upgrade(dstr, SVt_REGEXP);
4394         }
4395         break;
4396
4397         case SVt_INVLIST:
4398     case SVt_PVLV:
4399     case SVt_PVGV:
4400     case SVt_PVMG:
4401         if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
4402             mg_get(sstr);
4403             if (SvTYPE(sstr) != stype)
4404                 stype = SvTYPE(sstr);
4405         }
4406         if (isGV_with_GP(sstr) && dtype <= SVt_PVLV) {
4407                     glob_assign_glob(dstr, sstr, dtype);
4408                     return;
4409         }
4410         if (stype == SVt_PVLV)
4411         {
4412             if (isREGEXP(sstr)) goto upgregexp;
4413             SvUPGRADE(dstr, SVt_PVNV);
4414         }
4415         else
4416             SvUPGRADE(dstr, (svtype)stype);
4417     }
4418  end_of_first_switch:
4419
4420     /* dstr may have been upgraded.  */
4421     dtype = SvTYPE(dstr);
4422     sflags = SvFLAGS(sstr);
4423
4424     if (UNLIKELY( dtype == SVt_PVCV )) {
4425         /* Assigning to a subroutine sets the prototype.  */
4426         if (SvOK(sstr)) {
4427             STRLEN len;
4428             const char *const ptr = SvPV_const(sstr, len);
4429
4430             SvGROW(dstr, len + 1);
4431             Copy(ptr, SvPVX(dstr), len + 1, char);
4432             SvCUR_set(dstr, len);
4433             SvPOK_only(dstr);
4434             SvFLAGS(dstr) |= sflags & SVf_UTF8;
4435             CvAUTOLOAD_off(dstr);
4436         } else {
4437             SvOK_off(dstr);
4438         }
4439     }
4440     else if (UNLIKELY(dtype == SVt_PVAV || dtype == SVt_PVHV
4441              || dtype == SVt_PVFM))
4442     {
4443         const char * const type = sv_reftype(dstr,0);
4444         if (PL_op)
4445             /* diag_listed_as: Cannot copy to %s */
4446             Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
4447         else
4448             Perl_croak(aTHX_ "Cannot copy to %s", type);
4449     } else if (sflags & SVf_ROK) {
4450         if (isGV_with_GP(dstr)
4451             && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
4452             sstr = SvRV(sstr);
4453             if (sstr == dstr) {
4454                 if (GvIMPORTED(dstr) != GVf_IMPORTED
4455                     && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4456                 {
4457                     GvIMPORTED_on(dstr);
4458                 }
4459                 GvMULTI_on(dstr);
4460                 return;
4461             }
4462             glob_assign_glob(dstr, sstr, dtype);
4463             return;
4464         }
4465
4466         if (dtype >= SVt_PV) {
4467             if (isGV_with_GP(dstr)) {
4468                 gv_setref(dstr, sstr);
4469                 return;
4470             }
4471             if (SvPVX_const(dstr)) {
4472                 SvPV_free(dstr);
4473                 SvLEN_set(dstr, 0);
4474                 SvCUR_set(dstr, 0);
4475             }
4476         }
4477         (void)SvOK_off(dstr);
4478         SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4479         SvFLAGS(dstr) |= sflags & SVf_ROK;
4480         assert(!(sflags & SVp_NOK));
4481         assert(!(sflags & SVp_IOK));
4482         assert(!(sflags & SVf_NOK));
4483         assert(!(sflags & SVf_IOK));
4484     }
4485     else if (isGV_with_GP(dstr)) {
4486         if (!(sflags & SVf_OK)) {
4487             Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4488                            "Undefined value assigned to typeglob");
4489         }
4490         else {
4491             GV *gv = gv_fetchsv_nomg(sstr, GV_ADD, SVt_PVGV);
4492             if (dstr != (const SV *)gv) {
4493                 const char * const name = GvNAME((const GV *)dstr);
4494                 const STRLEN len = GvNAMELEN(dstr);
4495                 HV *old_stash = NULL;
4496                 bool reset_isa = FALSE;
4497                 if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
4498                  || (len == 1 && name[0] == ':')) {
4499                     /* Set aside the old stash, so we can reset isa caches
4500                        on its subclasses. */
4501                     if((old_stash = GvHV(dstr))) {
4502                         /* Make sure we do not lose it early. */
4503                         SvREFCNT_inc_simple_void_NN(
4504                          sv_2mortal((SV *)old_stash)
4505                         );
4506                     }
4507                     reset_isa = TRUE;
4508                 }
4509
4510                 if (GvGP(dstr)) {
4511                     SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
4512                     gp_free(MUTABLE_GV(dstr));
4513                 }
4514                 GvGP_set(dstr, gp_ref(GvGP(gv)));
4515
4516                 if (reset_isa) {
4517                     HV * const stash = GvHV(dstr);
4518                     if(
4519                         old_stash ? (HV *)HvENAME_get(old_stash) : stash
4520                     )
4521                         mro_package_moved(
4522                          stash, old_stash,
4523                          (GV *)dstr, 0
4524                         );
4525                 }
4526             }
4527         }
4528     }
4529     else if ((dtype == SVt_REGEXP || dtype == SVt_PVLV)
4530           && (stype == SVt_REGEXP || isREGEXP(sstr))) {
4531         reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4532     }
4533     else if (sflags & SVp_POK) {
4534         const STRLEN cur = SvCUR(sstr);
4535         const STRLEN len = SvLEN(sstr);
4536
4537         /*
4538          * We have three basic ways to copy the string:
4539          *
4540          *  1. Swipe
4541          *  2. Copy-on-write
4542          *  3. Actual copy
4543          * 
4544          * Which we choose is based on various factors.  The following
4545          * things are listed in order of speed, fastest to slowest:
4546          *  - Swipe
4547          *  - Copying a short string
4548          *  - Copy-on-write bookkeeping
4549          *  - malloc
4550          *  - Copying a long string
4551          * 
4552          * We swipe the string (steal the string buffer) if the SV on the
4553          * rhs is about to be freed anyway (TEMP and refcnt==1).  This is a
4554          * big win on long strings.  It should be a win on short strings if
4555          * SvPVX_const(dstr) has to be allocated.  If not, it should not 
4556          * slow things down, as SvPVX_const(sstr) would have been freed
4557          * soon anyway.
4558          * 
4559          * We also steal the buffer from a PADTMP (operator target) if it
4560          * is â€˜long enough’.  For short strings, a swipe does not help
4561          * here, as it causes more malloc calls the next time the target
4562          * is used.  Benchmarks show that even if SvPVX_const(dstr) has to
4563          * be allocated it is still not worth swiping PADTMPs for short
4564          * strings, as the savings here are small.
4565          * 
4566          * If swiping is not an option, then we see whether it is
4567          * worth using copy-on-write.  If the lhs already has a buf-
4568          * fer big enough and the string is short, we skip it and fall back
4569          * to method 3, since memcpy is faster for short strings than the
4570          * later bookkeeping overhead that copy-on-write entails.
4571
4572          * If the rhs is not a copy-on-write string yet, then we also
4573          * consider whether the buffer is too large relative to the string
4574          * it holds.  Some operations such as readline allocate a large
4575          * buffer in the expectation of reusing it.  But turning such into
4576          * a COW buffer is counter-productive because it increases memory
4577          * usage by making readline allocate a new large buffer the sec-
4578          * ond time round.  So, if the buffer is too large, again, we use
4579          * method 3 (copy).
4580          * 
4581          * Finally, if there is no buffer on the left, or the buffer is too 
4582          * small, then we use copy-on-write and make both SVs share the
4583          * string buffer.
4584          *
4585          */
4586
4587         /* Whichever path we take through the next code, we want this true,
4588            and doing it now facilitates the COW check.  */
4589         (void)SvPOK_only(dstr);
4590
4591         if (
4592                  (              /* Either ... */
4593                                 /* slated for free anyway (and not COW)? */
4594                     (sflags & (SVs_TEMP|SVf_IsCOW)) == SVs_TEMP
4595                                 /* or a swipable TARG */
4596                  || ((sflags &
4597                            (SVs_PADTMP|SVf_READONLY|SVf_PROTECT|SVf_IsCOW))
4598                        == SVs_PADTMP
4599                                 /* whose buffer is worth stealing */
4600                      && CHECK_COWBUF_THRESHOLD(cur,len)
4601                     )
4602                  ) &&
4603                  !(sflags & SVf_OOK) &&   /* and not involved in OOK hack? */
4604                  (!(flags & SV_NOSTEAL)) &&
4605                                         /* and we're allowed to steal temps */
4606                  SvREFCNT(sstr) == 1 &&   /* and no other references to it? */
4607                  len)             /* and really is a string */
4608         {       /* Passes the swipe test.  */
4609             if (SvPVX_const(dstr))      /* we know that dtype >= SVt_PV */
4610                 SvPV_free(dstr);
4611             SvPV_set(dstr, SvPVX_mutable(sstr));
4612             SvLEN_set(dstr, SvLEN(sstr));
4613             SvCUR_set(dstr, SvCUR(sstr));
4614
4615             SvTEMP_off(dstr);
4616             (void)SvOK_off(sstr);       /* NOTE: nukes most SvFLAGS on sstr */
4617             SvPV_set(sstr, NULL);
4618             SvLEN_set(sstr, 0);
4619             SvCUR_set(sstr, 0);
4620             SvTEMP_off(sstr);
4621         }
4622         else if (flags & SV_COW_SHARED_HASH_KEYS
4623               &&
4624 #ifdef PERL_COPY_ON_WRITE
4625                  (sflags & SVf_IsCOW
4626                    ? (!len ||
4627                        (  (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
4628                           /* If this is a regular (non-hek) COW, only so
4629                              many COW "copies" are possible. */
4630                        && CowREFCNT(sstr) != SV_COW_REFCNT_MAX  ))
4631                    : (  (sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4632                      && !(SvFLAGS(dstr) & SVf_BREAK)
4633                      && CHECK_COW_THRESHOLD(cur,len) && cur+1 < len
4634                      && (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
4635                     ))
4636 #else
4637                  sflags & SVf_IsCOW
4638               && !(SvFLAGS(dstr) & SVf_BREAK)
4639 #endif
4640             ) {
4641             /* Either it's a shared hash key, or it's suitable for
4642                copy-on-write.  */
4643             if (DEBUG_C_TEST) {
4644                 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4645                 sv_dump(sstr);
4646                 sv_dump(dstr);
4647             }
4648 #ifdef PERL_ANY_COW
4649             if (!(sflags & SVf_IsCOW)) {
4650                     SvIsCOW_on(sstr);
4651                     CowREFCNT(sstr) = 0;
4652             }
4653 #endif
4654             if (SvPVX_const(dstr)) {    /* we know that dtype >= SVt_PV */
4655                 SvPV_free(dstr);
4656             }
4657
4658 #ifdef PERL_ANY_COW
4659             if (len) {
4660                     if (sflags & SVf_IsCOW) {
4661                         sv_buf_to_rw(sstr);
4662                     }
4663                     CowREFCNT(sstr)++;
4664                     SvPV_set(dstr, SvPVX_mutable(sstr));
4665                     sv_buf_to_ro(sstr);
4666             } else
4667 #endif
4668             {
4669                     /* SvIsCOW_shared_hash */
4670                     DEBUG_C(PerlIO_printf(Perl_debug_log,
4671                                           "Copy on write: Sharing hash\n"));
4672
4673                     assert (SvTYPE(dstr) >= SVt_PV);
4674                     SvPV_set(dstr,
4675                              HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
4676             }
4677             SvLEN_set(dstr, len);
4678             SvCUR_set(dstr, cur);
4679             SvIsCOW_on(dstr);
4680         } else {
4681             /* Failed the swipe test, and we cannot do copy-on-write either.
4682                Have to copy the string.  */
4683             SvGROW(dstr, cur + 1);      /* inlined from sv_setpvn */
4684             Move(SvPVX_const(sstr),SvPVX(dstr),cur,char);
4685             SvCUR_set(dstr, cur);
4686             *SvEND(dstr) = '\0';
4687         }
4688         if (sflags & SVp_NOK) {
4689             SvNV_set(dstr, SvNVX(sstr));
4690         }
4691         if (sflags & SVp_IOK) {
4692             SvIV_set(dstr, SvIVX(sstr));
4693             /* Must do this otherwise some other overloaded use of 0x80000000
4694                gets confused. I guess SVpbm_VALID */
4695             if (sflags & SVf_IVisUV)
4696                 SvIsUV_on(dstr);
4697         }
4698         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4699         {
4700             const MAGIC * const smg = SvVSTRING_mg(sstr);
4701             if (smg) {
4702                 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4703                          smg->mg_ptr, smg->mg_len);
4704                 SvRMAGICAL_on(dstr);
4705             }
4706         }
4707     }
4708     else if (sflags & (SVp_IOK|SVp_NOK)) {
4709         (void)SvOK_off(dstr);
4710         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
4711         if (sflags & SVp_IOK) {
4712             /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
4713             SvIV_set(dstr, SvIVX(sstr));
4714         }
4715         if (sflags & SVp_NOK) {
4716             SvNV_set(dstr, SvNVX(sstr));
4717         }
4718     }
4719     else {
4720         if (isGV_with_GP(sstr)) {
4721             gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
4722         }
4723         else
4724             (void)SvOK_off(dstr);
4725     }
4726     if (SvTAINTED(sstr))
4727         SvTAINT(dstr);
4728 }
4729
4730 /*
4731 =for apidoc sv_setsv_mg
4732
4733 Like C<sv_setsv>, but also handles 'set' magic.
4734
4735 =cut
4736 */
4737
4738 void
4739 Perl_sv_setsv_mg(pTHX_ SV *const dstr, SV *const sstr)
4740 {
4741     PERL_ARGS_ASSERT_SV_SETSV_MG;
4742
4743     sv_setsv(dstr,sstr);
4744     SvSETMAGIC(dstr);
4745 }
4746
4747 #ifdef PERL_ANY_COW
4748 #  define SVt_COW SVt_PV
4749 SV *
4750 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4751 {
4752     STRLEN cur = SvCUR(sstr);
4753     STRLEN len = SvLEN(sstr);
4754     char *new_pv;
4755 #if defined(PERL_DEBUG_READONLY_COW) && defined(PERL_COPY_ON_WRITE)
4756     const bool already = cBOOL(SvIsCOW(sstr));
4757 #endif
4758
4759     PERL_ARGS_ASSERT_SV_SETSV_COW;
4760
4761     if (DEBUG_C_TEST) {
4762         PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4763                       (void*)sstr, (void*)dstr);
4764         sv_dump(sstr);
4765         if (dstr)
4766                     sv_dump(dstr);
4767     }
4768
4769     if (dstr) {
4770         if (SvTHINKFIRST(dstr))
4771             sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4772         else if (SvPVX_const(dstr))
4773             Safefree(SvPVX_mutable(dstr));
4774     }
4775     else
4776         new_SV(dstr);
4777     SvUPGRADE(dstr, SVt_COW);
4778
4779     assert (SvPOK(sstr));
4780     assert (SvPOKp(sstr));
4781
4782     if (SvIsCOW(sstr)) {
4783
4784         if (SvLEN(sstr) == 0) {
4785             /* source is a COW shared hash key.  */
4786             DEBUG_C(PerlIO_printf(Perl_debug_log,
4787                                   "Fast copy on write: Sharing hash\n"));
4788             new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
4789             goto common_exit;
4790         }
4791         assert(SvCUR(sstr)+1 < SvLEN(sstr));
4792         assert(CowREFCNT(sstr) < SV_COW_REFCNT_MAX);
4793     } else {
4794         assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4795         SvUPGRADE(sstr, SVt_COW);
4796         SvIsCOW_on(sstr);
4797         DEBUG_C(PerlIO_printf(Perl_debug_log,
4798                               "Fast copy on write: Converting sstr to COW\n"));
4799         CowREFCNT(sstr) = 0;    
4800     }
4801 #  ifdef PERL_DEBUG_READONLY_COW
4802     if (already) sv_buf_to_rw(sstr);
4803 #  endif
4804     CowREFCNT(sstr)++;  
4805     new_pv = SvPVX_mutable(sstr);
4806     sv_buf_to_ro(sstr);
4807
4808   common_exit:
4809     SvPV_set(dstr, new_pv);
4810     SvFLAGS(dstr) = (SVt_COW|SVf_POK|SVp_POK|SVf_IsCOW);
4811     if (SvUTF8(sstr))
4812         SvUTF8_on(dstr);
4813     SvLEN_set(dstr, len);
4814     SvCUR_set(dstr, cur);
4815     if (DEBUG_C_TEST) {
4816         sv_dump(dstr);
4817     }
4818     return dstr;
4819 }
4820 #endif
4821
4822 /*
4823 =for apidoc sv_setpvn
4824
4825 Copies a string (possibly containing embedded C<NUL> characters) into an SV.
4826 The C<len> parameter indicates the number of
4827 bytes to be copied.  If the C<ptr> argument is NULL the SV will become
4828 undefined.  Does not handle 'set' magic.  See C<sv_setpvn_mg>.
4829
4830 =cut
4831 */
4832
4833 void
4834 Perl_sv_setpvn(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4835 {
4836     char *dptr;
4837
4838     PERL_ARGS_ASSERT_SV_SETPVN;
4839
4840     SV_CHECK_THINKFIRST_COW_DROP(sv);
4841     if (!ptr) {
4842         (void)SvOK_off(sv);
4843         return;
4844     }
4845     else {
4846         /* len is STRLEN which is unsigned, need to copy to signed */
4847         const IV iv = len;
4848         if (iv < 0)
4849             Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen %"
4850                        IVdf, iv);
4851     }
4852     SvUPGRADE(sv, SVt_PV);
4853
4854     dptr = SvGROW(sv, len + 1);
4855     Move(ptr,dptr,len,char);
4856     dptr[len] = '\0';
4857     SvCUR_set(sv, len);
4858     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4859     SvTAINT(sv);
4860     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4861 }
4862
4863 /*
4864 =for apidoc sv_setpvn_mg
4865
4866 Like C<sv_setpvn>, but also handles 'set' magic.
4867
4868 =cut
4869 */
4870
4871 void
4872 Perl_sv_setpvn_mg(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4873 {
4874     PERL_ARGS_ASSERT_SV_SETPVN_MG;
4875
4876     sv_setpvn(sv,ptr,len);
4877     SvSETMAGIC(sv);
4878 }
4879
4880 /*
4881 =for apidoc sv_setpv
4882
4883 Copies a string into an SV.  The string must be terminated with a C<NUL>
4884 character.
4885 Does not handle 'set' magic.  See C<sv_setpv_mg>.
4886
4887 =cut
4888 */
4889
4890 void
4891 Perl_sv_setpv(pTHX_ SV *const sv, const char *const ptr)
4892 {
4893     STRLEN len;
4894
4895     PERL_ARGS_ASSERT_SV_SETPV;
4896
4897     SV_CHECK_THINKFIRST_COW_DROP(sv);
4898     if (!ptr) {
4899         (void)SvOK_off(sv);
4900         return;
4901     }
4902     len = strlen(ptr);
4903     SvUPGRADE(sv, SVt_PV);
4904
4905     SvGROW(sv, len + 1);
4906     Move(ptr,SvPVX(sv),len+1,char);
4907     SvCUR_set(sv, len);
4908     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4909     SvTAINT(sv);
4910     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4911 }
4912
4913 /*
4914 =for apidoc sv_setpv_mg
4915
4916 Like C<sv_setpv>, but also handles 'set' magic.
4917
4918 =cut
4919 */
4920
4921 void
4922 Perl_sv_setpv_mg(pTHX_ SV *const sv, const char *const ptr)
4923 {
4924     PERL_ARGS_ASSERT_SV_SETPV_MG;
4925
4926     sv_setpv(sv,ptr);
4927     SvSETMAGIC(sv);
4928 }
4929
4930 void
4931 Perl_sv_sethek(pTHX_ SV *const sv, const HEK *const hek)
4932 {
4933     PERL_ARGS_ASSERT_SV_SETHEK;
4934
4935     if (!hek) {
4936         return;
4937     }
4938
4939     if (HEK_LEN(hek) == HEf_SVKEY) {
4940         sv_setsv(sv, *(SV**)HEK_KEY(hek));
4941         return;
4942     } else {
4943         const int flags = HEK_FLAGS(hek);
4944         if (flags & HVhek_WASUTF8) {
4945             STRLEN utf8_len = HEK_LEN(hek);
4946             char *as_utf8 = (char *)bytes_to_utf8((U8*)HEK_KEY(hek), &utf8_len);
4947             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
4948             SvUTF8_on(sv);
4949             return;
4950         } else if (flags & HVhek_UNSHARED) {
4951             sv_setpvn(sv, HEK_KEY(hek), HEK_LEN(hek));
4952             if (HEK_UTF8(hek))
4953                 SvUTF8_on(sv);
4954             else SvUTF8_off(sv);
4955             return;
4956         }
4957         {
4958             SV_CHECK_THINKFIRST_COW_DROP(sv);
4959             SvUPGRADE(sv, SVt_PV);
4960             SvPV_free(sv);
4961             SvPV_set(sv,(char *)HEK_KEY(share_hek_hek(hek)));
4962             SvCUR_set(sv, HEK_LEN(hek));
4963             SvLEN_set(sv, 0);
4964             SvIsCOW_on(sv);
4965             SvPOK_on(sv);
4966             if (HEK_UTF8(hek))
4967                 SvUTF8_on(sv);
4968             else SvUTF8_off(sv);
4969             return;
4970         }
4971     }
4972 }
4973
4974
4975 /*
4976 =for apidoc sv_usepvn_flags
4977
4978 Tells an SV to use C<ptr> to find its string value.  Normally the
4979 string is stored inside the SV, but sv_usepvn allows the SV to use an
4980 outside string.  The C<ptr> should point to memory that was allocated
4981 by L<Newx|perlclib/Memory Management and String Handling>.  It must be
4982 the start of a Newx-ed block of memory, and not a pointer to the
4983 middle of it (beware of L<OOK|perlguts/Offsets> and copy-on-write),
4984 and not be from a non-Newx memory allocator like C<malloc>.  The
4985 string length, C<len>, must be supplied.  By default this function
4986 will C<Renew> (i.e. realloc, move) the memory pointed to by C<ptr>,
4987 so that pointer should not be freed or used by the programmer after
4988 giving it to sv_usepvn, and neither should any pointers from "behind"
4989 that pointer (e.g. ptr + 1) be used.
4990
4991 If C<flags> & SV_SMAGIC is true, will call SvSETMAGIC.  If C<flags> &
4992 SV_HAS_TRAILING_NUL is true, then C<ptr[len]> must be C<NUL>, and the realloc
4993 will be skipped (i.e. the buffer is actually at least 1 byte longer than
4994 C<len>, and already meets the requirements for storing in C<SvPVX>).
4995
4996 =cut
4997 */
4998
4999 void
5000 Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
5001 {
5002     STRLEN allocate;
5003
5004     PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
5005
5006     SV_CHECK_THINKFIRST_COW_DROP(sv);
5007     SvUPGRADE(sv, SVt_PV);
5008     if (!ptr) {
5009         (void)SvOK_off(sv);
5010         if (flags & SV_SMAGIC)
5011             SvSETMAGIC(sv);
5012         return;
5013     }
5014     if (SvPVX_const(sv))
5015         SvPV_free(sv);
5016
5017 #ifdef DEBUGGING
5018     if (flags & SV_HAS_TRAILING_NUL)
5019         assert(ptr[len] == '\0');
5020 #endif
5021
5022     allocate = (flags & SV_HAS_TRAILING_NUL)
5023         ? len + 1 :
5024 #ifdef Perl_safesysmalloc_size
5025         len + 1;
5026 #else 
5027         PERL_STRLEN_ROUNDUP(len + 1);
5028 #endif
5029     if (flags & SV_HAS_TRAILING_NUL) {
5030         /* It's long enough - do nothing.
5031            Specifically Perl_newCONSTSUB is relying on this.  */
5032     } else {
5033 #ifdef DEBUGGING
5034         /* Force a move to shake out bugs in callers.  */
5035         char *new_ptr = (char*)safemalloc(allocate);
5036         Copy(ptr, new_ptr, len, char);
5037         PoisonFree(ptr,len,char);
5038         Safefree(ptr);
5039         ptr = new_ptr;
5040 #else
5041         ptr = (char*) saferealloc (ptr, allocate);
5042 #endif
5043     }
5044 #ifdef Perl_safesysmalloc_size
5045     SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
5046 #else
5047     SvLEN_set(sv, allocate);
5048 #endif
5049     SvCUR_set(sv, len);
5050     SvPV_set(sv, ptr);
5051     if (!(flags & SV_HAS_TRAILING_NUL)) {
5052         ptr[len] = '\0';
5053     }
5054     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5055     SvTAINT(sv);
5056     if (flags & SV_SMAGIC)
5057         SvSETMAGIC(sv);
5058 }
5059
5060 /*
5061 =for apidoc sv_force_normal_flags
5062
5063 Undo various types of fakery on an SV, where fakery means
5064 "more than" a string: if the PV is a shared string, make
5065 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
5066 an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
5067 we do the copy, and is also used locally; if this is a
5068 vstring, drop the vstring magic.  If C<SV_COW_DROP_PV> is set
5069 then a copy-on-write scalar drops its PV buffer (if any) and becomes
5070 SvPOK_off rather than making a copy.  (Used where this
5071 scalar is about to be set to some other value.)  In addition,
5072 the C<flags> parameter gets passed to C<sv_unref_flags()>
5073 when unreffing.  C<sv_force_normal> calls this function
5074 with flags set to 0.
5075
5076 This function is expected to be used to signal to perl that this SV is
5077 about to be written to, and any extra book-keeping needs to be taken care
5078 of.  Hence, it croaks on read-only values.
5079
5080 =cut
5081 */
5082
5083 static void
5084 S_sv_uncow(pTHX_ SV * const sv, const U32 flags)
5085 {
5086     assert(SvIsCOW(sv));
5087     {
5088 #ifdef PERL_ANY_COW
5089         const char * const pvx = SvPVX_const(sv);
5090         const STRLEN len = SvLEN(sv);
5091         const STRLEN cur = SvCUR(sv);
5092
5093         if (DEBUG_C_TEST) {
5094                 PerlIO_printf(Perl_debug_log,
5095                               "Copy on write: Force normal %ld\n",
5096                               (long) flags);
5097                 sv_dump(sv);
5098         }
5099         SvIsCOW_off(sv);
5100 # ifdef PERL_COPY_ON_WRITE
5101         if (len) {
5102             /* Must do this first, since the CowREFCNT uses SvPVX and
5103             we need to write to CowREFCNT, or de-RO the whole buffer if we are
5104             the only owner left of the buffer. */
5105             sv_buf_to_rw(sv); /* NOOP if RO-ing not supported */
5106             {
5107                 U8 cowrefcnt = CowREFCNT(sv);
5108                 if(cowrefcnt != 0) {
5109                     cowrefcnt--;
5110                     CowREFCNT(sv) = cowrefcnt;
5111                     sv_buf_to_ro(sv);
5112                     goto copy_over;
5113                 }
5114             }
5115             /* Else we are the only owner of the buffer. */
5116         }
5117         else
5118 # endif
5119         {
5120             /* This SV doesn't own the buffer, so need to Newx() a new one:  */
5121             copy_over:
5122             SvPV_set(sv, NULL);
5123             SvCUR_set(sv, 0);
5124             SvLEN_set(sv, 0);
5125             if (flags & SV_COW_DROP_PV) {
5126                 /* OK, so we don't need to copy our buffer.  */
5127                 SvPOK_off(sv);
5128             } else {
5129                 SvGROW(sv, cur + 1);
5130                 Move(pvx,SvPVX(sv),cur,char);
5131                 SvCUR_set(sv, cur);
5132                 *SvEND(sv) = '\0';
5133             }
5134             if (len) {
5135             } else {
5136                 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5137             }
5138             if (DEBUG_C_TEST) {
5139                 sv_dump(sv);
5140             }
5141         }
5142 #else
5143             const char * const pvx = SvPVX_const(sv);
5144             const STRLEN len = SvCUR(sv);
5145             SvIsCOW_off(sv);
5146             SvPV_set(sv, NULL);
5147             SvLEN_set(sv, 0);
5148             if (flags & SV_COW_DROP_PV) {
5149                 /* OK, so we don't need to copy our buffer.  */
5150                 SvPOK_off(sv);
5151             } else {
5152                 SvGROW(sv, len + 1);
5153                 Move(pvx,SvPVX(sv),len,char);
5154                 *SvEND(sv) = '\0';
5155             }
5156             unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5157 #endif
5158     }
5159 }
5160
5161 void
5162 Perl_sv_force_normal_flags(pTHX_ SV *const sv, const U32 flags)
5163 {
5164     PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
5165
5166     if (SvREADONLY(sv))
5167         Perl_croak_no_modify();
5168     else if (SvIsCOW(sv) && LIKELY(SvTYPE(sv) != SVt_PVHV))
5169         S_sv_uncow(aTHX_ sv, flags);
5170     if (SvROK(sv))
5171         sv_unref_flags(sv, flags);
5172     else if (SvFAKE(sv) && isGV_with_GP(sv))
5173         sv_unglob(sv, flags);
5174     else if (SvFAKE(sv) && isREGEXP(sv)) {
5175         /* Need to downgrade the REGEXP to a simple(r) scalar. This is analogous
5176            to sv_unglob. We only need it here, so inline it.  */
5177         const bool islv = SvTYPE(sv) == SVt_PVLV;
5178         const svtype new_type =
5179           islv ? SVt_NULL : SvMAGIC(sv) || SvSTASH(sv) ? SVt_PVMG : SVt_PV;
5180         SV *const temp = newSV_type(new_type);
5181         regexp *const temp_p = ReANY((REGEXP *)sv);
5182
5183         if (new_type == SVt_PVMG) {
5184             SvMAGIC_set(temp, SvMAGIC(sv));
5185             SvMAGIC_set(sv, NULL);
5186             SvSTASH_set(temp, SvSTASH(sv));
5187             SvSTASH_set(sv, NULL);
5188         }
5189         if (!islv) SvCUR_set(temp, SvCUR(sv));
5190         /* Remember that SvPVX is in the head, not the body.  But
5191            RX_WRAPPED is in the body. */
5192         assert(ReANY((REGEXP *)sv)->mother_re);
5193         /* Their buffer is already owned by someone else. */
5194         if (flags & SV_COW_DROP_PV) {
5195             /* SvLEN is already 0.  For SVt_REGEXP, we have a brand new
5196                zeroed body.  For SVt_PVLV, it should have been set to 0
5197                before turning into a regexp. */
5198             assert(!SvLEN(islv ? sv : temp));
5199             sv->sv_u.svu_pv = 0;
5200         }
5201         else {
5202             sv->sv_u.svu_pv = savepvn(RX_WRAPPED((REGEXP *)sv), SvCUR(sv));
5203             SvLEN_set(islv ? sv : temp, SvCUR(sv)+1);
5204             SvPOK_on(sv);
5205         }
5206
5207         /* Now swap the rest of the bodies. */
5208
5209         SvFAKE_off(sv);
5210         if (!islv) {
5211             SvFLAGS(sv) &= ~SVTYPEMASK;
5212             SvFLAGS(sv) |= new_type;
5213             SvANY(sv) = SvANY(temp);
5214         }
5215
5216         SvFLAGS(temp) &= ~(SVTYPEMASK);
5217         SvFLAGS(temp) |= SVt_REGEXP|SVf_FAKE;
5218         SvANY(temp) = temp_p;
5219         temp->sv_u.svu_rx = (regexp *)temp_p;
5220
5221         SvREFCNT_dec_NN(temp);
5222     }
5223     else if (SvVOK(sv)) sv_unmagic(sv, PERL_MAGIC_vstring);
5224 }
5225
5226 /*
5227 =for apidoc sv_chop
5228
5229 Efficient removal of characters from the beginning of the string buffer.
5230 SvPOK(sv), or at least SvPOKp(sv), must be true and the C<ptr> must be a
5231 pointer to somewhere inside the string buffer.  The C<ptr> becomes the first
5232 character of the adjusted string.  Uses the "OOK hack".  On return, only
5233 SvPOK(sv) and SvPOKp(sv) among the OK flags will be true.
5234
5235 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
5236 refer to the same chunk of data.
5237
5238 The unfortunate similarity of this function's name to that of Perl's C<chop>
5239 operator is strictly coincidental.  This function works from the left;
5240 C<chop> works from the right.
5241
5242 =cut
5243 */
5244
5245 void
5246 Perl_sv_chop(pTHX_ SV *const sv, const char *const ptr)
5247 {
5248     STRLEN delta;
5249     STRLEN old_delta;
5250     U8 *p;
5251 #ifdef DEBUGGING
5252     const U8 *evacp;
5253     STRLEN evacn;
5254 #endif
5255     STRLEN max_delta;
5256
5257     PERL_ARGS_ASSERT_SV_CHOP;
5258
5259     if (!ptr || !SvPOKp(sv))
5260         return;
5261     delta = ptr - SvPVX_const(sv);
5262     if (!delta) {
5263         /* Nothing to do.  */
5264         return;
5265     }
5266     max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
5267     if (delta > max_delta)
5268         Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
5269                    ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
5270     /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), so don't use ptr any more */
5271     SV_CHECK_THINKFIRST(sv);
5272     SvPOK_only_UTF8(sv);
5273
5274     if (!SvOOK(sv)) {
5275         if (!SvLEN(sv)) { /* make copy of shared string */
5276             const char *pvx = SvPVX_const(sv);
5277             const STRLEN len = SvCUR(sv);
5278             SvGROW(sv, len + 1);
5279             Move(pvx,SvPVX(sv),len,char);
5280             *SvEND(sv) = '\0';
5281         }
5282         SvOOK_on(sv);
5283         old_delta = 0;
5284     } else {
5285         SvOOK_offset(sv, old_delta);
5286     }
5287     SvLEN_set(sv, SvLEN(sv) - delta);
5288     SvCUR_set(sv, SvCUR(sv) - delta);
5289     SvPV_set(sv, SvPVX(sv) + delta);
5290
5291     p = (U8 *)SvPVX_const(sv);
5292
5293 #ifdef DEBUGGING
5294     /* how many bytes were evacuated?  we will fill them with sentinel
5295        bytes, except for the part holding the new offset of course. */
5296     evacn = delta;
5297     if (old_delta)
5298         evacn += (old_delta < 0x100 ? 1 : 1 + sizeof(STRLEN));
5299     assert(evacn);
5300     assert(evacn <= delta + old_delta);
5301     evacp = p - evacn;
5302 #endif
5303
5304     /* This sets 'delta' to the accumulated value of all deltas so far */
5305     delta += old_delta;
5306     assert(delta);
5307
5308     /* If 'delta' fits in a byte, store it just prior to the new beginning of
5309      * the string; otherwise store a 0 byte there and store 'delta' just prior
5310      * to that, using as many bytes as a STRLEN occupies.  Thus it overwrites a
5311      * portion of the chopped part of the string */
5312     if (delta < 0x100) {
5313         *--p = (U8) delta;
5314     } else {
5315         *--p = 0;
5316         p -= sizeof(STRLEN);
5317         Copy((U8*)&delta, p, sizeof(STRLEN), U8);
5318     }
5319
5320 #ifdef DEBUGGING
5321     /* Fill the preceding buffer with sentinals to verify that no-one is
5322        using it.  */
5323     while (p > evacp) {
5324         --p;
5325         *p = (U8)PTR2UV(p);
5326     }
5327 #endif
5328 }
5329
5330 /*
5331 =for apidoc sv_catpvn
5332
5333 Concatenates the string onto the end of the string which is in the SV.  The
5334 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
5335 status set, then the bytes appended should be valid UTF-8.
5336 Handles 'get' magic, but not 'set' magic.  See C<sv_catpvn_mg>.
5337
5338 =for apidoc sv_catpvn_flags
5339
5340 Concatenates the string onto the end of the string which is in the SV.  The
5341 C<len> indicates number of bytes to copy.
5342
5343 By default, the string appended is assumed to be valid UTF-8 if the SV has
5344 the UTF-8 status set, and a string of bytes otherwise.  One can force the
5345 appended string to be interpreted as UTF-8 by supplying the C<SV_CATUTF8>
5346 flag, and as bytes by supplying the C<SV_CATBYTES> flag; the SV or the
5347 string appended will be upgraded to UTF-8 if necessary.
5348
5349 If C<flags> has the C<SV_SMAGIC> bit set, will
5350 C<mg_set> on C<dsv> afterwards if appropriate.
5351 C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
5352 in terms of this function.
5353
5354 =cut
5355 */
5356
5357 void
5358 Perl_sv_catpvn_flags(pTHX_ SV *const dsv, const char *sstr, const STRLEN slen, const I32 flags)
5359 {
5360     STRLEN dlen;
5361     const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
5362
5363     PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
5364     assert((flags & (SV_CATBYTES|SV_CATUTF8)) != (SV_CATBYTES|SV_CATUTF8));
5365
5366     if (!(flags & SV_CATBYTES) || !SvUTF8(dsv)) {
5367       if (flags & SV_CATUTF8 && !SvUTF8(dsv)) {
5368          sv_utf8_upgrade_flags_grow(dsv, 0, slen + 1);
5369          dlen = SvCUR(dsv);
5370       }
5371       else SvGROW(dsv, dlen + slen + 1);
5372       if (sstr == dstr)
5373         sstr = SvPVX_const(dsv);
5374       Move(sstr, SvPVX(dsv) + dlen, slen, char);
5375       SvCUR_set(dsv, SvCUR(dsv) + slen);
5376     }
5377     else {
5378         /* We inline bytes_to_utf8, to avoid an extra malloc. */
5379         const char * const send = sstr + slen;
5380         U8 *d;
5381
5382         /* Something this code does not account for, which I think is
5383            impossible; it would require the same pv to be treated as
5384            bytes *and* utf8, which would indicate a bug elsewhere. */
5385         assert(sstr != dstr);
5386
5387         SvGROW(dsv, dlen + slen * 2 + 1);
5388         d = (U8 *)SvPVX(dsv) + dlen;
5389
5390         while (sstr < send) {
5391             append_utf8_from_native_byte(*sstr, &d);
5392             sstr++;
5393         }
5394         SvCUR_set(dsv, d-(const U8 *)SvPVX(dsv));
5395     }
5396     *SvEND(dsv) = '\0';
5397     (void)SvPOK_only_UTF8(dsv);         /* validate pointer */
5398     SvTAINT(dsv);
5399     if (flags & SV_SMAGIC)
5400         SvSETMAGIC(dsv);
5401 }
5402
5403 /*
5404 =for apidoc sv_catsv
5405
5406 Concatenates the string from SV C<ssv> onto the end of the string in SV
5407 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5408 Handles 'get' magic on both SVs, but no 'set' magic.  See C<sv_catsv_mg> and
5409 C<sv_catsv_nomg>.
5410
5411 =for apidoc sv_catsv_flags
5412
5413 Concatenates the string from SV C<ssv> onto the end of the string in SV
5414 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5415 If C<flags> include C<SV_GMAGIC> bit set, will call C<mg_get> on both SVs if
5416 appropriate.  If C<flags> include C<SV_SMAGIC>, C<mg_set> will be called on
5417 the modified SV afterward, if appropriate.  C<sv_catsv>, C<sv_catsv_nomg>,
5418 and C<sv_catsv_mg> are implemented in terms of this function.
5419
5420 =cut */
5421
5422 void
5423 Perl_sv_catsv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
5424 {
5425     PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
5426
5427     if (ssv) {
5428         STRLEN slen;
5429         const char *spv = SvPV_flags_const(ssv, slen, flags);
5430         if (flags & SV_GMAGIC)
5431                 SvGETMAGIC(dsv);
5432         sv_catpvn_flags(dsv, spv, slen,
5433                             DO_UTF8(ssv) ? SV_CATUTF8 : SV_CATBYTES);
5434         if (flags & SV_SMAGIC)
5435                 SvSETMAGIC(dsv);
5436     }
5437 }
5438
5439 /*
5440 =for apidoc sv_catpv
5441
5442 Concatenates the C<NUL>-terminated string onto the end of the string which is
5443 in the SV.
5444 If the SV has the UTF-8 status set, then the bytes appended should be
5445 valid UTF-8.  Handles 'get' magic, but not 'set' magic.  See C<sv_catpv_mg>.
5446
5447 =cut */
5448
5449 void
5450 Perl_sv_catpv(pTHX_ SV *const sv, const char *ptr)
5451 {
5452     STRLEN len;
5453     STRLEN tlen;
5454     char *junk;
5455
5456     PERL_ARGS_ASSERT_SV_CATPV;
5457
5458     if (!ptr)
5459         return;
5460     junk = SvPV_force(sv, tlen);
5461     len = strlen(ptr);
5462     SvGROW(sv, tlen + len + 1);
5463     if (ptr == junk)
5464         ptr = SvPVX_const(sv);
5465     Move(ptr,SvPVX(sv)+tlen,len+1,char);
5466     SvCUR_set(sv, SvCUR(sv) + len);
5467     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5468     SvTAINT(sv);
5469 }
5470
5471 /*
5472 =for apidoc sv_catpv_flags
5473
5474 Concatenates the C<NUL>-terminated string onto the end of the string which is
5475 in the SV.
5476 If the SV has the UTF-8 status set, then the bytes appended should
5477 be valid UTF-8.  If C<flags> has the C<SV_SMAGIC> bit set, will C<mg_set>
5478 on the modified SV if appropriate.
5479
5480 =cut
5481 */
5482
5483 void
5484 Perl_sv_catpv_flags(pTHX_ SV *dstr, const char *sstr, const I32 flags)
5485 {
5486     PERL_ARGS_ASSERT_SV_CATPV_FLAGS;
5487     sv_catpvn_flags(dstr, sstr, strlen(sstr), flags);
5488 }
5489
5490 /*
5491 =for apidoc sv_catpv_mg
5492
5493 Like C<sv_catpv>, but also handles 'set' magic.
5494
5495 =cut
5496 */
5497
5498 void
5499 Perl_sv_catpv_mg(pTHX_ SV *const sv, const char *const ptr)
5500 {
5501     PERL_ARGS_ASSERT_SV_CATPV_MG;
5502
5503     sv_catpv(sv,ptr);
5504     SvSETMAGIC(sv);
5505 }
5506
5507 /*
5508 =for apidoc newSV
5509
5510 Creates a new SV.  A non-zero C<len> parameter indicates the number of
5511 bytes of preallocated string space the SV should have.  An extra byte for a
5512 trailing C<NUL> is also reserved.  (SvPOK is not set for the SV even if string
5513 space is allocated.)  The reference count for the new SV is set to 1.
5514
5515 In 5.9.3, newSV() replaces the older NEWSV() API, and drops the first
5516 parameter, I<x>, a debug aid which allowed callers to identify themselves.
5517 This aid has been superseded by a new build option, PERL_MEM_LOG (see
5518 L<perlhacktips/PERL_MEM_LOG>).  The older API is still there for use in XS
5519 modules supporting older perls.
5520
5521 =cut
5522 */
5523
5524 SV *
5525 Perl_newSV(pTHX_ const STRLEN len)
5526 {
5527     SV *sv;
5528
5529     new_SV(sv);
5530     if (len) {
5531         sv_grow(sv, len + 1);
5532     }
5533     return sv;
5534 }
5535 /*
5536 =for apidoc sv_magicext
5537
5538 Adds magic to an SV, upgrading it if necessary.  Applies the
5539 supplied vtable and returns a pointer to the magic added.
5540
5541 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
5542 In particular, you can add magic to SvREADONLY SVs, and add more than
5543 one instance of the same 'how'.
5544
5545 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
5546 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
5547 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
5548 to contain an C<SV*> and is stored as-is with its REFCNT incremented.
5549
5550 (This is now used as a subroutine by C<sv_magic>.)
5551
5552 =cut
5553 */
5554 MAGIC * 
5555 Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how, 
5556                 const MGVTBL *const vtable, const char *const name, const I32 namlen)
5557 {
5558     MAGIC* mg;
5559
5560     PERL_ARGS_ASSERT_SV_MAGICEXT;
5561
5562     SvUPGRADE(sv, SVt_PVMG);
5563     Newxz(mg, 1, MAGIC);
5564     mg->mg_moremagic = SvMAGIC(sv);
5565     SvMAGIC_set(sv, mg);
5566
5567     /* Sometimes a magic contains a reference loop, where the sv and
5568        object refer to each other.  To prevent a reference loop that
5569        would prevent such objects being freed, we look for such loops
5570        and if we find one we avoid incrementing the object refcount.
5571
5572        Note we cannot do this to avoid self-tie loops as intervening RV must
5573        have its REFCNT incremented to keep it in existence.
5574
5575     */
5576     if (!obj || obj == sv ||
5577         how == PERL_MAGIC_arylen ||
5578         how == PERL_MAGIC_symtab ||
5579         (SvTYPE(obj) == SVt_PVGV &&
5580             (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
5581              || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
5582              || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
5583     {
5584         mg->mg_obj = obj;
5585     }
5586     else {
5587         mg->mg_obj = SvREFCNT_inc_simple(obj);
5588         mg->mg_flags |= MGf_REFCOUNTED;
5589     }
5590
5591     /* Normal self-ties simply pass a null object, and instead of
5592        using mg_obj directly, use the SvTIED_obj macro to produce a
5593        new RV as needed.  For glob "self-ties", we are tieing the PVIO
5594        with an RV obj pointing to the glob containing the PVIO.  In
5595        this case, to avoid a reference loop, we need to weaken the
5596        reference.
5597     */
5598
5599     if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
5600         obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
5601     {
5602       sv_rvweaken(obj);
5603     }
5604
5605     mg->mg_type = how;
5606     mg->mg_len = namlen;
5607     if (name) {
5608         if (namlen > 0)
5609             mg->mg_ptr = savepvn(name, namlen);
5610         else if (namlen == HEf_SVKEY) {
5611             /* Yes, this is casting away const. This is only for the case of
5612                HEf_SVKEY. I think we need to document this aberation of the
5613                constness of the API, rather than making name non-const, as
5614                that change propagating outwards a long way.  */
5615             mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
5616         } else
5617             mg->mg_ptr = (char *) name;
5618     }
5619     mg->mg_virtual = (MGVTBL *) vtable;
5620
5621     mg_magical(sv);
5622     return mg;
5623 }
5624
5625 MAGIC *
5626 Perl_sv_magicext_mglob(pTHX_ SV *sv)
5627 {
5628     PERL_ARGS_ASSERT_SV_MAGICEXT_MGLOB;
5629     if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y') {
5630         /* This sv is only a delegate.  //g magic must be attached to
5631            its target. */
5632         vivify_defelem(sv);
5633         sv = LvTARG(sv);
5634     }
5635     return sv_magicext(sv, NULL, PERL_MAGIC_regex_global,
5636                        &PL_vtbl_mglob, 0, 0);
5637 }
5638
5639 /*
5640 =for apidoc sv_magic
5641
5642 Adds magic to an SV.  First upgrades C<sv> to type C<SVt_PVMG> if
5643 necessary, then adds a new magic item of type C<how> to the head of the
5644 magic list.
5645
5646 See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
5647 handling of the C<name> and C<namlen> arguments.
5648
5649 You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
5650 to add more than one instance of the same 'how'.
5651
5652 =cut
5653 */
5654
5655 void
5656 Perl_sv_magic(pTHX_ SV *const sv, SV *const obj, const int how,
5657              const char *const name, const I32 namlen)
5658 {
5659     const MGVTBL *vtable;
5660     MAGIC* mg;
5661     unsigned int flags;
5662     unsigned int vtable_index;
5663
5664     PERL_ARGS_ASSERT_SV_MAGIC;
5665
5666     if (how < 0 || (unsigned)how >= C_ARRAY_LENGTH(PL_magic_data)
5667         || ((flags = PL_magic_data[how]),
5668             (vtable_index = flags & PERL_MAGIC_VTABLE_MASK)
5669             > magic_vtable_max))
5670         Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
5671
5672     /* PERL_MAGIC_ext is reserved for use by extensions not perl internals.
5673        Useful for attaching extension internal data to perl vars.
5674        Note that multiple extensions may clash if magical scalars
5675        etc holding private data from one are passed to another. */
5676
5677     vtable = (vtable_index == magic_vtable_max)
5678         ? NULL : PL_magic_vtables + vtable_index;
5679
5680     if (SvREADONLY(sv)) {
5681         if (
5682             !PERL_MAGIC_TYPE_READONLY_ACCEPTABLE(how)
5683            )
5684         {
5685             Perl_croak_no_modify();
5686         }
5687     }
5688     if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5689         if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
5690             /* sv_magic() refuses to add a magic of the same 'how' as an
5691                existing one
5692              */
5693             if (how == PERL_MAGIC_taint)
5694                 mg->mg_len |= 1;
5695             return;
5696         }
5697     }
5698
5699     /* Force pos to be stored as characters, not bytes. */
5700     if (SvMAGICAL(sv) && DO_UTF8(sv)
5701       && (mg = mg_find(sv, PERL_MAGIC_regex_global))
5702       && mg->mg_len != -1
5703       && mg->mg_flags & MGf_BYTES) {
5704         mg->mg_len = (SSize_t)sv_pos_b2u_flags(sv, (STRLEN)mg->mg_len,
5705                                                SV_CONST_RETURN);
5706         mg->mg_flags &= ~MGf_BYTES;
5707     }
5708
5709     /* Rest of work is done else where */
5710     mg = sv_magicext(sv,obj,how,vtable,name,namlen);
5711
5712     switch (how) {
5713     case PERL_MAGIC_taint:
5714         mg->mg_len = 1;
5715         break;
5716     case PERL_MAGIC_ext:
5717     case PERL_MAGIC_dbfile:
5718         SvRMAGICAL_on(sv);
5719         break;
5720     }
5721 }
5722
5723 static int
5724 S_sv_unmagicext_flags(pTHX_ SV *const sv, const int type, MGVTBL *vtbl, const U32 flags)
5725 {
5726     MAGIC* mg;
5727     MAGIC** mgp;
5728
5729     assert(flags <= 1);
5730
5731     if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
5732         return 0;
5733     mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
5734     for (mg = *mgp; mg; mg = *mgp) {
5735         const MGVTBL* const virt = mg->mg_virtual;
5736         if (mg->mg_type == type && (!flags || virt == vtbl)) {
5737             *mgp = mg->mg_moremagic;
5738             if (virt && virt->svt_free)
5739                 virt->svt_free(aTHX_ sv, mg);
5740             if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
5741                 if (mg->mg_len > 0)
5742                     Safefree(mg->mg_ptr);
5743                 else if (mg->mg_len == HEf_SVKEY)
5744                     SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
5745                 else if (mg->mg_type == PERL_MAGIC_utf8)
5746                     Safefree(mg->mg_ptr);
5747             }
5748             if (mg->mg_flags & MGf_REFCOUNTED)
5749                 SvREFCNT_dec(mg->mg_obj);
5750             Safefree(mg);
5751         }
5752         else
5753             mgp = &mg->mg_moremagic;
5754     }
5755     if (SvMAGIC(sv)) {
5756         if (SvMAGICAL(sv))      /* if we're under save_magic, wait for restore_magic; */
5757             mg_magical(sv);     /*    else fix the flags now */
5758     }
5759     else {
5760         SvMAGICAL_off(sv);
5761         SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
5762     }
5763     return 0;
5764 }
5765
5766 /*
5767 =for apidoc sv_unmagic
5768
5769 Removes all magic of type C<type> from an SV.
5770
5771 =cut
5772 */
5773
5774 int
5775 Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
5776 {
5777     PERL_ARGS_ASSERT_SV_UNMAGIC;
5778     return S_sv_unmagicext_flags(aTHX_ sv, type, NULL, 0);
5779 }
5780
5781 /*
5782 =for apidoc sv_unmagicext
5783
5784 Removes all magic of type C<type> with the specified C<vtbl> from an SV.
5785
5786 =cut
5787 */
5788
5789 int
5790 Perl_sv_unmagicext(pTHX_ SV *const sv, const int type, MGVTBL *vtbl)
5791 {
5792     PERL_ARGS_ASSERT_SV_UNMAGICEXT;
5793     return S_sv_unmagicext_flags(aTHX_ sv, type, vtbl, 1);
5794 }
5795
5796 /*
5797 =for apidoc sv_rvweaken
5798
5799 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5800 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5801 push a back-reference to this RV onto the array of backreferences
5802 associated with that magic.  If the RV is magical, set magic will be
5803 called after the RV is cleared.
5804
5805 =cut
5806 */
5807
5808 SV *
5809 Perl_sv_rvweaken(pTHX_ SV *const sv)
5810 {
5811     SV *tsv;
5812
5813     PERL_ARGS_ASSERT_SV_RVWEAKEN;
5814
5815     if (!SvOK(sv))  /* let undefs pass */
5816         return sv;
5817     if (!SvROK(sv))
5818         Perl_croak(aTHX_ "Can't weaken a nonreference");
5819     else if (SvWEAKREF(sv)) {
5820         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
5821         return sv;
5822     }
5823     else if (SvREADONLY(sv)) croak_no_modify();
5824     tsv = SvRV(sv);
5825     Perl_sv_add_backref(aTHX_ tsv, sv);
5826     SvWEAKREF_on(sv);
5827     SvREFCNT_dec_NN(tsv);
5828     return sv;
5829 }
5830
5831 /*
5832 =for apidoc sv_get_backrefs
5833
5834 If the sv is the target of a weak reference then it returns the back
5835 references structure associated with the sv; otherwise return NULL.
5836
5837 When returning a non-null result the type of the return is relevant. If it
5838 is an AV then the elements of the AV are the weak reference RVs which
5839 point at this item. If it is any other type then the item itself is the
5840 weak reference.
5841
5842 See also Perl_sv_add_backref(), Perl_sv_del_backref(),
5843 Perl_sv_kill_backrefs()
5844
5845 =cut
5846 */
5847
5848 SV *
5849 Perl_sv_get_backrefs(SV *const sv)
5850 {
5851     SV *backrefs= NULL;
5852
5853     PERL_ARGS_ASSERT_SV_GET_BACKREFS;
5854
5855     /* find slot to store array or singleton backref */
5856
5857     if (SvTYPE(sv) == SVt_PVHV) {
5858         if (SvOOK(sv)) {
5859             struct xpvhv_aux * const iter = HvAUX((HV *)sv);
5860             backrefs = (SV *)iter->xhv_backreferences;
5861         }
5862     } else if (SvMAGICAL(sv)) {
5863         MAGIC *mg = mg_find(sv, PERL_MAGIC_backref);
5864         if (mg)
5865             backrefs = mg->mg_obj;
5866     }
5867     return backrefs;
5868 }
5869
5870 /* Give tsv backref magic if it hasn't already got it, then push a
5871  * back-reference to sv onto the array associated with the backref magic.
5872  *
5873  * As an optimisation, if there's only one backref and it's not an AV,
5874  * store it directly in the HvAUX or mg_obj slot, avoiding the need to
5875  * allocate an AV. (Whether the slot holds an AV tells us whether this is
5876  * active.)
5877  */
5878
5879 /* A discussion about the backreferences array and its refcount:
5880  *
5881  * The AV holding the backreferences is pointed to either as the mg_obj of
5882  * PERL_MAGIC_backref, or in the specific case of a HV, from the
5883  * xhv_backreferences field. The array is created with a refcount
5884  * of 2. This means that if during global destruction the array gets
5885  * picked on before its parent to have its refcount decremented by the
5886  * random zapper, it won't actually be freed, meaning it's still there for
5887  * when its parent gets freed.
5888  *
5889  * When the parent SV is freed, the extra ref is killed by
5890  * Perl_sv_kill_backrefs.  The other ref is killed, in the case of magic,
5891  * by mg_free() / MGf_REFCOUNTED, or for a hash, by Perl_hv_kill_backrefs.
5892  *
5893  * When a single backref SV is stored directly, it is not reference
5894  * counted.
5895  */
5896
5897 void
5898 Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
5899 {
5900     SV **svp;
5901     AV *av = NULL;
5902     MAGIC *mg = NULL;
5903
5904     PERL_ARGS_ASSERT_SV_ADD_BACKREF;
5905
5906     /* find slot to store array or singleton backref */
5907
5908     if (SvTYPE(tsv) == SVt_PVHV) {
5909         svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5910     } else {
5911         if (SvMAGICAL(tsv))
5912             mg = mg_find(tsv, PERL_MAGIC_backref);
5913         if (!mg)
5914             mg = sv_magicext(tsv, NULL, PERL_MAGIC_backref, &PL_vtbl_backref, NULL, 0);
5915         svp = &(mg->mg_obj);
5916     }
5917
5918     /* create or retrieve the array */
5919
5920     if (   (!*svp && SvTYPE(sv) == SVt_PVAV)
5921         || (*svp && SvTYPE(*svp) != SVt_PVAV)
5922     ) {
5923         /* create array */
5924         if (mg)
5925             mg->mg_flags |= MGf_REFCOUNTED;
5926         av = newAV();
5927         AvREAL_off(av);
5928         SvREFCNT_inc_simple_void_NN(av);
5929         /* av now has a refcnt of 2; see discussion above */
5930         av_extend(av, *svp ? 2 : 1);
5931         if (*svp) {
5932             /* move single existing backref to the array */
5933             AvARRAY(av)[++AvFILLp(av)] = *svp; /* av_push() */
5934         }
5935         *svp = (SV*)av;
5936     }
5937     else {
5938         av = MUTABLE_AV(*svp);
5939         if (!av) {
5940             /* optimisation: store single backref directly in HvAUX or mg_obj */
5941             *svp = sv;
5942             return;
5943         }
5944         assert(SvTYPE(av) == SVt_PVAV);
5945         if (AvFILLp(av) >= AvMAX(av)) {
5946             av_extend(av, AvFILLp(av)+1);
5947         }
5948     }
5949     /* push new backref */
5950     AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
5951 }
5952
5953 /* delete a back-reference to ourselves from the backref magic associated
5954  * with the SV we point to.
5955  */
5956
5957 void
5958 Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
5959 {
5960     SV **svp = NULL;
5961
5962     PERL_ARGS_ASSERT_SV_DEL_BACKREF;
5963
5964     if (SvTYPE(tsv) == SVt_PVHV) {
5965         if (SvOOK(tsv))
5966             svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5967     }
5968     else if (SvIS_FREED(tsv) && PL_phase == PERL_PHASE_DESTRUCT) {
5969         /* It's possible for the the last (strong) reference to tsv to have
5970            become freed *before* the last thing holding a weak reference.
5971            If both survive longer than the backreferences array, then when
5972            the referent's reference count drops to 0 and it is freed, it's
5973            not able to chase the backreferences, so they aren't NULLed.
5974
5975            For example, a CV holds a weak reference to its stash. If both the
5976            CV and the stash survive longer than the backreferences array,
5977            and the CV gets picked for the SvBREAK() treatment first,
5978            *and* it turns out that the stash is only being kept alive because
5979            of an our variable in the pad of the CV, then midway during CV
5980            destruction the stash gets freed, but CvSTASH() isn't set to NULL.
5981            It ends up pointing to the freed HV. Hence it's chased in here, and
5982            if this block wasn't here, it would hit the !svp panic just below.
5983
5984            I don't believe that "better" destruction ordering is going to help
5985            here - during global destruction there's always going to be the
5986            chance that something goes out of order. We've tried to make it
5987            foolproof before, and it only resulted in evolutionary pressure on
5988            fools. Which made us look foolish for our hubris. :-(
5989         */
5990         return;
5991     }
5992     else {
5993         MAGIC *const mg
5994             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
5995         svp =  mg ? &(mg->mg_obj) : NULL;
5996     }
5997
5998     if (!svp)
5999         Perl_croak(aTHX_ "panic: del_backref, svp=0");
6000     if (!*svp) {
6001         /* It's possible that sv is being freed recursively part way through the
6002            freeing of tsv. If this happens, the backreferences array of tsv has
6003            already been freed, and so svp will be NULL. If this is the case,
6004            we should not panic. Instead, nothing needs doing, so return.  */
6005         if (PL_phase == PERL_PHASE_DESTRUCT && SvREFCNT(tsv) == 0)
6006             return;
6007         Perl_croak(aTHX_ "panic: del_backref, *svp=%p phase=%s refcnt=%" UVuf,
6008                    (void*)*svp, PL_phase_names[PL_phase], (UV)SvREFCNT(tsv));
6009     }
6010
6011     if (SvTYPE(*svp) == SVt_PVAV) {
6012 #ifdef DEBUGGING
6013         int count = 1;
6014 #endif
6015         AV * const av = (AV*)*svp;
6016         SSize_t fill;
6017         assert(!SvIS_FREED(av));
6018         fill = AvFILLp(av);
6019         assert(fill > -1);
6020         svp = AvARRAY(av);
6021         /* for an SV with N weak references to it, if all those
6022          * weak refs are deleted, then sv_del_backref will be called
6023          * N times and O(N^2) compares will be done within the backref
6024          * array. To ameliorate this potential slowness, we:
6025          * 1) make sure this code is as tight as possible;
6026          * 2) when looking for SV, look for it at both the head and tail of the
6027          *    array first before searching the rest, since some create/destroy
6028          *    patterns will cause the backrefs to be freed in order.
6029          */
6030         if (*svp == sv) {
6031             AvARRAY(av)++;
6032             AvMAX(av)--;
6033         }
6034         else {
6035             SV **p = &svp[fill];
6036             SV *const topsv = *p;
6037             if (topsv != sv) {
6038 #ifdef DEBUGGING
6039                 count = 0;
6040 #endif
6041                 while (--p > svp) {
6042                     if (*p == sv) {
6043                         /* We weren't the last entry.
6044                            An unordered list has this property that you
6045                            can take the last element off the end to fill
6046                            the hole, and it's still an unordered list :-)
6047                         */
6048                         *p = topsv;
6049 #ifdef DEBUGGING
6050                         count++;
6051 #else
6052                         break; /* should only be one */
6053 #endif
6054                     }
6055                 }
6056             }
6057         }
6058         assert(count ==1);
6059         AvFILLp(av) = fill-1;
6060     }
6061     else if (SvIS_FREED(*svp) && PL_phase == PERL_PHASE_DESTRUCT) {
6062         /* freed AV; skip */
6063     }
6064     else {
6065         /* optimisation: only a single backref, stored directly */
6066         if (*svp != sv)
6067             Perl_croak(aTHX_ "panic: del_backref, *svp=%p, sv=%p",
6068                        (void*)*svp, (void*)sv);
6069         *svp = NULL;
6070     }
6071
6072 }
6073
6074 void
6075 Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
6076 {
6077     SV **svp;
6078     SV **last;
6079     bool is_array;
6080
6081     PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
6082
6083     if (!av)
6084         return;
6085
6086     /* after multiple passes through Perl_sv_clean_all() for a thingy
6087      * that has badly leaked, the backref array may have gotten freed,
6088      * since we only protect it against 1 round of cleanup */
6089     if (SvIS_FREED(av)) {
6090         if (PL_in_clean_all) /* All is fair */
6091             return;
6092         Perl_croak(aTHX_
6093                    "panic: magic_killbackrefs (freed backref AV/SV)");
6094     }
6095
6096
6097     is_array = (SvTYPE(av) == SVt_PVAV);
6098     if (is_array) {
6099         assert(!SvIS_FREED(av));
6100         svp = AvARRAY(av);
6101         if (svp)
6102             last = svp + AvFILLp(av);
6103     }
6104     else {
6105         /* optimisation: only a single backref, stored directly */
6106         svp = (SV**)&av;
6107         last = svp;
6108     }
6109
6110     if (svp) {
6111         while (svp <= last) {
6112             if (*svp) {
6113                 SV *const referrer = *svp;
6114                 if (SvWEAKREF(referrer)) {
6115                     /* XXX Should we check that it hasn't changed? */
6116                     assert(SvROK(referrer));
6117                     SvRV_set(referrer, 0);
6118                     SvOK_off(referrer);
6119                     SvWEAKREF_off(referrer);
6120                     SvSETMAGIC(referrer);
6121                 } else if (SvTYPE(referrer) == SVt_PVGV ||
6122                            SvTYPE(referrer) == SVt_PVLV) {
6123                     assert(SvTYPE(sv) == SVt_PVHV); /* stash backref */
6124                     /* You lookin' at me?  */
6125                     assert(GvSTASH(referrer));
6126                     assert(GvSTASH(referrer) == (const HV *)sv);
6127                     GvSTASH(referrer) = 0;
6128                 } else if (SvTYPE(referrer) == SVt_PVCV ||
6129                            SvTYPE(referrer) == SVt_PVFM) {
6130                     if (SvTYPE(sv) == SVt_PVHV) { /* stash backref */
6131                         /* You lookin' at me?  */
6132                         assert(CvSTASH(referrer));
6133                         assert(CvSTASH(referrer) == (const HV *)sv);
6134                         SvANY(MUTABLE_CV(referrer))->xcv_stash = 0;
6135                     }
6136                     else {
6137                         assert(SvTYPE(sv) == SVt_PVGV);
6138                         /* You lookin' at me?  */
6139                         assert(CvGV(referrer));
6140                         assert(CvGV(referrer) == (const GV *)sv);
6141                         anonymise_cv_maybe(MUTABLE_GV(sv),
6142                                                 MUTABLE_CV(referrer));
6143                     }
6144
6145                 } else {
6146                     Perl_croak(aTHX_
6147                                "panic: magic_killbackrefs (flags=%"UVxf")",
6148                                (UV)SvFLAGS(referrer));
6149                 }
6150
6151                 if (is_array)
6152                     *svp = NULL;
6153             }
6154             svp++;
6155         }
6156     }
6157     if (is_array) {
6158         AvFILLp(av) = -1;
6159         SvREFCNT_dec_NN(av); /* remove extra count added by sv_add_backref() */
6160     }
6161     return;
6162 }
6163
6164 /*
6165 =for apidoc sv_insert
6166
6167 Inserts a string at the specified offset/length within the SV.  Similar to
6168 the Perl substr() function.  Handles get magic.
6169
6170 =for apidoc sv_insert_flags
6171
6172 Same as C<sv_insert>, but the extra C<flags> are passed to the
6173 C<SvPV_force_flags> that applies to C<bigstr>.
6174
6175 =cut
6176 */
6177
6178 void
6179 Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen, const U32 flags)
6180 {
6181     char *big;
6182     char *mid;
6183     char *midend;
6184     char *bigend;
6185     SSize_t i;          /* better be sizeof(STRLEN) or bad things happen */
6186     STRLEN curlen;
6187
6188     PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
6189
6190     SvPV_force_flags(bigstr, curlen, flags);
6191     (void)SvPOK_only_UTF8(bigstr);
6192     if (offset + len > curlen) {
6193         SvGROW(bigstr, offset+len+1);
6194         Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
6195         SvCUR_set(bigstr, offset+len);
6196     }
6197
6198     SvTAINT(bigstr);
6199     i = littlelen - len;
6200     if (i > 0) {                        /* string might grow */
6201         big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
6202         mid = big + offset + len;
6203         midend = bigend = big + SvCUR(bigstr);
6204         bigend += i;
6205         *bigend = '\0';
6206         while (midend > mid)            /* shove everything down */
6207             *--bigend = *--midend;
6208         Move(little,big+offset,littlelen,char);
6209         SvCUR_set(bigstr, SvCUR(bigstr) + i);
6210         SvSETMAGIC(bigstr);
6211         return;
6212     }
6213     else if (i == 0) {
6214         Move(little,SvPVX(bigstr)+offset,len,char);
6215         SvSETMAGIC(bigstr);
6216         return;
6217     }
6218
6219     big = SvPVX(bigstr);
6220     mid = big + offset;
6221     midend = mid + len;
6222     bigend = big + SvCUR(bigstr);
6223
6224     if (midend > bigend)
6225         Perl_croak(aTHX_ "panic: sv_insert, midend=%p, bigend=%p",
6226                    midend, bigend);
6227
6228     if (mid - big > bigend - midend) {  /* faster to shorten from end */
6229         if (littlelen) {
6230             Move(little, mid, littlelen,char);
6231             mid += littlelen;
6232         }
6233         i = bigend - midend;
6234         if (i > 0) {
6235             Move(midend, mid, i,char);
6236             mid += i;
6237         }
6238         *mid = '\0';
6239         SvCUR_set(bigstr, mid - big);
6240     }
6241     else if ((i = mid - big)) { /* faster from front */
6242         midend -= littlelen;
6243         mid = midend;
6244         Move(big, midend - i, i, char);
6245         sv_chop(bigstr,midend-i);
6246         if (littlelen)
6247             Move(little, mid, littlelen,char);
6248     }
6249     else if (littlelen) {
6250         midend -= littlelen;
6251         sv_chop(bigstr,midend);
6252         Move(little,midend,littlelen,char);
6253     }
6254     else {
6255         sv_chop(bigstr,midend);
6256     }
6257     SvSETMAGIC(bigstr);
6258 }
6259
6260 /*
6261 =for apidoc sv_replace
6262
6263 Make the first argument a copy of the second, then delete the original.
6264 The target SV physically takes over ownership of the body of the source SV
6265 and inherits its flags; however, the target keeps any magic it owns,
6266 and any magic in the source is discarded.
6267 Note that this is a rather specialist SV copying operation; most of the
6268 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
6269
6270 =cut
6271 */
6272
6273 void
6274 Perl_sv_replace(pTHX_ SV *const sv, SV *const nsv)
6275 {
6276     const U32 refcnt = SvREFCNT(sv);
6277
6278     PERL_ARGS_ASSERT_SV_REPLACE;
6279
6280     SV_CHECK_THINKFIRST_COW_DROP(sv);
6281     if (SvREFCNT(nsv) != 1) {
6282         Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
6283                    " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
6284     }
6285     if (SvMAGICAL(sv)) {
6286         if (SvMAGICAL(nsv))
6287             mg_free(nsv);
6288         else
6289             sv_upgrade(nsv, SVt_PVMG);
6290         SvMAGIC_set(nsv, SvMAGIC(sv));
6291         SvFLAGS(nsv) |= SvMAGICAL(sv);
6292         SvMAGICAL_off(sv);
6293         SvMAGIC_set(sv, NULL);
6294     }
6295     SvREFCNT(sv) = 0;
6296     sv_clear(sv);
6297     assert(!SvREFCNT(sv));
6298 #ifdef DEBUG_LEAKING_SCALARS
6299     sv->sv_flags  = nsv->sv_flags;
6300     sv->sv_any    = nsv->sv_any;
6301     sv->sv_refcnt = nsv->sv_refcnt;
6302     sv->sv_u      = nsv->sv_u;
6303 #else
6304     StructCopy(nsv,sv,SV);
6305 #endif
6306     if(SvTYPE(sv) == SVt_IV) {
6307         SET_SVANY_FOR_BODYLESS_IV(sv);
6308     }
6309         
6310
6311     SvREFCNT(sv) = refcnt;
6312     SvFLAGS(nsv) |= SVTYPEMASK;         /* Mark as freed */
6313     SvREFCNT(nsv) = 0;
6314     del_SV(nsv);
6315 }
6316
6317 /* We're about to free a GV which has a CV that refers back to us.
6318  * If that CV will outlive us, make it anonymous (i.e. fix up its CvGV
6319  * field) */
6320
6321 STATIC void
6322 S_anonymise_cv_maybe(pTHX_ GV *gv, CV* cv)
6323 {
6324     SV *gvname;
6325     GV *anongv;
6326
6327     PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE;
6328
6329     /* be assertive! */
6330     assert(SvREFCNT(gv) == 0);
6331     assert(isGV(gv) && isGV_with_GP(gv));
6332     assert(GvGP(gv));
6333     assert(!CvANON(cv));
6334     assert(CvGV(cv) == gv);
6335     assert(!CvNAMED(cv));
6336
6337     /* will the CV shortly be freed by gp_free() ? */
6338     if (GvCV(gv) == cv && GvGP(gv)->gp_refcnt < 2 && SvREFCNT(cv) < 2) {
6339         SvANY(cv)->xcv_gv_u.xcv_gv = NULL;
6340         return;
6341     }
6342
6343     /* if not, anonymise: */
6344     gvname = (GvSTASH(gv) && HvNAME(GvSTASH(gv)) && HvENAME(GvSTASH(gv)))
6345                     ? newSVhek(HvENAME_HEK(GvSTASH(gv)))
6346                     : newSVpvn_flags( "__ANON__", 8, 0 );
6347     sv_catpvs(gvname, "::__ANON__");
6348     anongv = gv_fetchsv(gvname, GV_ADDMULTI, SVt_PVCV);
6349     SvREFCNT_dec_NN(gvname);
6350
6351     CvANON_on(cv);
6352     CvCVGV_RC_on(cv);
6353     SvANY(cv)->xcv_gv_u.xcv_gv = MUTABLE_GV(SvREFCNT_inc(anongv));
6354 }
6355
6356
6357 /*
6358 =for apidoc sv_clear
6359
6360 Clear an SV: call any destructors, free up any memory used by the body,
6361 and free the body itself.  The SV's head is I<not> freed, although
6362 its type is set to all 1's so that it won't inadvertently be assumed
6363 to be live during global destruction etc.
6364 This function should only be called when REFCNT is zero.  Most of the time
6365 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
6366 instead.
6367
6368 =cut
6369 */
6370
6371 void
6372 Perl_sv_clear(pTHX_ SV *const orig_sv)
6373 {
6374     dVAR;
6375     HV *stash;
6376     U32 type;
6377     const struct body_details *sv_type_details;
6378     SV* iter_sv = NULL;
6379     SV* next_sv = NULL;
6380     SV *sv = orig_sv;
6381     STRLEN hash_index = 0; /* initialise to make Coverity et al happy.
6382                               Not strictly necessary */
6383
6384     PERL_ARGS_ASSERT_SV_CLEAR;
6385
6386     /* within this loop, sv is the SV currently being freed, and
6387      * iter_sv is the most recent AV or whatever that's being iterated
6388      * over to provide more SVs */
6389
6390     while (sv) {
6391
6392         type = SvTYPE(sv);
6393
6394         assert(SvREFCNT(sv) == 0);
6395         assert(SvTYPE(sv) != (svtype)SVTYPEMASK);
6396
6397         if (type <= SVt_IV) {
6398             /* See the comment in sv.h about the collusion between this
6399              * early return and the overloading of the NULL slots in the
6400              * size table.  */
6401             if (SvROK(sv))
6402                 goto free_rv;
6403             SvFLAGS(sv) &= SVf_BREAK;
6404             SvFLAGS(sv) |= SVTYPEMASK;
6405             goto free_head;
6406         }
6407
6408         /* objs are always >= MG, but pad names use the SVs_OBJECT flag
6409            for another purpose  */
6410         assert(!SvOBJECT(sv) || type >= SVt_PVMG);
6411
6412         if (type >= SVt_PVMG) {
6413             if (SvOBJECT(sv)) {
6414                 if (!curse(sv, 1)) goto get_next_sv;
6415                 type = SvTYPE(sv); /* destructor may have changed it */
6416             }
6417             /* Free back-references before magic, in case the magic calls
6418              * Perl code that has weak references to sv. */
6419             if (type == SVt_PVHV) {
6420                 Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
6421                 if (SvMAGIC(sv))
6422                     mg_free(sv);
6423             }
6424             else if (SvMAGIC(sv)) {
6425                 /* Free back-references before other types of magic. */
6426                 sv_unmagic(sv, PERL_MAGIC_backref);
6427                 mg_free(sv);
6428             }
6429             SvMAGICAL_off(sv);
6430         }
6431         switch (type) {
6432             /* case SVt_INVLIST: */
6433         case SVt_PVIO:
6434             if (IoIFP(sv) &&
6435                 IoIFP(sv) != PerlIO_stdin() &&
6436                 IoIFP(sv) != PerlIO_stdout() &&
6437                 IoIFP(sv) != PerlIO_stderr() &&
6438                 !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6439             {
6440                 io_close(MUTABLE_IO(sv), NULL, FALSE,
6441                          (IoTYPE(sv) == IoTYPE_WRONLY ||
6442                           IoTYPE(sv) == IoTYPE_RDWR   ||
6443                           IoTYPE(sv) == IoTYPE_APPEND));
6444             }
6445             if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6446                 PerlDir_close(IoDIRP(sv));
6447             IoDIRP(sv) = (DIR*)NULL;
6448             Safefree(IoTOP_NAME(sv));
6449             Safefree(IoFMT_NAME(sv));
6450             Safefree(IoBOTTOM_NAME(sv));
6451             if ((const GV *)sv == PL_statgv)
6452                 PL_statgv = NULL;
6453             goto freescalar;
6454         case SVt_REGEXP:
6455             /* FIXME for plugins */
6456           freeregexp:
6457             pregfree2((REGEXP*) sv);
6458             goto freescalar;
6459         case SVt_PVCV:
6460         case SVt_PVFM:
6461             cv_undef(MUTABLE_CV(sv));
6462             /* If we're in a stash, we don't own a reference to it.
6463              * However it does have a back reference to us, which needs to
6464              * be cleared.  */
6465             if ((stash = CvSTASH(sv)))
6466                 sv_del_backref(MUTABLE_SV(stash), sv);
6467             goto freescalar;
6468         case SVt_PVHV:
6469             if (PL_last_swash_hv == (const HV *)sv) {
6470                 PL_last_swash_hv = NULL;
6471             }
6472             if (HvTOTALKEYS((HV*)sv) > 0) {
6473                 const HEK *hek;
6474                 /* this statement should match the one at the beginning of
6475                  * hv_undef_flags() */
6476                 if (   PL_phase != PERL_PHASE_DESTRUCT
6477                     && (hek = HvNAME_HEK((HV*)sv)))
6478                 {
6479                     if (PL_stashcache) {
6480                         DEBUG_o(Perl_deb(aTHX_
6481                             "sv_clear clearing PL_stashcache for '%"HEKf
6482                             "'\n",
6483                              HEKfARG(hek)));
6484                         (void)hv_deletehek(PL_stashcache,
6485                                            hek, G_DISCARD);
6486                     }
6487                     hv_name_set((HV*)sv, NULL, 0, 0);
6488                 }
6489
6490                 /* save old iter_sv in unused SvSTASH field */
6491                 assert(!SvOBJECT(sv));
6492                 SvSTASH(sv) = (HV*)iter_sv;
6493                 iter_sv = sv;
6494
6495                 /* save old hash_index in unused SvMAGIC field */
6496                 assert(!SvMAGICAL(sv));
6497                 assert(!SvMAGIC(sv));
6498                 ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index = hash_index;
6499                 hash_index = 0;
6500
6501                 next_sv = Perl_hfree_next_entry(aTHX_ (HV*)sv, &hash_index);
6502                 goto get_next_sv; /* process this new sv */
6503             }
6504             /* free empty hash */
6505             Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6506             assert(!HvARRAY((HV*)sv));
6507             break;
6508         case SVt_PVAV:
6509             {
6510                 AV* av = MUTABLE_AV(sv);
6511                 if (PL_comppad == av) {
6512                     PL_comppad = NULL;
6513                     PL_curpad = NULL;
6514                 }
6515                 if (AvREAL(av) && AvFILLp(av) > -1) {
6516                     next_sv = AvARRAY(av)[AvFILLp(av)--];
6517                     /* save old iter_sv in top-most slot of AV,
6518                      * and pray that it doesn't get wiped in the meantime */
6519                     AvARRAY(av)[AvMAX(av)] = iter_sv;
6520                     iter_sv = sv;
6521                     goto get_next_sv; /* process this new sv */
6522                 }
6523                 Safefree(AvALLOC(av));
6524             }
6525
6526             break;
6527         case SVt_PVLV:
6528             if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
6529                 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
6530                 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
6531                 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
6532             }
6533             else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV**  */
6534                 SvREFCNT_dec(LvTARG(sv));
6535             if (isREGEXP(sv)) goto freeregexp;
6536             /* FALLTHROUGH */
6537         case SVt_PVGV:
6538             if (isGV_with_GP(sv)) {
6539                 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
6540                    && HvENAME_get(stash))
6541                     mro_method_changed_in(stash);
6542                 gp_free(MUTABLE_GV(sv));
6543                 if (GvNAME_HEK(sv))
6544                     unshare_hek(GvNAME_HEK(sv));
6545                 /* If we're in a stash, we don't own a reference to it.
6546                  * However it does have a back reference to us, which
6547                  * needs to be cleared.  */
6548                 if (!SvVALID(sv) && (stash = GvSTASH(sv)))
6549                         sv_del_backref(MUTABLE_SV(stash), sv);
6550             }
6551             /* FIXME. There are probably more unreferenced pointers to SVs
6552              * in the interpreter struct that we should check and tidy in
6553              * a similar fashion to this:  */
6554             /* See also S_sv_unglob, which does the same thing. */
6555             if ((const GV *)sv == PL_last_in_gv)
6556                 PL_last_in_gv = NULL;
6557             else if ((const GV *)sv == PL_statgv)
6558                 PL_statgv = NULL;
6559             else if ((const GV *)sv == PL_stderrgv)
6560                 PL_stderrgv = NULL;
6561             /* FALLTHROUGH */
6562         case SVt_PVMG:
6563         case SVt_PVNV:
6564         case SVt_PVIV:
6565         case SVt_INVLIST:
6566         case SVt_PV:
6567           freescalar:
6568             /* Don't bother with SvOOK_off(sv); as we're only going to
6569              * free it.  */
6570             if (SvOOK(sv)) {
6571                 STRLEN offset;
6572                 SvOOK_offset(sv, offset);
6573                 SvPV_set(sv, SvPVX_mutable(sv) - offset);
6574                 /* Don't even bother with turning off the OOK flag.  */
6575             }
6576             if (SvROK(sv)) {
6577             free_rv:
6578                 {
6579                     SV * const target = SvRV(sv);
6580                     if (SvWEAKREF(sv))
6581                         sv_del_backref(target, sv);
6582                     else
6583                         next_sv = target;
6584                 }
6585             }
6586 #ifdef PERL_ANY_COW
6587             else if (SvPVX_const(sv)
6588                      && !(SvTYPE(sv) == SVt_PVIO
6589                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6590             {
6591                 if (SvIsCOW(sv)) {
6592                     if (DEBUG_C_TEST) {
6593                         PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
6594                         sv_dump(sv);
6595                     }
6596                     if (SvLEN(sv)) {
6597                         if (CowREFCNT(sv)) {
6598                             sv_buf_to_rw(sv);
6599                             CowREFCNT(sv)--;
6600                             sv_buf_to_ro(sv);
6601                             SvLEN_set(sv, 0);
6602                         }
6603                     } else {
6604                         unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6605                     }
6606
6607                 }
6608                 if (SvLEN(sv)) {
6609                     Safefree(SvPVX_mutable(sv));
6610                 }
6611             }
6612 #else
6613             else if (SvPVX_const(sv) && SvLEN(sv)
6614                      && !(SvTYPE(sv) == SVt_PVIO
6615                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6616                 Safefree(SvPVX_mutable(sv));
6617             else if (SvPVX_const(sv) && SvIsCOW(sv)) {
6618                 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6619             }
6620 #endif
6621             break;
6622         case SVt_NV:
6623             break;
6624         }
6625
6626       free_body:
6627
6628         SvFLAGS(sv) &= SVf_BREAK;
6629         SvFLAGS(sv) |= SVTYPEMASK;
6630
6631         sv_type_details = bodies_by_type + type;
6632         if (sv_type_details->arena) {
6633             del_body(((char *)SvANY(sv) + sv_type_details->offset),
6634                      &PL_body_roots[type]);
6635         }
6636         else if (sv_type_details->body_size) {
6637             safefree(SvANY(sv));
6638         }
6639
6640       free_head:
6641         /* caller is responsible for freeing the head of the original sv */
6642         if (sv != orig_sv && !SvREFCNT(sv))
6643             del_SV(sv);
6644
6645         /* grab and free next sv, if any */
6646       get_next_sv:
6647         while (1) {
6648             sv = NULL;
6649             if (next_sv) {
6650                 sv = next_sv;
6651                 next_sv = NULL;
6652             }
6653             else if (!iter_sv) {
6654                 break;
6655             } else if (SvTYPE(iter_sv) == SVt_PVAV) {
6656                 AV *const av = (AV*)iter_sv;
6657                 if (AvFILLp(av) > -1) {
6658                     sv = AvARRAY(av)[AvFILLp(av)--];
6659                 }
6660                 else { /* no more elements of current AV to free */
6661                     sv = iter_sv;
6662                     type = SvTYPE(sv);
6663                     /* restore previous value, squirrelled away */
6664                     iter_sv = AvARRAY(av)[AvMAX(av)];
6665                     Safefree(AvALLOC(av));
6666                     goto free_body;
6667                 }
6668             } else if (SvTYPE(iter_sv) == SVt_PVHV) {
6669                 sv = Perl_hfree_next_entry(aTHX_ (HV*)iter_sv, &hash_index);
6670                 if (!sv && !HvTOTALKEYS((HV *)iter_sv)) {
6671                     /* no more elements of current HV to free */
6672                     sv = iter_sv;
6673                     type = SvTYPE(sv);
6674                     /* Restore previous values of iter_sv and hash_index,
6675                      * squirrelled away */
6676                     assert(!SvOBJECT(sv));
6677                     iter_sv = (SV*)SvSTASH(sv);
6678                     assert(!SvMAGICAL(sv));
6679                     hash_index = ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index;
6680 #ifdef DEBUGGING
6681                     /* perl -DA does not like rubbish in SvMAGIC. */
6682                     SvMAGIC_set(sv, 0);
6683 #endif
6684
6685                     /* free any remaining detritus from the hash struct */
6686                     Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6687                     assert(!HvARRAY((HV*)sv));
6688                     goto free_body;
6689                 }
6690             }
6691
6692             /* unrolled SvREFCNT_dec and sv_free2 follows: */
6693
6694             if (!sv)
6695                 continue;
6696             if (!SvREFCNT(sv)) {
6697                 sv_free(sv);
6698                 continue;
6699             }
6700             if (--(SvREFCNT(sv)))
6701                 continue;
6702 #ifdef DEBUGGING
6703             if (SvTEMP(sv)) {
6704                 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6705                          "Attempt to free temp prematurely: SV 0x%"UVxf
6706                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6707                 continue;
6708             }
6709 #endif
6710             if (SvIMMORTAL(sv)) {
6711                 /* make sure SvREFCNT(sv)==0 happens very seldom */
6712                 SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6713                 continue;
6714             }
6715             break;
6716         } /* while 1 */
6717
6718     } /* while sv */
6719 }
6720
6721 /* This routine curses the sv itself, not the object referenced by sv. So
6722    sv does not have to be ROK. */
6723
6724 static bool
6725 S_curse(pTHX_ SV * const sv, const bool check_refcnt) {
6726     PERL_ARGS_ASSERT_CURSE;
6727     assert(SvOBJECT(sv));
6728
6729     if (PL_defstash &&  /* Still have a symbol table? */
6730         SvDESTROYABLE(sv))
6731     {
6732         dSP;
6733         HV* stash;
6734         do {
6735           stash = SvSTASH(sv);
6736           assert(SvTYPE(stash) == SVt_PVHV);
6737           if (HvNAME(stash)) {
6738             CV* destructor = NULL;
6739             assert (SvOOK(stash));
6740             if (!SvOBJECT(stash)) destructor = (CV *)SvSTASH(stash);
6741             if (!destructor || HvMROMETA(stash)->destroy_gen
6742                                 != PL_sub_generation)
6743             {
6744                 GV * const gv =
6745                     gv_fetchmeth_autoload(stash, "DESTROY", 7, 0);
6746                 if (gv) destructor = GvCV(gv);
6747                 if (!SvOBJECT(stash))
6748                 {
6749                     SvSTASH(stash) =
6750                         destructor ? (HV *)destructor : ((HV *)0)+1;
6751                     HvAUX(stash)->xhv_mro_meta->destroy_gen =
6752                         PL_sub_generation;
6753                 }
6754             }
6755             assert(!destructor || destructor == ((CV *)0)+1
6756                 || SvTYPE(destructor) == SVt_PVCV);
6757             if (destructor && destructor != ((CV *)0)+1
6758                 /* A constant subroutine can have no side effects, so
6759                    don't bother calling it.  */
6760                 && !CvCONST(destructor)
6761                 /* Don't bother calling an empty destructor or one that
6762                    returns immediately. */
6763                 && (CvISXSUB(destructor)
6764                 || (CvSTART(destructor)
6765                     && (CvSTART(destructor)->op_next->op_type
6766                                         != OP_LEAVESUB)
6767                     && (CvSTART(destructor)->op_next->op_type
6768                                         != OP_PUSHMARK
6769                         || CvSTART(destructor)->op_next->op_next->op_type
6770                                         != OP_RETURN
6771                        )
6772                    ))
6773                )
6774             {
6775                 SV* const tmpref = newRV(sv);
6776                 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
6777                 ENTER;
6778                 PUSHSTACKi(PERLSI_DESTROY);
6779                 EXTEND(SP, 2);
6780                 PUSHMARK(SP);
6781                 PUSHs(tmpref);
6782                 PUTBACK;
6783                 call_sv(MUTABLE_SV(destructor),
6784                             G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
6785                 POPSTACK;
6786                 SPAGAIN;
6787                 LEAVE;
6788                 if(SvREFCNT(tmpref) < 2) {
6789                     /* tmpref is not kept alive! */
6790                     SvREFCNT(sv)--;
6791                     SvRV_set(tmpref, NULL);
6792                     SvROK_off(tmpref);
6793                 }
6794                 SvREFCNT_dec_NN(tmpref);
6795             }
6796           }
6797         } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
6798
6799
6800         if (check_refcnt && SvREFCNT(sv)) {
6801             if (PL_in_clean_objs)
6802                 Perl_croak(aTHX_
6803                   "DESTROY created new reference to dead object '%"HEKf"'",
6804                    HEKfARG(HvNAME_HEK(stash)));
6805             /* DESTROY gave object new lease on life */
6806             return FALSE;
6807         }
6808     }
6809
6810     if (SvOBJECT(sv)) {
6811         HV * const stash = SvSTASH(sv);
6812         /* Curse before freeing the stash, as freeing the stash could cause
6813            a recursive call into S_curse. */
6814         SvOBJECT_off(sv);       /* Curse the object. */
6815         SvSTASH_set(sv,0);      /* SvREFCNT_dec may try to read this */
6816         SvREFCNT_dec(stash); /* possibly of changed persuasion */
6817     }
6818     return TRUE;
6819 }
6820
6821 /*
6822 =for apidoc sv_newref
6823
6824 Increment an SV's reference count.  Use the C<SvREFCNT_inc()> wrapper
6825 instead.
6826
6827 =cut
6828 */
6829
6830 SV *
6831 Perl_sv_newref(pTHX_ SV *const sv)
6832 {
6833     PERL_UNUSED_CONTEXT;
6834     if (sv)
6835         (SvREFCNT(sv))++;
6836     return sv;
6837 }
6838
6839 /*
6840 =for apidoc sv_free
6841
6842 Decrement an SV's reference count, and if it drops to zero, call
6843 C<sv_clear> to invoke destructors and free up any memory used by
6844 the body; finally, deallocate the SV's head itself.
6845 Normally called via a wrapper macro C<SvREFCNT_dec>.
6846
6847 =cut
6848 */
6849
6850 void
6851 Perl_sv_free(pTHX_ SV *const sv)
6852 {
6853     SvREFCNT_dec(sv);
6854 }
6855
6856
6857 /* Private helper function for SvREFCNT_dec().
6858  * Called with rc set to original SvREFCNT(sv), where rc == 0 or 1 */
6859
6860 void
6861 Perl_sv_free2(pTHX_ SV *const sv, const U32 rc)
6862 {
6863     dVAR;
6864
6865     PERL_ARGS_ASSERT_SV_FREE2;
6866
6867     if (LIKELY( rc == 1 )) {
6868         /* normal case */
6869         SvREFCNT(sv) = 0;
6870
6871 #ifdef DEBUGGING
6872         if (SvTEMP(sv)) {
6873             Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6874                              "Attempt to free temp prematurely: SV 0x%"UVxf
6875                              pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6876             return;
6877         }
6878 #endif
6879         if (SvIMMORTAL(sv)) {
6880             /* make sure SvREFCNT(sv)==0 happens very seldom */
6881             SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6882             return;
6883         }
6884         sv_clear(sv);
6885         if (! SvREFCNT(sv)) /* may have have been resurrected */
6886             del_SV(sv);
6887         return;
6888     }
6889
6890     /* handle exceptional cases */
6891
6892     assert(rc == 0);
6893
6894     if (SvFLAGS(sv) & SVf_BREAK)
6895         /* this SV's refcnt has been artificially decremented to
6896          * trigger cleanup */
6897         return;
6898     if (PL_in_clean_all) /* All is fair */
6899         return;
6900     if (SvIMMORTAL(sv)) {
6901         /* make sure SvREFCNT(sv)==0 happens very seldom */
6902         SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6903         return;
6904     }
6905     if (ckWARN_d(WARN_INTERNAL)) {
6906 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
6907         Perl_dump_sv_child(aTHX_ sv);
6908 #else
6909     #ifdef DEBUG_LEAKING_SCALARS
6910         sv_dump(sv);
6911     #endif
6912 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6913         if (PL_warnhook == PERL_WARNHOOK_FATAL
6914             || ckDEAD(packWARN(WARN_INTERNAL))) {
6915             /* Don't let Perl_warner cause us to escape our fate:  */
6916             abort();
6917         }
6918 #endif
6919         /* This may not return:  */
6920         Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
6921                     "Attempt to free unreferenced scalar: SV 0x%"UVxf
6922                     pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6923 #endif
6924     }
6925 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6926     abort();
6927 #endif
6928
6929 }
6930
6931
6932 /*
6933 =for apidoc sv_len
6934
6935 Returns the length of the string in the SV.  Handles magic and type
6936 coercion and sets the UTF8 flag appropriately.  See also C<SvCUR>, which
6937 gives raw access to the xpv_cur slot.
6938
6939 =cut
6940 */
6941
6942 STRLEN
6943 Perl_sv_len(pTHX_ SV *const sv)
6944 {
6945     STRLEN len;
6946
6947     if (!sv)
6948         return 0;
6949
6950     (void)SvPV_const(sv, len);
6951     return len;
6952 }
6953
6954 /*
6955 =for apidoc sv_len_utf8
6956
6957 Returns the number of characters in the string in an SV, counting wide
6958 UTF-8 bytes as a single character.  Handles magic and type coercion.
6959
6960 =cut
6961 */
6962
6963 /*
6964  * The length is cached in PERL_MAGIC_utf8, in the mg_len field.  Also the
6965  * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
6966  * (Note that the mg_len is not the length of the mg_ptr field.
6967  * This allows the cache to store the character length of the string without
6968  * needing to malloc() extra storage to attach to the mg_ptr.)
6969  *
6970  */
6971
6972 STRLEN
6973 Perl_sv_len_utf8(pTHX_ SV *const sv)
6974 {
6975     if (!sv)
6976         return 0;
6977
6978     SvGETMAGIC(sv);
6979     return sv_len_utf8_nomg(sv);
6980 }
6981
6982 STRLEN
6983 Perl_sv_len_utf8_nomg(pTHX_ SV * const sv)
6984 {
6985     STRLEN len;
6986     const U8 *s = (U8*)SvPV_nomg_const(sv, len);
6987
6988     PERL_ARGS_ASSERT_SV_LEN_UTF8_NOMG;
6989
6990     if (PL_utf8cache && SvUTF8(sv)) {
6991             STRLEN ulen;
6992             MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
6993
6994             if (mg && (mg->mg_len != -1 || mg->mg_ptr)) {
6995                 if (mg->mg_len != -1)
6996                     ulen = mg->mg_len;
6997                 else {
6998                     /* We can use the offset cache for a headstart.
6999                        The longer value is stored in the first pair.  */
7000                     STRLEN *cache = (STRLEN *) mg->mg_ptr;
7001
7002                     ulen = cache[0] + Perl_utf8_length(aTHX_ s + cache[1],
7003                                                        s + len);
7004                 }
7005                 
7006                 if (PL_utf8cache < 0) {
7007                     const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
7008                     assert_uft8_cache_coherent("sv_len_utf8", ulen, real, sv);
7009                 }
7010             }
7011             else {
7012                 ulen = Perl_utf8_length(aTHX_ s, s + len);
7013                 utf8_mg_len_cache_update(sv, &mg, ulen);
7014             }
7015             return ulen;
7016     }
7017     return SvUTF8(sv) ? Perl_utf8_length(aTHX_ s, s + len) : len;
7018 }
7019
7020 /* Walk forwards to find the byte corresponding to the passed in UTF-8
7021    offset.  */
7022 static STRLEN
7023 S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
7024                       STRLEN *const uoffset_p, bool *const at_end)
7025 {
7026     const U8 *s = start;
7027     STRLEN uoffset = *uoffset_p;
7028
7029     PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
7030
7031     while (s < send && uoffset) {
7032         --uoffset;
7033         s += UTF8SKIP(s);
7034     }
7035     if (s == send) {
7036         *at_end = TRUE;
7037     }
7038     else if (s > send) {
7039         *at_end = TRUE;
7040         /* This is the existing behaviour. Possibly it should be a croak, as
7041            it's actually a bounds error  */
7042         s = send;
7043     }
7044     *uoffset_p -= uoffset;
7045     return s - start;
7046 }
7047
7048 /* Given the length of the string in both bytes and UTF-8 characters, decide
7049    whether to walk forwards or backwards to find the byte corresponding to
7050    the passed in UTF-8 offset.  */
7051 static STRLEN
7052 S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
7053                     STRLEN uoffset, const STRLEN uend)
7054 {
7055     STRLEN backw = uend - uoffset;
7056
7057     PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
7058
7059     if (uoffset < 2 * backw) {
7060         /* The assumption is that going forwards is twice the speed of going
7061            forward (that's where the 2 * backw comes from).
7062            (The real figure of course depends on the UTF-8 data.)  */
7063         const U8 *s = start;
7064
7065         while (s < send && uoffset--)
7066             s += UTF8SKIP(s);
7067         assert (s <= send);
7068         if (s > send)
7069             s = send;
7070         return s - start;
7071     }
7072
7073     while (backw--) {
7074         send--;
7075         while (UTF8_IS_CONTINUATION(*send))
7076             send--;
7077     }
7078     return send - start;
7079 }
7080
7081 /* For the string representation of the given scalar, find the byte
7082    corresponding to the passed in UTF-8 offset.  uoffset0 and boffset0
7083    give another position in the string, *before* the sought offset, which
7084    (which is always true, as 0, 0 is a valid pair of positions), which should
7085    help reduce the amount of linear searching.
7086    If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
7087    will be used to reduce the amount of linear searching. The cache will be
7088    created if necessary, and the found value offered to it for update.  */
7089 static STRLEN
7090 S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
7091                     const U8 *const send, STRLEN uoffset,
7092                     STRLEN uoffset0, STRLEN boffset0)
7093 {
7094     STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy.  */
7095     bool found = FALSE;
7096     bool at_end = FALSE;
7097
7098     PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
7099
7100     assert (uoffset >= uoffset0);
7101
7102     if (!uoffset)
7103         return 0;
7104
7105     if (!SvREADONLY(sv) && !SvGMAGICAL(sv) && SvPOK(sv)
7106         && PL_utf8cache
7107         && (*mgp || (SvTYPE(sv) >= SVt_PVMG &&
7108                      (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) {
7109         if ((*mgp)->mg_ptr) {
7110             STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
7111             if (cache[0] == uoffset) {
7112                 /* An exact match. */
7113                 return cache[1];
7114             }
7115             if (cache[2] == uoffset) {
7116                 /* An exact match. */
7117                 return cache[3];
7118             }
7119
7120             if (cache[0] < uoffset) {
7121                 /* The cache already knows part of the way.   */
7122                 if (cache[0] > uoffset0) {
7123                     /* The cache knows more than the passed in pair  */
7124                     uoffset0 = cache[0];
7125                     boffset0 = cache[1];
7126                 }
7127                 if ((*mgp)->mg_len != -1) {
7128                     /* And we know the end too.  */
7129                     boffset = boffset0
7130                         + sv_pos_u2b_midway(start + boffset0, send,
7131                                               uoffset - uoffset0,
7132                                               (*mgp)->mg_len - uoffset0);
7133                 } else {
7134                     uoffset -= uoffset0;
7135                     boffset = boffset0
7136                         + sv_pos_u2b_forwards(start + boffset0,
7137                                               send, &uoffset, &at_end);
7138                     uoffset += uoffset0;
7139                 }
7140             }
7141             else if (cache[2] < uoffset) {
7142                 /* We're between the two cache entries.  */
7143                 if (cache[2] > uoffset0) {
7144                     /* and the cache knows more than the passed in pair  */
7145                     uoffset0 = cache[2];
7146                     boffset0 = cache[3];
7147                 }
7148
7149                 boffset = boffset0
7150                     + sv_pos_u2b_midway(start + boffset0,
7151                                           start + cache[1],
7152                                           uoffset - uoffset0,
7153                                           cache[0] - uoffset0);
7154             } else {
7155                 boffset = boffset0
7156                     + sv_pos_u2b_midway(start + boffset0,
7157                                           start + cache[3],
7158                                           uoffset - uoffset0,
7159                                           cache[2] - uoffset0);
7160             }
7161             found = TRUE;
7162         }
7163         else if ((*mgp)->mg_len != -1) {
7164             /* If we can take advantage of a passed in offset, do so.  */
7165             /* In fact, offset0 is either 0, or less than offset, so don't
7166                need to worry about the other possibility.  */
7167             boffset = boffset0
7168                 + sv_pos_u2b_midway(start + boffset0, send,
7169                                       uoffset - uoffset0,
7170                                       (*mgp)->mg_len - uoffset0);
7171             found = TRUE;
7172         }
7173     }
7174
7175     if (!found || PL_utf8cache < 0) {
7176         STRLEN real_boffset;
7177         uoffset -= uoffset0;
7178         real_boffset = boffset0 + sv_pos_u2b_forwards(start + boffset0,
7179                                                       send, &uoffset, &at_end);
7180         uoffset += uoffset0;
7181
7182         if (found && PL_utf8cache < 0)
7183             assert_uft8_cache_coherent("sv_pos_u2b_cache", boffset,
7184                                        real_boffset, sv);
7185         boffset = real_boffset;
7186     }
7187
7188     if (PL_utf8cache && !SvGMAGICAL(sv) && SvPOK(sv)) {
7189         if (at_end)
7190             utf8_mg_len_cache_update(sv, mgp, uoffset);
7191         else
7192             utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
7193     }
7194     return boffset;
7195 }
7196
7197
7198 /*
7199 =for apidoc sv_pos_u2b_flags
7200
7201 Converts the offset from a count of UTF-8 chars from
7202 the start of the string, to a count of the equivalent number of bytes; if
7203 lenp is non-zero, it does the same to lenp, but this time starting from
7204 the offset, rather than from the start
7205 of the string.  Handles type coercion.
7206 I<flags> is passed to C<SvPV_flags>, and usually should be
7207 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7208
7209 =cut
7210 */
7211
7212 /*
7213  * sv_pos_u2b_flags() uses, like sv_pos_b2u(), the mg_ptr of the potential
7214  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7215  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7216  *
7217  */
7218
7219 STRLEN
7220 Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp,
7221                       U32 flags)
7222 {
7223     const U8 *start;
7224     STRLEN len;
7225     STRLEN boffset;
7226
7227     PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS;
7228
7229     start = (U8*)SvPV_flags(sv, len, flags);
7230     if (len) {
7231         const U8 * const send = start + len;
7232         MAGIC *mg = NULL;
7233         boffset = sv_pos_u2b_cached(sv, &mg, start, send, uoffset, 0, 0);
7234
7235         if (lenp
7236             && *lenp /* don't bother doing work for 0, as its bytes equivalent
7237                         is 0, and *lenp is already set to that.  */) {
7238             /* Convert the relative offset to absolute.  */
7239             const STRLEN uoffset2 = uoffset + *lenp;
7240             const STRLEN boffset2
7241                 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
7242                                       uoffset, boffset) - boffset;
7243
7244             *lenp = boffset2;
7245         }
7246     } else {
7247         if (lenp)
7248             *lenp = 0;
7249         boffset = 0;
7250     }
7251
7252     return boffset;
7253 }
7254
7255 /*
7256 =for apidoc sv_pos_u2b
7257
7258 Converts the value pointed to by offsetp from a count of UTF-8 chars from
7259 the start of the string, to a count of the equivalent number of bytes; if
7260 lenp is non-zero, it does the same to lenp, but this time starting from
7261 the offset, rather than from the start of the string.  Handles magic and
7262 type coercion.
7263
7264 Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
7265 than 2Gb.
7266
7267 =cut
7268 */
7269
7270 /*
7271  * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
7272  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7273  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7274  *
7275  */
7276
7277 /* This function is subject to size and sign problems */
7278
7279 void
7280 Perl_sv_pos_u2b(pTHX_ SV *const sv, I32 *const offsetp, I32 *const lenp)
7281 {
7282     PERL_ARGS_ASSERT_SV_POS_U2B;
7283
7284     if (lenp) {
7285         STRLEN ulen = (STRLEN)*lenp;
7286         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, &ulen,
7287                                          SV_GMAGIC|SV_CONST_RETURN);
7288         *lenp = (I32)ulen;
7289     } else {
7290         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, NULL,
7291                                          SV_GMAGIC|SV_CONST_RETURN);
7292     }
7293 }
7294
7295 static void
7296 S_utf8_mg_len_cache_update(pTHX_ SV *const sv, MAGIC **const mgp,
7297                            const STRLEN ulen)
7298 {
7299     PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE;
7300     if (SvREADONLY(sv) || SvGMAGICAL(sv) || !SvPOK(sv))
7301         return;
7302
7303     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7304                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7305         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, &PL_vtbl_utf8, 0, 0);
7306     }
7307     assert(*mgp);
7308
7309     (*mgp)->mg_len = ulen;
7310 }
7311
7312 /* Create and update the UTF8 magic offset cache, with the proffered utf8/
7313    byte length pairing. The (byte) length of the total SV is passed in too,
7314    as blen, because for some (more esoteric) SVs, the call to SvPV_const()
7315    may not have updated SvCUR, so we can't rely on reading it directly.
7316
7317    The proffered utf8/byte length pairing isn't used if the cache already has
7318    two pairs, and swapping either for the proffered pair would increase the
7319    RMS of the intervals between known byte offsets.
7320
7321    The cache itself consists of 4 STRLEN values
7322    0: larger UTF-8 offset
7323    1: corresponding byte offset
7324    2: smaller UTF-8 offset
7325    3: corresponding byte offset
7326
7327    Unused cache pairs have the value 0, 0.
7328    Keeping the cache "backwards" means that the invariant of
7329    cache[0] >= cache[2] is maintained even with empty slots, which means that
7330    the code that uses it doesn't need to worry if only 1 entry has actually
7331    been set to non-zero.  It also makes the "position beyond the end of the
7332    cache" logic much simpler, as the first slot is always the one to start
7333    from.   
7334 */
7335 static void
7336 S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
7337                            const STRLEN utf8, const STRLEN blen)
7338 {
7339     STRLEN *cache;
7340
7341     PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
7342
7343     if (SvREADONLY(sv))
7344         return;
7345
7346     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7347                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7348         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
7349                            0);
7350         (*mgp)->mg_len = -1;
7351     }
7352     assert(*mgp);
7353
7354     if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
7355         Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
7356         (*mgp)->mg_ptr = (char *) cache;
7357     }
7358     assert(cache);
7359
7360     if (PL_utf8cache < 0 && SvPOKp(sv)) {
7361         /* SvPOKp() because, if sv is a reference, then SvPVX() is actually
7362            a pointer.  Note that we no longer cache utf8 offsets on refer-
7363            ences, but this check is still a good idea, for robustness.  */
7364         const U8 *start = (const U8 *) SvPVX_const(sv);
7365         const STRLEN realutf8 = utf8_length(start, start + byte);
7366
7367         assert_uft8_cache_coherent("utf8_mg_pos_cache_update", utf8, realutf8,
7368                                    sv);
7369     }
7370
7371     /* Cache is held with the later position first, to simplify the code
7372        that deals with unbounded ends.  */
7373        
7374     ASSERT_UTF8_CACHE(cache);
7375     if (cache[1] == 0) {
7376         /* Cache is totally empty  */
7377         cache[0] = utf8;
7378         cache[1] = byte;
7379     } else if (cache[3] == 0) {
7380         if (byte > cache[1]) {
7381             /* New one is larger, so goes first.  */
7382             cache[2] = cache[0];
7383             cache[3] = cache[1];
7384             cache[0] = utf8;
7385             cache[1] = byte;
7386         } else {
7387             cache[2] = utf8;
7388             cache[3] = byte;
7389         }
7390     } else {
7391 /* float casts necessary? XXX */
7392 #define THREEWAY_SQUARE(a,b,c,d) \
7393             ((float)((d) - (c))) * ((float)((d) - (c))) \
7394             + ((float)((c) - (b))) * ((float)((c) - (b))) \
7395                + ((float)((b) - (a))) * ((float)((b) - (a)))
7396
7397         /* Cache has 2 slots in use, and we know three potential pairs.
7398            Keep the two that give the lowest RMS distance. Do the
7399            calculation in bytes simply because we always know the byte
7400            length.  squareroot has the same ordering as the positive value,
7401            so don't bother with the actual square root.  */
7402         if (byte > cache[1]) {
7403             /* New position is after the existing pair of pairs.  */
7404             const float keep_earlier
7405                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
7406             const float keep_later
7407                 = THREEWAY_SQUARE(0, cache[1], byte, blen);
7408
7409             if (keep_later < keep_earlier) {
7410                 cache[2] = cache[0];
7411                 cache[3] = cache[1];
7412             }
7413             cache[0] = utf8;
7414             cache[1] = byte;
7415         }
7416         else {
7417             const float keep_later = THREEWAY_SQUARE(0, byte, cache[1], blen);
7418             float b, c, keep_earlier;
7419             if (byte > cache[3]) {
7420                 /* New position is between the existing pair of pairs.  */
7421                 b = (float)cache[3];
7422                 c = (float)byte;
7423             } else {
7424                 /* New position is before the existing pair of pairs.  */
7425                 b = (float)byte;
7426                 c = (float)cache[3];
7427             }
7428             keep_earlier = THREEWAY_SQUARE(0, b, c, blen);
7429             if (byte > cache[3]) {
7430                 if (keep_later < keep_earlier) {
7431                     cache[2] = utf8;
7432                     cache[3] = byte;
7433                 }
7434                 else {
7435                     cache[0] = utf8;
7436                     cache[1] = byte;
7437                 }
7438             }
7439             else {
7440                 if (! (keep_later < keep_earlier)) {
7441                     cache[0] = cache[2];
7442                     cache[1] = cache[3];
7443                 }
7444                 cache[2] = utf8;
7445                 cache[3] = byte;
7446             }
7447         }
7448     }
7449     ASSERT_UTF8_CACHE(cache);
7450 }
7451
7452 /* We already know all of the way, now we may be able to walk back.  The same
7453    assumption is made as in S_sv_pos_u2b_midway(), namely that walking
7454    backward is half the speed of walking forward. */
7455 static STRLEN
7456 S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
7457                     const U8 *end, STRLEN endu)
7458 {
7459     const STRLEN forw = target - s;
7460     STRLEN backw = end - target;
7461
7462     PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
7463
7464     if (forw < 2 * backw) {
7465         return utf8_length(s, target);
7466     }
7467
7468     while (end > target) {
7469         end--;
7470         while (UTF8_IS_CONTINUATION(*end)) {
7471             end--;
7472         }
7473         endu--;
7474     }
7475     return endu;
7476 }
7477
7478 /*
7479 =for apidoc sv_pos_b2u_flags
7480
7481 Converts the offset from a count of bytes from the start of the string, to
7482 a count of the equivalent number of UTF-8 chars.  Handles type coercion.
7483 I<flags> is passed to C<SvPV_flags>, and usually should be
7484 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7485
7486 =cut
7487 */
7488
7489 /*
7490  * sv_pos_b2u_flags() uses, like sv_pos_u2b_flags(), the mg_ptr of the
7491  * potential PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8
7492  * and byte offsets.
7493  *
7494  */
7495 STRLEN
7496 Perl_sv_pos_b2u_flags(pTHX_ SV *const sv, STRLEN const offset, U32 flags)
7497 {
7498     const U8* s;
7499     STRLEN len = 0; /* Actually always set, but let's keep gcc happy.  */
7500     STRLEN blen;
7501     MAGIC* mg = NULL;
7502     const U8* send;
7503     bool found = FALSE;
7504
7505     PERL_ARGS_ASSERT_SV_POS_B2U_FLAGS;
7506
7507     s = (const U8*)SvPV_flags(sv, blen, flags);
7508
7509     if (blen < offset)
7510         Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset, blen=%"UVuf
7511                    ", byte=%"UVuf, (UV)blen, (UV)offset);
7512
7513     send = s + offset;
7514
7515     if (!SvREADONLY(sv)
7516         && PL_utf8cache
7517         && SvTYPE(sv) >= SVt_PVMG
7518         && (mg = mg_find(sv, PERL_MAGIC_utf8)))
7519     {
7520         if (mg->mg_ptr) {
7521             STRLEN * const cache = (STRLEN *) mg->mg_ptr;
7522             if (cache[1] == offset) {
7523                 /* An exact match. */
7524                 return cache[0];
7525             }
7526             if (cache[3] == offset) {
7527                 /* An exact match. */
7528                 return cache[2];
7529             }
7530
7531             if (cache[1] < offset) {
7532                 /* We already know part of the way. */
7533                 if (mg->mg_len != -1) {
7534                     /* Actually, we know the end too.  */
7535                     len = cache[0]
7536                         + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
7537                                               s + blen, mg->mg_len - cache[0]);
7538                 } else {
7539                     len = cache[0] + utf8_length(s + cache[1], send);
7540                 }
7541             }
7542             else if (cache[3] < offset) {
7543                 /* We're between the two cached pairs, so we do the calculation
7544                    offset by the byte/utf-8 positions for the earlier pair,
7545                    then add the utf-8 characters from the string start to
7546                    there.  */
7547                 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
7548                                           s + cache[1], cache[0] - cache[2])
7549                     + cache[2];
7550
7551             }
7552             else { /* cache[3] > offset */
7553                 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
7554                                           cache[2]);
7555
7556             }
7557             ASSERT_UTF8_CACHE(cache);
7558             found = TRUE;
7559         } else if (mg->mg_len != -1) {
7560             len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
7561             found = TRUE;
7562         }
7563     }
7564     if (!found || PL_utf8cache < 0) {
7565         const STRLEN real_len = utf8_length(s, send);
7566
7567         if (found && PL_utf8cache < 0)
7568             assert_uft8_cache_coherent("sv_pos_b2u", len, real_len, sv);
7569         len = real_len;
7570     }
7571
7572     if (PL_utf8cache) {
7573         if (blen == offset)
7574             utf8_mg_len_cache_update(sv, &mg, len);
7575         else
7576             utf8_mg_pos_cache_update(sv, &mg, offset, len, blen);
7577     }
7578
7579     return len;
7580 }
7581
7582 /*
7583 =for apidoc sv_pos_b2u
7584
7585 Converts the value pointed to by offsetp from a count of bytes from the
7586 start of the string, to a count of the equivalent number of UTF-8 chars.
7587 Handles magic and type coercion.
7588
7589 Use C<sv_pos_b2u_flags> in preference, which correctly handles strings
7590 longer than 2Gb.
7591
7592 =cut
7593 */
7594
7595 /*
7596  * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
7597  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7598  * byte offsets.
7599  *
7600  */
7601 void
7602 Perl_sv_pos_b2u(pTHX_ SV *const sv, I32 *const offsetp)
7603 {
7604     PERL_ARGS_ASSERT_SV_POS_B2U;
7605
7606     if (!sv)
7607         return;
7608
7609     *offsetp = (I32)sv_pos_b2u_flags(sv, (STRLEN)*offsetp,
7610                                      SV_GMAGIC|SV_CONST_RETURN);
7611 }
7612
7613 static void
7614 S_assert_uft8_cache_coherent(pTHX_ const char *const func, STRLEN from_cache,
7615                              STRLEN real, SV *const sv)
7616 {
7617     PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT;
7618
7619     /* As this is debugging only code, save space by keeping this test here,
7620        rather than inlining it in all the callers.  */
7621     if (from_cache == real)
7622         return;
7623
7624     /* Need to turn the assertions off otherwise we may recurse infinitely
7625        while printing error messages.  */
7626     SAVEI8(PL_utf8cache);
7627     PL_utf8cache = 0;
7628     Perl_croak(aTHX_ "panic: %s cache %"UVuf" real %"UVuf" for %"SVf,
7629                func, (UV) from_cache, (UV) real, SVfARG(sv));
7630 }
7631
7632 /*
7633 =for apidoc sv_eq
7634
7635 Returns a boolean indicating whether the strings in the two SVs are
7636 identical.  Is UTF-8 and 'use bytes' aware, handles get magic, and will
7637 coerce its args to strings if necessary.
7638
7639 =for apidoc sv_eq_flags
7640
7641 Returns a boolean indicating whether the strings in the two SVs are
7642 identical.  Is UTF-8 and 'use bytes' aware and coerces its args to strings
7643 if necessary.  If the flags include SV_GMAGIC, it handles get-magic, too.
7644
7645 =cut
7646 */
7647
7648 I32
7649 Perl_sv_eq_flags(pTHX_ SV *sv1, SV *sv2, const U32 flags)
7650 {
7651     const char *pv1;
7652     STRLEN cur1;
7653     const char *pv2;
7654     STRLEN cur2;
7655     I32  eq     = 0;
7656     SV* svrecode = NULL;
7657
7658     if (!sv1) {
7659         pv1 = "";
7660         cur1 = 0;
7661     }
7662     else {
7663         /* if pv1 and pv2 are the same, second SvPV_const call may
7664          * invalidate pv1 (if we are handling magic), so we may need to
7665          * make a copy */
7666         if (sv1 == sv2 && flags & SV_GMAGIC
7667          && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
7668             pv1 = SvPV_const(sv1, cur1);
7669             sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
7670         }
7671         pv1 = SvPV_flags_const(sv1, cur1, flags);
7672     }
7673
7674     if (!sv2){
7675         pv2 = "";
7676         cur2 = 0;
7677     }
7678     else
7679         pv2 = SvPV_flags_const(sv2, cur2, flags);
7680
7681     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7682         /* Differing utf8ness.
7683          * Do not UTF8size the comparands as a side-effect. */
7684          if (IN_ENCODING) {
7685               if (SvUTF8(sv1)) {
7686                    svrecode = newSVpvn(pv2, cur2);
7687                    sv_recode_to_utf8(svrecode, _get_encoding());
7688                    pv2 = SvPV_const(svrecode, cur2);
7689               }
7690               else {
7691                    svrecode = newSVpvn(pv1, cur1);
7692                    sv_recode_to_utf8(svrecode, _get_encoding());
7693                    pv1 = SvPV_const(svrecode, cur1);
7694               }
7695               /* Now both are in UTF-8. */
7696               if (cur1 != cur2) {
7697                    SvREFCNT_dec_NN(svrecode);
7698                    return FALSE;
7699               }
7700          }
7701          else {
7702               if (SvUTF8(sv1)) {
7703                   /* sv1 is the UTF-8 one  */
7704                   return bytes_cmp_utf8((const U8*)pv2, cur2,
7705                                         (const U8*)pv1, cur1) == 0;
7706               }
7707               else {
7708                   /* sv2 is the UTF-8 one  */
7709                   return bytes_cmp_utf8((const U8*)pv1, cur1,
7710                                         (const U8*)pv2, cur2) == 0;
7711               }
7712          }
7713     }
7714
7715     if (cur1 == cur2)
7716         eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
7717         
7718     SvREFCNT_dec(svrecode);
7719
7720     return eq;
7721 }
7722
7723 /*
7724 =for apidoc sv_cmp
7725
7726 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7727 string in C<sv1> is less than, equal to, or greater than the string in
7728 C<sv2>.  Is UTF-8 and 'use bytes' aware, handles get magic, and will
7729 coerce its args to strings if necessary.  See also C<sv_cmp_locale>.
7730
7731 =for apidoc sv_cmp_flags
7732
7733 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7734 string in C<sv1> is less than, equal to, or greater than the string in
7735 C<sv2>.  Is UTF-8 and 'use bytes' aware and will coerce its args to strings
7736 if necessary.  If the flags include SV_GMAGIC, it handles get magic.  See
7737 also C<sv_cmp_locale_flags>.
7738
7739 =cut
7740 */
7741
7742 I32
7743 Perl_sv_cmp(pTHX_ SV *const sv1, SV *const sv2)
7744 {
7745     return sv_cmp_flags(sv1, sv2, SV_GMAGIC);
7746 }
7747
7748 I32
7749 Perl_sv_cmp_flags(pTHX_ SV *const sv1, SV *const sv2,
7750                   const U32 flags)
7751 {
7752     STRLEN cur1, cur2;
7753     const char *pv1, *pv2;
7754     I32  cmp;
7755     SV *svrecode = NULL;
7756
7757     if (!sv1) {
7758         pv1 = "";
7759         cur1 = 0;
7760     }
7761     else
7762         pv1 = SvPV_flags_const(sv1, cur1, flags);
7763
7764     if (!sv2) {
7765         pv2 = "";
7766         cur2 = 0;
7767     }
7768     else
7769         pv2 = SvPV_flags_const(sv2, cur2, flags);
7770
7771     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7772         /* Differing utf8ness.
7773          * Do not UTF8size the comparands as a side-effect. */
7774         if (SvUTF8(sv1)) {
7775             if (IN_ENCODING) {
7776                  svrecode = newSVpvn(pv2, cur2);
7777                  sv_recode_to_utf8(svrecode, _get_encoding());
7778                  pv2 = SvPV_const(svrecode, cur2);
7779             }
7780             else {
7781                 const int retval = -bytes_cmp_utf8((const U8*)pv2, cur2,
7782                                                    (const U8*)pv1, cur1);
7783                 return retval ? retval < 0 ? -1 : +1 : 0;
7784             }
7785         }
7786         else {
7787             if (IN_ENCODING) {
7788                  svrecode = newSVpvn(pv1, cur1);
7789                  sv_recode_to_utf8(svrecode, _get_encoding());
7790                  pv1 = SvPV_const(svrecode, cur1);
7791             }
7792             else {
7793                 const int retval = bytes_cmp_utf8((const U8*)pv1, cur1,
7794                                                   (const U8*)pv2, cur2);
7795                 return retval ? retval < 0 ? -1 : +1 : 0;
7796             }
7797         }
7798     }
7799
7800     if (!cur1) {
7801         cmp = cur2 ? -1 : 0;
7802     } else if (!cur2) {
7803         cmp = 1;
7804     } else {
7805         const I32 retval = memcmp((const void*)pv1, (const void*)pv2, cur1 < cur2 ? cur1 : cur2);
7806
7807         if (retval) {
7808             cmp = retval < 0 ? -1 : 1;
7809         } else if (cur1 == cur2) {
7810             cmp = 0;
7811         } else {
7812             cmp = cur1 < cur2 ? -1 : 1;
7813         }
7814     }
7815
7816     SvREFCNT_dec(svrecode);
7817
7818     return cmp;
7819 }
7820
7821 /*
7822 =for apidoc sv_cmp_locale
7823
7824 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
7825 'use bytes' aware, handles get magic, and will coerce its args to strings
7826 if necessary.  See also C<sv_cmp>.
7827
7828 =for apidoc sv_cmp_locale_flags
7829
7830 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
7831 'use bytes' aware and will coerce its args to strings if necessary.  If the
7832 flags contain SV_GMAGIC, it handles get magic.  See also C<sv_cmp_flags>.
7833
7834 =cut
7835 */
7836
7837 I32
7838 Perl_sv_cmp_locale(pTHX_ SV *const sv1, SV *const sv2)
7839 {
7840     return sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC);
7841 }
7842
7843 I32
7844 Perl_sv_cmp_locale_flags(pTHX_ SV *const sv1, SV *const sv2,
7845                          const U32 flags)
7846 {
7847 #ifdef USE_LOCALE_COLLATE
7848
7849     char *pv1, *pv2;
7850     STRLEN len1, len2;
7851     I32 retval;
7852
7853     if (PL_collation_standard)
7854         goto raw_compare;
7855
7856     len1 = 0;
7857     pv1 = sv1 ? sv_collxfrm_flags(sv1, &len1, flags) : (char *) NULL;
7858     len2 = 0;
7859     pv2 = sv2 ? sv_collxfrm_flags(sv2, &len2, flags) : (char *) NULL;
7860
7861     if (!pv1 || !len1) {
7862         if (pv2 && len2)
7863             return -1;
7864         else
7865             goto raw_compare;
7866     }
7867     else {
7868         if (!pv2 || !len2)
7869             return 1;
7870     }
7871
7872     retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
7873
7874     if (retval)
7875         return retval < 0 ? -1 : 1;
7876
7877     /*
7878      * When the result of collation is equality, that doesn't mean
7879      * that there are no differences -- some locales exclude some
7880      * characters from consideration.  So to avoid false equalities,
7881      * we use the raw string as a tiebreaker.
7882      */
7883
7884   raw_compare:
7885     /* FALLTHROUGH */
7886
7887 #else
7888     PERL_UNUSED_ARG(flags);
7889 #endif /* USE_LOCALE_COLLATE */
7890
7891     return sv_cmp(sv1, sv2);
7892 }
7893
7894
7895 #ifdef USE_LOCALE_COLLATE
7896
7897 /*
7898 =for apidoc sv_collxfrm
7899
7900 This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag.  See
7901 C<sv_collxfrm_flags>.
7902
7903 =for apidoc sv_collxfrm_flags
7904
7905 Add Collate Transform magic to an SV if it doesn't already have it.  If the
7906 flags contain SV_GMAGIC, it handles get-magic.
7907
7908 Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
7909 scalar data of the variable, but transformed to such a format that a normal
7910 memory comparison can be used to compare the data according to the locale
7911 settings.
7912
7913 =cut
7914 */
7915
7916 char *
7917 Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp, const I32 flags)
7918 {
7919     MAGIC *mg;
7920
7921     PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS;
7922
7923     mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
7924     if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
7925         const char *s;
7926         char *xf;
7927         STRLEN len, xlen;
7928
7929         if (mg)
7930             Safefree(mg->mg_ptr);
7931         s = SvPV_flags_const(sv, len, flags);
7932         if ((xf = mem_collxfrm(s, len, &xlen))) {
7933             if (! mg) {
7934                 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
7935                                  0, 0);
7936                 assert(mg);
7937             }
7938             mg->mg_ptr = xf;
7939             mg->mg_len = xlen;
7940         }
7941         else {
7942             if (mg) {
7943                 mg->mg_ptr = NULL;
7944                 mg->mg_len = -1;
7945             }
7946         }
7947     }
7948     if (mg && mg->mg_ptr) {
7949         *nxp = mg->mg_len;
7950         return mg->mg_ptr + sizeof(PL_collation_ix);
7951     }
7952     else {
7953         *nxp = 0;
7954         return NULL;
7955     }
7956 }
7957
7958 #endif /* USE_LOCALE_COLLATE */
7959
7960 static char *
7961 S_sv_gets_append_to_utf8(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7962 {
7963     SV * const tsv = newSV(0);
7964     ENTER;
7965     SAVEFREESV(tsv);
7966     sv_gets(tsv, fp, 0);
7967     sv_utf8_upgrade_nomg(tsv);
7968     SvCUR_set(sv,append);
7969     sv_catsv(sv,tsv);
7970     LEAVE;
7971     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7972 }
7973
7974 static char *
7975 S_sv_gets_read_record(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7976 {
7977     SSize_t bytesread;
7978     const STRLEN recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
7979       /* Grab the size of the record we're getting */
7980     char *buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
7981     
7982     /* Go yank in */
7983 #ifdef __VMS
7984     int fd;
7985     Stat_t st;
7986
7987     /* With a true, record-oriented file on VMS, we need to use read directly
7988      * to ensure that we respect RMS record boundaries.  The user is responsible
7989      * for providing a PL_rs value that corresponds to the FAB$W_MRS (maximum
7990      * record size) field.  N.B. This is likely to produce invalid results on
7991      * varying-width character data when a record ends mid-character.
7992      */
7993     fd = PerlIO_fileno(fp);
7994     if (fd != -1
7995         && PerlLIO_fstat(fd, &st) == 0
7996         && (st.st_fab_rfm == FAB$C_VAR
7997             || st.st_fab_rfm == FAB$C_VFC
7998             || st.st_fab_rfm == FAB$C_FIX)) {
7999
8000         bytesread = PerlLIO_read(fd, buffer, recsize);
8001     }
8002     else /* in-memory file from PerlIO::Scalar
8003           * or not a record-oriented file
8004           */
8005 #endif
8006     {
8007         bytesread = PerlIO_read(fp, buffer, recsize);
8008
8009         /* At this point, the logic in sv_get() means that sv will
8010            be treated as utf-8 if the handle is utf8.
8011         */
8012         if (PerlIO_isutf8(fp) && bytesread > 0) {
8013             char *bend = buffer + bytesread;
8014             char *bufp = buffer;
8015             size_t charcount = 0;
8016             bool charstart = TRUE;
8017             STRLEN skip = 0;
8018
8019             while (charcount < recsize) {
8020                 /* count accumulated characters */
8021                 while (bufp < bend) {
8022                     if (charstart) {
8023                         skip = UTF8SKIP(bufp);
8024                     }
8025                     if (bufp + skip > bend) {
8026                         /* partial at the end */
8027                         charstart = FALSE;
8028                         break;
8029                     }
8030                     else {
8031                         ++charcount;
8032                         bufp += skip;
8033                         charstart = TRUE;
8034                     }
8035                 }
8036
8037                 if (charcount < recsize) {
8038                     STRLEN readsize;
8039                     STRLEN bufp_offset = bufp - buffer;
8040                     SSize_t morebytesread;
8041
8042                     /* originally I read enough to fill any incomplete
8043                        character and the first byte of the next
8044                        character if needed, but if there's many
8045                        multi-byte encoded characters we're going to be
8046                        making a read call for every character beyond
8047                        the original read size.
8048
8049                        So instead, read the rest of the character if
8050                        any, and enough bytes to match at least the
8051                        start bytes for each character we're going to
8052                        read.
8053                     */
8054                     if (charstart)
8055                         readsize = recsize - charcount;
8056                     else 
8057                         readsize = skip - (bend - bufp) + recsize - charcount - 1;
8058                     buffer = SvGROW(sv, append + bytesread + readsize + 1) + append;
8059                     bend = buffer + bytesread;
8060                     morebytesread = PerlIO_read(fp, bend, readsize);
8061                     if (morebytesread <= 0) {
8062                         /* we're done, if we still have incomplete
8063                            characters the check code in sv_gets() will
8064                            warn about them.
8065
8066                            I'd originally considered doing
8067                            PerlIO_ungetc() on all but the lead
8068                            character of the incomplete character, but
8069                            read() doesn't do that, so I don't.
8070                         */
8071                         break;
8072                     }
8073
8074                     /* prepare to scan some more */
8075                     bytesread += morebytesread;
8076                     bend = buffer + bytesread;
8077                     bufp = buffer + bufp_offset;
8078                 }
8079             }
8080         }
8081     }
8082
8083     if (bytesread < 0)
8084         bytesread = 0;
8085     SvCUR_set(sv, bytesread + append);
8086     buffer[bytesread] = '\0';
8087     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8088 }
8089
8090 /*
8091 =for apidoc sv_gets
8092
8093 Get a line from the filehandle and store it into the SV, optionally
8094 appending to the currently-stored string.  If C<append> is not 0, the
8095 line is appended to the SV instead of overwriting it.  C<append> should
8096 be set to the byte offset that the appended string should start at
8097 in the SV (typically, C<SvCUR(sv)> is a suitable choice).
8098
8099 =cut
8100 */
8101
8102 char *
8103 Perl_sv_gets(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8104 {
8105     const char *rsptr;
8106     STRLEN rslen;
8107     STDCHAR rslast;
8108     STDCHAR *bp;
8109     SSize_t cnt;
8110     int i = 0;
8111     int rspara = 0;
8112
8113     PERL_ARGS_ASSERT_SV_GETS;
8114
8115     if (SvTHINKFIRST(sv))
8116         sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
8117     /* XXX. If you make this PVIV, then copy on write can copy scalars read
8118        from <>.
8119        However, perlbench says it's slower, because the existing swipe code
8120        is faster than copy on write.
8121        Swings and roundabouts.  */
8122     SvUPGRADE(sv, SVt_PV);
8123
8124     if (append) {
8125         /* line is going to be appended to the existing buffer in the sv */
8126         if (PerlIO_isutf8(fp)) {
8127             if (!SvUTF8(sv)) {
8128                 sv_utf8_upgrade_nomg(sv);
8129                 sv_pos_u2b(sv,&append,0);
8130             }
8131         } else if (SvUTF8(sv)) {
8132             return S_sv_gets_append_to_utf8(aTHX_ sv, fp, append);
8133         }
8134     }
8135
8136     SvPOK_only(sv);
8137     if (!append) {
8138         /* not appending - "clear" the string by setting SvCUR to 0,
8139          * the pv is still avaiable. */
8140         SvCUR_set(sv,0);
8141     }
8142     if (PerlIO_isutf8(fp))
8143         SvUTF8_on(sv);
8144
8145     if (IN_PERL_COMPILETIME) {
8146         /* we always read code in line mode */
8147         rsptr = "\n";
8148         rslen = 1;
8149     }
8150     else if (RsSNARF(PL_rs)) {
8151         /* If it is a regular disk file use size from stat() as estimate
8152            of amount we are going to read -- may result in mallocing
8153            more memory than we really need if the layers below reduce
8154            the size we read (e.g. CRLF or a gzip layer).
8155          */
8156         Stat_t st;
8157         int fd = PerlIO_fileno(fp);
8158         if (fd >= 0 && (PerlLIO_fstat(fd, &st) == 0) && S_ISREG(st.st_mode))  {
8159             const Off_t offset = PerlIO_tell(fp);
8160             if (offset != (Off_t) -1 && st.st_size + append > offset) {
8161 #ifdef PERL_COPY_ON_WRITE
8162                 /* Add an extra byte for the sake of copy-on-write's
8163                  * buffer reference count. */
8164                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 2));
8165 #else
8166                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
8167 #endif
8168             }
8169         }
8170         rsptr = NULL;
8171         rslen = 0;
8172     }
8173     else if (RsRECORD(PL_rs)) {
8174         return S_sv_gets_read_record(aTHX_ sv, fp, append);
8175     }
8176     else if (RsPARA(PL_rs)) {
8177         rsptr = "\n\n";
8178         rslen = 2;
8179         rspara = 1;
8180     }
8181     else {
8182         /* Get $/ i.e. PL_rs into same encoding as stream wants */
8183         if (PerlIO_isutf8(fp)) {
8184             rsptr = SvPVutf8(PL_rs, rslen);
8185         }
8186         else {
8187             if (SvUTF8(PL_rs)) {
8188                 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
8189                     Perl_croak(aTHX_ "Wide character in $/");
8190                 }
8191             }
8192             /* extract the raw pointer to the record separator */
8193             rsptr = SvPV_const(PL_rs, rslen);
8194         }
8195     }
8196
8197     /* rslast is the last character in the record separator
8198      * note we don't use rslast except when rslen is true, so the
8199      * null assign is a placeholder. */
8200     rslast = rslen ? rsptr[rslen - 1] : '\0';
8201
8202     if (rspara) {               /* have to do this both before and after */
8203         do {                    /* to make sure file boundaries work right */
8204             if (PerlIO_eof(fp))
8205                 return 0;
8206             i = PerlIO_getc(fp);
8207             if (i != '\n') {
8208                 if (i == -1)
8209                     return 0;
8210                 PerlIO_ungetc(fp,i);
8211                 break;
8212             }
8213         } while (i != EOF);
8214     }
8215
8216     /* See if we know enough about I/O mechanism to cheat it ! */
8217
8218     /* This used to be #ifdef test - it is made run-time test for ease
8219        of abstracting out stdio interface. One call should be cheap
8220        enough here - and may even be a macro allowing compile
8221        time optimization.
8222      */
8223
8224     if (PerlIO_fast_gets(fp)) {
8225     /*
8226      * We can do buffer based IO operations on this filehandle.
8227      *
8228      * This means we can bypass a lot of subcalls and process
8229      * the buffer directly, it also means we know the upper bound
8230      * on the amount of data we might read of the current buffer
8231      * into our sv. Knowing this allows us to preallocate the pv
8232      * to be able to hold that maximum, which allows us to simplify
8233      * a lot of logic. */
8234
8235     /*
8236      * We're going to steal some values from the stdio struct
8237      * and put EVERYTHING in the innermost loop into registers.
8238      */
8239     STDCHAR *ptr;       /* pointer into fp's read-ahead buffer */
8240     STRLEN bpx;         /* length of the data in the target sv
8241                            used to fix pointers after a SvGROW */
8242     I32 shortbuffered;  /* If the pv buffer is shorter than the amount
8243                            of data left in the read-ahead buffer.
8244                            If 0 then the pv buffer can hold the full
8245                            amount left, otherwise this is the amount it
8246                            can hold. */
8247
8248 #if defined(__VMS) && defined(PERLIO_IS_STDIO)
8249     /* An ungetc()d char is handled separately from the regular
8250      * buffer, so we getc() it back out and stuff it in the buffer.
8251      */
8252     i = PerlIO_getc(fp);
8253     if (i == EOF) return 0;
8254     *(--((*fp)->_ptr)) = (unsigned char) i;
8255     (*fp)->_cnt++;
8256 #endif
8257
8258     /* Here is some breathtakingly efficient cheating */
8259
8260     /* When you read the following logic resist the urge to think
8261      * of record separators that are 1 byte long. They are an
8262      * uninteresting special (simple) case.
8263      *
8264      * Instead think of record separators which are at least 2 bytes
8265      * long, and keep in mind that we need to deal with such
8266      * separators when they cross a read-ahead buffer boundary.
8267      *
8268      * Also consider that we need to gracefully deal with separators
8269      * that may be longer than a single read ahead buffer.
8270      *
8271      * Lastly do not forget we want to copy the delimiter as well. We
8272      * are copying all data in the file _up_to_and_including_ the separator
8273      * itself.
8274      *
8275      * Now that you have all that in mind here is what is happening below:
8276      *
8277      * 1. When we first enter the loop we do some memory book keeping to see
8278      * how much free space there is in the target SV. (This sub assumes that
8279      * it is operating on the same SV most of the time via $_ and that it is
8280      * going to be able to reuse the same pv buffer each call.) If there is
8281      * "enough" room then we set "shortbuffered" to how much space there is
8282      * and start reading forward.
8283      *
8284      * 2. When we scan forward we copy from the read-ahead buffer to the target
8285      * SV's pv buffer. While we go we watch for the end of the read-ahead buffer,
8286      * and the end of the of pv, as well as for the "rslast", which is the last
8287      * char of the separator.
8288      *
8289      * 3. When scanning forward if we see rslast then we jump backwards in *pv*
8290      * (which has a "complete" record up to the point we saw rslast) and check
8291      * it to see if it matches the separator. If it does we are done. If it doesn't
8292      * we continue on with the scan/copy.
8293      *
8294      * 4. If we run out of read-ahead buffer (cnt goes to 0) then we have to get
8295      * the IO system to read the next buffer. We do this by doing a getc(), which
8296      * returns a single char read (or EOF), and prefills the buffer, and also
8297      * allows us to find out how full the buffer is.  We use this information to
8298      * SvGROW() the sv to the size remaining in the buffer, after which we copy
8299      * the returned single char into the target sv, and then go back into scan
8300      * forward mode.
8301      *
8302      * 5. If we run out of write-buffer then we SvGROW() it by the size of the
8303      * remaining space in the read-buffer.
8304      *
8305      * Note that this code despite its twisty-turny nature is pretty darn slick.
8306      * It manages single byte separators, multi-byte cross boundary separators,
8307      * and cross-read-buffer separators cleanly and efficiently at the cost
8308      * of potentially greatly overallocating the target SV.
8309      *
8310      * Yves
8311      */
8312
8313
8314     /* get the number of bytes remaining in the read-ahead buffer
8315      * on first call on a given fp this will return 0.*/
8316     cnt = PerlIO_get_cnt(fp);
8317
8318     /* make sure we have the room */
8319     if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
8320         /* Not room for all of it
8321            if we are looking for a separator and room for some
8322          */
8323         if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
8324             /* just process what we have room for */
8325             shortbuffered = cnt - SvLEN(sv) + append + 1;
8326             cnt -= shortbuffered;
8327         }
8328         else {
8329             /* ensure that the target sv has enough room to hold
8330              * the rest of the read-ahead buffer */
8331             shortbuffered = 0;
8332             /* remember that cnt can be negative */
8333             SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
8334         }
8335     }
8336     else {
8337         /* we have enough room to hold the full buffer, lets scream */
8338         shortbuffered = 0;
8339     }
8340
8341     /* extract the pointer to sv's string buffer, offset by append as necessary */
8342     bp = (STDCHAR*)SvPVX_const(sv) + append;  /* move these two too to registers */
8343     /* extract the point to the read-ahead buffer */
8344     ptr = (STDCHAR*)PerlIO_get_ptr(fp);
8345
8346     /* some trace debug output */
8347     DEBUG_P(PerlIO_printf(Perl_debug_log,
8348         "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
8349     DEBUG_P(PerlIO_printf(Perl_debug_log,
8350         "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"
8351          UVuf"\n",
8352                PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8353                PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
8354
8355     for (;;) {
8356       screamer:
8357         /* if there is stuff left in the read-ahead buffer */
8358         if (cnt > 0) {
8359             /* if there is a separator */
8360             if (rslen) {
8361                 /* loop until we hit the end of the read-ahead buffer */
8362                 while (cnt > 0) {                    /* this     |  eat */
8363                     /* scan forward copying and searching for rslast as we go */
8364                     cnt--;
8365                     if ((*bp++ = *ptr++) == rslast)  /* really   |  dust */
8366                         goto thats_all_folks;        /* screams  |  sed :-) */
8367                 }
8368             }
8369             else {
8370                 /* no separator, slurp the full buffer */
8371                 Copy(ptr, bp, cnt, char);            /* this     |  eat */
8372                 bp += cnt;                           /* screams  |  dust */
8373                 ptr += cnt;                          /* louder   |  sed :-) */
8374                 cnt = 0;
8375                 assert (!shortbuffered);
8376                 goto cannot_be_shortbuffered;
8377             }
8378         }
8379         
8380         if (shortbuffered) {            /* oh well, must extend */
8381             /* we didnt have enough room to fit the line into the target buffer
8382              * so we must extend the target buffer and keep going */
8383             cnt = shortbuffered;
8384             shortbuffered = 0;
8385             bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
8386             SvCUR_set(sv, bpx);
8387             /* extned the target sv's buffer so it can hold the full read-ahead buffer */
8388             SvGROW(sv, SvLEN(sv) + append + cnt + 2);
8389             bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
8390             continue;
8391         }
8392
8393     cannot_be_shortbuffered:
8394         /* we need to refill the read-ahead buffer if possible */
8395
8396         DEBUG_P(PerlIO_printf(Perl_debug_log,
8397                              "Screamer: going to getc, ptr=%"UVuf", cnt=%"IVdf"\n",
8398                               PTR2UV(ptr),(IV)cnt));
8399         PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
8400
8401         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8402            "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"UVuf"\n",
8403             PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8404             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8405
8406         /*
8407             call PerlIO_getc() to let it prefill the lookahead buffer
8408
8409             This used to call 'filbuf' in stdio form, but as that behaves like
8410             getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
8411             another abstraction.
8412
8413             Note we have to deal with the char in 'i' if we are not at EOF
8414         */
8415         i   = PerlIO_getc(fp);          /* get more characters */
8416
8417         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8418            "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"UVuf"\n",
8419             PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8420             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8421
8422         /* find out how much is left in the read-ahead buffer, and rextract its pointer */
8423         cnt = PerlIO_get_cnt(fp);
8424         ptr = (STDCHAR*)PerlIO_get_ptr(fp);     /* reregisterize cnt and ptr */
8425         DEBUG_P(PerlIO_printf(Perl_debug_log,
8426             "Screamer: after getc, ptr=%"UVuf", cnt=%"IVdf"\n",
8427             PTR2UV(ptr),(IV)cnt));
8428
8429         if (i == EOF)                   /* all done for ever? */
8430             goto thats_really_all_folks;
8431
8432         /* make sure we have enough space in the target sv */
8433         bpx = bp - (STDCHAR*)SvPVX_const(sv);   /* box up before relocation */
8434         SvCUR_set(sv, bpx);
8435         SvGROW(sv, bpx + cnt + 2);
8436         bp = (STDCHAR*)SvPVX_const(sv) + bpx;   /* unbox after relocation */
8437
8438         /* copy of the char we got from getc() */
8439         *bp++ = (STDCHAR)i;             /* store character from PerlIO_getc */
8440
8441         /* make sure we deal with the i being the last character of a separator */
8442         if (rslen && (STDCHAR)i == rslast)  /* all done for now? */
8443             goto thats_all_folks;
8444     }
8445
8446   thats_all_folks:
8447     /* check if we have actually found the separator - only really applies
8448      * when rslen > 1 */
8449     if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
8450           memNE((char*)bp - rslen, rsptr, rslen))
8451         goto screamer;                          /* go back to the fray */
8452   thats_really_all_folks:
8453     if (shortbuffered)
8454         cnt += shortbuffered;
8455         DEBUG_P(PerlIO_printf(Perl_debug_log,
8456              "Screamer: quitting, ptr=%"UVuf", cnt=%"IVdf"\n",PTR2UV(ptr),(IV)cnt));
8457     PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt);  /* put these back or we're in trouble */
8458     DEBUG_P(PerlIO_printf(Perl_debug_log,
8459         "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"UVuf
8460         "\n",
8461         PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8462         PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8463     *bp = '\0';
8464     SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv));      /* set length */
8465     DEBUG_P(PerlIO_printf(Perl_debug_log,
8466         "Screamer: done, len=%ld, string=|%.*s|\n",
8467         (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
8468     }
8469    else
8470     {
8471        /*The big, slow, and stupid way. */
8472 #ifdef USE_HEAP_INSTEAD_OF_STACK        /* Even slower way. */
8473         STDCHAR *buf = NULL;
8474         Newx(buf, 8192, STDCHAR);
8475         assert(buf);
8476 #else
8477         STDCHAR buf[8192];
8478 #endif
8479
8480       screamer2:
8481         if (rslen) {
8482             const STDCHAR * const bpe = buf + sizeof(buf);
8483             bp = buf;
8484             while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
8485                 ; /* keep reading */
8486             cnt = bp - buf;
8487         }
8488         else {
8489             cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
8490             /* Accommodate broken VAXC compiler, which applies U8 cast to
8491              * both args of ?: operator, causing EOF to change into 255
8492              */
8493             if (cnt > 0)
8494                  i = (U8)buf[cnt - 1];
8495             else
8496                  i = EOF;
8497         }
8498
8499         if (cnt < 0)
8500             cnt = 0;  /* we do need to re-set the sv even when cnt <= 0 */
8501         if (append)
8502             sv_catpvn_nomg(sv, (char *) buf, cnt);
8503         else
8504             sv_setpvn(sv, (char *) buf, cnt);   /* "nomg" is implied */
8505
8506         if (i != EOF &&                 /* joy */
8507             (!rslen ||
8508              SvCUR(sv) < rslen ||
8509              memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
8510         {
8511             append = -1;
8512             /*
8513              * If we're reading from a TTY and we get a short read,
8514              * indicating that the user hit his EOF character, we need
8515              * to notice it now, because if we try to read from the TTY
8516              * again, the EOF condition will disappear.
8517              *
8518              * The comparison of cnt to sizeof(buf) is an optimization
8519              * that prevents unnecessary calls to feof().
8520              *
8521              * - jik 9/25/96
8522              */
8523             if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
8524                 goto screamer2;
8525         }
8526
8527 #ifdef USE_HEAP_INSTEAD_OF_STACK
8528         Safefree(buf);
8529 #endif
8530     }
8531
8532     if (rspara) {               /* have to do this both before and after */
8533         while (i != EOF) {      /* to make sure file boundaries work right */
8534             i = PerlIO_getc(fp);
8535             if (i != '\n') {
8536                 PerlIO_ungetc(fp,i);
8537                 break;
8538             }
8539         }
8540     }
8541
8542     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8543 }
8544
8545 /*
8546 =for apidoc sv_inc
8547
8548 Auto-increment of the value in the SV, doing string to numeric conversion
8549 if necessary.  Handles 'get' magic and operator overloading.
8550
8551 =cut
8552 */
8553
8554 void
8555 Perl_sv_inc(pTHX_ SV *const sv)
8556 {
8557     if (!sv)
8558         return;
8559     SvGETMAGIC(sv);
8560     sv_inc_nomg(sv);
8561 }
8562
8563 /*
8564 =for apidoc sv_inc_nomg
8565
8566 Auto-increment of the value in the SV, doing string to numeric conversion
8567 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8568
8569 =cut
8570 */
8571
8572 void
8573 Perl_sv_inc_nomg(pTHX_ SV *const sv)
8574 {
8575     char *d;
8576     int flags;
8577
8578     if (!sv)
8579         return;
8580     if (SvTHINKFIRST(sv)) {
8581         if (SvREADONLY(sv)) {
8582                 Perl_croak_no_modify();
8583         }
8584         if (SvROK(sv)) {
8585             IV i;
8586             if (SvAMAGIC(sv) && AMG_CALLunary(sv, inc_amg))
8587                 return;
8588             i = PTR2IV(SvRV(sv));
8589             sv_unref(sv);
8590             sv_setiv(sv, i);
8591         }
8592         else sv_force_normal_flags(sv, 0);
8593     }
8594     flags = SvFLAGS(sv);
8595     if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
8596         /* It's (privately or publicly) a float, but not tested as an
8597            integer, so test it to see. */
8598         (void) SvIV(sv);
8599         flags = SvFLAGS(sv);
8600     }
8601     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8602         /* It's publicly an integer, or privately an integer-not-float */
8603 #ifdef PERL_PRESERVE_IVUV
8604       oops_its_int:
8605 #endif
8606         if (SvIsUV(sv)) {
8607             if (SvUVX(sv) == UV_MAX)
8608                 sv_setnv(sv, UV_MAX_P1);
8609             else
8610                 (void)SvIOK_only_UV(sv);
8611                 SvUV_set(sv, SvUVX(sv) + 1);
8612         } else {
8613             if (SvIVX(sv) == IV_MAX)
8614                 sv_setuv(sv, (UV)IV_MAX + 1);
8615             else {
8616                 (void)SvIOK_only(sv);
8617                 SvIV_set(sv, SvIVX(sv) + 1);
8618             }   
8619         }
8620         return;
8621     }
8622     if (flags & SVp_NOK) {
8623         const NV was = SvNVX(sv);
8624         if (LIKELY(!Perl_isinfnan(was)) &&
8625             NV_OVERFLOWS_INTEGERS_AT &&
8626             was >= NV_OVERFLOWS_INTEGERS_AT) {
8627             /* diag_listed_as: Lost precision when %s %f by 1 */
8628             Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8629                            "Lost precision when incrementing %" NVff " by 1",
8630                            was);
8631         }
8632         (void)SvNOK_only(sv);
8633         SvNV_set(sv, was + 1.0);
8634         return;
8635     }
8636
8637     if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
8638         if ((flags & SVTYPEMASK) < SVt_PVIV)
8639             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
8640         (void)SvIOK_only(sv);
8641         SvIV_set(sv, 1);
8642         return;
8643     }
8644     d = SvPVX(sv);
8645     while (isALPHA(*d)) d++;
8646     while (isDIGIT(*d)) d++;
8647     if (d < SvEND(sv)) {
8648         const int numtype = grok_number_flags(SvPVX_const(sv), SvCUR(sv), NULL, PERL_SCAN_TRAILING);
8649 #ifdef PERL_PRESERVE_IVUV
8650         /* Got to punt this as an integer if needs be, but we don't issue
8651            warnings. Probably ought to make the sv_iv_please() that does
8652            the conversion if possible, and silently.  */
8653         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8654             /* Need to try really hard to see if it's an integer.
8655                9.22337203685478e+18 is an integer.
8656                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8657                so $a="9.22337203685478e+18"; $a+0; $a++
8658                needs to be the same as $a="9.22337203685478e+18"; $a++
8659                or we go insane. */
8660         
8661             (void) sv_2iv(sv);
8662             if (SvIOK(sv))
8663                 goto oops_its_int;
8664
8665             /* sv_2iv *should* have made this an NV */
8666             if (flags & SVp_NOK) {
8667                 (void)SvNOK_only(sv);
8668                 SvNV_set(sv, SvNVX(sv) + 1.0);
8669                 return;
8670             }
8671             /* I don't think we can get here. Maybe I should assert this
8672                And if we do get here I suspect that sv_setnv will croak. NWC
8673                Fall through. */
8674             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8675                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8676         }
8677 #endif /* PERL_PRESERVE_IVUV */
8678         if (!numtype && ckWARN(WARN_NUMERIC))
8679             not_incrementable(sv);
8680         sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
8681         return;
8682     }
8683     d--;
8684     while (d >= SvPVX_const(sv)) {
8685         if (isDIGIT(*d)) {
8686             if (++*d <= '9')
8687                 return;
8688             *(d--) = '0';
8689         }
8690         else {
8691 #ifdef EBCDIC
8692             /* MKS: The original code here died if letters weren't consecutive.
8693              * at least it didn't have to worry about non-C locales.  The
8694              * new code assumes that ('z'-'a')==('Z'-'A'), letters are
8695              * arranged in order (although not consecutively) and that only
8696              * [A-Za-z] are accepted by isALPHA in the C locale.
8697              */
8698             if (isALPHA_FOLD_NE(*d, 'z')) {
8699                 do { ++*d; } while (!isALPHA(*d));
8700                 return;
8701             }
8702             *(d--) -= 'z' - 'a';
8703 #else
8704             ++*d;
8705             if (isALPHA(*d))
8706                 return;
8707             *(d--) -= 'z' - 'a' + 1;
8708 #endif
8709         }
8710     }
8711     /* oh,oh, the number grew */
8712     SvGROW(sv, SvCUR(sv) + 2);
8713     SvCUR_set(sv, SvCUR(sv) + 1);
8714     for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
8715         *d = d[-1];
8716     if (isDIGIT(d[1]))
8717         *d = '1';
8718     else
8719         *d = d[1];
8720 }
8721
8722 /*
8723 =for apidoc sv_dec
8724
8725 Auto-decrement of the value in the SV, doing string to numeric conversion
8726 if necessary.  Handles 'get' magic and operator overloading.
8727
8728 =cut
8729 */
8730
8731 void
8732 Perl_sv_dec(pTHX_ SV *const sv)
8733 {
8734     if (!sv)
8735         return;
8736     SvGETMAGIC(sv);
8737     sv_dec_nomg(sv);
8738 }
8739
8740 /*
8741 =for apidoc sv_dec_nomg
8742
8743 Auto-decrement of the value in the SV, doing string to numeric conversion
8744 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8745
8746 =cut
8747 */
8748
8749 void
8750 Perl_sv_dec_nomg(pTHX_ SV *const sv)
8751 {
8752     int flags;
8753
8754     if (!sv)
8755         return;
8756     if (SvTHINKFIRST(sv)) {
8757         if (SvREADONLY(sv)) {
8758                 Perl_croak_no_modify();
8759         }
8760         if (SvROK(sv)) {
8761             IV i;
8762             if (SvAMAGIC(sv) && AMG_CALLunary(sv, dec_amg))
8763                 return;
8764             i = PTR2IV(SvRV(sv));
8765             sv_unref(sv);
8766             sv_setiv(sv, i);
8767         }
8768         else sv_force_normal_flags(sv, 0);
8769     }
8770     /* Unlike sv_inc we don't have to worry about string-never-numbers
8771        and keeping them magic. But we mustn't warn on punting */
8772     flags = SvFLAGS(sv);
8773     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8774         /* It's publicly an integer, or privately an integer-not-float */
8775 #ifdef PERL_PRESERVE_IVUV
8776       oops_its_int:
8777 #endif
8778         if (SvIsUV(sv)) {
8779             if (SvUVX(sv) == 0) {
8780                 (void)SvIOK_only(sv);
8781                 SvIV_set(sv, -1);
8782             }
8783             else {
8784                 (void)SvIOK_only_UV(sv);
8785                 SvUV_set(sv, SvUVX(sv) - 1);
8786             }   
8787         } else {
8788             if (SvIVX(sv) == IV_MIN) {
8789                 sv_setnv(sv, (NV)IV_MIN);
8790                 goto oops_its_num;
8791             }
8792             else {
8793                 (void)SvIOK_only(sv);
8794                 SvIV_set(sv, SvIVX(sv) - 1);
8795             }   
8796         }
8797         return;
8798     }
8799     if (flags & SVp_NOK) {
8800     oops_its_num:
8801         {
8802             const NV was = SvNVX(sv);
8803             if (LIKELY(!Perl_isinfnan(was)) &&
8804                 NV_OVERFLOWS_INTEGERS_AT &&
8805                 was <= -NV_OVERFLOWS_INTEGERS_AT) {
8806                 /* diag_listed_as: Lost precision when %s %f by 1 */
8807                 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8808                                "Lost precision when decrementing %" NVff " by 1",
8809                                was);
8810             }
8811             (void)SvNOK_only(sv);
8812             SvNV_set(sv, was - 1.0);
8813             return;
8814         }
8815     }
8816     if (!(flags & SVp_POK)) {
8817         if ((flags & SVTYPEMASK) < SVt_PVIV)
8818             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
8819         SvIV_set(sv, -1);
8820         (void)SvIOK_only(sv);
8821         return;
8822     }
8823 #ifdef PERL_PRESERVE_IVUV
8824     {
8825         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
8826         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8827             /* Need to try really hard to see if it's an integer.
8828                9.22337203685478e+18 is an integer.
8829                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8830                so $a="9.22337203685478e+18"; $a+0; $a--
8831                needs to be the same as $a="9.22337203685478e+18"; $a--
8832                or we go insane. */
8833         
8834             (void) sv_2iv(sv);
8835             if (SvIOK(sv))
8836                 goto oops_its_int;
8837
8838             /* sv_2iv *should* have made this an NV */
8839             if (flags & SVp_NOK) {
8840                 (void)SvNOK_only(sv);
8841                 SvNV_set(sv, SvNVX(sv) - 1.0);
8842                 return;
8843             }
8844             /* I don't think we can get here. Maybe I should assert this
8845                And if we do get here I suspect that sv_setnv will croak. NWC
8846                Fall through. */
8847             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8848                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8849         }
8850     }
8851 #endif /* PERL_PRESERVE_IVUV */
8852     sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0);   /* punt */
8853 }
8854
8855 /* this define is used to eliminate a chunk of duplicated but shared logic
8856  * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
8857  * used anywhere but here - yves
8858  */
8859 #define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
8860     STMT_START {      \
8861         SSize_t ix = ++PL_tmps_ix;              \
8862         if (UNLIKELY(ix >= PL_tmps_max))        \
8863             ix = tmps_grow_p(ix);                       \
8864         PL_tmps_stack[ix] = (AnSv); \
8865     } STMT_END
8866
8867 /*
8868 =for apidoc sv_mortalcopy
8869
8870 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
8871 The new SV is marked as mortal.  It will be destroyed "soon", either by an
8872 explicit call to FREETMPS, or by an implicit call at places such as
8873 statement boundaries.  See also C<sv_newmortal> and C<sv_2mortal>.
8874
8875 =cut
8876 */
8877
8878 /* Make a string that will exist for the duration of the expression
8879  * evaluation.  Actually, it may have to last longer than that, but
8880  * hopefully we won't free it until it has been assigned to a
8881  * permanent location. */
8882
8883 SV *
8884 Perl_sv_mortalcopy_flags(pTHX_ SV *const oldstr, U32 flags)
8885 {
8886     SV *sv;
8887
8888     if (flags & SV_GMAGIC)
8889         SvGETMAGIC(oldstr); /* before new_SV, in case it dies */
8890     new_SV(sv);
8891     sv_setsv_flags(sv,oldstr,flags & ~SV_GMAGIC);
8892     PUSH_EXTEND_MORTAL__SV_C(sv);
8893     SvTEMP_on(sv);
8894     return sv;
8895 }
8896
8897 /*
8898 =for apidoc sv_newmortal
8899
8900 Creates a new null SV which is mortal.  The reference count of the SV is
8901 set to 1.  It will be destroyed "soon", either by an explicit call to
8902 FREETMPS, or by an implicit call at places such as statement boundaries.
8903 See also C<sv_mortalcopy> and C<sv_2mortal>.
8904
8905 =cut
8906 */
8907
8908 SV *
8909 Perl_sv_newmortal(pTHX)
8910 {
8911     SV *sv;
8912
8913     new_SV(sv);
8914     SvFLAGS(sv) = SVs_TEMP;
8915     PUSH_EXTEND_MORTAL__SV_C(sv);
8916     return sv;
8917 }
8918
8919
8920 /*
8921 =for apidoc newSVpvn_flags
8922
8923 Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
8924 characters) into it.  The reference count for the
8925 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
8926 string.  You are responsible for ensuring that the source string is at least
8927 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
8928 Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
8929 If C<SVs_TEMP> is set, then C<sv_2mortal()> is called on the result before
8930 returning.  If C<SVf_UTF8> is set, C<s>
8931 is considered to be in UTF-8 and the
8932 C<SVf_UTF8> flag will be set on the new SV.
8933 C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
8934
8935     #define newSVpvn_utf8(s, len, u)                    \
8936         newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
8937
8938 =cut
8939 */
8940
8941 SV *
8942 Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
8943 {
8944     SV *sv;
8945
8946     /* All the flags we don't support must be zero.
8947        And we're new code so I'm going to assert this from the start.  */
8948     assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
8949     new_SV(sv);
8950     sv_setpvn(sv,s,len);
8951
8952     /* This code used to do a sv_2mortal(), however we now unroll the call to
8953      * sv_2mortal() and do what it does ourselves here.  Since we have asserted
8954      * that flags can only have the SVf_UTF8 and/or SVs_TEMP flags set above we
8955      * can use it to enable the sv flags directly (bypassing SvTEMP_on), which
8956      * in turn means we dont need to mask out the SVf_UTF8 flag below, which
8957      * means that we eliminate quite a few steps than it looks - Yves
8958      * (explaining patch by gfx) */
8959
8960     SvFLAGS(sv) |= flags;
8961
8962     if(flags & SVs_TEMP){
8963         PUSH_EXTEND_MORTAL__SV_C(sv);
8964     }
8965
8966     return sv;
8967 }
8968
8969 /*
8970 =for apidoc sv_2mortal
8971
8972 Marks an existing SV as mortal.  The SV will be destroyed "soon", either
8973 by an explicit call to FREETMPS, or by an implicit call at places such as
8974 statement boundaries.  SvTEMP() is turned on which means that the SV's
8975 string buffer can be "stolen" if this SV is copied.  See also C<sv_newmortal>
8976 and C<sv_mortalcopy>.
8977
8978 =cut
8979 */
8980
8981 SV *
8982 Perl_sv_2mortal(pTHX_ SV *const sv)
8983 {
8984     dVAR;
8985     if (!sv)
8986         return sv;
8987     if (SvIMMORTAL(sv))
8988         return sv;
8989     PUSH_EXTEND_MORTAL__SV_C(sv);
8990     SvTEMP_on(sv);
8991     return sv;
8992 }
8993
8994 /*
8995 =for apidoc newSVpv
8996
8997 Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
8998 characters) into it.  The reference count for the
8999 SV is set to 1.  If C<len> is zero, Perl will compute the length using
9000 strlen(), (which means if you use this option, that C<s> can't have embedded
9001 C<NUL> characters and has to have a terminating C<NUL> byte).
9002
9003 For efficiency, consider using C<newSVpvn> instead.
9004
9005 =cut
9006 */
9007
9008 SV *
9009 Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
9010 {
9011     SV *sv;
9012
9013     new_SV(sv);
9014     sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
9015     return sv;
9016 }
9017
9018 /*
9019 =for apidoc newSVpvn
9020
9021 Creates a new SV and copies a string into it, which may contain C<NUL> characters
9022 (C<\0>) and other binary data.  The reference count for the SV is set to 1.
9023 Note that if C<len> is zero, Perl will create a zero length (Perl) string.  You
9024 are responsible for ensuring that the source buffer is at least
9025 C<len> bytes long.  If the C<buffer> argument is NULL the new SV will be
9026 undefined.
9027
9028 =cut
9029 */
9030
9031 SV *
9032 Perl_newSVpvn(pTHX_ const char *const buffer, const STRLEN len)
9033 {
9034     SV *sv;
9035     new_SV(sv);
9036     sv_setpvn(sv,buffer,len);
9037     return sv;
9038 }
9039
9040 /*
9041 =for apidoc newSVhek
9042
9043 Creates a new SV from the hash key structure.  It will generate scalars that
9044 point to the shared string table where possible.  Returns a new (undefined)
9045 SV if the hek is NULL.
9046
9047 =cut
9048 */
9049
9050 SV *
9051 Perl_newSVhek(pTHX_ const HEK *const hek)
9052 {
9053     if (!hek) {
9054         SV *sv;
9055
9056         new_SV(sv);
9057         return sv;
9058     }
9059
9060     if (HEK_LEN(hek) == HEf_SVKEY) {
9061         return newSVsv(*(SV**)HEK_KEY(hek));
9062     } else {
9063         const int flags = HEK_FLAGS(hek);
9064         if (flags & HVhek_WASUTF8) {
9065             /* Trouble :-)
9066                Andreas would like keys he put in as utf8 to come back as utf8
9067             */
9068             STRLEN utf8_len = HEK_LEN(hek);
9069             SV * const sv = newSV_type(SVt_PV);
9070             char *as_utf8 = (char *)bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
9071             /* bytes_to_utf8() allocates a new string, which we can repurpose: */
9072             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
9073             SvUTF8_on (sv);
9074             return sv;
9075         } else if (flags & HVhek_UNSHARED) {
9076             /* A hash that isn't using shared hash keys has to have
9077                the flag in every key so that we know not to try to call
9078                share_hek_hek on it.  */
9079
9080             SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
9081             if (HEK_UTF8(hek))
9082                 SvUTF8_on (sv);
9083             return sv;
9084         }
9085         /* This will be overwhelminly the most common case.  */
9086         {
9087             /* Inline most of newSVpvn_share(), because share_hek_hek() is far
9088                more efficient than sharepvn().  */
9089             SV *sv;
9090
9091             new_SV(sv);
9092             sv_upgrade(sv, SVt_PV);
9093             SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
9094             SvCUR_set(sv, HEK_LEN(hek));
9095             SvLEN_set(sv, 0);
9096             SvIsCOW_on(sv);
9097             SvPOK_on(sv);
9098             if (HEK_UTF8(hek))
9099                 SvUTF8_on(sv);
9100             return sv;
9101         }
9102     }
9103 }
9104
9105 /*
9106 =for apidoc newSVpvn_share
9107
9108 Creates a new SV with its SvPVX_const pointing to a shared string in the string
9109 table.  If the string does not already exist in the table, it is
9110 created first.  Turns on the SvIsCOW flag (or READONLY
9111 and FAKE in 5.16 and earlier).  If the C<hash> parameter
9112 is non-zero, that value is used; otherwise the hash is computed.
9113 The string's hash can later be retrieved from the SV
9114 with the C<SvSHARED_HASH()> macro.  The idea here is
9115 that as the string table is used for shared hash keys these strings will have
9116 SvPVX_const == HeKEY and hash lookup will avoid string compare.
9117
9118 =cut
9119 */
9120
9121 SV *
9122 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
9123 {
9124     dVAR;
9125     SV *sv;
9126     bool is_utf8 = FALSE;
9127     const char *const orig_src = src;
9128
9129     if (len < 0) {
9130         STRLEN tmplen = -len;
9131         is_utf8 = TRUE;
9132         /* See the note in hv.c:hv_fetch() --jhi */
9133         src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
9134         len = tmplen;
9135     }
9136     if (!hash)
9137         PERL_HASH(hash, src, len);
9138     new_SV(sv);
9139     /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
9140        changes here, update it there too.  */
9141     sv_upgrade(sv, SVt_PV);
9142     SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
9143     SvCUR_set(sv, len);
9144     SvLEN_set(sv, 0);
9145     SvIsCOW_on(sv);
9146     SvPOK_on(sv);
9147     if (is_utf8)
9148         SvUTF8_on(sv);
9149     if (src != orig_src)
9150         Safefree(src);
9151     return sv;
9152 }
9153
9154 /*
9155 =for apidoc newSVpv_share
9156
9157 Like C<newSVpvn_share>, but takes a C<NUL>-terminated string instead of a
9158 string/length pair.
9159
9160 =cut
9161 */
9162
9163 SV *
9164 Perl_newSVpv_share(pTHX_ const char *src, U32 hash)
9165 {
9166     return newSVpvn_share(src, strlen(src), hash);
9167 }
9168
9169 #if defined(PERL_IMPLICIT_CONTEXT)
9170
9171 /* pTHX_ magic can't cope with varargs, so this is a no-context
9172  * version of the main function, (which may itself be aliased to us).
9173  * Don't access this version directly.
9174  */
9175
9176 SV *
9177 Perl_newSVpvf_nocontext(const char *const pat, ...)
9178 {
9179     dTHX;
9180     SV *sv;
9181     va_list args;
9182
9183     PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
9184
9185     va_start(args, pat);
9186     sv = vnewSVpvf(pat, &args);
9187     va_end(args);
9188     return sv;
9189 }
9190 #endif
9191
9192 /*
9193 =for apidoc newSVpvf
9194
9195 Creates a new SV and initializes it with the string formatted like
9196 C<sv_catpvf>.
9197
9198 =cut
9199 */
9200
9201 SV *
9202 Perl_newSVpvf(pTHX_ const char *const pat, ...)
9203 {
9204     SV *sv;
9205     va_list args;
9206
9207     PERL_ARGS_ASSERT_NEWSVPVF;
9208
9209     va_start(args, pat);
9210     sv = vnewSVpvf(pat, &args);
9211     va_end(args);
9212     return sv;
9213 }
9214
9215 /* backend for newSVpvf() and newSVpvf_nocontext() */
9216
9217 SV *
9218 Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
9219 {
9220     SV *sv;
9221
9222     PERL_ARGS_ASSERT_VNEWSVPVF;
9223
9224     new_SV(sv);
9225     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9226     return sv;
9227 }
9228
9229 /*
9230 =for apidoc newSVnv
9231
9232 Creates a new SV and copies a floating point value into it.
9233 The reference count for the SV is set to 1.
9234
9235 =cut
9236 */
9237
9238 SV *
9239 Perl_newSVnv(pTHX_ const NV n)
9240 {
9241     SV *sv;
9242
9243     new_SV(sv);
9244     sv_setnv(sv,n);
9245     return sv;
9246 }
9247
9248 /*
9249 =for apidoc newSViv
9250
9251 Creates a new SV and copies an integer into it.  The reference count for the
9252 SV is set to 1.
9253
9254 =cut
9255 */
9256
9257 SV *
9258 Perl_newSViv(pTHX_ const IV i)
9259 {
9260     SV *sv;
9261
9262     new_SV(sv);
9263
9264     /* Inlining ONLY the small relevant subset of sv_setiv here
9265      * for performance. Makes a significant difference. */
9266
9267     /* We're starting from SVt_FIRST, so provided that's
9268      * actual 0, we don't have to unset any SV type flags
9269      * to promote to SVt_IV. */
9270     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9271
9272     SET_SVANY_FOR_BODYLESS_IV(sv);
9273     SvFLAGS(sv) |= SVt_IV;
9274     (void)SvIOK_on(sv);
9275
9276     SvIV_set(sv, i);
9277     SvTAINT(sv);
9278
9279     return sv;
9280 }
9281
9282 /*
9283 =for apidoc newSVuv
9284
9285 Creates a new SV and copies an unsigned integer into it.
9286 The reference count for the SV is set to 1.
9287
9288 =cut
9289 */
9290
9291 SV *
9292 Perl_newSVuv(pTHX_ const UV u)
9293 {
9294     SV *sv;
9295
9296     /* Inlining ONLY the small relevant subset of sv_setuv here
9297      * for performance. Makes a significant difference. */
9298
9299     /* Using ivs is more efficient than using uvs - see sv_setuv */
9300     if (u <= (UV)IV_MAX) {
9301         return newSViv((IV)u);
9302     }
9303
9304     new_SV(sv);
9305
9306     /* We're starting from SVt_FIRST, so provided that's
9307      * actual 0, we don't have to unset any SV type flags
9308      * to promote to SVt_IV. */
9309     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9310
9311     SET_SVANY_FOR_BODYLESS_IV(sv);
9312     SvFLAGS(sv) |= SVt_IV;
9313     (void)SvIOK_on(sv);
9314     (void)SvIsUV_on(sv);
9315
9316     SvUV_set(sv, u);
9317     SvTAINT(sv);
9318
9319     return sv;
9320 }
9321
9322 /*
9323 =for apidoc newSV_type
9324
9325 Creates a new SV, of the type specified.  The reference count for the new SV
9326 is set to 1.
9327
9328 =cut
9329 */
9330
9331 SV *
9332 Perl_newSV_type(pTHX_ const svtype type)
9333 {
9334     SV *sv;
9335
9336     new_SV(sv);
9337     ASSUME(SvTYPE(sv) == SVt_FIRST);
9338     if(type != SVt_FIRST)
9339         sv_upgrade(sv, type);
9340     return sv;
9341 }
9342
9343 /*
9344 =for apidoc newRV_noinc
9345
9346 Creates an RV wrapper for an SV.  The reference count for the original
9347 SV is B<not> incremented.
9348
9349 =cut
9350 */
9351
9352 SV *
9353 Perl_newRV_noinc(pTHX_ SV *const tmpRef)
9354 {
9355     SV *sv;
9356
9357     PERL_ARGS_ASSERT_NEWRV_NOINC;
9358
9359     new_SV(sv);
9360
9361     /* We're starting from SVt_FIRST, so provided that's
9362      * actual 0, we don't have to unset any SV type flags
9363      * to promote to SVt_IV. */
9364     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9365
9366     SET_SVANY_FOR_BODYLESS_IV(sv);
9367     SvFLAGS(sv) |= SVt_IV;
9368     SvROK_on(sv);
9369     SvIV_set(sv, 0);
9370
9371     SvTEMP_off(tmpRef);
9372     SvRV_set(sv, tmpRef);
9373
9374     return sv;
9375 }
9376
9377 /* newRV_inc is the official function name to use now.
9378  * newRV_inc is in fact #defined to newRV in sv.h
9379  */
9380
9381 SV *
9382 Perl_newRV(pTHX_ SV *const sv)
9383 {
9384     PERL_ARGS_ASSERT_NEWRV;
9385
9386     return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
9387 }
9388
9389 /*
9390 =for apidoc newSVsv
9391
9392 Creates a new SV which is an exact duplicate of the original SV.
9393 (Uses C<sv_setsv>.)
9394
9395 =cut
9396 */
9397
9398 SV *
9399 Perl_newSVsv(pTHX_ SV *const old)
9400 {
9401     SV *sv;
9402
9403     if (!old)
9404         return NULL;
9405     if (SvTYPE(old) == (svtype)SVTYPEMASK) {
9406         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
9407         return NULL;
9408     }
9409     /* Do this here, otherwise we leak the new SV if this croaks. */
9410     SvGETMAGIC(old);
9411     new_SV(sv);
9412     /* SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
9413        with SvTEMP_off and SvTEMP_on round a call to sv_setsv.  */
9414     sv_setsv_flags(sv, old, SV_NOSTEAL);
9415     return sv;
9416 }
9417
9418 /*
9419 =for apidoc sv_reset
9420
9421 Underlying implementation for the C<reset> Perl function.
9422 Note that the perl-level function is vaguely deprecated.
9423
9424 =cut
9425 */
9426
9427 void
9428 Perl_sv_reset(pTHX_ const char *s, HV *const stash)
9429 {
9430     PERL_ARGS_ASSERT_SV_RESET;
9431
9432     sv_resetpvn(*s ? s : NULL, strlen(s), stash);
9433 }
9434
9435 void
9436 Perl_sv_resetpvn(pTHX_ const char *s, STRLEN len, HV * const stash)
9437 {
9438     char todo[PERL_UCHAR_MAX+1];
9439     const char *send;
9440
9441     if (!stash || SvTYPE(stash) != SVt_PVHV)
9442         return;
9443
9444     if (!s) {           /* reset ?? searches */
9445         MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
9446         if (mg) {
9447             const U32 count = mg->mg_len / sizeof(PMOP**);
9448             PMOP **pmp = (PMOP**) mg->mg_ptr;
9449             PMOP *const *const end = pmp + count;
9450
9451             while (pmp < end) {
9452 #ifdef USE_ITHREADS
9453                 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
9454 #else
9455                 (*pmp)->op_pmflags &= ~PMf_USED;
9456 #endif
9457                 ++pmp;
9458             }
9459         }
9460         return;
9461     }
9462
9463     /* reset variables */
9464
9465     if (!HvARRAY(stash))
9466         return;
9467
9468     Zero(todo, 256, char);
9469     send = s + len;
9470     while (s < send) {
9471         I32 max;
9472         I32 i = (unsigned char)*s;
9473         if (s[1] == '-') {
9474             s += 2;
9475         }
9476         max = (unsigned char)*s++;
9477         for ( ; i <= max; i++) {
9478             todo[i] = 1;
9479         }
9480         for (i = 0; i <= (I32) HvMAX(stash); i++) {
9481             HE *entry;
9482             for (entry = HvARRAY(stash)[i];
9483                  entry;
9484                  entry = HeNEXT(entry))
9485             {
9486                 GV *gv;
9487                 SV *sv;
9488
9489                 if (!todo[(U8)*HeKEY(entry)])
9490                     continue;
9491                 gv = MUTABLE_GV(HeVAL(entry));
9492                 sv = GvSV(gv);
9493                 if (sv && !SvREADONLY(sv)) {
9494                     SV_CHECK_THINKFIRST_COW_DROP(sv);
9495                     if (!isGV(sv)) SvOK_off(sv);
9496                 }
9497                 if (GvAV(gv)) {
9498                     av_clear(GvAV(gv));
9499                 }
9500                 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
9501                     hv_clear(GvHV(gv));
9502                 }
9503             }
9504         }
9505     }
9506 }
9507
9508 /*
9509 =for apidoc sv_2io
9510
9511 Using various gambits, try to get an IO from an SV: the IO slot if its a
9512 GV; or the recursive result if we're an RV; or the IO slot of the symbol
9513 named after the PV if we're a string.
9514
9515 'Get' magic is ignored on the sv passed in, but will be called on
9516 C<SvRV(sv)> if sv is an RV.
9517
9518 =cut
9519 */
9520
9521 IO*
9522 Perl_sv_2io(pTHX_ SV *const sv)
9523 {
9524     IO* io;
9525     GV* gv;
9526
9527     PERL_ARGS_ASSERT_SV_2IO;
9528
9529     switch (SvTYPE(sv)) {
9530     case SVt_PVIO:
9531         io = MUTABLE_IO(sv);
9532         break;
9533     case SVt_PVGV:
9534     case SVt_PVLV:
9535         if (isGV_with_GP(sv)) {
9536             gv = MUTABLE_GV(sv);
9537             io = GvIO(gv);
9538             if (!io)
9539                 Perl_croak(aTHX_ "Bad filehandle: %"HEKf,
9540                                     HEKfARG(GvNAME_HEK(gv)));
9541             break;
9542         }
9543         /* FALLTHROUGH */
9544     default:
9545         if (!SvOK(sv))
9546             Perl_croak(aTHX_ PL_no_usym, "filehandle");
9547         if (SvROK(sv)) {
9548             SvGETMAGIC(SvRV(sv));
9549             return sv_2io(SvRV(sv));
9550         }
9551         gv = gv_fetchsv_nomg(sv, 0, SVt_PVIO);
9552         if (gv)
9553             io = GvIO(gv);
9554         else
9555             io = 0;
9556         if (!io) {
9557             SV *newsv = sv;
9558             if (SvGMAGICAL(sv)) {
9559                 newsv = sv_newmortal();
9560                 sv_setsv_nomg(newsv, sv);
9561             }
9562             Perl_croak(aTHX_ "Bad filehandle: %"SVf, SVfARG(newsv));
9563         }
9564         break;
9565     }
9566     return io;
9567 }
9568
9569 /*
9570 =for apidoc sv_2cv
9571
9572 Using various gambits, try to get a CV from an SV; in addition, try if
9573 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
9574 The flags in C<lref> are passed to gv_fetchsv.
9575
9576 =cut
9577 */
9578
9579 CV *
9580 Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
9581 {
9582     GV *gv = NULL;
9583     CV *cv = NULL;
9584
9585     PERL_ARGS_ASSERT_SV_2CV;
9586
9587     if (!sv) {
9588         *st = NULL;
9589         *gvp = NULL;
9590         return NULL;
9591     }
9592     switch (SvTYPE(sv)) {
9593     case SVt_PVCV:
9594         *st = CvSTASH(sv);
9595         *gvp = NULL;
9596         return MUTABLE_CV(sv);
9597     case SVt_PVHV:
9598     case SVt_PVAV:
9599         *st = NULL;
9600         *gvp = NULL;
9601         return NULL;
9602     default:
9603         SvGETMAGIC(sv);
9604         if (SvROK(sv)) {
9605             if (SvAMAGIC(sv))
9606                 sv = amagic_deref_call(sv, to_cv_amg);
9607
9608             sv = SvRV(sv);
9609             if (SvTYPE(sv) == SVt_PVCV) {
9610                 cv = MUTABLE_CV(sv);
9611                 *gvp = NULL;
9612                 *st = CvSTASH(cv);
9613                 return cv;
9614             }
9615             else if(SvGETMAGIC(sv), isGV_with_GP(sv))
9616                 gv = MUTABLE_GV(sv);
9617             else
9618                 Perl_croak(aTHX_ "Not a subroutine reference");
9619         }
9620         else if (isGV_with_GP(sv)) {
9621             gv = MUTABLE_GV(sv);
9622         }
9623         else {
9624             gv = gv_fetchsv_nomg(sv, lref, SVt_PVCV);
9625         }
9626         *gvp = gv;
9627         if (!gv) {
9628             *st = NULL;
9629             return NULL;
9630         }
9631         /* Some flags to gv_fetchsv mean don't really create the GV  */
9632         if (!isGV_with_GP(gv)) {
9633             *st = NULL;
9634             return NULL;
9635         }
9636         *st = GvESTASH(gv);
9637         if (lref & ~GV_ADDMG && !GvCVu(gv)) {
9638             /* XXX this is probably not what they think they're getting.
9639              * It has the same effect as "sub name;", i.e. just a forward
9640              * declaration! */
9641             newSTUB(gv,0);
9642         }
9643         return GvCVu(gv);
9644     }
9645 }
9646
9647 /*
9648 =for apidoc sv_true
9649
9650 Returns true if the SV has a true value by Perl's rules.
9651 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
9652 instead use an in-line version.
9653
9654 =cut
9655 */
9656
9657 I32
9658 Perl_sv_true(pTHX_ SV *const sv)
9659 {
9660     if (!sv)
9661         return 0;
9662     if (SvPOK(sv)) {
9663         const XPV* const tXpv = (XPV*)SvANY(sv);
9664         if (tXpv &&
9665                 (tXpv->xpv_cur > 1 ||
9666                 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
9667             return 1;
9668         else
9669             return 0;
9670     }
9671     else {
9672         if (SvIOK(sv))
9673             return SvIVX(sv) != 0;
9674         else {
9675             if (SvNOK(sv))
9676                 return SvNVX(sv) != 0.0;
9677             else
9678                 return sv_2bool(sv);
9679         }
9680     }
9681 }
9682
9683 /*
9684 =for apidoc sv_pvn_force
9685
9686 Get a sensible string out of the SV somehow.
9687 A private implementation of the C<SvPV_force> macro for compilers which
9688 can't cope with complex macro expressions.  Always use the macro instead.
9689
9690 =for apidoc sv_pvn_force_flags
9691
9692 Get a sensible string out of the SV somehow.
9693 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
9694 appropriate, else not.  C<sv_pvn_force> and C<sv_pvn_force_nomg> are
9695 implemented in terms of this function.
9696 You normally want to use the various wrapper macros instead: see
9697 C<SvPV_force> and C<SvPV_force_nomg>
9698
9699 =cut
9700 */
9701
9702 char *
9703 Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
9704 {
9705     PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
9706
9707     if (flags & SV_GMAGIC) SvGETMAGIC(sv);
9708     if (SvTHINKFIRST(sv) && (!SvROK(sv) || SvREADONLY(sv)))
9709         sv_force_normal_flags(sv, 0);
9710
9711     if (SvPOK(sv)) {
9712         if (lp)
9713             *lp = SvCUR(sv);
9714     }
9715     else {
9716         char *s;
9717         STRLEN len;
9718  
9719         if (SvTYPE(sv) > SVt_PVLV
9720             || isGV_with_GP(sv))
9721             /* diag_listed_as: Can't coerce %s to %s in %s */
9722             Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
9723                 OP_DESC(PL_op));
9724         s = sv_2pv_flags(sv, &len, flags &~ SV_GMAGIC);
9725         if (!s) {
9726           s = (char *)"";
9727         }
9728         if (lp)
9729             *lp = len;
9730
9731         if (SvTYPE(sv) < SVt_PV ||
9732             s != SvPVX_const(sv)) {     /* Almost, but not quite, sv_setpvn() */
9733             if (SvROK(sv))
9734                 sv_unref(sv);
9735             SvUPGRADE(sv, SVt_PV);              /* Never FALSE */
9736             SvGROW(sv, len + 1);
9737             Move(s,SvPVX(sv),len,char);
9738             SvCUR_set(sv, len);
9739             SvPVX(sv)[len] = '\0';
9740         }
9741         if (!SvPOK(sv)) {
9742             SvPOK_on(sv);               /* validate pointer */
9743             SvTAINT(sv);
9744             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
9745                                   PTR2UV(sv),SvPVX_const(sv)));
9746         }
9747     }
9748     (void)SvPOK_only_UTF8(sv);
9749     return SvPVX_mutable(sv);
9750 }
9751
9752 /*
9753 =for apidoc sv_pvbyten_force
9754
9755 The backend for the C<SvPVbytex_force> macro.  Always use the macro
9756 instead.
9757
9758 =cut
9759 */
9760
9761 char *
9762 Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
9763 {
9764     PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
9765
9766     sv_pvn_force(sv,lp);
9767     sv_utf8_downgrade(sv,0);
9768     *lp = SvCUR(sv);
9769     return SvPVX(sv);
9770 }
9771
9772 /*
9773 =for apidoc sv_pvutf8n_force
9774
9775 The backend for the C<SvPVutf8x_force> macro.  Always use the macro
9776 instead.
9777
9778 =cut
9779 */
9780
9781 char *
9782 Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
9783 {
9784     PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
9785
9786     sv_pvn_force(sv,0);
9787     sv_utf8_upgrade_nomg(sv);
9788     *lp = SvCUR(sv);
9789     return SvPVX(sv);
9790 }
9791
9792 /*
9793 =for apidoc sv_reftype
9794
9795 Returns a string describing what the SV is a reference to.
9796
9797 =cut
9798 */
9799
9800 const char *
9801 Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
9802 {
9803     PERL_ARGS_ASSERT_SV_REFTYPE;
9804     if (ob && SvOBJECT(sv)) {
9805         return SvPV_nolen_const(sv_ref(NULL, sv, ob));
9806     }
9807     else {
9808         /* WARNING - There is code, for instance in mg.c, that assumes that
9809          * the only reason that sv_reftype(sv,0) would return a string starting
9810          * with 'L' or 'S' is that it is a LVALUE or a SCALAR.
9811          * Yes this a dodgy way to do type checking, but it saves practically reimplementing
9812          * this routine inside other subs, and it saves time.
9813          * Do not change this assumption without searching for "dodgy type check" in
9814          * the code.
9815          * - Yves */
9816         switch (SvTYPE(sv)) {
9817         case SVt_NULL:
9818         case SVt_IV:
9819         case SVt_NV:
9820         case SVt_PV:
9821         case SVt_PVIV:
9822         case SVt_PVNV:
9823         case SVt_PVMG:
9824                                 if (SvVOK(sv))
9825                                     return "VSTRING";
9826                                 if (SvROK(sv))
9827                                     return "REF";
9828                                 else
9829                                     return "SCALAR";
9830
9831         case SVt_PVLV:          return (char *)  (SvROK(sv) ? "REF"
9832                                 /* tied lvalues should appear to be
9833                                  * scalars for backwards compatibility */
9834                                 : (isALPHA_FOLD_EQ(LvTYPE(sv), 't'))
9835                                     ? "SCALAR" : "LVALUE");
9836         case SVt_PVAV:          return "ARRAY";
9837         case SVt_PVHV:          return "HASH";
9838         case SVt_PVCV:          return "CODE";
9839         case SVt_PVGV:          return (char *) (isGV_with_GP(sv)
9840                                     ? "GLOB" : "SCALAR");
9841         case SVt_PVFM:          return "FORMAT";
9842         case SVt_PVIO:          return "IO";
9843         case SVt_INVLIST:       return "INVLIST";
9844         case SVt_REGEXP:        return "REGEXP";
9845         default:                return "UNKNOWN";
9846         }
9847     }
9848 }
9849
9850 /*
9851 =for apidoc sv_ref
9852
9853 Returns a SV describing what the SV passed in is a reference to.
9854
9855 =cut
9856 */
9857
9858 SV *
9859 Perl_sv_ref(pTHX_ SV *dst, const SV *const sv, const int ob)
9860 {
9861     PERL_ARGS_ASSERT_SV_REF;
9862
9863     if (!dst)
9864         dst = sv_newmortal();
9865
9866     if (ob && SvOBJECT(sv)) {
9867         HvNAME_get(SvSTASH(sv))
9868                     ? sv_sethek(dst, HvNAME_HEK(SvSTASH(sv)))
9869                     : sv_setpvn(dst, "__ANON__", 8);
9870     }
9871     else {
9872         const char * reftype = sv_reftype(sv, 0);
9873         sv_setpv(dst, reftype);
9874     }
9875     return dst;
9876 }
9877
9878 /*
9879 =for apidoc sv_isobject
9880
9881 Returns a boolean indicating whether the SV is an RV pointing to a blessed
9882 object.  If the SV is not an RV, or if the object is not blessed, then this
9883 will return false.
9884
9885 =cut
9886 */
9887
9888 int
9889 Perl_sv_isobject(pTHX_ SV *sv)
9890 {
9891     if (!sv)
9892         return 0;
9893     SvGETMAGIC(sv);
9894     if (!SvROK(sv))
9895         return 0;
9896     sv = SvRV(sv);
9897     if (!SvOBJECT(sv))
9898         return 0;
9899     return 1;
9900 }
9901
9902 /*
9903 =for apidoc sv_isa
9904
9905 Returns a boolean indicating whether the SV is blessed into the specified
9906 class.  This does not check for subtypes; use C<sv_derived_from> to verify
9907 an inheritance relationship.
9908
9909 =cut
9910 */
9911
9912 int
9913 Perl_sv_isa(pTHX_ SV *sv, const char *const name)
9914 {
9915     const char *hvname;
9916
9917     PERL_ARGS_ASSERT_SV_ISA;
9918
9919     if (!sv)
9920         return 0;
9921     SvGETMAGIC(sv);
9922     if (!SvROK(sv))
9923         return 0;
9924     sv = SvRV(sv);
9925     if (!SvOBJECT(sv))
9926         return 0;
9927     hvname = HvNAME_get(SvSTASH(sv));
9928     if (!hvname)
9929         return 0;
9930
9931     return strEQ(hvname, name);
9932 }
9933
9934 /*
9935 =for apidoc newSVrv
9936
9937 Creates a new SV for the existing RV, C<rv>, to point to.  If C<rv> is not an
9938 RV then it will be upgraded to one.  If C<classname> is non-null then the new
9939 SV will be blessed in the specified package.  The new SV is returned and its
9940 reference count is 1.  The reference count 1 is owned by C<rv>.
9941
9942 =cut
9943 */
9944
9945 SV*
9946 Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
9947 {
9948     SV *sv;
9949
9950     PERL_ARGS_ASSERT_NEWSVRV;
9951
9952     new_SV(sv);
9953
9954     SV_CHECK_THINKFIRST_COW_DROP(rv);
9955
9956     if (UNLIKELY( SvTYPE(rv) >= SVt_PVMG )) {
9957         const U32 refcnt = SvREFCNT(rv);
9958         SvREFCNT(rv) = 0;
9959         sv_clear(rv);
9960         SvFLAGS(rv) = 0;
9961         SvREFCNT(rv) = refcnt;
9962
9963         sv_upgrade(rv, SVt_IV);
9964     } else if (SvROK(rv)) {
9965         SvREFCNT_dec(SvRV(rv));
9966     } else {
9967         prepare_SV_for_RV(rv);
9968     }
9969
9970     SvOK_off(rv);
9971     SvRV_set(rv, sv);
9972     SvROK_on(rv);
9973
9974     if (classname) {
9975         HV* const stash = gv_stashpv(classname, GV_ADD);
9976         (void)sv_bless(rv, stash);
9977     }
9978     return sv;
9979 }
9980
9981 SV *
9982 Perl_newSVavdefelem(pTHX_ AV *av, SSize_t ix, bool extendible)
9983 {
9984     SV * const lv = newSV_type(SVt_PVLV);
9985     PERL_ARGS_ASSERT_NEWSVAVDEFELEM;
9986     LvTYPE(lv) = 'y';
9987     sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
9988     LvTARG(lv) = SvREFCNT_inc_simple_NN(av);
9989     LvSTARGOFF(lv) = ix;
9990     LvTARGLEN(lv) = extendible ? 1 : (STRLEN)UV_MAX;
9991     return lv;
9992 }
9993
9994 /*
9995 =for apidoc sv_setref_pv
9996
9997 Copies a pointer into a new SV, optionally blessing the SV.  The C<rv>
9998 argument will be upgraded to an RV.  That RV will be modified to point to
9999 the new SV.  If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
10000 into the SV.  The C<classname> argument indicates the package for the
10001 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10002 will have a reference count of 1, and the RV will be returned.
10003
10004 Do not use with other Perl types such as HV, AV, SV, CV, because those
10005 objects will become corrupted by the pointer copy process.
10006
10007 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
10008
10009 =cut
10010 */
10011
10012 SV*
10013 Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
10014 {
10015     PERL_ARGS_ASSERT_SV_SETREF_PV;
10016
10017     if (!pv) {
10018         sv_setsv(rv, &PL_sv_undef);
10019         SvSETMAGIC(rv);
10020     }
10021     else
10022         sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
10023     return rv;
10024 }
10025
10026 /*
10027 =for apidoc sv_setref_iv
10028
10029 Copies an integer into a new SV, optionally blessing the SV.  The C<rv>
10030 argument will be upgraded to an RV.  That RV will be modified to point to
10031 the new SV.  The C<classname> argument indicates the package for the
10032 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10033 will have a reference count of 1, and the RV will be returned.
10034
10035 =cut
10036 */
10037
10038 SV*
10039 Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
10040 {
10041     PERL_ARGS_ASSERT_SV_SETREF_IV;
10042
10043     sv_setiv(newSVrv(rv,classname), iv);
10044     return rv;
10045 }
10046
10047 /*
10048 =for apidoc sv_setref_uv
10049
10050 Copies an unsigned integer into a new SV, optionally blessing the SV.  The C<rv>
10051 argument will be upgraded to an RV.  That RV will be modified to point to
10052 the new SV.  The C<classname> argument indicates the package for the
10053 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10054 will have a reference count of 1, and the RV will be returned.
10055
10056 =cut
10057 */
10058
10059 SV*
10060 Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
10061 {
10062     PERL_ARGS_ASSERT_SV_SETREF_UV;
10063
10064     sv_setuv(newSVrv(rv,classname), uv);
10065     return rv;
10066 }
10067
10068 /*
10069 =for apidoc sv_setref_nv
10070
10071 Copies a double into a new SV, optionally blessing the SV.  The C<rv>
10072 argument will be upgraded to an RV.  That RV will be modified to point to
10073 the new SV.  The C<classname> argument indicates the package for the
10074 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10075 will have a reference count of 1, and the RV will be returned.
10076
10077 =cut
10078 */
10079
10080 SV*
10081 Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
10082 {
10083     PERL_ARGS_ASSERT_SV_SETREF_NV;
10084
10085     sv_setnv(newSVrv(rv,classname), nv);
10086     return rv;
10087 }
10088
10089 /*
10090 =for apidoc sv_setref_pvn
10091
10092 Copies a string into a new SV, optionally blessing the SV.  The length of the
10093 string must be specified with C<n>.  The C<rv> argument will be upgraded to
10094 an RV.  That RV will be modified to point to the new SV.  The C<classname>
10095 argument indicates the package for the blessing.  Set C<classname> to
10096 C<NULL> to avoid the blessing.  The new SV will have a reference count
10097 of 1, and the RV will be returned.
10098
10099 Note that C<sv_setref_pv> copies the pointer while this copies the string.
10100
10101 =cut
10102 */
10103
10104 SV*
10105 Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
10106                    const char *const pv, const STRLEN n)
10107 {
10108     PERL_ARGS_ASSERT_SV_SETREF_PVN;
10109
10110     sv_setpvn(newSVrv(rv,classname), pv, n);
10111     return rv;
10112 }
10113
10114 /*
10115 =for apidoc sv_bless
10116
10117 Blesses an SV into a specified package.  The SV must be an RV.  The package
10118 must be designated by its stash (see C<gv_stashpv()>).  The reference count
10119 of the SV is unaffected.
10120
10121 =cut
10122 */
10123
10124 SV*
10125 Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
10126 {
10127     SV *tmpRef;
10128     HV *oldstash = NULL;
10129
10130     PERL_ARGS_ASSERT_SV_BLESS;
10131
10132     SvGETMAGIC(sv);
10133     if (!SvROK(sv))
10134         Perl_croak(aTHX_ "Can't bless non-reference value");
10135     tmpRef = SvRV(sv);
10136     if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY|SVf_PROTECT)) {
10137         if (SvREADONLY(tmpRef))
10138             Perl_croak_no_modify();
10139         if (SvOBJECT(tmpRef)) {
10140             oldstash = SvSTASH(tmpRef);
10141         }
10142     }
10143     SvOBJECT_on(tmpRef);
10144     SvUPGRADE(tmpRef, SVt_PVMG);
10145     SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
10146     SvREFCNT_dec(oldstash);
10147
10148     if(SvSMAGICAL(tmpRef))
10149         if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
10150             mg_set(tmpRef);
10151
10152
10153
10154     return sv;
10155 }
10156
10157 /* Downgrades a PVGV to a PVMG. If it's actually a PVLV, we leave the type
10158  * as it is after unglobbing it.
10159  */
10160
10161 PERL_STATIC_INLINE void
10162 S_sv_unglob(pTHX_ SV *const sv, U32 flags)
10163 {
10164     void *xpvmg;
10165     HV *stash;
10166     SV * const temp = flags & SV_COW_DROP_PV ? NULL : sv_newmortal();
10167
10168     PERL_ARGS_ASSERT_SV_UNGLOB;
10169
10170     assert(SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV);
10171     SvFAKE_off(sv);
10172     if (!(flags & SV_COW_DROP_PV))
10173         gv_efullname3(temp, MUTABLE_GV(sv), "*");
10174
10175     SvREFCNT_inc_simple_void_NN(sv_2mortal(sv));
10176     if (GvGP(sv)) {
10177         if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
10178            && HvNAME_get(stash))
10179             mro_method_changed_in(stash);
10180         gp_free(MUTABLE_GV(sv));
10181     }
10182     if (GvSTASH(sv)) {
10183         sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
10184         GvSTASH(sv) = NULL;
10185     }
10186     GvMULTI_off(sv);
10187     if (GvNAME_HEK(sv)) {
10188         unshare_hek(GvNAME_HEK(sv));
10189     }
10190     isGV_with_GP_off(sv);
10191
10192     if(SvTYPE(sv) == SVt_PVGV) {
10193         /* need to keep SvANY(sv) in the right arena */
10194         xpvmg = new_XPVMG();
10195         StructCopy(SvANY(sv), xpvmg, XPVMG);
10196         del_XPVGV(SvANY(sv));
10197         SvANY(sv) = xpvmg;
10198
10199         SvFLAGS(sv) &= ~SVTYPEMASK;
10200         SvFLAGS(sv) |= SVt_PVMG;
10201     }
10202
10203     /* Intentionally not calling any local SET magic, as this isn't so much a
10204        set operation as merely an internal storage change.  */
10205     if (flags & SV_COW_DROP_PV) SvOK_off(sv);
10206     else sv_setsv_flags(sv, temp, 0);
10207
10208     if ((const GV *)sv == PL_last_in_gv)
10209         PL_last_in_gv = NULL;
10210     else if ((const GV *)sv == PL_statgv)
10211         PL_statgv = NULL;
10212 }
10213
10214 /*
10215 =for apidoc sv_unref_flags
10216
10217 Unsets the RV status of the SV, and decrements the reference count of
10218 whatever was being referenced by the RV.  This can almost be thought of
10219 as a reversal of C<newSVrv>.  The C<cflags> argument can contain
10220 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
10221 (otherwise the decrementing is conditional on the reference count being
10222 different from one or the reference being a readonly SV).
10223 See C<SvROK_off>.
10224
10225 =cut
10226 */
10227
10228 void
10229 Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
10230 {
10231     SV* const target = SvRV(ref);
10232
10233     PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
10234
10235     if (SvWEAKREF(ref)) {
10236         sv_del_backref(target, ref);
10237         SvWEAKREF_off(ref);
10238         SvRV_set(ref, NULL);
10239         return;
10240     }
10241     SvRV_set(ref, NULL);
10242     SvROK_off(ref);
10243     /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
10244        assigned to as BEGIN {$a = \"Foo"} will fail.  */
10245     if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
10246         SvREFCNT_dec_NN(target);
10247     else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
10248         sv_2mortal(target);     /* Schedule for freeing later */
10249 }
10250
10251 /*
10252 =for apidoc sv_untaint
10253
10254 Untaint an SV.  Use C<SvTAINTED_off> instead.
10255
10256 =cut
10257 */
10258
10259 void
10260 Perl_sv_untaint(pTHX_ SV *const sv)
10261 {
10262     PERL_ARGS_ASSERT_SV_UNTAINT;
10263     PERL_UNUSED_CONTEXT;
10264
10265     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
10266         MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
10267         if (mg)
10268             mg->mg_len &= ~1;
10269     }
10270 }
10271
10272 /*
10273 =for apidoc sv_tainted
10274
10275 Test an SV for taintedness.  Use C<SvTAINTED> instead.
10276
10277 =cut
10278 */
10279
10280 bool
10281 Perl_sv_tainted(pTHX_ SV *const sv)
10282 {
10283     PERL_ARGS_ASSERT_SV_TAINTED;
10284     PERL_UNUSED_CONTEXT;
10285
10286     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
10287         const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
10288         if (mg && (mg->mg_len & 1) )
10289             return TRUE;
10290     }
10291     return FALSE;
10292 }
10293
10294 /*
10295 =for apidoc sv_setpviv
10296
10297 Copies an integer into the given SV, also updating its string value.
10298 Does not handle 'set' magic.  See C<sv_setpviv_mg>.
10299
10300 =cut
10301 */
10302
10303 void
10304 Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
10305 {
10306     char buf[TYPE_CHARS(UV)];
10307     char *ebuf;
10308     char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
10309
10310     PERL_ARGS_ASSERT_SV_SETPVIV;
10311
10312     sv_setpvn(sv, ptr, ebuf - ptr);
10313 }
10314
10315 /*
10316 =for apidoc sv_setpviv_mg
10317
10318 Like C<sv_setpviv>, but also handles 'set' magic.
10319
10320 =cut
10321 */
10322
10323 void
10324 Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
10325 {
10326     PERL_ARGS_ASSERT_SV_SETPVIV_MG;
10327
10328     sv_setpviv(sv, iv);
10329     SvSETMAGIC(sv);
10330 }
10331
10332 #if defined(PERL_IMPLICIT_CONTEXT)
10333
10334 /* pTHX_ magic can't cope with varargs, so this is a no-context
10335  * version of the main function, (which may itself be aliased to us).
10336  * Don't access this version directly.
10337  */
10338
10339 void
10340 Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
10341 {
10342     dTHX;
10343     va_list args;
10344
10345     PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
10346
10347     va_start(args, pat);
10348     sv_vsetpvf(sv, pat, &args);
10349     va_end(args);
10350 }
10351
10352 /* pTHX_ magic can't cope with varargs, so this is a no-context
10353  * version of the main function, (which may itself be aliased to us).
10354  * Don't access this version directly.
10355  */
10356
10357 void
10358 Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10359 {
10360     dTHX;
10361     va_list args;
10362
10363     PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
10364
10365     va_start(args, pat);
10366     sv_vsetpvf_mg(sv, pat, &args);
10367     va_end(args);
10368 }
10369 #endif
10370
10371 /*
10372 =for apidoc sv_setpvf
10373
10374 Works like C<sv_catpvf> but copies the text into the SV instead of
10375 appending it.  Does not handle 'set' magic.  See C<sv_setpvf_mg>.
10376
10377 =cut
10378 */
10379
10380 void
10381 Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
10382 {
10383     va_list args;
10384
10385     PERL_ARGS_ASSERT_SV_SETPVF;
10386
10387     va_start(args, pat);
10388     sv_vsetpvf(sv, pat, &args);
10389     va_end(args);
10390 }
10391
10392 /*
10393 =for apidoc sv_vsetpvf
10394
10395 Works like C<sv_vcatpvf> but copies the text into the SV instead of
10396 appending it.  Does not handle 'set' magic.  See C<sv_vsetpvf_mg>.
10397
10398 Usually used via its frontend C<sv_setpvf>.
10399
10400 =cut
10401 */
10402
10403 void
10404 Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10405 {
10406     PERL_ARGS_ASSERT_SV_VSETPVF;
10407
10408     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10409 }
10410
10411 /*
10412 =for apidoc sv_setpvf_mg
10413
10414 Like C<sv_setpvf>, but also handles 'set' magic.
10415
10416 =cut
10417 */
10418
10419 void
10420 Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10421 {
10422     va_list args;
10423
10424     PERL_ARGS_ASSERT_SV_SETPVF_MG;
10425
10426     va_start(args, pat);
10427     sv_vsetpvf_mg(sv, pat, &args);
10428     va_end(args);
10429 }
10430
10431 /*
10432 =for apidoc sv_vsetpvf_mg
10433
10434 Like C<sv_vsetpvf>, but also handles 'set' magic.
10435
10436 Usually used via its frontend C<sv_setpvf_mg>.
10437
10438 =cut
10439 */
10440
10441 void
10442 Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10443 {
10444     PERL_ARGS_ASSERT_SV_VSETPVF_MG;
10445
10446     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10447     SvSETMAGIC(sv);
10448 }
10449
10450 #if defined(PERL_IMPLICIT_CONTEXT)
10451
10452 /* pTHX_ magic can't cope with varargs, so this is a no-context
10453  * version of the main function, (which may itself be aliased to us).
10454  * Don't access this version directly.
10455  */
10456
10457 void
10458 Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
10459 {
10460     dTHX;
10461     va_list args;
10462
10463     PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
10464
10465     va_start(args, pat);
10466     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10467     va_end(args);
10468 }
10469
10470 /* pTHX_ magic can't cope with varargs, so this is a no-context
10471  * version of the main function, (which may itself be aliased to us).
10472  * Don't access this version directly.
10473  */
10474
10475 void
10476 Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10477 {
10478     dTHX;
10479     va_list args;
10480
10481     PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
10482
10483     va_start(args, pat);
10484     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10485     SvSETMAGIC(sv);
10486     va_end(args);
10487 }
10488 #endif
10489
10490 /*
10491 =for apidoc sv_catpvf
10492
10493 Processes its arguments like C<sv_catpvfn>, and appends the formatted
10494 output to an SV.  As with C<sv_catpvfn> called with a non-null C-style
10495 variable argument list, argument reordering is not supported.
10496 If the appended data contains "wide" characters
10497 (including, but not limited to, SVs with a UTF-8 PV formatted with %s,
10498 and characters >255 formatted with %c), the original SV might get
10499 upgraded to UTF-8.  Handles 'get' magic, but not 'set' magic.  See
10500 C<sv_catpvf_mg>.  If the original SV was UTF-8, the pattern should be
10501 valid UTF-8; if the original SV was bytes, the pattern should be too.
10502
10503 =cut */
10504
10505 void
10506 Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
10507 {
10508     va_list args;
10509
10510     PERL_ARGS_ASSERT_SV_CATPVF;
10511
10512     va_start(args, pat);
10513     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10514     va_end(args);
10515 }
10516
10517 /*
10518 =for apidoc sv_vcatpvf
10519
10520 Processes its arguments like C<sv_catpvfn> called with a non-null C-style
10521 variable argument list, and appends the formatted
10522 to an SV.  Does not handle 'set' magic.  See C<sv_vcatpvf_mg>.
10523
10524 Usually used via its frontend C<sv_catpvf>.
10525
10526 =cut
10527 */
10528
10529 void
10530 Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10531 {
10532     PERL_ARGS_ASSERT_SV_VCATPVF;
10533
10534     sv_vcatpvfn_flags(sv, pat, strlen(pat), args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10535 }
10536
10537 /*
10538 =for apidoc sv_catpvf_mg
10539
10540 Like C<sv_catpvf>, but also handles 'set' magic.
10541
10542 =cut
10543 */
10544
10545 void
10546 Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10547 {
10548     va_list args;
10549
10550     PERL_ARGS_ASSERT_SV_CATPVF_MG;
10551
10552     va_start(args, pat);
10553     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10554     SvSETMAGIC(sv);
10555     va_end(args);
10556 }
10557
10558 /*
10559 =for apidoc sv_vcatpvf_mg
10560
10561 Like C<sv_vcatpvf>, but also handles 'set' magic.
10562
10563 Usually used via its frontend C<sv_catpvf_mg>.
10564
10565 =cut
10566 */
10567
10568 void
10569 Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10570 {
10571     PERL_ARGS_ASSERT_SV_VCATPVF_MG;
10572
10573     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10574     SvSETMAGIC(sv);
10575 }
10576
10577 /*
10578 =for apidoc sv_vsetpvfn
10579
10580 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
10581 appending it.
10582
10583 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
10584
10585 =cut
10586 */
10587
10588 void
10589 Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10590                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10591 {
10592     PERL_ARGS_ASSERT_SV_VSETPVFN;
10593
10594     sv_setpvs(sv, "");
10595     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, 0);
10596 }
10597
10598
10599 /*
10600  * Warn of missing argument to sprintf. The value used in place of such
10601  * arguments should be &PL_sv_no; an undefined value would yield
10602  * inappropriate "use of uninit" warnings [perl #71000].
10603  */
10604 STATIC void
10605 S_warn_vcatpvfn_missing_argument(pTHX) {
10606     if (ckWARN(WARN_MISSING)) {
10607         Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
10608                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
10609     }
10610 }
10611
10612
10613 STATIC I32
10614 S_expect_number(pTHX_ char **const pattern)
10615 {
10616     I32 var = 0;
10617
10618     PERL_ARGS_ASSERT_EXPECT_NUMBER;
10619
10620     switch (**pattern) {
10621     case '1': case '2': case '3':
10622     case '4': case '5': case '6':
10623     case '7': case '8': case '9':
10624         var = *(*pattern)++ - '0';
10625         while (isDIGIT(**pattern)) {
10626             const I32 tmp = var * 10 + (*(*pattern)++ - '0');
10627             if (tmp < var)
10628                 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
10629             var = tmp;
10630         }
10631     }
10632     return var;
10633 }
10634
10635 STATIC char *
10636 S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
10637 {
10638     const int neg = nv < 0;
10639     UV uv;
10640
10641     PERL_ARGS_ASSERT_F0CONVERT;
10642
10643     if (UNLIKELY(Perl_isinfnan(nv))) {
10644         STRLEN n = S_infnan_2pv(nv, endbuf - *len, *len, 0);
10645         *len = n;
10646         return endbuf - n;
10647     }
10648     if (neg)
10649         nv = -nv;
10650     if (nv < UV_MAX) {
10651         char *p = endbuf;
10652         nv += 0.5;
10653         uv = (UV)nv;
10654         if (uv & 1 && uv == nv)
10655             uv--;                       /* Round to even */
10656         do {
10657             const unsigned dig = uv % 10;
10658             *--p = '0' + dig;
10659         } while (uv /= 10);
10660         if (neg)
10661             *--p = '-';
10662         *len = endbuf - p;
10663         return p;
10664     }
10665     return NULL;
10666 }
10667
10668
10669 /*
10670 =for apidoc sv_vcatpvfn
10671
10672 =for apidoc sv_vcatpvfn_flags
10673
10674 Processes its arguments like C<vsprintf> and appends the formatted output
10675 to an SV.  Uses an array of SVs if the C-style variable argument list is
10676 missing (NULL). Argument reordering (using format specifiers like C<%2$d>
10677 or C<%*2$d>) is supported only when using an array of SVs; using a C-style
10678 C<va_list> argument list with a format string that uses argument reordering
10679 will yield an exception.
10680
10681 When running with taint checks enabled, indicates via
10682 C<maybe_tainted> if results are untrustworthy (often due to the use of
10683 locales).
10684
10685 If called as C<sv_vcatpvfn> or flags include C<SV_GMAGIC>, calls get magic.
10686
10687 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
10688
10689 =cut
10690 */
10691
10692 #define VECTORIZE_ARGS  vecsv = va_arg(*args, SV*);\
10693                         vecstr = (U8*)SvPV_const(vecsv,veclen);\
10694                         vec_utf8 = DO_UTF8(vecsv);
10695
10696 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
10697
10698 void
10699 Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10700                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10701 {
10702     PERL_ARGS_ASSERT_SV_VCATPVFN;
10703
10704     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, SV_GMAGIC|SV_SMAGIC);
10705 }
10706
10707 #ifdef LONGDOUBLE_DOUBLEDOUBLE
10708 /* The first double can be as large as 2**1023, or '1' x '0' x 1023.
10709  * The second double can be as small as 2**-1074, or '0' x 1073 . '1'.
10710  * The sum of them can be '1' . '0' x 2096 . '1', with implied radix point
10711  * after the first 1023 zero bits.
10712  *
10713  * XXX The 2098 is quite large (262.25 bytes) and therefore some sort
10714  * of dynamically growing buffer might be better, start at just 16 bytes
10715  * (for example) and grow only when necessary.  Or maybe just by looking
10716  * at the exponents of the two doubles? */
10717 #  define DOUBLEDOUBLE_MAXBITS 2098
10718 #endif
10719
10720 /* vhex will contain the values (0..15) of the hex digits ("nybbles"
10721  * of 4 bits); 1 for the implicit 1, and the mantissa bits, four bits
10722  * per xdigit.  For the double-double case, this can be rather many.
10723  * The non-double-double-long-double overshoots since all bits of NV
10724  * are not mantissa bits, there are also exponent bits. */
10725 #ifdef LONGDOUBLE_DOUBLEDOUBLE
10726 #  define VHEX_SIZE (1+DOUBLEDOUBLE_MAXBITS/4)
10727 #else
10728 #  define VHEX_SIZE (1+(NVSIZE * 8)/4)
10729 #endif
10730
10731 /* If we do not have a known long double format, (including not using
10732  * long doubles, or long doubles being equal to doubles) then we will
10733  * fall back to the ldexp/frexp route, with which we can retrieve at
10734  * most as many bits as our widest unsigned integer type is.  We try
10735  * to get a 64-bit unsigned integer even if we are not using a 64-bit UV.
10736  *
10737  * (If you want to test the case of UVSIZE == 4, NVSIZE == 8,
10738  *  set the MANTISSATYPE to int and the MANTISSASIZE to 4.)
10739  */
10740 #if defined(HAS_QUAD) && defined(Uquad_t)
10741 #  define MANTISSATYPE Uquad_t
10742 #  define MANTISSASIZE 8
10743 #else
10744 #  define MANTISSATYPE UV
10745 #  define MANTISSASIZE UVSIZE
10746 #endif
10747
10748 #if defined(DOUBLE_LITTLE_ENDIAN) || defined(LONGDOUBLE_LITTLE_ENDIAN)
10749 #  define HEXTRACT_LITTLE_ENDIAN
10750 #elif defined(DOUBLE_BIG_ENDIAN) || defined(LONGDOUBLE_BIG_ENDIAN)
10751 #  define HEXTRACT_BIG_ENDIAN
10752 #else
10753 #  define HEXTRACT_MIX_ENDIAN
10754 #endif
10755
10756 /* S_hextract() is a helper for Perl_sv_vcatpvfn_flags, for extracting
10757  * the hexadecimal values (for %a/%A).  The nv is the NV where the value
10758  * are being extracted from (either directly from the long double in-memory
10759  * presentation, or from the uquad computed via frexp+ldexp).  frexp also
10760  * is used to update the exponent.  vhex is the pointer to the beginning
10761  * of the output buffer (of VHEX_SIZE).
10762  *
10763  * The tricky part is that S_hextract() needs to be called twice:
10764  * the first time with vend as NULL, and the second time with vend as
10765  * the pointer returned by the first call.  What happens is that on
10766  * the first round the output size is computed, and the intended
10767  * extraction sanity checked.  On the second round the actual output
10768  * (the extraction of the hexadecimal values) takes place.
10769  * Sanity failures cause fatal failures during both rounds. */
10770 STATIC U8*
10771 S_hextract(pTHX_ const NV nv, int* exponent, U8* vhex, U8* vend)
10772 {
10773     U8* v = vhex;
10774     int ix;
10775     int ixmin = 0, ixmax = 0;
10776
10777     /* XXX Inf/NaN/denormal handling in the HEXTRACT_IMPLICIT_BIT,
10778      * and elsewhere. */
10779
10780     /* These macros are just to reduce typos, they have multiple
10781      * repetitions below, but usually only one (or sometimes two)
10782      * of them is really being used. */
10783     /* HEXTRACT_OUTPUT() extracts the high nybble first. */
10784 #define HEXTRACT_OUTPUT_HI(ix) (*v++ = nvp[ix] >> 4)
10785 #define HEXTRACT_OUTPUT_LO(ix) (*v++ = nvp[ix] & 0xF)
10786 #define HEXTRACT_OUTPUT(ix) \
10787     STMT_START { \
10788       HEXTRACT_OUTPUT_HI(ix); HEXTRACT_OUTPUT_LO(ix); \
10789    } STMT_END
10790 #define HEXTRACT_COUNT(ix, c) \
10791     STMT_START { \
10792       v += c; if (ix < ixmin) ixmin = ix; else if (ix > ixmax) ixmax = ix; \
10793    } STMT_END
10794 #define HEXTRACT_BYTE(ix) \
10795     STMT_START { \
10796       if (vend) HEXTRACT_OUTPUT(ix); else HEXTRACT_COUNT(ix, 2); \
10797    } STMT_END
10798 #define HEXTRACT_LO_NYBBLE(ix) \
10799     STMT_START { \
10800       if (vend) HEXTRACT_OUTPUT_LO(ix); else HEXTRACT_COUNT(ix, 1); \
10801    } STMT_END
10802     /* HEXTRACT_TOP_NYBBLE is just convenience disguise,
10803      * to make it look less odd when the top bits of a NV
10804      * are extracted using HEXTRACT_LO_NYBBLE: the highest
10805      * order bits can be in the "low nybble" of a byte. */
10806 #define HEXTRACT_TOP_NYBBLE(ix) HEXTRACT_LO_NYBBLE(ix)
10807 #define HEXTRACT_BYTES_LE(a, b) \
10808     for (ix = a; ix >= b; ix--) { HEXTRACT_BYTE(ix); }
10809 #define HEXTRACT_BYTES_BE(a, b) \
10810     for (ix = a; ix <= b; ix++) { HEXTRACT_BYTE(ix); }
10811 #define HEXTRACT_IMPLICIT_BIT(nv) \
10812     STMT_START { \
10813         if (vend) *v++ = ((nv) == 0.0) ? 0 : 1; else v++; \
10814    } STMT_END
10815
10816 /* Most formats do.  Those which don't should undef this. */
10817 #define HEXTRACT_HAS_IMPLICIT_BIT
10818 /* Many formats do.  Those which don't should undef this. */
10819 #define HEXTRACT_HAS_TOP_NYBBLE
10820
10821     /* HEXTRACTSIZE is the maximum number of xdigits. */
10822 #if defined(USE_LONG_DOUBLE) && defined(LONGDOUBLE_DOUBLEDOUBLE)
10823 #  define HEXTRACTSIZE (DOUBLEDOUBLE_MAXBITS/4)
10824 #else
10825 #  define HEXTRACTSIZE 2 * NVSIZE
10826 #endif
10827
10828     const U8* vmaxend = vhex + HEXTRACTSIZE;
10829     PERL_UNUSED_VAR(ix); /* might happen */
10830     (void)Perl_frexp(PERL_ABS(nv), exponent);
10831     if (vend && (vend <= vhex || vend > vmaxend))
10832         Perl_croak(aTHX_ "Hexadecimal float: internal error");
10833     {
10834         /* First check if using long doubles. */
10835 #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE)
10836 #  if LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN
10837         /* Used in e.g. VMS and HP-UX IA-64, e.g. -0.1L:
10838          * 9a 99 99 99 99 99 99 99 99 99 99 99 99 99 fb 3f */
10839         /* The bytes 13..0 are the mantissa/fraction,
10840          * the 15,14 are the sign+exponent. */
10841         const U8* nvp = (const U8*)(&nv);
10842         HEXTRACT_IMPLICIT_BIT(nv);
10843 #   undef HEXTRACT_HAS_TOP_NYBBLE
10844         HEXTRACT_BYTES_LE(13, 0);
10845 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN
10846         /* Used in e.g. Solaris Sparc and HP-UX PA-RISC, e.g. -0.1L:
10847          * bf fb 99 99 99 99 99 99 99 99 99 99 99 99 99 9a */
10848         /* The bytes 2..15 are the mantissa/fraction,
10849          * the 0,1 are the sign+exponent. */
10850         const U8* nvp = (const U8*)(&nv);
10851         HEXTRACT_IMPLICIT_BIT(nv);
10852 #   undef HEXTRACT_HAS_TOP_NYBBLE
10853         HEXTRACT_BYTES_BE(2, 15);
10854 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN
10855         /* x86 80-bit "extended precision", 64 bits of mantissa / fraction /
10856          * significand, 15 bits of exponent, 1 bit of sign.  NVSIZE can
10857          * be either 12 (ILP32, Solaris x86) or 16 (LP64, Linux and OS X),
10858          * meaning that 2 or 6 bytes are empty padding. */
10859         /* The bytes 7..0 are the mantissa/fraction */
10860         const U8* nvp = (const U8*)(&nv);
10861 #    undef HEXTRACT_HAS_IMPLICIT_BIT
10862 #    undef HEXTRACT_HAS_TOP_NYBBLE
10863         HEXTRACT_BYTES_LE(7, 0);
10864 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN
10865         /* Does this format ever happen? (Wikipedia says the Motorola
10866          * 6888x math coprocessors used format _like_ this but padded
10867          * to 96 bits with 16 unused bits between the exponent and the
10868          * mantissa.) */
10869         const U8* nvp = (const U8*)(&nv);
10870 #    undef HEXTRACT_HAS_IMPLICIT_BIT
10871 #    undef HEXTRACT_HAS_TOP_NYBBLE
10872         HEXTRACT_BYTES_BE(0, 7);
10873 #  else
10874 #    define HEXTRACT_FALLBACK
10875         /* Double-double format: two doubles next to each other.
10876          * The first double is the high-order one, exactly like
10877          * it would be for a "lone" double.  The second double
10878          * is shifted down using the exponent so that that there
10879          * are no common bits.  The tricky part is that the value
10880          * of the double-double is the SUM of the two doubles and
10881          * the second one can be also NEGATIVE.
10882          *
10883          * Because of this tricky construction the bytewise extraction we
10884          * use for the other long double formats doesn't work, we must
10885          * extract the values bit by bit.
10886          *
10887          * The little-endian double-double is used .. somewhere?
10888          *
10889          * The big endian double-double is used in e.g. PPC/Power (AIX)
10890          * and MIPS (SGI).
10891          *
10892          * The mantissa bits are in two separate stretches, e.g. for -0.1L:
10893          * 9a 99 99 99 99 99 59 bc 9a 99 99 99 99 99 b9 3f (LE)
10894          * 3f b9 99 99 99 99 99 9a bc 59 99 99 99 99 99 9a (BE)
10895          */
10896 #  endif
10897 #else /* #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE) */
10898         /* Using normal doubles, not long doubles.
10899          *
10900          * We generate 4-bit xdigits (nybble/nibble) instead of 8-bit
10901          * bytes, since we might need to handle printf precision, and
10902          * also need to insert the radix. */
10903 #  if NVSIZE == 8
10904 #    ifdef HEXTRACT_LITTLE_ENDIAN
10905         /* 0 1 2 3 4 5 6 7 (MSB = 7, LSB = 0, 6+7 = exponent+sign) */
10906         const U8* nvp = (const U8*)(&nv);
10907         HEXTRACT_IMPLICIT_BIT(nv);
10908         HEXTRACT_TOP_NYBBLE(6);
10909         HEXTRACT_BYTES_LE(5, 0);
10910 #    elif defined(HEXTRACT_BIG_ENDIAN)
10911         /* 7 6 5 4 3 2 1 0 (MSB = 7, LSB = 0, 6+7 = exponent+sign) */
10912         const U8* nvp = (const U8*)(&nv);
10913         HEXTRACT_IMPLICIT_BIT(nv);
10914         HEXTRACT_TOP_NYBBLE(1);
10915         HEXTRACT_BYTES_BE(2, 7);
10916 #    elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_LE_BE
10917         /* 4 5 6 7 0 1 2 3 (MSB = 7, LSB = 0, 6:7 = nybble:exponent:sign) */
10918         const U8* nvp = (const U8*)(&nv);
10919         HEXTRACT_IMPLICIT_BIT(nv);
10920         HEXTRACT_TOP_NYBBLE(2); /* 6 */
10921         HEXTRACT_BYTE(1); /* 5 */
10922         HEXTRACT_BYTE(0); /* 4 */
10923         HEXTRACT_BYTE(7); /* 3 */
10924         HEXTRACT_BYTE(6); /* 2 */
10925         HEXTRACT_BYTE(5); /* 1 */
10926         HEXTRACT_BYTE(4); /* 0 */
10927 #    elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_BE_LE
10928         /* 3 2 1 0 7 6 5 4 (MSB = 7, LSB = 0, 7:6 = sign:exponent:nybble) */
10929         const U8* nvp = (const U8*)(&nv);
10930         HEXTRACT_IMPLICIT_BIT(nv);
10931         HEXTRACT_TOP_NYBBLE(5); /* 6 */
10932         HEXTRACT_BYTE(6); /* 5 */
10933         HEXTRACT_BYTE(7); /* 4 */
10934         HEXTRACT_BYTE(0); /* 3 */
10935         HEXTRACT_BYTE(1); /* 2 */
10936         HEXTRACT_BYTE(2); /* 1 */
10937         HEXTRACT_BYTE(3); /* 0 */
10938 #    else
10939 #      define HEXTRACT_FALLBACK
10940 #    endif
10941 #  else
10942 #    define HEXTRACT_FALLBACK
10943 #  endif
10944 #endif /* #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE) #else */
10945 #  ifdef HEXTRACT_FALLBACK
10946 #    undef HEXTRACT_HAS_TOP_NYBBLE /* Meaningless, but consistent. */
10947         /* The fallback is used for the double-double format, and
10948          * for unknown long double formats, and for unknown double
10949          * formats, or in general unknown NV formats. */
10950         if (nv == (NV)0.0) {
10951             if (vend)
10952                 *v++ = 0;
10953             else
10954                 v++;
10955             *exponent = 0;
10956         }
10957         else {
10958             NV d = nv < 0 ? -nv : nv;
10959             NV e = (NV)1.0;
10960             U8 ha = 0x0; /* hexvalue accumulator */
10961             U8 hd = 0x8; /* hexvalue digit */
10962
10963             /* Shift d and e (and update exponent) so that e <= d < 2*e,
10964              * this is essentially manual frexp(). Multiplying by 0.5 and
10965              * doubling should be lossless in binary floating point. */
10966
10967             *exponent = 1;
10968
10969             while (e > d) {
10970                 e *= (NV)0.5;
10971                 (*exponent)--;
10972             }
10973             /* Now d >= e */
10974
10975             while (d >= e + e) {
10976                 e += e;
10977                 (*exponent)++;
10978             }
10979             /* Now e <= d < 2*e */
10980
10981             /* First extract the leading hexdigit (the implicit bit). */
10982             if (d >= e) {
10983                 d -= e;
10984                 if (vend)
10985                     *v++ = 1;
10986                 else
10987                     v++;
10988             }
10989             else {
10990                 if (vend)
10991                     *v++ = 0;
10992                 else
10993                     v++;
10994             }
10995             e *= (NV)0.5;
10996
10997             /* Then extract the remaining hexdigits. */
10998             while (d > (NV)0.0) {
10999                 if (d >= e) {
11000                     ha |= hd;
11001                     d -= e;
11002                 }
11003                 if (hd == 1) {
11004                     /* Output or count in groups of four bits,
11005                      * that is, when the hexdigit is down to one. */
11006                     if (vend)
11007                         *v++ = ha;
11008                     else
11009                         v++;
11010                     /* Reset the hexvalue. */
11011                     ha = 0x0;
11012                     hd = 0x8;
11013                 }
11014                 else
11015                     hd >>= 1;
11016                 e *= (NV)0.5;
11017             }
11018
11019             /* Flush possible pending hexvalue. */
11020             if (ha) {
11021                 if (vend)
11022                     *v++ = ha;
11023                 else
11024                     v++;
11025             }
11026         }
11027 #  endif
11028     }
11029     /* Croak for various reasons: if the output pointer escaped the
11030      * output buffer, if the extraction index escaped the extraction
11031      * buffer, or if the ending output pointer didn't match the
11032      * previously computed value. */
11033     if (v <= vhex || v - vhex >= VHEX_SIZE ||
11034         /* For double-double the ixmin and ixmax stay at zero,
11035          * which is convenient since the HEXTRACTSIZE is tricky
11036          * for double-double. */
11037         ixmin < 0 || ixmax >= NVSIZE ||
11038         (vend && v != vend))
11039         Perl_croak(aTHX_ "Hexadecimal float: internal error");
11040     return v;
11041 }
11042
11043 /* Helper for sv_vcatpvfn_flags().  */
11044 #define FETCH_VCATPVFN_ARGUMENT(var, in_range, expr)   \
11045     STMT_START {                                       \
11046         if (in_range)                                  \
11047             (var) = (expr);                            \
11048         else {                                         \
11049             (var) = &PL_sv_no; /* [perl #71000] */     \
11050             arg_missing = TRUE;                        \
11051         }                                              \
11052     } STMT_END
11053
11054 void
11055 Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
11056                        va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted,
11057                        const U32 flags)
11058 {
11059     char *p;
11060     char *q;
11061     const char *patend;
11062     STRLEN origlen;
11063     I32 svix = 0;
11064     static const char nullstr[] = "(null)";
11065     SV *argsv = NULL;
11066     bool has_utf8 = DO_UTF8(sv);    /* has the result utf8? */
11067     const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
11068     SV *nsv = NULL;
11069     /* Times 4: a decimal digit takes more than 3 binary digits.
11070      * NV_DIG: mantissa takes than many decimal digits.
11071      * Plus 32: Playing safe. */
11072     char ebuf[IV_DIG * 4 + NV_DIG + 32];
11073     bool no_redundant_warning = FALSE; /* did we use any explicit format parameter index? */
11074     bool hexfp = FALSE; /* hexadecimal floating point? */
11075
11076     DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
11077
11078     PERL_ARGS_ASSERT_SV_VCATPVFN_FLAGS;
11079     PERL_UNUSED_ARG(maybe_tainted);
11080
11081     if (flags & SV_GMAGIC)
11082         SvGETMAGIC(sv);
11083
11084     /* no matter what, this is a string now */
11085     (void)SvPV_force_nomg(sv, origlen);
11086
11087     /* special-case "", "%s", and "%-p" (SVf - see below) */
11088     if (patlen == 0) {
11089         if (svmax && ckWARN(WARN_REDUNDANT))
11090             Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
11091                         PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
11092         return;
11093     }
11094     if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
11095         if (svmax > 1 && ckWARN(WARN_REDUNDANT))
11096             Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
11097                         PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
11098
11099         if (args) {
11100             const char * const s = va_arg(*args, char*);
11101             sv_catpv_nomg(sv, s ? s : nullstr);
11102         }
11103         else if (svix < svmax) {
11104             /* we want get magic on the source but not the target. sv_catsv can't do that, though */
11105             SvGETMAGIC(*svargs);
11106             sv_catsv_nomg(sv, *svargs);
11107         }
11108         else
11109             S_warn_vcatpvfn_missing_argument(aTHX);
11110         return;
11111     }
11112     if (args && patlen == 3 && pat[0] == '%' &&
11113                 pat[1] == '-' && pat[2] == 'p') {
11114         if (svmax > 1 && ckWARN(WARN_REDUNDANT))
11115             Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
11116                         PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
11117         argsv = MUTABLE_SV(va_arg(*args, void*));
11118         sv_catsv_nomg(sv, argsv);
11119         return;
11120     }
11121
11122 #if !defined(USE_LONG_DOUBLE) && !defined(USE_QUADMATH)
11123     /* special-case "%.<number>[gf]" */
11124     if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
11125          && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
11126         unsigned digits = 0;
11127         const char *pp;
11128
11129         pp = pat + 2;
11130         while (*pp >= '0' && *pp <= '9')
11131             digits = 10 * digits + (*pp++ - '0');
11132
11133         /* XXX: Why do this `svix < svmax` test? Couldn't we just
11134            format the first argument and WARN_REDUNDANT if svmax > 1?
11135            Munged by Nicholas Clark in v5.13.0-209-g95ea86d */
11136         if (pp - pat == (int)patlen - 1 && svix < svmax) {
11137             const NV nv = SvNV(*svargs);
11138             if (LIKELY(!Perl_isinfnan(nv))) {
11139                 if (*pp == 'g') {
11140                     /* Add check for digits != 0 because it seems that some
11141                        gconverts are buggy in this case, and we don't yet have
11142                        a Configure test for this.  */
11143                     if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
11144                         /* 0, point, slack */
11145                         STORE_LC_NUMERIC_SET_TO_NEEDED();
11146                         SNPRINTF_G(nv, ebuf, size, digits);
11147                         sv_catpv_nomg(sv, ebuf);
11148                         if (*ebuf)      /* May return an empty string for digits==0 */
11149                             return;
11150                     }
11151                 } else if (!digits) {
11152                     STRLEN l;
11153
11154                     if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
11155                         sv_catpvn_nomg(sv, p, l);
11156                         return;
11157                     }
11158                 }
11159             }
11160         }
11161     }
11162 #endif /* !USE_LONG_DOUBLE */
11163
11164     if (!args && svix < svmax && DO_UTF8(*svargs))
11165         has_utf8 = TRUE;
11166
11167     patend = (char*)pat + patlen;
11168     for (p = (char*)pat; p < patend; p = q) {
11169         bool alt = FALSE;
11170         bool left = FALSE;
11171         bool vectorize = FALSE;
11172         bool vectorarg = FALSE;
11173         bool vec_utf8 = FALSE;
11174         char fill = ' ';
11175         char plus = 0;
11176         char intsize = 0;
11177         STRLEN width = 0;
11178         STRLEN zeros = 0;
11179         bool has_precis = FALSE;
11180         STRLEN precis = 0;
11181         const I32 osvix = svix;
11182         bool is_utf8 = FALSE;  /* is this item utf8?   */
11183         bool used_explicit_ix = FALSE;
11184         bool arg_missing = FALSE;
11185 #ifdef HAS_LDBL_SPRINTF_BUG
11186         /* This is to try to fix a bug with irix/nonstop-ux/powerux and
11187            with sfio - Allen <allens@cpan.org> */
11188         bool fix_ldbl_sprintf_bug = FALSE;
11189 #endif
11190
11191         char esignbuf[4];
11192         U8 utf8buf[UTF8_MAXBYTES+1];
11193         STRLEN esignlen = 0;
11194
11195         const char *eptr = NULL;
11196         const char *fmtstart;
11197         STRLEN elen = 0;
11198         SV *vecsv = NULL;
11199         const U8 *vecstr = NULL;
11200         STRLEN veclen = 0;
11201         char c = 0;
11202         int i;
11203         unsigned base = 0;
11204         IV iv = 0;
11205         UV uv = 0;
11206         /* We need a long double target in case HAS_LONG_DOUBLE,
11207          * even without USE_LONG_DOUBLE, so that we can printf with
11208          * long double formats, even without NV being long double.
11209          * But we call the target 'fv' instead of 'nv', since most of
11210          * the time it is not (most compilers these days recognize
11211          * "long double", even if only as a synonym for "double").
11212         */
11213 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE && \
11214         defined(PERL_PRIgldbl) && !defined(USE_QUADMATH)
11215         long double fv;
11216 #  ifdef Perl_isfinitel
11217 #    define FV_ISFINITE(x) Perl_isfinitel(x)
11218 #  endif
11219 #  define FV_GF PERL_PRIgldbl
11220 #    if defined(__VMS) && defined(__ia64) && defined(__IEEE_FLOAT)
11221        /* Work around breakage in OTS$CVT_FLOAT_T_X */
11222 #      define NV_TO_FV(nv,fv) STMT_START {                   \
11223                                            double _dv = nv;  \
11224                                            fv = Perl_isnan(_dv) ? LDBL_QNAN : _dv; \
11225                               } STMT_END
11226 #    else
11227 #      define NV_TO_FV(nv,fv) (fv)=(nv)
11228 #    endif
11229 #else
11230         NV fv;
11231 #  define FV_GF NVgf
11232 #  define NV_TO_FV(nv,fv) (fv)=(nv)
11233 #endif
11234 #ifndef FV_ISFINITE
11235 #  define FV_ISFINITE(x) Perl_isfinite((NV)(x))
11236 #endif
11237         NV nv;
11238         STRLEN have;
11239         STRLEN need;
11240         STRLEN gap;
11241         const char *dotstr = ".";
11242         STRLEN dotstrlen = 1;
11243         I32 efix = 0; /* explicit format parameter index */
11244         I32 ewix = 0; /* explicit width index */
11245         I32 epix = 0; /* explicit precision index */
11246         I32 evix = 0; /* explicit vector index */
11247         bool asterisk = FALSE;
11248         bool infnan = FALSE;
11249
11250         /* echo everything up to the next format specification */
11251         for (q = p; q < patend && *q != '%'; ++q) ;
11252         if (q > p) {
11253             if (has_utf8 && !pat_utf8)
11254                 sv_catpvn_nomg_utf8_upgrade(sv, p, q - p, nsv);
11255             else
11256                 sv_catpvn_nomg(sv, p, q - p);
11257             p = q;
11258         }
11259         if (q++ >= patend)
11260             break;
11261
11262         fmtstart = q;
11263
11264 /*
11265     We allow format specification elements in this order:
11266         \d+\$              explicit format parameter index
11267         [-+ 0#]+           flags
11268         v|\*(\d+\$)?v      vector with optional (optionally specified) arg
11269         0                  flag (as above): repeated to allow "v02"     
11270         \d+|\*(\d+\$)?     width using optional (optionally specified) arg
11271         \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
11272         [hlqLV]            size
11273     [%bcdefginopsuxDFOUX] format (mandatory)
11274 */
11275
11276         if (args) {
11277 /*  
11278         As of perl5.9.3, printf format checking is on by default.
11279         Internally, perl uses %p formats to provide an escape to
11280         some extended formatting.  This block deals with those
11281         extensions: if it does not match, (char*)q is reset and
11282         the normal format processing code is used.
11283
11284         Currently defined extensions are:
11285                 %p              include pointer address (standard)      
11286                 %-p     (SVf)   include an SV (previously %_)
11287                 %-<num>p        include an SV with precision <num>      
11288                 %2p             include a HEK
11289                 %3p             include a HEK with precision of 256
11290                 %4p             char* preceded by utf8 flag and length
11291                 %<num>p         (where num is 1 or > 4) reserved for future
11292                                 extensions
11293
11294         Robin Barker 2005-07-14 (but modified since)
11295
11296                 %1p     (VDf)   removed.  RMB 2007-10-19
11297 */
11298             char* r = q; 
11299             bool sv = FALSE;    
11300             STRLEN n = 0;
11301             if (*q == '-')
11302                 sv = *q++;
11303             else if (strnEQ(q, UTF8f, sizeof(UTF8f)-1)) { /* UTF8f */
11304                 /* The argument has already gone through cBOOL, so the cast
11305                    is safe. */
11306                 is_utf8 = (bool)va_arg(*args, int);
11307                 elen = va_arg(*args, UV);
11308                 if ((IV)elen < 0) {
11309                     /* check if utf8 length is larger than 0 when cast to IV */
11310                     assert( (IV)elen >= 0 ); /* in DEBUGGING build we want to crash */
11311                     elen= 0; /* otherwise we want to treat this as an empty string */
11312                 }
11313                 eptr = va_arg(*args, char *);
11314                 q += sizeof(UTF8f)-1;
11315                 goto string;
11316             }
11317             n = expect_number(&q);
11318             if (*q++ == 'p') {
11319                 if (sv) {                       /* SVf */
11320                     if (n) {
11321                         precis = n;
11322                         has_precis = TRUE;
11323                     }
11324                     argsv = MUTABLE_SV(va_arg(*args, void*));
11325                     eptr = SvPV_const(argsv, elen);
11326                     if (DO_UTF8(argsv))
11327                         is_utf8 = TRUE;
11328                     goto string;
11329                 }
11330                 else if (n==2 || n==3) {        /* HEKf */
11331                     HEK * const hek = va_arg(*args, HEK *);
11332                     eptr = HEK_KEY(hek);
11333                     elen = HEK_LEN(hek);
11334                     if (HEK_UTF8(hek)) is_utf8 = TRUE;
11335                     if (n==3) precis = 256, has_precis = TRUE;
11336                     goto string;
11337                 }
11338                 else if (n) {
11339                     Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
11340                                      "internal %%<num>p might conflict with future printf extensions");
11341                 }
11342             }
11343             q = r; 
11344         }
11345
11346         if ( (width = expect_number(&q)) ) {
11347             if (*q == '$') {
11348                 if (args)
11349                     Perl_croak_nocontext(
11350                         "Cannot yet reorder sv_catpvfn() arguments from va_list");
11351                 ++q;
11352                 efix = width;
11353                 used_explicit_ix = TRUE;
11354             } else {
11355                 goto gotwidth;
11356             }
11357         }
11358
11359         /* FLAGS */
11360
11361         while (*q) {
11362             switch (*q) {
11363             case ' ':
11364             case '+':
11365                 if (plus == '+' && *q == ' ') /* '+' over ' ' */
11366                     q++;
11367                 else
11368                     plus = *q++;
11369                 continue;
11370
11371             case '-':
11372                 left = TRUE;
11373                 q++;
11374                 continue;
11375
11376             case '0':
11377                 fill = *q++;
11378                 continue;
11379
11380             case '#':
11381                 alt = TRUE;
11382                 q++;
11383                 continue;
11384
11385             default:
11386                 break;
11387             }
11388             break;
11389         }
11390
11391       tryasterisk:
11392         if (*q == '*') {
11393             q++;
11394             if ( (ewix = expect_number(&q)) ) {
11395                 if (*q++ == '$') {
11396                     if (args)
11397                         Perl_croak_nocontext(
11398                             "Cannot yet reorder sv_catpvfn() arguments from va_list");
11399                     used_explicit_ix = TRUE;
11400                 } else
11401                     goto unknown;
11402             }
11403             asterisk = TRUE;
11404         }
11405         if (*q == 'v') {
11406             q++;
11407             if (vectorize)
11408                 goto unknown;
11409             if ((vectorarg = asterisk)) {
11410                 evix = ewix;
11411                 ewix = 0;
11412                 asterisk = FALSE;
11413             }
11414             vectorize = TRUE;
11415             goto tryasterisk;
11416         }
11417
11418         if (!asterisk)
11419         {
11420             if( *q == '0' )
11421                 fill = *q++;
11422             width = expect_number(&q);
11423         }
11424
11425         if (vectorize && vectorarg) {
11426             /* vectorizing, but not with the default "." */
11427             if (args)
11428                 vecsv = va_arg(*args, SV*);
11429             else if (evix) {
11430                 FETCH_VCATPVFN_ARGUMENT(
11431                     vecsv, evix > 0 && evix <= svmax, svargs[evix-1]);
11432             } else {
11433                 FETCH_VCATPVFN_ARGUMENT(
11434                     vecsv, svix < svmax, svargs[svix++]);
11435             }
11436             dotstr = SvPV_const(vecsv, dotstrlen);
11437             /* Keep the DO_UTF8 test *after* the SvPV call, else things go
11438                bad with tied or overloaded values that return UTF8.  */
11439             if (DO_UTF8(vecsv))
11440                 is_utf8 = TRUE;
11441             else if (has_utf8) {
11442                 vecsv = sv_mortalcopy(vecsv);
11443                 sv_utf8_upgrade(vecsv);
11444                 dotstr = SvPV_const(vecsv, dotstrlen);
11445                 is_utf8 = TRUE;
11446             }               
11447         }
11448
11449         if (asterisk) {
11450             if (args)
11451                 i = va_arg(*args, int);
11452             else
11453                 i = (ewix ? ewix <= svmax : svix < svmax) ?
11454                     SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
11455             left |= (i < 0);
11456             width = (i < 0) ? -i : i;
11457         }
11458       gotwidth:
11459
11460         /* PRECISION */
11461
11462         if (*q == '.') {
11463             q++;
11464             if (*q == '*') {
11465                 q++;
11466                 if ( (epix = expect_number(&q)) ) {
11467                     if (*q++ == '$') {
11468                         if (args)
11469                             Perl_croak_nocontext(
11470                                 "Cannot yet reorder sv_catpvfn() arguments from va_list");
11471                         used_explicit_ix = TRUE;
11472                     } else
11473                         goto unknown;
11474                 }
11475                 if (args)
11476                     i = va_arg(*args, int);
11477                 else {
11478                     SV *precsv;
11479                     if (epix)
11480                         FETCH_VCATPVFN_ARGUMENT(
11481                             precsv, epix > 0 && epix <= svmax, svargs[epix-1]);
11482                     else
11483                         FETCH_VCATPVFN_ARGUMENT(
11484                             precsv, svix < svmax, svargs[svix++]);
11485                     i = precsv == &PL_sv_no ? 0 : SvIVx(precsv);
11486                 }
11487                 precis = i;
11488                 has_precis = !(i < 0);
11489             }
11490             else {
11491                 precis = 0;
11492                 while (isDIGIT(*q))
11493                     precis = precis * 10 + (*q++ - '0');
11494                 has_precis = TRUE;
11495             }
11496         }
11497
11498         if (vectorize) {
11499             if (args) {
11500                 VECTORIZE_ARGS
11501             }
11502             else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
11503                 vecsv = svargs[efix ? efix-1 : svix++];
11504                 vecstr = (U8*)SvPV_const(vecsv,veclen);
11505                 vec_utf8 = DO_UTF8(vecsv);
11506
11507                 /* if this is a version object, we need to convert
11508                  * back into v-string notation and then let the
11509                  * vectorize happen normally
11510                  */
11511                 if (sv_isobject(vecsv) && sv_derived_from(vecsv, "version")) {
11512                     if ( hv_exists(MUTABLE_HV(SvRV(vecsv)), "alpha", 5 ) ) {
11513                         Perl_ck_warner_d(aTHX_ packWARN(WARN_PRINTF),
11514                         "vector argument not supported with alpha versions");
11515                         goto vdblank;
11516                     }
11517                     vecsv = sv_newmortal();
11518                     scan_vstring((char *)vecstr, (char *)vecstr + veclen,
11519                                  vecsv);
11520                     vecstr = (U8*)SvPV_const(vecsv, veclen);
11521                     vec_utf8 = DO_UTF8(vecsv);
11522                 }
11523             }
11524             else {
11525               vdblank:
11526                 vecstr = (U8*)"";
11527                 veclen = 0;
11528             }
11529         }
11530
11531         /* SIZE */
11532
11533         switch (*q) {
11534 #ifdef WIN32
11535         case 'I':                       /* Ix, I32x, and I64x */
11536 #  ifdef USE_64_BIT_INT
11537             if (q[1] == '6' && q[2] == '4') {
11538                 q += 3;
11539                 intsize = 'q';
11540                 break;
11541             }
11542 #  endif
11543             if (q[1] == '3' && q[2] == '2') {
11544                 q += 3;
11545                 break;
11546             }
11547 #  ifdef USE_64_BIT_INT
11548             intsize = 'q';
11549 #  endif
11550             q++;
11551             break;
11552 #endif
11553 #if (IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)) || \
11554     (IVSIZE == 4 && !defined(HAS_LONG_DOUBLE))
11555         case 'L':                       /* Ld */
11556             /* FALLTHROUGH */
11557 #  ifdef USE_QUADMATH
11558         case 'Q':
11559             /* FALLTHROUGH */
11560 #  endif
11561 #  if IVSIZE >= 8
11562         case 'q':                       /* qd */
11563 #  endif
11564             intsize = 'q';
11565             q++;
11566             break;
11567 #endif
11568         case 'l':
11569             ++q;
11570 #if (IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)) || \
11571     (IVSIZE == 4 && !defined(HAS_LONG_DOUBLE))
11572             if (*q == 'l') {    /* lld, llf */
11573                 intsize = 'q';
11574                 ++q;
11575             }
11576             else
11577 #endif
11578                 intsize = 'l';
11579             break;
11580         case 'h':
11581             if (*++q == 'h') {  /* hhd, hhu */
11582                 intsize = 'c';
11583                 ++q;
11584             }
11585             else
11586                 intsize = 'h';
11587             break;
11588         case 'V':
11589         case 'z':
11590         case 't':
11591 #ifdef I_STDINT
11592         case 'j':
11593 #endif
11594             intsize = *q++;
11595             break;
11596         }
11597
11598         /* CONVERSION */
11599
11600         if (*q == '%') {
11601             eptr = q++;
11602             elen = 1;
11603             if (vectorize) {
11604                 c = '%';
11605                 goto unknown;
11606             }
11607             goto string;
11608         }
11609
11610         if (!vectorize && !args) {
11611             if (efix) {
11612                 const I32 i = efix-1;
11613                 FETCH_VCATPVFN_ARGUMENT(argsv, i >= 0 && i < svmax, svargs[i]);
11614             } else {
11615                 FETCH_VCATPVFN_ARGUMENT(argsv, svix >= 0 && svix < svmax,
11616                                         svargs[svix++]);
11617             }
11618         }
11619
11620         if (argsv && strchr("BbcDdiOopuUXx",*q)) {
11621             /* XXX va_arg(*args) case? need peek, use va_copy? */
11622             SvGETMAGIC(argsv);
11623             if (UNLIKELY(SvAMAGIC(argsv)))
11624                 argsv = sv_2num(argsv);
11625             infnan = UNLIKELY(isinfnansv(argsv));
11626         }
11627
11628         switch (c = *q++) {
11629
11630             /* STRINGS */
11631
11632         case 'c':
11633             if (vectorize)
11634                 goto unknown;
11635             if (infnan)
11636                 Perl_croak(aTHX_ "Cannot printf %"NVgf" with '%c'",
11637                            /* no va_arg() case */
11638                            SvNV_nomg(argsv), (int)c);
11639             uv = (args) ? va_arg(*args, int) : SvIV_nomg(argsv);
11640             if ((uv > 255 ||
11641                  (!UVCHR_IS_INVARIANT(uv) && SvUTF8(sv)))
11642                 && !IN_BYTES) {
11643                 eptr = (char*)utf8buf;
11644                 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
11645                 is_utf8 = TRUE;
11646             }
11647             else {
11648                 c = (char)uv;
11649                 eptr = &c;
11650                 elen = 1;
11651             }
11652             goto string;
11653
11654         case 's':
11655             if (vectorize)
11656                 goto unknown;
11657             if (args) {
11658                 eptr = va_arg(*args, char*);
11659                 if (eptr)
11660                     elen = strlen(eptr);
11661                 else {
11662                     eptr = (char *)nullstr;
11663                     elen = sizeof nullstr - 1;
11664                 }
11665             }
11666             else {
11667                 eptr = SvPV_const(argsv, elen);
11668                 if (DO_UTF8(argsv)) {
11669                     STRLEN old_precis = precis;
11670                     if (has_precis && precis < elen) {
11671                         STRLEN ulen = sv_or_pv_len_utf8(argsv, eptr, elen);
11672                         STRLEN p = precis > ulen ? ulen : precis;
11673                         precis = sv_or_pv_pos_u2b(argsv, eptr, p, 0);
11674                                                         /* sticks at end */
11675                     }
11676                     if (width) { /* fudge width (can't fudge elen) */
11677                         if (has_precis && precis < elen)
11678                             width += precis - old_precis;
11679                         else
11680                             width +=
11681                                 elen - sv_or_pv_len_utf8(argsv,eptr,elen);
11682                     }
11683                     is_utf8 = TRUE;
11684                 }
11685             }
11686
11687         string:
11688             if (has_precis && precis < elen)
11689                 elen = precis;
11690             break;
11691
11692             /* INTEGERS */
11693
11694         case 'p':
11695             if (infnan) {
11696                 goto floating_point;
11697             }
11698             if (alt || vectorize)
11699                 goto unknown;
11700             uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
11701             base = 16;
11702             goto integer;
11703
11704         case 'D':
11705 #ifdef IV_IS_QUAD
11706             intsize = 'q';
11707 #else
11708             intsize = 'l';
11709 #endif
11710             /* FALLTHROUGH */
11711         case 'd':
11712         case 'i':
11713             if (infnan) {
11714                 goto floating_point;
11715             }
11716             if (vectorize) {
11717                 STRLEN ulen;
11718                 if (!veclen)
11719                     goto donevalidconversion;
11720                 if (vec_utf8)
11721                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
11722                                         UTF8_ALLOW_ANYUV);
11723                 else {
11724                     uv = *vecstr;
11725                     ulen = 1;
11726                 }
11727                 vecstr += ulen;
11728                 veclen -= ulen;
11729                 if (plus)
11730                      esignbuf[esignlen++] = plus;
11731             }
11732             else if (args) {
11733                 switch (intsize) {
11734                 case 'c':       iv = (char)va_arg(*args, int); break;
11735                 case 'h':       iv = (short)va_arg(*args, int); break;
11736                 case 'l':       iv = va_arg(*args, long); break;
11737                 case 'V':       iv = va_arg(*args, IV); break;
11738                 case 'z':       iv = va_arg(*args, SSize_t); break;
11739 #ifdef HAS_PTRDIFF_T
11740                 case 't':       iv = va_arg(*args, ptrdiff_t); break;
11741 #endif
11742                 default:        iv = va_arg(*args, int); break;
11743 #ifdef I_STDINT
11744                 case 'j':       iv = va_arg(*args, intmax_t); break;
11745 #endif
11746                 case 'q':
11747 #if IVSIZE >= 8
11748                                 iv = va_arg(*args, Quad_t); break;
11749 #else
11750                                 goto unknown;
11751 #endif
11752                 }
11753             }
11754             else {
11755                 IV tiv = SvIV_nomg(argsv); /* work around GCC bug #13488 */
11756                 switch (intsize) {
11757                 case 'c':       iv = (char)tiv; break;
11758                 case 'h':       iv = (short)tiv; break;
11759                 case 'l':       iv = (long)tiv; break;
11760                 case 'V':
11761                 default:        iv = tiv; break;
11762                 case 'q':
11763 #if IVSIZE >= 8
11764                                 iv = (Quad_t)tiv; break;
11765 #else
11766                                 goto unknown;
11767 #endif
11768                 }
11769             }
11770             if ( !vectorize )   /* we already set uv above */
11771             {
11772                 if (iv >= 0) {
11773                     uv = iv;
11774                     if (plus)
11775                         esignbuf[esignlen++] = plus;
11776                 }
11777                 else {
11778                     uv = (iv == IV_MIN) ? (UV)iv : (UV)(-iv);
11779                     esignbuf[esignlen++] = '-';
11780                 }
11781             }
11782             base = 10;
11783             goto integer;
11784
11785         case 'U':
11786 #ifdef IV_IS_QUAD
11787             intsize = 'q';
11788 #else
11789             intsize = 'l';
11790 #endif
11791             /* FALLTHROUGH */
11792         case 'u':
11793             base = 10;
11794             goto uns_integer;
11795
11796         case 'B':
11797         case 'b':
11798             base = 2;
11799             goto uns_integer;
11800
11801         case 'O':
11802 #ifdef IV_IS_QUAD
11803             intsize = 'q';
11804 #else
11805             intsize = 'l';
11806 #endif
11807             /* FALLTHROUGH */
11808         case 'o':
11809             base = 8;
11810             goto uns_integer;
11811
11812         case 'X':
11813         case 'x':
11814             base = 16;
11815
11816         uns_integer:
11817             if (infnan) {
11818                 goto floating_point;
11819             }
11820             if (vectorize) {
11821                 STRLEN ulen;
11822         vector:
11823                 if (!veclen)
11824                     goto donevalidconversion;
11825                 if (vec_utf8)
11826                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
11827                                         UTF8_ALLOW_ANYUV);
11828                 else {
11829                     uv = *vecstr;
11830                     ulen = 1;
11831                 }
11832                 vecstr += ulen;
11833                 veclen -= ulen;
11834             }
11835             else if (args) {
11836                 switch (intsize) {
11837                 case 'c':  uv = (unsigned char)va_arg(*args, unsigned); break;
11838                 case 'h':  uv = (unsigned short)va_arg(*args, unsigned); break;
11839                 case 'l':  uv = va_arg(*args, unsigned long); break;
11840                 case 'V':  uv = va_arg(*args, UV); break;
11841                 case 'z':  uv = va_arg(*args, Size_t); break;
11842 #ifdef HAS_PTRDIFF_T
11843                 case 't':  uv = va_arg(*args, ptrdiff_t); break; /* will sign extend, but there is no uptrdiff_t, so oh well */
11844 #endif
11845 #ifdef I_STDINT
11846                 case 'j':  uv = va_arg(*args, uintmax_t); break;
11847 #endif
11848                 default:   uv = va_arg(*args, unsigned); break;
11849                 case 'q':
11850 #if IVSIZE >= 8
11851                            uv = va_arg(*args, Uquad_t); break;
11852 #else
11853                            goto unknown;
11854 #endif
11855                 }
11856             }
11857             else {
11858                 UV tuv = SvUV_nomg(argsv); /* work around GCC bug #13488 */
11859                 switch (intsize) {
11860                 case 'c':       uv = (unsigned char)tuv; break;
11861                 case 'h':       uv = (unsigned short)tuv; break;
11862                 case 'l':       uv = (unsigned long)tuv; break;
11863                 case 'V':
11864                 default:        uv = tuv; break;
11865                 case 'q':
11866 #if IVSIZE >= 8
11867                                 uv = (Uquad_t)tuv; break;
11868 #else
11869                                 goto unknown;
11870 #endif
11871                 }
11872             }
11873
11874         integer:
11875             {
11876                 char *ptr = ebuf + sizeof ebuf;
11877                 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */
11878                 unsigned dig;
11879                 zeros = 0;
11880
11881                 switch (base) {
11882                 case 16:
11883                     p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit);
11884                     do {
11885                         dig = uv & 15;
11886                         *--ptr = p[dig];
11887                     } while (uv >>= 4);
11888                     if (tempalt) {
11889                         esignbuf[esignlen++] = '0';
11890                         esignbuf[esignlen++] = c;  /* 'x' or 'X' */
11891                     }
11892                     break;
11893                 case 8:
11894                     do {
11895                         dig = uv & 7;
11896                         *--ptr = '0' + dig;
11897                     } while (uv >>= 3);
11898                     if (alt && *ptr != '0')
11899                         *--ptr = '0';
11900                     break;
11901                 case 2:
11902                     do {
11903                         dig = uv & 1;
11904                         *--ptr = '0' + dig;
11905                     } while (uv >>= 1);
11906                     if (tempalt) {
11907                         esignbuf[esignlen++] = '0';
11908                         esignbuf[esignlen++] = c;
11909                     }
11910                     break;
11911                 default:                /* it had better be ten or less */
11912                     do {
11913                         dig = uv % base;
11914                         *--ptr = '0' + dig;
11915                     } while (uv /= base);
11916                     break;
11917                 }
11918                 elen = (ebuf + sizeof ebuf) - ptr;
11919                 eptr = ptr;
11920                 if (has_precis) {
11921                     if (precis > elen)
11922                         zeros = precis - elen;
11923                     else if (precis == 0 && elen == 1 && *eptr == '0'
11924                              && !(base == 8 && alt)) /* "%#.0o" prints "0" */
11925                         elen = 0;
11926
11927                 /* a precision nullifies the 0 flag. */
11928                     if (fill == '0')
11929                         fill = ' ';
11930                 }
11931             }
11932             break;
11933
11934             /* FLOATING POINT */
11935
11936         floating_point:
11937
11938         case 'F':
11939             c = 'f';            /* maybe %F isn't supported here */
11940             /* FALLTHROUGH */
11941         case 'e': case 'E':
11942         case 'f':
11943         case 'g': case 'G':
11944         case 'a': case 'A':
11945             if (vectorize)
11946                 goto unknown;
11947
11948             /* This is evil, but floating point is even more evil */
11949
11950             /* for SV-style calling, we can only get NV
11951                for C-style calling, we assume %f is double;
11952                for simplicity we allow any of %Lf, %llf, %qf for long double
11953             */
11954             switch (intsize) {
11955             case 'V':
11956 #if defined(USE_LONG_DOUBLE) || defined(USE_QUADMATH)
11957                 intsize = 'q';
11958 #endif
11959                 break;
11960 /* [perl #20339] - we should accept and ignore %lf rather than die */
11961             case 'l':
11962                 /* FALLTHROUGH */
11963             default:
11964 #if defined(USE_LONG_DOUBLE) || defined(USE_QUADMATH)
11965                 intsize = args ? 0 : 'q';
11966 #endif
11967                 break;
11968             case 'q':
11969 #if defined(HAS_LONG_DOUBLE)
11970                 break;
11971 #else
11972                 /* FALLTHROUGH */
11973 #endif
11974             case 'c':
11975             case 'h':
11976             case 'z':
11977             case 't':
11978             case 'j':
11979                 goto unknown;
11980             }
11981
11982             /* Now we need (long double) if intsize == 'q', else (double). */
11983             if (args) {
11984                 /* Note: do not pull NVs off the va_list with va_arg()
11985                  * (pull doubles instead) because if you have a build
11986                  * with long doubles, you would always be pulling long
11987                  * doubles, which would badly break anyone using only
11988                  * doubles (i.e. the majority of builds). In other
11989                  * words, you cannot mix doubles and long doubles.
11990                  * The only case where you can pull off long doubles
11991                  * is when the format specifier explicitly asks so with
11992                  * e.g. "%Lg". */
11993 #ifdef USE_QUADMATH
11994                 fv = intsize == 'q' ?
11995                     va_arg(*args, NV) : va_arg(*args, double);
11996                 nv = fv;
11997 #elif LONG_DOUBLESIZE > DOUBLESIZE
11998                 if (intsize == 'q') {
11999                     fv = va_arg(*args, long double);
12000                     nv = fv;
12001                 } else {
12002                     nv = va_arg(*args, double);
12003                     NV_TO_FV(nv, fv);
12004                 }
12005 #else
12006                 nv = va_arg(*args, double);
12007                 fv = nv;
12008 #endif
12009             }
12010             else
12011             {
12012                 if (!infnan) SvGETMAGIC(argsv);
12013                 nv = SvNV_nomg(argsv);
12014                 NV_TO_FV(nv, fv);
12015             }
12016
12017             need = 0;
12018             /* frexp() (or frexpl) has some unspecified behaviour for
12019              * nan/inf/-inf, so let's avoid calling that on non-finites. */
12020             if (isALPHA_FOLD_NE(c, 'e') && FV_ISFINITE(fv)) {
12021                 i = PERL_INT_MIN;
12022                 (void)Perl_frexp((NV)fv, &i);
12023                 if (i == PERL_INT_MIN)
12024                     Perl_die(aTHX_ "panic: frexp: %"FV_GF, fv);
12025                 /* Do not set hexfp earlier since we want to printf
12026                  * Inf/NaN for Inf/NaN, not their hexfp. */
12027                 hexfp = isALPHA_FOLD_EQ(c, 'a');
12028                 if (UNLIKELY(hexfp)) {
12029                     /* This seriously overshoots in most cases, but
12030                      * better the undershooting.  Firstly, all bytes
12031                      * of the NV are not mantissa, some of them are
12032                      * exponent.  Secondly, for the reasonably common
12033                      * long doubles case, the "80-bit extended", two
12034                      * or six bytes of the NV are unused. */
12035                     need +=
12036                         (fv < 0) ? 1 : 0 + /* possible unary minus */
12037                         2 + /* "0x" */
12038                         1 + /* the very unlikely carry */
12039                         1 + /* "1" */
12040                         1 + /* "." */
12041                         2 * NVSIZE + /* 2 hexdigits for each byte */
12042                         2 + /* "p+" */
12043                         6 + /* exponent: sign, plus up to 16383 (quad fp) */
12044                         1;   /* \0 */
12045 #ifdef LONGDOUBLE_DOUBLEDOUBLE
12046                     /* However, for the "double double", we need more.
12047                      * Since each double has their own exponent, the
12048                      * doubles may float (haha) rather far from each
12049                      * other, and the number of required bits is much
12050                      * larger, up to total of DOUBLEDOUBLE_MAXBITS bits.
12051                      * See the definition of DOUBLEDOUBLE_MAXBITS.
12052                      *
12053                      * Need 2 hexdigits for each byte. */
12054                     need += (DOUBLEDOUBLE_MAXBITS/8 + 1) * 2;
12055                     /* the size for the exponent already added */
12056 #endif
12057 #ifdef USE_LOCALE_NUMERIC
12058                         STORE_LC_NUMERIC_SET_TO_NEEDED();
12059                         if (PL_numeric_radix_sv && IN_LC(LC_NUMERIC))
12060                             need += SvLEN(PL_numeric_radix_sv);
12061                         RESTORE_LC_NUMERIC();
12062 #endif
12063                 }
12064                 else if (i > 0) {
12065                     need = BIT_DIGITS(i);
12066                 } /* if i < 0, the number of digits is hard to predict. */
12067             }
12068             need += has_precis ? precis : 6; /* known default */
12069
12070             if (need < width)
12071                 need = width;
12072
12073 #ifdef HAS_LDBL_SPRINTF_BUG
12074             /* This is to try to fix a bug with irix/nonstop-ux/powerux and
12075                with sfio - Allen <allens@cpan.org> */
12076
12077 #  ifdef DBL_MAX
12078 #    define MY_DBL_MAX DBL_MAX
12079 #  else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
12080 #    if DOUBLESIZE >= 8
12081 #      define MY_DBL_MAX 1.7976931348623157E+308L
12082 #    else
12083 #      define MY_DBL_MAX 3.40282347E+38L
12084 #    endif
12085 #  endif
12086
12087 #  ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
12088 #    define MY_DBL_MAX_BUG 1L
12089 #  else
12090 #    define MY_DBL_MAX_BUG MY_DBL_MAX
12091 #  endif
12092
12093 #  ifdef DBL_MIN
12094 #    define MY_DBL_MIN DBL_MIN
12095 #  else  /* XXX guessing! -Allen */
12096 #    if DOUBLESIZE >= 8
12097 #      define MY_DBL_MIN 2.2250738585072014E-308L
12098 #    else
12099 #      define MY_DBL_MIN 1.17549435E-38L
12100 #    endif
12101 #  endif
12102
12103             if ((intsize == 'q') && (c == 'f') &&
12104                 ((fv < MY_DBL_MAX_BUG) && (fv > -MY_DBL_MAX_BUG)) &&
12105                 (need < DBL_DIG)) {
12106                 /* it's going to be short enough that
12107                  * long double precision is not needed */
12108
12109                 if ((fv <= 0L) && (fv >= -0L))
12110                     fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
12111                 else {
12112                     /* would use Perl_fp_class as a double-check but not
12113                      * functional on IRIX - see perl.h comments */
12114
12115                     if ((fv >= MY_DBL_MIN) || (fv <= -MY_DBL_MIN)) {
12116                         /* It's within the range that a double can represent */
12117 #if defined(DBL_MAX) && !defined(DBL_MIN)
12118                         if ((fv >= ((long double)1/DBL_MAX)) ||
12119                             (fv <= (-(long double)1/DBL_MAX)))
12120 #endif
12121                         fix_ldbl_sprintf_bug = TRUE;
12122                     }
12123                 }
12124                 if (fix_ldbl_sprintf_bug == TRUE) {
12125                     double temp;
12126
12127                     intsize = 0;
12128                     temp = (double)fv;
12129                     fv = (NV)temp;
12130                 }
12131             }
12132
12133 #  undef MY_DBL_MAX
12134 #  undef MY_DBL_MAX_BUG
12135 #  undef MY_DBL_MIN
12136
12137 #endif /* HAS_LDBL_SPRINTF_BUG */
12138
12139             need += 20; /* fudge factor */
12140             if (PL_efloatsize < need) {
12141                 Safefree(PL_efloatbuf);
12142                 PL_efloatsize = need + 20; /* more fudge */
12143                 Newx(PL_efloatbuf, PL_efloatsize, char);
12144                 PL_efloatbuf[0] = '\0';
12145             }
12146
12147             if ( !(width || left || plus || alt) && fill != '0'
12148                  && has_precis && intsize != 'q'        /* Shortcuts */
12149                  && LIKELY(!Perl_isinfnan((NV)fv)) ) {
12150                 /* See earlier comment about buggy Gconvert when digits,
12151                    aka precis is 0  */
12152                 if ( c == 'g' && precis ) {
12153                     STORE_LC_NUMERIC_SET_TO_NEEDED();
12154                     SNPRINTF_G(fv, PL_efloatbuf, PL_efloatsize, precis);
12155                     /* May return an empty string for digits==0 */
12156                     if (*PL_efloatbuf) {
12157                         elen = strlen(PL_efloatbuf);
12158                         goto float_converted;
12159                     }
12160                 } else if ( c == 'f' && !precis ) {
12161                     if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
12162                         break;
12163                 }
12164             }
12165
12166             if (UNLIKELY(hexfp)) {
12167                 /* Hexadecimal floating point. */
12168                 char* p = PL_efloatbuf;
12169                 U8 vhex[VHEX_SIZE];
12170                 U8* v = vhex; /* working pointer to vhex */
12171                 U8* vend; /* pointer to one beyond last digit of vhex */
12172                 U8* vfnz = NULL; /* first non-zero */
12173                 const bool lower = (c == 'a');
12174                 /* At output the values of vhex (up to vend) will
12175                  * be mapped through the xdig to get the actual
12176                  * human-readable xdigits. */
12177                 const char* xdig = PL_hexdigit;
12178                 int zerotail = 0; /* how many extra zeros to append */
12179                 int exponent = 0; /* exponent of the floating point input */
12180
12181                 /* XXX: denormals, NaN, Inf.
12182                  *
12183                  * For example with denormals, (assuming the vanilla
12184                  * 64-bit double): the exponent is zero. 1xp-1074 is
12185                  * the smallest denormal and the smallest double, it
12186                  * should be output as 0x0.0000000000001p-1022 to
12187                  * match its internal structure. */
12188
12189                 vend = S_hextract(aTHX_ nv, &exponent, vhex, NULL);
12190                 S_hextract(aTHX_ nv, &exponent, vhex, vend);
12191
12192 #if NVSIZE > DOUBLESIZE
12193 #  ifdef HEXTRACT_HAS_IMPLICIT_BIT
12194                 /* In this case there is an implicit bit,
12195                  * and therefore the exponent is shifted shift by one. */
12196                 exponent--;
12197 #  else
12198                 /* In this case there is no implicit bit,
12199                  * and the exponent is shifted by the first xdigit. */
12200                 exponent -= 4;
12201 #  endif
12202 #endif
12203
12204                 if (fv < 0)
12205                     *p++ = '-';
12206                 else if (plus)
12207                     *p++ = plus;
12208                 *p++ = '0';
12209                 if (lower) {
12210                     *p++ = 'x';
12211                 }
12212                 else {
12213                     *p++ = 'X';
12214                     xdig += 16; /* Use uppercase hex. */
12215                 }
12216
12217                 /* Find the first non-zero xdigit. */
12218                 for (v = vhex; v < vend; v++) {
12219                     if (*v) {
12220                         vfnz = v;
12221                         break;
12222                     }
12223                 }
12224
12225                 if (vfnz) {
12226                     U8* vlnz = NULL; /* The last non-zero. */
12227
12228                     /* Find the last non-zero xdigit. */
12229                     for (v = vend - 1; v >= vhex; v--) {
12230                         if (*v) {
12231                             vlnz = v;
12232                             break;
12233                         }
12234                     }
12235
12236 #if NVSIZE == DOUBLESIZE
12237                     if (fv != 0.0)
12238                         exponent--;
12239 #endif
12240
12241                     if (precis > 0) {
12242                         if ((SSize_t)(precis + 1) < vend - vhex) {
12243                             bool round;
12244
12245                             v = vhex + precis + 1;
12246                             /* Round away from zero: if the tail
12247                              * beyond the precis xdigits is equal to
12248                              * or greater than 0x8000... */
12249                             round = *v > 0x8;
12250                             if (!round && *v == 0x8) {
12251                                 for (v++; v < vend; v++) {
12252                                     if (*v) {
12253                                         round = TRUE;
12254                                         break;
12255                                     }
12256                                 }
12257                             }
12258                             if (round) {
12259                                 for (v = vhex + precis; v >= vhex; v--) {
12260                                     if (*v < 0xF) {
12261                                         (*v)++;
12262                                         break;
12263                                     }
12264                                     *v = 0;
12265                                     if (v == vhex) {
12266                                         /* If the carry goes all the way to
12267                                          * the front, we need to output
12268                                          * a single '1'. This goes against
12269                                          * the "xdigit and then radix"
12270                                          * but since this is "cannot happen"
12271                                          * category, that is probably good. */
12272                                         *p++ = xdig[1];
12273                                     }
12274                                 }
12275                             }
12276                             /* The new effective "last non zero". */
12277                             vlnz = vhex + precis;
12278                         }
12279                         else {
12280                             zerotail = precis - (vlnz - vhex);
12281                         }
12282                     }
12283
12284                     v = vhex;
12285                     *p++ = xdig[*v++];
12286
12287                     /* The radix is always output after the first
12288                      * non-zero xdigit, or if alt.  */
12289                     if (vfnz < vlnz || alt) {
12290 #ifndef USE_LOCALE_NUMERIC
12291                         *p++ = '.';
12292 #else
12293                         STORE_LC_NUMERIC_SET_TO_NEEDED();
12294                         if (PL_numeric_radix_sv && IN_LC(LC_NUMERIC)) {
12295                             STRLEN n;
12296                             const char* r = SvPV(PL_numeric_radix_sv, n);
12297                             Copy(r, p, n, char);
12298                             p += n;
12299                         }
12300                         else {
12301                             *p++ = '.';
12302                         }
12303                         RESTORE_LC_NUMERIC();
12304 #endif
12305                     }
12306
12307                     while (v <= vlnz)
12308                         *p++ = xdig[*v++];
12309
12310                     while (zerotail--)
12311                         *p++ = '0';
12312                 }
12313                 else {
12314                     *p++ = '0';
12315                     exponent = 0;
12316                 }
12317
12318                 elen = p - PL_efloatbuf;
12319                 elen += my_snprintf(p, PL_efloatsize - elen,
12320                                     "%c%+d", lower ? 'p' : 'P',
12321                                     exponent);
12322
12323                 if (elen < width) {
12324                     if (left) {
12325                         /* Pad the back with spaces. */
12326                         memset(PL_efloatbuf + elen, ' ', width - elen);
12327                     }
12328                     else if (fill == '0') {
12329                         /* Insert the zeros between the "0x" and
12330                          * the digits, otherwise we end up with
12331                          * "0000xHHH..." */
12332                         STRLEN nzero = width - elen;
12333                         char* zerox = PL_efloatbuf + 2;
12334                         Move(zerox, zerox + nzero,  elen - 2, char);
12335                         memset(zerox, fill, nzero);
12336                     }
12337                     else {
12338                         /* Move it to the right. */
12339                         Move(PL_efloatbuf, PL_efloatbuf + width - elen,
12340                              elen, char);
12341                         /* Pad the front with spaces. */
12342                         memset(PL_efloatbuf, ' ', width - elen);
12343                     }
12344                     elen = width;
12345                 }
12346             }
12347             else {
12348                 elen = S_infnan_2pv(nv, PL_efloatbuf, PL_efloatsize, plus);
12349                 if (elen) {
12350                     /* Not affecting infnan output: precision, alt, fill. */
12351                     if (elen < width) {
12352                         if (left) {
12353                             /* Pack the back with spaces. */
12354                             memset(PL_efloatbuf + elen, ' ', width - elen);
12355                         } else {
12356                             /* Move it to the right. */
12357                             Move(PL_efloatbuf, PL_efloatbuf + width - elen,
12358                                  elen, char);
12359                             /* Pad the front with spaces. */
12360                             memset(PL_efloatbuf, ' ', width - elen);
12361                         }
12362                         elen = width;
12363                     }
12364                 }
12365             }
12366
12367             if (elen == 0) {
12368                 char *ptr = ebuf + sizeof ebuf;
12369                 *--ptr = '\0';
12370                 *--ptr = c;
12371 #if defined(USE_QUADMATH)
12372                 if (intsize == 'q') {
12373                     /* "g" -> "Qg" */
12374                     *--ptr = 'Q';
12375                 }
12376                 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
12377 #elif defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
12378                 /* Note that this is HAS_LONG_DOUBLE and PERL_PRIfldbl,
12379                  * not USE_LONG_DOUBLE and NVff.  In other words,
12380                  * this needs to work without USE_LONG_DOUBLE. */
12381                 if (intsize == 'q') {
12382                     /* Copy the one or more characters in a long double
12383                      * format before the 'base' ([efgEFG]) character to
12384                      * the format string. */
12385                     static char const ldblf[] = PERL_PRIfldbl;
12386                     char const *p = ldblf + sizeof(ldblf) - 3;
12387                     while (p >= ldblf) { *--ptr = *p--; }
12388                 }
12389 #endif
12390                 if (has_precis) {
12391                     base = precis;
12392                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
12393                     *--ptr = '.';
12394                 }
12395                 if (width) {
12396                     base = width;
12397                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
12398                 }
12399                 if (fill == '0')
12400                     *--ptr = fill;
12401                 if (left)
12402                     *--ptr = '-';
12403                 if (plus)
12404                     *--ptr = plus;
12405                 if (alt)
12406                     *--ptr = '#';
12407                 *--ptr = '%';
12408
12409                 /* No taint.  Otherwise we are in the strange situation
12410                  * where printf() taints but print($float) doesn't.
12411                  * --jhi */
12412
12413                 STORE_LC_NUMERIC_SET_TO_NEEDED();
12414
12415                 /* hopefully the above makes ptr a very constrained format
12416                  * that is safe to use, even though it's not literal */
12417                 GCC_DIAG_IGNORE(-Wformat-nonliteral);
12418 #ifdef USE_QUADMATH
12419                 {
12420                     const char* qfmt = quadmath_format_single(ptr);
12421                     if (!qfmt)
12422                         Perl_croak_nocontext("panic: quadmath invalid format \"%s\"", ptr);
12423                     elen = quadmath_snprintf(PL_efloatbuf, PL_efloatsize,
12424                                              qfmt, nv);
12425                     if ((IV)elen == -1)
12426                         Perl_croak_nocontext("panic: quadmath_snprintf failed, format \"%s|'", qfmt);
12427                     if (qfmt != ptr)
12428                         Safefree(qfmt);
12429                 }
12430 #elif defined(HAS_LONG_DOUBLE)
12431                 elen = ((intsize == 'q')
12432                         ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, fv)
12433                         : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)fv));
12434 #else
12435                 elen = my_sprintf(PL_efloatbuf, ptr, fv);
12436 #endif
12437                 GCC_DIAG_RESTORE;
12438             }
12439
12440         float_converted:
12441             eptr = PL_efloatbuf;
12442             assert((IV)elen > 0); /* here zero elen is bad */
12443
12444 #ifdef USE_LOCALE_NUMERIC
12445             /* If the decimal point character in the string is UTF-8, make the
12446              * output utf8 */
12447             if (PL_numeric_radix_sv && SvUTF8(PL_numeric_radix_sv)
12448                 && instr(eptr, SvPVX_const(PL_numeric_radix_sv)))
12449             {
12450                 is_utf8 = TRUE;
12451             }
12452 #endif
12453
12454             break;
12455
12456             /* SPECIAL */
12457
12458         case 'n':
12459             if (vectorize)
12460                 goto unknown;
12461             i = SvCUR(sv) - origlen;
12462             if (args) {
12463                 switch (intsize) {
12464                 case 'c':       *(va_arg(*args, char*)) = i; break;
12465                 case 'h':       *(va_arg(*args, short*)) = i; break;
12466                 default:        *(va_arg(*args, int*)) = i; break;
12467                 case 'l':       *(va_arg(*args, long*)) = i; break;
12468                 case 'V':       *(va_arg(*args, IV*)) = i; break;
12469                 case 'z':       *(va_arg(*args, SSize_t*)) = i; break;
12470 #ifdef HAS_PTRDIFF_T
12471                 case 't':       *(va_arg(*args, ptrdiff_t*)) = i; break;
12472 #endif
12473 #ifdef I_STDINT
12474                 case 'j':       *(va_arg(*args, intmax_t*)) = i; break;
12475 #endif
12476                 case 'q':
12477 #if IVSIZE >= 8
12478                                 *(va_arg(*args, Quad_t*)) = i; break;
12479 #else
12480                                 goto unknown;
12481 #endif
12482                 }
12483             }
12484             else
12485                 sv_setuv_mg(argsv, has_utf8 ? (UV)sv_len_utf8(sv) : (UV)i);
12486             goto donevalidconversion;
12487
12488             /* UNKNOWN */
12489
12490         default:
12491       unknown:
12492             if (!args
12493                 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
12494                 && ckWARN(WARN_PRINTF))
12495             {
12496                 SV * const msg = sv_newmortal();
12497                 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
12498                           (PL_op->op_type == OP_PRTF) ? "" : "s");
12499                 if (fmtstart < patend) {
12500                     const char * const fmtend = q < patend ? q : patend;
12501                     const char * f;
12502                     sv_catpvs(msg, "\"%");
12503                     for (f = fmtstart; f < fmtend; f++) {
12504                         if (isPRINT(*f)) {
12505                             sv_catpvn_nomg(msg, f, 1);
12506                         } else {
12507                             Perl_sv_catpvf(aTHX_ msg,
12508                                            "\\%03"UVof, (UV)*f & 0xFF);
12509                         }
12510                     }
12511                     sv_catpvs(msg, "\"");
12512                 } else {
12513                     sv_catpvs(msg, "end of string");
12514                 }
12515                 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, SVfARG(msg)); /* yes, this is reentrant */
12516             }
12517
12518             /* output mangled stuff ... */
12519             if (c == '\0')
12520                 --q;
12521             eptr = p;
12522             elen = q - p;
12523
12524             /* ... right here, because formatting flags should not apply */
12525             SvGROW(sv, SvCUR(sv) + elen + 1);
12526             p = SvEND(sv);
12527             Copy(eptr, p, elen, char);
12528             p += elen;
12529             *p = '\0';
12530             SvCUR_set(sv, p - SvPVX_const(sv));
12531             svix = osvix;
12532             continue;   /* not "break" */
12533         }
12534
12535         if (is_utf8 != has_utf8) {
12536             if (is_utf8) {
12537                 if (SvCUR(sv))
12538                     sv_utf8_upgrade(sv);
12539             }
12540             else {
12541                 const STRLEN old_elen = elen;
12542                 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
12543                 sv_utf8_upgrade(nsv);
12544                 eptr = SvPVX_const(nsv);
12545                 elen = SvCUR(nsv);
12546
12547                 if (width) { /* fudge width (can't fudge elen) */
12548                     width += elen - old_elen;
12549                 }
12550                 is_utf8 = TRUE;
12551             }
12552         }
12553
12554         assert((IV)elen >= 0); /* here zero elen is fine */
12555         have = esignlen + zeros + elen;
12556         if (have < zeros)
12557             croak_memory_wrap();
12558
12559         need = (have > width ? have : width);
12560         gap = need - have;
12561
12562         if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
12563             croak_memory_wrap();
12564         SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
12565         p = SvEND(sv);
12566         if (esignlen && fill == '0') {
12567             int i;
12568             for (i = 0; i < (int)esignlen; i++)
12569                 *p++ = esignbuf[i];
12570         }
12571         if (gap && !left) {
12572             memset(p, fill, gap);
12573             p += gap;
12574         }
12575         if (esignlen && fill != '0') {
12576             int i;
12577             for (i = 0; i < (int)esignlen; i++)
12578                 *p++ = esignbuf[i];
12579         }
12580         if (zeros) {
12581             int i;
12582             for (i = zeros; i; i--)
12583                 *p++ = '0';
12584         }
12585         if (elen) {
12586             Copy(eptr, p, elen, char);
12587             p += elen;
12588         }
12589         if (gap && left) {
12590             memset(p, ' ', gap);
12591             p += gap;
12592         }
12593         if (vectorize) {
12594             if (veclen) {
12595                 Copy(dotstr, p, dotstrlen, char);
12596                 p += dotstrlen;
12597             }
12598             else
12599                 vectorize = FALSE;              /* done iterating over vecstr */
12600         }
12601         if (is_utf8)
12602             has_utf8 = TRUE;
12603         if (has_utf8)
12604             SvUTF8_on(sv);
12605         *p = '\0';
12606         SvCUR_set(sv, p - SvPVX_const(sv));
12607         if (vectorize) {
12608             esignlen = 0;
12609             goto vector;
12610         }
12611
12612       donevalidconversion:
12613         if (used_explicit_ix)
12614             no_redundant_warning = TRUE;
12615         if (arg_missing)
12616             S_warn_vcatpvfn_missing_argument(aTHX);
12617     }
12618
12619     /* Now that we've consumed all our printf format arguments (svix)
12620      * do we have things left on the stack that we didn't use?
12621      */
12622     if (!no_redundant_warning && svmax >= svix + 1 && ckWARN(WARN_REDUNDANT)) {
12623         Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
12624                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
12625     }
12626
12627     SvTAINT(sv);
12628
12629     RESTORE_LC_NUMERIC();   /* Done outside loop, so don't have to save/restore
12630                                each iteration. */
12631 }
12632
12633 /* =========================================================================
12634
12635 =head1 Cloning an interpreter
12636
12637 =cut
12638
12639 All the macros and functions in this section are for the private use of
12640 the main function, perl_clone().
12641
12642 The foo_dup() functions make an exact copy of an existing foo thingy.
12643 During the course of a cloning, a hash table is used to map old addresses
12644 to new addresses.  The table is created and manipulated with the
12645 ptr_table_* functions.
12646
12647  * =========================================================================*/
12648
12649
12650 #if defined(USE_ITHREADS)
12651
12652 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
12653 #ifndef GpREFCNT_inc
12654 #  define GpREFCNT_inc(gp)      ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
12655 #endif
12656
12657
12658 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact
12659    that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
12660    If this changes, please unmerge ss_dup.
12661    Likewise, sv_dup_inc_multiple() relies on this fact.  */
12662 #define sv_dup_inc_NN(s,t)      SvREFCNT_inc_NN(sv_dup_inc(s,t))
12663 #define av_dup(s,t)     MUTABLE_AV(sv_dup((const SV *)s,t))
12664 #define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
12665 #define hv_dup(s,t)     MUTABLE_HV(sv_dup((const SV *)s,t))
12666 #define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
12667 #define cv_dup(s,t)     MUTABLE_CV(sv_dup((const SV *)s,t))
12668 #define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t))
12669 #define io_dup(s,t)     MUTABLE_IO(sv_dup((const SV *)s,t))
12670 #define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t))
12671 #define gv_dup(s,t)     MUTABLE_GV(sv_dup((const SV *)s,t))
12672 #define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t))
12673 #define SAVEPV(p)       ((p) ? savepv(p) : NULL)
12674 #define SAVEPVN(p,n)    ((p) ? savepvn(p,n) : NULL)
12675
12676 /* clone a parser */
12677
12678 yy_parser *
12679 Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
12680 {
12681     yy_parser *parser;
12682
12683     PERL_ARGS_ASSERT_PARSER_DUP;
12684
12685     if (!proto)
12686         return NULL;
12687
12688     /* look for it in the table first */
12689     parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
12690     if (parser)
12691         return parser;
12692
12693     /* create anew and remember what it is */
12694     Newxz(parser, 1, yy_parser);
12695     ptr_table_store(PL_ptr_table, proto, parser);
12696
12697     /* XXX these not yet duped */
12698     parser->old_parser = NULL;
12699     parser->stack = NULL;
12700     parser->ps = NULL;
12701     parser->stack_size = 0;
12702     /* XXX parser->stack->state = 0; */
12703
12704     /* XXX eventually, just Copy() most of the parser struct ? */
12705
12706     parser->lex_brackets = proto->lex_brackets;
12707     parser->lex_casemods = proto->lex_casemods;
12708     parser->lex_brackstack = savepvn(proto->lex_brackstack,
12709                     (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
12710     parser->lex_casestack = savepvn(proto->lex_casestack,
12711                     (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
12712     parser->lex_defer   = proto->lex_defer;
12713     parser->lex_dojoin  = proto->lex_dojoin;
12714     parser->lex_formbrack = proto->lex_formbrack;
12715     parser->lex_inpat   = proto->lex_inpat;
12716     parser->lex_inwhat  = proto->lex_inwhat;
12717     parser->lex_op      = proto->lex_op;
12718     parser->lex_repl    = sv_dup_inc(proto->lex_repl, param);
12719     parser->lex_starts  = proto->lex_starts;
12720     parser->lex_stuff   = sv_dup_inc(proto->lex_stuff, param);
12721     parser->multi_close = proto->multi_close;
12722     parser->multi_open  = proto->multi_open;
12723     parser->multi_start = proto->multi_start;
12724     parser->multi_end   = proto->multi_end;
12725     parser->preambled   = proto->preambled;
12726     parser->sublex_info = proto->sublex_info; /* XXX not quite right */
12727     parser->linestr     = sv_dup_inc(proto->linestr, param);
12728     parser->expect      = proto->expect;
12729     parser->copline     = proto->copline;
12730     parser->last_lop_op = proto->last_lop_op;
12731     parser->lex_state   = proto->lex_state;
12732     parser->rsfp        = fp_dup(proto->rsfp, '<', param);
12733     /* rsfp_filters entries have fake IoDIRP() */
12734     parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
12735     parser->in_my       = proto->in_my;
12736     parser->in_my_stash = hv_dup(proto->in_my_stash, param);
12737     parser->error_count = proto->error_count;
12738
12739
12740     parser->linestr     = sv_dup_inc(proto->linestr, param);
12741
12742     {
12743         char * const ols = SvPVX(proto->linestr);
12744         char * const ls  = SvPVX(parser->linestr);
12745
12746         parser->bufptr      = ls + (proto->bufptr >= ols ?
12747                                     proto->bufptr -  ols : 0);
12748         parser->oldbufptr   = ls + (proto->oldbufptr >= ols ?
12749                                     proto->oldbufptr -  ols : 0);
12750         parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
12751                                     proto->oldoldbufptr -  ols : 0);
12752         parser->linestart   = ls + (proto->linestart >= ols ?
12753                                     proto->linestart -  ols : 0);
12754         parser->last_uni    = ls + (proto->last_uni >= ols ?
12755                                     proto->last_uni -  ols : 0);
12756         parser->last_lop    = ls + (proto->last_lop >= ols ?
12757                                     proto->last_lop -  ols : 0);
12758
12759         parser->bufend      = ls + SvCUR(parser->linestr);
12760     }
12761
12762     Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
12763
12764
12765     Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
12766     Copy(proto->nexttype, parser->nexttype, 5,  I32);
12767     parser->nexttoke    = proto->nexttoke;
12768
12769     /* XXX should clone saved_curcop here, but we aren't passed
12770      * proto_perl; so do it in perl_clone_using instead */
12771
12772     return parser;
12773 }
12774
12775
12776 /* duplicate a file handle */
12777
12778 PerlIO *
12779 Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
12780 {
12781     PerlIO *ret;
12782
12783     PERL_ARGS_ASSERT_FP_DUP;
12784     PERL_UNUSED_ARG(type);
12785
12786     if (!fp)
12787         return (PerlIO*)NULL;
12788
12789     /* look for it in the table first */
12790     ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
12791     if (ret)
12792         return ret;
12793
12794     /* create anew and remember what it is */
12795     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
12796     ptr_table_store(PL_ptr_table, fp, ret);
12797     return ret;
12798 }
12799
12800 /* duplicate a directory handle */
12801
12802 DIR *
12803 Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
12804 {
12805     DIR *ret;
12806
12807 #if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
12808     DIR *pwd;
12809     const Direntry_t *dirent;
12810     char smallbuf[256];
12811     char *name = NULL;
12812     STRLEN len = 0;
12813     long pos;
12814 #endif
12815
12816     PERL_UNUSED_CONTEXT;
12817     PERL_ARGS_ASSERT_DIRP_DUP;
12818
12819     if (!dp)
12820         return (DIR*)NULL;
12821
12822     /* look for it in the table first */
12823     ret = (DIR*)ptr_table_fetch(PL_ptr_table, dp);
12824     if (ret)
12825         return ret;
12826
12827 #if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
12828
12829     PERL_UNUSED_ARG(param);
12830
12831     /* create anew */
12832
12833     /* open the current directory (so we can switch back) */
12834     if (!(pwd = PerlDir_open("."))) return (DIR *)NULL;
12835
12836     /* chdir to our dir handle and open the present working directory */
12837     if (fchdir(my_dirfd(dp)) < 0 || !(ret = PerlDir_open("."))) {
12838         PerlDir_close(pwd);
12839         return (DIR *)NULL;
12840     }
12841     /* Now we should have two dir handles pointing to the same dir. */
12842
12843     /* Be nice to the calling code and chdir back to where we were. */
12844     /* XXX If this fails, then what? */
12845     PERL_UNUSED_RESULT(fchdir(my_dirfd(pwd)));
12846
12847     /* We have no need of the pwd handle any more. */
12848     PerlDir_close(pwd);
12849
12850 #ifdef DIRNAMLEN
12851 # define d_namlen(d) (d)->d_namlen
12852 #else
12853 # define d_namlen(d) strlen((d)->d_name)
12854 #endif
12855     /* Iterate once through dp, to get the file name at the current posi-
12856        tion. Then step back. */
12857     pos = PerlDir_tell(dp);
12858     if ((dirent = PerlDir_read(dp))) {
12859         len = d_namlen(dirent);
12860         if (len <= sizeof smallbuf) name = smallbuf;
12861         else Newx(name, len, char);
12862         Move(dirent->d_name, name, len, char);
12863     }
12864     PerlDir_seek(dp, pos);
12865
12866     /* Iterate through the new dir handle, till we find a file with the
12867        right name. */
12868     if (!dirent) /* just before the end */
12869         for(;;) {
12870             pos = PerlDir_tell(ret);
12871             if (PerlDir_read(ret)) continue; /* not there yet */
12872             PerlDir_seek(ret, pos); /* step back */
12873             break;
12874         }
12875     else {
12876         const long pos0 = PerlDir_tell(ret);
12877         for(;;) {
12878             pos = PerlDir_tell(ret);
12879             if ((dirent = PerlDir_read(ret))) {
12880                 if (len == (STRLEN)d_namlen(dirent)
12881                     && memEQ(name, dirent->d_name, len)) {
12882                     /* found it */
12883                     PerlDir_seek(ret, pos); /* step back */
12884                     break;
12885                 }
12886                 /* else we are not there yet; keep iterating */
12887             }
12888             else { /* This is not meant to happen. The best we can do is
12889                       reset the iterator to the beginning. */
12890                 PerlDir_seek(ret, pos0);
12891                 break;
12892             }
12893         }
12894     }
12895 #undef d_namlen
12896
12897     if (name && name != smallbuf)
12898         Safefree(name);
12899 #endif
12900
12901 #ifdef WIN32
12902     ret = win32_dirp_dup(dp, param);
12903 #endif
12904
12905     /* pop it in the pointer table */
12906     if (ret)
12907         ptr_table_store(PL_ptr_table, dp, ret);
12908
12909     return ret;
12910 }
12911
12912 /* duplicate a typeglob */
12913
12914 GP *
12915 Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
12916 {
12917     GP *ret;
12918
12919     PERL_ARGS_ASSERT_GP_DUP;
12920
12921     if (!gp)
12922         return (GP*)NULL;
12923     /* look for it in the table first */
12924     ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
12925     if (ret)
12926         return ret;
12927
12928     /* create anew and remember what it is */
12929     Newxz(ret, 1, GP);
12930     ptr_table_store(PL_ptr_table, gp, ret);
12931
12932     /* clone */
12933     /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
12934        on Newxz() to do this for us.  */
12935     ret->gp_sv          = sv_dup_inc(gp->gp_sv, param);
12936     ret->gp_io          = io_dup_inc(gp->gp_io, param);
12937     ret->gp_form        = cv_dup_inc(gp->gp_form, param);
12938     ret->gp_av          = av_dup_inc(gp->gp_av, param);
12939     ret->gp_hv          = hv_dup_inc(gp->gp_hv, param);
12940     ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
12941     ret->gp_cv          = cv_dup_inc(gp->gp_cv, param);
12942     ret->gp_cvgen       = gp->gp_cvgen;
12943     ret->gp_line        = gp->gp_line;
12944     ret->gp_file_hek    = hek_dup(gp->gp_file_hek, param);
12945     return ret;
12946 }
12947
12948 /* duplicate a chain of magic */
12949
12950 MAGIC *
12951 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
12952 {
12953     MAGIC *mgret = NULL;
12954     MAGIC **mgprev_p = &mgret;
12955
12956     PERL_ARGS_ASSERT_MG_DUP;
12957
12958     for (; mg; mg = mg->mg_moremagic) {
12959         MAGIC *nmg;
12960
12961         if ((param->flags & CLONEf_JOIN_IN)
12962                 && mg->mg_type == PERL_MAGIC_backref)
12963             /* when joining, we let the individual SVs add themselves to
12964              * backref as needed. */
12965             continue;
12966
12967         Newx(nmg, 1, MAGIC);
12968         *mgprev_p = nmg;
12969         mgprev_p = &(nmg->mg_moremagic);
12970
12971         /* There was a comment "XXX copy dynamic vtable?" but as we don't have
12972            dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
12973            from the original commit adding Perl_mg_dup() - revision 4538.
12974            Similarly there is the annotation "XXX random ptr?" next to the
12975            assignment to nmg->mg_ptr.  */
12976         *nmg = *mg;
12977
12978         /* FIXME for plugins
12979         if (nmg->mg_type == PERL_MAGIC_qr) {
12980             nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
12981         }
12982         else
12983         */
12984         nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
12985                           ? nmg->mg_type == PERL_MAGIC_backref
12986                                 /* The backref AV has its reference
12987                                  * count deliberately bumped by 1 */
12988                                 ? SvREFCNT_inc(av_dup_inc((const AV *)
12989                                                     nmg->mg_obj, param))
12990                                 : sv_dup_inc(nmg->mg_obj, param)
12991                           : sv_dup(nmg->mg_obj, param);
12992
12993         if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
12994             if (nmg->mg_len > 0) {
12995                 nmg->mg_ptr     = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
12996                 if (nmg->mg_type == PERL_MAGIC_overload_table &&
12997                         AMT_AMAGIC((AMT*)nmg->mg_ptr))
12998                 {
12999                     AMT * const namtp = (AMT*)nmg->mg_ptr;
13000                     sv_dup_inc_multiple((SV**)(namtp->table),
13001                                         (SV**)(namtp->table), NofAMmeth, param);
13002                 }
13003             }
13004             else if (nmg->mg_len == HEf_SVKEY)
13005                 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
13006         }
13007         if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
13008             nmg->mg_virtual->svt_dup(aTHX_ nmg, param);
13009         }
13010     }
13011     return mgret;
13012 }
13013
13014 #endif /* USE_ITHREADS */
13015
13016 struct ptr_tbl_arena {
13017     struct ptr_tbl_arena *next;
13018     struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers.  */
13019 };
13020
13021 /* create a new pointer-mapping table */
13022
13023 PTR_TBL_t *
13024 Perl_ptr_table_new(pTHX)
13025 {
13026     PTR_TBL_t *tbl;
13027     PERL_UNUSED_CONTEXT;
13028
13029     Newx(tbl, 1, PTR_TBL_t);
13030     tbl->tbl_max        = 511;
13031     tbl->tbl_items      = 0;
13032     tbl->tbl_arena      = NULL;
13033     tbl->tbl_arena_next = NULL;
13034     tbl->tbl_arena_end  = NULL;
13035     Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
13036     return tbl;
13037 }
13038
13039 #define PTR_TABLE_HASH(ptr) \
13040   ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
13041
13042 /* map an existing pointer using a table */
13043
13044 STATIC PTR_TBL_ENT_t *
13045 S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
13046 {
13047     PTR_TBL_ENT_t *tblent;
13048     const UV hash = PTR_TABLE_HASH(sv);
13049
13050     PERL_ARGS_ASSERT_PTR_TABLE_FIND;
13051
13052     tblent = tbl->tbl_ary[hash & tbl->tbl_max];
13053     for (; tblent; tblent = tblent->next) {
13054         if (tblent->oldval == sv)
13055             return tblent;
13056     }
13057     return NULL;
13058 }
13059
13060 void *
13061 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
13062 {
13063     PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
13064
13065     PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
13066     PERL_UNUSED_CONTEXT;
13067
13068     return tblent ? tblent->newval : NULL;
13069 }
13070
13071 /* add a new entry to a pointer-mapping table 'tbl'.  In hash terms, 'oldsv' is
13072  * the key; 'newsv' is the value.  The names "old" and "new" are specific to
13073  * the core's typical use of ptr_tables in thread cloning. */
13074
13075 void
13076 Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
13077 {
13078     PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
13079
13080     PERL_ARGS_ASSERT_PTR_TABLE_STORE;
13081     PERL_UNUSED_CONTEXT;
13082
13083     if (tblent) {
13084         tblent->newval = newsv;
13085     } else {
13086         const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
13087
13088         if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
13089             struct ptr_tbl_arena *new_arena;
13090
13091             Newx(new_arena, 1, struct ptr_tbl_arena);
13092             new_arena->next = tbl->tbl_arena;
13093             tbl->tbl_arena = new_arena;
13094             tbl->tbl_arena_next = new_arena->array;
13095             tbl->tbl_arena_end = C_ARRAY_END(new_arena->array);
13096         }
13097
13098         tblent = tbl->tbl_arena_next++;
13099
13100         tblent->oldval = oldsv;
13101         tblent->newval = newsv;
13102         tblent->next = tbl->tbl_ary[entry];
13103         tbl->tbl_ary[entry] = tblent;
13104         tbl->tbl_items++;
13105         if (tblent->next && tbl->tbl_items > tbl->tbl_max)
13106             ptr_table_split(tbl);
13107     }
13108 }
13109
13110 /* double the hash bucket size of an existing ptr table */
13111
13112 void
13113 Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
13114 {
13115     PTR_TBL_ENT_t **ary = tbl->tbl_ary;
13116     const UV oldsize = tbl->tbl_max + 1;
13117     UV newsize = oldsize * 2;
13118     UV i;
13119
13120     PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
13121     PERL_UNUSED_CONTEXT;
13122
13123     Renew(ary, newsize, PTR_TBL_ENT_t*);
13124     Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
13125     tbl->tbl_max = --newsize;
13126     tbl->tbl_ary = ary;
13127     for (i=0; i < oldsize; i++, ary++) {
13128         PTR_TBL_ENT_t **entp = ary;
13129         PTR_TBL_ENT_t *ent = *ary;
13130         PTR_TBL_ENT_t **curentp;
13131         if (!ent)
13132             continue;
13133         curentp = ary + oldsize;
13134         do {
13135             if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
13136                 *entp = ent->next;
13137                 ent->next = *curentp;
13138                 *curentp = ent;
13139             }
13140             else
13141                 entp = &ent->next;
13142             ent = *entp;
13143         } while (ent);
13144     }
13145 }
13146
13147 /* remove all the entries from a ptr table */
13148 /* Deprecated - will be removed post 5.14 */
13149
13150 void
13151 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
13152 {
13153     PERL_UNUSED_CONTEXT;
13154     if (tbl && tbl->tbl_items) {
13155         struct ptr_tbl_arena *arena = tbl->tbl_arena;
13156
13157         Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent *);
13158
13159         while (arena) {
13160             struct ptr_tbl_arena *next = arena->next;
13161
13162             Safefree(arena);
13163             arena = next;
13164         };
13165
13166         tbl->tbl_items = 0;
13167         tbl->tbl_arena = NULL;
13168         tbl->tbl_arena_next = NULL;
13169         tbl->tbl_arena_end = NULL;
13170     }
13171 }
13172
13173 /* clear and free a ptr table */
13174
13175 void
13176 Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
13177 {
13178     struct ptr_tbl_arena *arena;
13179
13180     PERL_UNUSED_CONTEXT;
13181
13182     if (!tbl) {
13183         return;
13184     }
13185
13186     arena = tbl->tbl_arena;
13187
13188     while (arena) {
13189         struct ptr_tbl_arena *next = arena->next;
13190
13191         Safefree(arena);
13192         arena = next;
13193     }
13194
13195     Safefree(tbl->tbl_ary);
13196     Safefree(tbl);
13197 }
13198
13199 #if defined(USE_ITHREADS)
13200
13201 void
13202 Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
13203 {
13204     PERL_ARGS_ASSERT_RVPV_DUP;
13205
13206     assert(!isREGEXP(sstr));
13207     if (SvROK(sstr)) {
13208         if (SvWEAKREF(sstr)) {
13209             SvRV_set(dstr, sv_dup(SvRV_const(sstr), param));
13210             if (param->flags & CLONEf_JOIN_IN) {
13211                 /* if joining, we add any back references individually rather
13212                  * than copying the whole backref array */
13213                 Perl_sv_add_backref(aTHX_ SvRV(dstr), dstr);
13214             }
13215         }
13216         else
13217             SvRV_set(dstr, sv_dup_inc(SvRV_const(sstr), param));
13218     }
13219     else if (SvPVX_const(sstr)) {
13220         /* Has something there */
13221         if (SvLEN(sstr)) {
13222             /* Normal PV - clone whole allocated space */
13223             SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
13224             /* sstr may not be that normal, but actually copy on write.
13225                But we are a true, independent SV, so:  */
13226             SvIsCOW_off(dstr);
13227         }
13228         else {
13229             /* Special case - not normally malloced for some reason */
13230             if (isGV_with_GP(sstr)) {
13231                 /* Don't need to do anything here.  */
13232             }
13233             else if ((SvIsCOW(sstr))) {
13234                 /* A "shared" PV - clone it as "shared" PV */
13235                 SvPV_set(dstr,
13236                          HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
13237                                          param)));
13238             }
13239             else {
13240                 /* Some other special case - random pointer */
13241                 SvPV_set(dstr, (char *) SvPVX_const(sstr));             
13242             }
13243         }
13244     }
13245     else {
13246         /* Copy the NULL */
13247         SvPV_set(dstr, NULL);
13248     }
13249 }
13250
13251 /* duplicate a list of SVs. source and dest may point to the same memory.  */
13252 static SV **
13253 S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
13254                       SSize_t items, CLONE_PARAMS *const param)
13255 {
13256     PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
13257
13258     while (items-- > 0) {
13259         *dest++ = sv_dup_inc(*source++, param);
13260     }
13261
13262     return dest;
13263 }
13264
13265 /* duplicate an SV of any type (including AV, HV etc) */
13266
13267 static SV *
13268 S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
13269 {
13270     dVAR;
13271     SV *dstr;
13272
13273     PERL_ARGS_ASSERT_SV_DUP_COMMON;
13274
13275     if (SvTYPE(sstr) == (svtype)SVTYPEMASK) {
13276 #ifdef DEBUG_LEAKING_SCALARS_ABORT
13277         abort();
13278 #endif
13279         return NULL;
13280     }
13281     /* look for it in the table first */
13282     dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
13283     if (dstr)
13284         return dstr;
13285
13286     if(param->flags & CLONEf_JOIN_IN) {
13287         /** We are joining here so we don't want do clone
13288             something that is bad **/
13289         if (SvTYPE(sstr) == SVt_PVHV) {
13290             const HEK * const hvname = HvNAME_HEK(sstr);
13291             if (hvname) {
13292                 /** don't clone stashes if they already exist **/
13293                 dstr = MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
13294                                                 HEK_UTF8(hvname) ? SVf_UTF8 : 0));
13295                 ptr_table_store(PL_ptr_table, sstr, dstr);
13296                 return dstr;
13297             }
13298         }
13299         else if (SvTYPE(sstr) == SVt_PVGV && !SvFAKE(sstr)) {
13300             HV *stash = GvSTASH(sstr);
13301             const HEK * hvname;
13302             if (stash && (hvname = HvNAME_HEK(stash))) {
13303                 /** don't clone GVs if they already exist **/
13304                 SV **svp;
13305                 stash = gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
13306                                     HEK_UTF8(hvname) ? SVf_UTF8 : 0);
13307                 svp = hv_fetch(
13308                         stash, GvNAME(sstr),
13309                         GvNAMEUTF8(sstr)
13310                             ? -GvNAMELEN(sstr)
13311                             :  GvNAMELEN(sstr),
13312                         0
13313                       );
13314                 if (svp && *svp && SvTYPE(*svp) == SVt_PVGV) {
13315                     ptr_table_store(PL_ptr_table, sstr, *svp);
13316                     return *svp;
13317                 }
13318             }
13319         }
13320     }
13321
13322     /* create anew and remember what it is */
13323     new_SV(dstr);
13324
13325 #ifdef DEBUG_LEAKING_SCALARS
13326     dstr->sv_debug_optype = sstr->sv_debug_optype;
13327     dstr->sv_debug_line = sstr->sv_debug_line;
13328     dstr->sv_debug_inpad = sstr->sv_debug_inpad;
13329     dstr->sv_debug_parent = (SV*)sstr;
13330     FREE_SV_DEBUG_FILE(dstr);
13331     dstr->sv_debug_file = savesharedpv(sstr->sv_debug_file);
13332 #endif
13333
13334     ptr_table_store(PL_ptr_table, sstr, dstr);
13335
13336     /* clone */
13337     SvFLAGS(dstr)       = SvFLAGS(sstr);
13338     SvFLAGS(dstr)       &= ~SVf_OOK;            /* don't propagate OOK hack */
13339     SvREFCNT(dstr)      = 0;                    /* must be before any other dups! */
13340
13341 #ifdef DEBUGGING
13342     if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
13343         PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
13344                       (void*)PL_watch_pvx, SvPVX_const(sstr));
13345 #endif
13346
13347     /* don't clone objects whose class has asked us not to */
13348     if (SvOBJECT(sstr)
13349      && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE))
13350     {
13351         SvFLAGS(dstr) = 0;
13352         return dstr;
13353     }
13354
13355     switch (SvTYPE(sstr)) {
13356     case SVt_NULL:
13357         SvANY(dstr)     = NULL;
13358         break;
13359     case SVt_IV:
13360         SET_SVANY_FOR_BODYLESS_IV(dstr);
13361         if(SvROK(sstr)) {
13362             Perl_rvpv_dup(aTHX_ dstr, sstr, param);
13363         } else {
13364             SvIV_set(dstr, SvIVX(sstr));
13365         }
13366         break;
13367     case SVt_NV:
13368 #if NVSIZE <= IVSIZE
13369         SET_SVANY_FOR_BODYLESS_NV(dstr);
13370 #else
13371         SvANY(dstr)     = new_XNV();
13372 #endif
13373         SvNV_set(dstr, SvNVX(sstr));
13374         break;
13375     default:
13376         {
13377             /* These are all the types that need complex bodies allocating.  */
13378             void *new_body;
13379             const svtype sv_type = SvTYPE(sstr);
13380             const struct body_details *const sv_type_details
13381                 = bodies_by_type + sv_type;
13382
13383             switch (sv_type) {
13384             default:
13385                 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
13386                 break;
13387
13388             case SVt_PVGV:
13389             case SVt_PVIO:
13390             case SVt_PVFM:
13391             case SVt_PVHV:
13392             case SVt_PVAV:
13393             case SVt_PVCV:
13394             case SVt_PVLV:
13395             case SVt_REGEXP:
13396             case SVt_PVMG:
13397             case SVt_PVNV:
13398             case SVt_PVIV:
13399             case SVt_INVLIST:
13400             case SVt_PV:
13401                 assert(sv_type_details->body_size);
13402                 if (sv_type_details->arena) {
13403                     new_body_inline(new_body, sv_type);
13404                     new_body
13405                         = (void*)((char*)new_body - sv_type_details->offset);
13406                 } else {
13407                     new_body = new_NOARENA(sv_type_details);
13408                 }
13409             }
13410             assert(new_body);
13411             SvANY(dstr) = new_body;
13412
13413 #ifndef PURIFY
13414             Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
13415                  ((char*)SvANY(dstr)) + sv_type_details->offset,
13416                  sv_type_details->copy, char);
13417 #else
13418             Copy(((char*)SvANY(sstr)),
13419                  ((char*)SvANY(dstr)),
13420                  sv_type_details->body_size + sv_type_details->offset, char);
13421 #endif
13422
13423             if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
13424                 && !isGV_with_GP(dstr)
13425                 && !isREGEXP(dstr)
13426                 && !(sv_type == SVt_PVIO && !(IoFLAGS(dstr) & IOf_FAKE_DIRP)))
13427                 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
13428
13429             /* The Copy above means that all the source (unduplicated) pointers
13430                are now in the destination.  We can check the flags and the
13431                pointers in either, but it's possible that there's less cache
13432                missing by always going for the destination.
13433                FIXME - instrument and check that assumption  */
13434             if (sv_type >= SVt_PVMG) {
13435                 if (SvMAGIC(dstr))
13436                     SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
13437                 if (SvOBJECT(dstr) && SvSTASH(dstr))
13438                     SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
13439                 else SvSTASH_set(dstr, 0); /* don't copy DESTROY cache */
13440             }
13441
13442             /* The cast silences a GCC warning about unhandled types.  */
13443             switch ((int)sv_type) {
13444             case SVt_PV:
13445                 break;
13446             case SVt_PVIV:
13447                 break;
13448             case SVt_PVNV:
13449                 break;
13450             case SVt_PVMG:
13451                 break;
13452             case SVt_REGEXP:
13453               duprex:
13454                 /* FIXME for plugins */
13455                 dstr->sv_u.svu_rx = ((REGEXP *)dstr)->sv_any;
13456                 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
13457                 break;
13458             case SVt_PVLV:
13459                 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
13460                 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
13461                     LvTARG(dstr) = dstr;
13462                 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
13463                     LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
13464                 else
13465                     LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
13466                 if (isREGEXP(sstr)) goto duprex;
13467             case SVt_PVGV:
13468                 /* non-GP case already handled above */
13469                 if(isGV_with_GP(sstr)) {
13470                     GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
13471                     /* Don't call sv_add_backref here as it's going to be
13472                        created as part of the magic cloning of the symbol
13473                        table--unless this is during a join and the stash
13474                        is not actually being cloned.  */
13475                     /* Danger Will Robinson - GvGP(dstr) isn't initialised
13476                        at the point of this comment.  */
13477                     GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
13478                     if (param->flags & CLONEf_JOIN_IN)
13479                         Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
13480                     GvGP_set(dstr, gp_dup(GvGP(sstr), param));
13481                     (void)GpREFCNT_inc(GvGP(dstr));
13482                 }
13483                 break;
13484             case SVt_PVIO:
13485                 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
13486                 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
13487                     /* I have no idea why fake dirp (rsfps)
13488                        should be treated differently but otherwise
13489                        we end up with leaks -- sky*/
13490                     IoTOP_GV(dstr)      = gv_dup_inc(IoTOP_GV(dstr), param);
13491                     IoFMT_GV(dstr)      = gv_dup_inc(IoFMT_GV(dstr), param);
13492                     IoBOTTOM_GV(dstr)   = gv_dup_inc(IoBOTTOM_GV(dstr), param);
13493                 } else {
13494                     IoTOP_GV(dstr)      = gv_dup(IoTOP_GV(dstr), param);
13495                     IoFMT_GV(dstr)      = gv_dup(IoFMT_GV(dstr), param);
13496                     IoBOTTOM_GV(dstr)   = gv_dup(IoBOTTOM_GV(dstr), param);
13497                     if (IoDIRP(dstr)) {
13498                         IoDIRP(dstr)    = dirp_dup(IoDIRP(dstr), param);
13499                     } else {
13500                         NOOP;
13501                         /* IoDIRP(dstr) is already a copy of IoDIRP(sstr)  */
13502                     }
13503                     IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(dstr), param);
13504                 }
13505                 if (IoOFP(dstr) == IoIFP(sstr))
13506                     IoOFP(dstr) = IoIFP(dstr);
13507                 else
13508                     IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
13509                 IoTOP_NAME(dstr)        = SAVEPV(IoTOP_NAME(dstr));
13510                 IoFMT_NAME(dstr)        = SAVEPV(IoFMT_NAME(dstr));
13511                 IoBOTTOM_NAME(dstr)     = SAVEPV(IoBOTTOM_NAME(dstr));
13512                 break;
13513             case SVt_PVAV:
13514                 /* avoid cloning an empty array */
13515                 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
13516                     SV **dst_ary, **src_ary;
13517                     SSize_t items = AvFILLp((const AV *)sstr) + 1;
13518
13519                     src_ary = AvARRAY((const AV *)sstr);
13520                     Newxz(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
13521                     ptr_table_store(PL_ptr_table, src_ary, dst_ary);
13522                     AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
13523                     AvALLOC((const AV *)dstr) = dst_ary;
13524                     if (AvREAL((const AV *)sstr)) {
13525                         dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
13526                                                       param);
13527                     }
13528                     else {
13529                         while (items-- > 0)
13530                             *dst_ary++ = sv_dup(*src_ary++, param);
13531                     }
13532                     items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
13533                     while (items-- > 0) {
13534                         *dst_ary++ = NULL;
13535                     }
13536                 }
13537                 else {
13538                     AvARRAY(MUTABLE_AV(dstr))   = NULL;
13539                     AvALLOC((const AV *)dstr)   = (SV**)NULL;
13540                     AvMAX(  (const AV *)dstr)   = -1;
13541                     AvFILLp((const AV *)dstr)   = -1;
13542                 }
13543                 break;
13544             case SVt_PVHV:
13545                 if (HvARRAY((const HV *)sstr)) {
13546                     STRLEN i = 0;
13547                     const bool sharekeys = !!HvSHAREKEYS(sstr);
13548                     XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
13549                     XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
13550                     char *darray;
13551                     Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
13552                         + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
13553                         char);
13554                     HvARRAY(dstr) = (HE**)darray;
13555                     while (i <= sxhv->xhv_max) {
13556                         const HE * const source = HvARRAY(sstr)[i];
13557                         HvARRAY(dstr)[i] = source
13558                             ? he_dup(source, sharekeys, param) : 0;
13559                         ++i;
13560                     }
13561                     if (SvOOK(sstr)) {
13562                         const struct xpvhv_aux * const saux = HvAUX(sstr);
13563                         struct xpvhv_aux * const daux = HvAUX(dstr);
13564                         /* This flag isn't copied.  */
13565                         SvOOK_on(dstr);
13566
13567                         if (saux->xhv_name_count) {
13568                             HEK ** const sname = saux->xhv_name_u.xhvnameu_names;
13569                             const I32 count
13570                              = saux->xhv_name_count < 0
13571                                 ? -saux->xhv_name_count
13572                                 :  saux->xhv_name_count;
13573                             HEK **shekp = sname + count;
13574                             HEK **dhekp;
13575                             Newx(daux->xhv_name_u.xhvnameu_names, count, HEK *);
13576                             dhekp = daux->xhv_name_u.xhvnameu_names + count;
13577                             while (shekp-- > sname) {
13578                                 dhekp--;
13579                                 *dhekp = hek_dup(*shekp, param);
13580                             }
13581                         }
13582                         else {
13583                             daux->xhv_name_u.xhvnameu_name
13584                                 = hek_dup(saux->xhv_name_u.xhvnameu_name,
13585                                           param);
13586                         }
13587                         daux->xhv_name_count = saux->xhv_name_count;
13588
13589                         daux->xhv_fill_lazy = saux->xhv_fill_lazy;
13590                         daux->xhv_aux_flags = saux->xhv_aux_flags;
13591 #ifdef PERL_HASH_RANDOMIZE_KEYS
13592                         daux->xhv_rand = saux->xhv_rand;
13593                         daux->xhv_last_rand = saux->xhv_last_rand;
13594 #endif
13595                         daux->xhv_riter = saux->xhv_riter;
13596                         daux->xhv_eiter = saux->xhv_eiter
13597                             ? he_dup(saux->xhv_eiter,
13598                                         cBOOL(HvSHAREKEYS(sstr)), param) : 0;
13599                         /* backref array needs refcnt=2; see sv_add_backref */
13600                         daux->xhv_backreferences =
13601                             (param->flags & CLONEf_JOIN_IN)
13602                                 /* when joining, we let the individual GVs and
13603                                  * CVs add themselves to backref as
13604                                  * needed. This avoids pulling in stuff
13605                                  * that isn't required, and simplifies the
13606                                  * case where stashes aren't cloned back
13607                                  * if they already exist in the parent
13608                                  * thread */
13609                             ? NULL
13610                             : saux->xhv_backreferences
13611                                 ? (SvTYPE(saux->xhv_backreferences) == SVt_PVAV)
13612                                     ? MUTABLE_AV(SvREFCNT_inc(
13613                                           sv_dup_inc((const SV *)
13614                                             saux->xhv_backreferences, param)))
13615                                     : MUTABLE_AV(sv_dup((const SV *)
13616                                             saux->xhv_backreferences, param))
13617                                 : 0;
13618
13619                         daux->xhv_mro_meta = saux->xhv_mro_meta
13620                             ? mro_meta_dup(saux->xhv_mro_meta, param)
13621                             : 0;
13622
13623                         /* Record stashes for possible cloning in Perl_clone(). */
13624                         if (HvNAME(sstr))
13625                             av_push(param->stashes, dstr);
13626                     }
13627                 }
13628                 else
13629                     HvARRAY(MUTABLE_HV(dstr)) = NULL;
13630                 break;
13631             case SVt_PVCV:
13632                 if (!(param->flags & CLONEf_COPY_STACKS)) {
13633                     CvDEPTH(dstr) = 0;
13634                 }
13635                 /* FALLTHROUGH */
13636             case SVt_PVFM:
13637                 /* NOTE: not refcounted */
13638                 SvANY(MUTABLE_CV(dstr))->xcv_stash =
13639                     hv_dup(CvSTASH(dstr), param);
13640                 if ((param->flags & CLONEf_JOIN_IN) && CvSTASH(dstr))
13641                     Perl_sv_add_backref(aTHX_ MUTABLE_SV(CvSTASH(dstr)), dstr);
13642                 if (!CvISXSUB(dstr)) {
13643                     OP_REFCNT_LOCK;
13644                     CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
13645                     OP_REFCNT_UNLOCK;
13646                     CvSLABBED_off(dstr);
13647                 } else if (CvCONST(dstr)) {
13648                     CvXSUBANY(dstr).any_ptr =
13649                         sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
13650                 }
13651                 assert(!CvSLABBED(dstr));
13652                 if (CvDYNFILE(dstr)) CvFILE(dstr) = SAVEPV(CvFILE(dstr));
13653                 if (CvNAMED(dstr))
13654                     SvANY((CV *)dstr)->xcv_gv_u.xcv_hek =
13655                         hek_dup(CvNAME_HEK((CV *)sstr), param);
13656                 /* don't dup if copying back - CvGV isn't refcounted, so the
13657                  * duped GV may never be freed. A bit of a hack! DAPM */
13658                 else
13659                   SvANY(MUTABLE_CV(dstr))->xcv_gv_u.xcv_gv =
13660                     CvCVGV_RC(dstr)
13661                     ? gv_dup_inc(CvGV(sstr), param)
13662                     : (param->flags & CLONEf_JOIN_IN)
13663                         ? NULL
13664                         : gv_dup(CvGV(sstr), param);
13665
13666                 if (!CvISXSUB(sstr)) {
13667                     PADLIST * padlist = CvPADLIST(sstr);
13668                     if(padlist)
13669                         padlist = padlist_dup(padlist, param);
13670                     CvPADLIST_set(dstr, padlist);
13671                 } else
13672 /* unthreaded perl can't sv_dup so we dont support unthreaded's CvHSCXT */
13673                     PoisonPADLIST(dstr);
13674
13675                 CvOUTSIDE(dstr) =
13676                     CvWEAKOUTSIDE(sstr)
13677                     ? cv_dup(    CvOUTSIDE(dstr), param)
13678                     : cv_dup_inc(CvOUTSIDE(dstr), param);
13679                 break;
13680             }
13681         }
13682     }
13683
13684     return dstr;
13685  }
13686
13687 SV *
13688 Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
13689 {
13690     PERL_ARGS_ASSERT_SV_DUP_INC;
13691     return sstr ? SvREFCNT_inc(sv_dup_common(sstr, param)) : NULL;
13692 }
13693
13694 SV *
13695 Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
13696 {
13697     SV *dstr = sstr ? sv_dup_common(sstr, param) : NULL;
13698     PERL_ARGS_ASSERT_SV_DUP;
13699
13700     /* Track every SV that (at least initially) had a reference count of 0.
13701        We need to do this by holding an actual reference to it in this array.
13702        If we attempt to cheat, turn AvREAL_off(), and store only pointers
13703        (akin to the stashes hash, and the perl stack), we come unstuck if
13704        a weak reference (or other SV legitimately SvREFCNT() == 0 for this
13705        thread) is manipulated in a CLONE method, because CLONE runs before the
13706        unreferenced array is walked to find SVs still with SvREFCNT() == 0
13707        (and fix things up by giving each a reference via the temps stack).
13708        Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and
13709        then SvREFCNT_dec(), it will be cleaned up (and added to the free list)
13710        before the walk of unreferenced happens and a reference to that is SV
13711        added to the temps stack. At which point we have the same SV considered
13712        to be in use, and free to be re-used. Not good.
13713     */
13714     if (dstr && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dstr)) {
13715         assert(param->unreferenced);
13716         av_push(param->unreferenced, SvREFCNT_inc(dstr));
13717     }
13718
13719     return dstr;
13720 }
13721
13722 /* duplicate a context */
13723
13724 PERL_CONTEXT *
13725 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
13726 {
13727     PERL_CONTEXT *ncxs;
13728
13729     PERL_ARGS_ASSERT_CX_DUP;
13730
13731     if (!cxs)
13732         return (PERL_CONTEXT*)NULL;
13733
13734     /* look for it in the table first */
13735     ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
13736     if (ncxs)
13737         return ncxs;
13738
13739     /* create anew and remember what it is */
13740     Newx(ncxs, max + 1, PERL_CONTEXT);
13741     ptr_table_store(PL_ptr_table, cxs, ncxs);
13742     Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
13743
13744     while (ix >= 0) {
13745         PERL_CONTEXT * const ncx = &ncxs[ix];
13746         if (CxTYPE(ncx) == CXt_SUBST) {
13747             Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
13748         }
13749         else {
13750             ncx->blk_oldcop = (COP*)any_dup(ncx->blk_oldcop, param->proto_perl);
13751             switch (CxTYPE(ncx)) {
13752             case CXt_SUB:
13753                 ncx->blk_sub.cv         = (ncx->blk_sub.olddepth == 0
13754                                            ? cv_dup_inc(ncx->blk_sub.cv, param)
13755                                            : cv_dup(ncx->blk_sub.cv,param));
13756                 if(CxHASARGS(ncx)){
13757                     ncx->blk_sub.argarray = av_dup_inc(ncx->blk_sub.argarray,param);
13758                     ncx->blk_sub.savearray = av_dup_inc(ncx->blk_sub.savearray,param);
13759                 } else {
13760                     ncx->blk_sub.argarray = NULL;
13761                     ncx->blk_sub.savearray = NULL;
13762                 }
13763                 ncx->blk_sub.oldcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
13764                                            ncx->blk_sub.oldcomppad);
13765                 break;
13766             case CXt_EVAL:
13767                 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
13768                                                       param);
13769                 ncx->blk_eval.cur_text  = sv_dup(ncx->blk_eval.cur_text, param);
13770                 ncx->blk_eval.cv = cv_dup(ncx->blk_eval.cv, param);
13771                 break;
13772             case CXt_LOOP_LAZYSV:
13773                 ncx->blk_loop.state_u.lazysv.end
13774                     = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
13775                 /* Fallthrough: duplicate lazysv.cur by using the ary.ary
13776                    duplication code instead.
13777                    We are taking advantage of (1) av_dup_inc and sv_dup_inc
13778                    actually being the same function, and (2) order
13779                    equivalence of the two unions.
13780                    We can assert the later [but only at run time :-(]  */
13781                 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
13782                         (void *) &ncx->blk_loop.state_u.lazysv.cur);
13783                 /* FALLTHROUGH */
13784             case CXt_LOOP_FOR:
13785                 ncx->blk_loop.state_u.ary.ary
13786                     = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
13787                 /* FALLTHROUGH */
13788             case CXt_LOOP_LAZYIV:
13789             case CXt_LOOP_PLAIN:
13790                 /* code common to all CXt_LOOP_* types */
13791                 if (CxPADLOOP(ncx)) {
13792                     ncx->blk_loop.itervar_u.oldcomppad
13793                         = (PAD*)ptr_table_fetch(PL_ptr_table,
13794                                         ncx->blk_loop.itervar_u.oldcomppad);
13795                 } else {
13796                     ncx->blk_loop.itervar_u.gv
13797                         = gv_dup((const GV *)ncx->blk_loop.itervar_u.gv,
13798                                     param);
13799                 }
13800                 break;
13801             case CXt_FORMAT:
13802                 ncx->blk_format.cv      = cv_dup(ncx->blk_format.cv, param);
13803                 ncx->blk_format.gv      = gv_dup(ncx->blk_format.gv, param);
13804                 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
13805                                                      param);
13806                 break;
13807             case CXt_BLOCK:
13808             case CXt_NULL:
13809             case CXt_WHEN:
13810             case CXt_GIVEN:
13811                 break;
13812             }
13813         }
13814         --ix;
13815     }
13816     return ncxs;
13817 }
13818
13819 /* duplicate a stack info structure */
13820
13821 PERL_SI *
13822 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
13823 {
13824     PERL_SI *nsi;
13825
13826     PERL_ARGS_ASSERT_SI_DUP;
13827
13828     if (!si)
13829         return (PERL_SI*)NULL;
13830
13831     /* look for it in the table first */
13832     nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
13833     if (nsi)
13834         return nsi;
13835
13836     /* create anew and remember what it is */
13837     Newxz(nsi, 1, PERL_SI);
13838     ptr_table_store(PL_ptr_table, si, nsi);
13839
13840     nsi->si_stack       = av_dup_inc(si->si_stack, param);
13841     nsi->si_cxix        = si->si_cxix;
13842     nsi->si_cxmax       = si->si_cxmax;
13843     nsi->si_cxstack     = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
13844     nsi->si_type        = si->si_type;
13845     nsi->si_prev        = si_dup(si->si_prev, param);
13846     nsi->si_next        = si_dup(si->si_next, param);
13847     nsi->si_markoff     = si->si_markoff;
13848
13849     return nsi;
13850 }
13851
13852 #define POPINT(ss,ix)   ((ss)[--(ix)].any_i32)
13853 #define TOPINT(ss,ix)   ((ss)[ix].any_i32)
13854 #define POPLONG(ss,ix)  ((ss)[--(ix)].any_long)
13855 #define TOPLONG(ss,ix)  ((ss)[ix].any_long)
13856 #define POPIV(ss,ix)    ((ss)[--(ix)].any_iv)
13857 #define TOPIV(ss,ix)    ((ss)[ix].any_iv)
13858 #define POPUV(ss,ix)    ((ss)[--(ix)].any_uv)
13859 #define TOPUV(ss,ix)    ((ss)[ix].any_uv)
13860 #define POPBOOL(ss,ix)  ((ss)[--(ix)].any_bool)
13861 #define TOPBOOL(ss,ix)  ((ss)[ix].any_bool)
13862 #define POPPTR(ss,ix)   ((ss)[--(ix)].any_ptr)
13863 #define TOPPTR(ss,ix)   ((ss)[ix].any_ptr)
13864 #define POPDPTR(ss,ix)  ((ss)[--(ix)].any_dptr)
13865 #define TOPDPTR(ss,ix)  ((ss)[ix].any_dptr)
13866 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
13867 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
13868
13869 /* XXXXX todo */
13870 #define pv_dup_inc(p)   SAVEPV(p)
13871 #define pv_dup(p)       SAVEPV(p)
13872 #define svp_dup_inc(p,pp)       any_dup(p,pp)
13873
13874 /* map any object to the new equivent - either something in the
13875  * ptr table, or something in the interpreter structure
13876  */
13877
13878 void *
13879 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
13880 {
13881     void *ret;
13882
13883     PERL_ARGS_ASSERT_ANY_DUP;
13884
13885     if (!v)
13886         return (void*)NULL;
13887
13888     /* look for it in the table first */
13889     ret = ptr_table_fetch(PL_ptr_table, v);
13890     if (ret)
13891         return ret;
13892
13893     /* see if it is part of the interpreter structure */
13894     if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
13895         ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
13896     else {
13897         ret = v;
13898     }
13899
13900     return ret;
13901 }
13902
13903 /* duplicate the save stack */
13904
13905 ANY *
13906 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
13907 {
13908     dVAR;
13909     ANY * const ss      = proto_perl->Isavestack;
13910     const I32 max       = proto_perl->Isavestack_max;
13911     I32 ix              = proto_perl->Isavestack_ix;
13912     ANY *nss;
13913     const SV *sv;
13914     const GV *gv;
13915     const AV *av;
13916     const HV *hv;
13917     void* ptr;
13918     int intval;
13919     long longval;
13920     GP *gp;
13921     IV iv;
13922     I32 i;
13923     char *c = NULL;
13924     void (*dptr) (void*);
13925     void (*dxptr) (pTHX_ void*);
13926
13927     PERL_ARGS_ASSERT_SS_DUP;
13928
13929     Newxz(nss, max, ANY);
13930
13931     while (ix > 0) {
13932         const UV uv = POPUV(ss,ix);
13933         const U8 type = (U8)uv & SAVE_MASK;
13934
13935         TOPUV(nss,ix) = uv;
13936         switch (type) {
13937         case SAVEt_CLEARSV:
13938         case SAVEt_CLEARPADRANGE:
13939             break;
13940         case SAVEt_HELEM:               /* hash element */
13941         case SAVEt_SV:                  /* scalar reference */
13942             sv = (const SV *)POPPTR(ss,ix);
13943             TOPPTR(nss,ix) = SvREFCNT_inc(sv_dup_inc(sv, param));
13944             /* FALLTHROUGH */
13945         case SAVEt_ITEM:                        /* normal string */
13946         case SAVEt_GVSV:                        /* scalar slot in GV */
13947             sv = (const SV *)POPPTR(ss,ix);
13948             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13949             if (type == SAVEt_SV)
13950                 break;
13951             /* FALLTHROUGH */
13952         case SAVEt_FREESV:
13953         case SAVEt_MORTALIZESV:
13954         case SAVEt_READONLY_OFF:
13955             sv = (const SV *)POPPTR(ss,ix);
13956             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13957             break;
13958         case SAVEt_FREEPADNAME:
13959             ptr = POPPTR(ss,ix);
13960             TOPPTR(nss,ix) = padname_dup((PADNAME *)ptr, param);
13961             PadnameREFCNT((PADNAME *)TOPPTR(nss,ix))++;
13962             break;
13963         case SAVEt_SHARED_PVREF:                /* char* in shared space */
13964             c = (char*)POPPTR(ss,ix);
13965             TOPPTR(nss,ix) = savesharedpv(c);
13966             ptr = POPPTR(ss,ix);
13967             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13968             break;
13969         case SAVEt_GENERIC_SVREF:               /* generic sv */
13970         case SAVEt_SVREF:                       /* scalar reference */
13971             sv = (const SV *)POPPTR(ss,ix);
13972             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13973             if (type == SAVEt_SVREF)
13974                 SvREFCNT_inc_simple_void((SV *)TOPPTR(nss,ix));
13975             ptr = POPPTR(ss,ix);
13976             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
13977             break;
13978         case SAVEt_GVSLOT:              /* any slot in GV */
13979             sv = (const SV *)POPPTR(ss,ix);
13980             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13981             ptr = POPPTR(ss,ix);
13982             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
13983             sv = (const SV *)POPPTR(ss,ix);
13984             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13985             break;
13986         case SAVEt_HV:                          /* hash reference */
13987         case SAVEt_AV:                          /* array reference */
13988             sv = (const SV *) POPPTR(ss,ix);
13989             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13990             /* FALLTHROUGH */
13991         case SAVEt_COMPPAD:
13992         case SAVEt_NSTAB:
13993             sv = (const SV *) POPPTR(ss,ix);
13994             TOPPTR(nss,ix) = sv_dup(sv, param);
13995             break;
13996         case SAVEt_INT:                         /* int reference */
13997             ptr = POPPTR(ss,ix);
13998             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13999             intval = (int)POPINT(ss,ix);
14000             TOPINT(nss,ix) = intval;
14001             break;
14002         case SAVEt_LONG:                        /* long reference */
14003             ptr = POPPTR(ss,ix);
14004             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14005             longval = (long)POPLONG(ss,ix);
14006             TOPLONG(nss,ix) = longval;
14007             break;
14008         case SAVEt_I32:                         /* I32 reference */
14009             ptr = POPPTR(ss,ix);
14010             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14011             i = POPINT(ss,ix);
14012             TOPINT(nss,ix) = i;
14013             break;
14014         case SAVEt_IV:                          /* IV reference */
14015         case SAVEt_STRLEN:                      /* STRLEN/size_t ref */
14016             ptr = POPPTR(ss,ix);
14017             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14018             iv = POPIV(ss,ix);
14019             TOPIV(nss,ix) = iv;
14020             break;
14021         case SAVEt_HPTR:                        /* HV* reference */
14022         case SAVEt_APTR:                        /* AV* reference */
14023         case SAVEt_SPTR:                        /* SV* reference */
14024             ptr = POPPTR(ss,ix);
14025             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14026             sv = (const SV *)POPPTR(ss,ix);
14027             TOPPTR(nss,ix) = sv_dup(sv, param);
14028             break;
14029         case SAVEt_VPTR:                        /* random* reference */
14030             ptr = POPPTR(ss,ix);
14031             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14032             /* FALLTHROUGH */
14033         case SAVEt_INT_SMALL:
14034         case SAVEt_I32_SMALL:
14035         case SAVEt_I16:                         /* I16 reference */
14036         case SAVEt_I8:                          /* I8 reference */
14037         case SAVEt_BOOL:
14038             ptr = POPPTR(ss,ix);
14039             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14040             break;
14041         case SAVEt_GENERIC_PVREF:               /* generic char* */
14042         case SAVEt_PPTR:                        /* char* reference */
14043             ptr = POPPTR(ss,ix);
14044             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14045             c = (char*)POPPTR(ss,ix);
14046             TOPPTR(nss,ix) = pv_dup(c);
14047             break;
14048         case SAVEt_GP:                          /* scalar reference */
14049             gp = (GP*)POPPTR(ss,ix);
14050             TOPPTR(nss,ix) = gp = gp_dup(gp, param);
14051             (void)GpREFCNT_inc(gp);
14052             gv = (const GV *)POPPTR(ss,ix);
14053             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
14054             break;
14055         case SAVEt_FREEOP:
14056             ptr = POPPTR(ss,ix);
14057             if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
14058                 /* these are assumed to be refcounted properly */
14059                 OP *o;
14060                 switch (((OP*)ptr)->op_type) {
14061                 case OP_LEAVESUB:
14062                 case OP_LEAVESUBLV:
14063                 case OP_LEAVEEVAL:
14064                 case OP_LEAVE:
14065                 case OP_SCOPE:
14066                 case OP_LEAVEWRITE:
14067                     TOPPTR(nss,ix) = ptr;
14068                     o = (OP*)ptr;
14069                     OP_REFCNT_LOCK;
14070                     (void) OpREFCNT_inc(o);
14071                     OP_REFCNT_UNLOCK;
14072                     break;
14073                 default:
14074                     TOPPTR(nss,ix) = NULL;
14075                     break;
14076                 }
14077             }
14078             else
14079                 TOPPTR(nss,ix) = NULL;
14080             break;
14081         case SAVEt_FREECOPHH:
14082             ptr = POPPTR(ss,ix);
14083             TOPPTR(nss,ix) = cophh_copy((COPHH *)ptr);
14084             break;
14085         case SAVEt_ADELETE:
14086             av = (const AV *)POPPTR(ss,ix);
14087             TOPPTR(nss,ix) = av_dup_inc(av, param);
14088             i = POPINT(ss,ix);
14089             TOPINT(nss,ix) = i;
14090             break;
14091         case SAVEt_DELETE:
14092             hv = (const HV *)POPPTR(ss,ix);
14093             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
14094             i = POPINT(ss,ix);
14095             TOPINT(nss,ix) = i;
14096             /* FALLTHROUGH */
14097         case SAVEt_FREEPV:
14098             c = (char*)POPPTR(ss,ix);
14099             TOPPTR(nss,ix) = pv_dup_inc(c);
14100             break;
14101         case SAVEt_STACK_POS:           /* Position on Perl stack */
14102             i = POPINT(ss,ix);
14103             TOPINT(nss,ix) = i;
14104             break;
14105         case SAVEt_DESTRUCTOR:
14106             ptr = POPPTR(ss,ix);
14107             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
14108             dptr = POPDPTR(ss,ix);
14109             TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
14110                                         any_dup(FPTR2DPTR(void *, dptr),
14111                                                 proto_perl));
14112             break;
14113         case SAVEt_DESTRUCTOR_X:
14114             ptr = POPPTR(ss,ix);
14115             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
14116             dxptr = POPDXPTR(ss,ix);
14117             TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
14118                                          any_dup(FPTR2DPTR(void *, dxptr),
14119                                                  proto_perl));
14120             break;
14121         case SAVEt_REGCONTEXT:
14122         case SAVEt_ALLOC:
14123             ix -= uv >> SAVE_TIGHT_SHIFT;
14124             break;
14125         case SAVEt_AELEM:               /* array element */
14126             sv = (const SV *)POPPTR(ss,ix);
14127             TOPPTR(nss,ix) = SvREFCNT_inc(sv_dup_inc(sv, param));
14128             i = POPINT(ss,ix);
14129             TOPINT(nss,ix) = i;
14130             av = (const AV *)POPPTR(ss,ix);
14131             TOPPTR(nss,ix) = av_dup_inc(av, param);
14132             break;
14133         case SAVEt_OP:
14134             ptr = POPPTR(ss,ix);
14135             TOPPTR(nss,ix) = ptr;
14136             break;
14137         case SAVEt_HINTS:
14138             ptr = POPPTR(ss,ix);
14139             ptr = cophh_copy((COPHH*)ptr);
14140             TOPPTR(nss,ix) = ptr;
14141             i = POPINT(ss,ix);
14142             TOPINT(nss,ix) = i;
14143             if (i & HINT_LOCALIZE_HH) {
14144                 hv = (const HV *)POPPTR(ss,ix);
14145                 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
14146             }
14147             break;
14148         case SAVEt_PADSV_AND_MORTALIZE:
14149             longval = (long)POPLONG(ss,ix);
14150             TOPLONG(nss,ix) = longval;
14151             ptr = POPPTR(ss,ix);
14152             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14153             sv = (const SV *)POPPTR(ss,ix);
14154             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14155             break;
14156         case SAVEt_SET_SVFLAGS:
14157             i = POPINT(ss,ix);
14158             TOPINT(nss,ix) = i;
14159             i = POPINT(ss,ix);
14160             TOPINT(nss,ix) = i;
14161             sv = (const SV *)POPPTR(ss,ix);
14162             TOPPTR(nss,ix) = sv_dup(sv, param);
14163             break;
14164         case SAVEt_COMPILE_WARNINGS:
14165             ptr = POPPTR(ss,ix);
14166             TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
14167             break;
14168         case SAVEt_PARSER:
14169             ptr = POPPTR(ss,ix);
14170             TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
14171             break;
14172         case SAVEt_GP_ALIASED_SV: {
14173             GP * gp_ptr = (GP *)POPPTR(ss,ix);
14174             GP * new_gp_ptr = gp_dup(gp_ptr, param);
14175             TOPPTR(nss,ix) = new_gp_ptr;
14176             new_gp_ptr->gp_refcnt++;
14177             break;
14178         }
14179         default:
14180             Perl_croak(aTHX_
14181                        "panic: ss_dup inconsistency (%"IVdf")", (IV) type);
14182         }
14183     }
14184
14185     return nss;
14186 }
14187
14188
14189 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
14190  * flag to the result. This is done for each stash before cloning starts,
14191  * so we know which stashes want their objects cloned */
14192
14193 static void
14194 do_mark_cloneable_stash(pTHX_ SV *const sv)
14195 {
14196     const HEK * const hvname = HvNAME_HEK((const HV *)sv);
14197     if (hvname) {
14198         GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
14199         SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
14200         if (cloner && GvCV(cloner)) {
14201             dSP;
14202             UV status;
14203
14204             ENTER;
14205             SAVETMPS;
14206             PUSHMARK(SP);
14207             mXPUSHs(newSVhek(hvname));
14208             PUTBACK;
14209             call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
14210             SPAGAIN;
14211             status = POPu;
14212             PUTBACK;
14213             FREETMPS;
14214             LEAVE;
14215             if (status)
14216                 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
14217         }
14218     }
14219 }
14220
14221
14222
14223 /*
14224 =for apidoc perl_clone
14225
14226 Create and return a new interpreter by cloning the current one.
14227
14228 perl_clone takes these flags as parameters:
14229
14230 CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
14231 without it we only clone the data and zero the stacks,
14232 with it we copy the stacks and the new perl interpreter is
14233 ready to run at the exact same point as the previous one.
14234 The pseudo-fork code uses COPY_STACKS while the
14235 threads->create doesn't.
14236
14237 CLONEf_KEEP_PTR_TABLE -
14238 perl_clone keeps a ptr_table with the pointer of the old
14239 variable as a key and the new variable as a value,
14240 this allows it to check if something has been cloned and not
14241 clone it again but rather just use the value and increase the
14242 refcount.  If KEEP_PTR_TABLE is not set then perl_clone will kill
14243 the ptr_table using the function
14244 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
14245 reason to keep it around is if you want to dup some of your own
14246 variable who are outside the graph perl scans, example of this
14247 code is in threads.xs create.
14248
14249 CLONEf_CLONE_HOST -
14250 This is a win32 thing, it is ignored on unix, it tells perls
14251 win32host code (which is c++) to clone itself, this is needed on
14252 win32 if you want to run two threads at the same time,
14253 if you just want to do some stuff in a separate perl interpreter
14254 and then throw it away and return to the original one,
14255 you don't need to do anything.
14256
14257 =cut
14258 */
14259
14260 /* XXX the above needs expanding by someone who actually understands it ! */
14261 EXTERN_C PerlInterpreter *
14262 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
14263
14264 PerlInterpreter *
14265 perl_clone(PerlInterpreter *proto_perl, UV flags)
14266 {
14267    dVAR;
14268 #ifdef PERL_IMPLICIT_SYS
14269
14270     PERL_ARGS_ASSERT_PERL_CLONE;
14271
14272    /* perlhost.h so we need to call into it
14273    to clone the host, CPerlHost should have a c interface, sky */
14274
14275    if (flags & CLONEf_CLONE_HOST) {
14276        return perl_clone_host(proto_perl,flags);
14277    }
14278    return perl_clone_using(proto_perl, flags,
14279                             proto_perl->IMem,
14280                             proto_perl->IMemShared,
14281                             proto_perl->IMemParse,
14282                             proto_perl->IEnv,
14283                             proto_perl->IStdIO,
14284                             proto_perl->ILIO,
14285                             proto_perl->IDir,
14286                             proto_perl->ISock,
14287                             proto_perl->IProc);
14288 }
14289
14290 PerlInterpreter *
14291 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
14292                  struct IPerlMem* ipM, struct IPerlMem* ipMS,
14293                  struct IPerlMem* ipMP, struct IPerlEnv* ipE,
14294                  struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
14295                  struct IPerlDir* ipD, struct IPerlSock* ipS,
14296                  struct IPerlProc* ipP)
14297 {
14298     /* XXX many of the string copies here can be optimized if they're
14299      * constants; they need to be allocated as common memory and just
14300      * their pointers copied. */
14301
14302     IV i;
14303     CLONE_PARAMS clone_params;
14304     CLONE_PARAMS* const param = &clone_params;
14305
14306     PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
14307
14308     PERL_ARGS_ASSERT_PERL_CLONE_USING;
14309 #else           /* !PERL_IMPLICIT_SYS */
14310     IV i;
14311     CLONE_PARAMS clone_params;
14312     CLONE_PARAMS* param = &clone_params;
14313     PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
14314
14315     PERL_ARGS_ASSERT_PERL_CLONE;
14316 #endif          /* PERL_IMPLICIT_SYS */
14317
14318     /* for each stash, determine whether its objects should be cloned */
14319     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
14320     PERL_SET_THX(my_perl);
14321
14322 #ifdef DEBUGGING
14323     PoisonNew(my_perl, 1, PerlInterpreter);
14324     PL_op = NULL;
14325     PL_curcop = NULL;
14326     PL_defstash = NULL; /* may be used by perl malloc() */
14327     PL_markstack = 0;
14328     PL_scopestack = 0;
14329     PL_scopestack_name = 0;
14330     PL_savestack = 0;
14331     PL_savestack_ix = 0;
14332     PL_savestack_max = -1;
14333     PL_sig_pending = 0;
14334     PL_parser = NULL;
14335     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
14336     Zero(&PL_padname_undef, 1, PADNAME);
14337     Zero(&PL_padname_const, 1, PADNAME);
14338 #  ifdef DEBUG_LEAKING_SCALARS
14339     PL_sv_serial = (((UV)my_perl >> 2) & 0xfff) * 1000000;
14340 #  endif
14341 #  ifdef PERL_TRACE_OPS
14342     Zero(PL_op_exec_cnt, OP_max+2, UV);
14343 #  endif
14344 #else   /* !DEBUGGING */
14345     Zero(my_perl, 1, PerlInterpreter);
14346 #endif  /* DEBUGGING */
14347
14348 #ifdef PERL_IMPLICIT_SYS
14349     /* host pointers */
14350     PL_Mem              = ipM;
14351     PL_MemShared        = ipMS;
14352     PL_MemParse         = ipMP;
14353     PL_Env              = ipE;
14354     PL_StdIO            = ipStd;
14355     PL_LIO              = ipLIO;
14356     PL_Dir              = ipD;
14357     PL_Sock             = ipS;
14358     PL_Proc             = ipP;
14359 #endif          /* PERL_IMPLICIT_SYS */
14360
14361
14362     param->flags = flags;
14363     /* Nothing in the core code uses this, but we make it available to
14364        extensions (using mg_dup).  */
14365     param->proto_perl = proto_perl;
14366     /* Likely nothing will use this, but it is initialised to be consistent
14367        with Perl_clone_params_new().  */
14368     param->new_perl = my_perl;
14369     param->unreferenced = NULL;
14370
14371
14372     INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
14373
14374     PL_body_arenas = NULL;
14375     Zero(&PL_body_roots, 1, PL_body_roots);
14376     
14377     PL_sv_count         = 0;
14378     PL_sv_root          = NULL;
14379     PL_sv_arenaroot     = NULL;
14380
14381     PL_debug            = proto_perl->Idebug;
14382
14383     /* dbargs array probably holds garbage */
14384     PL_dbargs           = NULL;
14385
14386     PL_compiling = proto_perl->Icompiling;
14387
14388     /* pseudo environmental stuff */
14389     PL_origargc         = proto_perl->Iorigargc;
14390     PL_origargv         = proto_perl->Iorigargv;
14391
14392 #ifndef NO_TAINT_SUPPORT
14393     /* Set tainting stuff before PerlIO_debug can possibly get called */
14394     PL_tainting         = proto_perl->Itainting;
14395     PL_taint_warn       = proto_perl->Itaint_warn;
14396 #else
14397     PL_tainting         = FALSE;
14398     PL_taint_warn       = FALSE;
14399 #endif
14400
14401     PL_minus_c          = proto_perl->Iminus_c;
14402
14403     PL_localpatches     = proto_perl->Ilocalpatches;
14404     PL_splitstr         = proto_perl->Isplitstr;
14405     PL_minus_n          = proto_perl->Iminus_n;
14406     PL_minus_p          = proto_perl->Iminus_p;
14407     PL_minus_l          = proto_perl->Iminus_l;
14408     PL_minus_a          = proto_perl->Iminus_a;
14409     PL_minus_E          = proto_perl->Iminus_E;
14410     PL_minus_F          = proto_perl->Iminus_F;
14411     PL_doswitches       = proto_perl->Idoswitches;
14412     PL_dowarn           = proto_perl->Idowarn;
14413     PL_sawalias         = proto_perl->Isawalias;
14414 #ifdef PERL_SAWAMPERSAND
14415     PL_sawampersand     = proto_perl->Isawampersand;
14416 #endif
14417     PL_unsafe           = proto_perl->Iunsafe;
14418     PL_perldb           = proto_perl->Iperldb;
14419     PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
14420     PL_exit_flags       = proto_perl->Iexit_flags;
14421
14422     /* XXX time(&PL_basetime) when asked for? */
14423     PL_basetime         = proto_perl->Ibasetime;
14424
14425     PL_maxsysfd         = proto_perl->Imaxsysfd;
14426     PL_statusvalue      = proto_perl->Istatusvalue;
14427 #ifdef __VMS
14428     PL_statusvalue_vms  = proto_perl->Istatusvalue_vms;
14429 #else
14430     PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
14431 #endif
14432
14433     /* RE engine related */
14434     PL_regmatch_slab    = NULL;
14435     PL_reg_curpm        = NULL;
14436
14437     PL_sub_generation   = proto_perl->Isub_generation;
14438
14439     /* funky return mechanisms */
14440     PL_forkprocess      = proto_perl->Iforkprocess;
14441
14442     /* internal state */
14443     PL_maxo             = proto_perl->Imaxo;
14444
14445     PL_main_start       = proto_perl->Imain_start;
14446     PL_eval_root        = proto_perl->Ieval_root;
14447     PL_eval_start       = proto_perl->Ieval_start;
14448
14449     PL_filemode         = proto_perl->Ifilemode;
14450     PL_lastfd           = proto_perl->Ilastfd;
14451     PL_oldname          = proto_perl->Ioldname;         /* XXX not quite right */
14452     PL_Argv             = NULL;
14453     PL_Cmd              = NULL;
14454     PL_gensym           = proto_perl->Igensym;
14455
14456     PL_laststatval      = proto_perl->Ilaststatval;
14457     PL_laststype        = proto_perl->Ilaststype;
14458     PL_mess_sv          = NULL;
14459
14460     PL_profiledata      = NULL;
14461
14462     PL_generation       = proto_perl->Igeneration;
14463
14464     PL_in_clean_objs    = proto_perl->Iin_clean_objs;
14465     PL_in_clean_all     = proto_perl->Iin_clean_all;
14466
14467     PL_delaymagic_uid   = proto_perl->Idelaymagic_uid;
14468     PL_delaymagic_euid  = proto_perl->Idelaymagic_euid;
14469     PL_delaymagic_gid   = proto_perl->Idelaymagic_gid;
14470     PL_delaymagic_egid  = proto_perl->Idelaymagic_egid;
14471     PL_nomemok          = proto_perl->Inomemok;
14472     PL_an               = proto_perl->Ian;
14473     PL_evalseq          = proto_perl->Ievalseq;
14474     PL_origenviron      = proto_perl->Iorigenviron;     /* XXX not quite right */
14475     PL_origalen         = proto_perl->Iorigalen;
14476
14477     PL_sighandlerp      = proto_perl->Isighandlerp;
14478
14479     PL_runops           = proto_perl->Irunops;
14480
14481     PL_subline          = proto_perl->Isubline;
14482
14483     PL_cv_has_eval      = proto_perl->Icv_has_eval;
14484
14485 #ifdef FCRYPT
14486     PL_cryptseen        = proto_perl->Icryptseen;
14487 #endif
14488
14489 #ifdef USE_LOCALE_COLLATE
14490     PL_collation_ix     = proto_perl->Icollation_ix;
14491     PL_collation_standard       = proto_perl->Icollation_standard;
14492     PL_collxfrm_base    = proto_perl->Icollxfrm_base;
14493     PL_collxfrm_mult    = proto_perl->Icollxfrm_mult;
14494 #endif /* USE_LOCALE_COLLATE */
14495
14496 #ifdef USE_LOCALE_NUMERIC
14497     PL_numeric_standard = proto_perl->Inumeric_standard;
14498     PL_numeric_local    = proto_perl->Inumeric_local;
14499 #endif /* !USE_LOCALE_NUMERIC */
14500
14501     /* Did the locale setup indicate UTF-8? */
14502     PL_utf8locale       = proto_perl->Iutf8locale;
14503     PL_in_utf8_CTYPE_locale = proto_perl->Iin_utf8_CTYPE_locale;
14504     /* Unicode features (see perlrun/-C) */
14505     PL_unicode          = proto_perl->Iunicode;
14506
14507     /* Pre-5.8 signals control */
14508     PL_signals          = proto_perl->Isignals;
14509
14510     /* times() ticks per second */
14511     PL_clocktick        = proto_perl->Iclocktick;
14512
14513     /* Recursion stopper for PerlIO_find_layer */
14514     PL_in_load_module   = proto_perl->Iin_load_module;
14515
14516     /* sort() routine */
14517     PL_sort_RealCmp     = proto_perl->Isort_RealCmp;
14518
14519     /* Not really needed/useful since the reenrant_retint is "volatile",
14520      * but do it for consistency's sake. */
14521     PL_reentrant_retint = proto_perl->Ireentrant_retint;
14522
14523     /* Hooks to shared SVs and locks. */
14524     PL_sharehook        = proto_perl->Isharehook;
14525     PL_lockhook         = proto_perl->Ilockhook;
14526     PL_unlockhook       = proto_perl->Iunlockhook;
14527     PL_threadhook       = proto_perl->Ithreadhook;
14528     PL_destroyhook      = proto_perl->Idestroyhook;
14529     PL_signalhook       = proto_perl->Isignalhook;
14530
14531     PL_globhook         = proto_perl->Iglobhook;
14532
14533     /* swatch cache */
14534     PL_last_swash_hv    = NULL; /* reinits on demand */
14535     PL_last_swash_klen  = 0;
14536     PL_last_swash_key[0]= '\0';
14537     PL_last_swash_tmps  = (U8*)NULL;
14538     PL_last_swash_slen  = 0;
14539
14540     PL_srand_called     = proto_perl->Isrand_called;
14541     Copy(&(proto_perl->Irandom_state), &PL_random_state, 1, PL_RANDOM_STATE_TYPE);
14542
14543     if (flags & CLONEf_COPY_STACKS) {
14544         /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
14545         PL_tmps_ix              = proto_perl->Itmps_ix;
14546         PL_tmps_max             = proto_perl->Itmps_max;
14547         PL_tmps_floor           = proto_perl->Itmps_floor;
14548
14549         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
14550          * NOTE: unlike the others! */
14551         PL_scopestack_ix        = proto_perl->Iscopestack_ix;
14552         PL_scopestack_max       = proto_perl->Iscopestack_max;
14553
14554         /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
14555          * NOTE: unlike the others! */
14556         PL_savestack_ix         = proto_perl->Isavestack_ix;
14557         PL_savestack_max        = proto_perl->Isavestack_max;
14558     }
14559
14560     PL_start_env        = proto_perl->Istart_env;       /* XXXXXX */
14561     PL_top_env          = &PL_start_env;
14562
14563     PL_op               = proto_perl->Iop;
14564
14565     PL_Sv               = NULL;
14566     PL_Xpv              = (XPV*)NULL;
14567     my_perl->Ina        = proto_perl->Ina;
14568
14569     PL_statbuf          = proto_perl->Istatbuf;
14570     PL_statcache        = proto_perl->Istatcache;
14571
14572 #ifndef NO_TAINT_SUPPORT
14573     PL_tainted          = proto_perl->Itainted;
14574 #else
14575     PL_tainted          = FALSE;
14576 #endif
14577     PL_curpm            = proto_perl->Icurpm;   /* XXX No PMOP ref count */
14578
14579     PL_chopset          = proto_perl->Ichopset; /* XXX never deallocated */
14580
14581     PL_restartjmpenv    = proto_perl->Irestartjmpenv;
14582     PL_restartop        = proto_perl->Irestartop;
14583     PL_in_eval          = proto_perl->Iin_eval;
14584     PL_delaymagic       = proto_perl->Idelaymagic;
14585     PL_phase            = proto_perl->Iphase;
14586     PL_localizing       = proto_perl->Ilocalizing;
14587
14588     PL_hv_fetch_ent_mh  = NULL;
14589     PL_modcount         = proto_perl->Imodcount;
14590     PL_lastgotoprobe    = NULL;
14591     PL_dumpindent       = proto_perl->Idumpindent;
14592
14593     PL_efloatbuf        = NULL;         /* reinits on demand */
14594     PL_efloatsize       = 0;                    /* reinits on demand */
14595
14596     /* regex stuff */
14597
14598     PL_colorset         = 0;            /* reinits PL_colors[] */
14599     /*PL_colors[6]      = {0,0,0,0,0,0};*/
14600
14601     /* Pluggable optimizer */
14602     PL_peepp            = proto_perl->Ipeepp;
14603     PL_rpeepp           = proto_perl->Irpeepp;
14604     /* op_free() hook */
14605     PL_opfreehook       = proto_perl->Iopfreehook;
14606
14607 #ifdef USE_REENTRANT_API
14608     /* XXX: things like -Dm will segfault here in perlio, but doing
14609      *  PERL_SET_CONTEXT(proto_perl);
14610      * breaks too many other things
14611      */
14612     Perl_reentrant_init(aTHX);
14613 #endif
14614
14615     /* create SV map for pointer relocation */
14616     PL_ptr_table = ptr_table_new();
14617
14618     /* initialize these special pointers as early as possible */
14619     init_constants();
14620     ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
14621     ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
14622     ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
14623     ptr_table_store(PL_ptr_table, &proto_perl->Ipadname_const,
14624                     &PL_padname_const);
14625
14626     /* create (a non-shared!) shared string table */
14627     PL_strtab           = newHV();
14628     HvSHAREKEYS_off(PL_strtab);
14629     hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
14630     ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
14631
14632     Zero(PL_sv_consts, SV_CONSTS_COUNT, SV*);
14633
14634     /* This PV will be free'd special way so must set it same way op.c does */
14635     PL_compiling.cop_file    = savesharedpv(PL_compiling.cop_file);
14636     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
14637
14638     ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
14639     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
14640     CopHINTHASH_set(&PL_compiling, cophh_copy(CopHINTHASH_get(&PL_compiling)));
14641     PL_curcop           = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
14642
14643     param->stashes      = newAV();  /* Setup array of objects to call clone on */
14644     /* This makes no difference to the implementation, as it always pushes
14645        and shifts pointers to other SVs without changing their reference
14646        count, with the array becoming empty before it is freed. However, it
14647        makes it conceptually clear what is going on, and will avoid some
14648        work inside av.c, filling slots between AvFILL() and AvMAX() with
14649        &PL_sv_undef, and SvREFCNT_dec()ing those.  */
14650     AvREAL_off(param->stashes);
14651
14652     if (!(flags & CLONEf_COPY_STACKS)) {
14653         param->unreferenced = newAV();
14654     }
14655
14656 #ifdef PERLIO_LAYERS
14657     /* Clone PerlIO tables as soon as we can handle general xx_dup() */
14658     PerlIO_clone(aTHX_ proto_perl, param);
14659 #endif
14660
14661     PL_envgv            = gv_dup_inc(proto_perl->Ienvgv, param);
14662     PL_incgv            = gv_dup_inc(proto_perl->Iincgv, param);
14663     PL_hintgv           = gv_dup_inc(proto_perl->Ihintgv, param);
14664     PL_origfilename     = SAVEPV(proto_perl->Iorigfilename);
14665     PL_xsubfilename     = proto_perl->Ixsubfilename;
14666     PL_diehook          = sv_dup_inc(proto_perl->Idiehook, param);
14667     PL_warnhook         = sv_dup_inc(proto_perl->Iwarnhook, param);
14668
14669     /* switches */
14670     PL_patchlevel       = sv_dup_inc(proto_perl->Ipatchlevel, param);
14671     PL_inplace          = SAVEPV(proto_perl->Iinplace);
14672     PL_e_script         = sv_dup_inc(proto_perl->Ie_script, param);
14673
14674     /* magical thingies */
14675
14676     PL_encoding         = sv_dup(proto_perl->Iencoding, param);
14677     PL_lex_encoding     = sv_dup(proto_perl->Ilex_encoding, param);
14678
14679     sv_setpvs(PERL_DEBUG_PAD(0), "");   /* For regex debugging. */
14680     sv_setpvs(PERL_DEBUG_PAD(1), "");   /* ext/re needs these */
14681     sv_setpvs(PERL_DEBUG_PAD(2), "");   /* even without DEBUGGING. */
14682
14683    
14684     /* Clone the regex array */
14685     /* ORANGE FIXME for plugins, probably in the SV dup code.
14686        newSViv(PTR2IV(CALLREGDUPE(
14687        INT2PTR(REGEXP *, SvIVX(regex)), param))))
14688     */
14689     PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
14690     PL_regex_pad = AvARRAY(PL_regex_padav);
14691
14692     PL_stashpadmax      = proto_perl->Istashpadmax;
14693     PL_stashpadix       = proto_perl->Istashpadix ;
14694     Newx(PL_stashpad, PL_stashpadmax, HV *);
14695     {
14696         PADOFFSET o = 0;
14697         for (; o < PL_stashpadmax; ++o)
14698             PL_stashpad[o] = hv_dup(proto_perl->Istashpad[o], param);
14699     }
14700
14701     /* shortcuts to various I/O objects */
14702     PL_ofsgv            = gv_dup_inc(proto_perl->Iofsgv, param);
14703     PL_stdingv          = gv_dup(proto_perl->Istdingv, param);
14704     PL_stderrgv         = gv_dup(proto_perl->Istderrgv, param);
14705     PL_defgv            = gv_dup(proto_perl->Idefgv, param);
14706     PL_argvgv           = gv_dup_inc(proto_perl->Iargvgv, param);
14707     PL_argvoutgv        = gv_dup(proto_perl->Iargvoutgv, param);
14708     PL_argvout_stack    = av_dup_inc(proto_perl->Iargvout_stack, param);
14709
14710     /* shortcuts to regexp stuff */
14711     PL_replgv           = gv_dup_inc(proto_perl->Ireplgv, param);
14712
14713     /* shortcuts to misc objects */
14714     PL_errgv            = gv_dup(proto_perl->Ierrgv, param);
14715
14716     /* shortcuts to debugging objects */
14717     PL_DBgv             = gv_dup_inc(proto_perl->IDBgv, param);
14718     PL_DBline           = gv_dup_inc(proto_perl->IDBline, param);
14719     PL_DBsub            = gv_dup_inc(proto_perl->IDBsub, param);
14720     PL_DBsingle         = sv_dup(proto_perl->IDBsingle, param);
14721     PL_DBtrace          = sv_dup(proto_perl->IDBtrace, param);
14722     PL_DBsignal         = sv_dup(proto_perl->IDBsignal, param);
14723     Copy(proto_perl->IDBcontrol, PL_DBcontrol, DBVARMG_COUNT, IV);
14724
14725     /* symbol tables */
14726     PL_defstash         = hv_dup_inc(proto_perl->Idefstash, param);
14727     PL_curstash         = hv_dup_inc(proto_perl->Icurstash, param);
14728     PL_debstash         = hv_dup(proto_perl->Idebstash, param);
14729     PL_globalstash      = hv_dup(proto_perl->Iglobalstash, param);
14730     PL_curstname        = sv_dup_inc(proto_perl->Icurstname, param);
14731
14732     PL_beginav          = av_dup_inc(proto_perl->Ibeginav, param);
14733     PL_beginav_save     = av_dup_inc(proto_perl->Ibeginav_save, param);
14734     PL_checkav_save     = av_dup_inc(proto_perl->Icheckav_save, param);
14735     PL_unitcheckav      = av_dup_inc(proto_perl->Iunitcheckav, param);
14736     PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
14737     PL_endav            = av_dup_inc(proto_perl->Iendav, param);
14738     PL_checkav          = av_dup_inc(proto_perl->Icheckav, param);
14739     PL_initav           = av_dup_inc(proto_perl->Iinitav, param);
14740     PL_savebegin        = proto_perl->Isavebegin;
14741
14742     PL_isarev           = hv_dup_inc(proto_perl->Iisarev, param);
14743
14744     /* subprocess state */
14745     PL_fdpid            = av_dup_inc(proto_perl->Ifdpid, param);
14746
14747     if (proto_perl->Iop_mask)
14748         PL_op_mask      = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
14749     else
14750         PL_op_mask      = NULL;
14751     /* PL_asserting        = proto_perl->Iasserting; */
14752
14753     /* current interpreter roots */
14754     PL_main_cv          = cv_dup_inc(proto_perl->Imain_cv, param);
14755     OP_REFCNT_LOCK;
14756     PL_main_root        = OpREFCNT_inc(proto_perl->Imain_root);
14757     OP_REFCNT_UNLOCK;
14758
14759     /* runtime control stuff */
14760     PL_curcopdb         = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
14761
14762     PL_preambleav       = av_dup_inc(proto_perl->Ipreambleav, param);
14763
14764     PL_ors_sv           = sv_dup_inc(proto_perl->Iors_sv, param);
14765
14766     /* interpreter atexit processing */
14767     PL_exitlistlen      = proto_perl->Iexitlistlen;
14768     if (PL_exitlistlen) {
14769         Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
14770         Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
14771     }
14772     else
14773         PL_exitlist     = (PerlExitListEntry*)NULL;
14774
14775     PL_my_cxt_size = proto_perl->Imy_cxt_size;
14776     if (PL_my_cxt_size) {
14777         Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
14778         Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
14779 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
14780         Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
14781         Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
14782 #endif
14783     }
14784     else {
14785         PL_my_cxt_list  = (void**)NULL;
14786 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
14787         PL_my_cxt_keys  = (const char**)NULL;
14788 #endif
14789     }
14790     PL_modglobal        = hv_dup_inc(proto_perl->Imodglobal, param);
14791     PL_custom_op_names  = hv_dup_inc(proto_perl->Icustom_op_names,param);
14792     PL_custom_op_descs  = hv_dup_inc(proto_perl->Icustom_op_descs,param);
14793     PL_custom_ops       = hv_dup_inc(proto_perl->Icustom_ops, param);
14794
14795     PL_compcv                   = cv_dup(proto_perl->Icompcv, param);
14796
14797     PAD_CLONE_VARS(proto_perl, param);
14798
14799 #ifdef HAVE_INTERP_INTERN
14800     sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
14801 #endif
14802
14803     PL_DBcv             = cv_dup(proto_perl->IDBcv, param);
14804
14805 #ifdef PERL_USES_PL_PIDSTATUS
14806     PL_pidstatus        = newHV();                      /* XXX flag for cloning? */
14807 #endif
14808     PL_osname           = SAVEPV(proto_perl->Iosname);
14809     PL_parser           = parser_dup(proto_perl->Iparser, param);
14810
14811     /* XXX this only works if the saved cop has already been cloned */
14812     if (proto_perl->Iparser) {
14813         PL_parser->saved_curcop = (COP*)any_dup(
14814                                     proto_perl->Iparser->saved_curcop,
14815                                     proto_perl);
14816     }
14817
14818     PL_subname          = sv_dup_inc(proto_perl->Isubname, param);
14819
14820 #ifdef USE_LOCALE_CTYPE
14821     /* Should we warn if uses locale? */
14822     PL_warn_locale      = sv_dup_inc(proto_perl->Iwarn_locale, param);
14823 #endif
14824
14825 #ifdef USE_LOCALE_COLLATE
14826     PL_collation_name   = SAVEPV(proto_perl->Icollation_name);
14827 #endif /* USE_LOCALE_COLLATE */
14828
14829 #ifdef USE_LOCALE_NUMERIC
14830     PL_numeric_name     = SAVEPV(proto_perl->Inumeric_name);
14831     PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
14832 #endif /* !USE_LOCALE_NUMERIC */
14833
14834     /* Unicode inversion lists */
14835     PL_Latin1           = sv_dup_inc(proto_perl->ILatin1, param);
14836     PL_UpperLatin1      = sv_dup_inc(proto_perl->IUpperLatin1, param);
14837     PL_AboveLatin1      = sv_dup_inc(proto_perl->IAboveLatin1, param);
14838     PL_InBitmap         = sv_dup_inc(proto_perl->IInBitmap, param);
14839
14840     PL_NonL1NonFinalFold = sv_dup_inc(proto_perl->INonL1NonFinalFold, param);
14841     PL_HasMultiCharFold = sv_dup_inc(proto_perl->IHasMultiCharFold, param);
14842
14843     /* utf8 character class swashes */
14844     for (i = 0; i < POSIX_SWASH_COUNT; i++) {
14845         PL_utf8_swash_ptrs[i] = sv_dup_inc(proto_perl->Iutf8_swash_ptrs[i], param);
14846     }
14847     for (i = 0; i < POSIX_CC_COUNT; i++) {
14848         PL_XPosix_ptrs[i] = sv_dup_inc(proto_perl->IXPosix_ptrs[i], param);
14849     }
14850     PL_GCB_invlist = sv_dup_inc(proto_perl->IGCB_invlist, param);
14851     PL_SB_invlist = sv_dup_inc(proto_perl->ISB_invlist, param);
14852     PL_WB_invlist = sv_dup_inc(proto_perl->IWB_invlist, param);
14853     PL_utf8_mark        = sv_dup_inc(proto_perl->Iutf8_mark, param);
14854     PL_utf8_toupper     = sv_dup_inc(proto_perl->Iutf8_toupper, param);
14855     PL_utf8_totitle     = sv_dup_inc(proto_perl->Iutf8_totitle, param);
14856     PL_utf8_tolower     = sv_dup_inc(proto_perl->Iutf8_tolower, param);
14857     PL_utf8_tofold      = sv_dup_inc(proto_perl->Iutf8_tofold, param);
14858     PL_utf8_idstart     = sv_dup_inc(proto_perl->Iutf8_idstart, param);
14859     PL_utf8_xidstart    = sv_dup_inc(proto_perl->Iutf8_xidstart, param);
14860     PL_utf8_perl_idstart = sv_dup_inc(proto_perl->Iutf8_perl_idstart, param);
14861     PL_utf8_perl_idcont = sv_dup_inc(proto_perl->Iutf8_perl_idcont, param);
14862     PL_utf8_idcont      = sv_dup_inc(proto_perl->Iutf8_idcont, param);
14863     PL_utf8_xidcont     = sv_dup_inc(proto_perl->Iutf8_xidcont, param);
14864     PL_utf8_foldable    = sv_dup_inc(proto_perl->Iutf8_foldable, param);
14865     PL_utf8_charname_begin = sv_dup_inc(proto_perl->Iutf8_charname_begin, param);
14866     PL_utf8_charname_continue = sv_dup_inc(proto_perl->Iutf8_charname_continue, param);
14867
14868     if (proto_perl->Ipsig_pend) {
14869         Newxz(PL_psig_pend, SIG_SIZE, int);
14870     }
14871     else {
14872         PL_psig_pend    = (int*)NULL;
14873     }
14874
14875     if (proto_perl->Ipsig_name) {
14876         Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
14877         sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
14878                             param);
14879         PL_psig_ptr = PL_psig_name + SIG_SIZE;
14880     }
14881     else {
14882         PL_psig_ptr     = (SV**)NULL;
14883         PL_psig_name    = (SV**)NULL;
14884     }
14885
14886     if (flags & CLONEf_COPY_STACKS) {
14887         Newx(PL_tmps_stack, PL_tmps_max, SV*);
14888         sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
14889                             PL_tmps_ix+1, param);
14890
14891         /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
14892         i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
14893         Newxz(PL_markstack, i, I32);
14894         PL_markstack_max        = PL_markstack + (proto_perl->Imarkstack_max
14895                                                   - proto_perl->Imarkstack);
14896         PL_markstack_ptr        = PL_markstack + (proto_perl->Imarkstack_ptr
14897                                                   - proto_perl->Imarkstack);
14898         Copy(proto_perl->Imarkstack, PL_markstack,
14899              PL_markstack_ptr - PL_markstack + 1, I32);
14900
14901         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
14902          * NOTE: unlike the others! */
14903         Newxz(PL_scopestack, PL_scopestack_max, I32);
14904         Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
14905
14906 #ifdef DEBUGGING
14907         Newxz(PL_scopestack_name, PL_scopestack_max, const char *);
14908         Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
14909 #endif
14910         /* reset stack AV to correct length before its duped via
14911          * PL_curstackinfo */
14912         AvFILLp(proto_perl->Icurstack) =
14913                             proto_perl->Istack_sp - proto_perl->Istack_base;
14914
14915         /* NOTE: si_dup() looks at PL_markstack */
14916         PL_curstackinfo         = si_dup(proto_perl->Icurstackinfo, param);
14917
14918         /* PL_curstack          = PL_curstackinfo->si_stack; */
14919         PL_curstack             = av_dup(proto_perl->Icurstack, param);
14920         PL_mainstack            = av_dup(proto_perl->Imainstack, param);
14921
14922         /* next PUSHs() etc. set *(PL_stack_sp+1) */
14923         PL_stack_base           = AvARRAY(PL_curstack);
14924         PL_stack_sp             = PL_stack_base + (proto_perl->Istack_sp
14925                                                    - proto_perl->Istack_base);
14926         PL_stack_max            = PL_stack_base + AvMAX(PL_curstack);
14927
14928         /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
14929         PL_savestack            = ss_dup(proto_perl, param);
14930     }
14931     else {
14932         init_stacks();
14933         ENTER;                  /* perl_destruct() wants to LEAVE; */
14934     }
14935
14936     PL_statgv           = gv_dup(proto_perl->Istatgv, param);
14937     PL_statname         = sv_dup_inc(proto_perl->Istatname, param);
14938
14939     PL_rs               = sv_dup_inc(proto_perl->Irs, param);
14940     PL_last_in_gv       = gv_dup(proto_perl->Ilast_in_gv, param);
14941     PL_defoutgv         = gv_dup_inc(proto_perl->Idefoutgv, param);
14942     PL_toptarget        = sv_dup_inc(proto_perl->Itoptarget, param);
14943     PL_bodytarget       = sv_dup_inc(proto_perl->Ibodytarget, param);
14944     PL_formtarget       = sv_dup(proto_perl->Iformtarget, param);
14945
14946     PL_errors           = sv_dup_inc(proto_perl->Ierrors, param);
14947
14948     PL_sortcop          = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
14949     PL_firstgv          = gv_dup_inc(proto_perl->Ifirstgv, param);
14950     PL_secondgv         = gv_dup_inc(proto_perl->Isecondgv, param);
14951
14952     PL_stashcache       = newHV();
14953
14954     PL_watchaddr        = (char **) ptr_table_fetch(PL_ptr_table,
14955                                             proto_perl->Iwatchaddr);
14956     PL_watchok          = PL_watchaddr ? * PL_watchaddr : NULL;
14957     if (PL_debug && PL_watchaddr) {
14958         PerlIO_printf(Perl_debug_log,
14959           "WATCHING: %"UVxf" cloned as %"UVxf" with value %"UVxf"\n",
14960           PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
14961           PTR2UV(PL_watchok));
14962     }
14963
14964     PL_registered_mros  = hv_dup_inc(proto_perl->Iregistered_mros, param);
14965     PL_blockhooks       = av_dup_inc(proto_perl->Iblockhooks, param);
14966     PL_utf8_foldclosures = hv_dup_inc(proto_perl->Iutf8_foldclosures, param);
14967
14968     /* Call the ->CLONE method, if it exists, for each of the stashes
14969        identified by sv_dup() above.
14970     */
14971     while(av_tindex(param->stashes) != -1) {
14972         HV* const stash = MUTABLE_HV(av_shift(param->stashes));
14973         GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
14974         if (cloner && GvCV(cloner)) {
14975             dSP;
14976             ENTER;
14977             SAVETMPS;
14978             PUSHMARK(SP);
14979             mXPUSHs(newSVhek(HvNAME_HEK(stash)));
14980             PUTBACK;
14981             call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
14982             FREETMPS;
14983             LEAVE;
14984         }
14985     }
14986
14987     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
14988         ptr_table_free(PL_ptr_table);
14989         PL_ptr_table = NULL;
14990     }
14991
14992     if (!(flags & CLONEf_COPY_STACKS)) {
14993         unreferenced_to_tmp_stack(param->unreferenced);
14994     }
14995
14996     SvREFCNT_dec(param->stashes);
14997
14998     /* orphaned? eg threads->new inside BEGIN or use */
14999     if (PL_compcv && ! SvREFCNT(PL_compcv)) {
15000         SvREFCNT_inc_simple_void(PL_compcv);
15001         SAVEFREESV(PL_compcv);
15002     }
15003
15004     return my_perl;
15005 }
15006
15007 static void
15008 S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
15009 {
15010     PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK;
15011     
15012     if (AvFILLp(unreferenced) > -1) {
15013         SV **svp = AvARRAY(unreferenced);
15014         SV **const last = svp + AvFILLp(unreferenced);
15015         SSize_t count = 0;
15016
15017         do {
15018             if (SvREFCNT(*svp) == 1)
15019                 ++count;
15020         } while (++svp <= last);
15021
15022         EXTEND_MORTAL(count);
15023         svp = AvARRAY(unreferenced);
15024
15025         do {
15026             if (SvREFCNT(*svp) == 1) {
15027                 /* Our reference is the only one to this SV. This means that
15028                    in this thread, the scalar effectively has a 0 reference.
15029                    That doesn't work (cleanup never happens), so donate our
15030                    reference to it onto the save stack. */
15031                 PL_tmps_stack[++PL_tmps_ix] = *svp;
15032             } else {
15033                 /* As an optimisation, because we are already walking the
15034                    entire array, instead of above doing either
15035                    SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead
15036                    release our reference to the scalar, so that at the end of
15037                    the array owns zero references to the scalars it happens to
15038                    point to. We are effectively converting the array from
15039                    AvREAL() on to AvREAL() off. This saves the av_clear()
15040                    (triggered by the SvREFCNT_dec(unreferenced) below) from
15041                    walking the array a second time.  */
15042                 SvREFCNT_dec(*svp);
15043             }
15044
15045         } while (++svp <= last);
15046         AvREAL_off(unreferenced);
15047     }
15048     SvREFCNT_dec_NN(unreferenced);
15049 }
15050
15051 void
15052 Perl_clone_params_del(CLONE_PARAMS *param)
15053 {
15054     /* This seemingly funky ordering keeps the build with PERL_GLOBAL_STRUCT
15055        happy: */
15056     PerlInterpreter *const to = param->new_perl;
15057     dTHXa(to);
15058     PerlInterpreter *const was = PERL_GET_THX;
15059
15060     PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
15061
15062     if (was != to) {
15063         PERL_SET_THX(to);
15064     }
15065
15066     SvREFCNT_dec(param->stashes);
15067     if (param->unreferenced)
15068         unreferenced_to_tmp_stack(param->unreferenced);
15069
15070     Safefree(param);
15071
15072     if (was != to) {
15073         PERL_SET_THX(was);
15074     }
15075 }
15076
15077 CLONE_PARAMS *
15078 Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
15079 {
15080     dVAR;
15081     /* Need to play this game, as newAV() can call safesysmalloc(), and that
15082        does a dTHX; to get the context from thread local storage.
15083        FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
15084        a version that passes in my_perl.  */
15085     PerlInterpreter *const was = PERL_GET_THX;
15086     CLONE_PARAMS *param;
15087
15088     PERL_ARGS_ASSERT_CLONE_PARAMS_NEW;
15089
15090     if (was != to) {
15091         PERL_SET_THX(to);
15092     }
15093
15094     /* Given that we've set the context, we can do this unshared.  */
15095     Newx(param, 1, CLONE_PARAMS);
15096
15097     param->flags = 0;
15098     param->proto_perl = from;
15099     param->new_perl = to;
15100     param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV);
15101     AvREAL_off(param->stashes);
15102     param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV);
15103
15104     if (was != to) {
15105         PERL_SET_THX(was);
15106     }
15107     return param;
15108 }
15109
15110 #endif /* USE_ITHREADS */
15111
15112 void
15113 Perl_init_constants(pTHX)
15114 {
15115     SvREFCNT(&PL_sv_undef)      = SvREFCNT_IMMORTAL;
15116     SvFLAGS(&PL_sv_undef)       = SVf_READONLY|SVf_PROTECT|SVt_NULL;
15117     SvANY(&PL_sv_undef)         = NULL;
15118
15119     SvANY(&PL_sv_no)            = new_XPVNV();
15120     SvREFCNT(&PL_sv_no)         = SvREFCNT_IMMORTAL;
15121     SvFLAGS(&PL_sv_no)          = SVt_PVNV|SVf_READONLY|SVf_PROTECT
15122                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
15123                                   |SVp_POK|SVf_POK;
15124
15125     SvANY(&PL_sv_yes)           = new_XPVNV();
15126     SvREFCNT(&PL_sv_yes)        = SvREFCNT_IMMORTAL;
15127     SvFLAGS(&PL_sv_yes)         = SVt_PVNV|SVf_READONLY|SVf_PROTECT
15128                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
15129                                   |SVp_POK|SVf_POK;
15130
15131     SvPV_set(&PL_sv_no, (char*)PL_No);
15132     SvCUR_set(&PL_sv_no, 0);
15133     SvLEN_set(&PL_sv_no, 0);
15134     SvIV_set(&PL_sv_no, 0);
15135     SvNV_set(&PL_sv_no, 0);
15136
15137     SvPV_set(&PL_sv_yes, (char*)PL_Yes);
15138     SvCUR_set(&PL_sv_yes, 1);
15139     SvLEN_set(&PL_sv_yes, 0);
15140     SvIV_set(&PL_sv_yes, 1);
15141     SvNV_set(&PL_sv_yes, 1);
15142
15143     PadnamePV(&PL_padname_const) = (char *)PL_No;
15144 }
15145
15146 /*
15147 =head1 Unicode Support
15148
15149 =for apidoc sv_recode_to_utf8
15150
15151 The encoding is assumed to be an Encode object, on entry the PV
15152 of the sv is assumed to be octets in that encoding, and the sv
15153 will be converted into Unicode (and UTF-8).
15154
15155 If the sv already is UTF-8 (or if it is not POK), or if the encoding
15156 is not a reference, nothing is done to the sv.  If the encoding is not
15157 an C<Encode::XS> Encoding object, bad things will happen.
15158 (See F<lib/encoding.pm> and L<Encode>.)
15159
15160 The PV of the sv is returned.
15161
15162 =cut */
15163
15164 char *
15165 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
15166 {
15167     PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
15168
15169     if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
15170         SV *uni;
15171         STRLEN len;
15172         const char *s;
15173         dSP;
15174         SV *nsv = sv;
15175         ENTER;
15176         PUSHSTACK;
15177         SAVETMPS;
15178         if (SvPADTMP(nsv)) {
15179             nsv = sv_newmortal();
15180             SvSetSV_nosteal(nsv, sv);
15181         }
15182         save_re_context();
15183         PUSHMARK(sp);
15184         EXTEND(SP, 3);
15185         PUSHs(encoding);
15186         PUSHs(nsv);
15187 /*
15188   NI-S 2002/07/09
15189   Passing sv_yes is wrong - it needs to be or'ed set of constants
15190   for Encode::XS, while UTf-8 decode (currently) assumes a true value means
15191   remove converted chars from source.
15192
15193   Both will default the value - let them.
15194
15195         XPUSHs(&PL_sv_yes);
15196 */
15197         PUTBACK;
15198         call_method("decode", G_SCALAR);
15199         SPAGAIN;
15200         uni = POPs;
15201         PUTBACK;
15202         s = SvPV_const(uni, len);
15203         if (s != SvPVX_const(sv)) {
15204             SvGROW(sv, len + 1);
15205             Move(s, SvPVX(sv), len + 1, char);
15206             SvCUR_set(sv, len);
15207         }
15208         FREETMPS;
15209         POPSTACK;
15210         LEAVE;
15211         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
15212             /* clear pos and any utf8 cache */
15213             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
15214             if (mg)
15215                 mg->mg_len = -1;
15216             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
15217                 magic_setutf8(sv,mg); /* clear UTF8 cache */
15218         }
15219         SvUTF8_on(sv);
15220         return SvPVX(sv);
15221     }
15222     return SvPOKp(sv) ? SvPVX(sv) : NULL;
15223 }
15224
15225 /*
15226 =for apidoc sv_cat_decode
15227
15228 The encoding is assumed to be an Encode object, the PV of the ssv is
15229 assumed to be octets in that encoding and decoding the input starts
15230 from the position which (PV + *offset) pointed to.  The dsv will be
15231 concatenated the decoded UTF-8 string from ssv.  Decoding will terminate
15232 when the string tstr appears in decoding output or the input ends on
15233 the PV of the ssv.  The value which the offset points will be modified
15234 to the last input position on the ssv.
15235
15236 Returns TRUE if the terminator was found, else returns FALSE.
15237
15238 =cut */
15239
15240 bool
15241 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
15242                    SV *ssv, int *offset, char *tstr, int tlen)
15243 {
15244     bool ret = FALSE;
15245
15246     PERL_ARGS_ASSERT_SV_CAT_DECODE;
15247
15248     if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding)) {
15249         SV *offsv;
15250         dSP;
15251         ENTER;
15252         SAVETMPS;
15253         save_re_context();
15254         PUSHMARK(sp);
15255         EXTEND(SP, 6);
15256         PUSHs(encoding);
15257         PUSHs(dsv);
15258         PUSHs(ssv);
15259         offsv = newSViv(*offset);
15260         mPUSHs(offsv);
15261         mPUSHp(tstr, tlen);
15262         PUTBACK;
15263         call_method("cat_decode", G_SCALAR);
15264         SPAGAIN;
15265         ret = SvTRUE(TOPs);
15266         *offset = SvIV(offsv);
15267         PUTBACK;
15268         FREETMPS;
15269         LEAVE;
15270     }
15271     else
15272         Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
15273     return ret;
15274
15275 }
15276
15277 /* ---------------------------------------------------------------------
15278  *
15279  * support functions for report_uninit()
15280  */
15281
15282 /* the maxiumum size of array or hash where we will scan looking
15283  * for the undefined element that triggered the warning */
15284
15285 #define FUV_MAX_SEARCH_SIZE 1000
15286
15287 /* Look for an entry in the hash whose value has the same SV as val;
15288  * If so, return a mortal copy of the key. */
15289
15290 STATIC SV*
15291 S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
15292 {
15293     dVAR;
15294     HE **array;
15295     I32 i;
15296
15297     PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
15298
15299     if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
15300                         (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
15301         return NULL;
15302
15303     array = HvARRAY(hv);
15304
15305     for (i=HvMAX(hv); i>=0; i--) {
15306         HE *entry;
15307         for (entry = array[i]; entry; entry = HeNEXT(entry)) {
15308             if (HeVAL(entry) != val)
15309                 continue;
15310             if (    HeVAL(entry) == &PL_sv_undef ||
15311                     HeVAL(entry) == &PL_sv_placeholder)
15312                 continue;
15313             if (!HeKEY(entry))
15314                 return NULL;
15315             if (HeKLEN(entry) == HEf_SVKEY)
15316                 return sv_mortalcopy(HeKEY_sv(entry));
15317             return sv_2mortal(newSVhek(HeKEY_hek(entry)));
15318         }
15319     }
15320     return NULL;
15321 }
15322
15323 /* Look for an entry in the array whose value has the same SV as val;
15324  * If so, return the index, otherwise return -1. */
15325
15326 STATIC I32
15327 S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
15328 {
15329     PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
15330
15331     if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
15332                         (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
15333         return -1;
15334
15335     if (val != &PL_sv_undef) {
15336         SV ** const svp = AvARRAY(av);
15337         I32 i;
15338
15339         for (i=AvFILLp(av); i>=0; i--)
15340             if (svp[i] == val)
15341                 return i;
15342     }
15343     return -1;
15344 }
15345
15346 /* varname(): return the name of a variable, optionally with a subscript.
15347  * If gv is non-zero, use the name of that global, along with gvtype (one
15348  * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
15349  * targ.  Depending on the value of the subscript_type flag, return:
15350  */
15351
15352 #define FUV_SUBSCRIPT_NONE      1       /* "@foo"          */
15353 #define FUV_SUBSCRIPT_ARRAY     2       /* "$foo[aindex]"  */
15354 #define FUV_SUBSCRIPT_HASH      3       /* "$foo{keyname}" */
15355 #define FUV_SUBSCRIPT_WITHIN    4       /* "within @foo"   */
15356
15357 SV*
15358 Perl_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
15359         const SV *const keyname, I32 aindex, int subscript_type)
15360 {
15361
15362     SV * const name = sv_newmortal();
15363     if (gv && isGV(gv)) {
15364         char buffer[2];
15365         buffer[0] = gvtype;
15366         buffer[1] = 0;
15367
15368         /* as gv_fullname4(), but add literal '^' for $^FOO names  */
15369
15370         gv_fullname4(name, gv, buffer, 0);
15371
15372         if ((unsigned int)SvPVX(name)[1] <= 26) {
15373             buffer[0] = '^';
15374             buffer[1] = SvPVX(name)[1] + 'A' - 1;
15375
15376             /* Swap the 1 unprintable control character for the 2 byte pretty
15377                version - ie substr($name, 1, 1) = $buffer; */
15378             sv_insert(name, 1, 1, buffer, 2);
15379         }
15380     }
15381     else {
15382         CV * const cv = gv ? ((CV *)gv) : find_runcv(NULL);
15383         PADNAME *sv;
15384
15385         assert(!cv || SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM);
15386
15387         if (!cv || !CvPADLIST(cv))
15388             return NULL;
15389         sv = padnamelist_fetch(PadlistNAMES(CvPADLIST(cv)), targ);
15390         sv_setpvn(name, PadnamePV(sv), PadnameLEN(sv));
15391         SvUTF8_on(name);
15392     }
15393
15394     if (subscript_type == FUV_SUBSCRIPT_HASH) {
15395         SV * const sv = newSV(0);
15396         *SvPVX(name) = '$';
15397         Perl_sv_catpvf(aTHX_ name, "{%s}",
15398             pv_pretty(sv, SvPVX_const(keyname), SvCUR(keyname), 32, NULL, NULL,
15399                     PERL_PV_PRETTY_DUMP | PERL_PV_ESCAPE_UNI_DETECT ));
15400         SvREFCNT_dec_NN(sv);
15401     }
15402     else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
15403         *SvPVX(name) = '$';
15404         Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
15405     }
15406     else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
15407         /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
15408         Perl_sv_insert_flags(aTHX_ name, 0, 0,  STR_WITH_LEN("within "), 0);
15409     }
15410
15411     return name;
15412 }
15413
15414
15415 /*
15416 =for apidoc find_uninit_var
15417
15418 Find the name of the undefined variable (if any) that caused the operator
15419 to issue a "Use of uninitialized value" warning.
15420 If match is true, only return a name if its value matches uninit_sv.
15421 So roughly speaking, if a unary operator (such as OP_COS) generates a
15422 warning, then following the direct child of the op may yield an
15423 OP_PADSV or OP_GV that gives the name of the undefined variable.  On the
15424 other hand, with OP_ADD there are two branches to follow, so we only print
15425 the variable name if we get an exact match.
15426 desc_p points to a string pointer holding the description of the op.
15427 This may be updated if needed.
15428
15429 The name is returned as a mortal SV.
15430
15431 Assumes that PL_op is the op that originally triggered the error, and that
15432 PL_comppad/PL_curpad points to the currently executing pad.
15433
15434 =cut
15435 */
15436
15437 STATIC SV *
15438 S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
15439                   bool match, const char **desc_p)
15440 {
15441     dVAR;
15442     SV *sv;
15443     const GV *gv;
15444     const OP *o, *o2, *kid;
15445
15446     PERL_ARGS_ASSERT_FIND_UNINIT_VAR;
15447
15448     if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
15449                             uninit_sv == &PL_sv_placeholder)))
15450         return NULL;
15451
15452     switch (obase->op_type) {
15453
15454     case OP_RV2AV:
15455     case OP_RV2HV:
15456     case OP_PADAV:
15457     case OP_PADHV:
15458       {
15459         const bool pad  = (    obase->op_type == OP_PADAV
15460                             || obase->op_type == OP_PADHV
15461                             || obase->op_type == OP_PADRANGE
15462                           );
15463
15464         const bool hash = (    obase->op_type == OP_PADHV
15465                             || obase->op_type == OP_RV2HV
15466                             || (obase->op_type == OP_PADRANGE
15467                                 && SvTYPE(PAD_SVl(obase->op_targ)) == SVt_PVHV)
15468                           );
15469         I32 index = 0;
15470         SV *keysv = NULL;
15471         int subscript_type = FUV_SUBSCRIPT_WITHIN;
15472
15473         if (pad) { /* @lex, %lex */
15474             sv = PAD_SVl(obase->op_targ);
15475             gv = NULL;
15476         }
15477         else {
15478             if (cUNOPx(obase)->op_first->op_type == OP_GV) {
15479             /* @global, %global */
15480                 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
15481                 if (!gv)
15482                     break;
15483                 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
15484             }
15485             else if (obase == PL_op) /* @{expr}, %{expr} */
15486                 return find_uninit_var(cUNOPx(obase)->op_first,
15487                                                 uninit_sv, match, desc_p);
15488             else /* @{expr}, %{expr} as a sub-expression */
15489                 return NULL;
15490         }
15491
15492         /* attempt to find a match within the aggregate */
15493         if (hash) {
15494             keysv = find_hash_subscript((const HV*)sv, uninit_sv);
15495             if (keysv)
15496                 subscript_type = FUV_SUBSCRIPT_HASH;
15497         }
15498         else {
15499             index = find_array_subscript((const AV *)sv, uninit_sv);
15500             if (index >= 0)
15501                 subscript_type = FUV_SUBSCRIPT_ARRAY;
15502         }
15503
15504         if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
15505             break;
15506
15507         return varname(gv, (char)(hash ? '%' : '@'), obase->op_targ,
15508                                     keysv, index, subscript_type);
15509       }
15510
15511     case OP_RV2SV:
15512         if (cUNOPx(obase)->op_first->op_type == OP_GV) {
15513             /* $global */
15514             gv = cGVOPx_gv(cUNOPx(obase)->op_first);
15515             if (!gv || !GvSTASH(gv))
15516                 break;
15517             if (match && (GvSV(gv) != uninit_sv))
15518                 break;
15519             return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
15520         }
15521         /* ${expr} */
15522         return find_uninit_var(cUNOPx(obase)->op_first, uninit_sv, 1, desc_p);
15523
15524     case OP_PADSV:
15525         if (match && PAD_SVl(obase->op_targ) != uninit_sv)
15526             break;
15527         return varname(NULL, '$', obase->op_targ,
15528                                     NULL, 0, FUV_SUBSCRIPT_NONE);
15529
15530     case OP_GVSV:
15531         gv = cGVOPx_gv(obase);
15532         if (!gv || (match && GvSV(gv) != uninit_sv) || !GvSTASH(gv))
15533             break;
15534         return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
15535
15536     case OP_AELEMFAST_LEX:
15537         if (match) {
15538             SV **svp;
15539             AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
15540             if (!av || SvRMAGICAL(av))
15541                 break;
15542             svp = av_fetch(av, (I8)obase->op_private, FALSE);
15543             if (!svp || *svp != uninit_sv)
15544                 break;
15545         }
15546         return varname(NULL, '$', obase->op_targ,
15547                        NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
15548     case OP_AELEMFAST:
15549         {
15550             gv = cGVOPx_gv(obase);
15551             if (!gv)
15552                 break;
15553             if (match) {
15554                 SV **svp;
15555                 AV *const av = GvAV(gv);
15556                 if (!av || SvRMAGICAL(av))
15557                     break;
15558                 svp = av_fetch(av, (I8)obase->op_private, FALSE);
15559                 if (!svp || *svp != uninit_sv)
15560                     break;
15561             }
15562             return varname(gv, '$', 0,
15563                     NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
15564         }
15565         NOT_REACHED; /* NOTREACHED */
15566
15567     case OP_EXISTS:
15568         o = cUNOPx(obase)->op_first;
15569         if (!o || o->op_type != OP_NULL ||
15570                 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
15571             break;
15572         return find_uninit_var(cBINOPo->op_last, uninit_sv, match, desc_p);
15573
15574     case OP_AELEM:
15575     case OP_HELEM:
15576     {
15577         bool negate = FALSE;
15578
15579         if (PL_op == obase)
15580             /* $a[uninit_expr] or $h{uninit_expr} */
15581             return find_uninit_var(cBINOPx(obase)->op_last,
15582                                                 uninit_sv, match, desc_p);
15583
15584         gv = NULL;
15585         o = cBINOPx(obase)->op_first;
15586         kid = cBINOPx(obase)->op_last;
15587
15588         /* get the av or hv, and optionally the gv */
15589         sv = NULL;
15590         if  (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
15591             sv = PAD_SV(o->op_targ);
15592         }
15593         else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
15594                 && cUNOPo->op_first->op_type == OP_GV)
15595         {
15596             gv = cGVOPx_gv(cUNOPo->op_first);
15597             if (!gv)
15598                 break;
15599             sv = o->op_type
15600                 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
15601         }
15602         if (!sv)
15603             break;
15604
15605         if (kid && kid->op_type == OP_NEGATE) {
15606             negate = TRUE;
15607             kid = cUNOPx(kid)->op_first;
15608         }
15609
15610         if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
15611             /* index is constant */
15612             SV* kidsv;
15613             if (negate) {
15614                 kidsv = newSVpvs_flags("-", SVs_TEMP);
15615                 sv_catsv(kidsv, cSVOPx_sv(kid));
15616             }
15617             else
15618                 kidsv = cSVOPx_sv(kid);
15619             if (match) {
15620                 if (SvMAGICAL(sv))
15621                     break;
15622                 if (obase->op_type == OP_HELEM) {
15623                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), kidsv, 0, 0);
15624                     if (!he || HeVAL(he) != uninit_sv)
15625                         break;
15626                 }
15627                 else {
15628                     SV * const  opsv = cSVOPx_sv(kid);
15629                     const IV  opsviv = SvIV(opsv);
15630                     SV * const * const svp = av_fetch(MUTABLE_AV(sv),
15631                         negate ? - opsviv : opsviv,
15632                         FALSE);
15633                     if (!svp || *svp != uninit_sv)
15634                         break;
15635                 }
15636             }
15637             if (obase->op_type == OP_HELEM)
15638                 return varname(gv, '%', o->op_targ,
15639                             kidsv, 0, FUV_SUBSCRIPT_HASH);
15640             else
15641                 return varname(gv, '@', o->op_targ, NULL,
15642                     negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
15643                     FUV_SUBSCRIPT_ARRAY);
15644         }
15645         else  {
15646             /* index is an expression;
15647              * attempt to find a match within the aggregate */
15648             if (obase->op_type == OP_HELEM) {
15649                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
15650                 if (keysv)
15651                     return varname(gv, '%', o->op_targ,
15652                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
15653             }
15654             else {
15655                 const I32 index
15656                     = find_array_subscript((const AV *)sv, uninit_sv);
15657                 if (index >= 0)
15658                     return varname(gv, '@', o->op_targ,
15659                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
15660             }
15661             if (match)
15662                 break;
15663             return varname(gv,
15664                 (char)((o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
15665                 ? '@' : '%'),
15666                 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
15667         }
15668         NOT_REACHED; /* NOTREACHED */
15669     }
15670
15671     case OP_MULTIDEREF: {
15672         /* If we were executing OP_MULTIDEREF when the undef warning
15673          * triggered, then it must be one of the index values within
15674          * that triggered it. If not, then the only possibility is that
15675          * the value retrieved by the last aggregate lookup might be the
15676          * culprit. For the former, we set PL_multideref_pc each time before
15677          * using an index, so work though the item list until we reach
15678          * that point. For the latter, just work through the entire item
15679          * list; the last aggregate retrieved will be the candidate.
15680          */
15681
15682         /* the named aggregate, if any */
15683         PADOFFSET agg_targ = 0;
15684         GV       *agg_gv   = NULL;
15685         /* the last-seen index */
15686         UV        index_type;
15687         PADOFFSET index_targ;
15688         GV       *index_gv;
15689         IV        index_const_iv = 0; /* init for spurious compiler warn */
15690         SV       *index_const_sv;
15691         int       depth = 0;  /* how many array/hash lookups we've done */
15692
15693         UNOP_AUX_item *items = cUNOP_AUXx(obase)->op_aux;
15694         UNOP_AUX_item *last = NULL;
15695         UV actions = items->uv;
15696         bool is_hv;
15697
15698         if (PL_op == obase) {
15699             last = PL_multideref_pc;
15700             assert(last >= items && last <= items + items[-1].uv);
15701         }
15702
15703         assert(actions);
15704
15705         while (1) {
15706             is_hv = FALSE;
15707             switch (actions & MDEREF_ACTION_MASK) {
15708
15709             case MDEREF_reload:
15710                 actions = (++items)->uv;
15711                 continue;
15712
15713             case MDEREF_HV_padhv_helem:               /* $lex{...} */
15714                 is_hv = TRUE;
15715                 /* FALLTHROUGH */
15716             case MDEREF_AV_padav_aelem:               /* $lex[...] */
15717                 agg_targ = (++items)->pad_offset;
15718                 agg_gv = NULL;
15719                 break;
15720
15721             case MDEREF_HV_gvhv_helem:                /* $pkg{...} */
15722                 is_hv = TRUE;
15723                 /* FALLTHROUGH */
15724             case MDEREF_AV_gvav_aelem:                /* $pkg[...] */
15725                 agg_targ = 0;
15726                 agg_gv = (GV*)UNOP_AUX_item_sv(++items);
15727                 assert(isGV_with_GP(agg_gv));
15728                 break;
15729
15730             case MDEREF_HV_gvsv_vivify_rv2hv_helem:   /* $pkg->{...} */
15731             case MDEREF_HV_padsv_vivify_rv2hv_helem:  /* $lex->{...} */
15732                 ++items;
15733                 /* FALLTHROUGH */
15734             case MDEREF_HV_pop_rv2hv_helem:           /* expr->{...} */
15735             case MDEREF_HV_vivify_rv2hv_helem:        /* vivify, ->{...} */
15736                 agg_targ = 0;
15737                 agg_gv   = NULL;
15738                 is_hv    = TRUE;
15739                 break;
15740
15741             case MDEREF_AV_gvsv_vivify_rv2av_aelem:   /* $pkg->[...] */
15742             case MDEREF_AV_padsv_vivify_rv2av_aelem:  /* $lex->[...] */
15743                 ++items;
15744                 /* FALLTHROUGH */
15745             case MDEREF_AV_pop_rv2av_aelem:           /* expr->[...] */
15746             case MDEREF_AV_vivify_rv2av_aelem:        /* vivify, ->[...] */
15747                 agg_targ = 0;
15748                 agg_gv   = NULL;
15749             } /* switch */
15750
15751             index_targ     = 0;
15752             index_gv       = NULL;
15753             index_const_sv = NULL;
15754
15755             index_type = (actions & MDEREF_INDEX_MASK);
15756             switch (index_type) {
15757             case MDEREF_INDEX_none:
15758                 break;
15759             case MDEREF_INDEX_const:
15760                 if (is_hv)
15761                     index_const_sv = UNOP_AUX_item_sv(++items)
15762                 else
15763                     index_const_iv = (++items)->iv;
15764                 break;
15765             case MDEREF_INDEX_padsv:
15766                 index_targ = (++items)->pad_offset;
15767                 break;
15768             case MDEREF_INDEX_gvsv:
15769                 index_gv = (GV*)UNOP_AUX_item_sv(++items);
15770                 assert(isGV_with_GP(index_gv));
15771                 break;
15772             }
15773
15774             if (index_type != MDEREF_INDEX_none)
15775                 depth++;
15776
15777             if (   index_type == MDEREF_INDEX_none
15778                 || (actions & MDEREF_FLAG_last)
15779                 || (last && items == last)
15780             )
15781                 break;
15782
15783             actions >>= MDEREF_SHIFT;
15784         } /* while */
15785
15786         if (PL_op == obase) {
15787             /* index was undef */
15788
15789             *desc_p = (    (actions & MDEREF_FLAG_last)
15790                         && (obase->op_private
15791                                 & (OPpMULTIDEREF_EXISTS|OPpMULTIDEREF_DELETE)))
15792                         ?
15793                             (obase->op_private & OPpMULTIDEREF_EXISTS)
15794                                 ? "exists"
15795                                 : "delete"
15796                         : is_hv ? "hash element" : "array element";
15797             assert(index_type != MDEREF_INDEX_none);
15798             if (index_gv)
15799                 return varname(index_gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
15800             if (index_targ)
15801                 return varname(NULL, '$', index_targ,
15802                                     NULL, 0, FUV_SUBSCRIPT_NONE);
15803             assert(is_hv); /* AV index is an IV and can't be undef */
15804             /* can a const HV index ever be undef? */
15805             return NULL;
15806         }
15807
15808         /* the SV returned by pp_multideref() was undef, if anything was */
15809
15810         if (depth != 1)
15811             break;
15812
15813         if (agg_targ)
15814             sv = PAD_SV(agg_targ);
15815         else if (agg_gv)
15816             sv = is_hv ? MUTABLE_SV(GvHV(agg_gv)) : MUTABLE_SV(GvAV(agg_gv));
15817         else
15818             break;
15819
15820         if (index_type == MDEREF_INDEX_const) {
15821             if (match) {
15822                 if (SvMAGICAL(sv))
15823                     break;
15824                 if (is_hv) {
15825                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), index_const_sv, 0, 0);
15826                     if (!he || HeVAL(he) != uninit_sv)
15827                         break;
15828                 }
15829                 else {
15830                     SV * const * const svp =
15831                             av_fetch(MUTABLE_AV(sv), index_const_iv, FALSE);
15832                     if (!svp || *svp != uninit_sv)
15833                         break;
15834                 }
15835             }
15836             return is_hv
15837                 ? varname(agg_gv, '%', agg_targ,
15838                                 index_const_sv, 0,    FUV_SUBSCRIPT_HASH)
15839                 : varname(agg_gv, '@', agg_targ,
15840                                 NULL, index_const_iv, FUV_SUBSCRIPT_ARRAY);
15841         }
15842         else  {
15843             /* index is an var */
15844             if (is_hv) {
15845                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
15846                 if (keysv)
15847                     return varname(agg_gv, '%', agg_targ,
15848                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
15849             }
15850             else {
15851                 const I32 index
15852                     = find_array_subscript((const AV *)sv, uninit_sv);
15853                 if (index >= 0)
15854                     return varname(agg_gv, '@', agg_targ,
15855                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
15856             }
15857             if (match)
15858                 break;
15859             return varname(agg_gv,
15860                 is_hv ? '%' : '@',
15861                 agg_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
15862         }
15863         NOT_REACHED; /* NOTREACHED */
15864     }
15865
15866     case OP_AASSIGN:
15867         /* only examine RHS */
15868         return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv,
15869                                                                 match, desc_p);
15870
15871     case OP_OPEN:
15872         o = cUNOPx(obase)->op_first;
15873         if (   o->op_type == OP_PUSHMARK
15874            || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)
15875         )
15876             o = OpSIBLING(o);
15877
15878         if (!OpHAS_SIBLING(o)) {
15879             /* one-arg version of open is highly magical */
15880
15881             if (o->op_type == OP_GV) { /* open FOO; */
15882                 gv = cGVOPx_gv(o);
15883                 if (match && GvSV(gv) != uninit_sv)
15884                     break;
15885                 return varname(gv, '$', 0,
15886                             NULL, 0, FUV_SUBSCRIPT_NONE);
15887             }
15888             /* other possibilities not handled are:
15889              * open $x; or open my $x;  should return '${*$x}'
15890              * open expr;               should return '$'.expr ideally
15891              */
15892              break;
15893         }
15894         goto do_op;
15895
15896     /* ops where $_ may be an implicit arg */
15897     case OP_TRANS:
15898     case OP_TRANSR:
15899     case OP_SUBST:
15900     case OP_MATCH:
15901         if ( !(obase->op_flags & OPf_STACKED)) {
15902             if (uninit_sv == DEFSV)
15903                 return newSVpvs_flags("$_", SVs_TEMP);
15904             else if (obase->op_targ
15905                   && uninit_sv == PAD_SVl(obase->op_targ))
15906                 return varname(NULL, '$', obase->op_targ, NULL, 0,
15907                                FUV_SUBSCRIPT_NONE);
15908         }
15909         goto do_op;
15910
15911     case OP_PRTF:
15912     case OP_PRINT:
15913     case OP_SAY:
15914         match = 1; /* print etc can return undef on defined args */
15915         /* skip filehandle as it can't produce 'undef' warning  */
15916         o = cUNOPx(obase)->op_first;
15917         if ((obase->op_flags & OPf_STACKED)
15918             &&
15919                (   o->op_type == OP_PUSHMARK
15920                || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)))
15921             o = OpSIBLING(OpSIBLING(o));
15922         goto do_op2;
15923
15924
15925     case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
15926     case OP_CUSTOM: /* XS or custom code could trigger random warnings */
15927
15928         /* the following ops are capable of returning PL_sv_undef even for
15929          * defined arg(s) */
15930
15931     case OP_BACKTICK:
15932     case OP_PIPE_OP:
15933     case OP_FILENO:
15934     case OP_BINMODE:
15935     case OP_TIED:
15936     case OP_GETC:
15937     case OP_SYSREAD:
15938     case OP_SEND:
15939     case OP_IOCTL:
15940     case OP_SOCKET:
15941     case OP_SOCKPAIR:
15942     case OP_BIND:
15943     case OP_CONNECT:
15944     case OP_LISTEN:
15945     case OP_ACCEPT:
15946     case OP_SHUTDOWN:
15947     case OP_SSOCKOPT:
15948     case OP_GETPEERNAME:
15949     case OP_FTRREAD:
15950     case OP_FTRWRITE:
15951     case OP_FTREXEC:
15952     case OP_FTROWNED:
15953     case OP_FTEREAD:
15954     case OP_FTEWRITE:
15955     case OP_FTEEXEC:
15956     case OP_FTEOWNED:
15957     case OP_FTIS:
15958     case OP_FTZERO:
15959     case OP_FTSIZE:
15960     case OP_FTFILE:
15961     case OP_FTDIR:
15962     case OP_FTLINK:
15963     case OP_FTPIPE:
15964     case OP_FTSOCK:
15965     case OP_FTBLK:
15966     case OP_FTCHR:
15967     case OP_FTTTY:
15968     case OP_FTSUID:
15969     case OP_FTSGID:
15970     case OP_FTSVTX:
15971     case OP_FTTEXT:
15972     case OP_FTBINARY:
15973     case OP_FTMTIME:
15974     case OP_FTATIME:
15975     case OP_FTCTIME:
15976     case OP_READLINK:
15977     case OP_OPEN_DIR:
15978     case OP_READDIR:
15979     case OP_TELLDIR:
15980     case OP_SEEKDIR:
15981     case OP_REWINDDIR:
15982     case OP_CLOSEDIR:
15983     case OP_GMTIME:
15984     case OP_ALARM:
15985     case OP_SEMGET:
15986     case OP_GETLOGIN:
15987     case OP_UNDEF:
15988     case OP_SUBSTR:
15989     case OP_AEACH:
15990     case OP_EACH:
15991     case OP_SORT:
15992     case OP_CALLER:
15993     case OP_DOFILE:
15994     case OP_PROTOTYPE:
15995     case OP_NCMP:
15996     case OP_SMARTMATCH:
15997     case OP_UNPACK:
15998     case OP_SYSOPEN:
15999     case OP_SYSSEEK:
16000         match = 1;
16001         goto do_op;
16002
16003     case OP_ENTERSUB:
16004     case OP_GOTO:
16005         /* XXX tmp hack: these two may call an XS sub, and currently
16006           XS subs don't have a SUB entry on the context stack, so CV and
16007           pad determination goes wrong, and BAD things happen. So, just
16008           don't try to determine the value under those circumstances.
16009           Need a better fix at dome point. DAPM 11/2007 */
16010         break;
16011
16012     case OP_FLIP:
16013     case OP_FLOP:
16014     {
16015         GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
16016         if (gv && GvSV(gv) == uninit_sv)
16017             return newSVpvs_flags("$.", SVs_TEMP);
16018         goto do_op;
16019     }
16020
16021     case OP_POS:
16022         /* def-ness of rval pos() is independent of the def-ness of its arg */
16023         if ( !(obase->op_flags & OPf_MOD))
16024             break;
16025
16026     case OP_SCHOMP:
16027     case OP_CHOMP:
16028         if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
16029             return newSVpvs_flags("${$/}", SVs_TEMP);
16030         /* FALLTHROUGH */
16031
16032     default:
16033     do_op:
16034         if (!(obase->op_flags & OPf_KIDS))
16035             break;
16036         o = cUNOPx(obase)->op_first;
16037         
16038     do_op2:
16039         if (!o)
16040             break;
16041
16042         /* This loop checks all the kid ops, skipping any that cannot pos-
16043          * sibly be responsible for the uninitialized value; i.e., defined
16044          * constants and ops that return nothing.  If there is only one op
16045          * left that is not skipped, then we *know* it is responsible for
16046          * the uninitialized value.  If there is more than one op left, we
16047          * have to look for an exact match in the while() loop below.
16048          * Note that we skip padrange, because the individual pad ops that
16049          * it replaced are still in the tree, so we work on them instead.
16050          */
16051         o2 = NULL;
16052         for (kid=o; kid; kid = OpSIBLING(kid)) {
16053             const OPCODE type = kid->op_type;
16054             if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
16055               || (type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
16056               || (type == OP_PUSHMARK)
16057               || (type == OP_PADRANGE)
16058             )
16059             continue;
16060
16061             if (o2) { /* more than one found */
16062                 o2 = NULL;
16063                 break;
16064             }
16065             o2 = kid;
16066         }
16067         if (o2)
16068             return find_uninit_var(o2, uninit_sv, match, desc_p);
16069
16070         /* scan all args */
16071         while (o) {
16072             sv = find_uninit_var(o, uninit_sv, 1, desc_p);
16073             if (sv)
16074                 return sv;
16075             o = OpSIBLING(o);
16076         }
16077         break;
16078     }
16079     return NULL;
16080 }
16081
16082
16083 /*
16084 =for apidoc report_uninit
16085
16086 Print appropriate "Use of uninitialized variable" warning.
16087
16088 =cut
16089 */
16090
16091 void
16092 Perl_report_uninit(pTHX_ const SV *uninit_sv)
16093 {
16094     const char *desc = NULL;
16095     SV* varname = NULL;
16096
16097     if (PL_op) {
16098         desc = PL_op->op_type == OP_STRINGIFY && PL_op->op_folded
16099                 ? "join or string"
16100                 : OP_DESC(PL_op);
16101         if (uninit_sv && PL_curpad) {
16102             varname = find_uninit_var(PL_op, uninit_sv, 0, &desc);
16103             if (varname)
16104                 sv_insert(varname, 0, 0, " ", 1);
16105         }
16106     }
16107     else if (PL_curstackinfo->si_type == PERLSI_SORT
16108              &&  CxMULTICALL(&cxstack[cxstack_ix]))
16109     {
16110         /* we've reached the end of a sort block or sub,
16111          * and the uninit value is probably what that code returned */
16112         desc = "sort";
16113     }
16114
16115     /* PL_warn_uninit_sv is constant */
16116     GCC_DIAG_IGNORE(-Wformat-nonliteral);
16117     if (desc)
16118         /* diag_listed_as: Use of uninitialized value%s */
16119         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit_sv,
16120                 SVfARG(varname ? varname : &PL_sv_no),
16121                 " in ", desc);
16122     else
16123         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
16124                 "", "", "");
16125     GCC_DIAG_RESTORE;
16126 }
16127
16128 /*
16129  * ex: set ts=8 sts=4 sw=4 et:
16130  */