This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
prevent warning noise on mingw-64 builds
[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     /* freeing dstr's GP might free sstr (e.g. *x = $x),
3957      * so temporarily protect it */
3958     ENTER;
3959     SAVEFREESV(SvREFCNT_inc_simple_NN(sstr));
3960     gp_free(MUTABLE_GV(dstr));
3961     GvINTRO_off(dstr);          /* one-shot flag */
3962     GvGP_set(dstr, gp_ref(GvGP(sstr)));
3963     LEAVE;
3964
3965     if (SvTAINTED(sstr))
3966         SvTAINT(dstr);
3967     if (GvIMPORTED(dstr) != GVf_IMPORTED
3968         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3969         {
3970             GvIMPORTED_on(dstr);
3971         }
3972     GvMULTI_on(dstr);
3973     if(mro_changes == 2) {
3974       if (GvAV((const GV *)sstr)) {
3975         MAGIC *mg;
3976         SV * const sref = (SV *)GvAV((const GV *)dstr);
3977         if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3978             if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3979                 AV * const ary = newAV();
3980                 av_push(ary, mg->mg_obj); /* takes the refcount */
3981                 mg->mg_obj = (SV *)ary;
3982             }
3983             av_push((AV *)mg->mg_obj, SvREFCNT_inc_simple_NN(dstr));
3984         }
3985         else sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
3986       }
3987       mro_isa_changed_in(GvSTASH(dstr));
3988     }
3989     else if(mro_changes == 3) {
3990         HV * const stash = GvHV(dstr);
3991         if(old_stash ? (HV *)HvENAME_get(old_stash) : stash)
3992             mro_package_moved(
3993                 stash, old_stash,
3994                 (GV *)dstr, 0
3995             );
3996     }
3997     else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
3998     if (GvIO(dstr) && dtype == SVt_PVGV) {
3999         DEBUG_o(Perl_deb(aTHX_
4000                         "glob_assign_glob clearing PL_stashcache\n"));
4001         /* It's a cache. It will rebuild itself quite happily.
4002            It's a lot of effort to work out exactly which key (or keys)
4003            might be invalidated by the creation of the this file handle.
4004          */
4005         hv_clear(PL_stashcache);
4006     }
4007     return;
4008 }
4009
4010 void
4011 Perl_gv_setref(pTHX_ SV *const dstr, SV *const sstr)
4012 {
4013     SV * const sref = SvRV(sstr);
4014     SV *dref;
4015     const int intro = GvINTRO(dstr);
4016     SV **location;
4017     U8 import_flag = 0;
4018     const U32 stype = SvTYPE(sref);
4019
4020     PERL_ARGS_ASSERT_GV_SETREF;
4021
4022     if (intro) {
4023         GvINTRO_off(dstr);      /* one-shot flag */
4024         GvLINE(dstr) = CopLINE(PL_curcop);
4025         GvEGV(dstr) = MUTABLE_GV(dstr);
4026     }
4027     GvMULTI_on(dstr);
4028     switch (stype) {
4029     case SVt_PVCV:
4030         location = (SV **) &(GvGP(dstr)->gp_cv); /* XXX bypassing GvCV_set */
4031         import_flag = GVf_IMPORTED_CV;
4032         goto common;
4033     case SVt_PVHV:
4034         location = (SV **) &GvHV(dstr);
4035         import_flag = GVf_IMPORTED_HV;
4036         goto common;
4037     case SVt_PVAV:
4038         location = (SV **) &GvAV(dstr);
4039         import_flag = GVf_IMPORTED_AV;
4040         goto common;
4041     case SVt_PVIO:
4042         location = (SV **) &GvIOp(dstr);
4043         goto common;
4044     case SVt_PVFM:
4045         location = (SV **) &GvFORM(dstr);
4046         goto common;
4047     default:
4048         location = &GvSV(dstr);
4049         import_flag = GVf_IMPORTED_SV;
4050     common:
4051         if (intro) {
4052             if (stype == SVt_PVCV) {
4053                 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
4054                 if (GvCVGEN(dstr)) {
4055                     SvREFCNT_dec(GvCV(dstr));
4056                     GvCV_set(dstr, NULL);
4057                     GvCVGEN(dstr) = 0; /* Switch off cacheness. */
4058                 }
4059             }
4060             /* SAVEt_GVSLOT takes more room on the savestack and has more
4061                overhead in leave_scope than SAVEt_GENERIC_SV.  But for CVs
4062                leave_scope needs access to the GV so it can reset method
4063                caches.  We must use SAVEt_GVSLOT whenever the type is
4064                SVt_PVCV, even if the stash is anonymous, as the stash may
4065                gain a name somehow before leave_scope. */
4066             if (stype == SVt_PVCV) {
4067                 /* There is no save_pushptrptrptr.  Creating it for this
4068                    one call site would be overkill.  So inline the ss add
4069                    routines here. */
4070                 dSS_ADD;
4071                 SS_ADD_PTR(dstr);
4072                 SS_ADD_PTR(location);
4073                 SS_ADD_PTR(SvREFCNT_inc(*location));
4074                 SS_ADD_UV(SAVEt_GVSLOT);
4075                 SS_ADD_END(4);
4076             }
4077             else SAVEGENERICSV(*location);
4078         }
4079         dref = *location;
4080         if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
4081             CV* const cv = MUTABLE_CV(*location);
4082             if (cv) {
4083                 if (!GvCVGEN((const GV *)dstr) &&
4084                     (CvROOT(cv) || CvXSUB(cv)) &&
4085                     /* redundant check that avoids creating the extra SV
4086                        most of the time: */
4087                     (CvCONST(cv) || ckWARN(WARN_REDEFINE)))
4088                     {
4089                         SV * const new_const_sv =
4090                             CvCONST((const CV *)sref)
4091                                  ? cv_const_sv((const CV *)sref)
4092                                  : NULL;
4093                         report_redefined_cv(
4094                            sv_2mortal(Perl_newSVpvf(aTHX_
4095                                 "%"HEKf"::%"HEKf,
4096                                 HEKfARG(
4097                                  HvNAME_HEK(GvSTASH((const GV *)dstr))
4098                                 ),
4099                                 HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr)))
4100                            )),
4101                            cv,
4102                            CvCONST((const CV *)sref) ? &new_const_sv : NULL
4103                         );
4104                     }
4105                 if (!intro)
4106                     cv_ckproto_len_flags(cv, (const GV *)dstr,
4107                                    SvPOK(sref) ? CvPROTO(sref) : NULL,
4108                                    SvPOK(sref) ? CvPROTOLEN(sref) : 0,
4109                                    SvPOK(sref) ? SvUTF8(sref) : 0);
4110             }
4111             GvCVGEN(dstr) = 0; /* Switch off cacheness. */
4112             GvASSUMECV_on(dstr);
4113             if(GvSTASH(dstr)) { /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
4114                 if (intro && GvREFCNT(dstr) > 1) {
4115                     /* temporary remove extra savestack's ref */
4116                     --GvREFCNT(dstr);
4117                     gv_method_changed(dstr);
4118                     ++GvREFCNT(dstr);
4119                 }
4120                 else gv_method_changed(dstr);
4121             }
4122         }
4123         *location = SvREFCNT_inc_simple_NN(sref);
4124         if (import_flag && !(GvFLAGS(dstr) & import_flag)
4125             && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
4126             GvFLAGS(dstr) |= import_flag;
4127         }
4128
4129         if (stype == SVt_PVHV) {
4130             const char * const name = GvNAME((GV*)dstr);
4131             const STRLEN len = GvNAMELEN(dstr);
4132             if (
4133                 (
4134                    (len > 1 && name[len-2] == ':' && name[len-1] == ':')
4135                 || (len == 1 && name[0] == ':')
4136                 )
4137              && (!dref || HvENAME_get(dref))
4138             ) {
4139                 mro_package_moved(
4140                     (HV *)sref, (HV *)dref,
4141                     (GV *)dstr, 0
4142                 );
4143             }
4144         }
4145         else if (
4146             stype == SVt_PVAV && sref != dref
4147          && strEQ(GvNAME((GV*)dstr), "ISA")
4148          /* The stash may have been detached from the symbol table, so
4149             check its name before doing anything. */
4150          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
4151         ) {
4152             MAGIC *mg;
4153             MAGIC * const omg = dref && SvSMAGICAL(dref)
4154                                  ? mg_find(dref, PERL_MAGIC_isa)
4155                                  : NULL;
4156             if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
4157                 if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
4158                     AV * const ary = newAV();
4159                     av_push(ary, mg->mg_obj); /* takes the refcount */
4160                     mg->mg_obj = (SV *)ary;
4161                 }
4162                 if (omg) {
4163                     if (SvTYPE(omg->mg_obj) == SVt_PVAV) {
4164                         SV **svp = AvARRAY((AV *)omg->mg_obj);
4165                         I32 items = AvFILLp((AV *)omg->mg_obj) + 1;
4166                         while (items--)
4167                             av_push(
4168                              (AV *)mg->mg_obj,
4169                              SvREFCNT_inc_simple_NN(*svp++)
4170                             );
4171                     }
4172                     else
4173                         av_push(
4174                          (AV *)mg->mg_obj,
4175                          SvREFCNT_inc_simple_NN(omg->mg_obj)
4176                         );
4177                 }
4178                 else
4179                     av_push((AV *)mg->mg_obj,SvREFCNT_inc_simple_NN(dstr));
4180             }
4181             else
4182             {
4183                 sv_magic(
4184                  sref, omg ? omg->mg_obj : dstr, PERL_MAGIC_isa, NULL, 0
4185                 );
4186                 mg = mg_find(sref, PERL_MAGIC_isa);
4187             }
4188             /* Since the *ISA assignment could have affected more than
4189                one stash, don't call mro_isa_changed_in directly, but let
4190                magic_clearisa do it for us, as it already has the logic for
4191                dealing with globs vs arrays of globs. */
4192             assert(mg);
4193             Perl_magic_clearisa(aTHX_ NULL, mg);
4194         }
4195         else if (stype == SVt_PVIO) {
4196             DEBUG_o(Perl_deb(aTHX_ "gv_setref clearing PL_stashcache\n"));
4197             /* It's a cache. It will rebuild itself quite happily.
4198                It's a lot of effort to work out exactly which key (or keys)
4199                might be invalidated by the creation of the this file handle.
4200             */
4201             hv_clear(PL_stashcache);
4202         }
4203         break;
4204     }
4205     if (!intro) SvREFCNT_dec(dref);
4206     if (SvTAINTED(sstr))
4207         SvTAINT(dstr);
4208     return;
4209 }
4210
4211
4212
4213
4214 #ifdef PERL_DEBUG_READONLY_COW
4215 # include <sys/mman.h>
4216
4217 # ifndef PERL_MEMORY_DEBUG_HEADER_SIZE
4218 #  define PERL_MEMORY_DEBUG_HEADER_SIZE 0
4219 # endif
4220
4221 void
4222 Perl_sv_buf_to_ro(pTHX_ SV *sv)
4223 {
4224     struct perl_memory_debug_header * const header =
4225         (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4226     const MEM_SIZE len = header->size;
4227     PERL_ARGS_ASSERT_SV_BUF_TO_RO;
4228 # ifdef PERL_TRACK_MEMPOOL
4229     if (!header->readonly) header->readonly = 1;
4230 # endif
4231     if (mprotect(header, len, PROT_READ))
4232         Perl_warn(aTHX_ "mprotect RW for COW string %p %lu failed with %d",
4233                          header, len, errno);
4234 }
4235
4236 static void
4237 S_sv_buf_to_rw(pTHX_ SV *sv)
4238 {
4239     struct perl_memory_debug_header * const header =
4240         (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4241     const MEM_SIZE len = header->size;
4242     PERL_ARGS_ASSERT_SV_BUF_TO_RW;
4243     if (mprotect(header, len, PROT_READ|PROT_WRITE))
4244         Perl_warn(aTHX_ "mprotect for COW string %p %lu failed with %d",
4245                          header, len, errno);
4246 # ifdef PERL_TRACK_MEMPOOL
4247     header->readonly = 0;
4248 # endif
4249 }
4250
4251 #else
4252 # define sv_buf_to_ro(sv)       NOOP
4253 # define sv_buf_to_rw(sv)       NOOP
4254 #endif
4255
4256 void
4257 Perl_sv_setsv_flags(pTHX_ SV *dstr, SV* sstr, const I32 flags)
4258 {
4259     U32 sflags;
4260     int dtype;
4261     svtype stype;
4262
4263     PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
4264
4265     if (UNLIKELY( sstr == dstr ))
4266         return;
4267
4268     if (SvIS_FREED(dstr)) {
4269         Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
4270                    " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
4271     }
4272     SV_CHECK_THINKFIRST_COW_DROP(dstr);
4273     if (UNLIKELY( !sstr ))
4274         sstr = &PL_sv_undef;
4275     if (SvIS_FREED(sstr)) {
4276         Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
4277                    (void*)sstr, (void*)dstr);
4278     }
4279     stype = SvTYPE(sstr);
4280     dtype = SvTYPE(dstr);
4281
4282     /* There's a lot of redundancy below but we're going for speed here */
4283
4284     switch (stype) {
4285     case SVt_NULL:
4286       undef_sstr:
4287         if (LIKELY( dtype != SVt_PVGV && dtype != SVt_PVLV )) {
4288             (void)SvOK_off(dstr);
4289             return;
4290         }
4291         break;
4292     case SVt_IV:
4293         if (SvIOK(sstr)) {
4294             switch (dtype) {
4295             case SVt_NULL:
4296                 /* For performance, we inline promoting to type SVt_IV. */
4297                 /* We're starting from SVt_NULL, so provided that define is
4298                  * actual 0, we don't have to unset any SV type flags
4299                  * to promote to SVt_IV. */
4300                 STATIC_ASSERT_STMT(SVt_NULL == 0);
4301                 SET_SVANY_FOR_BODYLESS_IV(dstr);
4302                 SvFLAGS(dstr) |= SVt_IV;
4303                 break;
4304             case SVt_NV:
4305             case SVt_PV:
4306                 sv_upgrade(dstr, SVt_PVIV);
4307                 break;
4308             case SVt_PVGV:
4309             case SVt_PVLV:
4310                 goto end_of_first_switch;
4311             }
4312             (void)SvIOK_only(dstr);
4313             SvIV_set(dstr,  SvIVX(sstr));
4314             if (SvIsUV(sstr))
4315                 SvIsUV_on(dstr);
4316             /* SvTAINTED can only be true if the SV has taint magic, which in
4317                turn means that the SV type is PVMG (or greater). This is the
4318                case statement for SVt_IV, so this cannot be true (whatever gcov
4319                may say).  */
4320             assert(!SvTAINTED(sstr));
4321             return;
4322         }
4323         if (!SvROK(sstr))
4324             goto undef_sstr;
4325         if (dtype < SVt_PV && dtype != SVt_IV)
4326             sv_upgrade(dstr, SVt_IV);
4327         break;
4328
4329     case SVt_NV:
4330         if (LIKELY( SvNOK(sstr) )) {
4331             switch (dtype) {
4332             case SVt_NULL:
4333             case SVt_IV:
4334                 sv_upgrade(dstr, SVt_NV);
4335                 break;
4336             case SVt_PV:
4337             case SVt_PVIV:
4338                 sv_upgrade(dstr, SVt_PVNV);
4339                 break;
4340             case SVt_PVGV:
4341             case SVt_PVLV:
4342                 goto end_of_first_switch;
4343             }
4344             SvNV_set(dstr, SvNVX(sstr));
4345             (void)SvNOK_only(dstr);
4346             /* SvTAINTED can only be true if the SV has taint magic, which in
4347                turn means that the SV type is PVMG (or greater). This is the
4348                case statement for SVt_NV, so this cannot be true (whatever gcov
4349                may say).  */
4350             assert(!SvTAINTED(sstr));
4351             return;
4352         }
4353         goto undef_sstr;
4354
4355     case SVt_PV:
4356         if (dtype < SVt_PV)
4357             sv_upgrade(dstr, SVt_PV);
4358         break;
4359     case SVt_PVIV:
4360         if (dtype < SVt_PVIV)
4361             sv_upgrade(dstr, SVt_PVIV);
4362         break;
4363     case SVt_PVNV:
4364         if (dtype < SVt_PVNV)
4365             sv_upgrade(dstr, SVt_PVNV);
4366         break;
4367     default:
4368         {
4369         const char * const type = sv_reftype(sstr,0);
4370         if (PL_op)
4371             /* diag_listed_as: Bizarre copy of %s */
4372             Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
4373         else
4374             Perl_croak(aTHX_ "Bizarre copy of %s", type);
4375         }
4376         NOT_REACHED; /* NOTREACHED */
4377
4378     case SVt_REGEXP:
4379       upgregexp:
4380         if (dtype < SVt_REGEXP)
4381         {
4382             if (dtype >= SVt_PV) {
4383                 SvPV_free(dstr);
4384                 SvPV_set(dstr, 0);
4385                 SvLEN_set(dstr, 0);
4386                 SvCUR_set(dstr, 0);
4387             }
4388             sv_upgrade(dstr, SVt_REGEXP);
4389         }
4390         break;
4391
4392         case SVt_INVLIST:
4393     case SVt_PVLV:
4394     case SVt_PVGV:
4395     case SVt_PVMG:
4396         if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
4397             mg_get(sstr);
4398             if (SvTYPE(sstr) != stype)
4399                 stype = SvTYPE(sstr);
4400         }
4401         if (isGV_with_GP(sstr) && dtype <= SVt_PVLV) {
4402                     glob_assign_glob(dstr, sstr, dtype);
4403                     return;
4404         }
4405         if (stype == SVt_PVLV)
4406         {
4407             if (isREGEXP(sstr)) goto upgregexp;
4408             SvUPGRADE(dstr, SVt_PVNV);
4409         }
4410         else
4411             SvUPGRADE(dstr, (svtype)stype);
4412     }
4413  end_of_first_switch:
4414
4415     /* dstr may have been upgraded.  */
4416     dtype = SvTYPE(dstr);
4417     sflags = SvFLAGS(sstr);
4418
4419     if (UNLIKELY( dtype == SVt_PVCV )) {
4420         /* Assigning to a subroutine sets the prototype.  */
4421         if (SvOK(sstr)) {
4422             STRLEN len;
4423             const char *const ptr = SvPV_const(sstr, len);
4424
4425             SvGROW(dstr, len + 1);
4426             Copy(ptr, SvPVX(dstr), len + 1, char);
4427             SvCUR_set(dstr, len);
4428             SvPOK_only(dstr);
4429             SvFLAGS(dstr) |= sflags & SVf_UTF8;
4430             CvAUTOLOAD_off(dstr);
4431         } else {
4432             SvOK_off(dstr);
4433         }
4434     }
4435     else if (UNLIKELY(dtype == SVt_PVAV || dtype == SVt_PVHV
4436              || dtype == SVt_PVFM))
4437     {
4438         const char * const type = sv_reftype(dstr,0);
4439         if (PL_op)
4440             /* diag_listed_as: Cannot copy to %s */
4441             Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
4442         else
4443             Perl_croak(aTHX_ "Cannot copy to %s", type);
4444     } else if (sflags & SVf_ROK) {
4445         if (isGV_with_GP(dstr)
4446             && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
4447             sstr = SvRV(sstr);
4448             if (sstr == dstr) {
4449                 if (GvIMPORTED(dstr) != GVf_IMPORTED
4450                     && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4451                 {
4452                     GvIMPORTED_on(dstr);
4453                 }
4454                 GvMULTI_on(dstr);
4455                 return;
4456             }
4457             glob_assign_glob(dstr, sstr, dtype);
4458             return;
4459         }
4460
4461         if (dtype >= SVt_PV) {
4462             if (isGV_with_GP(dstr)) {
4463                 gv_setref(dstr, sstr);
4464                 return;
4465             }
4466             if (SvPVX_const(dstr)) {
4467                 SvPV_free(dstr);
4468                 SvLEN_set(dstr, 0);
4469                 SvCUR_set(dstr, 0);
4470             }
4471         }
4472         (void)SvOK_off(dstr);
4473         SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4474         SvFLAGS(dstr) |= sflags & SVf_ROK;
4475         assert(!(sflags & SVp_NOK));
4476         assert(!(sflags & SVp_IOK));
4477         assert(!(sflags & SVf_NOK));
4478         assert(!(sflags & SVf_IOK));
4479     }
4480     else if (isGV_with_GP(dstr)) {
4481         if (!(sflags & SVf_OK)) {
4482             Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4483                            "Undefined value assigned to typeglob");
4484         }
4485         else {
4486             GV *gv = gv_fetchsv_nomg(sstr, GV_ADD, SVt_PVGV);
4487             if (dstr != (const SV *)gv) {
4488                 const char * const name = GvNAME((const GV *)dstr);
4489                 const STRLEN len = GvNAMELEN(dstr);
4490                 HV *old_stash = NULL;
4491                 bool reset_isa = FALSE;
4492                 if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
4493                  || (len == 1 && name[0] == ':')) {
4494                     /* Set aside the old stash, so we can reset isa caches
4495                        on its subclasses. */
4496                     if((old_stash = GvHV(dstr))) {
4497                         /* Make sure we do not lose it early. */
4498                         SvREFCNT_inc_simple_void_NN(
4499                          sv_2mortal((SV *)old_stash)
4500                         );
4501                     }
4502                     reset_isa = TRUE;
4503                 }
4504
4505                 if (GvGP(dstr)) {
4506                     SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
4507                     gp_free(MUTABLE_GV(dstr));
4508                 }
4509                 GvGP_set(dstr, gp_ref(GvGP(gv)));
4510
4511                 if (reset_isa) {
4512                     HV * const stash = GvHV(dstr);
4513                     if(
4514                         old_stash ? (HV *)HvENAME_get(old_stash) : stash
4515                     )
4516                         mro_package_moved(
4517                          stash, old_stash,
4518                          (GV *)dstr, 0
4519                         );
4520                 }
4521             }
4522         }
4523     }
4524     else if ((dtype == SVt_REGEXP || dtype == SVt_PVLV)
4525           && (stype == SVt_REGEXP || isREGEXP(sstr))) {
4526         reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4527     }
4528     else if (sflags & SVp_POK) {
4529         const STRLEN cur = SvCUR(sstr);
4530         const STRLEN len = SvLEN(sstr);
4531
4532         /*
4533          * We have three basic ways to copy the string:
4534          *
4535          *  1. Swipe
4536          *  2. Copy-on-write
4537          *  3. Actual copy
4538          * 
4539          * Which we choose is based on various factors.  The following
4540          * things are listed in order of speed, fastest to slowest:
4541          *  - Swipe
4542          *  - Copying a short string
4543          *  - Copy-on-write bookkeeping
4544          *  - malloc
4545          *  - Copying a long string
4546          * 
4547          * We swipe the string (steal the string buffer) if the SV on the
4548          * rhs is about to be freed anyway (TEMP and refcnt==1).  This is a
4549          * big win on long strings.  It should be a win on short strings if
4550          * SvPVX_const(dstr) has to be allocated.  If not, it should not 
4551          * slow things down, as SvPVX_const(sstr) would have been freed
4552          * soon anyway.
4553          * 
4554          * We also steal the buffer from a PADTMP (operator target) if it
4555          * is â€˜long enough’.  For short strings, a swipe does not help
4556          * here, as it causes more malloc calls the next time the target
4557          * is used.  Benchmarks show that even if SvPVX_const(dstr) has to
4558          * be allocated it is still not worth swiping PADTMPs for short
4559          * strings, as the savings here are small.
4560          * 
4561          * If swiping is not an option, then we see whether it is
4562          * worth using copy-on-write.  If the lhs already has a buf-
4563          * fer big enough and the string is short, we skip it and fall back
4564          * to method 3, since memcpy is faster for short strings than the
4565          * later bookkeeping overhead that copy-on-write entails.
4566
4567          * If the rhs is not a copy-on-write string yet, then we also
4568          * consider whether the buffer is too large relative to the string
4569          * it holds.  Some operations such as readline allocate a large
4570          * buffer in the expectation of reusing it.  But turning such into
4571          * a COW buffer is counter-productive because it increases memory
4572          * usage by making readline allocate a new large buffer the sec-
4573          * ond time round.  So, if the buffer is too large, again, we use
4574          * method 3 (copy).
4575          * 
4576          * Finally, if there is no buffer on the left, or the buffer is too 
4577          * small, then we use copy-on-write and make both SVs share the
4578          * string buffer.
4579          *
4580          */
4581
4582         /* Whichever path we take through the next code, we want this true,
4583            and doing it now facilitates the COW check.  */
4584         (void)SvPOK_only(dstr);
4585
4586         if (
4587                  (              /* Either ... */
4588                                 /* slated for free anyway (and not COW)? */
4589                     (sflags & (SVs_TEMP|SVf_IsCOW)) == SVs_TEMP
4590                                 /* or a swipable TARG */
4591                  || ((sflags &
4592                            (SVs_PADTMP|SVf_READONLY|SVf_PROTECT|SVf_IsCOW))
4593                        == SVs_PADTMP
4594                                 /* whose buffer is worth stealing */
4595                      && CHECK_COWBUF_THRESHOLD(cur,len)
4596                     )
4597                  ) &&
4598                  !(sflags & SVf_OOK) &&   /* and not involved in OOK hack? */
4599                  (!(flags & SV_NOSTEAL)) &&
4600                                         /* and we're allowed to steal temps */
4601                  SvREFCNT(sstr) == 1 &&   /* and no other references to it? */
4602                  len)             /* and really is a string */
4603         {       /* Passes the swipe test.  */
4604             if (SvPVX_const(dstr))      /* we know that dtype >= SVt_PV */
4605                 SvPV_free(dstr);
4606             SvPV_set(dstr, SvPVX_mutable(sstr));
4607             SvLEN_set(dstr, SvLEN(sstr));
4608             SvCUR_set(dstr, SvCUR(sstr));
4609
4610             SvTEMP_off(dstr);
4611             (void)SvOK_off(sstr);       /* NOTE: nukes most SvFLAGS on sstr */
4612             SvPV_set(sstr, NULL);
4613             SvLEN_set(sstr, 0);
4614             SvCUR_set(sstr, 0);
4615             SvTEMP_off(sstr);
4616         }
4617         else if (flags & SV_COW_SHARED_HASH_KEYS
4618               &&
4619 #ifdef PERL_COPY_ON_WRITE
4620                  (sflags & SVf_IsCOW
4621                    ? (!len ||
4622                        (  (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
4623                           /* If this is a regular (non-hek) COW, only so
4624                              many COW "copies" are possible. */
4625                        && CowREFCNT(sstr) != SV_COW_REFCNT_MAX  ))
4626                    : (  (sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4627                      && !(SvFLAGS(dstr) & SVf_BREAK)
4628                      && CHECK_COW_THRESHOLD(cur,len) && cur+1 < len
4629                      && (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
4630                     ))
4631 #else
4632                  sflags & SVf_IsCOW
4633               && !(SvFLAGS(dstr) & SVf_BREAK)
4634 #endif
4635             ) {
4636             /* Either it's a shared hash key, or it's suitable for
4637                copy-on-write.  */
4638             if (DEBUG_C_TEST) {
4639                 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4640                 sv_dump(sstr);
4641                 sv_dump(dstr);
4642             }
4643 #ifdef PERL_ANY_COW
4644             if (!(sflags & SVf_IsCOW)) {
4645                     SvIsCOW_on(sstr);
4646                     CowREFCNT(sstr) = 0;
4647             }
4648 #endif
4649             if (SvPVX_const(dstr)) {    /* we know that dtype >= SVt_PV */
4650                 SvPV_free(dstr);
4651             }
4652
4653 #ifdef PERL_ANY_COW
4654             if (len) {
4655                     if (sflags & SVf_IsCOW) {
4656                         sv_buf_to_rw(sstr);
4657                     }
4658                     CowREFCNT(sstr)++;
4659                     SvPV_set(dstr, SvPVX_mutable(sstr));
4660                     sv_buf_to_ro(sstr);
4661             } else
4662 #endif
4663             {
4664                     /* SvIsCOW_shared_hash */
4665                     DEBUG_C(PerlIO_printf(Perl_debug_log,
4666                                           "Copy on write: Sharing hash\n"));
4667
4668                     assert (SvTYPE(dstr) >= SVt_PV);
4669                     SvPV_set(dstr,
4670                              HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
4671             }
4672             SvLEN_set(dstr, len);
4673             SvCUR_set(dstr, cur);
4674             SvIsCOW_on(dstr);
4675         } else {
4676             /* Failed the swipe test, and we cannot do copy-on-write either.
4677                Have to copy the string.  */
4678             SvGROW(dstr, cur + 1);      /* inlined from sv_setpvn */
4679             Move(SvPVX_const(sstr),SvPVX(dstr),cur,char);
4680             SvCUR_set(dstr, cur);
4681             *SvEND(dstr) = '\0';
4682         }
4683         if (sflags & SVp_NOK) {
4684             SvNV_set(dstr, SvNVX(sstr));
4685         }
4686         if (sflags & SVp_IOK) {
4687             SvIV_set(dstr, SvIVX(sstr));
4688             /* Must do this otherwise some other overloaded use of 0x80000000
4689                gets confused. I guess SVpbm_VALID */
4690             if (sflags & SVf_IVisUV)
4691                 SvIsUV_on(dstr);
4692         }
4693         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4694         {
4695             const MAGIC * const smg = SvVSTRING_mg(sstr);
4696             if (smg) {
4697                 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4698                          smg->mg_ptr, smg->mg_len);
4699                 SvRMAGICAL_on(dstr);
4700             }
4701         }
4702     }
4703     else if (sflags & (SVp_IOK|SVp_NOK)) {
4704         (void)SvOK_off(dstr);
4705         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
4706         if (sflags & SVp_IOK) {
4707             /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
4708             SvIV_set(dstr, SvIVX(sstr));
4709         }
4710         if (sflags & SVp_NOK) {
4711             SvNV_set(dstr, SvNVX(sstr));
4712         }
4713     }
4714     else {
4715         if (isGV_with_GP(sstr)) {
4716             gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
4717         }
4718         else
4719             (void)SvOK_off(dstr);
4720     }
4721     if (SvTAINTED(sstr))
4722         SvTAINT(dstr);
4723 }
4724
4725 /*
4726 =for apidoc sv_setsv_mg
4727
4728 Like C<sv_setsv>, but also handles 'set' magic.
4729
4730 =cut
4731 */
4732
4733 void
4734 Perl_sv_setsv_mg(pTHX_ SV *const dstr, SV *const sstr)
4735 {
4736     PERL_ARGS_ASSERT_SV_SETSV_MG;
4737
4738     sv_setsv(dstr,sstr);
4739     SvSETMAGIC(dstr);
4740 }
4741
4742 #ifdef PERL_ANY_COW
4743 #  define SVt_COW SVt_PV
4744 SV *
4745 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4746 {
4747     STRLEN cur = SvCUR(sstr);
4748     STRLEN len = SvLEN(sstr);
4749     char *new_pv;
4750 #if defined(PERL_DEBUG_READONLY_COW) && defined(PERL_COPY_ON_WRITE)
4751     const bool already = cBOOL(SvIsCOW(sstr));
4752 #endif
4753
4754     PERL_ARGS_ASSERT_SV_SETSV_COW;
4755
4756     if (DEBUG_C_TEST) {
4757         PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4758                       (void*)sstr, (void*)dstr);
4759         sv_dump(sstr);
4760         if (dstr)
4761                     sv_dump(dstr);
4762     }
4763
4764     if (dstr) {
4765         if (SvTHINKFIRST(dstr))
4766             sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4767         else if (SvPVX_const(dstr))
4768             Safefree(SvPVX_mutable(dstr));
4769     }
4770     else
4771         new_SV(dstr);
4772     SvUPGRADE(dstr, SVt_COW);
4773
4774     assert (SvPOK(sstr));
4775     assert (SvPOKp(sstr));
4776
4777     if (SvIsCOW(sstr)) {
4778
4779         if (SvLEN(sstr) == 0) {
4780             /* source is a COW shared hash key.  */
4781             DEBUG_C(PerlIO_printf(Perl_debug_log,
4782                                   "Fast copy on write: Sharing hash\n"));
4783             new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
4784             goto common_exit;
4785         }
4786         assert(SvCUR(sstr)+1 < SvLEN(sstr));
4787         assert(CowREFCNT(sstr) < SV_COW_REFCNT_MAX);
4788     } else {
4789         assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4790         SvUPGRADE(sstr, SVt_COW);
4791         SvIsCOW_on(sstr);
4792         DEBUG_C(PerlIO_printf(Perl_debug_log,
4793                               "Fast copy on write: Converting sstr to COW\n"));
4794         CowREFCNT(sstr) = 0;    
4795     }
4796 #  ifdef PERL_DEBUG_READONLY_COW
4797     if (already) sv_buf_to_rw(sstr);
4798 #  endif
4799     CowREFCNT(sstr)++;  
4800     new_pv = SvPVX_mutable(sstr);
4801     sv_buf_to_ro(sstr);
4802
4803   common_exit:
4804     SvPV_set(dstr, new_pv);
4805     SvFLAGS(dstr) = (SVt_COW|SVf_POK|SVp_POK|SVf_IsCOW);
4806     if (SvUTF8(sstr))
4807         SvUTF8_on(dstr);
4808     SvLEN_set(dstr, len);
4809     SvCUR_set(dstr, cur);
4810     if (DEBUG_C_TEST) {
4811         sv_dump(dstr);
4812     }
4813     return dstr;
4814 }
4815 #endif
4816
4817 /*
4818 =for apidoc sv_setpvn
4819
4820 Copies a string (possibly containing embedded C<NUL> characters) into an SV.
4821 The C<len> parameter indicates the number of
4822 bytes to be copied.  If the C<ptr> argument is NULL the SV will become
4823 undefined.  Does not handle 'set' magic.  See C<sv_setpvn_mg>.
4824
4825 =cut
4826 */
4827
4828 void
4829 Perl_sv_setpvn(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4830 {
4831     char *dptr;
4832
4833     PERL_ARGS_ASSERT_SV_SETPVN;
4834
4835     SV_CHECK_THINKFIRST_COW_DROP(sv);
4836     if (!ptr) {
4837         (void)SvOK_off(sv);
4838         return;
4839     }
4840     else {
4841         /* len is STRLEN which is unsigned, need to copy to signed */
4842         const IV iv = len;
4843         if (iv < 0)
4844             Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen %"
4845                        IVdf, iv);
4846     }
4847     SvUPGRADE(sv, SVt_PV);
4848
4849     dptr = SvGROW(sv, len + 1);
4850     Move(ptr,dptr,len,char);
4851     dptr[len] = '\0';
4852     SvCUR_set(sv, len);
4853     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4854     SvTAINT(sv);
4855     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4856 }
4857
4858 /*
4859 =for apidoc sv_setpvn_mg
4860
4861 Like C<sv_setpvn>, but also handles 'set' magic.
4862
4863 =cut
4864 */
4865
4866 void
4867 Perl_sv_setpvn_mg(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4868 {
4869     PERL_ARGS_ASSERT_SV_SETPVN_MG;
4870
4871     sv_setpvn(sv,ptr,len);
4872     SvSETMAGIC(sv);
4873 }
4874
4875 /*
4876 =for apidoc sv_setpv
4877
4878 Copies a string into an SV.  The string must be terminated with a C<NUL>
4879 character.
4880 Does not handle 'set' magic.  See C<sv_setpv_mg>.
4881
4882 =cut
4883 */
4884
4885 void
4886 Perl_sv_setpv(pTHX_ SV *const sv, const char *const ptr)
4887 {
4888     STRLEN len;
4889
4890     PERL_ARGS_ASSERT_SV_SETPV;
4891
4892     SV_CHECK_THINKFIRST_COW_DROP(sv);
4893     if (!ptr) {
4894         (void)SvOK_off(sv);
4895         return;
4896     }
4897     len = strlen(ptr);
4898     SvUPGRADE(sv, SVt_PV);
4899
4900     SvGROW(sv, len + 1);
4901     Move(ptr,SvPVX(sv),len+1,char);
4902     SvCUR_set(sv, len);
4903     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4904     SvTAINT(sv);
4905     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4906 }
4907
4908 /*
4909 =for apidoc sv_setpv_mg
4910
4911 Like C<sv_setpv>, but also handles 'set' magic.
4912
4913 =cut
4914 */
4915
4916 void
4917 Perl_sv_setpv_mg(pTHX_ SV *const sv, const char *const ptr)
4918 {
4919     PERL_ARGS_ASSERT_SV_SETPV_MG;
4920
4921     sv_setpv(sv,ptr);
4922     SvSETMAGIC(sv);
4923 }
4924
4925 void
4926 Perl_sv_sethek(pTHX_ SV *const sv, const HEK *const hek)
4927 {
4928     PERL_ARGS_ASSERT_SV_SETHEK;
4929
4930     if (!hek) {
4931         return;
4932     }
4933
4934     if (HEK_LEN(hek) == HEf_SVKEY) {
4935         sv_setsv(sv, *(SV**)HEK_KEY(hek));
4936         return;
4937     } else {
4938         const int flags = HEK_FLAGS(hek);
4939         if (flags & HVhek_WASUTF8) {
4940             STRLEN utf8_len = HEK_LEN(hek);
4941             char *as_utf8 = (char *)bytes_to_utf8((U8*)HEK_KEY(hek), &utf8_len);
4942             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
4943             SvUTF8_on(sv);
4944             return;
4945         } else if (flags & HVhek_UNSHARED) {
4946             sv_setpvn(sv, HEK_KEY(hek), HEK_LEN(hek));
4947             if (HEK_UTF8(hek))
4948                 SvUTF8_on(sv);
4949             else SvUTF8_off(sv);
4950             return;
4951         }
4952         {
4953             SV_CHECK_THINKFIRST_COW_DROP(sv);
4954             SvUPGRADE(sv, SVt_PV);
4955             SvPV_free(sv);
4956             SvPV_set(sv,(char *)HEK_KEY(share_hek_hek(hek)));
4957             SvCUR_set(sv, HEK_LEN(hek));
4958             SvLEN_set(sv, 0);
4959             SvIsCOW_on(sv);
4960             SvPOK_on(sv);
4961             if (HEK_UTF8(hek))
4962                 SvUTF8_on(sv);
4963             else SvUTF8_off(sv);
4964             return;
4965         }
4966     }
4967 }
4968
4969
4970 /*
4971 =for apidoc sv_usepvn_flags
4972
4973 Tells an SV to use C<ptr> to find its string value.  Normally the
4974 string is stored inside the SV, but sv_usepvn allows the SV to use an
4975 outside string.  The C<ptr> should point to memory that was allocated
4976 by L<Newx|perlclib/Memory Management and String Handling>.  It must be
4977 the start of a Newx-ed block of memory, and not a pointer to the
4978 middle of it (beware of L<OOK|perlguts/Offsets> and copy-on-write),
4979 and not be from a non-Newx memory allocator like C<malloc>.  The
4980 string length, C<len>, must be supplied.  By default this function
4981 will C<Renew> (i.e. realloc, move) the memory pointed to by C<ptr>,
4982 so that pointer should not be freed or used by the programmer after
4983 giving it to sv_usepvn, and neither should any pointers from "behind"
4984 that pointer (e.g. ptr + 1) be used.
4985
4986 If C<flags> & SV_SMAGIC is true, will call SvSETMAGIC.  If C<flags> &
4987 SV_HAS_TRAILING_NUL is true, then C<ptr[len]> must be C<NUL>, and the realloc
4988 will be skipped (i.e. the buffer is actually at least 1 byte longer than
4989 C<len>, and already meets the requirements for storing in C<SvPVX>).
4990
4991 =cut
4992 */
4993
4994 void
4995 Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
4996 {
4997     STRLEN allocate;
4998
4999     PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
5000
5001     SV_CHECK_THINKFIRST_COW_DROP(sv);
5002     SvUPGRADE(sv, SVt_PV);
5003     if (!ptr) {
5004         (void)SvOK_off(sv);
5005         if (flags & SV_SMAGIC)
5006             SvSETMAGIC(sv);
5007         return;
5008     }
5009     if (SvPVX_const(sv))
5010         SvPV_free(sv);
5011
5012 #ifdef DEBUGGING
5013     if (flags & SV_HAS_TRAILING_NUL)
5014         assert(ptr[len] == '\0');
5015 #endif
5016
5017     allocate = (flags & SV_HAS_TRAILING_NUL)
5018         ? len + 1 :
5019 #ifdef Perl_safesysmalloc_size
5020         len + 1;
5021 #else 
5022         PERL_STRLEN_ROUNDUP(len + 1);
5023 #endif
5024     if (flags & SV_HAS_TRAILING_NUL) {
5025         /* It's long enough - do nothing.
5026            Specifically Perl_newCONSTSUB is relying on this.  */
5027     } else {
5028 #ifdef DEBUGGING
5029         /* Force a move to shake out bugs in callers.  */
5030         char *new_ptr = (char*)safemalloc(allocate);
5031         Copy(ptr, new_ptr, len, char);
5032         PoisonFree(ptr,len,char);
5033         Safefree(ptr);
5034         ptr = new_ptr;
5035 #else
5036         ptr = (char*) saferealloc (ptr, allocate);
5037 #endif
5038     }
5039 #ifdef Perl_safesysmalloc_size
5040     SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
5041 #else
5042     SvLEN_set(sv, allocate);
5043 #endif
5044     SvCUR_set(sv, len);
5045     SvPV_set(sv, ptr);
5046     if (!(flags & SV_HAS_TRAILING_NUL)) {
5047         ptr[len] = '\0';
5048     }
5049     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5050     SvTAINT(sv);
5051     if (flags & SV_SMAGIC)
5052         SvSETMAGIC(sv);
5053 }
5054
5055 /*
5056 =for apidoc sv_force_normal_flags
5057
5058 Undo various types of fakery on an SV, where fakery means
5059 "more than" a string: if the PV is a shared string, make
5060 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
5061 an xpvmg; if we're a copy-on-write scalar, this is the on-write time when
5062 we do the copy, and is also used locally; if this is a
5063 vstring, drop the vstring magic.  If C<SV_COW_DROP_PV> is set
5064 then a copy-on-write scalar drops its PV buffer (if any) and becomes
5065 SvPOK_off rather than making a copy.  (Used where this
5066 scalar is about to be set to some other value.)  In addition,
5067 the C<flags> parameter gets passed to C<sv_unref_flags()>
5068 when unreffing.  C<sv_force_normal> calls this function
5069 with flags set to 0.
5070
5071 This function is expected to be used to signal to perl that this SV is
5072 about to be written to, and any extra book-keeping needs to be taken care
5073 of.  Hence, it croaks on read-only values.
5074
5075 =cut
5076 */
5077
5078 static void
5079 S_sv_uncow(pTHX_ SV * const sv, const U32 flags)
5080 {
5081     assert(SvIsCOW(sv));
5082     {
5083 #ifdef PERL_ANY_COW
5084         const char * const pvx = SvPVX_const(sv);
5085         const STRLEN len = SvLEN(sv);
5086         const STRLEN cur = SvCUR(sv);
5087
5088         if (DEBUG_C_TEST) {
5089                 PerlIO_printf(Perl_debug_log,
5090                               "Copy on write: Force normal %ld\n",
5091                               (long) flags);
5092                 sv_dump(sv);
5093         }
5094         SvIsCOW_off(sv);
5095 # ifdef PERL_COPY_ON_WRITE
5096         if (len) {
5097             /* Must do this first, since the CowREFCNT uses SvPVX and
5098             we need to write to CowREFCNT, or de-RO the whole buffer if we are
5099             the only owner left of the buffer. */
5100             sv_buf_to_rw(sv); /* NOOP if RO-ing not supported */
5101             {
5102                 U8 cowrefcnt = CowREFCNT(sv);
5103                 if(cowrefcnt != 0) {
5104                     cowrefcnt--;
5105                     CowREFCNT(sv) = cowrefcnt;
5106                     sv_buf_to_ro(sv);
5107                     goto copy_over;
5108                 }
5109             }
5110             /* Else we are the only owner of the buffer. */
5111         }
5112         else
5113 # endif
5114         {
5115             /* This SV doesn't own the buffer, so need to Newx() a new one:  */
5116             copy_over:
5117             SvPV_set(sv, NULL);
5118             SvCUR_set(sv, 0);
5119             SvLEN_set(sv, 0);
5120             if (flags & SV_COW_DROP_PV) {
5121                 /* OK, so we don't need to copy our buffer.  */
5122                 SvPOK_off(sv);
5123             } else {
5124                 SvGROW(sv, cur + 1);
5125                 Move(pvx,SvPVX(sv),cur,char);
5126                 SvCUR_set(sv, cur);
5127                 *SvEND(sv) = '\0';
5128             }
5129             if (len) {
5130             } else {
5131                 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5132             }
5133             if (DEBUG_C_TEST) {
5134                 sv_dump(sv);
5135             }
5136         }
5137 #else
5138             const char * const pvx = SvPVX_const(sv);
5139             const STRLEN len = SvCUR(sv);
5140             SvIsCOW_off(sv);
5141             SvPV_set(sv, NULL);
5142             SvLEN_set(sv, 0);
5143             if (flags & SV_COW_DROP_PV) {
5144                 /* OK, so we don't need to copy our buffer.  */
5145                 SvPOK_off(sv);
5146             } else {
5147                 SvGROW(sv, len + 1);
5148                 Move(pvx,SvPVX(sv),len,char);
5149                 *SvEND(sv) = '\0';
5150             }
5151             unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5152 #endif
5153     }
5154 }
5155
5156 void
5157 Perl_sv_force_normal_flags(pTHX_ SV *const sv, const U32 flags)
5158 {
5159     PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
5160
5161     if (SvREADONLY(sv))
5162         Perl_croak_no_modify();
5163     else if (SvIsCOW(sv) && LIKELY(SvTYPE(sv) != SVt_PVHV))
5164         S_sv_uncow(aTHX_ sv, flags);
5165     if (SvROK(sv))
5166         sv_unref_flags(sv, flags);
5167     else if (SvFAKE(sv) && isGV_with_GP(sv))
5168         sv_unglob(sv, flags);
5169     else if (SvFAKE(sv) && isREGEXP(sv)) {
5170         /* Need to downgrade the REGEXP to a simple(r) scalar. This is analogous
5171            to sv_unglob. We only need it here, so inline it.  */
5172         const bool islv = SvTYPE(sv) == SVt_PVLV;
5173         const svtype new_type =
5174           islv ? SVt_NULL : SvMAGIC(sv) || SvSTASH(sv) ? SVt_PVMG : SVt_PV;
5175         SV *const temp = newSV_type(new_type);
5176         regexp *const temp_p = ReANY((REGEXP *)sv);
5177
5178         if (new_type == SVt_PVMG) {
5179             SvMAGIC_set(temp, SvMAGIC(sv));
5180             SvMAGIC_set(sv, NULL);
5181             SvSTASH_set(temp, SvSTASH(sv));
5182             SvSTASH_set(sv, NULL);
5183         }
5184         if (!islv) SvCUR_set(temp, SvCUR(sv));
5185         /* Remember that SvPVX is in the head, not the body.  But
5186            RX_WRAPPED is in the body. */
5187         assert(ReANY((REGEXP *)sv)->mother_re);
5188         /* Their buffer is already owned by someone else. */
5189         if (flags & SV_COW_DROP_PV) {
5190             /* SvLEN is already 0.  For SVt_REGEXP, we have a brand new
5191                zeroed body.  For SVt_PVLV, it should have been set to 0
5192                before turning into a regexp. */
5193             assert(!SvLEN(islv ? sv : temp));
5194             sv->sv_u.svu_pv = 0;
5195         }
5196         else {
5197             sv->sv_u.svu_pv = savepvn(RX_WRAPPED((REGEXP *)sv), SvCUR(sv));
5198             SvLEN_set(islv ? sv : temp, SvCUR(sv)+1);
5199             SvPOK_on(sv);
5200         }
5201
5202         /* Now swap the rest of the bodies. */
5203
5204         SvFAKE_off(sv);
5205         if (!islv) {
5206             SvFLAGS(sv) &= ~SVTYPEMASK;
5207             SvFLAGS(sv) |= new_type;
5208             SvANY(sv) = SvANY(temp);
5209         }
5210
5211         SvFLAGS(temp) &= ~(SVTYPEMASK);
5212         SvFLAGS(temp) |= SVt_REGEXP|SVf_FAKE;
5213         SvANY(temp) = temp_p;
5214         temp->sv_u.svu_rx = (regexp *)temp_p;
5215
5216         SvREFCNT_dec_NN(temp);
5217     }
5218     else if (SvVOK(sv)) sv_unmagic(sv, PERL_MAGIC_vstring);
5219 }
5220
5221 /*
5222 =for apidoc sv_chop
5223
5224 Efficient removal of characters from the beginning of the string buffer.
5225 SvPOK(sv), or at least SvPOKp(sv), must be true and the C<ptr> must be a
5226 pointer to somewhere inside the string buffer.  The C<ptr> becomes the first
5227 character of the adjusted string.  Uses the "OOK hack".  On return, only
5228 SvPOK(sv) and SvPOKp(sv) among the OK flags will be true.
5229
5230 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
5231 refer to the same chunk of data.
5232
5233 The unfortunate similarity of this function's name to that of Perl's C<chop>
5234 operator is strictly coincidental.  This function works from the left;
5235 C<chop> works from the right.
5236
5237 =cut
5238 */
5239
5240 void
5241 Perl_sv_chop(pTHX_ SV *const sv, const char *const ptr)
5242 {
5243     STRLEN delta;
5244     STRLEN old_delta;
5245     U8 *p;
5246 #ifdef DEBUGGING
5247     const U8 *evacp;
5248     STRLEN evacn;
5249 #endif
5250     STRLEN max_delta;
5251
5252     PERL_ARGS_ASSERT_SV_CHOP;
5253
5254     if (!ptr || !SvPOKp(sv))
5255         return;
5256     delta = ptr - SvPVX_const(sv);
5257     if (!delta) {
5258         /* Nothing to do.  */
5259         return;
5260     }
5261     max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
5262     if (delta > max_delta)
5263         Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
5264                    ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
5265     /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), so don't use ptr any more */
5266     SV_CHECK_THINKFIRST(sv);
5267     SvPOK_only_UTF8(sv);
5268
5269     if (!SvOOK(sv)) {
5270         if (!SvLEN(sv)) { /* make copy of shared string */
5271             const char *pvx = SvPVX_const(sv);
5272             const STRLEN len = SvCUR(sv);
5273             SvGROW(sv, len + 1);
5274             Move(pvx,SvPVX(sv),len,char);
5275             *SvEND(sv) = '\0';
5276         }
5277         SvOOK_on(sv);
5278         old_delta = 0;
5279     } else {
5280         SvOOK_offset(sv, old_delta);
5281     }
5282     SvLEN_set(sv, SvLEN(sv) - delta);
5283     SvCUR_set(sv, SvCUR(sv) - delta);
5284     SvPV_set(sv, SvPVX(sv) + delta);
5285
5286     p = (U8 *)SvPVX_const(sv);
5287
5288 #ifdef DEBUGGING
5289     /* how many bytes were evacuated?  we will fill them with sentinel
5290        bytes, except for the part holding the new offset of course. */
5291     evacn = delta;
5292     if (old_delta)
5293         evacn += (old_delta < 0x100 ? 1 : 1 + sizeof(STRLEN));
5294     assert(evacn);
5295     assert(evacn <= delta + old_delta);
5296     evacp = p - evacn;
5297 #endif
5298
5299     /* This sets 'delta' to the accumulated value of all deltas so far */
5300     delta += old_delta;
5301     assert(delta);
5302
5303     /* If 'delta' fits in a byte, store it just prior to the new beginning of
5304      * the string; otherwise store a 0 byte there and store 'delta' just prior
5305      * to that, using as many bytes as a STRLEN occupies.  Thus it overwrites a
5306      * portion of the chopped part of the string */
5307     if (delta < 0x100) {
5308         *--p = (U8) delta;
5309     } else {
5310         *--p = 0;
5311         p -= sizeof(STRLEN);
5312         Copy((U8*)&delta, p, sizeof(STRLEN), U8);
5313     }
5314
5315 #ifdef DEBUGGING
5316     /* Fill the preceding buffer with sentinals to verify that no-one is
5317        using it.  */
5318     while (p > evacp) {
5319         --p;
5320         *p = (U8)PTR2UV(p);
5321     }
5322 #endif
5323 }
5324
5325 /*
5326 =for apidoc sv_catpvn
5327
5328 Concatenates the string onto the end of the string which is in the SV.  The
5329 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
5330 status set, then the bytes appended should be valid UTF-8.
5331 Handles 'get' magic, but not 'set' magic.  See C<sv_catpvn_mg>.
5332
5333 =for apidoc sv_catpvn_flags
5334
5335 Concatenates the string onto the end of the string which is in the SV.  The
5336 C<len> indicates number of bytes to copy.
5337
5338 By default, the string appended is assumed to be valid UTF-8 if the SV has
5339 the UTF-8 status set, and a string of bytes otherwise.  One can force the
5340 appended string to be interpreted as UTF-8 by supplying the C<SV_CATUTF8>
5341 flag, and as bytes by supplying the C<SV_CATBYTES> flag; the SV or the
5342 string appended will be upgraded to UTF-8 if necessary.
5343
5344 If C<flags> has the C<SV_SMAGIC> bit set, will
5345 C<mg_set> on C<dsv> afterwards if appropriate.
5346 C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
5347 in terms of this function.
5348
5349 =cut
5350 */
5351
5352 void
5353 Perl_sv_catpvn_flags(pTHX_ SV *const dsv, const char *sstr, const STRLEN slen, const I32 flags)
5354 {
5355     STRLEN dlen;
5356     const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
5357
5358     PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
5359     assert((flags & (SV_CATBYTES|SV_CATUTF8)) != (SV_CATBYTES|SV_CATUTF8));
5360
5361     if (!(flags & SV_CATBYTES) || !SvUTF8(dsv)) {
5362       if (flags & SV_CATUTF8 && !SvUTF8(dsv)) {
5363          sv_utf8_upgrade_flags_grow(dsv, 0, slen + 1);
5364          dlen = SvCUR(dsv);
5365       }
5366       else SvGROW(dsv, dlen + slen + 1);
5367       if (sstr == dstr)
5368         sstr = SvPVX_const(dsv);
5369       Move(sstr, SvPVX(dsv) + dlen, slen, char);
5370       SvCUR_set(dsv, SvCUR(dsv) + slen);
5371     }
5372     else {
5373         /* We inline bytes_to_utf8, to avoid an extra malloc. */
5374         const char * const send = sstr + slen;
5375         U8 *d;
5376
5377         /* Something this code does not account for, which I think is
5378            impossible; it would require the same pv to be treated as
5379            bytes *and* utf8, which would indicate a bug elsewhere. */
5380         assert(sstr != dstr);
5381
5382         SvGROW(dsv, dlen + slen * 2 + 1);
5383         d = (U8 *)SvPVX(dsv) + dlen;
5384
5385         while (sstr < send) {
5386             append_utf8_from_native_byte(*sstr, &d);
5387             sstr++;
5388         }
5389         SvCUR_set(dsv, d-(const U8 *)SvPVX(dsv));
5390     }
5391     *SvEND(dsv) = '\0';
5392     (void)SvPOK_only_UTF8(dsv);         /* validate pointer */
5393     SvTAINT(dsv);
5394     if (flags & SV_SMAGIC)
5395         SvSETMAGIC(dsv);
5396 }
5397
5398 /*
5399 =for apidoc sv_catsv
5400
5401 Concatenates the string from SV C<ssv> onto the end of the string in SV
5402 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5403 Handles 'get' magic on both SVs, but no 'set' magic.  See C<sv_catsv_mg> and
5404 C<sv_catsv_nomg>.
5405
5406 =for apidoc sv_catsv_flags
5407
5408 Concatenates the string from SV C<ssv> onto the end of the string in SV
5409 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5410 If C<flags> include C<SV_GMAGIC> bit set, will call C<mg_get> on both SVs if
5411 appropriate.  If C<flags> include C<SV_SMAGIC>, C<mg_set> will be called on
5412 the modified SV afterward, if appropriate.  C<sv_catsv>, C<sv_catsv_nomg>,
5413 and C<sv_catsv_mg> are implemented in terms of this function.
5414
5415 =cut */
5416
5417 void
5418 Perl_sv_catsv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
5419 {
5420     PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
5421
5422     if (ssv) {
5423         STRLEN slen;
5424         const char *spv = SvPV_flags_const(ssv, slen, flags);
5425         if (flags & SV_GMAGIC)
5426                 SvGETMAGIC(dsv);
5427         sv_catpvn_flags(dsv, spv, slen,
5428                             DO_UTF8(ssv) ? SV_CATUTF8 : SV_CATBYTES);
5429         if (flags & SV_SMAGIC)
5430                 SvSETMAGIC(dsv);
5431     }
5432 }
5433
5434 /*
5435 =for apidoc sv_catpv
5436
5437 Concatenates the C<NUL>-terminated string onto the end of the string which is
5438 in the SV.
5439 If the SV has the UTF-8 status set, then the bytes appended should be
5440 valid UTF-8.  Handles 'get' magic, but not 'set' magic.  See C<sv_catpv_mg>.
5441
5442 =cut */
5443
5444 void
5445 Perl_sv_catpv(pTHX_ SV *const sv, const char *ptr)
5446 {
5447     STRLEN len;
5448     STRLEN tlen;
5449     char *junk;
5450
5451     PERL_ARGS_ASSERT_SV_CATPV;
5452
5453     if (!ptr)
5454         return;
5455     junk = SvPV_force(sv, tlen);
5456     len = strlen(ptr);
5457     SvGROW(sv, tlen + len + 1);
5458     if (ptr == junk)
5459         ptr = SvPVX_const(sv);
5460     Move(ptr,SvPVX(sv)+tlen,len+1,char);
5461     SvCUR_set(sv, SvCUR(sv) + len);
5462     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5463     SvTAINT(sv);
5464 }
5465
5466 /*
5467 =for apidoc sv_catpv_flags
5468
5469 Concatenates the C<NUL>-terminated string onto the end of the string which is
5470 in the SV.
5471 If the SV has the UTF-8 status set, then the bytes appended should
5472 be valid UTF-8.  If C<flags> has the C<SV_SMAGIC> bit set, will C<mg_set>
5473 on the modified SV if appropriate.
5474
5475 =cut
5476 */
5477
5478 void
5479 Perl_sv_catpv_flags(pTHX_ SV *dstr, const char *sstr, const I32 flags)
5480 {
5481     PERL_ARGS_ASSERT_SV_CATPV_FLAGS;
5482     sv_catpvn_flags(dstr, sstr, strlen(sstr), flags);
5483 }
5484
5485 /*
5486 =for apidoc sv_catpv_mg
5487
5488 Like C<sv_catpv>, but also handles 'set' magic.
5489
5490 =cut
5491 */
5492
5493 void
5494 Perl_sv_catpv_mg(pTHX_ SV *const sv, const char *const ptr)
5495 {
5496     PERL_ARGS_ASSERT_SV_CATPV_MG;
5497
5498     sv_catpv(sv,ptr);
5499     SvSETMAGIC(sv);
5500 }
5501
5502 /*
5503 =for apidoc newSV
5504
5505 Creates a new SV.  A non-zero C<len> parameter indicates the number of
5506 bytes of preallocated string space the SV should have.  An extra byte for a
5507 trailing C<NUL> is also reserved.  (SvPOK is not set for the SV even if string
5508 space is allocated.)  The reference count for the new SV is set to 1.
5509
5510 In 5.9.3, newSV() replaces the older NEWSV() API, and drops the first
5511 parameter, I<x>, a debug aid which allowed callers to identify themselves.
5512 This aid has been superseded by a new build option, PERL_MEM_LOG (see
5513 L<perlhacktips/PERL_MEM_LOG>).  The older API is still there for use in XS
5514 modules supporting older perls.
5515
5516 =cut
5517 */
5518
5519 SV *
5520 Perl_newSV(pTHX_ const STRLEN len)
5521 {
5522     SV *sv;
5523
5524     new_SV(sv);
5525     if (len) {
5526         sv_grow(sv, len + 1);
5527     }
5528     return sv;
5529 }
5530 /*
5531 =for apidoc sv_magicext
5532
5533 Adds magic to an SV, upgrading it if necessary.  Applies the
5534 supplied vtable and returns a pointer to the magic added.
5535
5536 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
5537 In particular, you can add magic to SvREADONLY SVs, and add more than
5538 one instance of the same 'how'.
5539
5540 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
5541 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
5542 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
5543 to contain an C<SV*> and is stored as-is with its REFCNT incremented.
5544
5545 (This is now used as a subroutine by C<sv_magic>.)
5546
5547 =cut
5548 */
5549 MAGIC * 
5550 Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how, 
5551                 const MGVTBL *const vtable, const char *const name, const I32 namlen)
5552 {
5553     MAGIC* mg;
5554
5555     PERL_ARGS_ASSERT_SV_MAGICEXT;
5556
5557     SvUPGRADE(sv, SVt_PVMG);
5558     Newxz(mg, 1, MAGIC);
5559     mg->mg_moremagic = SvMAGIC(sv);
5560     SvMAGIC_set(sv, mg);
5561
5562     /* Sometimes a magic contains a reference loop, where the sv and
5563        object refer to each other.  To prevent a reference loop that
5564        would prevent such objects being freed, we look for such loops
5565        and if we find one we avoid incrementing the object refcount.
5566
5567        Note we cannot do this to avoid self-tie loops as intervening RV must
5568        have its REFCNT incremented to keep it in existence.
5569
5570     */
5571     if (!obj || obj == sv ||
5572         how == PERL_MAGIC_arylen ||
5573         how == PERL_MAGIC_symtab ||
5574         (SvTYPE(obj) == SVt_PVGV &&
5575             (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
5576              || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
5577              || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
5578     {
5579         mg->mg_obj = obj;
5580     }
5581     else {
5582         mg->mg_obj = SvREFCNT_inc_simple(obj);
5583         mg->mg_flags |= MGf_REFCOUNTED;
5584     }
5585
5586     /* Normal self-ties simply pass a null object, and instead of
5587        using mg_obj directly, use the SvTIED_obj macro to produce a
5588        new RV as needed.  For glob "self-ties", we are tieing the PVIO
5589        with an RV obj pointing to the glob containing the PVIO.  In
5590        this case, to avoid a reference loop, we need to weaken the
5591        reference.
5592     */
5593
5594     if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
5595         obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
5596     {
5597       sv_rvweaken(obj);
5598     }
5599
5600     mg->mg_type = how;
5601     mg->mg_len = namlen;
5602     if (name) {
5603         if (namlen > 0)
5604             mg->mg_ptr = savepvn(name, namlen);
5605         else if (namlen == HEf_SVKEY) {
5606             /* Yes, this is casting away const. This is only for the case of
5607                HEf_SVKEY. I think we need to document this aberation of the
5608                constness of the API, rather than making name non-const, as
5609                that change propagating outwards a long way.  */
5610             mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
5611         } else
5612             mg->mg_ptr = (char *) name;
5613     }
5614     mg->mg_virtual = (MGVTBL *) vtable;
5615
5616     mg_magical(sv);
5617     return mg;
5618 }
5619
5620 MAGIC *
5621 Perl_sv_magicext_mglob(pTHX_ SV *sv)
5622 {
5623     PERL_ARGS_ASSERT_SV_MAGICEXT_MGLOB;
5624     if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y') {
5625         /* This sv is only a delegate.  //g magic must be attached to
5626            its target. */
5627         vivify_defelem(sv);
5628         sv = LvTARG(sv);
5629     }
5630     return sv_magicext(sv, NULL, PERL_MAGIC_regex_global,
5631                        &PL_vtbl_mglob, 0, 0);
5632 }
5633
5634 /*
5635 =for apidoc sv_magic
5636
5637 Adds magic to an SV.  First upgrades C<sv> to type C<SVt_PVMG> if
5638 necessary, then adds a new magic item of type C<how> to the head of the
5639 magic list.
5640
5641 See C<sv_magicext> (which C<sv_magic> now calls) for a description of the
5642 handling of the C<name> and C<namlen> arguments.
5643
5644 You need to use C<sv_magicext> to add magic to SvREADONLY SVs and also
5645 to add more than one instance of the same 'how'.
5646
5647 =cut
5648 */
5649
5650 void
5651 Perl_sv_magic(pTHX_ SV *const sv, SV *const obj, const int how,
5652              const char *const name, const I32 namlen)
5653 {
5654     const MGVTBL *vtable;
5655     MAGIC* mg;
5656     unsigned int flags;
5657     unsigned int vtable_index;
5658
5659     PERL_ARGS_ASSERT_SV_MAGIC;
5660
5661     if (how < 0 || (unsigned)how >= C_ARRAY_LENGTH(PL_magic_data)
5662         || ((flags = PL_magic_data[how]),
5663             (vtable_index = flags & PERL_MAGIC_VTABLE_MASK)
5664             > magic_vtable_max))
5665         Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
5666
5667     /* PERL_MAGIC_ext is reserved for use by extensions not perl internals.
5668        Useful for attaching extension internal data to perl vars.
5669        Note that multiple extensions may clash if magical scalars
5670        etc holding private data from one are passed to another. */
5671
5672     vtable = (vtable_index == magic_vtable_max)
5673         ? NULL : PL_magic_vtables + vtable_index;
5674
5675     if (SvREADONLY(sv)) {
5676         if (
5677             !PERL_MAGIC_TYPE_READONLY_ACCEPTABLE(how)
5678            )
5679         {
5680             Perl_croak_no_modify();
5681         }
5682     }
5683     if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5684         if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
5685             /* sv_magic() refuses to add a magic of the same 'how' as an
5686                existing one
5687              */
5688             if (how == PERL_MAGIC_taint)
5689                 mg->mg_len |= 1;
5690             return;
5691         }
5692     }
5693
5694     /* Force pos to be stored as characters, not bytes. */
5695     if (SvMAGICAL(sv) && DO_UTF8(sv)
5696       && (mg = mg_find(sv, PERL_MAGIC_regex_global))
5697       && mg->mg_len != -1
5698       && mg->mg_flags & MGf_BYTES) {
5699         mg->mg_len = (SSize_t)sv_pos_b2u_flags(sv, (STRLEN)mg->mg_len,
5700                                                SV_CONST_RETURN);
5701         mg->mg_flags &= ~MGf_BYTES;
5702     }
5703
5704     /* Rest of work is done else where */
5705     mg = sv_magicext(sv,obj,how,vtable,name,namlen);
5706
5707     switch (how) {
5708     case PERL_MAGIC_taint:
5709         mg->mg_len = 1;
5710         break;
5711     case PERL_MAGIC_ext:
5712     case PERL_MAGIC_dbfile:
5713         SvRMAGICAL_on(sv);
5714         break;
5715     }
5716 }
5717
5718 static int
5719 S_sv_unmagicext_flags(pTHX_ SV *const sv, const int type, MGVTBL *vtbl, const U32 flags)
5720 {
5721     MAGIC* mg;
5722     MAGIC** mgp;
5723
5724     assert(flags <= 1);
5725
5726     if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
5727         return 0;
5728     mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
5729     for (mg = *mgp; mg; mg = *mgp) {
5730         const MGVTBL* const virt = mg->mg_virtual;
5731         if (mg->mg_type == type && (!flags || virt == vtbl)) {
5732             *mgp = mg->mg_moremagic;
5733             if (virt && virt->svt_free)
5734                 virt->svt_free(aTHX_ sv, mg);
5735             if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
5736                 if (mg->mg_len > 0)
5737                     Safefree(mg->mg_ptr);
5738                 else if (mg->mg_len == HEf_SVKEY)
5739                     SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
5740                 else if (mg->mg_type == PERL_MAGIC_utf8)
5741                     Safefree(mg->mg_ptr);
5742             }
5743             if (mg->mg_flags & MGf_REFCOUNTED)
5744                 SvREFCNT_dec(mg->mg_obj);
5745             Safefree(mg);
5746         }
5747         else
5748             mgp = &mg->mg_moremagic;
5749     }
5750     if (SvMAGIC(sv)) {
5751         if (SvMAGICAL(sv))      /* if we're under save_magic, wait for restore_magic; */
5752             mg_magical(sv);     /*    else fix the flags now */
5753     }
5754     else {
5755         SvMAGICAL_off(sv);
5756         SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
5757     }
5758     return 0;
5759 }
5760
5761 /*
5762 =for apidoc sv_unmagic
5763
5764 Removes all magic of type C<type> from an SV.
5765
5766 =cut
5767 */
5768
5769 int
5770 Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
5771 {
5772     PERL_ARGS_ASSERT_SV_UNMAGIC;
5773     return S_sv_unmagicext_flags(aTHX_ sv, type, NULL, 0);
5774 }
5775
5776 /*
5777 =for apidoc sv_unmagicext
5778
5779 Removes all magic of type C<type> with the specified C<vtbl> from an SV.
5780
5781 =cut
5782 */
5783
5784 int
5785 Perl_sv_unmagicext(pTHX_ SV *const sv, const int type, MGVTBL *vtbl)
5786 {
5787     PERL_ARGS_ASSERT_SV_UNMAGICEXT;
5788     return S_sv_unmagicext_flags(aTHX_ sv, type, vtbl, 1);
5789 }
5790
5791 /*
5792 =for apidoc sv_rvweaken
5793
5794 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5795 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5796 push a back-reference to this RV onto the array of backreferences
5797 associated with that magic.  If the RV is magical, set magic will be
5798 called after the RV is cleared.
5799
5800 =cut
5801 */
5802
5803 SV *
5804 Perl_sv_rvweaken(pTHX_ SV *const sv)
5805 {
5806     SV *tsv;
5807
5808     PERL_ARGS_ASSERT_SV_RVWEAKEN;
5809
5810     if (!SvOK(sv))  /* let undefs pass */
5811         return sv;
5812     if (!SvROK(sv))
5813         Perl_croak(aTHX_ "Can't weaken a nonreference");
5814     else if (SvWEAKREF(sv)) {
5815         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
5816         return sv;
5817     }
5818     else if (SvREADONLY(sv)) croak_no_modify();
5819     tsv = SvRV(sv);
5820     Perl_sv_add_backref(aTHX_ tsv, sv);
5821     SvWEAKREF_on(sv);
5822     SvREFCNT_dec_NN(tsv);
5823     return sv;
5824 }
5825
5826 /*
5827 =for apidoc sv_get_backrefs
5828
5829 If the sv is the target of a weak reference then it returns the back
5830 references structure associated with the sv; otherwise return NULL.
5831
5832 When returning a non-null result the type of the return is relevant. If it
5833 is an AV then the elements of the AV are the weak reference RVs which
5834 point at this item. If it is any other type then the item itself is the
5835 weak reference.
5836
5837 See also Perl_sv_add_backref(), Perl_sv_del_backref(),
5838 Perl_sv_kill_backrefs()
5839
5840 =cut
5841 */
5842
5843 SV *
5844 Perl_sv_get_backrefs(SV *const sv)
5845 {
5846     SV *backrefs= NULL;
5847
5848     PERL_ARGS_ASSERT_SV_GET_BACKREFS;
5849
5850     /* find slot to store array or singleton backref */
5851
5852     if (SvTYPE(sv) == SVt_PVHV) {
5853         if (SvOOK(sv)) {
5854             struct xpvhv_aux * const iter = HvAUX((HV *)sv);
5855             backrefs = (SV *)iter->xhv_backreferences;
5856         }
5857     } else if (SvMAGICAL(sv)) {
5858         MAGIC *mg = mg_find(sv, PERL_MAGIC_backref);
5859         if (mg)
5860             backrefs = mg->mg_obj;
5861     }
5862     return backrefs;
5863 }
5864
5865 /* Give tsv backref magic if it hasn't already got it, then push a
5866  * back-reference to sv onto the array associated with the backref magic.
5867  *
5868  * As an optimisation, if there's only one backref and it's not an AV,
5869  * store it directly in the HvAUX or mg_obj slot, avoiding the need to
5870  * allocate an AV. (Whether the slot holds an AV tells us whether this is
5871  * active.)
5872  */
5873
5874 /* A discussion about the backreferences array and its refcount:
5875  *
5876  * The AV holding the backreferences is pointed to either as the mg_obj of
5877  * PERL_MAGIC_backref, or in the specific case of a HV, from the
5878  * xhv_backreferences field. The array is created with a refcount
5879  * of 2. This means that if during global destruction the array gets
5880  * picked on before its parent to have its refcount decremented by the
5881  * random zapper, it won't actually be freed, meaning it's still there for
5882  * when its parent gets freed.
5883  *
5884  * When the parent SV is freed, the extra ref is killed by
5885  * Perl_sv_kill_backrefs.  The other ref is killed, in the case of magic,
5886  * by mg_free() / MGf_REFCOUNTED, or for a hash, by Perl_hv_kill_backrefs.
5887  *
5888  * When a single backref SV is stored directly, it is not reference
5889  * counted.
5890  */
5891
5892 void
5893 Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
5894 {
5895     SV **svp;
5896     AV *av = NULL;
5897     MAGIC *mg = NULL;
5898
5899     PERL_ARGS_ASSERT_SV_ADD_BACKREF;
5900
5901     /* find slot to store array or singleton backref */
5902
5903     if (SvTYPE(tsv) == SVt_PVHV) {
5904         svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5905     } else {
5906         if (SvMAGICAL(tsv))
5907             mg = mg_find(tsv, PERL_MAGIC_backref);
5908         if (!mg)
5909             mg = sv_magicext(tsv, NULL, PERL_MAGIC_backref, &PL_vtbl_backref, NULL, 0);
5910         svp = &(mg->mg_obj);
5911     }
5912
5913     /* create or retrieve the array */
5914
5915     if (   (!*svp && SvTYPE(sv) == SVt_PVAV)
5916         || (*svp && SvTYPE(*svp) != SVt_PVAV)
5917     ) {
5918         /* create array */
5919         if (mg)
5920             mg->mg_flags |= MGf_REFCOUNTED;
5921         av = newAV();
5922         AvREAL_off(av);
5923         SvREFCNT_inc_simple_void_NN(av);
5924         /* av now has a refcnt of 2; see discussion above */
5925         av_extend(av, *svp ? 2 : 1);
5926         if (*svp) {
5927             /* move single existing backref to the array */
5928             AvARRAY(av)[++AvFILLp(av)] = *svp; /* av_push() */
5929         }
5930         *svp = (SV*)av;
5931     }
5932     else {
5933         av = MUTABLE_AV(*svp);
5934         if (!av) {
5935             /* optimisation: store single backref directly in HvAUX or mg_obj */
5936             *svp = sv;
5937             return;
5938         }
5939         assert(SvTYPE(av) == SVt_PVAV);
5940         if (AvFILLp(av) >= AvMAX(av)) {
5941             av_extend(av, AvFILLp(av)+1);
5942         }
5943     }
5944     /* push new backref */
5945     AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
5946 }
5947
5948 /* delete a back-reference to ourselves from the backref magic associated
5949  * with the SV we point to.
5950  */
5951
5952 void
5953 Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
5954 {
5955     SV **svp = NULL;
5956
5957     PERL_ARGS_ASSERT_SV_DEL_BACKREF;
5958
5959     if (SvTYPE(tsv) == SVt_PVHV) {
5960         if (SvOOK(tsv))
5961             svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
5962     }
5963     else if (SvIS_FREED(tsv) && PL_phase == PERL_PHASE_DESTRUCT) {
5964         /* It's possible for the the last (strong) reference to tsv to have
5965            become freed *before* the last thing holding a weak reference.
5966            If both survive longer than the backreferences array, then when
5967            the referent's reference count drops to 0 and it is freed, it's
5968            not able to chase the backreferences, so they aren't NULLed.
5969
5970            For example, a CV holds a weak reference to its stash. If both the
5971            CV and the stash survive longer than the backreferences array,
5972            and the CV gets picked for the SvBREAK() treatment first,
5973            *and* it turns out that the stash is only being kept alive because
5974            of an our variable in the pad of the CV, then midway during CV
5975            destruction the stash gets freed, but CvSTASH() isn't set to NULL.
5976            It ends up pointing to the freed HV. Hence it's chased in here, and
5977            if this block wasn't here, it would hit the !svp panic just below.
5978
5979            I don't believe that "better" destruction ordering is going to help
5980            here - during global destruction there's always going to be the
5981            chance that something goes out of order. We've tried to make it
5982            foolproof before, and it only resulted in evolutionary pressure on
5983            fools. Which made us look foolish for our hubris. :-(
5984         */
5985         return;
5986     }
5987     else {
5988         MAGIC *const mg
5989             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
5990         svp =  mg ? &(mg->mg_obj) : NULL;
5991     }
5992
5993     if (!svp)
5994         Perl_croak(aTHX_ "panic: del_backref, svp=0");
5995     if (!*svp) {
5996         /* It's possible that sv is being freed recursively part way through the
5997            freeing of tsv. If this happens, the backreferences array of tsv has
5998            already been freed, and so svp will be NULL. If this is the case,
5999            we should not panic. Instead, nothing needs doing, so return.  */
6000         if (PL_phase == PERL_PHASE_DESTRUCT && SvREFCNT(tsv) == 0)
6001             return;
6002         Perl_croak(aTHX_ "panic: del_backref, *svp=%p phase=%s refcnt=%" UVuf,
6003                    (void*)*svp, PL_phase_names[PL_phase], (UV)SvREFCNT(tsv));
6004     }
6005
6006     if (SvTYPE(*svp) == SVt_PVAV) {
6007 #ifdef DEBUGGING
6008         int count = 1;
6009 #endif
6010         AV * const av = (AV*)*svp;
6011         SSize_t fill;
6012         assert(!SvIS_FREED(av));
6013         fill = AvFILLp(av);
6014         assert(fill > -1);
6015         svp = AvARRAY(av);
6016         /* for an SV with N weak references to it, if all those
6017          * weak refs are deleted, then sv_del_backref will be called
6018          * N times and O(N^2) compares will be done within the backref
6019          * array. To ameliorate this potential slowness, we:
6020          * 1) make sure this code is as tight as possible;
6021          * 2) when looking for SV, look for it at both the head and tail of the
6022          *    array first before searching the rest, since some create/destroy
6023          *    patterns will cause the backrefs to be freed in order.
6024          */
6025         if (*svp == sv) {
6026             AvARRAY(av)++;
6027             AvMAX(av)--;
6028         }
6029         else {
6030             SV **p = &svp[fill];
6031             SV *const topsv = *p;
6032             if (topsv != sv) {
6033 #ifdef DEBUGGING
6034                 count = 0;
6035 #endif
6036                 while (--p > svp) {
6037                     if (*p == sv) {
6038                         /* We weren't the last entry.
6039                            An unordered list has this property that you
6040                            can take the last element off the end to fill
6041                            the hole, and it's still an unordered list :-)
6042                         */
6043                         *p = topsv;
6044 #ifdef DEBUGGING
6045                         count++;
6046 #else
6047                         break; /* should only be one */
6048 #endif
6049                     }
6050                 }
6051             }
6052         }
6053         assert(count ==1);
6054         AvFILLp(av) = fill-1;
6055     }
6056     else if (SvIS_FREED(*svp) && PL_phase == PERL_PHASE_DESTRUCT) {
6057         /* freed AV; skip */
6058     }
6059     else {
6060         /* optimisation: only a single backref, stored directly */
6061         if (*svp != sv)
6062             Perl_croak(aTHX_ "panic: del_backref, *svp=%p, sv=%p",
6063                        (void*)*svp, (void*)sv);
6064         *svp = NULL;
6065     }
6066
6067 }
6068
6069 void
6070 Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
6071 {
6072     SV **svp;
6073     SV **last;
6074     bool is_array;
6075
6076     PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
6077
6078     if (!av)
6079         return;
6080
6081     /* after multiple passes through Perl_sv_clean_all() for a thingy
6082      * that has badly leaked, the backref array may have gotten freed,
6083      * since we only protect it against 1 round of cleanup */
6084     if (SvIS_FREED(av)) {
6085         if (PL_in_clean_all) /* All is fair */
6086             return;
6087         Perl_croak(aTHX_
6088                    "panic: magic_killbackrefs (freed backref AV/SV)");
6089     }
6090
6091
6092     is_array = (SvTYPE(av) == SVt_PVAV);
6093     if (is_array) {
6094         assert(!SvIS_FREED(av));
6095         svp = AvARRAY(av);
6096         if (svp)
6097             last = svp + AvFILLp(av);
6098     }
6099     else {
6100         /* optimisation: only a single backref, stored directly */
6101         svp = (SV**)&av;
6102         last = svp;
6103     }
6104
6105     if (svp) {
6106         while (svp <= last) {
6107             if (*svp) {
6108                 SV *const referrer = *svp;
6109                 if (SvWEAKREF(referrer)) {
6110                     /* XXX Should we check that it hasn't changed? */
6111                     assert(SvROK(referrer));
6112                     SvRV_set(referrer, 0);
6113                     SvOK_off(referrer);
6114                     SvWEAKREF_off(referrer);
6115                     SvSETMAGIC(referrer);
6116                 } else if (SvTYPE(referrer) == SVt_PVGV ||
6117                            SvTYPE(referrer) == SVt_PVLV) {
6118                     assert(SvTYPE(sv) == SVt_PVHV); /* stash backref */
6119                     /* You lookin' at me?  */
6120                     assert(GvSTASH(referrer));
6121                     assert(GvSTASH(referrer) == (const HV *)sv);
6122                     GvSTASH(referrer) = 0;
6123                 } else if (SvTYPE(referrer) == SVt_PVCV ||
6124                            SvTYPE(referrer) == SVt_PVFM) {
6125                     if (SvTYPE(sv) == SVt_PVHV) { /* stash backref */
6126                         /* You lookin' at me?  */
6127                         assert(CvSTASH(referrer));
6128                         assert(CvSTASH(referrer) == (const HV *)sv);
6129                         SvANY(MUTABLE_CV(referrer))->xcv_stash = 0;
6130                     }
6131                     else {
6132                         assert(SvTYPE(sv) == SVt_PVGV);
6133                         /* You lookin' at me?  */
6134                         assert(CvGV(referrer));
6135                         assert(CvGV(referrer) == (const GV *)sv);
6136                         anonymise_cv_maybe(MUTABLE_GV(sv),
6137                                                 MUTABLE_CV(referrer));
6138                     }
6139
6140                 } else {
6141                     Perl_croak(aTHX_
6142                                "panic: magic_killbackrefs (flags=%"UVxf")",
6143                                (UV)SvFLAGS(referrer));
6144                 }
6145
6146                 if (is_array)
6147                     *svp = NULL;
6148             }
6149             svp++;
6150         }
6151     }
6152     if (is_array) {
6153         AvFILLp(av) = -1;
6154         SvREFCNT_dec_NN(av); /* remove extra count added by sv_add_backref() */
6155     }
6156     return;
6157 }
6158
6159 /*
6160 =for apidoc sv_insert
6161
6162 Inserts a string at the specified offset/length within the SV.  Similar to
6163 the Perl substr() function.  Handles get magic.
6164
6165 =for apidoc sv_insert_flags
6166
6167 Same as C<sv_insert>, but the extra C<flags> are passed to the
6168 C<SvPV_force_flags> that applies to C<bigstr>.
6169
6170 =cut
6171 */
6172
6173 void
6174 Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen, const U32 flags)
6175 {
6176     char *big;
6177     char *mid;
6178     char *midend;
6179     char *bigend;
6180     SSize_t i;          /* better be sizeof(STRLEN) or bad things happen */
6181     STRLEN curlen;
6182
6183     PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
6184
6185     SvPV_force_flags(bigstr, curlen, flags);
6186     (void)SvPOK_only_UTF8(bigstr);
6187     if (offset + len > curlen) {
6188         SvGROW(bigstr, offset+len+1);
6189         Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
6190         SvCUR_set(bigstr, offset+len);
6191     }
6192
6193     SvTAINT(bigstr);
6194     i = littlelen - len;
6195     if (i > 0) {                        /* string might grow */
6196         big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
6197         mid = big + offset + len;
6198         midend = bigend = big + SvCUR(bigstr);
6199         bigend += i;
6200         *bigend = '\0';
6201         while (midend > mid)            /* shove everything down */
6202             *--bigend = *--midend;
6203         Move(little,big+offset,littlelen,char);
6204         SvCUR_set(bigstr, SvCUR(bigstr) + i);
6205         SvSETMAGIC(bigstr);
6206         return;
6207     }
6208     else if (i == 0) {
6209         Move(little,SvPVX(bigstr)+offset,len,char);
6210         SvSETMAGIC(bigstr);
6211         return;
6212     }
6213
6214     big = SvPVX(bigstr);
6215     mid = big + offset;
6216     midend = mid + len;
6217     bigend = big + SvCUR(bigstr);
6218
6219     if (midend > bigend)
6220         Perl_croak(aTHX_ "panic: sv_insert, midend=%p, bigend=%p",
6221                    midend, bigend);
6222
6223     if (mid - big > bigend - midend) {  /* faster to shorten from end */
6224         if (littlelen) {
6225             Move(little, mid, littlelen,char);
6226             mid += littlelen;
6227         }
6228         i = bigend - midend;
6229         if (i > 0) {
6230             Move(midend, mid, i,char);
6231             mid += i;
6232         }
6233         *mid = '\0';
6234         SvCUR_set(bigstr, mid - big);
6235     }
6236     else if ((i = mid - big)) { /* faster from front */
6237         midend -= littlelen;
6238         mid = midend;
6239         Move(big, midend - i, i, char);
6240         sv_chop(bigstr,midend-i);
6241         if (littlelen)
6242             Move(little, mid, littlelen,char);
6243     }
6244     else if (littlelen) {
6245         midend -= littlelen;
6246         sv_chop(bigstr,midend);
6247         Move(little,midend,littlelen,char);
6248     }
6249     else {
6250         sv_chop(bigstr,midend);
6251     }
6252     SvSETMAGIC(bigstr);
6253 }
6254
6255 /*
6256 =for apidoc sv_replace
6257
6258 Make the first argument a copy of the second, then delete the original.
6259 The target SV physically takes over ownership of the body of the source SV
6260 and inherits its flags; however, the target keeps any magic it owns,
6261 and any magic in the source is discarded.
6262 Note that this is a rather specialist SV copying operation; most of the
6263 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
6264
6265 =cut
6266 */
6267
6268 void
6269 Perl_sv_replace(pTHX_ SV *const sv, SV *const nsv)
6270 {
6271     const U32 refcnt = SvREFCNT(sv);
6272
6273     PERL_ARGS_ASSERT_SV_REPLACE;
6274
6275     SV_CHECK_THINKFIRST_COW_DROP(sv);
6276     if (SvREFCNT(nsv) != 1) {
6277         Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
6278                    " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
6279     }
6280     if (SvMAGICAL(sv)) {
6281         if (SvMAGICAL(nsv))
6282             mg_free(nsv);
6283         else
6284             sv_upgrade(nsv, SVt_PVMG);
6285         SvMAGIC_set(nsv, SvMAGIC(sv));
6286         SvFLAGS(nsv) |= SvMAGICAL(sv);
6287         SvMAGICAL_off(sv);
6288         SvMAGIC_set(sv, NULL);
6289     }
6290     SvREFCNT(sv) = 0;
6291     sv_clear(sv);
6292     assert(!SvREFCNT(sv));
6293 #ifdef DEBUG_LEAKING_SCALARS
6294     sv->sv_flags  = nsv->sv_flags;
6295     sv->sv_any    = nsv->sv_any;
6296     sv->sv_refcnt = nsv->sv_refcnt;
6297     sv->sv_u      = nsv->sv_u;
6298 #else
6299     StructCopy(nsv,sv,SV);
6300 #endif
6301     if(SvTYPE(sv) == SVt_IV) {
6302         SET_SVANY_FOR_BODYLESS_IV(sv);
6303     }
6304         
6305
6306     SvREFCNT(sv) = refcnt;
6307     SvFLAGS(nsv) |= SVTYPEMASK;         /* Mark as freed */
6308     SvREFCNT(nsv) = 0;
6309     del_SV(nsv);
6310 }
6311
6312 /* We're about to free a GV which has a CV that refers back to us.
6313  * If that CV will outlive us, make it anonymous (i.e. fix up its CvGV
6314  * field) */
6315
6316 STATIC void
6317 S_anonymise_cv_maybe(pTHX_ GV *gv, CV* cv)
6318 {
6319     SV *gvname;
6320     GV *anongv;
6321
6322     PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE;
6323
6324     /* be assertive! */
6325     assert(SvREFCNT(gv) == 0);
6326     assert(isGV(gv) && isGV_with_GP(gv));
6327     assert(GvGP(gv));
6328     assert(!CvANON(cv));
6329     assert(CvGV(cv) == gv);
6330     assert(!CvNAMED(cv));
6331
6332     /* will the CV shortly be freed by gp_free() ? */
6333     if (GvCV(gv) == cv && GvGP(gv)->gp_refcnt < 2 && SvREFCNT(cv) < 2) {
6334         SvANY(cv)->xcv_gv_u.xcv_gv = NULL;
6335         return;
6336     }
6337
6338     /* if not, anonymise: */
6339     gvname = (GvSTASH(gv) && HvNAME(GvSTASH(gv)) && HvENAME(GvSTASH(gv)))
6340                     ? newSVhek(HvENAME_HEK(GvSTASH(gv)))
6341                     : newSVpvn_flags( "__ANON__", 8, 0 );
6342     sv_catpvs(gvname, "::__ANON__");
6343     anongv = gv_fetchsv(gvname, GV_ADDMULTI, SVt_PVCV);
6344     SvREFCNT_dec_NN(gvname);
6345
6346     CvANON_on(cv);
6347     CvCVGV_RC_on(cv);
6348     SvANY(cv)->xcv_gv_u.xcv_gv = MUTABLE_GV(SvREFCNT_inc(anongv));
6349 }
6350
6351
6352 /*
6353 =for apidoc sv_clear
6354
6355 Clear an SV: call any destructors, free up any memory used by the body,
6356 and free the body itself.  The SV's head is I<not> freed, although
6357 its type is set to all 1's so that it won't inadvertently be assumed
6358 to be live during global destruction etc.
6359 This function should only be called when REFCNT is zero.  Most of the time
6360 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
6361 instead.
6362
6363 =cut
6364 */
6365
6366 void
6367 Perl_sv_clear(pTHX_ SV *const orig_sv)
6368 {
6369     dVAR;
6370     HV *stash;
6371     U32 type;
6372     const struct body_details *sv_type_details;
6373     SV* iter_sv = NULL;
6374     SV* next_sv = NULL;
6375     SV *sv = orig_sv;
6376     STRLEN hash_index = 0; /* initialise to make Coverity et al happy.
6377                               Not strictly necessary */
6378
6379     PERL_ARGS_ASSERT_SV_CLEAR;
6380
6381     /* within this loop, sv is the SV currently being freed, and
6382      * iter_sv is the most recent AV or whatever that's being iterated
6383      * over to provide more SVs */
6384
6385     while (sv) {
6386
6387         type = SvTYPE(sv);
6388
6389         assert(SvREFCNT(sv) == 0);
6390         assert(SvTYPE(sv) != (svtype)SVTYPEMASK);
6391
6392         if (type <= SVt_IV) {
6393             /* See the comment in sv.h about the collusion between this
6394              * early return and the overloading of the NULL slots in the
6395              * size table.  */
6396             if (SvROK(sv))
6397                 goto free_rv;
6398             SvFLAGS(sv) &= SVf_BREAK;
6399             SvFLAGS(sv) |= SVTYPEMASK;
6400             goto free_head;
6401         }
6402
6403         /* objs are always >= MG, but pad names use the SVs_OBJECT flag
6404            for another purpose  */
6405         assert(!SvOBJECT(sv) || type >= SVt_PVMG);
6406
6407         if (type >= SVt_PVMG) {
6408             if (SvOBJECT(sv)) {
6409                 if (!curse(sv, 1)) goto get_next_sv;
6410                 type = SvTYPE(sv); /* destructor may have changed it */
6411             }
6412             /* Free back-references before magic, in case the magic calls
6413              * Perl code that has weak references to sv. */
6414             if (type == SVt_PVHV) {
6415                 Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
6416                 if (SvMAGIC(sv))
6417                     mg_free(sv);
6418             }
6419             else if (SvMAGIC(sv)) {
6420                 /* Free back-references before other types of magic. */
6421                 sv_unmagic(sv, PERL_MAGIC_backref);
6422                 mg_free(sv);
6423             }
6424             SvMAGICAL_off(sv);
6425         }
6426         switch (type) {
6427             /* case SVt_INVLIST: */
6428         case SVt_PVIO:
6429             if (IoIFP(sv) &&
6430                 IoIFP(sv) != PerlIO_stdin() &&
6431                 IoIFP(sv) != PerlIO_stdout() &&
6432                 IoIFP(sv) != PerlIO_stderr() &&
6433                 !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6434             {
6435                 io_close(MUTABLE_IO(sv), NULL, FALSE,
6436                          (IoTYPE(sv) == IoTYPE_WRONLY ||
6437                           IoTYPE(sv) == IoTYPE_RDWR   ||
6438                           IoTYPE(sv) == IoTYPE_APPEND));
6439             }
6440             if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6441                 PerlDir_close(IoDIRP(sv));
6442             IoDIRP(sv) = (DIR*)NULL;
6443             Safefree(IoTOP_NAME(sv));
6444             Safefree(IoFMT_NAME(sv));
6445             Safefree(IoBOTTOM_NAME(sv));
6446             if ((const GV *)sv == PL_statgv)
6447                 PL_statgv = NULL;
6448             goto freescalar;
6449         case SVt_REGEXP:
6450             /* FIXME for plugins */
6451           freeregexp:
6452             pregfree2((REGEXP*) sv);
6453             goto freescalar;
6454         case SVt_PVCV:
6455         case SVt_PVFM:
6456             cv_undef(MUTABLE_CV(sv));
6457             /* If we're in a stash, we don't own a reference to it.
6458              * However it does have a back reference to us, which needs to
6459              * be cleared.  */
6460             if ((stash = CvSTASH(sv)))
6461                 sv_del_backref(MUTABLE_SV(stash), sv);
6462             goto freescalar;
6463         case SVt_PVHV:
6464             if (PL_last_swash_hv == (const HV *)sv) {
6465                 PL_last_swash_hv = NULL;
6466             }
6467             if (HvTOTALKEYS((HV*)sv) > 0) {
6468                 const HEK *hek;
6469                 /* this statement should match the one at the beginning of
6470                  * hv_undef_flags() */
6471                 if (   PL_phase != PERL_PHASE_DESTRUCT
6472                     && (hek = HvNAME_HEK((HV*)sv)))
6473                 {
6474                     if (PL_stashcache) {
6475                         DEBUG_o(Perl_deb(aTHX_
6476                             "sv_clear clearing PL_stashcache for '%"HEKf
6477                             "'\n",
6478                              HEKfARG(hek)));
6479                         (void)hv_deletehek(PL_stashcache,
6480                                            hek, G_DISCARD);
6481                     }
6482                     hv_name_set((HV*)sv, NULL, 0, 0);
6483                 }
6484
6485                 /* save old iter_sv in unused SvSTASH field */
6486                 assert(!SvOBJECT(sv));
6487                 SvSTASH(sv) = (HV*)iter_sv;
6488                 iter_sv = sv;
6489
6490                 /* save old hash_index in unused SvMAGIC field */
6491                 assert(!SvMAGICAL(sv));
6492                 assert(!SvMAGIC(sv));
6493                 ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index = hash_index;
6494                 hash_index = 0;
6495
6496                 next_sv = Perl_hfree_next_entry(aTHX_ (HV*)sv, &hash_index);
6497                 goto get_next_sv; /* process this new sv */
6498             }
6499             /* free empty hash */
6500             Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6501             assert(!HvARRAY((HV*)sv));
6502             break;
6503         case SVt_PVAV:
6504             {
6505                 AV* av = MUTABLE_AV(sv);
6506                 if (PL_comppad == av) {
6507                     PL_comppad = NULL;
6508                     PL_curpad = NULL;
6509                 }
6510                 if (AvREAL(av) && AvFILLp(av) > -1) {
6511                     next_sv = AvARRAY(av)[AvFILLp(av)--];
6512                     /* save old iter_sv in top-most slot of AV,
6513                      * and pray that it doesn't get wiped in the meantime */
6514                     AvARRAY(av)[AvMAX(av)] = iter_sv;
6515                     iter_sv = sv;
6516                     goto get_next_sv; /* process this new sv */
6517                 }
6518                 Safefree(AvALLOC(av));
6519             }
6520
6521             break;
6522         case SVt_PVLV:
6523             if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
6524                 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
6525                 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
6526                 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
6527             }
6528             else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV**  */
6529                 SvREFCNT_dec(LvTARG(sv));
6530             if (isREGEXP(sv)) goto freeregexp;
6531             /* FALLTHROUGH */
6532         case SVt_PVGV:
6533             if (isGV_with_GP(sv)) {
6534                 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
6535                    && HvENAME_get(stash))
6536                     mro_method_changed_in(stash);
6537                 gp_free(MUTABLE_GV(sv));
6538                 if (GvNAME_HEK(sv))
6539                     unshare_hek(GvNAME_HEK(sv));
6540                 /* If we're in a stash, we don't own a reference to it.
6541                  * However it does have a back reference to us, which
6542                  * needs to be cleared.  */
6543                 if (!SvVALID(sv) && (stash = GvSTASH(sv)))
6544                         sv_del_backref(MUTABLE_SV(stash), sv);
6545             }
6546             /* FIXME. There are probably more unreferenced pointers to SVs
6547              * in the interpreter struct that we should check and tidy in
6548              * a similar fashion to this:  */
6549             /* See also S_sv_unglob, which does the same thing. */
6550             if ((const GV *)sv == PL_last_in_gv)
6551                 PL_last_in_gv = NULL;
6552             else if ((const GV *)sv == PL_statgv)
6553                 PL_statgv = NULL;
6554             else if ((const GV *)sv == PL_stderrgv)
6555                 PL_stderrgv = NULL;
6556             /* FALLTHROUGH */
6557         case SVt_PVMG:
6558         case SVt_PVNV:
6559         case SVt_PVIV:
6560         case SVt_INVLIST:
6561         case SVt_PV:
6562           freescalar:
6563             /* Don't bother with SvOOK_off(sv); as we're only going to
6564              * free it.  */
6565             if (SvOOK(sv)) {
6566                 STRLEN offset;
6567                 SvOOK_offset(sv, offset);
6568                 SvPV_set(sv, SvPVX_mutable(sv) - offset);
6569                 /* Don't even bother with turning off the OOK flag.  */
6570             }
6571             if (SvROK(sv)) {
6572             free_rv:
6573                 {
6574                     SV * const target = SvRV(sv);
6575                     if (SvWEAKREF(sv))
6576                         sv_del_backref(target, sv);
6577                     else
6578                         next_sv = target;
6579                 }
6580             }
6581 #ifdef PERL_ANY_COW
6582             else if (SvPVX_const(sv)
6583                      && !(SvTYPE(sv) == SVt_PVIO
6584                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6585             {
6586                 if (SvIsCOW(sv)) {
6587                     if (DEBUG_C_TEST) {
6588                         PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
6589                         sv_dump(sv);
6590                     }
6591                     if (SvLEN(sv)) {
6592                         if (CowREFCNT(sv)) {
6593                             sv_buf_to_rw(sv);
6594                             CowREFCNT(sv)--;
6595                             sv_buf_to_ro(sv);
6596                             SvLEN_set(sv, 0);
6597                         }
6598                     } else {
6599                         unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6600                     }
6601
6602                 }
6603                 if (SvLEN(sv)) {
6604                     Safefree(SvPVX_mutable(sv));
6605                 }
6606             }
6607 #else
6608             else if (SvPVX_const(sv) && SvLEN(sv)
6609                      && !(SvTYPE(sv) == SVt_PVIO
6610                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6611                 Safefree(SvPVX_mutable(sv));
6612             else if (SvPVX_const(sv) && SvIsCOW(sv)) {
6613                 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6614             }
6615 #endif
6616             break;
6617         case SVt_NV:
6618             break;
6619         }
6620
6621       free_body:
6622
6623         SvFLAGS(sv) &= SVf_BREAK;
6624         SvFLAGS(sv) |= SVTYPEMASK;
6625
6626         sv_type_details = bodies_by_type + type;
6627         if (sv_type_details->arena) {
6628             del_body(((char *)SvANY(sv) + sv_type_details->offset),
6629                      &PL_body_roots[type]);
6630         }
6631         else if (sv_type_details->body_size) {
6632             safefree(SvANY(sv));
6633         }
6634
6635       free_head:
6636         /* caller is responsible for freeing the head of the original sv */
6637         if (sv != orig_sv && !SvREFCNT(sv))
6638             del_SV(sv);
6639
6640         /* grab and free next sv, if any */
6641       get_next_sv:
6642         while (1) {
6643             sv = NULL;
6644             if (next_sv) {
6645                 sv = next_sv;
6646                 next_sv = NULL;
6647             }
6648             else if (!iter_sv) {
6649                 break;
6650             } else if (SvTYPE(iter_sv) == SVt_PVAV) {
6651                 AV *const av = (AV*)iter_sv;
6652                 if (AvFILLp(av) > -1) {
6653                     sv = AvARRAY(av)[AvFILLp(av)--];
6654                 }
6655                 else { /* no more elements of current AV to free */
6656                     sv = iter_sv;
6657                     type = SvTYPE(sv);
6658                     /* restore previous value, squirrelled away */
6659                     iter_sv = AvARRAY(av)[AvMAX(av)];
6660                     Safefree(AvALLOC(av));
6661                     goto free_body;
6662                 }
6663             } else if (SvTYPE(iter_sv) == SVt_PVHV) {
6664                 sv = Perl_hfree_next_entry(aTHX_ (HV*)iter_sv, &hash_index);
6665                 if (!sv && !HvTOTALKEYS((HV *)iter_sv)) {
6666                     /* no more elements of current HV to free */
6667                     sv = iter_sv;
6668                     type = SvTYPE(sv);
6669                     /* Restore previous values of iter_sv and hash_index,
6670                      * squirrelled away */
6671                     assert(!SvOBJECT(sv));
6672                     iter_sv = (SV*)SvSTASH(sv);
6673                     assert(!SvMAGICAL(sv));
6674                     hash_index = ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index;
6675 #ifdef DEBUGGING
6676                     /* perl -DA does not like rubbish in SvMAGIC. */
6677                     SvMAGIC_set(sv, 0);
6678 #endif
6679
6680                     /* free any remaining detritus from the hash struct */
6681                     Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6682                     assert(!HvARRAY((HV*)sv));
6683                     goto free_body;
6684                 }
6685             }
6686
6687             /* unrolled SvREFCNT_dec and sv_free2 follows: */
6688
6689             if (!sv)
6690                 continue;
6691             if (!SvREFCNT(sv)) {
6692                 sv_free(sv);
6693                 continue;
6694             }
6695             if (--(SvREFCNT(sv)))
6696                 continue;
6697 #ifdef DEBUGGING
6698             if (SvTEMP(sv)) {
6699                 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6700                          "Attempt to free temp prematurely: SV 0x%"UVxf
6701                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6702                 continue;
6703             }
6704 #endif
6705             if (SvIMMORTAL(sv)) {
6706                 /* make sure SvREFCNT(sv)==0 happens very seldom */
6707                 SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6708                 continue;
6709             }
6710             break;
6711         } /* while 1 */
6712
6713     } /* while sv */
6714 }
6715
6716 /* This routine curses the sv itself, not the object referenced by sv. So
6717    sv does not have to be ROK. */
6718
6719 static bool
6720 S_curse(pTHX_ SV * const sv, const bool check_refcnt) {
6721     PERL_ARGS_ASSERT_CURSE;
6722     assert(SvOBJECT(sv));
6723
6724     if (PL_defstash &&  /* Still have a symbol table? */
6725         SvDESTROYABLE(sv))
6726     {
6727         dSP;
6728         HV* stash;
6729         do {
6730           stash = SvSTASH(sv);
6731           assert(SvTYPE(stash) == SVt_PVHV);
6732           if (HvNAME(stash)) {
6733             CV* destructor = NULL;
6734             assert (SvOOK(stash));
6735             if (!SvOBJECT(stash)) destructor = (CV *)SvSTASH(stash);
6736             if (!destructor || HvMROMETA(stash)->destroy_gen
6737                                 != PL_sub_generation)
6738             {
6739                 GV * const gv =
6740                     gv_fetchmeth_autoload(stash, "DESTROY", 7, 0);
6741                 if (gv) destructor = GvCV(gv);
6742                 if (!SvOBJECT(stash))
6743                 {
6744                     SvSTASH(stash) =
6745                         destructor ? (HV *)destructor : ((HV *)0)+1;
6746                     HvAUX(stash)->xhv_mro_meta->destroy_gen =
6747                         PL_sub_generation;
6748                 }
6749             }
6750             assert(!destructor || destructor == ((CV *)0)+1
6751                 || SvTYPE(destructor) == SVt_PVCV);
6752             if (destructor && destructor != ((CV *)0)+1
6753                 /* A constant subroutine can have no side effects, so
6754                    don't bother calling it.  */
6755                 && !CvCONST(destructor)
6756                 /* Don't bother calling an empty destructor or one that
6757                    returns immediately. */
6758                 && (CvISXSUB(destructor)
6759                 || (CvSTART(destructor)
6760                     && (CvSTART(destructor)->op_next->op_type
6761                                         != OP_LEAVESUB)
6762                     && (CvSTART(destructor)->op_next->op_type
6763                                         != OP_PUSHMARK
6764                         || CvSTART(destructor)->op_next->op_next->op_type
6765                                         != OP_RETURN
6766                        )
6767                    ))
6768                )
6769             {
6770                 SV* const tmpref = newRV(sv);
6771                 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
6772                 ENTER;
6773                 PUSHSTACKi(PERLSI_DESTROY);
6774                 EXTEND(SP, 2);
6775                 PUSHMARK(SP);
6776                 PUSHs(tmpref);
6777                 PUTBACK;
6778                 call_sv(MUTABLE_SV(destructor),
6779                             G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
6780                 POPSTACK;
6781                 SPAGAIN;
6782                 LEAVE;
6783                 if(SvREFCNT(tmpref) < 2) {
6784                     /* tmpref is not kept alive! */
6785                     SvREFCNT(sv)--;
6786                     SvRV_set(tmpref, NULL);
6787                     SvROK_off(tmpref);
6788                 }
6789                 SvREFCNT_dec_NN(tmpref);
6790             }
6791           }
6792         } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
6793
6794
6795         if (check_refcnt && SvREFCNT(sv)) {
6796             if (PL_in_clean_objs)
6797                 Perl_croak(aTHX_
6798                   "DESTROY created new reference to dead object '%"HEKf"'",
6799                    HEKfARG(HvNAME_HEK(stash)));
6800             /* DESTROY gave object new lease on life */
6801             return FALSE;
6802         }
6803     }
6804
6805     if (SvOBJECT(sv)) {
6806         HV * const stash = SvSTASH(sv);
6807         /* Curse before freeing the stash, as freeing the stash could cause
6808            a recursive call into S_curse. */
6809         SvOBJECT_off(sv);       /* Curse the object. */
6810         SvSTASH_set(sv,0);      /* SvREFCNT_dec may try to read this */
6811         SvREFCNT_dec(stash); /* possibly of changed persuasion */
6812     }
6813     return TRUE;
6814 }
6815
6816 /*
6817 =for apidoc sv_newref
6818
6819 Increment an SV's reference count.  Use the C<SvREFCNT_inc()> wrapper
6820 instead.
6821
6822 =cut
6823 */
6824
6825 SV *
6826 Perl_sv_newref(pTHX_ SV *const sv)
6827 {
6828     PERL_UNUSED_CONTEXT;
6829     if (sv)
6830         (SvREFCNT(sv))++;
6831     return sv;
6832 }
6833
6834 /*
6835 =for apidoc sv_free
6836
6837 Decrement an SV's reference count, and if it drops to zero, call
6838 C<sv_clear> to invoke destructors and free up any memory used by
6839 the body; finally, deallocate the SV's head itself.
6840 Normally called via a wrapper macro C<SvREFCNT_dec>.
6841
6842 =cut
6843 */
6844
6845 void
6846 Perl_sv_free(pTHX_ SV *const sv)
6847 {
6848     SvREFCNT_dec(sv);
6849 }
6850
6851
6852 /* Private helper function for SvREFCNT_dec().
6853  * Called with rc set to original SvREFCNT(sv), where rc == 0 or 1 */
6854
6855 void
6856 Perl_sv_free2(pTHX_ SV *const sv, const U32 rc)
6857 {
6858     dVAR;
6859
6860     PERL_ARGS_ASSERT_SV_FREE2;
6861
6862     if (LIKELY( rc == 1 )) {
6863         /* normal case */
6864         SvREFCNT(sv) = 0;
6865
6866 #ifdef DEBUGGING
6867         if (SvTEMP(sv)) {
6868             Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6869                              "Attempt to free temp prematurely: SV 0x%"UVxf
6870                              pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6871             return;
6872         }
6873 #endif
6874         if (SvIMMORTAL(sv)) {
6875             /* make sure SvREFCNT(sv)==0 happens very seldom */
6876             SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6877             return;
6878         }
6879         sv_clear(sv);
6880         if (! SvREFCNT(sv)) /* may have have been resurrected */
6881             del_SV(sv);
6882         return;
6883     }
6884
6885     /* handle exceptional cases */
6886
6887     assert(rc == 0);
6888
6889     if (SvFLAGS(sv) & SVf_BREAK)
6890         /* this SV's refcnt has been artificially decremented to
6891          * trigger cleanup */
6892         return;
6893     if (PL_in_clean_all) /* All is fair */
6894         return;
6895     if (SvIMMORTAL(sv)) {
6896         /* make sure SvREFCNT(sv)==0 happens very seldom */
6897         SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6898         return;
6899     }
6900     if (ckWARN_d(WARN_INTERNAL)) {
6901 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
6902         Perl_dump_sv_child(aTHX_ sv);
6903 #else
6904     #ifdef DEBUG_LEAKING_SCALARS
6905         sv_dump(sv);
6906     #endif
6907 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6908         if (PL_warnhook == PERL_WARNHOOK_FATAL
6909             || ckDEAD(packWARN(WARN_INTERNAL))) {
6910             /* Don't let Perl_warner cause us to escape our fate:  */
6911             abort();
6912         }
6913 #endif
6914         /* This may not return:  */
6915         Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
6916                     "Attempt to free unreferenced scalar: SV 0x%"UVxf
6917                     pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6918 #endif
6919     }
6920 #ifdef DEBUG_LEAKING_SCALARS_ABORT
6921     abort();
6922 #endif
6923
6924 }
6925
6926
6927 /*
6928 =for apidoc sv_len
6929
6930 Returns the length of the string in the SV.  Handles magic and type
6931 coercion and sets the UTF8 flag appropriately.  See also C<SvCUR>, which
6932 gives raw access to the xpv_cur slot.
6933
6934 =cut
6935 */
6936
6937 STRLEN
6938 Perl_sv_len(pTHX_ SV *const sv)
6939 {
6940     STRLEN len;
6941
6942     if (!sv)
6943         return 0;
6944
6945     (void)SvPV_const(sv, len);
6946     return len;
6947 }
6948
6949 /*
6950 =for apidoc sv_len_utf8
6951
6952 Returns the number of characters in the string in an SV, counting wide
6953 UTF-8 bytes as a single character.  Handles magic and type coercion.
6954
6955 =cut
6956 */
6957
6958 /*
6959  * The length is cached in PERL_MAGIC_utf8, in the mg_len field.  Also the
6960  * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
6961  * (Note that the mg_len is not the length of the mg_ptr field.
6962  * This allows the cache to store the character length of the string without
6963  * needing to malloc() extra storage to attach to the mg_ptr.)
6964  *
6965  */
6966
6967 STRLEN
6968 Perl_sv_len_utf8(pTHX_ SV *const sv)
6969 {
6970     if (!sv)
6971         return 0;
6972
6973     SvGETMAGIC(sv);
6974     return sv_len_utf8_nomg(sv);
6975 }
6976
6977 STRLEN
6978 Perl_sv_len_utf8_nomg(pTHX_ SV * const sv)
6979 {
6980     STRLEN len;
6981     const U8 *s = (U8*)SvPV_nomg_const(sv, len);
6982
6983     PERL_ARGS_ASSERT_SV_LEN_UTF8_NOMG;
6984
6985     if (PL_utf8cache && SvUTF8(sv)) {
6986             STRLEN ulen;
6987             MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
6988
6989             if (mg && (mg->mg_len != -1 || mg->mg_ptr)) {
6990                 if (mg->mg_len != -1)
6991                     ulen = mg->mg_len;
6992                 else {
6993                     /* We can use the offset cache for a headstart.
6994                        The longer value is stored in the first pair.  */
6995                     STRLEN *cache = (STRLEN *) mg->mg_ptr;
6996
6997                     ulen = cache[0] + Perl_utf8_length(aTHX_ s + cache[1],
6998                                                        s + len);
6999                 }
7000                 
7001                 if (PL_utf8cache < 0) {
7002                     const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
7003                     assert_uft8_cache_coherent("sv_len_utf8", ulen, real, sv);
7004                 }
7005             }
7006             else {
7007                 ulen = Perl_utf8_length(aTHX_ s, s + len);
7008                 utf8_mg_len_cache_update(sv, &mg, ulen);
7009             }
7010             return ulen;
7011     }
7012     return SvUTF8(sv) ? Perl_utf8_length(aTHX_ s, s + len) : len;
7013 }
7014
7015 /* Walk forwards to find the byte corresponding to the passed in UTF-8
7016    offset.  */
7017 static STRLEN
7018 S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
7019                       STRLEN *const uoffset_p, bool *const at_end)
7020 {
7021     const U8 *s = start;
7022     STRLEN uoffset = *uoffset_p;
7023
7024     PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
7025
7026     while (s < send && uoffset) {
7027         --uoffset;
7028         s += UTF8SKIP(s);
7029     }
7030     if (s == send) {
7031         *at_end = TRUE;
7032     }
7033     else if (s > send) {
7034         *at_end = TRUE;
7035         /* This is the existing behaviour. Possibly it should be a croak, as
7036            it's actually a bounds error  */
7037         s = send;
7038     }
7039     *uoffset_p -= uoffset;
7040     return s - start;
7041 }
7042
7043 /* Given the length of the string in both bytes and UTF-8 characters, decide
7044    whether to walk forwards or backwards to find the byte corresponding to
7045    the passed in UTF-8 offset.  */
7046 static STRLEN
7047 S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
7048                     STRLEN uoffset, const STRLEN uend)
7049 {
7050     STRLEN backw = uend - uoffset;
7051
7052     PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
7053
7054     if (uoffset < 2 * backw) {
7055         /* The assumption is that going forwards is twice the speed of going
7056            forward (that's where the 2 * backw comes from).
7057            (The real figure of course depends on the UTF-8 data.)  */
7058         const U8 *s = start;
7059
7060         while (s < send && uoffset--)
7061             s += UTF8SKIP(s);
7062         assert (s <= send);
7063         if (s > send)
7064             s = send;
7065         return s - start;
7066     }
7067
7068     while (backw--) {
7069         send--;
7070         while (UTF8_IS_CONTINUATION(*send))
7071             send--;
7072     }
7073     return send - start;
7074 }
7075
7076 /* For the string representation of the given scalar, find the byte
7077    corresponding to the passed in UTF-8 offset.  uoffset0 and boffset0
7078    give another position in the string, *before* the sought offset, which
7079    (which is always true, as 0, 0 is a valid pair of positions), which should
7080    help reduce the amount of linear searching.
7081    If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
7082    will be used to reduce the amount of linear searching. The cache will be
7083    created if necessary, and the found value offered to it for update.  */
7084 static STRLEN
7085 S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
7086                     const U8 *const send, STRLEN uoffset,
7087                     STRLEN uoffset0, STRLEN boffset0)
7088 {
7089     STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy.  */
7090     bool found = FALSE;
7091     bool at_end = FALSE;
7092
7093     PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
7094
7095     assert (uoffset >= uoffset0);
7096
7097     if (!uoffset)
7098         return 0;
7099
7100     if (!SvREADONLY(sv) && !SvGMAGICAL(sv) && SvPOK(sv)
7101         && PL_utf8cache
7102         && (*mgp || (SvTYPE(sv) >= SVt_PVMG &&
7103                      (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) {
7104         if ((*mgp)->mg_ptr) {
7105             STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
7106             if (cache[0] == uoffset) {
7107                 /* An exact match. */
7108                 return cache[1];
7109             }
7110             if (cache[2] == uoffset) {
7111                 /* An exact match. */
7112                 return cache[3];
7113             }
7114
7115             if (cache[0] < uoffset) {
7116                 /* The cache already knows part of the way.   */
7117                 if (cache[0] > uoffset0) {
7118                     /* The cache knows more than the passed in pair  */
7119                     uoffset0 = cache[0];
7120                     boffset0 = cache[1];
7121                 }
7122                 if ((*mgp)->mg_len != -1) {
7123                     /* And we know the end too.  */
7124                     boffset = boffset0
7125                         + sv_pos_u2b_midway(start + boffset0, send,
7126                                               uoffset - uoffset0,
7127                                               (*mgp)->mg_len - uoffset0);
7128                 } else {
7129                     uoffset -= uoffset0;
7130                     boffset = boffset0
7131                         + sv_pos_u2b_forwards(start + boffset0,
7132                                               send, &uoffset, &at_end);
7133                     uoffset += uoffset0;
7134                 }
7135             }
7136             else if (cache[2] < uoffset) {
7137                 /* We're between the two cache entries.  */
7138                 if (cache[2] > uoffset0) {
7139                     /* and the cache knows more than the passed in pair  */
7140                     uoffset0 = cache[2];
7141                     boffset0 = cache[3];
7142                 }
7143
7144                 boffset = boffset0
7145                     + sv_pos_u2b_midway(start + boffset0,
7146                                           start + cache[1],
7147                                           uoffset - uoffset0,
7148                                           cache[0] - uoffset0);
7149             } else {
7150                 boffset = boffset0
7151                     + sv_pos_u2b_midway(start + boffset0,
7152                                           start + cache[3],
7153                                           uoffset - uoffset0,
7154                                           cache[2] - uoffset0);
7155             }
7156             found = TRUE;
7157         }
7158         else if ((*mgp)->mg_len != -1) {
7159             /* If we can take advantage of a passed in offset, do so.  */
7160             /* In fact, offset0 is either 0, or less than offset, so don't
7161                need to worry about the other possibility.  */
7162             boffset = boffset0
7163                 + sv_pos_u2b_midway(start + boffset0, send,
7164                                       uoffset - uoffset0,
7165                                       (*mgp)->mg_len - uoffset0);
7166             found = TRUE;
7167         }
7168     }
7169
7170     if (!found || PL_utf8cache < 0) {
7171         STRLEN real_boffset;
7172         uoffset -= uoffset0;
7173         real_boffset = boffset0 + sv_pos_u2b_forwards(start + boffset0,
7174                                                       send, &uoffset, &at_end);
7175         uoffset += uoffset0;
7176
7177         if (found && PL_utf8cache < 0)
7178             assert_uft8_cache_coherent("sv_pos_u2b_cache", boffset,
7179                                        real_boffset, sv);
7180         boffset = real_boffset;
7181     }
7182
7183     if (PL_utf8cache && !SvGMAGICAL(sv) && SvPOK(sv)) {
7184         if (at_end)
7185             utf8_mg_len_cache_update(sv, mgp, uoffset);
7186         else
7187             utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
7188     }
7189     return boffset;
7190 }
7191
7192
7193 /*
7194 =for apidoc sv_pos_u2b_flags
7195
7196 Converts the offset from a count of UTF-8 chars from
7197 the start of the string, to a count of the equivalent number of bytes; if
7198 lenp is non-zero, it does the same to lenp, but this time starting from
7199 the offset, rather than from the start
7200 of the string.  Handles type coercion.
7201 C<flags> is passed to C<SvPV_flags>, and usually should be
7202 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7203
7204 =cut
7205 */
7206
7207 /*
7208  * sv_pos_u2b_flags() uses, like sv_pos_b2u(), the mg_ptr of the potential
7209  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7210  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7211  *
7212  */
7213
7214 STRLEN
7215 Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp,
7216                       U32 flags)
7217 {
7218     const U8 *start;
7219     STRLEN len;
7220     STRLEN boffset;
7221
7222     PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS;
7223
7224     start = (U8*)SvPV_flags(sv, len, flags);
7225     if (len) {
7226         const U8 * const send = start + len;
7227         MAGIC *mg = NULL;
7228         boffset = sv_pos_u2b_cached(sv, &mg, start, send, uoffset, 0, 0);
7229
7230         if (lenp
7231             && *lenp /* don't bother doing work for 0, as its bytes equivalent
7232                         is 0, and *lenp is already set to that.  */) {
7233             /* Convert the relative offset to absolute.  */
7234             const STRLEN uoffset2 = uoffset + *lenp;
7235             const STRLEN boffset2
7236                 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
7237                                       uoffset, boffset) - boffset;
7238
7239             *lenp = boffset2;
7240         }
7241     } else {
7242         if (lenp)
7243             *lenp = 0;
7244         boffset = 0;
7245     }
7246
7247     return boffset;
7248 }
7249
7250 /*
7251 =for apidoc sv_pos_u2b
7252
7253 Converts the value pointed to by offsetp from a count of UTF-8 chars from
7254 the start of the string, to a count of the equivalent number of bytes; if
7255 lenp is non-zero, it does the same to lenp, but this time starting from
7256 the offset, rather than from the start of the string.  Handles magic and
7257 type coercion.
7258
7259 Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
7260 than 2Gb.
7261
7262 =cut
7263 */
7264
7265 /*
7266  * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
7267  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7268  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7269  *
7270  */
7271
7272 /* This function is subject to size and sign problems */
7273
7274 void
7275 Perl_sv_pos_u2b(pTHX_ SV *const sv, I32 *const offsetp, I32 *const lenp)
7276 {
7277     PERL_ARGS_ASSERT_SV_POS_U2B;
7278
7279     if (lenp) {
7280         STRLEN ulen = (STRLEN)*lenp;
7281         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, &ulen,
7282                                          SV_GMAGIC|SV_CONST_RETURN);
7283         *lenp = (I32)ulen;
7284     } else {
7285         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, NULL,
7286                                          SV_GMAGIC|SV_CONST_RETURN);
7287     }
7288 }
7289
7290 static void
7291 S_utf8_mg_len_cache_update(pTHX_ SV *const sv, MAGIC **const mgp,
7292                            const STRLEN ulen)
7293 {
7294     PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE;
7295     if (SvREADONLY(sv) || SvGMAGICAL(sv) || !SvPOK(sv))
7296         return;
7297
7298     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7299                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7300         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, &PL_vtbl_utf8, 0, 0);
7301     }
7302     assert(*mgp);
7303
7304     (*mgp)->mg_len = ulen;
7305 }
7306
7307 /* Create and update the UTF8 magic offset cache, with the proffered utf8/
7308    byte length pairing. The (byte) length of the total SV is passed in too,
7309    as blen, because for some (more esoteric) SVs, the call to SvPV_const()
7310    may not have updated SvCUR, so we can't rely on reading it directly.
7311
7312    The proffered utf8/byte length pairing isn't used if the cache already has
7313    two pairs, and swapping either for the proffered pair would increase the
7314    RMS of the intervals between known byte offsets.
7315
7316    The cache itself consists of 4 STRLEN values
7317    0: larger UTF-8 offset
7318    1: corresponding byte offset
7319    2: smaller UTF-8 offset
7320    3: corresponding byte offset
7321
7322    Unused cache pairs have the value 0, 0.
7323    Keeping the cache "backwards" means that the invariant of
7324    cache[0] >= cache[2] is maintained even with empty slots, which means that
7325    the code that uses it doesn't need to worry if only 1 entry has actually
7326    been set to non-zero.  It also makes the "position beyond the end of the
7327    cache" logic much simpler, as the first slot is always the one to start
7328    from.   
7329 */
7330 static void
7331 S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
7332                            const STRLEN utf8, const STRLEN blen)
7333 {
7334     STRLEN *cache;
7335
7336     PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
7337
7338     if (SvREADONLY(sv))
7339         return;
7340
7341     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7342                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7343         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
7344                            0);
7345         (*mgp)->mg_len = -1;
7346     }
7347     assert(*mgp);
7348
7349     if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
7350         Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
7351         (*mgp)->mg_ptr = (char *) cache;
7352     }
7353     assert(cache);
7354
7355     if (PL_utf8cache < 0 && SvPOKp(sv)) {
7356         /* SvPOKp() because, if sv is a reference, then SvPVX() is actually
7357            a pointer.  Note that we no longer cache utf8 offsets on refer-
7358            ences, but this check is still a good idea, for robustness.  */
7359         const U8 *start = (const U8 *) SvPVX_const(sv);
7360         const STRLEN realutf8 = utf8_length(start, start + byte);
7361
7362         assert_uft8_cache_coherent("utf8_mg_pos_cache_update", utf8, realutf8,
7363                                    sv);
7364     }
7365
7366     /* Cache is held with the later position first, to simplify the code
7367        that deals with unbounded ends.  */
7368        
7369     ASSERT_UTF8_CACHE(cache);
7370     if (cache[1] == 0) {
7371         /* Cache is totally empty  */
7372         cache[0] = utf8;
7373         cache[1] = byte;
7374     } else if (cache[3] == 0) {
7375         if (byte > cache[1]) {
7376             /* New one is larger, so goes first.  */
7377             cache[2] = cache[0];
7378             cache[3] = cache[1];
7379             cache[0] = utf8;
7380             cache[1] = byte;
7381         } else {
7382             cache[2] = utf8;
7383             cache[3] = byte;
7384         }
7385     } else {
7386 /* float casts necessary? XXX */
7387 #define THREEWAY_SQUARE(a,b,c,d) \
7388             ((float)((d) - (c))) * ((float)((d) - (c))) \
7389             + ((float)((c) - (b))) * ((float)((c) - (b))) \
7390                + ((float)((b) - (a))) * ((float)((b) - (a)))
7391
7392         /* Cache has 2 slots in use, and we know three potential pairs.
7393            Keep the two that give the lowest RMS distance. Do the
7394            calculation in bytes simply because we always know the byte
7395            length.  squareroot has the same ordering as the positive value,
7396            so don't bother with the actual square root.  */
7397         if (byte > cache[1]) {
7398             /* New position is after the existing pair of pairs.  */
7399             const float keep_earlier
7400                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
7401             const float keep_later
7402                 = THREEWAY_SQUARE(0, cache[1], byte, blen);
7403
7404             if (keep_later < keep_earlier) {
7405                 cache[2] = cache[0];
7406                 cache[3] = cache[1];
7407             }
7408             cache[0] = utf8;
7409             cache[1] = byte;
7410         }
7411         else {
7412             const float keep_later = THREEWAY_SQUARE(0, byte, cache[1], blen);
7413             float b, c, keep_earlier;
7414             if (byte > cache[3]) {
7415                 /* New position is between the existing pair of pairs.  */
7416                 b = (float)cache[3];
7417                 c = (float)byte;
7418             } else {
7419                 /* New position is before the existing pair of pairs.  */
7420                 b = (float)byte;
7421                 c = (float)cache[3];
7422             }
7423             keep_earlier = THREEWAY_SQUARE(0, b, c, blen);
7424             if (byte > cache[3]) {
7425                 if (keep_later < keep_earlier) {
7426                     cache[2] = utf8;
7427                     cache[3] = byte;
7428                 }
7429                 else {
7430                     cache[0] = utf8;
7431                     cache[1] = byte;
7432                 }
7433             }
7434             else {
7435                 if (! (keep_later < keep_earlier)) {
7436                     cache[0] = cache[2];
7437                     cache[1] = cache[3];
7438                 }
7439                 cache[2] = utf8;
7440                 cache[3] = byte;
7441             }
7442         }
7443     }
7444     ASSERT_UTF8_CACHE(cache);
7445 }
7446
7447 /* We already know all of the way, now we may be able to walk back.  The same
7448    assumption is made as in S_sv_pos_u2b_midway(), namely that walking
7449    backward is half the speed of walking forward. */
7450 static STRLEN
7451 S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
7452                     const U8 *end, STRLEN endu)
7453 {
7454     const STRLEN forw = target - s;
7455     STRLEN backw = end - target;
7456
7457     PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
7458
7459     if (forw < 2 * backw) {
7460         return utf8_length(s, target);
7461     }
7462
7463     while (end > target) {
7464         end--;
7465         while (UTF8_IS_CONTINUATION(*end)) {
7466             end--;
7467         }
7468         endu--;
7469     }
7470     return endu;
7471 }
7472
7473 /*
7474 =for apidoc sv_pos_b2u_flags
7475
7476 Converts the offset from a count of bytes from the start of the string, to
7477 a count of the equivalent number of UTF-8 chars.  Handles type coercion.
7478 C<flags> is passed to C<SvPV_flags>, and usually should be
7479 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7480
7481 =cut
7482 */
7483
7484 /*
7485  * sv_pos_b2u_flags() uses, like sv_pos_u2b_flags(), the mg_ptr of the
7486  * potential PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8
7487  * and byte offsets.
7488  *
7489  */
7490 STRLEN
7491 Perl_sv_pos_b2u_flags(pTHX_ SV *const sv, STRLEN const offset, U32 flags)
7492 {
7493     const U8* s;
7494     STRLEN len = 0; /* Actually always set, but let's keep gcc happy.  */
7495     STRLEN blen;
7496     MAGIC* mg = NULL;
7497     const U8* send;
7498     bool found = FALSE;
7499
7500     PERL_ARGS_ASSERT_SV_POS_B2U_FLAGS;
7501
7502     s = (const U8*)SvPV_flags(sv, blen, flags);
7503
7504     if (blen < offset)
7505         Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset, blen=%"UVuf
7506                    ", byte=%"UVuf, (UV)blen, (UV)offset);
7507
7508     send = s + offset;
7509
7510     if (!SvREADONLY(sv)
7511         && PL_utf8cache
7512         && SvTYPE(sv) >= SVt_PVMG
7513         && (mg = mg_find(sv, PERL_MAGIC_utf8)))
7514     {
7515         if (mg->mg_ptr) {
7516             STRLEN * const cache = (STRLEN *) mg->mg_ptr;
7517             if (cache[1] == offset) {
7518                 /* An exact match. */
7519                 return cache[0];
7520             }
7521             if (cache[3] == offset) {
7522                 /* An exact match. */
7523                 return cache[2];
7524             }
7525
7526             if (cache[1] < offset) {
7527                 /* We already know part of the way. */
7528                 if (mg->mg_len != -1) {
7529                     /* Actually, we know the end too.  */
7530                     len = cache[0]
7531                         + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
7532                                               s + blen, mg->mg_len - cache[0]);
7533                 } else {
7534                     len = cache[0] + utf8_length(s + cache[1], send);
7535                 }
7536             }
7537             else if (cache[3] < offset) {
7538                 /* We're between the two cached pairs, so we do the calculation
7539                    offset by the byte/utf-8 positions for the earlier pair,
7540                    then add the utf-8 characters from the string start to
7541                    there.  */
7542                 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
7543                                           s + cache[1], cache[0] - cache[2])
7544                     + cache[2];
7545
7546             }
7547             else { /* cache[3] > offset */
7548                 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
7549                                           cache[2]);
7550
7551             }
7552             ASSERT_UTF8_CACHE(cache);
7553             found = TRUE;
7554         } else if (mg->mg_len != -1) {
7555             len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
7556             found = TRUE;
7557         }
7558     }
7559     if (!found || PL_utf8cache < 0) {
7560         const STRLEN real_len = utf8_length(s, send);
7561
7562         if (found && PL_utf8cache < 0)
7563             assert_uft8_cache_coherent("sv_pos_b2u", len, real_len, sv);
7564         len = real_len;
7565     }
7566
7567     if (PL_utf8cache) {
7568         if (blen == offset)
7569             utf8_mg_len_cache_update(sv, &mg, len);
7570         else
7571             utf8_mg_pos_cache_update(sv, &mg, offset, len, blen);
7572     }
7573
7574     return len;
7575 }
7576
7577 /*
7578 =for apidoc sv_pos_b2u
7579
7580 Converts the value pointed to by offsetp from a count of bytes from the
7581 start of the string, to a count of the equivalent number of UTF-8 chars.
7582 Handles magic and type coercion.
7583
7584 Use C<sv_pos_b2u_flags> in preference, which correctly handles strings
7585 longer than 2Gb.
7586
7587 =cut
7588 */
7589
7590 /*
7591  * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
7592  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7593  * byte offsets.
7594  *
7595  */
7596 void
7597 Perl_sv_pos_b2u(pTHX_ SV *const sv, I32 *const offsetp)
7598 {
7599     PERL_ARGS_ASSERT_SV_POS_B2U;
7600
7601     if (!sv)
7602         return;
7603
7604     *offsetp = (I32)sv_pos_b2u_flags(sv, (STRLEN)*offsetp,
7605                                      SV_GMAGIC|SV_CONST_RETURN);
7606 }
7607
7608 static void
7609 S_assert_uft8_cache_coherent(pTHX_ const char *const func, STRLEN from_cache,
7610                              STRLEN real, SV *const sv)
7611 {
7612     PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT;
7613
7614     /* As this is debugging only code, save space by keeping this test here,
7615        rather than inlining it in all the callers.  */
7616     if (from_cache == real)
7617         return;
7618
7619     /* Need to turn the assertions off otherwise we may recurse infinitely
7620        while printing error messages.  */
7621     SAVEI8(PL_utf8cache);
7622     PL_utf8cache = 0;
7623     Perl_croak(aTHX_ "panic: %s cache %"UVuf" real %"UVuf" for %"SVf,
7624                func, (UV) from_cache, (UV) real, SVfARG(sv));
7625 }
7626
7627 /*
7628 =for apidoc sv_eq
7629
7630 Returns a boolean indicating whether the strings in the two SVs are
7631 identical.  Is UTF-8 and 'use bytes' aware, handles get magic, and will
7632 coerce its args to strings if necessary.
7633
7634 =for apidoc sv_eq_flags
7635
7636 Returns a boolean indicating whether the strings in the two SVs are
7637 identical.  Is UTF-8 and 'use bytes' aware and coerces its args to strings
7638 if necessary.  If the flags include SV_GMAGIC, it handles get-magic, too.
7639
7640 =cut
7641 */
7642
7643 I32
7644 Perl_sv_eq_flags(pTHX_ SV *sv1, SV *sv2, const U32 flags)
7645 {
7646     const char *pv1;
7647     STRLEN cur1;
7648     const char *pv2;
7649     STRLEN cur2;
7650     I32  eq     = 0;
7651     SV* svrecode = NULL;
7652
7653     if (!sv1) {
7654         pv1 = "";
7655         cur1 = 0;
7656     }
7657     else {
7658         /* if pv1 and pv2 are the same, second SvPV_const call may
7659          * invalidate pv1 (if we are handling magic), so we may need to
7660          * make a copy */
7661         if (sv1 == sv2 && flags & SV_GMAGIC
7662          && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
7663             pv1 = SvPV_const(sv1, cur1);
7664             sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
7665         }
7666         pv1 = SvPV_flags_const(sv1, cur1, flags);
7667     }
7668
7669     if (!sv2){
7670         pv2 = "";
7671         cur2 = 0;
7672     }
7673     else
7674         pv2 = SvPV_flags_const(sv2, cur2, flags);
7675
7676     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7677         /* Differing utf8ness.
7678          * Do not UTF8size the comparands as a side-effect. */
7679          if (IN_ENCODING) {
7680               if (SvUTF8(sv1)) {
7681                    svrecode = newSVpvn(pv2, cur2);
7682                    sv_recode_to_utf8(svrecode, _get_encoding());
7683                    pv2 = SvPV_const(svrecode, cur2);
7684               }
7685               else {
7686                    svrecode = newSVpvn(pv1, cur1);
7687                    sv_recode_to_utf8(svrecode, _get_encoding());
7688                    pv1 = SvPV_const(svrecode, cur1);
7689               }
7690               /* Now both are in UTF-8. */
7691               if (cur1 != cur2) {
7692                    SvREFCNT_dec_NN(svrecode);
7693                    return FALSE;
7694               }
7695          }
7696          else {
7697               if (SvUTF8(sv1)) {
7698                   /* sv1 is the UTF-8 one  */
7699                   return bytes_cmp_utf8((const U8*)pv2, cur2,
7700                                         (const U8*)pv1, cur1) == 0;
7701               }
7702               else {
7703                   /* sv2 is the UTF-8 one  */
7704                   return bytes_cmp_utf8((const U8*)pv1, cur1,
7705                                         (const U8*)pv2, cur2) == 0;
7706               }
7707          }
7708     }
7709
7710     if (cur1 == cur2)
7711         eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
7712         
7713     SvREFCNT_dec(svrecode);
7714
7715     return eq;
7716 }
7717
7718 /*
7719 =for apidoc sv_cmp
7720
7721 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7722 string in C<sv1> is less than, equal to, or greater than the string in
7723 C<sv2>.  Is UTF-8 and 'use bytes' aware, handles get magic, and will
7724 coerce its args to strings if necessary.  See also C<sv_cmp_locale>.
7725
7726 =for apidoc sv_cmp_flags
7727
7728 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7729 string in C<sv1> is less than, equal to, or greater than the string in
7730 C<sv2>.  Is UTF-8 and 'use bytes' aware and will coerce its args to strings
7731 if necessary.  If the flags include SV_GMAGIC, it handles get magic.  See
7732 also C<sv_cmp_locale_flags>.
7733
7734 =cut
7735 */
7736
7737 I32
7738 Perl_sv_cmp(pTHX_ SV *const sv1, SV *const sv2)
7739 {
7740     return sv_cmp_flags(sv1, sv2, SV_GMAGIC);
7741 }
7742
7743 I32
7744 Perl_sv_cmp_flags(pTHX_ SV *const sv1, SV *const sv2,
7745                   const U32 flags)
7746 {
7747     STRLEN cur1, cur2;
7748     const char *pv1, *pv2;
7749     I32  cmp;
7750     SV *svrecode = NULL;
7751
7752     if (!sv1) {
7753         pv1 = "";
7754         cur1 = 0;
7755     }
7756     else
7757         pv1 = SvPV_flags_const(sv1, cur1, flags);
7758
7759     if (!sv2) {
7760         pv2 = "";
7761         cur2 = 0;
7762     }
7763     else
7764         pv2 = SvPV_flags_const(sv2, cur2, flags);
7765
7766     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7767         /* Differing utf8ness.
7768          * Do not UTF8size the comparands as a side-effect. */
7769         if (SvUTF8(sv1)) {
7770             if (IN_ENCODING) {
7771                  svrecode = newSVpvn(pv2, cur2);
7772                  sv_recode_to_utf8(svrecode, _get_encoding());
7773                  pv2 = SvPV_const(svrecode, cur2);
7774             }
7775             else {
7776                 const int retval = -bytes_cmp_utf8((const U8*)pv2, cur2,
7777                                                    (const U8*)pv1, cur1);
7778                 return retval ? retval < 0 ? -1 : +1 : 0;
7779             }
7780         }
7781         else {
7782             if (IN_ENCODING) {
7783                  svrecode = newSVpvn(pv1, cur1);
7784                  sv_recode_to_utf8(svrecode, _get_encoding());
7785                  pv1 = SvPV_const(svrecode, cur1);
7786             }
7787             else {
7788                 const int retval = bytes_cmp_utf8((const U8*)pv1, cur1,
7789                                                   (const U8*)pv2, cur2);
7790                 return retval ? retval < 0 ? -1 : +1 : 0;
7791             }
7792         }
7793     }
7794
7795     if (!cur1) {
7796         cmp = cur2 ? -1 : 0;
7797     } else if (!cur2) {
7798         cmp = 1;
7799     } else {
7800         const I32 retval = memcmp((const void*)pv1, (const void*)pv2, cur1 < cur2 ? cur1 : cur2);
7801
7802         if (retval) {
7803             cmp = retval < 0 ? -1 : 1;
7804         } else if (cur1 == cur2) {
7805             cmp = 0;
7806         } else {
7807             cmp = cur1 < cur2 ? -1 : 1;
7808         }
7809     }
7810
7811     SvREFCNT_dec(svrecode);
7812
7813     return cmp;
7814 }
7815
7816 /*
7817 =for apidoc sv_cmp_locale
7818
7819 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
7820 'use bytes' aware, handles get magic, and will coerce its args to strings
7821 if necessary.  See also C<sv_cmp>.
7822
7823 =for apidoc sv_cmp_locale_flags
7824
7825 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
7826 'use bytes' aware and will coerce its args to strings if necessary.  If the
7827 flags contain SV_GMAGIC, it handles get magic.  See also C<sv_cmp_flags>.
7828
7829 =cut
7830 */
7831
7832 I32
7833 Perl_sv_cmp_locale(pTHX_ SV *const sv1, SV *const sv2)
7834 {
7835     return sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC);
7836 }
7837
7838 I32
7839 Perl_sv_cmp_locale_flags(pTHX_ SV *const sv1, SV *const sv2,
7840                          const U32 flags)
7841 {
7842 #ifdef USE_LOCALE_COLLATE
7843
7844     char *pv1, *pv2;
7845     STRLEN len1, len2;
7846     I32 retval;
7847
7848     if (PL_collation_standard)
7849         goto raw_compare;
7850
7851     len1 = 0;
7852     pv1 = sv1 ? sv_collxfrm_flags(sv1, &len1, flags) : (char *) NULL;
7853     len2 = 0;
7854     pv2 = sv2 ? sv_collxfrm_flags(sv2, &len2, flags) : (char *) NULL;
7855
7856     if (!pv1 || !len1) {
7857         if (pv2 && len2)
7858             return -1;
7859         else
7860             goto raw_compare;
7861     }
7862     else {
7863         if (!pv2 || !len2)
7864             return 1;
7865     }
7866
7867     retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
7868
7869     if (retval)
7870         return retval < 0 ? -1 : 1;
7871
7872     /*
7873      * When the result of collation is equality, that doesn't mean
7874      * that there are no differences -- some locales exclude some
7875      * characters from consideration.  So to avoid false equalities,
7876      * we use the raw string as a tiebreaker.
7877      */
7878
7879   raw_compare:
7880     /* FALLTHROUGH */
7881
7882 #else
7883     PERL_UNUSED_ARG(flags);
7884 #endif /* USE_LOCALE_COLLATE */
7885
7886     return sv_cmp(sv1, sv2);
7887 }
7888
7889
7890 #ifdef USE_LOCALE_COLLATE
7891
7892 /*
7893 =for apidoc sv_collxfrm
7894
7895 This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag.  See
7896 C<sv_collxfrm_flags>.
7897
7898 =for apidoc sv_collxfrm_flags
7899
7900 Add Collate Transform magic to an SV if it doesn't already have it.  If the
7901 flags contain SV_GMAGIC, it handles get-magic.
7902
7903 Any scalar variable may carry PERL_MAGIC_collxfrm magic that contains the
7904 scalar data of the variable, but transformed to such a format that a normal
7905 memory comparison can be used to compare the data according to the locale
7906 settings.
7907
7908 =cut
7909 */
7910
7911 char *
7912 Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp, const I32 flags)
7913 {
7914     MAGIC *mg;
7915
7916     PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS;
7917
7918     mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
7919     if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
7920         const char *s;
7921         char *xf;
7922         STRLEN len, xlen;
7923
7924         if (mg)
7925             Safefree(mg->mg_ptr);
7926         s = SvPV_flags_const(sv, len, flags);
7927         if ((xf = mem_collxfrm(s, len, &xlen))) {
7928             if (! mg) {
7929                 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
7930                                  0, 0);
7931                 assert(mg);
7932             }
7933             mg->mg_ptr = xf;
7934             mg->mg_len = xlen;
7935         }
7936         else {
7937             if (mg) {
7938                 mg->mg_ptr = NULL;
7939                 mg->mg_len = -1;
7940             }
7941         }
7942     }
7943     if (mg && mg->mg_ptr) {
7944         *nxp = mg->mg_len;
7945         return mg->mg_ptr + sizeof(PL_collation_ix);
7946     }
7947     else {
7948         *nxp = 0;
7949         return NULL;
7950     }
7951 }
7952
7953 #endif /* USE_LOCALE_COLLATE */
7954
7955 static char *
7956 S_sv_gets_append_to_utf8(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7957 {
7958     SV * const tsv = newSV(0);
7959     ENTER;
7960     SAVEFREESV(tsv);
7961     sv_gets(tsv, fp, 0);
7962     sv_utf8_upgrade_nomg(tsv);
7963     SvCUR_set(sv,append);
7964     sv_catsv(sv,tsv);
7965     LEAVE;
7966     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
7967 }
7968
7969 static char *
7970 S_sv_gets_read_record(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
7971 {
7972     SSize_t bytesread;
7973     const STRLEN recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
7974       /* Grab the size of the record we're getting */
7975     char *buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
7976     
7977     /* Go yank in */
7978 #ifdef __VMS
7979     int fd;
7980     Stat_t st;
7981
7982     /* With a true, record-oriented file on VMS, we need to use read directly
7983      * to ensure that we respect RMS record boundaries.  The user is responsible
7984      * for providing a PL_rs value that corresponds to the FAB$W_MRS (maximum
7985      * record size) field.  N.B. This is likely to produce invalid results on
7986      * varying-width character data when a record ends mid-character.
7987      */
7988     fd = PerlIO_fileno(fp);
7989     if (fd != -1
7990         && PerlLIO_fstat(fd, &st) == 0
7991         && (st.st_fab_rfm == FAB$C_VAR
7992             || st.st_fab_rfm == FAB$C_VFC
7993             || st.st_fab_rfm == FAB$C_FIX)) {
7994
7995         bytesread = PerlLIO_read(fd, buffer, recsize);
7996     }
7997     else /* in-memory file from PerlIO::Scalar
7998           * or not a record-oriented file
7999           */
8000 #endif
8001     {
8002         bytesread = PerlIO_read(fp, buffer, recsize);
8003
8004         /* At this point, the logic in sv_get() means that sv will
8005            be treated as utf-8 if the handle is utf8.
8006         */
8007         if (PerlIO_isutf8(fp) && bytesread > 0) {
8008             char *bend = buffer + bytesread;
8009             char *bufp = buffer;
8010             size_t charcount = 0;
8011             bool charstart = TRUE;
8012             STRLEN skip = 0;
8013
8014             while (charcount < recsize) {
8015                 /* count accumulated characters */
8016                 while (bufp < bend) {
8017                     if (charstart) {
8018                         skip = UTF8SKIP(bufp);
8019                     }
8020                     if (bufp + skip > bend) {
8021                         /* partial at the end */
8022                         charstart = FALSE;
8023                         break;
8024                     }
8025                     else {
8026                         ++charcount;
8027                         bufp += skip;
8028                         charstart = TRUE;
8029                     }
8030                 }
8031
8032                 if (charcount < recsize) {
8033                     STRLEN readsize;
8034                     STRLEN bufp_offset = bufp - buffer;
8035                     SSize_t morebytesread;
8036
8037                     /* originally I read enough to fill any incomplete
8038                        character and the first byte of the next
8039                        character if needed, but if there's many
8040                        multi-byte encoded characters we're going to be
8041                        making a read call for every character beyond
8042                        the original read size.
8043
8044                        So instead, read the rest of the character if
8045                        any, and enough bytes to match at least the
8046                        start bytes for each character we're going to
8047                        read.
8048                     */
8049                     if (charstart)
8050                         readsize = recsize - charcount;
8051                     else 
8052                         readsize = skip - (bend - bufp) + recsize - charcount - 1;
8053                     buffer = SvGROW(sv, append + bytesread + readsize + 1) + append;
8054                     bend = buffer + bytesread;
8055                     morebytesread = PerlIO_read(fp, bend, readsize);
8056                     if (morebytesread <= 0) {
8057                         /* we're done, if we still have incomplete
8058                            characters the check code in sv_gets() will
8059                            warn about them.
8060
8061                            I'd originally considered doing
8062                            PerlIO_ungetc() on all but the lead
8063                            character of the incomplete character, but
8064                            read() doesn't do that, so I don't.
8065                         */
8066                         break;
8067                     }
8068
8069                     /* prepare to scan some more */
8070                     bytesread += morebytesread;
8071                     bend = buffer + bytesread;
8072                     bufp = buffer + bufp_offset;
8073                 }
8074             }
8075         }
8076     }
8077
8078     if (bytesread < 0)
8079         bytesread = 0;
8080     SvCUR_set(sv, bytesread + append);
8081     buffer[bytesread] = '\0';
8082     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8083 }
8084
8085 /*
8086 =for apidoc sv_gets
8087
8088 Get a line from the filehandle and store it into the SV, optionally
8089 appending to the currently-stored string.  If C<append> is not 0, the
8090 line is appended to the SV instead of overwriting it.  C<append> should
8091 be set to the byte offset that the appended string should start at
8092 in the SV (typically, C<SvCUR(sv)> is a suitable choice).
8093
8094 =cut
8095 */
8096
8097 char *
8098 Perl_sv_gets(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8099 {
8100     const char *rsptr;
8101     STRLEN rslen;
8102     STDCHAR rslast;
8103     STDCHAR *bp;
8104     SSize_t cnt;
8105     int i = 0;
8106     int rspara = 0;
8107
8108     PERL_ARGS_ASSERT_SV_GETS;
8109
8110     if (SvTHINKFIRST(sv))
8111         sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
8112     /* XXX. If you make this PVIV, then copy on write can copy scalars read
8113        from <>.
8114        However, perlbench says it's slower, because the existing swipe code
8115        is faster than copy on write.
8116        Swings and roundabouts.  */
8117     SvUPGRADE(sv, SVt_PV);
8118
8119     if (append) {
8120         /* line is going to be appended to the existing buffer in the sv */
8121         if (PerlIO_isutf8(fp)) {
8122             if (!SvUTF8(sv)) {
8123                 sv_utf8_upgrade_nomg(sv);
8124                 sv_pos_u2b(sv,&append,0);
8125             }
8126         } else if (SvUTF8(sv)) {
8127             return S_sv_gets_append_to_utf8(aTHX_ sv, fp, append);
8128         }
8129     }
8130
8131     SvPOK_only(sv);
8132     if (!append) {
8133         /* not appending - "clear" the string by setting SvCUR to 0,
8134          * the pv is still avaiable. */
8135         SvCUR_set(sv,0);
8136     }
8137     if (PerlIO_isutf8(fp))
8138         SvUTF8_on(sv);
8139
8140     if (IN_PERL_COMPILETIME) {
8141         /* we always read code in line mode */
8142         rsptr = "\n";
8143         rslen = 1;
8144     }
8145     else if (RsSNARF(PL_rs)) {
8146         /* If it is a regular disk file use size from stat() as estimate
8147            of amount we are going to read -- may result in mallocing
8148            more memory than we really need if the layers below reduce
8149            the size we read (e.g. CRLF or a gzip layer).
8150          */
8151         Stat_t st;
8152         int fd = PerlIO_fileno(fp);
8153         if (fd >= 0 && (PerlLIO_fstat(fd, &st) == 0) && S_ISREG(st.st_mode))  {
8154             const Off_t offset = PerlIO_tell(fp);
8155             if (offset != (Off_t) -1 && st.st_size + append > offset) {
8156 #ifdef PERL_COPY_ON_WRITE
8157                 /* Add an extra byte for the sake of copy-on-write's
8158                  * buffer reference count. */
8159                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 2));
8160 #else
8161                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
8162 #endif
8163             }
8164         }
8165         rsptr = NULL;
8166         rslen = 0;
8167     }
8168     else if (RsRECORD(PL_rs)) {
8169         return S_sv_gets_read_record(aTHX_ sv, fp, append);
8170     }
8171     else if (RsPARA(PL_rs)) {
8172         rsptr = "\n\n";
8173         rslen = 2;
8174         rspara = 1;
8175     }
8176     else {
8177         /* Get $/ i.e. PL_rs into same encoding as stream wants */
8178         if (PerlIO_isutf8(fp)) {
8179             rsptr = SvPVutf8(PL_rs, rslen);
8180         }
8181         else {
8182             if (SvUTF8(PL_rs)) {
8183                 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
8184                     Perl_croak(aTHX_ "Wide character in $/");
8185                 }
8186             }
8187             /* extract the raw pointer to the record separator */
8188             rsptr = SvPV_const(PL_rs, rslen);
8189         }
8190     }
8191
8192     /* rslast is the last character in the record separator
8193      * note we don't use rslast except when rslen is true, so the
8194      * null assign is a placeholder. */
8195     rslast = rslen ? rsptr[rslen - 1] : '\0';
8196
8197     if (rspara) {               /* have to do this both before and after */
8198         do {                    /* to make sure file boundaries work right */
8199             if (PerlIO_eof(fp))
8200                 return 0;
8201             i = PerlIO_getc(fp);
8202             if (i != '\n') {
8203                 if (i == -1)
8204                     return 0;
8205                 PerlIO_ungetc(fp,i);
8206                 break;
8207             }
8208         } while (i != EOF);
8209     }
8210
8211     /* See if we know enough about I/O mechanism to cheat it ! */
8212
8213     /* This used to be #ifdef test - it is made run-time test for ease
8214        of abstracting out stdio interface. One call should be cheap
8215        enough here - and may even be a macro allowing compile
8216        time optimization.
8217      */
8218
8219     if (PerlIO_fast_gets(fp)) {
8220     /*
8221      * We can do buffer based IO operations on this filehandle.
8222      *
8223      * This means we can bypass a lot of subcalls and process
8224      * the buffer directly, it also means we know the upper bound
8225      * on the amount of data we might read of the current buffer
8226      * into our sv. Knowing this allows us to preallocate the pv
8227      * to be able to hold that maximum, which allows us to simplify
8228      * a lot of logic. */
8229
8230     /*
8231      * We're going to steal some values from the stdio struct
8232      * and put EVERYTHING in the innermost loop into registers.
8233      */
8234     STDCHAR *ptr;       /* pointer into fp's read-ahead buffer */
8235     STRLEN bpx;         /* length of the data in the target sv
8236                            used to fix pointers after a SvGROW */
8237     I32 shortbuffered;  /* If the pv buffer is shorter than the amount
8238                            of data left in the read-ahead buffer.
8239                            If 0 then the pv buffer can hold the full
8240                            amount left, otherwise this is the amount it
8241                            can hold. */
8242
8243     /* Here is some breathtakingly efficient cheating */
8244
8245     /* When you read the following logic resist the urge to think
8246      * of record separators that are 1 byte long. They are an
8247      * uninteresting special (simple) case.
8248      *
8249      * Instead think of record separators which are at least 2 bytes
8250      * long, and keep in mind that we need to deal with such
8251      * separators when they cross a read-ahead buffer boundary.
8252      *
8253      * Also consider that we need to gracefully deal with separators
8254      * that may be longer than a single read ahead buffer.
8255      *
8256      * Lastly do not forget we want to copy the delimiter as well. We
8257      * are copying all data in the file _up_to_and_including_ the separator
8258      * itself.
8259      *
8260      * Now that you have all that in mind here is what is happening below:
8261      *
8262      * 1. When we first enter the loop we do some memory book keeping to see
8263      * how much free space there is in the target SV. (This sub assumes that
8264      * it is operating on the same SV most of the time via $_ and that it is
8265      * going to be able to reuse the same pv buffer each call.) If there is
8266      * "enough" room then we set "shortbuffered" to how much space there is
8267      * and start reading forward.
8268      *
8269      * 2. When we scan forward we copy from the read-ahead buffer to the target
8270      * SV's pv buffer. While we go we watch for the end of the read-ahead buffer,
8271      * and the end of the of pv, as well as for the "rslast", which is the last
8272      * char of the separator.
8273      *
8274      * 3. When scanning forward if we see rslast then we jump backwards in *pv*
8275      * (which has a "complete" record up to the point we saw rslast) and check
8276      * it to see if it matches the separator. If it does we are done. If it doesn't
8277      * we continue on with the scan/copy.
8278      *
8279      * 4. If we run out of read-ahead buffer (cnt goes to 0) then we have to get
8280      * the IO system to read the next buffer. We do this by doing a getc(), which
8281      * returns a single char read (or EOF), and prefills the buffer, and also
8282      * allows us to find out how full the buffer is.  We use this information to
8283      * SvGROW() the sv to the size remaining in the buffer, after which we copy
8284      * the returned single char into the target sv, and then go back into scan
8285      * forward mode.
8286      *
8287      * 5. If we run out of write-buffer then we SvGROW() it by the size of the
8288      * remaining space in the read-buffer.
8289      *
8290      * Note that this code despite its twisty-turny nature is pretty darn slick.
8291      * It manages single byte separators, multi-byte cross boundary separators,
8292      * and cross-read-buffer separators cleanly and efficiently at the cost
8293      * of potentially greatly overallocating the target SV.
8294      *
8295      * Yves
8296      */
8297
8298
8299     /* get the number of bytes remaining in the read-ahead buffer
8300      * on first call on a given fp this will return 0.*/
8301     cnt = PerlIO_get_cnt(fp);
8302
8303     /* make sure we have the room */
8304     if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
8305         /* Not room for all of it
8306            if we are looking for a separator and room for some
8307          */
8308         if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
8309             /* just process what we have room for */
8310             shortbuffered = cnt - SvLEN(sv) + append + 1;
8311             cnt -= shortbuffered;
8312         }
8313         else {
8314             /* ensure that the target sv has enough room to hold
8315              * the rest of the read-ahead buffer */
8316             shortbuffered = 0;
8317             /* remember that cnt can be negative */
8318             SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
8319         }
8320     }
8321     else {
8322         /* we have enough room to hold the full buffer, lets scream */
8323         shortbuffered = 0;
8324     }
8325
8326     /* extract the pointer to sv's string buffer, offset by append as necessary */
8327     bp = (STDCHAR*)SvPVX_const(sv) + append;  /* move these two too to registers */
8328     /* extract the point to the read-ahead buffer */
8329     ptr = (STDCHAR*)PerlIO_get_ptr(fp);
8330
8331     /* some trace debug output */
8332     DEBUG_P(PerlIO_printf(Perl_debug_log,
8333         "Screamer: entering, ptr=%"UVuf", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
8334     DEBUG_P(PerlIO_printf(Perl_debug_log,
8335         "Screamer: entering: PerlIO * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"
8336          UVuf"\n",
8337                PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8338                PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
8339
8340     for (;;) {
8341       screamer:
8342         /* if there is stuff left in the read-ahead buffer */
8343         if (cnt > 0) {
8344             /* if there is a separator */
8345             if (rslen) {
8346                 /* loop until we hit the end of the read-ahead buffer */
8347                 while (cnt > 0) {                    /* this     |  eat */
8348                     /* scan forward copying and searching for rslast as we go */
8349                     cnt--;
8350                     if ((*bp++ = *ptr++) == rslast)  /* really   |  dust */
8351                         goto thats_all_folks;        /* screams  |  sed :-) */
8352                 }
8353             }
8354             else {
8355                 /* no separator, slurp the full buffer */
8356                 Copy(ptr, bp, cnt, char);            /* this     |  eat */
8357                 bp += cnt;                           /* screams  |  dust */
8358                 ptr += cnt;                          /* louder   |  sed :-) */
8359                 cnt = 0;
8360                 assert (!shortbuffered);
8361                 goto cannot_be_shortbuffered;
8362             }
8363         }
8364         
8365         if (shortbuffered) {            /* oh well, must extend */
8366             /* we didnt have enough room to fit the line into the target buffer
8367              * so we must extend the target buffer and keep going */
8368             cnt = shortbuffered;
8369             shortbuffered = 0;
8370             bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
8371             SvCUR_set(sv, bpx);
8372             /* extned the target sv's buffer so it can hold the full read-ahead buffer */
8373             SvGROW(sv, SvLEN(sv) + append + cnt + 2);
8374             bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
8375             continue;
8376         }
8377
8378     cannot_be_shortbuffered:
8379         /* we need to refill the read-ahead buffer if possible */
8380
8381         DEBUG_P(PerlIO_printf(Perl_debug_log,
8382                              "Screamer: going to getc, ptr=%"UVuf", cnt=%"IVdf"\n",
8383                               PTR2UV(ptr),(IV)cnt));
8384         PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
8385
8386         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8387            "Screamer: pre: FILE * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"UVuf"\n",
8388             PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8389             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8390
8391         /*
8392             call PerlIO_getc() to let it prefill the lookahead buffer
8393
8394             This used to call 'filbuf' in stdio form, but as that behaves like
8395             getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
8396             another abstraction.
8397
8398             Note we have to deal with the char in 'i' if we are not at EOF
8399         */
8400         i   = PerlIO_getc(fp);          /* get more characters */
8401
8402         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8403            "Screamer: post: FILE * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"UVuf"\n",
8404             PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8405             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8406
8407         /* find out how much is left in the read-ahead buffer, and rextract its pointer */
8408         cnt = PerlIO_get_cnt(fp);
8409         ptr = (STDCHAR*)PerlIO_get_ptr(fp);     /* reregisterize cnt and ptr */
8410         DEBUG_P(PerlIO_printf(Perl_debug_log,
8411             "Screamer: after getc, ptr=%"UVuf", cnt=%"IVdf"\n",
8412             PTR2UV(ptr),(IV)cnt));
8413
8414         if (i == EOF)                   /* all done for ever? */
8415             goto thats_really_all_folks;
8416
8417         /* make sure we have enough space in the target sv */
8418         bpx = bp - (STDCHAR*)SvPVX_const(sv);   /* box up before relocation */
8419         SvCUR_set(sv, bpx);
8420         SvGROW(sv, bpx + cnt + 2);
8421         bp = (STDCHAR*)SvPVX_const(sv) + bpx;   /* unbox after relocation */
8422
8423         /* copy of the char we got from getc() */
8424         *bp++ = (STDCHAR)i;             /* store character from PerlIO_getc */
8425
8426         /* make sure we deal with the i being the last character of a separator */
8427         if (rslen && (STDCHAR)i == rslast)  /* all done for now? */
8428             goto thats_all_folks;
8429     }
8430
8431   thats_all_folks:
8432     /* check if we have actually found the separator - only really applies
8433      * when rslen > 1 */
8434     if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
8435           memNE((char*)bp - rslen, rsptr, rslen))
8436         goto screamer;                          /* go back to the fray */
8437   thats_really_all_folks:
8438     if (shortbuffered)
8439         cnt += shortbuffered;
8440         DEBUG_P(PerlIO_printf(Perl_debug_log,
8441              "Screamer: quitting, ptr=%"UVuf", cnt=%"IVdf"\n",PTR2UV(ptr),(IV)cnt));
8442     PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt);  /* put these back or we're in trouble */
8443     DEBUG_P(PerlIO_printf(Perl_debug_log,
8444         "Screamer: end: FILE * thinks ptr=%"UVuf", cnt=%"IVdf", base=%"UVuf
8445         "\n",
8446         PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8447         PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8448     *bp = '\0';
8449     SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv));      /* set length */
8450     DEBUG_P(PerlIO_printf(Perl_debug_log,
8451         "Screamer: done, len=%ld, string=|%.*s|\n",
8452         (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
8453     }
8454    else
8455     {
8456        /*The big, slow, and stupid way. */
8457 #ifdef USE_HEAP_INSTEAD_OF_STACK        /* Even slower way. */
8458         STDCHAR *buf = NULL;
8459         Newx(buf, 8192, STDCHAR);
8460         assert(buf);
8461 #else
8462         STDCHAR buf[8192];
8463 #endif
8464
8465       screamer2:
8466         if (rslen) {
8467             const STDCHAR * const bpe = buf + sizeof(buf);
8468             bp = buf;
8469             while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
8470                 ; /* keep reading */
8471             cnt = bp - buf;
8472         }
8473         else {
8474             cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
8475             /* Accommodate broken VAXC compiler, which applies U8 cast to
8476              * both args of ?: operator, causing EOF to change into 255
8477              */
8478             if (cnt > 0)
8479                  i = (U8)buf[cnt - 1];
8480             else
8481                  i = EOF;
8482         }
8483
8484         if (cnt < 0)
8485             cnt = 0;  /* we do need to re-set the sv even when cnt <= 0 */
8486         if (append)
8487             sv_catpvn_nomg(sv, (char *) buf, cnt);
8488         else
8489             sv_setpvn(sv, (char *) buf, cnt);   /* "nomg" is implied */
8490
8491         if (i != EOF &&                 /* joy */
8492             (!rslen ||
8493              SvCUR(sv) < rslen ||
8494              memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
8495         {
8496             append = -1;
8497             /*
8498              * If we're reading from a TTY and we get a short read,
8499              * indicating that the user hit his EOF character, we need
8500              * to notice it now, because if we try to read from the TTY
8501              * again, the EOF condition will disappear.
8502              *
8503              * The comparison of cnt to sizeof(buf) is an optimization
8504              * that prevents unnecessary calls to feof().
8505              *
8506              * - jik 9/25/96
8507              */
8508             if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
8509                 goto screamer2;
8510         }
8511
8512 #ifdef USE_HEAP_INSTEAD_OF_STACK
8513         Safefree(buf);
8514 #endif
8515     }
8516
8517     if (rspara) {               /* have to do this both before and after */
8518         while (i != EOF) {      /* to make sure file boundaries work right */
8519             i = PerlIO_getc(fp);
8520             if (i != '\n') {
8521                 PerlIO_ungetc(fp,i);
8522                 break;
8523             }
8524         }
8525     }
8526
8527     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8528 }
8529
8530 /*
8531 =for apidoc sv_inc
8532
8533 Auto-increment of the value in the SV, doing string to numeric conversion
8534 if necessary.  Handles 'get' magic and operator overloading.
8535
8536 =cut
8537 */
8538
8539 void
8540 Perl_sv_inc(pTHX_ SV *const sv)
8541 {
8542     if (!sv)
8543         return;
8544     SvGETMAGIC(sv);
8545     sv_inc_nomg(sv);
8546 }
8547
8548 /*
8549 =for apidoc sv_inc_nomg
8550
8551 Auto-increment of the value in the SV, doing string to numeric conversion
8552 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8553
8554 =cut
8555 */
8556
8557 void
8558 Perl_sv_inc_nomg(pTHX_ SV *const sv)
8559 {
8560     char *d;
8561     int flags;
8562
8563     if (!sv)
8564         return;
8565     if (SvTHINKFIRST(sv)) {
8566         if (SvREADONLY(sv)) {
8567                 Perl_croak_no_modify();
8568         }
8569         if (SvROK(sv)) {
8570             IV i;
8571             if (SvAMAGIC(sv) && AMG_CALLunary(sv, inc_amg))
8572                 return;
8573             i = PTR2IV(SvRV(sv));
8574             sv_unref(sv);
8575             sv_setiv(sv, i);
8576         }
8577         else sv_force_normal_flags(sv, 0);
8578     }
8579     flags = SvFLAGS(sv);
8580     if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
8581         /* It's (privately or publicly) a float, but not tested as an
8582            integer, so test it to see. */
8583         (void) SvIV(sv);
8584         flags = SvFLAGS(sv);
8585     }
8586     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8587         /* It's publicly an integer, or privately an integer-not-float */
8588 #ifdef PERL_PRESERVE_IVUV
8589       oops_its_int:
8590 #endif
8591         if (SvIsUV(sv)) {
8592             if (SvUVX(sv) == UV_MAX)
8593                 sv_setnv(sv, UV_MAX_P1);
8594             else
8595                 (void)SvIOK_only_UV(sv);
8596                 SvUV_set(sv, SvUVX(sv) + 1);
8597         } else {
8598             if (SvIVX(sv) == IV_MAX)
8599                 sv_setuv(sv, (UV)IV_MAX + 1);
8600             else {
8601                 (void)SvIOK_only(sv);
8602                 SvIV_set(sv, SvIVX(sv) + 1);
8603             }   
8604         }
8605         return;
8606     }
8607     if (flags & SVp_NOK) {
8608         const NV was = SvNVX(sv);
8609         if (LIKELY(!Perl_isinfnan(was)) &&
8610             NV_OVERFLOWS_INTEGERS_AT &&
8611             was >= NV_OVERFLOWS_INTEGERS_AT) {
8612             /* diag_listed_as: Lost precision when %s %f by 1 */
8613             Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8614                            "Lost precision when incrementing %" NVff " by 1",
8615                            was);
8616         }
8617         (void)SvNOK_only(sv);
8618         SvNV_set(sv, was + 1.0);
8619         return;
8620     }
8621
8622     if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
8623         if ((flags & SVTYPEMASK) < SVt_PVIV)
8624             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
8625         (void)SvIOK_only(sv);
8626         SvIV_set(sv, 1);
8627         return;
8628     }
8629     d = SvPVX(sv);
8630     while (isALPHA(*d)) d++;
8631     while (isDIGIT(*d)) d++;
8632     if (d < SvEND(sv)) {
8633         const int numtype = grok_number_flags(SvPVX_const(sv), SvCUR(sv), NULL, PERL_SCAN_TRAILING);
8634 #ifdef PERL_PRESERVE_IVUV
8635         /* Got to punt this as an integer if needs be, but we don't issue
8636            warnings. Probably ought to make the sv_iv_please() that does
8637            the conversion if possible, and silently.  */
8638         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8639             /* Need to try really hard to see if it's an integer.
8640                9.22337203685478e+18 is an integer.
8641                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8642                so $a="9.22337203685478e+18"; $a+0; $a++
8643                needs to be the same as $a="9.22337203685478e+18"; $a++
8644                or we go insane. */
8645         
8646             (void) sv_2iv(sv);
8647             if (SvIOK(sv))
8648                 goto oops_its_int;
8649
8650             /* sv_2iv *should* have made this an NV */
8651             if (flags & SVp_NOK) {
8652                 (void)SvNOK_only(sv);
8653                 SvNV_set(sv, SvNVX(sv) + 1.0);
8654                 return;
8655             }
8656             /* I don't think we can get here. Maybe I should assert this
8657                And if we do get here I suspect that sv_setnv will croak. NWC
8658                Fall through. */
8659             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8660                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8661         }
8662 #endif /* PERL_PRESERVE_IVUV */
8663         if (!numtype && ckWARN(WARN_NUMERIC))
8664             not_incrementable(sv);
8665         sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
8666         return;
8667     }
8668     d--;
8669     while (d >= SvPVX_const(sv)) {
8670         if (isDIGIT(*d)) {
8671             if (++*d <= '9')
8672                 return;
8673             *(d--) = '0';
8674         }
8675         else {
8676 #ifdef EBCDIC
8677             /* MKS: The original code here died if letters weren't consecutive.
8678              * at least it didn't have to worry about non-C locales.  The
8679              * new code assumes that ('z'-'a')==('Z'-'A'), letters are
8680              * arranged in order (although not consecutively) and that only
8681              * [A-Za-z] are accepted by isALPHA in the C locale.
8682              */
8683             if (isALPHA_FOLD_NE(*d, 'z')) {
8684                 do { ++*d; } while (!isALPHA(*d));
8685                 return;
8686             }
8687             *(d--) -= 'z' - 'a';
8688 #else
8689             ++*d;
8690             if (isALPHA(*d))
8691                 return;
8692             *(d--) -= 'z' - 'a' + 1;
8693 #endif
8694         }
8695     }
8696     /* oh,oh, the number grew */
8697     SvGROW(sv, SvCUR(sv) + 2);
8698     SvCUR_set(sv, SvCUR(sv) + 1);
8699     for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
8700         *d = d[-1];
8701     if (isDIGIT(d[1]))
8702         *d = '1';
8703     else
8704         *d = d[1];
8705 }
8706
8707 /*
8708 =for apidoc sv_dec
8709
8710 Auto-decrement of the value in the SV, doing string to numeric conversion
8711 if necessary.  Handles 'get' magic and operator overloading.
8712
8713 =cut
8714 */
8715
8716 void
8717 Perl_sv_dec(pTHX_ SV *const sv)
8718 {
8719     if (!sv)
8720         return;
8721     SvGETMAGIC(sv);
8722     sv_dec_nomg(sv);
8723 }
8724
8725 /*
8726 =for apidoc sv_dec_nomg
8727
8728 Auto-decrement of the value in the SV, doing string to numeric conversion
8729 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8730
8731 =cut
8732 */
8733
8734 void
8735 Perl_sv_dec_nomg(pTHX_ SV *const sv)
8736 {
8737     int flags;
8738
8739     if (!sv)
8740         return;
8741     if (SvTHINKFIRST(sv)) {
8742         if (SvREADONLY(sv)) {
8743                 Perl_croak_no_modify();
8744         }
8745         if (SvROK(sv)) {
8746             IV i;
8747             if (SvAMAGIC(sv) && AMG_CALLunary(sv, dec_amg))
8748                 return;
8749             i = PTR2IV(SvRV(sv));
8750             sv_unref(sv);
8751             sv_setiv(sv, i);
8752         }
8753         else sv_force_normal_flags(sv, 0);
8754     }
8755     /* Unlike sv_inc we don't have to worry about string-never-numbers
8756        and keeping them magic. But we mustn't warn on punting */
8757     flags = SvFLAGS(sv);
8758     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8759         /* It's publicly an integer, or privately an integer-not-float */
8760 #ifdef PERL_PRESERVE_IVUV
8761       oops_its_int:
8762 #endif
8763         if (SvIsUV(sv)) {
8764             if (SvUVX(sv) == 0) {
8765                 (void)SvIOK_only(sv);
8766                 SvIV_set(sv, -1);
8767             }
8768             else {
8769                 (void)SvIOK_only_UV(sv);
8770                 SvUV_set(sv, SvUVX(sv) - 1);
8771             }   
8772         } else {
8773             if (SvIVX(sv) == IV_MIN) {
8774                 sv_setnv(sv, (NV)IV_MIN);
8775                 goto oops_its_num;
8776             }
8777             else {
8778                 (void)SvIOK_only(sv);
8779                 SvIV_set(sv, SvIVX(sv) - 1);
8780             }   
8781         }
8782         return;
8783     }
8784     if (flags & SVp_NOK) {
8785     oops_its_num:
8786         {
8787             const NV was = SvNVX(sv);
8788             if (LIKELY(!Perl_isinfnan(was)) &&
8789                 NV_OVERFLOWS_INTEGERS_AT &&
8790                 was <= -NV_OVERFLOWS_INTEGERS_AT) {
8791                 /* diag_listed_as: Lost precision when %s %f by 1 */
8792                 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8793                                "Lost precision when decrementing %" NVff " by 1",
8794                                was);
8795             }
8796             (void)SvNOK_only(sv);
8797             SvNV_set(sv, was - 1.0);
8798             return;
8799         }
8800     }
8801     if (!(flags & SVp_POK)) {
8802         if ((flags & SVTYPEMASK) < SVt_PVIV)
8803             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
8804         SvIV_set(sv, -1);
8805         (void)SvIOK_only(sv);
8806         return;
8807     }
8808 #ifdef PERL_PRESERVE_IVUV
8809     {
8810         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
8811         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8812             /* Need to try really hard to see if it's an integer.
8813                9.22337203685478e+18 is an integer.
8814                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8815                so $a="9.22337203685478e+18"; $a+0; $a--
8816                needs to be the same as $a="9.22337203685478e+18"; $a--
8817                or we go insane. */
8818         
8819             (void) sv_2iv(sv);
8820             if (SvIOK(sv))
8821                 goto oops_its_int;
8822
8823             /* sv_2iv *should* have made this an NV */
8824             if (flags & SVp_NOK) {
8825                 (void)SvNOK_only(sv);
8826                 SvNV_set(sv, SvNVX(sv) - 1.0);
8827                 return;
8828             }
8829             /* I don't think we can get here. Maybe I should assert this
8830                And if we do get here I suspect that sv_setnv will croak. NWC
8831                Fall through. */
8832             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%"UVxf" NV=%"NVgf"\n",
8833                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8834         }
8835     }
8836 #endif /* PERL_PRESERVE_IVUV */
8837     sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0);   /* punt */
8838 }
8839
8840 /* this define is used to eliminate a chunk of duplicated but shared logic
8841  * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
8842  * used anywhere but here - yves
8843  */
8844 #define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
8845     STMT_START {      \
8846         SSize_t ix = ++PL_tmps_ix;              \
8847         if (UNLIKELY(ix >= PL_tmps_max))        \
8848             ix = tmps_grow_p(ix);                       \
8849         PL_tmps_stack[ix] = (AnSv); \
8850     } STMT_END
8851
8852 /*
8853 =for apidoc sv_mortalcopy
8854
8855 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
8856 The new SV is marked as mortal.  It will be destroyed "soon", either by an
8857 explicit call to FREETMPS, or by an implicit call at places such as
8858 statement boundaries.  See also C<sv_newmortal> and C<sv_2mortal>.
8859
8860 =cut
8861 */
8862
8863 /* Make a string that will exist for the duration of the expression
8864  * evaluation.  Actually, it may have to last longer than that, but
8865  * hopefully we won't free it until it has been assigned to a
8866  * permanent location. */
8867
8868 SV *
8869 Perl_sv_mortalcopy_flags(pTHX_ SV *const oldstr, U32 flags)
8870 {
8871     SV *sv;
8872
8873     if (flags & SV_GMAGIC)
8874         SvGETMAGIC(oldstr); /* before new_SV, in case it dies */
8875     new_SV(sv);
8876     sv_setsv_flags(sv,oldstr,flags & ~SV_GMAGIC);
8877     PUSH_EXTEND_MORTAL__SV_C(sv);
8878     SvTEMP_on(sv);
8879     return sv;
8880 }
8881
8882 /*
8883 =for apidoc sv_newmortal
8884
8885 Creates a new null SV which is mortal.  The reference count of the SV is
8886 set to 1.  It will be destroyed "soon", either by an explicit call to
8887 FREETMPS, or by an implicit call at places such as statement boundaries.
8888 See also C<sv_mortalcopy> and C<sv_2mortal>.
8889
8890 =cut
8891 */
8892
8893 SV *
8894 Perl_sv_newmortal(pTHX)
8895 {
8896     SV *sv;
8897
8898     new_SV(sv);
8899     SvFLAGS(sv) = SVs_TEMP;
8900     PUSH_EXTEND_MORTAL__SV_C(sv);
8901     return sv;
8902 }
8903
8904
8905 /*
8906 =for apidoc newSVpvn_flags
8907
8908 Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
8909 characters) into it.  The reference count for the
8910 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
8911 string.  You are responsible for ensuring that the source string is at least
8912 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
8913 Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
8914 If C<SVs_TEMP> is set, then C<sv_2mortal()> is called on the result before
8915 returning.  If C<SVf_UTF8> is set, C<s>
8916 is considered to be in UTF-8 and the
8917 C<SVf_UTF8> flag will be set on the new SV.
8918 C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
8919
8920     #define newSVpvn_utf8(s, len, u)                    \
8921         newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
8922
8923 =cut
8924 */
8925
8926 SV *
8927 Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
8928 {
8929     SV *sv;
8930
8931     /* All the flags we don't support must be zero.
8932        And we're new code so I'm going to assert this from the start.  */
8933     assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
8934     new_SV(sv);
8935     sv_setpvn(sv,s,len);
8936
8937     /* This code used to do a sv_2mortal(), however we now unroll the call to
8938      * sv_2mortal() and do what it does ourselves here.  Since we have asserted
8939      * that flags can only have the SVf_UTF8 and/or SVs_TEMP flags set above we
8940      * can use it to enable the sv flags directly (bypassing SvTEMP_on), which
8941      * in turn means we dont need to mask out the SVf_UTF8 flag below, which
8942      * means that we eliminate quite a few steps than it looks - Yves
8943      * (explaining patch by gfx) */
8944
8945     SvFLAGS(sv) |= flags;
8946
8947     if(flags & SVs_TEMP){
8948         PUSH_EXTEND_MORTAL__SV_C(sv);
8949     }
8950
8951     return sv;
8952 }
8953
8954 /*
8955 =for apidoc sv_2mortal
8956
8957 Marks an existing SV as mortal.  The SV will be destroyed "soon", either
8958 by an explicit call to FREETMPS, or by an implicit call at places such as
8959 statement boundaries.  SvTEMP() is turned on which means that the SV's
8960 string buffer can be "stolen" if this SV is copied.  See also C<sv_newmortal>
8961 and C<sv_mortalcopy>.
8962
8963 =cut
8964 */
8965
8966 SV *
8967 Perl_sv_2mortal(pTHX_ SV *const sv)
8968 {
8969     dVAR;
8970     if (!sv)
8971         return sv;
8972     if (SvIMMORTAL(sv))
8973         return sv;
8974     PUSH_EXTEND_MORTAL__SV_C(sv);
8975     SvTEMP_on(sv);
8976     return sv;
8977 }
8978
8979 /*
8980 =for apidoc newSVpv
8981
8982 Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
8983 characters) into it.  The reference count for the
8984 SV is set to 1.  If C<len> is zero, Perl will compute the length using
8985 strlen(), (which means if you use this option, that C<s> can't have embedded
8986 C<NUL> characters and has to have a terminating C<NUL> byte).
8987
8988 For efficiency, consider using C<newSVpvn> instead.
8989
8990 =cut
8991 */
8992
8993 SV *
8994 Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
8995 {
8996     SV *sv;
8997
8998     new_SV(sv);
8999     sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
9000     return sv;
9001 }
9002
9003 /*
9004 =for apidoc newSVpvn
9005
9006 Creates a new SV and copies a string into it, which may contain C<NUL> characters
9007 (C<\0>) and other binary data.  The reference count for the SV is set to 1.
9008 Note that if C<len> is zero, Perl will create a zero length (Perl) string.  You
9009 are responsible for ensuring that the source buffer is at least
9010 C<len> bytes long.  If the C<buffer> argument is NULL the new SV will be
9011 undefined.
9012
9013 =cut
9014 */
9015
9016 SV *
9017 Perl_newSVpvn(pTHX_ const char *const buffer, const STRLEN len)
9018 {
9019     SV *sv;
9020     new_SV(sv);
9021     sv_setpvn(sv,buffer,len);
9022     return sv;
9023 }
9024
9025 /*
9026 =for apidoc newSVhek
9027
9028 Creates a new SV from the hash key structure.  It will generate scalars that
9029 point to the shared string table where possible.  Returns a new (undefined)
9030 SV if the hek is NULL.
9031
9032 =cut
9033 */
9034
9035 SV *
9036 Perl_newSVhek(pTHX_ const HEK *const hek)
9037 {
9038     if (!hek) {
9039         SV *sv;
9040
9041         new_SV(sv);
9042         return sv;
9043     }
9044
9045     if (HEK_LEN(hek) == HEf_SVKEY) {
9046         return newSVsv(*(SV**)HEK_KEY(hek));
9047     } else {
9048         const int flags = HEK_FLAGS(hek);
9049         if (flags & HVhek_WASUTF8) {
9050             /* Trouble :-)
9051                Andreas would like keys he put in as utf8 to come back as utf8
9052             */
9053             STRLEN utf8_len = HEK_LEN(hek);
9054             SV * const sv = newSV_type(SVt_PV);
9055             char *as_utf8 = (char *)bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
9056             /* bytes_to_utf8() allocates a new string, which we can repurpose: */
9057             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
9058             SvUTF8_on (sv);
9059             return sv;
9060         } else if (flags & HVhek_UNSHARED) {
9061             /* A hash that isn't using shared hash keys has to have
9062                the flag in every key so that we know not to try to call
9063                share_hek_hek on it.  */
9064
9065             SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
9066             if (HEK_UTF8(hek))
9067                 SvUTF8_on (sv);
9068             return sv;
9069         }
9070         /* This will be overwhelminly the most common case.  */
9071         {
9072             /* Inline most of newSVpvn_share(), because share_hek_hek() is far
9073                more efficient than sharepvn().  */
9074             SV *sv;
9075
9076             new_SV(sv);
9077             sv_upgrade(sv, SVt_PV);
9078             SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
9079             SvCUR_set(sv, HEK_LEN(hek));
9080             SvLEN_set(sv, 0);
9081             SvIsCOW_on(sv);
9082             SvPOK_on(sv);
9083             if (HEK_UTF8(hek))
9084                 SvUTF8_on(sv);
9085             return sv;
9086         }
9087     }
9088 }
9089
9090 /*
9091 =for apidoc newSVpvn_share
9092
9093 Creates a new SV with its SvPVX_const pointing to a shared string in the string
9094 table.  If the string does not already exist in the table, it is
9095 created first.  Turns on the SvIsCOW flag (or READONLY
9096 and FAKE in 5.16 and earlier).  If the C<hash> parameter
9097 is non-zero, that value is used; otherwise the hash is computed.
9098 The string's hash can later be retrieved from the SV
9099 with the C<SvSHARED_HASH()> macro.  The idea here is
9100 that as the string table is used for shared hash keys these strings will have
9101 SvPVX_const == HeKEY and hash lookup will avoid string compare.
9102
9103 =cut
9104 */
9105
9106 SV *
9107 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
9108 {
9109     dVAR;
9110     SV *sv;
9111     bool is_utf8 = FALSE;
9112     const char *const orig_src = src;
9113
9114     if (len < 0) {
9115         STRLEN tmplen = -len;
9116         is_utf8 = TRUE;
9117         /* See the note in hv.c:hv_fetch() --jhi */
9118         src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
9119         len = tmplen;
9120     }
9121     if (!hash)
9122         PERL_HASH(hash, src, len);
9123     new_SV(sv);
9124     /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
9125        changes here, update it there too.  */
9126     sv_upgrade(sv, SVt_PV);
9127     SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
9128     SvCUR_set(sv, len);
9129     SvLEN_set(sv, 0);
9130     SvIsCOW_on(sv);
9131     SvPOK_on(sv);
9132     if (is_utf8)
9133         SvUTF8_on(sv);
9134     if (src != orig_src)
9135         Safefree(src);
9136     return sv;
9137 }
9138
9139 /*
9140 =for apidoc newSVpv_share
9141
9142 Like C<newSVpvn_share>, but takes a C<NUL>-terminated string instead of a
9143 string/length pair.
9144
9145 =cut
9146 */
9147
9148 SV *
9149 Perl_newSVpv_share(pTHX_ const char *src, U32 hash)
9150 {
9151     return newSVpvn_share(src, strlen(src), hash);
9152 }
9153
9154 #if defined(PERL_IMPLICIT_CONTEXT)
9155
9156 /* pTHX_ magic can't cope with varargs, so this is a no-context
9157  * version of the main function, (which may itself be aliased to us).
9158  * Don't access this version directly.
9159  */
9160
9161 SV *
9162 Perl_newSVpvf_nocontext(const char *const pat, ...)
9163 {
9164     dTHX;
9165     SV *sv;
9166     va_list args;
9167
9168     PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
9169
9170     va_start(args, pat);
9171     sv = vnewSVpvf(pat, &args);
9172     va_end(args);
9173     return sv;
9174 }
9175 #endif
9176
9177 /*
9178 =for apidoc newSVpvf
9179
9180 Creates a new SV and initializes it with the string formatted like
9181 C<sv_catpvf>.
9182
9183 =cut
9184 */
9185
9186 SV *
9187 Perl_newSVpvf(pTHX_ const char *const pat, ...)
9188 {
9189     SV *sv;
9190     va_list args;
9191
9192     PERL_ARGS_ASSERT_NEWSVPVF;
9193
9194     va_start(args, pat);
9195     sv = vnewSVpvf(pat, &args);
9196     va_end(args);
9197     return sv;
9198 }
9199
9200 /* backend for newSVpvf() and newSVpvf_nocontext() */
9201
9202 SV *
9203 Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
9204 {
9205     SV *sv;
9206
9207     PERL_ARGS_ASSERT_VNEWSVPVF;
9208
9209     new_SV(sv);
9210     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9211     return sv;
9212 }
9213
9214 /*
9215 =for apidoc newSVnv
9216
9217 Creates a new SV and copies a floating point value into it.
9218 The reference count for the SV is set to 1.
9219
9220 =cut
9221 */
9222
9223 SV *
9224 Perl_newSVnv(pTHX_ const NV n)
9225 {
9226     SV *sv;
9227
9228     new_SV(sv);
9229     sv_setnv(sv,n);
9230     return sv;
9231 }
9232
9233 /*
9234 =for apidoc newSViv
9235
9236 Creates a new SV and copies an integer into it.  The reference count for the
9237 SV is set to 1.
9238
9239 =cut
9240 */
9241
9242 SV *
9243 Perl_newSViv(pTHX_ const IV i)
9244 {
9245     SV *sv;
9246
9247     new_SV(sv);
9248
9249     /* Inlining ONLY the small relevant subset of sv_setiv here
9250      * for performance. Makes a significant difference. */
9251
9252     /* We're starting from SVt_FIRST, so provided that's
9253      * actual 0, we don't have to unset any SV type flags
9254      * to promote to SVt_IV. */
9255     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9256
9257     SET_SVANY_FOR_BODYLESS_IV(sv);
9258     SvFLAGS(sv) |= SVt_IV;
9259     (void)SvIOK_on(sv);
9260
9261     SvIV_set(sv, i);
9262     SvTAINT(sv);
9263
9264     return sv;
9265 }
9266
9267 /*
9268 =for apidoc newSVuv
9269
9270 Creates a new SV and copies an unsigned integer into it.
9271 The reference count for the SV is set to 1.
9272
9273 =cut
9274 */
9275
9276 SV *
9277 Perl_newSVuv(pTHX_ const UV u)
9278 {
9279     SV *sv;
9280
9281     /* Inlining ONLY the small relevant subset of sv_setuv here
9282      * for performance. Makes a significant difference. */
9283
9284     /* Using ivs is more efficient than using uvs - see sv_setuv */
9285     if (u <= (UV)IV_MAX) {
9286         return newSViv((IV)u);
9287     }
9288
9289     new_SV(sv);
9290
9291     /* We're starting from SVt_FIRST, so provided that's
9292      * actual 0, we don't have to unset any SV type flags
9293      * to promote to SVt_IV. */
9294     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9295
9296     SET_SVANY_FOR_BODYLESS_IV(sv);
9297     SvFLAGS(sv) |= SVt_IV;
9298     (void)SvIOK_on(sv);
9299     (void)SvIsUV_on(sv);
9300
9301     SvUV_set(sv, u);
9302     SvTAINT(sv);
9303
9304     return sv;
9305 }
9306
9307 /*
9308 =for apidoc newSV_type
9309
9310 Creates a new SV, of the type specified.  The reference count for the new SV
9311 is set to 1.
9312
9313 =cut
9314 */
9315
9316 SV *
9317 Perl_newSV_type(pTHX_ const svtype type)
9318 {
9319     SV *sv;
9320
9321     new_SV(sv);
9322     ASSUME(SvTYPE(sv) == SVt_FIRST);
9323     if(type != SVt_FIRST)
9324         sv_upgrade(sv, type);
9325     return sv;
9326 }
9327
9328 /*
9329 =for apidoc newRV_noinc
9330
9331 Creates an RV wrapper for an SV.  The reference count for the original
9332 SV is B<not> incremented.
9333
9334 =cut
9335 */
9336
9337 SV *
9338 Perl_newRV_noinc(pTHX_ SV *const tmpRef)
9339 {
9340     SV *sv;
9341
9342     PERL_ARGS_ASSERT_NEWRV_NOINC;
9343
9344     new_SV(sv);
9345
9346     /* We're starting from SVt_FIRST, so provided that's
9347      * actual 0, we don't have to unset any SV type flags
9348      * to promote to SVt_IV. */
9349     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9350
9351     SET_SVANY_FOR_BODYLESS_IV(sv);
9352     SvFLAGS(sv) |= SVt_IV;
9353     SvROK_on(sv);
9354     SvIV_set(sv, 0);
9355
9356     SvTEMP_off(tmpRef);
9357     SvRV_set(sv, tmpRef);
9358
9359     return sv;
9360 }
9361
9362 /* newRV_inc is the official function name to use now.
9363  * newRV_inc is in fact #defined to newRV in sv.h
9364  */
9365
9366 SV *
9367 Perl_newRV(pTHX_ SV *const sv)
9368 {
9369     PERL_ARGS_ASSERT_NEWRV;
9370
9371     return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
9372 }
9373
9374 /*
9375 =for apidoc newSVsv
9376
9377 Creates a new SV which is an exact duplicate of the original SV.
9378 (Uses C<sv_setsv>.)
9379
9380 =cut
9381 */
9382
9383 SV *
9384 Perl_newSVsv(pTHX_ SV *const old)
9385 {
9386     SV *sv;
9387
9388     if (!old)
9389         return NULL;
9390     if (SvTYPE(old) == (svtype)SVTYPEMASK) {
9391         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
9392         return NULL;
9393     }
9394     /* Do this here, otherwise we leak the new SV if this croaks. */
9395     SvGETMAGIC(old);
9396     new_SV(sv);
9397     /* SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
9398        with SvTEMP_off and SvTEMP_on round a call to sv_setsv.  */
9399     sv_setsv_flags(sv, old, SV_NOSTEAL);
9400     return sv;
9401 }
9402
9403 /*
9404 =for apidoc sv_reset
9405
9406 Underlying implementation for the C<reset> Perl function.
9407 Note that the perl-level function is vaguely deprecated.
9408
9409 =cut
9410 */
9411
9412 void
9413 Perl_sv_reset(pTHX_ const char *s, HV *const stash)
9414 {
9415     PERL_ARGS_ASSERT_SV_RESET;
9416
9417     sv_resetpvn(*s ? s : NULL, strlen(s), stash);
9418 }
9419
9420 void
9421 Perl_sv_resetpvn(pTHX_ const char *s, STRLEN len, HV * const stash)
9422 {
9423     char todo[PERL_UCHAR_MAX+1];
9424     const char *send;
9425
9426     if (!stash || SvTYPE(stash) != SVt_PVHV)
9427         return;
9428
9429     if (!s) {           /* reset ?? searches */
9430         MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
9431         if (mg) {
9432             const U32 count = mg->mg_len / sizeof(PMOP**);
9433             PMOP **pmp = (PMOP**) mg->mg_ptr;
9434             PMOP *const *const end = pmp + count;
9435
9436             while (pmp < end) {
9437 #ifdef USE_ITHREADS
9438                 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
9439 #else
9440                 (*pmp)->op_pmflags &= ~PMf_USED;
9441 #endif
9442                 ++pmp;
9443             }
9444         }
9445         return;
9446     }
9447
9448     /* reset variables */
9449
9450     if (!HvARRAY(stash))
9451         return;
9452
9453     Zero(todo, 256, char);
9454     send = s + len;
9455     while (s < send) {
9456         I32 max;
9457         I32 i = (unsigned char)*s;
9458         if (s[1] == '-') {
9459             s += 2;
9460         }
9461         max = (unsigned char)*s++;
9462         for ( ; i <= max; i++) {
9463             todo[i] = 1;
9464         }
9465         for (i = 0; i <= (I32) HvMAX(stash); i++) {
9466             HE *entry;
9467             for (entry = HvARRAY(stash)[i];
9468                  entry;
9469                  entry = HeNEXT(entry))
9470             {
9471                 GV *gv;
9472                 SV *sv;
9473
9474                 if (!todo[(U8)*HeKEY(entry)])
9475                     continue;
9476                 gv = MUTABLE_GV(HeVAL(entry));
9477                 sv = GvSV(gv);
9478                 if (sv && !SvREADONLY(sv)) {
9479                     SV_CHECK_THINKFIRST_COW_DROP(sv);
9480                     if (!isGV(sv)) SvOK_off(sv);
9481                 }
9482                 if (GvAV(gv)) {
9483                     av_clear(GvAV(gv));
9484                 }
9485                 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
9486                     hv_clear(GvHV(gv));
9487                 }
9488             }
9489         }
9490     }
9491 }
9492
9493 /*
9494 =for apidoc sv_2io
9495
9496 Using various gambits, try to get an IO from an SV: the IO slot if its a
9497 GV; or the recursive result if we're an RV; or the IO slot of the symbol
9498 named after the PV if we're a string.
9499
9500 'Get' magic is ignored on the sv passed in, but will be called on
9501 C<SvRV(sv)> if sv is an RV.
9502
9503 =cut
9504 */
9505
9506 IO*
9507 Perl_sv_2io(pTHX_ SV *const sv)
9508 {
9509     IO* io;
9510     GV* gv;
9511
9512     PERL_ARGS_ASSERT_SV_2IO;
9513
9514     switch (SvTYPE(sv)) {
9515     case SVt_PVIO:
9516         io = MUTABLE_IO(sv);
9517         break;
9518     case SVt_PVGV:
9519     case SVt_PVLV:
9520         if (isGV_with_GP(sv)) {
9521             gv = MUTABLE_GV(sv);
9522             io = GvIO(gv);
9523             if (!io)
9524                 Perl_croak(aTHX_ "Bad filehandle: %"HEKf,
9525                                     HEKfARG(GvNAME_HEK(gv)));
9526             break;
9527         }
9528         /* FALLTHROUGH */
9529     default:
9530         if (!SvOK(sv))
9531             Perl_croak(aTHX_ PL_no_usym, "filehandle");
9532         if (SvROK(sv)) {
9533             SvGETMAGIC(SvRV(sv));
9534             return sv_2io(SvRV(sv));
9535         }
9536         gv = gv_fetchsv_nomg(sv, 0, SVt_PVIO);
9537         if (gv)
9538             io = GvIO(gv);
9539         else
9540             io = 0;
9541         if (!io) {
9542             SV *newsv = sv;
9543             if (SvGMAGICAL(sv)) {
9544                 newsv = sv_newmortal();
9545                 sv_setsv_nomg(newsv, sv);
9546             }
9547             Perl_croak(aTHX_ "Bad filehandle: %"SVf, SVfARG(newsv));
9548         }
9549         break;
9550     }
9551     return io;
9552 }
9553
9554 /*
9555 =for apidoc sv_2cv
9556
9557 Using various gambits, try to get a CV from an SV; in addition, try if
9558 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
9559 The flags in C<lref> are passed to gv_fetchsv.
9560
9561 =cut
9562 */
9563
9564 CV *
9565 Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
9566 {
9567     GV *gv = NULL;
9568     CV *cv = NULL;
9569
9570     PERL_ARGS_ASSERT_SV_2CV;
9571
9572     if (!sv) {
9573         *st = NULL;
9574         *gvp = NULL;
9575         return NULL;
9576     }
9577     switch (SvTYPE(sv)) {
9578     case SVt_PVCV:
9579         *st = CvSTASH(sv);
9580         *gvp = NULL;
9581         return MUTABLE_CV(sv);
9582     case SVt_PVHV:
9583     case SVt_PVAV:
9584         *st = NULL;
9585         *gvp = NULL;
9586         return NULL;
9587     default:
9588         SvGETMAGIC(sv);
9589         if (SvROK(sv)) {
9590             if (SvAMAGIC(sv))
9591                 sv = amagic_deref_call(sv, to_cv_amg);
9592
9593             sv = SvRV(sv);
9594             if (SvTYPE(sv) == SVt_PVCV) {
9595                 cv = MUTABLE_CV(sv);
9596                 *gvp = NULL;
9597                 *st = CvSTASH(cv);
9598                 return cv;
9599             }
9600             else if(SvGETMAGIC(sv), isGV_with_GP(sv))
9601                 gv = MUTABLE_GV(sv);
9602             else
9603                 Perl_croak(aTHX_ "Not a subroutine reference");
9604         }
9605         else if (isGV_with_GP(sv)) {
9606             gv = MUTABLE_GV(sv);
9607         }
9608         else {
9609             gv = gv_fetchsv_nomg(sv, lref, SVt_PVCV);
9610         }
9611         *gvp = gv;
9612         if (!gv) {
9613             *st = NULL;
9614             return NULL;
9615         }
9616         /* Some flags to gv_fetchsv mean don't really create the GV  */
9617         if (!isGV_with_GP(gv)) {
9618             *st = NULL;
9619             return NULL;
9620         }
9621         *st = GvESTASH(gv);
9622         if (lref & ~GV_ADDMG && !GvCVu(gv)) {
9623             /* XXX this is probably not what they think they're getting.
9624              * It has the same effect as "sub name;", i.e. just a forward
9625              * declaration! */
9626             newSTUB(gv,0);
9627         }
9628         return GvCVu(gv);
9629     }
9630 }
9631
9632 /*
9633 =for apidoc sv_true
9634
9635 Returns true if the SV has a true value by Perl's rules.
9636 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
9637 instead use an in-line version.
9638
9639 =cut
9640 */
9641
9642 I32
9643 Perl_sv_true(pTHX_ SV *const sv)
9644 {
9645     if (!sv)
9646         return 0;
9647     if (SvPOK(sv)) {
9648         const XPV* const tXpv = (XPV*)SvANY(sv);
9649         if (tXpv &&
9650                 (tXpv->xpv_cur > 1 ||
9651                 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
9652             return 1;
9653         else
9654             return 0;
9655     }
9656     else {
9657         if (SvIOK(sv))
9658             return SvIVX(sv) != 0;
9659         else {
9660             if (SvNOK(sv))
9661                 return SvNVX(sv) != 0.0;
9662             else
9663                 return sv_2bool(sv);
9664         }
9665     }
9666 }
9667
9668 /*
9669 =for apidoc sv_pvn_force
9670
9671 Get a sensible string out of the SV somehow.
9672 A private implementation of the C<SvPV_force> macro for compilers which
9673 can't cope with complex macro expressions.  Always use the macro instead.
9674
9675 =for apidoc sv_pvn_force_flags
9676
9677 Get a sensible string out of the SV somehow.
9678 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
9679 appropriate, else not.  C<sv_pvn_force> and C<sv_pvn_force_nomg> are
9680 implemented in terms of this function.
9681 You normally want to use the various wrapper macros instead: see
9682 C<SvPV_force> and C<SvPV_force_nomg>
9683
9684 =cut
9685 */
9686
9687 char *
9688 Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
9689 {
9690     PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
9691
9692     if (flags & SV_GMAGIC) SvGETMAGIC(sv);
9693     if (SvTHINKFIRST(sv) && (!SvROK(sv) || SvREADONLY(sv)))
9694         sv_force_normal_flags(sv, 0);
9695
9696     if (SvPOK(sv)) {
9697         if (lp)
9698             *lp = SvCUR(sv);
9699     }
9700     else {
9701         char *s;
9702         STRLEN len;
9703  
9704         if (SvTYPE(sv) > SVt_PVLV
9705             || isGV_with_GP(sv))
9706             /* diag_listed_as: Can't coerce %s to %s in %s */
9707             Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
9708                 OP_DESC(PL_op));
9709         s = sv_2pv_flags(sv, &len, flags &~ SV_GMAGIC);
9710         if (!s) {
9711           s = (char *)"";
9712         }
9713         if (lp)
9714             *lp = len;
9715
9716         if (SvTYPE(sv) < SVt_PV ||
9717             s != SvPVX_const(sv)) {     /* Almost, but not quite, sv_setpvn() */
9718             if (SvROK(sv))
9719                 sv_unref(sv);
9720             SvUPGRADE(sv, SVt_PV);              /* Never FALSE */
9721             SvGROW(sv, len + 1);
9722             Move(s,SvPVX(sv),len,char);
9723             SvCUR_set(sv, len);
9724             SvPVX(sv)[len] = '\0';
9725         }
9726         if (!SvPOK(sv)) {
9727             SvPOK_on(sv);               /* validate pointer */
9728             SvTAINT(sv);
9729             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%"UVxf" 2pv(%s)\n",
9730                                   PTR2UV(sv),SvPVX_const(sv)));
9731         }
9732     }
9733     (void)SvPOK_only_UTF8(sv);
9734     return SvPVX_mutable(sv);
9735 }
9736
9737 /*
9738 =for apidoc sv_pvbyten_force
9739
9740 The backend for the C<SvPVbytex_force> macro.  Always use the macro
9741 instead.
9742
9743 =cut
9744 */
9745
9746 char *
9747 Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
9748 {
9749     PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
9750
9751     sv_pvn_force(sv,lp);
9752     sv_utf8_downgrade(sv,0);
9753     *lp = SvCUR(sv);
9754     return SvPVX(sv);
9755 }
9756
9757 /*
9758 =for apidoc sv_pvutf8n_force
9759
9760 The backend for the C<SvPVutf8x_force> macro.  Always use the macro
9761 instead.
9762
9763 =cut
9764 */
9765
9766 char *
9767 Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
9768 {
9769     PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
9770
9771     sv_pvn_force(sv,0);
9772     sv_utf8_upgrade_nomg(sv);
9773     *lp = SvCUR(sv);
9774     return SvPVX(sv);
9775 }
9776
9777 /*
9778 =for apidoc sv_reftype
9779
9780 Returns a string describing what the SV is a reference to.
9781
9782 =cut
9783 */
9784
9785 const char *
9786 Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
9787 {
9788     PERL_ARGS_ASSERT_SV_REFTYPE;
9789     if (ob && SvOBJECT(sv)) {
9790         return SvPV_nolen_const(sv_ref(NULL, sv, ob));
9791     }
9792     else {
9793         /* WARNING - There is code, for instance in mg.c, that assumes that
9794          * the only reason that sv_reftype(sv,0) would return a string starting
9795          * with 'L' or 'S' is that it is a LVALUE or a SCALAR.
9796          * Yes this a dodgy way to do type checking, but it saves practically reimplementing
9797          * this routine inside other subs, and it saves time.
9798          * Do not change this assumption without searching for "dodgy type check" in
9799          * the code.
9800          * - Yves */
9801         switch (SvTYPE(sv)) {
9802         case SVt_NULL:
9803         case SVt_IV:
9804         case SVt_NV:
9805         case SVt_PV:
9806         case SVt_PVIV:
9807         case SVt_PVNV:
9808         case SVt_PVMG:
9809                                 if (SvVOK(sv))
9810                                     return "VSTRING";
9811                                 if (SvROK(sv))
9812                                     return "REF";
9813                                 else
9814                                     return "SCALAR";
9815
9816         case SVt_PVLV:          return (char *)  (SvROK(sv) ? "REF"
9817                                 /* tied lvalues should appear to be
9818                                  * scalars for backwards compatibility */
9819                                 : (isALPHA_FOLD_EQ(LvTYPE(sv), 't'))
9820                                     ? "SCALAR" : "LVALUE");
9821         case SVt_PVAV:          return "ARRAY";
9822         case SVt_PVHV:          return "HASH";
9823         case SVt_PVCV:          return "CODE";
9824         case SVt_PVGV:          return (char *) (isGV_with_GP(sv)
9825                                     ? "GLOB" : "SCALAR");
9826         case SVt_PVFM:          return "FORMAT";
9827         case SVt_PVIO:          return "IO";
9828         case SVt_INVLIST:       return "INVLIST";
9829         case SVt_REGEXP:        return "REGEXP";
9830         default:                return "UNKNOWN";
9831         }
9832     }
9833 }
9834
9835 /*
9836 =for apidoc sv_ref
9837
9838 Returns a SV describing what the SV passed in is a reference to.
9839
9840 =cut
9841 */
9842
9843 SV *
9844 Perl_sv_ref(pTHX_ SV *dst, const SV *const sv, const int ob)
9845 {
9846     PERL_ARGS_ASSERT_SV_REF;
9847
9848     if (!dst)
9849         dst = sv_newmortal();
9850
9851     if (ob && SvOBJECT(sv)) {
9852         HvNAME_get(SvSTASH(sv))
9853                     ? sv_sethek(dst, HvNAME_HEK(SvSTASH(sv)))
9854                     : sv_setpvn(dst, "__ANON__", 8);
9855     }
9856     else {
9857         const char * reftype = sv_reftype(sv, 0);
9858         sv_setpv(dst, reftype);
9859     }
9860     return dst;
9861 }
9862
9863 /*
9864 =for apidoc sv_isobject
9865
9866 Returns a boolean indicating whether the SV is an RV pointing to a blessed
9867 object.  If the SV is not an RV, or if the object is not blessed, then this
9868 will return false.
9869
9870 =cut
9871 */
9872
9873 int
9874 Perl_sv_isobject(pTHX_ SV *sv)
9875 {
9876     if (!sv)
9877         return 0;
9878     SvGETMAGIC(sv);
9879     if (!SvROK(sv))
9880         return 0;
9881     sv = SvRV(sv);
9882     if (!SvOBJECT(sv))
9883         return 0;
9884     return 1;
9885 }
9886
9887 /*
9888 =for apidoc sv_isa
9889
9890 Returns a boolean indicating whether the SV is blessed into the specified
9891 class.  This does not check for subtypes; use C<sv_derived_from> to verify
9892 an inheritance relationship.
9893
9894 =cut
9895 */
9896
9897 int
9898 Perl_sv_isa(pTHX_ SV *sv, const char *const name)
9899 {
9900     const char *hvname;
9901
9902     PERL_ARGS_ASSERT_SV_ISA;
9903
9904     if (!sv)
9905         return 0;
9906     SvGETMAGIC(sv);
9907     if (!SvROK(sv))
9908         return 0;
9909     sv = SvRV(sv);
9910     if (!SvOBJECT(sv))
9911         return 0;
9912     hvname = HvNAME_get(SvSTASH(sv));
9913     if (!hvname)
9914         return 0;
9915
9916     return strEQ(hvname, name);
9917 }
9918
9919 /*
9920 =for apidoc newSVrv
9921
9922 Creates a new SV for the existing RV, C<rv>, to point to.  If C<rv> is not an
9923 RV then it will be upgraded to one.  If C<classname> is non-null then the new
9924 SV will be blessed in the specified package.  The new SV is returned and its
9925 reference count is 1.  The reference count 1 is owned by C<rv>.
9926
9927 =cut
9928 */
9929
9930 SV*
9931 Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
9932 {
9933     SV *sv;
9934
9935     PERL_ARGS_ASSERT_NEWSVRV;
9936
9937     new_SV(sv);
9938
9939     SV_CHECK_THINKFIRST_COW_DROP(rv);
9940
9941     if (UNLIKELY( SvTYPE(rv) >= SVt_PVMG )) {
9942         const U32 refcnt = SvREFCNT(rv);
9943         SvREFCNT(rv) = 0;
9944         sv_clear(rv);
9945         SvFLAGS(rv) = 0;
9946         SvREFCNT(rv) = refcnt;
9947
9948         sv_upgrade(rv, SVt_IV);
9949     } else if (SvROK(rv)) {
9950         SvREFCNT_dec(SvRV(rv));
9951     } else {
9952         prepare_SV_for_RV(rv);
9953     }
9954
9955     SvOK_off(rv);
9956     SvRV_set(rv, sv);
9957     SvROK_on(rv);
9958
9959     if (classname) {
9960         HV* const stash = gv_stashpv(classname, GV_ADD);
9961         (void)sv_bless(rv, stash);
9962     }
9963     return sv;
9964 }
9965
9966 SV *
9967 Perl_newSVavdefelem(pTHX_ AV *av, SSize_t ix, bool extendible)
9968 {
9969     SV * const lv = newSV_type(SVt_PVLV);
9970     PERL_ARGS_ASSERT_NEWSVAVDEFELEM;
9971     LvTYPE(lv) = 'y';
9972     sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
9973     LvTARG(lv) = SvREFCNT_inc_simple_NN(av);
9974     LvSTARGOFF(lv) = ix;
9975     LvTARGLEN(lv) = extendible ? 1 : (STRLEN)UV_MAX;
9976     return lv;
9977 }
9978
9979 /*
9980 =for apidoc sv_setref_pv
9981
9982 Copies a pointer into a new SV, optionally blessing the SV.  The C<rv>
9983 argument will be upgraded to an RV.  That RV will be modified to point to
9984 the new SV.  If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
9985 into the SV.  The C<classname> argument indicates the package for the
9986 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
9987 will have a reference count of 1, and the RV will be returned.
9988
9989 Do not use with other Perl types such as HV, AV, SV, CV, because those
9990 objects will become corrupted by the pointer copy process.
9991
9992 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
9993
9994 =cut
9995 */
9996
9997 SV*
9998 Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
9999 {
10000     PERL_ARGS_ASSERT_SV_SETREF_PV;
10001
10002     if (!pv) {
10003         sv_setsv(rv, &PL_sv_undef);
10004         SvSETMAGIC(rv);
10005     }
10006     else
10007         sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
10008     return rv;
10009 }
10010
10011 /*
10012 =for apidoc sv_setref_iv
10013
10014 Copies an integer into a new SV, optionally blessing the SV.  The C<rv>
10015 argument will be upgraded to an RV.  That RV will be modified to point to
10016 the new SV.  The C<classname> argument indicates the package for the
10017 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10018 will have a reference count of 1, and the RV will be returned.
10019
10020 =cut
10021 */
10022
10023 SV*
10024 Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
10025 {
10026     PERL_ARGS_ASSERT_SV_SETREF_IV;
10027
10028     sv_setiv(newSVrv(rv,classname), iv);
10029     return rv;
10030 }
10031
10032 /*
10033 =for apidoc sv_setref_uv
10034
10035 Copies an unsigned integer into a new SV, optionally blessing the SV.  The C<rv>
10036 argument will be upgraded to an RV.  That RV will be modified to point to
10037 the new SV.  The C<classname> argument indicates the package for the
10038 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10039 will have a reference count of 1, and the RV will be returned.
10040
10041 =cut
10042 */
10043
10044 SV*
10045 Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
10046 {
10047     PERL_ARGS_ASSERT_SV_SETREF_UV;
10048
10049     sv_setuv(newSVrv(rv,classname), uv);
10050     return rv;
10051 }
10052
10053 /*
10054 =for apidoc sv_setref_nv
10055
10056 Copies a double into a new SV, optionally blessing the SV.  The C<rv>
10057 argument will be upgraded to an RV.  That RV will be modified to point to
10058 the new SV.  The C<classname> argument indicates the package for the
10059 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10060 will have a reference count of 1, and the RV will be returned.
10061
10062 =cut
10063 */
10064
10065 SV*
10066 Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
10067 {
10068     PERL_ARGS_ASSERT_SV_SETREF_NV;
10069
10070     sv_setnv(newSVrv(rv,classname), nv);
10071     return rv;
10072 }
10073
10074 /*
10075 =for apidoc sv_setref_pvn
10076
10077 Copies a string into a new SV, optionally blessing the SV.  The length of the
10078 string must be specified with C<n>.  The C<rv> argument will be upgraded to
10079 an RV.  That RV will be modified to point to the new SV.  The C<classname>
10080 argument indicates the package for the blessing.  Set C<classname> to
10081 C<NULL> to avoid the blessing.  The new SV will have a reference count
10082 of 1, and the RV will be returned.
10083
10084 Note that C<sv_setref_pv> copies the pointer while this copies the string.
10085
10086 =cut
10087 */
10088
10089 SV*
10090 Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
10091                    const char *const pv, const STRLEN n)
10092 {
10093     PERL_ARGS_ASSERT_SV_SETREF_PVN;
10094
10095     sv_setpvn(newSVrv(rv,classname), pv, n);
10096     return rv;
10097 }
10098
10099 /*
10100 =for apidoc sv_bless
10101
10102 Blesses an SV into a specified package.  The SV must be an RV.  The package
10103 must be designated by its stash (see C<gv_stashpv()>).  The reference count
10104 of the SV is unaffected.
10105
10106 =cut
10107 */
10108
10109 SV*
10110 Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
10111 {
10112     SV *tmpRef;
10113     HV *oldstash = NULL;
10114
10115     PERL_ARGS_ASSERT_SV_BLESS;
10116
10117     SvGETMAGIC(sv);
10118     if (!SvROK(sv))
10119         Perl_croak(aTHX_ "Can't bless non-reference value");
10120     tmpRef = SvRV(sv);
10121     if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY|SVf_PROTECT)) {
10122         if (SvREADONLY(tmpRef))
10123             Perl_croak_no_modify();
10124         if (SvOBJECT(tmpRef)) {
10125             oldstash = SvSTASH(tmpRef);
10126         }
10127     }
10128     SvOBJECT_on(tmpRef);
10129     SvUPGRADE(tmpRef, SVt_PVMG);
10130     SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
10131     SvREFCNT_dec(oldstash);
10132
10133     if(SvSMAGICAL(tmpRef))
10134         if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
10135             mg_set(tmpRef);
10136
10137
10138
10139     return sv;
10140 }
10141
10142 /* Downgrades a PVGV to a PVMG. If it's actually a PVLV, we leave the type
10143  * as it is after unglobbing it.
10144  */
10145
10146 PERL_STATIC_INLINE void
10147 S_sv_unglob(pTHX_ SV *const sv, U32 flags)
10148 {
10149     void *xpvmg;
10150     HV *stash;
10151     SV * const temp = flags & SV_COW_DROP_PV ? NULL : sv_newmortal();
10152
10153     PERL_ARGS_ASSERT_SV_UNGLOB;
10154
10155     assert(SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV);
10156     SvFAKE_off(sv);
10157     if (!(flags & SV_COW_DROP_PV))
10158         gv_efullname3(temp, MUTABLE_GV(sv), "*");
10159
10160     SvREFCNT_inc_simple_void_NN(sv_2mortal(sv));
10161     if (GvGP(sv)) {
10162         if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
10163            && HvNAME_get(stash))
10164             mro_method_changed_in(stash);
10165         gp_free(MUTABLE_GV(sv));
10166     }
10167     if (GvSTASH(sv)) {
10168         sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
10169         GvSTASH(sv) = NULL;
10170     }
10171     GvMULTI_off(sv);
10172     if (GvNAME_HEK(sv)) {
10173         unshare_hek(GvNAME_HEK(sv));
10174     }
10175     isGV_with_GP_off(sv);
10176
10177     if(SvTYPE(sv) == SVt_PVGV) {
10178         /* need to keep SvANY(sv) in the right arena */
10179         xpvmg = new_XPVMG();
10180         StructCopy(SvANY(sv), xpvmg, XPVMG);
10181         del_XPVGV(SvANY(sv));
10182         SvANY(sv) = xpvmg;
10183
10184         SvFLAGS(sv) &= ~SVTYPEMASK;
10185         SvFLAGS(sv) |= SVt_PVMG;
10186     }
10187
10188     /* Intentionally not calling any local SET magic, as this isn't so much a
10189        set operation as merely an internal storage change.  */
10190     if (flags & SV_COW_DROP_PV) SvOK_off(sv);
10191     else sv_setsv_flags(sv, temp, 0);
10192
10193     if ((const GV *)sv == PL_last_in_gv)
10194         PL_last_in_gv = NULL;
10195     else if ((const GV *)sv == PL_statgv)
10196         PL_statgv = NULL;
10197 }
10198
10199 /*
10200 =for apidoc sv_unref_flags
10201
10202 Unsets the RV status of the SV, and decrements the reference count of
10203 whatever was being referenced by the RV.  This can almost be thought of
10204 as a reversal of C<newSVrv>.  The C<cflags> argument can contain
10205 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
10206 (otherwise the decrementing is conditional on the reference count being
10207 different from one or the reference being a readonly SV).
10208 See C<SvROK_off>.
10209
10210 =cut
10211 */
10212
10213 void
10214 Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
10215 {
10216     SV* const target = SvRV(ref);
10217
10218     PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
10219
10220     if (SvWEAKREF(ref)) {
10221         sv_del_backref(target, ref);
10222         SvWEAKREF_off(ref);
10223         SvRV_set(ref, NULL);
10224         return;
10225     }
10226     SvRV_set(ref, NULL);
10227     SvROK_off(ref);
10228     /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
10229        assigned to as BEGIN {$a = \"Foo"} will fail.  */
10230     if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
10231         SvREFCNT_dec_NN(target);
10232     else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
10233         sv_2mortal(target);     /* Schedule for freeing later */
10234 }
10235
10236 /*
10237 =for apidoc sv_untaint
10238
10239 Untaint an SV.  Use C<SvTAINTED_off> instead.
10240
10241 =cut
10242 */
10243
10244 void
10245 Perl_sv_untaint(pTHX_ SV *const sv)
10246 {
10247     PERL_ARGS_ASSERT_SV_UNTAINT;
10248     PERL_UNUSED_CONTEXT;
10249
10250     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
10251         MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
10252         if (mg)
10253             mg->mg_len &= ~1;
10254     }
10255 }
10256
10257 /*
10258 =for apidoc sv_tainted
10259
10260 Test an SV for taintedness.  Use C<SvTAINTED> instead.
10261
10262 =cut
10263 */
10264
10265 bool
10266 Perl_sv_tainted(pTHX_ SV *const sv)
10267 {
10268     PERL_ARGS_ASSERT_SV_TAINTED;
10269     PERL_UNUSED_CONTEXT;
10270
10271     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
10272         const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
10273         if (mg && (mg->mg_len & 1) )
10274             return TRUE;
10275     }
10276     return FALSE;
10277 }
10278
10279 /*
10280 =for apidoc sv_setpviv
10281
10282 Copies an integer into the given SV, also updating its string value.
10283 Does not handle 'set' magic.  See C<sv_setpviv_mg>.
10284
10285 =cut
10286 */
10287
10288 void
10289 Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
10290 {
10291     char buf[TYPE_CHARS(UV)];
10292     char *ebuf;
10293     char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
10294
10295     PERL_ARGS_ASSERT_SV_SETPVIV;
10296
10297     sv_setpvn(sv, ptr, ebuf - ptr);
10298 }
10299
10300 /*
10301 =for apidoc sv_setpviv_mg
10302
10303 Like C<sv_setpviv>, but also handles 'set' magic.
10304
10305 =cut
10306 */
10307
10308 void
10309 Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
10310 {
10311     PERL_ARGS_ASSERT_SV_SETPVIV_MG;
10312
10313     sv_setpviv(sv, iv);
10314     SvSETMAGIC(sv);
10315 }
10316
10317 #if defined(PERL_IMPLICIT_CONTEXT)
10318
10319 /* pTHX_ magic can't cope with varargs, so this is a no-context
10320  * version of the main function, (which may itself be aliased to us).
10321  * Don't access this version directly.
10322  */
10323
10324 void
10325 Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
10326 {
10327     dTHX;
10328     va_list args;
10329
10330     PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
10331
10332     va_start(args, pat);
10333     sv_vsetpvf(sv, pat, &args);
10334     va_end(args);
10335 }
10336
10337 /* pTHX_ magic can't cope with varargs, so this is a no-context
10338  * version of the main function, (which may itself be aliased to us).
10339  * Don't access this version directly.
10340  */
10341
10342 void
10343 Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10344 {
10345     dTHX;
10346     va_list args;
10347
10348     PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
10349
10350     va_start(args, pat);
10351     sv_vsetpvf_mg(sv, pat, &args);
10352     va_end(args);
10353 }
10354 #endif
10355
10356 /*
10357 =for apidoc sv_setpvf
10358
10359 Works like C<sv_catpvf> but copies the text into the SV instead of
10360 appending it.  Does not handle 'set' magic.  See C<sv_setpvf_mg>.
10361
10362 =cut
10363 */
10364
10365 void
10366 Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
10367 {
10368     va_list args;
10369
10370     PERL_ARGS_ASSERT_SV_SETPVF;
10371
10372     va_start(args, pat);
10373     sv_vsetpvf(sv, pat, &args);
10374     va_end(args);
10375 }
10376
10377 /*
10378 =for apidoc sv_vsetpvf
10379
10380 Works like C<sv_vcatpvf> but copies the text into the SV instead of
10381 appending it.  Does not handle 'set' magic.  See C<sv_vsetpvf_mg>.
10382
10383 Usually used via its frontend C<sv_setpvf>.
10384
10385 =cut
10386 */
10387
10388 void
10389 Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10390 {
10391     PERL_ARGS_ASSERT_SV_VSETPVF;
10392
10393     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10394 }
10395
10396 /*
10397 =for apidoc sv_setpvf_mg
10398
10399 Like C<sv_setpvf>, but also handles 'set' magic.
10400
10401 =cut
10402 */
10403
10404 void
10405 Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10406 {
10407     va_list args;
10408
10409     PERL_ARGS_ASSERT_SV_SETPVF_MG;
10410
10411     va_start(args, pat);
10412     sv_vsetpvf_mg(sv, pat, &args);
10413     va_end(args);
10414 }
10415
10416 /*
10417 =for apidoc sv_vsetpvf_mg
10418
10419 Like C<sv_vsetpvf>, but also handles 'set' magic.
10420
10421 Usually used via its frontend C<sv_setpvf_mg>.
10422
10423 =cut
10424 */
10425
10426 void
10427 Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10428 {
10429     PERL_ARGS_ASSERT_SV_VSETPVF_MG;
10430
10431     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10432     SvSETMAGIC(sv);
10433 }
10434
10435 #if defined(PERL_IMPLICIT_CONTEXT)
10436
10437 /* pTHX_ magic can't cope with varargs, so this is a no-context
10438  * version of the main function, (which may itself be aliased to us).
10439  * Don't access this version directly.
10440  */
10441
10442 void
10443 Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
10444 {
10445     dTHX;
10446     va_list args;
10447
10448     PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
10449
10450     va_start(args, pat);
10451     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10452     va_end(args);
10453 }
10454
10455 /* pTHX_ magic can't cope with varargs, so this is a no-context
10456  * version of the main function, (which may itself be aliased to us).
10457  * Don't access this version directly.
10458  */
10459
10460 void
10461 Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10462 {
10463     dTHX;
10464     va_list args;
10465
10466     PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
10467
10468     va_start(args, pat);
10469     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10470     SvSETMAGIC(sv);
10471     va_end(args);
10472 }
10473 #endif
10474
10475 /*
10476 =for apidoc sv_catpvf
10477
10478 Processes its arguments like C<sv_catpvfn>, and appends the formatted
10479 output to an SV.  As with C<sv_catpvfn> called with a non-null C-style
10480 variable argument list, argument reordering is not supported.
10481 If the appended data contains "wide" characters
10482 (including, but not limited to, SVs with a UTF-8 PV formatted with %s,
10483 and characters >255 formatted with %c), the original SV might get
10484 upgraded to UTF-8.  Handles 'get' magic, but not 'set' magic.  See
10485 C<sv_catpvf_mg>.  If the original SV was UTF-8, the pattern should be
10486 valid UTF-8; if the original SV was bytes, the pattern should be too.
10487
10488 =cut */
10489
10490 void
10491 Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
10492 {
10493     va_list args;
10494
10495     PERL_ARGS_ASSERT_SV_CATPVF;
10496
10497     va_start(args, pat);
10498     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10499     va_end(args);
10500 }
10501
10502 /*
10503 =for apidoc sv_vcatpvf
10504
10505 Processes its arguments like C<sv_catpvfn> called with a non-null C-style
10506 variable argument list, and appends the formatted
10507 to an SV.  Does not handle 'set' magic.  See C<sv_vcatpvf_mg>.
10508
10509 Usually used via its frontend C<sv_catpvf>.
10510
10511 =cut
10512 */
10513
10514 void
10515 Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10516 {
10517     PERL_ARGS_ASSERT_SV_VCATPVF;
10518
10519     sv_vcatpvfn_flags(sv, pat, strlen(pat), args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10520 }
10521
10522 /*
10523 =for apidoc sv_catpvf_mg
10524
10525 Like C<sv_catpvf>, but also handles 'set' magic.
10526
10527 =cut
10528 */
10529
10530 void
10531 Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10532 {
10533     va_list args;
10534
10535     PERL_ARGS_ASSERT_SV_CATPVF_MG;
10536
10537     va_start(args, pat);
10538     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10539     SvSETMAGIC(sv);
10540     va_end(args);
10541 }
10542
10543 /*
10544 =for apidoc sv_vcatpvf_mg
10545
10546 Like C<sv_vcatpvf>, but also handles 'set' magic.
10547
10548 Usually used via its frontend C<sv_catpvf_mg>.
10549
10550 =cut
10551 */
10552
10553 void
10554 Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10555 {
10556     PERL_ARGS_ASSERT_SV_VCATPVF_MG;
10557
10558     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10559     SvSETMAGIC(sv);
10560 }
10561
10562 /*
10563 =for apidoc sv_vsetpvfn
10564
10565 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
10566 appending it.
10567
10568 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
10569
10570 =cut
10571 */
10572
10573 void
10574 Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10575                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10576 {
10577     PERL_ARGS_ASSERT_SV_VSETPVFN;
10578
10579     sv_setpvs(sv, "");
10580     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, 0);
10581 }
10582
10583
10584 /*
10585  * Warn of missing argument to sprintf. The value used in place of such
10586  * arguments should be &PL_sv_no; an undefined value would yield
10587  * inappropriate "use of uninit" warnings [perl #71000].
10588  */
10589 STATIC void
10590 S_warn_vcatpvfn_missing_argument(pTHX) {
10591     if (ckWARN(WARN_MISSING)) {
10592         Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
10593                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
10594     }
10595 }
10596
10597
10598 STATIC I32
10599 S_expect_number(pTHX_ char **const pattern)
10600 {
10601     I32 var = 0;
10602
10603     PERL_ARGS_ASSERT_EXPECT_NUMBER;
10604
10605     switch (**pattern) {
10606     case '1': case '2': case '3':
10607     case '4': case '5': case '6':
10608     case '7': case '8': case '9':
10609         var = *(*pattern)++ - '0';
10610         while (isDIGIT(**pattern)) {
10611             const I32 tmp = var * 10 + (*(*pattern)++ - '0');
10612             if (tmp < var)
10613                 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
10614             var = tmp;
10615         }
10616     }
10617     return var;
10618 }
10619
10620 STATIC char *
10621 S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
10622 {
10623     const int neg = nv < 0;
10624     UV uv;
10625
10626     PERL_ARGS_ASSERT_F0CONVERT;
10627
10628     if (UNLIKELY(Perl_isinfnan(nv))) {
10629         STRLEN n = S_infnan_2pv(nv, endbuf - *len, *len, 0);
10630         *len = n;
10631         return endbuf - n;
10632     }
10633     if (neg)
10634         nv = -nv;
10635     if (nv < UV_MAX) {
10636         char *p = endbuf;
10637         nv += 0.5;
10638         uv = (UV)nv;
10639         if (uv & 1 && uv == nv)
10640             uv--;                       /* Round to even */
10641         do {
10642             const unsigned dig = uv % 10;
10643             *--p = '0' + dig;
10644         } while (uv /= 10);
10645         if (neg)
10646             *--p = '-';
10647         *len = endbuf - p;
10648         return p;
10649     }
10650     return NULL;
10651 }
10652
10653
10654 /*
10655 =for apidoc sv_vcatpvfn
10656
10657 =for apidoc sv_vcatpvfn_flags
10658
10659 Processes its arguments like C<vsprintf> and appends the formatted output
10660 to an SV.  Uses an array of SVs if the C-style variable argument list is
10661 missing (NULL). Argument reordering (using format specifiers like C<%2$d>
10662 or C<%*2$d>) is supported only when using an array of SVs; using a C-style
10663 C<va_list> argument list with a format string that uses argument reordering
10664 will yield an exception.
10665
10666 When running with taint checks enabled, indicates via
10667 C<maybe_tainted> if results are untrustworthy (often due to the use of
10668 locales).
10669
10670 If called as C<sv_vcatpvfn> or flags include C<SV_GMAGIC>, calls get magic.
10671
10672 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
10673
10674 =cut
10675 */
10676
10677 #define VECTORIZE_ARGS  vecsv = va_arg(*args, SV*);\
10678                         vecstr = (U8*)SvPV_const(vecsv,veclen);\
10679                         vec_utf8 = DO_UTF8(vecsv);
10680
10681 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
10682
10683 void
10684 Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10685                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10686 {
10687     PERL_ARGS_ASSERT_SV_VCATPVFN;
10688
10689     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, SV_GMAGIC|SV_SMAGIC);
10690 }
10691
10692 #ifdef LONGDOUBLE_DOUBLEDOUBLE
10693 /* The first double can be as large as 2**1023, or '1' x '0' x 1023.
10694  * The second double can be as small as 2**-1074, or '0' x 1073 . '1'.
10695  * The sum of them can be '1' . '0' x 2096 . '1', with implied radix point
10696  * after the first 1023 zero bits.
10697  *
10698  * XXX The 2098 is quite large (262.25 bytes) and therefore some sort
10699  * of dynamically growing buffer might be better, start at just 16 bytes
10700  * (for example) and grow only when necessary.  Or maybe just by looking
10701  * at the exponents of the two doubles? */
10702 #  define DOUBLEDOUBLE_MAXBITS 2098
10703 #endif
10704
10705 /* vhex will contain the values (0..15) of the hex digits ("nybbles"
10706  * of 4 bits); 1 for the implicit 1, and the mantissa bits, four bits
10707  * per xdigit.  For the double-double case, this can be rather many.
10708  * The non-double-double-long-double overshoots since all bits of NV
10709  * are not mantissa bits, there are also exponent bits. */
10710 #ifdef LONGDOUBLE_DOUBLEDOUBLE
10711 #  define VHEX_SIZE (3+DOUBLEDOUBLE_MAXBITS/4)
10712 #else
10713 #  define VHEX_SIZE (1+(NVSIZE * 8)/4)
10714 #endif
10715
10716 /* If we do not have a known long double format, (including not using
10717  * long doubles, or long doubles being equal to doubles) then we will
10718  * fall back to the ldexp/frexp route, with which we can retrieve at
10719  * most as many bits as our widest unsigned integer type is.  We try
10720  * to get a 64-bit unsigned integer even if we are not using a 64-bit UV.
10721  *
10722  * (If you want to test the case of UVSIZE == 4, NVSIZE == 8,
10723  *  set the MANTISSATYPE to int and the MANTISSASIZE to 4.)
10724  */
10725 #if defined(HAS_QUAD) && defined(Uquad_t)
10726 #  define MANTISSATYPE Uquad_t
10727 #  define MANTISSASIZE 8
10728 #else
10729 #  define MANTISSATYPE UV
10730 #  define MANTISSASIZE UVSIZE
10731 #endif
10732
10733 #if defined(DOUBLE_LITTLE_ENDIAN) || defined(LONGDOUBLE_LITTLE_ENDIAN)
10734 #  define HEXTRACT_LITTLE_ENDIAN
10735 #elif defined(DOUBLE_BIG_ENDIAN) || defined(LONGDOUBLE_BIG_ENDIAN)
10736 #  define HEXTRACT_BIG_ENDIAN
10737 #else
10738 #  define HEXTRACT_MIX_ENDIAN
10739 #endif
10740
10741 /* S_hextract() is a helper for Perl_sv_vcatpvfn_flags, for extracting
10742  * the hexadecimal values (for %a/%A).  The nv is the NV where the value
10743  * are being extracted from (either directly from the long double in-memory
10744  * presentation, or from the uquad computed via frexp+ldexp).  frexp also
10745  * is used to update the exponent.  vhex is the pointer to the beginning
10746  * of the output buffer (of VHEX_SIZE).
10747  *
10748  * The tricky part is that S_hextract() needs to be called twice:
10749  * the first time with vend as NULL, and the second time with vend as
10750  * the pointer returned by the first call.  What happens is that on
10751  * the first round the output size is computed, and the intended
10752  * extraction sanity checked.  On the second round the actual output
10753  * (the extraction of the hexadecimal values) takes place.
10754  * Sanity failures cause fatal failures during both rounds. */
10755 STATIC U8*
10756 S_hextract(pTHX_ const NV nv, int* exponent, U8* vhex, U8* vend)
10757 {
10758     U8* v = vhex;
10759     int ix;
10760     int ixmin = 0, ixmax = 0;
10761
10762     /* XXX Inf/NaN/denormal handling in the HEXTRACT_IMPLICIT_BIT,
10763      * and elsewhere. */
10764
10765     /* These macros are just to reduce typos, they have multiple
10766      * repetitions below, but usually only one (or sometimes two)
10767      * of them is really being used. */
10768     /* HEXTRACT_OUTPUT() extracts the high nybble first. */
10769 #define HEXTRACT_OUTPUT_HI(ix) (*v++ = nvp[ix] >> 4)
10770 #define HEXTRACT_OUTPUT_LO(ix) (*v++ = nvp[ix] & 0xF)
10771 #define HEXTRACT_OUTPUT(ix) \
10772     STMT_START { \
10773       HEXTRACT_OUTPUT_HI(ix); HEXTRACT_OUTPUT_LO(ix); \
10774    } STMT_END
10775 #define HEXTRACT_COUNT(ix, c) \
10776     STMT_START { \
10777       v += c; if (ix < ixmin) ixmin = ix; else if (ix > ixmax) ixmax = ix; \
10778    } STMT_END
10779 #define HEXTRACT_BYTE(ix) \
10780     STMT_START { \
10781       if (vend) HEXTRACT_OUTPUT(ix); else HEXTRACT_COUNT(ix, 2); \
10782    } STMT_END
10783 #define HEXTRACT_LO_NYBBLE(ix) \
10784     STMT_START { \
10785       if (vend) HEXTRACT_OUTPUT_LO(ix); else HEXTRACT_COUNT(ix, 1); \
10786    } STMT_END
10787     /* HEXTRACT_TOP_NYBBLE is just convenience disguise,
10788      * to make it look less odd when the top bits of a NV
10789      * are extracted using HEXTRACT_LO_NYBBLE: the highest
10790      * order bits can be in the "low nybble" of a byte. */
10791 #define HEXTRACT_TOP_NYBBLE(ix) HEXTRACT_LO_NYBBLE(ix)
10792 #define HEXTRACT_BYTES_LE(a, b) \
10793     for (ix = a; ix >= b; ix--) { HEXTRACT_BYTE(ix); }
10794 #define HEXTRACT_BYTES_BE(a, b) \
10795     for (ix = a; ix <= b; ix++) { HEXTRACT_BYTE(ix); }
10796 #define HEXTRACT_IMPLICIT_BIT(nv) \
10797     STMT_START { \
10798         if (vend) *v++ = ((nv) == 0.0) ? 0 : 1; else v++; \
10799    } STMT_END
10800
10801 /* Most formats do.  Those which don't should undef this. */
10802 #define HEXTRACT_HAS_IMPLICIT_BIT
10803 /* Many formats do.  Those which don't should undef this. */
10804 #define HEXTRACT_HAS_TOP_NYBBLE
10805
10806     /* HEXTRACTSIZE is the maximum number of xdigits. */
10807 #if defined(USE_LONG_DOUBLE) && defined(LONGDOUBLE_DOUBLEDOUBLE)
10808 #  define HEXTRACTSIZE (2+DOUBLEDOUBLE_MAXBITS/4)
10809 #else
10810 #  define HEXTRACTSIZE 2 * NVSIZE
10811 #endif
10812
10813     const U8* vmaxend = vhex + HEXTRACTSIZE;
10814     PERL_UNUSED_VAR(ix); /* might happen */
10815     (void)Perl_frexp(PERL_ABS(nv), exponent);
10816     if (vend && (vend <= vhex || vend > vmaxend)) {
10817         /* diag_listed_as: Hexadecimal float: internal error (%s) */
10818         Perl_croak(aTHX_ "Hexadecimal float: internal error (entry)");
10819     }
10820     {
10821         /* First check if using long doubles. */
10822 #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE)
10823 #  if LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN
10824         /* Used in e.g. VMS and HP-UX IA-64, e.g. -0.1L:
10825          * 9a 99 99 99 99 99 99 99 99 99 99 99 99 99 fb 3f */
10826         /* The bytes 13..0 are the mantissa/fraction,
10827          * the 15,14 are the sign+exponent. */
10828         const U8* nvp = (const U8*)(&nv);
10829         HEXTRACT_IMPLICIT_BIT(nv);
10830 #   undef HEXTRACT_HAS_TOP_NYBBLE
10831         HEXTRACT_BYTES_LE(13, 0);
10832 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN
10833         /* Used in e.g. Solaris Sparc and HP-UX PA-RISC, e.g. -0.1L:
10834          * bf fb 99 99 99 99 99 99 99 99 99 99 99 99 99 9a */
10835         /* The bytes 2..15 are the mantissa/fraction,
10836          * the 0,1 are the sign+exponent. */
10837         const U8* nvp = (const U8*)(&nv);
10838         HEXTRACT_IMPLICIT_BIT(nv);
10839 #   undef HEXTRACT_HAS_TOP_NYBBLE
10840         HEXTRACT_BYTES_BE(2, 15);
10841 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN
10842         /* x86 80-bit "extended precision", 64 bits of mantissa / fraction /
10843          * significand, 15 bits of exponent, 1 bit of sign.  NVSIZE can
10844          * be either 12 (ILP32, Solaris x86) or 16 (LP64, Linux and OS X),
10845          * meaning that 2 or 6 bytes are empty padding. */
10846         /* The bytes 7..0 are the mantissa/fraction */
10847         const U8* nvp = (const U8*)(&nv);
10848 #    undef HEXTRACT_HAS_IMPLICIT_BIT
10849 #    undef HEXTRACT_HAS_TOP_NYBBLE
10850         HEXTRACT_BYTES_LE(7, 0);
10851 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN
10852         /* Does this format ever happen? (Wikipedia says the Motorola
10853          * 6888x math coprocessors used format _like_ this but padded
10854          * to 96 bits with 16 unused bits between the exponent and the
10855          * mantissa.) */
10856         const U8* nvp = (const U8*)(&nv);
10857 #    undef HEXTRACT_HAS_IMPLICIT_BIT
10858 #    undef HEXTRACT_HAS_TOP_NYBBLE
10859         HEXTRACT_BYTES_BE(0, 7);
10860 #  else
10861 #    define HEXTRACT_FALLBACK
10862         /* Double-double format: two doubles next to each other.
10863          * The first double is the high-order one, exactly like
10864          * it would be for a "lone" double.  The second double
10865          * is shifted down using the exponent so that that there
10866          * are no common bits.  The tricky part is that the value
10867          * of the double-double is the SUM of the two doubles and
10868          * the second one can be also NEGATIVE.
10869          *
10870          * Because of this tricky construction the bytewise extraction we
10871          * use for the other long double formats doesn't work, we must
10872          * extract the values bit by bit.
10873          *
10874          * The little-endian double-double is used .. somewhere?
10875          *
10876          * The big endian double-double is used in e.g. PPC/Power (AIX)
10877          * and MIPS (SGI).
10878          *
10879          * The mantissa bits are in two separate stretches, e.g. for -0.1L:
10880          * 9a 99 99 99 99 99 59 bc 9a 99 99 99 99 99 b9 3f (LE)
10881          * 3f b9 99 99 99 99 99 9a bc 59 99 99 99 99 99 9a (BE)
10882          */
10883 #  endif
10884 #else /* #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE) */
10885         /* Using normal doubles, not long doubles.
10886          *
10887          * We generate 4-bit xdigits (nybble/nibble) instead of 8-bit
10888          * bytes, since we might need to handle printf precision, and
10889          * also need to insert the radix. */
10890 #  if NVSIZE == 8
10891 #    ifdef HEXTRACT_LITTLE_ENDIAN
10892         /* 0 1 2 3 4 5 6 7 (MSB = 7, LSB = 0, 6+7 = exponent+sign) */
10893         const U8* nvp = (const U8*)(&nv);
10894         HEXTRACT_IMPLICIT_BIT(nv);
10895         HEXTRACT_TOP_NYBBLE(6);
10896         HEXTRACT_BYTES_LE(5, 0);
10897 #    elif defined(HEXTRACT_BIG_ENDIAN)
10898         /* 7 6 5 4 3 2 1 0 (MSB = 7, LSB = 0, 6+7 = exponent+sign) */
10899         const U8* nvp = (const U8*)(&nv);
10900         HEXTRACT_IMPLICIT_BIT(nv);
10901         HEXTRACT_TOP_NYBBLE(1);
10902         HEXTRACT_BYTES_BE(2, 7);
10903 #    elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_LE_BE
10904         /* 4 5 6 7 0 1 2 3 (MSB = 7, LSB = 0, 6:7 = nybble:exponent:sign) */
10905         const U8* nvp = (const U8*)(&nv);
10906         HEXTRACT_IMPLICIT_BIT(nv);
10907         HEXTRACT_TOP_NYBBLE(2); /* 6 */
10908         HEXTRACT_BYTE(1); /* 5 */
10909         HEXTRACT_BYTE(0); /* 4 */
10910         HEXTRACT_BYTE(7); /* 3 */
10911         HEXTRACT_BYTE(6); /* 2 */
10912         HEXTRACT_BYTE(5); /* 1 */
10913         HEXTRACT_BYTE(4); /* 0 */
10914 #    elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_BE_LE
10915         /* 3 2 1 0 7 6 5 4 (MSB = 7, LSB = 0, 7:6 = sign:exponent:nybble) */
10916         const U8* nvp = (const U8*)(&nv);
10917         HEXTRACT_IMPLICIT_BIT(nv);
10918         HEXTRACT_TOP_NYBBLE(5); /* 6 */
10919         HEXTRACT_BYTE(6); /* 5 */
10920         HEXTRACT_BYTE(7); /* 4 */
10921         HEXTRACT_BYTE(0); /* 3 */
10922         HEXTRACT_BYTE(1); /* 2 */
10923         HEXTRACT_BYTE(2); /* 1 */
10924         HEXTRACT_BYTE(3); /* 0 */
10925 #    else
10926 #      define HEXTRACT_FALLBACK
10927 #    endif
10928 #  else
10929 #    define HEXTRACT_FALLBACK
10930 #  endif
10931 #endif /* #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE) #else */
10932 #  ifdef HEXTRACT_FALLBACK
10933 #    undef HEXTRACT_HAS_TOP_NYBBLE /* Meaningless, but consistent. */
10934         /* The fallback is used for the double-double format, and
10935          * for unknown long double formats, and for unknown double
10936          * formats, or in general unknown NV formats. */
10937         if (nv == (NV)0.0) {
10938             if (vend)
10939                 *v++ = 0;
10940             else
10941                 v++;
10942             *exponent = 0;
10943         }
10944         else {
10945             NV d = nv < 0 ? -nv : nv;
10946             NV e = (NV)1.0;
10947             U8 ha = 0x0; /* hexvalue accumulator */
10948             U8 hd = 0x8; /* hexvalue digit */
10949
10950             /* Shift d and e (and update exponent) so that e <= d < 2*e,
10951              * this is essentially manual frexp(). Multiplying by 0.5 and
10952              * doubling should be lossless in binary floating point. */
10953
10954             *exponent = 1;
10955
10956             while (e > d) {
10957                 e *= (NV)0.5;
10958                 (*exponent)--;
10959             }
10960             /* Now d >= e */
10961
10962             while (d >= e + e) {
10963                 e += e;
10964                 (*exponent)++;
10965             }
10966             /* Now e <= d < 2*e */
10967
10968             /* First extract the leading hexdigit (the implicit bit). */
10969             if (d >= e) {
10970                 d -= e;
10971                 if (vend)
10972                     *v++ = 1;
10973                 else
10974                     v++;
10975             }
10976             else {
10977                 if (vend)
10978                     *v++ = 0;
10979                 else
10980                     v++;
10981             }
10982             e *= (NV)0.5;
10983
10984             /* Then extract the remaining hexdigits. */
10985             while (d > (NV)0.0) {
10986                 if (d >= e) {
10987                     ha |= hd;
10988                     d -= e;
10989                 }
10990                 if (hd == 1) {
10991                     /* Output or count in groups of four bits,
10992                      * that is, when the hexdigit is down to one. */
10993                     if (vend)
10994                         *v++ = ha;
10995                     else
10996                         v++;
10997                     /* Reset the hexvalue. */
10998                     ha = 0x0;
10999                     hd = 0x8;
11000                 }
11001                 else
11002                     hd >>= 1;
11003                 e *= (NV)0.5;
11004             }
11005
11006             /* Flush possible pending hexvalue. */
11007             if (ha) {
11008                 if (vend)
11009                     *v++ = ha;
11010                 else
11011                     v++;
11012             }
11013         }
11014 #  endif
11015     }
11016     /* Croak for various reasons: if the output pointer escaped the
11017      * output buffer, if the extraction index escaped the extraction
11018      * buffer, or if the ending output pointer didn't match the
11019      * previously computed value. */
11020     if (v <= vhex || v - vhex >= VHEX_SIZE ||
11021         /* For double-double the ixmin and ixmax stay at zero,
11022          * which is convenient since the HEXTRACTSIZE is tricky
11023          * for double-double. */
11024         ixmin < 0 || ixmax >= NVSIZE ||
11025         (vend && v != vend)) {
11026         /* diag_listed_as: Hexadecimal float: internal error (%s) */
11027         Perl_croak(aTHX_ "Hexadecimal float: internal error (overflow)");
11028     }
11029     return v;
11030 }
11031
11032 /* Helper for sv_vcatpvfn_flags().  */
11033 #define FETCH_VCATPVFN_ARGUMENT(var, in_range, expr)   \
11034     STMT_START {                                       \
11035         if (in_range)                                  \
11036             (var) = (expr);                            \
11037         else {                                         \
11038             (var) = &PL_sv_no; /* [perl #71000] */     \
11039             arg_missing = TRUE;                        \
11040         }                                              \
11041     } STMT_END
11042
11043 void
11044 Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
11045                        va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted,
11046                        const U32 flags)
11047 {
11048     char *p;
11049     char *q;
11050     const char *patend;
11051     STRLEN origlen;
11052     I32 svix = 0;
11053     static const char nullstr[] = "(null)";
11054     SV *argsv = NULL;
11055     bool has_utf8 = DO_UTF8(sv);    /* has the result utf8? */
11056     const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
11057     SV *nsv = NULL;
11058     /* Times 4: a decimal digit takes more than 3 binary digits.
11059      * NV_DIG: mantissa takes than many decimal digits.
11060      * Plus 32: Playing safe. */
11061     char ebuf[IV_DIG * 4 + NV_DIG + 32];
11062     bool no_redundant_warning = FALSE; /* did we use any explicit format parameter index? */
11063     bool hexfp = FALSE; /* hexadecimal floating point? */
11064
11065     DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
11066
11067     PERL_ARGS_ASSERT_SV_VCATPVFN_FLAGS;
11068     PERL_UNUSED_ARG(maybe_tainted);
11069
11070     if (flags & SV_GMAGIC)
11071         SvGETMAGIC(sv);
11072
11073     /* no matter what, this is a string now */
11074     (void)SvPV_force_nomg(sv, origlen);
11075
11076     /* special-case "", "%s", and "%-p" (SVf - see below) */
11077     if (patlen == 0) {
11078         if (svmax && ckWARN(WARN_REDUNDANT))
11079             Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
11080                         PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
11081         return;
11082     }
11083     if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
11084         if (svmax > 1 && ckWARN(WARN_REDUNDANT))
11085             Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
11086                         PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
11087
11088         if (args) {
11089             const char * const s = va_arg(*args, char*);
11090             sv_catpv_nomg(sv, s ? s : nullstr);
11091         }
11092         else if (svix < svmax) {
11093             /* we want get magic on the source but not the target. sv_catsv can't do that, though */
11094             SvGETMAGIC(*svargs);
11095             sv_catsv_nomg(sv, *svargs);
11096         }
11097         else
11098             S_warn_vcatpvfn_missing_argument(aTHX);
11099         return;
11100     }
11101     if (args && patlen == 3 && pat[0] == '%' &&
11102                 pat[1] == '-' && pat[2] == 'p') {
11103         if (svmax > 1 && ckWARN(WARN_REDUNDANT))
11104             Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
11105                         PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
11106         argsv = MUTABLE_SV(va_arg(*args, void*));
11107         sv_catsv_nomg(sv, argsv);
11108         return;
11109     }
11110
11111 #if !defined(USE_LONG_DOUBLE) && !defined(USE_QUADMATH)
11112     /* special-case "%.<number>[gf]" */
11113     if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
11114          && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
11115         unsigned digits = 0;
11116         const char *pp;
11117
11118         pp = pat + 2;
11119         while (*pp >= '0' && *pp <= '9')
11120             digits = 10 * digits + (*pp++ - '0');
11121
11122         /* XXX: Why do this `svix < svmax` test? Couldn't we just
11123            format the first argument and WARN_REDUNDANT if svmax > 1?
11124            Munged by Nicholas Clark in v5.13.0-209-g95ea86d */
11125         if (pp - pat == (int)patlen - 1 && svix < svmax) {
11126             const NV nv = SvNV(*svargs);
11127             if (LIKELY(!Perl_isinfnan(nv))) {
11128                 if (*pp == 'g') {
11129                     /* Add check for digits != 0 because it seems that some
11130                        gconverts are buggy in this case, and we don't yet have
11131                        a Configure test for this.  */
11132                     if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
11133                         /* 0, point, slack */
11134                         STORE_LC_NUMERIC_SET_TO_NEEDED();
11135                         SNPRINTF_G(nv, ebuf, size, digits);
11136                         sv_catpv_nomg(sv, ebuf);
11137                         if (*ebuf)      /* May return an empty string for digits==0 */
11138                             return;
11139                     }
11140                 } else if (!digits) {
11141                     STRLEN l;
11142
11143                     if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
11144                         sv_catpvn_nomg(sv, p, l);
11145                         return;
11146                     }
11147                 }
11148             }
11149         }
11150     }
11151 #endif /* !USE_LONG_DOUBLE */
11152
11153     if (!args && svix < svmax && DO_UTF8(*svargs))
11154         has_utf8 = TRUE;
11155
11156     patend = (char*)pat + patlen;
11157     for (p = (char*)pat; p < patend; p = q) {
11158         bool alt = FALSE;
11159         bool left = FALSE;
11160         bool vectorize = FALSE;
11161         bool vectorarg = FALSE;
11162         bool vec_utf8 = FALSE;
11163         char fill = ' ';
11164         char plus = 0;
11165         char intsize = 0;
11166         STRLEN width = 0;
11167         STRLEN zeros = 0;
11168         bool has_precis = FALSE;
11169         STRLEN precis = 0;
11170         const I32 osvix = svix;
11171         bool is_utf8 = FALSE;  /* is this item utf8?   */
11172         bool used_explicit_ix = FALSE;
11173         bool arg_missing = FALSE;
11174 #ifdef HAS_LDBL_SPRINTF_BUG
11175         /* This is to try to fix a bug with irix/nonstop-ux/powerux and
11176            with sfio - Allen <allens@cpan.org> */
11177         bool fix_ldbl_sprintf_bug = FALSE;
11178 #endif
11179
11180         char esignbuf[4];
11181         U8 utf8buf[UTF8_MAXBYTES+1];
11182         STRLEN esignlen = 0;
11183
11184         const char *eptr = NULL;
11185         const char *fmtstart;
11186         STRLEN elen = 0;
11187         SV *vecsv = NULL;
11188         const U8 *vecstr = NULL;
11189         STRLEN veclen = 0;
11190         char c = 0;
11191         int i;
11192         unsigned base = 0;
11193         IV iv = 0;
11194         UV uv = 0;
11195         /* We need a long double target in case HAS_LONG_DOUBLE,
11196          * even without USE_LONG_DOUBLE, so that we can printf with
11197          * long double formats, even without NV being long double.
11198          * But we call the target 'fv' instead of 'nv', since most of
11199          * the time it is not (most compilers these days recognize
11200          * "long double", even if only as a synonym for "double").
11201         */
11202 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE && \
11203         defined(PERL_PRIgldbl) && !defined(USE_QUADMATH)
11204         long double fv;
11205 #  ifdef Perl_isfinitel
11206 #    define FV_ISFINITE(x) Perl_isfinitel(x)
11207 #  endif
11208 #  define FV_GF PERL_PRIgldbl
11209 #    if defined(__VMS) && defined(__ia64) && defined(__IEEE_FLOAT)
11210        /* Work around breakage in OTS$CVT_FLOAT_T_X */
11211 #      define NV_TO_FV(nv,fv) STMT_START {                   \
11212                                            double _dv = nv;  \
11213                                            fv = Perl_isnan(_dv) ? LDBL_QNAN : _dv; \
11214                               } STMT_END
11215 #    else
11216 #      define NV_TO_FV(nv,fv) (fv)=(nv)
11217 #    endif
11218 #else
11219         NV fv;
11220 #  define FV_GF NVgf
11221 #  define NV_TO_FV(nv,fv) (fv)=(nv)
11222 #endif
11223 #ifndef FV_ISFINITE
11224 #  define FV_ISFINITE(x) Perl_isfinite((NV)(x))
11225 #endif
11226         NV nv;
11227         STRLEN have;
11228         STRLEN need;
11229         STRLEN gap;
11230         const char *dotstr = ".";
11231         STRLEN dotstrlen = 1;
11232         I32 efix = 0; /* explicit format parameter index */
11233         I32 ewix = 0; /* explicit width index */
11234         I32 epix = 0; /* explicit precision index */
11235         I32 evix = 0; /* explicit vector index */
11236         bool asterisk = FALSE;
11237         bool infnan = FALSE;
11238
11239         /* echo everything up to the next format specification */
11240         for (q = p; q < patend && *q != '%'; ++q) ;
11241         if (q > p) {
11242             if (has_utf8 && !pat_utf8)
11243                 sv_catpvn_nomg_utf8_upgrade(sv, p, q - p, nsv);
11244             else
11245                 sv_catpvn_nomg(sv, p, q - p);
11246             p = q;
11247         }
11248         if (q++ >= patend)
11249             break;
11250
11251         fmtstart = q;
11252
11253 /*
11254     We allow format specification elements in this order:
11255         \d+\$              explicit format parameter index
11256         [-+ 0#]+           flags
11257         v|\*(\d+\$)?v      vector with optional (optionally specified) arg
11258         0                  flag (as above): repeated to allow "v02"     
11259         \d+|\*(\d+\$)?     width using optional (optionally specified) arg
11260         \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
11261         [hlqLV]            size
11262     [%bcdefginopsuxDFOUX] format (mandatory)
11263 */
11264
11265         if (args) {
11266 /*  
11267         As of perl5.9.3, printf format checking is on by default.
11268         Internally, perl uses %p formats to provide an escape to
11269         some extended formatting.  This block deals with those
11270         extensions: if it does not match, (char*)q is reset and
11271         the normal format processing code is used.
11272
11273         Currently defined extensions are:
11274                 %p              include pointer address (standard)      
11275                 %-p     (SVf)   include an SV (previously %_)
11276                 %-<num>p        include an SV with precision <num>      
11277                 %2p             include a HEK
11278                 %3p             include a HEK with precision of 256
11279                 %4p             char* preceded by utf8 flag and length
11280                 %<num>p         (where num is 1 or > 4) reserved for future
11281                                 extensions
11282
11283         Robin Barker 2005-07-14 (but modified since)
11284
11285                 %1p     (VDf)   removed.  RMB 2007-10-19
11286 */
11287             char* r = q; 
11288             bool sv = FALSE;    
11289             STRLEN n = 0;
11290             if (*q == '-')
11291                 sv = *q++;
11292             else if (strnEQ(q, UTF8f, sizeof(UTF8f)-1)) { /* UTF8f */
11293                 /* The argument has already gone through cBOOL, so the cast
11294                    is safe. */
11295                 is_utf8 = (bool)va_arg(*args, int);
11296                 elen = va_arg(*args, UV);
11297                 if ((IV)elen < 0) {
11298                     /* check if utf8 length is larger than 0 when cast to IV */
11299                     assert( (IV)elen >= 0 ); /* in DEBUGGING build we want to crash */
11300                     elen= 0; /* otherwise we want to treat this as an empty string */
11301                 }
11302                 eptr = va_arg(*args, char *);
11303                 q += sizeof(UTF8f)-1;
11304                 goto string;
11305             }
11306             n = expect_number(&q);
11307             if (*q++ == 'p') {
11308                 if (sv) {                       /* SVf */
11309                     if (n) {
11310                         precis = n;
11311                         has_precis = TRUE;
11312                     }
11313                     argsv = MUTABLE_SV(va_arg(*args, void*));
11314                     eptr = SvPV_const(argsv, elen);
11315                     if (DO_UTF8(argsv))
11316                         is_utf8 = TRUE;
11317                     goto string;
11318                 }
11319                 else if (n==2 || n==3) {        /* HEKf */
11320                     HEK * const hek = va_arg(*args, HEK *);
11321                     eptr = HEK_KEY(hek);
11322                     elen = HEK_LEN(hek);
11323                     if (HEK_UTF8(hek)) is_utf8 = TRUE;
11324                     if (n==3) precis = 256, has_precis = TRUE;
11325                     goto string;
11326                 }
11327                 else if (n) {
11328                     Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
11329                                      "internal %%<num>p might conflict with future printf extensions");
11330                 }
11331             }
11332             q = r; 
11333         }
11334
11335         if ( (width = expect_number(&q)) ) {
11336             if (*q == '$') {
11337                 if (args)
11338                     Perl_croak_nocontext(
11339                         "Cannot yet reorder sv_catpvfn() arguments from va_list");
11340                 ++q;
11341                 efix = width;
11342                 used_explicit_ix = TRUE;
11343             } else {
11344                 goto gotwidth;
11345             }
11346         }
11347
11348         /* FLAGS */
11349
11350         while (*q) {
11351             switch (*q) {
11352             case ' ':
11353             case '+':
11354                 if (plus == '+' && *q == ' ') /* '+' over ' ' */
11355                     q++;
11356                 else
11357                     plus = *q++;
11358                 continue;
11359
11360             case '-':
11361                 left = TRUE;
11362                 q++;
11363                 continue;
11364
11365             case '0':
11366                 fill = *q++;
11367                 continue;
11368
11369             case '#':
11370                 alt = TRUE;
11371                 q++;
11372                 continue;
11373
11374             default:
11375                 break;
11376             }
11377             break;
11378         }
11379
11380       tryasterisk:
11381         if (*q == '*') {
11382             q++;
11383             if ( (ewix = expect_number(&q)) ) {
11384                 if (*q++ == '$') {
11385                     if (args)
11386                         Perl_croak_nocontext(
11387                             "Cannot yet reorder sv_catpvfn() arguments from va_list");
11388                     used_explicit_ix = TRUE;
11389                 } else
11390                     goto unknown;
11391             }
11392             asterisk = TRUE;
11393         }
11394         if (*q == 'v') {
11395             q++;
11396             if (vectorize)
11397                 goto unknown;
11398             if ((vectorarg = asterisk)) {
11399                 evix = ewix;
11400                 ewix = 0;
11401                 asterisk = FALSE;
11402             }
11403             vectorize = TRUE;
11404             goto tryasterisk;
11405         }
11406
11407         if (!asterisk)
11408         {
11409             if( *q == '0' )
11410                 fill = *q++;
11411             width = expect_number(&q);
11412         }
11413
11414         if (vectorize && vectorarg) {
11415             /* vectorizing, but not with the default "." */
11416             if (args)
11417                 vecsv = va_arg(*args, SV*);
11418             else if (evix) {
11419                 FETCH_VCATPVFN_ARGUMENT(
11420                     vecsv, evix > 0 && evix <= svmax, svargs[evix-1]);
11421             } else {
11422                 FETCH_VCATPVFN_ARGUMENT(
11423                     vecsv, svix < svmax, svargs[svix++]);
11424             }
11425             dotstr = SvPV_const(vecsv, dotstrlen);
11426             /* Keep the DO_UTF8 test *after* the SvPV call, else things go
11427                bad with tied or overloaded values that return UTF8.  */
11428             if (DO_UTF8(vecsv))
11429                 is_utf8 = TRUE;
11430             else if (has_utf8) {
11431                 vecsv = sv_mortalcopy(vecsv);
11432                 sv_utf8_upgrade(vecsv);
11433                 dotstr = SvPV_const(vecsv, dotstrlen);
11434                 is_utf8 = TRUE;
11435             }               
11436         }
11437
11438         if (asterisk) {
11439             if (args)
11440                 i = va_arg(*args, int);
11441             else
11442                 i = (ewix ? ewix <= svmax : svix < svmax) ?
11443                     SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
11444             left |= (i < 0);
11445             width = (i < 0) ? -i : i;
11446         }
11447       gotwidth:
11448
11449         /* PRECISION */
11450
11451         if (*q == '.') {
11452             q++;
11453             if (*q == '*') {
11454                 q++;
11455                 if ( (epix = expect_number(&q)) ) {
11456                     if (*q++ == '$') {
11457                         if (args)
11458                             Perl_croak_nocontext(
11459                                 "Cannot yet reorder sv_catpvfn() arguments from va_list");
11460                         used_explicit_ix = TRUE;
11461                     } else
11462                         goto unknown;
11463                 }
11464                 if (args)
11465                     i = va_arg(*args, int);
11466                 else {
11467                     SV *precsv;
11468                     if (epix)
11469                         FETCH_VCATPVFN_ARGUMENT(
11470                             precsv, epix > 0 && epix <= svmax, svargs[epix-1]);
11471                     else
11472                         FETCH_VCATPVFN_ARGUMENT(
11473                             precsv, svix < svmax, svargs[svix++]);
11474                     i = precsv == &PL_sv_no ? 0 : SvIVx(precsv);
11475                 }
11476                 precis = i;
11477                 has_precis = !(i < 0);
11478             }
11479             else {
11480                 precis = 0;
11481                 while (isDIGIT(*q))
11482                     precis = precis * 10 + (*q++ - '0');
11483                 has_precis = TRUE;
11484             }
11485         }
11486
11487         if (vectorize) {
11488             if (args) {
11489                 VECTORIZE_ARGS
11490             }
11491             else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
11492                 vecsv = svargs[efix ? efix-1 : svix++];
11493                 vecstr = (U8*)SvPV_const(vecsv,veclen);
11494                 vec_utf8 = DO_UTF8(vecsv);
11495
11496                 /* if this is a version object, we need to convert
11497                  * back into v-string notation and then let the
11498                  * vectorize happen normally
11499                  */
11500                 if (sv_isobject(vecsv) && sv_derived_from(vecsv, "version")) {
11501                     if ( hv_exists(MUTABLE_HV(SvRV(vecsv)), "alpha", 5 ) ) {
11502                         Perl_ck_warner_d(aTHX_ packWARN(WARN_PRINTF),
11503                         "vector argument not supported with alpha versions");
11504                         goto vdblank;
11505                     }
11506                     vecsv = sv_newmortal();
11507                     scan_vstring((char *)vecstr, (char *)vecstr + veclen,
11508                                  vecsv);
11509                     vecstr = (U8*)SvPV_const(vecsv, veclen);
11510                     vec_utf8 = DO_UTF8(vecsv);
11511                 }
11512             }
11513             else {
11514               vdblank:
11515                 vecstr = (U8*)"";
11516                 veclen = 0;
11517             }
11518         }
11519
11520         /* SIZE */
11521
11522         switch (*q) {
11523 #ifdef WIN32
11524         case 'I':                       /* Ix, I32x, and I64x */
11525 #  ifdef USE_64_BIT_INT
11526             if (q[1] == '6' && q[2] == '4') {
11527                 q += 3;
11528                 intsize = 'q';
11529                 break;
11530             }
11531 #  endif
11532             if (q[1] == '3' && q[2] == '2') {
11533                 q += 3;
11534                 break;
11535             }
11536 #  ifdef USE_64_BIT_INT
11537             intsize = 'q';
11538 #  endif
11539             q++;
11540             break;
11541 #endif
11542 #if (IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)) || \
11543     (IVSIZE == 4 && !defined(HAS_LONG_DOUBLE))
11544         case 'L':                       /* Ld */
11545             /* FALLTHROUGH */
11546 #  ifdef USE_QUADMATH
11547         case 'Q':
11548             /* FALLTHROUGH */
11549 #  endif
11550 #  if IVSIZE >= 8
11551         case 'q':                       /* qd */
11552 #  endif
11553             intsize = 'q';
11554             q++;
11555             break;
11556 #endif
11557         case 'l':
11558             ++q;
11559 #if (IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)) || \
11560     (IVSIZE == 4 && !defined(HAS_LONG_DOUBLE))
11561             if (*q == 'l') {    /* lld, llf */
11562                 intsize = 'q';
11563                 ++q;
11564             }
11565             else
11566 #endif
11567                 intsize = 'l';
11568             break;
11569         case 'h':
11570             if (*++q == 'h') {  /* hhd, hhu */
11571                 intsize = 'c';
11572                 ++q;
11573             }
11574             else
11575                 intsize = 'h';
11576             break;
11577         case 'V':
11578         case 'z':
11579         case 't':
11580 #ifdef I_STDINT
11581         case 'j':
11582 #endif
11583             intsize = *q++;
11584             break;
11585         }
11586
11587         /* CONVERSION */
11588
11589         if (*q == '%') {
11590             eptr = q++;
11591             elen = 1;
11592             if (vectorize) {
11593                 c = '%';
11594                 goto unknown;
11595             }
11596             goto string;
11597         }
11598
11599         if (!vectorize && !args) {
11600             if (efix) {
11601                 const I32 i = efix-1;
11602                 FETCH_VCATPVFN_ARGUMENT(argsv, i >= 0 && i < svmax, svargs[i]);
11603             } else {
11604                 FETCH_VCATPVFN_ARGUMENT(argsv, svix >= 0 && svix < svmax,
11605                                         svargs[svix++]);
11606             }
11607         }
11608
11609         if (argsv && strchr("BbcDdiOopuUXx",*q)) {
11610             /* XXX va_arg(*args) case? need peek, use va_copy? */
11611             SvGETMAGIC(argsv);
11612             if (UNLIKELY(SvAMAGIC(argsv)))
11613                 argsv = sv_2num(argsv);
11614             infnan = UNLIKELY(isinfnansv(argsv));
11615         }
11616
11617         switch (c = *q++) {
11618
11619             /* STRINGS */
11620
11621         case 'c':
11622             if (vectorize)
11623                 goto unknown;
11624             if (infnan)
11625                 Perl_croak(aTHX_ "Cannot printf %"NVgf" with '%c'",
11626                            /* no va_arg() case */
11627                            SvNV_nomg(argsv), (int)c);
11628             uv = (args) ? va_arg(*args, int) : SvIV_nomg(argsv);
11629             if ((uv > 255 ||
11630                  (!UVCHR_IS_INVARIANT(uv) && SvUTF8(sv)))
11631                 && !IN_BYTES) {
11632                 eptr = (char*)utf8buf;
11633                 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
11634                 is_utf8 = TRUE;
11635             }
11636             else {
11637                 c = (char)uv;
11638                 eptr = &c;
11639                 elen = 1;
11640             }
11641             goto string;
11642
11643         case 's':
11644             if (vectorize)
11645                 goto unknown;
11646             if (args) {
11647                 eptr = va_arg(*args, char*);
11648                 if (eptr)
11649                     elen = strlen(eptr);
11650                 else {
11651                     eptr = (char *)nullstr;
11652                     elen = sizeof nullstr - 1;
11653                 }
11654             }
11655             else {
11656                 eptr = SvPV_const(argsv, elen);
11657                 if (DO_UTF8(argsv)) {
11658                     STRLEN old_precis = precis;
11659                     if (has_precis && precis < elen) {
11660                         STRLEN ulen = sv_or_pv_len_utf8(argsv, eptr, elen);
11661                         STRLEN p = precis > ulen ? ulen : precis;
11662                         precis = sv_or_pv_pos_u2b(argsv, eptr, p, 0);
11663                                                         /* sticks at end */
11664                     }
11665                     if (width) { /* fudge width (can't fudge elen) */
11666                         if (has_precis && precis < elen)
11667                             width += precis - old_precis;
11668                         else
11669                             width +=
11670                                 elen - sv_or_pv_len_utf8(argsv,eptr,elen);
11671                     }
11672                     is_utf8 = TRUE;
11673                 }
11674             }
11675
11676         string:
11677             if (has_precis && precis < elen)
11678                 elen = precis;
11679             break;
11680
11681             /* INTEGERS */
11682
11683         case 'p':
11684             if (infnan) {
11685                 goto floating_point;
11686             }
11687             if (alt || vectorize)
11688                 goto unknown;
11689             uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
11690             base = 16;
11691             goto integer;
11692
11693         case 'D':
11694 #ifdef IV_IS_QUAD
11695             intsize = 'q';
11696 #else
11697             intsize = 'l';
11698 #endif
11699             /* FALLTHROUGH */
11700         case 'd':
11701         case 'i':
11702             if (infnan) {
11703                 goto floating_point;
11704             }
11705             if (vectorize) {
11706                 STRLEN ulen;
11707                 if (!veclen)
11708                     goto donevalidconversion;
11709                 if (vec_utf8)
11710                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
11711                                         UTF8_ALLOW_ANYUV);
11712                 else {
11713                     uv = *vecstr;
11714                     ulen = 1;
11715                 }
11716                 vecstr += ulen;
11717                 veclen -= ulen;
11718                 if (plus)
11719                      esignbuf[esignlen++] = plus;
11720             }
11721             else if (args) {
11722                 switch (intsize) {
11723                 case 'c':       iv = (char)va_arg(*args, int); break;
11724                 case 'h':       iv = (short)va_arg(*args, int); break;
11725                 case 'l':       iv = va_arg(*args, long); break;
11726                 case 'V':       iv = va_arg(*args, IV); break;
11727                 case 'z':       iv = va_arg(*args, SSize_t); break;
11728 #ifdef HAS_PTRDIFF_T
11729                 case 't':       iv = va_arg(*args, ptrdiff_t); break;
11730 #endif
11731                 default:        iv = va_arg(*args, int); break;
11732 #ifdef I_STDINT
11733                 case 'j':       iv = va_arg(*args, intmax_t); break;
11734 #endif
11735                 case 'q':
11736 #if IVSIZE >= 8
11737                                 iv = va_arg(*args, Quad_t); break;
11738 #else
11739                                 goto unknown;
11740 #endif
11741                 }
11742             }
11743             else {
11744                 IV tiv = SvIV_nomg(argsv); /* work around GCC bug #13488 */
11745                 switch (intsize) {
11746                 case 'c':       iv = (char)tiv; break;
11747                 case 'h':       iv = (short)tiv; break;
11748                 case 'l':       iv = (long)tiv; break;
11749                 case 'V':
11750                 default:        iv = tiv; break;
11751                 case 'q':
11752 #if IVSIZE >= 8
11753                                 iv = (Quad_t)tiv; break;
11754 #else
11755                                 goto unknown;
11756 #endif
11757                 }
11758             }
11759             if ( !vectorize )   /* we already set uv above */
11760             {
11761                 if (iv >= 0) {
11762                     uv = iv;
11763                     if (plus)
11764                         esignbuf[esignlen++] = plus;
11765                 }
11766                 else {
11767                     uv = (iv == IV_MIN) ? (UV)iv : (UV)(-iv);
11768                     esignbuf[esignlen++] = '-';
11769                 }
11770             }
11771             base = 10;
11772             goto integer;
11773
11774         case 'U':
11775 #ifdef IV_IS_QUAD
11776             intsize = 'q';
11777 #else
11778             intsize = 'l';
11779 #endif
11780             /* FALLTHROUGH */
11781         case 'u':
11782             base = 10;
11783             goto uns_integer;
11784
11785         case 'B':
11786         case 'b':
11787             base = 2;
11788             goto uns_integer;
11789
11790         case 'O':
11791 #ifdef IV_IS_QUAD
11792             intsize = 'q';
11793 #else
11794             intsize = 'l';
11795 #endif
11796             /* FALLTHROUGH */
11797         case 'o':
11798             base = 8;
11799             goto uns_integer;
11800
11801         case 'X':
11802         case 'x':
11803             base = 16;
11804
11805         uns_integer:
11806             if (infnan) {
11807                 goto floating_point;
11808             }
11809             if (vectorize) {
11810                 STRLEN ulen;
11811         vector:
11812                 if (!veclen)
11813                     goto donevalidconversion;
11814                 if (vec_utf8)
11815                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
11816                                         UTF8_ALLOW_ANYUV);
11817                 else {
11818                     uv = *vecstr;
11819                     ulen = 1;
11820                 }
11821                 vecstr += ulen;
11822                 veclen -= ulen;
11823             }
11824             else if (args) {
11825                 switch (intsize) {
11826                 case 'c':  uv = (unsigned char)va_arg(*args, unsigned); break;
11827                 case 'h':  uv = (unsigned short)va_arg(*args, unsigned); break;
11828                 case 'l':  uv = va_arg(*args, unsigned long); break;
11829                 case 'V':  uv = va_arg(*args, UV); break;
11830                 case 'z':  uv = va_arg(*args, Size_t); break;
11831 #ifdef HAS_PTRDIFF_T
11832                 case 't':  uv = va_arg(*args, ptrdiff_t); break; /* will sign extend, but there is no uptrdiff_t, so oh well */
11833 #endif
11834 #ifdef I_STDINT
11835                 case 'j':  uv = va_arg(*args, uintmax_t); break;
11836 #endif
11837                 default:   uv = va_arg(*args, unsigned); break;
11838                 case 'q':
11839 #if IVSIZE >= 8
11840                            uv = va_arg(*args, Uquad_t); break;
11841 #else
11842                            goto unknown;
11843 #endif
11844                 }
11845             }
11846             else {
11847                 UV tuv = SvUV_nomg(argsv); /* work around GCC bug #13488 */
11848                 switch (intsize) {
11849                 case 'c':       uv = (unsigned char)tuv; break;
11850                 case 'h':       uv = (unsigned short)tuv; break;
11851                 case 'l':       uv = (unsigned long)tuv; break;
11852                 case 'V':
11853                 default:        uv = tuv; break;
11854                 case 'q':
11855 #if IVSIZE >= 8
11856                                 uv = (Uquad_t)tuv; break;
11857 #else
11858                                 goto unknown;
11859 #endif
11860                 }
11861             }
11862
11863         integer:
11864             {
11865                 char *ptr = ebuf + sizeof ebuf;
11866                 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */
11867                 unsigned dig;
11868                 zeros = 0;
11869
11870                 switch (base) {
11871                 case 16:
11872                     p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit);
11873                     do {
11874                         dig = uv & 15;
11875                         *--ptr = p[dig];
11876                     } while (uv >>= 4);
11877                     if (tempalt) {
11878                         esignbuf[esignlen++] = '0';
11879                         esignbuf[esignlen++] = c;  /* 'x' or 'X' */
11880                     }
11881                     break;
11882                 case 8:
11883                     do {
11884                         dig = uv & 7;
11885                         *--ptr = '0' + dig;
11886                     } while (uv >>= 3);
11887                     if (alt && *ptr != '0')
11888                         *--ptr = '0';
11889                     break;
11890                 case 2:
11891                     do {
11892                         dig = uv & 1;
11893                         *--ptr = '0' + dig;
11894                     } while (uv >>= 1);
11895                     if (tempalt) {
11896                         esignbuf[esignlen++] = '0';
11897                         esignbuf[esignlen++] = c;
11898                     }
11899                     break;
11900                 default:                /* it had better be ten or less */
11901                     do {
11902                         dig = uv % base;
11903                         *--ptr = '0' + dig;
11904                     } while (uv /= base);
11905                     break;
11906                 }
11907                 elen = (ebuf + sizeof ebuf) - ptr;
11908                 eptr = ptr;
11909                 if (has_precis) {
11910                     if (precis > elen)
11911                         zeros = precis - elen;
11912                     else if (precis == 0 && elen == 1 && *eptr == '0'
11913                              && !(base == 8 && alt)) /* "%#.0o" prints "0" */
11914                         elen = 0;
11915
11916                 /* a precision nullifies the 0 flag. */
11917                     if (fill == '0')
11918                         fill = ' ';
11919                 }
11920             }
11921             break;
11922
11923             /* FLOATING POINT */
11924
11925         floating_point:
11926
11927         case 'F':
11928             c = 'f';            /* maybe %F isn't supported here */
11929             /* FALLTHROUGH */
11930         case 'e': case 'E':
11931         case 'f':
11932         case 'g': case 'G':
11933         case 'a': case 'A':
11934             if (vectorize)
11935                 goto unknown;
11936
11937             /* This is evil, but floating point is even more evil */
11938
11939             /* for SV-style calling, we can only get NV
11940                for C-style calling, we assume %f is double;
11941                for simplicity we allow any of %Lf, %llf, %qf for long double
11942             */
11943             switch (intsize) {
11944             case 'V':
11945 #if defined(USE_LONG_DOUBLE) || defined(USE_QUADMATH)
11946                 intsize = 'q';
11947 #endif
11948                 break;
11949 /* [perl #20339] - we should accept and ignore %lf rather than die */
11950             case 'l':
11951                 /* FALLTHROUGH */
11952             default:
11953 #if defined(USE_LONG_DOUBLE) || defined(USE_QUADMATH)
11954                 intsize = args ? 0 : 'q';
11955 #endif
11956                 break;
11957             case 'q':
11958 #if defined(HAS_LONG_DOUBLE)
11959                 break;
11960 #else
11961                 /* FALLTHROUGH */
11962 #endif
11963             case 'c':
11964             case 'h':
11965             case 'z':
11966             case 't':
11967             case 'j':
11968                 goto unknown;
11969             }
11970
11971             /* Now we need (long double) if intsize == 'q', else (double). */
11972             if (args) {
11973                 /* Note: do not pull NVs off the va_list with va_arg()
11974                  * (pull doubles instead) because if you have a build
11975                  * with long doubles, you would always be pulling long
11976                  * doubles, which would badly break anyone using only
11977                  * doubles (i.e. the majority of builds). In other
11978                  * words, you cannot mix doubles and long doubles.
11979                  * The only case where you can pull off long doubles
11980                  * is when the format specifier explicitly asks so with
11981                  * e.g. "%Lg". */
11982 #ifdef USE_QUADMATH
11983                 fv = intsize == 'q' ?
11984                     va_arg(*args, NV) : va_arg(*args, double);
11985                 nv = fv;
11986 #elif LONG_DOUBLESIZE > DOUBLESIZE
11987                 if (intsize == 'q') {
11988                     fv = va_arg(*args, long double);
11989                     nv = fv;
11990                 } else {
11991                     nv = va_arg(*args, double);
11992                     NV_TO_FV(nv, fv);
11993                 }
11994 #else
11995                 nv = va_arg(*args, double);
11996                 fv = nv;
11997 #endif
11998             }
11999             else
12000             {
12001                 if (!infnan) SvGETMAGIC(argsv);
12002                 nv = SvNV_nomg(argsv);
12003                 NV_TO_FV(nv, fv);
12004             }
12005
12006             need = 0;
12007             /* frexp() (or frexpl) has some unspecified behaviour for
12008              * nan/inf/-inf, so let's avoid calling that on non-finites. */
12009             if (isALPHA_FOLD_NE(c, 'e') && FV_ISFINITE(fv)) {
12010                 i = PERL_INT_MIN;
12011                 (void)Perl_frexp((NV)fv, &i);
12012                 if (i == PERL_INT_MIN)
12013                     Perl_die(aTHX_ "panic: frexp: %"FV_GF, fv);
12014                 /* Do not set hexfp earlier since we want to printf
12015                  * Inf/NaN for Inf/NaN, not their hexfp. */
12016                 hexfp = isALPHA_FOLD_EQ(c, 'a');
12017                 if (UNLIKELY(hexfp)) {
12018                     /* This seriously overshoots in most cases, but
12019                      * better the undershooting.  Firstly, all bytes
12020                      * of the NV are not mantissa, some of them are
12021                      * exponent.  Secondly, for the reasonably common
12022                      * long doubles case, the "80-bit extended", two
12023                      * or six bytes of the NV are unused. */
12024                     need +=
12025                         (fv < 0) ? 1 : 0 + /* possible unary minus */
12026                         2 + /* "0x" */
12027                         1 + /* the very unlikely carry */
12028                         1 + /* "1" */
12029                         1 + /* "." */
12030                         2 * NVSIZE + /* 2 hexdigits for each byte */
12031                         2 + /* "p+" */
12032                         6 + /* exponent: sign, plus up to 16383 (quad fp) */
12033                         1;   /* \0 */
12034 #ifdef LONGDOUBLE_DOUBLEDOUBLE
12035                     /* However, for the "double double", we need more.
12036                      * Since each double has their own exponent, the
12037                      * doubles may float (haha) rather far from each
12038                      * other, and the number of required bits is much
12039                      * larger, up to total of DOUBLEDOUBLE_MAXBITS bits.
12040                      * See the definition of DOUBLEDOUBLE_MAXBITS.
12041                      *
12042                      * Need 2 hexdigits for each byte. */
12043                     need += (DOUBLEDOUBLE_MAXBITS/8 + 1) * 2;
12044                     /* the size for the exponent already added */
12045 #endif
12046 #ifdef USE_LOCALE_NUMERIC
12047                         STORE_LC_NUMERIC_SET_TO_NEEDED();
12048                         if (PL_numeric_radix_sv && IN_LC(LC_NUMERIC))
12049                             need += SvLEN(PL_numeric_radix_sv);
12050                         RESTORE_LC_NUMERIC();
12051 #endif
12052                 }
12053                 else if (i > 0) {
12054                     need = BIT_DIGITS(i);
12055                 } /* if i < 0, the number of digits is hard to predict. */
12056             }
12057             need += has_precis ? precis : 6; /* known default */
12058
12059             if (need < width)
12060                 need = width;
12061
12062 #ifdef HAS_LDBL_SPRINTF_BUG
12063             /* This is to try to fix a bug with irix/nonstop-ux/powerux and
12064                with sfio - Allen <allens@cpan.org> */
12065
12066 #  ifdef DBL_MAX
12067 #    define MY_DBL_MAX DBL_MAX
12068 #  else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
12069 #    if DOUBLESIZE >= 8
12070 #      define MY_DBL_MAX 1.7976931348623157E+308L
12071 #    else
12072 #      define MY_DBL_MAX 3.40282347E+38L
12073 #    endif
12074 #  endif
12075
12076 #  ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
12077 #    define MY_DBL_MAX_BUG 1L
12078 #  else
12079 #    define MY_DBL_MAX_BUG MY_DBL_MAX
12080 #  endif
12081
12082 #  ifdef DBL_MIN
12083 #    define MY_DBL_MIN DBL_MIN
12084 #  else  /* XXX guessing! -Allen */
12085 #    if DOUBLESIZE >= 8
12086 #      define MY_DBL_MIN 2.2250738585072014E-308L
12087 #    else
12088 #      define MY_DBL_MIN 1.17549435E-38L
12089 #    endif
12090 #  endif
12091
12092             if ((intsize == 'q') && (c == 'f') &&
12093                 ((fv < MY_DBL_MAX_BUG) && (fv > -MY_DBL_MAX_BUG)) &&
12094                 (need < DBL_DIG)) {
12095                 /* it's going to be short enough that
12096                  * long double precision is not needed */
12097
12098                 if ((fv <= 0L) && (fv >= -0L))
12099                     fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
12100                 else {
12101                     /* would use Perl_fp_class as a double-check but not
12102                      * functional on IRIX - see perl.h comments */
12103
12104                     if ((fv >= MY_DBL_MIN) || (fv <= -MY_DBL_MIN)) {
12105                         /* It's within the range that a double can represent */
12106 #if defined(DBL_MAX) && !defined(DBL_MIN)
12107                         if ((fv >= ((long double)1/DBL_MAX)) ||
12108                             (fv <= (-(long double)1/DBL_MAX)))
12109 #endif
12110                         fix_ldbl_sprintf_bug = TRUE;
12111                     }
12112                 }
12113                 if (fix_ldbl_sprintf_bug == TRUE) {
12114                     double temp;
12115
12116                     intsize = 0;
12117                     temp = (double)fv;
12118                     fv = (NV)temp;
12119                 }
12120             }
12121
12122 #  undef MY_DBL_MAX
12123 #  undef MY_DBL_MAX_BUG
12124 #  undef MY_DBL_MIN
12125
12126 #endif /* HAS_LDBL_SPRINTF_BUG */
12127
12128             need += 20; /* fudge factor */
12129             if (PL_efloatsize < need) {
12130                 Safefree(PL_efloatbuf);
12131                 PL_efloatsize = need + 20; /* more fudge */
12132                 Newx(PL_efloatbuf, PL_efloatsize, char);
12133                 PL_efloatbuf[0] = '\0';
12134             }
12135
12136             if ( !(width || left || plus || alt) && fill != '0'
12137                  && has_precis && intsize != 'q'        /* Shortcuts */
12138                  && LIKELY(!Perl_isinfnan((NV)fv)) ) {
12139                 /* See earlier comment about buggy Gconvert when digits,
12140                    aka precis is 0  */
12141                 if ( c == 'g' && precis ) {
12142                     STORE_LC_NUMERIC_SET_TO_NEEDED();
12143                     SNPRINTF_G(fv, PL_efloatbuf, PL_efloatsize, precis);
12144                     /* May return an empty string for digits==0 */
12145                     if (*PL_efloatbuf) {
12146                         elen = strlen(PL_efloatbuf);
12147                         goto float_converted;
12148                     }
12149                 } else if ( c == 'f' && !precis ) {
12150                     if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
12151                         break;
12152                 }
12153             }
12154
12155             if (UNLIKELY(hexfp)) {
12156                 /* Hexadecimal floating point. */
12157                 char* p = PL_efloatbuf;
12158                 U8 vhex[VHEX_SIZE];
12159                 U8* v = vhex; /* working pointer to vhex */
12160                 U8* vend; /* pointer to one beyond last digit of vhex */
12161                 U8* vfnz = NULL; /* first non-zero */
12162                 const bool lower = (c == 'a');
12163                 /* At output the values of vhex (up to vend) will
12164                  * be mapped through the xdig to get the actual
12165                  * human-readable xdigits. */
12166                 const char* xdig = PL_hexdigit;
12167                 int zerotail = 0; /* how many extra zeros to append */
12168                 int exponent = 0; /* exponent of the floating point input */
12169
12170                 /* XXX: denormals, NaN, Inf.
12171                  *
12172                  * For example with denormals, (assuming the vanilla
12173                  * 64-bit double): the exponent is zero. 1xp-1074 is
12174                  * the smallest denormal and the smallest double, it
12175                  * should be output as 0x0.0000000000001p-1022 to
12176                  * match its internal structure. */
12177
12178                 vend = S_hextract(aTHX_ nv, &exponent, vhex, NULL);
12179                 S_hextract(aTHX_ nv, &exponent, vhex, vend);
12180
12181 #if NVSIZE > DOUBLESIZE
12182 #  ifdef HEXTRACT_HAS_IMPLICIT_BIT
12183                 /* In this case there is an implicit bit,
12184                  * and therefore the exponent is shifted shift by one. */
12185                 exponent--;
12186 #  else
12187                 /* In this case there is no implicit bit,
12188                  * and the exponent is shifted by the first xdigit. */
12189                 exponent -= 4;
12190 #  endif
12191 #endif
12192
12193                 if (fv < 0)
12194                     *p++ = '-';
12195                 else if (plus)
12196                     *p++ = plus;
12197                 *p++ = '0';
12198                 if (lower) {
12199                     *p++ = 'x';
12200                 }
12201                 else {
12202                     *p++ = 'X';
12203                     xdig += 16; /* Use uppercase hex. */
12204                 }
12205
12206                 /* Find the first non-zero xdigit. */
12207                 for (v = vhex; v < vend; v++) {
12208                     if (*v) {
12209                         vfnz = v;
12210                         break;
12211                     }
12212                 }
12213
12214                 if (vfnz) {
12215                     U8* vlnz = NULL; /* The last non-zero. */
12216
12217                     /* Find the last non-zero xdigit. */
12218                     for (v = vend - 1; v >= vhex; v--) {
12219                         if (*v) {
12220                             vlnz = v;
12221                             break;
12222                         }
12223                     }
12224
12225 #if NVSIZE == DOUBLESIZE
12226                     if (fv != 0.0)
12227                         exponent--;
12228 #endif
12229
12230                     if (precis > 0) {
12231                         if ((SSize_t)(precis + 1) < vend - vhex) {
12232                             bool round;
12233
12234                             v = vhex + precis + 1;
12235                             /* Round away from zero: if the tail
12236                              * beyond the precis xdigits is equal to
12237                              * or greater than 0x8000... */
12238                             round = *v > 0x8;
12239                             if (!round && *v == 0x8) {
12240                                 for (v++; v < vend; v++) {
12241                                     if (*v) {
12242                                         round = TRUE;
12243                                         break;
12244                                     }
12245                                 }
12246                             }
12247                             if (round) {
12248                                 for (v = vhex + precis; v >= vhex; v--) {
12249                                     if (*v < 0xF) {
12250                                         (*v)++;
12251                                         break;
12252                                     }
12253                                     *v = 0;
12254                                     if (v == vhex) {
12255                                         /* If the carry goes all the way to
12256                                          * the front, we need to output
12257                                          * a single '1'. This goes against
12258                                          * the "xdigit and then radix"
12259                                          * but since this is "cannot happen"
12260                                          * category, that is probably good. */
12261                                         *p++ = xdig[1];
12262                                     }
12263                                 }
12264                             }
12265                             /* The new effective "last non zero". */
12266                             vlnz = vhex + precis;
12267                         }
12268                         else {
12269                             zerotail = precis - (vlnz - vhex);
12270                         }
12271                     }
12272
12273                     v = vhex;
12274                     *p++ = xdig[*v++];
12275
12276                     /* The radix is always output after the first
12277                      * non-zero xdigit, or if alt.  */
12278                     if (vfnz < vlnz || alt) {
12279 #ifndef USE_LOCALE_NUMERIC
12280                         *p++ = '.';
12281 #else
12282                         STORE_LC_NUMERIC_SET_TO_NEEDED();
12283                         if (PL_numeric_radix_sv && IN_LC(LC_NUMERIC)) {
12284                             STRLEN n;
12285                             const char* r = SvPV(PL_numeric_radix_sv, n);
12286                             Copy(r, p, n, char);
12287                             p += n;
12288                         }
12289                         else {
12290                             *p++ = '.';
12291                         }
12292                         RESTORE_LC_NUMERIC();
12293 #endif
12294                     }
12295
12296                     while (v <= vlnz)
12297                         *p++ = xdig[*v++];
12298
12299                     while (zerotail--)
12300                         *p++ = '0';
12301                 }
12302                 else {
12303                     *p++ = '0';
12304                     exponent = 0;
12305                 }
12306
12307                 elen = p - PL_efloatbuf;
12308                 elen += my_snprintf(p, PL_efloatsize - elen,
12309                                     "%c%+d", lower ? 'p' : 'P',
12310                                     exponent);
12311
12312                 if (elen < width) {
12313                     if (left) {
12314                         /* Pad the back with spaces. */
12315                         memset(PL_efloatbuf + elen, ' ', width - elen);
12316                     }
12317                     else if (fill == '0') {
12318                         /* Insert the zeros between the "0x" and
12319                          * the digits, otherwise we end up with
12320                          * "0000xHHH..." */
12321                         STRLEN nzero = width - elen;
12322                         char* zerox = PL_efloatbuf + 2;
12323                         Move(zerox, zerox + nzero,  elen - 2, char);
12324                         memset(zerox, fill, nzero);
12325                     }
12326                     else {
12327                         /* Move it to the right. */
12328                         Move(PL_efloatbuf, PL_efloatbuf + width - elen,
12329                              elen, char);
12330                         /* Pad the front with spaces. */
12331                         memset(PL_efloatbuf, ' ', width - elen);
12332                     }
12333                     elen = width;
12334                 }
12335             }
12336             else {
12337                 elen = S_infnan_2pv(nv, PL_efloatbuf, PL_efloatsize, plus);
12338                 if (elen) {
12339                     /* Not affecting infnan output: precision, alt, fill. */
12340                     if (elen < width) {
12341                         if (left) {
12342                             /* Pack the back with spaces. */
12343                             memset(PL_efloatbuf + elen, ' ', width - elen);
12344                         } else {
12345                             /* Move it to the right. */
12346                             Move(PL_efloatbuf, PL_efloatbuf + width - elen,
12347                                  elen, char);
12348                             /* Pad the front with spaces. */
12349                             memset(PL_efloatbuf, ' ', width - elen);
12350                         }
12351                         elen = width;
12352                     }
12353                 }
12354             }
12355
12356             if (elen == 0) {
12357                 char *ptr = ebuf + sizeof ebuf;
12358                 *--ptr = '\0';
12359                 *--ptr = c;
12360 #if defined(USE_QUADMATH)
12361                 if (intsize == 'q') {
12362                     /* "g" -> "Qg" */
12363                     *--ptr = 'Q';
12364                 }
12365                 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
12366 #elif defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
12367                 /* Note that this is HAS_LONG_DOUBLE and PERL_PRIfldbl,
12368                  * not USE_LONG_DOUBLE and NVff.  In other words,
12369                  * this needs to work without USE_LONG_DOUBLE. */
12370                 if (intsize == 'q') {
12371                     /* Copy the one or more characters in a long double
12372                      * format before the 'base' ([efgEFG]) character to
12373                      * the format string. */
12374                     static char const ldblf[] = PERL_PRIfldbl;
12375                     char const *p = ldblf + sizeof(ldblf) - 3;
12376                     while (p >= ldblf) { *--ptr = *p--; }
12377                 }
12378 #endif
12379                 if (has_precis) {
12380                     base = precis;
12381                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
12382                     *--ptr = '.';
12383                 }
12384                 if (width) {
12385                     base = width;
12386                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
12387                 }
12388                 if (fill == '0')
12389                     *--ptr = fill;
12390                 if (left)
12391                     *--ptr = '-';
12392                 if (plus)
12393                     *--ptr = plus;
12394                 if (alt)
12395                     *--ptr = '#';
12396                 *--ptr = '%';
12397
12398                 /* No taint.  Otherwise we are in the strange situation
12399                  * where printf() taints but print($float) doesn't.
12400                  * --jhi */
12401
12402                 STORE_LC_NUMERIC_SET_TO_NEEDED();
12403
12404                 /* hopefully the above makes ptr a very constrained format
12405                  * that is safe to use, even though it's not literal */
12406                 GCC_DIAG_IGNORE(-Wformat-nonliteral);
12407 #ifdef USE_QUADMATH
12408                 {
12409                     const char* qfmt = quadmath_format_single(ptr);
12410                     if (!qfmt)
12411                         Perl_croak_nocontext("panic: quadmath invalid format \"%s\"", ptr);
12412                     elen = quadmath_snprintf(PL_efloatbuf, PL_efloatsize,
12413                                              qfmt, nv);
12414                     if ((IV)elen == -1)
12415                         Perl_croak_nocontext("panic: quadmath_snprintf failed, format \"%s|'", qfmt);
12416                     if (qfmt != ptr)
12417                         Safefree(qfmt);
12418                 }
12419 #elif defined(HAS_LONG_DOUBLE)
12420                 elen = ((intsize == 'q')
12421                         ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, fv)
12422                         : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)fv));
12423 #else
12424                 elen = my_sprintf(PL_efloatbuf, ptr, fv);
12425 #endif
12426                 GCC_DIAG_RESTORE;
12427             }
12428
12429         float_converted:
12430             eptr = PL_efloatbuf;
12431             assert((IV)elen > 0); /* here zero elen is bad */
12432
12433 #ifdef USE_LOCALE_NUMERIC
12434             /* If the decimal point character in the string is UTF-8, make the
12435              * output utf8 */
12436             if (PL_numeric_radix_sv && SvUTF8(PL_numeric_radix_sv)
12437                 && instr(eptr, SvPVX_const(PL_numeric_radix_sv)))
12438             {
12439                 is_utf8 = TRUE;
12440             }
12441 #endif
12442
12443             break;
12444
12445             /* SPECIAL */
12446
12447         case 'n':
12448             if (vectorize)
12449                 goto unknown;
12450             i = SvCUR(sv) - origlen;
12451             if (args) {
12452                 switch (intsize) {
12453                 case 'c':       *(va_arg(*args, char*)) = i; break;
12454                 case 'h':       *(va_arg(*args, short*)) = i; break;
12455                 default:        *(va_arg(*args, int*)) = i; break;
12456                 case 'l':       *(va_arg(*args, long*)) = i; break;
12457                 case 'V':       *(va_arg(*args, IV*)) = i; break;
12458                 case 'z':       *(va_arg(*args, SSize_t*)) = i; break;
12459 #ifdef HAS_PTRDIFF_T
12460                 case 't':       *(va_arg(*args, ptrdiff_t*)) = i; break;
12461 #endif
12462 #ifdef I_STDINT
12463                 case 'j':       *(va_arg(*args, intmax_t*)) = i; break;
12464 #endif
12465                 case 'q':
12466 #if IVSIZE >= 8
12467                                 *(va_arg(*args, Quad_t*)) = i; break;
12468 #else
12469                                 goto unknown;
12470 #endif
12471                 }
12472             }
12473             else
12474                 sv_setuv_mg(argsv, has_utf8 ? (UV)sv_len_utf8(sv) : (UV)i);
12475             goto donevalidconversion;
12476
12477             /* UNKNOWN */
12478
12479         default:
12480       unknown:
12481             if (!args
12482                 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
12483                 && ckWARN(WARN_PRINTF))
12484             {
12485                 SV * const msg = sv_newmortal();
12486                 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
12487                           (PL_op->op_type == OP_PRTF) ? "" : "s");
12488                 if (fmtstart < patend) {
12489                     const char * const fmtend = q < patend ? q : patend;
12490                     const char * f;
12491                     sv_catpvs(msg, "\"%");
12492                     for (f = fmtstart; f < fmtend; f++) {
12493                         if (isPRINT(*f)) {
12494                             sv_catpvn_nomg(msg, f, 1);
12495                         } else {
12496                             Perl_sv_catpvf(aTHX_ msg,
12497                                            "\\%03"UVof, (UV)*f & 0xFF);
12498                         }
12499                     }
12500                     sv_catpvs(msg, "\"");
12501                 } else {
12502                     sv_catpvs(msg, "end of string");
12503                 }
12504                 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%"SVf, SVfARG(msg)); /* yes, this is reentrant */
12505             }
12506
12507             /* output mangled stuff ... */
12508             if (c == '\0')
12509                 --q;
12510             eptr = p;
12511             elen = q - p;
12512
12513             /* ... right here, because formatting flags should not apply */
12514             SvGROW(sv, SvCUR(sv) + elen + 1);
12515             p = SvEND(sv);
12516             Copy(eptr, p, elen, char);
12517             p += elen;
12518             *p = '\0';
12519             SvCUR_set(sv, p - SvPVX_const(sv));
12520             svix = osvix;
12521             continue;   /* not "break" */
12522         }
12523
12524         if (is_utf8 != has_utf8) {
12525             if (is_utf8) {
12526                 if (SvCUR(sv))
12527                     sv_utf8_upgrade(sv);
12528             }
12529             else {
12530                 const STRLEN old_elen = elen;
12531                 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
12532                 sv_utf8_upgrade(nsv);
12533                 eptr = SvPVX_const(nsv);
12534                 elen = SvCUR(nsv);
12535
12536                 if (width) { /* fudge width (can't fudge elen) */
12537                     width += elen - old_elen;
12538                 }
12539                 is_utf8 = TRUE;
12540             }
12541         }
12542
12543         assert((IV)elen >= 0); /* here zero elen is fine */
12544         have = esignlen + zeros + elen;
12545         if (have < zeros)
12546             croak_memory_wrap();
12547
12548         need = (have > width ? have : width);
12549         gap = need - have;
12550
12551         if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
12552             croak_memory_wrap();
12553         SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
12554         p = SvEND(sv);
12555         if (esignlen && fill == '0') {
12556             int i;
12557             for (i = 0; i < (int)esignlen; i++)
12558                 *p++ = esignbuf[i];
12559         }
12560         if (gap && !left) {
12561             memset(p, fill, gap);
12562             p += gap;
12563         }
12564         if (esignlen && fill != '0') {
12565             int i;
12566             for (i = 0; i < (int)esignlen; i++)
12567                 *p++ = esignbuf[i];
12568         }
12569         if (zeros) {
12570             int i;
12571             for (i = zeros; i; i--)
12572                 *p++ = '0';
12573         }
12574         if (elen) {
12575             Copy(eptr, p, elen, char);
12576             p += elen;
12577         }
12578         if (gap && left) {
12579             memset(p, ' ', gap);
12580             p += gap;
12581         }
12582         if (vectorize) {
12583             if (veclen) {
12584                 Copy(dotstr, p, dotstrlen, char);
12585                 p += dotstrlen;
12586             }
12587             else
12588                 vectorize = FALSE;              /* done iterating over vecstr */
12589         }
12590         if (is_utf8)
12591             has_utf8 = TRUE;
12592         if (has_utf8)
12593             SvUTF8_on(sv);
12594         *p = '\0';
12595         SvCUR_set(sv, p - SvPVX_const(sv));
12596         if (vectorize) {
12597             esignlen = 0;
12598             goto vector;
12599         }
12600
12601       donevalidconversion:
12602         if (used_explicit_ix)
12603             no_redundant_warning = TRUE;
12604         if (arg_missing)
12605             S_warn_vcatpvfn_missing_argument(aTHX);
12606     }
12607
12608     /* Now that we've consumed all our printf format arguments (svix)
12609      * do we have things left on the stack that we didn't use?
12610      */
12611     if (!no_redundant_warning && svmax >= svix + 1 && ckWARN(WARN_REDUNDANT)) {
12612         Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
12613                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
12614     }
12615
12616     SvTAINT(sv);
12617
12618     RESTORE_LC_NUMERIC();   /* Done outside loop, so don't have to save/restore
12619                                each iteration. */
12620 }
12621
12622 /* =========================================================================
12623
12624 =head1 Cloning an interpreter
12625
12626 =cut
12627
12628 All the macros and functions in this section are for the private use of
12629 the main function, perl_clone().
12630
12631 The foo_dup() functions make an exact copy of an existing foo thingy.
12632 During the course of a cloning, a hash table is used to map old addresses
12633 to new addresses.  The table is created and manipulated with the
12634 ptr_table_* functions.
12635
12636  * =========================================================================*/
12637
12638
12639 #if defined(USE_ITHREADS)
12640
12641 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
12642 #ifndef GpREFCNT_inc
12643 #  define GpREFCNT_inc(gp)      ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
12644 #endif
12645
12646
12647 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact
12648    that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
12649    If this changes, please unmerge ss_dup.
12650    Likewise, sv_dup_inc_multiple() relies on this fact.  */
12651 #define sv_dup_inc_NN(s,t)      SvREFCNT_inc_NN(sv_dup_inc(s,t))
12652 #define av_dup(s,t)     MUTABLE_AV(sv_dup((const SV *)s,t))
12653 #define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
12654 #define hv_dup(s,t)     MUTABLE_HV(sv_dup((const SV *)s,t))
12655 #define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
12656 #define cv_dup(s,t)     MUTABLE_CV(sv_dup((const SV *)s,t))
12657 #define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t))
12658 #define io_dup(s,t)     MUTABLE_IO(sv_dup((const SV *)s,t))
12659 #define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t))
12660 #define gv_dup(s,t)     MUTABLE_GV(sv_dup((const SV *)s,t))
12661 #define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t))
12662 #define SAVEPV(p)       ((p) ? savepv(p) : NULL)
12663 #define SAVEPVN(p,n)    ((p) ? savepvn(p,n) : NULL)
12664
12665 /* clone a parser */
12666
12667 yy_parser *
12668 Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
12669 {
12670     yy_parser *parser;
12671
12672     PERL_ARGS_ASSERT_PARSER_DUP;
12673
12674     if (!proto)
12675         return NULL;
12676
12677     /* look for it in the table first */
12678     parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
12679     if (parser)
12680         return parser;
12681
12682     /* create anew and remember what it is */
12683     Newxz(parser, 1, yy_parser);
12684     ptr_table_store(PL_ptr_table, proto, parser);
12685
12686     /* XXX these not yet duped */
12687     parser->old_parser = NULL;
12688     parser->stack = NULL;
12689     parser->ps = NULL;
12690     parser->stack_size = 0;
12691     /* XXX parser->stack->state = 0; */
12692
12693     /* XXX eventually, just Copy() most of the parser struct ? */
12694
12695     parser->lex_brackets = proto->lex_brackets;
12696     parser->lex_casemods = proto->lex_casemods;
12697     parser->lex_brackstack = savepvn(proto->lex_brackstack,
12698                     (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
12699     parser->lex_casestack = savepvn(proto->lex_casestack,
12700                     (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
12701     parser->lex_defer   = proto->lex_defer;
12702     parser->lex_dojoin  = proto->lex_dojoin;
12703     parser->lex_formbrack = proto->lex_formbrack;
12704     parser->lex_inpat   = proto->lex_inpat;
12705     parser->lex_inwhat  = proto->lex_inwhat;
12706     parser->lex_op      = proto->lex_op;
12707     parser->lex_repl    = sv_dup_inc(proto->lex_repl, param);
12708     parser->lex_starts  = proto->lex_starts;
12709     parser->lex_stuff   = sv_dup_inc(proto->lex_stuff, param);
12710     parser->multi_close = proto->multi_close;
12711     parser->multi_open  = proto->multi_open;
12712     parser->multi_start = proto->multi_start;
12713     parser->multi_end   = proto->multi_end;
12714     parser->preambled   = proto->preambled;
12715     parser->sublex_info = proto->sublex_info; /* XXX not quite right */
12716     parser->linestr     = sv_dup_inc(proto->linestr, param);
12717     parser->expect      = proto->expect;
12718     parser->copline     = proto->copline;
12719     parser->last_lop_op = proto->last_lop_op;
12720     parser->lex_state   = proto->lex_state;
12721     parser->rsfp        = fp_dup(proto->rsfp, '<', param);
12722     /* rsfp_filters entries have fake IoDIRP() */
12723     parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
12724     parser->in_my       = proto->in_my;
12725     parser->in_my_stash = hv_dup(proto->in_my_stash, param);
12726     parser->error_count = proto->error_count;
12727
12728
12729     parser->linestr     = sv_dup_inc(proto->linestr, param);
12730
12731     {
12732         char * const ols = SvPVX(proto->linestr);
12733         char * const ls  = SvPVX(parser->linestr);
12734
12735         parser->bufptr      = ls + (proto->bufptr >= ols ?
12736                                     proto->bufptr -  ols : 0);
12737         parser->oldbufptr   = ls + (proto->oldbufptr >= ols ?
12738                                     proto->oldbufptr -  ols : 0);
12739         parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
12740                                     proto->oldoldbufptr -  ols : 0);
12741         parser->linestart   = ls + (proto->linestart >= ols ?
12742                                     proto->linestart -  ols : 0);
12743         parser->last_uni    = ls + (proto->last_uni >= ols ?
12744                                     proto->last_uni -  ols : 0);
12745         parser->last_lop    = ls + (proto->last_lop >= ols ?
12746                                     proto->last_lop -  ols : 0);
12747
12748         parser->bufend      = ls + SvCUR(parser->linestr);
12749     }
12750
12751     Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
12752
12753
12754     Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
12755     Copy(proto->nexttype, parser->nexttype, 5,  I32);
12756     parser->nexttoke    = proto->nexttoke;
12757
12758     /* XXX should clone saved_curcop here, but we aren't passed
12759      * proto_perl; so do it in perl_clone_using instead */
12760
12761     return parser;
12762 }
12763
12764
12765 /* duplicate a file handle */
12766
12767 PerlIO *
12768 Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
12769 {
12770     PerlIO *ret;
12771
12772     PERL_ARGS_ASSERT_FP_DUP;
12773     PERL_UNUSED_ARG(type);
12774
12775     if (!fp)
12776         return (PerlIO*)NULL;
12777
12778     /* look for it in the table first */
12779     ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
12780     if (ret)
12781         return ret;
12782
12783     /* create anew and remember what it is */
12784     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
12785     ptr_table_store(PL_ptr_table, fp, ret);
12786     return ret;
12787 }
12788
12789 /* duplicate a directory handle */
12790
12791 DIR *
12792 Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
12793 {
12794     DIR *ret;
12795
12796 #if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
12797     DIR *pwd;
12798     const Direntry_t *dirent;
12799     char smallbuf[256];
12800     char *name = NULL;
12801     STRLEN len = 0;
12802     long pos;
12803 #endif
12804
12805     PERL_UNUSED_CONTEXT;
12806     PERL_ARGS_ASSERT_DIRP_DUP;
12807
12808     if (!dp)
12809         return (DIR*)NULL;
12810
12811     /* look for it in the table first */
12812     ret = (DIR*)ptr_table_fetch(PL_ptr_table, dp);
12813     if (ret)
12814         return ret;
12815
12816 #if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
12817
12818     PERL_UNUSED_ARG(param);
12819
12820     /* create anew */
12821
12822     /* open the current directory (so we can switch back) */
12823     if (!(pwd = PerlDir_open("."))) return (DIR *)NULL;
12824
12825     /* chdir to our dir handle and open the present working directory */
12826     if (fchdir(my_dirfd(dp)) < 0 || !(ret = PerlDir_open("."))) {
12827         PerlDir_close(pwd);
12828         return (DIR *)NULL;
12829     }
12830     /* Now we should have two dir handles pointing to the same dir. */
12831
12832     /* Be nice to the calling code and chdir back to where we were. */
12833     /* XXX If this fails, then what? */
12834     PERL_UNUSED_RESULT(fchdir(my_dirfd(pwd)));
12835
12836     /* We have no need of the pwd handle any more. */
12837     PerlDir_close(pwd);
12838
12839 #ifdef DIRNAMLEN
12840 # define d_namlen(d) (d)->d_namlen
12841 #else
12842 # define d_namlen(d) strlen((d)->d_name)
12843 #endif
12844     /* Iterate once through dp, to get the file name at the current posi-
12845        tion. Then step back. */
12846     pos = PerlDir_tell(dp);
12847     if ((dirent = PerlDir_read(dp))) {
12848         len = d_namlen(dirent);
12849         if (len <= sizeof smallbuf) name = smallbuf;
12850         else Newx(name, len, char);
12851         Move(dirent->d_name, name, len, char);
12852     }
12853     PerlDir_seek(dp, pos);
12854
12855     /* Iterate through the new dir handle, till we find a file with the
12856        right name. */
12857     if (!dirent) /* just before the end */
12858         for(;;) {
12859             pos = PerlDir_tell(ret);
12860             if (PerlDir_read(ret)) continue; /* not there yet */
12861             PerlDir_seek(ret, pos); /* step back */
12862             break;
12863         }
12864     else {
12865         const long pos0 = PerlDir_tell(ret);
12866         for(;;) {
12867             pos = PerlDir_tell(ret);
12868             if ((dirent = PerlDir_read(ret))) {
12869                 if (len == (STRLEN)d_namlen(dirent)
12870                     && memEQ(name, dirent->d_name, len)) {
12871                     /* found it */
12872                     PerlDir_seek(ret, pos); /* step back */
12873                     break;
12874                 }
12875                 /* else we are not there yet; keep iterating */
12876             }
12877             else { /* This is not meant to happen. The best we can do is
12878                       reset the iterator to the beginning. */
12879                 PerlDir_seek(ret, pos0);
12880                 break;
12881             }
12882         }
12883     }
12884 #undef d_namlen
12885
12886     if (name && name != smallbuf)
12887         Safefree(name);
12888 #endif
12889
12890 #ifdef WIN32
12891     ret = win32_dirp_dup(dp, param);
12892 #endif
12893
12894     /* pop it in the pointer table */
12895     if (ret)
12896         ptr_table_store(PL_ptr_table, dp, ret);
12897
12898     return ret;
12899 }
12900
12901 /* duplicate a typeglob */
12902
12903 GP *
12904 Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
12905 {
12906     GP *ret;
12907
12908     PERL_ARGS_ASSERT_GP_DUP;
12909
12910     if (!gp)
12911         return (GP*)NULL;
12912     /* look for it in the table first */
12913     ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
12914     if (ret)
12915         return ret;
12916
12917     /* create anew and remember what it is */
12918     Newxz(ret, 1, GP);
12919     ptr_table_store(PL_ptr_table, gp, ret);
12920
12921     /* clone */
12922     /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
12923        on Newxz() to do this for us.  */
12924     ret->gp_sv          = sv_dup_inc(gp->gp_sv, param);
12925     ret->gp_io          = io_dup_inc(gp->gp_io, param);
12926     ret->gp_form        = cv_dup_inc(gp->gp_form, param);
12927     ret->gp_av          = av_dup_inc(gp->gp_av, param);
12928     ret->gp_hv          = hv_dup_inc(gp->gp_hv, param);
12929     ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
12930     ret->gp_cv          = cv_dup_inc(gp->gp_cv, param);
12931     ret->gp_cvgen       = gp->gp_cvgen;
12932     ret->gp_line        = gp->gp_line;
12933     ret->gp_file_hek    = hek_dup(gp->gp_file_hek, param);
12934     return ret;
12935 }
12936
12937 /* duplicate a chain of magic */
12938
12939 MAGIC *
12940 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
12941 {
12942     MAGIC *mgret = NULL;
12943     MAGIC **mgprev_p = &mgret;
12944
12945     PERL_ARGS_ASSERT_MG_DUP;
12946
12947     for (; mg; mg = mg->mg_moremagic) {
12948         MAGIC *nmg;
12949
12950         if ((param->flags & CLONEf_JOIN_IN)
12951                 && mg->mg_type == PERL_MAGIC_backref)
12952             /* when joining, we let the individual SVs add themselves to
12953              * backref as needed. */
12954             continue;
12955
12956         Newx(nmg, 1, MAGIC);
12957         *mgprev_p = nmg;
12958         mgprev_p = &(nmg->mg_moremagic);
12959
12960         /* There was a comment "XXX copy dynamic vtable?" but as we don't have
12961            dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
12962            from the original commit adding Perl_mg_dup() - revision 4538.
12963            Similarly there is the annotation "XXX random ptr?" next to the
12964            assignment to nmg->mg_ptr.  */
12965         *nmg = *mg;
12966
12967         /* FIXME for plugins
12968         if (nmg->mg_type == PERL_MAGIC_qr) {
12969             nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
12970         }
12971         else
12972         */
12973         nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
12974                           ? nmg->mg_type == PERL_MAGIC_backref
12975                                 /* The backref AV has its reference
12976                                  * count deliberately bumped by 1 */
12977                                 ? SvREFCNT_inc(av_dup_inc((const AV *)
12978                                                     nmg->mg_obj, param))
12979                                 : sv_dup_inc(nmg->mg_obj, param)
12980                           : sv_dup(nmg->mg_obj, param);
12981
12982         if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
12983             if (nmg->mg_len > 0) {
12984                 nmg->mg_ptr     = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
12985                 if (nmg->mg_type == PERL_MAGIC_overload_table &&
12986                         AMT_AMAGIC((AMT*)nmg->mg_ptr))
12987                 {
12988                     AMT * const namtp = (AMT*)nmg->mg_ptr;
12989                     sv_dup_inc_multiple((SV**)(namtp->table),
12990                                         (SV**)(namtp->table), NofAMmeth, param);
12991                 }
12992             }
12993             else if (nmg->mg_len == HEf_SVKEY)
12994                 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
12995         }
12996         if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
12997             nmg->mg_virtual->svt_dup(aTHX_ nmg, param);
12998         }
12999     }
13000     return mgret;
13001 }
13002
13003 #endif /* USE_ITHREADS */
13004
13005 struct ptr_tbl_arena {
13006     struct ptr_tbl_arena *next;
13007     struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers.  */
13008 };
13009
13010 /* create a new pointer-mapping table */
13011
13012 PTR_TBL_t *
13013 Perl_ptr_table_new(pTHX)
13014 {
13015     PTR_TBL_t *tbl;
13016     PERL_UNUSED_CONTEXT;
13017
13018     Newx(tbl, 1, PTR_TBL_t);
13019     tbl->tbl_max        = 511;
13020     tbl->tbl_items      = 0;
13021     tbl->tbl_arena      = NULL;
13022     tbl->tbl_arena_next = NULL;
13023     tbl->tbl_arena_end  = NULL;
13024     Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
13025     return tbl;
13026 }
13027
13028 #define PTR_TABLE_HASH(ptr) \
13029   ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
13030
13031 /* map an existing pointer using a table */
13032
13033 STATIC PTR_TBL_ENT_t *
13034 S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
13035 {
13036     PTR_TBL_ENT_t *tblent;
13037     const UV hash = PTR_TABLE_HASH(sv);
13038
13039     PERL_ARGS_ASSERT_PTR_TABLE_FIND;
13040
13041     tblent = tbl->tbl_ary[hash & tbl->tbl_max];
13042     for (; tblent; tblent = tblent->next) {
13043         if (tblent->oldval == sv)
13044             return tblent;
13045     }
13046     return NULL;
13047 }
13048
13049 void *
13050 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
13051 {
13052     PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
13053
13054     PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
13055     PERL_UNUSED_CONTEXT;
13056
13057     return tblent ? tblent->newval : NULL;
13058 }
13059
13060 /* add a new entry to a pointer-mapping table 'tbl'.  In hash terms, 'oldsv' is
13061  * the key; 'newsv' is the value.  The names "old" and "new" are specific to
13062  * the core's typical use of ptr_tables in thread cloning. */
13063
13064 void
13065 Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
13066 {
13067     PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
13068
13069     PERL_ARGS_ASSERT_PTR_TABLE_STORE;
13070     PERL_UNUSED_CONTEXT;
13071
13072     if (tblent) {
13073         tblent->newval = newsv;
13074     } else {
13075         const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
13076
13077         if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
13078             struct ptr_tbl_arena *new_arena;
13079
13080             Newx(new_arena, 1, struct ptr_tbl_arena);
13081             new_arena->next = tbl->tbl_arena;
13082             tbl->tbl_arena = new_arena;
13083             tbl->tbl_arena_next = new_arena->array;
13084             tbl->tbl_arena_end = C_ARRAY_END(new_arena->array);
13085         }
13086
13087         tblent = tbl->tbl_arena_next++;
13088
13089         tblent->oldval = oldsv;
13090         tblent->newval = newsv;
13091         tblent->next = tbl->tbl_ary[entry];
13092         tbl->tbl_ary[entry] = tblent;
13093         tbl->tbl_items++;
13094         if (tblent->next && tbl->tbl_items > tbl->tbl_max)
13095             ptr_table_split(tbl);
13096     }
13097 }
13098
13099 /* double the hash bucket size of an existing ptr table */
13100
13101 void
13102 Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
13103 {
13104     PTR_TBL_ENT_t **ary = tbl->tbl_ary;
13105     const UV oldsize = tbl->tbl_max + 1;
13106     UV newsize = oldsize * 2;
13107     UV i;
13108
13109     PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
13110     PERL_UNUSED_CONTEXT;
13111
13112     Renew(ary, newsize, PTR_TBL_ENT_t*);
13113     Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
13114     tbl->tbl_max = --newsize;
13115     tbl->tbl_ary = ary;
13116     for (i=0; i < oldsize; i++, ary++) {
13117         PTR_TBL_ENT_t **entp = ary;
13118         PTR_TBL_ENT_t *ent = *ary;
13119         PTR_TBL_ENT_t **curentp;
13120         if (!ent)
13121             continue;
13122         curentp = ary + oldsize;
13123         do {
13124             if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
13125                 *entp = ent->next;
13126                 ent->next = *curentp;
13127                 *curentp = ent;
13128             }
13129             else
13130                 entp = &ent->next;
13131             ent = *entp;
13132         } while (ent);
13133     }
13134 }
13135
13136 /* remove all the entries from a ptr table */
13137 /* Deprecated - will be removed post 5.14 */
13138
13139 void
13140 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
13141 {
13142     PERL_UNUSED_CONTEXT;
13143     if (tbl && tbl->tbl_items) {
13144         struct ptr_tbl_arena *arena = tbl->tbl_arena;
13145
13146         Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent *);
13147
13148         while (arena) {
13149             struct ptr_tbl_arena *next = arena->next;
13150
13151             Safefree(arena);
13152             arena = next;
13153         };
13154
13155         tbl->tbl_items = 0;
13156         tbl->tbl_arena = NULL;
13157         tbl->tbl_arena_next = NULL;
13158         tbl->tbl_arena_end = NULL;
13159     }
13160 }
13161
13162 /* clear and free a ptr table */
13163
13164 void
13165 Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
13166 {
13167     struct ptr_tbl_arena *arena;
13168
13169     PERL_UNUSED_CONTEXT;
13170
13171     if (!tbl) {
13172         return;
13173     }
13174
13175     arena = tbl->tbl_arena;
13176
13177     while (arena) {
13178         struct ptr_tbl_arena *next = arena->next;
13179
13180         Safefree(arena);
13181         arena = next;
13182     }
13183
13184     Safefree(tbl->tbl_ary);
13185     Safefree(tbl);
13186 }
13187
13188 #if defined(USE_ITHREADS)
13189
13190 void
13191 Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
13192 {
13193     PERL_ARGS_ASSERT_RVPV_DUP;
13194
13195     assert(!isREGEXP(sstr));
13196     if (SvROK(sstr)) {
13197         if (SvWEAKREF(sstr)) {
13198             SvRV_set(dstr, sv_dup(SvRV_const(sstr), param));
13199             if (param->flags & CLONEf_JOIN_IN) {
13200                 /* if joining, we add any back references individually rather
13201                  * than copying the whole backref array */
13202                 Perl_sv_add_backref(aTHX_ SvRV(dstr), dstr);
13203             }
13204         }
13205         else
13206             SvRV_set(dstr, sv_dup_inc(SvRV_const(sstr), param));
13207     }
13208     else if (SvPVX_const(sstr)) {
13209         /* Has something there */
13210         if (SvLEN(sstr)) {
13211             /* Normal PV - clone whole allocated space */
13212             SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
13213             /* sstr may not be that normal, but actually copy on write.
13214                But we are a true, independent SV, so:  */
13215             SvIsCOW_off(dstr);
13216         }
13217         else {
13218             /* Special case - not normally malloced for some reason */
13219             if (isGV_with_GP(sstr)) {
13220                 /* Don't need to do anything here.  */
13221             }
13222             else if ((SvIsCOW(sstr))) {
13223                 /* A "shared" PV - clone it as "shared" PV */
13224                 SvPV_set(dstr,
13225                          HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
13226                                          param)));
13227             }
13228             else {
13229                 /* Some other special case - random pointer */
13230                 SvPV_set(dstr, (char *) SvPVX_const(sstr));             
13231             }
13232         }
13233     }
13234     else {
13235         /* Copy the NULL */
13236         SvPV_set(dstr, NULL);
13237     }
13238 }
13239
13240 /* duplicate a list of SVs. source and dest may point to the same memory.  */
13241 static SV **
13242 S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
13243                       SSize_t items, CLONE_PARAMS *const param)
13244 {
13245     PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
13246
13247     while (items-- > 0) {
13248         *dest++ = sv_dup_inc(*source++, param);
13249     }
13250
13251     return dest;
13252 }
13253
13254 /* duplicate an SV of any type (including AV, HV etc) */
13255
13256 static SV *
13257 S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
13258 {
13259     dVAR;
13260     SV *dstr;
13261
13262     PERL_ARGS_ASSERT_SV_DUP_COMMON;
13263
13264     if (SvTYPE(sstr) == (svtype)SVTYPEMASK) {
13265 #ifdef DEBUG_LEAKING_SCALARS_ABORT
13266         abort();
13267 #endif
13268         return NULL;
13269     }
13270     /* look for it in the table first */
13271     dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
13272     if (dstr)
13273         return dstr;
13274
13275     if(param->flags & CLONEf_JOIN_IN) {
13276         /** We are joining here so we don't want do clone
13277             something that is bad **/
13278         if (SvTYPE(sstr) == SVt_PVHV) {
13279             const HEK * const hvname = HvNAME_HEK(sstr);
13280             if (hvname) {
13281                 /** don't clone stashes if they already exist **/
13282                 dstr = MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
13283                                                 HEK_UTF8(hvname) ? SVf_UTF8 : 0));
13284                 ptr_table_store(PL_ptr_table, sstr, dstr);
13285                 return dstr;
13286             }
13287         }
13288         else if (SvTYPE(sstr) == SVt_PVGV && !SvFAKE(sstr)) {
13289             HV *stash = GvSTASH(sstr);
13290             const HEK * hvname;
13291             if (stash && (hvname = HvNAME_HEK(stash))) {
13292                 /** don't clone GVs if they already exist **/
13293                 SV **svp;
13294                 stash = gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
13295                                     HEK_UTF8(hvname) ? SVf_UTF8 : 0);
13296                 svp = hv_fetch(
13297                         stash, GvNAME(sstr),
13298                         GvNAMEUTF8(sstr)
13299                             ? -GvNAMELEN(sstr)
13300                             :  GvNAMELEN(sstr),
13301                         0
13302                       );
13303                 if (svp && *svp && SvTYPE(*svp) == SVt_PVGV) {
13304                     ptr_table_store(PL_ptr_table, sstr, *svp);
13305                     return *svp;
13306                 }
13307             }
13308         }
13309     }
13310
13311     /* create anew and remember what it is */
13312     new_SV(dstr);
13313
13314 #ifdef DEBUG_LEAKING_SCALARS
13315     dstr->sv_debug_optype = sstr->sv_debug_optype;
13316     dstr->sv_debug_line = sstr->sv_debug_line;
13317     dstr->sv_debug_inpad = sstr->sv_debug_inpad;
13318     dstr->sv_debug_parent = (SV*)sstr;
13319     FREE_SV_DEBUG_FILE(dstr);
13320     dstr->sv_debug_file = savesharedpv(sstr->sv_debug_file);
13321 #endif
13322
13323     ptr_table_store(PL_ptr_table, sstr, dstr);
13324
13325     /* clone */
13326     SvFLAGS(dstr)       = SvFLAGS(sstr);
13327     SvFLAGS(dstr)       &= ~SVf_OOK;            /* don't propagate OOK hack */
13328     SvREFCNT(dstr)      = 0;                    /* must be before any other dups! */
13329
13330 #ifdef DEBUGGING
13331     if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
13332         PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
13333                       (void*)PL_watch_pvx, SvPVX_const(sstr));
13334 #endif
13335
13336     /* don't clone objects whose class has asked us not to */
13337     if (SvOBJECT(sstr)
13338      && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE))
13339     {
13340         SvFLAGS(dstr) = 0;
13341         return dstr;
13342     }
13343
13344     switch (SvTYPE(sstr)) {
13345     case SVt_NULL:
13346         SvANY(dstr)     = NULL;
13347         break;
13348     case SVt_IV:
13349         SET_SVANY_FOR_BODYLESS_IV(dstr);
13350         if(SvROK(sstr)) {
13351             Perl_rvpv_dup(aTHX_ dstr, sstr, param);
13352         } else {
13353             SvIV_set(dstr, SvIVX(sstr));
13354         }
13355         break;
13356     case SVt_NV:
13357 #if NVSIZE <= IVSIZE
13358         SET_SVANY_FOR_BODYLESS_NV(dstr);
13359 #else
13360         SvANY(dstr)     = new_XNV();
13361 #endif
13362         SvNV_set(dstr, SvNVX(sstr));
13363         break;
13364     default:
13365         {
13366             /* These are all the types that need complex bodies allocating.  */
13367             void *new_body;
13368             const svtype sv_type = SvTYPE(sstr);
13369             const struct body_details *const sv_type_details
13370                 = bodies_by_type + sv_type;
13371
13372             switch (sv_type) {
13373             default:
13374                 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
13375                 break;
13376
13377             case SVt_PVGV:
13378             case SVt_PVIO:
13379             case SVt_PVFM:
13380             case SVt_PVHV:
13381             case SVt_PVAV:
13382             case SVt_PVCV:
13383             case SVt_PVLV:
13384             case SVt_REGEXP:
13385             case SVt_PVMG:
13386             case SVt_PVNV:
13387             case SVt_PVIV:
13388             case SVt_INVLIST:
13389             case SVt_PV:
13390                 assert(sv_type_details->body_size);
13391                 if (sv_type_details->arena) {
13392                     new_body_inline(new_body, sv_type);
13393                     new_body
13394                         = (void*)((char*)new_body - sv_type_details->offset);
13395                 } else {
13396                     new_body = new_NOARENA(sv_type_details);
13397                 }
13398             }
13399             assert(new_body);
13400             SvANY(dstr) = new_body;
13401
13402 #ifndef PURIFY
13403             Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
13404                  ((char*)SvANY(dstr)) + sv_type_details->offset,
13405                  sv_type_details->copy, char);
13406 #else
13407             Copy(((char*)SvANY(sstr)),
13408                  ((char*)SvANY(dstr)),
13409                  sv_type_details->body_size + sv_type_details->offset, char);
13410 #endif
13411
13412             if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
13413                 && !isGV_with_GP(dstr)
13414                 && !isREGEXP(dstr)
13415                 && !(sv_type == SVt_PVIO && !(IoFLAGS(dstr) & IOf_FAKE_DIRP)))
13416                 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
13417
13418             /* The Copy above means that all the source (unduplicated) pointers
13419                are now in the destination.  We can check the flags and the
13420                pointers in either, but it's possible that there's less cache
13421                missing by always going for the destination.
13422                FIXME - instrument and check that assumption  */
13423             if (sv_type >= SVt_PVMG) {
13424                 if (SvMAGIC(dstr))
13425                     SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
13426                 if (SvOBJECT(dstr) && SvSTASH(dstr))
13427                     SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
13428                 else SvSTASH_set(dstr, 0); /* don't copy DESTROY cache */
13429             }
13430
13431             /* The cast silences a GCC warning about unhandled types.  */
13432             switch ((int)sv_type) {
13433             case SVt_PV:
13434                 break;
13435             case SVt_PVIV:
13436                 break;
13437             case SVt_PVNV:
13438                 break;
13439             case SVt_PVMG:
13440                 break;
13441             case SVt_REGEXP:
13442               duprex:
13443                 /* FIXME for plugins */
13444                 dstr->sv_u.svu_rx = ((REGEXP *)dstr)->sv_any;
13445                 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
13446                 break;
13447             case SVt_PVLV:
13448                 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
13449                 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
13450                     LvTARG(dstr) = dstr;
13451                 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
13452                     LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
13453                 else
13454                     LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
13455                 if (isREGEXP(sstr)) goto duprex;
13456             case SVt_PVGV:
13457                 /* non-GP case already handled above */
13458                 if(isGV_with_GP(sstr)) {
13459                     GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
13460                     /* Don't call sv_add_backref here as it's going to be
13461                        created as part of the magic cloning of the symbol
13462                        table--unless this is during a join and the stash
13463                        is not actually being cloned.  */
13464                     /* Danger Will Robinson - GvGP(dstr) isn't initialised
13465                        at the point of this comment.  */
13466                     GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
13467                     if (param->flags & CLONEf_JOIN_IN)
13468                         Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
13469                     GvGP_set(dstr, gp_dup(GvGP(sstr), param));
13470                     (void)GpREFCNT_inc(GvGP(dstr));
13471                 }
13472                 break;
13473             case SVt_PVIO:
13474                 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
13475                 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
13476                     /* I have no idea why fake dirp (rsfps)
13477                        should be treated differently but otherwise
13478                        we end up with leaks -- sky*/
13479                     IoTOP_GV(dstr)      = gv_dup_inc(IoTOP_GV(dstr), param);
13480                     IoFMT_GV(dstr)      = gv_dup_inc(IoFMT_GV(dstr), param);
13481                     IoBOTTOM_GV(dstr)   = gv_dup_inc(IoBOTTOM_GV(dstr), param);
13482                 } else {
13483                     IoTOP_GV(dstr)      = gv_dup(IoTOP_GV(dstr), param);
13484                     IoFMT_GV(dstr)      = gv_dup(IoFMT_GV(dstr), param);
13485                     IoBOTTOM_GV(dstr)   = gv_dup(IoBOTTOM_GV(dstr), param);
13486                     if (IoDIRP(dstr)) {
13487                         IoDIRP(dstr)    = dirp_dup(IoDIRP(dstr), param);
13488                     } else {
13489                         NOOP;
13490                         /* IoDIRP(dstr) is already a copy of IoDIRP(sstr)  */
13491                     }
13492                     IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(dstr), param);
13493                 }
13494                 if (IoOFP(dstr) == IoIFP(sstr))
13495                     IoOFP(dstr) = IoIFP(dstr);
13496                 else
13497                     IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
13498                 IoTOP_NAME(dstr)        = SAVEPV(IoTOP_NAME(dstr));
13499                 IoFMT_NAME(dstr)        = SAVEPV(IoFMT_NAME(dstr));
13500                 IoBOTTOM_NAME(dstr)     = SAVEPV(IoBOTTOM_NAME(dstr));
13501                 break;
13502             case SVt_PVAV:
13503                 /* avoid cloning an empty array */
13504                 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
13505                     SV **dst_ary, **src_ary;
13506                     SSize_t items = AvFILLp((const AV *)sstr) + 1;
13507
13508                     src_ary = AvARRAY((const AV *)sstr);
13509                     Newxz(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
13510                     ptr_table_store(PL_ptr_table, src_ary, dst_ary);
13511                     AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
13512                     AvALLOC((const AV *)dstr) = dst_ary;
13513                     if (AvREAL((const AV *)sstr)) {
13514                         dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
13515                                                       param);
13516                     }
13517                     else {
13518                         while (items-- > 0)
13519                             *dst_ary++ = sv_dup(*src_ary++, param);
13520                     }
13521                     items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
13522                     while (items-- > 0) {
13523                         *dst_ary++ = NULL;
13524                     }
13525                 }
13526                 else {
13527                     AvARRAY(MUTABLE_AV(dstr))   = NULL;
13528                     AvALLOC((const AV *)dstr)   = (SV**)NULL;
13529                     AvMAX(  (const AV *)dstr)   = -1;
13530                     AvFILLp((const AV *)dstr)   = -1;
13531                 }
13532                 break;
13533             case SVt_PVHV:
13534                 if (HvARRAY((const HV *)sstr)) {
13535                     STRLEN i = 0;
13536                     const bool sharekeys = !!HvSHAREKEYS(sstr);
13537                     XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
13538                     XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
13539                     char *darray;
13540                     Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
13541                         + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
13542                         char);
13543                     HvARRAY(dstr) = (HE**)darray;
13544                     while (i <= sxhv->xhv_max) {
13545                         const HE * const source = HvARRAY(sstr)[i];
13546                         HvARRAY(dstr)[i] = source
13547                             ? he_dup(source, sharekeys, param) : 0;
13548                         ++i;
13549                     }
13550                     if (SvOOK(sstr)) {
13551                         const struct xpvhv_aux * const saux = HvAUX(sstr);
13552                         struct xpvhv_aux * const daux = HvAUX(dstr);
13553                         /* This flag isn't copied.  */
13554                         SvOOK_on(dstr);
13555
13556                         if (saux->xhv_name_count) {
13557                             HEK ** const sname = saux->xhv_name_u.xhvnameu_names;
13558                             const I32 count
13559                              = saux->xhv_name_count < 0
13560                                 ? -saux->xhv_name_count
13561                                 :  saux->xhv_name_count;
13562                             HEK **shekp = sname + count;
13563                             HEK **dhekp;
13564                             Newx(daux->xhv_name_u.xhvnameu_names, count, HEK *);
13565                             dhekp = daux->xhv_name_u.xhvnameu_names + count;
13566                             while (shekp-- > sname) {
13567                                 dhekp--;
13568                                 *dhekp = hek_dup(*shekp, param);
13569                             }
13570                         }
13571                         else {
13572                             daux->xhv_name_u.xhvnameu_name
13573                                 = hek_dup(saux->xhv_name_u.xhvnameu_name,
13574                                           param);
13575                         }
13576                         daux->xhv_name_count = saux->xhv_name_count;
13577
13578                         daux->xhv_fill_lazy = saux->xhv_fill_lazy;
13579                         daux->xhv_aux_flags = saux->xhv_aux_flags;
13580 #ifdef PERL_HASH_RANDOMIZE_KEYS
13581                         daux->xhv_rand = saux->xhv_rand;
13582                         daux->xhv_last_rand = saux->xhv_last_rand;
13583 #endif
13584                         daux->xhv_riter = saux->xhv_riter;
13585                         daux->xhv_eiter = saux->xhv_eiter
13586                             ? he_dup(saux->xhv_eiter,
13587                                         cBOOL(HvSHAREKEYS(sstr)), param) : 0;
13588                         /* backref array needs refcnt=2; see sv_add_backref */
13589                         daux->xhv_backreferences =
13590                             (param->flags & CLONEf_JOIN_IN)
13591                                 /* when joining, we let the individual GVs and
13592                                  * CVs add themselves to backref as
13593                                  * needed. This avoids pulling in stuff
13594                                  * that isn't required, and simplifies the
13595                                  * case where stashes aren't cloned back
13596                                  * if they already exist in the parent
13597                                  * thread */
13598                             ? NULL
13599                             : saux->xhv_backreferences
13600                                 ? (SvTYPE(saux->xhv_backreferences) == SVt_PVAV)
13601                                     ? MUTABLE_AV(SvREFCNT_inc(
13602                                           sv_dup_inc((const SV *)
13603                                             saux->xhv_backreferences, param)))
13604                                     : MUTABLE_AV(sv_dup((const SV *)
13605                                             saux->xhv_backreferences, param))
13606                                 : 0;
13607
13608                         daux->xhv_mro_meta = saux->xhv_mro_meta
13609                             ? mro_meta_dup(saux->xhv_mro_meta, param)
13610                             : 0;
13611
13612                         /* Record stashes for possible cloning in Perl_clone(). */
13613                         if (HvNAME(sstr))
13614                             av_push(param->stashes, dstr);
13615                     }
13616                 }
13617                 else
13618                     HvARRAY(MUTABLE_HV(dstr)) = NULL;
13619                 break;
13620             case SVt_PVCV:
13621                 if (!(param->flags & CLONEf_COPY_STACKS)) {
13622                     CvDEPTH(dstr) = 0;
13623                 }
13624                 /* FALLTHROUGH */
13625             case SVt_PVFM:
13626                 /* NOTE: not refcounted */
13627                 SvANY(MUTABLE_CV(dstr))->xcv_stash =
13628                     hv_dup(CvSTASH(dstr), param);
13629                 if ((param->flags & CLONEf_JOIN_IN) && CvSTASH(dstr))
13630                     Perl_sv_add_backref(aTHX_ MUTABLE_SV(CvSTASH(dstr)), dstr);
13631                 if (!CvISXSUB(dstr)) {
13632                     OP_REFCNT_LOCK;
13633                     CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
13634                     OP_REFCNT_UNLOCK;
13635                     CvSLABBED_off(dstr);
13636                 } else if (CvCONST(dstr)) {
13637                     CvXSUBANY(dstr).any_ptr =
13638                         sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
13639                 }
13640                 assert(!CvSLABBED(dstr));
13641                 if (CvDYNFILE(dstr)) CvFILE(dstr) = SAVEPV(CvFILE(dstr));
13642                 if (CvNAMED(dstr))
13643                     SvANY((CV *)dstr)->xcv_gv_u.xcv_hek =
13644                         hek_dup(CvNAME_HEK((CV *)sstr), param);
13645                 /* don't dup if copying back - CvGV isn't refcounted, so the
13646                  * duped GV may never be freed. A bit of a hack! DAPM */
13647                 else
13648                   SvANY(MUTABLE_CV(dstr))->xcv_gv_u.xcv_gv =
13649                     CvCVGV_RC(dstr)
13650                     ? gv_dup_inc(CvGV(sstr), param)
13651                     : (param->flags & CLONEf_JOIN_IN)
13652                         ? NULL
13653                         : gv_dup(CvGV(sstr), param);
13654
13655                 if (!CvISXSUB(sstr)) {
13656                     PADLIST * padlist = CvPADLIST(sstr);
13657                     if(padlist)
13658                         padlist = padlist_dup(padlist, param);
13659                     CvPADLIST_set(dstr, padlist);
13660                 } else
13661 /* unthreaded perl can't sv_dup so we dont support unthreaded's CvHSCXT */
13662                     PoisonPADLIST(dstr);
13663
13664                 CvOUTSIDE(dstr) =
13665                     CvWEAKOUTSIDE(sstr)
13666                     ? cv_dup(    CvOUTSIDE(dstr), param)
13667                     : cv_dup_inc(CvOUTSIDE(dstr), param);
13668                 break;
13669             }
13670         }
13671     }
13672
13673     return dstr;
13674  }
13675
13676 SV *
13677 Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
13678 {
13679     PERL_ARGS_ASSERT_SV_DUP_INC;
13680     return sstr ? SvREFCNT_inc(sv_dup_common(sstr, param)) : NULL;
13681 }
13682
13683 SV *
13684 Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
13685 {
13686     SV *dstr = sstr ? sv_dup_common(sstr, param) : NULL;
13687     PERL_ARGS_ASSERT_SV_DUP;
13688
13689     /* Track every SV that (at least initially) had a reference count of 0.
13690        We need to do this by holding an actual reference to it in this array.
13691        If we attempt to cheat, turn AvREAL_off(), and store only pointers
13692        (akin to the stashes hash, and the perl stack), we come unstuck if
13693        a weak reference (or other SV legitimately SvREFCNT() == 0 for this
13694        thread) is manipulated in a CLONE method, because CLONE runs before the
13695        unreferenced array is walked to find SVs still with SvREFCNT() == 0
13696        (and fix things up by giving each a reference via the temps stack).
13697        Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and
13698        then SvREFCNT_dec(), it will be cleaned up (and added to the free list)
13699        before the walk of unreferenced happens and a reference to that is SV
13700        added to the temps stack. At which point we have the same SV considered
13701        to be in use, and free to be re-used. Not good.
13702     */
13703     if (dstr && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dstr)) {
13704         assert(param->unreferenced);
13705         av_push(param->unreferenced, SvREFCNT_inc(dstr));
13706     }
13707
13708     return dstr;
13709 }
13710
13711 /* duplicate a context */
13712
13713 PERL_CONTEXT *
13714 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
13715 {
13716     PERL_CONTEXT *ncxs;
13717
13718     PERL_ARGS_ASSERT_CX_DUP;
13719
13720     if (!cxs)
13721         return (PERL_CONTEXT*)NULL;
13722
13723     /* look for it in the table first */
13724     ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
13725     if (ncxs)
13726         return ncxs;
13727
13728     /* create anew and remember what it is */
13729     Newx(ncxs, max + 1, PERL_CONTEXT);
13730     ptr_table_store(PL_ptr_table, cxs, ncxs);
13731     Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
13732
13733     while (ix >= 0) {
13734         PERL_CONTEXT * const ncx = &ncxs[ix];
13735         if (CxTYPE(ncx) == CXt_SUBST) {
13736             Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
13737         }
13738         else {
13739             ncx->blk_oldcop = (COP*)any_dup(ncx->blk_oldcop, param->proto_perl);
13740             switch (CxTYPE(ncx)) {
13741             case CXt_SUB:
13742                 ncx->blk_sub.cv         = (ncx->blk_sub.olddepth == 0
13743                                            ? cv_dup_inc(ncx->blk_sub.cv, param)
13744                                            : cv_dup(ncx->blk_sub.cv,param));
13745                 if(CxHASARGS(ncx)){
13746                     ncx->blk_sub.argarray = av_dup_inc(ncx->blk_sub.argarray,param);
13747                     ncx->blk_sub.savearray = av_dup_inc(ncx->blk_sub.savearray,param);
13748                 } else {
13749                     ncx->blk_sub.argarray = NULL;
13750                     ncx->blk_sub.savearray = NULL;
13751                 }
13752                 ncx->blk_sub.oldcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
13753                                            ncx->blk_sub.oldcomppad);
13754                 break;
13755             case CXt_EVAL:
13756                 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
13757                                                       param);
13758                 ncx->blk_eval.cur_text  = sv_dup(ncx->blk_eval.cur_text, param);
13759                 ncx->blk_eval.cv = cv_dup(ncx->blk_eval.cv, param);
13760                 break;
13761             case CXt_LOOP_LAZYSV:
13762                 ncx->blk_loop.state_u.lazysv.end
13763                     = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
13764                 /* Fallthrough: duplicate lazysv.cur by using the ary.ary
13765                    duplication code instead.
13766                    We are taking advantage of (1) av_dup_inc and sv_dup_inc
13767                    actually being the same function, and (2) order
13768                    equivalence of the two unions.
13769                    We can assert the later [but only at run time :-(]  */
13770                 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
13771                         (void *) &ncx->blk_loop.state_u.lazysv.cur);
13772                 /* FALLTHROUGH */
13773             case CXt_LOOP_FOR:
13774                 ncx->blk_loop.state_u.ary.ary
13775                     = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
13776                 /* FALLTHROUGH */
13777             case CXt_LOOP_LAZYIV:
13778             case CXt_LOOP_PLAIN:
13779                 /* code common to all CXt_LOOP_* types */
13780                 if (CxPADLOOP(ncx)) {
13781                     ncx->blk_loop.itervar_u.oldcomppad
13782                         = (PAD*)ptr_table_fetch(PL_ptr_table,
13783                                         ncx->blk_loop.itervar_u.oldcomppad);
13784                 } else {
13785                     ncx->blk_loop.itervar_u.gv
13786                         = gv_dup((const GV *)ncx->blk_loop.itervar_u.gv,
13787                                     param);
13788                 }
13789                 break;
13790             case CXt_FORMAT:
13791                 ncx->blk_format.cv      = cv_dup(ncx->blk_format.cv, param);
13792                 ncx->blk_format.gv      = gv_dup(ncx->blk_format.gv, param);
13793                 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
13794                                                      param);
13795                 break;
13796             case CXt_BLOCK:
13797             case CXt_NULL:
13798             case CXt_WHEN:
13799             case CXt_GIVEN:
13800                 break;
13801             }
13802         }
13803         --ix;
13804     }
13805     return ncxs;
13806 }
13807
13808 /* duplicate a stack info structure */
13809
13810 PERL_SI *
13811 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
13812 {
13813     PERL_SI *nsi;
13814
13815     PERL_ARGS_ASSERT_SI_DUP;
13816
13817     if (!si)
13818         return (PERL_SI*)NULL;
13819
13820     /* look for it in the table first */
13821     nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
13822     if (nsi)
13823         return nsi;
13824
13825     /* create anew and remember what it is */
13826     Newxz(nsi, 1, PERL_SI);
13827     ptr_table_store(PL_ptr_table, si, nsi);
13828
13829     nsi->si_stack       = av_dup_inc(si->si_stack, param);
13830     nsi->si_cxix        = si->si_cxix;
13831     nsi->si_cxmax       = si->si_cxmax;
13832     nsi->si_cxstack     = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
13833     nsi->si_type        = si->si_type;
13834     nsi->si_prev        = si_dup(si->si_prev, param);
13835     nsi->si_next        = si_dup(si->si_next, param);
13836     nsi->si_markoff     = si->si_markoff;
13837
13838     return nsi;
13839 }
13840
13841 #define POPINT(ss,ix)   ((ss)[--(ix)].any_i32)
13842 #define TOPINT(ss,ix)   ((ss)[ix].any_i32)
13843 #define POPLONG(ss,ix)  ((ss)[--(ix)].any_long)
13844 #define TOPLONG(ss,ix)  ((ss)[ix].any_long)
13845 #define POPIV(ss,ix)    ((ss)[--(ix)].any_iv)
13846 #define TOPIV(ss,ix)    ((ss)[ix].any_iv)
13847 #define POPUV(ss,ix)    ((ss)[--(ix)].any_uv)
13848 #define TOPUV(ss,ix)    ((ss)[ix].any_uv)
13849 #define POPBOOL(ss,ix)  ((ss)[--(ix)].any_bool)
13850 #define TOPBOOL(ss,ix)  ((ss)[ix].any_bool)
13851 #define POPPTR(ss,ix)   ((ss)[--(ix)].any_ptr)
13852 #define TOPPTR(ss,ix)   ((ss)[ix].any_ptr)
13853 #define POPDPTR(ss,ix)  ((ss)[--(ix)].any_dptr)
13854 #define TOPDPTR(ss,ix)  ((ss)[ix].any_dptr)
13855 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
13856 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
13857
13858 /* XXXXX todo */
13859 #define pv_dup_inc(p)   SAVEPV(p)
13860 #define pv_dup(p)       SAVEPV(p)
13861 #define svp_dup_inc(p,pp)       any_dup(p,pp)
13862
13863 /* map any object to the new equivent - either something in the
13864  * ptr table, or something in the interpreter structure
13865  */
13866
13867 void *
13868 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
13869 {
13870     void *ret;
13871
13872     PERL_ARGS_ASSERT_ANY_DUP;
13873
13874     if (!v)
13875         return (void*)NULL;
13876
13877     /* look for it in the table first */
13878     ret = ptr_table_fetch(PL_ptr_table, v);
13879     if (ret)
13880         return ret;
13881
13882     /* see if it is part of the interpreter structure */
13883     if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
13884         ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
13885     else {
13886         ret = v;
13887     }
13888
13889     return ret;
13890 }
13891
13892 /* duplicate the save stack */
13893
13894 ANY *
13895 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
13896 {
13897     dVAR;
13898     ANY * const ss      = proto_perl->Isavestack;
13899     const I32 max       = proto_perl->Isavestack_max;
13900     I32 ix              = proto_perl->Isavestack_ix;
13901     ANY *nss;
13902     const SV *sv;
13903     const GV *gv;
13904     const AV *av;
13905     const HV *hv;
13906     void* ptr;
13907     int intval;
13908     long longval;
13909     GP *gp;
13910     IV iv;
13911     I32 i;
13912     char *c = NULL;
13913     void (*dptr) (void*);
13914     void (*dxptr) (pTHX_ void*);
13915
13916     PERL_ARGS_ASSERT_SS_DUP;
13917
13918     Newxz(nss, max, ANY);
13919
13920     while (ix > 0) {
13921         const UV uv = POPUV(ss,ix);
13922         const U8 type = (U8)uv & SAVE_MASK;
13923
13924         TOPUV(nss,ix) = uv;
13925         switch (type) {
13926         case SAVEt_CLEARSV:
13927         case SAVEt_CLEARPADRANGE:
13928             break;
13929         case SAVEt_HELEM:               /* hash element */
13930         case SAVEt_SV:                  /* scalar reference */
13931             sv = (const SV *)POPPTR(ss,ix);
13932             TOPPTR(nss,ix) = SvREFCNT_inc(sv_dup_inc(sv, param));
13933             /* FALLTHROUGH */
13934         case SAVEt_ITEM:                        /* normal string */
13935         case SAVEt_GVSV:                        /* scalar slot in GV */
13936             sv = (const SV *)POPPTR(ss,ix);
13937             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13938             if (type == SAVEt_SV)
13939                 break;
13940             /* FALLTHROUGH */
13941         case SAVEt_FREESV:
13942         case SAVEt_MORTALIZESV:
13943         case SAVEt_READONLY_OFF:
13944             sv = (const SV *)POPPTR(ss,ix);
13945             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13946             break;
13947         case SAVEt_FREEPADNAME:
13948             ptr = POPPTR(ss,ix);
13949             TOPPTR(nss,ix) = padname_dup((PADNAME *)ptr, param);
13950             PadnameREFCNT((PADNAME *)TOPPTR(nss,ix))++;
13951             break;
13952         case SAVEt_SHARED_PVREF:                /* char* in shared space */
13953             c = (char*)POPPTR(ss,ix);
13954             TOPPTR(nss,ix) = savesharedpv(c);
13955             ptr = POPPTR(ss,ix);
13956             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13957             break;
13958         case SAVEt_GENERIC_SVREF:               /* generic sv */
13959         case SAVEt_SVREF:                       /* scalar reference */
13960             sv = (const SV *)POPPTR(ss,ix);
13961             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13962             if (type == SAVEt_SVREF)
13963                 SvREFCNT_inc_simple_void((SV *)TOPPTR(nss,ix));
13964             ptr = POPPTR(ss,ix);
13965             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
13966             break;
13967         case SAVEt_GVSLOT:              /* any slot in GV */
13968             sv = (const SV *)POPPTR(ss,ix);
13969             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13970             ptr = POPPTR(ss,ix);
13971             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
13972             sv = (const SV *)POPPTR(ss,ix);
13973             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13974             break;
13975         case SAVEt_HV:                          /* hash reference */
13976         case SAVEt_AV:                          /* array reference */
13977             sv = (const SV *) POPPTR(ss,ix);
13978             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
13979             /* FALLTHROUGH */
13980         case SAVEt_COMPPAD:
13981         case SAVEt_NSTAB:
13982             sv = (const SV *) POPPTR(ss,ix);
13983             TOPPTR(nss,ix) = sv_dup(sv, param);
13984             break;
13985         case SAVEt_INT:                         /* int reference */
13986             ptr = POPPTR(ss,ix);
13987             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13988             intval = (int)POPINT(ss,ix);
13989             TOPINT(nss,ix) = intval;
13990             break;
13991         case SAVEt_LONG:                        /* long reference */
13992             ptr = POPPTR(ss,ix);
13993             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
13994             longval = (long)POPLONG(ss,ix);
13995             TOPLONG(nss,ix) = longval;
13996             break;
13997         case SAVEt_I32:                         /* I32 reference */
13998             ptr = POPPTR(ss,ix);
13999             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14000             i = POPINT(ss,ix);
14001             TOPINT(nss,ix) = i;
14002             break;
14003         case SAVEt_IV:                          /* IV reference */
14004         case SAVEt_STRLEN:                      /* STRLEN/size_t ref */
14005             ptr = POPPTR(ss,ix);
14006             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14007             iv = POPIV(ss,ix);
14008             TOPIV(nss,ix) = iv;
14009             break;
14010         case SAVEt_HPTR:                        /* HV* reference */
14011         case SAVEt_APTR:                        /* AV* reference */
14012         case SAVEt_SPTR:                        /* SV* reference */
14013             ptr = POPPTR(ss,ix);
14014             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14015             sv = (const SV *)POPPTR(ss,ix);
14016             TOPPTR(nss,ix) = sv_dup(sv, param);
14017             break;
14018         case SAVEt_VPTR:                        /* random* reference */
14019             ptr = POPPTR(ss,ix);
14020             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14021             /* FALLTHROUGH */
14022         case SAVEt_INT_SMALL:
14023         case SAVEt_I32_SMALL:
14024         case SAVEt_I16:                         /* I16 reference */
14025         case SAVEt_I8:                          /* I8 reference */
14026         case SAVEt_BOOL:
14027             ptr = POPPTR(ss,ix);
14028             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14029             break;
14030         case SAVEt_GENERIC_PVREF:               /* generic char* */
14031         case SAVEt_PPTR:                        /* char* reference */
14032             ptr = POPPTR(ss,ix);
14033             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14034             c = (char*)POPPTR(ss,ix);
14035             TOPPTR(nss,ix) = pv_dup(c);
14036             break;
14037         case SAVEt_GP:                          /* scalar reference */
14038             gp = (GP*)POPPTR(ss,ix);
14039             TOPPTR(nss,ix) = gp = gp_dup(gp, param);
14040             (void)GpREFCNT_inc(gp);
14041             gv = (const GV *)POPPTR(ss,ix);
14042             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
14043             break;
14044         case SAVEt_FREEOP:
14045             ptr = POPPTR(ss,ix);
14046             if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
14047                 /* these are assumed to be refcounted properly */
14048                 OP *o;
14049                 switch (((OP*)ptr)->op_type) {
14050                 case OP_LEAVESUB:
14051                 case OP_LEAVESUBLV:
14052                 case OP_LEAVEEVAL:
14053                 case OP_LEAVE:
14054                 case OP_SCOPE:
14055                 case OP_LEAVEWRITE:
14056                     TOPPTR(nss,ix) = ptr;
14057                     o = (OP*)ptr;
14058                     OP_REFCNT_LOCK;
14059                     (void) OpREFCNT_inc(o);
14060                     OP_REFCNT_UNLOCK;
14061                     break;
14062                 default:
14063                     TOPPTR(nss,ix) = NULL;
14064                     break;
14065                 }
14066             }
14067             else
14068                 TOPPTR(nss,ix) = NULL;
14069             break;
14070         case SAVEt_FREECOPHH:
14071             ptr = POPPTR(ss,ix);
14072             TOPPTR(nss,ix) = cophh_copy((COPHH *)ptr);
14073             break;
14074         case SAVEt_ADELETE:
14075             av = (const AV *)POPPTR(ss,ix);
14076             TOPPTR(nss,ix) = av_dup_inc(av, param);
14077             i = POPINT(ss,ix);
14078             TOPINT(nss,ix) = i;
14079             break;
14080         case SAVEt_DELETE:
14081             hv = (const HV *)POPPTR(ss,ix);
14082             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
14083             i = POPINT(ss,ix);
14084             TOPINT(nss,ix) = i;
14085             /* FALLTHROUGH */
14086         case SAVEt_FREEPV:
14087             c = (char*)POPPTR(ss,ix);
14088             TOPPTR(nss,ix) = pv_dup_inc(c);
14089             break;
14090         case SAVEt_STACK_POS:           /* Position on Perl stack */
14091             i = POPINT(ss,ix);
14092             TOPINT(nss,ix) = i;
14093             break;
14094         case SAVEt_DESTRUCTOR:
14095             ptr = POPPTR(ss,ix);
14096             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
14097             dptr = POPDPTR(ss,ix);
14098             TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
14099                                         any_dup(FPTR2DPTR(void *, dptr),
14100                                                 proto_perl));
14101             break;
14102         case SAVEt_DESTRUCTOR_X:
14103             ptr = POPPTR(ss,ix);
14104             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
14105             dxptr = POPDXPTR(ss,ix);
14106             TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
14107                                          any_dup(FPTR2DPTR(void *, dxptr),
14108                                                  proto_perl));
14109             break;
14110         case SAVEt_REGCONTEXT:
14111         case SAVEt_ALLOC:
14112             ix -= uv >> SAVE_TIGHT_SHIFT;
14113             break;
14114         case SAVEt_AELEM:               /* array element */
14115             sv = (const SV *)POPPTR(ss,ix);
14116             TOPPTR(nss,ix) = SvREFCNT_inc(sv_dup_inc(sv, param));
14117             i = POPINT(ss,ix);
14118             TOPINT(nss,ix) = i;
14119             av = (const AV *)POPPTR(ss,ix);
14120             TOPPTR(nss,ix) = av_dup_inc(av, param);
14121             break;
14122         case SAVEt_OP:
14123             ptr = POPPTR(ss,ix);
14124             TOPPTR(nss,ix) = ptr;
14125             break;
14126         case SAVEt_HINTS:
14127             ptr = POPPTR(ss,ix);
14128             ptr = cophh_copy((COPHH*)ptr);
14129             TOPPTR(nss,ix) = ptr;
14130             i = POPINT(ss,ix);
14131             TOPINT(nss,ix) = i;
14132             if (i & HINT_LOCALIZE_HH) {
14133                 hv = (const HV *)POPPTR(ss,ix);
14134                 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
14135             }
14136             break;
14137         case SAVEt_PADSV_AND_MORTALIZE:
14138             longval = (long)POPLONG(ss,ix);
14139             TOPLONG(nss,ix) = longval;
14140             ptr = POPPTR(ss,ix);
14141             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14142             sv = (const SV *)POPPTR(ss,ix);
14143             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14144             break;
14145         case SAVEt_SET_SVFLAGS:
14146             i = POPINT(ss,ix);
14147             TOPINT(nss,ix) = i;
14148             i = POPINT(ss,ix);
14149             TOPINT(nss,ix) = i;
14150             sv = (const SV *)POPPTR(ss,ix);
14151             TOPPTR(nss,ix) = sv_dup(sv, param);
14152             break;
14153         case SAVEt_COMPILE_WARNINGS:
14154             ptr = POPPTR(ss,ix);
14155             TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
14156             break;
14157         case SAVEt_PARSER:
14158             ptr = POPPTR(ss,ix);
14159             TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
14160             break;
14161         default:
14162             Perl_croak(aTHX_
14163                        "panic: ss_dup inconsistency (%"IVdf")", (IV) type);
14164         }
14165     }
14166
14167     return nss;
14168 }
14169
14170
14171 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
14172  * flag to the result. This is done for each stash before cloning starts,
14173  * so we know which stashes want their objects cloned */
14174
14175 static void
14176 do_mark_cloneable_stash(pTHX_ SV *const sv)
14177 {
14178     const HEK * const hvname = HvNAME_HEK((const HV *)sv);
14179     if (hvname) {
14180         GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
14181         SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
14182         if (cloner && GvCV(cloner)) {
14183             dSP;
14184             UV status;
14185
14186             ENTER;
14187             SAVETMPS;
14188             PUSHMARK(SP);
14189             mXPUSHs(newSVhek(hvname));
14190             PUTBACK;
14191             call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
14192             SPAGAIN;
14193             status = POPu;
14194             PUTBACK;
14195             FREETMPS;
14196             LEAVE;
14197             if (status)
14198                 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
14199         }
14200     }
14201 }
14202
14203
14204
14205 /*
14206 =for apidoc perl_clone
14207
14208 Create and return a new interpreter by cloning the current one.
14209
14210 perl_clone takes these flags as parameters:
14211
14212 CLONEf_COPY_STACKS - is used to, well, copy the stacks also,
14213 without it we only clone the data and zero the stacks,
14214 with it we copy the stacks and the new perl interpreter is
14215 ready to run at the exact same point as the previous one.
14216 The pseudo-fork code uses COPY_STACKS while the
14217 threads->create doesn't.
14218
14219 CLONEf_KEEP_PTR_TABLE -
14220 perl_clone keeps a ptr_table with the pointer of the old
14221 variable as a key and the new variable as a value,
14222 this allows it to check if something has been cloned and not
14223 clone it again but rather just use the value and increase the
14224 refcount.  If KEEP_PTR_TABLE is not set then perl_clone will kill
14225 the ptr_table using the function
14226 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
14227 reason to keep it around is if you want to dup some of your own
14228 variable who are outside the graph perl scans, example of this
14229 code is in F<threads.xs> create.
14230
14231 CLONEf_CLONE_HOST -
14232 This is a win32 thing, it is ignored on unix, it tells perls
14233 win32host code (which is c++) to clone itself, this is needed on
14234 win32 if you want to run two threads at the same time,
14235 if you just want to do some stuff in a separate perl interpreter
14236 and then throw it away and return to the original one,
14237 you don't need to do anything.
14238
14239 =cut
14240 */
14241
14242 /* XXX the above needs expanding by someone who actually understands it ! */
14243 EXTERN_C PerlInterpreter *
14244 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
14245
14246 PerlInterpreter *
14247 perl_clone(PerlInterpreter *proto_perl, UV flags)
14248 {
14249    dVAR;
14250 #ifdef PERL_IMPLICIT_SYS
14251
14252     PERL_ARGS_ASSERT_PERL_CLONE;
14253
14254    /* perlhost.h so we need to call into it
14255    to clone the host, CPerlHost should have a c interface, sky */
14256
14257    if (flags & CLONEf_CLONE_HOST) {
14258        return perl_clone_host(proto_perl,flags);
14259    }
14260    return perl_clone_using(proto_perl, flags,
14261                             proto_perl->IMem,
14262                             proto_perl->IMemShared,
14263                             proto_perl->IMemParse,
14264                             proto_perl->IEnv,
14265                             proto_perl->IStdIO,
14266                             proto_perl->ILIO,
14267                             proto_perl->IDir,
14268                             proto_perl->ISock,
14269                             proto_perl->IProc);
14270 }
14271
14272 PerlInterpreter *
14273 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
14274                  struct IPerlMem* ipM, struct IPerlMem* ipMS,
14275                  struct IPerlMem* ipMP, struct IPerlEnv* ipE,
14276                  struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
14277                  struct IPerlDir* ipD, struct IPerlSock* ipS,
14278                  struct IPerlProc* ipP)
14279 {
14280     /* XXX many of the string copies here can be optimized if they're
14281      * constants; they need to be allocated as common memory and just
14282      * their pointers copied. */
14283
14284     IV i;
14285     CLONE_PARAMS clone_params;
14286     CLONE_PARAMS* const param = &clone_params;
14287
14288     PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
14289
14290     PERL_ARGS_ASSERT_PERL_CLONE_USING;
14291 #else           /* !PERL_IMPLICIT_SYS */
14292     IV i;
14293     CLONE_PARAMS clone_params;
14294     CLONE_PARAMS* param = &clone_params;
14295     PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
14296
14297     PERL_ARGS_ASSERT_PERL_CLONE;
14298 #endif          /* PERL_IMPLICIT_SYS */
14299
14300     /* for each stash, determine whether its objects should be cloned */
14301     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
14302     PERL_SET_THX(my_perl);
14303
14304 #ifdef DEBUGGING
14305     PoisonNew(my_perl, 1, PerlInterpreter);
14306     PL_op = NULL;
14307     PL_curcop = NULL;
14308     PL_defstash = NULL; /* may be used by perl malloc() */
14309     PL_markstack = 0;
14310     PL_scopestack = 0;
14311     PL_scopestack_name = 0;
14312     PL_savestack = 0;
14313     PL_savestack_ix = 0;
14314     PL_savestack_max = -1;
14315     PL_sig_pending = 0;
14316     PL_parser = NULL;
14317     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
14318     Zero(&PL_padname_undef, 1, PADNAME);
14319     Zero(&PL_padname_const, 1, PADNAME);
14320 #  ifdef DEBUG_LEAKING_SCALARS
14321     PL_sv_serial = (((UV)my_perl >> 2) & 0xfff) * 1000000;
14322 #  endif
14323 #  ifdef PERL_TRACE_OPS
14324     Zero(PL_op_exec_cnt, OP_max+2, UV);
14325 #  endif
14326 #else   /* !DEBUGGING */
14327     Zero(my_perl, 1, PerlInterpreter);
14328 #endif  /* DEBUGGING */
14329
14330 #ifdef PERL_IMPLICIT_SYS
14331     /* host pointers */
14332     PL_Mem              = ipM;
14333     PL_MemShared        = ipMS;
14334     PL_MemParse         = ipMP;
14335     PL_Env              = ipE;
14336     PL_StdIO            = ipStd;
14337     PL_LIO              = ipLIO;
14338     PL_Dir              = ipD;
14339     PL_Sock             = ipS;
14340     PL_Proc             = ipP;
14341 #endif          /* PERL_IMPLICIT_SYS */
14342
14343
14344     param->flags = flags;
14345     /* Nothing in the core code uses this, but we make it available to
14346        extensions (using mg_dup).  */
14347     param->proto_perl = proto_perl;
14348     /* Likely nothing will use this, but it is initialised to be consistent
14349        with Perl_clone_params_new().  */
14350     param->new_perl = my_perl;
14351     param->unreferenced = NULL;
14352
14353
14354     INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
14355
14356     PL_body_arenas = NULL;
14357     Zero(&PL_body_roots, 1, PL_body_roots);
14358     
14359     PL_sv_count         = 0;
14360     PL_sv_root          = NULL;
14361     PL_sv_arenaroot     = NULL;
14362
14363     PL_debug            = proto_perl->Idebug;
14364
14365     /* dbargs array probably holds garbage */
14366     PL_dbargs           = NULL;
14367
14368     PL_compiling = proto_perl->Icompiling;
14369
14370     /* pseudo environmental stuff */
14371     PL_origargc         = proto_perl->Iorigargc;
14372     PL_origargv         = proto_perl->Iorigargv;
14373
14374 #ifndef NO_TAINT_SUPPORT
14375     /* Set tainting stuff before PerlIO_debug can possibly get called */
14376     PL_tainting         = proto_perl->Itainting;
14377     PL_taint_warn       = proto_perl->Itaint_warn;
14378 #else
14379     PL_tainting         = FALSE;
14380     PL_taint_warn       = FALSE;
14381 #endif
14382
14383     PL_minus_c          = proto_perl->Iminus_c;
14384
14385     PL_localpatches     = proto_perl->Ilocalpatches;
14386     PL_splitstr         = proto_perl->Isplitstr;
14387     PL_minus_n          = proto_perl->Iminus_n;
14388     PL_minus_p          = proto_perl->Iminus_p;
14389     PL_minus_l          = proto_perl->Iminus_l;
14390     PL_minus_a          = proto_perl->Iminus_a;
14391     PL_minus_E          = proto_perl->Iminus_E;
14392     PL_minus_F          = proto_perl->Iminus_F;
14393     PL_doswitches       = proto_perl->Idoswitches;
14394     PL_dowarn           = proto_perl->Idowarn;
14395 #ifdef PERL_SAWAMPERSAND
14396     PL_sawampersand     = proto_perl->Isawampersand;
14397 #endif
14398     PL_unsafe           = proto_perl->Iunsafe;
14399     PL_perldb           = proto_perl->Iperldb;
14400     PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
14401     PL_exit_flags       = proto_perl->Iexit_flags;
14402
14403     /* XXX time(&PL_basetime) when asked for? */
14404     PL_basetime         = proto_perl->Ibasetime;
14405
14406     PL_maxsysfd         = proto_perl->Imaxsysfd;
14407     PL_statusvalue      = proto_perl->Istatusvalue;
14408 #ifdef __VMS
14409     PL_statusvalue_vms  = proto_perl->Istatusvalue_vms;
14410 #else
14411     PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
14412 #endif
14413
14414     /* RE engine related */
14415     PL_regmatch_slab    = NULL;
14416     PL_reg_curpm        = NULL;
14417
14418     PL_sub_generation   = proto_perl->Isub_generation;
14419
14420     /* funky return mechanisms */
14421     PL_forkprocess      = proto_perl->Iforkprocess;
14422
14423     /* internal state */
14424     PL_maxo             = proto_perl->Imaxo;
14425
14426     PL_main_start       = proto_perl->Imain_start;
14427     PL_eval_root        = proto_perl->Ieval_root;
14428     PL_eval_start       = proto_perl->Ieval_start;
14429
14430     PL_filemode         = proto_perl->Ifilemode;
14431     PL_lastfd           = proto_perl->Ilastfd;
14432     PL_oldname          = proto_perl->Ioldname;         /* XXX not quite right */
14433     PL_Argv             = NULL;
14434     PL_Cmd              = NULL;
14435     PL_gensym           = proto_perl->Igensym;
14436
14437     PL_laststatval      = proto_perl->Ilaststatval;
14438     PL_laststype        = proto_perl->Ilaststype;
14439     PL_mess_sv          = NULL;
14440
14441     PL_profiledata      = NULL;
14442
14443     PL_generation       = proto_perl->Igeneration;
14444
14445     PL_in_clean_objs    = proto_perl->Iin_clean_objs;
14446     PL_in_clean_all     = proto_perl->Iin_clean_all;
14447
14448     PL_delaymagic_uid   = proto_perl->Idelaymagic_uid;
14449     PL_delaymagic_euid  = proto_perl->Idelaymagic_euid;
14450     PL_delaymagic_gid   = proto_perl->Idelaymagic_gid;
14451     PL_delaymagic_egid  = proto_perl->Idelaymagic_egid;
14452     PL_nomemok          = proto_perl->Inomemok;
14453     PL_an               = proto_perl->Ian;
14454     PL_evalseq          = proto_perl->Ievalseq;
14455     PL_origenviron      = proto_perl->Iorigenviron;     /* XXX not quite right */
14456     PL_origalen         = proto_perl->Iorigalen;
14457
14458     PL_sighandlerp      = proto_perl->Isighandlerp;
14459
14460     PL_runops           = proto_perl->Irunops;
14461
14462     PL_subline          = proto_perl->Isubline;
14463
14464     PL_cv_has_eval      = proto_perl->Icv_has_eval;
14465
14466 #ifdef FCRYPT
14467     PL_cryptseen        = proto_perl->Icryptseen;
14468 #endif
14469
14470 #ifdef USE_LOCALE_COLLATE
14471     PL_collation_ix     = proto_perl->Icollation_ix;
14472     PL_collation_standard       = proto_perl->Icollation_standard;
14473     PL_collxfrm_base    = proto_perl->Icollxfrm_base;
14474     PL_collxfrm_mult    = proto_perl->Icollxfrm_mult;
14475 #endif /* USE_LOCALE_COLLATE */
14476
14477 #ifdef USE_LOCALE_NUMERIC
14478     PL_numeric_standard = proto_perl->Inumeric_standard;
14479     PL_numeric_local    = proto_perl->Inumeric_local;
14480 #endif /* !USE_LOCALE_NUMERIC */
14481
14482     /* Did the locale setup indicate UTF-8? */
14483     PL_utf8locale       = proto_perl->Iutf8locale;
14484     PL_in_utf8_CTYPE_locale = proto_perl->Iin_utf8_CTYPE_locale;
14485     /* Unicode features (see perlrun/-C) */
14486     PL_unicode          = proto_perl->Iunicode;
14487
14488     /* Pre-5.8 signals control */
14489     PL_signals          = proto_perl->Isignals;
14490
14491     /* times() ticks per second */
14492     PL_clocktick        = proto_perl->Iclocktick;
14493
14494     /* Recursion stopper for PerlIO_find_layer */
14495     PL_in_load_module   = proto_perl->Iin_load_module;
14496
14497     /* sort() routine */
14498     PL_sort_RealCmp     = proto_perl->Isort_RealCmp;
14499
14500     /* Not really needed/useful since the reenrant_retint is "volatile",
14501      * but do it for consistency's sake. */
14502     PL_reentrant_retint = proto_perl->Ireentrant_retint;
14503
14504     /* Hooks to shared SVs and locks. */
14505     PL_sharehook        = proto_perl->Isharehook;
14506     PL_lockhook         = proto_perl->Ilockhook;
14507     PL_unlockhook       = proto_perl->Iunlockhook;
14508     PL_threadhook       = proto_perl->Ithreadhook;
14509     PL_destroyhook      = proto_perl->Idestroyhook;
14510     PL_signalhook       = proto_perl->Isignalhook;
14511
14512     PL_globhook         = proto_perl->Iglobhook;
14513
14514     /* swatch cache */
14515     PL_last_swash_hv    = NULL; /* reinits on demand */
14516     PL_last_swash_klen  = 0;
14517     PL_last_swash_key[0]= '\0';
14518     PL_last_swash_tmps  = (U8*)NULL;
14519     PL_last_swash_slen  = 0;
14520
14521     PL_srand_called     = proto_perl->Isrand_called;
14522     Copy(&(proto_perl->Irandom_state), &PL_random_state, 1, PL_RANDOM_STATE_TYPE);
14523
14524     if (flags & CLONEf_COPY_STACKS) {
14525         /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
14526         PL_tmps_ix              = proto_perl->Itmps_ix;
14527         PL_tmps_max             = proto_perl->Itmps_max;
14528         PL_tmps_floor           = proto_perl->Itmps_floor;
14529
14530         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
14531          * NOTE: unlike the others! */
14532         PL_scopestack_ix        = proto_perl->Iscopestack_ix;
14533         PL_scopestack_max       = proto_perl->Iscopestack_max;
14534
14535         /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
14536          * NOTE: unlike the others! */
14537         PL_savestack_ix         = proto_perl->Isavestack_ix;
14538         PL_savestack_max        = proto_perl->Isavestack_max;
14539     }
14540
14541     PL_start_env        = proto_perl->Istart_env;       /* XXXXXX */
14542     PL_top_env          = &PL_start_env;
14543
14544     PL_op               = proto_perl->Iop;
14545
14546     PL_Sv               = NULL;
14547     PL_Xpv              = (XPV*)NULL;
14548     my_perl->Ina        = proto_perl->Ina;
14549
14550     PL_statbuf          = proto_perl->Istatbuf;
14551     PL_statcache        = proto_perl->Istatcache;
14552
14553 #ifndef NO_TAINT_SUPPORT
14554     PL_tainted          = proto_perl->Itainted;
14555 #else
14556     PL_tainted          = FALSE;
14557 #endif
14558     PL_curpm            = proto_perl->Icurpm;   /* XXX No PMOP ref count */
14559
14560     PL_chopset          = proto_perl->Ichopset; /* XXX never deallocated */
14561
14562     PL_restartjmpenv    = proto_perl->Irestartjmpenv;
14563     PL_restartop        = proto_perl->Irestartop;
14564     PL_in_eval          = proto_perl->Iin_eval;
14565     PL_delaymagic       = proto_perl->Idelaymagic;
14566     PL_phase            = proto_perl->Iphase;
14567     PL_localizing       = proto_perl->Ilocalizing;
14568
14569     PL_hv_fetch_ent_mh  = NULL;
14570     PL_modcount         = proto_perl->Imodcount;
14571     PL_lastgotoprobe    = NULL;
14572     PL_dumpindent       = proto_perl->Idumpindent;
14573
14574     PL_efloatbuf        = NULL;         /* reinits on demand */
14575     PL_efloatsize       = 0;                    /* reinits on demand */
14576
14577     /* regex stuff */
14578
14579     PL_colorset         = 0;            /* reinits PL_colors[] */
14580     /*PL_colors[6]      = {0,0,0,0,0,0};*/
14581
14582     /* Pluggable optimizer */
14583     PL_peepp            = proto_perl->Ipeepp;
14584     PL_rpeepp           = proto_perl->Irpeepp;
14585     /* op_free() hook */
14586     PL_opfreehook       = proto_perl->Iopfreehook;
14587
14588 #ifdef USE_REENTRANT_API
14589     /* XXX: things like -Dm will segfault here in perlio, but doing
14590      *  PERL_SET_CONTEXT(proto_perl);
14591      * breaks too many other things
14592      */
14593     Perl_reentrant_init(aTHX);
14594 #endif
14595
14596     /* create SV map for pointer relocation */
14597     PL_ptr_table = ptr_table_new();
14598
14599     /* initialize these special pointers as early as possible */
14600     init_constants();
14601     ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
14602     ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
14603     ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
14604     ptr_table_store(PL_ptr_table, &proto_perl->Ipadname_const,
14605                     &PL_padname_const);
14606
14607     /* create (a non-shared!) shared string table */
14608     PL_strtab           = newHV();
14609     HvSHAREKEYS_off(PL_strtab);
14610     hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
14611     ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
14612
14613     Zero(PL_sv_consts, SV_CONSTS_COUNT, SV*);
14614
14615     /* This PV will be free'd special way so must set it same way op.c does */
14616     PL_compiling.cop_file    = savesharedpv(PL_compiling.cop_file);
14617     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
14618
14619     ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
14620     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
14621     CopHINTHASH_set(&PL_compiling, cophh_copy(CopHINTHASH_get(&PL_compiling)));
14622     PL_curcop           = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
14623
14624     param->stashes      = newAV();  /* Setup array of objects to call clone on */
14625     /* This makes no difference to the implementation, as it always pushes
14626        and shifts pointers to other SVs without changing their reference
14627        count, with the array becoming empty before it is freed. However, it
14628        makes it conceptually clear what is going on, and will avoid some
14629        work inside av.c, filling slots between AvFILL() and AvMAX() with
14630        &PL_sv_undef, and SvREFCNT_dec()ing those.  */
14631     AvREAL_off(param->stashes);
14632
14633     if (!(flags & CLONEf_COPY_STACKS)) {
14634         param->unreferenced = newAV();
14635     }
14636
14637 #ifdef PERLIO_LAYERS
14638     /* Clone PerlIO tables as soon as we can handle general xx_dup() */
14639     PerlIO_clone(aTHX_ proto_perl, param);
14640 #endif
14641
14642     PL_envgv            = gv_dup_inc(proto_perl->Ienvgv, param);
14643     PL_incgv            = gv_dup_inc(proto_perl->Iincgv, param);
14644     PL_hintgv           = gv_dup_inc(proto_perl->Ihintgv, param);
14645     PL_origfilename     = SAVEPV(proto_perl->Iorigfilename);
14646     PL_xsubfilename     = proto_perl->Ixsubfilename;
14647     PL_diehook          = sv_dup_inc(proto_perl->Idiehook, param);
14648     PL_warnhook         = sv_dup_inc(proto_perl->Iwarnhook, param);
14649
14650     /* switches */
14651     PL_patchlevel       = sv_dup_inc(proto_perl->Ipatchlevel, param);
14652     PL_inplace          = SAVEPV(proto_perl->Iinplace);
14653     PL_e_script         = sv_dup_inc(proto_perl->Ie_script, param);
14654
14655     /* magical thingies */
14656
14657     PL_encoding         = sv_dup(proto_perl->Iencoding, param);
14658     PL_lex_encoding     = sv_dup(proto_perl->Ilex_encoding, param);
14659
14660     sv_setpvs(PERL_DEBUG_PAD(0), "");   /* For regex debugging. */
14661     sv_setpvs(PERL_DEBUG_PAD(1), "");   /* ext/re needs these */
14662     sv_setpvs(PERL_DEBUG_PAD(2), "");   /* even without DEBUGGING. */
14663
14664    
14665     /* Clone the regex array */
14666     /* ORANGE FIXME for plugins, probably in the SV dup code.
14667        newSViv(PTR2IV(CALLREGDUPE(
14668        INT2PTR(REGEXP *, SvIVX(regex)), param))))
14669     */
14670     PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
14671     PL_regex_pad = AvARRAY(PL_regex_padav);
14672
14673     PL_stashpadmax      = proto_perl->Istashpadmax;
14674     PL_stashpadix       = proto_perl->Istashpadix ;
14675     Newx(PL_stashpad, PL_stashpadmax, HV *);
14676     {
14677         PADOFFSET o = 0;
14678         for (; o < PL_stashpadmax; ++o)
14679             PL_stashpad[o] = hv_dup(proto_perl->Istashpad[o], param);
14680     }
14681
14682     /* shortcuts to various I/O objects */
14683     PL_ofsgv            = gv_dup_inc(proto_perl->Iofsgv, param);
14684     PL_stdingv          = gv_dup(proto_perl->Istdingv, param);
14685     PL_stderrgv         = gv_dup(proto_perl->Istderrgv, param);
14686     PL_defgv            = gv_dup(proto_perl->Idefgv, param);
14687     PL_argvgv           = gv_dup_inc(proto_perl->Iargvgv, param);
14688     PL_argvoutgv        = gv_dup(proto_perl->Iargvoutgv, param);
14689     PL_argvout_stack    = av_dup_inc(proto_perl->Iargvout_stack, param);
14690
14691     /* shortcuts to regexp stuff */
14692     PL_replgv           = gv_dup_inc(proto_perl->Ireplgv, param);
14693
14694     /* shortcuts to misc objects */
14695     PL_errgv            = gv_dup(proto_perl->Ierrgv, param);
14696
14697     /* shortcuts to debugging objects */
14698     PL_DBgv             = gv_dup_inc(proto_perl->IDBgv, param);
14699     PL_DBline           = gv_dup_inc(proto_perl->IDBline, param);
14700     PL_DBsub            = gv_dup_inc(proto_perl->IDBsub, param);
14701     PL_DBsingle         = sv_dup(proto_perl->IDBsingle, param);
14702     PL_DBtrace          = sv_dup(proto_perl->IDBtrace, param);
14703     PL_DBsignal         = sv_dup(proto_perl->IDBsignal, param);
14704     Copy(proto_perl->IDBcontrol, PL_DBcontrol, DBVARMG_COUNT, IV);
14705
14706     /* symbol tables */
14707     PL_defstash         = hv_dup_inc(proto_perl->Idefstash, param);
14708     PL_curstash         = hv_dup_inc(proto_perl->Icurstash, param);
14709     PL_debstash         = hv_dup(proto_perl->Idebstash, param);
14710     PL_globalstash      = hv_dup(proto_perl->Iglobalstash, param);
14711     PL_curstname        = sv_dup_inc(proto_perl->Icurstname, param);
14712
14713     PL_beginav          = av_dup_inc(proto_perl->Ibeginav, param);
14714     PL_beginav_save     = av_dup_inc(proto_perl->Ibeginav_save, param);
14715     PL_checkav_save     = av_dup_inc(proto_perl->Icheckav_save, param);
14716     PL_unitcheckav      = av_dup_inc(proto_perl->Iunitcheckav, param);
14717     PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
14718     PL_endav            = av_dup_inc(proto_perl->Iendav, param);
14719     PL_checkav          = av_dup_inc(proto_perl->Icheckav, param);
14720     PL_initav           = av_dup_inc(proto_perl->Iinitav, param);
14721     PL_savebegin        = proto_perl->Isavebegin;
14722
14723     PL_isarev           = hv_dup_inc(proto_perl->Iisarev, param);
14724
14725     /* subprocess state */
14726     PL_fdpid            = av_dup_inc(proto_perl->Ifdpid, param);
14727
14728     if (proto_perl->Iop_mask)
14729         PL_op_mask      = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
14730     else
14731         PL_op_mask      = NULL;
14732     /* PL_asserting        = proto_perl->Iasserting; */
14733
14734     /* current interpreter roots */
14735     PL_main_cv          = cv_dup_inc(proto_perl->Imain_cv, param);
14736     OP_REFCNT_LOCK;
14737     PL_main_root        = OpREFCNT_inc(proto_perl->Imain_root);
14738     OP_REFCNT_UNLOCK;
14739
14740     /* runtime control stuff */
14741     PL_curcopdb         = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
14742
14743     PL_preambleav       = av_dup_inc(proto_perl->Ipreambleav, param);
14744
14745     PL_ors_sv           = sv_dup_inc(proto_perl->Iors_sv, param);
14746
14747     /* interpreter atexit processing */
14748     PL_exitlistlen      = proto_perl->Iexitlistlen;
14749     if (PL_exitlistlen) {
14750         Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
14751         Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
14752     }
14753     else
14754         PL_exitlist     = (PerlExitListEntry*)NULL;
14755
14756     PL_my_cxt_size = proto_perl->Imy_cxt_size;
14757     if (PL_my_cxt_size) {
14758         Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
14759         Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
14760 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
14761         Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
14762         Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
14763 #endif
14764     }
14765     else {
14766         PL_my_cxt_list  = (void**)NULL;
14767 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
14768         PL_my_cxt_keys  = (const char**)NULL;
14769 #endif
14770     }
14771     PL_modglobal        = hv_dup_inc(proto_perl->Imodglobal, param);
14772     PL_custom_op_names  = hv_dup_inc(proto_perl->Icustom_op_names,param);
14773     PL_custom_op_descs  = hv_dup_inc(proto_perl->Icustom_op_descs,param);
14774     PL_custom_ops       = hv_dup_inc(proto_perl->Icustom_ops, param);
14775
14776     PL_compcv                   = cv_dup(proto_perl->Icompcv, param);
14777
14778     PAD_CLONE_VARS(proto_perl, param);
14779
14780 #ifdef HAVE_INTERP_INTERN
14781     sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
14782 #endif
14783
14784     PL_DBcv             = cv_dup(proto_perl->IDBcv, param);
14785
14786 #ifdef PERL_USES_PL_PIDSTATUS
14787     PL_pidstatus        = newHV();                      /* XXX flag for cloning? */
14788 #endif
14789     PL_osname           = SAVEPV(proto_perl->Iosname);
14790     PL_parser           = parser_dup(proto_perl->Iparser, param);
14791
14792     /* XXX this only works if the saved cop has already been cloned */
14793     if (proto_perl->Iparser) {
14794         PL_parser->saved_curcop = (COP*)any_dup(
14795                                     proto_perl->Iparser->saved_curcop,
14796                                     proto_perl);
14797     }
14798
14799     PL_subname          = sv_dup_inc(proto_perl->Isubname, param);
14800
14801 #ifdef USE_LOCALE_CTYPE
14802     /* Should we warn if uses locale? */
14803     PL_warn_locale      = sv_dup_inc(proto_perl->Iwarn_locale, param);
14804 #endif
14805
14806 #ifdef USE_LOCALE_COLLATE
14807     PL_collation_name   = SAVEPV(proto_perl->Icollation_name);
14808 #endif /* USE_LOCALE_COLLATE */
14809
14810 #ifdef USE_LOCALE_NUMERIC
14811     PL_numeric_name     = SAVEPV(proto_perl->Inumeric_name);
14812     PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
14813 #endif /* !USE_LOCALE_NUMERIC */
14814
14815     /* Unicode inversion lists */
14816     PL_Latin1           = sv_dup_inc(proto_perl->ILatin1, param);
14817     PL_UpperLatin1      = sv_dup_inc(proto_perl->IUpperLatin1, param);
14818     PL_AboveLatin1      = sv_dup_inc(proto_perl->IAboveLatin1, param);
14819     PL_InBitmap         = sv_dup_inc(proto_perl->IInBitmap, param);
14820
14821     PL_NonL1NonFinalFold = sv_dup_inc(proto_perl->INonL1NonFinalFold, param);
14822     PL_HasMultiCharFold = sv_dup_inc(proto_perl->IHasMultiCharFold, param);
14823
14824     /* utf8 character class swashes */
14825     for (i = 0; i < POSIX_SWASH_COUNT; i++) {
14826         PL_utf8_swash_ptrs[i] = sv_dup_inc(proto_perl->Iutf8_swash_ptrs[i], param);
14827     }
14828     for (i = 0; i < POSIX_CC_COUNT; i++) {
14829         PL_XPosix_ptrs[i] = sv_dup_inc(proto_perl->IXPosix_ptrs[i], param);
14830     }
14831     PL_GCB_invlist = sv_dup_inc(proto_perl->IGCB_invlist, param);
14832     PL_SB_invlist = sv_dup_inc(proto_perl->ISB_invlist, param);
14833     PL_WB_invlist = sv_dup_inc(proto_perl->IWB_invlist, param);
14834     PL_utf8_mark        = sv_dup_inc(proto_perl->Iutf8_mark, param);
14835     PL_utf8_toupper     = sv_dup_inc(proto_perl->Iutf8_toupper, param);
14836     PL_utf8_totitle     = sv_dup_inc(proto_perl->Iutf8_totitle, param);
14837     PL_utf8_tolower     = sv_dup_inc(proto_perl->Iutf8_tolower, param);
14838     PL_utf8_tofold      = sv_dup_inc(proto_perl->Iutf8_tofold, param);
14839     PL_utf8_idstart     = sv_dup_inc(proto_perl->Iutf8_idstart, param);
14840     PL_utf8_xidstart    = sv_dup_inc(proto_perl->Iutf8_xidstart, param);
14841     PL_utf8_perl_idstart = sv_dup_inc(proto_perl->Iutf8_perl_idstart, param);
14842     PL_utf8_perl_idcont = sv_dup_inc(proto_perl->Iutf8_perl_idcont, param);
14843     PL_utf8_idcont      = sv_dup_inc(proto_perl->Iutf8_idcont, param);
14844     PL_utf8_xidcont     = sv_dup_inc(proto_perl->Iutf8_xidcont, param);
14845     PL_utf8_foldable    = sv_dup_inc(proto_perl->Iutf8_foldable, param);
14846     PL_utf8_charname_begin = sv_dup_inc(proto_perl->Iutf8_charname_begin, param);
14847     PL_utf8_charname_continue = sv_dup_inc(proto_perl->Iutf8_charname_continue, param);
14848
14849     if (proto_perl->Ipsig_pend) {
14850         Newxz(PL_psig_pend, SIG_SIZE, int);
14851     }
14852     else {
14853         PL_psig_pend    = (int*)NULL;
14854     }
14855
14856     if (proto_perl->Ipsig_name) {
14857         Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
14858         sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
14859                             param);
14860         PL_psig_ptr = PL_psig_name + SIG_SIZE;
14861     }
14862     else {
14863         PL_psig_ptr     = (SV**)NULL;
14864         PL_psig_name    = (SV**)NULL;
14865     }
14866
14867     if (flags & CLONEf_COPY_STACKS) {
14868         Newx(PL_tmps_stack, PL_tmps_max, SV*);
14869         sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
14870                             PL_tmps_ix+1, param);
14871
14872         /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
14873         i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
14874         Newxz(PL_markstack, i, I32);
14875         PL_markstack_max        = PL_markstack + (proto_perl->Imarkstack_max
14876                                                   - proto_perl->Imarkstack);
14877         PL_markstack_ptr        = PL_markstack + (proto_perl->Imarkstack_ptr
14878                                                   - proto_perl->Imarkstack);
14879         Copy(proto_perl->Imarkstack, PL_markstack,
14880              PL_markstack_ptr - PL_markstack + 1, I32);
14881
14882         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
14883          * NOTE: unlike the others! */
14884         Newxz(PL_scopestack, PL_scopestack_max, I32);
14885         Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
14886
14887 #ifdef DEBUGGING
14888         Newxz(PL_scopestack_name, PL_scopestack_max, const char *);
14889         Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
14890 #endif
14891         /* reset stack AV to correct length before its duped via
14892          * PL_curstackinfo */
14893         AvFILLp(proto_perl->Icurstack) =
14894                             proto_perl->Istack_sp - proto_perl->Istack_base;
14895
14896         /* NOTE: si_dup() looks at PL_markstack */
14897         PL_curstackinfo         = si_dup(proto_perl->Icurstackinfo, param);
14898
14899         /* PL_curstack          = PL_curstackinfo->si_stack; */
14900         PL_curstack             = av_dup(proto_perl->Icurstack, param);
14901         PL_mainstack            = av_dup(proto_perl->Imainstack, param);
14902
14903         /* next PUSHs() etc. set *(PL_stack_sp+1) */
14904         PL_stack_base           = AvARRAY(PL_curstack);
14905         PL_stack_sp             = PL_stack_base + (proto_perl->Istack_sp
14906                                                    - proto_perl->Istack_base);
14907         PL_stack_max            = PL_stack_base + AvMAX(PL_curstack);
14908
14909         /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
14910         PL_savestack            = ss_dup(proto_perl, param);
14911     }
14912     else {
14913         init_stacks();
14914         ENTER;                  /* perl_destruct() wants to LEAVE; */
14915     }
14916
14917     PL_statgv           = gv_dup(proto_perl->Istatgv, param);
14918     PL_statname         = sv_dup_inc(proto_perl->Istatname, param);
14919
14920     PL_rs               = sv_dup_inc(proto_perl->Irs, param);
14921     PL_last_in_gv       = gv_dup(proto_perl->Ilast_in_gv, param);
14922     PL_defoutgv         = gv_dup_inc(proto_perl->Idefoutgv, param);
14923     PL_toptarget        = sv_dup_inc(proto_perl->Itoptarget, param);
14924     PL_bodytarget       = sv_dup_inc(proto_perl->Ibodytarget, param);
14925     PL_formtarget       = sv_dup(proto_perl->Iformtarget, param);
14926
14927     PL_errors           = sv_dup_inc(proto_perl->Ierrors, param);
14928
14929     PL_sortcop          = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
14930     PL_firstgv          = gv_dup_inc(proto_perl->Ifirstgv, param);
14931     PL_secondgv         = gv_dup_inc(proto_perl->Isecondgv, param);
14932
14933     PL_stashcache       = newHV();
14934
14935     PL_watchaddr        = (char **) ptr_table_fetch(PL_ptr_table,
14936                                             proto_perl->Iwatchaddr);
14937     PL_watchok          = PL_watchaddr ? * PL_watchaddr : NULL;
14938     if (PL_debug && PL_watchaddr) {
14939         PerlIO_printf(Perl_debug_log,
14940           "WATCHING: %"UVxf" cloned as %"UVxf" with value %"UVxf"\n",
14941           PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
14942           PTR2UV(PL_watchok));
14943     }
14944
14945     PL_registered_mros  = hv_dup_inc(proto_perl->Iregistered_mros, param);
14946     PL_blockhooks       = av_dup_inc(proto_perl->Iblockhooks, param);
14947     PL_utf8_foldclosures = hv_dup_inc(proto_perl->Iutf8_foldclosures, param);
14948
14949     /* Call the ->CLONE method, if it exists, for each of the stashes
14950        identified by sv_dup() above.
14951     */
14952     while(av_tindex(param->stashes) != -1) {
14953         HV* const stash = MUTABLE_HV(av_shift(param->stashes));
14954         GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
14955         if (cloner && GvCV(cloner)) {
14956             dSP;
14957             ENTER;
14958             SAVETMPS;
14959             PUSHMARK(SP);
14960             mXPUSHs(newSVhek(HvNAME_HEK(stash)));
14961             PUTBACK;
14962             call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
14963             FREETMPS;
14964             LEAVE;
14965         }
14966     }
14967
14968     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
14969         ptr_table_free(PL_ptr_table);
14970         PL_ptr_table = NULL;
14971     }
14972
14973     if (!(flags & CLONEf_COPY_STACKS)) {
14974         unreferenced_to_tmp_stack(param->unreferenced);
14975     }
14976
14977     SvREFCNT_dec(param->stashes);
14978
14979     /* orphaned? eg threads->new inside BEGIN or use */
14980     if (PL_compcv && ! SvREFCNT(PL_compcv)) {
14981         SvREFCNT_inc_simple_void(PL_compcv);
14982         SAVEFREESV(PL_compcv);
14983     }
14984
14985     return my_perl;
14986 }
14987
14988 static void
14989 S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
14990 {
14991     PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK;
14992     
14993     if (AvFILLp(unreferenced) > -1) {
14994         SV **svp = AvARRAY(unreferenced);
14995         SV **const last = svp + AvFILLp(unreferenced);
14996         SSize_t count = 0;
14997
14998         do {
14999             if (SvREFCNT(*svp) == 1)
15000                 ++count;
15001         } while (++svp <= last);
15002
15003         EXTEND_MORTAL(count);
15004         svp = AvARRAY(unreferenced);
15005
15006         do {
15007             if (SvREFCNT(*svp) == 1) {
15008                 /* Our reference is the only one to this SV. This means that
15009                    in this thread, the scalar effectively has a 0 reference.
15010                    That doesn't work (cleanup never happens), so donate our
15011                    reference to it onto the save stack. */
15012                 PL_tmps_stack[++PL_tmps_ix] = *svp;
15013             } else {
15014                 /* As an optimisation, because we are already walking the
15015                    entire array, instead of above doing either
15016                    SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead
15017                    release our reference to the scalar, so that at the end of
15018                    the array owns zero references to the scalars it happens to
15019                    point to. We are effectively converting the array from
15020                    AvREAL() on to AvREAL() off. This saves the av_clear()
15021                    (triggered by the SvREFCNT_dec(unreferenced) below) from
15022                    walking the array a second time.  */
15023                 SvREFCNT_dec(*svp);
15024             }
15025
15026         } while (++svp <= last);
15027         AvREAL_off(unreferenced);
15028     }
15029     SvREFCNT_dec_NN(unreferenced);
15030 }
15031
15032 void
15033 Perl_clone_params_del(CLONE_PARAMS *param)
15034 {
15035     /* This seemingly funky ordering keeps the build with PERL_GLOBAL_STRUCT
15036        happy: */
15037     PerlInterpreter *const to = param->new_perl;
15038     dTHXa(to);
15039     PerlInterpreter *const was = PERL_GET_THX;
15040
15041     PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
15042
15043     if (was != to) {
15044         PERL_SET_THX(to);
15045     }
15046
15047     SvREFCNT_dec(param->stashes);
15048     if (param->unreferenced)
15049         unreferenced_to_tmp_stack(param->unreferenced);
15050
15051     Safefree(param);
15052
15053     if (was != to) {
15054         PERL_SET_THX(was);
15055     }
15056 }
15057
15058 CLONE_PARAMS *
15059 Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
15060 {
15061     dVAR;
15062     /* Need to play this game, as newAV() can call safesysmalloc(), and that
15063        does a dTHX; to get the context from thread local storage.
15064        FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
15065        a version that passes in my_perl.  */
15066     PerlInterpreter *const was = PERL_GET_THX;
15067     CLONE_PARAMS *param;
15068
15069     PERL_ARGS_ASSERT_CLONE_PARAMS_NEW;
15070
15071     if (was != to) {
15072         PERL_SET_THX(to);
15073     }
15074
15075     /* Given that we've set the context, we can do this unshared.  */
15076     Newx(param, 1, CLONE_PARAMS);
15077
15078     param->flags = 0;
15079     param->proto_perl = from;
15080     param->new_perl = to;
15081     param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV);
15082     AvREAL_off(param->stashes);
15083     param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV);
15084
15085     if (was != to) {
15086         PERL_SET_THX(was);
15087     }
15088     return param;
15089 }
15090
15091 #endif /* USE_ITHREADS */
15092
15093 void
15094 Perl_init_constants(pTHX)
15095 {
15096     SvREFCNT(&PL_sv_undef)      = SvREFCNT_IMMORTAL;
15097     SvFLAGS(&PL_sv_undef)       = SVf_READONLY|SVf_PROTECT|SVt_NULL;
15098     SvANY(&PL_sv_undef)         = NULL;
15099
15100     SvANY(&PL_sv_no)            = new_XPVNV();
15101     SvREFCNT(&PL_sv_no)         = SvREFCNT_IMMORTAL;
15102     SvFLAGS(&PL_sv_no)          = SVt_PVNV|SVf_READONLY|SVf_PROTECT
15103                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
15104                                   |SVp_POK|SVf_POK;
15105
15106     SvANY(&PL_sv_yes)           = new_XPVNV();
15107     SvREFCNT(&PL_sv_yes)        = SvREFCNT_IMMORTAL;
15108     SvFLAGS(&PL_sv_yes)         = SVt_PVNV|SVf_READONLY|SVf_PROTECT
15109                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
15110                                   |SVp_POK|SVf_POK;
15111
15112     SvPV_set(&PL_sv_no, (char*)PL_No);
15113     SvCUR_set(&PL_sv_no, 0);
15114     SvLEN_set(&PL_sv_no, 0);
15115     SvIV_set(&PL_sv_no, 0);
15116     SvNV_set(&PL_sv_no, 0);
15117
15118     SvPV_set(&PL_sv_yes, (char*)PL_Yes);
15119     SvCUR_set(&PL_sv_yes, 1);
15120     SvLEN_set(&PL_sv_yes, 0);
15121     SvIV_set(&PL_sv_yes, 1);
15122     SvNV_set(&PL_sv_yes, 1);
15123
15124     PadnamePV(&PL_padname_const) = (char *)PL_No;
15125 }
15126
15127 /*
15128 =head1 Unicode Support
15129
15130 =for apidoc sv_recode_to_utf8
15131
15132 The encoding is assumed to be an Encode object, on entry the PV
15133 of the sv is assumed to be octets in that encoding, and the sv
15134 will be converted into Unicode (and UTF-8).
15135
15136 If the sv already is UTF-8 (or if it is not POK), or if the encoding
15137 is not a reference, nothing is done to the sv.  If the encoding is not
15138 an C<Encode::XS> Encoding object, bad things will happen.
15139 (See F<lib/encoding.pm> and L<Encode>.)
15140
15141 The PV of the sv is returned.
15142
15143 =cut */
15144
15145 char *
15146 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
15147 {
15148     PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
15149
15150     if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
15151         SV *uni;
15152         STRLEN len;
15153         const char *s;
15154         dSP;
15155         SV *nsv = sv;
15156         ENTER;
15157         PUSHSTACK;
15158         SAVETMPS;
15159         if (SvPADTMP(nsv)) {
15160             nsv = sv_newmortal();
15161             SvSetSV_nosteal(nsv, sv);
15162         }
15163         save_re_context();
15164         PUSHMARK(sp);
15165         EXTEND(SP, 3);
15166         PUSHs(encoding);
15167         PUSHs(nsv);
15168 /*
15169   NI-S 2002/07/09
15170   Passing sv_yes is wrong - it needs to be or'ed set of constants
15171   for Encode::XS, while UTf-8 decode (currently) assumes a true value means
15172   remove converted chars from source.
15173
15174   Both will default the value - let them.
15175
15176         XPUSHs(&PL_sv_yes);
15177 */
15178         PUTBACK;
15179         call_method("decode", G_SCALAR);
15180         SPAGAIN;
15181         uni = POPs;
15182         PUTBACK;
15183         s = SvPV_const(uni, len);
15184         if (s != SvPVX_const(sv)) {
15185             SvGROW(sv, len + 1);
15186             Move(s, SvPVX(sv), len + 1, char);
15187             SvCUR_set(sv, len);
15188         }
15189         FREETMPS;
15190         POPSTACK;
15191         LEAVE;
15192         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
15193             /* clear pos and any utf8 cache */
15194             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
15195             if (mg)
15196                 mg->mg_len = -1;
15197             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
15198                 magic_setutf8(sv,mg); /* clear UTF8 cache */
15199         }
15200         SvUTF8_on(sv);
15201         return SvPVX(sv);
15202     }
15203     return SvPOKp(sv) ? SvPVX(sv) : NULL;
15204 }
15205
15206 /*
15207 =for apidoc sv_cat_decode
15208
15209 The encoding is assumed to be an Encode object, the PV of the ssv is
15210 assumed to be octets in that encoding and decoding the input starts
15211 from the position which (PV + *offset) pointed to.  The dsv will be
15212 concatenated the decoded UTF-8 string from ssv.  Decoding will terminate
15213 when the string tstr appears in decoding output or the input ends on
15214 the PV of the ssv.  The value which the offset points will be modified
15215 to the last input position on the ssv.
15216
15217 Returns TRUE if the terminator was found, else returns FALSE.
15218
15219 =cut */
15220
15221 bool
15222 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
15223                    SV *ssv, int *offset, char *tstr, int tlen)
15224 {
15225     bool ret = FALSE;
15226
15227     PERL_ARGS_ASSERT_SV_CAT_DECODE;
15228
15229     if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding)) {
15230         SV *offsv;
15231         dSP;
15232         ENTER;
15233         SAVETMPS;
15234         save_re_context();
15235         PUSHMARK(sp);
15236         EXTEND(SP, 6);
15237         PUSHs(encoding);
15238         PUSHs(dsv);
15239         PUSHs(ssv);
15240         offsv = newSViv(*offset);
15241         mPUSHs(offsv);
15242         mPUSHp(tstr, tlen);
15243         PUTBACK;
15244         call_method("cat_decode", G_SCALAR);
15245         SPAGAIN;
15246         ret = SvTRUE(TOPs);
15247         *offset = SvIV(offsv);
15248         PUTBACK;
15249         FREETMPS;
15250         LEAVE;
15251     }
15252     else
15253         Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
15254     return ret;
15255
15256 }
15257
15258 /* ---------------------------------------------------------------------
15259  *
15260  * support functions for report_uninit()
15261  */
15262
15263 /* the maxiumum size of array or hash where we will scan looking
15264  * for the undefined element that triggered the warning */
15265
15266 #define FUV_MAX_SEARCH_SIZE 1000
15267
15268 /* Look for an entry in the hash whose value has the same SV as val;
15269  * If so, return a mortal copy of the key. */
15270
15271 STATIC SV*
15272 S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
15273 {
15274     dVAR;
15275     HE **array;
15276     I32 i;
15277
15278     PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
15279
15280     if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
15281                         (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
15282         return NULL;
15283
15284     array = HvARRAY(hv);
15285
15286     for (i=HvMAX(hv); i>=0; i--) {
15287         HE *entry;
15288         for (entry = array[i]; entry; entry = HeNEXT(entry)) {
15289             if (HeVAL(entry) != val)
15290                 continue;
15291             if (    HeVAL(entry) == &PL_sv_undef ||
15292                     HeVAL(entry) == &PL_sv_placeholder)
15293                 continue;
15294             if (!HeKEY(entry))
15295                 return NULL;
15296             if (HeKLEN(entry) == HEf_SVKEY)
15297                 return sv_mortalcopy(HeKEY_sv(entry));
15298             return sv_2mortal(newSVhek(HeKEY_hek(entry)));
15299         }
15300     }
15301     return NULL;
15302 }
15303
15304 /* Look for an entry in the array whose value has the same SV as val;
15305  * If so, return the index, otherwise return -1. */
15306
15307 STATIC I32
15308 S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
15309 {
15310     PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
15311
15312     if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
15313                         (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
15314         return -1;
15315
15316     if (val != &PL_sv_undef) {
15317         SV ** const svp = AvARRAY(av);
15318         I32 i;
15319
15320         for (i=AvFILLp(av); i>=0; i--)
15321             if (svp[i] == val)
15322                 return i;
15323     }
15324     return -1;
15325 }
15326
15327 /* varname(): return the name of a variable, optionally with a subscript.
15328  * If gv is non-zero, use the name of that global, along with gvtype (one
15329  * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
15330  * targ.  Depending on the value of the subscript_type flag, return:
15331  */
15332
15333 #define FUV_SUBSCRIPT_NONE      1       /* "@foo"          */
15334 #define FUV_SUBSCRIPT_ARRAY     2       /* "$foo[aindex]"  */
15335 #define FUV_SUBSCRIPT_HASH      3       /* "$foo{keyname}" */
15336 #define FUV_SUBSCRIPT_WITHIN    4       /* "within @foo"   */
15337
15338 SV*
15339 Perl_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
15340         const SV *const keyname, I32 aindex, int subscript_type)
15341 {
15342
15343     SV * const name = sv_newmortal();
15344     if (gv && isGV(gv)) {
15345         char buffer[2];
15346         buffer[0] = gvtype;
15347         buffer[1] = 0;
15348
15349         /* as gv_fullname4(), but add literal '^' for $^FOO names  */
15350
15351         gv_fullname4(name, gv, buffer, 0);
15352
15353         if ((unsigned int)SvPVX(name)[1] <= 26) {
15354             buffer[0] = '^';
15355             buffer[1] = SvPVX(name)[1] + 'A' - 1;
15356
15357             /* Swap the 1 unprintable control character for the 2 byte pretty
15358                version - ie substr($name, 1, 1) = $buffer; */
15359             sv_insert(name, 1, 1, buffer, 2);
15360         }
15361     }
15362     else {
15363         CV * const cv = gv ? ((CV *)gv) : find_runcv(NULL);
15364         PADNAME *sv;
15365
15366         assert(!cv || SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM);
15367
15368         if (!cv || !CvPADLIST(cv))
15369             return NULL;
15370         sv = padnamelist_fetch(PadlistNAMES(CvPADLIST(cv)), targ);
15371         sv_setpvn(name, PadnamePV(sv), PadnameLEN(sv));
15372         SvUTF8_on(name);
15373     }
15374
15375     if (subscript_type == FUV_SUBSCRIPT_HASH) {
15376         SV * const sv = newSV(0);
15377         *SvPVX(name) = '$';
15378         Perl_sv_catpvf(aTHX_ name, "{%s}",
15379             pv_pretty(sv, SvPVX_const(keyname), SvCUR(keyname), 32, NULL, NULL,
15380                     PERL_PV_PRETTY_DUMP | PERL_PV_ESCAPE_UNI_DETECT ));
15381         SvREFCNT_dec_NN(sv);
15382     }
15383     else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
15384         *SvPVX(name) = '$';
15385         Perl_sv_catpvf(aTHX_ name, "[%"IVdf"]", (IV)aindex);
15386     }
15387     else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
15388         /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
15389         Perl_sv_insert_flags(aTHX_ name, 0, 0,  STR_WITH_LEN("within "), 0);
15390     }
15391
15392     return name;
15393 }
15394
15395
15396 /*
15397 =for apidoc find_uninit_var
15398
15399 Find the name of the undefined variable (if any) that caused the operator
15400 to issue a "Use of uninitialized value" warning.
15401 If match is true, only return a name if its value matches uninit_sv.
15402 So roughly speaking, if a unary operator (such as OP_COS) generates a
15403 warning, then following the direct child of the op may yield an
15404 OP_PADSV or OP_GV that gives the name of the undefined variable.  On the
15405 other hand, with OP_ADD there are two branches to follow, so we only print
15406 the variable name if we get an exact match.
15407 desc_p points to a string pointer holding the description of the op.
15408 This may be updated if needed.
15409
15410 The name is returned as a mortal SV.
15411
15412 Assumes that PL_op is the op that originally triggered the error, and that
15413 PL_comppad/PL_curpad points to the currently executing pad.
15414
15415 =cut
15416 */
15417
15418 STATIC SV *
15419 S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
15420                   bool match, const char **desc_p)
15421 {
15422     dVAR;
15423     SV *sv;
15424     const GV *gv;
15425     const OP *o, *o2, *kid;
15426
15427     PERL_ARGS_ASSERT_FIND_UNINIT_VAR;
15428
15429     if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
15430                             uninit_sv == &PL_sv_placeholder)))
15431         return NULL;
15432
15433     switch (obase->op_type) {
15434
15435     case OP_RV2AV:
15436     case OP_RV2HV:
15437     case OP_PADAV:
15438     case OP_PADHV:
15439       {
15440         const bool pad  = (    obase->op_type == OP_PADAV
15441                             || obase->op_type == OP_PADHV
15442                             || obase->op_type == OP_PADRANGE
15443                           );
15444
15445         const bool hash = (    obase->op_type == OP_PADHV
15446                             || obase->op_type == OP_RV2HV
15447                             || (obase->op_type == OP_PADRANGE
15448                                 && SvTYPE(PAD_SVl(obase->op_targ)) == SVt_PVHV)
15449                           );
15450         I32 index = 0;
15451         SV *keysv = NULL;
15452         int subscript_type = FUV_SUBSCRIPT_WITHIN;
15453
15454         if (pad) { /* @lex, %lex */
15455             sv = PAD_SVl(obase->op_targ);
15456             gv = NULL;
15457         }
15458         else {
15459             if (cUNOPx(obase)->op_first->op_type == OP_GV) {
15460             /* @global, %global */
15461                 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
15462                 if (!gv)
15463                     break;
15464                 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
15465             }
15466             else if (obase == PL_op) /* @{expr}, %{expr} */
15467                 return find_uninit_var(cUNOPx(obase)->op_first,
15468                                                 uninit_sv, match, desc_p);
15469             else /* @{expr}, %{expr} as a sub-expression */
15470                 return NULL;
15471         }
15472
15473         /* attempt to find a match within the aggregate */
15474         if (hash) {
15475             keysv = find_hash_subscript((const HV*)sv, uninit_sv);
15476             if (keysv)
15477                 subscript_type = FUV_SUBSCRIPT_HASH;
15478         }
15479         else {
15480             index = find_array_subscript((const AV *)sv, uninit_sv);
15481             if (index >= 0)
15482                 subscript_type = FUV_SUBSCRIPT_ARRAY;
15483         }
15484
15485         if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
15486             break;
15487
15488         return varname(gv, (char)(hash ? '%' : '@'), obase->op_targ,
15489                                     keysv, index, subscript_type);
15490       }
15491
15492     case OP_RV2SV:
15493         if (cUNOPx(obase)->op_first->op_type == OP_GV) {
15494             /* $global */
15495             gv = cGVOPx_gv(cUNOPx(obase)->op_first);
15496             if (!gv || !GvSTASH(gv))
15497                 break;
15498             if (match && (GvSV(gv) != uninit_sv))
15499                 break;
15500             return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
15501         }
15502         /* ${expr} */
15503         return find_uninit_var(cUNOPx(obase)->op_first, uninit_sv, 1, desc_p);
15504
15505     case OP_PADSV:
15506         if (match && PAD_SVl(obase->op_targ) != uninit_sv)
15507             break;
15508         return varname(NULL, '$', obase->op_targ,
15509                                     NULL, 0, FUV_SUBSCRIPT_NONE);
15510
15511     case OP_GVSV:
15512         gv = cGVOPx_gv(obase);
15513         if (!gv || (match && GvSV(gv) != uninit_sv) || !GvSTASH(gv))
15514             break;
15515         return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
15516
15517     case OP_AELEMFAST_LEX:
15518         if (match) {
15519             SV **svp;
15520             AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
15521             if (!av || SvRMAGICAL(av))
15522                 break;
15523             svp = av_fetch(av, (I8)obase->op_private, FALSE);
15524             if (!svp || *svp != uninit_sv)
15525                 break;
15526         }
15527         return varname(NULL, '$', obase->op_targ,
15528                        NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
15529     case OP_AELEMFAST:
15530         {
15531             gv = cGVOPx_gv(obase);
15532             if (!gv)
15533                 break;
15534             if (match) {
15535                 SV **svp;
15536                 AV *const av = GvAV(gv);
15537                 if (!av || SvRMAGICAL(av))
15538                     break;
15539                 svp = av_fetch(av, (I8)obase->op_private, FALSE);
15540                 if (!svp || *svp != uninit_sv)
15541                     break;
15542             }
15543             return varname(gv, '$', 0,
15544                     NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
15545         }
15546         NOT_REACHED; /* NOTREACHED */
15547
15548     case OP_EXISTS:
15549         o = cUNOPx(obase)->op_first;
15550         if (!o || o->op_type != OP_NULL ||
15551                 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
15552             break;
15553         return find_uninit_var(cBINOPo->op_last, uninit_sv, match, desc_p);
15554
15555     case OP_AELEM:
15556     case OP_HELEM:
15557     {
15558         bool negate = FALSE;
15559
15560         if (PL_op == obase)
15561             /* $a[uninit_expr] or $h{uninit_expr} */
15562             return find_uninit_var(cBINOPx(obase)->op_last,
15563                                                 uninit_sv, match, desc_p);
15564
15565         gv = NULL;
15566         o = cBINOPx(obase)->op_first;
15567         kid = cBINOPx(obase)->op_last;
15568
15569         /* get the av or hv, and optionally the gv */
15570         sv = NULL;
15571         if  (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
15572             sv = PAD_SV(o->op_targ);
15573         }
15574         else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
15575                 && cUNOPo->op_first->op_type == OP_GV)
15576         {
15577             gv = cGVOPx_gv(cUNOPo->op_first);
15578             if (!gv)
15579                 break;
15580             sv = o->op_type
15581                 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
15582         }
15583         if (!sv)
15584             break;
15585
15586         if (kid && kid->op_type == OP_NEGATE) {
15587             negate = TRUE;
15588             kid = cUNOPx(kid)->op_first;
15589         }
15590
15591         if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
15592             /* index is constant */
15593             SV* kidsv;
15594             if (negate) {
15595                 kidsv = newSVpvs_flags("-", SVs_TEMP);
15596                 sv_catsv(kidsv, cSVOPx_sv(kid));
15597             }
15598             else
15599                 kidsv = cSVOPx_sv(kid);
15600             if (match) {
15601                 if (SvMAGICAL(sv))
15602                     break;
15603                 if (obase->op_type == OP_HELEM) {
15604                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), kidsv, 0, 0);
15605                     if (!he || HeVAL(he) != uninit_sv)
15606                         break;
15607                 }
15608                 else {
15609                     SV * const  opsv = cSVOPx_sv(kid);
15610                     const IV  opsviv = SvIV(opsv);
15611                     SV * const * const svp = av_fetch(MUTABLE_AV(sv),
15612                         negate ? - opsviv : opsviv,
15613                         FALSE);
15614                     if (!svp || *svp != uninit_sv)
15615                         break;
15616                 }
15617             }
15618             if (obase->op_type == OP_HELEM)
15619                 return varname(gv, '%', o->op_targ,
15620                             kidsv, 0, FUV_SUBSCRIPT_HASH);
15621             else
15622                 return varname(gv, '@', o->op_targ, NULL,
15623                     negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
15624                     FUV_SUBSCRIPT_ARRAY);
15625         }
15626         else  {
15627             /* index is an expression;
15628              * attempt to find a match within the aggregate */
15629             if (obase->op_type == OP_HELEM) {
15630                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
15631                 if (keysv)
15632                     return varname(gv, '%', o->op_targ,
15633                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
15634             }
15635             else {
15636                 const I32 index
15637                     = find_array_subscript((const AV *)sv, uninit_sv);
15638                 if (index >= 0)
15639                     return varname(gv, '@', o->op_targ,
15640                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
15641             }
15642             if (match)
15643                 break;
15644             return varname(gv,
15645                 (char)((o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
15646                 ? '@' : '%'),
15647                 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
15648         }
15649         NOT_REACHED; /* NOTREACHED */
15650     }
15651
15652     case OP_MULTIDEREF: {
15653         /* If we were executing OP_MULTIDEREF when the undef warning
15654          * triggered, then it must be one of the index values within
15655          * that triggered it. If not, then the only possibility is that
15656          * the value retrieved by the last aggregate lookup might be the
15657          * culprit. For the former, we set PL_multideref_pc each time before
15658          * using an index, so work though the item list until we reach
15659          * that point. For the latter, just work through the entire item
15660          * list; the last aggregate retrieved will be the candidate.
15661          */
15662
15663         /* the named aggregate, if any */
15664         PADOFFSET agg_targ = 0;
15665         GV       *agg_gv   = NULL;
15666         /* the last-seen index */
15667         UV        index_type;
15668         PADOFFSET index_targ;
15669         GV       *index_gv;
15670         IV        index_const_iv = 0; /* init for spurious compiler warn */
15671         SV       *index_const_sv;
15672         int       depth = 0;  /* how many array/hash lookups we've done */
15673
15674         UNOP_AUX_item *items = cUNOP_AUXx(obase)->op_aux;
15675         UNOP_AUX_item *last = NULL;
15676         UV actions = items->uv;
15677         bool is_hv;
15678
15679         if (PL_op == obase) {
15680             last = PL_multideref_pc;
15681             assert(last >= items && last <= items + items[-1].uv);
15682         }
15683
15684         assert(actions);
15685
15686         while (1) {
15687             is_hv = FALSE;
15688             switch (actions & MDEREF_ACTION_MASK) {
15689
15690             case MDEREF_reload:
15691                 actions = (++items)->uv;
15692                 continue;
15693
15694             case MDEREF_HV_padhv_helem:               /* $lex{...} */
15695                 is_hv = TRUE;
15696                 /* FALLTHROUGH */
15697             case MDEREF_AV_padav_aelem:               /* $lex[...] */
15698                 agg_targ = (++items)->pad_offset;
15699                 agg_gv = NULL;
15700                 break;
15701
15702             case MDEREF_HV_gvhv_helem:                /* $pkg{...} */
15703                 is_hv = TRUE;
15704                 /* FALLTHROUGH */
15705             case MDEREF_AV_gvav_aelem:                /* $pkg[...] */
15706                 agg_targ = 0;
15707                 agg_gv = (GV*)UNOP_AUX_item_sv(++items);
15708                 assert(isGV_with_GP(agg_gv));
15709                 break;
15710
15711             case MDEREF_HV_gvsv_vivify_rv2hv_helem:   /* $pkg->{...} */
15712             case MDEREF_HV_padsv_vivify_rv2hv_helem:  /* $lex->{...} */
15713                 ++items;
15714                 /* FALLTHROUGH */
15715             case MDEREF_HV_pop_rv2hv_helem:           /* expr->{...} */
15716             case MDEREF_HV_vivify_rv2hv_helem:        /* vivify, ->{...} */
15717                 agg_targ = 0;
15718                 agg_gv   = NULL;
15719                 is_hv    = TRUE;
15720                 break;
15721
15722             case MDEREF_AV_gvsv_vivify_rv2av_aelem:   /* $pkg->[...] */
15723             case MDEREF_AV_padsv_vivify_rv2av_aelem:  /* $lex->[...] */
15724                 ++items;
15725                 /* FALLTHROUGH */
15726             case MDEREF_AV_pop_rv2av_aelem:           /* expr->[...] */
15727             case MDEREF_AV_vivify_rv2av_aelem:        /* vivify, ->[...] */
15728                 agg_targ = 0;
15729                 agg_gv   = NULL;
15730             } /* switch */
15731
15732             index_targ     = 0;
15733             index_gv       = NULL;
15734             index_const_sv = NULL;
15735
15736             index_type = (actions & MDEREF_INDEX_MASK);
15737             switch (index_type) {
15738             case MDEREF_INDEX_none:
15739                 break;
15740             case MDEREF_INDEX_const:
15741                 if (is_hv)
15742                     index_const_sv = UNOP_AUX_item_sv(++items)
15743                 else
15744                     index_const_iv = (++items)->iv;
15745                 break;
15746             case MDEREF_INDEX_padsv:
15747                 index_targ = (++items)->pad_offset;
15748                 break;
15749             case MDEREF_INDEX_gvsv:
15750                 index_gv = (GV*)UNOP_AUX_item_sv(++items);
15751                 assert(isGV_with_GP(index_gv));
15752                 break;
15753             }
15754
15755             if (index_type != MDEREF_INDEX_none)
15756                 depth++;
15757
15758             if (   index_type == MDEREF_INDEX_none
15759                 || (actions & MDEREF_FLAG_last)
15760                 || (last && items == last)
15761             )
15762                 break;
15763
15764             actions >>= MDEREF_SHIFT;
15765         } /* while */
15766
15767         if (PL_op == obase) {
15768             /* index was undef */
15769
15770             *desc_p = (    (actions & MDEREF_FLAG_last)
15771                         && (obase->op_private
15772                                 & (OPpMULTIDEREF_EXISTS|OPpMULTIDEREF_DELETE)))
15773                         ?
15774                             (obase->op_private & OPpMULTIDEREF_EXISTS)
15775                                 ? "exists"
15776                                 : "delete"
15777                         : is_hv ? "hash element" : "array element";
15778             assert(index_type != MDEREF_INDEX_none);
15779             if (index_gv)
15780                 return varname(index_gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
15781             if (index_targ)
15782                 return varname(NULL, '$', index_targ,
15783                                     NULL, 0, FUV_SUBSCRIPT_NONE);
15784             assert(is_hv); /* AV index is an IV and can't be undef */
15785             /* can a const HV index ever be undef? */
15786             return NULL;
15787         }
15788
15789         /* the SV returned by pp_multideref() was undef, if anything was */
15790
15791         if (depth != 1)
15792             break;
15793
15794         if (agg_targ)
15795             sv = PAD_SV(agg_targ);
15796         else if (agg_gv)
15797             sv = is_hv ? MUTABLE_SV(GvHV(agg_gv)) : MUTABLE_SV(GvAV(agg_gv));
15798         else
15799             break;
15800
15801         if (index_type == MDEREF_INDEX_const) {
15802             if (match) {
15803                 if (SvMAGICAL(sv))
15804                     break;
15805                 if (is_hv) {
15806                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), index_const_sv, 0, 0);
15807                     if (!he || HeVAL(he) != uninit_sv)
15808                         break;
15809                 }
15810                 else {
15811                     SV * const * const svp =
15812                             av_fetch(MUTABLE_AV(sv), index_const_iv, FALSE);
15813                     if (!svp || *svp != uninit_sv)
15814                         break;
15815                 }
15816             }
15817             return is_hv
15818                 ? varname(agg_gv, '%', agg_targ,
15819                                 index_const_sv, 0,    FUV_SUBSCRIPT_HASH)
15820                 : varname(agg_gv, '@', agg_targ,
15821                                 NULL, index_const_iv, FUV_SUBSCRIPT_ARRAY);
15822         }
15823         else  {
15824             /* index is an var */
15825             if (is_hv) {
15826                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
15827                 if (keysv)
15828                     return varname(agg_gv, '%', agg_targ,
15829                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
15830             }
15831             else {
15832                 const I32 index
15833                     = find_array_subscript((const AV *)sv, uninit_sv);
15834                 if (index >= 0)
15835                     return varname(agg_gv, '@', agg_targ,
15836                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
15837             }
15838             if (match)
15839                 break;
15840             return varname(agg_gv,
15841                 is_hv ? '%' : '@',
15842                 agg_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
15843         }
15844         NOT_REACHED; /* NOTREACHED */
15845     }
15846
15847     case OP_AASSIGN:
15848         /* only examine RHS */
15849         return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv,
15850                                                                 match, desc_p);
15851
15852     case OP_OPEN:
15853         o = cUNOPx(obase)->op_first;
15854         if (   o->op_type == OP_PUSHMARK
15855            || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)
15856         )
15857             o = OpSIBLING(o);
15858
15859         if (!OpHAS_SIBLING(o)) {
15860             /* one-arg version of open is highly magical */
15861
15862             if (o->op_type == OP_GV) { /* open FOO; */
15863                 gv = cGVOPx_gv(o);
15864                 if (match && GvSV(gv) != uninit_sv)
15865                     break;
15866                 return varname(gv, '$', 0,
15867                             NULL, 0, FUV_SUBSCRIPT_NONE);
15868             }
15869             /* other possibilities not handled are:
15870              * open $x; or open my $x;  should return '${*$x}'
15871              * open expr;               should return '$'.expr ideally
15872              */
15873              break;
15874         }
15875         goto do_op;
15876
15877     /* ops where $_ may be an implicit arg */
15878     case OP_TRANS:
15879     case OP_TRANSR:
15880     case OP_SUBST:
15881     case OP_MATCH:
15882         if ( !(obase->op_flags & OPf_STACKED)) {
15883             if (uninit_sv == DEFSV)
15884                 return newSVpvs_flags("$_", SVs_TEMP);
15885             else if (obase->op_targ
15886                   && uninit_sv == PAD_SVl(obase->op_targ))
15887                 return varname(NULL, '$', obase->op_targ, NULL, 0,
15888                                FUV_SUBSCRIPT_NONE);
15889         }
15890         goto do_op;
15891
15892     case OP_PRTF:
15893     case OP_PRINT:
15894     case OP_SAY:
15895         match = 1; /* print etc can return undef on defined args */
15896         /* skip filehandle as it can't produce 'undef' warning  */
15897         o = cUNOPx(obase)->op_first;
15898         if ((obase->op_flags & OPf_STACKED)
15899             &&
15900                (   o->op_type == OP_PUSHMARK
15901                || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)))
15902             o = OpSIBLING(OpSIBLING(o));
15903         goto do_op2;
15904
15905
15906     case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
15907     case OP_CUSTOM: /* XS or custom code could trigger random warnings */
15908
15909         /* the following ops are capable of returning PL_sv_undef even for
15910          * defined arg(s) */
15911
15912     case OP_BACKTICK:
15913     case OP_PIPE_OP:
15914     case OP_FILENO:
15915     case OP_BINMODE:
15916     case OP_TIED:
15917     case OP_GETC:
15918     case OP_SYSREAD:
15919     case OP_SEND:
15920     case OP_IOCTL:
15921     case OP_SOCKET:
15922     case OP_SOCKPAIR:
15923     case OP_BIND:
15924     case OP_CONNECT:
15925     case OP_LISTEN:
15926     case OP_ACCEPT:
15927     case OP_SHUTDOWN:
15928     case OP_SSOCKOPT:
15929     case OP_GETPEERNAME:
15930     case OP_FTRREAD:
15931     case OP_FTRWRITE:
15932     case OP_FTREXEC:
15933     case OP_FTROWNED:
15934     case OP_FTEREAD:
15935     case OP_FTEWRITE:
15936     case OP_FTEEXEC:
15937     case OP_FTEOWNED:
15938     case OP_FTIS:
15939     case OP_FTZERO:
15940     case OP_FTSIZE:
15941     case OP_FTFILE:
15942     case OP_FTDIR:
15943     case OP_FTLINK:
15944     case OP_FTPIPE:
15945     case OP_FTSOCK:
15946     case OP_FTBLK:
15947     case OP_FTCHR:
15948     case OP_FTTTY:
15949     case OP_FTSUID:
15950     case OP_FTSGID:
15951     case OP_FTSVTX:
15952     case OP_FTTEXT:
15953     case OP_FTBINARY:
15954     case OP_FTMTIME:
15955     case OP_FTATIME:
15956     case OP_FTCTIME:
15957     case OP_READLINK:
15958     case OP_OPEN_DIR:
15959     case OP_READDIR:
15960     case OP_TELLDIR:
15961     case OP_SEEKDIR:
15962     case OP_REWINDDIR:
15963     case OP_CLOSEDIR:
15964     case OP_GMTIME:
15965     case OP_ALARM:
15966     case OP_SEMGET:
15967     case OP_GETLOGIN:
15968     case OP_UNDEF:
15969     case OP_SUBSTR:
15970     case OP_AEACH:
15971     case OP_EACH:
15972     case OP_SORT:
15973     case OP_CALLER:
15974     case OP_DOFILE:
15975     case OP_PROTOTYPE:
15976     case OP_NCMP:
15977     case OP_SMARTMATCH:
15978     case OP_UNPACK:
15979     case OP_SYSOPEN:
15980     case OP_SYSSEEK:
15981         match = 1;
15982         goto do_op;
15983
15984     case OP_ENTERSUB:
15985     case OP_GOTO:
15986         /* XXX tmp hack: these two may call an XS sub, and currently
15987           XS subs don't have a SUB entry on the context stack, so CV and
15988           pad determination goes wrong, and BAD things happen. So, just
15989           don't try to determine the value under those circumstances.
15990           Need a better fix at dome point. DAPM 11/2007 */
15991         break;
15992
15993     case OP_FLIP:
15994     case OP_FLOP:
15995     {
15996         GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
15997         if (gv && GvSV(gv) == uninit_sv)
15998             return newSVpvs_flags("$.", SVs_TEMP);
15999         goto do_op;
16000     }
16001
16002     case OP_POS:
16003         /* def-ness of rval pos() is independent of the def-ness of its arg */
16004         if ( !(obase->op_flags & OPf_MOD))
16005             break;
16006
16007     case OP_SCHOMP:
16008     case OP_CHOMP:
16009         if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
16010             return newSVpvs_flags("${$/}", SVs_TEMP);
16011         /* FALLTHROUGH */
16012
16013     default:
16014     do_op:
16015         if (!(obase->op_flags & OPf_KIDS))
16016             break;
16017         o = cUNOPx(obase)->op_first;
16018         
16019     do_op2:
16020         if (!o)
16021             break;
16022
16023         /* This loop checks all the kid ops, skipping any that cannot pos-
16024          * sibly be responsible for the uninitialized value; i.e., defined
16025          * constants and ops that return nothing.  If there is only one op
16026          * left that is not skipped, then we *know* it is responsible for
16027          * the uninitialized value.  If there is more than one op left, we
16028          * have to look for an exact match in the while() loop below.
16029          * Note that we skip padrange, because the individual pad ops that
16030          * it replaced are still in the tree, so we work on them instead.
16031          */
16032         o2 = NULL;
16033         for (kid=o; kid; kid = OpSIBLING(kid)) {
16034             const OPCODE type = kid->op_type;
16035             if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
16036               || (type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
16037               || (type == OP_PUSHMARK)
16038               || (type == OP_PADRANGE)
16039             )
16040             continue;
16041
16042             if (o2) { /* more than one found */
16043                 o2 = NULL;
16044                 break;
16045             }
16046             o2 = kid;
16047         }
16048         if (o2)
16049             return find_uninit_var(o2, uninit_sv, match, desc_p);
16050
16051         /* scan all args */
16052         while (o) {
16053             sv = find_uninit_var(o, uninit_sv, 1, desc_p);
16054             if (sv)
16055                 return sv;
16056             o = OpSIBLING(o);
16057         }
16058         break;
16059     }
16060     return NULL;
16061 }
16062
16063
16064 /*
16065 =for apidoc report_uninit
16066
16067 Print appropriate "Use of uninitialized variable" warning.
16068
16069 =cut
16070 */
16071
16072 void
16073 Perl_report_uninit(pTHX_ const SV *uninit_sv)
16074 {
16075     const char *desc = NULL;
16076     SV* varname = NULL;
16077
16078     if (PL_op) {
16079         desc = PL_op->op_type == OP_STRINGIFY && PL_op->op_folded
16080                 ? "join or string"
16081                 : OP_DESC(PL_op);
16082         if (uninit_sv && PL_curpad) {
16083             varname = find_uninit_var(PL_op, uninit_sv, 0, &desc);
16084             if (varname)
16085                 sv_insert(varname, 0, 0, " ", 1);
16086         }
16087     }
16088     else if (PL_curstackinfo->si_type == PERLSI_SORT
16089              &&  CxMULTICALL(&cxstack[cxstack_ix]))
16090     {
16091         /* we've reached the end of a sort block or sub,
16092          * and the uninit value is probably what that code returned */
16093         desc = "sort";
16094     }
16095
16096     /* PL_warn_uninit_sv is constant */
16097     GCC_DIAG_IGNORE(-Wformat-nonliteral);
16098     if (desc)
16099         /* diag_listed_as: Use of uninitialized value%s */
16100         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit_sv,
16101                 SVfARG(varname ? varname : &PL_sv_no),
16102                 " in ", desc);
16103     else
16104         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
16105                 "", "", "");
16106     GCC_DIAG_RESTORE;
16107 }
16108
16109 /*
16110  * ex: set ts=8 sts=4 sw=4 et:
16111  */