This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
t/re/reg_mesg.t: Add new ability
[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 static const char S_destroy[] = "DESTROY";
129 #define S_destroy_len (sizeof(S_destroy)-1)
130
131 /* ============================================================================
132
133 =head1 Allocation and deallocation of SVs.
134 An SV (or AV, HV, etc.) is allocated in two parts: the head (struct
135 sv, av, hv...) contains type and reference count information, and for
136 many types, a pointer to the body (struct xrv, xpv, xpviv...), which
137 contains fields specific to each type.  Some types store all they need
138 in the head, so don't have a body.
139
140 In all but the most memory-paranoid configurations (ex: PURIFY), heads
141 and bodies are allocated out of arenas, which by default are
142 approximately 4K chunks of memory parcelled up into N heads or bodies.
143 Sv-bodies are allocated by their sv-type, guaranteeing size
144 consistency needed to allocate safely from arrays.
145
146 For SV-heads, the first slot in each arena is reserved, and holds a
147 link to the next arena, some flags, and a note of the number of slots.
148 Snaked through each arena chain is a linked list of free items; when
149 this becomes empty, an extra arena is allocated and divided up into N
150 items which are threaded into the free list.
151
152 SV-bodies are similar, but they use arena-sets by default, which
153 separate the link and info from the arena itself, and reclaim the 1st
154 slot in the arena.  SV-bodies are further described later.
155
156 The following global variables are associated with arenas:
157
158  PL_sv_arenaroot     pointer to list of SV arenas
159  PL_sv_root          pointer to list of free SV structures
160
161  PL_body_arenas      head of linked-list of body arenas
162  PL_body_roots[]     array of pointers to list of free bodies of svtype
163                      arrays are indexed by the svtype needed
164
165 A few special SV heads are not allocated from an arena, but are
166 instead directly created in the interpreter structure, eg PL_sv_undef.
167 The size of arenas can be changed from the default by setting
168 PERL_ARENA_SIZE appropriately at compile time.
169
170 The SV arena serves the secondary purpose of allowing still-live SVs
171 to be located and destroyed during final cleanup.
172
173 At the lowest level, the macros new_SV() and del_SV() grab and free
174 an SV head.  (If debugging with -DD, del_SV() calls the function S_del_sv()
175 to return the SV to the free list with error checking.) new_SV() calls
176 more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
177 SVs in the free list have their SvTYPE field set to all ones.
178
179 At the time of very final cleanup, sv_free_arenas() is called from
180 perl_destruct() to physically free all the arenas allocated since the
181 start of the interpreter.
182
183 The function visit() scans the SV arenas list, and calls a specified
184 function for each SV it finds which is still live - ie which has an SvTYPE
185 other than all 1's, and a non-zero SvREFCNT. visit() is used by the
186 following functions (specified as [function that calls visit()] / [function
187 called by visit() for each SV]):
188
189     sv_report_used() / do_report_used()
190                         dump all remaining SVs (debugging aid)
191
192     sv_clean_objs() / do_clean_objs(),do_clean_named_objs(),
193                       do_clean_named_io_objs(),do_curse()
194                         Attempt to free all objects pointed to by RVs,
195                         try to do the same for all objects indir-
196                         ectly referenced by typeglobs too, and
197                         then do a final sweep, cursing any
198                         objects that remain.  Called once from
199                         perl_destruct(), prior to calling sv_clean_all()
200                         below.
201
202     sv_clean_all() / do_clean_all()
203                         SvREFCNT_dec(sv) each remaining SV, possibly
204                         triggering an sv_free(). It also sets the
205                         SVf_BREAK flag on the SV to indicate that the
206                         refcnt has been artificially lowered, and thus
207                         stopping sv_free() from giving spurious warnings
208                         about SVs which unexpectedly have a refcnt
209                         of zero.  called repeatedly from perl_destruct()
210                         until there are no SVs left.
211
212 =head2 Arena allocator API Summary
213
214 Private API to rest of sv.c
215
216     new_SV(),  del_SV(),
217
218     new_XPVNV(), del_XPVGV(),
219     etc
220
221 Public API:
222
223     sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
224
225 =cut
226
227  * ========================================================================= */
228
229 /*
230  * "A time to plant, and a time to uproot what was planted..."
231  */
232
233 #ifdef PERL_MEM_LOG
234 #  define MEM_LOG_NEW_SV(sv, file, line, func)  \
235             Perl_mem_log_new_sv(sv, file, line, func)
236 #  define MEM_LOG_DEL_SV(sv, file, line, func)  \
237             Perl_mem_log_del_sv(sv, file, line, func)
238 #else
239 #  define MEM_LOG_NEW_SV(sv, file, line, func)  NOOP
240 #  define MEM_LOG_DEL_SV(sv, file, line, func)  NOOP
241 #endif
242
243 #ifdef DEBUG_LEAKING_SCALARS
244 #  define FREE_SV_DEBUG_FILE(sv) STMT_START { \
245         if ((sv)->sv_debug_file) PerlMemShared_free((sv)->sv_debug_file); \
246     } STMT_END
247 #  define DEBUG_SV_SERIAL(sv)                                               \
248     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%" UVxf ": (%05ld) del_SV\n",    \
249             PTR2UV(sv), (long)(sv)->sv_debug_serial))
250 #else
251 #  define FREE_SV_DEBUG_FILE(sv)
252 #  define DEBUG_SV_SERIAL(sv)   NOOP
253 #endif
254
255 #ifdef PERL_POISON
256 #  define SvARENA_CHAIN(sv)     ((sv)->sv_u.svu_rv)
257 #  define SvARENA_CHAIN_SET(sv,val)     (sv)->sv_u.svu_rv = MUTABLE_SV((val))
258 /* Whilst I'd love to do this, it seems that things like to check on
259    unreferenced scalars
260 #  define POISON_SV_HEAD(sv)    PoisonNew(sv, 1, struct STRUCT_SV)
261 */
262 #  define POISON_SV_HEAD(sv)    PoisonNew(&SvANY(sv), 1, void *), \
263                                 PoisonNew(&SvREFCNT(sv), 1, U32)
264 #else
265 #  define SvARENA_CHAIN(sv)     SvANY(sv)
266 #  define SvARENA_CHAIN_SET(sv,val)     SvANY(sv) = (void *)(val)
267 #  define POISON_SV_HEAD(sv)
268 #endif
269
270 /* Mark an SV head as unused, and add to free list.
271  *
272  * If SVf_BREAK is set, skip adding it to the free list, as this SV had
273  * its refcount artificially decremented during global destruction, so
274  * there may be dangling pointers to it. The last thing we want in that
275  * case is for it to be reused. */
276
277 #define plant_SV(p) \
278     STMT_START {                                        \
279         const U32 old_flags = SvFLAGS(p);                       \
280         MEM_LOG_DEL_SV(p, __FILE__, __LINE__, FUNCTION__);  \
281         DEBUG_SV_SERIAL(p);                             \
282         FREE_SV_DEBUG_FILE(p);                          \
283         POISON_SV_HEAD(p);                              \
284         SvFLAGS(p) = SVTYPEMASK;                        \
285         if (!(old_flags & SVf_BREAK)) {         \
286             SvARENA_CHAIN_SET(p, PL_sv_root);   \
287             PL_sv_root = (p);                           \
288         }                                               \
289         --PL_sv_count;                                  \
290     } STMT_END
291
292 #define uproot_SV(p) \
293     STMT_START {                                        \
294         (p) = PL_sv_root;                               \
295         PL_sv_root = MUTABLE_SV(SvARENA_CHAIN(p));              \
296         ++PL_sv_count;                                  \
297     } STMT_END
298
299
300 /* make some more SVs by adding another arena */
301
302 STATIC SV*
303 S_more_sv(pTHX)
304 {
305     SV* sv;
306     char *chunk;                /* must use New here to match call to */
307     Newx(chunk,PERL_ARENA_SIZE,char);  /* Safefree() in sv_free_arenas() */
308     sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
309     uproot_SV(sv);
310     return sv;
311 }
312
313 /* new_SV(): return a new, empty SV head */
314
315 #ifdef DEBUG_LEAKING_SCALARS
316 /* provide a real function for a debugger to play with */
317 STATIC SV*
318 S_new_SV(pTHX_ const char *file, int line, const char *func)
319 {
320     SV* sv;
321
322     if (PL_sv_root)
323         uproot_SV(sv);
324     else
325         sv = S_more_sv(aTHX);
326     SvANY(sv) = 0;
327     SvREFCNT(sv) = 1;
328     SvFLAGS(sv) = 0;
329     sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
330     sv->sv_debug_line = (U16) (PL_parser && PL_parser->copline != NOLINE
331                 ? PL_parser->copline
332                 :  PL_curcop
333                     ? CopLINE(PL_curcop)
334                     : 0
335             );
336     sv->sv_debug_inpad = 0;
337     sv->sv_debug_parent = NULL;
338     sv->sv_debug_file = PL_curcop ? savesharedpv(CopFILE(PL_curcop)): NULL;
339
340     sv->sv_debug_serial = PL_sv_serial++;
341
342     MEM_LOG_NEW_SV(sv, file, line, func);
343     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%" UVxf ": (%05ld) new_SV (from %s:%d [%s])\n",
344             PTR2UV(sv), (long)sv->sv_debug_serial, file, line, func));
345
346     return sv;
347 }
348 #  define new_SV(p) (p)=S_new_SV(aTHX_ __FILE__, __LINE__, FUNCTION__)
349
350 #else
351 #  define new_SV(p) \
352     STMT_START {                                        \
353         if (PL_sv_root)                                 \
354             uproot_SV(p);                               \
355         else                                            \
356             (p) = S_more_sv(aTHX);                      \
357         SvANY(p) = 0;                                   \
358         SvREFCNT(p) = 1;                                \
359         SvFLAGS(p) = 0;                                 \
360         MEM_LOG_NEW_SV(p, __FILE__, __LINE__, FUNCTION__);  \
361     } STMT_END
362 #endif
363
364
365 /* del_SV(): return an empty SV head to the free list */
366
367 #ifdef DEBUGGING
368
369 #define del_SV(p) \
370     STMT_START {                                        \
371         if (DEBUG_D_TEST)                               \
372             del_sv(p);                                  \
373         else                                            \
374             plant_SV(p);                                \
375     } STMT_END
376
377 STATIC void
378 S_del_sv(pTHX_ SV *p)
379 {
380     PERL_ARGS_ASSERT_DEL_SV;
381
382     if (DEBUG_D_TEST) {
383         SV* sva;
384         bool ok = 0;
385         for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
386             const SV * const sv = sva + 1;
387             const SV * const svend = &sva[SvREFCNT(sva)];
388             if (p >= sv && p < svend) {
389                 ok = 1;
390                 break;
391             }
392         }
393         if (!ok) {
394             Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
395                              "Attempt to free non-arena SV: 0x%" UVxf
396                              pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
397             return;
398         }
399     }
400     plant_SV(p);
401 }
402
403 #else /* ! DEBUGGING */
404
405 #define del_SV(p)   plant_SV(p)
406
407 #endif /* DEBUGGING */
408
409
410 /*
411 =head1 SV Manipulation Functions
412
413 =for apidoc sv_add_arena
414
415 Given a chunk of memory, link it to the head of the list of arenas,
416 and split it into a list of free SVs.
417
418 =cut
419 */
420
421 static void
422 S_sv_add_arena(pTHX_ char *const ptr, const U32 size, const U32 flags)
423 {
424     SV *const sva = MUTABLE_SV(ptr);
425     SV* sv;
426     SV* svend;
427
428     PERL_ARGS_ASSERT_SV_ADD_ARENA;
429
430     /* The first SV in an arena isn't an SV. */
431     SvANY(sva) = (void *) PL_sv_arenaroot;              /* ptr to next arena */
432     SvREFCNT(sva) = size / sizeof(SV);          /* number of SV slots */
433     SvFLAGS(sva) = flags;                       /* FAKE if not to be freed */
434
435     PL_sv_arenaroot = sva;
436     PL_sv_root = sva + 1;
437
438     svend = &sva[SvREFCNT(sva) - 1];
439     sv = sva + 1;
440     while (sv < svend) {
441         SvARENA_CHAIN_SET(sv, (sv + 1));
442 #ifdef DEBUGGING
443         SvREFCNT(sv) = 0;
444 #endif
445         /* Must always set typemask because it's always checked in on cleanup
446            when the arenas are walked looking for objects.  */
447         SvFLAGS(sv) = SVTYPEMASK;
448         sv++;
449     }
450     SvARENA_CHAIN_SET(sv, 0);
451 #ifdef DEBUGGING
452     SvREFCNT(sv) = 0;
453 #endif
454     SvFLAGS(sv) = SVTYPEMASK;
455 }
456
457 /* visit(): call the named function for each non-free SV in the arenas
458  * whose flags field matches the flags/mask args. */
459
460 STATIC I32
461 S_visit(pTHX_ SVFUNC_t f, const U32 flags, const U32 mask)
462 {
463     SV* sva;
464     I32 visited = 0;
465
466     PERL_ARGS_ASSERT_VISIT;
467
468     for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
469         const SV * const svend = &sva[SvREFCNT(sva)];
470         SV* sv;
471         for (sv = sva + 1; sv < svend; ++sv) {
472             if (SvTYPE(sv) != (svtype)SVTYPEMASK
473                     && (sv->sv_flags & mask) == flags
474                     && SvREFCNT(sv))
475             {
476                 (*f)(aTHX_ sv);
477                 ++visited;
478             }
479         }
480     }
481     return visited;
482 }
483
484 #ifdef DEBUGGING
485
486 /* called by sv_report_used() for each live SV */
487
488 static void
489 do_report_used(pTHX_ SV *const sv)
490 {
491     if (SvTYPE(sv) != (svtype)SVTYPEMASK) {
492         PerlIO_printf(Perl_debug_log, "****\n");
493         sv_dump(sv);
494     }
495 }
496 #endif
497
498 /*
499 =for apidoc sv_report_used
500
501 Dump the contents of all SVs not yet freed (debugging aid).
502
503 =cut
504 */
505
506 void
507 Perl_sv_report_used(pTHX)
508 {
509 #ifdef DEBUGGING
510     visit(do_report_used, 0, 0);
511 #else
512     PERL_UNUSED_CONTEXT;
513 #endif
514 }
515
516 /* called by sv_clean_objs() for each live SV */
517
518 static void
519 do_clean_objs(pTHX_ SV *const ref)
520 {
521     assert (SvROK(ref));
522     {
523         SV * const target = SvRV(ref);
524         if (SvOBJECT(target)) {
525             DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(ref)));
526             if (SvWEAKREF(ref)) {
527                 sv_del_backref(target, ref);
528                 SvWEAKREF_off(ref);
529                 SvRV_set(ref, NULL);
530             } else {
531                 SvROK_off(ref);
532                 SvRV_set(ref, NULL);
533                 SvREFCNT_dec_NN(target);
534             }
535         }
536     }
537 }
538
539
540 /* clear any slots in a GV which hold objects - except IO;
541  * called by sv_clean_objs() for each live GV */
542
543 static void
544 do_clean_named_objs(pTHX_ SV *const sv)
545 {
546     SV *obj;
547     assert(SvTYPE(sv) == SVt_PVGV);
548     assert(isGV_with_GP(sv));
549     if (!GvGP(sv))
550         return;
551
552     /* freeing GP entries may indirectly free the current GV;
553      * hold onto it while we mess with the GP slots */
554     SvREFCNT_inc(sv);
555
556     if ( ((obj = GvSV(sv) )) && SvOBJECT(obj)) {
557         DEBUG_D((PerlIO_printf(Perl_debug_log,
558                 "Cleaning named glob SV object:\n "), sv_dump(obj)));
559         GvSV(sv) = NULL;
560         SvREFCNT_dec_NN(obj);
561     }
562     if ( ((obj = MUTABLE_SV(GvAV(sv)) )) && SvOBJECT(obj)) {
563         DEBUG_D((PerlIO_printf(Perl_debug_log,
564                 "Cleaning named glob AV object:\n "), sv_dump(obj)));
565         GvAV(sv) = NULL;
566         SvREFCNT_dec_NN(obj);
567     }
568     if ( ((obj = MUTABLE_SV(GvHV(sv)) )) && SvOBJECT(obj)) {
569         DEBUG_D((PerlIO_printf(Perl_debug_log,
570                 "Cleaning named glob HV object:\n "), sv_dump(obj)));
571         GvHV(sv) = NULL;
572         SvREFCNT_dec_NN(obj);
573     }
574     if ( ((obj = MUTABLE_SV(GvCV(sv)) )) && SvOBJECT(obj)) {
575         DEBUG_D((PerlIO_printf(Perl_debug_log,
576                 "Cleaning named glob CV object:\n "), sv_dump(obj)));
577         GvCV_set(sv, NULL);
578         SvREFCNT_dec_NN(obj);
579     }
580     SvREFCNT_dec_NN(sv); /* undo the inc above */
581 }
582
583 /* clear any IO slots in a GV which hold objects (except stderr, defout);
584  * called by sv_clean_objs() for each live GV */
585
586 static void
587 do_clean_named_io_objs(pTHX_ SV *const sv)
588 {
589     SV *obj;
590     assert(SvTYPE(sv) == SVt_PVGV);
591     assert(isGV_with_GP(sv));
592     if (!GvGP(sv) || sv == (SV*)PL_stderrgv || sv == (SV*)PL_defoutgv)
593         return;
594
595     SvREFCNT_inc(sv);
596     if ( ((obj = MUTABLE_SV(GvIO(sv)) )) && SvOBJECT(obj)) {
597         DEBUG_D((PerlIO_printf(Perl_debug_log,
598                 "Cleaning named glob IO object:\n "), sv_dump(obj)));
599         GvIOp(sv) = NULL;
600         SvREFCNT_dec_NN(obj);
601     }
602     SvREFCNT_dec_NN(sv); /* undo the inc above */
603 }
604
605 /* Void wrapper to pass to visit() */
606 static void
607 do_curse(pTHX_ SV * const sv) {
608     if ((PL_stderrgv && GvGP(PL_stderrgv) && (SV*)GvIO(PL_stderrgv) == sv)
609      || (PL_defoutgv && GvGP(PL_defoutgv) && (SV*)GvIO(PL_defoutgv) == sv))
610         return;
611     (void)curse(sv, 0);
612 }
613
614 /*
615 =for apidoc sv_clean_objs
616
617 Attempt to destroy all objects not yet freed.
618
619 =cut
620 */
621
622 void
623 Perl_sv_clean_objs(pTHX)
624 {
625     GV *olddef, *olderr;
626     PL_in_clean_objs = TRUE;
627     visit(do_clean_objs, SVf_ROK, SVf_ROK);
628     /* Some barnacles may yet remain, clinging to typeglobs.
629      * Run the non-IO destructors first: they may want to output
630      * error messages, close files etc */
631     visit(do_clean_named_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
632     visit(do_clean_named_io_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
633     /* And if there are some very tenacious barnacles clinging to arrays,
634        closures, or what have you.... */
635     visit(do_curse, SVs_OBJECT, SVs_OBJECT);
636     olddef = PL_defoutgv;
637     PL_defoutgv = NULL; /* disable skip of PL_defoutgv */
638     if (olddef && isGV_with_GP(olddef))
639         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olddef));
640     olderr = PL_stderrgv;
641     PL_stderrgv = NULL; /* disable skip of PL_stderrgv */
642     if (olderr && isGV_with_GP(olderr))
643         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olderr));
644     SvREFCNT_dec(olddef);
645     PL_in_clean_objs = FALSE;
646 }
647
648 /* called by sv_clean_all() for each live SV */
649
650 static void
651 do_clean_all(pTHX_ SV *const sv)
652 {
653     if (sv == (const SV *) PL_fdpid || sv == (const SV *)PL_strtab) {
654         /* don't clean pid table and strtab */
655         return;
656     }
657     DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%" UVxf "\n", PTR2UV(sv)) ));
658     SvFLAGS(sv) |= SVf_BREAK;
659     SvREFCNT_dec_NN(sv);
660 }
661
662 /*
663 =for apidoc sv_clean_all
664
665 Decrement the refcnt of each remaining SV, possibly triggering a
666 cleanup.  This function may have to be called multiple times to free
667 SVs which are in complex self-referential hierarchies.
668
669 =cut
670 */
671
672 I32
673 Perl_sv_clean_all(pTHX)
674 {
675     I32 cleaned;
676     PL_in_clean_all = TRUE;
677     cleaned = visit(do_clean_all, 0,0);
678     return cleaned;
679 }
680
681 /*
682   ARENASETS: a meta-arena implementation which separates arena-info
683   into struct arena_set, which contains an array of struct
684   arena_descs, each holding info for a single arena.  By separating
685   the meta-info from the arena, we recover the 1st slot, formerly
686   borrowed for list management.  The arena_set is about the size of an
687   arena, avoiding the needless malloc overhead of a naive linked-list.
688
689   The cost is 1 arena-set malloc per ~320 arena-mallocs, + the unused
690   memory in the last arena-set (1/2 on average).  In trade, we get
691   back the 1st slot in each arena (ie 1.7% of a CV-arena, less for
692   smaller types).  The recovery of the wasted space allows use of
693   small arenas for large, rare body types, by changing array* fields
694   in body_details_by_type[] below.
695 */
696 struct arena_desc {
697     char       *arena;          /* the raw storage, allocated aligned */
698     size_t      size;           /* its size ~4k typ */
699     svtype      utype;          /* bodytype stored in arena */
700 };
701
702 struct arena_set;
703
704 /* Get the maximum number of elements in set[] such that struct arena_set
705    will fit within PERL_ARENA_SIZE, which is probably just under 4K, and
706    therefore likely to be 1 aligned memory page.  */
707
708 #define ARENAS_PER_SET  ((PERL_ARENA_SIZE - sizeof(struct arena_set*) \
709                           - 2 * sizeof(int)) / sizeof (struct arena_desc))
710
711 struct arena_set {
712     struct arena_set* next;
713     unsigned int   set_size;    /* ie ARENAS_PER_SET */
714     unsigned int   curr;        /* index of next available arena-desc */
715     struct arena_desc set[ARENAS_PER_SET];
716 };
717
718 /*
719 =for apidoc sv_free_arenas
720
721 Deallocate the memory used by all arenas.  Note that all the individual SV
722 heads and bodies within the arenas must already have been freed.
723
724 =cut
725
726 */
727 void
728 Perl_sv_free_arenas(pTHX)
729 {
730     SV* sva;
731     SV* svanext;
732     unsigned int i;
733
734     /* Free arenas here, but be careful about fake ones.  (We assume
735        contiguity of the fake ones with the corresponding real ones.) */
736
737     for (sva = PL_sv_arenaroot; sva; sva = svanext) {
738         svanext = MUTABLE_SV(SvANY(sva));
739         while (svanext && SvFAKE(svanext))
740             svanext = MUTABLE_SV(SvANY(svanext));
741
742         if (!SvFAKE(sva))
743             Safefree(sva);
744     }
745
746     {
747         struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
748
749         while (aroot) {
750             struct arena_set *current = aroot;
751             i = aroot->curr;
752             while (i--) {
753                 assert(aroot->set[i].arena);
754                 Safefree(aroot->set[i].arena);
755             }
756             aroot = aroot->next;
757             Safefree(current);
758         }
759     }
760     PL_body_arenas = 0;
761
762     i = PERL_ARENA_ROOTS_SIZE;
763     while (i--)
764         PL_body_roots[i] = 0;
765
766     PL_sv_arenaroot = 0;
767     PL_sv_root = 0;
768 }
769
770 /*
771   Here are mid-level routines that manage the allocation of bodies out
772   of the various arenas.  There are 5 kinds of arenas:
773
774   1. SV-head arenas, which are discussed and handled above
775   2. regular body arenas
776   3. arenas for reduced-size bodies
777   4. Hash-Entry arenas
778
779   Arena types 2 & 3 are chained by body-type off an array of
780   arena-root pointers, which is indexed by svtype.  Some of the
781   larger/less used body types are malloced singly, since a large
782   unused block of them is wasteful.  Also, several svtypes dont have
783   bodies; the data fits into the sv-head itself.  The arena-root
784   pointer thus has a few unused root-pointers (which may be hijacked
785   later for arena types 4,5)
786
787   3 differs from 2 as an optimization; some body types have several
788   unused fields in the front of the structure (which are kept in-place
789   for consistency).  These bodies can be allocated in smaller chunks,
790   because the leading fields arent accessed.  Pointers to such bodies
791   are decremented to point at the unused 'ghost' memory, knowing that
792   the pointers are used with offsets to the real memory.
793
794
795 =head1 SV-Body Allocation
796
797 =cut
798
799 Allocation of SV-bodies is similar to SV-heads, differing as follows;
800 the allocation mechanism is used for many body types, so is somewhat
801 more complicated, it uses arena-sets, and has no need for still-live
802 SV detection.
803
804 At the outermost level, (new|del)_X*V macros return bodies of the
805 appropriate type.  These macros call either (new|del)_body_type or
806 (new|del)_body_allocated macro pairs, depending on specifics of the
807 type.  Most body types use the former pair, the latter pair is used to
808 allocate body types with "ghost fields".
809
810 "ghost fields" are fields that are unused in certain types, and
811 consequently don't need to actually exist.  They are declared because
812 they're part of a "base type", which allows use of functions as
813 methods.  The simplest examples are AVs and HVs, 2 aggregate types
814 which don't use the fields which support SCALAR semantics.
815
816 For these types, the arenas are carved up into appropriately sized
817 chunks, we thus avoid wasted memory for those unaccessed members.
818 When bodies are allocated, we adjust the pointer back in memory by the
819 size of the part not allocated, so it's as if we allocated the full
820 structure.  (But things will all go boom if you write to the part that
821 is "not there", because you'll be overwriting the last members of the
822 preceding structure in memory.)
823
824 We calculate the correction using the STRUCT_OFFSET macro on the first
825 member present.  If the allocated structure is smaller (no initial NV
826 actually allocated) then the net effect is to subtract the size of the NV
827 from the pointer, to return a new pointer as if an initial NV were actually
828 allocated.  (We were using structures named *_allocated for this, but
829 this turned out to be a subtle bug, because a structure without an NV
830 could have a lower alignment constraint, but the compiler is allowed to
831 optimised accesses based on the alignment constraint of the actual pointer
832 to the full structure, for example, using a single 64 bit load instruction
833 because it "knows" that two adjacent 32 bit members will be 8-byte aligned.)
834
835 This is the same trick as was used for NV and IV bodies.  Ironically it
836 doesn't need to be used for NV bodies any more, because NV is now at
837 the start of the structure.  IV bodies, and also in some builds NV bodies,
838 don't need it either, because they are no longer allocated.
839
840 In turn, the new_body_* allocators call S_new_body(), which invokes
841 new_body_inline macro, which takes a lock, and takes a body off the
842 linked list at PL_body_roots[sv_type], calling Perl_more_bodies() if
843 necessary to refresh an empty list.  Then the lock is released, and
844 the body is returned.
845
846 Perl_more_bodies allocates a new arena, and carves it up into an array of N
847 bodies, which it strings into a linked list.  It looks up arena-size
848 and body-size from the body_details table described below, thus
849 supporting the multiple body-types.
850
851 If PURIFY is defined, or PERL_ARENA_SIZE=0, arenas are not used, and
852 the (new|del)_X*V macros are mapped directly to malloc/free.
853
854 For each sv-type, struct body_details bodies_by_type[] carries
855 parameters which control these aspects of SV handling:
856
857 Arena_size determines whether arenas are used for this body type, and if
858 so, how big they are.  PURIFY or PERL_ARENA_SIZE=0 set this field to
859 zero, forcing individual mallocs and frees.
860
861 Body_size determines how big a body is, and therefore how many fit into
862 each arena.  Offset carries the body-pointer adjustment needed for
863 "ghost fields", and is used in *_allocated macros.
864
865 But its main purpose is to parameterize info needed in
866 Perl_sv_upgrade().  The info here dramatically simplifies the function
867 vs the implementation in 5.8.8, making it table-driven.  All fields
868 are used for this, except for arena_size.
869
870 For the sv-types that have no bodies, arenas are not used, so those
871 PL_body_roots[sv_type] are unused, and can be overloaded.  In
872 something of a special case, SVt_NULL is borrowed for HE arenas;
873 PL_body_roots[HE_SVSLOT=SVt_NULL] is filled by S_more_he, but the
874 bodies_by_type[SVt_NULL] slot is not used, as the table is not
875 available in hv.c.
876
877 */
878
879 struct body_details {
880     U8 body_size;       /* Size to allocate  */
881     U8 copy;            /* Size of structure to copy (may be shorter)  */
882     U8 offset;          /* Size of unalloced ghost fields to first alloced field*/
883     PERL_BITFIELD8 type : 4;        /* We have space for a sanity check. */
884     PERL_BITFIELD8 cant_upgrade : 1;/* Cannot upgrade this type */
885     PERL_BITFIELD8 zero_nv : 1;     /* zero the NV when upgrading from this */
886     PERL_BITFIELD8 arena : 1;       /* Allocated from an arena */
887     U32 arena_size;                 /* Size of arena to allocate */
888 };
889
890 #define HADNV FALSE
891 #define NONV TRUE
892
893
894 #ifdef PURIFY
895 /* With -DPURFIY we allocate everything directly, and don't use arenas.
896    This seems a rather elegant way to simplify some of the code below.  */
897 #define HASARENA FALSE
898 #else
899 #define HASARENA TRUE
900 #endif
901 #define NOARENA FALSE
902
903 /* Size the arenas to exactly fit a given number of bodies.  A count
904    of 0 fits the max number bodies into a PERL_ARENA_SIZE.block,
905    simplifying the default.  If count > 0, the arena is sized to fit
906    only that many bodies, allowing arenas to be used for large, rare
907    bodies (XPVFM, XPVIO) without undue waste.  The arena size is
908    limited by PERL_ARENA_SIZE, so we can safely oversize the
909    declarations.
910  */
911 #define FIT_ARENA0(body_size)                           \
912     ((size_t)(PERL_ARENA_SIZE / body_size) * body_size)
913 #define FIT_ARENAn(count,body_size)                     \
914     ( count * body_size <= PERL_ARENA_SIZE)             \
915     ? count * body_size                                 \
916     : FIT_ARENA0 (body_size)
917 #define FIT_ARENA(count,body_size)                      \
918    (U32)(count                                          \
919     ? FIT_ARENAn (count, body_size)                     \
920     : FIT_ARENA0 (body_size))
921
922 /* Calculate the length to copy. Specifically work out the length less any
923    final padding the compiler needed to add.  See the comment in sv_upgrade
924    for why copying the padding proved to be a bug.  */
925
926 #define copy_length(type, last_member) \
927         STRUCT_OFFSET(type, last_member) \
928         + sizeof (((type*)SvANY((const SV *)0))->last_member)
929
930 static const struct body_details bodies_by_type[] = {
931     /* HEs use this offset for their arena.  */
932     { 0, 0, 0, SVt_NULL, FALSE, NONV, NOARENA, 0 },
933
934     /* IVs are in the head, so the allocation size is 0.  */
935     { 0,
936       sizeof(IV), /* This is used to copy out the IV body.  */
937       STRUCT_OFFSET(XPVIV, xiv_iv), SVt_IV, FALSE, NONV,
938       NOARENA /* IVS don't need an arena  */, 0
939     },
940
941 #if NVSIZE <= IVSIZE
942     { 0, sizeof(NV),
943       STRUCT_OFFSET(XPVNV, xnv_u),
944       SVt_NV, FALSE, HADNV, NOARENA, 0 },
945 #else
946     { sizeof(NV), sizeof(NV),
947       STRUCT_OFFSET(XPVNV, xnv_u),
948       SVt_NV, FALSE, HADNV, HASARENA, FIT_ARENA(0, sizeof(NV)) },
949 #endif
950
951     { sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur),
952       copy_length(XPV, xpv_len) - STRUCT_OFFSET(XPV, xpv_cur),
953       + STRUCT_OFFSET(XPV, xpv_cur),
954       SVt_PV, FALSE, NONV, HASARENA,
955       FIT_ARENA(0, sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur)) },
956
957     { sizeof(XINVLIST) - STRUCT_OFFSET(XPV, xpv_cur),
958       copy_length(XINVLIST, is_offset) - STRUCT_OFFSET(XPV, xpv_cur),
959       + STRUCT_OFFSET(XPV, xpv_cur),
960       SVt_INVLIST, TRUE, NONV, HASARENA,
961       FIT_ARENA(0, sizeof(XINVLIST) - STRUCT_OFFSET(XPV, xpv_cur)) },
962
963     { sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur),
964       copy_length(XPVIV, xiv_u) - STRUCT_OFFSET(XPV, xpv_cur),
965       + STRUCT_OFFSET(XPV, xpv_cur),
966       SVt_PVIV, FALSE, NONV, HASARENA,
967       FIT_ARENA(0, sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur)) },
968
969     { sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur),
970       copy_length(XPVNV, xnv_u) - STRUCT_OFFSET(XPV, xpv_cur),
971       + STRUCT_OFFSET(XPV, xpv_cur),
972       SVt_PVNV, FALSE, HADNV, HASARENA,
973       FIT_ARENA(0, sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur)) },
974
975     { sizeof(XPVMG), copy_length(XPVMG, xnv_u), 0, SVt_PVMG, FALSE, HADNV,
976       HASARENA, FIT_ARENA(0, sizeof(XPVMG)) },
977
978     { sizeof(regexp),
979       sizeof(regexp),
980       0,
981       SVt_REGEXP, TRUE, NONV, HASARENA,
982       FIT_ARENA(0, sizeof(regexp))
983     },
984
985     { sizeof(XPVGV), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
986       HASARENA, FIT_ARENA(0, sizeof(XPVGV)) },
987     
988     { sizeof(XPVLV), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
989       HASARENA, FIT_ARENA(0, sizeof(XPVLV)) },
990
991     { sizeof(XPVAV),
992       copy_length(XPVAV, xav_alloc),
993       0,
994       SVt_PVAV, TRUE, NONV, HASARENA,
995       FIT_ARENA(0, sizeof(XPVAV)) },
996
997     { sizeof(XPVHV),
998       copy_length(XPVHV, xhv_max),
999       0,
1000       SVt_PVHV, TRUE, NONV, HASARENA,
1001       FIT_ARENA(0, sizeof(XPVHV)) },
1002
1003     { sizeof(XPVCV),
1004       sizeof(XPVCV),
1005       0,
1006       SVt_PVCV, TRUE, NONV, HASARENA,
1007       FIT_ARENA(0, sizeof(XPVCV)) },
1008
1009     { sizeof(XPVFM),
1010       sizeof(XPVFM),
1011       0,
1012       SVt_PVFM, TRUE, NONV, NOARENA,
1013       FIT_ARENA(20, sizeof(XPVFM)) },
1014
1015     { sizeof(XPVIO),
1016       sizeof(XPVIO),
1017       0,
1018       SVt_PVIO, TRUE, NONV, HASARENA,
1019       FIT_ARENA(24, sizeof(XPVIO)) },
1020 };
1021
1022 #define new_body_allocated(sv_type)             \
1023     (void *)((char *)S_new_body(aTHX_ sv_type)  \
1024              - bodies_by_type[sv_type].offset)
1025
1026 /* return a thing to the free list */
1027
1028 #define del_body(thing, root)                           \
1029     STMT_START {                                        \
1030         void ** const thing_copy = (void **)thing;      \
1031         *thing_copy = *root;                            \
1032         *root = (void*)thing_copy;                      \
1033     } STMT_END
1034
1035 #ifdef PURIFY
1036 #if !(NVSIZE <= IVSIZE)
1037 #  define new_XNV()     safemalloc(sizeof(XPVNV))
1038 #endif
1039 #define new_XPVNV()     safemalloc(sizeof(XPVNV))
1040 #define new_XPVMG()     safemalloc(sizeof(XPVMG))
1041
1042 #define del_XPVGV(p)    safefree(p)
1043
1044 #else /* !PURIFY */
1045
1046 #if !(NVSIZE <= IVSIZE)
1047 #  define new_XNV()     new_body_allocated(SVt_NV)
1048 #endif
1049 #define new_XPVNV()     new_body_allocated(SVt_PVNV)
1050 #define new_XPVMG()     new_body_allocated(SVt_PVMG)
1051
1052 #define del_XPVGV(p)    del_body(p + bodies_by_type[SVt_PVGV].offset,   \
1053                                  &PL_body_roots[SVt_PVGV])
1054
1055 #endif /* PURIFY */
1056
1057 /* no arena for you! */
1058
1059 #define new_NOARENA(details) \
1060         safemalloc((details)->body_size + (details)->offset)
1061 #define new_NOARENAZ(details) \
1062         safecalloc((details)->body_size + (details)->offset, 1)
1063
1064 void *
1065 Perl_more_bodies (pTHX_ const svtype sv_type, const size_t body_size,
1066                   const size_t arena_size)
1067 {
1068     void ** const root = &PL_body_roots[sv_type];
1069     struct arena_desc *adesc;
1070     struct arena_set *aroot = (struct arena_set *) PL_body_arenas;
1071     unsigned int curr;
1072     char *start;
1073     const char *end;
1074     const size_t good_arena_size = Perl_malloc_good_size(arena_size);
1075 #if defined(DEBUGGING) && defined(PERL_GLOBAL_STRUCT)
1076     dVAR;
1077 #endif
1078 #if defined(DEBUGGING) && !defined(PERL_GLOBAL_STRUCT_PRIVATE)
1079     static bool done_sanity_check;
1080
1081     /* PERL_GLOBAL_STRUCT_PRIVATE cannot coexist with global
1082      * variables like done_sanity_check. */
1083     if (!done_sanity_check) {
1084         unsigned int i = SVt_LAST;
1085
1086         done_sanity_check = TRUE;
1087
1088         while (i--)
1089             assert (bodies_by_type[i].type == i);
1090     }
1091 #endif
1092
1093     assert(arena_size);
1094
1095     /* may need new arena-set to hold new arena */
1096     if (!aroot || aroot->curr >= aroot->set_size) {
1097         struct arena_set *newroot;
1098         Newxz(newroot, 1, struct arena_set);
1099         newroot->set_size = ARENAS_PER_SET;
1100         newroot->next = aroot;
1101         aroot = newroot;
1102         PL_body_arenas = (void *) newroot;
1103         DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", (void*)aroot));
1104     }
1105
1106     /* ok, now have arena-set with at least 1 empty/available arena-desc */
1107     curr = aroot->curr++;
1108     adesc = &(aroot->set[curr]);
1109     assert(!adesc->arena);
1110     
1111     Newx(adesc->arena, good_arena_size, char);
1112     adesc->size = good_arena_size;
1113     adesc->utype = sv_type;
1114     DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p size %" UVuf "\n",
1115                           curr, (void*)adesc->arena, (UV)good_arena_size));
1116
1117     start = (char *) adesc->arena;
1118
1119     /* Get the address of the byte after the end of the last body we can fit.
1120        Remember, this is integer division:  */
1121     end = start + good_arena_size / body_size * body_size;
1122
1123     /* computed count doesn't reflect the 1st slot reservation */
1124 #if defined(MYMALLOC) || defined(HAS_MALLOC_GOOD_SIZE)
1125     DEBUG_m(PerlIO_printf(Perl_debug_log,
1126                           "arena %p end %p arena-size %d (from %d) type %d "
1127                           "size %d ct %d\n",
1128                           (void*)start, (void*)end, (int)good_arena_size,
1129                           (int)arena_size, sv_type, (int)body_size,
1130                           (int)good_arena_size / (int)body_size));
1131 #else
1132     DEBUG_m(PerlIO_printf(Perl_debug_log,
1133                           "arena %p end %p arena-size %d type %d size %d ct %d\n",
1134                           (void*)start, (void*)end,
1135                           (int)arena_size, sv_type, (int)body_size,
1136                           (int)good_arena_size / (int)body_size));
1137 #endif
1138     *root = (void *)start;
1139
1140     while (1) {
1141         /* Where the next body would start:  */
1142         char * const next = start + body_size;
1143
1144         if (next >= end) {
1145             /* This is the last body:  */
1146             assert(next == end);
1147
1148             *(void **)start = 0;
1149             return *root;
1150         }
1151
1152         *(void**) start = (void *)next;
1153         start = next;
1154     }
1155 }
1156
1157 /* grab a new thing from the free list, allocating more if necessary.
1158    The inline version is used for speed in hot routines, and the
1159    function using it serves the rest (unless PURIFY).
1160 */
1161 #define new_body_inline(xpv, sv_type) \
1162     STMT_START { \
1163         void ** const r3wt = &PL_body_roots[sv_type]; \
1164         xpv = (PTR_TBL_ENT_t*) (*((void **)(r3wt))      \
1165           ? *((void **)(r3wt)) : Perl_more_bodies(aTHX_ sv_type, \
1166                                              bodies_by_type[sv_type].body_size,\
1167                                              bodies_by_type[sv_type].arena_size)); \
1168         *(r3wt) = *(void**)(xpv); \
1169     } STMT_END
1170
1171 #ifndef PURIFY
1172
1173 STATIC void *
1174 S_new_body(pTHX_ const svtype sv_type)
1175 {
1176     void *xpv;
1177     new_body_inline(xpv, sv_type);
1178     return xpv;
1179 }
1180
1181 #endif
1182
1183 static const struct body_details fake_rv =
1184     { 0, 0, 0, SVt_IV, FALSE, NONV, NOARENA, 0 };
1185
1186 /*
1187 =for apidoc sv_upgrade
1188
1189 Upgrade an SV to a more complex form.  Generally adds a new body type to the
1190 SV, then copies across as much information as possible from the old body.
1191 It croaks if the SV is already in a more complex form than requested.  You
1192 generally want to use the C<SvUPGRADE> macro wrapper, which checks the type
1193 before calling C<sv_upgrade>, and hence does not croak.  See also
1194 C<L</svtype>>.
1195
1196 =cut
1197 */
1198
1199 void
1200 Perl_sv_upgrade(pTHX_ SV *const sv, svtype new_type)
1201 {
1202     void*       old_body;
1203     void*       new_body;
1204     const svtype old_type = SvTYPE(sv);
1205     const struct body_details *new_type_details;
1206     const struct body_details *old_type_details
1207         = bodies_by_type + old_type;
1208     SV *referent = NULL;
1209
1210     PERL_ARGS_ASSERT_SV_UPGRADE;
1211
1212     if (old_type == new_type)
1213         return;
1214
1215     /* This clause was purposefully added ahead of the early return above to
1216        the shared string hackery for (sort {$a <=> $b} keys %hash), with the
1217        inference by Nick I-S that it would fix other troublesome cases. See
1218        changes 7162, 7163 (f130fd4589cf5fbb24149cd4db4137c8326f49c1 and parent)
1219
1220        Given that shared hash key scalars are no longer PVIV, but PV, there is
1221        no longer need to unshare so as to free up the IVX slot for its proper
1222        purpose. So it's safe to move the early return earlier.  */
1223
1224     if (new_type > SVt_PVMG && SvIsCOW(sv)) {
1225         sv_force_normal_flags(sv, 0);
1226     }
1227
1228     old_body = SvANY(sv);
1229
1230     /* Copying structures onto other structures that have been neatly zeroed
1231        has a subtle gotcha. Consider XPVMG
1232
1233        +------+------+------+------+------+-------+-------+
1234        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |
1235        +------+------+------+------+------+-------+-------+
1236        0      4      8     12     16     20      24      28
1237
1238        where NVs are aligned to 8 bytes, so that sizeof that structure is
1239        actually 32 bytes long, with 4 bytes of padding at the end:
1240
1241        +------+------+------+------+------+-------+-------+------+
1242        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH | ???  |
1243        +------+------+------+------+------+-------+-------+------+
1244        0      4      8     12     16     20      24      28     32
1245
1246        so what happens if you allocate memory for this structure:
1247
1248        +------+------+------+------+------+-------+-------+------+------+...
1249        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |  GP  | NAME |
1250        +------+------+------+------+------+-------+-------+------+------+...
1251        0      4      8     12     16     20      24      28     32     36
1252
1253        zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1254        expect, because you copy the area marked ??? onto GP. Now, ??? may have
1255        started out as zero once, but it's quite possible that it isn't. So now,
1256        rather than a nicely zeroed GP, you have it pointing somewhere random.
1257        Bugs ensue.
1258
1259        (In fact, GP ends up pointing at a previous GP structure, because the
1260        principle cause of the padding in XPVMG getting garbage is a copy of
1261        sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob. Right now
1262        this happens to be moot because XPVGV has been re-ordered, with GP
1263        no longer after STASH)
1264
1265        So we are careful and work out the size of used parts of all the
1266        structures.  */
1267
1268     switch (old_type) {
1269     case SVt_NULL:
1270         break;
1271     case SVt_IV:
1272         if (SvROK(sv)) {
1273             referent = SvRV(sv);
1274             old_type_details = &fake_rv;
1275             if (new_type == SVt_NV)
1276                 new_type = SVt_PVNV;
1277         } else {
1278             if (new_type < SVt_PVIV) {
1279                 new_type = (new_type == SVt_NV)
1280                     ? SVt_PVNV : SVt_PVIV;
1281             }
1282         }
1283         break;
1284     case SVt_NV:
1285         if (new_type < SVt_PVNV) {
1286             new_type = SVt_PVNV;
1287         }
1288         break;
1289     case SVt_PV:
1290         assert(new_type > SVt_PV);
1291         STATIC_ASSERT_STMT(SVt_IV < SVt_PV);
1292         STATIC_ASSERT_STMT(SVt_NV < SVt_PV);
1293         break;
1294     case SVt_PVIV:
1295         break;
1296     case SVt_PVNV:
1297         break;
1298     case SVt_PVMG:
1299         /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1300            there's no way that it can be safely upgraded, because perl.c
1301            expects to Safefree(SvANY(PL_mess_sv))  */
1302         assert(sv != PL_mess_sv);
1303         break;
1304     default:
1305         if (UNLIKELY(old_type_details->cant_upgrade))
1306             Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1307                        sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
1308     }
1309
1310     if (UNLIKELY(old_type > new_type))
1311         Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1312                 (int)old_type, (int)new_type);
1313
1314     new_type_details = bodies_by_type + new_type;
1315
1316     SvFLAGS(sv) &= ~SVTYPEMASK;
1317     SvFLAGS(sv) |= new_type;
1318
1319     /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1320        the return statements above will have triggered.  */
1321     assert (new_type != SVt_NULL);
1322     switch (new_type) {
1323     case SVt_IV:
1324         assert(old_type == SVt_NULL);
1325         SET_SVANY_FOR_BODYLESS_IV(sv);
1326         SvIV_set(sv, 0);
1327         return;
1328     case SVt_NV:
1329         assert(old_type == SVt_NULL);
1330 #if NVSIZE <= IVSIZE
1331         SET_SVANY_FOR_BODYLESS_NV(sv);
1332 #else
1333         SvANY(sv) = new_XNV();
1334 #endif
1335         SvNV_set(sv, 0);
1336         return;
1337     case SVt_PVHV:
1338     case SVt_PVAV:
1339         assert(new_type_details->body_size);
1340
1341 #ifndef PURIFY  
1342         assert(new_type_details->arena);
1343         assert(new_type_details->arena_size);
1344         /* This points to the start of the allocated area.  */
1345         new_body_inline(new_body, new_type);
1346         Zero(new_body, new_type_details->body_size, char);
1347         new_body = ((char *)new_body) - new_type_details->offset;
1348 #else
1349         /* We always allocated the full length item with PURIFY. To do this
1350            we fake things so that arena is false for all 16 types..  */
1351         new_body = new_NOARENAZ(new_type_details);
1352 #endif
1353         SvANY(sv) = new_body;
1354         if (new_type == SVt_PVAV) {
1355             AvMAX(sv)   = -1;
1356             AvFILLp(sv) = -1;
1357             AvREAL_only(sv);
1358             if (old_type_details->body_size) {
1359                 AvALLOC(sv) = 0;
1360             } else {
1361                 /* It will have been zeroed when the new body was allocated.
1362                    Lets not write to it, in case it confuses a write-back
1363                    cache.  */
1364             }
1365         } else {
1366             assert(!SvOK(sv));
1367             SvOK_off(sv);
1368 #ifndef NODEFAULT_SHAREKEYS
1369             HvSHAREKEYS_on(sv);         /* key-sharing on by default */
1370 #endif
1371             /* start with PERL_HASH_DEFAULT_HvMAX+1 buckets: */
1372             HvMAX(sv) = PERL_HASH_DEFAULT_HvMAX;
1373         }
1374
1375         /* SVt_NULL isn't the only thing upgraded to AV or HV.
1376            The target created by newSVrv also is, and it can have magic.
1377            However, it never has SvPVX set.
1378         */
1379         if (old_type == SVt_IV) {
1380             assert(!SvROK(sv));
1381         } else if (old_type >= SVt_PV) {
1382             assert(SvPVX_const(sv) == 0);
1383         }
1384
1385         if (old_type >= SVt_PVMG) {
1386             SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic);
1387             SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
1388         } else {
1389             sv->sv_u.svu_array = NULL; /* or svu_hash  */
1390         }
1391         break;
1392
1393     case SVt_PVIV:
1394         /* XXX Is this still needed?  Was it ever needed?   Surely as there is
1395            no route from NV to PVIV, NOK can never be true  */
1396         assert(!SvNOKp(sv));
1397         assert(!SvNOK(sv));
1398         /* FALLTHROUGH */
1399     case SVt_PVIO:
1400     case SVt_PVFM:
1401     case SVt_PVGV:
1402     case SVt_PVCV:
1403     case SVt_PVLV:
1404     case SVt_INVLIST:
1405     case SVt_REGEXP:
1406     case SVt_PVMG:
1407     case SVt_PVNV:
1408     case SVt_PV:
1409
1410         assert(new_type_details->body_size);
1411         /* We always allocated the full length item with PURIFY. To do this
1412            we fake things so that arena is false for all 16 types..  */
1413         if(new_type_details->arena) {
1414             /* This points to the start of the allocated area.  */
1415             new_body_inline(new_body, new_type);
1416             Zero(new_body, new_type_details->body_size, char);
1417             new_body = ((char *)new_body) - new_type_details->offset;
1418         } else {
1419             new_body = new_NOARENAZ(new_type_details);
1420         }
1421         SvANY(sv) = new_body;
1422
1423         if (old_type_details->copy) {
1424             /* There is now the potential for an upgrade from something without
1425                an offset (PVNV or PVMG) to something with one (PVCV, PVFM)  */
1426             int offset = old_type_details->offset;
1427             int length = old_type_details->copy;
1428
1429             if (new_type_details->offset > old_type_details->offset) {
1430                 const int difference
1431                     = new_type_details->offset - old_type_details->offset;
1432                 offset += difference;
1433                 length -= difference;
1434             }
1435             assert (length >= 0);
1436                 
1437             Copy((char *)old_body + offset, (char *)new_body + offset, length,
1438                  char);
1439         }
1440
1441 #ifndef NV_ZERO_IS_ALLBITS_ZERO
1442         /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
1443          * correct 0.0 for us.  Otherwise, if the old body didn't have an
1444          * NV slot, but the new one does, then we need to initialise the
1445          * freshly created NV slot with whatever the correct bit pattern is
1446          * for 0.0  */
1447         if (old_type_details->zero_nv && !new_type_details->zero_nv
1448             && !isGV_with_GP(sv))
1449             SvNV_set(sv, 0);
1450 #endif
1451
1452         if (UNLIKELY(new_type == SVt_PVIO)) {
1453             IO * const io = MUTABLE_IO(sv);
1454             GV *iogv = gv_fetchpvs("IO::File::", GV_ADD, SVt_PVHV);
1455
1456             SvOBJECT_on(io);
1457             /* Clear the stashcache because a new IO could overrule a package
1458                name */
1459             DEBUG_o(Perl_deb(aTHX_ "sv_upgrade clearing PL_stashcache\n"));
1460             hv_clear(PL_stashcache);
1461
1462             SvSTASH_set(io, MUTABLE_HV(SvREFCNT_inc(GvHV(iogv))));
1463             IoPAGE_LEN(sv) = 60;
1464         }
1465         if (UNLIKELY(new_type == SVt_REGEXP))
1466             sv->sv_u.svu_rx = (regexp *)new_body;
1467         else if (old_type < SVt_PV) {
1468             /* referent will be NULL unless the old type was SVt_IV emulating
1469                SVt_RV */
1470             sv->sv_u.svu_rv = referent;
1471         }
1472         break;
1473     default:
1474         Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1475                    (unsigned long)new_type);
1476     }
1477
1478     /* if this is zero, this is a body-less SVt_NULL, SVt_IV/SVt_RV,
1479        and sometimes SVt_NV */
1480     if (old_type_details->body_size) {
1481 #ifdef PURIFY
1482         safefree(old_body);
1483 #else
1484         /* Note that there is an assumption that all bodies of types that
1485            can be upgraded came from arenas. Only the more complex non-
1486            upgradable types are allowed to be directly malloc()ed.  */
1487         assert(old_type_details->arena);
1488         del_body((void*)((char*)old_body + old_type_details->offset),
1489                  &PL_body_roots[old_type]);
1490 #endif
1491     }
1492 }
1493
1494 /*
1495 =for apidoc sv_backoff
1496
1497 Remove any string offset.  You should normally use the C<SvOOK_off> macro
1498 wrapper instead.
1499
1500 =cut
1501 */
1502
1503 /* prior to 5.000 stable, this function returned the new OOK-less SvFLAGS
1504    prior to 5.23.4 this function always returned 0
1505 */
1506
1507 void
1508 Perl_sv_backoff(SV *const sv)
1509 {
1510     STRLEN delta;
1511     const char * const s = SvPVX_const(sv);
1512
1513     PERL_ARGS_ASSERT_SV_BACKOFF;
1514
1515     assert(SvOOK(sv));
1516     assert(SvTYPE(sv) != SVt_PVHV);
1517     assert(SvTYPE(sv) != SVt_PVAV);
1518
1519     SvOOK_offset(sv, delta);
1520     
1521     SvLEN_set(sv, SvLEN(sv) + delta);
1522     SvPV_set(sv, SvPVX(sv) - delta);
1523     SvFLAGS(sv) &= ~SVf_OOK;
1524     Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1525     return;
1526 }
1527
1528 /*
1529 =for apidoc sv_grow
1530
1531 Expands the character buffer in the SV.  If necessary, uses C<sv_unref> and
1532 upgrades the SV to C<SVt_PV>.  Returns a pointer to the character buffer.
1533 Use the C<SvGROW> wrapper instead.
1534
1535 =cut
1536 */
1537
1538 static void S_sv_uncow(pTHX_ SV * const sv, const U32 flags);
1539
1540 char *
1541 Perl_sv_grow(pTHX_ SV *const sv, STRLEN newlen)
1542 {
1543     char *s;
1544
1545     PERL_ARGS_ASSERT_SV_GROW;
1546
1547     if (SvROK(sv))
1548         sv_unref(sv);
1549     if (SvTYPE(sv) < SVt_PV) {
1550         sv_upgrade(sv, SVt_PV);
1551         s = SvPVX_mutable(sv);
1552     }
1553     else if (SvOOK(sv)) {       /* pv is offset? */
1554         sv_backoff(sv);
1555         s = SvPVX_mutable(sv);
1556         if (newlen > SvLEN(sv))
1557             newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1558     }
1559     else
1560     {
1561         if (SvIsCOW(sv)) S_sv_uncow(aTHX_ sv, 0);
1562         s = SvPVX_mutable(sv);
1563     }
1564
1565 #ifdef PERL_COPY_ON_WRITE
1566     /* the new COW scheme uses SvPVX(sv)[SvLEN(sv)-1] (if spare)
1567      * to store the COW count. So in general, allocate one more byte than
1568      * asked for, to make it likely this byte is always spare: and thus
1569      * make more strings COW-able.
1570      *
1571      * Only increment if the allocation isn't MEM_SIZE_MAX,
1572      * otherwise it will wrap to 0.
1573      */
1574     if ( newlen != MEM_SIZE_MAX )
1575         newlen++;
1576 #endif
1577
1578 #if defined(PERL_USE_MALLOC_SIZE) && defined(Perl_safesysmalloc_size)
1579 #define PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1580 #endif
1581
1582     if (newlen > SvLEN(sv)) {           /* need more room? */
1583         STRLEN minlen = SvCUR(sv);
1584         minlen += (minlen >> PERL_STRLEN_EXPAND_SHIFT) + 10;
1585         if (newlen < minlen)
1586             newlen = minlen;
1587 #ifndef PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1588
1589         /* Don't round up on the first allocation, as odds are pretty good that
1590          * the initial request is accurate as to what is really needed */
1591         if (SvLEN(sv)) {
1592             STRLEN rounded = PERL_STRLEN_ROUNDUP(newlen);
1593             if (rounded > newlen)
1594                 newlen = rounded;
1595         }
1596 #endif
1597         if (SvLEN(sv) && s) {
1598             s = (char*)saferealloc(s, newlen);
1599         }
1600         else {
1601             s = (char*)safemalloc(newlen);
1602             if (SvPVX_const(sv) && SvCUR(sv)) {
1603                 Move(SvPVX_const(sv), s, SvCUR(sv), char);
1604             }
1605         }
1606         SvPV_set(sv, s);
1607 #ifdef PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1608         /* Do this here, do it once, do it right, and then we will never get
1609            called back into sv_grow() unless there really is some growing
1610            needed.  */
1611         SvLEN_set(sv, Perl_safesysmalloc_size(s));
1612 #else
1613         SvLEN_set(sv, newlen);
1614 #endif
1615     }
1616     return s;
1617 }
1618
1619 /*
1620 =for apidoc sv_setiv
1621
1622 Copies an integer into the given SV, upgrading first if necessary.
1623 Does not handle 'set' magic.  See also C<L</sv_setiv_mg>>.
1624
1625 =cut
1626 */
1627
1628 void
1629 Perl_sv_setiv(pTHX_ SV *const sv, const IV i)
1630 {
1631     PERL_ARGS_ASSERT_SV_SETIV;
1632
1633     SV_CHECK_THINKFIRST_COW_DROP(sv);
1634     switch (SvTYPE(sv)) {
1635     case SVt_NULL:
1636     case SVt_NV:
1637         sv_upgrade(sv, SVt_IV);
1638         break;
1639     case SVt_PV:
1640         sv_upgrade(sv, SVt_PVIV);
1641         break;
1642
1643     case SVt_PVGV:
1644         if (!isGV_with_GP(sv))
1645             break;
1646     case SVt_PVAV:
1647     case SVt_PVHV:
1648     case SVt_PVCV:
1649     case SVt_PVFM:
1650     case SVt_PVIO:
1651         /* diag_listed_as: Can't coerce %s to %s in %s */
1652         Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1653                    OP_DESC(PL_op));
1654         break;
1655     default: NOOP;
1656     }
1657     (void)SvIOK_only(sv);                       /* validate number */
1658     SvIV_set(sv, i);
1659     SvTAINT(sv);
1660 }
1661
1662 /*
1663 =for apidoc sv_setiv_mg
1664
1665 Like C<sv_setiv>, but also handles 'set' magic.
1666
1667 =cut
1668 */
1669
1670 void
1671 Perl_sv_setiv_mg(pTHX_ SV *const sv, const IV i)
1672 {
1673     PERL_ARGS_ASSERT_SV_SETIV_MG;
1674
1675     sv_setiv(sv,i);
1676     SvSETMAGIC(sv);
1677 }
1678
1679 /*
1680 =for apidoc sv_setuv
1681
1682 Copies an unsigned integer into the given SV, upgrading first if necessary.
1683 Does not handle 'set' magic.  See also C<L</sv_setuv_mg>>.
1684
1685 =cut
1686 */
1687
1688 void
1689 Perl_sv_setuv(pTHX_ SV *const sv, const UV u)
1690 {
1691     PERL_ARGS_ASSERT_SV_SETUV;
1692
1693     /* With the if statement to ensure that integers are stored as IVs whenever
1694        possible:
1695        u=1.49  s=0.52  cu=72.49  cs=10.64  scripts=270  tests=20865
1696
1697        without
1698        u=1.35  s=0.47  cu=73.45  cs=11.43  scripts=270  tests=20865
1699
1700        If you wish to remove the following if statement, so that this routine
1701        (and its callers) always return UVs, please benchmark to see what the
1702        effect is. Modern CPUs may be different. Or may not :-)
1703     */
1704     if (u <= (UV)IV_MAX) {
1705        sv_setiv(sv, (IV)u);
1706        return;
1707     }
1708     sv_setiv(sv, 0);
1709     SvIsUV_on(sv);
1710     SvUV_set(sv, u);
1711 }
1712
1713 /*
1714 =for apidoc sv_setuv_mg
1715
1716 Like C<sv_setuv>, but also handles 'set' magic.
1717
1718 =cut
1719 */
1720
1721 void
1722 Perl_sv_setuv_mg(pTHX_ SV *const sv, const UV u)
1723 {
1724     PERL_ARGS_ASSERT_SV_SETUV_MG;
1725
1726     sv_setuv(sv,u);
1727     SvSETMAGIC(sv);
1728 }
1729
1730 /*
1731 =for apidoc sv_setnv
1732
1733 Copies a double into the given SV, upgrading first if necessary.
1734 Does not handle 'set' magic.  See also C<L</sv_setnv_mg>>.
1735
1736 =cut
1737 */
1738
1739 void
1740 Perl_sv_setnv(pTHX_ SV *const sv, const NV num)
1741 {
1742     PERL_ARGS_ASSERT_SV_SETNV;
1743
1744     SV_CHECK_THINKFIRST_COW_DROP(sv);
1745     switch (SvTYPE(sv)) {
1746     case SVt_NULL:
1747     case SVt_IV:
1748         sv_upgrade(sv, SVt_NV);
1749         break;
1750     case SVt_PV:
1751     case SVt_PVIV:
1752         sv_upgrade(sv, SVt_PVNV);
1753         break;
1754
1755     case SVt_PVGV:
1756         if (!isGV_with_GP(sv))
1757             break;
1758     case SVt_PVAV:
1759     case SVt_PVHV:
1760     case SVt_PVCV:
1761     case SVt_PVFM:
1762     case SVt_PVIO:
1763         /* diag_listed_as: Can't coerce %s to %s in %s */
1764         Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1765                    OP_DESC(PL_op));
1766         break;
1767     default: NOOP;
1768     }
1769     SvNV_set(sv, num);
1770     (void)SvNOK_only(sv);                       /* validate number */
1771     SvTAINT(sv);
1772 }
1773
1774 /*
1775 =for apidoc sv_setnv_mg
1776
1777 Like C<sv_setnv>, but also handles 'set' magic.
1778
1779 =cut
1780 */
1781
1782 void
1783 Perl_sv_setnv_mg(pTHX_ SV *const sv, const NV num)
1784 {
1785     PERL_ARGS_ASSERT_SV_SETNV_MG;
1786
1787     sv_setnv(sv,num);
1788     SvSETMAGIC(sv);
1789 }
1790
1791 /* Return a cleaned-up, printable version of sv, for non-numeric, or
1792  * not incrementable warning display.
1793  * Originally part of S_not_a_number().
1794  * The return value may be != tmpbuf.
1795  */
1796
1797 STATIC const char *
1798 S_sv_display(pTHX_ SV *const sv, char *tmpbuf, STRLEN tmpbuf_size) {
1799     const char *pv;
1800
1801      PERL_ARGS_ASSERT_SV_DISPLAY;
1802
1803      if (DO_UTF8(sv)) {
1804           SV *dsv = newSVpvs_flags("", SVs_TEMP);
1805           pv = sv_uni_display(dsv, sv, 32, UNI_DISPLAY_ISPRINT);
1806      } else {
1807           char *d = tmpbuf;
1808           const char * const limit = tmpbuf + tmpbuf_size - 8;
1809           /* each *s can expand to 4 chars + "...\0",
1810              i.e. need room for 8 chars */
1811         
1812           const char *s = SvPVX_const(sv);
1813           const char * const end = s + SvCUR(sv);
1814           for ( ; s < end && d < limit; s++ ) {
1815                int ch = *s & 0xFF;
1816                if (! isASCII(ch) && !isPRINT_LC(ch)) {
1817                     *d++ = 'M';
1818                     *d++ = '-';
1819
1820                     /* Map to ASCII "equivalent" of Latin1 */
1821                     ch = LATIN1_TO_NATIVE(NATIVE_TO_LATIN1(ch) & 127);
1822                }
1823                if (ch == '\n') {
1824                     *d++ = '\\';
1825                     *d++ = 'n';
1826                }
1827                else if (ch == '\r') {
1828                     *d++ = '\\';
1829                     *d++ = 'r';
1830                }
1831                else if (ch == '\f') {
1832                     *d++ = '\\';
1833                     *d++ = 'f';
1834                }
1835                else if (ch == '\\') {
1836                     *d++ = '\\';
1837                     *d++ = '\\';
1838                }
1839                else if (ch == '\0') {
1840                     *d++ = '\\';
1841                     *d++ = '0';
1842                }
1843                else if (isPRINT_LC(ch))
1844                     *d++ = ch;
1845                else {
1846                     *d++ = '^';
1847                     *d++ = toCTRL(ch);
1848                }
1849           }
1850           if (s < end) {
1851                *d++ = '.';
1852                *d++ = '.';
1853                *d++ = '.';
1854           }
1855           *d = '\0';
1856           pv = tmpbuf;
1857     }
1858
1859     return pv;
1860 }
1861
1862 /* Print an "isn't numeric" warning, using a cleaned-up,
1863  * printable version of the offending string
1864  */
1865
1866 STATIC void
1867 S_not_a_number(pTHX_ SV *const sv)
1868 {
1869      char tmpbuf[64];
1870      const char *pv;
1871
1872      PERL_ARGS_ASSERT_NOT_A_NUMBER;
1873
1874      pv = sv_display(sv, tmpbuf, sizeof(tmpbuf));
1875
1876     if (PL_op)
1877         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1878                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1879                     "Argument \"%s\" isn't numeric in %s", pv,
1880                     OP_DESC(PL_op));
1881     else
1882         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1883                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1884                     "Argument \"%s\" isn't numeric", pv);
1885 }
1886
1887 STATIC void
1888 S_not_incrementable(pTHX_ SV *const sv) {
1889      char tmpbuf[64];
1890      const char *pv;
1891
1892      PERL_ARGS_ASSERT_NOT_INCREMENTABLE;
1893
1894      pv = sv_display(sv, tmpbuf, sizeof(tmpbuf));
1895
1896      Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1897                  "Argument \"%s\" treated as 0 in increment (++)", pv);
1898 }
1899
1900 /*
1901 =for apidoc looks_like_number
1902
1903 Test if the content of an SV looks like a number (or is a number).
1904 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1905 non-numeric warning), even if your C<atof()> doesn't grok them.  Get-magic is
1906 ignored.
1907
1908 =cut
1909 */
1910
1911 I32
1912 Perl_looks_like_number(pTHX_ SV *const sv)
1913 {
1914     const char *sbegin;
1915     STRLEN len;
1916     int numtype;
1917
1918     PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER;
1919
1920     if (SvPOK(sv) || SvPOKp(sv)) {
1921         sbegin = SvPV_nomg_const(sv, len);
1922     }
1923     else
1924         return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1925     numtype = grok_number(sbegin, len, NULL);
1926     return ((numtype & IS_NUMBER_TRAILING)) ? 0 : numtype;
1927 }
1928
1929 STATIC bool
1930 S_glob_2number(pTHX_ GV * const gv)
1931 {
1932     PERL_ARGS_ASSERT_GLOB_2NUMBER;
1933
1934     /* We know that all GVs stringify to something that is not-a-number,
1935         so no need to test that.  */
1936     if (ckWARN(WARN_NUMERIC))
1937     {
1938         SV *const buffer = sv_newmortal();
1939         gv_efullname3(buffer, gv, "*");
1940         not_a_number(buffer);
1941     }
1942     /* We just want something true to return, so that S_sv_2iuv_common
1943         can tail call us and return true.  */
1944     return TRUE;
1945 }
1946
1947 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1948    until proven guilty, assume that things are not that bad... */
1949
1950 /*
1951    NV_PRESERVES_UV:
1952
1953    As 64 bit platforms often have an NV that doesn't preserve all bits of
1954    an IV (an assumption perl has been based on to date) it becomes necessary
1955    to remove the assumption that the NV always carries enough precision to
1956    recreate the IV whenever needed, and that the NV is the canonical form.
1957    Instead, IV/UV and NV need to be given equal rights. So as to not lose
1958    precision as a side effect of conversion (which would lead to insanity
1959    and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1960    1) to distinguish between IV/UV/NV slots that have a valid conversion cached
1961       where precision was lost, and IV/UV/NV slots that have a valid conversion
1962       which has lost no precision
1963    2) to ensure that if a numeric conversion to one form is requested that
1964       would lose precision, the precise conversion (or differently
1965       imprecise conversion) is also performed and cached, to prevent
1966       requests for different numeric formats on the same SV causing
1967       lossy conversion chains. (lossless conversion chains are perfectly
1968       acceptable (still))
1969
1970
1971    flags are used:
1972    SvIOKp is true if the IV slot contains a valid value
1973    SvIOK  is true only if the IV value is accurate (UV if SvIOK_UV true)
1974    SvNOKp is true if the NV slot contains a valid value
1975    SvNOK  is true only if the NV value is accurate
1976
1977    so
1978    while converting from PV to NV, check to see if converting that NV to an
1979    IV(or UV) would lose accuracy over a direct conversion from PV to
1980    IV(or UV). If it would, cache both conversions, return NV, but mark
1981    SV as IOK NOKp (ie not NOK).
1982
1983    While converting from PV to IV, check to see if converting that IV to an
1984    NV would lose accuracy over a direct conversion from PV to NV. If it
1985    would, cache both conversions, flag similarly.
1986
1987    Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1988    correctly because if IV & NV were set NV *always* overruled.
1989    Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1990    changes - now IV and NV together means that the two are interchangeable:
1991    SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1992
1993    The benefit of this is that operations such as pp_add know that if
1994    SvIOK is true for both left and right operands, then integer addition
1995    can be used instead of floating point (for cases where the result won't
1996    overflow). Before, floating point was always used, which could lead to
1997    loss of precision compared with integer addition.
1998
1999    * making IV and NV equal status should make maths accurate on 64 bit
2000      platforms
2001    * may speed up maths somewhat if pp_add and friends start to use
2002      integers when possible instead of fp. (Hopefully the overhead in
2003      looking for SvIOK and checking for overflow will not outweigh the
2004      fp to integer speedup)
2005    * will slow down integer operations (callers of SvIV) on "inaccurate"
2006      values, as the change from SvIOK to SvIOKp will cause a call into
2007      sv_2iv each time rather than a macro access direct to the IV slot
2008    * should speed up number->string conversion on integers as IV is
2009      favoured when IV and NV are equally accurate
2010
2011    ####################################################################
2012    You had better be using SvIOK_notUV if you want an IV for arithmetic:
2013    SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
2014    On the other hand, SvUOK is true iff UV.
2015    ####################################################################
2016
2017    Your mileage will vary depending your CPU's relative fp to integer
2018    performance ratio.
2019 */
2020
2021 #ifndef NV_PRESERVES_UV
2022 #  define IS_NUMBER_UNDERFLOW_IV 1
2023 #  define IS_NUMBER_UNDERFLOW_UV 2
2024 #  define IS_NUMBER_IV_AND_UV    2
2025 #  define IS_NUMBER_OVERFLOW_IV  4
2026 #  define IS_NUMBER_OVERFLOW_UV  5
2027
2028 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
2029
2030 /* For sv_2nv these three cases are "SvNOK and don't bother casting"  */
2031 STATIC int
2032 S_sv_2iuv_non_preserve(pTHX_ SV *const sv
2033 #  ifdef DEBUGGING
2034                        , I32 numtype
2035 #  endif
2036                        )
2037 {
2038     PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE;
2039     PERL_UNUSED_CONTEXT;
2040
2041     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));
2042     if (SvNVX(sv) < (NV)IV_MIN) {
2043         (void)SvIOKp_on(sv);
2044         (void)SvNOK_on(sv);
2045         SvIV_set(sv, IV_MIN);
2046         return IS_NUMBER_UNDERFLOW_IV;
2047     }
2048     if (SvNVX(sv) > (NV)UV_MAX) {
2049         (void)SvIOKp_on(sv);
2050         (void)SvNOK_on(sv);
2051         SvIsUV_on(sv);
2052         SvUV_set(sv, UV_MAX);
2053         return IS_NUMBER_OVERFLOW_UV;
2054     }
2055     (void)SvIOKp_on(sv);
2056     (void)SvNOK_on(sv);
2057     /* Can't use strtol etc to convert this string.  (See truth table in
2058        sv_2iv  */
2059     if (SvNVX(sv) <= (UV)IV_MAX) {
2060         SvIV_set(sv, I_V(SvNVX(sv)));
2061         if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2062             SvIOK_on(sv); /* Integer is precise. NOK, IOK */
2063         } else {
2064             /* Integer is imprecise. NOK, IOKp */
2065         }
2066         return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
2067     }
2068     SvIsUV_on(sv);
2069     SvUV_set(sv, U_V(SvNVX(sv)));
2070     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2071         if (SvUVX(sv) == UV_MAX) {
2072             /* As we know that NVs don't preserve UVs, UV_MAX cannot
2073                possibly be preserved by NV. Hence, it must be overflow.
2074                NOK, IOKp */
2075             return IS_NUMBER_OVERFLOW_UV;
2076         }
2077         SvIOK_on(sv); /* Integer is precise. NOK, UOK */
2078     } else {
2079         /* Integer is imprecise. NOK, IOKp */
2080     }
2081     return IS_NUMBER_OVERFLOW_IV;
2082 }
2083 #endif /* !NV_PRESERVES_UV*/
2084
2085 /* If numtype is infnan, set the NV of the sv accordingly.
2086  * If numtype is anything else, try setting the NV using Atof(PV). */
2087 #ifdef USING_MSVC6
2088 #  pragma warning(push)
2089 #  pragma warning(disable:4756;disable:4056)
2090 #endif
2091 static void
2092 S_sv_setnv(pTHX_ SV* sv, int numtype)
2093 {
2094     bool pok = cBOOL(SvPOK(sv));
2095     bool nok = FALSE;
2096 #ifdef NV_INF
2097     if ((numtype & IS_NUMBER_INFINITY)) {
2098         SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -NV_INF : NV_INF);
2099         nok = TRUE;
2100     } else
2101 #endif
2102 #ifdef NV_NAN
2103     if ((numtype & IS_NUMBER_NAN)) {
2104         SvNV_set(sv, NV_NAN);
2105         nok = TRUE;
2106     } else
2107 #endif
2108     if (pok) {
2109         SvNV_set(sv, Atof(SvPVX_const(sv)));
2110         /* Purposefully no true nok here, since we don't want to blow
2111          * away the possible IOK/UV of an existing sv. */
2112     }
2113     if (nok) {
2114         SvNOK_only(sv); /* No IV or UV please, this is pure infnan. */
2115         if (pok)
2116             SvPOK_on(sv); /* PV is okay, though. */
2117     }
2118 }
2119 #ifdef USING_MSVC6
2120 #  pragma warning(pop)
2121 #endif
2122
2123 STATIC bool
2124 S_sv_2iuv_common(pTHX_ SV *const sv)
2125 {
2126     PERL_ARGS_ASSERT_SV_2IUV_COMMON;
2127
2128     if (SvNOKp(sv)) {
2129         /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2130          * without also getting a cached IV/UV from it at the same time
2131          * (ie PV->NV conversion should detect loss of accuracy and cache
2132          * IV or UV at same time to avoid this. */
2133         /* IV-over-UV optimisation - choose to cache IV if possible */
2134
2135         if (SvTYPE(sv) == SVt_NV)
2136             sv_upgrade(sv, SVt_PVNV);
2137
2138         (void)SvIOKp_on(sv);    /* Must do this first, to clear any SvOOK */
2139         /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
2140            certainly cast into the IV range at IV_MAX, whereas the correct
2141            answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
2142            cases go to UV */
2143 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2144         if (Perl_isnan(SvNVX(sv))) {
2145             SvUV_set(sv, 0);
2146             SvIsUV_on(sv);
2147             return FALSE;
2148         }
2149 #endif
2150         if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2151             SvIV_set(sv, I_V(SvNVX(sv)));
2152             if (SvNVX(sv) == (NV) SvIVX(sv)
2153 #ifndef NV_PRESERVES_UV
2154                 && SvIVX(sv) != IV_MIN /* avoid negating IV_MIN below */
2155                 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2156                     (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2157                 /* Don't flag it as "accurately an integer" if the number
2158                    came from a (by definition imprecise) NV operation, and
2159                    we're outside the range of NV integer precision */
2160 #endif
2161                 ) {
2162                 if (SvNOK(sv))
2163                     SvIOK_on(sv);  /* Can this go wrong with rounding? NWC */
2164                 else {
2165                     /* scalar has trailing garbage, eg "42a" */
2166                 }
2167                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2168                                       "0x%" UVxf " iv(%" NVgf " => %" IVdf ") (precise)\n",
2169                                       PTR2UV(sv),
2170                                       SvNVX(sv),
2171                                       SvIVX(sv)));
2172
2173             } else {
2174                 /* IV not precise.  No need to convert from PV, as NV
2175                    conversion would already have cached IV if it detected
2176                    that PV->IV would be better than PV->NV->IV
2177                    flags already correct - don't set public IOK.  */
2178                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2179                                       "0x%" UVxf " iv(%" NVgf " => %" IVdf ") (imprecise)\n",
2180                                       PTR2UV(sv),
2181                                       SvNVX(sv),
2182                                       SvIVX(sv)));
2183             }
2184             /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2185                but the cast (NV)IV_MIN rounds to a the value less (more
2186                negative) than IV_MIN which happens to be equal to SvNVX ??
2187                Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2188                NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2189                (NV)UVX == NVX are both true, but the values differ. :-(
2190                Hopefully for 2s complement IV_MIN is something like
2191                0x8000000000000000 which will be exact. NWC */
2192         }
2193         else {
2194             SvUV_set(sv, U_V(SvNVX(sv)));
2195             if (
2196                 (SvNVX(sv) == (NV) SvUVX(sv))
2197 #ifndef  NV_PRESERVES_UV
2198                 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2199                 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2200                 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2201                 /* Don't flag it as "accurately an integer" if the number
2202                    came from a (by definition imprecise) NV operation, and
2203                    we're outside the range of NV integer precision */
2204 #endif
2205                 && SvNOK(sv)
2206                 )
2207                 SvIOK_on(sv);
2208             SvIsUV_on(sv);
2209             DEBUG_c(PerlIO_printf(Perl_debug_log,
2210                                   "0x%" UVxf " 2iv(%" UVuf " => %" IVdf ") (as unsigned)\n",
2211                                   PTR2UV(sv),
2212                                   SvUVX(sv),
2213                                   SvUVX(sv)));
2214         }
2215     }
2216     else if (SvPOKp(sv)) {
2217         UV value;
2218         int numtype;
2219         const char *s = SvPVX_const(sv);
2220         const STRLEN cur = SvCUR(sv);
2221
2222         /* short-cut for a single digit string like "1" */
2223
2224         if (cur == 1) {
2225             char c = *s;
2226             if (isDIGIT(c)) {
2227                 if (SvTYPE(sv) < SVt_PVIV)
2228                     sv_upgrade(sv, SVt_PVIV);
2229                 (void)SvIOK_on(sv);
2230                 SvIV_set(sv, (IV)(c - '0'));
2231                 return FALSE;
2232             }
2233         }
2234
2235         numtype = grok_number(s, cur, &value);
2236         /* We want to avoid a possible problem when we cache an IV/ a UV which
2237            may be later translated to an NV, and the resulting NV is not
2238            the same as the direct translation of the initial string
2239            (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2240            be careful to ensure that the value with the .456 is around if the
2241            NV value is requested in the future).
2242         
2243            This means that if we cache such an IV/a UV, we need to cache the
2244            NV as well.  Moreover, we trade speed for space, and do not
2245            cache the NV if we are sure it's not needed.
2246          */
2247
2248         /* SVt_PVNV is one higher than SVt_PVIV, hence this order  */
2249         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2250              == IS_NUMBER_IN_UV) {
2251             /* It's definitely an integer, only upgrade to PVIV */
2252             if (SvTYPE(sv) < SVt_PVIV)
2253                 sv_upgrade(sv, SVt_PVIV);
2254             (void)SvIOK_on(sv);
2255         } else if (SvTYPE(sv) < SVt_PVNV)
2256             sv_upgrade(sv, SVt_PVNV);
2257
2258         if ((numtype & (IS_NUMBER_INFINITY | IS_NUMBER_NAN))) {
2259             if (ckWARN(WARN_NUMERIC) && ((numtype & IS_NUMBER_TRAILING)))
2260                 not_a_number(sv);
2261             S_sv_setnv(aTHX_ sv, numtype);
2262             return FALSE;
2263         }
2264
2265         /* If NVs preserve UVs then we only use the UV value if we know that
2266            we aren't going to call atof() below. If NVs don't preserve UVs
2267            then the value returned may have more precision than atof() will
2268            return, even though value isn't perfectly accurate.  */
2269         if ((numtype & (IS_NUMBER_IN_UV
2270 #ifdef NV_PRESERVES_UV
2271                         | IS_NUMBER_NOT_INT
2272 #endif
2273             )) == IS_NUMBER_IN_UV) {
2274             /* This won't turn off the public IOK flag if it was set above  */
2275             (void)SvIOKp_on(sv);
2276
2277             if (!(numtype & IS_NUMBER_NEG)) {
2278                 /* positive */;
2279                 if (value <= (UV)IV_MAX) {
2280                     SvIV_set(sv, (IV)value);
2281                 } else {
2282                     /* it didn't overflow, and it was positive. */
2283                     SvUV_set(sv, value);
2284                     SvIsUV_on(sv);
2285                 }
2286             } else {
2287                 /* 2s complement assumption  */
2288                 if (value <= (UV)IV_MIN) {
2289                     SvIV_set(sv, value == (UV)IV_MIN
2290                                     ? IV_MIN : -(IV)value);
2291                 } else {
2292                     /* Too negative for an IV.  This is a double upgrade, but
2293                        I'm assuming it will be rare.  */
2294                     if (SvTYPE(sv) < SVt_PVNV)
2295                         sv_upgrade(sv, SVt_PVNV);
2296                     SvNOK_on(sv);
2297                     SvIOK_off(sv);
2298                     SvIOKp_on(sv);
2299                     SvNV_set(sv, -(NV)value);
2300                     SvIV_set(sv, IV_MIN);
2301                 }
2302             }
2303         }
2304         /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2305            will be in the previous block to set the IV slot, and the next
2306            block to set the NV slot.  So no else here.  */
2307         
2308         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2309             != IS_NUMBER_IN_UV) {
2310             /* It wasn't an (integer that doesn't overflow the UV). */
2311             S_sv_setnv(aTHX_ sv, numtype);
2312
2313             if (! numtype && ckWARN(WARN_NUMERIC))
2314                 not_a_number(sv);
2315
2316             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2iv(%" NVgf ")\n",
2317                                   PTR2UV(sv), SvNVX(sv)));
2318
2319 #ifdef NV_PRESERVES_UV
2320             (void)SvIOKp_on(sv);
2321             (void)SvNOK_on(sv);
2322 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2323             if (Perl_isnan(SvNVX(sv))) {
2324                 SvUV_set(sv, 0);
2325                 SvIsUV_on(sv);
2326                 return FALSE;
2327             }
2328 #endif
2329             if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2330                 SvIV_set(sv, I_V(SvNVX(sv)));
2331                 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2332                     SvIOK_on(sv);
2333                 } else {
2334                     NOOP;  /* Integer is imprecise. NOK, IOKp */
2335                 }
2336                 /* UV will not work better than IV */
2337             } else {
2338                 if (SvNVX(sv) > (NV)UV_MAX) {
2339                     SvIsUV_on(sv);
2340                     /* Integer is inaccurate. NOK, IOKp, is UV */
2341                     SvUV_set(sv, UV_MAX);
2342                 } else {
2343                     SvUV_set(sv, U_V(SvNVX(sv)));
2344                     /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2345                        NV preservse UV so can do correct comparison.  */
2346                     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2347                         SvIOK_on(sv);
2348                     } else {
2349                         NOOP;   /* Integer is imprecise. NOK, IOKp, is UV */
2350                     }
2351                 }
2352                 SvIsUV_on(sv);
2353             }
2354 #else /* NV_PRESERVES_UV */
2355             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2356                 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2357                 /* The IV/UV slot will have been set from value returned by
2358                    grok_number above.  The NV slot has just been set using
2359                    Atof.  */
2360                 SvNOK_on(sv);
2361                 assert (SvIOKp(sv));
2362             } else {
2363                 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2364                     U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2365                     /* Small enough to preserve all bits. */
2366                     (void)SvIOKp_on(sv);
2367                     SvNOK_on(sv);
2368                     SvIV_set(sv, I_V(SvNVX(sv)));
2369                     if ((NV)(SvIVX(sv)) == SvNVX(sv))
2370                         SvIOK_on(sv);
2371                     /* Assumption: first non-preserved integer is < IV_MAX,
2372                        this NV is in the preserved range, therefore: */
2373                     if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2374                           < (UV)IV_MAX)) {
2375                         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);
2376                     }
2377                 } else {
2378                     /* IN_UV NOT_INT
2379                          0      0       already failed to read UV.
2380                          0      1       already failed to read UV.
2381                          1      0       you won't get here in this case. IV/UV
2382                                         slot set, public IOK, Atof() unneeded.
2383                          1      1       already read UV.
2384                        so there's no point in sv_2iuv_non_preserve() attempting
2385                        to use atol, strtol, strtoul etc.  */
2386 #  ifdef DEBUGGING
2387                     sv_2iuv_non_preserve (sv, numtype);
2388 #  else
2389                     sv_2iuv_non_preserve (sv);
2390 #  endif
2391                 }
2392             }
2393 #endif /* NV_PRESERVES_UV */
2394         /* It might be more code efficient to go through the entire logic above
2395            and conditionally set with SvIOKp_on() rather than SvIOK(), but it
2396            gets complex and potentially buggy, so more programmer efficient
2397            to do it this way, by turning off the public flags:  */
2398         if (!numtype)
2399             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2400         }
2401     }
2402     else  {
2403         if (isGV_with_GP(sv))
2404             return glob_2number(MUTABLE_GV(sv));
2405
2406         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2407                 report_uninit(sv);
2408         if (SvTYPE(sv) < SVt_IV)
2409             /* Typically the caller expects that sv_any is not NULL now.  */
2410             sv_upgrade(sv, SVt_IV);
2411         /* Return 0 from the caller.  */
2412         return TRUE;
2413     }
2414     return FALSE;
2415 }
2416
2417 /*
2418 =for apidoc sv_2iv_flags
2419
2420 Return the integer value of an SV, doing any necessary string
2421 conversion.  If C<flags> has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.
2422 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2423
2424 =cut
2425 */
2426
2427 IV
2428 Perl_sv_2iv_flags(pTHX_ SV *const sv, const I32 flags)
2429 {
2430     PERL_ARGS_ASSERT_SV_2IV_FLAGS;
2431
2432     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2433          && SvTYPE(sv) != SVt_PVFM);
2434
2435     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2436         mg_get(sv);
2437
2438     if (SvROK(sv)) {
2439         if (SvAMAGIC(sv)) {
2440             SV * tmpstr;
2441             if (flags & SV_SKIP_OVERLOAD)
2442                 return 0;
2443             tmpstr = AMG_CALLunary(sv, numer_amg);
2444             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2445                 return SvIV(tmpstr);
2446             }
2447         }
2448         return PTR2IV(SvRV(sv));
2449     }
2450
2451     if (SvVALID(sv) || isREGEXP(sv)) {
2452         /* FBMs use the space for SvIVX and SvNVX for other purposes, so
2453            must not let them cache IVs.
2454            In practice they are extremely unlikely to actually get anywhere
2455            accessible by user Perl code - the only way that I'm aware of is when
2456            a constant subroutine which is used as the second argument to index.
2457
2458            Regexps have no SvIVX and SvNVX fields.
2459         */
2460         assert(isREGEXP(sv) || SvPOKp(sv));
2461         {
2462             UV value;
2463             const char * const ptr =
2464                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2465             const int numtype
2466                 = grok_number(ptr, SvCUR(sv), &value);
2467
2468             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2469                 == IS_NUMBER_IN_UV) {
2470                 /* It's definitely an integer */
2471                 if (numtype & IS_NUMBER_NEG) {
2472                     if (value < (UV)IV_MIN)
2473                         return -(IV)value;
2474                 } else {
2475                     if (value < (UV)IV_MAX)
2476                         return (IV)value;
2477                 }
2478             }
2479
2480             /* Quite wrong but no good choices. */
2481             if ((numtype & IS_NUMBER_INFINITY)) {
2482                 return (numtype & IS_NUMBER_NEG) ? IV_MIN : IV_MAX;
2483             } else if ((numtype & IS_NUMBER_NAN)) {
2484                 return 0; /* So wrong. */
2485             }
2486
2487             if (!numtype) {
2488                 if (ckWARN(WARN_NUMERIC))
2489                     not_a_number(sv);
2490             }
2491             return I_V(Atof(ptr));
2492         }
2493     }
2494
2495     if (SvTHINKFIRST(sv)) {
2496         if (SvREADONLY(sv) && !SvOK(sv)) {
2497             if (ckWARN(WARN_UNINITIALIZED))
2498                 report_uninit(sv);
2499             return 0;
2500         }
2501     }
2502
2503     if (!SvIOKp(sv)) {
2504         if (S_sv_2iuv_common(aTHX_ sv))
2505             return 0;
2506     }
2507
2508     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2iv(%" IVdf ")\n",
2509         PTR2UV(sv),SvIVX(sv)));
2510     return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2511 }
2512
2513 /*
2514 =for apidoc sv_2uv_flags
2515
2516 Return the unsigned integer value of an SV, doing any necessary string
2517 conversion.  If C<flags> has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.
2518 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2519
2520 =cut
2521 */
2522
2523 UV
2524 Perl_sv_2uv_flags(pTHX_ SV *const sv, const I32 flags)
2525 {
2526     PERL_ARGS_ASSERT_SV_2UV_FLAGS;
2527
2528     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2529         mg_get(sv);
2530
2531     if (SvROK(sv)) {
2532         if (SvAMAGIC(sv)) {
2533             SV *tmpstr;
2534             if (flags & SV_SKIP_OVERLOAD)
2535                 return 0;
2536             tmpstr = AMG_CALLunary(sv, numer_amg);
2537             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2538                 return SvUV(tmpstr);
2539             }
2540         }
2541         return PTR2UV(SvRV(sv));
2542     }
2543
2544     if (SvVALID(sv) || isREGEXP(sv)) {
2545         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2546            the same flag bit as SVf_IVisUV, so must not let them cache IVs.  
2547            Regexps have no SvIVX and SvNVX fields. */
2548         assert(isREGEXP(sv) || SvPOKp(sv));
2549         {
2550             UV value;
2551             const char * const ptr =
2552                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2553             const int numtype
2554                 = grok_number(ptr, SvCUR(sv), &value);
2555
2556             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2557                 == IS_NUMBER_IN_UV) {
2558                 /* It's definitely an integer */
2559                 if (!(numtype & IS_NUMBER_NEG))
2560                     return value;
2561             }
2562
2563             /* Quite wrong but no good choices. */
2564             if ((numtype & IS_NUMBER_INFINITY)) {
2565                 return UV_MAX; /* So wrong. */
2566             } else if ((numtype & IS_NUMBER_NAN)) {
2567                 return 0; /* So wrong. */
2568             }
2569
2570             if (!numtype) {
2571                 if (ckWARN(WARN_NUMERIC))
2572                     not_a_number(sv);
2573             }
2574             return U_V(Atof(ptr));
2575         }
2576     }
2577
2578     if (SvTHINKFIRST(sv)) {
2579         if (SvREADONLY(sv) && !SvOK(sv)) {
2580             if (ckWARN(WARN_UNINITIALIZED))
2581                 report_uninit(sv);
2582             return 0;
2583         }
2584     }
2585
2586     if (!SvIOKp(sv)) {
2587         if (S_sv_2iuv_common(aTHX_ sv))
2588             return 0;
2589     }
2590
2591     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2uv(%" UVuf ")\n",
2592                           PTR2UV(sv),SvUVX(sv)));
2593     return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2594 }
2595
2596 /*
2597 =for apidoc sv_2nv_flags
2598
2599 Return the num value of an SV, doing any necessary string or integer
2600 conversion.  If C<flags> has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.
2601 Normally used via the C<SvNV(sv)> and C<SvNVx(sv)> macros.
2602
2603 =cut
2604 */
2605
2606 NV
2607 Perl_sv_2nv_flags(pTHX_ SV *const sv, const I32 flags)
2608 {
2609     PERL_ARGS_ASSERT_SV_2NV_FLAGS;
2610
2611     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2612          && SvTYPE(sv) != SVt_PVFM);
2613     if (SvGMAGICAL(sv) || SvVALID(sv) || isREGEXP(sv)) {
2614         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2615            the same flag bit as SVf_IVisUV, so must not let them cache NVs.
2616            Regexps have no SvIVX and SvNVX fields.  */
2617         const char *ptr;
2618         if (flags & SV_GMAGIC)
2619             mg_get(sv);
2620         if (SvNOKp(sv))
2621             return SvNVX(sv);
2622         if (SvPOKp(sv) && !SvIOKp(sv)) {
2623             ptr = SvPVX_const(sv);
2624           grokpv:
2625             if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2626                 !grok_number(ptr, SvCUR(sv), NULL))
2627                 not_a_number(sv);
2628             return Atof(ptr);
2629         }
2630         if (SvIOKp(sv)) {
2631             if (SvIsUV(sv))
2632                 return (NV)SvUVX(sv);
2633             else
2634                 return (NV)SvIVX(sv);
2635         }
2636         if (SvROK(sv)) {
2637             goto return_rok;
2638         }
2639         if (isREGEXP(sv)) {
2640             ptr = RX_WRAPPED((REGEXP *)sv);
2641             goto grokpv;
2642         }
2643         assert(SvTYPE(sv) >= SVt_PVMG);
2644         /* This falls through to the report_uninit near the end of the
2645            function. */
2646     } else if (SvTHINKFIRST(sv)) {
2647         if (SvROK(sv)) {
2648         return_rok:
2649             if (SvAMAGIC(sv)) {
2650                 SV *tmpstr;
2651                 if (flags & SV_SKIP_OVERLOAD)
2652                     return 0;
2653                 tmpstr = AMG_CALLunary(sv, numer_amg);
2654                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2655                     return SvNV(tmpstr);
2656                 }
2657             }
2658             return PTR2NV(SvRV(sv));
2659         }
2660         if (SvREADONLY(sv) && !SvOK(sv)) {
2661             if (ckWARN(WARN_UNINITIALIZED))
2662                 report_uninit(sv);
2663             return 0.0;
2664         }
2665     }
2666     if (SvTYPE(sv) < SVt_NV) {
2667         /* The logic to use SVt_PVNV if necessary is in sv_upgrade.  */
2668         sv_upgrade(sv, SVt_NV);
2669         DEBUG_c({
2670             STORE_NUMERIC_LOCAL_SET_STANDARD();
2671             PerlIO_printf(Perl_debug_log,
2672                           "0x%" UVxf " num(%" NVgf ")\n",
2673                           PTR2UV(sv), SvNVX(sv));
2674             RESTORE_NUMERIC_LOCAL();
2675         });
2676     }
2677     else if (SvTYPE(sv) < SVt_PVNV)
2678         sv_upgrade(sv, SVt_PVNV);
2679     if (SvNOKp(sv)) {
2680         return SvNVX(sv);
2681     }
2682     if (SvIOKp(sv)) {
2683         SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2684 #ifdef NV_PRESERVES_UV
2685         if (SvIOK(sv))
2686             SvNOK_on(sv);
2687         else
2688             SvNOKp_on(sv);
2689 #else
2690         /* Only set the public NV OK flag if this NV preserves the IV  */
2691         /* Check it's not 0xFFFFFFFFFFFFFFFF */
2692         if (SvIOK(sv) &&
2693             SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2694                        : (SvIVX(sv) == I_V(SvNVX(sv))))
2695             SvNOK_on(sv);
2696         else
2697             SvNOKp_on(sv);
2698 #endif
2699     }
2700     else if (SvPOKp(sv)) {
2701         UV value;
2702         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2703         if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2704             not_a_number(sv);
2705 #ifdef NV_PRESERVES_UV
2706         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2707             == IS_NUMBER_IN_UV) {
2708             /* It's definitely an integer */
2709             SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2710         } else {
2711             S_sv_setnv(aTHX_ sv, numtype);
2712         }
2713         if (numtype)
2714             SvNOK_on(sv);
2715         else
2716             SvNOKp_on(sv);
2717 #else
2718         SvNV_set(sv, Atof(SvPVX_const(sv)));
2719         /* Only set the public NV OK flag if this NV preserves the value in
2720            the PV at least as well as an IV/UV would.
2721            Not sure how to do this 100% reliably. */
2722         /* if that shift count is out of range then Configure's test is
2723            wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2724            UV_BITS */
2725         if (((UV)1 << NV_PRESERVES_UV_BITS) >
2726             U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2727             SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2728         } else if (!(numtype & IS_NUMBER_IN_UV)) {
2729             /* Can't use strtol etc to convert this string, so don't try.
2730                sv_2iv and sv_2uv will use the NV to convert, not the PV.  */
2731             SvNOK_on(sv);
2732         } else {
2733             /* value has been set.  It may not be precise.  */
2734             if ((numtype & IS_NUMBER_NEG) && (value >= (UV)IV_MIN)) {
2735                 /* 2s complement assumption for (UV)IV_MIN  */
2736                 SvNOK_on(sv); /* Integer is too negative.  */
2737             } else {
2738                 SvNOKp_on(sv);
2739                 SvIOKp_on(sv);
2740
2741                 if (numtype & IS_NUMBER_NEG) {
2742                     /* -IV_MIN is undefined, but we should never reach
2743                      * this point with both IS_NUMBER_NEG and value ==
2744                      * (UV)IV_MIN */
2745                     assert(value != (UV)IV_MIN);
2746                     SvIV_set(sv, -(IV)value);
2747                 } else if (value <= (UV)IV_MAX) {
2748                     SvIV_set(sv, (IV)value);
2749                 } else {
2750                     SvUV_set(sv, value);
2751                     SvIsUV_on(sv);
2752                 }
2753
2754                 if (numtype & IS_NUMBER_NOT_INT) {
2755                     /* I believe that even if the original PV had decimals,
2756                        they are lost beyond the limit of the FP precision.
2757                        However, neither is canonical, so both only get p
2758                        flags.  NWC, 2000/11/25 */
2759                     /* Both already have p flags, so do nothing */
2760                 } else {
2761                     const NV nv = SvNVX(sv);
2762                     /* XXX should this spot have NAN_COMPARE_BROKEN, too? */
2763                     if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2764                         if (SvIVX(sv) == I_V(nv)) {
2765                             SvNOK_on(sv);
2766                         } else {
2767                             /* It had no "." so it must be integer.  */
2768                         }
2769                         SvIOK_on(sv);
2770                     } else {
2771                         /* between IV_MAX and NV(UV_MAX).
2772                            Could be slightly > UV_MAX */
2773
2774                         if (numtype & IS_NUMBER_NOT_INT) {
2775                             /* UV and NV both imprecise.  */
2776                         } else {
2777                             const UV nv_as_uv = U_V(nv);
2778
2779                             if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2780                                 SvNOK_on(sv);
2781                             }
2782                             SvIOK_on(sv);
2783                         }
2784                     }
2785                 }
2786             }
2787         }
2788         /* It might be more code efficient to go through the entire logic above
2789            and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2790            gets complex and potentially buggy, so more programmer efficient
2791            to do it this way, by turning off the public flags:  */
2792         if (!numtype)
2793             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2794 #endif /* NV_PRESERVES_UV */
2795     }
2796     else  {
2797         if (isGV_with_GP(sv)) {
2798             glob_2number(MUTABLE_GV(sv));
2799             return 0.0;
2800         }
2801
2802         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2803             report_uninit(sv);
2804         assert (SvTYPE(sv) >= SVt_NV);
2805         /* Typically the caller expects that sv_any is not NULL now.  */
2806         /* XXX Ilya implies that this is a bug in callers that assume this
2807            and ideally should be fixed.  */
2808         return 0.0;
2809     }
2810     DEBUG_c({
2811         STORE_NUMERIC_LOCAL_SET_STANDARD();
2812         PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2nv(%" NVgf ")\n",
2813                       PTR2UV(sv), SvNVX(sv));
2814         RESTORE_NUMERIC_LOCAL();
2815     });
2816     return SvNVX(sv);
2817 }
2818
2819 /*
2820 =for apidoc sv_2num
2821
2822 Return an SV with the numeric value of the source SV, doing any necessary
2823 reference or overload conversion.  The caller is expected to have handled
2824 get-magic already.
2825
2826 =cut
2827 */
2828
2829 SV *
2830 Perl_sv_2num(pTHX_ SV *const sv)
2831 {
2832     PERL_ARGS_ASSERT_SV_2NUM;
2833
2834     if (!SvROK(sv))
2835         return sv;
2836     if (SvAMAGIC(sv)) {
2837         SV * const tmpsv = AMG_CALLunary(sv, numer_amg);
2838         TAINT_IF(tmpsv && SvTAINTED(tmpsv));
2839         if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2840             return sv_2num(tmpsv);
2841     }
2842     return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2843 }
2844
2845 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2846  * UV as a string towards the end of buf, and return pointers to start and
2847  * end of it.
2848  *
2849  * We assume that buf is at least TYPE_CHARS(UV) long.
2850  */
2851
2852 static char *
2853 S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
2854 {
2855     char *ptr = buf + TYPE_CHARS(UV);
2856     char * const ebuf = ptr;
2857     int sign;
2858
2859     PERL_ARGS_ASSERT_UIV_2BUF;
2860
2861     if (is_uv)
2862         sign = 0;
2863     else if (iv >= 0) {
2864         uv = iv;
2865         sign = 0;
2866     } else {
2867         uv = (iv == IV_MIN) ? (UV)iv : (UV)(-iv);
2868         sign = 1;
2869     }
2870     do {
2871         *--ptr = '0' + (char)(uv % 10);
2872     } while (uv /= 10);
2873     if (sign)
2874         *--ptr = '-';
2875     *peob = ebuf;
2876     return ptr;
2877 }
2878
2879 /* Helper for sv_2pv_flags and sv_vcatpvfn_flags.  If the NV is an
2880  * infinity or a not-a-number, writes the appropriate strings to the
2881  * buffer, including a zero byte.  On success returns the written length,
2882  * excluding the zero byte, on failure (not an infinity, not a nan)
2883  * returns zero, assert-fails on maxlen being too short.
2884  *
2885  * XXX for "Inf", "-Inf", and "NaN", we could have three read-only
2886  * shared string constants we point to, instead of generating a new
2887  * string for each instance. */
2888 STATIC size_t
2889 S_infnan_2pv(NV nv, char* buffer, size_t maxlen, char plus) {
2890     char* s = buffer;
2891     assert(maxlen >= 4);
2892     if (Perl_isinf(nv)) {
2893         if (nv < 0) {
2894             if (maxlen < 5) /* "-Inf\0"  */
2895                 return 0;
2896             *s++ = '-';
2897         } else if (plus) {
2898             *s++ = '+';
2899         }
2900         *s++ = 'I';
2901         *s++ = 'n';
2902         *s++ = 'f';
2903     }
2904     else if (Perl_isnan(nv)) {
2905         *s++ = 'N';
2906         *s++ = 'a';
2907         *s++ = 'N';
2908         /* XXX optionally output the payload mantissa bits as
2909          * "(unsigned)" (to match the nan("...") C99 function,
2910          * or maybe as "(0xhhh...)"  would make more sense...
2911          * provide a format string so that the user can decide?
2912          * NOTE: would affect the maxlen and assert() logic.*/
2913     }
2914     else {
2915       return 0;
2916     }
2917     assert((s == buffer + 3) || (s == buffer + 4));
2918     *s = 0;
2919     return s - buffer;
2920 }
2921
2922 /*
2923 =for apidoc sv_2pv_flags
2924
2925 Returns a pointer to the string value of an SV, and sets C<*lp> to its length.
2926 If flags has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.  Coerces C<sv> to a
2927 string if necessary.  Normally invoked via the C<SvPV_flags> macro.
2928 C<sv_2pv()> and C<sv_2pv_nomg> usually end up here too.
2929
2930 =cut
2931 */
2932
2933 char *
2934 Perl_sv_2pv_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
2935 {
2936     char *s;
2937
2938     PERL_ARGS_ASSERT_SV_2PV_FLAGS;
2939
2940     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2941          && SvTYPE(sv) != SVt_PVFM);
2942     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2943         mg_get(sv);
2944     if (SvROK(sv)) {
2945         if (SvAMAGIC(sv)) {
2946             SV *tmpstr;
2947             if (flags & SV_SKIP_OVERLOAD)
2948                 return NULL;
2949             tmpstr = AMG_CALLunary(sv, string_amg);
2950             TAINT_IF(tmpstr && SvTAINTED(tmpstr));
2951             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2952                 /* Unwrap this:  */
2953                 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2954                  */
2955
2956                 char *pv;
2957                 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2958                     if (flags & SV_CONST_RETURN) {
2959                         pv = (char *) SvPVX_const(tmpstr);
2960                     } else {
2961                         pv = (flags & SV_MUTABLE_RETURN)
2962                             ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2963                     }
2964                     if (lp)
2965                         *lp = SvCUR(tmpstr);
2966                 } else {
2967                     pv = sv_2pv_flags(tmpstr, lp, flags);
2968                 }
2969                 if (SvUTF8(tmpstr))
2970                     SvUTF8_on(sv);
2971                 else
2972                     SvUTF8_off(sv);
2973                 return pv;
2974             }
2975         }
2976         {
2977             STRLEN len;
2978             char *retval;
2979             char *buffer;
2980             SV *const referent = SvRV(sv);
2981
2982             if (!referent) {
2983                 len = 7;
2984                 retval = buffer = savepvn("NULLREF", len);
2985             } else if (SvTYPE(referent) == SVt_REGEXP &&
2986                        (!(PL_curcop->cop_hints & HINT_NO_AMAGIC) ||
2987                         amagic_is_enabled(string_amg))) {
2988                 REGEXP * const re = (REGEXP *)MUTABLE_PTR(referent);
2989
2990                 assert(re);
2991                         
2992                 /* If the regex is UTF-8 we want the containing scalar to
2993                    have an UTF-8 flag too */
2994                 if (RX_UTF8(re))
2995                     SvUTF8_on(sv);
2996                 else
2997                     SvUTF8_off(sv);     
2998
2999                 if (lp)
3000                     *lp = RX_WRAPLEN(re);
3001  
3002                 return RX_WRAPPED(re);
3003             } else {
3004                 const char *const typestr = sv_reftype(referent, 0);
3005                 const STRLEN typelen = strlen(typestr);
3006                 UV addr = PTR2UV(referent);
3007                 const char *stashname = NULL;
3008                 STRLEN stashnamelen = 0; /* hush, gcc */
3009                 const char *buffer_end;
3010
3011                 if (SvOBJECT(referent)) {
3012                     const HEK *const name = HvNAME_HEK(SvSTASH(referent));
3013
3014                     if (name) {
3015                         stashname = HEK_KEY(name);
3016                         stashnamelen = HEK_LEN(name);
3017
3018                         if (HEK_UTF8(name)) {
3019                             SvUTF8_on(sv);
3020                         } else {
3021                             SvUTF8_off(sv);
3022                         }
3023                     } else {
3024                         stashname = "__ANON__";
3025                         stashnamelen = 8;
3026                     }
3027                     len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
3028                         + 2 * sizeof(UV) + 2 /* )\0 */;
3029                 } else {
3030                     len = typelen + 3 /* (0x */
3031                         + 2 * sizeof(UV) + 2 /* )\0 */;
3032                 }
3033
3034                 Newx(buffer, len, char);
3035                 buffer_end = retval = buffer + len;
3036
3037                 /* Working backwards  */
3038                 *--retval = '\0';
3039                 *--retval = ')';
3040                 do {
3041                     *--retval = PL_hexdigit[addr & 15];
3042                 } while (addr >>= 4);
3043                 *--retval = 'x';
3044                 *--retval = '0';
3045                 *--retval = '(';
3046
3047                 retval -= typelen;
3048                 memcpy(retval, typestr, typelen);
3049
3050                 if (stashname) {
3051                     *--retval = '=';
3052                     retval -= stashnamelen;
3053                     memcpy(retval, stashname, stashnamelen);
3054                 }
3055                 /* retval may not necessarily have reached the start of the
3056                    buffer here.  */
3057                 assert (retval >= buffer);
3058
3059                 len = buffer_end - retval - 1; /* -1 for that \0  */
3060             }
3061             if (lp)
3062                 *lp = len;
3063             SAVEFREEPV(buffer);
3064             return retval;
3065         }
3066     }
3067
3068     if (SvPOKp(sv)) {
3069         if (lp)
3070             *lp = SvCUR(sv);
3071         if (flags & SV_MUTABLE_RETURN)
3072             return SvPVX_mutable(sv);
3073         if (flags & SV_CONST_RETURN)
3074             return (char *)SvPVX_const(sv);
3075         return SvPVX(sv);
3076     }
3077
3078     if (SvIOK(sv)) {
3079         /* I'm assuming that if both IV and NV are equally valid then
3080            converting the IV is going to be more efficient */
3081         const U32 isUIOK = SvIsUV(sv);
3082         char buf[TYPE_CHARS(UV)];
3083         char *ebuf, *ptr;
3084         STRLEN len;
3085
3086         if (SvTYPE(sv) < SVt_PVIV)
3087             sv_upgrade(sv, SVt_PVIV);
3088         ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
3089         len = ebuf - ptr;
3090         /* inlined from sv_setpvn */
3091         s = SvGROW_mutable(sv, len + 1);
3092         Move(ptr, s, len, char);
3093         s += len;
3094         *s = '\0';
3095         SvPOK_on(sv);
3096     }
3097     else if (SvNOK(sv)) {
3098         if (SvTYPE(sv) < SVt_PVNV)
3099             sv_upgrade(sv, SVt_PVNV);
3100         if (SvNVX(sv) == 0.0
3101 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
3102             && !Perl_isnan(SvNVX(sv))
3103 #endif
3104         ) {
3105             s = SvGROW_mutable(sv, 2);
3106             *s++ = '0';
3107             *s = '\0';
3108         } else {
3109             STRLEN len;
3110             STRLEN size = 5; /* "-Inf\0" */
3111
3112             s = SvGROW_mutable(sv, size);
3113             len = S_infnan_2pv(SvNVX(sv), s, size, 0);
3114             if (len > 0) {
3115                 s += len;
3116                 SvPOK_on(sv);
3117             }
3118             else {
3119                 /* some Xenix systems wipe out errno here */
3120                 dSAVE_ERRNO;
3121
3122                 size =
3123                     1 + /* sign */
3124                     1 + /* "." */
3125                     NV_DIG +
3126                     1 + /* "e" */
3127                     1 + /* sign */
3128                     5 + /* exponent digits */
3129                     1 + /* \0 */
3130                     2; /* paranoia */
3131
3132                 s = SvGROW_mutable(sv, size);
3133 #ifndef USE_LOCALE_NUMERIC
3134                 SNPRINTF_G(SvNVX(sv), s, SvLEN(sv), NV_DIG);
3135
3136                 SvPOK_on(sv);
3137 #else
3138                 {
3139                     bool local_radix;
3140                     DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
3141                     STORE_LC_NUMERIC_SET_TO_NEEDED();
3142
3143                     local_radix = PL_numeric_local && PL_numeric_radix_sv;
3144                     if (local_radix && SvLEN(PL_numeric_radix_sv) > 1) {
3145                         size += SvLEN(PL_numeric_radix_sv) - 1;
3146                         s = SvGROW_mutable(sv, size);
3147                     }
3148
3149                     SNPRINTF_G(SvNVX(sv), s, SvLEN(sv), NV_DIG);
3150
3151                     /* If the radix character is UTF-8, and actually is in the
3152                      * output, turn on the UTF-8 flag for the scalar */
3153                     if (   local_radix
3154                         && SvUTF8(PL_numeric_radix_sv)
3155                         && instr(s, SvPVX_const(PL_numeric_radix_sv)))
3156                     {
3157                         SvUTF8_on(sv);
3158                     }
3159
3160                     RESTORE_LC_NUMERIC();
3161                 }
3162
3163                 /* We don't call SvPOK_on(), because it may come to
3164                  * pass that the locale changes so that the
3165                  * stringification we just did is no longer correct.  We
3166                  * will have to re-stringify every time it is needed */
3167 #endif
3168                 RESTORE_ERRNO;
3169             }
3170             while (*s) s++;
3171         }
3172     }
3173     else if (isGV_with_GP(sv)) {
3174         GV *const gv = MUTABLE_GV(sv);
3175         SV *const buffer = sv_newmortal();
3176
3177         gv_efullname3(buffer, gv, "*");
3178
3179         assert(SvPOK(buffer));
3180         if (SvUTF8(buffer))
3181             SvUTF8_on(sv);
3182         if (lp)
3183             *lp = SvCUR(buffer);
3184         return SvPVX(buffer);
3185     }
3186     else if (isREGEXP(sv)) {
3187         if (lp) *lp = RX_WRAPLEN((REGEXP *)sv);
3188         return RX_WRAPPED((REGEXP *)sv);
3189     }
3190     else {
3191         if (lp)
3192             *lp = 0;
3193         if (flags & SV_UNDEF_RETURNS_NULL)
3194             return NULL;
3195         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
3196             report_uninit(sv);
3197         /* Typically the caller expects that sv_any is not NULL now.  */
3198         if (!SvREADONLY(sv) && SvTYPE(sv) < SVt_PV)
3199             sv_upgrade(sv, SVt_PV);
3200         return (char *)"";
3201     }
3202
3203     {
3204         const STRLEN len = s - SvPVX_const(sv);
3205         if (lp) 
3206             *lp = len;
3207         SvCUR_set(sv, len);
3208     }
3209     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2pv(%s)\n",
3210                           PTR2UV(sv),SvPVX_const(sv)));
3211     if (flags & SV_CONST_RETURN)
3212         return (char *)SvPVX_const(sv);
3213     if (flags & SV_MUTABLE_RETURN)
3214         return SvPVX_mutable(sv);
3215     return SvPVX(sv);
3216 }
3217
3218 /*
3219 =for apidoc sv_copypv
3220
3221 Copies a stringified representation of the source SV into the
3222 destination SV.  Automatically performs any necessary C<mg_get> and
3223 coercion of numeric values into strings.  Guaranteed to preserve
3224 C<UTF8> flag even from overloaded objects.  Similar in nature to
3225 C<sv_2pv[_flags]> but operates directly on an SV instead of just the
3226 string.  Mostly uses C<sv_2pv_flags> to do its work, except when that
3227 would lose the UTF-8'ness of the PV.
3228
3229 =for apidoc sv_copypv_nomg
3230
3231 Like C<sv_copypv>, but doesn't invoke get magic first.
3232
3233 =for apidoc sv_copypv_flags
3234
3235 Implementation of C<sv_copypv> and C<sv_copypv_nomg>.  Calls get magic iff flags
3236 has the C<SV_GMAGIC> bit set.
3237
3238 =cut
3239 */
3240
3241 void
3242 Perl_sv_copypv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
3243 {
3244     STRLEN len;
3245     const char *s;
3246
3247     PERL_ARGS_ASSERT_SV_COPYPV_FLAGS;
3248
3249     s = SvPV_flags_const(ssv,len,(flags & SV_GMAGIC));
3250     sv_setpvn(dsv,s,len);
3251     if (SvUTF8(ssv))
3252         SvUTF8_on(dsv);
3253     else
3254         SvUTF8_off(dsv);
3255 }
3256
3257 /*
3258 =for apidoc sv_2pvbyte
3259
3260 Return a pointer to the byte-encoded representation of the SV, and set C<*lp>
3261 to its length.  May cause the SV to be downgraded from UTF-8 as a
3262 side-effect.
3263
3264 Usually accessed via the C<SvPVbyte> macro.
3265
3266 =cut
3267 */
3268
3269 char *
3270 Perl_sv_2pvbyte(pTHX_ SV *sv, STRLEN *const lp)
3271 {
3272     PERL_ARGS_ASSERT_SV_2PVBYTE;
3273
3274     SvGETMAGIC(sv);
3275     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3276      || isGV_with_GP(sv) || SvROK(sv)) {
3277         SV *sv2 = sv_newmortal();
3278         sv_copypv_nomg(sv2,sv);
3279         sv = sv2;
3280     }
3281     sv_utf8_downgrade(sv,0);
3282     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3283 }
3284
3285 /*
3286 =for apidoc sv_2pvutf8
3287
3288 Return a pointer to the UTF-8-encoded representation of the SV, and set C<*lp>
3289 to its length.  May cause the SV to be upgraded to UTF-8 as a side-effect.
3290
3291 Usually accessed via the C<SvPVutf8> macro.
3292
3293 =cut
3294 */
3295
3296 char *
3297 Perl_sv_2pvutf8(pTHX_ SV *sv, STRLEN *const lp)
3298 {
3299     PERL_ARGS_ASSERT_SV_2PVUTF8;
3300
3301     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3302      || isGV_with_GP(sv) || SvROK(sv))
3303         sv = sv_mortalcopy(sv);
3304     else
3305         SvGETMAGIC(sv);
3306     sv_utf8_upgrade_nomg(sv);
3307     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3308 }
3309
3310
3311 /*
3312 =for apidoc sv_2bool
3313
3314 This macro is only used by C<sv_true()> or its macro equivalent, and only if
3315 the latter's argument is neither C<SvPOK>, C<SvIOK> nor C<SvNOK>.
3316 It calls C<sv_2bool_flags> with the C<SV_GMAGIC> flag.
3317
3318 =for apidoc sv_2bool_flags
3319
3320 This function is only used by C<sv_true()> and friends,  and only if
3321 the latter's argument is neither C<SvPOK>, C<SvIOK> nor C<SvNOK>.  If the flags
3322 contain C<SV_GMAGIC>, then it does an C<mg_get()> first.
3323
3324
3325 =cut
3326 */
3327
3328 bool
3329 Perl_sv_2bool_flags(pTHX_ SV *sv, I32 flags)
3330 {
3331     PERL_ARGS_ASSERT_SV_2BOOL_FLAGS;
3332
3333     restart:
3334     if(flags & SV_GMAGIC) SvGETMAGIC(sv);
3335
3336     if (!SvOK(sv))
3337         return 0;
3338     if (SvROK(sv)) {
3339         if (SvAMAGIC(sv)) {
3340             SV * const tmpsv = AMG_CALLunary(sv, bool__amg);
3341             if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv)))) {
3342                 bool svb;
3343                 sv = tmpsv;
3344                 if(SvGMAGICAL(sv)) {
3345                     flags = SV_GMAGIC;
3346                     goto restart; /* call sv_2bool */
3347                 }
3348                 /* expanded SvTRUE_common(sv, (flags = 0, goto restart)) */
3349                 else if(!SvOK(sv)) {
3350                     svb = 0;
3351                 }
3352                 else if(SvPOK(sv)) {
3353                     svb = SvPVXtrue(sv);
3354                 }
3355                 else if((SvFLAGS(sv) & (SVf_IOK|SVf_NOK))) {
3356                     svb = (SvIOK(sv) && SvIVX(sv) != 0)
3357                         || (SvNOK(sv) && SvNVX(sv) != 0.0);
3358                 }
3359                 else {
3360                     flags = 0;
3361                     goto restart; /* call sv_2bool_nomg */
3362                 }
3363                 return cBOOL(svb);
3364             }
3365         }
3366         return SvRV(sv) != 0;
3367     }
3368     if (isREGEXP(sv))
3369         return
3370           RX_WRAPLEN(sv) > 1 || (RX_WRAPLEN(sv) && *RX_WRAPPED(sv) != '0');
3371     return SvTRUE_common(sv, isGV_with_GP(sv) ? 1 : 0);
3372 }
3373
3374 /*
3375 =for apidoc sv_utf8_upgrade
3376
3377 Converts the PV of an SV to its UTF-8-encoded form.
3378 Forces the SV to string form if it is not already.
3379 Will C<mg_get> on C<sv> if appropriate.
3380 Always sets the C<SvUTF8> flag to avoid future validity checks even
3381 if the whole string is the same in UTF-8 as not.
3382 Returns the number of bytes in the converted string
3383
3384 This is not a general purpose byte encoding to Unicode interface:
3385 use the Encode extension for that.
3386
3387 =for apidoc sv_utf8_upgrade_nomg
3388
3389 Like C<sv_utf8_upgrade>, but doesn't do magic on C<sv>.
3390
3391 =for apidoc sv_utf8_upgrade_flags
3392
3393 Converts the PV of an SV to its UTF-8-encoded form.
3394 Forces the SV to string form if it is not already.
3395 Always sets the SvUTF8 flag to avoid future validity checks even
3396 if all the bytes are invariant in UTF-8.
3397 If C<flags> has C<SV_GMAGIC> bit set,
3398 will C<mg_get> on C<sv> if appropriate, else not.
3399
3400 If C<flags> has C<SV_FORCE_UTF8_UPGRADE> set, this function assumes that the PV
3401 will expand when converted to UTF-8, and skips the extra work of checking for
3402 that.  Typically this flag is used by a routine that has already parsed the
3403 string and found such characters, and passes this information on so that the
3404 work doesn't have to be repeated.
3405
3406 Returns the number of bytes in the converted string.
3407
3408 This is not a general purpose byte encoding to Unicode interface:
3409 use the Encode extension for that.
3410
3411 =for apidoc sv_utf8_upgrade_flags_grow
3412
3413 Like C<sv_utf8_upgrade_flags>, but has an additional parameter C<extra>, which is
3414 the number of unused bytes the string of C<sv> is guaranteed to have free after
3415 it upon return.  This allows the caller to reserve extra space that it intends
3416 to fill, to avoid extra grows.
3417
3418 C<sv_utf8_upgrade>, C<sv_utf8_upgrade_nomg>, and C<sv_utf8_upgrade_flags>
3419 are implemented in terms of this function.
3420
3421 Returns the number of bytes in the converted string (not including the spares).
3422
3423 =cut
3424
3425 (One might think that the calling routine could pass in the position of the
3426 first variant character when it has set SV_FORCE_UTF8_UPGRADE, so it wouldn't
3427 have to be found again.  But that is not the case, because typically when the
3428 caller is likely to use this flag, it won't be calling this routine unless it
3429 finds something that won't fit into a byte.  Otherwise it tries to not upgrade
3430 and just use bytes.  But some things that do fit into a byte are variants in
3431 utf8, and the caller may not have been keeping track of these.)
3432
3433 If the routine itself changes the string, it adds a trailing C<NUL>.  Such a
3434 C<NUL> isn't guaranteed due to having other routines do the work in some input
3435 cases, or if the input is already flagged as being in utf8.
3436
3437 The speed of this could perhaps be improved for many cases if someone wanted to
3438 write a fast function that counts the number of variant characters in a string,
3439 especially if it could return the position of the first one.
3440
3441 */
3442
3443 STRLEN
3444 Perl_sv_utf8_upgrade_flags_grow(pTHX_ SV *const sv, const I32 flags, STRLEN extra)
3445 {
3446     PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
3447
3448     if (sv == &PL_sv_undef)
3449         return 0;
3450     if (!SvPOK_nog(sv)) {
3451         STRLEN len = 0;
3452         if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3453             (void) sv_2pv_flags(sv,&len, flags);
3454             if (SvUTF8(sv)) {
3455                 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3456                 return len;
3457             }
3458         } else {
3459             (void) SvPV_force_flags(sv,len,flags & SV_GMAGIC);
3460         }
3461     }
3462
3463     if (SvUTF8(sv)) {
3464         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3465         return SvCUR(sv);
3466     }
3467
3468     if (SvIsCOW(sv)) {
3469         S_sv_uncow(aTHX_ sv, 0);
3470     }
3471
3472     if (SvCUR(sv) == 0) {
3473         if (extra) SvGROW(sv, extra);
3474     } else { /* Assume Latin-1/EBCDIC */
3475         /* This function could be much more efficient if we
3476          * had a FLAG in SVs to signal if there are any variant
3477          * chars in the PV.  Given that there isn't such a flag
3478          * make the loop as fast as possible (although there are certainly ways
3479          * to speed this up, eg. through vectorization) */
3480         U8 * s = (U8 *) SvPVX_const(sv);
3481         U8 * e = (U8 *) SvEND(sv);
3482         U8 *t = s;
3483         STRLEN two_byte_count = 0;
3484         
3485         if (flags & SV_FORCE_UTF8_UPGRADE) goto must_be_utf8;
3486
3487         /* See if really will need to convert to utf8.  We mustn't rely on our
3488          * incoming SV being well formed and having a trailing '\0', as certain
3489          * code in pp_formline can send us partially built SVs. */
3490
3491         while (t < e) {
3492             const U8 ch = *t++;
3493             if (NATIVE_BYTE_IS_INVARIANT(ch)) continue;
3494
3495             t--;    /* t already incremented; re-point to first variant */
3496             two_byte_count = 1;
3497             goto must_be_utf8;
3498         }
3499
3500         /* utf8 conversion not needed because all are invariants.  Mark as
3501          * UTF-8 even if no variant - saves scanning loop */
3502         SvUTF8_on(sv);
3503         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3504         return SvCUR(sv);
3505
3506       must_be_utf8:
3507
3508         /* Here, the string should be converted to utf8, either because of an
3509          * input flag (two_byte_count = 0), or because a character that
3510          * requires 2 bytes was found (two_byte_count = 1).  t points either to
3511          * the beginning of the string (if we didn't examine anything), or to
3512          * the first variant.  In either case, everything from s to t - 1 will
3513          * occupy only 1 byte each on output.
3514          *
3515          * There are two main ways to convert.  One is to create a new string
3516          * and go through the input starting from the beginning, appending each
3517          * converted value onto the new string as we go along.  It's probably
3518          * best to allocate enough space in the string for the worst possible
3519          * case rather than possibly running out of space and having to
3520          * reallocate and then copy what we've done so far.  Since everything
3521          * from s to t - 1 is invariant, the destination can be initialized
3522          * with these using a fast memory copy
3523          *
3524          * The other way is to figure out exactly how big the string should be
3525          * by parsing the entire input.  Then you don't have to make it big
3526          * enough to handle the worst possible case, and more importantly, if
3527          * the string you already have is large enough, you don't have to
3528          * allocate a new string, you can copy the last character in the input
3529          * string to the final position(s) that will be occupied by the
3530          * converted string and go backwards, stopping at t, since everything
3531          * before that is invariant.
3532          *
3533          * There are advantages and disadvantages to each method.
3534          *
3535          * In the first method, we can allocate a new string, do the memory
3536          * copy from the s to t - 1, and then proceed through the rest of the
3537          * string byte-by-byte.
3538          *
3539          * In the second method, we proceed through the rest of the input
3540          * string just calculating how big the converted string will be.  Then
3541          * there are two cases:
3542          *  1)  if the string has enough extra space to handle the converted
3543          *      value.  We go backwards through the string, converting until we
3544          *      get to the position we are at now, and then stop.  If this
3545          *      position is far enough along in the string, this method is
3546          *      faster than the other method.  If the memory copy were the same
3547          *      speed as the byte-by-byte loop, that position would be about
3548          *      half-way, as at the half-way mark, parsing to the end and back
3549          *      is one complete string's parse, the same amount as starting
3550          *      over and going all the way through.  Actually, it would be
3551          *      somewhat less than half-way, as it's faster to just count bytes
3552          *      than to also copy, and we don't have the overhead of allocating
3553          *      a new string, changing the scalar to use it, and freeing the
3554          *      existing one.  But if the memory copy is fast, the break-even
3555          *      point is somewhere after half way.  The counting loop could be
3556          *      sped up by vectorization, etc, to move the break-even point
3557          *      further towards the beginning.
3558          *  2)  if the string doesn't have enough space to handle the converted
3559          *      value.  A new string will have to be allocated, and one might
3560          *      as well, given that, start from the beginning doing the first
3561          *      method.  We've spent extra time parsing the string and in
3562          *      exchange all we've gotten is that we know precisely how big to
3563          *      make the new one.  Perl is more optimized for time than space,
3564          *      so this case is a loser.
3565          * So what I've decided to do is not use the 2nd method unless it is
3566          * guaranteed that a new string won't have to be allocated, assuming
3567          * the worst case.  I also decided not to put any more conditions on it
3568          * than this, for now.  It seems likely that, since the worst case is
3569          * twice as big as the unknown portion of the string (plus 1), we won't
3570          * be guaranteed enough space, causing us to go to the first method,
3571          * unless the string is short, or the first variant character is near
3572          * the end of it.  In either of these cases, it seems best to use the
3573          * 2nd method.  The only circumstance I can think of where this would
3574          * be really slower is if the string had once had much more data in it
3575          * than it does now, but there is still a substantial amount in it  */
3576
3577         {
3578             STRLEN invariant_head = t - s;
3579             STRLEN size = invariant_head + (e - t) * 2 + 1 + extra;
3580             if (SvLEN(sv) < size) {
3581
3582                 /* Here, have decided to allocate a new string */
3583
3584                 U8 *dst;
3585                 U8 *d;
3586
3587                 Newx(dst, size, U8);
3588
3589                 /* If no known invariants at the beginning of the input string,
3590                  * set so starts from there.  Otherwise, can use memory copy to
3591                  * get up to where we are now, and then start from here */
3592
3593                 if (invariant_head == 0) {
3594                     d = dst;
3595                 } else {
3596                     Copy(s, dst, invariant_head, char);
3597                     d = dst + invariant_head;
3598                 }
3599
3600                 while (t < e) {
3601                     append_utf8_from_native_byte(*t, &d);
3602                     t++;
3603                 }
3604                 *d = '\0';
3605                 SvPV_free(sv); /* No longer using pre-existing string */
3606                 SvPV_set(sv, (char*)dst);
3607                 SvCUR_set(sv, d - dst);
3608                 SvLEN_set(sv, size);
3609             } else {
3610
3611                 /* Here, have decided to get the exact size of the string.
3612                  * Currently this happens only when we know that there is
3613                  * guaranteed enough space to fit the converted string, so
3614                  * don't have to worry about growing.  If two_byte_count is 0,
3615                  * then t points to the first byte of the string which hasn't
3616                  * been examined yet.  Otherwise two_byte_count is 1, and t
3617                  * points to the first byte in the string that will expand to
3618                  * two.  Depending on this, start examining at t or 1 after t.
3619                  * */
3620
3621                 U8 *d = t + two_byte_count;
3622
3623
3624                 /* Count up the remaining bytes that expand to two */
3625
3626                 while (d < e) {
3627                     const U8 chr = *d++;
3628                     if (! NATIVE_BYTE_IS_INVARIANT(chr)) two_byte_count++;
3629                 }
3630
3631                 /* The string will expand by just the number of bytes that
3632                  * occupy two positions.  But we are one afterwards because of
3633                  * the increment just above.  This is the place to put the
3634                  * trailing NUL, and to set the length before we decrement */
3635
3636                 d += two_byte_count;
3637                 SvCUR_set(sv, d - s);
3638                 *d-- = '\0';
3639
3640
3641                 /* Having decremented d, it points to the position to put the
3642                  * very last byte of the expanded string.  Go backwards through
3643                  * the string, copying and expanding as we go, stopping when we
3644                  * get to the part that is invariant the rest of the way down */
3645
3646                 e--;
3647                 while (e >= t) {
3648                     if (NATIVE_BYTE_IS_INVARIANT(*e)) {
3649                         *d-- = *e;
3650                     } else {
3651                         *d-- = UTF8_EIGHT_BIT_LO(*e);
3652                         *d-- = UTF8_EIGHT_BIT_HI(*e);
3653                     }
3654                     e--;
3655                 }
3656             }
3657
3658             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3659                 /* Update pos. We do it at the end rather than during
3660                  * the upgrade, to avoid slowing down the common case
3661                  * (upgrade without pos).
3662                  * pos can be stored as either bytes or characters.  Since
3663                  * this was previously a byte string we can just turn off
3664                  * the bytes flag. */
3665                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3666                 if (mg) {
3667                     mg->mg_flags &= ~MGf_BYTES;
3668                 }
3669                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3670                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3671             }
3672         }
3673     }
3674
3675     /* Mark as UTF-8 even if no variant - saves scanning loop */
3676     SvUTF8_on(sv);
3677     return SvCUR(sv);
3678 }
3679
3680 /*
3681 =for apidoc sv_utf8_downgrade
3682
3683 Attempts to convert the PV of an SV from characters to bytes.
3684 If the PV contains a character that cannot fit
3685 in a byte, this conversion will fail;
3686 in this case, either returns false or, if C<fail_ok> is not
3687 true, croaks.
3688
3689 This is not a general purpose Unicode to byte encoding interface:
3690 use the C<Encode> extension for that.
3691
3692 =cut
3693 */
3694
3695 bool
3696 Perl_sv_utf8_downgrade(pTHX_ SV *const sv, const bool fail_ok)
3697 {
3698     PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
3699
3700     if (SvPOKp(sv) && SvUTF8(sv)) {
3701         if (SvCUR(sv)) {
3702             U8 *s;
3703             STRLEN len;
3704             int mg_flags = SV_GMAGIC;
3705
3706             if (SvIsCOW(sv)) {
3707                 S_sv_uncow(aTHX_ sv, 0);
3708             }
3709             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3710                 /* update pos */
3711                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3712                 if (mg && mg->mg_len > 0 && mg->mg_flags & MGf_BYTES) {
3713                         mg->mg_len = sv_pos_b2u_flags(sv, mg->mg_len,
3714                                                 SV_GMAGIC|SV_CONST_RETURN);
3715                         mg_flags = 0; /* sv_pos_b2u does get magic */
3716                 }
3717                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3718                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3719
3720             }
3721             s = (U8 *) SvPV_flags(sv, len, mg_flags);
3722
3723             if (!utf8_to_bytes(s, &len)) {
3724                 if (fail_ok)
3725                     return FALSE;
3726                 else {
3727                     if (PL_op)
3728                         Perl_croak(aTHX_ "Wide character in %s",
3729                                    OP_DESC(PL_op));
3730                     else
3731                         Perl_croak(aTHX_ "Wide character");
3732                 }
3733             }
3734             SvCUR_set(sv, len);
3735         }
3736     }
3737     SvUTF8_off(sv);
3738     return TRUE;
3739 }
3740
3741 /*
3742 =for apidoc sv_utf8_encode
3743
3744 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3745 flag off so that it looks like octets again.
3746
3747 =cut
3748 */
3749
3750 void
3751 Perl_sv_utf8_encode(pTHX_ SV *const sv)
3752 {
3753     PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3754
3755     if (SvREADONLY(sv)) {
3756         sv_force_normal_flags(sv, 0);
3757     }
3758     (void) sv_utf8_upgrade(sv);
3759     SvUTF8_off(sv);
3760 }
3761
3762 /*
3763 =for apidoc sv_utf8_decode
3764
3765 If the PV of the SV is an octet sequence in Perl's extended UTF-8
3766 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3767 so that it looks like a character.  If the PV contains only single-byte
3768 characters, the C<SvUTF8> flag stays off.
3769 Scans PV for validity and returns FALSE if the PV is invalid UTF-8.
3770
3771 =cut
3772 */
3773
3774 bool
3775 Perl_sv_utf8_decode(pTHX_ SV *const sv)
3776 {
3777     PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3778
3779     if (SvPOKp(sv)) {
3780         const U8 *start, *c;
3781
3782         /* The octets may have got themselves encoded - get them back as
3783          * bytes
3784          */
3785         if (!sv_utf8_downgrade(sv, TRUE))
3786             return FALSE;
3787
3788         /* it is actually just a matter of turning the utf8 flag on, but
3789          * we want to make sure everything inside is valid utf8 first.
3790          */
3791         c = start = (const U8 *) SvPVX_const(sv);
3792         if (!is_utf8_string(c, SvCUR(sv)))
3793             return FALSE;
3794         if (! is_utf8_invariant_string(c, SvCUR(sv))) {
3795             SvUTF8_on(sv);
3796         }
3797         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3798             /* XXX Is this dead code?  XS_utf8_decode calls SvSETMAGIC
3799                    after this, clearing pos.  Does anything on CPAN
3800                    need this? */
3801             /* adjust pos to the start of a UTF8 char sequence */
3802             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3803             if (mg) {
3804                 I32 pos = mg->mg_len;
3805                 if (pos > 0) {
3806                     for (c = start + pos; c > start; c--) {
3807                         if (UTF8_IS_START(*c))
3808                             break;
3809                     }
3810                     mg->mg_len  = c - start;
3811                 }
3812             }
3813             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3814                 magic_setutf8(sv,mg); /* clear UTF8 cache */
3815         }
3816     }
3817     return TRUE;
3818 }
3819
3820 /*
3821 =for apidoc sv_setsv
3822
3823 Copies the contents of the source SV C<ssv> into the destination SV
3824 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3825 function if the source SV needs to be reused.  Does not handle 'set' magic on
3826 destination SV.  Calls 'get' magic on source SV.  Loosely speaking, it
3827 performs a copy-by-value, obliterating any previous content of the
3828 destination.
3829
3830 You probably want to use one of the assortment of wrappers, such as
3831 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3832 C<SvSetMagicSV_nosteal>.
3833
3834 =for apidoc sv_setsv_flags
3835
3836 Copies the contents of the source SV C<ssv> into the destination SV
3837 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3838 function if the source SV needs to be reused.  Does not handle 'set' magic.
3839 Loosely speaking, it performs a copy-by-value, obliterating any previous
3840 content of the destination.
3841 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3842 C<ssv> if appropriate, else not.  If the C<flags>
3843 parameter has the C<SV_NOSTEAL> bit set then the
3844 buffers of temps will not be stolen.  C<sv_setsv>
3845 and C<sv_setsv_nomg> are implemented in terms of this function.
3846
3847 You probably want to use one of the assortment of wrappers, such as
3848 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3849 C<SvSetMagicSV_nosteal>.
3850
3851 This is the primary function for copying scalars, and most other
3852 copy-ish functions and macros use this underneath.
3853
3854 =cut
3855 */
3856
3857 static void
3858 S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
3859 {
3860     I32 mro_changes = 0; /* 1 = method, 2 = isa, 3 = recursive isa */
3861     HV *old_stash = NULL;
3862
3863     PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3864
3865     if (dtype != SVt_PVGV && !isGV_with_GP(dstr)) {
3866         const char * const name = GvNAME(sstr);
3867         const STRLEN len = GvNAMELEN(sstr);
3868         {
3869             if (dtype >= SVt_PV) {
3870                 SvPV_free(dstr);
3871                 SvPV_set(dstr, 0);
3872                 SvLEN_set(dstr, 0);
3873                 SvCUR_set(dstr, 0);
3874             }
3875             SvUPGRADE(dstr, SVt_PVGV);
3876             (void)SvOK_off(dstr);
3877             isGV_with_GP_on(dstr);
3878         }
3879         GvSTASH(dstr) = GvSTASH(sstr);
3880         if (GvSTASH(dstr))
3881             Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
3882         gv_name_set(MUTABLE_GV(dstr), name, len,
3883                         GV_ADD | (GvNAMEUTF8(sstr) ? SVf_UTF8 : 0 ));
3884         SvFAKE_on(dstr);        /* can coerce to non-glob */
3885     }
3886
3887     if(GvGP(MUTABLE_GV(sstr))) {
3888         /* If source has method cache entry, clear it */
3889         if(GvCVGEN(sstr)) {
3890             SvREFCNT_dec(GvCV(sstr));
3891             GvCV_set(sstr, NULL);
3892             GvCVGEN(sstr) = 0;
3893         }
3894         /* If source has a real method, then a method is
3895            going to change */
3896         else if(
3897          GvCV((const GV *)sstr) && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3898         ) {
3899             mro_changes = 1;
3900         }
3901     }
3902
3903     /* If dest already had a real method, that's a change as well */
3904     if(
3905         !mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)
3906      && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3907     ) {
3908         mro_changes = 1;
3909     }
3910
3911     /* We don't need to check the name of the destination if it was not a
3912        glob to begin with. */
3913     if(dtype == SVt_PVGV) {
3914         const char * const name = GvNAME((const GV *)dstr);
3915         if(
3916             strEQ(name,"ISA")
3917          /* The stash may have been detached from the symbol table, so
3918             check its name. */
3919          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3920         )
3921             mro_changes = 2;
3922         else {
3923             const STRLEN len = GvNAMELEN(dstr);
3924             if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
3925              || (len == 1 && name[0] == ':')) {
3926                 mro_changes = 3;
3927
3928                 /* Set aside the old stash, so we can reset isa caches on
3929                    its subclasses. */
3930                 if((old_stash = GvHV(dstr)))
3931                     /* Make sure we do not lose it early. */
3932                     SvREFCNT_inc_simple_void_NN(
3933                      sv_2mortal((SV *)old_stash)
3934                     );
3935             }
3936         }
3937
3938         SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
3939     }
3940
3941     /* freeing dstr's GP might free sstr (e.g. *x = $x),
3942      * so temporarily protect it */
3943     ENTER;
3944     SAVEFREESV(SvREFCNT_inc_simple_NN(sstr));
3945     gp_free(MUTABLE_GV(dstr));
3946     GvINTRO_off(dstr);          /* one-shot flag */
3947     GvGP_set(dstr, gp_ref(GvGP(sstr)));
3948     LEAVE;
3949
3950     if (SvTAINTED(sstr))
3951         SvTAINT(dstr);
3952     if (GvIMPORTED(dstr) != GVf_IMPORTED
3953         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3954         {
3955             GvIMPORTED_on(dstr);
3956         }
3957     GvMULTI_on(dstr);
3958     if(mro_changes == 2) {
3959       if (GvAV((const GV *)sstr)) {
3960         MAGIC *mg;
3961         SV * const sref = (SV *)GvAV((const GV *)dstr);
3962         if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3963             if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3964                 AV * const ary = newAV();
3965                 av_push(ary, mg->mg_obj); /* takes the refcount */
3966                 mg->mg_obj = (SV *)ary;
3967             }
3968             av_push((AV *)mg->mg_obj, SvREFCNT_inc_simple_NN(dstr));
3969         }
3970         else sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
3971       }
3972       mro_isa_changed_in(GvSTASH(dstr));
3973     }
3974     else if(mro_changes == 3) {
3975         HV * const stash = GvHV(dstr);
3976         if(old_stash ? (HV *)HvENAME_get(old_stash) : stash)
3977             mro_package_moved(
3978                 stash, old_stash,
3979                 (GV *)dstr, 0
3980             );
3981     }
3982     else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
3983     if (GvIO(dstr) && dtype == SVt_PVGV) {
3984         DEBUG_o(Perl_deb(aTHX_
3985                         "glob_assign_glob clearing PL_stashcache\n"));
3986         /* It's a cache. It will rebuild itself quite happily.
3987            It's a lot of effort to work out exactly which key (or keys)
3988            might be invalidated by the creation of the this file handle.
3989          */
3990         hv_clear(PL_stashcache);
3991     }
3992     return;
3993 }
3994
3995 void
3996 Perl_gv_setref(pTHX_ SV *const dstr, SV *const sstr)
3997 {
3998     SV * const sref = SvRV(sstr);
3999     SV *dref;
4000     const int intro = GvINTRO(dstr);
4001     SV **location;
4002     U8 import_flag = 0;
4003     const U32 stype = SvTYPE(sref);
4004
4005     PERL_ARGS_ASSERT_GV_SETREF;
4006
4007     if (intro) {
4008         GvINTRO_off(dstr);      /* one-shot flag */
4009         GvLINE(dstr) = CopLINE(PL_curcop);
4010         GvEGV(dstr) = MUTABLE_GV(dstr);
4011     }
4012     GvMULTI_on(dstr);
4013     switch (stype) {
4014     case SVt_PVCV:
4015         location = (SV **) &(GvGP(dstr)->gp_cv); /* XXX bypassing GvCV_set */
4016         import_flag = GVf_IMPORTED_CV;
4017         goto common;
4018     case SVt_PVHV:
4019         location = (SV **) &GvHV(dstr);
4020         import_flag = GVf_IMPORTED_HV;
4021         goto common;
4022     case SVt_PVAV:
4023         location = (SV **) &GvAV(dstr);
4024         import_flag = GVf_IMPORTED_AV;
4025         goto common;
4026     case SVt_PVIO:
4027         location = (SV **) &GvIOp(dstr);
4028         goto common;
4029     case SVt_PVFM:
4030         location = (SV **) &GvFORM(dstr);
4031         goto common;
4032     default:
4033         location = &GvSV(dstr);
4034         import_flag = GVf_IMPORTED_SV;
4035     common:
4036         if (intro) {
4037             if (stype == SVt_PVCV) {
4038                 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
4039                 if (GvCVGEN(dstr)) {
4040                     SvREFCNT_dec(GvCV(dstr));
4041                     GvCV_set(dstr, NULL);
4042                     GvCVGEN(dstr) = 0; /* Switch off cacheness. */
4043                 }
4044             }
4045             /* SAVEt_GVSLOT takes more room on the savestack and has more
4046                overhead in leave_scope than SAVEt_GENERIC_SV.  But for CVs
4047                leave_scope needs access to the GV so it can reset method
4048                caches.  We must use SAVEt_GVSLOT whenever the type is
4049                SVt_PVCV, even if the stash is anonymous, as the stash may
4050                gain a name somehow before leave_scope. */
4051             if (stype == SVt_PVCV) {
4052                 /* There is no save_pushptrptrptr.  Creating it for this
4053                    one call site would be overkill.  So inline the ss add
4054                    routines here. */
4055                 dSS_ADD;
4056                 SS_ADD_PTR(dstr);
4057                 SS_ADD_PTR(location);
4058                 SS_ADD_PTR(SvREFCNT_inc(*location));
4059                 SS_ADD_UV(SAVEt_GVSLOT);
4060                 SS_ADD_END(4);
4061             }
4062             else SAVEGENERICSV(*location);
4063         }
4064         dref = *location;
4065         if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
4066             CV* const cv = MUTABLE_CV(*location);
4067             if (cv) {
4068                 if (!GvCVGEN((const GV *)dstr) &&
4069                     (CvROOT(cv) || CvXSUB(cv)) &&
4070                     /* redundant check that avoids creating the extra SV
4071                        most of the time: */
4072                     (CvCONST(cv) || ckWARN(WARN_REDEFINE)))
4073                     {
4074                         SV * const new_const_sv =
4075                             CvCONST((const CV *)sref)
4076                                  ? cv_const_sv((const CV *)sref)
4077                                  : NULL;
4078                         HV * const stash = GvSTASH((const GV *)dstr);
4079                         report_redefined_cv(
4080                            sv_2mortal(
4081                              stash
4082                                ? Perl_newSVpvf(aTHX_
4083                                     "%" HEKf "::%" HEKf,
4084                                     HEKfARG(HvNAME_HEK(stash)),
4085                                     HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr))))
4086                                : Perl_newSVpvf(aTHX_
4087                                     "%" HEKf,
4088                                     HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr))))
4089                            ),
4090                            cv,
4091                            CvCONST((const CV *)sref) ? &new_const_sv : NULL
4092                         );
4093                     }
4094                 if (!intro)
4095                     cv_ckproto_len_flags(cv, (const GV *)dstr,
4096                                    SvPOK(sref) ? CvPROTO(sref) : NULL,
4097                                    SvPOK(sref) ? CvPROTOLEN(sref) : 0,
4098                                    SvPOK(sref) ? SvUTF8(sref) : 0);
4099             }
4100             GvCVGEN(dstr) = 0; /* Switch off cacheness. */
4101             GvASSUMECV_on(dstr);
4102             if(GvSTASH(dstr)) { /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
4103                 if (intro && GvREFCNT(dstr) > 1) {
4104                     /* temporary remove extra savestack's ref */
4105                     --GvREFCNT(dstr);
4106                     gv_method_changed(dstr);
4107                     ++GvREFCNT(dstr);
4108                 }
4109                 else gv_method_changed(dstr);
4110             }
4111         }
4112         *location = SvREFCNT_inc_simple_NN(sref);
4113         if (import_flag && !(GvFLAGS(dstr) & import_flag)
4114             && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
4115             GvFLAGS(dstr) |= import_flag;
4116         }
4117
4118         if (stype == SVt_PVHV) {
4119             const char * const name = GvNAME((GV*)dstr);
4120             const STRLEN len = GvNAMELEN(dstr);
4121             if (
4122                 (
4123                    (len > 1 && name[len-2] == ':' && name[len-1] == ':')
4124                 || (len == 1 && name[0] == ':')
4125                 )
4126              && (!dref || HvENAME_get(dref))
4127             ) {
4128                 mro_package_moved(
4129                     (HV *)sref, (HV *)dref,
4130                     (GV *)dstr, 0
4131                 );
4132             }
4133         }
4134         else if (
4135             stype == SVt_PVAV && sref != dref
4136          && strEQ(GvNAME((GV*)dstr), "ISA")
4137          /* The stash may have been detached from the symbol table, so
4138             check its name before doing anything. */
4139          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
4140         ) {
4141             MAGIC *mg;
4142             MAGIC * const omg = dref && SvSMAGICAL(dref)
4143                                  ? mg_find(dref, PERL_MAGIC_isa)
4144                                  : NULL;
4145             if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
4146                 if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
4147                     AV * const ary = newAV();
4148                     av_push(ary, mg->mg_obj); /* takes the refcount */
4149                     mg->mg_obj = (SV *)ary;
4150                 }
4151                 if (omg) {
4152                     if (SvTYPE(omg->mg_obj) == SVt_PVAV) {
4153                         SV **svp = AvARRAY((AV *)omg->mg_obj);
4154                         I32 items = AvFILLp((AV *)omg->mg_obj) + 1;
4155                         while (items--)
4156                             av_push(
4157                              (AV *)mg->mg_obj,
4158                              SvREFCNT_inc_simple_NN(*svp++)
4159                             );
4160                     }
4161                     else
4162                         av_push(
4163                          (AV *)mg->mg_obj,
4164                          SvREFCNT_inc_simple_NN(omg->mg_obj)
4165                         );
4166                 }
4167                 else
4168                     av_push((AV *)mg->mg_obj,SvREFCNT_inc_simple_NN(dstr));
4169             }
4170             else
4171             {
4172                 SSize_t i;
4173                 sv_magic(
4174                  sref, omg ? omg->mg_obj : dstr, PERL_MAGIC_isa, NULL, 0
4175                 );
4176                 for (i = 0; i <= AvFILL(sref); ++i) {
4177                     SV **elem = av_fetch ((AV*)sref, i, 0);
4178                     if (elem) {
4179                         sv_magic(
4180                           *elem, sref, PERL_MAGIC_isaelem, NULL, i
4181                         );
4182                     }
4183                 }
4184                 mg = mg_find(sref, PERL_MAGIC_isa);
4185             }
4186             /* Since the *ISA assignment could have affected more than
4187                one stash, don't call mro_isa_changed_in directly, but let
4188                magic_clearisa do it for us, as it already has the logic for
4189                dealing with globs vs arrays of globs. */
4190             assert(mg);
4191             Perl_magic_clearisa(aTHX_ NULL, mg);
4192         }
4193         else if (stype == SVt_PVIO) {
4194             DEBUG_o(Perl_deb(aTHX_ "gv_setref clearing PL_stashcache\n"));
4195             /* It's a cache. It will rebuild itself quite happily.
4196                It's a lot of effort to work out exactly which key (or keys)
4197                might be invalidated by the creation of the this file handle.
4198             */
4199             hv_clear(PL_stashcache);
4200         }
4201         break;
4202     }
4203     if (!intro) SvREFCNT_dec(dref);
4204     if (SvTAINTED(sstr))
4205         SvTAINT(dstr);
4206     return;
4207 }
4208
4209
4210
4211
4212 #ifdef PERL_DEBUG_READONLY_COW
4213 # include <sys/mman.h>
4214
4215 # ifndef PERL_MEMORY_DEBUG_HEADER_SIZE
4216 #  define PERL_MEMORY_DEBUG_HEADER_SIZE 0
4217 # endif
4218
4219 void
4220 Perl_sv_buf_to_ro(pTHX_ SV *sv)
4221 {
4222     struct perl_memory_debug_header * const header =
4223         (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4224     const MEM_SIZE len = header->size;
4225     PERL_ARGS_ASSERT_SV_BUF_TO_RO;
4226 # ifdef PERL_TRACK_MEMPOOL
4227     if (!header->readonly) header->readonly = 1;
4228 # endif
4229     if (mprotect(header, len, PROT_READ))
4230         Perl_warn(aTHX_ "mprotect RW for COW string %p %lu failed with %d",
4231                          header, len, errno);
4232 }
4233
4234 static void
4235 S_sv_buf_to_rw(pTHX_ SV *sv)
4236 {
4237     struct perl_memory_debug_header * const header =
4238         (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4239     const MEM_SIZE len = header->size;
4240     PERL_ARGS_ASSERT_SV_BUF_TO_RW;
4241     if (mprotect(header, len, PROT_READ|PROT_WRITE))
4242         Perl_warn(aTHX_ "mprotect for COW string %p %lu failed with %d",
4243                          header, len, errno);
4244 # ifdef PERL_TRACK_MEMPOOL
4245     header->readonly = 0;
4246 # endif
4247 }
4248
4249 #else
4250 # define sv_buf_to_ro(sv)       NOOP
4251 # define sv_buf_to_rw(sv)       NOOP
4252 #endif
4253
4254 void
4255 Perl_sv_setsv_flags(pTHX_ SV *dstr, SV* sstr, const I32 flags)
4256 {
4257     U32 sflags;
4258     int dtype;
4259     svtype stype;
4260     unsigned int both_type;
4261
4262     PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
4263
4264     if (UNLIKELY( sstr == dstr ))
4265         return;
4266
4267     if (UNLIKELY( !sstr ))
4268         sstr = &PL_sv_undef;
4269
4270     stype = SvTYPE(sstr);
4271     dtype = SvTYPE(dstr);
4272     both_type = (stype | dtype);
4273
4274     /* with these values, we can check that both SVs are NULL/IV (and not
4275      * freed) just by testing the or'ed types */
4276     STATIC_ASSERT_STMT(SVt_NULL == 0);
4277     STATIC_ASSERT_STMT(SVt_IV   == 1);
4278     if (both_type <= 1) {
4279         /* both src and dst are UNDEF/IV/RV, so we can do a lot of
4280          * special-casing */
4281         U32 sflags;
4282         U32 new_dflags;
4283         SV *old_rv = NULL;
4284
4285         /* minimal subset of SV_CHECK_THINKFIRST_COW_DROP(dstr) */
4286         if (SvREADONLY(dstr))
4287             Perl_croak_no_modify();
4288         if (SvROK(dstr)) {
4289             if (SvWEAKREF(dstr))
4290                 sv_unref_flags(dstr, 0);
4291             else
4292                 old_rv = SvRV(dstr);
4293         }
4294
4295         assert(!SvGMAGICAL(sstr));
4296         assert(!SvGMAGICAL(dstr));
4297
4298         sflags = SvFLAGS(sstr);
4299         if (sflags & (SVf_IOK|SVf_ROK)) {
4300             SET_SVANY_FOR_BODYLESS_IV(dstr);
4301             new_dflags = SVt_IV;
4302
4303             if (sflags & SVf_ROK) {
4304                 dstr->sv_u.svu_rv = SvREFCNT_inc(SvRV(sstr));
4305                 new_dflags |= SVf_ROK;
4306             }
4307             else {
4308                 /* both src and dst are <= SVt_IV, so sv_any points to the
4309                  * head; so access the head directly
4310                  */
4311                 assert(    &(sstr->sv_u.svu_iv)
4312                         == &(((XPVIV*) SvANY(sstr))->xiv_iv));
4313                 assert(    &(dstr->sv_u.svu_iv)
4314                         == &(((XPVIV*) SvANY(dstr))->xiv_iv));
4315                 dstr->sv_u.svu_iv = sstr->sv_u.svu_iv;
4316                 new_dflags |= (SVf_IOK|SVp_IOK|(sflags & SVf_IVisUV));
4317             }
4318         }
4319         else {
4320             new_dflags = dtype; /* turn off everything except the type */
4321         }
4322         SvFLAGS(dstr) = new_dflags;
4323         SvREFCNT_dec(old_rv);
4324
4325         return;
4326     }
4327
4328     if (UNLIKELY(both_type == SVTYPEMASK)) {
4329         if (SvIS_FREED(dstr)) {
4330             Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
4331                        " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
4332         }
4333         if (SvIS_FREED(sstr)) {
4334             Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
4335                        (void*)sstr, (void*)dstr);
4336         }
4337     }
4338
4339
4340
4341     SV_CHECK_THINKFIRST_COW_DROP(dstr);
4342     dtype = SvTYPE(dstr); /* THINKFIRST may have changed type */
4343
4344     /* There's a lot of redundancy below but we're going for speed here */
4345
4346     switch (stype) {
4347     case SVt_NULL:
4348       undef_sstr:
4349         if (LIKELY( dtype != SVt_PVGV && dtype != SVt_PVLV )) {
4350             (void)SvOK_off(dstr);
4351             return;
4352         }
4353         break;
4354     case SVt_IV:
4355         if (SvIOK(sstr)) {
4356             switch (dtype) {
4357             case SVt_NULL:
4358                 /* For performance, we inline promoting to type SVt_IV. */
4359                 /* We're starting from SVt_NULL, so provided that define is
4360                  * actual 0, we don't have to unset any SV type flags
4361                  * to promote to SVt_IV. */
4362                 STATIC_ASSERT_STMT(SVt_NULL == 0);
4363                 SET_SVANY_FOR_BODYLESS_IV(dstr);
4364                 SvFLAGS(dstr) |= SVt_IV;
4365                 break;
4366             case SVt_NV:
4367             case SVt_PV:
4368                 sv_upgrade(dstr, SVt_PVIV);
4369                 break;
4370             case SVt_PVGV:
4371             case SVt_PVLV:
4372                 goto end_of_first_switch;
4373             }
4374             (void)SvIOK_only(dstr);
4375             SvIV_set(dstr,  SvIVX(sstr));
4376             if (SvIsUV(sstr))
4377                 SvIsUV_on(dstr);
4378             /* SvTAINTED can only be true if the SV has taint magic, which in
4379                turn means that the SV type is PVMG (or greater). This is the
4380                case statement for SVt_IV, so this cannot be true (whatever gcov
4381                may say).  */
4382             assert(!SvTAINTED(sstr));
4383             return;
4384         }
4385         if (!SvROK(sstr))
4386             goto undef_sstr;
4387         if (dtype < SVt_PV && dtype != SVt_IV)
4388             sv_upgrade(dstr, SVt_IV);
4389         break;
4390
4391     case SVt_NV:
4392         if (LIKELY( SvNOK(sstr) )) {
4393             switch (dtype) {
4394             case SVt_NULL:
4395             case SVt_IV:
4396                 sv_upgrade(dstr, SVt_NV);
4397                 break;
4398             case SVt_PV:
4399             case SVt_PVIV:
4400                 sv_upgrade(dstr, SVt_PVNV);
4401                 break;
4402             case SVt_PVGV:
4403             case SVt_PVLV:
4404                 goto end_of_first_switch;
4405             }
4406             SvNV_set(dstr, SvNVX(sstr));
4407             (void)SvNOK_only(dstr);
4408             /* SvTAINTED can only be true if the SV has taint magic, which in
4409                turn means that the SV type is PVMG (or greater). This is the
4410                case statement for SVt_NV, so this cannot be true (whatever gcov
4411                may say).  */
4412             assert(!SvTAINTED(sstr));
4413             return;
4414         }
4415         goto undef_sstr;
4416
4417     case SVt_PV:
4418         if (dtype < SVt_PV)
4419             sv_upgrade(dstr, SVt_PV);
4420         break;
4421     case SVt_PVIV:
4422         if (dtype < SVt_PVIV)
4423             sv_upgrade(dstr, SVt_PVIV);
4424         break;
4425     case SVt_PVNV:
4426         if (dtype < SVt_PVNV)
4427             sv_upgrade(dstr, SVt_PVNV);
4428         break;
4429     default:
4430         {
4431         const char * const type = sv_reftype(sstr,0);
4432         if (PL_op)
4433             /* diag_listed_as: Bizarre copy of %s */
4434             Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
4435         else
4436             Perl_croak(aTHX_ "Bizarre copy of %s", type);
4437         }
4438         NOT_REACHED; /* NOTREACHED */
4439
4440     case SVt_REGEXP:
4441       upgregexp:
4442         if (dtype < SVt_REGEXP)
4443         {
4444             if (dtype >= SVt_PV) {
4445                 SvPV_free(dstr);
4446                 SvPV_set(dstr, 0);
4447                 SvLEN_set(dstr, 0);
4448                 SvCUR_set(dstr, 0);
4449             }
4450             sv_upgrade(dstr, SVt_REGEXP);
4451         }
4452         break;
4453
4454         case SVt_INVLIST:
4455     case SVt_PVLV:
4456     case SVt_PVGV:
4457     case SVt_PVMG:
4458         if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
4459             mg_get(sstr);
4460             if (SvTYPE(sstr) != stype)
4461                 stype = SvTYPE(sstr);
4462         }
4463         if (isGV_with_GP(sstr) && dtype <= SVt_PVLV) {
4464                     glob_assign_glob(dstr, sstr, dtype);
4465                     return;
4466         }
4467         if (stype == SVt_PVLV)
4468         {
4469             if (isREGEXP(sstr)) goto upgregexp;
4470             SvUPGRADE(dstr, SVt_PVNV);
4471         }
4472         else
4473             SvUPGRADE(dstr, (svtype)stype);
4474     }
4475  end_of_first_switch:
4476
4477     /* dstr may have been upgraded.  */
4478     dtype = SvTYPE(dstr);
4479     sflags = SvFLAGS(sstr);
4480
4481     if (UNLIKELY( dtype == SVt_PVCV )) {
4482         /* Assigning to a subroutine sets the prototype.  */
4483         if (SvOK(sstr)) {
4484             STRLEN len;
4485             const char *const ptr = SvPV_const(sstr, len);
4486
4487             SvGROW(dstr, len + 1);
4488             Copy(ptr, SvPVX(dstr), len + 1, char);
4489             SvCUR_set(dstr, len);
4490             SvPOK_only(dstr);
4491             SvFLAGS(dstr) |= sflags & SVf_UTF8;
4492             CvAUTOLOAD_off(dstr);
4493         } else {
4494             SvOK_off(dstr);
4495         }
4496     }
4497     else if (UNLIKELY(dtype == SVt_PVAV || dtype == SVt_PVHV
4498              || dtype == SVt_PVFM))
4499     {
4500         const char * const type = sv_reftype(dstr,0);
4501         if (PL_op)
4502             /* diag_listed_as: Cannot copy to %s */
4503             Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
4504         else
4505             Perl_croak(aTHX_ "Cannot copy to %s", type);
4506     } else if (sflags & SVf_ROK) {
4507         if (isGV_with_GP(dstr)
4508             && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
4509             sstr = SvRV(sstr);
4510             if (sstr == dstr) {
4511                 if (GvIMPORTED(dstr) != GVf_IMPORTED
4512                     && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4513                 {
4514                     GvIMPORTED_on(dstr);
4515                 }
4516                 GvMULTI_on(dstr);
4517                 return;
4518             }
4519             glob_assign_glob(dstr, sstr, dtype);
4520             return;
4521         }
4522
4523         if (dtype >= SVt_PV) {
4524             if (isGV_with_GP(dstr)) {
4525                 gv_setref(dstr, sstr);
4526                 return;
4527             }
4528             if (SvPVX_const(dstr)) {
4529                 SvPV_free(dstr);
4530                 SvLEN_set(dstr, 0);
4531                 SvCUR_set(dstr, 0);
4532             }
4533         }
4534         (void)SvOK_off(dstr);
4535         SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4536         SvFLAGS(dstr) |= sflags & SVf_ROK;
4537         assert(!(sflags & SVp_NOK));
4538         assert(!(sflags & SVp_IOK));
4539         assert(!(sflags & SVf_NOK));
4540         assert(!(sflags & SVf_IOK));
4541     }
4542     else if (isGV_with_GP(dstr)) {
4543         if (!(sflags & SVf_OK)) {
4544             Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4545                            "Undefined value assigned to typeglob");
4546         }
4547         else {
4548             GV *gv = gv_fetchsv_nomg(sstr, GV_ADD, SVt_PVGV);
4549             if (dstr != (const SV *)gv) {
4550                 const char * const name = GvNAME((const GV *)dstr);
4551                 const STRLEN len = GvNAMELEN(dstr);
4552                 HV *old_stash = NULL;
4553                 bool reset_isa = FALSE;
4554                 if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
4555                  || (len == 1 && name[0] == ':')) {
4556                     /* Set aside the old stash, so we can reset isa caches
4557                        on its subclasses. */
4558                     if((old_stash = GvHV(dstr))) {
4559                         /* Make sure we do not lose it early. */
4560                         SvREFCNT_inc_simple_void_NN(
4561                          sv_2mortal((SV *)old_stash)
4562                         );
4563                     }
4564                     reset_isa = TRUE;
4565                 }
4566
4567                 if (GvGP(dstr)) {
4568                     SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
4569                     gp_free(MUTABLE_GV(dstr));
4570                 }
4571                 GvGP_set(dstr, gp_ref(GvGP(gv)));
4572
4573                 if (reset_isa) {
4574                     HV * const stash = GvHV(dstr);
4575                     if(
4576                         old_stash ? (HV *)HvENAME_get(old_stash) : stash
4577                     )
4578                         mro_package_moved(
4579                          stash, old_stash,
4580                          (GV *)dstr, 0
4581                         );
4582                 }
4583             }
4584         }
4585     }
4586     else if ((dtype == SVt_REGEXP || dtype == SVt_PVLV)
4587           && (stype == SVt_REGEXP || isREGEXP(sstr))) {
4588         reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4589     }
4590     else if (sflags & SVp_POK) {
4591         const STRLEN cur = SvCUR(sstr);
4592         const STRLEN len = SvLEN(sstr);
4593
4594         /*
4595          * We have three basic ways to copy the string:
4596          *
4597          *  1. Swipe
4598          *  2. Copy-on-write
4599          *  3. Actual copy
4600          * 
4601          * Which we choose is based on various factors.  The following
4602          * things are listed in order of speed, fastest to slowest:
4603          *  - Swipe
4604          *  - Copying a short string
4605          *  - Copy-on-write bookkeeping
4606          *  - malloc
4607          *  - Copying a long string
4608          * 
4609          * We swipe the string (steal the string buffer) if the SV on the
4610          * rhs is about to be freed anyway (TEMP and refcnt==1).  This is a
4611          * big win on long strings.  It should be a win on short strings if
4612          * SvPVX_const(dstr) has to be allocated.  If not, it should not 
4613          * slow things down, as SvPVX_const(sstr) would have been freed
4614          * soon anyway.
4615          * 
4616          * We also steal the buffer from a PADTMP (operator target) if it
4617          * is â€˜long enough’.  For short strings, a swipe does not help
4618          * here, as it causes more malloc calls the next time the target
4619          * is used.  Benchmarks show that even if SvPVX_const(dstr) has to
4620          * be allocated it is still not worth swiping PADTMPs for short
4621          * strings, as the savings here are small.
4622          * 
4623          * If swiping is not an option, then we see whether it is
4624          * worth using copy-on-write.  If the lhs already has a buf-
4625          * fer big enough and the string is short, we skip it and fall back
4626          * to method 3, since memcpy is faster for short strings than the
4627          * later bookkeeping overhead that copy-on-write entails.
4628
4629          * If the rhs is not a copy-on-write string yet, then we also
4630          * consider whether the buffer is too large relative to the string
4631          * it holds.  Some operations such as readline allocate a large
4632          * buffer in the expectation of reusing it.  But turning such into
4633          * a COW buffer is counter-productive because it increases memory
4634          * usage by making readline allocate a new large buffer the sec-
4635          * ond time round.  So, if the buffer is too large, again, we use
4636          * method 3 (copy).
4637          * 
4638          * Finally, if there is no buffer on the left, or the buffer is too 
4639          * small, then we use copy-on-write and make both SVs share the
4640          * string buffer.
4641          *
4642          */
4643
4644         /* Whichever path we take through the next code, we want this true,
4645            and doing it now facilitates the COW check.  */
4646         (void)SvPOK_only(dstr);
4647
4648         if (
4649                  (              /* Either ... */
4650                                 /* slated for free anyway (and not COW)? */
4651                     (sflags & (SVs_TEMP|SVf_IsCOW)) == SVs_TEMP
4652                                 /* or a swipable TARG */
4653                  || ((sflags &
4654                            (SVs_PADTMP|SVf_READONLY|SVf_PROTECT|SVf_IsCOW))
4655                        == SVs_PADTMP
4656                                 /* whose buffer is worth stealing */
4657                      && CHECK_COWBUF_THRESHOLD(cur,len)
4658                     )
4659                  ) &&
4660                  !(sflags & SVf_OOK) &&   /* and not involved in OOK hack? */
4661                  (!(flags & SV_NOSTEAL)) &&
4662                                         /* and we're allowed to steal temps */
4663                  SvREFCNT(sstr) == 1 &&   /* and no other references to it? */
4664                  len)             /* and really is a string */
4665         {       /* Passes the swipe test.  */
4666             if (SvPVX_const(dstr))      /* we know that dtype >= SVt_PV */
4667                 SvPV_free(dstr);
4668             SvPV_set(dstr, SvPVX_mutable(sstr));
4669             SvLEN_set(dstr, SvLEN(sstr));
4670             SvCUR_set(dstr, SvCUR(sstr));
4671
4672             SvTEMP_off(dstr);
4673             (void)SvOK_off(sstr);       /* NOTE: nukes most SvFLAGS on sstr */
4674             SvPV_set(sstr, NULL);
4675             SvLEN_set(sstr, 0);
4676             SvCUR_set(sstr, 0);
4677             SvTEMP_off(sstr);
4678         }
4679         else if (flags & SV_COW_SHARED_HASH_KEYS
4680               &&
4681 #ifdef PERL_COPY_ON_WRITE
4682                  (sflags & SVf_IsCOW
4683                    ? (!len ||
4684                        (  (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
4685                           /* If this is a regular (non-hek) COW, only so
4686                              many COW "copies" are possible. */
4687                        && CowREFCNT(sstr) != SV_COW_REFCNT_MAX  ))
4688                    : (  (sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4689                      && !(SvFLAGS(dstr) & SVf_BREAK)
4690                      && CHECK_COW_THRESHOLD(cur,len) && cur+1 < len
4691                      && (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
4692                     ))
4693 #else
4694                  sflags & SVf_IsCOW
4695               && !(SvFLAGS(dstr) & SVf_BREAK)
4696 #endif
4697             ) {
4698             /* Either it's a shared hash key, or it's suitable for
4699                copy-on-write.  */
4700             if (DEBUG_C_TEST) {
4701                 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4702                 sv_dump(sstr);
4703                 sv_dump(dstr);
4704             }
4705 #ifdef PERL_ANY_COW
4706             if (!(sflags & SVf_IsCOW)) {
4707                     SvIsCOW_on(sstr);
4708                     CowREFCNT(sstr) = 0;
4709             }
4710 #endif
4711             if (SvPVX_const(dstr)) {    /* we know that dtype >= SVt_PV */
4712                 SvPV_free(dstr);
4713             }
4714
4715 #ifdef PERL_ANY_COW
4716             if (len) {
4717                     if (sflags & SVf_IsCOW) {
4718                         sv_buf_to_rw(sstr);
4719                     }
4720                     CowREFCNT(sstr)++;
4721                     SvPV_set(dstr, SvPVX_mutable(sstr));
4722                     sv_buf_to_ro(sstr);
4723             } else
4724 #endif
4725             {
4726                     /* SvIsCOW_shared_hash */
4727                     DEBUG_C(PerlIO_printf(Perl_debug_log,
4728                                           "Copy on write: Sharing hash\n"));
4729
4730                     assert (SvTYPE(dstr) >= SVt_PV);
4731                     SvPV_set(dstr,
4732                              HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
4733             }
4734             SvLEN_set(dstr, len);
4735             SvCUR_set(dstr, cur);
4736             SvIsCOW_on(dstr);
4737         } else {
4738             /* Failed the swipe test, and we cannot do copy-on-write either.
4739                Have to copy the string.  */
4740             SvGROW(dstr, cur + 1);      /* inlined from sv_setpvn */
4741             Move(SvPVX_const(sstr),SvPVX(dstr),cur,char);
4742             SvCUR_set(dstr, cur);
4743             *SvEND(dstr) = '\0';
4744         }
4745         if (sflags & SVp_NOK) {
4746             SvNV_set(dstr, SvNVX(sstr));
4747         }
4748         if (sflags & SVp_IOK) {
4749             SvIV_set(dstr, SvIVX(sstr));
4750             if (sflags & SVf_IVisUV)
4751                 SvIsUV_on(dstr);
4752         }
4753         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4754         {
4755             const MAGIC * const smg = SvVSTRING_mg(sstr);
4756             if (smg) {
4757                 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4758                          smg->mg_ptr, smg->mg_len);
4759                 SvRMAGICAL_on(dstr);
4760             }
4761         }
4762     }
4763     else if (sflags & (SVp_IOK|SVp_NOK)) {
4764         (void)SvOK_off(dstr);
4765         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
4766         if (sflags & SVp_IOK) {
4767             /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
4768             SvIV_set(dstr, SvIVX(sstr));
4769         }
4770         if (sflags & SVp_NOK) {
4771             SvNV_set(dstr, SvNVX(sstr));
4772         }
4773     }
4774     else {
4775         if (isGV_with_GP(sstr)) {
4776             gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
4777         }
4778         else
4779             (void)SvOK_off(dstr);
4780     }
4781     if (SvTAINTED(sstr))
4782         SvTAINT(dstr);
4783 }
4784
4785
4786 /*
4787 =for apidoc sv_set_undef
4788
4789 Equivalent to C<sv_setsv(sv, &PL_sv_undef)>, but more efficient.
4790 Doesn't handle set magic.
4791
4792 The perl equivalent is C<$sv = undef;>. Note that it doesn't free any string
4793 buffer, unlike C<undef $sv>.
4794
4795 Introduced in perl 5.26.0.
4796
4797 =cut
4798 */
4799
4800 void
4801 Perl_sv_set_undef(pTHX_ SV *sv)
4802 {
4803     U32 type = SvTYPE(sv);
4804
4805     PERL_ARGS_ASSERT_SV_SET_UNDEF;
4806
4807     /* shortcut, NULL, IV, RV */
4808
4809     if (type <= SVt_IV) {
4810         assert(!SvGMAGICAL(sv));
4811         if (SvREADONLY(sv)) {
4812             /* does undeffing PL_sv_undef count as modifying a read-only
4813              * variable? Some XS code does this */
4814             if (sv == &PL_sv_undef)
4815                 return;
4816             Perl_croak_no_modify();
4817         }
4818
4819         if (SvROK(sv)) {
4820             if (SvWEAKREF(sv))
4821                 sv_unref_flags(sv, 0);
4822             else {
4823                 SV *rv = SvRV(sv);
4824                 SvFLAGS(sv) = type; /* quickly turn off all flags */
4825                 SvREFCNT_dec_NN(rv);
4826                 return;
4827             }
4828         }
4829         SvFLAGS(sv) = type; /* quickly turn off all flags */
4830         return;
4831     }
4832
4833     if (SvIS_FREED(sv))
4834         Perl_croak(aTHX_ "panic: attempt to undefine a freed scalar %p",
4835             (void *)sv);
4836
4837     SV_CHECK_THINKFIRST_COW_DROP(sv);
4838
4839     if (isGV_with_GP(sv))
4840         Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4841                        "Undefined value assigned to typeglob");
4842     else
4843         SvOK_off(sv);
4844 }
4845
4846
4847
4848 /*
4849 =for apidoc sv_setsv_mg
4850
4851 Like C<sv_setsv>, but also handles 'set' magic.
4852
4853 =cut
4854 */
4855
4856 void
4857 Perl_sv_setsv_mg(pTHX_ SV *const dstr, SV *const sstr)
4858 {
4859     PERL_ARGS_ASSERT_SV_SETSV_MG;
4860
4861     sv_setsv(dstr,sstr);
4862     SvSETMAGIC(dstr);
4863 }
4864
4865 #ifdef PERL_ANY_COW
4866 #  define SVt_COW SVt_PV
4867 SV *
4868 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4869 {
4870     STRLEN cur = SvCUR(sstr);
4871     STRLEN len = SvLEN(sstr);
4872     char *new_pv;
4873 #if defined(PERL_DEBUG_READONLY_COW) && defined(PERL_COPY_ON_WRITE)
4874     const bool already = cBOOL(SvIsCOW(sstr));
4875 #endif
4876
4877     PERL_ARGS_ASSERT_SV_SETSV_COW;
4878
4879     if (DEBUG_C_TEST) {
4880         PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4881                       (void*)sstr, (void*)dstr);
4882         sv_dump(sstr);
4883         if (dstr)
4884                     sv_dump(dstr);
4885     }
4886
4887     if (dstr) {
4888         if (SvTHINKFIRST(dstr))
4889             sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4890         else if (SvPVX_const(dstr))
4891             Safefree(SvPVX_mutable(dstr));
4892     }
4893     else
4894         new_SV(dstr);
4895     SvUPGRADE(dstr, SVt_COW);
4896
4897     assert (SvPOK(sstr));
4898     assert (SvPOKp(sstr));
4899
4900     if (SvIsCOW(sstr)) {
4901
4902         if (SvLEN(sstr) == 0) {
4903             /* source is a COW shared hash key.  */
4904             DEBUG_C(PerlIO_printf(Perl_debug_log,
4905                                   "Fast copy on write: Sharing hash\n"));
4906             new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
4907             goto common_exit;
4908         }
4909         assert(SvCUR(sstr)+1 < SvLEN(sstr));
4910         assert(CowREFCNT(sstr) < SV_COW_REFCNT_MAX);
4911     } else {
4912         assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4913         SvUPGRADE(sstr, SVt_COW);
4914         SvIsCOW_on(sstr);
4915         DEBUG_C(PerlIO_printf(Perl_debug_log,
4916                               "Fast copy on write: Converting sstr to COW\n"));
4917         CowREFCNT(sstr) = 0;    
4918     }
4919 #  ifdef PERL_DEBUG_READONLY_COW
4920     if (already) sv_buf_to_rw(sstr);
4921 #  endif
4922     CowREFCNT(sstr)++;  
4923     new_pv = SvPVX_mutable(sstr);
4924     sv_buf_to_ro(sstr);
4925
4926   common_exit:
4927     SvPV_set(dstr, new_pv);
4928     SvFLAGS(dstr) = (SVt_COW|SVf_POK|SVp_POK|SVf_IsCOW);
4929     if (SvUTF8(sstr))
4930         SvUTF8_on(dstr);
4931     SvLEN_set(dstr, len);
4932     SvCUR_set(dstr, cur);
4933     if (DEBUG_C_TEST) {
4934         sv_dump(dstr);
4935     }
4936     return dstr;
4937 }
4938 #endif
4939
4940 /*
4941 =for apidoc sv_setpv_bufsize
4942
4943 Sets the SV to be a string of cur bytes length, with at least
4944 len bytes available. Ensures that there is a null byte at SvEND.
4945 Returns a char * pointer to the SvPV buffer.
4946
4947 =cut
4948 */
4949
4950 char *
4951 Perl_sv_setpv_bufsize(pTHX_ SV *const sv, const STRLEN cur, const STRLEN len)
4952 {
4953     char *pv;
4954
4955     PERL_ARGS_ASSERT_SV_SETPV_BUFSIZE;
4956
4957     SV_CHECK_THINKFIRST_COW_DROP(sv);
4958     SvUPGRADE(sv, SVt_PV);
4959     pv = SvGROW(sv, len + 1);
4960     SvCUR_set(sv, cur);
4961     *(SvEND(sv))= '\0';
4962     (void)SvPOK_only_UTF8(sv);                /* validate pointer */
4963
4964     SvTAINT(sv);
4965     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4966     return pv;
4967 }
4968
4969 /*
4970 =for apidoc sv_setpvn
4971
4972 Copies a string (possibly containing embedded C<NUL> characters) into an SV.
4973 The C<len> parameter indicates the number of
4974 bytes to be copied.  If the C<ptr> argument is NULL the SV will become
4975 undefined.  Does not handle 'set' magic.  See C<L</sv_setpvn_mg>>.
4976
4977 =cut
4978 */
4979
4980 void
4981 Perl_sv_setpvn(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4982 {
4983     char *dptr;
4984
4985     PERL_ARGS_ASSERT_SV_SETPVN;
4986
4987     SV_CHECK_THINKFIRST_COW_DROP(sv);
4988     if (!ptr) {
4989         (void)SvOK_off(sv);
4990         return;
4991     }
4992     else {
4993         /* len is STRLEN which is unsigned, need to copy to signed */
4994         const IV iv = len;
4995         if (iv < 0)
4996             Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen %"
4997                        IVdf, iv);
4998     }
4999     SvUPGRADE(sv, SVt_PV);
5000
5001     dptr = SvGROW(sv, len + 1);
5002     Move(ptr,dptr,len,char);
5003     dptr[len] = '\0';
5004     SvCUR_set(sv, len);
5005     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5006     SvTAINT(sv);
5007     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
5008 }
5009
5010 /*
5011 =for apidoc sv_setpvn_mg
5012
5013 Like C<sv_setpvn>, but also handles 'set' magic.
5014
5015 =cut
5016 */
5017
5018 void
5019 Perl_sv_setpvn_mg(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
5020 {
5021     PERL_ARGS_ASSERT_SV_SETPVN_MG;
5022
5023     sv_setpvn(sv,ptr,len);
5024     SvSETMAGIC(sv);
5025 }
5026
5027 /*
5028 =for apidoc sv_setpv
5029
5030 Copies a string into an SV.  The string must be terminated with a C<NUL>
5031 character, and not contain embeded C<NUL>'s.
5032 Does not handle 'set' magic.  See C<L</sv_setpv_mg>>.
5033
5034 =cut
5035 */
5036
5037 void
5038 Perl_sv_setpv(pTHX_ SV *const sv, const char *const ptr)
5039 {
5040     STRLEN len;
5041
5042     PERL_ARGS_ASSERT_SV_SETPV;
5043
5044     SV_CHECK_THINKFIRST_COW_DROP(sv);
5045     if (!ptr) {
5046         (void)SvOK_off(sv);
5047         return;
5048     }
5049     len = strlen(ptr);
5050     SvUPGRADE(sv, SVt_PV);
5051
5052     SvGROW(sv, len + 1);
5053     Move(ptr,SvPVX(sv),len+1,char);
5054     SvCUR_set(sv, len);
5055     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5056     SvTAINT(sv);
5057     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
5058 }
5059
5060 /*
5061 =for apidoc sv_setpv_mg
5062
5063 Like C<sv_setpv>, but also handles 'set' magic.
5064
5065 =cut
5066 */
5067
5068 void
5069 Perl_sv_setpv_mg(pTHX_ SV *const sv, const char *const ptr)
5070 {
5071     PERL_ARGS_ASSERT_SV_SETPV_MG;
5072
5073     sv_setpv(sv,ptr);
5074     SvSETMAGIC(sv);
5075 }
5076
5077 void
5078 Perl_sv_sethek(pTHX_ SV *const sv, const HEK *const hek)
5079 {
5080     PERL_ARGS_ASSERT_SV_SETHEK;
5081
5082     if (!hek) {
5083         return;
5084     }
5085
5086     if (HEK_LEN(hek) == HEf_SVKEY) {
5087         sv_setsv(sv, *(SV**)HEK_KEY(hek));
5088         return;
5089     } else {
5090         const int flags = HEK_FLAGS(hek);
5091         if (flags & HVhek_WASUTF8) {
5092             STRLEN utf8_len = HEK_LEN(hek);
5093             char *as_utf8 = (char *)bytes_to_utf8((U8*)HEK_KEY(hek), &utf8_len);
5094             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
5095             SvUTF8_on(sv);
5096             return;
5097         } else if (flags & HVhek_UNSHARED) {
5098             sv_setpvn(sv, HEK_KEY(hek), HEK_LEN(hek));
5099             if (HEK_UTF8(hek))
5100                 SvUTF8_on(sv);
5101             else SvUTF8_off(sv);
5102             return;
5103         }
5104         {
5105             SV_CHECK_THINKFIRST_COW_DROP(sv);
5106             SvUPGRADE(sv, SVt_PV);
5107             SvPV_free(sv);
5108             SvPV_set(sv,(char *)HEK_KEY(share_hek_hek(hek)));
5109             SvCUR_set(sv, HEK_LEN(hek));
5110             SvLEN_set(sv, 0);
5111             SvIsCOW_on(sv);
5112             SvPOK_on(sv);
5113             if (HEK_UTF8(hek))
5114                 SvUTF8_on(sv);
5115             else SvUTF8_off(sv);
5116             return;
5117         }
5118     }
5119 }
5120
5121
5122 /*
5123 =for apidoc sv_usepvn_flags
5124
5125 Tells an SV to use C<ptr> to find its string value.  Normally the
5126 string is stored inside the SV, but sv_usepvn allows the SV to use an
5127 outside string.  C<ptr> should point to memory that was allocated
5128 by L<C<Newx>|perlclib/Memory Management and String Handling>.  It must be
5129 the start of a C<Newx>-ed block of memory, and not a pointer to the
5130 middle of it (beware of L<C<OOK>|perlguts/Offsets> and copy-on-write),
5131 and not be from a non-C<Newx> memory allocator like C<malloc>.  The
5132 string length, C<len>, must be supplied.  By default this function
5133 will C<Renew> (i.e. realloc, move) the memory pointed to by C<ptr>,
5134 so that pointer should not be freed or used by the programmer after
5135 giving it to C<sv_usepvn>, and neither should any pointers from "behind"
5136 that pointer (e.g. ptr + 1) be used.
5137
5138 If S<C<flags & SV_SMAGIC>> is true, will call C<SvSETMAGIC>.  If
5139 S<C<flags> & SV_HAS_TRAILING_NUL>> is true, then C<ptr[len]> must be C<NUL>,
5140 and the realloc
5141 will be skipped (i.e. the buffer is actually at least 1 byte longer than
5142 C<len>, and already meets the requirements for storing in C<SvPVX>).
5143
5144 =cut
5145 */
5146
5147 void
5148 Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
5149 {
5150     STRLEN allocate;
5151
5152     PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
5153
5154     SV_CHECK_THINKFIRST_COW_DROP(sv);
5155     SvUPGRADE(sv, SVt_PV);
5156     if (!ptr) {
5157         (void)SvOK_off(sv);
5158         if (flags & SV_SMAGIC)
5159             SvSETMAGIC(sv);
5160         return;
5161     }
5162     if (SvPVX_const(sv))
5163         SvPV_free(sv);
5164
5165 #ifdef DEBUGGING
5166     if (flags & SV_HAS_TRAILING_NUL)
5167         assert(ptr[len] == '\0');
5168 #endif
5169
5170     allocate = (flags & SV_HAS_TRAILING_NUL)
5171         ? len + 1 :
5172 #ifdef Perl_safesysmalloc_size
5173         len + 1;
5174 #else 
5175         PERL_STRLEN_ROUNDUP(len + 1);
5176 #endif
5177     if (flags & SV_HAS_TRAILING_NUL) {
5178         /* It's long enough - do nothing.
5179            Specifically Perl_newCONSTSUB is relying on this.  */
5180     } else {
5181 #ifdef DEBUGGING
5182         /* Force a move to shake out bugs in callers.  */
5183         char *new_ptr = (char*)safemalloc(allocate);
5184         Copy(ptr, new_ptr, len, char);
5185         PoisonFree(ptr,len,char);
5186         Safefree(ptr);
5187         ptr = new_ptr;
5188 #else
5189         ptr = (char*) saferealloc (ptr, allocate);
5190 #endif
5191     }
5192 #ifdef Perl_safesysmalloc_size
5193     SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
5194 #else
5195     SvLEN_set(sv, allocate);
5196 #endif
5197     SvCUR_set(sv, len);
5198     SvPV_set(sv, ptr);
5199     if (!(flags & SV_HAS_TRAILING_NUL)) {
5200         ptr[len] = '\0';
5201     }
5202     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5203     SvTAINT(sv);
5204     if (flags & SV_SMAGIC)
5205         SvSETMAGIC(sv);
5206 }
5207
5208 /*
5209 =for apidoc sv_force_normal_flags
5210
5211 Undo various types of fakery on an SV, where fakery means
5212 "more than" a string: if the PV is a shared string, make
5213 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
5214 an C<xpvmg>; if we're a copy-on-write scalar, this is the on-write time when
5215 we do the copy, and is also used locally; if this is a
5216 vstring, drop the vstring magic.  If C<SV_COW_DROP_PV> is set
5217 then a copy-on-write scalar drops its PV buffer (if any) and becomes
5218 C<SvPOK_off> rather than making a copy.  (Used where this
5219 scalar is about to be set to some other value.)  In addition,
5220 the C<flags> parameter gets passed to C<sv_unref_flags()>
5221 when unreffing.  C<sv_force_normal> calls this function
5222 with flags set to 0.
5223
5224 This function is expected to be used to signal to perl that this SV is
5225 about to be written to, and any extra book-keeping needs to be taken care
5226 of.  Hence, it croaks on read-only values.
5227
5228 =cut
5229 */
5230
5231 static void
5232 S_sv_uncow(pTHX_ SV * const sv, const U32 flags)
5233 {
5234     assert(SvIsCOW(sv));
5235     {
5236 #ifdef PERL_ANY_COW
5237         const char * const pvx = SvPVX_const(sv);
5238         const STRLEN len = SvLEN(sv);
5239         const STRLEN cur = SvCUR(sv);
5240
5241         if (DEBUG_C_TEST) {
5242                 PerlIO_printf(Perl_debug_log,
5243                               "Copy on write: Force normal %ld\n",
5244                               (long) flags);
5245                 sv_dump(sv);
5246         }
5247         SvIsCOW_off(sv);
5248 # ifdef PERL_COPY_ON_WRITE
5249         if (len) {
5250             /* Must do this first, since the CowREFCNT uses SvPVX and
5251             we need to write to CowREFCNT, or de-RO the whole buffer if we are
5252             the only owner left of the buffer. */
5253             sv_buf_to_rw(sv); /* NOOP if RO-ing not supported */
5254             {
5255                 U8 cowrefcnt = CowREFCNT(sv);
5256                 if(cowrefcnt != 0) {
5257                     cowrefcnt--;
5258                     CowREFCNT(sv) = cowrefcnt;
5259                     sv_buf_to_ro(sv);
5260                     goto copy_over;
5261                 }
5262             }
5263             /* Else we are the only owner of the buffer. */
5264         }
5265         else
5266 # endif
5267         {
5268             /* This SV doesn't own the buffer, so need to Newx() a new one:  */
5269             copy_over:
5270             SvPV_set(sv, NULL);
5271             SvCUR_set(sv, 0);
5272             SvLEN_set(sv, 0);
5273             if (flags & SV_COW_DROP_PV) {
5274                 /* OK, so we don't need to copy our buffer.  */
5275                 SvPOK_off(sv);
5276             } else {
5277                 SvGROW(sv, cur + 1);
5278                 Move(pvx,SvPVX(sv),cur,char);
5279                 SvCUR_set(sv, cur);
5280                 *SvEND(sv) = '\0';
5281             }
5282             if (len) {
5283             } else {
5284                 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5285             }
5286             if (DEBUG_C_TEST) {
5287                 sv_dump(sv);
5288             }
5289         }
5290 #else
5291             const char * const pvx = SvPVX_const(sv);
5292             const STRLEN len = SvCUR(sv);
5293             SvIsCOW_off(sv);
5294             SvPV_set(sv, NULL);
5295             SvLEN_set(sv, 0);
5296             if (flags & SV_COW_DROP_PV) {
5297                 /* OK, so we don't need to copy our buffer.  */
5298                 SvPOK_off(sv);
5299             } else {
5300                 SvGROW(sv, len + 1);
5301                 Move(pvx,SvPVX(sv),len,char);
5302                 *SvEND(sv) = '\0';
5303             }
5304             unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5305 #endif
5306     }
5307 }
5308
5309 void
5310 Perl_sv_force_normal_flags(pTHX_ SV *const sv, const U32 flags)
5311 {
5312     PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
5313
5314     if (SvREADONLY(sv))
5315         Perl_croak_no_modify();
5316     else if (SvIsCOW(sv) && LIKELY(SvTYPE(sv) != SVt_PVHV))
5317         S_sv_uncow(aTHX_ sv, flags);
5318     if (SvROK(sv))
5319         sv_unref_flags(sv, flags);
5320     else if (SvFAKE(sv) && isGV_with_GP(sv))
5321         sv_unglob(sv, flags);
5322     else if (SvFAKE(sv) && isREGEXP(sv)) {
5323         /* Need to downgrade the REGEXP to a simple(r) scalar. This is analogous
5324            to sv_unglob. We only need it here, so inline it.  */
5325         const bool islv = SvTYPE(sv) == SVt_PVLV;
5326         const svtype new_type =
5327           islv ? SVt_NULL : SvMAGIC(sv) || SvSTASH(sv) ? SVt_PVMG : SVt_PV;
5328         SV *const temp = newSV_type(new_type);
5329         regexp *const temp_p = ReANY((REGEXP *)sv);
5330
5331         if (new_type == SVt_PVMG) {
5332             SvMAGIC_set(temp, SvMAGIC(sv));
5333             SvMAGIC_set(sv, NULL);
5334             SvSTASH_set(temp, SvSTASH(sv));
5335             SvSTASH_set(sv, NULL);
5336         }
5337         if (!islv) SvCUR_set(temp, SvCUR(sv));
5338         /* Remember that SvPVX is in the head, not the body.  But
5339            RX_WRAPPED is in the body. */
5340         assert(ReANY((REGEXP *)sv)->mother_re);
5341         /* Their buffer is already owned by someone else. */
5342         if (flags & SV_COW_DROP_PV) {
5343             /* SvLEN is already 0.  For SVt_REGEXP, we have a brand new
5344                zeroed body.  For SVt_PVLV, it should have been set to 0
5345                before turning into a regexp. */
5346             assert(!SvLEN(islv ? sv : temp));
5347             sv->sv_u.svu_pv = 0;
5348         }
5349         else {
5350             sv->sv_u.svu_pv = savepvn(RX_WRAPPED((REGEXP *)sv), SvCUR(sv));
5351             SvLEN_set(islv ? sv : temp, SvCUR(sv)+1);
5352             SvPOK_on(sv);
5353         }
5354
5355         /* Now swap the rest of the bodies. */
5356
5357         SvFAKE_off(sv);
5358         if (!islv) {
5359             SvFLAGS(sv) &= ~SVTYPEMASK;
5360             SvFLAGS(sv) |= new_type;
5361             SvANY(sv) = SvANY(temp);
5362         }
5363
5364         SvFLAGS(temp) &= ~(SVTYPEMASK);
5365         SvFLAGS(temp) |= SVt_REGEXP|SVf_FAKE;
5366         SvANY(temp) = temp_p;
5367         temp->sv_u.svu_rx = (regexp *)temp_p;
5368
5369         SvREFCNT_dec_NN(temp);
5370     }
5371     else if (SvVOK(sv)) sv_unmagic(sv, PERL_MAGIC_vstring);
5372 }
5373
5374 /*
5375 =for apidoc sv_chop
5376
5377 Efficient removal of characters from the beginning of the string buffer.
5378 C<SvPOK(sv)>, or at least C<SvPOKp(sv)>, must be true and C<ptr> must be a
5379 pointer to somewhere inside the string buffer.  C<ptr> becomes the first
5380 character of the adjusted string.  Uses the C<OOK> hack.  On return, only
5381 C<SvPOK(sv)> and C<SvPOKp(sv)> among the C<OK> flags will be true.
5382
5383 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
5384 refer to the same chunk of data.
5385
5386 The unfortunate similarity of this function's name to that of Perl's C<chop>
5387 operator is strictly coincidental.  This function works from the left;
5388 C<chop> works from the right.
5389
5390 =cut
5391 */
5392
5393 void
5394 Perl_sv_chop(pTHX_ SV *const sv, const char *const ptr)
5395 {
5396     STRLEN delta;
5397     STRLEN old_delta;
5398     U8 *p;
5399 #ifdef DEBUGGING
5400     const U8 *evacp;
5401     STRLEN evacn;
5402 #endif
5403     STRLEN max_delta;
5404
5405     PERL_ARGS_ASSERT_SV_CHOP;
5406
5407     if (!ptr || !SvPOKp(sv))
5408         return;
5409     delta = ptr - SvPVX_const(sv);
5410     if (!delta) {
5411         /* Nothing to do.  */
5412         return;
5413     }
5414     max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
5415     if (delta > max_delta)
5416         Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
5417                    ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
5418     /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), so don't use ptr any more */
5419     SV_CHECK_THINKFIRST(sv);
5420     SvPOK_only_UTF8(sv);
5421
5422     if (!SvOOK(sv)) {
5423         if (!SvLEN(sv)) { /* make copy of shared string */
5424             const char *pvx = SvPVX_const(sv);
5425             const STRLEN len = SvCUR(sv);
5426             SvGROW(sv, len + 1);
5427             Move(pvx,SvPVX(sv),len,char);
5428             *SvEND(sv) = '\0';
5429         }
5430         SvOOK_on(sv);
5431         old_delta = 0;
5432     } else {
5433         SvOOK_offset(sv, old_delta);
5434     }
5435     SvLEN_set(sv, SvLEN(sv) - delta);
5436     SvCUR_set(sv, SvCUR(sv) - delta);
5437     SvPV_set(sv, SvPVX(sv) + delta);
5438
5439     p = (U8 *)SvPVX_const(sv);
5440
5441 #ifdef DEBUGGING
5442     /* how many bytes were evacuated?  we will fill them with sentinel
5443        bytes, except for the part holding the new offset of course. */
5444     evacn = delta;
5445     if (old_delta)
5446         evacn += (old_delta < 0x100 ? 1 : 1 + sizeof(STRLEN));
5447     assert(evacn);
5448     assert(evacn <= delta + old_delta);
5449     evacp = p - evacn;
5450 #endif
5451
5452     /* This sets 'delta' to the accumulated value of all deltas so far */
5453     delta += old_delta;
5454     assert(delta);
5455
5456     /* If 'delta' fits in a byte, store it just prior to the new beginning of
5457      * the string; otherwise store a 0 byte there and store 'delta' just prior
5458      * to that, using as many bytes as a STRLEN occupies.  Thus it overwrites a
5459      * portion of the chopped part of the string */
5460     if (delta < 0x100) {
5461         *--p = (U8) delta;
5462     } else {
5463         *--p = 0;
5464         p -= sizeof(STRLEN);
5465         Copy((U8*)&delta, p, sizeof(STRLEN), U8);
5466     }
5467
5468 #ifdef DEBUGGING
5469     /* Fill the preceding buffer with sentinals to verify that no-one is
5470        using it.  */
5471     while (p > evacp) {
5472         --p;
5473         *p = (U8)PTR2UV(p);
5474     }
5475 #endif
5476 }
5477
5478 /*
5479 =for apidoc sv_catpvn
5480
5481 Concatenates the string onto the end of the string which is in the SV.
5482 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
5483 status set, then the bytes appended should be valid UTF-8.
5484 Handles 'get' magic, but not 'set' magic.  See C<L</sv_catpvn_mg>>.
5485
5486 =for apidoc sv_catpvn_flags
5487
5488 Concatenates the string onto the end of the string which is in the SV.  The
5489 C<len> indicates number of bytes to copy.
5490
5491 By default, the string appended is assumed to be valid UTF-8 if the SV has
5492 the UTF-8 status set, and a string of bytes otherwise.  One can force the
5493 appended string to be interpreted as UTF-8 by supplying the C<SV_CATUTF8>
5494 flag, and as bytes by supplying the C<SV_CATBYTES> flag; the SV or the
5495 string appended will be upgraded to UTF-8 if necessary.
5496
5497 If C<flags> has the C<SV_SMAGIC> bit set, will
5498 C<mg_set> on C<dsv> afterwards if appropriate.
5499 C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
5500 in terms of this function.
5501
5502 =cut
5503 */
5504
5505 void
5506 Perl_sv_catpvn_flags(pTHX_ SV *const dsv, const char *sstr, const STRLEN slen, const I32 flags)
5507 {
5508     STRLEN dlen;
5509     const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
5510
5511     PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
5512     assert((flags & (SV_CATBYTES|SV_CATUTF8)) != (SV_CATBYTES|SV_CATUTF8));
5513
5514     if (!(flags & SV_CATBYTES) || !SvUTF8(dsv)) {
5515       if (flags & SV_CATUTF8 && !SvUTF8(dsv)) {
5516          sv_utf8_upgrade_flags_grow(dsv, 0, slen + 1);
5517          dlen = SvCUR(dsv);
5518       }
5519       else SvGROW(dsv, dlen + slen + 3);
5520       if (sstr == dstr)
5521         sstr = SvPVX_const(dsv);
5522       Move(sstr, SvPVX(dsv) + dlen, slen, char);
5523       SvCUR_set(dsv, SvCUR(dsv) + slen);
5524     }
5525     else {
5526         /* We inline bytes_to_utf8, to avoid an extra malloc. */
5527         const char * const send = sstr + slen;
5528         U8 *d;
5529
5530         /* Something this code does not account for, which I think is
5531            impossible; it would require the same pv to be treated as
5532            bytes *and* utf8, which would indicate a bug elsewhere. */
5533         assert(sstr != dstr);
5534
5535         SvGROW(dsv, dlen + slen * 2 + 3);
5536         d = (U8 *)SvPVX(dsv) + dlen;
5537
5538         while (sstr < send) {
5539             append_utf8_from_native_byte(*sstr, &d);
5540             sstr++;
5541         }
5542         SvCUR_set(dsv, d-(const U8 *)SvPVX(dsv));
5543     }
5544     *SvEND(dsv) = '\0';
5545     (void)SvPOK_only_UTF8(dsv);         /* validate pointer */
5546     SvTAINT(dsv);
5547     if (flags & SV_SMAGIC)
5548         SvSETMAGIC(dsv);
5549 }
5550
5551 /*
5552 =for apidoc sv_catsv
5553
5554 Concatenates the string from SV C<ssv> onto the end of the string in SV
5555 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5556 Handles 'get' magic on both SVs, but no 'set' magic.  See C<L</sv_catsv_mg>>
5557 and C<L</sv_catsv_nomg>>.
5558
5559 =for apidoc sv_catsv_flags
5560
5561 Concatenates the string from SV C<ssv> onto the end of the string in SV
5562 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5563 If C<flags> has the C<SV_GMAGIC> bit set, will call C<mg_get> on both SVs if
5564 appropriate.  If C<flags> has the C<SV_SMAGIC> bit set, C<mg_set> will be called on
5565 the modified SV afterward, if appropriate.  C<sv_catsv>, C<sv_catsv_nomg>,
5566 and C<sv_catsv_mg> are implemented in terms of this function.
5567
5568 =cut */
5569
5570 void
5571 Perl_sv_catsv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
5572 {
5573     PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
5574
5575     if (ssv) {
5576         STRLEN slen;
5577         const char *spv = SvPV_flags_const(ssv, slen, flags);
5578         if (flags & SV_GMAGIC)
5579                 SvGETMAGIC(dsv);
5580         sv_catpvn_flags(dsv, spv, slen,
5581                             DO_UTF8(ssv) ? SV_CATUTF8 : SV_CATBYTES);
5582         if (flags & SV_SMAGIC)
5583                 SvSETMAGIC(dsv);
5584     }
5585 }
5586
5587 /*
5588 =for apidoc sv_catpv
5589
5590 Concatenates the C<NUL>-terminated string onto the end of the string which is
5591 in the SV.
5592 If the SV has the UTF-8 status set, then the bytes appended should be
5593 valid UTF-8.  Handles 'get' magic, but not 'set' magic.  See
5594 C<L</sv_catpv_mg>>.
5595
5596 =cut */
5597
5598 void
5599 Perl_sv_catpv(pTHX_ SV *const sv, const char *ptr)
5600 {
5601     STRLEN len;
5602     STRLEN tlen;
5603     char *junk;
5604
5605     PERL_ARGS_ASSERT_SV_CATPV;
5606
5607     if (!ptr)
5608         return;
5609     junk = SvPV_force(sv, tlen);
5610     len = strlen(ptr);
5611     SvGROW(sv, tlen + len + 1);
5612     if (ptr == junk)
5613         ptr = SvPVX_const(sv);
5614     Move(ptr,SvPVX(sv)+tlen,len+1,char);
5615     SvCUR_set(sv, SvCUR(sv) + len);
5616     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5617     SvTAINT(sv);
5618 }
5619
5620 /*
5621 =for apidoc sv_catpv_flags
5622
5623 Concatenates the C<NUL>-terminated string onto the end of the string which is
5624 in the SV.
5625 If the SV has the UTF-8 status set, then the bytes appended should
5626 be valid UTF-8.  If C<flags> has the C<SV_SMAGIC> bit set, will C<mg_set>
5627 on the modified SV if appropriate.
5628
5629 =cut
5630 */
5631
5632 void
5633 Perl_sv_catpv_flags(pTHX_ SV *dstr, const char *sstr, const I32 flags)
5634 {
5635     PERL_ARGS_ASSERT_SV_CATPV_FLAGS;
5636     sv_catpvn_flags(dstr, sstr, strlen(sstr), flags);
5637 }
5638
5639 /*
5640 =for apidoc sv_catpv_mg
5641
5642 Like C<sv_catpv>, but also handles 'set' magic.
5643
5644 =cut
5645 */
5646
5647 void
5648 Perl_sv_catpv_mg(pTHX_ SV *const sv, const char *const ptr)
5649 {
5650     PERL_ARGS_ASSERT_SV_CATPV_MG;
5651
5652     sv_catpv(sv,ptr);
5653     SvSETMAGIC(sv);
5654 }
5655
5656 /*
5657 =for apidoc newSV
5658
5659 Creates a new SV.  A non-zero C<len> parameter indicates the number of
5660 bytes of preallocated string space the SV should have.  An extra byte for a
5661 trailing C<NUL> is also reserved.  (C<SvPOK> is not set for the SV even if string
5662 space is allocated.)  The reference count for the new SV is set to 1.
5663
5664 In 5.9.3, C<newSV()> replaces the older C<NEWSV()> API, and drops the first
5665 parameter, I<x>, a debug aid which allowed callers to identify themselves.
5666 This aid has been superseded by a new build option, C<PERL_MEM_LOG> (see
5667 L<perlhacktips/PERL_MEM_LOG>).  The older API is still there for use in XS
5668 modules supporting older perls.
5669
5670 =cut
5671 */
5672
5673 SV *
5674 Perl_newSV(pTHX_ const STRLEN len)
5675 {
5676     SV *sv;
5677
5678     new_SV(sv);
5679     if (len) {
5680         sv_grow(sv, len + 1);
5681     }
5682     return sv;
5683 }
5684 /*
5685 =for apidoc sv_magicext
5686
5687 Adds magic to an SV, upgrading it if necessary.  Applies the
5688 supplied C<vtable> and returns a pointer to the magic added.
5689
5690 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
5691 In particular, you can add magic to C<SvREADONLY> SVs, and add more than
5692 one instance of the same C<how>.
5693
5694 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
5695 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
5696 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
5697 to contain an SV* and is stored as-is with its C<REFCNT> incremented.
5698
5699 (This is now used as a subroutine by C<sv_magic>.)
5700
5701 =cut
5702 */
5703 MAGIC * 
5704 Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how, 
5705                 const MGVTBL *const vtable, const char *const name, const I32 namlen)
5706 {
5707     MAGIC* mg;
5708
5709     PERL_ARGS_ASSERT_SV_MAGICEXT;
5710
5711     SvUPGRADE(sv, SVt_PVMG);
5712     Newxz(mg, 1, MAGIC);
5713     mg->mg_moremagic = SvMAGIC(sv);
5714     SvMAGIC_set(sv, mg);
5715
5716     /* Sometimes a magic contains a reference loop, where the sv and
5717        object refer to each other.  To prevent a reference loop that
5718        would prevent such objects being freed, we look for such loops
5719        and if we find one we avoid incrementing the object refcount.
5720
5721        Note we cannot do this to avoid self-tie loops as intervening RV must
5722        have its REFCNT incremented to keep it in existence.
5723
5724     */
5725     if (!obj || obj == sv ||
5726         how == PERL_MAGIC_arylen ||
5727         how == PERL_MAGIC_regdata ||
5728         how == PERL_MAGIC_regdatum ||
5729         how == PERL_MAGIC_symtab ||
5730         (SvTYPE(obj) == SVt_PVGV &&
5731             (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
5732              || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
5733              || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
5734     {
5735         mg->mg_obj = obj;
5736     }
5737     else {
5738         mg->mg_obj = SvREFCNT_inc_simple(obj);
5739         mg->mg_flags |= MGf_REFCOUNTED;
5740     }
5741
5742     /* Normal self-ties simply pass a null object, and instead of
5743        using mg_obj directly, use the SvTIED_obj macro to produce a
5744        new RV as needed.  For glob "self-ties", we are tieing the PVIO
5745        with an RV obj pointing to the glob containing the PVIO.  In
5746        this case, to avoid a reference loop, we need to weaken the
5747        reference.
5748     */
5749
5750     if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
5751         obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
5752     {
5753       sv_rvweaken(obj);
5754     }
5755
5756     mg->mg_type = how;
5757     mg->mg_len = namlen;
5758     if (name) {
5759         if (namlen > 0)
5760             mg->mg_ptr = savepvn(name, namlen);
5761         else if (namlen == HEf_SVKEY) {
5762             /* Yes, this is casting away const. This is only for the case of
5763                HEf_SVKEY. I think we need to document this aberation of the
5764                constness of the API, rather than making name non-const, as
5765                that change propagating outwards a long way.  */
5766             mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
5767         } else
5768             mg->mg_ptr = (char *) name;
5769     }
5770     mg->mg_virtual = (MGVTBL *) vtable;
5771
5772     mg_magical(sv);
5773     return mg;
5774 }
5775
5776 MAGIC *
5777 Perl_sv_magicext_mglob(pTHX_ SV *sv)
5778 {
5779     PERL_ARGS_ASSERT_SV_MAGICEXT_MGLOB;
5780     if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y') {
5781         /* This sv is only a delegate.  //g magic must be attached to
5782            its target. */
5783         vivify_defelem(sv);
5784         sv = LvTARG(sv);
5785     }
5786     return sv_magicext(sv, NULL, PERL_MAGIC_regex_global,
5787                        &PL_vtbl_mglob, 0, 0);
5788 }
5789
5790 /*
5791 =for apidoc sv_magic
5792
5793 Adds magic to an SV.  First upgrades C<sv> to type C<SVt_PVMG> if
5794 necessary, then adds a new magic item of type C<how> to the head of the
5795 magic list.
5796
5797 See C<L</sv_magicext>> (which C<sv_magic> now calls) for a description of the
5798 handling of the C<name> and C<namlen> arguments.
5799
5800 You need to use C<sv_magicext> to add magic to C<SvREADONLY> SVs and also
5801 to add more than one instance of the same C<how>.
5802
5803 =cut
5804 */
5805
5806 void
5807 Perl_sv_magic(pTHX_ SV *const sv, SV *const obj, const int how,
5808              const char *const name, const I32 namlen)
5809 {
5810     const MGVTBL *vtable;
5811     MAGIC* mg;
5812     unsigned int flags;
5813     unsigned int vtable_index;
5814
5815     PERL_ARGS_ASSERT_SV_MAGIC;
5816
5817     if (how < 0 || (unsigned)how >= C_ARRAY_LENGTH(PL_magic_data)
5818         || ((flags = PL_magic_data[how]),
5819             (vtable_index = flags & PERL_MAGIC_VTABLE_MASK)
5820             > magic_vtable_max))
5821         Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
5822
5823     /* PERL_MAGIC_ext is reserved for use by extensions not perl internals.
5824        Useful for attaching extension internal data to perl vars.
5825        Note that multiple extensions may clash if magical scalars
5826        etc holding private data from one are passed to another. */
5827
5828     vtable = (vtable_index == magic_vtable_max)
5829         ? NULL : PL_magic_vtables + vtable_index;
5830
5831     if (SvREADONLY(sv)) {
5832         if (
5833             !PERL_MAGIC_TYPE_READONLY_ACCEPTABLE(how)
5834            )
5835         {
5836             Perl_croak_no_modify();
5837         }
5838     }
5839     if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5840         if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
5841             /* sv_magic() refuses to add a magic of the same 'how' as an
5842                existing one
5843              */
5844             if (how == PERL_MAGIC_taint)
5845                 mg->mg_len |= 1;
5846             return;
5847         }
5848     }
5849
5850     /* Force pos to be stored as characters, not bytes. */
5851     if (SvMAGICAL(sv) && DO_UTF8(sv)
5852       && (mg = mg_find(sv, PERL_MAGIC_regex_global))
5853       && mg->mg_len != -1
5854       && mg->mg_flags & MGf_BYTES) {
5855         mg->mg_len = (SSize_t)sv_pos_b2u_flags(sv, (STRLEN)mg->mg_len,
5856                                                SV_CONST_RETURN);
5857         mg->mg_flags &= ~MGf_BYTES;
5858     }
5859
5860     /* Rest of work is done else where */
5861     mg = sv_magicext(sv,obj,how,vtable,name,namlen);
5862
5863     switch (how) {
5864     case PERL_MAGIC_taint:
5865         mg->mg_len = 1;
5866         break;
5867     case PERL_MAGIC_ext:
5868     case PERL_MAGIC_dbfile:
5869         SvRMAGICAL_on(sv);
5870         break;
5871     }
5872 }
5873
5874 static int
5875 S_sv_unmagicext_flags(pTHX_ SV *const sv, const int type, MGVTBL *vtbl, const U32 flags)
5876 {
5877     MAGIC* mg;
5878     MAGIC** mgp;
5879
5880     assert(flags <= 1);
5881
5882     if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
5883         return 0;
5884     mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
5885     for (mg = *mgp; mg; mg = *mgp) {
5886         const MGVTBL* const virt = mg->mg_virtual;
5887         if (mg->mg_type == type && (!flags || virt == vtbl)) {
5888             *mgp = mg->mg_moremagic;
5889             if (virt && virt->svt_free)
5890                 virt->svt_free(aTHX_ sv, mg);
5891             if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
5892                 if (mg->mg_len > 0)
5893                     Safefree(mg->mg_ptr);
5894                 else if (mg->mg_len == HEf_SVKEY)
5895                     SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
5896                 else if (mg->mg_type == PERL_MAGIC_utf8)
5897                     Safefree(mg->mg_ptr);
5898             }
5899             if (mg->mg_flags & MGf_REFCOUNTED)
5900                 SvREFCNT_dec(mg->mg_obj);
5901             Safefree(mg);
5902         }
5903         else
5904             mgp = &mg->mg_moremagic;
5905     }
5906     if (SvMAGIC(sv)) {
5907         if (SvMAGICAL(sv))      /* if we're under save_magic, wait for restore_magic; */
5908             mg_magical(sv);     /*    else fix the flags now */
5909     }
5910     else
5911         SvMAGICAL_off(sv);
5912
5913     return 0;
5914 }
5915
5916 /*
5917 =for apidoc sv_unmagic
5918
5919 Removes all magic of type C<type> from an SV.
5920
5921 =cut
5922 */
5923
5924 int
5925 Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
5926 {
5927     PERL_ARGS_ASSERT_SV_UNMAGIC;
5928     return S_sv_unmagicext_flags(aTHX_ sv, type, NULL, 0);
5929 }
5930
5931 /*
5932 =for apidoc sv_unmagicext
5933
5934 Removes all magic of type C<type> with the specified C<vtbl> from an SV.
5935
5936 =cut
5937 */
5938
5939 int
5940 Perl_sv_unmagicext(pTHX_ SV *const sv, const int type, MGVTBL *vtbl)
5941 {
5942     PERL_ARGS_ASSERT_SV_UNMAGICEXT;
5943     return S_sv_unmagicext_flags(aTHX_ sv, type, vtbl, 1);
5944 }
5945
5946 /*
5947 =for apidoc sv_rvweaken
5948
5949 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5950 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5951 push a back-reference to this RV onto the array of backreferences
5952 associated with that magic.  If the RV is magical, set magic will be
5953 called after the RV is cleared.
5954
5955 =cut
5956 */
5957
5958 SV *
5959 Perl_sv_rvweaken(pTHX_ SV *const sv)
5960 {
5961     SV *tsv;
5962
5963     PERL_ARGS_ASSERT_SV_RVWEAKEN;
5964
5965     if (!SvOK(sv))  /* let undefs pass */
5966         return sv;
5967     if (!SvROK(sv))
5968         Perl_croak(aTHX_ "Can't weaken a nonreference");
5969     else if (SvWEAKREF(sv)) {
5970         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
5971         return sv;
5972     }
5973     else if (SvREADONLY(sv)) croak_no_modify();
5974     tsv = SvRV(sv);
5975     Perl_sv_add_backref(aTHX_ tsv, sv);
5976     SvWEAKREF_on(sv);
5977     SvREFCNT_dec_NN(tsv);
5978     return sv;
5979 }
5980
5981 /*
5982 =for apidoc sv_get_backrefs
5983
5984 If C<sv> is the target of a weak reference then it returns the back
5985 references structure associated with the sv; otherwise return C<NULL>.
5986
5987 When returning a non-null result the type of the return is relevant. If it
5988 is an AV then the elements of the AV are the weak reference RVs which
5989 point at this item. If it is any other type then the item itself is the
5990 weak reference.
5991
5992 See also C<Perl_sv_add_backref()>, C<Perl_sv_del_backref()>,
5993 C<Perl_sv_kill_backrefs()>
5994
5995 =cut
5996 */
5997
5998 SV *
5999 Perl_sv_get_backrefs(SV *const sv)
6000 {
6001     SV *backrefs= NULL;
6002
6003     PERL_ARGS_ASSERT_SV_GET_BACKREFS;
6004
6005     /* find slot to store array or singleton backref */
6006
6007     if (SvTYPE(sv) == SVt_PVHV) {
6008         if (SvOOK(sv)) {
6009             struct xpvhv_aux * const iter = HvAUX((HV *)sv);
6010             backrefs = (SV *)iter->xhv_backreferences;
6011         }
6012     } else if (SvMAGICAL(sv)) {
6013         MAGIC *mg = mg_find(sv, PERL_MAGIC_backref);
6014         if (mg)
6015             backrefs = mg->mg_obj;
6016     }
6017     return backrefs;
6018 }
6019
6020 /* Give tsv backref magic if it hasn't already got it, then push a
6021  * back-reference to sv onto the array associated with the backref magic.
6022  *
6023  * As an optimisation, if there's only one backref and it's not an AV,
6024  * store it directly in the HvAUX or mg_obj slot, avoiding the need to
6025  * allocate an AV. (Whether the slot holds an AV tells us whether this is
6026  * active.)
6027  */
6028
6029 /* A discussion about the backreferences array and its refcount:
6030  *
6031  * The AV holding the backreferences is pointed to either as the mg_obj of
6032  * PERL_MAGIC_backref, or in the specific case of a HV, from the
6033  * xhv_backreferences field. The array is created with a refcount
6034  * of 2. This means that if during global destruction the array gets
6035  * picked on before its parent to have its refcount decremented by the
6036  * random zapper, it won't actually be freed, meaning it's still there for
6037  * when its parent gets freed.
6038  *
6039  * When the parent SV is freed, the extra ref is killed by
6040  * Perl_sv_kill_backrefs.  The other ref is killed, in the case of magic,
6041  * by mg_free() / MGf_REFCOUNTED, or for a hash, by Perl_hv_kill_backrefs.
6042  *
6043  * When a single backref SV is stored directly, it is not reference
6044  * counted.
6045  */
6046
6047 void
6048 Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
6049 {
6050     SV **svp;
6051     AV *av = NULL;
6052     MAGIC *mg = NULL;
6053
6054     PERL_ARGS_ASSERT_SV_ADD_BACKREF;
6055
6056     /* find slot to store array or singleton backref */
6057
6058     if (SvTYPE(tsv) == SVt_PVHV) {
6059         svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
6060     } else {
6061         if (SvMAGICAL(tsv))
6062             mg = mg_find(tsv, PERL_MAGIC_backref);
6063         if (!mg)
6064             mg = sv_magicext(tsv, NULL, PERL_MAGIC_backref, &PL_vtbl_backref, NULL, 0);
6065         svp = &(mg->mg_obj);
6066     }
6067
6068     /* create or retrieve the array */
6069
6070     if (   (!*svp && SvTYPE(sv) == SVt_PVAV)
6071         || (*svp && SvTYPE(*svp) != SVt_PVAV)
6072     ) {
6073         /* create array */
6074         if (mg)
6075             mg->mg_flags |= MGf_REFCOUNTED;
6076         av = newAV();
6077         AvREAL_off(av);
6078         SvREFCNT_inc_simple_void_NN(av);
6079         /* av now has a refcnt of 2; see discussion above */
6080         av_extend(av, *svp ? 2 : 1);
6081         if (*svp) {
6082             /* move single existing backref to the array */
6083             AvARRAY(av)[++AvFILLp(av)] = *svp; /* av_push() */
6084         }
6085         *svp = (SV*)av;
6086     }
6087     else {
6088         av = MUTABLE_AV(*svp);
6089         if (!av) {
6090             /* optimisation: store single backref directly in HvAUX or mg_obj */
6091             *svp = sv;
6092             return;
6093         }
6094         assert(SvTYPE(av) == SVt_PVAV);
6095         if (AvFILLp(av) >= AvMAX(av)) {
6096             av_extend(av, AvFILLp(av)+1);
6097         }
6098     }
6099     /* push new backref */
6100     AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
6101 }
6102
6103 /* delete a back-reference to ourselves from the backref magic associated
6104  * with the SV we point to.
6105  */
6106
6107 void
6108 Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
6109 {
6110     SV **svp = NULL;
6111
6112     PERL_ARGS_ASSERT_SV_DEL_BACKREF;
6113
6114     if (SvTYPE(tsv) == SVt_PVHV) {
6115         if (SvOOK(tsv))
6116             svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
6117     }
6118     else if (SvIS_FREED(tsv) && PL_phase == PERL_PHASE_DESTRUCT) {
6119         /* It's possible for the the last (strong) reference to tsv to have
6120            become freed *before* the last thing holding a weak reference.
6121            If both survive longer than the backreferences array, then when
6122            the referent's reference count drops to 0 and it is freed, it's
6123            not able to chase the backreferences, so they aren't NULLed.
6124
6125            For example, a CV holds a weak reference to its stash. If both the
6126            CV and the stash survive longer than the backreferences array,
6127            and the CV gets picked for the SvBREAK() treatment first,
6128            *and* it turns out that the stash is only being kept alive because
6129            of an our variable in the pad of the CV, then midway during CV
6130            destruction the stash gets freed, but CvSTASH() isn't set to NULL.
6131            It ends up pointing to the freed HV. Hence it's chased in here, and
6132            if this block wasn't here, it would hit the !svp panic just below.
6133
6134            I don't believe that "better" destruction ordering is going to help
6135            here - during global destruction there's always going to be the
6136            chance that something goes out of order. We've tried to make it
6137            foolproof before, and it only resulted in evolutionary pressure on
6138            fools. Which made us look foolish for our hubris. :-(
6139         */
6140         return;
6141     }
6142     else {
6143         MAGIC *const mg
6144             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
6145         svp =  mg ? &(mg->mg_obj) : NULL;
6146     }
6147
6148     if (!svp)
6149         Perl_croak(aTHX_ "panic: del_backref, svp=0");
6150     if (!*svp) {
6151         /* It's possible that sv is being freed recursively part way through the
6152            freeing of tsv. If this happens, the backreferences array of tsv has
6153            already been freed, and so svp will be NULL. If this is the case,
6154            we should not panic. Instead, nothing needs doing, so return.  */
6155         if (PL_phase == PERL_PHASE_DESTRUCT && SvREFCNT(tsv) == 0)
6156             return;
6157         Perl_croak(aTHX_ "panic: del_backref, *svp=%p phase=%s refcnt=%" UVuf,
6158                    (void*)*svp, PL_phase_names[PL_phase], (UV)SvREFCNT(tsv));
6159     }
6160
6161     if (SvTYPE(*svp) == SVt_PVAV) {
6162 #ifdef DEBUGGING
6163         int count = 1;
6164 #endif
6165         AV * const av = (AV*)*svp;
6166         SSize_t fill;
6167         assert(!SvIS_FREED(av));
6168         fill = AvFILLp(av);
6169         assert(fill > -1);
6170         svp = AvARRAY(av);
6171         /* for an SV with N weak references to it, if all those
6172          * weak refs are deleted, then sv_del_backref will be called
6173          * N times and O(N^2) compares will be done within the backref
6174          * array. To ameliorate this potential slowness, we:
6175          * 1) make sure this code is as tight as possible;
6176          * 2) when looking for SV, look for it at both the head and tail of the
6177          *    array first before searching the rest, since some create/destroy
6178          *    patterns will cause the backrefs to be freed in order.
6179          */
6180         if (*svp == sv) {
6181             AvARRAY(av)++;
6182             AvMAX(av)--;
6183         }
6184         else {
6185             SV **p = &svp[fill];
6186             SV *const topsv = *p;
6187             if (topsv != sv) {
6188 #ifdef DEBUGGING
6189                 count = 0;
6190 #endif
6191                 while (--p > svp) {
6192                     if (*p == sv) {
6193                         /* We weren't the last entry.
6194                            An unordered list has this property that you
6195                            can take the last element off the end to fill
6196                            the hole, and it's still an unordered list :-)
6197                         */
6198                         *p = topsv;
6199 #ifdef DEBUGGING
6200                         count++;
6201 #else
6202                         break; /* should only be one */
6203 #endif
6204                     }
6205                 }
6206             }
6207         }
6208         assert(count ==1);
6209         AvFILLp(av) = fill-1;
6210     }
6211     else if (SvIS_FREED(*svp) && PL_phase == PERL_PHASE_DESTRUCT) {
6212         /* freed AV; skip */
6213     }
6214     else {
6215         /* optimisation: only a single backref, stored directly */
6216         if (*svp != sv)
6217             Perl_croak(aTHX_ "panic: del_backref, *svp=%p, sv=%p",
6218                        (void*)*svp, (void*)sv);
6219         *svp = NULL;
6220     }
6221
6222 }
6223
6224 void
6225 Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
6226 {
6227     SV **svp;
6228     SV **last;
6229     bool is_array;
6230
6231     PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
6232
6233     if (!av)
6234         return;
6235
6236     /* after multiple passes through Perl_sv_clean_all() for a thingy
6237      * that has badly leaked, the backref array may have gotten freed,
6238      * since we only protect it against 1 round of cleanup */
6239     if (SvIS_FREED(av)) {
6240         if (PL_in_clean_all) /* All is fair */
6241             return;
6242         Perl_croak(aTHX_
6243                    "panic: magic_killbackrefs (freed backref AV/SV)");
6244     }
6245
6246
6247     is_array = (SvTYPE(av) == SVt_PVAV);
6248     if (is_array) {
6249         assert(!SvIS_FREED(av));
6250         svp = AvARRAY(av);
6251         if (svp)
6252             last = svp + AvFILLp(av);
6253     }
6254     else {
6255         /* optimisation: only a single backref, stored directly */
6256         svp = (SV**)&av;
6257         last = svp;
6258     }
6259
6260     if (svp) {
6261         while (svp <= last) {
6262             if (*svp) {
6263                 SV *const referrer = *svp;
6264                 if (SvWEAKREF(referrer)) {
6265                     /* XXX Should we check that it hasn't changed? */
6266                     assert(SvROK(referrer));
6267                     SvRV_set(referrer, 0);
6268                     SvOK_off(referrer);
6269                     SvWEAKREF_off(referrer);
6270                     SvSETMAGIC(referrer);
6271                 } else if (SvTYPE(referrer) == SVt_PVGV ||
6272                            SvTYPE(referrer) == SVt_PVLV) {
6273                     assert(SvTYPE(sv) == SVt_PVHV); /* stash backref */
6274                     /* You lookin' at me?  */
6275                     assert(GvSTASH(referrer));
6276                     assert(GvSTASH(referrer) == (const HV *)sv);
6277                     GvSTASH(referrer) = 0;
6278                 } else if (SvTYPE(referrer) == SVt_PVCV ||
6279                            SvTYPE(referrer) == SVt_PVFM) {
6280                     if (SvTYPE(sv) == SVt_PVHV) { /* stash backref */
6281                         /* You lookin' at me?  */
6282                         assert(CvSTASH(referrer));
6283                         assert(CvSTASH(referrer) == (const HV *)sv);
6284                         SvANY(MUTABLE_CV(referrer))->xcv_stash = 0;
6285                     }
6286                     else {
6287                         assert(SvTYPE(sv) == SVt_PVGV);
6288                         /* You lookin' at me?  */
6289                         assert(CvGV(referrer));
6290                         assert(CvGV(referrer) == (const GV *)sv);
6291                         anonymise_cv_maybe(MUTABLE_GV(sv),
6292                                                 MUTABLE_CV(referrer));
6293                     }
6294
6295                 } else {
6296                     Perl_croak(aTHX_
6297                                "panic: magic_killbackrefs (flags=%" UVxf ")",
6298                                (UV)SvFLAGS(referrer));
6299                 }
6300
6301                 if (is_array)
6302                     *svp = NULL;
6303             }
6304             svp++;
6305         }
6306     }
6307     if (is_array) {
6308         AvFILLp(av) = -1;
6309         SvREFCNT_dec_NN(av); /* remove extra count added by sv_add_backref() */
6310     }
6311     return;
6312 }
6313
6314 /*
6315 =for apidoc sv_insert
6316
6317 Inserts a string at the specified offset/length within the SV.  Similar to
6318 the Perl C<substr()> function.  Handles get magic.
6319
6320 =for apidoc sv_insert_flags
6321
6322 Same as C<sv_insert>, but the extra C<flags> are passed to the
6323 C<SvPV_force_flags> that applies to C<bigstr>.
6324
6325 =cut
6326 */
6327
6328 void
6329 Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen, const U32 flags)
6330 {
6331     char *big;
6332     char *mid;
6333     char *midend;
6334     char *bigend;
6335     SSize_t i;          /* better be sizeof(STRLEN) or bad things happen */
6336     STRLEN curlen;
6337
6338     PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
6339
6340     SvPV_force_flags(bigstr, curlen, flags);
6341     (void)SvPOK_only_UTF8(bigstr);
6342     if (offset + len > curlen) {
6343         SvGROW(bigstr, offset+len+1);
6344         Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
6345         SvCUR_set(bigstr, offset+len);
6346     }
6347
6348     SvTAINT(bigstr);
6349     i = littlelen - len;
6350     if (i > 0) {                        /* string might grow */
6351         big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
6352         mid = big + offset + len;
6353         midend = bigend = big + SvCUR(bigstr);
6354         bigend += i;
6355         *bigend = '\0';
6356         while (midend > mid)            /* shove everything down */
6357             *--bigend = *--midend;
6358         Move(little,big+offset,littlelen,char);
6359         SvCUR_set(bigstr, SvCUR(bigstr) + i);
6360         SvSETMAGIC(bigstr);
6361         return;
6362     }
6363     else if (i == 0) {
6364         Move(little,SvPVX(bigstr)+offset,len,char);
6365         SvSETMAGIC(bigstr);
6366         return;
6367     }
6368
6369     big = SvPVX(bigstr);
6370     mid = big + offset;
6371     midend = mid + len;
6372     bigend = big + SvCUR(bigstr);
6373
6374     if (midend > bigend)
6375         Perl_croak(aTHX_ "panic: sv_insert, midend=%p, bigend=%p",
6376                    midend, bigend);
6377
6378     if (mid - big > bigend - midend) {  /* faster to shorten from end */
6379         if (littlelen) {
6380             Move(little, mid, littlelen,char);
6381             mid += littlelen;
6382         }
6383         i = bigend - midend;
6384         if (i > 0) {
6385             Move(midend, mid, i,char);
6386             mid += i;
6387         }
6388         *mid = '\0';
6389         SvCUR_set(bigstr, mid - big);
6390     }
6391     else if ((i = mid - big)) { /* faster from front */
6392         midend -= littlelen;
6393         mid = midend;
6394         Move(big, midend - i, i, char);
6395         sv_chop(bigstr,midend-i);
6396         if (littlelen)
6397             Move(little, mid, littlelen,char);
6398     }
6399     else if (littlelen) {
6400         midend -= littlelen;
6401         sv_chop(bigstr,midend);
6402         Move(little,midend,littlelen,char);
6403     }
6404     else {
6405         sv_chop(bigstr,midend);
6406     }
6407     SvSETMAGIC(bigstr);
6408 }
6409
6410 /*
6411 =for apidoc sv_replace
6412
6413 Make the first argument a copy of the second, then delete the original.
6414 The target SV physically takes over ownership of the body of the source SV
6415 and inherits its flags; however, the target keeps any magic it owns,
6416 and any magic in the source is discarded.
6417 Note that this is a rather specialist SV copying operation; most of the
6418 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
6419
6420 =cut
6421 */
6422
6423 void
6424 Perl_sv_replace(pTHX_ SV *const sv, SV *const nsv)
6425 {
6426     const U32 refcnt = SvREFCNT(sv);
6427
6428     PERL_ARGS_ASSERT_SV_REPLACE;
6429
6430     SV_CHECK_THINKFIRST_COW_DROP(sv);
6431     if (SvREFCNT(nsv) != 1) {
6432         Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
6433                    " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
6434     }
6435     if (SvMAGICAL(sv)) {
6436         if (SvMAGICAL(nsv))
6437             mg_free(nsv);
6438         else
6439             sv_upgrade(nsv, SVt_PVMG);
6440         SvMAGIC_set(nsv, SvMAGIC(sv));
6441         SvFLAGS(nsv) |= SvMAGICAL(sv);
6442         SvMAGICAL_off(sv);
6443         SvMAGIC_set(sv, NULL);
6444     }
6445     SvREFCNT(sv) = 0;
6446     sv_clear(sv);
6447     assert(!SvREFCNT(sv));
6448 #ifdef DEBUG_LEAKING_SCALARS
6449     sv->sv_flags  = nsv->sv_flags;
6450     sv->sv_any    = nsv->sv_any;
6451     sv->sv_refcnt = nsv->sv_refcnt;
6452     sv->sv_u      = nsv->sv_u;
6453 #else
6454     StructCopy(nsv,sv,SV);
6455 #endif
6456     if(SvTYPE(sv) == SVt_IV) {
6457         SET_SVANY_FOR_BODYLESS_IV(sv);
6458     }
6459         
6460
6461     SvREFCNT(sv) = refcnt;
6462     SvFLAGS(nsv) |= SVTYPEMASK;         /* Mark as freed */
6463     SvREFCNT(nsv) = 0;
6464     del_SV(nsv);
6465 }
6466
6467 /* We're about to free a GV which has a CV that refers back to us.
6468  * If that CV will outlive us, make it anonymous (i.e. fix up its CvGV
6469  * field) */
6470
6471 STATIC void
6472 S_anonymise_cv_maybe(pTHX_ GV *gv, CV* cv)
6473 {
6474     SV *gvname;
6475     GV *anongv;
6476
6477     PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE;
6478
6479     /* be assertive! */
6480     assert(SvREFCNT(gv) == 0);
6481     assert(isGV(gv) && isGV_with_GP(gv));
6482     assert(GvGP(gv));
6483     assert(!CvANON(cv));
6484     assert(CvGV(cv) == gv);
6485     assert(!CvNAMED(cv));
6486
6487     /* will the CV shortly be freed by gp_free() ? */
6488     if (GvCV(gv) == cv && GvGP(gv)->gp_refcnt < 2 && SvREFCNT(cv) < 2) {
6489         SvANY(cv)->xcv_gv_u.xcv_gv = NULL;
6490         return;
6491     }
6492
6493     /* if not, anonymise: */
6494     gvname = (GvSTASH(gv) && HvNAME(GvSTASH(gv)) && HvENAME(GvSTASH(gv)))
6495                     ? newSVhek(HvENAME_HEK(GvSTASH(gv)))
6496                     : newSVpvn_flags( "__ANON__", 8, 0 );
6497     sv_catpvs(gvname, "::__ANON__");
6498     anongv = gv_fetchsv(gvname, GV_ADDMULTI, SVt_PVCV);
6499     SvREFCNT_dec_NN(gvname);
6500
6501     CvANON_on(cv);
6502     CvCVGV_RC_on(cv);
6503     SvANY(cv)->xcv_gv_u.xcv_gv = MUTABLE_GV(SvREFCNT_inc(anongv));
6504 }
6505
6506
6507 /*
6508 =for apidoc sv_clear
6509
6510 Clear an SV: call any destructors, free up any memory used by the body,
6511 and free the body itself.  The SV's head is I<not> freed, although
6512 its type is set to all 1's so that it won't inadvertently be assumed
6513 to be live during global destruction etc.
6514 This function should only be called when C<REFCNT> is zero.  Most of the time
6515 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
6516 instead.
6517
6518 =cut
6519 */
6520
6521 void
6522 Perl_sv_clear(pTHX_ SV *const orig_sv)
6523 {
6524     dVAR;
6525     HV *stash;
6526     U32 type;
6527     const struct body_details *sv_type_details;
6528     SV* iter_sv = NULL;
6529     SV* next_sv = NULL;
6530     SV *sv = orig_sv;
6531     STRLEN hash_index = 0; /* initialise to make Coverity et al happy.
6532                               Not strictly necessary */
6533
6534     PERL_ARGS_ASSERT_SV_CLEAR;
6535
6536     /* within this loop, sv is the SV currently being freed, and
6537      * iter_sv is the most recent AV or whatever that's being iterated
6538      * over to provide more SVs */
6539
6540     while (sv) {
6541
6542         type = SvTYPE(sv);
6543
6544         assert(SvREFCNT(sv) == 0);
6545         assert(SvTYPE(sv) != (svtype)SVTYPEMASK);
6546
6547         if (type <= SVt_IV) {
6548             /* See the comment in sv.h about the collusion between this
6549              * early return and the overloading of the NULL slots in the
6550              * size table.  */
6551             if (SvROK(sv))
6552                 goto free_rv;
6553             SvFLAGS(sv) &= SVf_BREAK;
6554             SvFLAGS(sv) |= SVTYPEMASK;
6555             goto free_head;
6556         }
6557
6558         /* objs are always >= MG, but pad names use the SVs_OBJECT flag
6559            for another purpose  */
6560         assert(!SvOBJECT(sv) || type >= SVt_PVMG);
6561
6562         if (type >= SVt_PVMG) {
6563             if (SvOBJECT(sv)) {
6564                 if (!curse(sv, 1)) goto get_next_sv;
6565                 type = SvTYPE(sv); /* destructor may have changed it */
6566             }
6567             /* Free back-references before magic, in case the magic calls
6568              * Perl code that has weak references to sv. */
6569             if (type == SVt_PVHV) {
6570                 Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
6571                 if (SvMAGIC(sv))
6572                     mg_free(sv);
6573             }
6574             else if (SvMAGIC(sv)) {
6575                 /* Free back-references before other types of magic. */
6576                 sv_unmagic(sv, PERL_MAGIC_backref);
6577                 mg_free(sv);
6578             }
6579             SvMAGICAL_off(sv);
6580         }
6581         switch (type) {
6582             /* case SVt_INVLIST: */
6583         case SVt_PVIO:
6584             if (IoIFP(sv) &&
6585                 IoIFP(sv) != PerlIO_stdin() &&
6586                 IoIFP(sv) != PerlIO_stdout() &&
6587                 IoIFP(sv) != PerlIO_stderr() &&
6588                 !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6589             {
6590                 io_close(MUTABLE_IO(sv), NULL, FALSE,
6591                          (IoTYPE(sv) == IoTYPE_WRONLY ||
6592                           IoTYPE(sv) == IoTYPE_RDWR   ||
6593                           IoTYPE(sv) == IoTYPE_APPEND));
6594             }
6595             if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6596                 PerlDir_close(IoDIRP(sv));
6597             IoDIRP(sv) = (DIR*)NULL;
6598             Safefree(IoTOP_NAME(sv));
6599             Safefree(IoFMT_NAME(sv));
6600             Safefree(IoBOTTOM_NAME(sv));
6601             if ((const GV *)sv == PL_statgv)
6602                 PL_statgv = NULL;
6603             goto freescalar;
6604         case SVt_REGEXP:
6605             /* FIXME for plugins */
6606           freeregexp:
6607             pregfree2((REGEXP*) sv);
6608             goto freescalar;
6609         case SVt_PVCV:
6610         case SVt_PVFM:
6611             cv_undef(MUTABLE_CV(sv));
6612             /* If we're in a stash, we don't own a reference to it.
6613              * However it does have a back reference to us, which needs to
6614              * be cleared.  */
6615             if ((stash = CvSTASH(sv)))
6616                 sv_del_backref(MUTABLE_SV(stash), sv);
6617             goto freescalar;
6618         case SVt_PVHV:
6619             if (PL_last_swash_hv == (const HV *)sv) {
6620                 PL_last_swash_hv = NULL;
6621             }
6622             if (HvTOTALKEYS((HV*)sv) > 0) {
6623                 const HEK *hek;
6624                 /* this statement should match the one at the beginning of
6625                  * hv_undef_flags() */
6626                 if (   PL_phase != PERL_PHASE_DESTRUCT
6627                     && (hek = HvNAME_HEK((HV*)sv)))
6628                 {
6629                     if (PL_stashcache) {
6630                         DEBUG_o(Perl_deb(aTHX_
6631                             "sv_clear clearing PL_stashcache for '%" HEKf
6632                             "'\n",
6633                              HEKfARG(hek)));
6634                         (void)hv_deletehek(PL_stashcache,
6635                                            hek, G_DISCARD);
6636                     }
6637                     hv_name_set((HV*)sv, NULL, 0, 0);
6638                 }
6639
6640                 /* save old iter_sv in unused SvSTASH field */
6641                 assert(!SvOBJECT(sv));
6642                 SvSTASH(sv) = (HV*)iter_sv;
6643                 iter_sv = sv;
6644
6645                 /* save old hash_index in unused SvMAGIC field */
6646                 assert(!SvMAGICAL(sv));
6647                 assert(!SvMAGIC(sv));
6648                 ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index = hash_index;
6649                 hash_index = 0;
6650
6651                 next_sv = Perl_hfree_next_entry(aTHX_ (HV*)sv, &hash_index);
6652                 goto get_next_sv; /* process this new sv */
6653             }
6654             /* free empty hash */
6655             Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6656             assert(!HvARRAY((HV*)sv));
6657             break;
6658         case SVt_PVAV:
6659             {
6660                 AV* av = MUTABLE_AV(sv);
6661                 if (PL_comppad == av) {
6662                     PL_comppad = NULL;
6663                     PL_curpad = NULL;
6664                 }
6665                 if (AvREAL(av) && AvFILLp(av) > -1) {
6666                     next_sv = AvARRAY(av)[AvFILLp(av)--];
6667                     /* save old iter_sv in top-most slot of AV,
6668                      * and pray that it doesn't get wiped in the meantime */
6669                     AvARRAY(av)[AvMAX(av)] = iter_sv;
6670                     iter_sv = sv;
6671                     goto get_next_sv; /* process this new sv */
6672                 }
6673                 Safefree(AvALLOC(av));
6674             }
6675
6676             break;
6677         case SVt_PVLV:
6678             if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
6679                 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
6680                 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
6681                 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
6682             }
6683             else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV**  */
6684                 SvREFCNT_dec(LvTARG(sv));
6685             if (isREGEXP(sv)) goto freeregexp;
6686             /* FALLTHROUGH */
6687         case SVt_PVGV:
6688             if (isGV_with_GP(sv)) {
6689                 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
6690                    && HvENAME_get(stash))
6691                     mro_method_changed_in(stash);
6692                 gp_free(MUTABLE_GV(sv));
6693                 if (GvNAME_HEK(sv))
6694                     unshare_hek(GvNAME_HEK(sv));
6695                 /* If we're in a stash, we don't own a reference to it.
6696                  * However it does have a back reference to us, which
6697                  * needs to be cleared.  */
6698                 if ((stash = GvSTASH(sv)))
6699                         sv_del_backref(MUTABLE_SV(stash), sv);
6700             }
6701             /* FIXME. There are probably more unreferenced pointers to SVs
6702              * in the interpreter struct that we should check and tidy in
6703              * a similar fashion to this:  */
6704             /* See also S_sv_unglob, which does the same thing. */
6705             if ((const GV *)sv == PL_last_in_gv)
6706                 PL_last_in_gv = NULL;
6707             else if ((const GV *)sv == PL_statgv)
6708                 PL_statgv = NULL;
6709             else if ((const GV *)sv == PL_stderrgv)
6710                 PL_stderrgv = NULL;
6711             /* FALLTHROUGH */
6712         case SVt_PVMG:
6713         case SVt_PVNV:
6714         case SVt_PVIV:
6715         case SVt_INVLIST:
6716         case SVt_PV:
6717           freescalar:
6718             /* Don't bother with SvOOK_off(sv); as we're only going to
6719              * free it.  */
6720             if (SvOOK(sv)) {
6721                 STRLEN offset;
6722                 SvOOK_offset(sv, offset);
6723                 SvPV_set(sv, SvPVX_mutable(sv) - offset);
6724                 /* Don't even bother with turning off the OOK flag.  */
6725             }
6726             if (SvROK(sv)) {
6727             free_rv:
6728                 {
6729                     SV * const target = SvRV(sv);
6730                     if (SvWEAKREF(sv))
6731                         sv_del_backref(target, sv);
6732                     else
6733                         next_sv = target;
6734                 }
6735             }
6736 #ifdef PERL_ANY_COW
6737             else if (SvPVX_const(sv)
6738                      && !(SvTYPE(sv) == SVt_PVIO
6739                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6740             {
6741                 if (SvIsCOW(sv)) {
6742                     if (DEBUG_C_TEST) {
6743                         PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
6744                         sv_dump(sv);
6745                     }
6746                     if (SvLEN(sv)) {
6747                         if (CowREFCNT(sv)) {
6748                             sv_buf_to_rw(sv);
6749                             CowREFCNT(sv)--;
6750                             sv_buf_to_ro(sv);
6751                             SvLEN_set(sv, 0);
6752                         }
6753                     } else {
6754                         unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6755                     }
6756
6757                 }
6758                 if (SvLEN(sv)) {
6759                     Safefree(SvPVX_mutable(sv));
6760                 }
6761             }
6762 #else
6763             else if (SvPVX_const(sv) && SvLEN(sv)
6764                      && !(SvTYPE(sv) == SVt_PVIO
6765                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6766                 Safefree(SvPVX_mutable(sv));
6767             else if (SvPVX_const(sv) && SvIsCOW(sv)) {
6768                 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6769             }
6770 #endif
6771             break;
6772         case SVt_NV:
6773             break;
6774         }
6775
6776       free_body:
6777
6778         SvFLAGS(sv) &= SVf_BREAK;
6779         SvFLAGS(sv) |= SVTYPEMASK;
6780
6781         sv_type_details = bodies_by_type + type;
6782         if (sv_type_details->arena) {
6783             del_body(((char *)SvANY(sv) + sv_type_details->offset),
6784                      &PL_body_roots[type]);
6785         }
6786         else if (sv_type_details->body_size) {
6787             safefree(SvANY(sv));
6788         }
6789
6790       free_head:
6791         /* caller is responsible for freeing the head of the original sv */
6792         if (sv != orig_sv && !SvREFCNT(sv))
6793             del_SV(sv);
6794
6795         /* grab and free next sv, if any */
6796       get_next_sv:
6797         while (1) {
6798             sv = NULL;
6799             if (next_sv) {
6800                 sv = next_sv;
6801                 next_sv = NULL;
6802             }
6803             else if (!iter_sv) {
6804                 break;
6805             } else if (SvTYPE(iter_sv) == SVt_PVAV) {
6806                 AV *const av = (AV*)iter_sv;
6807                 if (AvFILLp(av) > -1) {
6808                     sv = AvARRAY(av)[AvFILLp(av)--];
6809                 }
6810                 else { /* no more elements of current AV to free */
6811                     sv = iter_sv;
6812                     type = SvTYPE(sv);
6813                     /* restore previous value, squirrelled away */
6814                     iter_sv = AvARRAY(av)[AvMAX(av)];
6815                     Safefree(AvALLOC(av));
6816                     goto free_body;
6817                 }
6818             } else if (SvTYPE(iter_sv) == SVt_PVHV) {
6819                 sv = Perl_hfree_next_entry(aTHX_ (HV*)iter_sv, &hash_index);
6820                 if (!sv && !HvTOTALKEYS((HV *)iter_sv)) {
6821                     /* no more elements of current HV to free */
6822                     sv = iter_sv;
6823                     type = SvTYPE(sv);
6824                     /* Restore previous values of iter_sv and hash_index,
6825                      * squirrelled away */
6826                     assert(!SvOBJECT(sv));
6827                     iter_sv = (SV*)SvSTASH(sv);
6828                     assert(!SvMAGICAL(sv));
6829                     hash_index = ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index;
6830 #ifdef DEBUGGING
6831                     /* perl -DA does not like rubbish in SvMAGIC. */
6832                     SvMAGIC_set(sv, 0);
6833 #endif
6834
6835                     /* free any remaining detritus from the hash struct */
6836                     Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6837                     assert(!HvARRAY((HV*)sv));
6838                     goto free_body;
6839                 }
6840             }
6841
6842             /* unrolled SvREFCNT_dec and sv_free2 follows: */
6843
6844             if (!sv)
6845                 continue;
6846             if (!SvREFCNT(sv)) {
6847                 sv_free(sv);
6848                 continue;
6849             }
6850             if (--(SvREFCNT(sv)))
6851                 continue;
6852 #ifdef DEBUGGING
6853             if (SvTEMP(sv)) {
6854                 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6855                          "Attempt to free temp prematurely: SV 0x%" UVxf
6856                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6857                 continue;
6858             }
6859 #endif
6860             if (SvIMMORTAL(sv)) {
6861                 /* make sure SvREFCNT(sv)==0 happens very seldom */
6862                 SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6863                 continue;
6864             }
6865             break;
6866         } /* while 1 */
6867
6868     } /* while sv */
6869 }
6870
6871 /* This routine curses the sv itself, not the object referenced by sv. So
6872    sv does not have to be ROK. */
6873
6874 static bool
6875 S_curse(pTHX_ SV * const sv, const bool check_refcnt) {
6876     PERL_ARGS_ASSERT_CURSE;
6877     assert(SvOBJECT(sv));
6878
6879     if (PL_defstash &&  /* Still have a symbol table? */
6880         SvDESTROYABLE(sv))
6881     {
6882         dSP;
6883         HV* stash;
6884         do {
6885           stash = SvSTASH(sv);
6886           assert(SvTYPE(stash) == SVt_PVHV);
6887           if (HvNAME(stash)) {
6888             CV* destructor = NULL;
6889             struct mro_meta *meta;
6890
6891             assert (SvOOK(stash));
6892
6893             DEBUG_o( Perl_deb(aTHX_ "Looking for DESTROY method for %s\n",
6894                          HvNAME(stash)) );
6895
6896             /* don't make this an initialization above the assert, since it needs
6897                an AUX structure */
6898             meta = HvMROMETA(stash);
6899             if (meta->destroy_gen && meta->destroy_gen == PL_sub_generation) {
6900                 destructor = meta->destroy;
6901                 DEBUG_o( Perl_deb(aTHX_ "Using cached DESTROY method %p for %s\n",
6902                              (void *)destructor, HvNAME(stash)) );
6903             }
6904             else {
6905                 bool autoload = FALSE;
6906                 GV *gv =
6907                     gv_fetchmeth_pvn(stash, S_destroy, S_destroy_len, -1, 0);
6908                 if (gv)
6909                     destructor = GvCV(gv);
6910                 if (!destructor) {
6911                     gv = gv_autoload_pvn(stash, S_destroy, S_destroy_len,
6912                                          GV_AUTOLOAD_ISMETHOD);
6913                     if (gv)
6914                         destructor = GvCV(gv);
6915                     if (destructor)
6916                         autoload = TRUE;
6917                 }
6918                 /* we don't cache AUTOLOAD for DESTROY, since this code
6919                    would then need to set $__PACKAGE__::AUTOLOAD, or the
6920                    equivalent for XS AUTOLOADs */
6921                 if (!autoload) {
6922                     meta->destroy_gen = PL_sub_generation;
6923                     meta->destroy = destructor;
6924
6925                     DEBUG_o( Perl_deb(aTHX_ "Set cached DESTROY method %p for %s\n",
6926                                       (void *)destructor, HvNAME(stash)) );
6927                 }
6928                 else {
6929                     DEBUG_o( Perl_deb(aTHX_ "Not caching AUTOLOAD for DESTROY method for %s\n",
6930                                       HvNAME(stash)) );
6931                 }
6932             }
6933             assert(!destructor || SvTYPE(destructor) == SVt_PVCV);
6934             if (destructor
6935                 /* A constant subroutine can have no side effects, so
6936                    don't bother calling it.  */
6937                 && !CvCONST(destructor)
6938                 /* Don't bother calling an empty destructor or one that
6939                    returns immediately. */
6940                 && (CvISXSUB(destructor)
6941                 || (CvSTART(destructor)
6942                     && (CvSTART(destructor)->op_next->op_type
6943                                         != OP_LEAVESUB)
6944                     && (CvSTART(destructor)->op_next->op_type
6945                                         != OP_PUSHMARK
6946                         || CvSTART(destructor)->op_next->op_next->op_type
6947                                         != OP_RETURN
6948                        )
6949                    ))
6950                )
6951             {
6952                 SV* const tmpref = newRV(sv);
6953                 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
6954                 ENTER;
6955                 PUSHSTACKi(PERLSI_DESTROY);
6956                 EXTEND(SP, 2);
6957                 PUSHMARK(SP);
6958                 PUSHs(tmpref);
6959                 PUTBACK;
6960                 call_sv(MUTABLE_SV(destructor),
6961                             G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
6962                 POPSTACK;
6963                 SPAGAIN;
6964                 LEAVE;
6965                 if(SvREFCNT(tmpref) < 2) {
6966                     /* tmpref is not kept alive! */
6967                     SvREFCNT(sv)--;
6968                     SvRV_set(tmpref, NULL);
6969                     SvROK_off(tmpref);
6970                 }
6971                 SvREFCNT_dec_NN(tmpref);
6972             }
6973           }
6974         } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
6975
6976
6977         if (check_refcnt && SvREFCNT(sv)) {
6978             if (PL_in_clean_objs)
6979                 Perl_croak(aTHX_
6980                   "DESTROY created new reference to dead object '%" HEKf "'",
6981                    HEKfARG(HvNAME_HEK(stash)));
6982             /* DESTROY gave object new lease on life */
6983             return FALSE;
6984         }
6985     }
6986
6987     if (SvOBJECT(sv)) {
6988         HV * const stash = SvSTASH(sv);
6989         /* Curse before freeing the stash, as freeing the stash could cause
6990            a recursive call into S_curse. */
6991         SvOBJECT_off(sv);       /* Curse the object. */
6992         SvSTASH_set(sv,0);      /* SvREFCNT_dec may try to read this */
6993         SvREFCNT_dec(stash); /* possibly of changed persuasion */
6994     }
6995     return TRUE;
6996 }
6997
6998 /*
6999 =for apidoc sv_newref
7000
7001 Increment an SV's reference count.  Use the C<SvREFCNT_inc()> wrapper
7002 instead.
7003
7004 =cut
7005 */
7006
7007 SV *
7008 Perl_sv_newref(pTHX_ SV *const sv)
7009 {
7010     PERL_UNUSED_CONTEXT;
7011     if (sv)
7012         (SvREFCNT(sv))++;
7013     return sv;
7014 }
7015
7016 /*
7017 =for apidoc sv_free
7018
7019 Decrement an SV's reference count, and if it drops to zero, call
7020 C<sv_clear> to invoke destructors and free up any memory used by
7021 the body; finally, deallocating the SV's head itself.
7022 Normally called via a wrapper macro C<SvREFCNT_dec>.
7023
7024 =cut
7025 */
7026
7027 void
7028 Perl_sv_free(pTHX_ SV *const sv)
7029 {
7030     SvREFCNT_dec(sv);
7031 }
7032
7033
7034 /* Private helper function for SvREFCNT_dec().
7035  * Called with rc set to original SvREFCNT(sv), where rc == 0 or 1 */
7036
7037 void
7038 Perl_sv_free2(pTHX_ SV *const sv, const U32 rc)
7039 {
7040     dVAR;
7041
7042     PERL_ARGS_ASSERT_SV_FREE2;
7043
7044     if (LIKELY( rc == 1 )) {
7045         /* normal case */
7046         SvREFCNT(sv) = 0;
7047
7048 #ifdef DEBUGGING
7049         if (SvTEMP(sv)) {
7050             Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
7051                              "Attempt to free temp prematurely: SV 0x%" UVxf
7052                              pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
7053             return;
7054         }
7055 #endif
7056         if (SvIMMORTAL(sv)) {
7057             /* make sure SvREFCNT(sv)==0 happens very seldom */
7058             SvREFCNT(sv) = SvREFCNT_IMMORTAL;
7059             return;
7060         }
7061         sv_clear(sv);
7062         if (! SvREFCNT(sv)) /* may have have been resurrected */
7063             del_SV(sv);
7064         return;
7065     }
7066
7067     /* handle exceptional cases */
7068
7069     assert(rc == 0);
7070
7071     if (SvFLAGS(sv) & SVf_BREAK)
7072         /* this SV's refcnt has been artificially decremented to
7073          * trigger cleanup */
7074         return;
7075     if (PL_in_clean_all) /* All is fair */
7076         return;
7077     if (SvIMMORTAL(sv)) {
7078         /* make sure SvREFCNT(sv)==0 happens very seldom */
7079         SvREFCNT(sv) = SvREFCNT_IMMORTAL;
7080         return;
7081     }
7082     if (ckWARN_d(WARN_INTERNAL)) {
7083 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
7084         Perl_dump_sv_child(aTHX_ sv);
7085 #else
7086     #ifdef DEBUG_LEAKING_SCALARS
7087         sv_dump(sv);
7088     #endif
7089 #ifdef DEBUG_LEAKING_SCALARS_ABORT
7090         if (PL_warnhook == PERL_WARNHOOK_FATAL
7091             || ckDEAD(packWARN(WARN_INTERNAL))) {
7092             /* Don't let Perl_warner cause us to escape our fate:  */
7093             abort();
7094         }
7095 #endif
7096         /* This may not return:  */
7097         Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
7098                     "Attempt to free unreferenced scalar: SV 0x%" UVxf
7099                     pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
7100 #endif
7101     }
7102 #ifdef DEBUG_LEAKING_SCALARS_ABORT
7103     abort();
7104 #endif
7105
7106 }
7107
7108
7109 /*
7110 =for apidoc sv_len
7111
7112 Returns the length of the string in the SV.  Handles magic and type
7113 coercion and sets the UTF8 flag appropriately.  See also C<L</SvCUR>>, which
7114 gives raw access to the C<xpv_cur> slot.
7115
7116 =cut
7117 */
7118
7119 STRLEN
7120 Perl_sv_len(pTHX_ SV *const sv)
7121 {
7122     STRLEN len;
7123
7124     if (!sv)
7125         return 0;
7126
7127     (void)SvPV_const(sv, len);
7128     return len;
7129 }
7130
7131 /*
7132 =for apidoc sv_len_utf8
7133
7134 Returns the number of characters in the string in an SV, counting wide
7135 UTF-8 bytes as a single character.  Handles magic and type coercion.
7136
7137 =cut
7138 */
7139
7140 /*
7141  * The length is cached in PERL_MAGIC_utf8, in the mg_len field.  Also the
7142  * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
7143  * (Note that the mg_len is not the length of the mg_ptr field.
7144  * This allows the cache to store the character length of the string without
7145  * needing to malloc() extra storage to attach to the mg_ptr.)
7146  *
7147  */
7148
7149 STRLEN
7150 Perl_sv_len_utf8(pTHX_ SV *const sv)
7151 {
7152     if (!sv)
7153         return 0;
7154
7155     SvGETMAGIC(sv);
7156     return sv_len_utf8_nomg(sv);
7157 }
7158
7159 STRLEN
7160 Perl_sv_len_utf8_nomg(pTHX_ SV * const sv)
7161 {
7162     STRLEN len;
7163     const U8 *s = (U8*)SvPV_nomg_const(sv, len);
7164
7165     PERL_ARGS_ASSERT_SV_LEN_UTF8_NOMG;
7166
7167     if (PL_utf8cache && SvUTF8(sv)) {
7168             STRLEN ulen;
7169             MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
7170
7171             if (mg && (mg->mg_len != -1 || mg->mg_ptr)) {
7172                 if (mg->mg_len != -1)
7173                     ulen = mg->mg_len;
7174                 else {
7175                     /* We can use the offset cache for a headstart.
7176                        The longer value is stored in the first pair.  */
7177                     STRLEN *cache = (STRLEN *) mg->mg_ptr;
7178
7179                     ulen = cache[0] + Perl_utf8_length(aTHX_ s + cache[1],
7180                                                        s + len);
7181                 }
7182                 
7183                 if (PL_utf8cache < 0) {
7184                     const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
7185                     assert_uft8_cache_coherent("sv_len_utf8", ulen, real, sv);
7186                 }
7187             }
7188             else {
7189                 ulen = Perl_utf8_length(aTHX_ s, s + len);
7190                 utf8_mg_len_cache_update(sv, &mg, ulen);
7191             }
7192             return ulen;
7193     }
7194     return SvUTF8(sv) ? Perl_utf8_length(aTHX_ s, s + len) : len;
7195 }
7196
7197 /* Walk forwards to find the byte corresponding to the passed in UTF-8
7198    offset.  */
7199 static STRLEN
7200 S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
7201                       STRLEN *const uoffset_p, bool *const at_end)
7202 {
7203     const U8 *s = start;
7204     STRLEN uoffset = *uoffset_p;
7205
7206     PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
7207
7208     while (s < send && uoffset) {
7209         --uoffset;
7210         s += UTF8SKIP(s);
7211     }
7212     if (s == send) {
7213         *at_end = TRUE;
7214     }
7215     else if (s > send) {
7216         *at_end = TRUE;
7217         /* This is the existing behaviour. Possibly it should be a croak, as
7218            it's actually a bounds error  */
7219         s = send;
7220     }
7221     *uoffset_p -= uoffset;
7222     return s - start;
7223 }
7224
7225 /* Given the length of the string in both bytes and UTF-8 characters, decide
7226    whether to walk forwards or backwards to find the byte corresponding to
7227    the passed in UTF-8 offset.  */
7228 static STRLEN
7229 S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
7230                     STRLEN uoffset, const STRLEN uend)
7231 {
7232     STRLEN backw = uend - uoffset;
7233
7234     PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
7235
7236     if (uoffset < 2 * backw) {
7237         /* The assumption is that going forwards is twice the speed of going
7238            forward (that's where the 2 * backw comes from).
7239            (The real figure of course depends on the UTF-8 data.)  */
7240         const U8 *s = start;
7241
7242         while (s < send && uoffset--)
7243             s += UTF8SKIP(s);
7244         assert (s <= send);
7245         if (s > send)
7246             s = send;
7247         return s - start;
7248     }
7249
7250     while (backw--) {
7251         send--;
7252         while (UTF8_IS_CONTINUATION(*send))
7253             send--;
7254     }
7255     return send - start;
7256 }
7257
7258 /* For the string representation of the given scalar, find the byte
7259    corresponding to the passed in UTF-8 offset.  uoffset0 and boffset0
7260    give another position in the string, *before* the sought offset, which
7261    (which is always true, as 0, 0 is a valid pair of positions), which should
7262    help reduce the amount of linear searching.
7263    If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
7264    will be used to reduce the amount of linear searching. The cache will be
7265    created if necessary, and the found value offered to it for update.  */
7266 static STRLEN
7267 S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
7268                     const U8 *const send, STRLEN uoffset,
7269                     STRLEN uoffset0, STRLEN boffset0)
7270 {
7271     STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy.  */
7272     bool found = FALSE;
7273     bool at_end = FALSE;
7274
7275     PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
7276
7277     assert (uoffset >= uoffset0);
7278
7279     if (!uoffset)
7280         return 0;
7281
7282     if (!SvREADONLY(sv) && !SvGMAGICAL(sv) && SvPOK(sv)
7283         && PL_utf8cache
7284         && (*mgp || (SvTYPE(sv) >= SVt_PVMG &&
7285                      (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) {
7286         if ((*mgp)->mg_ptr) {
7287             STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
7288             if (cache[0] == uoffset) {
7289                 /* An exact match. */
7290                 return cache[1];
7291             }
7292             if (cache[2] == uoffset) {
7293                 /* An exact match. */
7294                 return cache[3];
7295             }
7296
7297             if (cache[0] < uoffset) {
7298                 /* The cache already knows part of the way.   */
7299                 if (cache[0] > uoffset0) {
7300                     /* The cache knows more than the passed in pair  */
7301                     uoffset0 = cache[0];
7302                     boffset0 = cache[1];
7303                 }
7304                 if ((*mgp)->mg_len != -1) {
7305                     /* And we know the end too.  */
7306                     boffset = boffset0
7307                         + sv_pos_u2b_midway(start + boffset0, send,
7308                                               uoffset - uoffset0,
7309                                               (*mgp)->mg_len - uoffset0);
7310                 } else {
7311                     uoffset -= uoffset0;
7312                     boffset = boffset0
7313                         + sv_pos_u2b_forwards(start + boffset0,
7314                                               send, &uoffset, &at_end);
7315                     uoffset += uoffset0;
7316                 }
7317             }
7318             else if (cache[2] < uoffset) {
7319                 /* We're between the two cache entries.  */
7320                 if (cache[2] > uoffset0) {
7321                     /* and the cache knows more than the passed in pair  */
7322                     uoffset0 = cache[2];
7323                     boffset0 = cache[3];
7324                 }
7325
7326                 boffset = boffset0
7327                     + sv_pos_u2b_midway(start + boffset0,
7328                                           start + cache[1],
7329                                           uoffset - uoffset0,
7330                                           cache[0] - uoffset0);
7331             } else {
7332                 boffset = boffset0
7333                     + sv_pos_u2b_midway(start + boffset0,
7334                                           start + cache[3],
7335                                           uoffset - uoffset0,
7336                                           cache[2] - uoffset0);
7337             }
7338             found = TRUE;
7339         }
7340         else if ((*mgp)->mg_len != -1) {
7341             /* If we can take advantage of a passed in offset, do so.  */
7342             /* In fact, offset0 is either 0, or less than offset, so don't
7343                need to worry about the other possibility.  */
7344             boffset = boffset0
7345                 + sv_pos_u2b_midway(start + boffset0, send,
7346                                       uoffset - uoffset0,
7347                                       (*mgp)->mg_len - uoffset0);
7348             found = TRUE;
7349         }
7350     }
7351
7352     if (!found || PL_utf8cache < 0) {
7353         STRLEN real_boffset;
7354         uoffset -= uoffset0;
7355         real_boffset = boffset0 + sv_pos_u2b_forwards(start + boffset0,
7356                                                       send, &uoffset, &at_end);
7357         uoffset += uoffset0;
7358
7359         if (found && PL_utf8cache < 0)
7360             assert_uft8_cache_coherent("sv_pos_u2b_cache", boffset,
7361                                        real_boffset, sv);
7362         boffset = real_boffset;
7363     }
7364
7365     if (PL_utf8cache && !SvGMAGICAL(sv) && SvPOK(sv)) {
7366         if (at_end)
7367             utf8_mg_len_cache_update(sv, mgp, uoffset);
7368         else
7369             utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
7370     }
7371     return boffset;
7372 }
7373
7374
7375 /*
7376 =for apidoc sv_pos_u2b_flags
7377
7378 Converts the offset from a count of UTF-8 chars from
7379 the start of the string, to a count of the equivalent number of bytes; if
7380 C<lenp> is non-zero, it does the same to C<lenp>, but this time starting from
7381 C<offset>, rather than from the start
7382 of the string.  Handles type coercion.
7383 C<flags> is passed to C<SvPV_flags>, and usually should be
7384 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7385
7386 =cut
7387 */
7388
7389 /*
7390  * sv_pos_u2b_flags() uses, like sv_pos_b2u(), the mg_ptr of the potential
7391  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7392  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7393  *
7394  */
7395
7396 STRLEN
7397 Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp,
7398                       U32 flags)
7399 {
7400     const U8 *start;
7401     STRLEN len;
7402     STRLEN boffset;
7403
7404     PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS;
7405
7406     start = (U8*)SvPV_flags(sv, len, flags);
7407     if (len) {
7408         const U8 * const send = start + len;
7409         MAGIC *mg = NULL;
7410         boffset = sv_pos_u2b_cached(sv, &mg, start, send, uoffset, 0, 0);
7411
7412         if (lenp
7413             && *lenp /* don't bother doing work for 0, as its bytes equivalent
7414                         is 0, and *lenp is already set to that.  */) {
7415             /* Convert the relative offset to absolute.  */
7416             const STRLEN uoffset2 = uoffset + *lenp;
7417             const STRLEN boffset2
7418                 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
7419                                       uoffset, boffset) - boffset;
7420
7421             *lenp = boffset2;
7422         }
7423     } else {
7424         if (lenp)
7425             *lenp = 0;
7426         boffset = 0;
7427     }
7428
7429     return boffset;
7430 }
7431
7432 /*
7433 =for apidoc sv_pos_u2b
7434
7435 Converts the value pointed to by C<offsetp> from a count of UTF-8 chars from
7436 the start of the string, to a count of the equivalent number of bytes; if
7437 C<lenp> is non-zero, it does the same to C<lenp>, but this time starting from
7438 the offset, rather than from the start of the string.  Handles magic and
7439 type coercion.
7440
7441 Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
7442 than 2Gb.
7443
7444 =cut
7445 */
7446
7447 /*
7448  * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
7449  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7450  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7451  *
7452  */
7453
7454 /* This function is subject to size and sign problems */
7455
7456 void
7457 Perl_sv_pos_u2b(pTHX_ SV *const sv, I32 *const offsetp, I32 *const lenp)
7458 {
7459     PERL_ARGS_ASSERT_SV_POS_U2B;
7460
7461     if (lenp) {
7462         STRLEN ulen = (STRLEN)*lenp;
7463         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, &ulen,
7464                                          SV_GMAGIC|SV_CONST_RETURN);
7465         *lenp = (I32)ulen;
7466     } else {
7467         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, NULL,
7468                                          SV_GMAGIC|SV_CONST_RETURN);
7469     }
7470 }
7471
7472 static void
7473 S_utf8_mg_len_cache_update(pTHX_ SV *const sv, MAGIC **const mgp,
7474                            const STRLEN ulen)
7475 {
7476     PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE;
7477     if (SvREADONLY(sv) || SvGMAGICAL(sv) || !SvPOK(sv))
7478         return;
7479
7480     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7481                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7482         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, &PL_vtbl_utf8, 0, 0);
7483     }
7484     assert(*mgp);
7485
7486     (*mgp)->mg_len = ulen;
7487 }
7488
7489 /* Create and update the UTF8 magic offset cache, with the proffered utf8/
7490    byte length pairing. The (byte) length of the total SV is passed in too,
7491    as blen, because for some (more esoteric) SVs, the call to SvPV_const()
7492    may not have updated SvCUR, so we can't rely on reading it directly.
7493
7494    The proffered utf8/byte length pairing isn't used if the cache already has
7495    two pairs, and swapping either for the proffered pair would increase the
7496    RMS of the intervals between known byte offsets.
7497
7498    The cache itself consists of 4 STRLEN values
7499    0: larger UTF-8 offset
7500    1: corresponding byte offset
7501    2: smaller UTF-8 offset
7502    3: corresponding byte offset
7503
7504    Unused cache pairs have the value 0, 0.
7505    Keeping the cache "backwards" means that the invariant of
7506    cache[0] >= cache[2] is maintained even with empty slots, which means that
7507    the code that uses it doesn't need to worry if only 1 entry has actually
7508    been set to non-zero.  It also makes the "position beyond the end of the
7509    cache" logic much simpler, as the first slot is always the one to start
7510    from.   
7511 */
7512 static void
7513 S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
7514                            const STRLEN utf8, const STRLEN blen)
7515 {
7516     STRLEN *cache;
7517
7518     PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
7519
7520     if (SvREADONLY(sv))
7521         return;
7522
7523     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7524                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7525         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
7526                            0);
7527         (*mgp)->mg_len = -1;
7528     }
7529     assert(*mgp);
7530
7531     if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
7532         Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
7533         (*mgp)->mg_ptr = (char *) cache;
7534     }
7535     assert(cache);
7536
7537     if (PL_utf8cache < 0 && SvPOKp(sv)) {
7538         /* SvPOKp() because, if sv is a reference, then SvPVX() is actually
7539            a pointer.  Note that we no longer cache utf8 offsets on refer-
7540            ences, but this check is still a good idea, for robustness.  */
7541         const U8 *start = (const U8 *) SvPVX_const(sv);
7542         const STRLEN realutf8 = utf8_length(start, start + byte);
7543
7544         assert_uft8_cache_coherent("utf8_mg_pos_cache_update", utf8, realutf8,
7545                                    sv);
7546     }
7547
7548     /* Cache is held with the later position first, to simplify the code
7549        that deals with unbounded ends.  */
7550        
7551     ASSERT_UTF8_CACHE(cache);
7552     if (cache[1] == 0) {
7553         /* Cache is totally empty  */
7554         cache[0] = utf8;
7555         cache[1] = byte;
7556     } else if (cache[3] == 0) {
7557         if (byte > cache[1]) {
7558             /* New one is larger, so goes first.  */
7559             cache[2] = cache[0];
7560             cache[3] = cache[1];
7561             cache[0] = utf8;
7562             cache[1] = byte;
7563         } else {
7564             cache[2] = utf8;
7565             cache[3] = byte;
7566         }
7567     } else {
7568 /* float casts necessary? XXX */
7569 #define THREEWAY_SQUARE(a,b,c,d) \
7570             ((float)((d) - (c))) * ((float)((d) - (c))) \
7571             + ((float)((c) - (b))) * ((float)((c) - (b))) \
7572                + ((float)((b) - (a))) * ((float)((b) - (a)))
7573
7574         /* Cache has 2 slots in use, and we know three potential pairs.
7575            Keep the two that give the lowest RMS distance. Do the
7576            calculation in bytes simply because we always know the byte
7577            length.  squareroot has the same ordering as the positive value,
7578            so don't bother with the actual square root.  */
7579         if (byte > cache[1]) {
7580             /* New position is after the existing pair of pairs.  */
7581             const float keep_earlier
7582                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
7583             const float keep_later
7584                 = THREEWAY_SQUARE(0, cache[1], byte, blen);
7585
7586             if (keep_later < keep_earlier) {
7587                 cache[2] = cache[0];
7588                 cache[3] = cache[1];
7589             }
7590             cache[0] = utf8;
7591             cache[1] = byte;
7592         }
7593         else {
7594             const float keep_later = THREEWAY_SQUARE(0, byte, cache[1], blen);
7595             float b, c, keep_earlier;
7596             if (byte > cache[3]) {
7597                 /* New position is between the existing pair of pairs.  */
7598                 b = (float)cache[3];
7599                 c = (float)byte;
7600             } else {
7601                 /* New position is before the existing pair of pairs.  */
7602                 b = (float)byte;
7603                 c = (float)cache[3];
7604             }
7605             keep_earlier = THREEWAY_SQUARE(0, b, c, blen);
7606             if (byte > cache[3]) {
7607                 if (keep_later < keep_earlier) {
7608                     cache[2] = utf8;
7609                     cache[3] = byte;
7610                 }
7611                 else {
7612                     cache[0] = utf8;
7613                     cache[1] = byte;
7614                 }
7615             }
7616             else {
7617                 if (! (keep_later < keep_earlier)) {
7618                     cache[0] = cache[2];
7619                     cache[1] = cache[3];
7620                 }
7621                 cache[2] = utf8;
7622                 cache[3] = byte;
7623             }
7624         }
7625     }
7626     ASSERT_UTF8_CACHE(cache);
7627 }
7628
7629 /* We already know all of the way, now we may be able to walk back.  The same
7630    assumption is made as in S_sv_pos_u2b_midway(), namely that walking
7631    backward is half the speed of walking forward. */
7632 static STRLEN
7633 S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
7634                     const U8 *end, STRLEN endu)
7635 {
7636     const STRLEN forw = target - s;
7637     STRLEN backw = end - target;
7638
7639     PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
7640
7641     if (forw < 2 * backw) {
7642         return utf8_length(s, target);
7643     }
7644
7645     while (end > target) {
7646         end--;
7647         while (UTF8_IS_CONTINUATION(*end)) {
7648             end--;
7649         }
7650         endu--;
7651     }
7652     return endu;
7653 }
7654
7655 /*
7656 =for apidoc sv_pos_b2u_flags
7657
7658 Converts C<offset> from a count of bytes from the start of the string, to
7659 a count of the equivalent number of UTF-8 chars.  Handles type coercion.
7660 C<flags> is passed to C<SvPV_flags>, and usually should be
7661 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7662
7663 =cut
7664 */
7665
7666 /*
7667  * sv_pos_b2u_flags() uses, like sv_pos_u2b_flags(), the mg_ptr of the
7668  * potential PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8
7669  * and byte offsets.
7670  *
7671  */
7672 STRLEN
7673 Perl_sv_pos_b2u_flags(pTHX_ SV *const sv, STRLEN const offset, U32 flags)
7674 {
7675     const U8* s;
7676     STRLEN len = 0; /* Actually always set, but let's keep gcc happy.  */
7677     STRLEN blen;
7678     MAGIC* mg = NULL;
7679     const U8* send;
7680     bool found = FALSE;
7681
7682     PERL_ARGS_ASSERT_SV_POS_B2U_FLAGS;
7683
7684     s = (const U8*)SvPV_flags(sv, blen, flags);
7685
7686     if (blen < offset)
7687         Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset, blen=%" UVuf
7688                    ", byte=%" UVuf, (UV)blen, (UV)offset);
7689
7690     send = s + offset;
7691
7692     if (!SvREADONLY(sv)
7693         && PL_utf8cache
7694         && SvTYPE(sv) >= SVt_PVMG
7695         && (mg = mg_find(sv, PERL_MAGIC_utf8)))
7696     {
7697         if (mg->mg_ptr) {
7698             STRLEN * const cache = (STRLEN *) mg->mg_ptr;
7699             if (cache[1] == offset) {
7700                 /* An exact match. */
7701                 return cache[0];
7702             }
7703             if (cache[3] == offset) {
7704                 /* An exact match. */
7705                 return cache[2];
7706             }
7707
7708             if (cache[1] < offset) {
7709                 /* We already know part of the way. */
7710                 if (mg->mg_len != -1) {
7711                     /* Actually, we know the end too.  */
7712                     len = cache[0]
7713                         + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
7714                                               s + blen, mg->mg_len - cache[0]);
7715                 } else {
7716                     len = cache[0] + utf8_length(s + cache[1], send);
7717                 }
7718             }
7719             else if (cache[3] < offset) {
7720                 /* We're between the two cached pairs, so we do the calculation
7721                    offset by the byte/utf-8 positions for the earlier pair,
7722                    then add the utf-8 characters from the string start to
7723                    there.  */
7724                 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
7725                                           s + cache[1], cache[0] - cache[2])
7726                     + cache[2];
7727
7728             }
7729             else { /* cache[3] > offset */
7730                 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
7731                                           cache[2]);
7732
7733             }
7734             ASSERT_UTF8_CACHE(cache);
7735             found = TRUE;
7736         } else if (mg->mg_len != -1) {
7737             len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
7738             found = TRUE;
7739         }
7740     }
7741     if (!found || PL_utf8cache < 0) {
7742         const STRLEN real_len = utf8_length(s, send);
7743
7744         if (found && PL_utf8cache < 0)
7745             assert_uft8_cache_coherent("sv_pos_b2u", len, real_len, sv);
7746         len = real_len;
7747     }
7748
7749     if (PL_utf8cache) {
7750         if (blen == offset)
7751             utf8_mg_len_cache_update(sv, &mg, len);
7752         else
7753             utf8_mg_pos_cache_update(sv, &mg, offset, len, blen);
7754     }
7755
7756     return len;
7757 }
7758
7759 /*
7760 =for apidoc sv_pos_b2u
7761
7762 Converts the value pointed to by C<offsetp> from a count of bytes from the
7763 start of the string, to a count of the equivalent number of UTF-8 chars.
7764 Handles magic and type coercion.
7765
7766 Use C<sv_pos_b2u_flags> in preference, which correctly handles strings
7767 longer than 2Gb.
7768
7769 =cut
7770 */
7771
7772 /*
7773  * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
7774  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7775  * byte offsets.
7776  *
7777  */
7778 void
7779 Perl_sv_pos_b2u(pTHX_ SV *const sv, I32 *const offsetp)
7780 {
7781     PERL_ARGS_ASSERT_SV_POS_B2U;
7782
7783     if (!sv)
7784         return;
7785
7786     *offsetp = (I32)sv_pos_b2u_flags(sv, (STRLEN)*offsetp,
7787                                      SV_GMAGIC|SV_CONST_RETURN);
7788 }
7789
7790 static void
7791 S_assert_uft8_cache_coherent(pTHX_ const char *const func, STRLEN from_cache,
7792                              STRLEN real, SV *const sv)
7793 {
7794     PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT;
7795
7796     /* As this is debugging only code, save space by keeping this test here,
7797        rather than inlining it in all the callers.  */
7798     if (from_cache == real)
7799         return;
7800
7801     /* Need to turn the assertions off otherwise we may recurse infinitely
7802        while printing error messages.  */
7803     SAVEI8(PL_utf8cache);
7804     PL_utf8cache = 0;
7805     Perl_croak(aTHX_ "panic: %s cache %" UVuf " real %" UVuf " for %" SVf,
7806                func, (UV) from_cache, (UV) real, SVfARG(sv));
7807 }
7808
7809 /*
7810 =for apidoc sv_eq
7811
7812 Returns a boolean indicating whether the strings in the two SVs are
7813 identical.  Is UTF-8 and S<C<'use bytes'>> aware, handles get magic, and will
7814 coerce its args to strings if necessary.
7815
7816 =for apidoc sv_eq_flags
7817
7818 Returns a boolean indicating whether the strings in the two SVs are
7819 identical.  Is UTF-8 and S<C<'use bytes'>> aware and coerces its args to strings
7820 if necessary.  If the flags has the C<SV_GMAGIC> bit set, it handles get-magic, too.
7821
7822 =cut
7823 */
7824
7825 I32
7826 Perl_sv_eq_flags(pTHX_ SV *sv1, SV *sv2, const U32 flags)
7827 {
7828     const char *pv1;
7829     STRLEN cur1;
7830     const char *pv2;
7831     STRLEN cur2;
7832     I32  eq     = 0;
7833     SV* svrecode = NULL;
7834
7835     if (!sv1) {
7836         pv1 = "";
7837         cur1 = 0;
7838     }
7839     else {
7840         /* if pv1 and pv2 are the same, second SvPV_const call may
7841          * invalidate pv1 (if we are handling magic), so we may need to
7842          * make a copy */
7843         if (sv1 == sv2 && flags & SV_GMAGIC
7844          && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
7845             pv1 = SvPV_const(sv1, cur1);
7846             sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
7847         }
7848         pv1 = SvPV_flags_const(sv1, cur1, flags);
7849     }
7850
7851     if (!sv2){
7852         pv2 = "";
7853         cur2 = 0;
7854     }
7855     else
7856         pv2 = SvPV_flags_const(sv2, cur2, flags);
7857
7858     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7859         /* Differing utf8ness.  */
7860         if (SvUTF8(sv1)) {
7861                   /* sv1 is the UTF-8 one  */
7862                   return bytes_cmp_utf8((const U8*)pv2, cur2,
7863                                         (const U8*)pv1, cur1) == 0;
7864         }
7865         else {
7866                   /* sv2 is the UTF-8 one  */
7867                   return bytes_cmp_utf8((const U8*)pv1, cur1,
7868                                         (const U8*)pv2, cur2) == 0;
7869         }
7870     }
7871
7872     if (cur1 == cur2)
7873         eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
7874         
7875     SvREFCNT_dec(svrecode);
7876
7877     return eq;
7878 }
7879
7880 /*
7881 =for apidoc sv_cmp
7882
7883 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7884 string in C<sv1> is less than, equal to, or greater than the string in
7885 C<sv2>.  Is UTF-8 and S<C<'use bytes'>> aware, handles get magic, and will
7886 coerce its args to strings if necessary.  See also C<L</sv_cmp_locale>>.
7887
7888 =for apidoc sv_cmp_flags
7889
7890 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7891 string in C<sv1> is less than, equal to, or greater than the string in
7892 C<sv2>.  Is UTF-8 and S<C<'use bytes'>> aware and will coerce its args to strings
7893 if necessary.  If the flags has the C<SV_GMAGIC> bit set, it handles get magic.  See
7894 also C<L</sv_cmp_locale_flags>>.
7895
7896 =cut
7897 */
7898
7899 I32
7900 Perl_sv_cmp(pTHX_ SV *const sv1, SV *const sv2)
7901 {
7902     return sv_cmp_flags(sv1, sv2, SV_GMAGIC);
7903 }
7904
7905 I32
7906 Perl_sv_cmp_flags(pTHX_ SV *const sv1, SV *const sv2,
7907                   const U32 flags)
7908 {
7909     STRLEN cur1, cur2;
7910     const char *pv1, *pv2;
7911     I32  cmp;
7912     SV *svrecode = NULL;
7913
7914     if (!sv1) {
7915         pv1 = "";
7916         cur1 = 0;
7917     }
7918     else
7919         pv1 = SvPV_flags_const(sv1, cur1, flags);
7920
7921     if (!sv2) {
7922         pv2 = "";
7923         cur2 = 0;
7924     }
7925     else
7926         pv2 = SvPV_flags_const(sv2, cur2, flags);
7927
7928     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7929         /* Differing utf8ness.  */
7930         if (SvUTF8(sv1)) {
7931                 const int retval = -bytes_cmp_utf8((const U8*)pv2, cur2,
7932                                                    (const U8*)pv1, cur1);
7933                 return retval ? retval < 0 ? -1 : +1 : 0;
7934         }
7935         else {
7936                 const int retval = bytes_cmp_utf8((const U8*)pv1, cur1,
7937                                                   (const U8*)pv2, cur2);
7938                 return retval ? retval < 0 ? -1 : +1 : 0;
7939         }
7940     }
7941
7942     /* Here, if both are non-NULL, then they have the same UTF8ness. */
7943
7944     if (!cur1) {
7945         cmp = cur2 ? -1 : 0;
7946     } else if (!cur2) {
7947         cmp = 1;
7948     } else {
7949         STRLEN shortest_len = cur1 < cur2 ? cur1 : cur2;
7950
7951 #ifdef EBCDIC
7952         if (! DO_UTF8(sv1)) {
7953 #endif
7954             const I32 retval = memcmp((const void*)pv1,
7955                                       (const void*)pv2,
7956                                       shortest_len);
7957             if (retval) {
7958                 cmp = retval < 0 ? -1 : 1;
7959             } else if (cur1 == cur2) {
7960                 cmp = 0;
7961             } else {
7962                 cmp = cur1 < cur2 ? -1 : 1;
7963             }
7964 #ifdef EBCDIC
7965         }
7966         else {  /* Both are to be treated as UTF-EBCDIC */
7967
7968             /* EBCDIC UTF-8 is complicated by the fact that it is based on I8
7969              * which remaps code points 0-255.  We therefore generally have to
7970              * unmap back to the original values to get an accurate comparison.
7971              * But we don't have to do that for UTF-8 invariants, as by
7972              * definition, they aren't remapped, nor do we have to do it for
7973              * above-latin1 code points, as they also aren't remapped.  (This
7974              * code also works on ASCII platforms, but the memcmp() above is
7975              * much faster). */
7976
7977             const char *e = pv1 + shortest_len;
7978
7979             /* Find the first bytes that differ between the two strings */
7980             while (pv1 < e && *pv1 == *pv2) {
7981                 pv1++;
7982                 pv2++;
7983             }
7984
7985
7986             if (pv1 == e) { /* Are the same all the way to the end */
7987                 if (cur1 == cur2) {
7988                     cmp = 0;
7989                 } else {
7990                     cmp = cur1 < cur2 ? -1 : 1;
7991                 }
7992             }
7993             else   /* Here *pv1 and *pv2 are not equal, but all bytes earlier
7994                     * in the strings were.  The current bytes may or may not be
7995                     * at the beginning of a character.  But neither or both are
7996                     * (or else earlier bytes would have been different).  And
7997                     * if we are in the middle of a character, the two
7998                     * characters are comprised of the same number of bytes
7999                     * (because in this case the start bytes are the same, and
8000                     * the start bytes encode the character's length). */
8001                  if (UTF8_IS_INVARIANT(*pv1))
8002             {
8003                 /* If both are invariants; can just compare directly */
8004                 if (UTF8_IS_INVARIANT(*pv2)) {
8005                     cmp = ((U8) *pv1 < (U8) *pv2) ? -1 : 1;
8006                 }
8007                 else   /* Since *pv1 is invariant, it is the whole character,
8008                           which means it is at the beginning of a character.
8009                           That means pv2 is also at the beginning of a
8010                           character (see earlier comment).  Since it isn't
8011                           invariant, it must be a start byte.  If it starts a
8012                           character whose code point is above 255, that
8013                           character is greater than any single-byte char, which
8014                           *pv1 is */
8015                       if (UTF8_IS_ABOVE_LATIN1_START(*pv2))
8016                 {
8017                     cmp = -1;
8018                 }
8019                 else {
8020                     /* Here, pv2 points to a character composed of 2 bytes
8021                      * whose code point is < 256.  Get its code point and
8022                      * compare with *pv1 */
8023                     cmp = ((U8) *pv1 < EIGHT_BIT_UTF8_TO_NATIVE(*pv2, *(pv2 + 1)))
8024                            ?  -1
8025                            : 1;
8026                 }
8027             }
8028             else   /* The code point starting at pv1 isn't a single byte */
8029                  if (UTF8_IS_INVARIANT(*pv2))
8030             {
8031                 /* But here, the code point starting at *pv2 is a single byte,
8032                  * and so *pv1 must begin a character, hence is a start byte.
8033                  * If that character is above 255, it is larger than any
8034                  * single-byte char, which *pv2 is */
8035                 if (UTF8_IS_ABOVE_LATIN1_START(*pv1)) {
8036                     cmp = 1;
8037                 }
8038                 else {
8039                     /* Here, pv1 points to a character composed of 2 bytes
8040                      * whose code point is < 256.  Get its code point and
8041                      * compare with the single byte character *pv2 */
8042                     cmp = (EIGHT_BIT_UTF8_TO_NATIVE(*pv1, *(pv1 + 1)) < (U8) *pv2)
8043                           ?  -1
8044                           : 1;
8045                 }
8046             }
8047             else   /* Here, we've ruled out either *pv1 and *pv2 being
8048                       invariant.  That means both are part of variants, but not
8049                       necessarily at the start of a character */
8050                  if (   UTF8_IS_ABOVE_LATIN1_START(*pv1)
8051                      || UTF8_IS_ABOVE_LATIN1_START(*pv2))
8052             {
8053                 /* Here, at least one is the start of a character, which means
8054                  * the other is also a start byte.  And the code point of at
8055                  * least one of the characters is above 255.  It is a
8056                  * characteristic of UTF-EBCDIC that all start bytes for
8057                  * above-latin1 code points are well behaved as far as code
8058                  * point comparisons go, and all are larger than all other
8059                  * start bytes, so the comparison with those is also well
8060                  * behaved */
8061                 cmp = ((U8) *pv1 < (U8) *pv2) ? -1 : 1;
8062             }
8063             else {
8064                 /* Here both *pv1 and *pv2 are part of variant characters.
8065                  * They could be both continuations, or both start characters.
8066                  * (One or both could even be an illegal start character (for
8067                  * an overlong) which for the purposes of sorting we treat as
8068                  * legal. */
8069                 if (UTF8_IS_CONTINUATION(*pv1)) {
8070
8071                     /* If they are continuations for code points above 255,
8072                      * then comparing the current byte is sufficient, as there
8073                      * is no remapping of these and so the comparison is
8074                      * well-behaved.   We determine if they are such
8075                      * continuations by looking at the preceding byte.  It
8076                      * could be a start byte, from which we can tell if it is
8077                      * for an above 255 code point.  Or it could be a
8078                      * continuation, which means the character occupies at
8079                      * least 3 bytes, so must be above 255.  */
8080                     if (   UTF8_IS_CONTINUATION(*(pv2 - 1))
8081                         || UTF8_IS_ABOVE_LATIN1_START(*(pv2 -1)))
8082                     {
8083                         cmp = ((U8) *pv1 < (U8) *pv2) ? -1 : 1;
8084                         goto cmp_done;
8085                     }
8086
8087                     /* Here, the continuations are for code points below 256;
8088                      * back up one to get to the start byte */
8089                     pv1--;
8090                     pv2--;
8091                 }
8092
8093                 /* We need to get the actual native code point of each of these
8094                  * variants in order to compare them */
8095                 cmp =  (  EIGHT_BIT_UTF8_TO_NATIVE(*pv1, *(pv1 + 1))
8096                         < EIGHT_BIT_UTF8_TO_NATIVE(*pv2, *(pv2 + 1)))
8097                         ? -1
8098                         : 1;
8099             }
8100         }
8101       cmp_done: ;
8102 #endif
8103     }
8104
8105     SvREFCNT_dec(svrecode);
8106
8107     return cmp;
8108 }
8109
8110 /*
8111 =for apidoc sv_cmp_locale
8112
8113 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
8114 S<C<'use bytes'>> aware, handles get magic, and will coerce its args to strings
8115 if necessary.  See also C<L</sv_cmp>>.
8116
8117 =for apidoc sv_cmp_locale_flags
8118
8119 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
8120 S<C<'use bytes'>> aware and will coerce its args to strings if necessary.  If
8121 the flags contain C<SV_GMAGIC>, it handles get magic.  See also
8122 C<L</sv_cmp_flags>>.
8123
8124 =cut
8125 */
8126
8127 I32
8128 Perl_sv_cmp_locale(pTHX_ SV *const sv1, SV *const sv2)
8129 {
8130     return sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC);
8131 }
8132
8133 I32
8134 Perl_sv_cmp_locale_flags(pTHX_ SV *const sv1, SV *const sv2,
8135                          const U32 flags)
8136 {
8137 #ifdef USE_LOCALE_COLLATE
8138
8139     char *pv1, *pv2;
8140     STRLEN len1, len2;
8141     I32 retval;
8142
8143     if (PL_collation_standard)
8144         goto raw_compare;
8145
8146     len1 = len2 = 0;
8147
8148     /* Revert to using raw compare if both operands exist, but either one
8149      * doesn't transform properly for collation */
8150     if (sv1 && sv2) {
8151         pv1 = sv_collxfrm_flags(sv1, &len1, flags);
8152         if (! pv1) {
8153             goto raw_compare;
8154         }
8155         pv2 = sv_collxfrm_flags(sv2, &len2, flags);
8156         if (! pv2) {
8157             goto raw_compare;
8158         }
8159     }
8160     else {
8161         pv1 = sv1 ? sv_collxfrm_flags(sv1, &len1, flags) : (char *) NULL;
8162         pv2 = sv2 ? sv_collxfrm_flags(sv2, &len2, flags) : (char *) NULL;
8163     }
8164
8165     if (!pv1 || !len1) {
8166         if (pv2 && len2)
8167             return -1;
8168         else
8169             goto raw_compare;
8170     }
8171     else {
8172         if (!pv2 || !len2)
8173             return 1;
8174     }
8175
8176     retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
8177
8178     if (retval)
8179         return retval < 0 ? -1 : 1;
8180
8181     /*
8182      * When the result of collation is equality, that doesn't mean
8183      * that there are no differences -- some locales exclude some
8184      * characters from consideration.  So to avoid false equalities,
8185      * we use the raw string as a tiebreaker.
8186      */
8187
8188   raw_compare:
8189     /* FALLTHROUGH */
8190
8191 #else
8192     PERL_UNUSED_ARG(flags);
8193 #endif /* USE_LOCALE_COLLATE */
8194
8195     return sv_cmp(sv1, sv2);
8196 }
8197
8198
8199 #ifdef USE_LOCALE_COLLATE
8200
8201 /*
8202 =for apidoc sv_collxfrm
8203
8204 This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag.  See
8205 C<L</sv_collxfrm_flags>>.
8206
8207 =for apidoc sv_collxfrm_flags
8208
8209 Add Collate Transform magic to an SV if it doesn't already have it.  If the
8210 flags contain C<SV_GMAGIC>, it handles get-magic.
8211
8212 Any scalar variable may carry C<PERL_MAGIC_collxfrm> magic that contains the
8213 scalar data of the variable, but transformed to such a format that a normal
8214 memory comparison can be used to compare the data according to the locale
8215 settings.
8216
8217 =cut
8218 */
8219
8220 char *
8221 Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp, const I32 flags)
8222 {
8223     MAGIC *mg;
8224
8225     PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS;
8226
8227     mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
8228
8229     /* If we don't have collation magic on 'sv', or the locale has changed
8230      * since the last time we calculated it, get it and save it now */
8231     if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
8232         const char *s;
8233         char *xf;
8234         STRLEN len, xlen;
8235
8236         /* Free the old space */
8237         if (mg)
8238             Safefree(mg->mg_ptr);
8239
8240         s = SvPV_flags_const(sv, len, flags);
8241         if ((xf = _mem_collxfrm(s, len, &xlen, cBOOL(SvUTF8(sv))))) {
8242             if (! mg) {
8243                 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
8244                                  0, 0);
8245                 assert(mg);
8246             }
8247             mg->mg_ptr = xf;
8248             mg->mg_len = xlen;
8249         }
8250         else {
8251             if (mg) {
8252                 mg->mg_ptr = NULL;
8253                 mg->mg_len = -1;
8254             }
8255         }
8256     }
8257
8258     if (mg && mg->mg_ptr) {
8259         *nxp = mg->mg_len;
8260         return mg->mg_ptr + sizeof(PL_collation_ix);
8261     }
8262     else {
8263         *nxp = 0;
8264         return NULL;
8265     }
8266 }
8267
8268 #endif /* USE_LOCALE_COLLATE */
8269
8270 static char *
8271 S_sv_gets_append_to_utf8(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8272 {
8273     SV * const tsv = newSV(0);
8274     ENTER;
8275     SAVEFREESV(tsv);
8276     sv_gets(tsv, fp, 0);
8277     sv_utf8_upgrade_nomg(tsv);
8278     SvCUR_set(sv,append);
8279     sv_catsv(sv,tsv);
8280     LEAVE;
8281     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8282 }
8283
8284 static char *
8285 S_sv_gets_read_record(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8286 {
8287     SSize_t bytesread;
8288     const STRLEN recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
8289       /* Grab the size of the record we're getting */
8290     char *buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
8291     
8292     /* Go yank in */
8293 #ifdef __VMS
8294     int fd;
8295     Stat_t st;
8296
8297     /* With a true, record-oriented file on VMS, we need to use read directly
8298      * to ensure that we respect RMS record boundaries.  The user is responsible
8299      * for providing a PL_rs value that corresponds to the FAB$W_MRS (maximum
8300      * record size) field.  N.B. This is likely to produce invalid results on
8301      * varying-width character data when a record ends mid-character.
8302      */
8303     fd = PerlIO_fileno(fp);
8304     if (fd != -1
8305         && PerlLIO_fstat(fd, &st) == 0
8306         && (st.st_fab_rfm == FAB$C_VAR
8307             || st.st_fab_rfm == FAB$C_VFC
8308             || st.st_fab_rfm == FAB$C_FIX)) {
8309
8310         bytesread = PerlLIO_read(fd, buffer, recsize);
8311     }
8312     else /* in-memory file from PerlIO::Scalar
8313           * or not a record-oriented file
8314           */
8315 #endif
8316     {
8317         bytesread = PerlIO_read(fp, buffer, recsize);
8318
8319         /* At this point, the logic in sv_get() means that sv will
8320            be treated as utf-8 if the handle is utf8.
8321         */
8322         if (PerlIO_isutf8(fp) && bytesread > 0) {
8323             char *bend = buffer + bytesread;
8324             char *bufp = buffer;
8325             size_t charcount = 0;
8326             bool charstart = TRUE;
8327             STRLEN skip = 0;
8328
8329             while (charcount < recsize) {
8330                 /* count accumulated characters */
8331                 while (bufp < bend) {
8332                     if (charstart) {
8333                         skip = UTF8SKIP(bufp);
8334                     }
8335                     if (bufp + skip > bend) {
8336                         /* partial at the end */
8337                         charstart = FALSE;
8338                         break;
8339                     }
8340                     else {
8341                         ++charcount;
8342                         bufp += skip;
8343                         charstart = TRUE;
8344                     }
8345                 }
8346
8347                 if (charcount < recsize) {
8348                     STRLEN readsize;
8349                     STRLEN bufp_offset = bufp - buffer;
8350                     SSize_t morebytesread;
8351
8352                     /* originally I read enough to fill any incomplete
8353                        character and the first byte of the next
8354                        character if needed, but if there's many
8355                        multi-byte encoded characters we're going to be
8356                        making a read call for every character beyond
8357                        the original read size.
8358
8359                        So instead, read the rest of the character if
8360                        any, and enough bytes to match at least the
8361                        start bytes for each character we're going to
8362                        read.
8363                     */
8364                     if (charstart)
8365                         readsize = recsize - charcount;
8366                     else 
8367                         readsize = skip - (bend - bufp) + recsize - charcount - 1;
8368                     buffer = SvGROW(sv, append + bytesread + readsize + 1) + append;
8369                     bend = buffer + bytesread;
8370                     morebytesread = PerlIO_read(fp, bend, readsize);
8371                     if (morebytesread <= 0) {
8372                         /* we're done, if we still have incomplete
8373                            characters the check code in sv_gets() will
8374                            warn about them.
8375
8376                            I'd originally considered doing
8377                            PerlIO_ungetc() on all but the lead
8378                            character of the incomplete character, but
8379                            read() doesn't do that, so I don't.
8380                         */
8381                         break;
8382                     }
8383
8384                     /* prepare to scan some more */
8385                     bytesread += morebytesread;
8386                     bend = buffer + bytesread;
8387                     bufp = buffer + bufp_offset;
8388                 }
8389             }
8390         }
8391     }
8392
8393     if (bytesread < 0)
8394         bytesread = 0;
8395     SvCUR_set(sv, bytesread + append);
8396     buffer[bytesread] = '\0';
8397     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8398 }
8399
8400 /*
8401 =for apidoc sv_gets
8402
8403 Get a line from the filehandle and store it into the SV, optionally
8404 appending to the currently-stored string.  If C<append> is not 0, the
8405 line is appended to the SV instead of overwriting it.  C<append> should
8406 be set to the byte offset that the appended string should start at
8407 in the SV (typically, C<SvCUR(sv)> is a suitable choice).
8408
8409 =cut
8410 */
8411
8412 char *
8413 Perl_sv_gets(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8414 {
8415     const char *rsptr;
8416     STRLEN rslen;
8417     STDCHAR rslast;
8418     STDCHAR *bp;
8419     SSize_t cnt;
8420     int i = 0;
8421     int rspara = 0;
8422
8423     PERL_ARGS_ASSERT_SV_GETS;
8424
8425     if (SvTHINKFIRST(sv))
8426         sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
8427     /* XXX. If you make this PVIV, then copy on write can copy scalars read
8428        from <>.
8429        However, perlbench says it's slower, because the existing swipe code
8430        is faster than copy on write.
8431        Swings and roundabouts.  */
8432     SvUPGRADE(sv, SVt_PV);
8433
8434     if (append) {
8435         /* line is going to be appended to the existing buffer in the sv */
8436         if (PerlIO_isutf8(fp)) {
8437             if (!SvUTF8(sv)) {
8438                 sv_utf8_upgrade_nomg(sv);
8439                 sv_pos_u2b(sv,&append,0);
8440             }
8441         } else if (SvUTF8(sv)) {
8442             return S_sv_gets_append_to_utf8(aTHX_ sv, fp, append);
8443         }
8444     }
8445
8446     SvPOK_only(sv);
8447     if (!append) {
8448         /* not appending - "clear" the string by setting SvCUR to 0,
8449          * the pv is still avaiable. */
8450         SvCUR_set(sv,0);
8451     }
8452     if (PerlIO_isutf8(fp))
8453         SvUTF8_on(sv);
8454
8455     if (IN_PERL_COMPILETIME) {
8456         /* we always read code in line mode */
8457         rsptr = "\n";
8458         rslen = 1;
8459     }
8460     else if (RsSNARF(PL_rs)) {
8461         /* If it is a regular disk file use size from stat() as estimate
8462            of amount we are going to read -- may result in mallocing
8463            more memory than we really need if the layers below reduce
8464            the size we read (e.g. CRLF or a gzip layer).
8465          */
8466         Stat_t st;
8467         int fd = PerlIO_fileno(fp);
8468         if (fd >= 0 && (PerlLIO_fstat(fd, &st) == 0) && S_ISREG(st.st_mode))  {
8469             const Off_t offset = PerlIO_tell(fp);
8470             if (offset != (Off_t) -1 && st.st_size + append > offset) {
8471 #ifdef PERL_COPY_ON_WRITE
8472                 /* Add an extra byte for the sake of copy-on-write's
8473                  * buffer reference count. */
8474                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 2));
8475 #else
8476                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
8477 #endif
8478             }
8479         }
8480         rsptr = NULL;
8481         rslen = 0;
8482     }
8483     else if (RsRECORD(PL_rs)) {
8484         return S_sv_gets_read_record(aTHX_ sv, fp, append);
8485     }
8486     else if (RsPARA(PL_rs)) {
8487         rsptr = "\n\n";
8488         rslen = 2;
8489         rspara = 1;
8490     }
8491     else {
8492         /* Get $/ i.e. PL_rs into same encoding as stream wants */
8493         if (PerlIO_isutf8(fp)) {
8494             rsptr = SvPVutf8(PL_rs, rslen);
8495         }
8496         else {
8497             if (SvUTF8(PL_rs)) {
8498                 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
8499                     Perl_croak(aTHX_ "Wide character in $/");
8500                 }
8501             }
8502             /* extract the raw pointer to the record separator */
8503             rsptr = SvPV_const(PL_rs, rslen);
8504         }
8505     }
8506
8507     /* rslast is the last character in the record separator
8508      * note we don't use rslast except when rslen is true, so the
8509      * null assign is a placeholder. */
8510     rslast = rslen ? rsptr[rslen - 1] : '\0';
8511
8512     if (rspara) {               /* have to do this both before and after */
8513         do {                    /* to make sure file boundaries work right */
8514             if (PerlIO_eof(fp))
8515                 return 0;
8516             i = PerlIO_getc(fp);
8517             if (i != '\n') {
8518                 if (i == -1)
8519                     return 0;
8520                 PerlIO_ungetc(fp,i);
8521                 break;
8522             }
8523         } while (i != EOF);
8524     }
8525
8526     /* See if we know enough about I/O mechanism to cheat it ! */
8527
8528     /* This used to be #ifdef test - it is made run-time test for ease
8529        of abstracting out stdio interface. One call should be cheap
8530        enough here - and may even be a macro allowing compile
8531        time optimization.
8532      */
8533
8534     if (PerlIO_fast_gets(fp)) {
8535     /*
8536      * We can do buffer based IO operations on this filehandle.
8537      *
8538      * This means we can bypass a lot of subcalls and process
8539      * the buffer directly, it also means we know the upper bound
8540      * on the amount of data we might read of the current buffer
8541      * into our sv. Knowing this allows us to preallocate the pv
8542      * to be able to hold that maximum, which allows us to simplify
8543      * a lot of logic. */
8544
8545     /*
8546      * We're going to steal some values from the stdio struct
8547      * and put EVERYTHING in the innermost loop into registers.
8548      */
8549     STDCHAR *ptr;       /* pointer into fp's read-ahead buffer */
8550     STRLEN bpx;         /* length of the data in the target sv
8551                            used to fix pointers after a SvGROW */
8552     I32 shortbuffered;  /* If the pv buffer is shorter than the amount
8553                            of data left in the read-ahead buffer.
8554                            If 0 then the pv buffer can hold the full
8555                            amount left, otherwise this is the amount it
8556                            can hold. */
8557
8558     /* Here is some breathtakingly efficient cheating */
8559
8560     /* When you read the following logic resist the urge to think
8561      * of record separators that are 1 byte long. They are an
8562      * uninteresting special (simple) case.
8563      *
8564      * Instead think of record separators which are at least 2 bytes
8565      * long, and keep in mind that we need to deal with such
8566      * separators when they cross a read-ahead buffer boundary.
8567      *
8568      * Also consider that we need to gracefully deal with separators
8569      * that may be longer than a single read ahead buffer.
8570      *
8571      * Lastly do not forget we want to copy the delimiter as well. We
8572      * are copying all data in the file _up_to_and_including_ the separator
8573      * itself.
8574      *
8575      * Now that you have all that in mind here is what is happening below:
8576      *
8577      * 1. When we first enter the loop we do some memory book keeping to see
8578      * how much free space there is in the target SV. (This sub assumes that
8579      * it is operating on the same SV most of the time via $_ and that it is
8580      * going to be able to reuse the same pv buffer each call.) If there is
8581      * "enough" room then we set "shortbuffered" to how much space there is
8582      * and start reading forward.
8583      *
8584      * 2. When we scan forward we copy from the read-ahead buffer to the target
8585      * SV's pv buffer. While we go we watch for the end of the read-ahead buffer,
8586      * and the end of the of pv, as well as for the "rslast", which is the last
8587      * char of the separator.
8588      *
8589      * 3. When scanning forward if we see rslast then we jump backwards in *pv*
8590      * (which has a "complete" record up to the point we saw rslast) and check
8591      * it to see if it matches the separator. If it does we are done. If it doesn't
8592      * we continue on with the scan/copy.
8593      *
8594      * 4. If we run out of read-ahead buffer (cnt goes to 0) then we have to get
8595      * the IO system to read the next buffer. We do this by doing a getc(), which
8596      * returns a single char read (or EOF), and prefills the buffer, and also
8597      * allows us to find out how full the buffer is.  We use this information to
8598      * SvGROW() the sv to the size remaining in the buffer, after which we copy
8599      * the returned single char into the target sv, and then go back into scan
8600      * forward mode.
8601      *
8602      * 5. If we run out of write-buffer then we SvGROW() it by the size of the
8603      * remaining space in the read-buffer.
8604      *
8605      * Note that this code despite its twisty-turny nature is pretty darn slick.
8606      * It manages single byte separators, multi-byte cross boundary separators,
8607      * and cross-read-buffer separators cleanly and efficiently at the cost
8608      * of potentially greatly overallocating the target SV.
8609      *
8610      * Yves
8611      */
8612
8613
8614     /* get the number of bytes remaining in the read-ahead buffer
8615      * on first call on a given fp this will return 0.*/
8616     cnt = PerlIO_get_cnt(fp);
8617
8618     /* make sure we have the room */
8619     if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
8620         /* Not room for all of it
8621            if we are looking for a separator and room for some
8622          */
8623         if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
8624             /* just process what we have room for */
8625             shortbuffered = cnt - SvLEN(sv) + append + 1;
8626             cnt -= shortbuffered;
8627         }
8628         else {
8629             /* ensure that the target sv has enough room to hold
8630              * the rest of the read-ahead buffer */
8631             shortbuffered = 0;
8632             /* remember that cnt can be negative */
8633             SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
8634         }
8635     }
8636     else {
8637         /* we have enough room to hold the full buffer, lets scream */
8638         shortbuffered = 0;
8639     }
8640
8641     /* extract the pointer to sv's string buffer, offset by append as necessary */
8642     bp = (STDCHAR*)SvPVX_const(sv) + append;  /* move these two too to registers */
8643     /* extract the point to the read-ahead buffer */
8644     ptr = (STDCHAR*)PerlIO_get_ptr(fp);
8645
8646     /* some trace debug output */
8647     DEBUG_P(PerlIO_printf(Perl_debug_log,
8648         "Screamer: entering, ptr=%" UVuf ", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
8649     DEBUG_P(PerlIO_printf(Perl_debug_log,
8650         "Screamer: entering: PerlIO * thinks ptr=%" UVuf ", cnt=%" IVdf ", base=%"
8651          UVuf "\n",
8652                PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8653                PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
8654
8655     for (;;) {
8656       screamer:
8657         /* if there is stuff left in the read-ahead buffer */
8658         if (cnt > 0) {
8659             /* if there is a separator */
8660             if (rslen) {
8661                 /* find next rslast */
8662                 STDCHAR *p;
8663
8664                 /* shortcut common case of blank line */
8665                 cnt--;
8666                 if ((*bp++ = *ptr++) == rslast)
8667                     goto thats_all_folks;
8668
8669                 p = (STDCHAR *)memchr(ptr, rslast, cnt);
8670                 if (p) {
8671                     SSize_t got = p - ptr + 1;
8672                     Copy(ptr, bp, got, STDCHAR);
8673                     ptr += got;
8674                     bp  += got;
8675                     cnt -= got;
8676                     goto thats_all_folks;
8677                 }
8678                 Copy(ptr, bp, cnt, STDCHAR);
8679                 ptr += cnt;
8680                 bp  += cnt;
8681                 cnt = 0;
8682             }
8683             else {
8684                 /* no separator, slurp the full buffer */
8685                 Copy(ptr, bp, cnt, char);            /* this     |  eat */
8686                 bp += cnt;                           /* screams  |  dust */
8687                 ptr += cnt;                          /* louder   |  sed :-) */
8688                 cnt = 0;
8689                 assert (!shortbuffered);
8690                 goto cannot_be_shortbuffered;
8691             }
8692         }
8693         
8694         if (shortbuffered) {            /* oh well, must extend */
8695             /* we didnt have enough room to fit the line into the target buffer
8696              * so we must extend the target buffer and keep going */
8697             cnt = shortbuffered;
8698             shortbuffered = 0;
8699             bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
8700             SvCUR_set(sv, bpx);
8701             /* extned the target sv's buffer so it can hold the full read-ahead buffer */
8702             SvGROW(sv, SvLEN(sv) + append + cnt + 2);
8703             bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
8704             continue;
8705         }
8706
8707     cannot_be_shortbuffered:
8708         /* we need to refill the read-ahead buffer if possible */
8709
8710         DEBUG_P(PerlIO_printf(Perl_debug_log,
8711                              "Screamer: going to getc, ptr=%" UVuf ", cnt=%" IVdf "\n",
8712                               PTR2UV(ptr),(IV)cnt));
8713         PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
8714
8715         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8716            "Screamer: pre: FILE * thinks ptr=%" UVuf ", cnt=%" IVdf ", base=%" UVuf "\n",
8717             PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8718             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8719
8720         /*
8721             call PerlIO_getc() to let it prefill the lookahead buffer
8722
8723             This used to call 'filbuf' in stdio form, but as that behaves like
8724             getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
8725             another abstraction.
8726
8727             Note we have to deal with the char in 'i' if we are not at EOF
8728         */
8729         i   = PerlIO_getc(fp);          /* get more characters */
8730
8731         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8732            "Screamer: post: FILE * thinks ptr=%" UVuf ", cnt=%" IVdf ", base=%" UVuf "\n",
8733             PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8734             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8735
8736         /* find out how much is left in the read-ahead buffer, and rextract its pointer */
8737         cnt = PerlIO_get_cnt(fp);
8738         ptr = (STDCHAR*)PerlIO_get_ptr(fp);     /* reregisterize cnt and ptr */
8739         DEBUG_P(PerlIO_printf(Perl_debug_log,
8740             "Screamer: after getc, ptr=%" UVuf ", cnt=%" IVdf "\n",
8741             PTR2UV(ptr),(IV)cnt));
8742
8743         if (i == EOF)                   /* all done for ever? */
8744             goto thats_really_all_folks;
8745
8746         /* make sure we have enough space in the target sv */
8747         bpx = bp - (STDCHAR*)SvPVX_const(sv);   /* box up before relocation */
8748         SvCUR_set(sv, bpx);
8749         SvGROW(sv, bpx + cnt + 2);
8750         bp = (STDCHAR*)SvPVX_const(sv) + bpx;   /* unbox after relocation */
8751
8752         /* copy of the char we got from getc() */
8753         *bp++ = (STDCHAR)i;             /* store character from PerlIO_getc */
8754
8755         /* make sure we deal with the i being the last character of a separator */
8756         if (rslen && (STDCHAR)i == rslast)  /* all done for now? */
8757             goto thats_all_folks;
8758     }
8759
8760   thats_all_folks:
8761     /* check if we have actually found the separator - only really applies
8762      * when rslen > 1 */
8763     if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
8764           memNE((char*)bp - rslen, rsptr, rslen))
8765         goto screamer;                          /* go back to the fray */
8766   thats_really_all_folks:
8767     if (shortbuffered)
8768         cnt += shortbuffered;
8769         DEBUG_P(PerlIO_printf(Perl_debug_log,
8770              "Screamer: quitting, ptr=%" UVuf ", cnt=%" IVdf "\n",PTR2UV(ptr),(IV)cnt));
8771     PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt);  /* put these back or we're in trouble */
8772     DEBUG_P(PerlIO_printf(Perl_debug_log,
8773         "Screamer: end: FILE * thinks ptr=%" UVuf ", cnt=%" IVdf ", base=%" UVuf
8774         "\n",
8775         PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8776         PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8777     *bp = '\0';
8778     SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv));      /* set length */
8779     DEBUG_P(PerlIO_printf(Perl_debug_log,
8780         "Screamer: done, len=%ld, string=|%.*s|\n",
8781         (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
8782     }
8783    else
8784     {
8785        /*The big, slow, and stupid way. */
8786 #ifdef USE_HEAP_INSTEAD_OF_STACK        /* Even slower way. */
8787         STDCHAR *buf = NULL;
8788         Newx(buf, 8192, STDCHAR);
8789         assert(buf);
8790 #else
8791         STDCHAR buf[8192];
8792 #endif
8793
8794       screamer2:
8795         if (rslen) {
8796             const STDCHAR * const bpe = buf + sizeof(buf);
8797             bp = buf;
8798             while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
8799                 ; /* keep reading */
8800             cnt = bp - buf;
8801         }
8802         else {
8803             cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
8804             /* Accommodate broken VAXC compiler, which applies U8 cast to
8805              * both args of ?: operator, causing EOF to change into 255
8806              */
8807             if (cnt > 0)
8808                  i = (U8)buf[cnt - 1];
8809             else
8810                  i = EOF;
8811         }
8812
8813         if (cnt < 0)
8814             cnt = 0;  /* we do need to re-set the sv even when cnt <= 0 */
8815         if (append)
8816             sv_catpvn_nomg(sv, (char *) buf, cnt);
8817         else
8818             sv_setpvn(sv, (char *) buf, cnt);   /* "nomg" is implied */
8819
8820         if (i != EOF &&                 /* joy */
8821             (!rslen ||
8822              SvCUR(sv) < rslen ||
8823              memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
8824         {
8825             append = -1;
8826             /*
8827              * If we're reading from a TTY and we get a short read,
8828              * indicating that the user hit his EOF character, we need
8829              * to notice it now, because if we try to read from the TTY
8830              * again, the EOF condition will disappear.
8831              *
8832              * The comparison of cnt to sizeof(buf) is an optimization
8833              * that prevents unnecessary calls to feof().
8834              *
8835              * - jik 9/25/96
8836              */
8837             if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
8838                 goto screamer2;
8839         }
8840
8841 #ifdef USE_HEAP_INSTEAD_OF_STACK
8842         Safefree(buf);
8843 #endif
8844     }
8845
8846     if (rspara) {               /* have to do this both before and after */
8847         while (i != EOF) {      /* to make sure file boundaries work right */
8848             i = PerlIO_getc(fp);
8849             if (i != '\n') {
8850                 PerlIO_ungetc(fp,i);
8851                 break;
8852             }
8853         }
8854     }
8855
8856     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8857 }
8858
8859 /*
8860 =for apidoc sv_inc
8861
8862 Auto-increment of the value in the SV, doing string to numeric conversion
8863 if necessary.  Handles 'get' magic and operator overloading.
8864
8865 =cut
8866 */
8867
8868 void
8869 Perl_sv_inc(pTHX_ SV *const sv)
8870 {
8871     if (!sv)
8872         return;
8873     SvGETMAGIC(sv);
8874     sv_inc_nomg(sv);
8875 }
8876
8877 /*
8878 =for apidoc sv_inc_nomg
8879
8880 Auto-increment of the value in the SV, doing string to numeric conversion
8881 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8882
8883 =cut
8884 */
8885
8886 void
8887 Perl_sv_inc_nomg(pTHX_ SV *const sv)
8888 {
8889     char *d;
8890     int flags;
8891
8892     if (!sv)
8893         return;
8894     if (SvTHINKFIRST(sv)) {
8895         if (SvREADONLY(sv)) {
8896                 Perl_croak_no_modify();
8897         }
8898         if (SvROK(sv)) {
8899             IV i;
8900             if (SvAMAGIC(sv) && AMG_CALLunary(sv, inc_amg))
8901                 return;
8902             i = PTR2IV(SvRV(sv));
8903             sv_unref(sv);
8904             sv_setiv(sv, i);
8905         }
8906         else sv_force_normal_flags(sv, 0);
8907     }
8908     flags = SvFLAGS(sv);
8909     if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
8910         /* It's (privately or publicly) a float, but not tested as an
8911            integer, so test it to see. */
8912         (void) SvIV(sv);
8913         flags = SvFLAGS(sv);
8914     }
8915     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8916         /* It's publicly an integer, or privately an integer-not-float */
8917 #ifdef PERL_PRESERVE_IVUV
8918       oops_its_int:
8919 #endif
8920         if (SvIsUV(sv)) {
8921             if (SvUVX(sv) == UV_MAX)
8922                 sv_setnv(sv, UV_MAX_P1);
8923             else
8924                 (void)SvIOK_only_UV(sv);
8925                 SvUV_set(sv, SvUVX(sv) + 1);
8926         } else {
8927             if (SvIVX(sv) == IV_MAX)
8928                 sv_setuv(sv, (UV)IV_MAX + 1);
8929             else {
8930                 (void)SvIOK_only(sv);
8931                 SvIV_set(sv, SvIVX(sv) + 1);
8932             }   
8933         }
8934         return;
8935     }
8936     if (flags & SVp_NOK) {
8937         const NV was = SvNVX(sv);
8938         if (LIKELY(!Perl_isinfnan(was)) &&
8939             NV_OVERFLOWS_INTEGERS_AT &&
8940             was >= NV_OVERFLOWS_INTEGERS_AT) {
8941             /* diag_listed_as: Lost precision when %s %f by 1 */
8942             Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8943                            "Lost precision when incrementing %" NVff " by 1",
8944                            was);
8945         }
8946         (void)SvNOK_only(sv);
8947         SvNV_set(sv, was + 1.0);
8948         return;
8949     }
8950
8951     /* treat AV/HV/CV/FM/IO and non-fake GVs as immutable */
8952     if (SvTYPE(sv) >= SVt_PVAV || (isGV_with_GP(sv) && !SvFAKE(sv)))
8953         Perl_croak_no_modify();
8954
8955     if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
8956         if ((flags & SVTYPEMASK) < SVt_PVIV)
8957             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
8958         (void)SvIOK_only(sv);
8959         SvIV_set(sv, 1);
8960         return;
8961     }
8962     d = SvPVX(sv);
8963     while (isALPHA(*d)) d++;
8964     while (isDIGIT(*d)) d++;
8965     if (d < SvEND(sv)) {
8966         const int numtype = grok_number_flags(SvPVX_const(sv), SvCUR(sv), NULL, PERL_SCAN_TRAILING);
8967 #ifdef PERL_PRESERVE_IVUV
8968         /* Got to punt this as an integer if needs be, but we don't issue
8969            warnings. Probably ought to make the sv_iv_please() that does
8970            the conversion if possible, and silently.  */
8971         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8972             /* Need to try really hard to see if it's an integer.
8973                9.22337203685478e+18 is an integer.
8974                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8975                so $a="9.22337203685478e+18"; $a+0; $a++
8976                needs to be the same as $a="9.22337203685478e+18"; $a++
8977                or we go insane. */
8978         
8979             (void) sv_2iv(sv);
8980             if (SvIOK(sv))
8981                 goto oops_its_int;
8982
8983             /* sv_2iv *should* have made this an NV */
8984             if (flags & SVp_NOK) {
8985                 (void)SvNOK_only(sv);
8986                 SvNV_set(sv, SvNVX(sv) + 1.0);
8987                 return;
8988             }
8989             /* I don't think we can get here. Maybe I should assert this
8990                And if we do get here I suspect that sv_setnv will croak. NWC
8991                Fall through. */
8992             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%" UVxf " NV=%" NVgf "\n",
8993                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
8994         }
8995 #endif /* PERL_PRESERVE_IVUV */
8996         if (!numtype && ckWARN(WARN_NUMERIC))
8997             not_incrementable(sv);
8998         sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
8999         return;
9000     }
9001     d--;
9002     while (d >= SvPVX_const(sv)) {
9003         if (isDIGIT(*d)) {
9004             if (++*d <= '9')
9005                 return;
9006             *(d--) = '0';
9007         }
9008         else {
9009 #ifdef EBCDIC
9010             /* MKS: The original code here died if letters weren't consecutive.
9011              * at least it didn't have to worry about non-C locales.  The
9012              * new code assumes that ('z'-'a')==('Z'-'A'), letters are
9013              * arranged in order (although not consecutively) and that only
9014              * [A-Za-z] are accepted by isALPHA in the C locale.
9015              */
9016             if (isALPHA_FOLD_NE(*d, 'z')) {
9017                 do { ++*d; } while (!isALPHA(*d));
9018                 return;
9019             }
9020             *(d--) -= 'z' - 'a';
9021 #else
9022             ++*d;
9023             if (isALPHA(*d))
9024                 return;
9025             *(d--) -= 'z' - 'a' + 1;
9026 #endif
9027         }
9028     }
9029     /* oh,oh, the number grew */
9030     SvGROW(sv, SvCUR(sv) + 2);
9031     SvCUR_set(sv, SvCUR(sv) + 1);
9032     for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
9033         *d = d[-1];
9034     if (isDIGIT(d[1]))
9035         *d = '1';
9036     else
9037         *d = d[1];
9038 }
9039
9040 /*
9041 =for apidoc sv_dec
9042
9043 Auto-decrement of the value in the SV, doing string to numeric conversion
9044 if necessary.  Handles 'get' magic and operator overloading.
9045
9046 =cut
9047 */
9048
9049 void
9050 Perl_sv_dec(pTHX_ SV *const sv)
9051 {
9052     if (!sv)
9053         return;
9054     SvGETMAGIC(sv);
9055     sv_dec_nomg(sv);
9056 }
9057
9058 /*
9059 =for apidoc sv_dec_nomg
9060
9061 Auto-decrement of the value in the SV, doing string to numeric conversion
9062 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
9063
9064 =cut
9065 */
9066
9067 void
9068 Perl_sv_dec_nomg(pTHX_ SV *const sv)
9069 {
9070     int flags;
9071
9072     if (!sv)
9073         return;
9074     if (SvTHINKFIRST(sv)) {
9075         if (SvREADONLY(sv)) {
9076                 Perl_croak_no_modify();
9077         }
9078         if (SvROK(sv)) {
9079             IV i;
9080             if (SvAMAGIC(sv) && AMG_CALLunary(sv, dec_amg))
9081                 return;
9082             i = PTR2IV(SvRV(sv));
9083             sv_unref(sv);
9084             sv_setiv(sv, i);
9085         }
9086         else sv_force_normal_flags(sv, 0);
9087     }
9088     /* Unlike sv_inc we don't have to worry about string-never-numbers
9089        and keeping them magic. But we mustn't warn on punting */
9090     flags = SvFLAGS(sv);
9091     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
9092         /* It's publicly an integer, or privately an integer-not-float */
9093 #ifdef PERL_PRESERVE_IVUV
9094       oops_its_int:
9095 #endif
9096         if (SvIsUV(sv)) {
9097             if (SvUVX(sv) == 0) {
9098                 (void)SvIOK_only(sv);
9099                 SvIV_set(sv, -1);
9100             }
9101             else {
9102                 (void)SvIOK_only_UV(sv);
9103                 SvUV_set(sv, SvUVX(sv) - 1);
9104             }   
9105         } else {
9106             if (SvIVX(sv) == IV_MIN) {
9107                 sv_setnv(sv, (NV)IV_MIN);
9108                 goto oops_its_num;
9109             }
9110             else {
9111                 (void)SvIOK_only(sv);
9112                 SvIV_set(sv, SvIVX(sv) - 1);
9113             }   
9114         }
9115         return;
9116     }
9117     if (flags & SVp_NOK) {
9118     oops_its_num:
9119         {
9120             const NV was = SvNVX(sv);
9121             if (LIKELY(!Perl_isinfnan(was)) &&
9122                 NV_OVERFLOWS_INTEGERS_AT &&
9123                 was <= -NV_OVERFLOWS_INTEGERS_AT) {
9124                 /* diag_listed_as: Lost precision when %s %f by 1 */
9125                 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
9126                                "Lost precision when decrementing %" NVff " by 1",
9127                                was);
9128             }
9129             (void)SvNOK_only(sv);
9130             SvNV_set(sv, was - 1.0);
9131             return;
9132         }
9133     }
9134
9135     /* treat AV/HV/CV/FM/IO and non-fake GVs as immutable */
9136     if (SvTYPE(sv) >= SVt_PVAV || (isGV_with_GP(sv) && !SvFAKE(sv)))
9137         Perl_croak_no_modify();
9138
9139     if (!(flags & SVp_POK)) {
9140         if ((flags & SVTYPEMASK) < SVt_PVIV)
9141             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
9142         SvIV_set(sv, -1);
9143         (void)SvIOK_only(sv);
9144         return;
9145     }
9146 #ifdef PERL_PRESERVE_IVUV
9147     {
9148         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
9149         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
9150             /* Need to try really hard to see if it's an integer.
9151                9.22337203685478e+18 is an integer.
9152                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
9153                so $a="9.22337203685478e+18"; $a+0; $a--
9154                needs to be the same as $a="9.22337203685478e+18"; $a--
9155                or we go insane. */
9156         
9157             (void) sv_2iv(sv);
9158             if (SvIOK(sv))
9159                 goto oops_its_int;
9160
9161             /* sv_2iv *should* have made this an NV */
9162             if (flags & SVp_NOK) {
9163                 (void)SvNOK_only(sv);
9164                 SvNV_set(sv, SvNVX(sv) - 1.0);
9165                 return;
9166             }
9167             /* I don't think we can get here. Maybe I should assert this
9168                And if we do get here I suspect that sv_setnv will croak. NWC
9169                Fall through. */
9170             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%" UVxf " NV=%" NVgf "\n",
9171                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
9172         }
9173     }
9174 #endif /* PERL_PRESERVE_IVUV */
9175     sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0);   /* punt */
9176 }
9177
9178 /* this define is used to eliminate a chunk of duplicated but shared logic
9179  * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
9180  * used anywhere but here - yves
9181  */
9182 #define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
9183     STMT_START {      \
9184         SSize_t ix = ++PL_tmps_ix;              \
9185         if (UNLIKELY(ix >= PL_tmps_max))        \
9186             ix = tmps_grow_p(ix);                       \
9187         PL_tmps_stack[ix] = (AnSv); \
9188     } STMT_END
9189
9190 /*
9191 =for apidoc sv_mortalcopy
9192
9193 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
9194 The new SV is marked as mortal.  It will be destroyed "soon", either by an
9195 explicit call to C<FREETMPS>, or by an implicit call at places such as
9196 statement boundaries.  See also C<L</sv_newmortal>> and C<L</sv_2mortal>>.
9197
9198 =cut
9199 */
9200
9201 /* Make a string that will exist for the duration of the expression
9202  * evaluation.  Actually, it may have to last longer than that, but
9203  * hopefully we won't free it until it has been assigned to a
9204  * permanent location. */
9205
9206 SV *
9207 Perl_sv_mortalcopy_flags(pTHX_ SV *const oldstr, U32 flags)
9208 {
9209     SV *sv;
9210
9211     if (flags & SV_GMAGIC)
9212         SvGETMAGIC(oldstr); /* before new_SV, in case it dies */
9213     new_SV(sv);
9214     sv_setsv_flags(sv,oldstr,flags & ~SV_GMAGIC);
9215     PUSH_EXTEND_MORTAL__SV_C(sv);
9216     SvTEMP_on(sv);
9217     return sv;
9218 }
9219
9220 /*
9221 =for apidoc sv_newmortal
9222
9223 Creates a new null SV which is mortal.  The reference count of the SV is
9224 set to 1.  It will be destroyed "soon", either by an explicit call to
9225 C<FREETMPS>, or by an implicit call at places such as statement boundaries.
9226 See also C<L</sv_mortalcopy>> and C<L</sv_2mortal>>.
9227
9228 =cut
9229 */
9230
9231 SV *
9232 Perl_sv_newmortal(pTHX)
9233 {
9234     SV *sv;
9235
9236     new_SV(sv);
9237     SvFLAGS(sv) = SVs_TEMP;
9238     PUSH_EXTEND_MORTAL__SV_C(sv);
9239     return sv;
9240 }
9241
9242
9243 /*
9244 =for apidoc newSVpvn_flags
9245
9246 Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
9247 characters) into it.  The reference count for the
9248 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
9249 string.  You are responsible for ensuring that the source string is at least
9250 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
9251 Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
9252 If C<SVs_TEMP> is set, then C<sv_2mortal()> is called on the result before
9253 returning.  If C<SVf_UTF8> is set, C<s>
9254 is considered to be in UTF-8 and the
9255 C<SVf_UTF8> flag will be set on the new SV.
9256 C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
9257
9258     #define newSVpvn_utf8(s, len, u)                    \
9259         newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
9260
9261 =cut
9262 */
9263
9264 SV *
9265 Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
9266 {
9267     SV *sv;
9268
9269     /* All the flags we don't support must be zero.
9270        And we're new code so I'm going to assert this from the start.  */
9271     assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
9272     new_SV(sv);
9273     sv_setpvn(sv,s,len);
9274
9275     /* This code used to do a sv_2mortal(), however we now unroll the call to
9276      * sv_2mortal() and do what it does ourselves here.  Since we have asserted
9277      * that flags can only have the SVf_UTF8 and/or SVs_TEMP flags set above we
9278      * can use it to enable the sv flags directly (bypassing SvTEMP_on), which
9279      * in turn means we dont need to mask out the SVf_UTF8 flag below, which
9280      * means that we eliminate quite a few steps than it looks - Yves
9281      * (explaining patch by gfx) */
9282
9283     SvFLAGS(sv) |= flags;
9284
9285     if(flags & SVs_TEMP){
9286         PUSH_EXTEND_MORTAL__SV_C(sv);
9287     }
9288
9289     return sv;
9290 }
9291
9292 /*
9293 =for apidoc sv_2mortal
9294
9295 Marks an existing SV as mortal.  The SV will be destroyed "soon", either
9296 by an explicit call to C<FREETMPS>, or by an implicit call at places such as
9297 statement boundaries.  C<SvTEMP()> is turned on which means that the SV's
9298 string buffer can be "stolen" if this SV is copied.  See also
9299 C<L</sv_newmortal>> and C<L</sv_mortalcopy>>.
9300
9301 =cut
9302 */
9303
9304 SV *
9305 Perl_sv_2mortal(pTHX_ SV *const sv)
9306 {
9307     dVAR;
9308     if (!sv)
9309         return sv;
9310     if (SvIMMORTAL(sv))
9311         return sv;
9312     PUSH_EXTEND_MORTAL__SV_C(sv);
9313     SvTEMP_on(sv);
9314     return sv;
9315 }
9316
9317 /*
9318 =for apidoc newSVpv
9319
9320 Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
9321 characters) into it.  The reference count for the
9322 SV is set to 1.  If C<len> is zero, Perl will compute the length using
9323 C<strlen()>, (which means if you use this option, that C<s> can't have embedded
9324 C<NUL> characters and has to have a terminating C<NUL> byte).
9325
9326 For efficiency, consider using C<newSVpvn> instead.
9327
9328 =cut
9329 */
9330
9331 SV *
9332 Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
9333 {
9334     SV *sv;
9335
9336     new_SV(sv);
9337     sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
9338     return sv;
9339 }
9340
9341 /*
9342 =for apidoc newSVpvn
9343
9344 Creates a new SV and copies a string into it, which may contain C<NUL> characters
9345 (C<\0>) and other binary data.  The reference count for the SV is set to 1.
9346 Note that if C<len> is zero, Perl will create a zero length (Perl) string.  You
9347 are responsible for ensuring that the source buffer is at least
9348 C<len> bytes long.  If the C<buffer> argument is NULL the new SV will be
9349 undefined.
9350
9351 =cut
9352 */
9353
9354 SV *
9355 Perl_newSVpvn(pTHX_ const char *const buffer, const STRLEN len)
9356 {
9357     SV *sv;
9358     new_SV(sv);
9359     sv_setpvn(sv,buffer,len);
9360     return sv;
9361 }
9362
9363 /*
9364 =for apidoc newSVhek
9365
9366 Creates a new SV from the hash key structure.  It will generate scalars that
9367 point to the shared string table where possible.  Returns a new (undefined)
9368 SV if C<hek> is NULL.
9369
9370 =cut
9371 */
9372
9373 SV *
9374 Perl_newSVhek(pTHX_ const HEK *const hek)
9375 {
9376     if (!hek) {
9377         SV *sv;
9378
9379         new_SV(sv);
9380         return sv;
9381     }
9382
9383     if (HEK_LEN(hek) == HEf_SVKEY) {
9384         return newSVsv(*(SV**)HEK_KEY(hek));
9385     } else {
9386         const int flags = HEK_FLAGS(hek);
9387         if (flags & HVhek_WASUTF8) {
9388             /* Trouble :-)
9389                Andreas would like keys he put in as utf8 to come back as utf8
9390             */
9391             STRLEN utf8_len = HEK_LEN(hek);
9392             SV * const sv = newSV_type(SVt_PV);
9393             char *as_utf8 = (char *)bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
9394             /* bytes_to_utf8() allocates a new string, which we can repurpose: */
9395             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
9396             SvUTF8_on (sv);
9397             return sv;
9398         } else if (flags & HVhek_UNSHARED) {
9399             /* A hash that isn't using shared hash keys has to have
9400                the flag in every key so that we know not to try to call
9401                share_hek_hek on it.  */
9402
9403             SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
9404             if (HEK_UTF8(hek))
9405                 SvUTF8_on (sv);
9406             return sv;
9407         }
9408         /* This will be overwhelminly the most common case.  */
9409         {
9410             /* Inline most of newSVpvn_share(), because share_hek_hek() is far
9411                more efficient than sharepvn().  */
9412             SV *sv;
9413
9414             new_SV(sv);
9415             sv_upgrade(sv, SVt_PV);
9416             SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
9417             SvCUR_set(sv, HEK_LEN(hek));
9418             SvLEN_set(sv, 0);
9419             SvIsCOW_on(sv);
9420             SvPOK_on(sv);
9421             if (HEK_UTF8(hek))
9422                 SvUTF8_on(sv);
9423             return sv;
9424         }
9425     }
9426 }
9427
9428 /*
9429 =for apidoc newSVpvn_share
9430
9431 Creates a new SV with its C<SvPVX_const> pointing to a shared string in the string
9432 table.  If the string does not already exist in the table, it is
9433 created first.  Turns on the C<SvIsCOW> flag (or C<READONLY>
9434 and C<FAKE> in 5.16 and earlier).  If the C<hash> parameter
9435 is non-zero, that value is used; otherwise the hash is computed.
9436 The string's hash can later be retrieved from the SV
9437 with the C<SvSHARED_HASH()> macro.  The idea here is
9438 that as the string table is used for shared hash keys these strings will have
9439 C<SvPVX_const == HeKEY> and hash lookup will avoid string compare.
9440
9441 =cut
9442 */
9443
9444 SV *
9445 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
9446 {
9447     dVAR;
9448     SV *sv;
9449     bool is_utf8 = FALSE;
9450     const char *const orig_src = src;
9451
9452     if (len < 0) {
9453         STRLEN tmplen = -len;
9454         is_utf8 = TRUE;
9455         /* See the note in hv.c:hv_fetch() --jhi */
9456         src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
9457         len = tmplen;
9458     }
9459     if (!hash)
9460         PERL_HASH(hash, src, len);
9461     new_SV(sv);
9462     /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
9463        changes here, update it there too.  */
9464     sv_upgrade(sv, SVt_PV);
9465     SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
9466     SvCUR_set(sv, len);
9467     SvLEN_set(sv, 0);
9468     SvIsCOW_on(sv);
9469     SvPOK_on(sv);
9470     if (is_utf8)
9471         SvUTF8_on(sv);
9472     if (src != orig_src)
9473         Safefree(src);
9474     return sv;
9475 }
9476
9477 /*
9478 =for apidoc newSVpv_share
9479
9480 Like C<newSVpvn_share>, but takes a C<NUL>-terminated string instead of a
9481 string/length pair.
9482
9483 =cut
9484 */
9485
9486 SV *
9487 Perl_newSVpv_share(pTHX_ const char *src, U32 hash)
9488 {
9489     return newSVpvn_share(src, strlen(src), hash);
9490 }
9491
9492 #if defined(PERL_IMPLICIT_CONTEXT)
9493
9494 /* pTHX_ magic can't cope with varargs, so this is a no-context
9495  * version of the main function, (which may itself be aliased to us).
9496  * Don't access this version directly.
9497  */
9498
9499 SV *
9500 Perl_newSVpvf_nocontext(const char *const pat, ...)
9501 {
9502     dTHX;
9503     SV *sv;
9504     va_list args;
9505
9506     PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
9507
9508     va_start(args, pat);
9509     sv = vnewSVpvf(pat, &args);
9510     va_end(args);
9511     return sv;
9512 }
9513 #endif
9514
9515 /*
9516 =for apidoc newSVpvf
9517
9518 Creates a new SV and initializes it with the string formatted like
9519 C<sv_catpvf>.
9520
9521 =cut
9522 */
9523
9524 SV *
9525 Perl_newSVpvf(pTHX_ const char *const pat, ...)
9526 {
9527     SV *sv;
9528     va_list args;
9529
9530     PERL_ARGS_ASSERT_NEWSVPVF;
9531
9532     va_start(args, pat);
9533     sv = vnewSVpvf(pat, &args);
9534     va_end(args);
9535     return sv;
9536 }
9537
9538 /* backend for newSVpvf() and newSVpvf_nocontext() */
9539
9540 SV *
9541 Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
9542 {
9543     SV *sv;
9544
9545     PERL_ARGS_ASSERT_VNEWSVPVF;
9546
9547     new_SV(sv);
9548     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9549     return sv;
9550 }
9551
9552 /*
9553 =for apidoc newSVnv
9554
9555 Creates a new SV and copies a floating point value into it.
9556 The reference count for the SV is set to 1.
9557
9558 =cut
9559 */
9560
9561 SV *
9562 Perl_newSVnv(pTHX_ const NV n)
9563 {
9564     SV *sv;
9565
9566     new_SV(sv);
9567     sv_setnv(sv,n);
9568     return sv;
9569 }
9570
9571 /*
9572 =for apidoc newSViv
9573
9574 Creates a new SV and copies an integer into it.  The reference count for the
9575 SV is set to 1.
9576
9577 =cut
9578 */
9579
9580 SV *
9581 Perl_newSViv(pTHX_ const IV i)
9582 {
9583     SV *sv;
9584
9585     new_SV(sv);
9586
9587     /* Inlining ONLY the small relevant subset of sv_setiv here
9588      * for performance. Makes a significant difference. */
9589
9590     /* We're starting from SVt_FIRST, so provided that's
9591      * actual 0, we don't have to unset any SV type flags
9592      * to promote to SVt_IV. */
9593     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9594
9595     SET_SVANY_FOR_BODYLESS_IV(sv);
9596     SvFLAGS(sv) |= SVt_IV;
9597     (void)SvIOK_on(sv);
9598
9599     SvIV_set(sv, i);
9600     SvTAINT(sv);
9601
9602     return sv;
9603 }
9604
9605 /*
9606 =for apidoc newSVuv
9607
9608 Creates a new SV and copies an unsigned integer into it.
9609 The reference count for the SV is set to 1.
9610
9611 =cut
9612 */
9613
9614 SV *
9615 Perl_newSVuv(pTHX_ const UV u)
9616 {
9617     SV *sv;
9618
9619     /* Inlining ONLY the small relevant subset of sv_setuv here
9620      * for performance. Makes a significant difference. */
9621
9622     /* Using ivs is more efficient than using uvs - see sv_setuv */
9623     if (u <= (UV)IV_MAX) {
9624         return newSViv((IV)u);
9625     }
9626
9627     new_SV(sv);
9628
9629     /* We're starting from SVt_FIRST, so provided that's
9630      * actual 0, we don't have to unset any SV type flags
9631      * to promote to SVt_IV. */
9632     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9633
9634     SET_SVANY_FOR_BODYLESS_IV(sv);
9635     SvFLAGS(sv) |= SVt_IV;
9636     (void)SvIOK_on(sv);
9637     (void)SvIsUV_on(sv);
9638
9639     SvUV_set(sv, u);
9640     SvTAINT(sv);
9641
9642     return sv;
9643 }
9644
9645 /*
9646 =for apidoc newSV_type
9647
9648 Creates a new SV, of the type specified.  The reference count for the new SV
9649 is set to 1.
9650
9651 =cut
9652 */
9653
9654 SV *
9655 Perl_newSV_type(pTHX_ const svtype type)
9656 {
9657     SV *sv;
9658
9659     new_SV(sv);
9660     ASSUME(SvTYPE(sv) == SVt_FIRST);
9661     if(type != SVt_FIRST)
9662         sv_upgrade(sv, type);
9663     return sv;
9664 }
9665
9666 /*
9667 =for apidoc newRV_noinc
9668
9669 Creates an RV wrapper for an SV.  The reference count for the original
9670 SV is B<not> incremented.
9671
9672 =cut
9673 */
9674
9675 SV *
9676 Perl_newRV_noinc(pTHX_ SV *const tmpRef)
9677 {
9678     SV *sv;
9679
9680     PERL_ARGS_ASSERT_NEWRV_NOINC;
9681
9682     new_SV(sv);
9683
9684     /* We're starting from SVt_FIRST, so provided that's
9685      * actual 0, we don't have to unset any SV type flags
9686      * to promote to SVt_IV. */
9687     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9688
9689     SET_SVANY_FOR_BODYLESS_IV(sv);
9690     SvFLAGS(sv) |= SVt_IV;
9691     SvROK_on(sv);
9692     SvIV_set(sv, 0);
9693
9694     SvTEMP_off(tmpRef);
9695     SvRV_set(sv, tmpRef);
9696
9697     return sv;
9698 }
9699
9700 /* newRV_inc is the official function name to use now.
9701  * newRV_inc is in fact #defined to newRV in sv.h
9702  */
9703
9704 SV *
9705 Perl_newRV(pTHX_ SV *const sv)
9706 {
9707     PERL_ARGS_ASSERT_NEWRV;
9708
9709     return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
9710 }
9711
9712 /*
9713 =for apidoc newSVsv
9714
9715 Creates a new SV which is an exact duplicate of the original SV.
9716 (Uses C<sv_setsv>.)
9717
9718 =cut
9719 */
9720
9721 SV *
9722 Perl_newSVsv(pTHX_ SV *const old)
9723 {
9724     SV *sv;
9725
9726     if (!old)
9727         return NULL;
9728     if (SvTYPE(old) == (svtype)SVTYPEMASK) {
9729         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
9730         return NULL;
9731     }
9732     /* Do this here, otherwise we leak the new SV if this croaks. */
9733     SvGETMAGIC(old);
9734     new_SV(sv);
9735     /* SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
9736        with SvTEMP_off and SvTEMP_on round a call to sv_setsv.  */
9737     sv_setsv_flags(sv, old, SV_NOSTEAL);
9738     return sv;
9739 }
9740
9741 /*
9742 =for apidoc sv_reset
9743
9744 Underlying implementation for the C<reset> Perl function.
9745 Note that the perl-level function is vaguely deprecated.
9746
9747 =cut
9748 */
9749
9750 void
9751 Perl_sv_reset(pTHX_ const char *s, HV *const stash)
9752 {
9753     PERL_ARGS_ASSERT_SV_RESET;
9754
9755     sv_resetpvn(*s ? s : NULL, strlen(s), stash);
9756 }
9757
9758 void
9759 Perl_sv_resetpvn(pTHX_ const char *s, STRLEN len, HV * const stash)
9760 {
9761     char todo[PERL_UCHAR_MAX+1];
9762     const char *send;
9763
9764     if (!stash || SvTYPE(stash) != SVt_PVHV)
9765         return;
9766
9767     if (!s) {           /* reset ?? searches */
9768         MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
9769         if (mg) {
9770             const U32 count = mg->mg_len / sizeof(PMOP**);
9771             PMOP **pmp = (PMOP**) mg->mg_ptr;
9772             PMOP *const *const end = pmp + count;
9773
9774             while (pmp < end) {
9775 #ifdef USE_ITHREADS
9776                 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
9777 #else
9778                 (*pmp)->op_pmflags &= ~PMf_USED;
9779 #endif
9780                 ++pmp;
9781             }
9782         }
9783         return;
9784     }
9785
9786     /* reset variables */
9787
9788     if (!HvARRAY(stash))
9789         return;
9790
9791     Zero(todo, 256, char);
9792     send = s + len;
9793     while (s < send) {
9794         I32 max;
9795         I32 i = (unsigned char)*s;
9796         if (s[1] == '-') {
9797             s += 2;
9798         }
9799         max = (unsigned char)*s++;
9800         for ( ; i <= max; i++) {
9801             todo[i] = 1;
9802         }
9803         for (i = 0; i <= (I32) HvMAX(stash); i++) {
9804             HE *entry;
9805             for (entry = HvARRAY(stash)[i];
9806                  entry;
9807                  entry = HeNEXT(entry))
9808             {
9809                 GV *gv;
9810                 SV *sv;
9811
9812                 if (!todo[(U8)*HeKEY(entry)])
9813                     continue;
9814                 gv = MUTABLE_GV(HeVAL(entry));
9815                 if (!isGV(gv))
9816                     continue;
9817                 sv = GvSV(gv);
9818                 if (sv && !SvREADONLY(sv)) {
9819                     SV_CHECK_THINKFIRST_COW_DROP(sv);
9820                     if (!isGV(sv)) SvOK_off(sv);
9821                 }
9822                 if (GvAV(gv)) {
9823                     av_clear(GvAV(gv));
9824                 }
9825                 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
9826                     hv_clear(GvHV(gv));
9827                 }
9828             }
9829         }
9830     }
9831 }
9832
9833 /*
9834 =for apidoc sv_2io
9835
9836 Using various gambits, try to get an IO from an SV: the IO slot if its a
9837 GV; or the recursive result if we're an RV; or the IO slot of the symbol
9838 named after the PV if we're a string.
9839
9840 'Get' magic is ignored on the C<sv> passed in, but will be called on
9841 C<SvRV(sv)> if C<sv> is an RV.
9842
9843 =cut
9844 */
9845
9846 IO*
9847 Perl_sv_2io(pTHX_ SV *const sv)
9848 {
9849     IO* io;
9850     GV* gv;
9851
9852     PERL_ARGS_ASSERT_SV_2IO;
9853
9854     switch (SvTYPE(sv)) {
9855     case SVt_PVIO:
9856         io = MUTABLE_IO(sv);
9857         break;
9858     case SVt_PVGV:
9859     case SVt_PVLV:
9860         if (isGV_with_GP(sv)) {
9861             gv = MUTABLE_GV(sv);
9862             io = GvIO(gv);
9863             if (!io)
9864                 Perl_croak(aTHX_ "Bad filehandle: %" HEKf,
9865                                     HEKfARG(GvNAME_HEK(gv)));
9866             break;
9867         }
9868         /* FALLTHROUGH */
9869     default:
9870         if (!SvOK(sv))
9871             Perl_croak(aTHX_ PL_no_usym, "filehandle");
9872         if (SvROK(sv)) {
9873             SvGETMAGIC(SvRV(sv));
9874             return sv_2io(SvRV(sv));
9875         }
9876         gv = gv_fetchsv_nomg(sv, 0, SVt_PVIO);
9877         if (gv)
9878             io = GvIO(gv);
9879         else
9880             io = 0;
9881         if (!io) {
9882             SV *newsv = sv;
9883             if (SvGMAGICAL(sv)) {
9884                 newsv = sv_newmortal();
9885                 sv_setsv_nomg(newsv, sv);
9886             }
9887             Perl_croak(aTHX_ "Bad filehandle: %" SVf, SVfARG(newsv));
9888         }
9889         break;
9890     }
9891     return io;
9892 }
9893
9894 /*
9895 =for apidoc sv_2cv
9896
9897 Using various gambits, try to get a CV from an SV; in addition, try if
9898 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
9899 The flags in C<lref> are passed to C<gv_fetchsv>.
9900
9901 =cut
9902 */
9903
9904 CV *
9905 Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
9906 {
9907     GV *gv = NULL;
9908     CV *cv = NULL;
9909
9910     PERL_ARGS_ASSERT_SV_2CV;
9911
9912     if (!sv) {
9913         *st = NULL;
9914         *gvp = NULL;
9915         return NULL;
9916     }
9917     switch (SvTYPE(sv)) {
9918     case SVt_PVCV:
9919         *st = CvSTASH(sv);
9920         *gvp = NULL;
9921         return MUTABLE_CV(sv);
9922     case SVt_PVHV:
9923     case SVt_PVAV:
9924         *st = NULL;
9925         *gvp = NULL;
9926         return NULL;
9927     default:
9928         SvGETMAGIC(sv);
9929         if (SvROK(sv)) {
9930             if (SvAMAGIC(sv))
9931                 sv = amagic_deref_call(sv, to_cv_amg);
9932
9933             sv = SvRV(sv);
9934             if (SvTYPE(sv) == SVt_PVCV) {
9935                 cv = MUTABLE_CV(sv);
9936                 *gvp = NULL;
9937                 *st = CvSTASH(cv);
9938                 return cv;
9939             }
9940             else if(SvGETMAGIC(sv), isGV_with_GP(sv))
9941                 gv = MUTABLE_GV(sv);
9942             else
9943                 Perl_croak(aTHX_ "Not a subroutine reference");
9944         }
9945         else if (isGV_with_GP(sv)) {
9946             gv = MUTABLE_GV(sv);
9947         }
9948         else {
9949             gv = gv_fetchsv_nomg(sv, lref, SVt_PVCV);
9950         }
9951         *gvp = gv;
9952         if (!gv) {
9953             *st = NULL;
9954             return NULL;
9955         }
9956         /* Some flags to gv_fetchsv mean don't really create the GV  */
9957         if (!isGV_with_GP(gv)) {
9958             *st = NULL;
9959             return NULL;
9960         }
9961         *st = GvESTASH(gv);
9962         if (lref & ~GV_ADDMG && !GvCVu(gv)) {
9963             /* XXX this is probably not what they think they're getting.
9964              * It has the same effect as "sub name;", i.e. just a forward
9965              * declaration! */
9966             newSTUB(gv,0);
9967         }
9968         return GvCVu(gv);
9969     }
9970 }
9971
9972 /*
9973 =for apidoc sv_true
9974
9975 Returns true if the SV has a true value by Perl's rules.
9976 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
9977 instead use an in-line version.
9978
9979 =cut
9980 */
9981
9982 I32
9983 Perl_sv_true(pTHX_ SV *const sv)
9984 {
9985     if (!sv)
9986         return 0;
9987     if (SvPOK(sv)) {
9988         const XPV* const tXpv = (XPV*)SvANY(sv);
9989         if (tXpv &&
9990                 (tXpv->xpv_cur > 1 ||
9991                 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
9992             return 1;
9993         else
9994             return 0;
9995     }
9996     else {
9997         if (SvIOK(sv))
9998             return SvIVX(sv) != 0;
9999         else {
10000             if (SvNOK(sv))
10001                 return SvNVX(sv) != 0.0;
10002             else
10003                 return sv_2bool(sv);
10004         }
10005     }
10006 }
10007
10008 /*
10009 =for apidoc sv_pvn_force
10010
10011 Get a sensible string out of the SV somehow.
10012 A private implementation of the C<SvPV_force> macro for compilers which
10013 can't cope with complex macro expressions.  Always use the macro instead.
10014
10015 =for apidoc sv_pvn_force_flags
10016
10017 Get a sensible string out of the SV somehow.
10018 If C<flags> has the C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
10019 appropriate, else not.  C<sv_pvn_force> and C<sv_pvn_force_nomg> are
10020 implemented in terms of this function.
10021 You normally want to use the various wrapper macros instead: see
10022 C<L</SvPV_force>> and C<L</SvPV_force_nomg>>.
10023
10024 =cut
10025 */
10026
10027 char *
10028 Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
10029 {
10030     PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
10031
10032     if (flags & SV_GMAGIC) SvGETMAGIC(sv);
10033     if (SvTHINKFIRST(sv) && (!SvROK(sv) || SvREADONLY(sv)))
10034         sv_force_normal_flags(sv, 0);
10035
10036     if (SvPOK(sv)) {
10037         if (lp)
10038             *lp = SvCUR(sv);
10039     }
10040     else {
10041         char *s;
10042         STRLEN len;
10043  
10044         if (SvTYPE(sv) > SVt_PVLV
10045             || isGV_with_GP(sv))
10046             /* diag_listed_as: Can't coerce %s to %s in %s */
10047             Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
10048                 OP_DESC(PL_op));
10049         s = sv_2pv_flags(sv, &len, flags &~ SV_GMAGIC);
10050         if (!s) {
10051           s = (char *)"";
10052         }
10053         if (lp)
10054             *lp = len;
10055
10056         if (SvTYPE(sv) < SVt_PV ||
10057             s != SvPVX_const(sv)) {     /* Almost, but not quite, sv_setpvn() */
10058             if (SvROK(sv))
10059                 sv_unref(sv);
10060             SvUPGRADE(sv, SVt_PV);              /* Never FALSE */
10061             SvGROW(sv, len + 1);
10062             Move(s,SvPVX(sv),len,char);
10063             SvCUR_set(sv, len);
10064             SvPVX(sv)[len] = '\0';
10065         }
10066         if (!SvPOK(sv)) {
10067             SvPOK_on(sv);               /* validate pointer */
10068             SvTAINT(sv);
10069             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2pv(%s)\n",
10070                                   PTR2UV(sv),SvPVX_const(sv)));
10071         }
10072     }
10073     (void)SvPOK_only_UTF8(sv);
10074     return SvPVX_mutable(sv);
10075 }
10076
10077 /*
10078 =for apidoc sv_pvbyten_force
10079
10080 The backend for the C<SvPVbytex_force> macro.  Always use the macro
10081 instead.
10082
10083 =cut
10084 */
10085
10086 char *
10087 Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
10088 {
10089     PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
10090
10091     sv_pvn_force(sv,lp);
10092     sv_utf8_downgrade(sv,0);
10093     *lp = SvCUR(sv);
10094     return SvPVX(sv);
10095 }
10096
10097 /*
10098 =for apidoc sv_pvutf8n_force
10099
10100 The backend for the C<SvPVutf8x_force> macro.  Always use the macro
10101 instead.
10102
10103 =cut
10104 */
10105
10106 char *
10107 Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
10108 {
10109     PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
10110
10111     sv_pvn_force(sv,0);
10112     sv_utf8_upgrade_nomg(sv);
10113     *lp = SvCUR(sv);
10114     return SvPVX(sv);
10115 }
10116
10117 /*
10118 =for apidoc sv_reftype
10119
10120 Returns a string describing what the SV is a reference to.
10121
10122 If ob is true and the SV is blessed, the string is the class name,
10123 otherwise it is the type of the SV, "SCALAR", "ARRAY" etc.
10124
10125 =cut
10126 */
10127
10128 const char *
10129 Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
10130 {
10131     PERL_ARGS_ASSERT_SV_REFTYPE;
10132     if (ob && SvOBJECT(sv)) {
10133         return SvPV_nolen_const(sv_ref(NULL, sv, ob));
10134     }
10135     else {
10136         /* WARNING - There is code, for instance in mg.c, that assumes that
10137          * the only reason that sv_reftype(sv,0) would return a string starting
10138          * with 'L' or 'S' is that it is a LVALUE or a SCALAR.
10139          * Yes this a dodgy way to do type checking, but it saves practically reimplementing
10140          * this routine inside other subs, and it saves time.
10141          * Do not change this assumption without searching for "dodgy type check" in
10142          * the code.
10143          * - Yves */
10144         switch (SvTYPE(sv)) {
10145         case SVt_NULL:
10146         case SVt_IV:
10147         case SVt_NV:
10148         case SVt_PV:
10149         case SVt_PVIV:
10150         case SVt_PVNV:
10151         case SVt_PVMG:
10152                                 if (SvVOK(sv))
10153                                     return "VSTRING";
10154                                 if (SvROK(sv))
10155                                     return "REF";
10156                                 else
10157                                     return "SCALAR";
10158
10159         case SVt_PVLV:          return (char *)  (SvROK(sv) ? "REF"
10160                                 /* tied lvalues should appear to be
10161                                  * scalars for backwards compatibility */
10162                                 : (isALPHA_FOLD_EQ(LvTYPE(sv), 't'))
10163                                     ? "SCALAR" : "LVALUE");
10164         case SVt_PVAV:          return "ARRAY";
10165         case SVt_PVHV:          return "HASH";
10166         case SVt_PVCV:          return "CODE";
10167         case SVt_PVGV:          return (char *) (isGV_with_GP(sv)
10168                                     ? "GLOB" : "SCALAR");
10169         case SVt_PVFM:          return "FORMAT";
10170         case SVt_PVIO:          return "IO";
10171         case SVt_INVLIST:       return "INVLIST";
10172         case SVt_REGEXP:        return "REGEXP";
10173         default:                return "UNKNOWN";
10174         }
10175     }
10176 }
10177
10178 /*
10179 =for apidoc sv_ref
10180
10181 Returns a SV describing what the SV passed in is a reference to.
10182
10183 dst can be a SV to be set to the description or NULL, in which case a
10184 mortal SV is returned.
10185
10186 If ob is true and the SV is blessed, the description is the class
10187 name, otherwise it is the type of the SV, "SCALAR", "ARRAY" etc.
10188
10189 =cut
10190 */
10191
10192 SV *
10193 Perl_sv_ref(pTHX_ SV *dst, const SV *const sv, const int ob)
10194 {
10195     PERL_ARGS_ASSERT_SV_REF;
10196
10197     if (!dst)
10198         dst = sv_newmortal();
10199
10200     if (ob && SvOBJECT(sv)) {
10201         HvNAME_get(SvSTASH(sv))
10202                     ? sv_sethek(dst, HvNAME_HEK(SvSTASH(sv)))
10203                     : sv_setpvs(dst, "__ANON__");
10204     }
10205     else {
10206         const char * reftype = sv_reftype(sv, 0);
10207         sv_setpv(dst, reftype);
10208     }
10209     return dst;
10210 }
10211
10212 /*
10213 =for apidoc sv_isobject
10214
10215 Returns a boolean indicating whether the SV is an RV pointing to a blessed
10216 object.  If the SV is not an RV, or if the object is not blessed, then this
10217 will return false.
10218
10219 =cut
10220 */
10221
10222 int
10223 Perl_sv_isobject(pTHX_ SV *sv)
10224 {
10225     if (!sv)
10226         return 0;
10227     SvGETMAGIC(sv);
10228     if (!SvROK(sv))
10229         return 0;
10230     sv = SvRV(sv);
10231     if (!SvOBJECT(sv))
10232         return 0;
10233     return 1;
10234 }
10235
10236 /*
10237 =for apidoc sv_isa
10238
10239 Returns a boolean indicating whether the SV is blessed into the specified
10240 class.  This does not check for subtypes; use C<sv_derived_from> to verify
10241 an inheritance relationship.
10242
10243 =cut
10244 */
10245
10246 int
10247 Perl_sv_isa(pTHX_ SV *sv, const char *const name)
10248 {
10249     const char *hvname;
10250
10251     PERL_ARGS_ASSERT_SV_ISA;
10252
10253     if (!sv)
10254         return 0;
10255     SvGETMAGIC(sv);
10256     if (!SvROK(sv))
10257         return 0;
10258     sv = SvRV(sv);
10259     if (!SvOBJECT(sv))
10260         return 0;
10261     hvname = HvNAME_get(SvSTASH(sv));
10262     if (!hvname)
10263         return 0;
10264
10265     return strEQ(hvname, name);
10266 }
10267
10268 /*
10269 =for apidoc newSVrv
10270
10271 Creates a new SV for the existing RV, C<rv>, to point to.  If C<rv> is not an
10272 RV then it will be upgraded to one.  If C<classname> is non-null then the new
10273 SV will be blessed in the specified package.  The new SV is returned and its
10274 reference count is 1.  The reference count 1 is owned by C<rv>.
10275
10276 =cut
10277 */
10278
10279 SV*
10280 Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
10281 {
10282     SV *sv;
10283
10284     PERL_ARGS_ASSERT_NEWSVRV;
10285
10286     new_SV(sv);
10287
10288     SV_CHECK_THINKFIRST_COW_DROP(rv);
10289
10290     if (UNLIKELY( SvTYPE(rv) >= SVt_PVMG )) {
10291         const U32 refcnt = SvREFCNT(rv);
10292         SvREFCNT(rv) = 0;
10293         sv_clear(rv);
10294         SvFLAGS(rv) = 0;
10295         SvREFCNT(rv) = refcnt;
10296
10297         sv_upgrade(rv, SVt_IV);
10298     } else if (SvROK(rv)) {
10299         SvREFCNT_dec(SvRV(rv));
10300     } else {
10301         prepare_SV_for_RV(rv);
10302     }
10303
10304     SvOK_off(rv);
10305     SvRV_set(rv, sv);
10306     SvROK_on(rv);
10307
10308     if (classname) {
10309         HV* const stash = gv_stashpv(classname, GV_ADD);
10310         (void)sv_bless(rv, stash);
10311     }
10312     return sv;
10313 }
10314
10315 SV *
10316 Perl_newSVavdefelem(pTHX_ AV *av, SSize_t ix, bool extendible)
10317 {
10318     SV * const lv = newSV_type(SVt_PVLV);
10319     PERL_ARGS_ASSERT_NEWSVAVDEFELEM;
10320     LvTYPE(lv) = 'y';
10321     sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
10322     LvTARG(lv) = SvREFCNT_inc_simple_NN(av);
10323     LvSTARGOFF(lv) = ix;
10324     LvTARGLEN(lv) = extendible ? 1 : (STRLEN)UV_MAX;
10325     return lv;
10326 }
10327
10328 /*
10329 =for apidoc sv_setref_pv
10330
10331 Copies a pointer into a new SV, optionally blessing the SV.  The C<rv>
10332 argument will be upgraded to an RV.  That RV will be modified to point to
10333 the new SV.  If the C<pv> argument is C<NULL>, then C<PL_sv_undef> will be placed
10334 into the SV.  The C<classname> argument indicates the package for the
10335 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10336 will have a reference count of 1, and the RV will be returned.
10337
10338 Do not use with other Perl types such as HV, AV, SV, CV, because those
10339 objects will become corrupted by the pointer copy process.
10340
10341 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
10342
10343 =cut
10344 */
10345
10346 SV*
10347 Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
10348 {
10349     PERL_ARGS_ASSERT_SV_SETREF_PV;
10350
10351     if (!pv) {
10352         sv_set_undef(rv);
10353         SvSETMAGIC(rv);
10354     }
10355     else
10356         sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
10357     return rv;
10358 }
10359
10360 /*
10361 =for apidoc sv_setref_iv
10362
10363 Copies an integer into a new SV, optionally blessing the SV.  The C<rv>
10364 argument will be upgraded to an RV.  That RV will be modified to point to
10365 the new SV.  The C<classname> argument indicates the package for the
10366 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10367 will have a reference count of 1, and the RV will be returned.
10368
10369 =cut
10370 */
10371
10372 SV*
10373 Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
10374 {
10375     PERL_ARGS_ASSERT_SV_SETREF_IV;
10376
10377     sv_setiv(newSVrv(rv,classname), iv);
10378     return rv;
10379 }
10380
10381 /*
10382 =for apidoc sv_setref_uv
10383
10384 Copies an unsigned integer into a new SV, optionally blessing the SV.  The C<rv>
10385 argument will be upgraded to an RV.  That RV will be modified to point to
10386 the new SV.  The C<classname> argument indicates the package for the
10387 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10388 will have a reference count of 1, and the RV will be returned.
10389
10390 =cut
10391 */
10392
10393 SV*
10394 Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
10395 {
10396     PERL_ARGS_ASSERT_SV_SETREF_UV;
10397
10398     sv_setuv(newSVrv(rv,classname), uv);
10399     return rv;
10400 }
10401
10402 /*
10403 =for apidoc sv_setref_nv
10404
10405 Copies a double into a new SV, optionally blessing the SV.  The C<rv>
10406 argument will be upgraded to an RV.  That RV will be modified to point to
10407 the new SV.  The C<classname> argument indicates the package for the
10408 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10409 will have a reference count of 1, and the RV will be returned.
10410
10411 =cut
10412 */
10413
10414 SV*
10415 Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
10416 {
10417     PERL_ARGS_ASSERT_SV_SETREF_NV;
10418
10419     sv_setnv(newSVrv(rv,classname), nv);
10420     return rv;
10421 }
10422
10423 /*
10424 =for apidoc sv_setref_pvn
10425
10426 Copies a string into a new SV, optionally blessing the SV.  The length of the
10427 string must be specified with C<n>.  The C<rv> argument will be upgraded to
10428 an RV.  That RV will be modified to point to the new SV.  The C<classname>
10429 argument indicates the package for the blessing.  Set C<classname> to
10430 C<NULL> to avoid the blessing.  The new SV will have a reference count
10431 of 1, and the RV will be returned.
10432
10433 Note that C<sv_setref_pv> copies the pointer while this copies the string.
10434
10435 =cut
10436 */
10437
10438 SV*
10439 Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
10440                    const char *const pv, const STRLEN n)
10441 {
10442     PERL_ARGS_ASSERT_SV_SETREF_PVN;
10443
10444     sv_setpvn(newSVrv(rv,classname), pv, n);
10445     return rv;
10446 }
10447
10448 /*
10449 =for apidoc sv_bless
10450
10451 Blesses an SV into a specified package.  The SV must be an RV.  The package
10452 must be designated by its stash (see C<L</gv_stashpv>>).  The reference count
10453 of the SV is unaffected.
10454
10455 =cut
10456 */
10457
10458 SV*
10459 Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
10460 {
10461     SV *tmpRef;
10462     HV *oldstash = NULL;
10463
10464     PERL_ARGS_ASSERT_SV_BLESS;
10465
10466     SvGETMAGIC(sv);
10467     if (!SvROK(sv))
10468         Perl_croak(aTHX_ "Can't bless non-reference value");
10469     tmpRef = SvRV(sv);
10470     if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY|SVf_PROTECT)) {
10471         if (SvREADONLY(tmpRef))
10472             Perl_croak_no_modify();
10473         if (SvOBJECT(tmpRef)) {
10474             oldstash = SvSTASH(tmpRef);
10475         }
10476     }
10477     SvOBJECT_on(tmpRef);
10478     SvUPGRADE(tmpRef, SVt_PVMG);
10479     SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
10480     SvREFCNT_dec(oldstash);
10481
10482     if(SvSMAGICAL(tmpRef))
10483         if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
10484             mg_set(tmpRef);
10485
10486
10487
10488     return sv;
10489 }
10490
10491 /* Downgrades a PVGV to a PVMG. If it's actually a PVLV, we leave the type
10492  * as it is after unglobbing it.
10493  */
10494
10495 PERL_STATIC_INLINE void
10496 S_sv_unglob(pTHX_ SV *const sv, U32 flags)
10497 {
10498     void *xpvmg;
10499     HV *stash;
10500     SV * const temp = flags & SV_COW_DROP_PV ? NULL : sv_newmortal();
10501
10502     PERL_ARGS_ASSERT_SV_UNGLOB;
10503
10504     assert(SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV);
10505     SvFAKE_off(sv);
10506     if (!(flags & SV_COW_DROP_PV))
10507         gv_efullname3(temp, MUTABLE_GV(sv), "*");
10508
10509     SvREFCNT_inc_simple_void_NN(sv_2mortal(sv));
10510     if (GvGP(sv)) {
10511         if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
10512            && HvNAME_get(stash))
10513             mro_method_changed_in(stash);
10514         gp_free(MUTABLE_GV(sv));
10515     }
10516     if (GvSTASH(sv)) {
10517         sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
10518         GvSTASH(sv) = NULL;
10519     }
10520     GvMULTI_off(sv);
10521     if (GvNAME_HEK(sv)) {
10522         unshare_hek(GvNAME_HEK(sv));
10523     }
10524     isGV_with_GP_off(sv);
10525
10526     if(SvTYPE(sv) == SVt_PVGV) {
10527         /* need to keep SvANY(sv) in the right arena */
10528         xpvmg = new_XPVMG();
10529         StructCopy(SvANY(sv), xpvmg, XPVMG);
10530         del_XPVGV(SvANY(sv));
10531         SvANY(sv) = xpvmg;
10532
10533         SvFLAGS(sv) &= ~SVTYPEMASK;
10534         SvFLAGS(sv) |= SVt_PVMG;
10535     }
10536
10537     /* Intentionally not calling any local SET magic, as this isn't so much a
10538        set operation as merely an internal storage change.  */
10539     if (flags & SV_COW_DROP_PV) SvOK_off(sv);
10540     else sv_setsv_flags(sv, temp, 0);
10541
10542     if ((const GV *)sv == PL_last_in_gv)
10543         PL_last_in_gv = NULL;
10544     else if ((const GV *)sv == PL_statgv)
10545         PL_statgv = NULL;
10546 }
10547
10548 /*
10549 =for apidoc sv_unref_flags
10550
10551 Unsets the RV status of the SV, and decrements the reference count of
10552 whatever was being referenced by the RV.  This can almost be thought of
10553 as a reversal of C<newSVrv>.  The C<cflags> argument can contain
10554 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
10555 (otherwise the decrementing is conditional on the reference count being
10556 different from one or the reference being a readonly SV).
10557 See C<L</SvROK_off>>.
10558
10559 =cut
10560 */
10561
10562 void
10563 Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
10564 {
10565     SV* const target = SvRV(ref);
10566
10567     PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
10568
10569     if (SvWEAKREF(ref)) {
10570         sv_del_backref(target, ref);
10571         SvWEAKREF_off(ref);
10572         SvRV_set(ref, NULL);
10573         return;
10574     }
10575     SvRV_set(ref, NULL);
10576     SvROK_off(ref);
10577     /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
10578        assigned to as BEGIN {$a = \"Foo"} will fail.  */
10579     if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
10580         SvREFCNT_dec_NN(target);
10581     else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
10582         sv_2mortal(target);     /* Schedule for freeing later */
10583 }
10584
10585 /*
10586 =for apidoc sv_untaint
10587
10588 Untaint an SV.  Use C<SvTAINTED_off> instead.
10589
10590 =cut
10591 */
10592
10593 void
10594 Perl_sv_untaint(pTHX_ SV *const sv)
10595 {
10596     PERL_ARGS_ASSERT_SV_UNTAINT;
10597     PERL_UNUSED_CONTEXT;
10598
10599     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
10600         MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
10601         if (mg)
10602             mg->mg_len &= ~1;
10603     }
10604 }
10605
10606 /*
10607 =for apidoc sv_tainted
10608
10609 Test an SV for taintedness.  Use C<SvTAINTED> instead.
10610
10611 =cut
10612 */
10613
10614 bool
10615 Perl_sv_tainted(pTHX_ SV *const sv)
10616 {
10617     PERL_ARGS_ASSERT_SV_TAINTED;
10618     PERL_UNUSED_CONTEXT;
10619
10620     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
10621         const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
10622         if (mg && (mg->mg_len & 1) )
10623             return TRUE;
10624     }
10625     return FALSE;
10626 }
10627
10628 #ifndef NO_MATHOMS  /* Can't move these to mathoms.c because call uiv_2buf(),
10629                        private to this file */
10630
10631 /*
10632 =for apidoc sv_setpviv
10633
10634 Copies an integer into the given SV, also updating its string value.
10635 Does not handle 'set' magic.  See C<L</sv_setpviv_mg>>.
10636
10637 =cut
10638 */
10639
10640 void
10641 Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
10642 {
10643     char buf[TYPE_CHARS(UV)];
10644     char *ebuf;
10645     char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
10646
10647     PERL_ARGS_ASSERT_SV_SETPVIV;
10648
10649     sv_setpvn(sv, ptr, ebuf - ptr);
10650 }
10651
10652 /*
10653 =for apidoc sv_setpviv_mg
10654
10655 Like C<sv_setpviv>, but also handles 'set' magic.
10656
10657 =cut
10658 */
10659
10660 void
10661 Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
10662 {
10663     PERL_ARGS_ASSERT_SV_SETPVIV_MG;
10664
10665     sv_setpviv(sv, iv);
10666     SvSETMAGIC(sv);
10667 }
10668
10669 #endif  /* NO_MATHOMS */
10670
10671 #if defined(PERL_IMPLICIT_CONTEXT)
10672
10673 /* pTHX_ magic can't cope with varargs, so this is a no-context
10674  * version of the main function, (which may itself be aliased to us).
10675  * Don't access this version directly.
10676  */
10677
10678 void
10679 Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
10680 {
10681     dTHX;
10682     va_list args;
10683
10684     PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
10685
10686     va_start(args, pat);
10687     sv_vsetpvf(sv, pat, &args);
10688     va_end(args);
10689 }
10690
10691 /* pTHX_ magic can't cope with varargs, so this is a no-context
10692  * version of the main function, (which may itself be aliased to us).
10693  * Don't access this version directly.
10694  */
10695
10696 void
10697 Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10698 {
10699     dTHX;
10700     va_list args;
10701
10702     PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
10703
10704     va_start(args, pat);
10705     sv_vsetpvf_mg(sv, pat, &args);
10706     va_end(args);
10707 }
10708 #endif
10709
10710 /*
10711 =for apidoc sv_setpvf
10712
10713 Works like C<sv_catpvf> but copies the text into the SV instead of
10714 appending it.  Does not handle 'set' magic.  See C<L</sv_setpvf_mg>>.
10715
10716 =cut
10717 */
10718
10719 void
10720 Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
10721 {
10722     va_list args;
10723
10724     PERL_ARGS_ASSERT_SV_SETPVF;
10725
10726     va_start(args, pat);
10727     sv_vsetpvf(sv, pat, &args);
10728     va_end(args);
10729 }
10730
10731 /*
10732 =for apidoc sv_vsetpvf
10733
10734 Works like C<sv_vcatpvf> but copies the text into the SV instead of
10735 appending it.  Does not handle 'set' magic.  See C<L</sv_vsetpvf_mg>>.
10736
10737 Usually used via its frontend C<sv_setpvf>.
10738
10739 =cut
10740 */
10741
10742 void
10743 Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10744 {
10745     PERL_ARGS_ASSERT_SV_VSETPVF;
10746
10747     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10748 }
10749
10750 /*
10751 =for apidoc sv_setpvf_mg
10752
10753 Like C<sv_setpvf>, but also handles 'set' magic.
10754
10755 =cut
10756 */
10757
10758 void
10759 Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10760 {
10761     va_list args;
10762
10763     PERL_ARGS_ASSERT_SV_SETPVF_MG;
10764
10765     va_start(args, pat);
10766     sv_vsetpvf_mg(sv, pat, &args);
10767     va_end(args);
10768 }
10769
10770 /*
10771 =for apidoc sv_vsetpvf_mg
10772
10773 Like C<sv_vsetpvf>, but also handles 'set' magic.
10774
10775 Usually used via its frontend C<sv_setpvf_mg>.
10776
10777 =cut
10778 */
10779
10780 void
10781 Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10782 {
10783     PERL_ARGS_ASSERT_SV_VSETPVF_MG;
10784
10785     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10786     SvSETMAGIC(sv);
10787 }
10788
10789 #if defined(PERL_IMPLICIT_CONTEXT)
10790
10791 /* pTHX_ magic can't cope with varargs, so this is a no-context
10792  * version of the main function, (which may itself be aliased to us).
10793  * Don't access this version directly.
10794  */
10795
10796 void
10797 Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
10798 {
10799     dTHX;
10800     va_list args;
10801
10802     PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
10803
10804     va_start(args, pat);
10805     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10806     va_end(args);
10807 }
10808
10809 /* pTHX_ magic can't cope with varargs, so this is a no-context
10810  * version of the main function, (which may itself be aliased to us).
10811  * Don't access this version directly.
10812  */
10813
10814 void
10815 Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10816 {
10817     dTHX;
10818     va_list args;
10819
10820     PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
10821
10822     va_start(args, pat);
10823     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10824     SvSETMAGIC(sv);
10825     va_end(args);
10826 }
10827 #endif
10828
10829 /*
10830 =for apidoc sv_catpvf
10831
10832 Processes its arguments like C<sv_catpvfn>, and appends the formatted
10833 output to an SV.  As with C<sv_catpvfn> called with a non-null C-style
10834 variable argument list, argument reordering is not supported.
10835 If the appended data contains "wide" characters
10836 (including, but not limited to, SVs with a UTF-8 PV formatted with C<%s>,
10837 and characters >255 formatted with C<%c>), the original SV might get
10838 upgraded to UTF-8.  Handles 'get' magic, but not 'set' magic.  See
10839 C<L</sv_catpvf_mg>>.  If the original SV was UTF-8, the pattern should be
10840 valid UTF-8; if the original SV was bytes, the pattern should be too.
10841
10842 =cut */
10843
10844 void
10845 Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
10846 {
10847     va_list args;
10848
10849     PERL_ARGS_ASSERT_SV_CATPVF;
10850
10851     va_start(args, pat);
10852     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10853     va_end(args);
10854 }
10855
10856 /*
10857 =for apidoc sv_vcatpvf
10858
10859 Processes its arguments like C<sv_catpvfn> called with a non-null C-style
10860 variable argument list, and appends the formatted output
10861 to an SV.  Does not handle 'set' magic.  See C<L</sv_vcatpvf_mg>>.
10862
10863 Usually used via its frontend C<sv_catpvf>.
10864
10865 =cut
10866 */
10867
10868 void
10869 Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10870 {
10871     PERL_ARGS_ASSERT_SV_VCATPVF;
10872
10873     sv_vcatpvfn_flags(sv, pat, strlen(pat), args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10874 }
10875
10876 /*
10877 =for apidoc sv_catpvf_mg
10878
10879 Like C<sv_catpvf>, but also handles 'set' magic.
10880
10881 =cut
10882 */
10883
10884 void
10885 Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10886 {
10887     va_list args;
10888
10889     PERL_ARGS_ASSERT_SV_CATPVF_MG;
10890
10891     va_start(args, pat);
10892     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10893     SvSETMAGIC(sv);
10894     va_end(args);
10895 }
10896
10897 /*
10898 =for apidoc sv_vcatpvf_mg
10899
10900 Like C<sv_vcatpvf>, but also handles 'set' magic.
10901
10902 Usually used via its frontend C<sv_catpvf_mg>.
10903
10904 =cut
10905 */
10906
10907 void
10908 Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10909 {
10910     PERL_ARGS_ASSERT_SV_VCATPVF_MG;
10911
10912     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10913     SvSETMAGIC(sv);
10914 }
10915
10916 /*
10917 =for apidoc sv_vsetpvfn
10918
10919 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
10920 appending it.
10921
10922 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
10923
10924 =cut
10925 */
10926
10927 void
10928 Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10929                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10930 {
10931     PERL_ARGS_ASSERT_SV_VSETPVFN;
10932
10933     SvPVCLEAR(sv);
10934     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, 0);
10935 }
10936
10937
10938 /*
10939  * Warn of missing argument to sprintf. The value used in place of such
10940  * arguments should be &PL_sv_no; an undefined value would yield
10941  * inappropriate "use of uninit" warnings [perl #71000].
10942  */
10943 STATIC void
10944 S_warn_vcatpvfn_missing_argument(pTHX) {
10945     if (ckWARN(WARN_MISSING)) {
10946         Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
10947                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
10948     }
10949 }
10950
10951
10952 STATIC I32
10953 S_expect_number(pTHX_ char **const pattern)
10954 {
10955     I32 var = 0;
10956
10957     PERL_ARGS_ASSERT_EXPECT_NUMBER;
10958
10959     switch (**pattern) {
10960     case '1': case '2': case '3':
10961     case '4': case '5': case '6':
10962     case '7': case '8': case '9':
10963         var = *(*pattern)++ - '0';
10964         while (isDIGIT(**pattern)) {
10965             const I32 tmp = var * 10 + (*(*pattern)++ - '0');
10966             if (tmp < var)
10967                 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
10968             var = tmp;
10969         }
10970     }
10971     return var;
10972 }
10973
10974 STATIC char *
10975 S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
10976 {
10977     const int neg = nv < 0;
10978     UV uv;
10979
10980     PERL_ARGS_ASSERT_F0CONVERT;
10981
10982     if (UNLIKELY(Perl_isinfnan(nv))) {
10983         STRLEN n = S_infnan_2pv(nv, endbuf - *len, *len, 0);
10984         *len = n;
10985         return endbuf - n;
10986     }
10987     if (neg)
10988         nv = -nv;
10989     if (nv < UV_MAX) {
10990         char *p = endbuf;
10991         nv += 0.5;
10992         uv = (UV)nv;
10993         if (uv & 1 && uv == nv)
10994             uv--;                       /* Round to even */
10995         do {
10996             const unsigned dig = uv % 10;
10997             *--p = '0' + dig;
10998         } while (uv /= 10);
10999         if (neg)
11000             *--p = '-';
11001         *len = endbuf - p;
11002         return p;
11003     }
11004     return NULL;
11005 }
11006
11007
11008 /*
11009 =for apidoc sv_vcatpvfn
11010
11011 =for apidoc sv_vcatpvfn_flags
11012
11013 Processes its arguments like C<vsprintf> and appends the formatted output
11014 to an SV.  Uses an array of SVs if the C-style variable argument list is
11015 missing (C<NULL>). Argument reordering (using format specifiers like C<%2$d>
11016 or C<%*2$d>) is supported only when using an array of SVs; using a C-style
11017 C<va_list> argument list with a format string that uses argument reordering
11018 will yield an exception.
11019
11020 When running with taint checks enabled, indicates via
11021 C<maybe_tainted> if results are untrustworthy (often due to the use of
11022 locales).
11023
11024 If called as C<sv_vcatpvfn> or flags has the C<SV_GMAGIC> bit set, calls get magic.
11025
11026 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
11027
11028 =cut
11029 */
11030
11031 #define VECTORIZE_ARGS  vecsv = va_arg(*args, SV*);\
11032                         vecstr = (U8*)SvPV_const(vecsv,veclen);\
11033                         vec_utf8 = DO_UTF8(vecsv);
11034
11035 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
11036
11037 void
11038 Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
11039                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
11040 {
11041     PERL_ARGS_ASSERT_SV_VCATPVFN;
11042
11043     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, SV_GMAGIC|SV_SMAGIC);
11044 }
11045
11046 #ifdef LONGDOUBLE_DOUBLEDOUBLE
11047 /* The first double can be as large as 2**1023, or '1' x '0' x 1023.
11048  * The second double can be as small as 2**-1074, or '0' x 1073 . '1'.
11049  * The sum of them can be '1' . '0' x 2096 . '1', with implied radix point
11050  * after the first 1023 zero bits.
11051  *
11052  * XXX The 2098 is quite large (262.25 bytes) and therefore some sort
11053  * of dynamically growing buffer might be better, start at just 16 bytes
11054  * (for example) and grow only when necessary.  Or maybe just by looking
11055  * at the exponents of the two doubles? */
11056 #  define DOUBLEDOUBLE_MAXBITS 2098
11057 #endif
11058
11059 /* vhex will contain the values (0..15) of the hex digits ("nybbles"
11060  * of 4 bits); 1 for the implicit 1, and the mantissa bits, four bits
11061  * per xdigit.  For the double-double case, this can be rather many.
11062  * The non-double-double-long-double overshoots since all bits of NV
11063  * are not mantissa bits, there are also exponent bits. */
11064 #ifdef LONGDOUBLE_DOUBLEDOUBLE
11065 #  define VHEX_SIZE (3+DOUBLEDOUBLE_MAXBITS/4)
11066 #else
11067 #  define VHEX_SIZE (1+(NVSIZE * 8)/4)
11068 #endif
11069
11070 /* If we do not have a known long double format, (including not using
11071  * long doubles, or long doubles being equal to doubles) then we will
11072  * fall back to the ldexp/frexp route, with which we can retrieve at
11073  * most as many bits as our widest unsigned integer type is.  We try
11074  * to get a 64-bit unsigned integer even if we are not using a 64-bit UV.
11075  *
11076  * (If you want to test the case of UVSIZE == 4, NVSIZE == 8,
11077  *  set the MANTISSATYPE to int and the MANTISSASIZE to 4.)
11078  */
11079 #if defined(HAS_QUAD) && defined(Uquad_t)
11080 #  define MANTISSATYPE Uquad_t
11081 #  define MANTISSASIZE 8
11082 #else
11083 #  define MANTISSATYPE UV
11084 #  define MANTISSASIZE UVSIZE
11085 #endif
11086
11087 #if defined(DOUBLE_LITTLE_ENDIAN) || defined(LONGDOUBLE_LITTLE_ENDIAN)
11088 #  define HEXTRACT_LITTLE_ENDIAN
11089 #elif defined(DOUBLE_BIG_ENDIAN) || defined(LONGDOUBLE_BIG_ENDIAN)
11090 #  define HEXTRACT_BIG_ENDIAN
11091 #else
11092 #  define HEXTRACT_MIX_ENDIAN
11093 #endif
11094
11095 /* S_hextract() is a helper for Perl_sv_vcatpvfn_flags, for extracting
11096  * the hexadecimal values (for %a/%A).  The nv is the NV where the value
11097  * are being extracted from (either directly from the long double in-memory
11098  * presentation, or from the uquad computed via frexp+ldexp).  frexp also
11099  * is used to update the exponent.  The subnormal is set to true
11100  * for IEEE 754 subnormals/denormals (including the x86 80-bit format).
11101  * The vhex is the pointer to the beginning of the output buffer of VHEX_SIZE.
11102  *
11103  * The tricky part is that S_hextract() needs to be called twice:
11104  * the first time with vend as NULL, and the second time with vend as
11105  * the pointer returned by the first call.  What happens is that on
11106  * the first round the output size is computed, and the intended
11107  * extraction sanity checked.  On the second round the actual output
11108  * (the extraction of the hexadecimal values) takes place.
11109  * Sanity failures cause fatal failures during both rounds. */
11110 STATIC U8*
11111 S_hextract(pTHX_ const NV nv, int* exponent, bool *subnormal,
11112            U8* vhex, U8* vend)
11113 {
11114     U8* v = vhex;
11115     int ix;
11116     int ixmin = 0, ixmax = 0;
11117
11118     /* XXX Inf/NaN are not handled here, since it is
11119      * assumed they are to be output as "Inf" and "NaN". */
11120
11121     /* These macros are just to reduce typos, they have multiple
11122      * repetitions below, but usually only one (or sometimes two)
11123      * of them is really being used. */
11124     /* HEXTRACT_OUTPUT() extracts the high nybble first. */
11125 #define HEXTRACT_OUTPUT_HI(ix) (*v++ = nvp[ix] >> 4)
11126 #define HEXTRACT_OUTPUT_LO(ix) (*v++ = nvp[ix] & 0xF)
11127 #define HEXTRACT_OUTPUT(ix) \
11128     STMT_START { \
11129       HEXTRACT_OUTPUT_HI(ix); HEXTRACT_OUTPUT_LO(ix); \
11130    } STMT_END
11131 #define HEXTRACT_COUNT(ix, c) \
11132     STMT_START { \
11133       v += c; if (ix < ixmin) ixmin = ix; else if (ix > ixmax) ixmax = ix; \
11134    } STMT_END
11135 #define HEXTRACT_BYTE(ix) \
11136     STMT_START { \
11137       if (vend) HEXTRACT_OUTPUT(ix); else HEXTRACT_COUNT(ix, 2); \
11138    } STMT_END
11139 #define HEXTRACT_LO_NYBBLE(ix) \
11140     STMT_START { \
11141       if (vend) HEXTRACT_OUTPUT_LO(ix); else HEXTRACT_COUNT(ix, 1); \
11142    } STMT_END
11143     /* HEXTRACT_TOP_NYBBLE is just convenience disguise,
11144      * to make it look less odd when the top bits of a NV
11145      * are extracted using HEXTRACT_LO_NYBBLE: the highest
11146      * order bits can be in the "low nybble" of a byte. */
11147 #define HEXTRACT_TOP_NYBBLE(ix) HEXTRACT_LO_NYBBLE(ix)
11148 #define HEXTRACT_BYTES_LE(a, b) \
11149     for (ix = a; ix >= b; ix--) { HEXTRACT_BYTE(ix); }
11150 #define HEXTRACT_BYTES_BE(a, b) \
11151     for (ix = a; ix <= b; ix++) { HEXTRACT_BYTE(ix); }
11152 #define HEXTRACT_GET_SUBNORMAL(nv) *subnormal = Perl_fp_class_denorm(nv)
11153 #define HEXTRACT_IMPLICIT_BIT(nv) \
11154     STMT_START { \
11155         if (!*subnormal) { \
11156             if (vend) *v++ = ((nv) == 0.0) ? 0 : 1; else v++; \
11157         } \
11158    } STMT_END
11159
11160 /* Most formats do.  Those which don't should undef this.
11161  *
11162  * But also note that IEEE 754 subnormals do not have it, or,
11163  * expressed alternatively, their implicit bit is zero. */
11164 #define HEXTRACT_HAS_IMPLICIT_BIT
11165
11166 /* Many formats do.  Those which don't should undef this. */
11167 #define HEXTRACT_HAS_TOP_NYBBLE
11168
11169     /* HEXTRACTSIZE is the maximum number of xdigits. */
11170 #if defined(USE_LONG_DOUBLE) && defined(LONGDOUBLE_DOUBLEDOUBLE)
11171 #  define HEXTRACTSIZE (2+DOUBLEDOUBLE_MAXBITS/4)
11172 #else
11173 #  define HEXTRACTSIZE 2 * NVSIZE
11174 #endif
11175
11176     const U8* vmaxend = vhex + HEXTRACTSIZE;
11177     PERL_UNUSED_VAR(ix); /* might happen */
11178     (void)Perl_frexp(PERL_ABS(nv), exponent);
11179     *subnormal = FALSE;
11180     if (vend && (vend <= vhex || vend > vmaxend)) {
11181         /* diag_listed_as: Hexadecimal float: internal error (%s) */
11182         Perl_croak(aTHX_ "Hexadecimal float: internal error (entry)");
11183     }
11184     {
11185         /* First check if using long doubles. */
11186 #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE)
11187 #  if LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN
11188         /* Used in e.g. VMS and HP-UX IA-64, e.g. -0.1L:
11189          * 9a 99 99 99 99 99 99 99 99 99 99 99 99 99 fb bf */
11190         /* The bytes 13..0 are the mantissa/fraction,
11191          * the 15,14 are the sign+exponent. */
11192         const U8* nvp = (const U8*)(&nv);
11193         HEXTRACT_GET_SUBNORMAL(nv);
11194         HEXTRACT_IMPLICIT_BIT(nv);
11195 #   undef HEXTRACT_HAS_TOP_NYBBLE
11196         HEXTRACT_BYTES_LE(13, 0);
11197 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN
11198         /* Used in e.g. Solaris Sparc and HP-UX PA-RISC, e.g. -0.1L:
11199          * bf fb 99 99 99 99 99 99 99 99 99 99 99 99 99 9a */
11200         /* The bytes 2..15 are the mantissa/fraction,
11201          * the 0,1 are the sign+exponent. */
11202         const U8* nvp = (const U8*)(&nv);
11203         HEXTRACT_GET_SUBNORMAL(nv);
11204         HEXTRACT_IMPLICIT_BIT(nv);
11205 #   undef HEXTRACT_HAS_TOP_NYBBLE
11206         HEXTRACT_BYTES_BE(2, 15);
11207 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN
11208         /* x86 80-bit "extended precision", 64 bits of mantissa / fraction /
11209          * significand, 15 bits of exponent, 1 bit of sign.  No implicit bit.
11210          * NVSIZE can be either 12 (ILP32, Solaris x86) or 16 (LP64, Linux
11211          * and OS X), meaning that 2 or 6 bytes are empty padding. */
11212         /* The bytes 0..1 are the sign+exponent,
11213          * the bytes 2..9 are the mantissa/fraction. */
11214         const U8* nvp = (const U8*)(&nv);
11215 #    undef HEXTRACT_HAS_IMPLICIT_BIT
11216 #    undef HEXTRACT_HAS_TOP_NYBBLE
11217         HEXTRACT_GET_SUBNORMAL(nv);
11218         HEXTRACT_BYTES_LE(7, 0);
11219 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN
11220         /* Does this format ever happen? (Wikipedia says the Motorola
11221          * 6888x math coprocessors used format _like_ this but padded
11222          * to 96 bits with 16 unused bits between the exponent and the
11223          * mantissa.) */
11224         const U8* nvp = (const U8*)(&nv);
11225 #    undef HEXTRACT_HAS_IMPLICIT_BIT
11226 #    undef HEXTRACT_HAS_TOP_NYBBLE
11227         HEXTRACT_GET_SUBNORMAL(nv);
11228         HEXTRACT_BYTES_BE(0, 7);
11229 #  else
11230 #    define HEXTRACT_FALLBACK
11231         /* Double-double format: two doubles next to each other.
11232          * The first double is the high-order one, exactly like
11233          * it would be for a "lone" double.  The second double
11234          * is shifted down using the exponent so that that there
11235          * are no common bits.  The tricky part is that the value
11236          * of the double-double is the SUM of the two doubles and
11237          * the second one can be also NEGATIVE.
11238          *
11239          * Because of this tricky construction the bytewise extraction we
11240          * use for the other long double formats doesn't work, we must
11241          * extract the values bit by bit.
11242          *
11243          * The little-endian double-double is used .. somewhere?
11244          *
11245          * The big endian double-double is used in e.g. PPC/Power (AIX)
11246          * and MIPS (SGI).
11247          *
11248          * The mantissa bits are in two separate stretches, e.g. for -0.1L:
11249          * 9a 99 99 99 99 99 59 bc 9a 99 99 99 99 99 b9 3f (LE)
11250          * 3f b9 99 99 99 99 99 9a bc 59 99 99 99 99 99 9a (BE)
11251          */
11252 #  endif
11253 #else /* #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE) */
11254         /* Using normal doubles, not long doubles.
11255          *
11256          * We generate 4-bit xdigits (nybble/nibble) instead of 8-bit
11257          * bytes, since we might need to handle printf precision, and
11258          * also need to insert the radix. */
11259 #  if NVSIZE == 8
11260 #    ifdef HEXTRACT_LITTLE_ENDIAN
11261         /* 0 1 2 3 4 5 6 7 (MSB = 7, LSB = 0, 6+7 = exponent+sign) */
11262         const U8* nvp = (const U8*)(&nv);
11263         HEXTRACT_GET_SUBNORMAL(nv);
11264         HEXTRACT_IMPLICIT_BIT(nv);
11265         HEXTRACT_TOP_NYBBLE(6);
11266         HEXTRACT_BYTES_LE(5, 0);
11267 #    elif defined(HEXTRACT_BIG_ENDIAN)
11268         /* 7 6 5 4 3 2 1 0 (MSB = 7, LSB = 0, 6+7 = exponent+sign) */
11269         const U8* nvp = (const U8*)(&nv);
11270         HEXTRACT_GET_SUBNORMAL(nv);
11271         HEXTRACT_IMPLICIT_BIT(nv);
11272         HEXTRACT_TOP_NYBBLE(1);
11273         HEXTRACT_BYTES_BE(2, 7);
11274 #    elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_LE_BE
11275         /* 4 5 6 7 0 1 2 3 (MSB = 7, LSB = 0, 6:7 = nybble:exponent:sign) */
11276         const U8* nvp = (const U8*)(&nv);
11277         HEXTRACT_GET_SUBNORMAL(nv);
11278         HEXTRACT_IMPLICIT_BIT(nv);
11279         HEXTRACT_TOP_NYBBLE(2); /* 6 */
11280         HEXTRACT_BYTE(1); /* 5 */
11281         HEXTRACT_BYTE(0); /* 4 */
11282         HEXTRACT_BYTE(7); /* 3 */
11283         HEXTRACT_BYTE(6); /* 2 */
11284         HEXTRACT_BYTE(5); /* 1 */
11285         HEXTRACT_BYTE(4); /* 0 */
11286 #    elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_BE_LE
11287         /* 3 2 1 0 7 6 5 4 (MSB = 7, LSB = 0, 7:6 = sign:exponent:nybble) */
11288         const U8* nvp = (const U8*)(&nv);
11289         HEXTRACT_GET_SUBNORMAL(nv);
11290         HEXTRACT_IMPLICIT_BIT(nv);
11291         HEXTRACT_TOP_NYBBLE(5); /* 6 */
11292         HEXTRACT_BYTE(6); /* 5 */
11293         HEXTRACT_BYTE(7); /* 4 */
11294         HEXTRACT_BYTE(0); /* 3 */
11295         HEXTRACT_BYTE(1); /* 2 */
11296         HEXTRACT_BYTE(2); /* 1 */
11297         HEXTRACT_BYTE(3); /* 0 */
11298 #    else
11299 #      define HEXTRACT_FALLBACK
11300 #    endif
11301 #  else
11302 #    define HEXTRACT_FALLBACK
11303 #  endif
11304 #endif /* #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE) #else */
11305 #  ifdef HEXTRACT_FALLBACK
11306         HEXTRACT_GET_SUBNORMAL(nv);
11307 #    undef HEXTRACT_HAS_TOP_NYBBLE /* Meaningless, but consistent. */
11308         /* The fallback is used for the double-double format, and
11309          * for unknown long double formats, and for unknown double
11310          * formats, or in general unknown NV formats. */
11311         if (nv == (NV)0.0) {
11312             if (vend)
11313                 *v++ = 0;
11314             else
11315                 v++;
11316             *exponent = 0;
11317         }
11318         else {
11319             NV d = nv < 0 ? -nv : nv;
11320             NV e = (NV)1.0;
11321             U8 ha = 0x0; /* hexvalue accumulator */
11322             U8 hd = 0x8; /* hexvalue digit */
11323
11324             /* Shift d and e (and update exponent) so that e <= d < 2*e,
11325              * this is essentially manual frexp(). Multiplying by 0.5 and
11326              * doubling should be lossless in binary floating point. */
11327
11328             *exponent = 1;
11329
11330             while (e > d) {
11331                 e *= (NV)0.5;
11332                 (*exponent)--;
11333             }
11334             /* Now d >= e */
11335
11336             while (d >= e + e) {
11337                 e += e;
11338                 (*exponent)++;
11339             }
11340             /* Now e <= d < 2*e */
11341
11342             /* First extract the leading hexdigit (the implicit bit). */
11343             if (d >= e) {
11344                 d -= e;
11345                 if (vend)
11346                     *v++ = 1;
11347                 else
11348                     v++;
11349             }
11350             else {
11351                 if (vend)
11352                     *v++ = 0;
11353                 else
11354                     v++;
11355             }
11356             e *= (NV)0.5;
11357
11358             /* Then extract the remaining hexdigits. */
11359             while (d > (NV)0.0) {
11360                 if (d >= e) {
11361                     ha |= hd;
11362                     d -= e;
11363                 }
11364                 if (hd == 1) {
11365                     /* Output or count in groups of four bits,
11366                      * that is, when the hexdigit is down to one. */
11367                     if (vend)
11368                         *v++ = ha;
11369                     else
11370                         v++;
11371                     /* Reset the hexvalue. */
11372                     ha = 0x0;
11373                     hd = 0x8;
11374                 }
11375                 else
11376                     hd >>= 1;
11377                 e *= (NV)0.5;
11378             }
11379
11380             /* Flush possible pending hexvalue. */
11381             if (ha) {
11382                 if (vend)
11383                     *v++ = ha;
11384                 else
11385                     v++;
11386             }
11387         }
11388 #  endif
11389     }
11390     /* Croak for various reasons: if the output pointer escaped the
11391      * output buffer, if the extraction index escaped the extraction
11392      * buffer, or if the ending output pointer didn't match the
11393      * previously computed value. */
11394     if (v <= vhex || v - vhex >= VHEX_SIZE ||
11395         /* For double-double the ixmin and ixmax stay at zero,
11396          * which is convenient since the HEXTRACTSIZE is tricky
11397          * for double-double. */
11398         ixmin < 0 || ixmax >= NVSIZE ||
11399         (vend && v != vend)) {
11400         /* diag_listed_as: Hexadecimal float: internal error (%s) */
11401         Perl_croak(aTHX_ "Hexadecimal float: internal error (overflow)");
11402     }
11403     return v;
11404 }
11405
11406 /* Helper for sv_vcatpvfn_flags().  */
11407 #define FETCH_VCATPVFN_ARGUMENT(var, in_range, expr)   \
11408     STMT_START {                                       \
11409         if (in_range)                                  \
11410             (var) = (expr);                            \
11411         else {                                         \
11412             (var) = &PL_sv_no; /* [perl #71000] */     \
11413             arg_missing = TRUE;                        \
11414         }                                              \
11415     } STMT_END
11416
11417 void
11418 Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
11419                        va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted,
11420                        const U32 flags)
11421 {
11422     char *p;
11423     char *q;
11424     const char *patend;
11425     STRLEN origlen;
11426     I32 svix = 0;
11427     static const char nullstr[] = "(null)";
11428     SV *argsv = NULL;
11429     bool has_utf8 = DO_UTF8(sv);    /* has the result utf8? */
11430     const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
11431     SV *nsv = NULL;
11432     /* Times 4: a decimal digit takes more than 3 binary digits.
11433      * NV_DIG: mantissa takes than many decimal digits.
11434      * Plus 32: Playing safe. */
11435     char ebuf[IV_DIG * 4 + NV_DIG + 32];
11436     bool no_redundant_warning = FALSE; /* did we use any explicit format parameter index? */
11437     bool hexfp = FALSE; /* hexadecimal floating point? */
11438
11439     DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
11440
11441     PERL_ARGS_ASSERT_SV_VCATPVFN_FLAGS;
11442     PERL_UNUSED_ARG(maybe_tainted);
11443
11444     if (flags & SV_GMAGIC)
11445         SvGETMAGIC(sv);
11446
11447     /* no matter what, this is a string now */
11448     (void)SvPV_force_nomg(sv, origlen);
11449
11450     /* special-case "", "%s", and "%-p" (SVf - see below) */
11451     if (patlen == 0) {
11452         if (svmax && ckWARN(WARN_REDUNDANT))
11453             Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
11454                         PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
11455         return;
11456     }
11457     if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
11458         if (svmax > 1 && ckWARN(WARN_REDUNDANT))
11459             Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
11460                         PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
11461
11462         if (args) {
11463             const char * const s = va_arg(*args, char*);
11464             sv_catpv_nomg(sv, s ? s : nullstr);
11465         }
11466         else if (svix < svmax) {
11467             /* we want get magic on the source but not the target. sv_catsv can't do that, though */
11468             SvGETMAGIC(*svargs);
11469             sv_catsv_nomg(sv, *svargs);
11470         }
11471         else
11472             S_warn_vcatpvfn_missing_argument(aTHX);
11473         return;
11474     }
11475     if (args && patlen == 3 && pat[0] == '%' &&
11476                 pat[1] == '-' && pat[2] == 'p') {
11477         if (svmax > 1 && ckWARN(WARN_REDUNDANT))
11478             Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
11479                         PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
11480         argsv = MUTABLE_SV(va_arg(*args, void*));
11481         sv_catsv_nomg(sv, argsv);
11482         return;
11483     }
11484
11485 #if !defined(USE_LONG_DOUBLE) && !defined(USE_QUADMATH)
11486     /* special-case "%.<number>[gf]" */
11487     if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
11488          && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
11489         unsigned digits = 0;
11490         const char *pp;
11491
11492         pp = pat + 2;
11493         while (*pp >= '0' && *pp <= '9')
11494             digits = 10 * digits + (*pp++ - '0');
11495
11496         /* XXX: Why do this `svix < svmax` test? Couldn't we just
11497            format the first argument and WARN_REDUNDANT if svmax > 1?
11498            Munged by Nicholas Clark in v5.13.0-209-g95ea86d */
11499         if (pp - pat == (int)patlen - 1 && svix < svmax) {
11500             const NV nv = SvNV(*svargs);
11501             if (LIKELY(!Perl_isinfnan(nv))) {
11502                 if (*pp == 'g') {
11503                     /* Add check for digits != 0 because it seems that some
11504                        gconverts are buggy in this case, and we don't yet have
11505                        a Configure test for this.  */
11506                     if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
11507                         /* 0, point, slack */
11508                         STORE_LC_NUMERIC_SET_TO_NEEDED();
11509                         SNPRINTF_G(nv, ebuf, size, digits);
11510                         sv_catpv_nomg(sv, ebuf);
11511                         if (*ebuf)      /* May return an empty string for digits==0 */
11512                             return;
11513                     }
11514                 } else if (!digits) {
11515                     STRLEN l;
11516
11517                     if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
11518                         sv_catpvn_nomg(sv, p, l);
11519                         return;
11520                     }
11521                 }
11522             }
11523         }
11524     }
11525 #endif /* !USE_LONG_DOUBLE */
11526
11527     if (!args && svix < svmax && DO_UTF8(*svargs))
11528         has_utf8 = TRUE;
11529
11530     patend = (char*)pat + patlen;
11531     for (p = (char*)pat; p < patend; p = q) {
11532         bool alt = FALSE;
11533         bool left = FALSE;
11534         bool vectorize = FALSE;
11535         bool vectorarg = FALSE;
11536         bool vec_utf8 = FALSE;
11537         char fill = ' ';
11538         char plus = 0;
11539         char intsize = 0;
11540         STRLEN width = 0;
11541         STRLEN zeros = 0;
11542         bool has_precis = FALSE;
11543         STRLEN precis = 0;
11544         const I32 osvix = svix;
11545         bool is_utf8 = FALSE;  /* is this item utf8?   */
11546         bool used_explicit_ix = FALSE;
11547         bool arg_missing = FALSE;
11548 #ifdef HAS_LDBL_SPRINTF_BUG
11549         /* This is to try to fix a bug with irix/nonstop-ux/powerux and
11550            with sfio - Allen <allens@cpan.org> */
11551         bool fix_ldbl_sprintf_bug = FALSE;
11552 #endif
11553
11554         char esignbuf[4];
11555         U8 utf8buf[UTF8_MAXBYTES+1];
11556         STRLEN esignlen = 0;
11557
11558         const char *eptr = NULL;
11559         const char *fmtstart;
11560         STRLEN elen = 0;
11561         SV *vecsv = NULL;
11562         const U8 *vecstr = NULL;
11563         STRLEN veclen = 0;
11564         char c = 0;
11565         int i;
11566         unsigned base = 0;
11567         IV iv = 0;
11568         UV uv = 0;
11569         /* We need a long double target in case HAS_LONG_DOUBLE,
11570          * even without USE_LONG_DOUBLE, so that we can printf with
11571          * long double formats, even without NV being long double.
11572          * But we call the target 'fv' instead of 'nv', since most of
11573          * the time it is not (most compilers these days recognize
11574          * "long double", even if only as a synonym for "double").
11575         */
11576 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE && \
11577         defined(PERL_PRIgldbl) && !defined(USE_QUADMATH)
11578         long double fv;
11579 #  ifdef Perl_isfinitel
11580 #    define FV_ISFINITE(x) Perl_isfinitel(x)
11581 #  endif
11582 #  define FV_GF PERL_PRIgldbl
11583 #    if defined(__VMS) && defined(__ia64) && defined(__IEEE_FLOAT)
11584        /* Work around breakage in OTS$CVT_FLOAT_T_X */
11585 #      define NV_TO_FV(nv,fv) STMT_START {                   \
11586                                            double _dv = nv;  \
11587                                            fv = Perl_isnan(_dv) ? LDBL_QNAN : _dv; \
11588                               } STMT_END
11589 #    else
11590 #      define NV_TO_FV(nv,fv) (fv)=(nv)
11591 #    endif
11592 #else
11593         NV fv;
11594 #  define FV_GF NVgf
11595 #  define NV_TO_FV(nv,fv) (fv)=(nv)
11596 #endif
11597 #ifndef FV_ISFINITE
11598 #  define FV_ISFINITE(x) Perl_isfinite((NV)(x))
11599 #endif
11600         NV nv;
11601         STRLEN have;
11602         STRLEN need;
11603         STRLEN gap;
11604         const char *dotstr = ".";
11605         STRLEN dotstrlen = 1;
11606         I32 efix = 0; /* explicit format parameter index */
11607         I32 ewix = 0; /* explicit width index */
11608         I32 epix = 0; /* explicit precision index */
11609         I32 evix = 0; /* explicit vector index */
11610         bool asterisk = FALSE;
11611         bool infnan = FALSE;
11612
11613         /* echo everything up to the next format specification */
11614         for (q = p; q < patend && *q != '%'; ++q) ;
11615         if (q > p) {
11616             if (has_utf8 && !pat_utf8)
11617                 sv_catpvn_nomg_utf8_upgrade(sv, p, q - p, nsv);
11618             else
11619                 sv_catpvn_nomg(sv, p, q - p);
11620             p = q;
11621         }
11622         if (q++ >= patend)
11623             break;
11624
11625         fmtstart = q;
11626
11627 /*
11628     We allow format specification elements in this order:
11629         \d+\$              explicit format parameter index
11630         [-+ 0#]+           flags
11631         v|\*(\d+\$)?v      vector with optional (optionally specified) arg
11632         0                  flag (as above): repeated to allow "v02"     
11633         \d+|\*(\d+\$)?     width using optional (optionally specified) arg
11634         \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
11635         [hlqLV]            size
11636     [%bcdefginopsuxDFOUX] format (mandatory)
11637 */
11638
11639         if (args) {
11640 /*  
11641         As of perl5.9.3, printf format checking is on by default.
11642         Internally, perl uses %p formats to provide an escape to
11643         some extended formatting.  This block deals with those
11644         extensions: if it does not match, (char*)q is reset and
11645         the normal format processing code is used.
11646
11647         Currently defined extensions are:
11648                 %p              include pointer address (standard)      
11649                 %-p     (SVf)   include an SV (previously %_)
11650                 %-<num>p        include an SV with precision <num>      
11651                 %2p             include a HEK
11652                 %3p             include a HEK with precision of 256
11653                 %4p             char* preceded by utf8 flag and length
11654                 %<num>p         (where num is 1 or > 4) reserved for future
11655                                 extensions
11656
11657         Robin Barker 2005-07-14 (but modified since)
11658
11659                 %1p     (VDf)   removed.  RMB 2007-10-19
11660 */
11661             char* r = q; 
11662             bool sv = FALSE;    
11663             STRLEN n = 0;
11664             if (*q == '-')
11665                 sv = *q++;
11666             else if (strnEQ(q, UTF8f, sizeof(UTF8f)-1)) { /* UTF8f */
11667                 /* The argument has already gone through cBOOL, so the cast
11668                    is safe. */
11669                 is_utf8 = (bool)va_arg(*args, int);
11670                 elen = va_arg(*args, UV);
11671                 /* if utf8 length is larger than 0x7ffff..., then it might
11672                  * have been a signed value that wrapped */
11673                 if (elen  > ((~(STRLEN)0) >> 1)) {
11674                     assert(0); /* in DEBUGGING build we want to crash */
11675                     elen= 0; /* otherwise we want to treat this as an empty string */
11676                 }
11677                 eptr = va_arg(*args, char *);
11678                 q += sizeof(UTF8f)-1;
11679                 goto string;
11680             }
11681             n = expect_number(&q);
11682             if (*q++ == 'p') {
11683                 if (sv) {                       /* SVf */
11684                     if (n) {
11685                         precis = n;
11686                         has_precis = TRUE;
11687                     }
11688                     argsv = MUTABLE_SV(va_arg(*args, void*));
11689                     eptr = SvPV_const(argsv, elen);
11690                     if (DO_UTF8(argsv))
11691                         is_utf8 = TRUE;
11692                     goto string;
11693                 }
11694                 else if (n==2 || n==3) {        /* HEKf */
11695                     HEK * const hek = va_arg(*args, HEK *);
11696                     eptr = HEK_KEY(hek);
11697                     elen = HEK_LEN(hek);
11698                     if (HEK_UTF8(hek)) is_utf8 = TRUE;
11699                     if (n==3) precis = 256, has_precis = TRUE;
11700                     goto string;
11701                 }
11702                 else if (n) {
11703                     Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
11704                                      "internal %%<num>p might conflict with future printf extensions");
11705                 }
11706             }
11707             q = r; 
11708         }
11709
11710         if ( (width = expect_number(&q)) ) {
11711             if (*q == '$') {
11712                 if (args)
11713                     Perl_croak_nocontext(
11714                         "Cannot yet reorder sv_catpvfn() arguments from va_list");
11715                 ++q;
11716                 efix = width;
11717                 used_explicit_ix = TRUE;
11718             } else {
11719                 goto gotwidth;
11720             }
11721         }
11722
11723         /* FLAGS */
11724
11725         while (*q) {
11726             switch (*q) {
11727             case ' ':
11728             case '+':
11729                 if (plus == '+' && *q == ' ') /* '+' over ' ' */
11730                     q++;
11731                 else
11732                     plus = *q++;
11733                 continue;
11734
11735             case '-':
11736                 left = TRUE;
11737                 q++;
11738                 continue;
11739
11740             case '0':
11741                 fill = *q++;
11742                 continue;
11743
11744             case '#':
11745                 alt = TRUE;
11746                 q++;
11747                 continue;
11748
11749             default:
11750                 break;
11751             }
11752             break;
11753         }
11754
11755       tryasterisk:
11756         if (*q == '*') {
11757             q++;
11758             if ( (ewix = expect_number(&q)) ) {
11759                 if (*q++ == '$') {
11760                     if (args)
11761                         Perl_croak_nocontext(
11762                             "Cannot yet reorder sv_catpvfn() arguments from va_list");
11763                     used_explicit_ix = TRUE;
11764                 } else
11765                     goto unknown;
11766             }
11767             asterisk = TRUE;
11768         }
11769         if (*q == 'v') {
11770             q++;
11771             if (vectorize)
11772                 goto unknown;
11773             if ((vectorarg = asterisk)) {
11774                 evix = ewix;
11775                 ewix = 0;
11776                 asterisk = FALSE;
11777             }
11778             vectorize = TRUE;
11779             goto tryasterisk;
11780         }
11781
11782         if (!asterisk)
11783         {
11784             if( *q == '0' )
11785                 fill = *q++;
11786             width = expect_number(&q);
11787         }
11788
11789         if (vectorize && vectorarg) {
11790             /* vectorizing, but not with the default "." */
11791             if (args)
11792                 vecsv = va_arg(*args, SV*);
11793             else if (evix) {
11794                 FETCH_VCATPVFN_ARGUMENT(
11795                     vecsv, evix > 0 && evix <= svmax, svargs[evix-1]);
11796             } else {
11797                 FETCH_VCATPVFN_ARGUMENT(
11798                     vecsv, svix < svmax, svargs[svix++]);
11799             }
11800             dotstr = SvPV_const(vecsv, dotstrlen);
11801             /* Keep the DO_UTF8 test *after* the SvPV call, else things go
11802                bad with tied or overloaded values that return UTF8.  */
11803             if (DO_UTF8(vecsv))
11804                 is_utf8 = TRUE;
11805             else if (has_utf8) {
11806                 vecsv = sv_mortalcopy(vecsv);
11807                 sv_utf8_upgrade(vecsv);
11808                 dotstr = SvPV_const(vecsv, dotstrlen);
11809                 is_utf8 = TRUE;
11810             }               
11811         }
11812
11813         if (asterisk) {
11814             if (args)
11815                 i = va_arg(*args, int);
11816             else
11817                 i = (ewix ? ewix <= svmax : svix < svmax) ?
11818                     SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
11819             left |= (i < 0);
11820             width = (i < 0) ? -i : i;
11821         }
11822       gotwidth:
11823
11824         /* PRECISION */
11825
11826         if (*q == '.') {
11827             q++;
11828             if (*q == '*') {
11829                 q++;
11830                 if ( (epix = expect_number(&q)) ) {
11831                     if (*q++ == '$') {
11832                         if (args)
11833                             Perl_croak_nocontext(
11834                                 "Cannot yet reorder sv_catpvfn() arguments from va_list");
11835                         used_explicit_ix = TRUE;
11836                     } else
11837                         goto unknown;
11838                 }
11839                 if (args)
11840                     i = va_arg(*args, int);
11841                 else {
11842                     SV *precsv;
11843                     if (epix)
11844                         FETCH_VCATPVFN_ARGUMENT(
11845                             precsv, epix > 0 && epix <= svmax, svargs[epix-1]);
11846                     else
11847                         FETCH_VCATPVFN_ARGUMENT(
11848                             precsv, svix < svmax, svargs[svix++]);
11849                     i = precsv == &PL_sv_no ? 0 : SvIVx(precsv);
11850                 }
11851                 precis = i;
11852                 has_precis = !(i < 0);
11853             }
11854             else {
11855                 precis = 0;
11856                 while (isDIGIT(*q))
11857                     precis = precis * 10 + (*q++ - '0');
11858                 has_precis = TRUE;
11859             }
11860         }
11861
11862         if (vectorize) {
11863             if (args) {
11864                 VECTORIZE_ARGS
11865             }
11866             else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
11867                 vecsv = svargs[efix ? efix-1 : svix++];
11868                 vecstr = (U8*)SvPV_const(vecsv,veclen);
11869                 vec_utf8 = DO_UTF8(vecsv);
11870
11871                 /* if this is a version object, we need to convert
11872                  * back into v-string notation and then let the
11873                  * vectorize happen normally
11874                  */
11875                 if (sv_isobject(vecsv) && sv_derived_from(vecsv, "version")) {
11876                     if ( hv_existss(MUTABLE_HV(SvRV(vecsv)), "alpha") ) {
11877                         Perl_ck_warner_d(aTHX_ packWARN(WARN_PRINTF),
11878                         "vector argument not supported with alpha versions");
11879                         goto vdblank;
11880                     }
11881                     vecsv = sv_newmortal();
11882                     scan_vstring((char *)vecstr, (char *)vecstr + veclen,
11883                                  vecsv);
11884                     vecstr = (U8*)SvPV_const(vecsv, veclen);
11885                     vec_utf8 = DO_UTF8(vecsv);
11886                 }
11887             }
11888             else {
11889               vdblank:
11890                 vecstr = (U8*)"";
11891                 veclen = 0;
11892             }
11893         }
11894
11895         /* SIZE */
11896
11897         switch (*q) {
11898 #ifdef WIN32
11899         case 'I':                       /* Ix, I32x, and I64x */
11900 #  ifdef USE_64_BIT_INT
11901             if (q[1] == '6' && q[2] == '4') {
11902                 q += 3;
11903                 intsize = 'q';
11904                 break;
11905             }
11906 #  endif
11907             if (q[1] == '3' && q[2] == '2') {
11908                 q += 3;
11909                 break;
11910             }
11911 #  ifdef USE_64_BIT_INT
11912             intsize = 'q';
11913 #  endif
11914             q++;
11915             break;
11916 #endif
11917 #if (IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)) || \
11918     (IVSIZE == 4 && !defined(HAS_LONG_DOUBLE))
11919         case 'L':                       /* Ld */
11920             /* FALLTHROUGH */
11921 #  ifdef USE_QUADMATH
11922         case 'Q':
11923             /* FALLTHROUGH */
11924 #  endif
11925 #  if IVSIZE >= 8
11926         case 'q':                       /* qd */
11927 #  endif
11928             intsize = 'q';
11929             q++;
11930             break;
11931 #endif
11932         case 'l':
11933             ++q;
11934 #if (IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)) || \
11935     (IVSIZE == 4 && !defined(HAS_LONG_DOUBLE))
11936             if (*q == 'l') {    /* lld, llf */
11937                 intsize = 'q';
11938                 ++q;
11939             }
11940             else
11941 #endif
11942                 intsize = 'l';
11943             break;
11944         case 'h':
11945             if (*++q == 'h') {  /* hhd, hhu */
11946                 intsize = 'c';
11947                 ++q;
11948             }
11949             else
11950                 intsize = 'h';
11951             break;
11952         case 'V':
11953         case 'z':
11954         case 't':
11955 #ifdef I_STDINT
11956         case 'j':
11957 #endif
11958             intsize = *q++;
11959             break;
11960         }
11961
11962         /* CONVERSION */
11963
11964         if (*q == '%') {
11965             eptr = q++;
11966             elen = 1;
11967             if (vectorize) {
11968                 c = '%';
11969                 goto unknown;
11970             }
11971             goto string;
11972         }
11973
11974         if (!vectorize && !args) {
11975             if (efix) {
11976                 const I32 i = efix-1;
11977                 FETCH_VCATPVFN_ARGUMENT(argsv, i >= 0 && i < svmax, svargs[i]);
11978             } else {
11979                 FETCH_VCATPVFN_ARGUMENT(argsv, svix >= 0 && svix < svmax,
11980                                         svargs[svix++]);
11981             }
11982         }
11983
11984         if (argsv && strchr("BbcDdiOopuUXx",*q)) {
11985             /* XXX va_arg(*args) case? need peek, use va_copy? */
11986             SvGETMAGIC(argsv);
11987             if (UNLIKELY(SvAMAGIC(argsv)))
11988                 argsv = sv_2num(argsv);
11989             infnan = UNLIKELY(isinfnansv(argsv));
11990         }
11991
11992         switch (c = *q++) {
11993
11994             /* STRINGS */
11995
11996         case 'c':
11997             if (vectorize)
11998                 goto unknown;
11999             if (infnan)
12000                 Perl_croak(aTHX_ "Cannot printf %" NVgf " with '%c'",
12001                            /* no va_arg() case */
12002                            SvNV_nomg(argsv), (int)c);
12003             uv = (args) ? va_arg(*args, int) : SvIV_nomg(argsv);
12004             if ((uv > 255 ||
12005                  (!UVCHR_IS_INVARIANT(uv) && SvUTF8(sv)))
12006                 && !IN_BYTES) {
12007                 eptr = (char*)utf8buf;
12008                 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
12009                 is_utf8 = TRUE;
12010             }
12011             else {
12012                 c = (char)uv;
12013                 eptr = &c;
12014                 elen = 1;
12015             }
12016             goto string;
12017
12018         case 's':
12019             if (vectorize)
12020                 goto unknown;
12021             if (args) {
12022                 eptr = va_arg(*args, char*);
12023                 if (eptr)
12024                     elen = strlen(eptr);
12025                 else {
12026                     eptr = (char *)nullstr;
12027                     elen = sizeof nullstr - 1;
12028                 }
12029             }
12030             else {
12031                 eptr = SvPV_const(argsv, elen);
12032                 if (DO_UTF8(argsv)) {
12033                     STRLEN old_precis = precis;
12034                     if (has_precis && precis < elen) {
12035                         STRLEN ulen = sv_or_pv_len_utf8(argsv, eptr, elen);
12036                         STRLEN p = precis > ulen ? ulen : precis;
12037                         precis = sv_or_pv_pos_u2b(argsv, eptr, p, 0);
12038                                                         /* sticks at end */
12039                     }
12040                     if (width) { /* fudge width (can't fudge elen) */
12041                         if (has_precis && precis < elen)
12042                             width += precis - old_precis;
12043                         else
12044                             width +=
12045                                 elen - sv_or_pv_len_utf8(argsv,eptr,elen);
12046                     }
12047                     is_utf8 = TRUE;
12048                 }
12049             }
12050
12051         string:
12052             if (has_precis && precis < elen)
12053                 elen = precis;
12054             break;
12055
12056             /* INTEGERS */
12057
12058         case 'p':
12059             if (infnan) {
12060                 goto floating_point;
12061             }
12062             if (alt || vectorize)
12063                 goto unknown;
12064             uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
12065             base = 16;
12066             goto integer;
12067
12068         case 'D':
12069 #ifdef IV_IS_QUAD
12070             intsize = 'q';
12071 #else
12072             intsize = 'l';
12073 #endif
12074             /* FALLTHROUGH */
12075         case 'd':
12076         case 'i':
12077             if (infnan) {
12078                 goto floating_point;
12079             }
12080             if (vectorize) {
12081                 STRLEN ulen;
12082                 if (!veclen)
12083                     goto donevalidconversion;
12084                 if (vec_utf8)
12085                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
12086                                         UTF8_ALLOW_ANYUV);
12087                 else {
12088                     uv = *vecstr;
12089                     ulen = 1;
12090                 }
12091                 vecstr += ulen;
12092                 veclen -= ulen;
12093                 if (plus)
12094                      esignbuf[esignlen++] = plus;
12095             }
12096             else if (args) {
12097                 switch (intsize) {
12098                 case 'c':       iv = (char)va_arg(*args, int); break;
12099                 case 'h':       iv = (short)va_arg(*args, int); break;
12100                 case 'l':       iv = va_arg(*args, long); break;
12101                 case 'V':       iv = va_arg(*args, IV); break;
12102                 case 'z':       iv = va_arg(*args, SSize_t); break;
12103 #ifdef HAS_PTRDIFF_T
12104                 case 't':       iv = va_arg(*args, ptrdiff_t); break;
12105 #endif
12106                 default:        iv = va_arg(*args, int); break;
12107 #ifdef I_STDINT
12108                 case 'j':       iv = va_arg(*args, intmax_t); break;
12109 #endif
12110                 case 'q':
12111 #if IVSIZE >= 8
12112                                 iv = va_arg(*args, Quad_t); break;
12113 #else
12114                                 goto unknown;
12115 #endif
12116                 }
12117             }
12118             else {
12119                 IV tiv = SvIV_nomg(argsv); /* work around GCC bug #13488 */
12120                 switch (intsize) {
12121                 case 'c':       iv = (char)tiv; break;
12122                 case 'h':       iv = (short)tiv; break;
12123                 case 'l':       iv = (long)tiv; break;
12124                 case 'V':
12125                 default:        iv = tiv; break;
12126                 case 'q':
12127 #if IVSIZE >= 8
12128                                 iv = (Quad_t)tiv; break;
12129 #else
12130                                 goto unknown;
12131 #endif
12132                 }
12133             }
12134             if ( !vectorize )   /* we already set uv above */
12135             {
12136                 if (iv >= 0) {
12137                     uv = iv;
12138                     if (plus)
12139                         esignbuf[esignlen++] = plus;
12140                 }
12141                 else {
12142                     uv = (iv == IV_MIN) ? (UV)iv : (UV)(-iv);
12143                     esignbuf[esignlen++] = '-';
12144                 }
12145             }
12146             base = 10;
12147             goto integer;
12148
12149         case 'U':
12150 #ifdef IV_IS_QUAD
12151             intsize = 'q';
12152 #else
12153             intsize = 'l';
12154 #endif
12155             /* FALLTHROUGH */
12156         case 'u':
12157             base = 10;
12158             goto uns_integer;
12159
12160         case 'B':
12161         case 'b':
12162             base = 2;
12163             goto uns_integer;
12164
12165         case 'O':
12166 #ifdef IV_IS_QUAD
12167             intsize = 'q';
12168 #else
12169             intsize = 'l';
12170 #endif
12171             /* FALLTHROUGH */
12172         case 'o':
12173             base = 8;
12174             goto uns_integer;
12175
12176         case 'X':
12177         case 'x':
12178             base = 16;
12179
12180         uns_integer:
12181             if (infnan) {
12182                 goto floating_point;
12183             }
12184             if (vectorize) {
12185                 STRLEN ulen;
12186         vector:
12187                 if (!veclen)
12188                     goto donevalidconversion;
12189                 if (vec_utf8)
12190                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
12191                                         UTF8_ALLOW_ANYUV);
12192                 else {
12193                     uv = *vecstr;
12194                     ulen = 1;
12195                 }
12196                 vecstr += ulen;
12197                 veclen -= ulen;
12198             }
12199             else if (args) {
12200                 switch (intsize) {
12201                 case 'c':  uv = (unsigned char)va_arg(*args, unsigned); break;
12202                 case 'h':  uv = (unsigned short)va_arg(*args, unsigned); break;
12203                 case 'l':  uv = va_arg(*args, unsigned long); break;
12204                 case 'V':  uv = va_arg(*args, UV); break;
12205                 case 'z':  uv = va_arg(*args, Size_t); break;
12206 #ifdef HAS_PTRDIFF_T
12207                 case 't':  uv = va_arg(*args, ptrdiff_t); break; /* will sign extend, but there is no uptrdiff_t, so oh well */
12208 #endif
12209 #ifdef I_STDINT
12210                 case 'j':  uv = va_arg(*args, uintmax_t); break;
12211 #endif
12212                 default:   uv = va_arg(*args, unsigned); break;
12213                 case 'q':
12214 #if IVSIZE >= 8
12215                            uv = va_arg(*args, Uquad_t); break;
12216 #else
12217                            goto unknown;
12218 #endif
12219                 }
12220             }
12221             else {
12222                 UV tuv = SvUV_nomg(argsv); /* work around GCC bug #13488 */
12223                 switch (intsize) {
12224                 case 'c':       uv = (unsigned char)tuv; break;
12225                 case 'h':       uv = (unsigned short)tuv; break;
12226                 case 'l':       uv = (unsigned long)tuv; break;
12227                 case 'V':
12228                 default:        uv = tuv; break;
12229                 case 'q':
12230 #if IVSIZE >= 8
12231                                 uv = (Uquad_t)tuv; break;
12232 #else
12233                                 goto unknown;
12234 #endif
12235                 }
12236             }
12237
12238         integer:
12239             {
12240                 char *ptr = ebuf + sizeof ebuf;
12241                 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */
12242                 unsigned dig;
12243                 zeros = 0;
12244
12245                 switch (base) {
12246                 case 16:
12247                     p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit);
12248                     do {
12249                         dig = uv & 15;
12250                         *--ptr = p[dig];
12251                     } while (uv >>= 4);
12252                     if (tempalt) {
12253                         esignbuf[esignlen++] = '0';
12254                         esignbuf[esignlen++] = c;  /* 'x' or 'X' */
12255                     }
12256                     break;
12257                 case 8:
12258                     do {
12259                         dig = uv & 7;
12260                         *--ptr = '0' + dig;
12261                     } while (uv >>= 3);
12262                     if (alt && *ptr != '0')
12263                         *--ptr = '0';
12264                     break;
12265                 case 2:
12266                     do {
12267                         dig = uv & 1;
12268                         *--ptr = '0' + dig;
12269                     } while (uv >>= 1);
12270                     if (tempalt) {
12271                         esignbuf[esignlen++] = '0';
12272                         esignbuf[esignlen++] = c;
12273                     }
12274                     break;
12275                 default:                /* it had better be ten or less */
12276                     do {
12277                         dig = uv % base;
12278                         *--ptr = '0' + dig;
12279                     } while (uv /= base);
12280                     break;
12281                 }
12282                 elen = (ebuf + sizeof ebuf) - ptr;
12283                 eptr = ptr;
12284                 if (has_precis) {
12285                     if (precis > elen)
12286                         zeros = precis - elen;
12287                     else if (precis == 0 && elen == 1 && *eptr == '0'
12288                              && !(base == 8 && alt)) /* "%#.0o" prints "0" */
12289                         elen = 0;
12290
12291                 /* a precision nullifies the 0 flag. */
12292                     if (fill == '0')
12293                         fill = ' ';
12294                 }
12295             }
12296             break;
12297
12298             /* FLOATING POINT */
12299
12300         floating_point:
12301
12302         case 'F':
12303             c = 'f';            /* maybe %F isn't supported here */
12304             /* FALLTHROUGH */
12305         case 'e': case 'E':
12306         case 'f':
12307         case 'g': case 'G':
12308         case 'a': case 'A':
12309             if (vectorize)
12310                 goto unknown;
12311
12312             /* This is evil, but floating point is even more evil */
12313
12314             /* for SV-style calling, we can only get NV
12315                for C-style calling, we assume %f is double;
12316                for simplicity we allow any of %Lf, %llf, %qf for long double
12317             */
12318             switch (intsize) {
12319             case 'V':
12320 #if defined(USE_LONG_DOUBLE) || defined(USE_QUADMATH)
12321                 intsize = 'q';
12322 #endif
12323                 break;
12324 /* [perl #20339] - we should accept and ignore %lf rather than die */
12325             case 'l':
12326                 /* FALLTHROUGH */
12327             default:
12328 #if defined(USE_LONG_DOUBLE) || defined(USE_QUADMATH)
12329                 intsize = args ? 0 : 'q';
12330 #endif
12331                 break;
12332             case 'q':
12333 #if defined(HAS_LONG_DOUBLE)
12334                 break;
12335 #else
12336                 /* FALLTHROUGH */
12337 #endif
12338             case 'c':
12339             case 'h':
12340             case 'z':
12341             case 't':
12342             case 'j':
12343                 goto unknown;
12344             }
12345
12346             /* Now we need (long double) if intsize == 'q', else (double). */
12347             if (args) {
12348                 /* Note: do not pull NVs off the va_list with va_arg()
12349                  * (pull doubles instead) because if you have a build
12350                  * with long doubles, you would always be pulling long
12351                  * doubles, which would badly break anyone using only
12352                  * doubles (i.e. the majority of builds). In other
12353                  * words, you cannot mix doubles and long doubles.
12354                  * The only case where you can pull off long doubles
12355                  * is when the format specifier explicitly asks so with
12356                  * e.g. "%Lg". */
12357 #ifdef USE_QUADMATH
12358                 fv = intsize == 'q' ?
12359                     va_arg(*args, NV) : va_arg(*args, double);
12360                 nv = fv;
12361 #elif LONG_DOUBLESIZE > DOUBLESIZE
12362                 if (intsize == 'q') {
12363                     fv = va_arg(*args, long double);
12364                     nv = fv;
12365                 } else {
12366                     nv = va_arg(*args, double);
12367                     NV_TO_FV(nv, fv);
12368                 }
12369 #else
12370                 nv = va_arg(*args, double);
12371                 fv = nv;
12372 #endif
12373             }
12374             else
12375             {
12376                 if (!infnan) SvGETMAGIC(argsv);
12377                 nv = SvNV_nomg(argsv);
12378                 NV_TO_FV(nv, fv);
12379             }
12380
12381             need = 0;
12382             /* frexp() (or frexpl) has some unspecified behaviour for
12383              * nan/inf/-inf, so let's avoid calling that on non-finites. */
12384             if (isALPHA_FOLD_NE(c, 'e') && FV_ISFINITE(fv)) {
12385                 i = PERL_INT_MIN;
12386                 (void)Perl_frexp((NV)fv, &i);
12387                 if (i == PERL_INT_MIN)
12388                     Perl_die(aTHX_ "panic: frexp: %" FV_GF, fv);
12389                 /* Do not set hexfp earlier since we want to printf
12390                  * Inf/NaN for Inf/NaN, not their hexfp. */
12391                 hexfp = isALPHA_FOLD_EQ(c, 'a');
12392                 if (UNLIKELY(hexfp)) {
12393                     /* This seriously overshoots in most cases, but
12394                      * better the undershooting.  Firstly, all bytes
12395                      * of the NV are not mantissa, some of them are
12396                      * exponent.  Secondly, for the reasonably common
12397                      * long doubles case, the "80-bit extended", two
12398                      * or six bytes of the NV are unused. */
12399                     need +=
12400                         (fv < 0) ? 1 : 0 + /* possible unary minus */
12401                         2 + /* "0x" */
12402                         1 + /* the very unlikely carry */
12403                         1 + /* "1" */
12404                         1 + /* "." */
12405                         2 * NVSIZE + /* 2 hexdigits for each byte */
12406                         2 + /* "p+" */
12407                         6 + /* exponent: sign, plus up to 16383 (quad fp) */
12408                         1;   /* \0 */
12409 #ifdef LONGDOUBLE_DOUBLEDOUBLE
12410                     /* However, for the "double double", we need more.
12411                      * Since each double has their own exponent, the
12412                      * doubles may float (haha) rather far from each
12413                      * other, and the number of required bits is much
12414                      * larger, up to total of DOUBLEDOUBLE_MAXBITS bits.
12415                      * See the definition of DOUBLEDOUBLE_MAXBITS.
12416                      *
12417                      * Need 2 hexdigits for each byte. */
12418                     need += (DOUBLEDOUBLE_MAXBITS/8 + 1) * 2;
12419                     /* the size for the exponent already added */
12420 #endif
12421 #ifdef USE_LOCALE_NUMERIC
12422                         STORE_LC_NUMERIC_SET_TO_NEEDED();
12423                         if (PL_numeric_radix_sv && IN_LC(LC_NUMERIC))
12424                             need += SvLEN(PL_numeric_radix_sv);
12425                         RESTORE_LC_NUMERIC();
12426 #endif
12427                 }
12428                 else if (i > 0) {
12429                     need = BIT_DIGITS(i);
12430                 } /* if i < 0, the number of digits is hard to predict. */
12431             }
12432             need += has_precis ? precis : 6; /* known default */
12433
12434             if (need < width)
12435                 need = width;
12436
12437 #ifdef HAS_LDBL_SPRINTF_BUG
12438             /* This is to try to fix a bug with irix/nonstop-ux/powerux and
12439                with sfio - Allen <allens@cpan.org> */
12440
12441 #  ifdef DBL_MAX
12442 #    define MY_DBL_MAX DBL_MAX
12443 #  else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
12444 #    if DOUBLESIZE >= 8
12445 #      define MY_DBL_MAX 1.7976931348623157E+308L
12446 #    else
12447 #      define MY_DBL_MAX 3.40282347E+38L
12448 #    endif
12449 #  endif
12450
12451 #  ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
12452 #    define MY_DBL_MAX_BUG 1L
12453 #  else
12454 #    define MY_DBL_MAX_BUG MY_DBL_MAX
12455 #  endif
12456
12457 #  ifdef DBL_MIN
12458 #    define MY_DBL_MIN DBL_MIN
12459 #  else  /* XXX guessing! -Allen */
12460 #    if DOUBLESIZE >= 8
12461 #      define MY_DBL_MIN 2.2250738585072014E-308L
12462 #    else
12463 #      define MY_DBL_MIN 1.17549435E-38L
12464 #    endif
12465 #  endif
12466
12467             if ((intsize == 'q') && (c == 'f') &&
12468                 ((fv < MY_DBL_MAX_BUG) && (fv > -MY_DBL_MAX_BUG)) &&
12469                 (need < DBL_DIG)) {
12470                 /* it's going to be short enough that
12471                  * long double precision is not needed */
12472
12473                 if ((fv <= 0L) && (fv >= -0L))
12474                     fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
12475                 else {
12476                     /* would use Perl_fp_class as a double-check but not
12477                      * functional on IRIX - see perl.h comments */
12478
12479                     if ((fv >= MY_DBL_MIN) || (fv <= -MY_DBL_MIN)) {
12480                         /* It's within the range that a double can represent */
12481 #if defined(DBL_MAX) && !defined(DBL_MIN)
12482                         if ((fv >= ((long double)1/DBL_MAX)) ||
12483                             (fv <= (-(long double)1/DBL_MAX)))
12484 #endif
12485                         fix_ldbl_sprintf_bug = TRUE;
12486                     }
12487                 }
12488                 if (fix_ldbl_sprintf_bug == TRUE) {
12489                     double temp;
12490
12491                     intsize = 0;
12492                     temp = (double)fv;
12493                     fv = (NV)temp;
12494                 }
12495             }
12496
12497 #  undef MY_DBL_MAX
12498 #  undef MY_DBL_MAX_BUG
12499 #  undef MY_DBL_MIN
12500
12501 #endif /* HAS_LDBL_SPRINTF_BUG */
12502
12503             need += 20; /* fudge factor */
12504             if (PL_efloatsize < need) {
12505                 Safefree(PL_efloatbuf);
12506                 PL_efloatsize = need + 20; /* more fudge */
12507                 Newx(PL_efloatbuf, PL_efloatsize, char);
12508                 PL_efloatbuf[0] = '\0';
12509             }
12510
12511             if ( !(width || left || plus || alt) && fill != '0'
12512                  && has_precis && intsize != 'q'        /* Shortcuts */
12513                  && LIKELY(!Perl_isinfnan((NV)fv)) ) {
12514                 /* See earlier comment about buggy Gconvert when digits,
12515                    aka precis is 0  */
12516                 if ( c == 'g' && precis ) {
12517                     STORE_LC_NUMERIC_SET_TO_NEEDED();
12518                     SNPRINTF_G(fv, PL_efloatbuf, PL_efloatsize, precis);
12519                     /* May return an empty string for digits==0 */
12520                     if (*PL_efloatbuf) {
12521                         elen = strlen(PL_efloatbuf);
12522                         goto float_converted;
12523                     }
12524                 } else if ( c == 'f' && !precis ) {
12525                     if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
12526                         break;
12527                 }
12528             }
12529
12530             if (UNLIKELY(hexfp)) {
12531                 /* Hexadecimal floating point. */
12532                 char* p = PL_efloatbuf;
12533                 U8 vhex[VHEX_SIZE];
12534                 U8* v = vhex; /* working pointer to vhex */
12535                 U8* vend; /* pointer to one beyond last digit of vhex */
12536                 U8* vfnz = NULL; /* first non-zero */
12537                 U8* vlnz = NULL; /* last non-zero */
12538                 U8* v0 = NULL; /* first output */
12539                 const bool lower = (c == 'a');
12540                 /* At output the values of vhex (up to vend) will
12541                  * be mapped through the xdig to get the actual
12542                  * human-readable xdigits. */
12543                 const char* xdig = PL_hexdigit;
12544                 int zerotail = 0; /* how many extra zeros to append */
12545                 int exponent = 0; /* exponent of the floating point input */
12546                 bool hexradix = FALSE; /* should we output the radix */
12547                 bool subnormal = FALSE; /* IEEE 754 subnormal/denormal */
12548                 bool negative = FALSE;
12549
12550                 /* XXX: NaN, Inf -- though they are printed as "NaN" and "Inf".
12551                  *
12552                  * For example with denormals, (assuming the vanilla
12553                  * 64-bit double): the exponent is zero. 1xp-1074 is
12554                  * the smallest denormal and the smallest double, it
12555                  * could be output also as 0x0.0000000000001p-1022 to
12556                  * match its internal structure. */
12557
12558                 vend = S_hextract(aTHX_ nv, &exponent, &subnormal, vhex, NULL);
12559                 S_hextract(aTHX_ nv, &exponent, &subnormal, vhex, vend);
12560
12561 #if NVSIZE > DOUBLESIZE
12562 #  ifdef HEXTRACT_HAS_IMPLICIT_BIT
12563                 /* In this case there is an implicit bit,
12564                  * and therefore the exponent is shifted by one. */
12565                 exponent--;
12566 #  else
12567 #   ifdef NV_X86_80_BIT
12568                 if (subnormal) {
12569                     /* The subnormals of the x86-80 have a base exponent of -16382,
12570                      * (while the physical exponent bits are zero) but the frexp()
12571                      * returned the scientific-style floating exponent.  We want
12572                      * to map the last one as:
12573                      * -16831..-16384 -> -16382 (the last normal is 0x1p-16382)
12574                      * -16835..-16388 -> -16384
12575                      * since we want to keep the first hexdigit
12576                      * as one of the [8421]. */
12577                     exponent = -4 * ( (exponent + 1) / -4) - 2;
12578                 } else {
12579                     exponent -= 4;
12580                 }
12581 #   endif
12582                 /* TBD: other non-implicit-bit platforms than the x86-80. */
12583 #  endif
12584 #endif
12585
12586                 negative = fv < 0 || Perl_signbit(nv);
12587                 if (negative)
12588                     *p++ = '-';
12589                 else if (plus)
12590                     *p++ = plus;
12591                 *p++ = '0';
12592                 if (lower) {
12593                     *p++ = 'x';
12594                 }
12595                 else {
12596                     *p++ = 'X';
12597                     xdig += 16; /* Use uppercase hex. */
12598                 }
12599
12600                 /* Find the first non-zero xdigit. */
12601                 for (v = vhex; v < vend; v++) {
12602                     if (*v) {
12603                         vfnz = v;
12604                         break;
12605                     }
12606                 }
12607
12608                 if (vfnz) {
12609                     /* Find the last non-zero xdigit. */
12610                     for (v = vend - 1; v >= vhex; v--) {
12611                         if (*v) {
12612                             vlnz = v;
12613                             break;
12614                         }
12615                     }
12616
12617 #if NVSIZE == DOUBLESIZE
12618                     if (fv != 0.0)
12619                         exponent--;
12620 #endif
12621
12622                     if (subnormal) {
12623 #ifndef NV_X86_80_BIT
12624                       if (vfnz[0] > 1) {
12625                         /* IEEE 754 subnormals (but not the x86 80-bit):
12626                          * we want "normalize" the subnormal,
12627                          * so we need to right shift the hex nybbles
12628                          * so that the output of the subnormal starts
12629                          * from the first true bit.  (Another, equally
12630                          * valid, policy would be to dump the subnormal
12631                          * nybbles as-is, to display the "physical" layout.) */
12632                         int i, n;
12633                         U8 *vshr;
12634                         /* Find the ceil(log2(v[0])) of
12635                          * the top non-zero nybble. */
12636                         for (i = vfnz[0], n = 0; i > 1; i >>= 1, n++) { }
12637                         assert(n < 4);
12638                         vlnz[1] = 0;
12639                         for (vshr = vlnz; vshr >= vfnz; vshr--) {
12640                           vshr[1] |= (vshr[0] & (0xF >> (4 - n))) << (4 - n);
12641                           vshr[0] >>= n;
12642                         }
12643                         if (vlnz[1]) {
12644                           vlnz++;
12645                         }
12646                       }
12647 #endif
12648                       v0 = vfnz;
12649                     } else {
12650                       v0 = vhex;
12651                     }
12652
12653                     if (has_precis) {
12654                         U8* ve = (subnormal ? vlnz + 1 : vend);
12655                         SSize_t vn = ve - (subnormal ? vfnz : vhex);
12656                         if ((SSize_t)(precis + 1) < vn) {
12657                             bool overflow = FALSE;
12658                             if (v0[precis + 1] < 0x8) {
12659                                 /* Round down, nothing to do. */
12660                             } else if (v0[precis + 1] > 0x8) {
12661                                 /* Round up. */
12662                                 v0[precis]++;
12663                                 overflow = v0[precis] > 0xF;
12664                                 v0[precis] &= 0xF;
12665                             } else { /* v0[precis] == 0x8 */
12666                                 /* Half-point: round towards the one
12667                                  * with the even least-significant digit:
12668                                  * 08 -> 0  88 -> 8
12669                                  * 18 -> 2  98 -> a
12670                                  * 28 -> 2  a8 -> a
12671                                  * 38 -> 4  b8 -> c
12672                                  * 48 -> 4  c8 -> c
12673                                  * 58 -> 6  d8 -> e
12674                                  * 68 -> 6  e8 -> e
12675                                  * 78 -> 8  f8 -> 10 */
12676                                 if ((v0[precis] & 0x1)) {
12677                                     v0[precis]++;
12678                                 }
12679                                 overflow = v0[precis] > 0xF;
12680                                 v0[precis] &= 0xF;
12681                             }
12682
12683                             if (overflow) {
12684                                 for (v = v0 + precis - 1; v >= v0; v--) {
12685                                     (*v)++;
12686                                     overflow = *v > 0xF;
12687                                     (*v) &= 0xF;
12688                                     if (!overflow) {
12689                                         break;
12690                                     }
12691                                 }
12692                                 if (v == v0 - 1 && overflow) {
12693                                     /* If the overflow goes all the
12694                                      * way to the front, we need to
12695                                      * insert 0x1 in front, and adjust
12696                                      * the exponent. */
12697                                     Move(v0, v0 + 1, vn, char);
12698                                     *v0 = 0x1;
12699                                     exponent += 4;
12700                                 }
12701                             }
12702
12703                             /* The new effective "last non zero". */
12704                             vlnz = v0 + precis;
12705                         }
12706                         else {
12707                             zerotail =
12708                               subnormal ? precis - vn + 1 :
12709                               precis - (vlnz - vhex);
12710                         }
12711                     }
12712
12713                     v = v0;
12714                     *p++ = xdig[*v++];
12715
12716                     /* If there are non-zero xdigits, the radix
12717                      * is output after the first one. */
12718                     if (vfnz < vlnz) {
12719                       hexradix = TRUE;
12720                     }
12721                 }
12722                 else {
12723                     *p++ = '0';
12724                     exponent = 0;
12725                     zerotail = precis;
12726                 }
12727
12728                 /* The radix is always output if precis, or if alt. */
12729                 if (precis > 0 || alt) {
12730                   hexradix = TRUE;
12731                 }
12732
12733                 if (hexradix) {
12734 #ifndef USE_LOCALE_NUMERIC
12735                         *p++ = '.';
12736 #else
12737                         STORE_LC_NUMERIC_SET_TO_NEEDED();
12738                         if (PL_numeric_radix_sv && IN_LC(LC_NUMERIC)) {
12739                             STRLEN n;
12740                             const char* r = SvPV(PL_numeric_radix_sv, n);
12741                             Copy(r, p, n, char);
12742                             p += n;
12743                         }
12744                         else {
12745                             *p++ = '.';
12746                         }
12747                         RESTORE_LC_NUMERIC();
12748 #endif
12749                 }
12750
12751                 if (vlnz) {
12752                     while (v <= vlnz)
12753                         *p++ = xdig[*v++];
12754                 }
12755
12756                 if (zerotail > 0) {
12757                   while (zerotail--) {
12758                     *p++ = '0';
12759                   }
12760                 }
12761
12762                 elen = p - PL_efloatbuf;
12763                 elen += my_snprintf(p, PL_efloatsize - elen,
12764                                     "%c%+d", lower ? 'p' : 'P',
12765                                     exponent);
12766
12767                 if (elen < width) {
12768                     if (left) {
12769                         /* Pad the back with spaces. */
12770                         memset(PL_efloatbuf + elen, ' ', width - elen);
12771                     }
12772                     else if (fill == '0') {
12773                         /* Insert the zeros after the "0x" and the
12774                          * the potential sign, but before the digits,
12775                          * otherwise we end up with "0000xH.HHH...",
12776                          * when we want "0x000H.HHH..."  */
12777                         STRLEN nzero = width - elen;
12778                         char* zerox = PL_efloatbuf + 2;
12779                         STRLEN nmove = elen - 2;
12780                         if (negative || plus) {
12781                             zerox++;
12782                             nmove--;
12783                         }
12784                         Move(zerox, zerox + nzero, nmove, char);
12785                         memset(zerox, fill, nzero);
12786                     }
12787                     else {
12788                         /* Move it to the right. */
12789                         Move(PL_efloatbuf, PL_efloatbuf + width - elen,
12790                              elen, char);
12791                         /* Pad the front with spaces. */
12792                         memset(PL_efloatbuf, ' ', width - elen);
12793                     }
12794                     elen = width;
12795                 }
12796             }
12797             else {
12798                 elen = S_infnan_2pv(nv, PL_efloatbuf, PL_efloatsize, plus);
12799                 if (elen) {
12800                     /* Not affecting infnan output: precision, alt, fill. */
12801                     if (elen < width) {
12802                         if (left) {
12803                             /* Pack the back with spaces. */
12804                             memset(PL_efloatbuf + elen, ' ', width - elen);
12805                         } else {
12806                             /* Move it to the right. */
12807                             Move(PL_efloatbuf, PL_efloatbuf + width - elen,
12808                                  elen, char);
12809                             /* Pad the front with spaces. */
12810                             memset(PL_efloatbuf, ' ', width - elen);
12811                         }
12812                         elen = width;
12813                     }
12814                 }
12815             }
12816
12817             if (elen == 0) {
12818                 char *ptr = ebuf + sizeof ebuf;
12819                 *--ptr = '\0';
12820                 *--ptr = c;
12821 #if defined(USE_QUADMATH)
12822                 if (intsize == 'q') {
12823                     /* "g" -> "Qg" */
12824                     *--ptr = 'Q';
12825                 }
12826                 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
12827 #elif defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
12828                 /* Note that this is HAS_LONG_DOUBLE and PERL_PRIfldbl,
12829                  * not USE_LONG_DOUBLE and NVff.  In other words,
12830                  * this needs to work without USE_LONG_DOUBLE. */
12831                 if (intsize == 'q') {
12832                     /* Copy the one or more characters in a long double
12833                      * format before the 'base' ([efgEFG]) character to
12834                      * the format string. */
12835                     static char const ldblf[] = PERL_PRIfldbl;
12836                     char const *p = ldblf + sizeof(ldblf) - 3;
12837                     while (p >= ldblf) { *--ptr = *p--; }
12838                 }
12839 #endif
12840                 if (has_precis) {
12841                     base = precis;
12842                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
12843                     *--ptr = '.';
12844                 }
12845                 if (width) {
12846                     base = width;
12847                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
12848                 }
12849                 if (fill == '0')
12850                     *--ptr = fill;
12851                 if (left)
12852                     *--ptr = '-';
12853                 if (plus)
12854                     *--ptr = plus;
12855                 if (alt)
12856                     *--ptr = '#';
12857                 *--ptr = '%';
12858
12859                 /* No taint.  Otherwise we are in the strange situation
12860                  * where printf() taints but print($float) doesn't.
12861                  * --jhi */
12862
12863                 STORE_LC_NUMERIC_SET_TO_NEEDED();
12864
12865                 /* hopefully the above makes ptr a very constrained format
12866                  * that is safe to use, even though it's not literal */
12867                 GCC_DIAG_IGNORE(-Wformat-nonliteral);
12868 #ifdef USE_QUADMATH
12869                 {
12870                     const char* qfmt = quadmath_format_single(ptr);
12871                     if (!qfmt)
12872                         Perl_croak_nocontext("panic: quadmath invalid format \"%s\"", ptr);
12873                     elen = quadmath_snprintf(PL_efloatbuf, PL_efloatsize,
12874                                              qfmt, nv);
12875                     if ((IV)elen == -1)
12876                         Perl_croak_nocontext("panic: quadmath_snprintf failed, format \"%s\"", qfmt);
12877                     if (qfmt != ptr)
12878                         Safefree(qfmt);
12879                 }
12880 #elif defined(HAS_LONG_DOUBLE)
12881                 elen = ((intsize == 'q')
12882                         ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, fv)
12883                         : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)fv));
12884 #else
12885                 elen = my_sprintf(PL_efloatbuf, ptr, fv);
12886 #endif
12887                 GCC_DIAG_RESTORE;
12888             }
12889
12890         float_converted:
12891             eptr = PL_efloatbuf;
12892             assert((IV)elen > 0); /* here zero elen is bad */
12893
12894 #ifdef USE_LOCALE_NUMERIC
12895             /* If the decimal point character in the string is UTF-8, make the
12896              * output utf8 */
12897             if (PL_numeric_radix_sv && SvUTF8(PL_numeric_radix_sv)
12898                 && instr(eptr, SvPVX_const(PL_numeric_radix_sv)))
12899             {
12900                 is_utf8 = TRUE;
12901             }
12902 #endif
12903
12904             break;
12905
12906             /* SPECIAL */
12907
12908         case 'n':
12909             if (vectorize)
12910                 goto unknown;
12911             i = SvCUR(sv) - origlen;
12912             if (args) {
12913                 switch (intsize) {
12914                 case 'c':       *(va_arg(*args, char*)) = i; break;
12915                 case 'h':       *(va_arg(*args, short*)) = i; break;
12916                 default:        *(va_arg(*args, int*)) = i; break;
12917                 case 'l':       *(va_arg(*args, long*)) = i; break;
12918                 case 'V':       *(va_arg(*args, IV*)) = i; break;
12919                 case 'z':       *(va_arg(*args, SSize_t*)) = i; break;
12920 #ifdef HAS_PTRDIFF_T
12921                 case 't':       *(va_arg(*args, ptrdiff_t*)) = i; break;
12922 #endif
12923 #ifdef I_STDINT
12924                 case 'j':       *(va_arg(*args, intmax_t*)) = i; break;
12925 #endif
12926                 case 'q':
12927 #if IVSIZE >= 8
12928                                 *(va_arg(*args, Quad_t*)) = i; break;
12929 #else
12930                                 goto unknown;
12931 #endif
12932                 }
12933             }
12934             else
12935                 sv_setuv_mg(argsv, has_utf8 ? (UV)sv_len_utf8(sv) : (UV)i);
12936             goto donevalidconversion;
12937
12938             /* UNKNOWN */
12939
12940         default:
12941       unknown:
12942             if (!args
12943                 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
12944                 && ckWARN(WARN_PRINTF))
12945             {
12946                 SV * const msg = sv_newmortal();
12947                 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
12948                           (PL_op->op_type == OP_PRTF) ? "" : "s");
12949                 if (fmtstart < patend) {
12950                     const char * const fmtend = q < patend ? q : patend;
12951                     const char * f;
12952                     sv_catpvs(msg, "\"%");
12953                     for (f = fmtstart; f < fmtend; f++) {
12954                         if (isPRINT(*f)) {
12955                             sv_catpvn_nomg(msg, f, 1);
12956                         } else {
12957                             Perl_sv_catpvf(aTHX_ msg,
12958                                            "\\%03" UVof, (UV)*f & 0xFF);
12959                         }
12960                     }
12961                     sv_catpvs(msg, "\"");
12962                 } else {
12963                     sv_catpvs(msg, "end of string");
12964                 }
12965                 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%" SVf, SVfARG(msg)); /* yes, this is reentrant */
12966             }
12967
12968             /* output mangled stuff ... */
12969             if (c == '\0')
12970                 --q;
12971             eptr = p;
12972             elen = q - p;
12973
12974             /* ... right here, because formatting flags should not apply */
12975             SvGROW(sv, SvCUR(sv) + elen + 1);
12976             p = SvEND(sv);
12977             Copy(eptr, p, elen, char);
12978             p += elen;
12979             *p = '\0';
12980             SvCUR_set(sv, p - SvPVX_const(sv));
12981             svix = osvix;
12982             continue;   /* not "break" */
12983         }
12984
12985         if (is_utf8 != has_utf8) {
12986             if (is_utf8) {
12987                 if (SvCUR(sv))
12988                     sv_utf8_upgrade(sv);
12989             }
12990             else {
12991                 const STRLEN old_elen = elen;
12992                 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
12993                 sv_utf8_upgrade(nsv);
12994                 eptr = SvPVX_const(nsv);
12995                 elen = SvCUR(nsv);
12996
12997                 if (width) { /* fudge width (can't fudge elen) */
12998                     width += elen - old_elen;
12999                 }
13000                 is_utf8 = TRUE;
13001             }
13002         }
13003
13004         /* signed value that's wrapped? */
13005         assert(elen  <= ((~(STRLEN)0) >> 1));
13006         have = esignlen + zeros + elen;
13007         if (have < zeros)
13008             croak_memory_wrap();
13009
13010         need = (have > width ? have : width);
13011         gap = need - have;
13012
13013         if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
13014             croak_memory_wrap();
13015         SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
13016         p = SvEND(sv);
13017         if (esignlen && fill == '0') {
13018             int i;
13019             for (i = 0; i < (int)esignlen; i++)
13020                 *p++ = esignbuf[i];
13021         }
13022         if (gap && !left) {
13023             memset(p, fill, gap);
13024             p += gap;
13025         }
13026         if (esignlen && fill != '0') {
13027             int i;
13028             for (i = 0; i < (int)esignlen; i++)
13029                 *p++ = esignbuf[i];
13030         }
13031         if (zeros) {
13032             int i;
13033             for (i = zeros; i; i--)
13034                 *p++ = '0';
13035         }
13036         if (elen) {
13037             Copy(eptr, p, elen, char);
13038             p += elen;
13039         }
13040         if (gap && left) {
13041             memset(p, ' ', gap);
13042             p += gap;
13043         }
13044         if (vectorize) {
13045             if (veclen) {
13046                 Copy(dotstr, p, dotstrlen, char);
13047                 p += dotstrlen;
13048             }
13049             else
13050                 vectorize = FALSE;              /* done iterating over vecstr */
13051         }
13052         if (is_utf8)
13053             has_utf8 = TRUE;
13054         if (has_utf8)
13055             SvUTF8_on(sv);
13056         *p = '\0';
13057         SvCUR_set(sv, p - SvPVX_const(sv));
13058         if (vectorize) {
13059             esignlen = 0;
13060             goto vector;
13061         }
13062
13063       donevalidconversion:
13064         if (used_explicit_ix)
13065             no_redundant_warning = TRUE;
13066         if (arg_missing)
13067             S_warn_vcatpvfn_missing_argument(aTHX);
13068     }
13069
13070     /* Now that we've consumed all our printf format arguments (svix)
13071      * do we have things left on the stack that we didn't use?
13072      */
13073     if (!no_redundant_warning && svmax >= svix + 1 && ckWARN(WARN_REDUNDANT)) {
13074         Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
13075                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
13076     }
13077
13078     SvTAINT(sv);
13079
13080     RESTORE_LC_NUMERIC();   /* Done outside loop, so don't have to save/restore
13081                                each iteration. */
13082 }
13083
13084 /* =========================================================================
13085
13086 =head1 Cloning an interpreter
13087
13088 =cut
13089
13090 All the macros and functions in this section are for the private use of
13091 the main function, perl_clone().
13092
13093 The foo_dup() functions make an exact copy of an existing foo thingy.
13094 During the course of a cloning, a hash table is used to map old addresses
13095 to new addresses.  The table is created and manipulated with the
13096 ptr_table_* functions.
13097
13098  * =========================================================================*/
13099
13100
13101 #if defined(USE_ITHREADS)
13102
13103 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
13104 #ifndef GpREFCNT_inc
13105 #  define GpREFCNT_inc(gp)      ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
13106 #endif
13107
13108
13109 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact
13110    that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
13111    If this changes, please unmerge ss_dup.
13112    Likewise, sv_dup_inc_multiple() relies on this fact.  */
13113 #define sv_dup_inc_NN(s,t)      SvREFCNT_inc_NN(sv_dup_inc(s,t))
13114 #define av_dup(s,t)     MUTABLE_AV(sv_dup((const SV *)s,t))
13115 #define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
13116 #define hv_dup(s,t)     MUTABLE_HV(sv_dup((const SV *)s,t))
13117 #define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
13118 #define cv_dup(s,t)     MUTABLE_CV(sv_dup((const SV *)s,t))
13119 #define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t))
13120 #define io_dup(s,t)     MUTABLE_IO(sv_dup((const SV *)s,t))
13121 #define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t))
13122 #define gv_dup(s,t)     MUTABLE_GV(sv_dup((const SV *)s,t))
13123 #define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t))
13124 #define SAVEPV(p)       ((p) ? savepv(p) : NULL)
13125 #define SAVEPVN(p,n)    ((p) ? savepvn(p,n) : NULL)
13126
13127 /* clone a parser */
13128
13129 yy_parser *
13130 Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
13131 {
13132     yy_parser *parser;
13133
13134     PERL_ARGS_ASSERT_PARSER_DUP;
13135
13136     if (!proto)
13137         return NULL;
13138
13139     /* look for it in the table first */
13140     parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
13141     if (parser)
13142         return parser;
13143
13144     /* create anew and remember what it is */
13145     Newxz(parser, 1, yy_parser);
13146     ptr_table_store(PL_ptr_table, proto, parser);
13147
13148     /* XXX these not yet duped */
13149     parser->old_parser = NULL;
13150     parser->stack = NULL;
13151     parser->ps = NULL;
13152     parser->stack_max1 = 0;
13153     /* XXX parser->stack->state = 0; */
13154
13155     /* XXX eventually, just Copy() most of the parser struct ? */
13156
13157     parser->lex_brackets = proto->lex_brackets;
13158     parser->lex_casemods = proto->lex_casemods;
13159     parser->lex_brackstack = savepvn(proto->lex_brackstack,
13160                     (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
13161     parser->lex_casestack = savepvn(proto->lex_casestack,
13162                     (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
13163     parser->lex_defer   = proto->lex_defer;
13164     parser->lex_dojoin  = proto->lex_dojoin;
13165     parser->lex_formbrack = proto->lex_formbrack;
13166     parser->lex_inpat   = proto->lex_inpat;
13167     parser->lex_inwhat  = proto->lex_inwhat;
13168     parser->lex_op      = proto->lex_op;
13169     parser->lex_repl    = sv_dup_inc(proto->lex_repl, param);
13170     parser->lex_starts  = proto->lex_starts;
13171     parser->lex_stuff   = sv_dup_inc(proto->lex_stuff, param);
13172     parser->multi_close = proto->multi_close;
13173     parser->multi_open  = proto->multi_open;
13174     parser->multi_start = proto->multi_start;
13175     parser->multi_end   = proto->multi_end;
13176     parser->preambled   = proto->preambled;
13177     parser->lex_super_state = proto->lex_super_state;
13178     parser->lex_sub_inwhat  = proto->lex_sub_inwhat;
13179     parser->lex_sub_op  = proto->lex_sub_op;
13180     parser->lex_sub_repl= sv_dup_inc(proto->lex_sub_repl, param);
13181     parser->linestr     = sv_dup_inc(proto->linestr, param);
13182     parser->expect      = proto->expect;
13183     parser->copline     = proto->copline;
13184     parser->last_lop_op = proto->last_lop_op;
13185     parser->lex_state   = proto->lex_state;
13186     parser->rsfp        = fp_dup(proto->rsfp, '<', param);
13187     /* rsfp_filters entries have fake IoDIRP() */
13188     parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
13189     parser->in_my       = proto->in_my;
13190     parser->in_my_stash = hv_dup(proto->in_my_stash, param);
13191     parser->error_count = proto->error_count;
13192     parser->sig_elems   = proto->sig_elems;
13193     parser->sig_optelems= proto->sig_optelems;
13194     parser->sig_slurpy  = proto->sig_slurpy;
13195     parser->linestr     = sv_dup_inc(proto->linestr, param);
13196
13197     {
13198         char * const ols = SvPVX(proto->linestr);
13199         char * const ls  = SvPVX(parser->linestr);
13200
13201         parser->bufptr      = ls + (proto->bufptr >= ols ?
13202                                     proto->bufptr -  ols : 0);
13203         parser->oldbufptr   = ls + (proto->oldbufptr >= ols ?
13204                                     proto->oldbufptr -  ols : 0);
13205         parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
13206                                     proto->oldoldbufptr -  ols : 0);
13207         parser->linestart   = ls + (proto->linestart >= ols ?
13208                                     proto->linestart -  ols : 0);
13209         parser->last_uni    = ls + (proto->last_uni >= ols ?
13210                                     proto->last_uni -  ols : 0);
13211         parser->last_lop    = ls + (proto->last_lop >= ols ?
13212                                     proto->last_lop -  ols : 0);
13213
13214         parser->bufend      = ls + SvCUR(parser->linestr);
13215     }
13216
13217     Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
13218
13219
13220     Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
13221     Copy(proto->nexttype, parser->nexttype, 5,  I32);
13222     parser->nexttoke    = proto->nexttoke;
13223
13224     /* XXX should clone saved_curcop here, but we aren't passed
13225      * proto_perl; so do it in perl_clone_using instead */
13226
13227     return parser;
13228 }
13229
13230
13231 /* duplicate a file handle */
13232
13233 PerlIO *
13234 Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
13235 {
13236     PerlIO *ret;
13237
13238     PERL_ARGS_ASSERT_FP_DUP;
13239     PERL_UNUSED_ARG(type);
13240
13241     if (!fp)
13242         return (PerlIO*)NULL;
13243
13244     /* look for it in the table first */
13245     ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
13246     if (ret)
13247         return ret;
13248
13249     /* create anew and remember what it is */
13250 #ifdef __amigaos4__
13251     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE|PERLIO_DUP_FD);
13252 #else
13253     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
13254 #endif
13255     ptr_table_store(PL_ptr_table, fp, ret);
13256     return ret;
13257 }
13258
13259 /* duplicate a directory handle */
13260
13261 DIR *
13262 Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
13263 {
13264     DIR *ret;
13265
13266 #if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
13267     DIR *pwd;
13268     const Direntry_t *dirent;
13269     char smallbuf[256]; /* XXX MAXPATHLEN, surely? */
13270     char *name = NULL;
13271     STRLEN len = 0;
13272     long pos;
13273 #endif
13274
13275     PERL_UNUSED_CONTEXT;
13276     PERL_ARGS_ASSERT_DIRP_DUP;
13277
13278     if (!dp)
13279         return (DIR*)NULL;
13280
13281     /* look for it in the table first */
13282     ret = (DIR*)ptr_table_fetch(PL_ptr_table, dp);
13283     if (ret)
13284         return ret;
13285
13286 #if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
13287
13288     PERL_UNUSED_ARG(param);
13289
13290     /* create anew */
13291
13292     /* open the current directory (so we can switch back) */
13293     if (!(pwd = PerlDir_open("."))) return (DIR *)NULL;
13294
13295     /* chdir to our dir handle and open the present working directory */
13296     if (fchdir(my_dirfd(dp)) < 0 || !(ret = PerlDir_open("."))) {
13297         PerlDir_close(pwd);
13298         return (DIR *)NULL;
13299     }
13300     /* Now we should have two dir handles pointing to the same dir. */
13301
13302     /* Be nice to the calling code and chdir back to where we were. */
13303     /* XXX If this fails, then what? */
13304     PERL_UNUSED_RESULT(fchdir(my_dirfd(pwd)));
13305
13306     /* We have no need of the pwd handle any more. */
13307     PerlDir_close(pwd);
13308
13309 #ifdef DIRNAMLEN
13310 # define d_namlen(d) (d)->d_namlen
13311 #else
13312 # define d_namlen(d) strlen((d)->d_name)
13313 #endif
13314     /* Iterate once through dp, to get the file name at the current posi-
13315        tion. Then step back. */
13316     pos = PerlDir_tell(dp);
13317     if ((dirent = PerlDir_read(dp))) {
13318         len = d_namlen(dirent);
13319         if (len > sizeof(dirent->d_name) && sizeof(dirent->d_name) > PTRSIZE) {
13320             /* If the len is somehow magically longer than the
13321              * maximum length of the directory entry, even though
13322              * we could fit it in a buffer, we could not copy it
13323              * from the dirent.  Bail out. */
13324             PerlDir_close(ret);
13325             return (DIR*)NULL;
13326         }
13327         if (len <= sizeof smallbuf) name = smallbuf;
13328         else Newx(name, len, char);
13329         Move(dirent->d_name, name, len, char);
13330     }
13331     PerlDir_seek(dp, pos);
13332
13333     /* Iterate through the new dir handle, till we find a file with the
13334        right name. */
13335     if (!dirent) /* just before the end */
13336         for(;;) {
13337             pos = PerlDir_tell(ret);
13338             if (PerlDir_read(ret)) continue; /* not there yet */
13339             PerlDir_seek(ret, pos); /* step back */
13340             break;
13341         }
13342     else {
13343         const long pos0 = PerlDir_tell(ret);
13344         for(;;) {
13345             pos = PerlDir_tell(ret);
13346             if ((dirent = PerlDir_read(ret))) {
13347                 if (len == (STRLEN)d_namlen(dirent)
13348                     && memEQ(name, dirent->d_name, len)) {
13349                     /* found it */
13350                     PerlDir_seek(ret, pos); /* step back */
13351                     break;
13352                 }
13353                 /* else we are not there yet; keep iterating */
13354             }
13355             else { /* This is not meant to happen. The best we can do is
13356                       reset the iterator to the beginning. */
13357                 PerlDir_seek(ret, pos0);
13358                 break;
13359             }
13360         }
13361     }
13362 #undef d_namlen
13363
13364     if (name && name != smallbuf)
13365         Safefree(name);
13366 #endif
13367
13368 #ifdef WIN32
13369     ret = win32_dirp_dup(dp, param);
13370 #endif
13371
13372     /* pop it in the pointer table */
13373     if (ret)
13374         ptr_table_store(PL_ptr_table, dp, ret);
13375
13376     return ret;
13377 }
13378
13379 /* duplicate a typeglob */
13380
13381 GP *
13382 Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
13383 {
13384     GP *ret;
13385
13386     PERL_ARGS_ASSERT_GP_DUP;
13387
13388     if (!gp)
13389         return (GP*)NULL;
13390     /* look for it in the table first */
13391     ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
13392     if (ret)
13393         return ret;
13394
13395     /* create anew and remember what it is */
13396     Newxz(ret, 1, GP);
13397     ptr_table_store(PL_ptr_table, gp, ret);
13398
13399     /* clone */
13400     /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
13401        on Newxz() to do this for us.  */
13402     ret->gp_sv          = sv_dup_inc(gp->gp_sv, param);
13403     ret->gp_io          = io_dup_inc(gp->gp_io, param);
13404     ret->gp_form        = cv_dup_inc(gp->gp_form, param);
13405     ret->gp_av          = av_dup_inc(gp->gp_av, param);
13406     ret->gp_hv          = hv_dup_inc(gp->gp_hv, param);
13407     ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
13408     ret->gp_cv          = cv_dup_inc(gp->gp_cv, param);
13409     ret->gp_cvgen       = gp->gp_cvgen;
13410     ret->gp_line        = gp->gp_line;
13411     ret->gp_file_hek    = hek_dup(gp->gp_file_hek, param);
13412     return ret;
13413 }
13414
13415 /* duplicate a chain of magic */
13416
13417 MAGIC *
13418 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
13419 {
13420     MAGIC *mgret = NULL;
13421     MAGIC **mgprev_p = &mgret;
13422
13423     PERL_ARGS_ASSERT_MG_DUP;
13424
13425     for (; mg; mg = mg->mg_moremagic) {
13426         MAGIC *nmg;
13427
13428         if ((param->flags & CLONEf_JOIN_IN)
13429                 && mg->mg_type == PERL_MAGIC_backref)
13430             /* when joining, we let the individual SVs add themselves to
13431              * backref as needed. */
13432             continue;
13433
13434         Newx(nmg, 1, MAGIC);
13435         *mgprev_p = nmg;
13436         mgprev_p = &(nmg->mg_moremagic);
13437
13438         /* There was a comment "XXX copy dynamic vtable?" but as we don't have
13439            dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
13440            from the original commit adding Perl_mg_dup() - revision 4538.
13441            Similarly there is the annotation "XXX random ptr?" next to the
13442            assignment to nmg->mg_ptr.  */
13443         *nmg = *mg;
13444
13445         /* FIXME for plugins
13446         if (nmg->mg_type == PERL_MAGIC_qr) {
13447             nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
13448         }
13449         else
13450         */
13451         nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
13452                           ? nmg->mg_type == PERL_MAGIC_backref
13453                                 /* The backref AV has its reference
13454                                  * count deliberately bumped by 1 */
13455                                 ? SvREFCNT_inc(av_dup_inc((const AV *)
13456                                                     nmg->mg_obj, param))
13457                                 : sv_dup_inc(nmg->mg_obj, param)
13458                           : (nmg->mg_type == PERL_MAGIC_regdatum ||
13459                              nmg->mg_type == PERL_MAGIC_regdata)
13460                                   ? nmg->mg_obj
13461                                   : sv_dup(nmg->mg_obj, param);
13462
13463         if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
13464             if (nmg->mg_len > 0) {
13465                 nmg->mg_ptr     = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
13466                 if (nmg->mg_type == PERL_MAGIC_overload_table &&
13467                         AMT_AMAGIC((AMT*)nmg->mg_ptr))
13468                 {
13469                     AMT * const namtp = (AMT*)nmg->mg_ptr;
13470                     sv_dup_inc_multiple((SV**)(namtp->table),
13471                                         (SV**)(namtp->table), NofAMmeth, param);
13472                 }
13473             }
13474             else if (nmg->mg_len == HEf_SVKEY)
13475                 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
13476         }
13477         if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
13478             nmg->mg_virtual->svt_dup(aTHX_ nmg, param);
13479         }
13480     }
13481     return mgret;
13482 }
13483
13484 #endif /* USE_ITHREADS */
13485
13486 struct ptr_tbl_arena {
13487     struct ptr_tbl_arena *next;
13488     struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers.  */
13489 };
13490
13491 /* create a new pointer-mapping table */
13492
13493 PTR_TBL_t *
13494 Perl_ptr_table_new(pTHX)
13495 {
13496     PTR_TBL_t *tbl;
13497     PERL_UNUSED_CONTEXT;
13498
13499     Newx(tbl, 1, PTR_TBL_t);
13500     tbl->tbl_max        = 511;
13501     tbl->tbl_items      = 0;
13502     tbl->tbl_arena      = NULL;
13503     tbl->tbl_arena_next = NULL;
13504     tbl->tbl_arena_end  = NULL;
13505     Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
13506     return tbl;
13507 }
13508
13509 #define PTR_TABLE_HASH(ptr) \
13510   ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
13511
13512 /* map an existing pointer using a table */
13513
13514 STATIC PTR_TBL_ENT_t *
13515 S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
13516 {
13517     PTR_TBL_ENT_t *tblent;
13518     const UV hash = PTR_TABLE_HASH(sv);
13519
13520     PERL_ARGS_ASSERT_PTR_TABLE_FIND;
13521
13522     tblent = tbl->tbl_ary[hash & tbl->tbl_max];
13523     for (; tblent; tblent = tblent->next) {
13524         if (tblent->oldval == sv)
13525             return tblent;
13526     }
13527     return NULL;
13528 }
13529
13530 void *
13531 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
13532 {
13533     PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
13534
13535     PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
13536     PERL_UNUSED_CONTEXT;
13537
13538     return tblent ? tblent->newval : NULL;
13539 }
13540
13541 /* add a new entry to a pointer-mapping table 'tbl'.  In hash terms, 'oldsv' is
13542  * the key; 'newsv' is the value.  The names "old" and "new" are specific to
13543  * the core's typical use of ptr_tables in thread cloning. */
13544
13545 void
13546 Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
13547 {
13548     PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
13549
13550     PERL_ARGS_ASSERT_PTR_TABLE_STORE;
13551     PERL_UNUSED_CONTEXT;
13552
13553     if (tblent) {
13554         tblent->newval = newsv;
13555     } else {
13556         const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
13557
13558         if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
13559             struct ptr_tbl_arena *new_arena;
13560
13561             Newx(new_arena, 1, struct ptr_tbl_arena);
13562             new_arena->next = tbl->tbl_arena;
13563             tbl->tbl_arena = new_arena;
13564             tbl->tbl_arena_next = new_arena->array;
13565             tbl->tbl_arena_end = C_ARRAY_END(new_arena->array);
13566         }
13567
13568         tblent = tbl->tbl_arena_next++;
13569
13570         tblent->oldval = oldsv;
13571         tblent->newval = newsv;
13572         tblent->next = tbl->tbl_ary[entry];
13573         tbl->tbl_ary[entry] = tblent;
13574         tbl->tbl_items++;
13575         if (tblent->next && tbl->tbl_items > tbl->tbl_max)
13576             ptr_table_split(tbl);
13577     }
13578 }
13579
13580 /* double the hash bucket size of an existing ptr table */
13581
13582 void
13583 Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
13584 {
13585     PTR_TBL_ENT_t **ary = tbl->tbl_ary;
13586     const UV oldsize = tbl->tbl_max + 1;
13587     UV newsize = oldsize * 2;
13588     UV i;
13589
13590     PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
13591     PERL_UNUSED_CONTEXT;
13592
13593     Renew(ary, newsize, PTR_TBL_ENT_t*);
13594     Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
13595     tbl->tbl_max = --newsize;
13596     tbl->tbl_ary = ary;
13597     for (i=0; i < oldsize; i++, ary++) {
13598         PTR_TBL_ENT_t **entp = ary;
13599         PTR_TBL_ENT_t *ent = *ary;
13600         PTR_TBL_ENT_t **curentp;
13601         if (!ent)
13602             continue;
13603         curentp = ary + oldsize;
13604         do {
13605             if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
13606                 *entp = ent->next;
13607                 ent->next = *curentp;
13608                 *curentp = ent;
13609             }
13610             else
13611                 entp = &ent->next;
13612             ent = *entp;
13613         } while (ent);
13614     }
13615 }
13616
13617 /* remove all the entries from a ptr table */
13618 /* Deprecated - will be removed post 5.14 */
13619
13620 void
13621 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
13622 {
13623     PERL_UNUSED_CONTEXT;
13624     if (tbl && tbl->tbl_items) {
13625         struct ptr_tbl_arena *arena = tbl->tbl_arena;
13626
13627         Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent *);
13628
13629         while (arena) {
13630             struct ptr_tbl_arena *next = arena->next;
13631
13632             Safefree(arena);
13633             arena = next;
13634         };
13635
13636         tbl->tbl_items = 0;
13637         tbl->tbl_arena = NULL;
13638         tbl->tbl_arena_next = NULL;
13639         tbl->tbl_arena_end = NULL;
13640     }
13641 }
13642
13643 /* clear and free a ptr table */
13644
13645 void
13646 Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
13647 {
13648     struct ptr_tbl_arena *arena;
13649
13650     PERL_UNUSED_CONTEXT;
13651
13652     if (!tbl) {
13653         return;
13654     }
13655
13656     arena = tbl->tbl_arena;
13657
13658     while (arena) {
13659         struct ptr_tbl_arena *next = arena->next;
13660
13661         Safefree(arena);
13662         arena = next;
13663     }
13664
13665     Safefree(tbl->tbl_ary);
13666     Safefree(tbl);
13667 }
13668
13669 #if defined(USE_ITHREADS)
13670
13671 void
13672 Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
13673 {
13674     PERL_ARGS_ASSERT_RVPV_DUP;
13675
13676     assert(!isREGEXP(sstr));
13677     if (SvROK(sstr)) {
13678         if (SvWEAKREF(sstr)) {
13679             SvRV_set(dstr, sv_dup(SvRV_const(sstr), param));
13680             if (param->flags & CLONEf_JOIN_IN) {
13681                 /* if joining, we add any back references individually rather
13682                  * than copying the whole backref array */
13683                 Perl_sv_add_backref(aTHX_ SvRV(dstr), dstr);
13684             }
13685         }
13686         else
13687             SvRV_set(dstr, sv_dup_inc(SvRV_const(sstr), param));
13688     }
13689     else if (SvPVX_const(sstr)) {
13690         /* Has something there */
13691         if (SvLEN(sstr)) {
13692             /* Normal PV - clone whole allocated space */
13693             SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
13694             /* sstr may not be that normal, but actually copy on write.
13695                But we are a true, independent SV, so:  */
13696             SvIsCOW_off(dstr);
13697         }
13698         else {
13699             /* Special case - not normally malloced for some reason */
13700             if (isGV_with_GP(sstr)) {
13701                 /* Don't need to do anything here.  */
13702             }
13703             else if ((SvIsCOW(sstr))) {
13704                 /* A "shared" PV - clone it as "shared" PV */
13705                 SvPV_set(dstr,
13706                          HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
13707                                          param)));
13708             }
13709             else {
13710                 /* Some other special case - random pointer */
13711                 SvPV_set(dstr, (char *) SvPVX_const(sstr));             
13712             }
13713         }
13714     }
13715     else {
13716         /* Copy the NULL */
13717         SvPV_set(dstr, NULL);
13718     }
13719 }
13720
13721 /* duplicate a list of SVs. source and dest may point to the same memory.  */
13722 static SV **
13723 S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
13724                       SSize_t items, CLONE_PARAMS *const param)
13725 {
13726     PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
13727
13728     while (items-- > 0) {
13729         *dest++ = sv_dup_inc(*source++, param);
13730     }
13731
13732     return dest;
13733 }
13734
13735 /* duplicate an SV of any type (including AV, HV etc) */
13736
13737 static SV *
13738 S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
13739 {
13740     dVAR;
13741     SV *dstr;
13742
13743     PERL_ARGS_ASSERT_SV_DUP_COMMON;
13744
13745     if (SvTYPE(sstr) == (svtype)SVTYPEMASK) {
13746 #ifdef DEBUG_LEAKING_SCALARS_ABORT
13747         abort();
13748 #endif
13749         return NULL;
13750     }
13751     /* look for it in the table first */
13752     dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
13753     if (dstr)
13754         return dstr;
13755
13756     if(param->flags & CLONEf_JOIN_IN) {
13757         /** We are joining here so we don't want do clone
13758             something that is bad **/
13759         if (SvTYPE(sstr) == SVt_PVHV) {
13760             const HEK * const hvname = HvNAME_HEK(sstr);
13761             if (hvname) {
13762                 /** don't clone stashes if they already exist **/
13763                 dstr = MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
13764                                                 HEK_UTF8(hvname) ? SVf_UTF8 : 0));
13765                 ptr_table_store(PL_ptr_table, sstr, dstr);
13766                 return dstr;
13767             }
13768         }
13769         else if (SvTYPE(sstr) == SVt_PVGV && !SvFAKE(sstr)) {
13770             HV *stash = GvSTASH(sstr);
13771             const HEK * hvname;
13772             if (stash && (hvname = HvNAME_HEK(stash))) {
13773                 /** don't clone GVs if they already exist **/
13774                 SV **svp;
13775                 stash = gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
13776                                     HEK_UTF8(hvname) ? SVf_UTF8 : 0);
13777                 svp = hv_fetch(
13778                         stash, GvNAME(sstr),
13779                         GvNAMEUTF8(sstr)
13780                             ? -GvNAMELEN(sstr)
13781                             :  GvNAMELEN(sstr),
13782                         0
13783                       );
13784                 if (svp && *svp && SvTYPE(*svp) == SVt_PVGV) {
13785                     ptr_table_store(PL_ptr_table, sstr, *svp);
13786                     return *svp;
13787                 }
13788             }
13789         }
13790     }
13791
13792     /* create anew and remember what it is */
13793     new_SV(dstr);
13794
13795 #ifdef DEBUG_LEAKING_SCALARS
13796     dstr->sv_debug_optype = sstr->sv_debug_optype;
13797     dstr->sv_debug_line = sstr->sv_debug_line;
13798     dstr->sv_debug_inpad = sstr->sv_debug_inpad;
13799     dstr->sv_debug_parent = (SV*)sstr;
13800     FREE_SV_DEBUG_FILE(dstr);
13801     dstr->sv_debug_file = savesharedpv(sstr->sv_debug_file);
13802 #endif
13803
13804     ptr_table_store(PL_ptr_table, sstr, dstr);
13805
13806     /* clone */
13807     SvFLAGS(dstr)       = SvFLAGS(sstr);
13808     SvFLAGS(dstr)       &= ~SVf_OOK;            /* don't propagate OOK hack */
13809     SvREFCNT(dstr)      = 0;                    /* must be before any other dups! */
13810
13811 #ifdef DEBUGGING
13812     if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
13813         PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
13814                       (void*)PL_watch_pvx, SvPVX_const(sstr));
13815 #endif
13816
13817     /* don't clone objects whose class has asked us not to */
13818     if (SvOBJECT(sstr)
13819      && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE))
13820     {
13821         SvFLAGS(dstr) = 0;
13822         return dstr;
13823     }
13824
13825     switch (SvTYPE(sstr)) {
13826     case SVt_NULL:
13827         SvANY(dstr)     = NULL;
13828         break;
13829     case SVt_IV:
13830         SET_SVANY_FOR_BODYLESS_IV(dstr);
13831         if(SvROK(sstr)) {
13832             Perl_rvpv_dup(aTHX_ dstr, sstr, param);
13833         } else {
13834             SvIV_set(dstr, SvIVX(sstr));
13835         }
13836         break;
13837     case SVt_NV:
13838 #if NVSIZE <= IVSIZE
13839         SET_SVANY_FOR_BODYLESS_NV(dstr);
13840 #else
13841         SvANY(dstr)     = new_XNV();
13842 #endif
13843         SvNV_set(dstr, SvNVX(sstr));
13844         break;
13845     default:
13846         {
13847             /* These are all the types that need complex bodies allocating.  */
13848             void *new_body;
13849             const svtype sv_type = SvTYPE(sstr);
13850             const struct body_details *const sv_type_details
13851                 = bodies_by_type + sv_type;
13852
13853             switch (sv_type) {
13854             default:
13855                 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
13856                 break;
13857
13858             case SVt_PVGV:
13859             case SVt_PVIO:
13860             case SVt_PVFM:
13861             case SVt_PVHV:
13862             case SVt_PVAV:
13863             case SVt_PVCV:
13864             case SVt_PVLV:
13865             case SVt_REGEXP:
13866             case SVt_PVMG:
13867             case SVt_PVNV:
13868             case SVt_PVIV:
13869             case SVt_INVLIST:
13870             case SVt_PV:
13871                 assert(sv_type_details->body_size);
13872                 if (sv_type_details->arena) {
13873                     new_body_inline(new_body, sv_type);
13874                     new_body
13875                         = (void*)((char*)new_body - sv_type_details->offset);
13876                 } else {
13877                     new_body = new_NOARENA(sv_type_details);
13878                 }
13879             }
13880             assert(new_body);
13881             SvANY(dstr) = new_body;
13882
13883 #ifndef PURIFY
13884             Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
13885                  ((char*)SvANY(dstr)) + sv_type_details->offset,
13886                  sv_type_details->copy, char);
13887 #else
13888             Copy(((char*)SvANY(sstr)),
13889                  ((char*)SvANY(dstr)),
13890                  sv_type_details->body_size + sv_type_details->offset, char);
13891 #endif
13892
13893             if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
13894                 && !isGV_with_GP(dstr)
13895                 && !isREGEXP(dstr)
13896                 && !(sv_type == SVt_PVIO && !(IoFLAGS(dstr) & IOf_FAKE_DIRP)))
13897                 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
13898
13899             /* The Copy above means that all the source (unduplicated) pointers
13900                are now in the destination.  We can check the flags and the
13901                pointers in either, but it's possible that there's less cache
13902                missing by always going for the destination.
13903                FIXME - instrument and check that assumption  */
13904             if (sv_type >= SVt_PVMG) {
13905                 if (SvMAGIC(dstr))
13906                     SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
13907                 if (SvOBJECT(dstr) && SvSTASH(dstr))
13908                     SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
13909                 else SvSTASH_set(dstr, 0); /* don't copy DESTROY cache */
13910             }
13911
13912             /* The cast silences a GCC warning about unhandled types.  */
13913             switch ((int)sv_type) {
13914             case SVt_PV:
13915                 break;
13916             case SVt_PVIV:
13917                 break;
13918             case SVt_PVNV:
13919                 break;
13920             case SVt_PVMG:
13921                 break;
13922             case SVt_REGEXP:
13923               duprex:
13924                 /* FIXME for plugins */
13925                 dstr->sv_u.svu_rx = ((REGEXP *)dstr)->sv_any;
13926                 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
13927                 break;
13928             case SVt_PVLV:
13929                 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
13930                 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
13931                     LvTARG(dstr) = dstr;
13932                 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
13933                     LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
13934                 else
13935                     LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
13936                 if (isREGEXP(sstr)) goto duprex;
13937             case SVt_PVGV:
13938                 /* non-GP case already handled above */
13939                 if(isGV_with_GP(sstr)) {
13940                     GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
13941                     /* Don't call sv_add_backref here as it's going to be
13942                        created as part of the magic cloning of the symbol
13943                        table--unless this is during a join and the stash
13944                        is not actually being cloned.  */
13945                     /* Danger Will Robinson - GvGP(dstr) isn't initialised
13946                        at the point of this comment.  */
13947                     GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
13948                     if (param->flags & CLONEf_JOIN_IN)
13949                         Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
13950                     GvGP_set(dstr, gp_dup(GvGP(sstr), param));
13951                     (void)GpREFCNT_inc(GvGP(dstr));
13952                 }
13953                 break;
13954             case SVt_PVIO:
13955                 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
13956                 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
13957                     /* I have no idea why fake dirp (rsfps)
13958                        should be treated differently but otherwise
13959                        we end up with leaks -- sky*/
13960                     IoTOP_GV(dstr)      = gv_dup_inc(IoTOP_GV(dstr), param);
13961                     IoFMT_GV(dstr)      = gv_dup_inc(IoFMT_GV(dstr), param);
13962                     IoBOTTOM_GV(dstr)   = gv_dup_inc(IoBOTTOM_GV(dstr), param);
13963                 } else {
13964                     IoTOP_GV(dstr)      = gv_dup(IoTOP_GV(dstr), param);
13965                     IoFMT_GV(dstr)      = gv_dup(IoFMT_GV(dstr), param);
13966                     IoBOTTOM_GV(dstr)   = gv_dup(IoBOTTOM_GV(dstr), param);
13967                     if (IoDIRP(dstr)) {
13968                         IoDIRP(dstr)    = dirp_dup(IoDIRP(dstr), param);
13969                     } else {
13970                         NOOP;
13971                         /* IoDIRP(dstr) is already a copy of IoDIRP(sstr)  */
13972                     }
13973                     IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(dstr), param);
13974                 }
13975                 if (IoOFP(dstr) == IoIFP(sstr))
13976                     IoOFP(dstr) = IoIFP(dstr);
13977                 else
13978                     IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
13979                 IoTOP_NAME(dstr)        = SAVEPV(IoTOP_NAME(dstr));
13980                 IoFMT_NAME(dstr)        = SAVEPV(IoFMT_NAME(dstr));
13981                 IoBOTTOM_NAME(dstr)     = SAVEPV(IoBOTTOM_NAME(dstr));
13982                 break;
13983             case SVt_PVAV:
13984                 /* avoid cloning an empty array */
13985                 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
13986                     SV **dst_ary, **src_ary;
13987                     SSize_t items = AvFILLp((const AV *)sstr) + 1;
13988
13989                     src_ary = AvARRAY((const AV *)sstr);
13990                     Newxz(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
13991                     ptr_table_store(PL_ptr_table, src_ary, dst_ary);
13992                     AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
13993                     AvALLOC((const AV *)dstr) = dst_ary;
13994                     if (AvREAL((const AV *)sstr)) {
13995                         dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
13996                                                       param);
13997                     }
13998                     else {
13999                         while (items-- > 0)
14000                             *dst_ary++ = sv_dup(*src_ary++, param);
14001                     }
14002                     items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
14003                     while (items-- > 0) {
14004                         *dst_ary++ = NULL;
14005                     }
14006                 }
14007                 else {
14008                     AvARRAY(MUTABLE_AV(dstr))   = NULL;
14009                     AvALLOC((const AV *)dstr)   = (SV**)NULL;
14010                     AvMAX(  (const AV *)dstr)   = -1;
14011                     AvFILLp((const AV *)dstr)   = -1;
14012                 }
14013                 break;
14014             case SVt_PVHV:
14015                 if (HvARRAY((const HV *)sstr)) {
14016                     STRLEN i = 0;
14017                     const bool sharekeys = !!HvSHAREKEYS(sstr);
14018                     XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
14019                     XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
14020                     char *darray;
14021                     Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
14022                         + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
14023                         char);
14024                     HvARRAY(dstr) = (HE**)darray;
14025                     while (i <= sxhv->xhv_max) {
14026                         const HE * const source = HvARRAY(sstr)[i];
14027                         HvARRAY(dstr)[i] = source
14028                             ? he_dup(source, sharekeys, param) : 0;
14029                         ++i;
14030                     }
14031                     if (SvOOK(sstr)) {
14032                         const struct xpvhv_aux * const saux = HvAUX(sstr);
14033                         struct xpvhv_aux * const daux = HvAUX(dstr);
14034                         /* This flag isn't copied.  */
14035                         SvOOK_on(dstr);
14036
14037                         if (saux->xhv_name_count) {
14038                             HEK ** const sname = saux->xhv_name_u.xhvnameu_names;
14039                             const I32 count
14040                              = saux->xhv_name_count < 0
14041                                 ? -saux->xhv_name_count
14042                                 :  saux->xhv_name_count;
14043                             HEK **shekp = sname + count;
14044                             HEK **dhekp;
14045                             Newx(daux->xhv_name_u.xhvnameu_names, count, HEK *);
14046                             dhekp = daux->xhv_name_u.xhvnameu_names + count;
14047                             while (shekp-- > sname) {
14048                                 dhekp--;
14049                                 *dhekp = hek_dup(*shekp, param);
14050                             }
14051                         }
14052                         else {
14053                             daux->xhv_name_u.xhvnameu_name
14054                                 = hek_dup(saux->xhv_name_u.xhvnameu_name,
14055                                           param);
14056                         }
14057                         daux->xhv_name_count = saux->xhv_name_count;
14058
14059                         daux->xhv_aux_flags = saux->xhv_aux_flags;
14060 #ifdef PERL_HASH_RANDOMIZE_KEYS
14061                         daux->xhv_rand = saux->xhv_rand;
14062                         daux->xhv_last_rand = saux->xhv_last_rand;
14063 #endif
14064                         daux->xhv_riter = saux->xhv_riter;
14065                         daux->xhv_eiter = saux->xhv_eiter
14066                             ? he_dup(saux->xhv_eiter,
14067                                         cBOOL(HvSHAREKEYS(sstr)), param) : 0;
14068                         /* backref array needs refcnt=2; see sv_add_backref */
14069                         daux->xhv_backreferences =
14070                             (param->flags & CLONEf_JOIN_IN)
14071                                 /* when joining, we let the individual GVs and
14072                                  * CVs add themselves to backref as
14073                                  * needed. This avoids pulling in stuff
14074                                  * that isn't required, and simplifies the
14075                                  * case where stashes aren't cloned back
14076                                  * if they already exist in the parent
14077                                  * thread */
14078                             ? NULL
14079                             : saux->xhv_backreferences
14080                                 ? (SvTYPE(saux->xhv_backreferences) == SVt_PVAV)
14081                                     ? MUTABLE_AV(SvREFCNT_inc(
14082                                           sv_dup_inc((const SV *)
14083                                             saux->xhv_backreferences, param)))
14084                                     : MUTABLE_AV(sv_dup((const SV *)
14085                                             saux->xhv_backreferences, param))
14086                                 : 0;
14087
14088                         daux->xhv_mro_meta = saux->xhv_mro_meta
14089                             ? mro_meta_dup(saux->xhv_mro_meta, param)
14090                             : 0;
14091
14092                         /* Record stashes for possible cloning in Perl_clone(). */
14093                         if (HvNAME(sstr))
14094                             av_push(param->stashes, dstr);
14095                     }
14096                 }
14097                 else
14098                     HvARRAY(MUTABLE_HV(dstr)) = NULL;
14099                 break;
14100             case SVt_PVCV:
14101                 if (!(param->flags & CLONEf_COPY_STACKS)) {
14102                     CvDEPTH(dstr) = 0;
14103                 }
14104                 /* FALLTHROUGH */
14105             case SVt_PVFM:
14106                 /* NOTE: not refcounted */
14107                 SvANY(MUTABLE_CV(dstr))->xcv_stash =
14108                     hv_dup(CvSTASH(dstr), param);
14109                 if ((param->flags & CLONEf_JOIN_IN) && CvSTASH(dstr))
14110                     Perl_sv_add_backref(aTHX_ MUTABLE_SV(CvSTASH(dstr)), dstr);
14111                 if (!CvISXSUB(dstr)) {
14112                     OP_REFCNT_LOCK;
14113                     CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
14114                     OP_REFCNT_UNLOCK;
14115                     CvSLABBED_off(dstr);
14116                 } else if (CvCONST(dstr)) {
14117                     CvXSUBANY(dstr).any_ptr =
14118                         sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
14119                 }
14120                 assert(!CvSLABBED(dstr));
14121                 if (CvDYNFILE(dstr)) CvFILE(dstr) = SAVEPV(CvFILE(dstr));
14122                 if (CvNAMED(dstr))
14123                     SvANY((CV *)dstr)->xcv_gv_u.xcv_hek =
14124                         hek_dup(CvNAME_HEK((CV *)sstr), param);
14125                 /* don't dup if copying back - CvGV isn't refcounted, so the
14126                  * duped GV may never be freed. A bit of a hack! DAPM */
14127                 else
14128                   SvANY(MUTABLE_CV(dstr))->xcv_gv_u.xcv_gv =
14129                     CvCVGV_RC(dstr)
14130                     ? gv_dup_inc(CvGV(sstr), param)
14131                     : (param->flags & CLONEf_JOIN_IN)
14132                         ? NULL
14133                         : gv_dup(CvGV(sstr), param);
14134
14135                 if (!CvISXSUB(sstr)) {
14136                     PADLIST * padlist = CvPADLIST(sstr);
14137                     if(padlist)
14138                         padlist = padlist_dup(padlist, param);
14139                     CvPADLIST_set(dstr, padlist);
14140                 } else
14141 /* unthreaded perl can't sv_dup so we dont support unthreaded's CvHSCXT */
14142                     PoisonPADLIST(dstr);
14143
14144                 CvOUTSIDE(dstr) =
14145                     CvWEAKOUTSIDE(sstr)
14146                     ? cv_dup(    CvOUTSIDE(dstr), param)
14147                     : cv_dup_inc(CvOUTSIDE(dstr), param);
14148                 break;
14149             }
14150         }
14151     }
14152
14153     return dstr;
14154  }
14155
14156 SV *
14157 Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
14158 {
14159     PERL_ARGS_ASSERT_SV_DUP_INC;
14160     return sstr ? SvREFCNT_inc(sv_dup_common(sstr, param)) : NULL;
14161 }
14162
14163 SV *
14164 Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
14165 {
14166     SV *dstr = sstr ? sv_dup_common(sstr, param) : NULL;
14167     PERL_ARGS_ASSERT_SV_DUP;
14168
14169     /* Track every SV that (at least initially) had a reference count of 0.
14170        We need to do this by holding an actual reference to it in this array.
14171        If we attempt to cheat, turn AvREAL_off(), and store only pointers
14172        (akin to the stashes hash, and the perl stack), we come unstuck if
14173        a weak reference (or other SV legitimately SvREFCNT() == 0 for this
14174        thread) is manipulated in a CLONE method, because CLONE runs before the
14175        unreferenced array is walked to find SVs still with SvREFCNT() == 0
14176        (and fix things up by giving each a reference via the temps stack).
14177        Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and
14178        then SvREFCNT_dec(), it will be cleaned up (and added to the free list)
14179        before the walk of unreferenced happens and a reference to that is SV
14180        added to the temps stack. At which point we have the same SV considered
14181        to be in use, and free to be re-used. Not good.
14182     */
14183     if (dstr && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dstr)) {
14184         assert(param->unreferenced);
14185         av_push(param->unreferenced, SvREFCNT_inc(dstr));
14186     }
14187
14188     return dstr;
14189 }
14190
14191 /* duplicate a context */
14192
14193 PERL_CONTEXT *
14194 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
14195 {
14196     PERL_CONTEXT *ncxs;
14197
14198     PERL_ARGS_ASSERT_CX_DUP;
14199
14200     if (!cxs)
14201         return (PERL_CONTEXT*)NULL;
14202
14203     /* look for it in the table first */
14204     ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
14205     if (ncxs)
14206         return ncxs;
14207
14208     /* create anew and remember what it is */
14209     Newx(ncxs, max + 1, PERL_CONTEXT);
14210     ptr_table_store(PL_ptr_table, cxs, ncxs);
14211     Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
14212
14213     while (ix >= 0) {
14214         PERL_CONTEXT * const ncx = &ncxs[ix];
14215         if (CxTYPE(ncx) == CXt_SUBST) {
14216             Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
14217         }
14218         else {
14219             ncx->blk_oldcop = (COP*)any_dup(ncx->blk_oldcop, param->proto_perl);
14220             switch (CxTYPE(ncx)) {
14221             case CXt_SUB:
14222                 ncx->blk_sub.cv         = cv_dup_inc(ncx->blk_sub.cv, param);
14223                 if(CxHASARGS(ncx)){
14224                     ncx->blk_sub.savearray = av_dup_inc(ncx->blk_sub.savearray,param);
14225                 } else {
14226                     ncx->blk_sub.savearray = NULL;
14227                 }
14228                 ncx->blk_sub.prevcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
14229                                            ncx->blk_sub.prevcomppad);
14230                 break;
14231             case CXt_EVAL:
14232                 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
14233                                                       param);
14234                 /* XXX should this sv_dup_inc? Or only if CxEVAL_TXT_REFCNTED ???? */
14235                 ncx->blk_eval.cur_text  = sv_dup(ncx->blk_eval.cur_text, param);
14236                 ncx->blk_eval.cv = cv_dup(ncx->blk_eval.cv, param);
14237                 /* XXX what do do with cur_top_env ???? */
14238                 break;
14239             case CXt_LOOP_LAZYSV:
14240                 ncx->blk_loop.state_u.lazysv.end
14241                     = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
14242                 /* Fallthrough: duplicate lazysv.cur by using the ary.ary
14243                    duplication code instead.
14244                    We are taking advantage of (1) av_dup_inc and sv_dup_inc
14245                    actually being the same function, and (2) order
14246                    equivalence of the two unions.
14247                    We can assert the later [but only at run time :-(]  */
14248                 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
14249                         (void *) &ncx->blk_loop.state_u.lazysv.cur);
14250                 /* FALLTHROUGH */
14251             case CXt_LOOP_ARY:
14252                 ncx->blk_loop.state_u.ary.ary
14253                     = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
14254                 /* FALLTHROUGH */
14255             case CXt_LOOP_LIST:
14256             case CXt_LOOP_LAZYIV:
14257                 /* code common to all 'for' CXt_LOOP_* types */
14258                 ncx->blk_loop.itersave =
14259                                     sv_dup_inc(ncx->blk_loop.itersave, param);
14260                 if (CxPADLOOP(ncx)) {
14261                     PADOFFSET off = ncx->blk_loop.itervar_u.svp
14262                                     - &CX_CURPAD_SV(ncx->blk_loop, 0);
14263                     ncx->blk_loop.oldcomppad =
14264                                     (PAD*)ptr_table_fetch(PL_ptr_table,
14265                                                 ncx->blk_loop.oldcomppad);
14266                     ncx->blk_loop.itervar_u.svp =
14267                                     &CX_CURPAD_SV(ncx->blk_loop, off);
14268                 }
14269                 else {
14270                     /* this copies the GV if CXp_FOR_GV, or the SV for an
14271                      * alias (for \$x (...)) - relies on gv_dup being the
14272                      * same as sv_dup */
14273                     ncx->blk_loop.itervar_u.gv
14274                         = gv_dup((const GV *)ncx->blk_loop.itervar_u.gv,
14275                                     param);
14276                 }
14277                 break;
14278             case CXt_LOOP_PLAIN:
14279                 break;
14280             case CXt_FORMAT:
14281                 ncx->blk_format.prevcomppad =
14282                         (PAD*)ptr_table_fetch(PL_ptr_table,
14283                                            ncx->blk_format.prevcomppad);
14284                 ncx->blk_format.cv      = cv_dup_inc(ncx->blk_format.cv, param);
14285                 ncx->blk_format.gv      = gv_dup(ncx->blk_format.gv, param);
14286                 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
14287                                                      param);
14288                 break;
14289             case CXt_GIVEN:
14290                 ncx->blk_givwhen.defsv_save =
14291                                 sv_dup_inc(ncx->blk_givwhen.defsv_save, param);
14292                 break;
14293             case CXt_BLOCK:
14294             case CXt_NULL:
14295             case CXt_WHEN:
14296                 break;
14297             }
14298         }
14299         --ix;
14300     }
14301     return ncxs;
14302 }
14303
14304 /* duplicate a stack info structure */
14305
14306 PERL_SI *
14307 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
14308 {
14309     PERL_SI *nsi;
14310
14311     PERL_ARGS_ASSERT_SI_DUP;
14312
14313     if (!si)
14314         return (PERL_SI*)NULL;
14315
14316     /* look for it in the table first */
14317     nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
14318     if (nsi)
14319         return nsi;
14320
14321     /* create anew and remember what it is */
14322     Newxz(nsi, 1, PERL_SI);
14323     ptr_table_store(PL_ptr_table, si, nsi);
14324
14325     nsi->si_stack       = av_dup_inc(si->si_stack, param);
14326     nsi->si_cxix        = si->si_cxix;
14327     nsi->si_cxmax       = si->si_cxmax;
14328     nsi->si_cxstack     = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
14329     nsi->si_type        = si->si_type;
14330     nsi->si_prev        = si_dup(si->si_prev, param);
14331     nsi->si_next        = si_dup(si->si_next, param);
14332     nsi->si_markoff     = si->si_markoff;
14333
14334     return nsi;
14335 }
14336
14337 #define POPINT(ss,ix)   ((ss)[--(ix)].any_i32)
14338 #define TOPINT(ss,ix)   ((ss)[ix].any_i32)
14339 #define POPLONG(ss,ix)  ((ss)[--(ix)].any_long)
14340 #define TOPLONG(ss,ix)  ((ss)[ix].any_long)
14341 #define POPIV(ss,ix)    ((ss)[--(ix)].any_iv)
14342 #define TOPIV(ss,ix)    ((ss)[ix].any_iv)
14343 #define POPUV(ss,ix)    ((ss)[--(ix)].any_uv)
14344 #define TOPUV(ss,ix)    ((ss)[ix].any_uv)
14345 #define POPBOOL(ss,ix)  ((ss)[--(ix)].any_bool)
14346 #define TOPBOOL(ss,ix)  ((ss)[ix].any_bool)
14347 #define POPPTR(ss,ix)   ((ss)[--(ix)].any_ptr)
14348 #define TOPPTR(ss,ix)   ((ss)[ix].any_ptr)
14349 #define POPDPTR(ss,ix)  ((ss)[--(ix)].any_dptr)
14350 #define TOPDPTR(ss,ix)  ((ss)[ix].any_dptr)
14351 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
14352 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
14353
14354 /* XXXXX todo */
14355 #define pv_dup_inc(p)   SAVEPV(p)
14356 #define pv_dup(p)       SAVEPV(p)
14357 #define svp_dup_inc(p,pp)       any_dup(p,pp)
14358
14359 /* map any object to the new equivent - either something in the
14360  * ptr table, or something in the interpreter structure
14361  */
14362
14363 void *
14364 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
14365 {
14366     void *ret;
14367
14368     PERL_ARGS_ASSERT_ANY_DUP;
14369
14370     if (!v)
14371         return (void*)NULL;
14372
14373     /* look for it in the table first */
14374     ret = ptr_table_fetch(PL_ptr_table, v);
14375     if (ret)
14376         return ret;
14377
14378     /* see if it is part of the interpreter structure */
14379     if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
14380         ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
14381     else {
14382         ret = v;
14383     }
14384
14385     return ret;
14386 }
14387
14388 /* duplicate the save stack */
14389
14390 ANY *
14391 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
14392 {
14393     dVAR;
14394     ANY * const ss      = proto_perl->Isavestack;
14395     const I32 max       = proto_perl->Isavestack_max + SS_MAXPUSH;
14396     I32 ix              = proto_perl->Isavestack_ix;
14397     ANY *nss;
14398     const SV *sv;
14399     const GV *gv;
14400     const AV *av;
14401     const HV *hv;
14402     void* ptr;
14403     int intval;
14404     long longval;
14405     GP *gp;
14406     IV iv;
14407     I32 i;
14408     char *c = NULL;
14409     void (*dptr) (void*);
14410     void (*dxptr) (pTHX_ void*);
14411
14412     PERL_ARGS_ASSERT_SS_DUP;
14413
14414     Newxz(nss, max, ANY);
14415
14416     while (ix > 0) {
14417         const UV uv = POPUV(ss,ix);
14418         const U8 type = (U8)uv & SAVE_MASK;
14419
14420         TOPUV(nss,ix) = uv;
14421         switch (type) {
14422         case SAVEt_CLEARSV:
14423         case SAVEt_CLEARPADRANGE:
14424             break;
14425         case SAVEt_HELEM:               /* hash element */
14426         case SAVEt_SV:                  /* scalar reference */
14427             sv = (const SV *)POPPTR(ss,ix);
14428             TOPPTR(nss,ix) = SvREFCNT_inc(sv_dup_inc(sv, param));
14429             /* FALLTHROUGH */
14430         case SAVEt_ITEM:                        /* normal string */
14431         case SAVEt_GVSV:                        /* scalar slot in GV */
14432             sv = (const SV *)POPPTR(ss,ix);
14433             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14434             if (type == SAVEt_SV)
14435                 break;
14436             /* FALLTHROUGH */
14437         case SAVEt_FREESV:
14438         case SAVEt_MORTALIZESV:
14439         case SAVEt_READONLY_OFF:
14440             sv = (const SV *)POPPTR(ss,ix);
14441             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14442             break;
14443         case SAVEt_FREEPADNAME:
14444             ptr = POPPTR(ss,ix);
14445             TOPPTR(nss,ix) = padname_dup((PADNAME *)ptr, param);
14446             PadnameREFCNT((PADNAME *)TOPPTR(nss,ix))++;
14447             break;
14448         case SAVEt_SHARED_PVREF:                /* char* in shared space */
14449             c = (char*)POPPTR(ss,ix);
14450             TOPPTR(nss,ix) = savesharedpv(c);
14451             ptr = POPPTR(ss,ix);
14452             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14453             break;
14454         case SAVEt_GENERIC_SVREF:               /* generic sv */
14455         case SAVEt_SVREF:                       /* scalar reference */
14456             sv = (const SV *)POPPTR(ss,ix);
14457             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14458             if (type == SAVEt_SVREF)
14459                 SvREFCNT_inc_simple_void((SV *)TOPPTR(nss,ix));
14460             ptr = POPPTR(ss,ix);
14461             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
14462             break;
14463         case SAVEt_GVSLOT:              /* any slot in GV */
14464             sv = (const SV *)POPPTR(ss,ix);
14465             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14466             ptr = POPPTR(ss,ix);
14467             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
14468             sv = (const SV *)POPPTR(ss,ix);
14469             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14470             break;
14471         case SAVEt_HV:                          /* hash reference */
14472         case SAVEt_AV:                          /* array reference */
14473             sv = (const SV *) POPPTR(ss,ix);
14474             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14475             /* FALLTHROUGH */
14476         case SAVEt_COMPPAD:
14477         case SAVEt_NSTAB:
14478             sv = (const SV *) POPPTR(ss,ix);
14479             TOPPTR(nss,ix) = sv_dup(sv, param);
14480             break;
14481         case SAVEt_INT:                         /* int reference */
14482             ptr = POPPTR(ss,ix);
14483             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14484             intval = (int)POPINT(ss,ix);
14485             TOPINT(nss,ix) = intval;
14486             break;
14487         case SAVEt_LONG:                        /* long reference */
14488             ptr = POPPTR(ss,ix);
14489             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14490             longval = (long)POPLONG(ss,ix);
14491             TOPLONG(nss,ix) = longval;
14492             break;
14493         case SAVEt_I32:                         /* I32 reference */
14494             ptr = POPPTR(ss,ix);
14495             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14496             i = POPINT(ss,ix);
14497             TOPINT(nss,ix) = i;
14498             break;
14499         case SAVEt_IV:                          /* IV reference */
14500         case SAVEt_STRLEN:                      /* STRLEN/size_t ref */
14501             ptr = POPPTR(ss,ix);
14502             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14503             iv = POPIV(ss,ix);
14504             TOPIV(nss,ix) = iv;
14505             break;
14506         case SAVEt_TMPSFLOOR:
14507             iv = POPIV(ss,ix);
14508             TOPIV(nss,ix) = iv;
14509             break;
14510         case SAVEt_HPTR:                        /* HV* reference */
14511         case SAVEt_APTR:                        /* AV* reference */
14512         case SAVEt_SPTR:                        /* SV* reference */
14513             ptr = POPPTR(ss,ix);
14514             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14515             sv = (const SV *)POPPTR(ss,ix);
14516             TOPPTR(nss,ix) = sv_dup(sv, param);
14517             break;
14518         case SAVEt_VPTR:                        /* random* reference */
14519             ptr = POPPTR(ss,ix);
14520             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14521             /* FALLTHROUGH */
14522         case SAVEt_INT_SMALL:
14523         case SAVEt_I32_SMALL:
14524         case SAVEt_I16:                         /* I16 reference */
14525         case SAVEt_I8:                          /* I8 reference */
14526         case SAVEt_BOOL:
14527             ptr = POPPTR(ss,ix);
14528             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14529             break;
14530         case SAVEt_GENERIC_PVREF:               /* generic char* */
14531         case SAVEt_PPTR:                        /* char* reference */
14532             ptr = POPPTR(ss,ix);
14533             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14534             c = (char*)POPPTR(ss,ix);
14535             TOPPTR(nss,ix) = pv_dup(c);
14536             break;
14537         case SAVEt_GP:                          /* scalar reference */
14538             gp = (GP*)POPPTR(ss,ix);
14539             TOPPTR(nss,ix) = gp = gp_dup(gp, param);
14540             (void)GpREFCNT_inc(gp);
14541             gv = (const GV *)POPPTR(ss,ix);
14542             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
14543             break;
14544         case SAVEt_FREEOP:
14545             ptr = POPPTR(ss,ix);
14546             if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
14547                 /* these are assumed to be refcounted properly */
14548                 OP *o;
14549                 switch (((OP*)ptr)->op_type) {
14550                 case OP_LEAVESUB:
14551                 case OP_LEAVESUBLV:
14552                 case OP_LEAVEEVAL:
14553                 case OP_LEAVE:
14554                 case OP_SCOPE:
14555                 case OP_LEAVEWRITE:
14556                     TOPPTR(nss,ix) = ptr;
14557                     o = (OP*)ptr;
14558                     OP_REFCNT_LOCK;
14559                     (void) OpREFCNT_inc(o);
14560                     OP_REFCNT_UNLOCK;
14561                     break;
14562                 default:
14563                     TOPPTR(nss,ix) = NULL;
14564                     break;
14565                 }
14566             }
14567             else
14568                 TOPPTR(nss,ix) = NULL;
14569             break;
14570         case SAVEt_FREECOPHH:
14571             ptr = POPPTR(ss,ix);
14572             TOPPTR(nss,ix) = cophh_copy((COPHH *)ptr);
14573             break;
14574         case SAVEt_ADELETE:
14575             av = (const AV *)POPPTR(ss,ix);
14576             TOPPTR(nss,ix) = av_dup_inc(av, param);
14577             i = POPINT(ss,ix);
14578             TOPINT(nss,ix) = i;
14579             break;
14580         case SAVEt_DELETE:
14581             hv = (const HV *)POPPTR(ss,ix);
14582             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
14583             i = POPINT(ss,ix);
14584             TOPINT(nss,ix) = i;
14585             /* FALLTHROUGH */
14586         case SAVEt_FREEPV:
14587             c = (char*)POPPTR(ss,ix);
14588             TOPPTR(nss,ix) = pv_dup_inc(c);
14589             break;
14590         case SAVEt_STACK_POS:           /* Position on Perl stack */
14591             i = POPINT(ss,ix);
14592             TOPINT(nss,ix) = i;
14593             break;
14594         case SAVEt_DESTRUCTOR:
14595             ptr = POPPTR(ss,ix);
14596             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
14597             dptr = POPDPTR(ss,ix);
14598             TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
14599                                         any_dup(FPTR2DPTR(void *, dptr),
14600                                                 proto_perl));
14601             break;
14602         case SAVEt_DESTRUCTOR_X:
14603             ptr = POPPTR(ss,ix);
14604             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
14605             dxptr = POPDXPTR(ss,ix);
14606             TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
14607                                          any_dup(FPTR2DPTR(void *, dxptr),
14608                                                  proto_perl));
14609             break;
14610         case SAVEt_REGCONTEXT:
14611         case SAVEt_ALLOC:
14612             ix -= uv >> SAVE_TIGHT_SHIFT;
14613             break;
14614         case SAVEt_AELEM:               /* array element */
14615             sv = (const SV *)POPPTR(ss,ix);
14616             TOPPTR(nss,ix) = SvREFCNT_inc(sv_dup_inc(sv, param));
14617             i = POPINT(ss,ix);
14618             TOPINT(nss,ix) = i;
14619             av = (const AV *)POPPTR(ss,ix);
14620             TOPPTR(nss,ix) = av_dup_inc(av, param);
14621             break;
14622         case SAVEt_OP:
14623             ptr = POPPTR(ss,ix);
14624             TOPPTR(nss,ix) = ptr;
14625             break;
14626         case SAVEt_HINTS:
14627             ptr = POPPTR(ss,ix);
14628             ptr = cophh_copy((COPHH*)ptr);
14629             TOPPTR(nss,ix) = ptr;
14630             i = POPINT(ss,ix);
14631             TOPINT(nss,ix) = i;
14632             if (i & HINT_LOCALIZE_HH) {
14633                 hv = (const HV *)POPPTR(ss,ix);
14634                 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
14635             }
14636             break;
14637         case SAVEt_PADSV_AND_MORTALIZE:
14638             longval = (long)POPLONG(ss,ix);
14639             TOPLONG(nss,ix) = longval;
14640             ptr = POPPTR(ss,ix);
14641             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14642             sv = (const SV *)POPPTR(ss,ix);
14643             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14644             break;
14645         case SAVEt_SET_SVFLAGS:
14646             i = POPINT(ss,ix);
14647             TOPINT(nss,ix) = i;
14648             i = POPINT(ss,ix);
14649             TOPINT(nss,ix) = i;
14650             sv = (const SV *)POPPTR(ss,ix);
14651             TOPPTR(nss,ix) = sv_dup(sv, param);
14652             break;
14653         case SAVEt_COMPILE_WARNINGS:
14654             ptr = POPPTR(ss,ix);
14655             TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
14656             break;
14657         case SAVEt_PARSER:
14658             ptr = POPPTR(ss,ix);
14659             TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
14660             break;
14661         default:
14662             Perl_croak(aTHX_
14663                        "panic: ss_dup inconsistency (%" IVdf ")", (IV) type);
14664         }
14665     }
14666
14667     return nss;
14668 }
14669
14670
14671 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
14672  * flag to the result. This is done for each stash before cloning starts,
14673  * so we know which stashes want their objects cloned */
14674
14675 static void
14676 do_mark_cloneable_stash(pTHX_ SV *const sv)
14677 {
14678     const HEK * const hvname = HvNAME_HEK((const HV *)sv);
14679     if (hvname) {
14680         GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
14681         SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
14682         if (cloner && GvCV(cloner)) {
14683             dSP;
14684             UV status;
14685
14686             ENTER;
14687             SAVETMPS;
14688             PUSHMARK(SP);
14689             mXPUSHs(newSVhek(hvname));
14690             PUTBACK;
14691             call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
14692             SPAGAIN;
14693             status = POPu;
14694             PUTBACK;
14695             FREETMPS;
14696             LEAVE;
14697             if (status)
14698                 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
14699         }
14700     }
14701 }
14702
14703
14704
14705 /*
14706 =for apidoc perl_clone
14707
14708 Create and return a new interpreter by cloning the current one.
14709
14710 C<perl_clone> takes these flags as parameters:
14711
14712 C<CLONEf_COPY_STACKS> - is used to, well, copy the stacks also,
14713 without it we only clone the data and zero the stacks,
14714 with it we copy the stacks and the new perl interpreter is
14715 ready to run at the exact same point as the previous one.
14716 The pseudo-fork code uses C<COPY_STACKS> while the
14717 threads->create doesn't.
14718
14719 C<CLONEf_KEEP_PTR_TABLE> -
14720 C<perl_clone> keeps a ptr_table with the pointer of the old
14721 variable as a key and the new variable as a value,
14722 this allows it to check if something has been cloned and not
14723 clone it again but rather just use the value and increase the
14724 refcount.  If C<KEEP_PTR_TABLE> is not set then C<perl_clone> will kill
14725 the ptr_table using the function
14726 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
14727 reason to keep it around is if you want to dup some of your own
14728 variable who are outside the graph perl scans, an example of this
14729 code is in F<threads.xs> create.
14730
14731 C<CLONEf_CLONE_HOST> -
14732 This is a win32 thing, it is ignored on unix, it tells perls
14733 win32host code (which is c++) to clone itself, this is needed on
14734 win32 if you want to run two threads at the same time,
14735 if you just want to do some stuff in a separate perl interpreter
14736 and then throw it away and return to the original one,
14737 you don't need to do anything.
14738
14739 =cut
14740 */
14741
14742 /* XXX the above needs expanding by someone who actually understands it ! */
14743 EXTERN_C PerlInterpreter *
14744 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
14745
14746 PerlInterpreter *
14747 perl_clone(PerlInterpreter *proto_perl, UV flags)
14748 {
14749    dVAR;
14750 #ifdef PERL_IMPLICIT_SYS
14751
14752     PERL_ARGS_ASSERT_PERL_CLONE;
14753
14754    /* perlhost.h so we need to call into it
14755    to clone the host, CPerlHost should have a c interface, sky */
14756
14757 #ifndef __amigaos4__
14758    if (flags & CLONEf_CLONE_HOST) {
14759        return perl_clone_host(proto_perl,flags);
14760    }
14761 #endif
14762    return perl_clone_using(proto_perl, flags,
14763                             proto_perl->IMem,
14764                             proto_perl->IMemShared,
14765                             proto_perl->IMemParse,
14766                             proto_perl->IEnv,
14767                             proto_perl->IStdIO,
14768                             proto_perl->ILIO,
14769                             proto_perl->IDir,
14770                             proto_perl->ISock,
14771                             proto_perl->IProc);
14772 }
14773
14774 PerlInterpreter *
14775 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
14776                  struct IPerlMem* ipM, struct IPerlMem* ipMS,
14777                  struct IPerlMem* ipMP, struct IPerlEnv* ipE,
14778                  struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
14779                  struct IPerlDir* ipD, struct IPerlSock* ipS,
14780                  struct IPerlProc* ipP)
14781 {
14782     /* XXX many of the string copies here can be optimized if they're
14783      * constants; they need to be allocated as common memory and just
14784      * their pointers copied. */
14785
14786     IV i;
14787     CLONE_PARAMS clone_params;
14788     CLONE_PARAMS* const param = &clone_params;
14789
14790     PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
14791
14792     PERL_ARGS_ASSERT_PERL_CLONE_USING;
14793 #else           /* !PERL_IMPLICIT_SYS */
14794     IV i;
14795     CLONE_PARAMS clone_params;
14796     CLONE_PARAMS* param = &clone_params;
14797     PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
14798
14799     PERL_ARGS_ASSERT_PERL_CLONE;
14800 #endif          /* PERL_IMPLICIT_SYS */
14801
14802     /* for each stash, determine whether its objects should be cloned */
14803     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
14804     PERL_SET_THX(my_perl);
14805
14806 #ifdef DEBUGGING
14807     PoisonNew(my_perl, 1, PerlInterpreter);
14808     PL_op = NULL;
14809     PL_curcop = NULL;
14810     PL_defstash = NULL; /* may be used by perl malloc() */
14811     PL_markstack = 0;
14812     PL_scopestack = 0;
14813     PL_scopestack_name = 0;
14814     PL_savestack = 0;
14815     PL_savestack_ix = 0;
14816     PL_savestack_max = -1;
14817     PL_sig_pending = 0;
14818     PL_parser = NULL;
14819     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
14820     Zero(&PL_padname_undef, 1, PADNAME);
14821     Zero(&PL_padname_const, 1, PADNAME);
14822 #  ifdef DEBUG_LEAKING_SCALARS
14823     PL_sv_serial = (((UV)my_perl >> 2) & 0xfff) * 1000000;
14824 #  endif
14825 #  ifdef PERL_TRACE_OPS
14826     Zero(PL_op_exec_cnt, OP_max+2, UV);
14827 #  endif
14828 #else   /* !DEBUGGING */
14829     Zero(my_perl, 1, PerlInterpreter);
14830 #endif  /* DEBUGGING */
14831
14832 #ifdef PERL_IMPLICIT_SYS
14833     /* host pointers */
14834     PL_Mem              = ipM;
14835     PL_MemShared        = ipMS;
14836     PL_MemParse         = ipMP;
14837     PL_Env              = ipE;
14838     PL_StdIO            = ipStd;
14839     PL_LIO              = ipLIO;
14840     PL_Dir              = ipD;
14841     PL_Sock             = ipS;
14842     PL_Proc             = ipP;
14843 #endif          /* PERL_IMPLICIT_SYS */
14844
14845
14846     param->flags = flags;
14847     /* Nothing in the core code uses this, but we make it available to
14848        extensions (using mg_dup).  */
14849     param->proto_perl = proto_perl;
14850     /* Likely nothing will use this, but it is initialised to be consistent
14851        with Perl_clone_params_new().  */
14852     param->new_perl = my_perl;
14853     param->unreferenced = NULL;
14854
14855
14856     INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
14857
14858     PL_body_arenas = NULL;
14859     Zero(&PL_body_roots, 1, PL_body_roots);
14860     
14861     PL_sv_count         = 0;
14862     PL_sv_root          = NULL;
14863     PL_sv_arenaroot     = NULL;
14864
14865     PL_debug            = proto_perl->Idebug;
14866
14867     /* dbargs array probably holds garbage */
14868     PL_dbargs           = NULL;
14869
14870     PL_compiling = proto_perl->Icompiling;
14871
14872     /* pseudo environmental stuff */
14873     PL_origargc         = proto_perl->Iorigargc;
14874     PL_origargv         = proto_perl->Iorigargv;
14875
14876 #ifndef NO_TAINT_SUPPORT
14877     /* Set tainting stuff before PerlIO_debug can possibly get called */
14878     PL_tainting         = proto_perl->Itainting;
14879     PL_taint_warn       = proto_perl->Itaint_warn;
14880 #else
14881     PL_tainting         = FALSE;
14882     PL_taint_warn       = FALSE;
14883 #endif
14884
14885     PL_minus_c          = proto_perl->Iminus_c;
14886
14887     PL_localpatches     = proto_perl->Ilocalpatches;
14888     PL_splitstr         = proto_perl->Isplitstr;
14889     PL_minus_n          = proto_perl->Iminus_n;
14890     PL_minus_p          = proto_perl->Iminus_p;
14891     PL_minus_l          = proto_perl->Iminus_l;
14892     PL_minus_a          = proto_perl->Iminus_a;
14893     PL_minus_E          = proto_perl->Iminus_E;
14894     PL_minus_F          = proto_perl->Iminus_F;
14895     PL_doswitches       = proto_perl->Idoswitches;
14896     PL_dowarn           = proto_perl->Idowarn;
14897 #ifdef PERL_SAWAMPERSAND
14898     PL_sawampersand     = proto_perl->Isawampersand;
14899 #endif
14900     PL_unsafe           = proto_perl->Iunsafe;
14901     PL_perldb           = proto_perl->Iperldb;
14902     PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
14903     PL_exit_flags       = proto_perl->Iexit_flags;
14904
14905     /* XXX time(&PL_basetime) when asked for? */
14906     PL_basetime         = proto_perl->Ibasetime;
14907
14908     PL_maxsysfd         = proto_perl->Imaxsysfd;
14909     PL_statusvalue      = proto_perl->Istatusvalue;
14910 #ifdef __VMS
14911     PL_statusvalue_vms  = proto_perl->Istatusvalue_vms;
14912 #else
14913     PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
14914 #endif
14915
14916     /* RE engine related */
14917     PL_regmatch_slab    = NULL;
14918     PL_reg_curpm        = NULL;
14919
14920     PL_sub_generation   = proto_perl->Isub_generation;
14921
14922     /* funky return mechanisms */
14923     PL_forkprocess      = proto_perl->Iforkprocess;
14924
14925     /* internal state */
14926     PL_main_start       = proto_perl->Imain_start;
14927     PL_eval_root        = proto_perl->Ieval_root;
14928     PL_eval_start       = proto_perl->Ieval_start;
14929
14930     PL_filemode         = proto_perl->Ifilemode;
14931     PL_lastfd           = proto_perl->Ilastfd;
14932     PL_oldname          = proto_perl->Ioldname;         /* XXX not quite right */
14933     PL_Argv             = NULL;
14934     PL_Cmd              = NULL;
14935     PL_gensym           = proto_perl->Igensym;
14936
14937     PL_laststatval      = proto_perl->Ilaststatval;
14938     PL_laststype        = proto_perl->Ilaststype;
14939     PL_mess_sv          = NULL;
14940
14941     PL_profiledata      = NULL;
14942
14943     PL_generation       = proto_perl->Igeneration;
14944
14945     PL_in_clean_objs    = proto_perl->Iin_clean_objs;
14946     PL_in_clean_all     = proto_perl->Iin_clean_all;
14947
14948     PL_delaymagic_uid   = proto_perl->Idelaymagic_uid;
14949     PL_delaymagic_euid  = proto_perl->Idelaymagic_euid;
14950     PL_delaymagic_gid   = proto_perl->Idelaymagic_gid;
14951     PL_delaymagic_egid  = proto_perl->Idelaymagic_egid;
14952     PL_nomemok          = proto_perl->Inomemok;
14953     PL_an               = proto_perl->Ian;
14954     PL_evalseq          = proto_perl->Ievalseq;
14955     PL_origenviron      = proto_perl->Iorigenviron;     /* XXX not quite right */
14956     PL_origalen         = proto_perl->Iorigalen;
14957
14958     PL_sighandlerp      = proto_perl->Isighandlerp;
14959
14960     PL_runops           = proto_perl->Irunops;
14961
14962     PL_subline          = proto_perl->Isubline;
14963
14964     PL_cv_has_eval      = proto_perl->Icv_has_eval;
14965
14966 #ifdef FCRYPT
14967     PL_cryptseen        = proto_perl->Icryptseen;
14968 #endif
14969
14970 #ifdef USE_LOCALE_COLLATE
14971     PL_collation_ix     = proto_perl->Icollation_ix;
14972     PL_collation_standard       = proto_perl->Icollation_standard;
14973     PL_collxfrm_base    = proto_perl->Icollxfrm_base;
14974     PL_collxfrm_mult    = proto_perl->Icollxfrm_mult;
14975     PL_strxfrm_max_cp   = proto_perl->Istrxfrm_max_cp;
14976 #endif /* USE_LOCALE_COLLATE */
14977
14978 #ifdef USE_LOCALE_NUMERIC
14979     PL_numeric_standard = proto_perl->Inumeric_standard;
14980     PL_numeric_local    = proto_perl->Inumeric_local;
14981 #endif /* !USE_LOCALE_NUMERIC */
14982
14983     /* Did the locale setup indicate UTF-8? */
14984     PL_utf8locale       = proto_perl->Iutf8locale;
14985     PL_in_utf8_CTYPE_locale = proto_perl->Iin_utf8_CTYPE_locale;
14986     PL_in_utf8_COLLATE_locale = proto_perl->Iin_utf8_COLLATE_locale;
14987     /* Unicode features (see perlrun/-C) */
14988     PL_unicode          = proto_perl->Iunicode;
14989
14990     /* Pre-5.8 signals control */
14991     PL_signals          = proto_perl->Isignals;
14992
14993     /* times() ticks per second */
14994     PL_clocktick        = proto_perl->Iclocktick;
14995
14996     /* Recursion stopper for PerlIO_find_layer */
14997     PL_in_load_module   = proto_perl->Iin_load_module;
14998
14999     /* sort() routine */
15000     PL_sort_RealCmp     = proto_perl->Isort_RealCmp;
15001
15002     /* Not really needed/useful since the reenrant_retint is "volatile",
15003      * but do it for consistency's sake. */
15004     PL_reentrant_retint = proto_perl->Ireentrant_retint;
15005
15006     /* Hooks to shared SVs and locks. */
15007     PL_sharehook        = proto_perl->Isharehook;
15008     PL_lockhook         = proto_perl->Ilockhook;
15009     PL_unlockhook       = proto_perl->Iunlockhook;
15010     PL_threadhook       = proto_perl->Ithreadhook;
15011     PL_destroyhook      = proto_perl->Idestroyhook;
15012     PL_signalhook       = proto_perl->Isignalhook;
15013
15014     PL_globhook         = proto_perl->Iglobhook;
15015
15016     /* swatch cache */
15017     PL_last_swash_hv    = NULL; /* reinits on demand */
15018     PL_last_swash_klen  = 0;
15019     PL_last_swash_key[0]= '\0';
15020     PL_last_swash_tmps  = (U8*)NULL;
15021     PL_last_swash_slen  = 0;
15022
15023     PL_srand_called     = proto_perl->Isrand_called;
15024     Copy(&(proto_perl->Irandom_state), &PL_random_state, 1, PL_RANDOM_STATE_TYPE);
15025
15026     if (flags & CLONEf_COPY_STACKS) {
15027         /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
15028         PL_tmps_ix              = proto_perl->Itmps_ix;
15029         PL_tmps_max             = proto_perl->Itmps_max;
15030         PL_tmps_floor           = proto_perl->Itmps_floor;
15031
15032         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
15033          * NOTE: unlike the others! */
15034         PL_scopestack_ix        = proto_perl->Iscopestack_ix;
15035         PL_scopestack_max       = proto_perl->Iscopestack_max;
15036
15037         /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
15038          * NOTE: unlike the others! */
15039         PL_savestack_ix         = proto_perl->Isavestack_ix;
15040         PL_savestack_max        = proto_perl->Isavestack_max;
15041     }
15042
15043     PL_start_env        = proto_perl->Istart_env;       /* XXXXXX */
15044     PL_top_env          = &PL_start_env;
15045
15046     PL_op               = proto_perl->Iop;
15047
15048     PL_Sv               = NULL;
15049     PL_Xpv              = (XPV*)NULL;
15050     my_perl->Ina        = proto_perl->Ina;
15051
15052     PL_statbuf          = proto_perl->Istatbuf;
15053     PL_statcache        = proto_perl->Istatcache;
15054
15055 #ifndef NO_TAINT_SUPPORT
15056     PL_tainted          = proto_perl->Itainted;
15057 #else
15058     PL_tainted          = FALSE;
15059 #endif
15060     PL_curpm            = proto_perl->Icurpm;   /* XXX No PMOP ref count */
15061
15062     PL_chopset          = proto_perl->Ichopset; /* XXX never deallocated */
15063
15064     PL_restartjmpenv    = proto_perl->Irestartjmpenv;
15065     PL_restartop        = proto_perl->Irestartop;
15066     PL_in_eval          = proto_perl->Iin_eval;
15067     PL_delaymagic       = proto_perl->Idelaymagic;
15068     PL_phase            = proto_perl->Iphase;
15069     PL_localizing       = proto_perl->Ilocalizing;
15070
15071     PL_hv_fetch_ent_mh  = NULL;
15072     PL_modcount         = proto_perl->Imodcount;
15073     PL_lastgotoprobe    = NULL;
15074     PL_dumpindent       = proto_perl->Idumpindent;
15075
15076     PL_efloatbuf        = NULL;         /* reinits on demand */
15077     PL_efloatsize       = 0;                    /* reinits on demand */
15078
15079     /* regex stuff */
15080
15081     PL_colorset         = 0;            /* reinits PL_colors[] */
15082     /*PL_colors[6]      = {0,0,0,0,0,0};*/
15083
15084     /* Pluggable optimizer */
15085     PL_peepp            = proto_perl->Ipeepp;
15086     PL_rpeepp           = proto_perl->Irpeepp;
15087     /* op_free() hook */
15088     PL_opfreehook       = proto_perl->Iopfreehook;
15089
15090 #ifdef USE_REENTRANT_API
15091     /* XXX: things like -Dm will segfault here in perlio, but doing
15092      *  PERL_SET_CONTEXT(proto_perl);
15093      * breaks too many other things
15094      */
15095     Perl_reentrant_init(aTHX);
15096 #endif
15097
15098     /* create SV map for pointer relocation */
15099     PL_ptr_table = ptr_table_new();
15100
15101     /* initialize these special pointers as early as possible */
15102     init_constants();
15103     ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
15104     ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
15105     ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
15106     ptr_table_store(PL_ptr_table, &proto_perl->Ipadname_const,
15107                     &PL_padname_const);
15108
15109     /* create (a non-shared!) shared string table */
15110     PL_strtab           = newHV();
15111     HvSHAREKEYS_off(PL_strtab);
15112     hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
15113     ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
15114
15115     Zero(PL_sv_consts, SV_CONSTS_COUNT, SV*);
15116
15117     /* This PV will be free'd special way so must set it same way op.c does */
15118     PL_compiling.cop_file    = savesharedpv(PL_compiling.cop_file);
15119     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
15120
15121     ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
15122     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
15123     CopHINTHASH_set(&PL_compiling, cophh_copy(CopHINTHASH_get(&PL_compiling)));
15124     PL_curcop           = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
15125
15126     param->stashes      = newAV();  /* Setup array of objects to call clone on */
15127     /* This makes no difference to the implementation, as it always pushes
15128        and shifts pointers to other SVs without changing their reference
15129        count, with the array becoming empty before it is freed. However, it
15130        makes it conceptually clear what is going on, and will avoid some
15131        work inside av.c, filling slots between AvFILL() and AvMAX() with
15132        &PL_sv_undef, and SvREFCNT_dec()ing those.  */
15133     AvREAL_off(param->stashes);
15134
15135     if (!(flags & CLONEf_COPY_STACKS)) {
15136         param->unreferenced = newAV();
15137     }
15138
15139 #ifdef PERLIO_LAYERS
15140     /* Clone PerlIO tables as soon as we can handle general xx_dup() */
15141     PerlIO_clone(aTHX_ proto_perl, param);
15142 #endif
15143
15144     PL_envgv            = gv_dup_inc(proto_perl->Ienvgv, param);
15145     PL_incgv            = gv_dup_inc(proto_perl->Iincgv, param);
15146     PL_hintgv           = gv_dup_inc(proto_perl->Ihintgv, param);
15147     PL_origfilename     = SAVEPV(proto_perl->Iorigfilename);
15148     PL_xsubfilename     = proto_perl->Ixsubfilename;
15149     PL_diehook          = sv_dup_inc(proto_perl->Idiehook, param);
15150     PL_warnhook         = sv_dup_inc(proto_perl->Iwarnhook, param);
15151
15152     /* switches */
15153     PL_patchlevel       = sv_dup_inc(proto_perl->Ipatchlevel, param);
15154     PL_inplace          = SAVEPV(proto_perl->Iinplace);
15155     PL_e_script         = sv_dup_inc(proto_perl->Ie_script, param);
15156
15157     /* magical thingies */
15158
15159     SvPVCLEAR(PERL_DEBUG_PAD(0));        /* For regex debugging. */
15160     SvPVCLEAR(PERL_DEBUG_PAD(1));        /* ext/re needs these */
15161     SvPVCLEAR(PERL_DEBUG_PAD(2));        /* even without DEBUGGING. */
15162
15163    
15164     /* Clone the regex array */
15165     /* ORANGE FIXME for plugins, probably in the SV dup code.
15166        newSViv(PTR2IV(CALLREGDUPE(
15167        INT2PTR(REGEXP *, SvIVX(regex)), param))))
15168     */
15169     PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
15170     PL_regex_pad = AvARRAY(PL_regex_padav);
15171
15172     PL_stashpadmax      = proto_perl->Istashpadmax;
15173     PL_stashpadix       = proto_perl->Istashpadix ;
15174     Newx(PL_stashpad, PL_stashpadmax, HV *);
15175     {
15176         PADOFFSET o = 0;
15177         for (; o < PL_stashpadmax; ++o)
15178             PL_stashpad[o] = hv_dup(proto_perl->Istashpad[o], param);
15179     }
15180
15181     /* shortcuts to various I/O objects */
15182     PL_ofsgv            = gv_dup_inc(proto_perl->Iofsgv, param);
15183     PL_stdingv          = gv_dup(proto_perl->Istdingv, param);
15184     PL_stderrgv         = gv_dup(proto_perl->Istderrgv, param);
15185     PL_defgv            = gv_dup(proto_perl->Idefgv, param);
15186     PL_argvgv           = gv_dup_inc(proto_perl->Iargvgv, param);
15187     PL_argvoutgv        = gv_dup(proto_perl->Iargvoutgv, param);
15188     PL_argvout_stack    = av_dup_inc(proto_perl->Iargvout_stack, param);
15189
15190     /* shortcuts to regexp stuff */
15191     PL_replgv           = gv_dup_inc(proto_perl->Ireplgv, param);
15192
15193     /* shortcuts to misc objects */
15194     PL_errgv            = gv_dup(proto_perl->Ierrgv, param);
15195
15196     /* shortcuts to debugging objects */
15197     PL_DBgv             = gv_dup_inc(proto_perl->IDBgv, param);
15198     PL_DBline           = gv_dup_inc(proto_perl->IDBline, param);
15199     PL_DBsub            = gv_dup_inc(proto_perl->IDBsub, param);
15200     PL_DBsingle         = sv_dup(proto_perl->IDBsingle, param);
15201     PL_DBtrace          = sv_dup(proto_perl->IDBtrace, param);
15202     PL_DBsignal         = sv_dup(proto_perl->IDBsignal, param);
15203     Copy(proto_perl->IDBcontrol, PL_DBcontrol, DBVARMG_COUNT, IV);
15204
15205     /* symbol tables */
15206     PL_defstash         = hv_dup_inc(proto_perl->Idefstash, param);
15207     PL_curstash         = hv_dup_inc(proto_perl->Icurstash, param);
15208     PL_debstash         = hv_dup(proto_perl->Idebstash, param);
15209     PL_globalstash      = hv_dup(proto_perl->Iglobalstash, param);
15210     PL_curstname        = sv_dup_inc(proto_perl->Icurstname, param);
15211
15212     PL_beginav          = av_dup_inc(proto_perl->Ibeginav, param);
15213     PL_beginav_save     = av_dup_inc(proto_perl->Ibeginav_save, param);
15214     PL_checkav_save     = av_dup_inc(proto_perl->Icheckav_save, param);
15215     PL_unitcheckav      = av_dup_inc(proto_perl->Iunitcheckav, param);
15216     PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
15217     PL_endav            = av_dup_inc(proto_perl->Iendav, param);
15218     PL_checkav          = av_dup_inc(proto_perl->Icheckav, param);
15219     PL_initav           = av_dup_inc(proto_perl->Iinitav, param);
15220     PL_savebegin        = proto_perl->Isavebegin;
15221
15222     PL_isarev           = hv_dup_inc(proto_perl->Iisarev, param);
15223
15224     /* subprocess state */
15225     PL_fdpid            = av_dup_inc(proto_perl->Ifdpid, param);
15226
15227     if (proto_perl->Iop_mask)
15228         PL_op_mask      = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
15229     else
15230         PL_op_mask      = NULL;
15231     /* PL_asserting        = proto_perl->Iasserting; */
15232
15233     /* current interpreter roots */
15234     PL_main_cv          = cv_dup_inc(proto_perl->Imain_cv, param);
15235     OP_REFCNT_LOCK;
15236     PL_main_root        = OpREFCNT_inc(proto_perl->Imain_root);
15237     OP_REFCNT_UNLOCK;
15238
15239     /* runtime control stuff */
15240     PL_curcopdb         = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
15241
15242     PL_preambleav       = av_dup_inc(proto_perl->Ipreambleav, param);
15243
15244     PL_ors_sv           = sv_dup_inc(proto_perl->Iors_sv, param);
15245
15246     /* interpreter atexit processing */
15247     PL_exitlistlen      = proto_perl->Iexitlistlen;
15248     if (PL_exitlistlen) {
15249         Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
15250         Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
15251     }
15252     else
15253         PL_exitlist     = (PerlExitListEntry*)NULL;
15254
15255     PL_my_cxt_size = proto_perl->Imy_cxt_size;
15256     if (PL_my_cxt_size) {
15257         Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
15258         Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
15259 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
15260         Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
15261         Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
15262 #endif
15263     }
15264     else {
15265         PL_my_cxt_list  = (void**)NULL;
15266 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
15267         PL_my_cxt_keys  = (const char**)NULL;
15268 #endif
15269     }
15270     PL_modglobal        = hv_dup_inc(proto_perl->Imodglobal, param);
15271     PL_custom_op_names  = hv_dup_inc(proto_perl->Icustom_op_names,param);
15272     PL_custom_op_descs  = hv_dup_inc(proto_perl->Icustom_op_descs,param);
15273     PL_custom_ops       = hv_dup_inc(proto_perl->Icustom_ops, param);
15274
15275     PL_compcv                   = cv_dup(proto_perl->Icompcv, param);
15276
15277     PAD_CLONE_VARS(proto_perl, param);
15278
15279 #ifdef HAVE_INTERP_INTERN
15280     sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
15281 #endif
15282
15283     PL_DBcv             = cv_dup(proto_perl->IDBcv, param);
15284
15285 #ifdef PERL_USES_PL_PIDSTATUS
15286     PL_pidstatus        = newHV();                      /* XXX flag for cloning? */
15287 #endif
15288     PL_osname           = SAVEPV(proto_perl->Iosname);
15289     PL_parser           = parser_dup(proto_perl->Iparser, param);
15290
15291     /* XXX this only works if the saved cop has already been cloned */
15292     if (proto_perl->Iparser) {
15293         PL_parser->saved_curcop = (COP*)any_dup(
15294                                     proto_perl->Iparser->saved_curcop,
15295                                     proto_perl);
15296     }
15297
15298     PL_subname          = sv_dup_inc(proto_perl->Isubname, param);
15299
15300 #ifdef USE_LOCALE_CTYPE
15301     /* Should we warn if uses locale? */
15302     PL_warn_locale      = sv_dup_inc(proto_perl->Iwarn_locale, param);
15303 #endif
15304
15305 #ifdef USE_LOCALE_COLLATE
15306     PL_collation_name   = SAVEPV(proto_perl->Icollation_name);
15307 #endif /* USE_LOCALE_COLLATE */
15308
15309 #ifdef USE_LOCALE_NUMERIC
15310     PL_numeric_name     = SAVEPV(proto_perl->Inumeric_name);
15311     PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
15312 #endif /* !USE_LOCALE_NUMERIC */
15313
15314     /* Unicode inversion lists */
15315     PL_Latin1           = sv_dup_inc(proto_perl->ILatin1, param);
15316     PL_UpperLatin1      = sv_dup_inc(proto_perl->IUpperLatin1, param);
15317     PL_AboveLatin1      = sv_dup_inc(proto_perl->IAboveLatin1, param);
15318     PL_InBitmap         = sv_dup_inc(proto_perl->IInBitmap, param);
15319
15320     PL_NonL1NonFinalFold = sv_dup_inc(proto_perl->INonL1NonFinalFold, param);
15321     PL_HasMultiCharFold = sv_dup_inc(proto_perl->IHasMultiCharFold, param);
15322
15323     /* utf8 character class swashes */
15324     for (i = 0; i < POSIX_SWASH_COUNT; i++) {
15325         PL_utf8_swash_ptrs[i] = sv_dup_inc(proto_perl->Iutf8_swash_ptrs[i], param);
15326     }
15327     for (i = 0; i < POSIX_CC_COUNT; i++) {
15328         PL_XPosix_ptrs[i] = sv_dup_inc(proto_perl->IXPosix_ptrs[i], param);
15329     }
15330     PL_GCB_invlist = sv_dup_inc(proto_perl->IGCB_invlist, param);
15331     PL_SB_invlist = sv_dup_inc(proto_perl->ISB_invlist, param);
15332     PL_WB_invlist = sv_dup_inc(proto_perl->IWB_invlist, param);
15333     PL_seen_deprecated_macro = hv_dup_inc(proto_perl->Iseen_deprecated_macro, param);
15334     PL_utf8_mark        = sv_dup_inc(proto_perl->Iutf8_mark, param);
15335     PL_utf8_toupper     = sv_dup_inc(proto_perl->Iutf8_toupper, param);
15336     PL_utf8_totitle     = sv_dup_inc(proto_perl->Iutf8_totitle, param);
15337     PL_utf8_tolower     = sv_dup_inc(proto_perl->Iutf8_tolower, param);
15338     PL_utf8_tofold      = sv_dup_inc(proto_perl->Iutf8_tofold, param);
15339     PL_utf8_idstart     = sv_dup_inc(proto_perl->Iutf8_idstart, param);
15340     PL_utf8_xidstart    = sv_dup_inc(proto_perl->Iutf8_xidstart, param);
15341     PL_utf8_perl_idstart = sv_dup_inc(proto_perl->Iutf8_perl_idstart, param);
15342     PL_utf8_perl_idcont = sv_dup_inc(proto_perl->Iutf8_perl_idcont, param);
15343     PL_utf8_idcont      = sv_dup_inc(proto_perl->Iutf8_idcont, param);
15344     PL_utf8_xidcont     = sv_dup_inc(proto_perl->Iutf8_xidcont, param);
15345     PL_utf8_foldable    = sv_dup_inc(proto_perl->Iutf8_foldable, param);
15346     PL_utf8_charname_begin = sv_dup_inc(proto_perl->Iutf8_charname_begin, param);
15347     PL_utf8_charname_continue = sv_dup_inc(proto_perl->Iutf8_charname_continue, param);
15348
15349     if (proto_perl->Ipsig_pend) {
15350         Newxz(PL_psig_pend, SIG_SIZE, int);
15351     }
15352     else {
15353         PL_psig_pend    = (int*)NULL;
15354     }
15355
15356     if (proto_perl->Ipsig_name) {
15357         Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
15358         sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
15359                             param);
15360         PL_psig_ptr = PL_psig_name + SIG_SIZE;
15361     }
15362     else {
15363         PL_psig_ptr     = (SV**)NULL;
15364         PL_psig_name    = (SV**)NULL;
15365     }
15366
15367     if (flags & CLONEf_COPY_STACKS) {
15368         Newx(PL_tmps_stack, PL_tmps_max, SV*);
15369         sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
15370                             PL_tmps_ix+1, param);
15371
15372         /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
15373         i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
15374         Newxz(PL_markstack, i, I32);
15375         PL_markstack_max        = PL_markstack + (proto_perl->Imarkstack_max
15376                                                   - proto_perl->Imarkstack);
15377         PL_markstack_ptr        = PL_markstack + (proto_perl->Imarkstack_ptr
15378                                                   - proto_perl->Imarkstack);
15379         Copy(proto_perl->Imarkstack, PL_markstack,
15380              PL_markstack_ptr - PL_markstack + 1, I32);
15381
15382         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
15383          * NOTE: unlike the others! */
15384         Newxz(PL_scopestack, PL_scopestack_max, I32);
15385         Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
15386
15387 #ifdef DEBUGGING
15388         Newxz(PL_scopestack_name, PL_scopestack_max, const char *);
15389         Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
15390 #endif
15391         /* reset stack AV to correct length before its duped via
15392          * PL_curstackinfo */
15393         AvFILLp(proto_perl->Icurstack) =
15394                             proto_perl->Istack_sp - proto_perl->Istack_base;
15395
15396         /* NOTE: si_dup() looks at PL_markstack */
15397         PL_curstackinfo         = si_dup(proto_perl->Icurstackinfo, param);
15398
15399         /* PL_curstack          = PL_curstackinfo->si_stack; */
15400         PL_curstack             = av_dup(proto_perl->Icurstack, param);
15401         PL_mainstack            = av_dup(proto_perl->Imainstack, param);
15402
15403         /* next PUSHs() etc. set *(PL_stack_sp+1) */
15404         PL_stack_base           = AvARRAY(PL_curstack);
15405         PL_stack_sp             = PL_stack_base + (proto_perl->Istack_sp
15406                                                    - proto_perl->Istack_base);
15407         PL_stack_max            = PL_stack_base + AvMAX(PL_curstack);
15408
15409         /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
15410         PL_savestack            = ss_dup(proto_perl, param);
15411     }
15412     else {
15413         init_stacks();
15414         ENTER;                  /* perl_destruct() wants to LEAVE; */
15415     }
15416
15417     PL_statgv           = gv_dup(proto_perl->Istatgv, param);
15418     PL_statname         = sv_dup_inc(proto_perl->Istatname, param);
15419
15420     PL_rs               = sv_dup_inc(proto_perl->Irs, param);
15421     PL_last_in_gv       = gv_dup(proto_perl->Ilast_in_gv, param);
15422     PL_defoutgv         = gv_dup_inc(proto_perl->Idefoutgv, param);
15423     PL_toptarget        = sv_dup_inc(proto_perl->Itoptarget, param);
15424     PL_bodytarget       = sv_dup_inc(proto_perl->Ibodytarget, param);
15425     PL_formtarget       = sv_dup(proto_perl->Iformtarget, param);
15426
15427     PL_errors           = sv_dup_inc(proto_perl->Ierrors, param);
15428
15429     PL_sortcop          = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
15430     PL_firstgv          = gv_dup_inc(proto_perl->Ifirstgv, param);
15431     PL_secondgv         = gv_dup_inc(proto_perl->Isecondgv, param);
15432
15433     PL_stashcache       = newHV();
15434
15435     PL_watchaddr        = (char **) ptr_table_fetch(PL_ptr_table,
15436                                             proto_perl->Iwatchaddr);
15437     PL_watchok          = PL_watchaddr ? * PL_watchaddr : NULL;
15438     if (PL_debug && PL_watchaddr) {
15439         PerlIO_printf(Perl_debug_log,
15440           "WATCHING: %" UVxf " cloned as %" UVxf " with value %" UVxf "\n",
15441           PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
15442           PTR2UV(PL_watchok));
15443     }
15444
15445     PL_registered_mros  = hv_dup_inc(proto_perl->Iregistered_mros, param);
15446     PL_blockhooks       = av_dup_inc(proto_perl->Iblockhooks, param);
15447     PL_utf8_foldclosures = hv_dup_inc(proto_perl->Iutf8_foldclosures, param);
15448
15449     /* Call the ->CLONE method, if it exists, for each of the stashes
15450        identified by sv_dup() above.
15451     */
15452     while(av_tindex(param->stashes) != -1) {
15453         HV* const stash = MUTABLE_HV(av_shift(param->stashes));
15454         GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
15455         if (cloner && GvCV(cloner)) {
15456             dSP;
15457             ENTER;
15458             SAVETMPS;
15459             PUSHMARK(SP);
15460             mXPUSHs(newSVhek(HvNAME_HEK(stash)));
15461             PUTBACK;
15462             call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
15463             FREETMPS;
15464             LEAVE;
15465         }
15466     }
15467
15468     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
15469         ptr_table_free(PL_ptr_table);
15470         PL_ptr_table = NULL;
15471     }
15472
15473     if (!(flags & CLONEf_COPY_STACKS)) {
15474         unreferenced_to_tmp_stack(param->unreferenced);
15475     }
15476
15477     SvREFCNT_dec(param->stashes);
15478
15479     /* orphaned? eg threads->new inside BEGIN or use */
15480     if (PL_compcv && ! SvREFCNT(PL_compcv)) {
15481         SvREFCNT_inc_simple_void(PL_compcv);
15482         SAVEFREESV(PL_compcv);
15483     }
15484
15485     return my_perl;
15486 }
15487
15488 static void
15489 S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
15490 {
15491     PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK;
15492     
15493     if (AvFILLp(unreferenced) > -1) {
15494         SV **svp = AvARRAY(unreferenced);
15495         SV **const last = svp + AvFILLp(unreferenced);
15496         SSize_t count = 0;
15497
15498         do {
15499             if (SvREFCNT(*svp) == 1)
15500                 ++count;
15501         } while (++svp <= last);
15502
15503         EXTEND_MORTAL(count);
15504         svp = AvARRAY(unreferenced);
15505
15506         do {
15507             if (SvREFCNT(*svp) == 1) {
15508                 /* Our reference is the only one to this SV. This means that
15509                    in this thread, the scalar effectively has a 0 reference.
15510                    That doesn't work (cleanup never happens), so donate our
15511                    reference to it onto the save stack. */
15512                 PL_tmps_stack[++PL_tmps_ix] = *svp;
15513             } else {
15514                 /* As an optimisation, because we are already walking the
15515                    entire array, instead of above doing either
15516                    SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead
15517                    release our reference to the scalar, so that at the end of
15518                    the array owns zero references to the scalars it happens to
15519                    point to. We are effectively converting the array from
15520                    AvREAL() on to AvREAL() off. This saves the av_clear()
15521                    (triggered by the SvREFCNT_dec(unreferenced) below) from
15522                    walking the array a second time.  */
15523                 SvREFCNT_dec(*svp);
15524             }
15525
15526         } while (++svp <= last);
15527         AvREAL_off(unreferenced);
15528     }
15529     SvREFCNT_dec_NN(unreferenced);
15530 }
15531
15532 void
15533 Perl_clone_params_del(CLONE_PARAMS *param)
15534 {
15535     /* This seemingly funky ordering keeps the build with PERL_GLOBAL_STRUCT
15536        happy: */
15537     PerlInterpreter *const to = param->new_perl;
15538     dTHXa(to);
15539     PerlInterpreter *const was = PERL_GET_THX;
15540
15541     PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
15542
15543     if (was != to) {
15544         PERL_SET_THX(to);
15545     }
15546
15547     SvREFCNT_dec(param->stashes);
15548     if (param->unreferenced)
15549         unreferenced_to_tmp_stack(param->unreferenced);
15550
15551     Safefree(param);
15552
15553     if (was != to) {
15554         PERL_SET_THX(was);
15555     }
15556 }
15557
15558 CLONE_PARAMS *
15559 Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
15560 {
15561     dVAR;
15562     /* Need to play this game, as newAV() can call safesysmalloc(), and that
15563        does a dTHX; to get the context from thread local storage.
15564        FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
15565        a version that passes in my_perl.  */
15566     PerlInterpreter *const was = PERL_GET_THX;
15567     CLONE_PARAMS *param;
15568
15569     PERL_ARGS_ASSERT_CLONE_PARAMS_NEW;
15570
15571     if (was != to) {
15572         PERL_SET_THX(to);
15573     }
15574
15575     /* Given that we've set the context, we can do this unshared.  */
15576     Newx(param, 1, CLONE_PARAMS);
15577
15578     param->flags = 0;
15579     param->proto_perl = from;
15580     param->new_perl = to;
15581     param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV);
15582     AvREAL_off(param->stashes);
15583     param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV);
15584
15585     if (was != to) {
15586         PERL_SET_THX(was);
15587     }
15588     return param;
15589 }
15590
15591 #endif /* USE_ITHREADS */
15592
15593 void
15594 Perl_init_constants(pTHX)
15595 {
15596     SvREFCNT(&PL_sv_undef)      = SvREFCNT_IMMORTAL;
15597     SvFLAGS(&PL_sv_undef)       = SVf_READONLY|SVf_PROTECT|SVt_NULL;
15598     SvANY(&PL_sv_undef)         = NULL;
15599
15600     SvANY(&PL_sv_no)            = new_XPVNV();
15601     SvREFCNT(&PL_sv_no)         = SvREFCNT_IMMORTAL;
15602     SvFLAGS(&PL_sv_no)          = SVt_PVNV|SVf_READONLY|SVf_PROTECT
15603                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
15604                                   |SVp_POK|SVf_POK;
15605
15606     SvANY(&PL_sv_yes)           = new_XPVNV();
15607     SvREFCNT(&PL_sv_yes)        = SvREFCNT_IMMORTAL;
15608     SvFLAGS(&PL_sv_yes)         = SVt_PVNV|SVf_READONLY|SVf_PROTECT
15609                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
15610                                   |SVp_POK|SVf_POK;
15611
15612     SvPV_set(&PL_sv_no, (char*)PL_No);
15613     SvCUR_set(&PL_sv_no, 0);
15614     SvLEN_set(&PL_sv_no, 0);
15615     SvIV_set(&PL_sv_no, 0);
15616     SvNV_set(&PL_sv_no, 0);
15617
15618     SvPV_set(&PL_sv_yes, (char*)PL_Yes);
15619     SvCUR_set(&PL_sv_yes, 1);
15620     SvLEN_set(&PL_sv_yes, 0);
15621     SvIV_set(&PL_sv_yes, 1);
15622     SvNV_set(&PL_sv_yes, 1);
15623
15624     PadnamePV(&PL_padname_const) = (char *)PL_No;
15625 }
15626
15627 /*
15628 =head1 Unicode Support
15629
15630 =for apidoc sv_recode_to_utf8
15631
15632 C<encoding> is assumed to be an C<Encode> object, on entry the PV
15633 of C<sv> is assumed to be octets in that encoding, and C<sv>
15634 will be converted into Unicode (and UTF-8).
15635
15636 If C<sv> already is UTF-8 (or if it is not C<POK>), or if C<encoding>
15637 is not a reference, nothing is done to C<sv>.  If C<encoding> is not
15638 an C<Encode::XS> Encoding object, bad things will happen.
15639 (See F<cpan/Encode/encoding.pm> and L<Encode>.)
15640
15641 The PV of C<sv> is returned.
15642
15643 =cut */
15644
15645 char *
15646 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
15647 {
15648     PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
15649
15650     if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
15651         SV *uni;
15652         STRLEN len;
15653         const char *s;
15654         dSP;
15655         SV *nsv = sv;
15656         ENTER;
15657         PUSHSTACK;
15658         SAVETMPS;
15659         if (SvPADTMP(nsv)) {
15660             nsv = sv_newmortal();
15661             SvSetSV_nosteal(nsv, sv);
15662         }
15663         save_re_context();
15664         PUSHMARK(sp);
15665         EXTEND(SP, 3);
15666         PUSHs(encoding);
15667         PUSHs(nsv);
15668 /*
15669   NI-S 2002/07/09
15670   Passing sv_yes is wrong - it needs to be or'ed set of constants
15671   for Encode::XS, while UTf-8 decode (currently) assumes a true value means
15672   remove converted chars from source.
15673
15674   Both will default the value - let them.
15675
15676         XPUSHs(&PL_sv_yes);
15677 */
15678         PUTBACK;
15679         call_method("decode", G_SCALAR);
15680         SPAGAIN;
15681         uni = POPs;
15682         PUTBACK;
15683         s = SvPV_const(uni, len);
15684         if (s != SvPVX_const(sv)) {
15685             SvGROW(sv, len + 1);
15686             Move(s, SvPVX(sv), len + 1, char);
15687             SvCUR_set(sv, len);
15688         }
15689         FREETMPS;
15690         POPSTACK;
15691         LEAVE;
15692         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
15693             /* clear pos and any utf8 cache */
15694             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
15695             if (mg)
15696                 mg->mg_len = -1;
15697             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
15698                 magic_setutf8(sv,mg); /* clear UTF8 cache */
15699         }
15700         SvUTF8_on(sv);
15701         return SvPVX(sv);
15702     }
15703     return SvPOKp(sv) ? SvPVX(sv) : NULL;
15704 }
15705
15706 /*
15707 =for apidoc sv_cat_decode
15708
15709 C<encoding> is assumed to be an C<Encode> object, the PV of C<ssv> is
15710 assumed to be octets in that encoding and decoding the input starts
15711 from the position which S<C<(PV + *offset)>> pointed to.  C<dsv> will be
15712 concatenated with the decoded UTF-8 string from C<ssv>.  Decoding will terminate
15713 when the string C<tstr> appears in decoding output or the input ends on
15714 the PV of C<ssv>.  The value which C<offset> points will be modified
15715 to the last input position on C<ssv>.
15716
15717 Returns TRUE if the terminator was found, else returns FALSE.
15718
15719 =cut */
15720
15721 bool
15722 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
15723                    SV *ssv, int *offset, char *tstr, int tlen)
15724 {
15725     bool ret = FALSE;
15726
15727     PERL_ARGS_ASSERT_SV_CAT_DECODE;
15728
15729     if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding)) {
15730         SV *offsv;
15731         dSP;
15732         ENTER;
15733         SAVETMPS;
15734         save_re_context();
15735         PUSHMARK(sp);
15736         EXTEND(SP, 6);
15737         PUSHs(encoding);
15738         PUSHs(dsv);
15739         PUSHs(ssv);
15740         offsv = newSViv(*offset);
15741         mPUSHs(offsv);
15742         mPUSHp(tstr, tlen);
15743         PUTBACK;
15744         call_method("cat_decode", G_SCALAR);
15745         SPAGAIN;
15746         ret = SvTRUE(TOPs);
15747         *offset = SvIV(offsv);
15748         PUTBACK;
15749         FREETMPS;
15750         LEAVE;
15751     }
15752     else
15753         Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
15754     return ret;
15755
15756 }
15757
15758 /* ---------------------------------------------------------------------
15759  *
15760  * support functions for report_uninit()
15761  */
15762
15763 /* the maxiumum size of array or hash where we will scan looking
15764  * for the undefined element that triggered the warning */
15765
15766 #define FUV_MAX_SEARCH_SIZE 1000
15767
15768 /* Look for an entry in the hash whose value has the same SV as val;
15769  * If so, return a mortal copy of the key. */
15770
15771 STATIC SV*
15772 S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
15773 {
15774     dVAR;
15775     HE **array;
15776     I32 i;
15777
15778     PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
15779
15780     if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
15781                         (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
15782         return NULL;
15783
15784     array = HvARRAY(hv);
15785
15786     for (i=HvMAX(hv); i>=0; i--) {
15787         HE *entry;
15788         for (entry = array[i]; entry; entry = HeNEXT(entry)) {
15789             if (HeVAL(entry) != val)
15790                 continue;
15791             if (    HeVAL(entry) == &PL_sv_undef ||
15792                     HeVAL(entry) == &PL_sv_placeholder)
15793                 continue;
15794             if (!HeKEY(entry))
15795                 return NULL;
15796             if (HeKLEN(entry) == HEf_SVKEY)
15797                 return sv_mortalcopy(HeKEY_sv(entry));
15798             return sv_2mortal(newSVhek(HeKEY_hek(entry)));
15799         }
15800     }
15801     return NULL;
15802 }
15803
15804 /* Look for an entry in the array whose value has the same SV as val;
15805  * If so, return the index, otherwise return -1. */
15806
15807 STATIC SSize_t
15808 S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
15809 {
15810     PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
15811
15812     if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
15813                         (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
15814         return -1;
15815
15816     if (val != &PL_sv_undef) {
15817         SV ** const svp = AvARRAY(av);
15818         SSize_t i;
15819
15820         for (i=AvFILLp(av); i>=0; i--)
15821             if (svp[i] == val)
15822                 return i;
15823     }
15824     return -1;
15825 }
15826
15827 /* varname(): return the name of a variable, optionally with a subscript.
15828  * If gv is non-zero, use the name of that global, along with gvtype (one
15829  * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
15830  * targ.  Depending on the value of the subscript_type flag, return:
15831  */
15832
15833 #define FUV_SUBSCRIPT_NONE      1       /* "@foo"          */
15834 #define FUV_SUBSCRIPT_ARRAY     2       /* "$foo[aindex]"  */
15835 #define FUV_SUBSCRIPT_HASH      3       /* "$foo{keyname}" */
15836 #define FUV_SUBSCRIPT_WITHIN    4       /* "within @foo"   */
15837
15838 SV*
15839 Perl_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
15840         const SV *const keyname, SSize_t aindex, int subscript_type)
15841 {
15842
15843     SV * const name = sv_newmortal();
15844     if (gv && isGV(gv)) {
15845         char buffer[2];
15846         buffer[0] = gvtype;
15847         buffer[1] = 0;
15848
15849         /* as gv_fullname4(), but add literal '^' for $^FOO names  */
15850
15851         gv_fullname4(name, gv, buffer, 0);
15852
15853         if ((unsigned int)SvPVX(name)[1] <= 26) {
15854             buffer[0] = '^';
15855             buffer[1] = SvPVX(name)[1] + 'A' - 1;
15856
15857             /* Swap the 1 unprintable control character for the 2 byte pretty
15858                version - ie substr($name, 1, 1) = $buffer; */
15859             sv_insert(name, 1, 1, buffer, 2);
15860         }
15861     }
15862     else {
15863         CV * const cv = gv ? ((CV *)gv) : find_runcv(NULL);
15864         PADNAME *sv;
15865
15866         assert(!cv || SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM);
15867
15868         if (!cv || !CvPADLIST(cv))
15869             return NULL;
15870         sv = padnamelist_fetch(PadlistNAMES(CvPADLIST(cv)), targ);
15871         sv_setpvn(name, PadnamePV(sv), PadnameLEN(sv));
15872         SvUTF8_on(name);
15873     }
15874
15875     if (subscript_type == FUV_SUBSCRIPT_HASH) {
15876         SV * const sv = newSV(0);
15877         STRLEN len;
15878         const char * const pv = SvPV_nomg_const((SV*)keyname, len);
15879
15880         *SvPVX(name) = '$';
15881         Perl_sv_catpvf(aTHX_ name, "{%s}",
15882             pv_pretty(sv, pv, len, 32, NULL, NULL,
15883                     PERL_PV_PRETTY_DUMP | PERL_PV_ESCAPE_UNI_DETECT ));
15884         SvREFCNT_dec_NN(sv);
15885     }
15886     else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
15887         *SvPVX(name) = '$';
15888         Perl_sv_catpvf(aTHX_ name, "[%" IVdf "]", (IV)aindex);
15889     }
15890     else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
15891         /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
15892         Perl_sv_insert_flags(aTHX_ name, 0, 0,  STR_WITH_LEN("within "), 0);
15893     }
15894
15895     return name;
15896 }
15897
15898
15899 /*
15900 =for apidoc find_uninit_var
15901
15902 Find the name of the undefined variable (if any) that caused the operator
15903 to issue a "Use of uninitialized value" warning.
15904 If match is true, only return a name if its value matches C<uninit_sv>.
15905 So roughly speaking, if a unary operator (such as C<OP_COS>) generates a
15906 warning, then following the direct child of the op may yield an
15907 C<OP_PADSV> or C<OP_GV> that gives the name of the undefined variable.  On the
15908 other hand, with C<OP_ADD> there are two branches to follow, so we only print
15909 the variable name if we get an exact match.
15910 C<desc_p> points to a string pointer holding the description of the op.
15911 This may be updated if needed.
15912
15913 The name is returned as a mortal SV.
15914
15915 Assumes that C<PL_op> is the OP that originally triggered the error, and that
15916 C<PL_comppad>/C<PL_curpad> points to the currently executing pad.
15917
15918 =cut
15919 */
15920
15921 STATIC SV *
15922 S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
15923                   bool match, const char **desc_p)
15924 {
15925     dVAR;
15926     SV *sv;
15927     const GV *gv;
15928     const OP *o, *o2, *kid;
15929
15930     PERL_ARGS_ASSERT_FIND_UNINIT_VAR;
15931
15932     if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
15933                             uninit_sv == &PL_sv_placeholder)))
15934         return NULL;
15935
15936     switch (obase->op_type) {
15937
15938     case OP_UNDEF:
15939         /* undef should care if its args are undef - any warnings
15940          * will be from tied/magic vars */
15941         break;
15942
15943     case OP_RV2AV:
15944     case OP_RV2HV:
15945     case OP_PADAV:
15946     case OP_PADHV:
15947       {
15948         const bool pad  = (    obase->op_type == OP_PADAV
15949                             || obase->op_type == OP_PADHV
15950                             || obase->op_type == OP_PADRANGE
15951                           );
15952
15953         const bool hash = (    obase->op_type == OP_PADHV
15954                             || obase->op_type == OP_RV2HV
15955                             || (obase->op_type == OP_PADRANGE
15956                                 && SvTYPE(PAD_SVl(obase->op_targ)) == SVt_PVHV)
15957                           );
15958         SSize_t index = 0;
15959         SV *keysv = NULL;
15960         int subscript_type = FUV_SUBSCRIPT_WITHIN;
15961
15962         if (pad) { /* @lex, %lex */
15963             sv = PAD_SVl(obase->op_targ);
15964             gv = NULL;
15965         }
15966         else {
15967             if (cUNOPx(obase)->op_first->op_type == OP_GV) {
15968             /* @global, %global */
15969                 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
15970                 if (!gv)
15971                     break;
15972                 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
15973             }
15974             else if (obase == PL_op) /* @{expr}, %{expr} */
15975                 return find_uninit_var(cUNOPx(obase)->op_first,
15976                                                 uninit_sv, match, desc_p);
15977             else /* @{expr}, %{expr} as a sub-expression */
15978                 return NULL;
15979         }
15980
15981         /* attempt to find a match within the aggregate */
15982         if (hash) {
15983             keysv = find_hash_subscript((const HV*)sv, uninit_sv);
15984             if (keysv)
15985                 subscript_type = FUV_SUBSCRIPT_HASH;
15986         }
15987         else {
15988             index = find_array_subscript((const AV *)sv, uninit_sv);
15989             if (index >= 0)
15990                 subscript_type = FUV_SUBSCRIPT_ARRAY;
15991         }
15992
15993         if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
15994             break;
15995
15996         return varname(gv, (char)(hash ? '%' : '@'), obase->op_targ,
15997                                     keysv, index, subscript_type);
15998       }
15999
16000     case OP_RV2SV:
16001         if (cUNOPx(obase)->op_first->op_type == OP_GV) {
16002             /* $global */
16003             gv = cGVOPx_gv(cUNOPx(obase)->op_first);
16004             if (!gv || !GvSTASH(gv))
16005                 break;
16006             if (match && (GvSV(gv) != uninit_sv))
16007                 break;
16008             return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
16009         }
16010         /* ${expr} */
16011         return find_uninit_var(cUNOPx(obase)->op_first, uninit_sv, 1, desc_p);
16012
16013     case OP_PADSV:
16014         if (match && PAD_SVl(obase->op_targ) != uninit_sv)
16015             break;
16016         return varname(NULL, '$', obase->op_targ,
16017                                     NULL, 0, FUV_SUBSCRIPT_NONE);
16018
16019     case OP_GVSV:
16020         gv = cGVOPx_gv(obase);
16021         if (!gv || (match && GvSV(gv) != uninit_sv) || !GvSTASH(gv))
16022             break;
16023         return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
16024
16025     case OP_AELEMFAST_LEX:
16026         if (match) {
16027             SV **svp;
16028             AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
16029             if (!av || SvRMAGICAL(av))
16030                 break;
16031             svp = av_fetch(av, (I8)obase->op_private, FALSE);
16032             if (!svp || *svp != uninit_sv)
16033                 break;
16034         }
16035         return varname(NULL, '$', obase->op_targ,
16036                        NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
16037     case OP_AELEMFAST:
16038         {
16039             gv = cGVOPx_gv(obase);
16040             if (!gv)
16041                 break;
16042             if (match) {
16043                 SV **svp;
16044                 AV *const av = GvAV(gv);
16045                 if (!av || SvRMAGICAL(av))
16046                     break;
16047                 svp = av_fetch(av, (I8)obase->op_private, FALSE);
16048                 if (!svp || *svp != uninit_sv)
16049                     break;
16050             }
16051             return varname(gv, '$', 0,
16052                     NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
16053         }
16054         NOT_REACHED; /* NOTREACHED */
16055
16056     case OP_EXISTS:
16057         o = cUNOPx(obase)->op_first;
16058         if (!o || o->op_type != OP_NULL ||
16059                 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
16060             break;
16061         return find_uninit_var(cBINOPo->op_last, uninit_sv, match, desc_p);
16062
16063     case OP_AELEM:
16064     case OP_HELEM:
16065     {
16066         bool negate = FALSE;
16067
16068         if (PL_op == obase)
16069             /* $a[uninit_expr] or $h{uninit_expr} */
16070             return find_uninit_var(cBINOPx(obase)->op_last,
16071                                                 uninit_sv, match, desc_p);
16072
16073         gv = NULL;
16074         o = cBINOPx(obase)->op_first;
16075         kid = cBINOPx(obase)->op_last;
16076
16077         /* get the av or hv, and optionally the gv */
16078         sv = NULL;
16079         if  (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
16080             sv = PAD_SV(o->op_targ);
16081         }
16082         else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
16083                 && cUNOPo->op_first->op_type == OP_GV)
16084         {
16085             gv = cGVOPx_gv(cUNOPo->op_first);
16086             if (!gv)
16087                 break;
16088             sv = o->op_type
16089                 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
16090         }
16091         if (!sv)
16092             break;
16093
16094         if (kid && kid->op_type == OP_NEGATE) {
16095             negate = TRUE;
16096             kid = cUNOPx(kid)->op_first;
16097         }
16098
16099         if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
16100             /* index is constant */
16101             SV* kidsv;
16102             if (negate) {
16103                 kidsv = newSVpvs_flags("-", SVs_TEMP);
16104                 sv_catsv(kidsv, cSVOPx_sv(kid));
16105             }
16106             else
16107                 kidsv = cSVOPx_sv(kid);
16108             if (match) {
16109                 if (SvMAGICAL(sv))
16110                     break;
16111                 if (obase->op_type == OP_HELEM) {
16112                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), kidsv, 0, 0);
16113                     if (!he || HeVAL(he) != uninit_sv)
16114                         break;
16115                 }
16116                 else {
16117                     SV * const  opsv = cSVOPx_sv(kid);
16118                     const IV  opsviv = SvIV(opsv);
16119                     SV * const * const svp = av_fetch(MUTABLE_AV(sv),
16120                         negate ? - opsviv : opsviv,
16121                         FALSE);
16122                     if (!svp || *svp != uninit_sv)
16123                         break;
16124                 }
16125             }
16126             if (obase->op_type == OP_HELEM)
16127                 return varname(gv, '%', o->op_targ,
16128                             kidsv, 0, FUV_SUBSCRIPT_HASH);
16129             else
16130                 return varname(gv, '@', o->op_targ, NULL,
16131                     negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
16132                     FUV_SUBSCRIPT_ARRAY);
16133         }
16134         else  {
16135             /* index is an expression;
16136              * attempt to find a match within the aggregate */
16137             if (obase->op_type == OP_HELEM) {
16138                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
16139                 if (keysv)
16140                     return varname(gv, '%', o->op_targ,
16141                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
16142             }
16143             else {
16144                 const SSize_t index
16145                     = find_array_subscript((const AV *)sv, uninit_sv);
16146                 if (index >= 0)
16147                     return varname(gv, '@', o->op_targ,
16148                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
16149             }
16150             if (match)
16151                 break;
16152             return varname(gv,
16153                 (char)((o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
16154                 ? '@' : '%'),
16155                 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
16156         }
16157         NOT_REACHED; /* NOTREACHED */
16158     }
16159
16160     case OP_MULTIDEREF: {
16161         /* If we were executing OP_MULTIDEREF when the undef warning
16162          * triggered, then it must be one of the index values within
16163          * that triggered it. If not, then the only possibility is that
16164          * the value retrieved by the last aggregate index might be the
16165          * culprit. For the former, we set PL_multideref_pc each time before
16166          * using an index, so work though the item list until we reach
16167          * that point. For the latter, just work through the entire item
16168          * list; the last aggregate retrieved will be the candidate.
16169          * There is a third rare possibility: something triggered
16170          * magic while fetching an array/hash element. Just display
16171          * nothing in this case.
16172          */
16173
16174         /* the named aggregate, if any */
16175         PADOFFSET agg_targ = 0;
16176         GV       *agg_gv   = NULL;
16177         /* the last-seen index */
16178         UV        index_type;
16179         PADOFFSET index_targ;
16180         GV       *index_gv;
16181         IV        index_const_iv = 0; /* init for spurious compiler warn */
16182         SV       *index_const_sv;
16183         int       depth = 0;  /* how many array/hash lookups we've done */
16184
16185         UNOP_AUX_item *items = cUNOP_AUXx(obase)->op_aux;
16186         UNOP_AUX_item *last = NULL;
16187         UV actions = items->uv;
16188         bool is_hv;
16189
16190         if (PL_op == obase) {
16191             last = PL_multideref_pc;
16192             assert(last >= items && last <= items + items[-1].uv);
16193         }
16194
16195         assert(actions);
16196
16197         while (1) {
16198             is_hv = FALSE;
16199             switch (actions & MDEREF_ACTION_MASK) {
16200
16201             case MDEREF_reload:
16202                 actions = (++items)->uv;
16203                 continue;
16204
16205             case MDEREF_HV_padhv_helem:               /* $lex{...} */
16206                 is_hv = TRUE;
16207                 /* FALLTHROUGH */
16208             case MDEREF_AV_padav_aelem:               /* $lex[...] */
16209                 agg_targ = (++items)->pad_offset;
16210                 agg_gv = NULL;
16211                 break;
16212
16213             case MDEREF_HV_gvhv_helem:                /* $pkg{...} */
16214                 is_hv = TRUE;
16215                 /* FALLTHROUGH */
16216             case MDEREF_AV_gvav_aelem:                /* $pkg[...] */
16217                 agg_targ = 0;
16218                 agg_gv = (GV*)UNOP_AUX_item_sv(++items);
16219                 assert(isGV_with_GP(agg_gv));
16220                 break;
16221
16222             case MDEREF_HV_gvsv_vivify_rv2hv_helem:   /* $pkg->{...} */
16223             case MDEREF_HV_padsv_vivify_rv2hv_helem:  /* $lex->{...} */
16224                 ++items;
16225                 /* FALLTHROUGH */
16226             case MDEREF_HV_pop_rv2hv_helem:           /* expr->{...} */
16227             case MDEREF_HV_vivify_rv2hv_helem:        /* vivify, ->{...} */
16228                 agg_targ = 0;
16229                 agg_gv   = NULL;
16230                 is_hv    = TRUE;
16231                 break;
16232
16233             case MDEREF_AV_gvsv_vivify_rv2av_aelem:   /* $pkg->[...] */
16234             case MDEREF_AV_padsv_vivify_rv2av_aelem:  /* $lex->[...] */
16235                 ++items;
16236                 /* FALLTHROUGH */
16237             case MDEREF_AV_pop_rv2av_aelem:           /* expr->[...] */
16238             case MDEREF_AV_vivify_rv2av_aelem:        /* vivify, ->[...] */
16239                 agg_targ = 0;
16240                 agg_gv   = NULL;
16241             } /* switch */
16242
16243             index_targ     = 0;
16244             index_gv       = NULL;
16245             index_const_sv = NULL;
16246
16247             index_type = (actions & MDEREF_INDEX_MASK);
16248             switch (index_type) {
16249             case MDEREF_INDEX_none:
16250                 break;
16251             case MDEREF_INDEX_const:
16252                 if (is_hv)
16253                     index_const_sv = UNOP_AUX_item_sv(++items)
16254                 else
16255                     index_const_iv = (++items)->iv;
16256                 break;
16257             case MDEREF_INDEX_padsv:
16258                 index_targ = (++items)->pad_offset;
16259                 break;
16260             case MDEREF_INDEX_gvsv:
16261                 index_gv = (GV*)UNOP_AUX_item_sv(++items);
16262                 assert(isGV_with_GP(index_gv));
16263                 break;
16264             }
16265
16266             if (index_type != MDEREF_INDEX_none)
16267                 depth++;
16268
16269             if (   index_type == MDEREF_INDEX_none
16270                 || (actions & MDEREF_FLAG_last)
16271                 || (last && items >= last)
16272             )
16273                 break;
16274
16275             actions >>= MDEREF_SHIFT;
16276         } /* while */
16277
16278         if (PL_op == obase) {
16279             /* most likely index was undef */
16280
16281             *desc_p = (    (actions & MDEREF_FLAG_last)
16282                         && (obase->op_private
16283                                 & (OPpMULTIDEREF_EXISTS|OPpMULTIDEREF_DELETE)))
16284                         ?
16285                             (obase->op_private & OPpMULTIDEREF_EXISTS)
16286                                 ? "exists"
16287                                 : "delete"
16288                         : is_hv ? "hash element" : "array element";
16289             assert(index_type != MDEREF_INDEX_none);
16290             if (index_gv) {
16291                 if (GvSV(index_gv) == uninit_sv)
16292                     return varname(index_gv, '$', 0, NULL, 0,
16293                                                     FUV_SUBSCRIPT_NONE);
16294                 else
16295                     return NULL;
16296             }
16297             if (index_targ) {
16298                 if (PL_curpad[index_targ] == uninit_sv)
16299                     return varname(NULL, '$', index_targ,
16300                                     NULL, 0, FUV_SUBSCRIPT_NONE);
16301                 else
16302                     return NULL;
16303             }
16304             /* If we got to this point it was undef on a const subscript,
16305              * so magic probably involved, e.g. $ISA[0]. Give up. */
16306             return NULL;
16307         }
16308
16309         /* the SV returned by pp_multideref() was undef, if anything was */
16310
16311         if (depth != 1)
16312             break;
16313
16314         if (agg_targ)
16315             sv = PAD_SV(agg_targ);
16316         else if (agg_gv)
16317             sv = is_hv ? MUTABLE_SV(GvHV(agg_gv)) : MUTABLE_SV(GvAV(agg_gv));
16318         else
16319             break;
16320
16321         if (index_type == MDEREF_INDEX_const) {
16322             if (match) {
16323                 if (SvMAGICAL(sv))
16324                     break;
16325                 if (is_hv) {
16326                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), index_const_sv, 0, 0);
16327                     if (!he || HeVAL(he) != uninit_sv)
16328                         break;
16329                 }
16330                 else {
16331                     SV * const * const svp =
16332                             av_fetch(MUTABLE_AV(sv), index_const_iv, FALSE);
16333                     if (!svp || *svp != uninit_sv)
16334                         break;
16335                 }
16336             }
16337             return is_hv
16338                 ? varname(agg_gv, '%', agg_targ,
16339                                 index_const_sv, 0,    FUV_SUBSCRIPT_HASH)
16340                 : varname(agg_gv, '@', agg_targ,
16341                                 NULL, index_const_iv, FUV_SUBSCRIPT_ARRAY);
16342         }
16343         else  {
16344             /* index is an var */
16345             if (is_hv) {
16346                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
16347                 if (keysv)
16348                     return varname(agg_gv, '%', agg_targ,
16349                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
16350             }
16351             else {
16352                 const SSize_t index
16353                     = find_array_subscript((const AV *)sv, uninit_sv);
16354                 if (index >= 0)
16355                     return varname(agg_gv, '@', agg_targ,
16356                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
16357             }
16358             if (match)
16359                 break;
16360             return varname(agg_gv,
16361                 is_hv ? '%' : '@',
16362                 agg_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
16363         }
16364         NOT_REACHED; /* NOTREACHED */
16365     }
16366
16367     case OP_AASSIGN:
16368         /* only examine RHS */
16369         return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv,
16370                                                                 match, desc_p);
16371
16372     case OP_OPEN:
16373         o = cUNOPx(obase)->op_first;
16374         if (   o->op_type == OP_PUSHMARK
16375            || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)
16376         )
16377             o = OpSIBLING(o);
16378
16379         if (!OpHAS_SIBLING(o)) {
16380             /* one-arg version of open is highly magical */
16381
16382             if (o->op_type == OP_GV) { /* open FOO; */
16383                 gv = cGVOPx_gv(o);
16384                 if (match && GvSV(gv) != uninit_sv)
16385                     break;
16386                 return varname(gv, '$', 0,
16387                             NULL, 0, FUV_SUBSCRIPT_NONE);
16388             }
16389             /* other possibilities not handled are:
16390              * open $x; or open my $x;  should return '${*$x}'
16391              * open expr;               should return '$'.expr ideally
16392              */
16393              break;
16394         }
16395         match = 1;
16396         goto do_op;
16397
16398     /* ops where $_ may be an implicit arg */
16399     case OP_TRANS:
16400     case OP_TRANSR:
16401     case OP_SUBST:
16402     case OP_MATCH:
16403         if ( !(obase->op_flags & OPf_STACKED)) {
16404             if (uninit_sv == DEFSV)
16405                 return newSVpvs_flags("$_", SVs_TEMP);
16406             else if (obase->op_targ
16407                   && uninit_sv == PAD_SVl(obase->op_targ))
16408                 return varname(NULL, '$', obase->op_targ, NULL, 0,
16409                                FUV_SUBSCRIPT_NONE);
16410         }
16411         goto do_op;
16412
16413     case OP_PRTF:
16414     case OP_PRINT:
16415     case OP_SAY:
16416         match = 1; /* print etc can return undef on defined args */
16417         /* skip filehandle as it can't produce 'undef' warning  */
16418         o = cUNOPx(obase)->op_first;
16419         if ((obase->op_flags & OPf_STACKED)
16420             &&
16421                (   o->op_type == OP_PUSHMARK
16422                || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)))
16423             o = OpSIBLING(OpSIBLING(o));
16424         goto do_op2;
16425
16426
16427     case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
16428     case OP_CUSTOM: /* XS or custom code could trigger random warnings */
16429
16430         /* the following ops are capable of returning PL_sv_undef even for
16431          * defined arg(s) */
16432
16433     case OP_BACKTICK:
16434     case OP_PIPE_OP:
16435     case OP_FILENO:
16436     case OP_BINMODE:
16437     case OP_TIED:
16438     case OP_GETC:
16439     case OP_SYSREAD:
16440     case OP_SEND:
16441     case OP_IOCTL:
16442     case OP_SOCKET:
16443     case OP_SOCKPAIR:
16444     case OP_BIND:
16445     case OP_CONNECT:
16446     case OP_LISTEN:
16447     case OP_ACCEPT:
16448     case OP_SHUTDOWN:
16449     case OP_SSOCKOPT:
16450     case OP_GETPEERNAME:
16451     case OP_FTRREAD:
16452     case OP_FTRWRITE:
16453     case OP_FTREXEC:
16454     case OP_FTROWNED:
16455     case OP_FTEREAD:
16456     case OP_FTEWRITE:
16457     case OP_FTEEXEC:
16458     case OP_FTEOWNED:
16459     case OP_FTIS:
16460     case OP_FTZERO:
16461     case OP_FTSIZE:
16462     case OP_FTFILE:
16463     case OP_FTDIR:
16464     case OP_FTLINK:
16465     case OP_FTPIPE:
16466     case OP_FTSOCK:
16467     case OP_FTBLK:
16468     case OP_FTCHR:
16469     case OP_FTTTY:
16470     case OP_FTSUID:
16471     case OP_FTSGID:
16472     case OP_FTSVTX:
16473     case OP_FTTEXT:
16474     case OP_FTBINARY:
16475     case OP_FTMTIME:
16476     case OP_FTATIME:
16477     case OP_FTCTIME:
16478     case OP_READLINK:
16479     case OP_OPEN_DIR:
16480     case OP_READDIR:
16481     case OP_TELLDIR:
16482     case OP_SEEKDIR:
16483     case OP_REWINDDIR:
16484     case OP_CLOSEDIR:
16485     case OP_GMTIME:
16486     case OP_ALARM:
16487     case OP_SEMGET:
16488     case OP_GETLOGIN:
16489     case OP_SUBSTR:
16490     case OP_AEACH:
16491     case OP_EACH:
16492     case OP_SORT:
16493     case OP_CALLER:
16494     case OP_DOFILE:
16495     case OP_PROTOTYPE:
16496     case OP_NCMP:
16497     case OP_SMARTMATCH:
16498     case OP_UNPACK:
16499     case OP_SYSOPEN:
16500     case OP_SYSSEEK:
16501         match = 1;
16502         goto do_op;
16503
16504     case OP_ENTERSUB:
16505     case OP_GOTO:
16506         /* XXX tmp hack: these two may call an XS sub, and currently
16507           XS subs don't have a SUB entry on the context stack, so CV and
16508           pad determination goes wrong, and BAD things happen. So, just
16509           don't try to determine the value under those circumstances.
16510           Need a better fix at dome point. DAPM 11/2007 */
16511         break;
16512
16513     case OP_FLIP:
16514     case OP_FLOP:
16515     {
16516         GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
16517         if (gv && GvSV(gv) == uninit_sv)
16518             return newSVpvs_flags("$.", SVs_TEMP);
16519         goto do_op;
16520     }
16521
16522     case OP_POS:
16523         /* def-ness of rval pos() is independent of the def-ness of its arg */
16524         if ( !(obase->op_flags & OPf_MOD))
16525             break;
16526
16527     case OP_SCHOMP:
16528     case OP_CHOMP:
16529         if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
16530             return newSVpvs_flags("${$/}", SVs_TEMP);
16531         /* FALLTHROUGH */
16532
16533     default:
16534     do_op:
16535         if (!(obase->op_flags & OPf_KIDS))
16536             break;
16537         o = cUNOPx(obase)->op_first;
16538         
16539     do_op2:
16540         if (!o)
16541             break;
16542
16543         /* This loop checks all the kid ops, skipping any that cannot pos-
16544          * sibly be responsible for the uninitialized value; i.e., defined
16545          * constants and ops that return nothing.  If there is only one op
16546          * left that is not skipped, then we *know* it is responsible for
16547          * the uninitialized value.  If there is more than one op left, we
16548          * have to look for an exact match in the while() loop below.
16549          * Note that we skip padrange, because the individual pad ops that
16550          * it replaced are still in the tree, so we work on them instead.
16551          */
16552         o2 = NULL;
16553         for (kid=o; kid; kid = OpSIBLING(kid)) {
16554             const OPCODE type = kid->op_type;
16555             if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
16556               || (type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
16557               || (type == OP_PUSHMARK)
16558               || (type == OP_PADRANGE)
16559             )
16560             continue;
16561
16562             if (o2) { /* more than one found */
16563                 o2 = NULL;
16564                 break;
16565             }
16566             o2 = kid;
16567         }
16568         if (o2)
16569             return find_uninit_var(o2, uninit_sv, match, desc_p);
16570
16571         /* scan all args */
16572         while (o) {
16573             sv = find_uninit_var(o, uninit_sv, 1, desc_p);
16574             if (sv)
16575                 return sv;
16576             o = OpSIBLING(o);
16577         }
16578         break;
16579     }
16580     return NULL;
16581 }
16582
16583
16584 /*
16585 =for apidoc report_uninit
16586
16587 Print appropriate "Use of uninitialized variable" warning.
16588
16589 =cut
16590 */
16591
16592 void
16593 Perl_report_uninit(pTHX_ const SV *uninit_sv)
16594 {
16595     const char *desc = NULL;
16596     SV* varname = NULL;
16597
16598     if (PL_op) {
16599         desc = PL_op->op_type == OP_STRINGIFY && PL_op->op_folded
16600                 ? "join or string"
16601                 : OP_DESC(PL_op);
16602         if (uninit_sv && PL_curpad) {
16603             varname = find_uninit_var(PL_op, uninit_sv, 0, &desc);
16604             if (varname)
16605                 sv_insert(varname, 0, 0, " ", 1);
16606         }
16607     }
16608     else if (PL_curstackinfo->si_type == PERLSI_SORT && cxstack_ix == 0)
16609         /* we've reached the end of a sort block or sub,
16610          * and the uninit value is probably what that code returned */
16611         desc = "sort";
16612
16613     /* PL_warn_uninit_sv is constant */
16614     GCC_DIAG_IGNORE(-Wformat-nonliteral);
16615     if (desc)
16616         /* diag_listed_as: Use of uninitialized value%s */
16617         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit_sv,
16618                 SVfARG(varname ? varname : &PL_sv_no),
16619                 " in ", desc);
16620     else
16621         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
16622                 "", "", "");
16623     GCC_DIAG_RESTORE;
16624 }
16625
16626 /*
16627  * ex: set ts=8 sts=4 sw=4 et:
16628  */