This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
hv_func.h: Fix compilation error
[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         NOT_REACHED; /* NOTREACHED */
1655         break;
1656     default: NOOP;
1657     }
1658     (void)SvIOK_only(sv);                       /* validate number */
1659     SvIV_set(sv, i);
1660     SvTAINT(sv);
1661 }
1662
1663 /*
1664 =for apidoc sv_setiv_mg
1665
1666 Like C<sv_setiv>, but also handles 'set' magic.
1667
1668 =cut
1669 */
1670
1671 void
1672 Perl_sv_setiv_mg(pTHX_ SV *const sv, const IV i)
1673 {
1674     PERL_ARGS_ASSERT_SV_SETIV_MG;
1675
1676     sv_setiv(sv,i);
1677     SvSETMAGIC(sv);
1678 }
1679
1680 /*
1681 =for apidoc sv_setuv
1682
1683 Copies an unsigned integer into the given SV, upgrading first if necessary.
1684 Does not handle 'set' magic.  See also C<L</sv_setuv_mg>>.
1685
1686 =cut
1687 */
1688
1689 void
1690 Perl_sv_setuv(pTHX_ SV *const sv, const UV u)
1691 {
1692     PERL_ARGS_ASSERT_SV_SETUV;
1693
1694     /* With the if statement to ensure that integers are stored as IVs whenever
1695        possible:
1696        u=1.49  s=0.52  cu=72.49  cs=10.64  scripts=270  tests=20865
1697
1698        without
1699        u=1.35  s=0.47  cu=73.45  cs=11.43  scripts=270  tests=20865
1700
1701        If you wish to remove the following if statement, so that this routine
1702        (and its callers) always return UVs, please benchmark to see what the
1703        effect is. Modern CPUs may be different. Or may not :-)
1704     */
1705     if (u <= (UV)IV_MAX) {
1706        sv_setiv(sv, (IV)u);
1707        return;
1708     }
1709     sv_setiv(sv, 0);
1710     SvIsUV_on(sv);
1711     SvUV_set(sv, u);
1712 }
1713
1714 /*
1715 =for apidoc sv_setuv_mg
1716
1717 Like C<sv_setuv>, but also handles 'set' magic.
1718
1719 =cut
1720 */
1721
1722 void
1723 Perl_sv_setuv_mg(pTHX_ SV *const sv, const UV u)
1724 {
1725     PERL_ARGS_ASSERT_SV_SETUV_MG;
1726
1727     sv_setuv(sv,u);
1728     SvSETMAGIC(sv);
1729 }
1730
1731 /*
1732 =for apidoc sv_setnv
1733
1734 Copies a double into the given SV, upgrading first if necessary.
1735 Does not handle 'set' magic.  See also C<L</sv_setnv_mg>>.
1736
1737 =cut
1738 */
1739
1740 void
1741 Perl_sv_setnv(pTHX_ SV *const sv, const NV num)
1742 {
1743     PERL_ARGS_ASSERT_SV_SETNV;
1744
1745     SV_CHECK_THINKFIRST_COW_DROP(sv);
1746     switch (SvTYPE(sv)) {
1747     case SVt_NULL:
1748     case SVt_IV:
1749         sv_upgrade(sv, SVt_NV);
1750         break;
1751     case SVt_PV:
1752     case SVt_PVIV:
1753         sv_upgrade(sv, SVt_PVNV);
1754         break;
1755
1756     case SVt_PVGV:
1757         if (!isGV_with_GP(sv))
1758             break;
1759     case SVt_PVAV:
1760     case SVt_PVHV:
1761     case SVt_PVCV:
1762     case SVt_PVFM:
1763     case SVt_PVIO:
1764         /* diag_listed_as: Can't coerce %s to %s in %s */
1765         Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1766                    OP_DESC(PL_op));
1767         NOT_REACHED; /* NOTREACHED */
1768         break;
1769     default: NOOP;
1770     }
1771     SvNV_set(sv, num);
1772     (void)SvNOK_only(sv);                       /* validate number */
1773     SvTAINT(sv);
1774 }
1775
1776 /*
1777 =for apidoc sv_setnv_mg
1778
1779 Like C<sv_setnv>, but also handles 'set' magic.
1780
1781 =cut
1782 */
1783
1784 void
1785 Perl_sv_setnv_mg(pTHX_ SV *const sv, const NV num)
1786 {
1787     PERL_ARGS_ASSERT_SV_SETNV_MG;
1788
1789     sv_setnv(sv,num);
1790     SvSETMAGIC(sv);
1791 }
1792
1793 /* Return a cleaned-up, printable version of sv, for non-numeric, or
1794  * not incrementable warning display.
1795  * Originally part of S_not_a_number().
1796  * The return value may be != tmpbuf.
1797  */
1798
1799 STATIC const char *
1800 S_sv_display(pTHX_ SV *const sv, char *tmpbuf, STRLEN tmpbuf_size) {
1801     const char *pv;
1802
1803      PERL_ARGS_ASSERT_SV_DISPLAY;
1804
1805      if (DO_UTF8(sv)) {
1806           SV *dsv = newSVpvs_flags("", SVs_TEMP);
1807           pv = sv_uni_display(dsv, sv, 32, UNI_DISPLAY_ISPRINT);
1808      } else {
1809           char *d = tmpbuf;
1810           const char * const limit = tmpbuf + tmpbuf_size - 8;
1811           /* each *s can expand to 4 chars + "...\0",
1812              i.e. need room for 8 chars */
1813         
1814           const char *s = SvPVX_const(sv);
1815           const char * const end = s + SvCUR(sv);
1816           for ( ; s < end && d < limit; s++ ) {
1817                int ch = *s & 0xFF;
1818                if (! isASCII(ch) && !isPRINT_LC(ch)) {
1819                     *d++ = 'M';
1820                     *d++ = '-';
1821
1822                     /* Map to ASCII "equivalent" of Latin1 */
1823                     ch = LATIN1_TO_NATIVE(NATIVE_TO_LATIN1(ch) & 127);
1824                }
1825                if (ch == '\n') {
1826                     *d++ = '\\';
1827                     *d++ = 'n';
1828                }
1829                else if (ch == '\r') {
1830                     *d++ = '\\';
1831                     *d++ = 'r';
1832                }
1833                else if (ch == '\f') {
1834                     *d++ = '\\';
1835                     *d++ = 'f';
1836                }
1837                else if (ch == '\\') {
1838                     *d++ = '\\';
1839                     *d++ = '\\';
1840                }
1841                else if (ch == '\0') {
1842                     *d++ = '\\';
1843                     *d++ = '0';
1844                }
1845                else if (isPRINT_LC(ch))
1846                     *d++ = ch;
1847                else {
1848                     *d++ = '^';
1849                     *d++ = toCTRL(ch);
1850                }
1851           }
1852           if (s < end) {
1853                *d++ = '.';
1854                *d++ = '.';
1855                *d++ = '.';
1856           }
1857           *d = '\0';
1858           pv = tmpbuf;
1859     }
1860
1861     return pv;
1862 }
1863
1864 /* Print an "isn't numeric" warning, using a cleaned-up,
1865  * printable version of the offending string
1866  */
1867
1868 STATIC void
1869 S_not_a_number(pTHX_ SV *const sv)
1870 {
1871      char tmpbuf[64];
1872      const char *pv;
1873
1874      PERL_ARGS_ASSERT_NOT_A_NUMBER;
1875
1876      pv = sv_display(sv, tmpbuf, sizeof(tmpbuf));
1877
1878     if (PL_op)
1879         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1880                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1881                     "Argument \"%s\" isn't numeric in %s", pv,
1882                     OP_DESC(PL_op));
1883     else
1884         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1885                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1886                     "Argument \"%s\" isn't numeric", pv);
1887 }
1888
1889 STATIC void
1890 S_not_incrementable(pTHX_ SV *const sv) {
1891      char tmpbuf[64];
1892      const char *pv;
1893
1894      PERL_ARGS_ASSERT_NOT_INCREMENTABLE;
1895
1896      pv = sv_display(sv, tmpbuf, sizeof(tmpbuf));
1897
1898      Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1899                  "Argument \"%s\" treated as 0 in increment (++)", pv);
1900 }
1901
1902 /*
1903 =for apidoc looks_like_number
1904
1905 Test if the content of an SV looks like a number (or is a number).
1906 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1907 non-numeric warning), even if your C<atof()> doesn't grok them.  Get-magic is
1908 ignored.
1909
1910 =cut
1911 */
1912
1913 I32
1914 Perl_looks_like_number(pTHX_ SV *const sv)
1915 {
1916     const char *sbegin;
1917     STRLEN len;
1918     int numtype;
1919
1920     PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER;
1921
1922     if (SvPOK(sv) || SvPOKp(sv)) {
1923         sbegin = SvPV_nomg_const(sv, len);
1924     }
1925     else
1926         return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1927     numtype = grok_number(sbegin, len, NULL);
1928     return ((numtype & IS_NUMBER_TRAILING)) ? 0 : numtype;
1929 }
1930
1931 STATIC bool
1932 S_glob_2number(pTHX_ GV * const gv)
1933 {
1934     PERL_ARGS_ASSERT_GLOB_2NUMBER;
1935
1936     /* We know that all GVs stringify to something that is not-a-number,
1937         so no need to test that.  */
1938     if (ckWARN(WARN_NUMERIC))
1939     {
1940         SV *const buffer = sv_newmortal();
1941         gv_efullname3(buffer, gv, "*");
1942         not_a_number(buffer);
1943     }
1944     /* We just want something true to return, so that S_sv_2iuv_common
1945         can tail call us and return true.  */
1946     return TRUE;
1947 }
1948
1949 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1950    until proven guilty, assume that things are not that bad... */
1951
1952 /*
1953    NV_PRESERVES_UV:
1954
1955    As 64 bit platforms often have an NV that doesn't preserve all bits of
1956    an IV (an assumption perl has been based on to date) it becomes necessary
1957    to remove the assumption that the NV always carries enough precision to
1958    recreate the IV whenever needed, and that the NV is the canonical form.
1959    Instead, IV/UV and NV need to be given equal rights. So as to not lose
1960    precision as a side effect of conversion (which would lead to insanity
1961    and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1962    1) to distinguish between IV/UV/NV slots that have a valid conversion cached
1963       where precision was lost, and IV/UV/NV slots that have a valid conversion
1964       which has lost no precision
1965    2) to ensure that if a numeric conversion to one form is requested that
1966       would lose precision, the precise conversion (or differently
1967       imprecise conversion) is also performed and cached, to prevent
1968       requests for different numeric formats on the same SV causing
1969       lossy conversion chains. (lossless conversion chains are perfectly
1970       acceptable (still))
1971
1972
1973    flags are used:
1974    SvIOKp is true if the IV slot contains a valid value
1975    SvIOK  is true only if the IV value is accurate (UV if SvIOK_UV true)
1976    SvNOKp is true if the NV slot contains a valid value
1977    SvNOK  is true only if the NV value is accurate
1978
1979    so
1980    while converting from PV to NV, check to see if converting that NV to an
1981    IV(or UV) would lose accuracy over a direct conversion from PV to
1982    IV(or UV). If it would, cache both conversions, return NV, but mark
1983    SV as IOK NOKp (ie not NOK).
1984
1985    While converting from PV to IV, check to see if converting that IV to an
1986    NV would lose accuracy over a direct conversion from PV to NV. If it
1987    would, cache both conversions, flag similarly.
1988
1989    Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1990    correctly because if IV & NV were set NV *always* overruled.
1991    Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1992    changes - now IV and NV together means that the two are interchangeable:
1993    SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1994
1995    The benefit of this is that operations such as pp_add know that if
1996    SvIOK is true for both left and right operands, then integer addition
1997    can be used instead of floating point (for cases where the result won't
1998    overflow). Before, floating point was always used, which could lead to
1999    loss of precision compared with integer addition.
2000
2001    * making IV and NV equal status should make maths accurate on 64 bit
2002      platforms
2003    * may speed up maths somewhat if pp_add and friends start to use
2004      integers when possible instead of fp. (Hopefully the overhead in
2005      looking for SvIOK and checking for overflow will not outweigh the
2006      fp to integer speedup)
2007    * will slow down integer operations (callers of SvIV) on "inaccurate"
2008      values, as the change from SvIOK to SvIOKp will cause a call into
2009      sv_2iv each time rather than a macro access direct to the IV slot
2010    * should speed up number->string conversion on integers as IV is
2011      favoured when IV and NV are equally accurate
2012
2013    ####################################################################
2014    You had better be using SvIOK_notUV if you want an IV for arithmetic:
2015    SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
2016    On the other hand, SvUOK is true iff UV.
2017    ####################################################################
2018
2019    Your mileage will vary depending your CPU's relative fp to integer
2020    performance ratio.
2021 */
2022
2023 #ifndef NV_PRESERVES_UV
2024 #  define IS_NUMBER_UNDERFLOW_IV 1
2025 #  define IS_NUMBER_UNDERFLOW_UV 2
2026 #  define IS_NUMBER_IV_AND_UV    2
2027 #  define IS_NUMBER_OVERFLOW_IV  4
2028 #  define IS_NUMBER_OVERFLOW_UV  5
2029
2030 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
2031
2032 /* For sv_2nv these three cases are "SvNOK and don't bother casting"  */
2033 STATIC int
2034 S_sv_2iuv_non_preserve(pTHX_ SV *const sv
2035 #  ifdef DEBUGGING
2036                        , I32 numtype
2037 #  endif
2038                        )
2039 {
2040     PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE;
2041     PERL_UNUSED_CONTEXT;
2042
2043     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));
2044     if (SvNVX(sv) < (NV)IV_MIN) {
2045         (void)SvIOKp_on(sv);
2046         (void)SvNOK_on(sv);
2047         SvIV_set(sv, IV_MIN);
2048         return IS_NUMBER_UNDERFLOW_IV;
2049     }
2050     if (SvNVX(sv) > (NV)UV_MAX) {
2051         (void)SvIOKp_on(sv);
2052         (void)SvNOK_on(sv);
2053         SvIsUV_on(sv);
2054         SvUV_set(sv, UV_MAX);
2055         return IS_NUMBER_OVERFLOW_UV;
2056     }
2057     (void)SvIOKp_on(sv);
2058     (void)SvNOK_on(sv);
2059     /* Can't use strtol etc to convert this string.  (See truth table in
2060        sv_2iv  */
2061     if (SvNVX(sv) <= (UV)IV_MAX) {
2062         SvIV_set(sv, I_V(SvNVX(sv)));
2063         if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2064             SvIOK_on(sv); /* Integer is precise. NOK, IOK */
2065         } else {
2066             /* Integer is imprecise. NOK, IOKp */
2067         }
2068         return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
2069     }
2070     SvIsUV_on(sv);
2071     SvUV_set(sv, U_V(SvNVX(sv)));
2072     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2073         if (SvUVX(sv) == UV_MAX) {
2074             /* As we know that NVs don't preserve UVs, UV_MAX cannot
2075                possibly be preserved by NV. Hence, it must be overflow.
2076                NOK, IOKp */
2077             return IS_NUMBER_OVERFLOW_UV;
2078         }
2079         SvIOK_on(sv); /* Integer is precise. NOK, UOK */
2080     } else {
2081         /* Integer is imprecise. NOK, IOKp */
2082     }
2083     return IS_NUMBER_OVERFLOW_IV;
2084 }
2085 #endif /* !NV_PRESERVES_UV*/
2086
2087 /* If numtype is infnan, set the NV of the sv accordingly.
2088  * If numtype is anything else, try setting the NV using Atof(PV). */
2089 #ifdef USING_MSVC6
2090 #  pragma warning(push)
2091 #  pragma warning(disable:4756;disable:4056)
2092 #endif
2093 static void
2094 S_sv_setnv(pTHX_ SV* sv, int numtype)
2095 {
2096     bool pok = cBOOL(SvPOK(sv));
2097     bool nok = FALSE;
2098 #ifdef NV_INF
2099     if ((numtype & IS_NUMBER_INFINITY)) {
2100         SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -NV_INF : NV_INF);
2101         nok = TRUE;
2102     } else
2103 #endif
2104 #ifdef NV_NAN
2105     if ((numtype & IS_NUMBER_NAN)) {
2106         SvNV_set(sv, NV_NAN);
2107         nok = TRUE;
2108     } else
2109 #endif
2110     if (pok) {
2111         SvNV_set(sv, Atof(SvPVX_const(sv)));
2112         /* Purposefully no true nok here, since we don't want to blow
2113          * away the possible IOK/UV of an existing sv. */
2114     }
2115     if (nok) {
2116         SvNOK_only(sv); /* No IV or UV please, this is pure infnan. */
2117         if (pok)
2118             SvPOK_on(sv); /* PV is okay, though. */
2119     }
2120 }
2121 #ifdef USING_MSVC6
2122 #  pragma warning(pop)
2123 #endif
2124
2125 STATIC bool
2126 S_sv_2iuv_common(pTHX_ SV *const sv)
2127 {
2128     PERL_ARGS_ASSERT_SV_2IUV_COMMON;
2129
2130     if (SvNOKp(sv)) {
2131         /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2132          * without also getting a cached IV/UV from it at the same time
2133          * (ie PV->NV conversion should detect loss of accuracy and cache
2134          * IV or UV at same time to avoid this. */
2135         /* IV-over-UV optimisation - choose to cache IV if possible */
2136
2137         if (SvTYPE(sv) == SVt_NV)
2138             sv_upgrade(sv, SVt_PVNV);
2139
2140         (void)SvIOKp_on(sv);    /* Must do this first, to clear any SvOOK */
2141         /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
2142            certainly cast into the IV range at IV_MAX, whereas the correct
2143            answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
2144            cases go to UV */
2145 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2146         if (Perl_isnan(SvNVX(sv))) {
2147             SvUV_set(sv, 0);
2148             SvIsUV_on(sv);
2149             return FALSE;
2150         }
2151 #endif
2152         if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2153             SvIV_set(sv, I_V(SvNVX(sv)));
2154             if (SvNVX(sv) == (NV) SvIVX(sv)
2155 #ifndef NV_PRESERVES_UV
2156                 && SvIVX(sv) != IV_MIN /* avoid negating IV_MIN below */
2157                 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2158                     (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2159                 /* Don't flag it as "accurately an integer" if the number
2160                    came from a (by definition imprecise) NV operation, and
2161                    we're outside the range of NV integer precision */
2162 #endif
2163                 ) {
2164                 if (SvNOK(sv))
2165                     SvIOK_on(sv);  /* Can this go wrong with rounding? NWC */
2166                 else {
2167                     /* scalar has trailing garbage, eg "42a" */
2168                 }
2169                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2170                                       "0x%" UVxf " iv(%" NVgf " => %" IVdf ") (precise)\n",
2171                                       PTR2UV(sv),
2172                                       SvNVX(sv),
2173                                       SvIVX(sv)));
2174
2175             } else {
2176                 /* IV not precise.  No need to convert from PV, as NV
2177                    conversion would already have cached IV if it detected
2178                    that PV->IV would be better than PV->NV->IV
2179                    flags already correct - don't set public IOK.  */
2180                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2181                                       "0x%" UVxf " iv(%" NVgf " => %" IVdf ") (imprecise)\n",
2182                                       PTR2UV(sv),
2183                                       SvNVX(sv),
2184                                       SvIVX(sv)));
2185             }
2186             /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2187                but the cast (NV)IV_MIN rounds to a the value less (more
2188                negative) than IV_MIN which happens to be equal to SvNVX ??
2189                Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2190                NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2191                (NV)UVX == NVX are both true, but the values differ. :-(
2192                Hopefully for 2s complement IV_MIN is something like
2193                0x8000000000000000 which will be exact. NWC */
2194         }
2195         else {
2196             SvUV_set(sv, U_V(SvNVX(sv)));
2197             if (
2198                 (SvNVX(sv) == (NV) SvUVX(sv))
2199 #ifndef  NV_PRESERVES_UV
2200                 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2201                 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2202                 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2203                 /* Don't flag it as "accurately an integer" if the number
2204                    came from a (by definition imprecise) NV operation, and
2205                    we're outside the range of NV integer precision */
2206 #endif
2207                 && SvNOK(sv)
2208                 )
2209                 SvIOK_on(sv);
2210             SvIsUV_on(sv);
2211             DEBUG_c(PerlIO_printf(Perl_debug_log,
2212                                   "0x%" UVxf " 2iv(%" UVuf " => %" IVdf ") (as unsigned)\n",
2213                                   PTR2UV(sv),
2214                                   SvUVX(sv),
2215                                   SvUVX(sv)));
2216         }
2217     }
2218     else if (SvPOKp(sv)) {
2219         UV value;
2220         int numtype;
2221         const char *s = SvPVX_const(sv);
2222         const STRLEN cur = SvCUR(sv);
2223
2224         /* short-cut for a single digit string like "1" */
2225
2226         if (cur == 1) {
2227             char c = *s;
2228             if (isDIGIT(c)) {
2229                 if (SvTYPE(sv) < SVt_PVIV)
2230                     sv_upgrade(sv, SVt_PVIV);
2231                 (void)SvIOK_on(sv);
2232                 SvIV_set(sv, (IV)(c - '0'));
2233                 return FALSE;
2234             }
2235         }
2236
2237         numtype = grok_number(s, cur, &value);
2238         /* We want to avoid a possible problem when we cache an IV/ a UV which
2239            may be later translated to an NV, and the resulting NV is not
2240            the same as the direct translation of the initial string
2241            (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2242            be careful to ensure that the value with the .456 is around if the
2243            NV value is requested in the future).
2244         
2245            This means that if we cache such an IV/a UV, we need to cache the
2246            NV as well.  Moreover, we trade speed for space, and do not
2247            cache the NV if we are sure it's not needed.
2248          */
2249
2250         /* SVt_PVNV is one higher than SVt_PVIV, hence this order  */
2251         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2252              == IS_NUMBER_IN_UV) {
2253             /* It's definitely an integer, only upgrade to PVIV */
2254             if (SvTYPE(sv) < SVt_PVIV)
2255                 sv_upgrade(sv, SVt_PVIV);
2256             (void)SvIOK_on(sv);
2257         } else if (SvTYPE(sv) < SVt_PVNV)
2258             sv_upgrade(sv, SVt_PVNV);
2259
2260         if ((numtype & (IS_NUMBER_INFINITY | IS_NUMBER_NAN))) {
2261             if (ckWARN(WARN_NUMERIC) && ((numtype & IS_NUMBER_TRAILING)))
2262                 not_a_number(sv);
2263             S_sv_setnv(aTHX_ sv, numtype);
2264             return FALSE;
2265         }
2266
2267         /* If NVs preserve UVs then we only use the UV value if we know that
2268            we aren't going to call atof() below. If NVs don't preserve UVs
2269            then the value returned may have more precision than atof() will
2270            return, even though value isn't perfectly accurate.  */
2271         if ((numtype & (IS_NUMBER_IN_UV
2272 #ifdef NV_PRESERVES_UV
2273                         | IS_NUMBER_NOT_INT
2274 #endif
2275             )) == IS_NUMBER_IN_UV) {
2276             /* This won't turn off the public IOK flag if it was set above  */
2277             (void)SvIOKp_on(sv);
2278
2279             if (!(numtype & IS_NUMBER_NEG)) {
2280                 /* positive */;
2281                 if (value <= (UV)IV_MAX) {
2282                     SvIV_set(sv, (IV)value);
2283                 } else {
2284                     /* it didn't overflow, and it was positive. */
2285                     SvUV_set(sv, value);
2286                     SvIsUV_on(sv);
2287                 }
2288             } else {
2289                 /* 2s complement assumption  */
2290                 if (value <= (UV)IV_MIN) {
2291                     SvIV_set(sv, value == (UV)IV_MIN
2292                                     ? IV_MIN : -(IV)value);
2293                 } else {
2294                     /* Too negative for an IV.  This is a double upgrade, but
2295                        I'm assuming it will be rare.  */
2296                     if (SvTYPE(sv) < SVt_PVNV)
2297                         sv_upgrade(sv, SVt_PVNV);
2298                     SvNOK_on(sv);
2299                     SvIOK_off(sv);
2300                     SvIOKp_on(sv);
2301                     SvNV_set(sv, -(NV)value);
2302                     SvIV_set(sv, IV_MIN);
2303                 }
2304             }
2305         }
2306         /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2307            will be in the previous block to set the IV slot, and the next
2308            block to set the NV slot.  So no else here.  */
2309         
2310         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2311             != IS_NUMBER_IN_UV) {
2312             /* It wasn't an (integer that doesn't overflow the UV). */
2313             S_sv_setnv(aTHX_ sv, numtype);
2314
2315             if (! numtype && ckWARN(WARN_NUMERIC))
2316                 not_a_number(sv);
2317
2318             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2iv(%" NVgf ")\n",
2319                                   PTR2UV(sv), SvNVX(sv)));
2320
2321 #ifdef NV_PRESERVES_UV
2322             (void)SvIOKp_on(sv);
2323             (void)SvNOK_on(sv);
2324 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2325             if (Perl_isnan(SvNVX(sv))) {
2326                 SvUV_set(sv, 0);
2327                 SvIsUV_on(sv);
2328                 return FALSE;
2329             }
2330 #endif
2331             if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2332                 SvIV_set(sv, I_V(SvNVX(sv)));
2333                 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2334                     SvIOK_on(sv);
2335                 } else {
2336                     NOOP;  /* Integer is imprecise. NOK, IOKp */
2337                 }
2338                 /* UV will not work better than IV */
2339             } else {
2340                 if (SvNVX(sv) > (NV)UV_MAX) {
2341                     SvIsUV_on(sv);
2342                     /* Integer is inaccurate. NOK, IOKp, is UV */
2343                     SvUV_set(sv, UV_MAX);
2344                 } else {
2345                     SvUV_set(sv, U_V(SvNVX(sv)));
2346                     /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2347                        NV preservse UV so can do correct comparison.  */
2348                     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2349                         SvIOK_on(sv);
2350                     } else {
2351                         NOOP;   /* Integer is imprecise. NOK, IOKp, is UV */
2352                     }
2353                 }
2354                 SvIsUV_on(sv);
2355             }
2356 #else /* NV_PRESERVES_UV */
2357             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2358                 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2359                 /* The IV/UV slot will have been set from value returned by
2360                    grok_number above.  The NV slot has just been set using
2361                    Atof.  */
2362                 SvNOK_on(sv);
2363                 assert (SvIOKp(sv));
2364             } else {
2365                 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2366                     U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2367                     /* Small enough to preserve all bits. */
2368                     (void)SvIOKp_on(sv);
2369                     SvNOK_on(sv);
2370                     SvIV_set(sv, I_V(SvNVX(sv)));
2371                     if ((NV)(SvIVX(sv)) == SvNVX(sv))
2372                         SvIOK_on(sv);
2373                     /* Assumption: first non-preserved integer is < IV_MAX,
2374                        this NV is in the preserved range, therefore: */
2375                     if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2376                           < (UV)IV_MAX)) {
2377                         Perl_croak(aTHX_ "sv_2iv assumed (U_V(fabs((double)SvNVX(sv))) < (UV)IV_MAX) but SvNVX(sv)=%" NVgf " U_V is 0x%" UVxf ", IV_MAX is 0x%" UVxf "\n", SvNVX(sv), U_V(SvNVX(sv)), (UV)IV_MAX);
2378                     }
2379                 } else {
2380                     /* IN_UV NOT_INT
2381                          0      0       already failed to read UV.
2382                          0      1       already failed to read UV.
2383                          1      0       you won't get here in this case. IV/UV
2384                                         slot set, public IOK, Atof() unneeded.
2385                          1      1       already read UV.
2386                        so there's no point in sv_2iuv_non_preserve() attempting
2387                        to use atol, strtol, strtoul etc.  */
2388 #  ifdef DEBUGGING
2389                     sv_2iuv_non_preserve (sv, numtype);
2390 #  else
2391                     sv_2iuv_non_preserve (sv);
2392 #  endif
2393                 }
2394             }
2395 #endif /* NV_PRESERVES_UV */
2396         /* It might be more code efficient to go through the entire logic above
2397            and conditionally set with SvIOKp_on() rather than SvIOK(), but it
2398            gets complex and potentially buggy, so more programmer efficient
2399            to do it this way, by turning off the public flags:  */
2400         if (!numtype)
2401             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2402         }
2403     }
2404     else  {
2405         if (isGV_with_GP(sv))
2406             return glob_2number(MUTABLE_GV(sv));
2407
2408         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2409                 report_uninit(sv);
2410         if (SvTYPE(sv) < SVt_IV)
2411             /* Typically the caller expects that sv_any is not NULL now.  */
2412             sv_upgrade(sv, SVt_IV);
2413         /* Return 0 from the caller.  */
2414         return TRUE;
2415     }
2416     return FALSE;
2417 }
2418
2419 /*
2420 =for apidoc sv_2iv_flags
2421
2422 Return the integer value of an SV, doing any necessary string
2423 conversion.  If C<flags> has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.
2424 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2425
2426 =cut
2427 */
2428
2429 IV
2430 Perl_sv_2iv_flags(pTHX_ SV *const sv, const I32 flags)
2431 {
2432     PERL_ARGS_ASSERT_SV_2IV_FLAGS;
2433
2434     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2435          && SvTYPE(sv) != SVt_PVFM);
2436
2437     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2438         mg_get(sv);
2439
2440     if (SvROK(sv)) {
2441         if (SvAMAGIC(sv)) {
2442             SV * tmpstr;
2443             if (flags & SV_SKIP_OVERLOAD)
2444                 return 0;
2445             tmpstr = AMG_CALLunary(sv, numer_amg);
2446             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2447                 return SvIV(tmpstr);
2448             }
2449         }
2450         return PTR2IV(SvRV(sv));
2451     }
2452
2453     if (SvVALID(sv) || isREGEXP(sv)) {
2454         /* FBMs use the space for SvIVX and SvNVX for other purposes, so
2455            must not let them cache IVs.
2456            In practice they are extremely unlikely to actually get anywhere
2457            accessible by user Perl code - the only way that I'm aware of is when
2458            a constant subroutine which is used as the second argument to index.
2459
2460            Regexps have no SvIVX and SvNVX fields.
2461         */
2462         assert(isREGEXP(sv) || SvPOKp(sv));
2463         {
2464             UV value;
2465             const char * const ptr =
2466                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2467             const int numtype
2468                 = grok_number(ptr, SvCUR(sv), &value);
2469
2470             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2471                 == IS_NUMBER_IN_UV) {
2472                 /* It's definitely an integer */
2473                 if (numtype & IS_NUMBER_NEG) {
2474                     if (value < (UV)IV_MIN)
2475                         return -(IV)value;
2476                 } else {
2477                     if (value < (UV)IV_MAX)
2478                         return (IV)value;
2479                 }
2480             }
2481
2482             /* Quite wrong but no good choices. */
2483             if ((numtype & IS_NUMBER_INFINITY)) {
2484                 return (numtype & IS_NUMBER_NEG) ? IV_MIN : IV_MAX;
2485             } else if ((numtype & IS_NUMBER_NAN)) {
2486                 return 0; /* So wrong. */
2487             }
2488
2489             if (!numtype) {
2490                 if (ckWARN(WARN_NUMERIC))
2491                     not_a_number(sv);
2492             }
2493             return I_V(Atof(ptr));
2494         }
2495     }
2496
2497     if (SvTHINKFIRST(sv)) {
2498         if (SvREADONLY(sv) && !SvOK(sv)) {
2499             if (ckWARN(WARN_UNINITIALIZED))
2500                 report_uninit(sv);
2501             return 0;
2502         }
2503     }
2504
2505     if (!SvIOKp(sv)) {
2506         if (S_sv_2iuv_common(aTHX_ sv))
2507             return 0;
2508     }
2509
2510     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2iv(%" IVdf ")\n",
2511         PTR2UV(sv),SvIVX(sv)));
2512     return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2513 }
2514
2515 /*
2516 =for apidoc sv_2uv_flags
2517
2518 Return the unsigned integer value of an SV, doing any necessary string
2519 conversion.  If C<flags> has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.
2520 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2521
2522 =cut
2523 */
2524
2525 UV
2526 Perl_sv_2uv_flags(pTHX_ SV *const sv, const I32 flags)
2527 {
2528     PERL_ARGS_ASSERT_SV_2UV_FLAGS;
2529
2530     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2531         mg_get(sv);
2532
2533     if (SvROK(sv)) {
2534         if (SvAMAGIC(sv)) {
2535             SV *tmpstr;
2536             if (flags & SV_SKIP_OVERLOAD)
2537                 return 0;
2538             tmpstr = AMG_CALLunary(sv, numer_amg);
2539             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2540                 return SvUV(tmpstr);
2541             }
2542         }
2543         return PTR2UV(SvRV(sv));
2544     }
2545
2546     if (SvVALID(sv) || isREGEXP(sv)) {
2547         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2548            the same flag bit as SVf_IVisUV, so must not let them cache IVs.  
2549            Regexps have no SvIVX and SvNVX fields. */
2550         assert(isREGEXP(sv) || SvPOKp(sv));
2551         {
2552             UV value;
2553             const char * const ptr =
2554                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2555             const int numtype
2556                 = grok_number(ptr, SvCUR(sv), &value);
2557
2558             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2559                 == IS_NUMBER_IN_UV) {
2560                 /* It's definitely an integer */
2561                 if (!(numtype & IS_NUMBER_NEG))
2562                     return value;
2563             }
2564
2565             /* Quite wrong but no good choices. */
2566             if ((numtype & IS_NUMBER_INFINITY)) {
2567                 return UV_MAX; /* So wrong. */
2568             } else if ((numtype & IS_NUMBER_NAN)) {
2569                 return 0; /* So wrong. */
2570             }
2571
2572             if (!numtype) {
2573                 if (ckWARN(WARN_NUMERIC))
2574                     not_a_number(sv);
2575             }
2576             return U_V(Atof(ptr));
2577         }
2578     }
2579
2580     if (SvTHINKFIRST(sv)) {
2581         if (SvREADONLY(sv) && !SvOK(sv)) {
2582             if (ckWARN(WARN_UNINITIALIZED))
2583                 report_uninit(sv);
2584             return 0;
2585         }
2586     }
2587
2588     if (!SvIOKp(sv)) {
2589         if (S_sv_2iuv_common(aTHX_ sv))
2590             return 0;
2591     }
2592
2593     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2uv(%" UVuf ")\n",
2594                           PTR2UV(sv),SvUVX(sv)));
2595     return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2596 }
2597
2598 /*
2599 =for apidoc sv_2nv_flags
2600
2601 Return the num value of an SV, doing any necessary string or integer
2602 conversion.  If C<flags> has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.
2603 Normally used via the C<SvNV(sv)> and C<SvNVx(sv)> macros.
2604
2605 =cut
2606 */
2607
2608 NV
2609 Perl_sv_2nv_flags(pTHX_ SV *const sv, const I32 flags)
2610 {
2611     PERL_ARGS_ASSERT_SV_2NV_FLAGS;
2612
2613     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2614          && SvTYPE(sv) != SVt_PVFM);
2615     if (SvGMAGICAL(sv) || SvVALID(sv) || isREGEXP(sv)) {
2616         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2617            the same flag bit as SVf_IVisUV, so must not let them cache NVs.
2618            Regexps have no SvIVX and SvNVX fields.  */
2619         const char *ptr;
2620         if (flags & SV_GMAGIC)
2621             mg_get(sv);
2622         if (SvNOKp(sv))
2623             return SvNVX(sv);
2624         if (SvPOKp(sv) && !SvIOKp(sv)) {
2625             ptr = SvPVX_const(sv);
2626           grokpv:
2627             if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2628                 !grok_number(ptr, SvCUR(sv), NULL))
2629                 not_a_number(sv);
2630             return Atof(ptr);
2631         }
2632         if (SvIOKp(sv)) {
2633             if (SvIsUV(sv))
2634                 return (NV)SvUVX(sv);
2635             else
2636                 return (NV)SvIVX(sv);
2637         }
2638         if (SvROK(sv)) {
2639             goto return_rok;
2640         }
2641         if (isREGEXP(sv)) {
2642             ptr = RX_WRAPPED((REGEXP *)sv);
2643             goto grokpv;
2644         }
2645         assert(SvTYPE(sv) >= SVt_PVMG);
2646         /* This falls through to the report_uninit near the end of the
2647            function. */
2648     } else if (SvTHINKFIRST(sv)) {
2649         if (SvROK(sv)) {
2650         return_rok:
2651             if (SvAMAGIC(sv)) {
2652                 SV *tmpstr;
2653                 if (flags & SV_SKIP_OVERLOAD)
2654                     return 0;
2655                 tmpstr = AMG_CALLunary(sv, numer_amg);
2656                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2657                     return SvNV(tmpstr);
2658                 }
2659             }
2660             return PTR2NV(SvRV(sv));
2661         }
2662         if (SvREADONLY(sv) && !SvOK(sv)) {
2663             if (ckWARN(WARN_UNINITIALIZED))
2664                 report_uninit(sv);
2665             return 0.0;
2666         }
2667     }
2668     if (SvTYPE(sv) < SVt_NV) {
2669         /* The logic to use SVt_PVNV if necessary is in sv_upgrade.  */
2670         sv_upgrade(sv, SVt_NV);
2671         DEBUG_c({
2672             STORE_NUMERIC_LOCAL_SET_STANDARD();
2673             PerlIO_printf(Perl_debug_log,
2674                           "0x%" UVxf " num(%" NVgf ")\n",
2675                           PTR2UV(sv), SvNVX(sv));
2676             RESTORE_NUMERIC_LOCAL();
2677         });
2678     }
2679     else if (SvTYPE(sv) < SVt_PVNV)
2680         sv_upgrade(sv, SVt_PVNV);
2681     if (SvNOKp(sv)) {
2682         return SvNVX(sv);
2683     }
2684     if (SvIOKp(sv)) {
2685         SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2686 #ifdef NV_PRESERVES_UV
2687         if (SvIOK(sv))
2688             SvNOK_on(sv);
2689         else
2690             SvNOKp_on(sv);
2691 #else
2692         /* Only set the public NV OK flag if this NV preserves the IV  */
2693         /* Check it's not 0xFFFFFFFFFFFFFFFF */
2694         if (SvIOK(sv) &&
2695             SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2696                        : (SvIVX(sv) == I_V(SvNVX(sv))))
2697             SvNOK_on(sv);
2698         else
2699             SvNOKp_on(sv);
2700 #endif
2701     }
2702     else if (SvPOKp(sv)) {
2703         UV value;
2704         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2705         if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2706             not_a_number(sv);
2707 #ifdef NV_PRESERVES_UV
2708         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2709             == IS_NUMBER_IN_UV) {
2710             /* It's definitely an integer */
2711             SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2712         } else {
2713             S_sv_setnv(aTHX_ sv, numtype);
2714         }
2715         if (numtype)
2716             SvNOK_on(sv);
2717         else
2718             SvNOKp_on(sv);
2719 #else
2720         SvNV_set(sv, Atof(SvPVX_const(sv)));
2721         /* Only set the public NV OK flag if this NV preserves the value in
2722            the PV at least as well as an IV/UV would.
2723            Not sure how to do this 100% reliably. */
2724         /* if that shift count is out of range then Configure's test is
2725            wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2726            UV_BITS */
2727         if (((UV)1 << NV_PRESERVES_UV_BITS) >
2728             U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2729             SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2730         } else if (!(numtype & IS_NUMBER_IN_UV)) {
2731             /* Can't use strtol etc to convert this string, so don't try.
2732                sv_2iv and sv_2uv will use the NV to convert, not the PV.  */
2733             SvNOK_on(sv);
2734         } else {
2735             /* value has been set.  It may not be precise.  */
2736             if ((numtype & IS_NUMBER_NEG) && (value >= (UV)IV_MIN)) {
2737                 /* 2s complement assumption for (UV)IV_MIN  */
2738                 SvNOK_on(sv); /* Integer is too negative.  */
2739             } else {
2740                 SvNOKp_on(sv);
2741                 SvIOKp_on(sv);
2742
2743                 if (numtype & IS_NUMBER_NEG) {
2744                     /* -IV_MIN is undefined, but we should never reach
2745                      * this point with both IS_NUMBER_NEG and value ==
2746                      * (UV)IV_MIN */
2747                     assert(value != (UV)IV_MIN);
2748                     SvIV_set(sv, -(IV)value);
2749                 } else if (value <= (UV)IV_MAX) {
2750                     SvIV_set(sv, (IV)value);
2751                 } else {
2752                     SvUV_set(sv, value);
2753                     SvIsUV_on(sv);
2754                 }
2755
2756                 if (numtype & IS_NUMBER_NOT_INT) {
2757                     /* I believe that even if the original PV had decimals,
2758                        they are lost beyond the limit of the FP precision.
2759                        However, neither is canonical, so both only get p
2760                        flags.  NWC, 2000/11/25 */
2761                     /* Both already have p flags, so do nothing */
2762                 } else {
2763                     const NV nv = SvNVX(sv);
2764                     /* XXX should this spot have NAN_COMPARE_BROKEN, too? */
2765                     if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2766                         if (SvIVX(sv) == I_V(nv)) {
2767                             SvNOK_on(sv);
2768                         } else {
2769                             /* It had no "." so it must be integer.  */
2770                         }
2771                         SvIOK_on(sv);
2772                     } else {
2773                         /* between IV_MAX and NV(UV_MAX).
2774                            Could be slightly > UV_MAX */
2775
2776                         if (numtype & IS_NUMBER_NOT_INT) {
2777                             /* UV and NV both imprecise.  */
2778                         } else {
2779                             const UV nv_as_uv = U_V(nv);
2780
2781                             if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2782                                 SvNOK_on(sv);
2783                             }
2784                             SvIOK_on(sv);
2785                         }
2786                     }
2787                 }
2788             }
2789         }
2790         /* It might be more code efficient to go through the entire logic above
2791            and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2792            gets complex and potentially buggy, so more programmer efficient
2793            to do it this way, by turning off the public flags:  */
2794         if (!numtype)
2795             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2796 #endif /* NV_PRESERVES_UV */
2797     }
2798     else  {
2799         if (isGV_with_GP(sv)) {
2800             glob_2number(MUTABLE_GV(sv));
2801             return 0.0;
2802         }
2803
2804         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2805             report_uninit(sv);
2806         assert (SvTYPE(sv) >= SVt_NV);
2807         /* Typically the caller expects that sv_any is not NULL now.  */
2808         /* XXX Ilya implies that this is a bug in callers that assume this
2809            and ideally should be fixed.  */
2810         return 0.0;
2811     }
2812     DEBUG_c({
2813         STORE_NUMERIC_LOCAL_SET_STANDARD();
2814         PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2nv(%" NVgf ")\n",
2815                       PTR2UV(sv), SvNVX(sv));
2816         RESTORE_NUMERIC_LOCAL();
2817     });
2818     return SvNVX(sv);
2819 }
2820
2821 /*
2822 =for apidoc sv_2num
2823
2824 Return an SV with the numeric value of the source SV, doing any necessary
2825 reference or overload conversion.  The caller is expected to have handled
2826 get-magic already.
2827
2828 =cut
2829 */
2830
2831 SV *
2832 Perl_sv_2num(pTHX_ SV *const sv)
2833 {
2834     PERL_ARGS_ASSERT_SV_2NUM;
2835
2836     if (!SvROK(sv))
2837         return sv;
2838     if (SvAMAGIC(sv)) {
2839         SV * const tmpsv = AMG_CALLunary(sv, numer_amg);
2840         TAINT_IF(tmpsv && SvTAINTED(tmpsv));
2841         if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2842             return sv_2num(tmpsv);
2843     }
2844     return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2845 }
2846
2847 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2848  * UV as a string towards the end of buf, and return pointers to start and
2849  * end of it.
2850  *
2851  * We assume that buf is at least TYPE_CHARS(UV) long.
2852  */
2853
2854 static char *
2855 S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
2856 {
2857     char *ptr = buf + TYPE_CHARS(UV);
2858     char * const ebuf = ptr;
2859     int sign;
2860
2861     PERL_ARGS_ASSERT_UIV_2BUF;
2862
2863     if (is_uv)
2864         sign = 0;
2865     else if (iv >= 0) {
2866         uv = iv;
2867         sign = 0;
2868     } else {
2869         uv = (iv == IV_MIN) ? (UV)iv : (UV)(-iv);
2870         sign = 1;
2871     }
2872     do {
2873         *--ptr = '0' + (char)(uv % 10);
2874     } while (uv /= 10);
2875     if (sign)
2876         *--ptr = '-';
2877     *peob = ebuf;
2878     return ptr;
2879 }
2880
2881 /* Helper for sv_2pv_flags and sv_vcatpvfn_flags.  If the NV is an
2882  * infinity or a not-a-number, writes the appropriate strings to the
2883  * buffer, including a zero byte.  On success returns the written length,
2884  * excluding the zero byte, on failure (not an infinity, not a nan)
2885  * returns zero, assert-fails on maxlen being too short.
2886  *
2887  * XXX for "Inf", "-Inf", and "NaN", we could have three read-only
2888  * shared string constants we point to, instead of generating a new
2889  * string for each instance. */
2890 STATIC size_t
2891 S_infnan_2pv(NV nv, char* buffer, size_t maxlen, char plus) {
2892     char* s = buffer;
2893     assert(maxlen >= 4);
2894     if (Perl_isinf(nv)) {
2895         if (nv < 0) {
2896             if (maxlen < 5) /* "-Inf\0"  */
2897                 return 0;
2898             *s++ = '-';
2899         } else if (plus) {
2900             *s++ = '+';
2901         }
2902         *s++ = 'I';
2903         *s++ = 'n';
2904         *s++ = 'f';
2905     }
2906     else if (Perl_isnan(nv)) {
2907         *s++ = 'N';
2908         *s++ = 'a';
2909         *s++ = 'N';
2910         /* XXX optionally output the payload mantissa bits as
2911          * "(unsigned)" (to match the nan("...") C99 function,
2912          * or maybe as "(0xhhh...)"  would make more sense...
2913          * provide a format string so that the user can decide?
2914          * NOTE: would affect the maxlen and assert() logic.*/
2915     }
2916     else {
2917       return 0;
2918     }
2919     assert((s == buffer + 3) || (s == buffer + 4));
2920     *s = 0;
2921     return s - buffer;
2922 }
2923
2924 /*
2925 =for apidoc sv_2pv_flags
2926
2927 Returns a pointer to the string value of an SV, and sets C<*lp> to its length.
2928 If flags has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.  Coerces C<sv> to a
2929 string if necessary.  Normally invoked via the C<SvPV_flags> macro.
2930 C<sv_2pv()> and C<sv_2pv_nomg> usually end up here too.
2931
2932 =cut
2933 */
2934
2935 char *
2936 Perl_sv_2pv_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
2937 {
2938     char *s;
2939
2940     PERL_ARGS_ASSERT_SV_2PV_FLAGS;
2941
2942     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2943          && SvTYPE(sv) != SVt_PVFM);
2944     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2945         mg_get(sv);
2946     if (SvROK(sv)) {
2947         if (SvAMAGIC(sv)) {
2948             SV *tmpstr;
2949             if (flags & SV_SKIP_OVERLOAD)
2950                 return NULL;
2951             tmpstr = AMG_CALLunary(sv, string_amg);
2952             TAINT_IF(tmpstr && SvTAINTED(tmpstr));
2953             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2954                 /* Unwrap this:  */
2955                 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2956                  */
2957
2958                 char *pv;
2959                 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
2960                     if (flags & SV_CONST_RETURN) {
2961                         pv = (char *) SvPVX_const(tmpstr);
2962                     } else {
2963                         pv = (flags & SV_MUTABLE_RETURN)
2964                             ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
2965                     }
2966                     if (lp)
2967                         *lp = SvCUR(tmpstr);
2968                 } else {
2969                     pv = sv_2pv_flags(tmpstr, lp, flags);
2970                 }
2971                 if (SvUTF8(tmpstr))
2972                     SvUTF8_on(sv);
2973                 else
2974                     SvUTF8_off(sv);
2975                 return pv;
2976             }
2977         }
2978         {
2979             STRLEN len;
2980             char *retval;
2981             char *buffer;
2982             SV *const referent = SvRV(sv);
2983
2984             if (!referent) {
2985                 len = 7;
2986                 retval = buffer = savepvn("NULLREF", len);
2987             } else if (SvTYPE(referent) == SVt_REGEXP &&
2988                        (!(PL_curcop->cop_hints & HINT_NO_AMAGIC) ||
2989                         amagic_is_enabled(string_amg))) {
2990                 REGEXP * const re = (REGEXP *)MUTABLE_PTR(referent);
2991
2992                 assert(re);
2993                         
2994                 /* If the regex is UTF-8 we want the containing scalar to
2995                    have an UTF-8 flag too */
2996                 if (RX_UTF8(re))
2997                     SvUTF8_on(sv);
2998                 else
2999                     SvUTF8_off(sv);     
3000
3001                 if (lp)
3002                     *lp = RX_WRAPLEN(re);
3003  
3004                 return RX_WRAPPED(re);
3005             } else {
3006                 const char *const typestr = sv_reftype(referent, 0);
3007                 const STRLEN typelen = strlen(typestr);
3008                 UV addr = PTR2UV(referent);
3009                 const char *stashname = NULL;
3010                 STRLEN stashnamelen = 0; /* hush, gcc */
3011                 const char *buffer_end;
3012
3013                 if (SvOBJECT(referent)) {
3014                     const HEK *const name = HvNAME_HEK(SvSTASH(referent));
3015
3016                     if (name) {
3017                         stashname = HEK_KEY(name);
3018                         stashnamelen = HEK_LEN(name);
3019
3020                         if (HEK_UTF8(name)) {
3021                             SvUTF8_on(sv);
3022                         } else {
3023                             SvUTF8_off(sv);
3024                         }
3025                     } else {
3026                         stashname = "__ANON__";
3027                         stashnamelen = 8;
3028                     }
3029                     len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
3030                         + 2 * sizeof(UV) + 2 /* )\0 */;
3031                 } else {
3032                     len = typelen + 3 /* (0x */
3033                         + 2 * sizeof(UV) + 2 /* )\0 */;
3034                 }
3035
3036                 Newx(buffer, len, char);
3037                 buffer_end = retval = buffer + len;
3038
3039                 /* Working backwards  */
3040                 *--retval = '\0';
3041                 *--retval = ')';
3042                 do {
3043                     *--retval = PL_hexdigit[addr & 15];
3044                 } while (addr >>= 4);
3045                 *--retval = 'x';
3046                 *--retval = '0';
3047                 *--retval = '(';
3048
3049                 retval -= typelen;
3050                 memcpy(retval, typestr, typelen);
3051
3052                 if (stashname) {
3053                     *--retval = '=';
3054                     retval -= stashnamelen;
3055                     memcpy(retval, stashname, stashnamelen);
3056                 }
3057                 /* retval may not necessarily have reached the start of the
3058                    buffer here.  */
3059                 assert (retval >= buffer);
3060
3061                 len = buffer_end - retval - 1; /* -1 for that \0  */
3062             }
3063             if (lp)
3064                 *lp = len;
3065             SAVEFREEPV(buffer);
3066             return retval;
3067         }
3068     }
3069
3070     if (SvPOKp(sv)) {
3071         if (lp)
3072             *lp = SvCUR(sv);
3073         if (flags & SV_MUTABLE_RETURN)
3074             return SvPVX_mutable(sv);
3075         if (flags & SV_CONST_RETURN)
3076             return (char *)SvPVX_const(sv);
3077         return SvPVX(sv);
3078     }
3079
3080     if (SvIOK(sv)) {
3081         /* I'm assuming that if both IV and NV are equally valid then
3082            converting the IV is going to be more efficient */
3083         const U32 isUIOK = SvIsUV(sv);
3084         char buf[TYPE_CHARS(UV)];
3085         char *ebuf, *ptr;
3086         STRLEN len;
3087
3088         if (SvTYPE(sv) < SVt_PVIV)
3089             sv_upgrade(sv, SVt_PVIV);
3090         ptr = uiv_2buf(buf, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
3091         len = ebuf - ptr;
3092         /* inlined from sv_setpvn */
3093         s = SvGROW_mutable(sv, len + 1);
3094         Move(ptr, s, len, char);
3095         s += len;
3096         *s = '\0';
3097         SvPOK_on(sv);
3098     }
3099     else if (SvNOK(sv)) {
3100         if (SvTYPE(sv) < SVt_PVNV)
3101             sv_upgrade(sv, SVt_PVNV);
3102         if (SvNVX(sv) == 0.0
3103 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
3104             && !Perl_isnan(SvNVX(sv))
3105 #endif
3106         ) {
3107             s = SvGROW_mutable(sv, 2);
3108             *s++ = '0';
3109             *s = '\0';
3110         } else {
3111             STRLEN len;
3112             STRLEN size = 5; /* "-Inf\0" */
3113
3114             s = SvGROW_mutable(sv, size);
3115             len = S_infnan_2pv(SvNVX(sv), s, size, 0);
3116             if (len > 0) {
3117                 s += len;
3118                 SvPOK_on(sv);
3119             }
3120             else {
3121                 /* some Xenix systems wipe out errno here */
3122                 dSAVE_ERRNO;
3123
3124                 size =
3125                     1 + /* sign */
3126                     1 + /* "." */
3127                     NV_DIG +
3128                     1 + /* "e" */
3129                     1 + /* sign */
3130                     5 + /* exponent digits */
3131                     1 + /* \0 */
3132                     2; /* paranoia */
3133
3134                 s = SvGROW_mutable(sv, size);
3135 #ifndef USE_LOCALE_NUMERIC
3136                 SNPRINTF_G(SvNVX(sv), s, SvLEN(sv), NV_DIG);
3137
3138                 SvPOK_on(sv);
3139 #else
3140                 {
3141                     bool local_radix;
3142                     DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
3143                     STORE_LC_NUMERIC_SET_TO_NEEDED();
3144
3145                     local_radix = PL_numeric_local && PL_numeric_radix_sv;
3146                     if (local_radix && SvLEN(PL_numeric_radix_sv) > 1) {
3147                         size += SvLEN(PL_numeric_radix_sv) - 1;
3148                         s = SvGROW_mutable(sv, size);
3149                     }
3150
3151                     SNPRINTF_G(SvNVX(sv), s, SvLEN(sv), NV_DIG);
3152
3153                     /* If the radix character is UTF-8, and actually is in the
3154                      * output, turn on the UTF-8 flag for the scalar */
3155                     if (   local_radix
3156                         && SvUTF8(PL_numeric_radix_sv)
3157                         && instr(s, SvPVX_const(PL_numeric_radix_sv)))
3158                     {
3159                         SvUTF8_on(sv);
3160                     }
3161
3162                     RESTORE_LC_NUMERIC();
3163                 }
3164
3165                 /* We don't call SvPOK_on(), because it may come to
3166                  * pass that the locale changes so that the
3167                  * stringification we just did is no longer correct.  We
3168                  * will have to re-stringify every time it is needed */
3169 #endif
3170                 RESTORE_ERRNO;
3171             }
3172             while (*s) s++;
3173         }
3174     }
3175     else if (isGV_with_GP(sv)) {
3176         GV *const gv = MUTABLE_GV(sv);
3177         SV *const buffer = sv_newmortal();
3178
3179         gv_efullname3(buffer, gv, "*");
3180
3181         assert(SvPOK(buffer));
3182         if (SvUTF8(buffer))
3183             SvUTF8_on(sv);
3184         if (lp)
3185             *lp = SvCUR(buffer);
3186         return SvPVX(buffer);
3187     }
3188     else if (isREGEXP(sv)) {
3189         if (lp) *lp = RX_WRAPLEN((REGEXP *)sv);
3190         return RX_WRAPPED((REGEXP *)sv);
3191     }
3192     else {
3193         if (lp)
3194             *lp = 0;
3195         if (flags & SV_UNDEF_RETURNS_NULL)
3196             return NULL;
3197         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
3198             report_uninit(sv);
3199         /* Typically the caller expects that sv_any is not NULL now.  */
3200         if (!SvREADONLY(sv) && SvTYPE(sv) < SVt_PV)
3201             sv_upgrade(sv, SVt_PV);
3202         return (char *)"";
3203     }
3204
3205     {
3206         const STRLEN len = s - SvPVX_const(sv);
3207         if (lp) 
3208             *lp = len;
3209         SvCUR_set(sv, len);
3210     }
3211     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2pv(%s)\n",
3212                           PTR2UV(sv),SvPVX_const(sv)));
3213     if (flags & SV_CONST_RETURN)
3214         return (char *)SvPVX_const(sv);
3215     if (flags & SV_MUTABLE_RETURN)
3216         return SvPVX_mutable(sv);
3217     return SvPVX(sv);
3218 }
3219
3220 /*
3221 =for apidoc sv_copypv
3222
3223 Copies a stringified representation of the source SV into the
3224 destination SV.  Automatically performs any necessary C<mg_get> and
3225 coercion of numeric values into strings.  Guaranteed to preserve
3226 C<UTF8> flag even from overloaded objects.  Similar in nature to
3227 C<sv_2pv[_flags]> but operates directly on an SV instead of just the
3228 string.  Mostly uses C<sv_2pv_flags> to do its work, except when that
3229 would lose the UTF-8'ness of the PV.
3230
3231 =for apidoc sv_copypv_nomg
3232
3233 Like C<sv_copypv>, but doesn't invoke get magic first.
3234
3235 =for apidoc sv_copypv_flags
3236
3237 Implementation of C<sv_copypv> and C<sv_copypv_nomg>.  Calls get magic iff flags
3238 has the C<SV_GMAGIC> bit set.
3239
3240 =cut
3241 */
3242
3243 void
3244 Perl_sv_copypv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
3245 {
3246     STRLEN len;
3247     const char *s;
3248
3249     PERL_ARGS_ASSERT_SV_COPYPV_FLAGS;
3250
3251     s = SvPV_flags_const(ssv,len,(flags & SV_GMAGIC));
3252     sv_setpvn(dsv,s,len);
3253     if (SvUTF8(ssv))
3254         SvUTF8_on(dsv);
3255     else
3256         SvUTF8_off(dsv);
3257 }
3258
3259 /*
3260 =for apidoc sv_2pvbyte
3261
3262 Return a pointer to the byte-encoded representation of the SV, and set C<*lp>
3263 to its length.  May cause the SV to be downgraded from UTF-8 as a
3264 side-effect.
3265
3266 Usually accessed via the C<SvPVbyte> macro.
3267
3268 =cut
3269 */
3270
3271 char *
3272 Perl_sv_2pvbyte(pTHX_ SV *sv, STRLEN *const lp)
3273 {
3274     PERL_ARGS_ASSERT_SV_2PVBYTE;
3275
3276     SvGETMAGIC(sv);
3277     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3278      || isGV_with_GP(sv) || SvROK(sv)) {
3279         SV *sv2 = sv_newmortal();
3280         sv_copypv_nomg(sv2,sv);
3281         sv = sv2;
3282     }
3283     sv_utf8_downgrade(sv,0);
3284     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3285 }
3286
3287 /*
3288 =for apidoc sv_2pvutf8
3289
3290 Return a pointer to the UTF-8-encoded representation of the SV, and set C<*lp>
3291 to its length.  May cause the SV to be upgraded to UTF-8 as a side-effect.
3292
3293 Usually accessed via the C<SvPVutf8> macro.
3294
3295 =cut
3296 */
3297
3298 char *
3299 Perl_sv_2pvutf8(pTHX_ SV *sv, STRLEN *const lp)
3300 {
3301     PERL_ARGS_ASSERT_SV_2PVUTF8;
3302
3303     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3304      || isGV_with_GP(sv) || SvROK(sv))
3305         sv = sv_mortalcopy(sv);
3306     else
3307         SvGETMAGIC(sv);
3308     sv_utf8_upgrade_nomg(sv);
3309     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3310 }
3311
3312
3313 /*
3314 =for apidoc sv_2bool
3315
3316 This macro is only used by C<sv_true()> or its macro equivalent, and only if
3317 the latter's argument is neither C<SvPOK>, C<SvIOK> nor C<SvNOK>.
3318 It calls C<sv_2bool_flags> with the C<SV_GMAGIC> flag.
3319
3320 =for apidoc sv_2bool_flags
3321
3322 This function is only used by C<sv_true()> and friends,  and only if
3323 the latter's argument is neither C<SvPOK>, C<SvIOK> nor C<SvNOK>.  If the flags
3324 contain C<SV_GMAGIC>, then it does an C<mg_get()> first.
3325
3326
3327 =cut
3328 */
3329
3330 bool
3331 Perl_sv_2bool_flags(pTHX_ SV *sv, I32 flags)
3332 {
3333     PERL_ARGS_ASSERT_SV_2BOOL_FLAGS;
3334
3335     restart:
3336     if(flags & SV_GMAGIC) SvGETMAGIC(sv);
3337
3338     if (!SvOK(sv))
3339         return 0;
3340     if (SvROK(sv)) {
3341         if (SvAMAGIC(sv)) {
3342             SV * const tmpsv = AMG_CALLunary(sv, bool__amg);
3343             if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv)))) {
3344                 bool svb;
3345                 sv = tmpsv;
3346                 if(SvGMAGICAL(sv)) {
3347                     flags = SV_GMAGIC;
3348                     goto restart; /* call sv_2bool */
3349                 }
3350                 /* expanded SvTRUE_common(sv, (flags = 0, goto restart)) */
3351                 else if(!SvOK(sv)) {
3352                     svb = 0;
3353                 }
3354                 else if(SvPOK(sv)) {
3355                     svb = SvPVXtrue(sv);
3356                 }
3357                 else if((SvFLAGS(sv) & (SVf_IOK|SVf_NOK))) {
3358                     svb = (SvIOK(sv) && SvIVX(sv) != 0)
3359                         || (SvNOK(sv) && SvNVX(sv) != 0.0);
3360                 }
3361                 else {
3362                     flags = 0;
3363                     goto restart; /* call sv_2bool_nomg */
3364                 }
3365                 return cBOOL(svb);
3366             }
3367         }
3368         return SvRV(sv) != 0;
3369     }
3370     if (isREGEXP(sv))
3371         return
3372           RX_WRAPLEN(sv) > 1 || (RX_WRAPLEN(sv) && *RX_WRAPPED(sv) != '0');
3373     return SvTRUE_common(sv, isGV_with_GP(sv) ? 1 : 0);
3374 }
3375
3376 /*
3377 =for apidoc sv_utf8_upgrade
3378
3379 Converts the PV of an SV to its UTF-8-encoded form.
3380 Forces the SV to string form if it is not already.
3381 Will C<mg_get> on C<sv> if appropriate.
3382 Always sets the C<SvUTF8> flag to avoid future validity checks even
3383 if the whole string is the same in UTF-8 as not.
3384 Returns the number of bytes in the converted string
3385
3386 This is not a general purpose byte encoding to Unicode interface:
3387 use the Encode extension for that.
3388
3389 =for apidoc sv_utf8_upgrade_nomg
3390
3391 Like C<sv_utf8_upgrade>, but doesn't do magic on C<sv>.
3392
3393 =for apidoc sv_utf8_upgrade_flags
3394
3395 Converts the PV of an SV to its UTF-8-encoded form.
3396 Forces the SV to string form if it is not already.
3397 Always sets the SvUTF8 flag to avoid future validity checks even
3398 if all the bytes are invariant in UTF-8.
3399 If C<flags> has C<SV_GMAGIC> bit set,
3400 will C<mg_get> on C<sv> if appropriate, else not.
3401
3402 If C<flags> has C<SV_FORCE_UTF8_UPGRADE> set, this function assumes that the PV
3403 will expand when converted to UTF-8, and skips the extra work of checking for
3404 that.  Typically this flag is used by a routine that has already parsed the
3405 string and found such characters, and passes this information on so that the
3406 work doesn't have to be repeated.
3407
3408 Returns the number of bytes in the converted string.
3409
3410 This is not a general purpose byte encoding to Unicode interface:
3411 use the Encode extension for that.
3412
3413 =for apidoc sv_utf8_upgrade_flags_grow
3414
3415 Like C<sv_utf8_upgrade_flags>, but has an additional parameter C<extra>, which is
3416 the number of unused bytes the string of C<sv> is guaranteed to have free after
3417 it upon return.  This allows the caller to reserve extra space that it intends
3418 to fill, to avoid extra grows.
3419
3420 C<sv_utf8_upgrade>, C<sv_utf8_upgrade_nomg>, and C<sv_utf8_upgrade_flags>
3421 are implemented in terms of this function.
3422
3423 Returns the number of bytes in the converted string (not including the spares).
3424
3425 =cut
3426
3427 (One might think that the calling routine could pass in the position of the
3428 first variant character when it has set SV_FORCE_UTF8_UPGRADE, so it wouldn't
3429 have to be found again.  But that is not the case, because typically when the
3430 caller is likely to use this flag, it won't be calling this routine unless it
3431 finds something that won't fit into a byte.  Otherwise it tries to not upgrade
3432 and just use bytes.  But some things that do fit into a byte are variants in
3433 utf8, and the caller may not have been keeping track of these.)
3434
3435 If the routine itself changes the string, it adds a trailing C<NUL>.  Such a
3436 C<NUL> isn't guaranteed due to having other routines do the work in some input
3437 cases, or if the input is already flagged as being in utf8.
3438
3439 The speed of this could perhaps be improved for many cases if someone wanted to
3440 write a fast function that counts the number of variant characters in a string,
3441 especially if it could return the position of the first one.
3442
3443 */
3444
3445 STRLEN
3446 Perl_sv_utf8_upgrade_flags_grow(pTHX_ SV *const sv, const I32 flags, STRLEN extra)
3447 {
3448     PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
3449
3450     if (sv == &PL_sv_undef)
3451         return 0;
3452     if (!SvPOK_nog(sv)) {
3453         STRLEN len = 0;
3454         if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3455             (void) sv_2pv_flags(sv,&len, flags);
3456             if (SvUTF8(sv)) {
3457                 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3458                 return len;
3459             }
3460         } else {
3461             (void) SvPV_force_flags(sv,len,flags & SV_GMAGIC);
3462         }
3463     }
3464
3465     if (SvUTF8(sv)) {
3466         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3467         return SvCUR(sv);
3468     }
3469
3470     if (SvIsCOW(sv)) {
3471         S_sv_uncow(aTHX_ sv, 0);
3472     }
3473
3474     if (SvCUR(sv) == 0) {
3475         if (extra) SvGROW(sv, extra);
3476     } else { /* Assume Latin-1/EBCDIC */
3477         /* This function could be much more efficient if we
3478          * had a FLAG in SVs to signal if there are any variant
3479          * chars in the PV.  Given that there isn't such a flag
3480          * make the loop as fast as possible (although there are certainly ways
3481          * to speed this up, eg. through vectorization) */
3482         U8 * s = (U8 *) SvPVX_const(sv);
3483         U8 * e = (U8 *) SvEND(sv);
3484         U8 *t = s;
3485         STRLEN two_byte_count = 0;
3486         
3487         if (flags & SV_FORCE_UTF8_UPGRADE) goto must_be_utf8;
3488
3489         /* See if really will need to convert to utf8.  We mustn't rely on our
3490          * incoming SV being well formed and having a trailing '\0', as certain
3491          * code in pp_formline can send us partially built SVs. */
3492
3493         while (t < e) {
3494             const U8 ch = *t++;
3495             if (NATIVE_BYTE_IS_INVARIANT(ch)) continue;
3496
3497             t--;    /* t already incremented; re-point to first variant */
3498             two_byte_count = 1;
3499             goto must_be_utf8;
3500         }
3501
3502         /* utf8 conversion not needed because all are invariants.  Mark as
3503          * UTF-8 even if no variant - saves scanning loop */
3504         SvUTF8_on(sv);
3505         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3506         return SvCUR(sv);
3507
3508       must_be_utf8:
3509
3510         /* Here, the string should be converted to utf8, either because of an
3511          * input flag (two_byte_count = 0), or because a character that
3512          * requires 2 bytes was found (two_byte_count = 1).  t points either to
3513          * the beginning of the string (if we didn't examine anything), or to
3514          * the first variant.  In either case, everything from s to t - 1 will
3515          * occupy only 1 byte each on output.
3516          *
3517          * There are two main ways to convert.  One is to create a new string
3518          * and go through the input starting from the beginning, appending each
3519          * converted value onto the new string as we go along.  It's probably
3520          * best to allocate enough space in the string for the worst possible
3521          * case rather than possibly running out of space and having to
3522          * reallocate and then copy what we've done so far.  Since everything
3523          * from s to t - 1 is invariant, the destination can be initialized
3524          * with these using a fast memory copy
3525          *
3526          * The other way is to figure out exactly how big the string should be
3527          * by parsing the entire input.  Then you don't have to make it big
3528          * enough to handle the worst possible case, and more importantly, if
3529          * the string you already have is large enough, you don't have to
3530          * allocate a new string, you can copy the last character in the input
3531          * string to the final position(s) that will be occupied by the
3532          * converted string and go backwards, stopping at t, since everything
3533          * before that is invariant.
3534          *
3535          * There are advantages and disadvantages to each method.
3536          *
3537          * In the first method, we can allocate a new string, do the memory
3538          * copy from the s to t - 1, and then proceed through the rest of the
3539          * string byte-by-byte.
3540          *
3541          * In the second method, we proceed through the rest of the input
3542          * string just calculating how big the converted string will be.  Then
3543          * there are two cases:
3544          *  1)  if the string has enough extra space to handle the converted
3545          *      value.  We go backwards through the string, converting until we
3546          *      get to the position we are at now, and then stop.  If this
3547          *      position is far enough along in the string, this method is
3548          *      faster than the other method.  If the memory copy were the same
3549          *      speed as the byte-by-byte loop, that position would be about
3550          *      half-way, as at the half-way mark, parsing to the end and back
3551          *      is one complete string's parse, the same amount as starting
3552          *      over and going all the way through.  Actually, it would be
3553          *      somewhat less than half-way, as it's faster to just count bytes
3554          *      than to also copy, and we don't have the overhead of allocating
3555          *      a new string, changing the scalar to use it, and freeing the
3556          *      existing one.  But if the memory copy is fast, the break-even
3557          *      point is somewhere after half way.  The counting loop could be
3558          *      sped up by vectorization, etc, to move the break-even point
3559          *      further towards the beginning.
3560          *  2)  if the string doesn't have enough space to handle the converted
3561          *      value.  A new string will have to be allocated, and one might
3562          *      as well, given that, start from the beginning doing the first
3563          *      method.  We've spent extra time parsing the string and in
3564          *      exchange all we've gotten is that we know precisely how big to
3565          *      make the new one.  Perl is more optimized for time than space,
3566          *      so this case is a loser.
3567          * So what I've decided to do is not use the 2nd method unless it is
3568          * guaranteed that a new string won't have to be allocated, assuming
3569          * the worst case.  I also decided not to put any more conditions on it
3570          * than this, for now.  It seems likely that, since the worst case is
3571          * twice as big as the unknown portion of the string (plus 1), we won't
3572          * be guaranteed enough space, causing us to go to the first method,
3573          * unless the string is short, or the first variant character is near
3574          * the end of it.  In either of these cases, it seems best to use the
3575          * 2nd method.  The only circumstance I can think of where this would
3576          * be really slower is if the string had once had much more data in it
3577          * than it does now, but there is still a substantial amount in it  */
3578
3579         {
3580             STRLEN invariant_head = t - s;
3581             STRLEN size = invariant_head + (e - t) * 2 + 1 + extra;
3582             if (SvLEN(sv) < size) {
3583
3584                 /* Here, have decided to allocate a new string */
3585
3586                 U8 *dst;
3587                 U8 *d;
3588
3589                 Newx(dst, size, U8);
3590
3591                 /* If no known invariants at the beginning of the input string,
3592                  * set so starts from there.  Otherwise, can use memory copy to
3593                  * get up to where we are now, and then start from here */
3594
3595                 if (invariant_head == 0) {
3596                     d = dst;
3597                 } else {
3598                     Copy(s, dst, invariant_head, char);
3599                     d = dst + invariant_head;
3600                 }
3601
3602                 while (t < e) {
3603                     append_utf8_from_native_byte(*t, &d);
3604                     t++;
3605                 }
3606                 *d = '\0';
3607                 SvPV_free(sv); /* No longer using pre-existing string */
3608                 SvPV_set(sv, (char*)dst);
3609                 SvCUR_set(sv, d - dst);
3610                 SvLEN_set(sv, size);
3611             } else {
3612
3613                 /* Here, have decided to get the exact size of the string.
3614                  * Currently this happens only when we know that there is
3615                  * guaranteed enough space to fit the converted string, so
3616                  * don't have to worry about growing.  If two_byte_count is 0,
3617                  * then t points to the first byte of the string which hasn't
3618                  * been examined yet.  Otherwise two_byte_count is 1, and t
3619                  * points to the first byte in the string that will expand to
3620                  * two.  Depending on this, start examining at t or 1 after t.
3621                  * */
3622
3623                 U8 *d = t + two_byte_count;
3624
3625
3626                 /* Count up the remaining bytes that expand to two */
3627
3628                 while (d < e) {
3629                     const U8 chr = *d++;
3630                     if (! NATIVE_BYTE_IS_INVARIANT(chr)) two_byte_count++;
3631                 }
3632
3633                 /* The string will expand by just the number of bytes that
3634                  * occupy two positions.  But we are one afterwards because of
3635                  * the increment just above.  This is the place to put the
3636                  * trailing NUL, and to set the length before we decrement */
3637
3638                 d += two_byte_count;
3639                 SvCUR_set(sv, d - s);
3640                 *d-- = '\0';
3641
3642
3643                 /* Having decremented d, it points to the position to put the
3644                  * very last byte of the expanded string.  Go backwards through
3645                  * the string, copying and expanding as we go, stopping when we
3646                  * get to the part that is invariant the rest of the way down */
3647
3648                 e--;
3649                 while (e >= t) {
3650                     if (NATIVE_BYTE_IS_INVARIANT(*e)) {
3651                         *d-- = *e;
3652                     } else {
3653                         *d-- = UTF8_EIGHT_BIT_LO(*e);
3654                         *d-- = UTF8_EIGHT_BIT_HI(*e);
3655                     }
3656                     e--;
3657                 }
3658             }
3659
3660             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3661                 /* Update pos. We do it at the end rather than during
3662                  * the upgrade, to avoid slowing down the common case
3663                  * (upgrade without pos).
3664                  * pos can be stored as either bytes or characters.  Since
3665                  * this was previously a byte string we can just turn off
3666                  * the bytes flag. */
3667                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3668                 if (mg) {
3669                     mg->mg_flags &= ~MGf_BYTES;
3670                 }
3671                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3672                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3673             }
3674         }
3675     }
3676
3677     /* Mark as UTF-8 even if no variant - saves scanning loop */
3678     SvUTF8_on(sv);
3679     return SvCUR(sv);
3680 }
3681
3682 /*
3683 =for apidoc sv_utf8_downgrade
3684
3685 Attempts to convert the PV of an SV from characters to bytes.
3686 If the PV contains a character that cannot fit
3687 in a byte, this conversion will fail;
3688 in this case, either returns false or, if C<fail_ok> is not
3689 true, croaks.
3690
3691 This is not a general purpose Unicode to byte encoding interface:
3692 use the C<Encode> extension for that.
3693
3694 =cut
3695 */
3696
3697 bool
3698 Perl_sv_utf8_downgrade(pTHX_ SV *const sv, const bool fail_ok)
3699 {
3700     PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
3701
3702     if (SvPOKp(sv) && SvUTF8(sv)) {
3703         if (SvCUR(sv)) {
3704             U8 *s;
3705             STRLEN len;
3706             int mg_flags = SV_GMAGIC;
3707
3708             if (SvIsCOW(sv)) {
3709                 S_sv_uncow(aTHX_ sv, 0);
3710             }
3711             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3712                 /* update pos */
3713                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3714                 if (mg && mg->mg_len > 0 && mg->mg_flags & MGf_BYTES) {
3715                         mg->mg_len = sv_pos_b2u_flags(sv, mg->mg_len,
3716                                                 SV_GMAGIC|SV_CONST_RETURN);
3717                         mg_flags = 0; /* sv_pos_b2u does get magic */
3718                 }
3719                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3720                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3721
3722             }
3723             s = (U8 *) SvPV_flags(sv, len, mg_flags);
3724
3725             if (!utf8_to_bytes(s, &len)) {
3726                 if (fail_ok)
3727                     return FALSE;
3728                 else {
3729                     if (PL_op)
3730                         Perl_croak(aTHX_ "Wide character in %s",
3731                                    OP_DESC(PL_op));
3732                     else
3733                         Perl_croak(aTHX_ "Wide character");
3734                 }
3735             }
3736             SvCUR_set(sv, len);
3737         }
3738     }
3739     SvUTF8_off(sv);
3740     return TRUE;
3741 }
3742
3743 /*
3744 =for apidoc sv_utf8_encode
3745
3746 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3747 flag off so that it looks like octets again.
3748
3749 =cut
3750 */
3751
3752 void
3753 Perl_sv_utf8_encode(pTHX_ SV *const sv)
3754 {
3755     PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3756
3757     if (SvREADONLY(sv)) {
3758         sv_force_normal_flags(sv, 0);
3759     }
3760     (void) sv_utf8_upgrade(sv);
3761     SvUTF8_off(sv);
3762 }
3763
3764 /*
3765 =for apidoc sv_utf8_decode
3766
3767 If the PV of the SV is an octet sequence in Perl's extended UTF-8
3768 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3769 so that it looks like a character.  If the PV contains only single-byte
3770 characters, the C<SvUTF8> flag stays off.
3771 Scans PV for validity and returns FALSE if the PV is invalid UTF-8.
3772
3773 =cut
3774 */
3775
3776 bool
3777 Perl_sv_utf8_decode(pTHX_ SV *const sv)
3778 {
3779     PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3780
3781     if (SvPOKp(sv)) {
3782         const U8 *start, *c;
3783
3784         /* The octets may have got themselves encoded - get them back as
3785          * bytes
3786          */
3787         if (!sv_utf8_downgrade(sv, TRUE))
3788             return FALSE;
3789
3790         /* it is actually just a matter of turning the utf8 flag on, but
3791          * we want to make sure everything inside is valid utf8 first.
3792          */
3793         c = start = (const U8 *) SvPVX_const(sv);
3794         if (!is_utf8_string(c, SvCUR(sv)))
3795             return FALSE;
3796         if (! is_utf8_invariant_string(c, SvCUR(sv))) {
3797             SvUTF8_on(sv);
3798         }
3799         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3800             /* XXX Is this dead code?  XS_utf8_decode calls SvSETMAGIC
3801                    after this, clearing pos.  Does anything on CPAN
3802                    need this? */
3803             /* adjust pos to the start of a UTF8 char sequence */
3804             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3805             if (mg) {
3806                 I32 pos = mg->mg_len;
3807                 if (pos > 0) {
3808                     for (c = start + pos; c > start; c--) {
3809                         if (UTF8_IS_START(*c))
3810                             break;
3811                     }
3812                     mg->mg_len  = c - start;
3813                 }
3814             }
3815             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3816                 magic_setutf8(sv,mg); /* clear UTF8 cache */
3817         }
3818     }
3819     return TRUE;
3820 }
3821
3822 /*
3823 =for apidoc sv_setsv
3824
3825 Copies the contents of the source SV C<ssv> into the destination SV
3826 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3827 function if the source SV needs to be reused.  Does not handle 'set' magic on
3828 destination SV.  Calls 'get' magic on source SV.  Loosely speaking, it
3829 performs a copy-by-value, obliterating any previous content of the
3830 destination.
3831
3832 You probably want to use one of the assortment of wrappers, such as
3833 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3834 C<SvSetMagicSV_nosteal>.
3835
3836 =for apidoc sv_setsv_flags
3837
3838 Copies the contents of the source SV C<ssv> into the destination SV
3839 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3840 function if the source SV needs to be reused.  Does not handle 'set' magic.
3841 Loosely speaking, it performs a copy-by-value, obliterating any previous
3842 content of the destination.
3843 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<mg_get> on
3844 C<ssv> if appropriate, else not.  If the C<flags>
3845 parameter has the C<SV_NOSTEAL> bit set then the
3846 buffers of temps will not be stolen.  C<sv_setsv>
3847 and C<sv_setsv_nomg> are implemented in terms of this function.
3848
3849 You probably want to use one of the assortment of wrappers, such as
3850 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3851 C<SvSetMagicSV_nosteal>.
3852
3853 This is the primary function for copying scalars, and most other
3854 copy-ish functions and macros use this underneath.
3855
3856 =cut
3857 */
3858
3859 static void
3860 S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
3861 {
3862     I32 mro_changes = 0; /* 1 = method, 2 = isa, 3 = recursive isa */
3863     HV *old_stash = NULL;
3864
3865     PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3866
3867     if (dtype != SVt_PVGV && !isGV_with_GP(dstr)) {
3868         const char * const name = GvNAME(sstr);
3869         const STRLEN len = GvNAMELEN(sstr);
3870         {
3871             if (dtype >= SVt_PV) {
3872                 SvPV_free(dstr);
3873                 SvPV_set(dstr, 0);
3874                 SvLEN_set(dstr, 0);
3875                 SvCUR_set(dstr, 0);
3876             }
3877             SvUPGRADE(dstr, SVt_PVGV);
3878             (void)SvOK_off(dstr);
3879             isGV_with_GP_on(dstr);
3880         }
3881         GvSTASH(dstr) = GvSTASH(sstr);
3882         if (GvSTASH(dstr))
3883             Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
3884         gv_name_set(MUTABLE_GV(dstr), name, len,
3885                         GV_ADD | (GvNAMEUTF8(sstr) ? SVf_UTF8 : 0 ));
3886         SvFAKE_on(dstr);        /* can coerce to non-glob */
3887     }
3888
3889     if(GvGP(MUTABLE_GV(sstr))) {
3890         /* If source has method cache entry, clear it */
3891         if(GvCVGEN(sstr)) {
3892             SvREFCNT_dec(GvCV(sstr));
3893             GvCV_set(sstr, NULL);
3894             GvCVGEN(sstr) = 0;
3895         }
3896         /* If source has a real method, then a method is
3897            going to change */
3898         else if(
3899          GvCV((const GV *)sstr) && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3900         ) {
3901             mro_changes = 1;
3902         }
3903     }
3904
3905     /* If dest already had a real method, that's a change as well */
3906     if(
3907         !mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)
3908      && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3909     ) {
3910         mro_changes = 1;
3911     }
3912
3913     /* We don't need to check the name of the destination if it was not a
3914        glob to begin with. */
3915     if(dtype == SVt_PVGV) {
3916         const char * const name = GvNAME((const GV *)dstr);
3917         if(
3918             strEQ(name,"ISA")
3919          /* The stash may have been detached from the symbol table, so
3920             check its name. */
3921          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3922         )
3923             mro_changes = 2;
3924         else {
3925             const STRLEN len = GvNAMELEN(dstr);
3926             if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
3927              || (len == 1 && name[0] == ':')) {
3928                 mro_changes = 3;
3929
3930                 /* Set aside the old stash, so we can reset isa caches on
3931                    its subclasses. */
3932                 if((old_stash = GvHV(dstr)))
3933                     /* Make sure we do not lose it early. */
3934                     SvREFCNT_inc_simple_void_NN(
3935                      sv_2mortal((SV *)old_stash)
3936                     );
3937             }
3938         }
3939
3940         SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
3941     }
3942
3943     /* freeing dstr's GP might free sstr (e.g. *x = $x),
3944      * so temporarily protect it */
3945     ENTER;
3946     SAVEFREESV(SvREFCNT_inc_simple_NN(sstr));
3947     gp_free(MUTABLE_GV(dstr));
3948     GvINTRO_off(dstr);          /* one-shot flag */
3949     GvGP_set(dstr, gp_ref(GvGP(sstr)));
3950     LEAVE;
3951
3952     if (SvTAINTED(sstr))
3953         SvTAINT(dstr);
3954     if (GvIMPORTED(dstr) != GVf_IMPORTED
3955         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3956         {
3957             GvIMPORTED_on(dstr);
3958         }
3959     GvMULTI_on(dstr);
3960     if(mro_changes == 2) {
3961       if (GvAV((const GV *)sstr)) {
3962         MAGIC *mg;
3963         SV * const sref = (SV *)GvAV((const GV *)dstr);
3964         if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3965             if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3966                 AV * const ary = newAV();
3967                 av_push(ary, mg->mg_obj); /* takes the refcount */
3968                 mg->mg_obj = (SV *)ary;
3969             }
3970             av_push((AV *)mg->mg_obj, SvREFCNT_inc_simple_NN(dstr));
3971         }
3972         else sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
3973       }
3974       mro_isa_changed_in(GvSTASH(dstr));
3975     }
3976     else if(mro_changes == 3) {
3977         HV * const stash = GvHV(dstr);
3978         if(old_stash ? (HV *)HvENAME_get(old_stash) : stash)
3979             mro_package_moved(
3980                 stash, old_stash,
3981                 (GV *)dstr, 0
3982             );
3983     }
3984     else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
3985     if (GvIO(dstr) && dtype == SVt_PVGV) {
3986         DEBUG_o(Perl_deb(aTHX_
3987                         "glob_assign_glob clearing PL_stashcache\n"));
3988         /* It's a cache. It will rebuild itself quite happily.
3989            It's a lot of effort to work out exactly which key (or keys)
3990            might be invalidated by the creation of the this file handle.
3991          */
3992         hv_clear(PL_stashcache);
3993     }
3994     return;
3995 }
3996
3997 void
3998 Perl_gv_setref(pTHX_ SV *const dstr, SV *const sstr)
3999 {
4000     SV * const sref = SvRV(sstr);
4001     SV *dref;
4002     const int intro = GvINTRO(dstr);
4003     SV **location;
4004     U8 import_flag = 0;
4005     const U32 stype = SvTYPE(sref);
4006
4007     PERL_ARGS_ASSERT_GV_SETREF;
4008
4009     if (intro) {
4010         GvINTRO_off(dstr);      /* one-shot flag */
4011         GvLINE(dstr) = CopLINE(PL_curcop);
4012         GvEGV(dstr) = MUTABLE_GV(dstr);
4013     }
4014     GvMULTI_on(dstr);
4015     switch (stype) {
4016     case SVt_PVCV:
4017         location = (SV **) &(GvGP(dstr)->gp_cv); /* XXX bypassing GvCV_set */
4018         import_flag = GVf_IMPORTED_CV;
4019         goto common;
4020     case SVt_PVHV:
4021         location = (SV **) &GvHV(dstr);
4022         import_flag = GVf_IMPORTED_HV;
4023         goto common;
4024     case SVt_PVAV:
4025         location = (SV **) &GvAV(dstr);
4026         import_flag = GVf_IMPORTED_AV;
4027         goto common;
4028     case SVt_PVIO:
4029         location = (SV **) &GvIOp(dstr);
4030         goto common;
4031     case SVt_PVFM:
4032         location = (SV **) &GvFORM(dstr);
4033         goto common;
4034     default:
4035         location = &GvSV(dstr);
4036         import_flag = GVf_IMPORTED_SV;
4037     common:
4038         if (intro) {
4039             if (stype == SVt_PVCV) {
4040                 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
4041                 if (GvCVGEN(dstr)) {
4042                     SvREFCNT_dec(GvCV(dstr));
4043                     GvCV_set(dstr, NULL);
4044                     GvCVGEN(dstr) = 0; /* Switch off cacheness. */
4045                 }
4046             }
4047             /* SAVEt_GVSLOT takes more room on the savestack and has more
4048                overhead in leave_scope than SAVEt_GENERIC_SV.  But for CVs
4049                leave_scope needs access to the GV so it can reset method
4050                caches.  We must use SAVEt_GVSLOT whenever the type is
4051                SVt_PVCV, even if the stash is anonymous, as the stash may
4052                gain a name somehow before leave_scope. */
4053             if (stype == SVt_PVCV) {
4054                 /* There is no save_pushptrptrptr.  Creating it for this
4055                    one call site would be overkill.  So inline the ss add
4056                    routines here. */
4057                 dSS_ADD;
4058                 SS_ADD_PTR(dstr);
4059                 SS_ADD_PTR(location);
4060                 SS_ADD_PTR(SvREFCNT_inc(*location));
4061                 SS_ADD_UV(SAVEt_GVSLOT);
4062                 SS_ADD_END(4);
4063             }
4064             else SAVEGENERICSV(*location);
4065         }
4066         dref = *location;
4067         if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
4068             CV* const cv = MUTABLE_CV(*location);
4069             if (cv) {
4070                 if (!GvCVGEN((const GV *)dstr) &&
4071                     (CvROOT(cv) || CvXSUB(cv)) &&
4072                     /* redundant check that avoids creating the extra SV
4073                        most of the time: */
4074                     (CvCONST(cv) || ckWARN(WARN_REDEFINE)))
4075                     {
4076                         SV * const new_const_sv =
4077                             CvCONST((const CV *)sref)
4078                                  ? cv_const_sv((const CV *)sref)
4079                                  : NULL;
4080                         HV * const stash = GvSTASH((const GV *)dstr);
4081                         report_redefined_cv(
4082                            sv_2mortal(
4083                              stash
4084                                ? Perl_newSVpvf(aTHX_
4085                                     "%" HEKf "::%" HEKf,
4086                                     HEKfARG(HvNAME_HEK(stash)),
4087                                     HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr))))
4088                                : Perl_newSVpvf(aTHX_
4089                                     "%" HEKf,
4090                                     HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr))))
4091                            ),
4092                            cv,
4093                            CvCONST((const CV *)sref) ? &new_const_sv : NULL
4094                         );
4095                     }
4096                 if (!intro)
4097                     cv_ckproto_len_flags(cv, (const GV *)dstr,
4098                                    SvPOK(sref) ? CvPROTO(sref) : NULL,
4099                                    SvPOK(sref) ? CvPROTOLEN(sref) : 0,
4100                                    SvPOK(sref) ? SvUTF8(sref) : 0);
4101             }
4102             GvCVGEN(dstr) = 0; /* Switch off cacheness. */
4103             GvASSUMECV_on(dstr);
4104             if(GvSTASH(dstr)) { /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
4105                 if (intro && GvREFCNT(dstr) > 1) {
4106                     /* temporary remove extra savestack's ref */
4107                     --GvREFCNT(dstr);
4108                     gv_method_changed(dstr);
4109                     ++GvREFCNT(dstr);
4110                 }
4111                 else gv_method_changed(dstr);
4112             }
4113         }
4114         *location = SvREFCNT_inc_simple_NN(sref);
4115         if (import_flag && !(GvFLAGS(dstr) & import_flag)
4116             && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
4117             GvFLAGS(dstr) |= import_flag;
4118         }
4119
4120         if (stype == SVt_PVHV) {
4121             const char * const name = GvNAME((GV*)dstr);
4122             const STRLEN len = GvNAMELEN(dstr);
4123             if (
4124                 (
4125                    (len > 1 && name[len-2] == ':' && name[len-1] == ':')
4126                 || (len == 1 && name[0] == ':')
4127                 )
4128              && (!dref || HvENAME_get(dref))
4129             ) {
4130                 mro_package_moved(
4131                     (HV *)sref, (HV *)dref,
4132                     (GV *)dstr, 0
4133                 );
4134             }
4135         }
4136         else if (
4137             stype == SVt_PVAV && sref != dref
4138          && strEQ(GvNAME((GV*)dstr), "ISA")
4139          /* The stash may have been detached from the symbol table, so
4140             check its name before doing anything. */
4141          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
4142         ) {
4143             MAGIC *mg;
4144             MAGIC * const omg = dref && SvSMAGICAL(dref)
4145                                  ? mg_find(dref, PERL_MAGIC_isa)
4146                                  : NULL;
4147             if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
4148                 if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
4149                     AV * const ary = newAV();
4150                     av_push(ary, mg->mg_obj); /* takes the refcount */
4151                     mg->mg_obj = (SV *)ary;
4152                 }
4153                 if (omg) {
4154                     if (SvTYPE(omg->mg_obj) == SVt_PVAV) {
4155                         SV **svp = AvARRAY((AV *)omg->mg_obj);
4156                         I32 items = AvFILLp((AV *)omg->mg_obj) + 1;
4157                         while (items--)
4158                             av_push(
4159                              (AV *)mg->mg_obj,
4160                              SvREFCNT_inc_simple_NN(*svp++)
4161                             );
4162                     }
4163                     else
4164                         av_push(
4165                          (AV *)mg->mg_obj,
4166                          SvREFCNT_inc_simple_NN(omg->mg_obj)
4167                         );
4168                 }
4169                 else
4170                     av_push((AV *)mg->mg_obj,SvREFCNT_inc_simple_NN(dstr));
4171             }
4172             else
4173             {
4174                 SSize_t i;
4175                 sv_magic(
4176                  sref, omg ? omg->mg_obj : dstr, PERL_MAGIC_isa, NULL, 0
4177                 );
4178                 for (i = 0; i <= AvFILL(sref); ++i) {
4179                     SV **elem = av_fetch ((AV*)sref, i, 0);
4180                     if (elem) {
4181                         sv_magic(
4182                           *elem, sref, PERL_MAGIC_isaelem, NULL, i
4183                         );
4184                     }
4185                 }
4186                 mg = mg_find(sref, PERL_MAGIC_isa);
4187             }
4188             /* Since the *ISA assignment could have affected more than
4189                one stash, don't call mro_isa_changed_in directly, but let
4190                magic_clearisa do it for us, as it already has the logic for
4191                dealing with globs vs arrays of globs. */
4192             assert(mg);
4193             Perl_magic_clearisa(aTHX_ NULL, mg);
4194         }
4195         else if (stype == SVt_PVIO) {
4196             DEBUG_o(Perl_deb(aTHX_ "gv_setref clearing PL_stashcache\n"));
4197             /* It's a cache. It will rebuild itself quite happily.
4198                It's a lot of effort to work out exactly which key (or keys)
4199                might be invalidated by the creation of the this file handle.
4200             */
4201             hv_clear(PL_stashcache);
4202         }
4203         break;
4204     }
4205     if (!intro) SvREFCNT_dec(dref);
4206     if (SvTAINTED(sstr))
4207         SvTAINT(dstr);
4208     return;
4209 }
4210
4211
4212
4213
4214 #ifdef PERL_DEBUG_READONLY_COW
4215 # include <sys/mman.h>
4216
4217 # ifndef PERL_MEMORY_DEBUG_HEADER_SIZE
4218 #  define PERL_MEMORY_DEBUG_HEADER_SIZE 0
4219 # endif
4220
4221 void
4222 Perl_sv_buf_to_ro(pTHX_ SV *sv)
4223 {
4224     struct perl_memory_debug_header * const header =
4225         (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4226     const MEM_SIZE len = header->size;
4227     PERL_ARGS_ASSERT_SV_BUF_TO_RO;
4228 # ifdef PERL_TRACK_MEMPOOL
4229     if (!header->readonly) header->readonly = 1;
4230 # endif
4231     if (mprotect(header, len, PROT_READ))
4232         Perl_warn(aTHX_ "mprotect RW for COW string %p %lu failed with %d",
4233                          header, len, errno);
4234 }
4235
4236 static void
4237 S_sv_buf_to_rw(pTHX_ SV *sv)
4238 {
4239     struct perl_memory_debug_header * const header =
4240         (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4241     const MEM_SIZE len = header->size;
4242     PERL_ARGS_ASSERT_SV_BUF_TO_RW;
4243     if (mprotect(header, len, PROT_READ|PROT_WRITE))
4244         Perl_warn(aTHX_ "mprotect for COW string %p %lu failed with %d",
4245                          header, len, errno);
4246 # ifdef PERL_TRACK_MEMPOOL
4247     header->readonly = 0;
4248 # endif
4249 }
4250
4251 #else
4252 # define sv_buf_to_ro(sv)       NOOP
4253 # define sv_buf_to_rw(sv)       NOOP
4254 #endif
4255
4256 void
4257 Perl_sv_setsv_flags(pTHX_ SV *dstr, SV* sstr, const I32 flags)
4258 {
4259     U32 sflags;
4260     int dtype;
4261     svtype stype;
4262     unsigned int both_type;
4263
4264     PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
4265
4266     if (UNLIKELY( sstr == dstr ))
4267         return;
4268
4269     if (UNLIKELY( !sstr ))
4270         sstr = &PL_sv_undef;
4271
4272     stype = SvTYPE(sstr);
4273     dtype = SvTYPE(dstr);
4274     both_type = (stype | dtype);
4275
4276     /* with these values, we can check that both SVs are NULL/IV (and not
4277      * freed) just by testing the or'ed types */
4278     STATIC_ASSERT_STMT(SVt_NULL == 0);
4279     STATIC_ASSERT_STMT(SVt_IV   == 1);
4280     if (both_type <= 1) {
4281         /* both src and dst are UNDEF/IV/RV, so we can do a lot of
4282          * special-casing */
4283         U32 sflags;
4284         U32 new_dflags;
4285         SV *old_rv = NULL;
4286
4287         /* minimal subset of SV_CHECK_THINKFIRST_COW_DROP(dstr) */
4288         if (SvREADONLY(dstr))
4289             Perl_croak_no_modify();
4290         if (SvROK(dstr)) {
4291             if (SvWEAKREF(dstr))
4292                 sv_unref_flags(dstr, 0);
4293             else
4294                 old_rv = SvRV(dstr);
4295         }
4296
4297         assert(!SvGMAGICAL(sstr));
4298         assert(!SvGMAGICAL(dstr));
4299
4300         sflags = SvFLAGS(sstr);
4301         if (sflags & (SVf_IOK|SVf_ROK)) {
4302             SET_SVANY_FOR_BODYLESS_IV(dstr);
4303             new_dflags = SVt_IV;
4304
4305             if (sflags & SVf_ROK) {
4306                 dstr->sv_u.svu_rv = SvREFCNT_inc(SvRV(sstr));
4307                 new_dflags |= SVf_ROK;
4308             }
4309             else {
4310                 /* both src and dst are <= SVt_IV, so sv_any points to the
4311                  * head; so access the head directly
4312                  */
4313                 assert(    &(sstr->sv_u.svu_iv)
4314                         == &(((XPVIV*) SvANY(sstr))->xiv_iv));
4315                 assert(    &(dstr->sv_u.svu_iv)
4316                         == &(((XPVIV*) SvANY(dstr))->xiv_iv));
4317                 dstr->sv_u.svu_iv = sstr->sv_u.svu_iv;
4318                 new_dflags |= (SVf_IOK|SVp_IOK|(sflags & SVf_IVisUV));
4319             }
4320         }
4321         else {
4322             new_dflags = dtype; /* turn off everything except the type */
4323         }
4324         SvFLAGS(dstr) = new_dflags;
4325         SvREFCNT_dec(old_rv);
4326
4327         return;
4328     }
4329
4330     if (UNLIKELY(both_type == SVTYPEMASK)) {
4331         if (SvIS_FREED(dstr)) {
4332             Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
4333                        " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
4334         }
4335         if (SvIS_FREED(sstr)) {
4336             Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
4337                        (void*)sstr, (void*)dstr);
4338         }
4339     }
4340
4341
4342
4343     SV_CHECK_THINKFIRST_COW_DROP(dstr);
4344     dtype = SvTYPE(dstr); /* THINKFIRST may have changed type */
4345
4346     /* There's a lot of redundancy below but we're going for speed here */
4347
4348     switch (stype) {
4349     case SVt_NULL:
4350       undef_sstr:
4351         if (LIKELY( dtype != SVt_PVGV && dtype != SVt_PVLV )) {
4352             (void)SvOK_off(dstr);
4353             return;
4354         }
4355         break;
4356     case SVt_IV:
4357         if (SvIOK(sstr)) {
4358             switch (dtype) {
4359             case SVt_NULL:
4360                 /* For performance, we inline promoting to type SVt_IV. */
4361                 /* We're starting from SVt_NULL, so provided that define is
4362                  * actual 0, we don't have to unset any SV type flags
4363                  * to promote to SVt_IV. */
4364                 STATIC_ASSERT_STMT(SVt_NULL == 0);
4365                 SET_SVANY_FOR_BODYLESS_IV(dstr);
4366                 SvFLAGS(dstr) |= SVt_IV;
4367                 break;
4368             case SVt_NV:
4369             case SVt_PV:
4370                 sv_upgrade(dstr, SVt_PVIV);
4371                 break;
4372             case SVt_PVGV:
4373             case SVt_PVLV:
4374                 goto end_of_first_switch;
4375             }
4376             (void)SvIOK_only(dstr);
4377             SvIV_set(dstr,  SvIVX(sstr));
4378             if (SvIsUV(sstr))
4379                 SvIsUV_on(dstr);
4380             /* SvTAINTED can only be true if the SV has taint magic, which in
4381                turn means that the SV type is PVMG (or greater). This is the
4382                case statement for SVt_IV, so this cannot be true (whatever gcov
4383                may say).  */
4384             assert(!SvTAINTED(sstr));
4385             return;
4386         }
4387         if (!SvROK(sstr))
4388             goto undef_sstr;
4389         if (dtype < SVt_PV && dtype != SVt_IV)
4390             sv_upgrade(dstr, SVt_IV);
4391         break;
4392
4393     case SVt_NV:
4394         if (LIKELY( SvNOK(sstr) )) {
4395             switch (dtype) {
4396             case SVt_NULL:
4397             case SVt_IV:
4398                 sv_upgrade(dstr, SVt_NV);
4399                 break;
4400             case SVt_PV:
4401             case SVt_PVIV:
4402                 sv_upgrade(dstr, SVt_PVNV);
4403                 break;
4404             case SVt_PVGV:
4405             case SVt_PVLV:
4406                 goto end_of_first_switch;
4407             }
4408             SvNV_set(dstr, SvNVX(sstr));
4409             (void)SvNOK_only(dstr);
4410             /* SvTAINTED can only be true if the SV has taint magic, which in
4411                turn means that the SV type is PVMG (or greater). This is the
4412                case statement for SVt_NV, so this cannot be true (whatever gcov
4413                may say).  */
4414             assert(!SvTAINTED(sstr));
4415             return;
4416         }
4417         goto undef_sstr;
4418
4419     case SVt_PV:
4420         if (dtype < SVt_PV)
4421             sv_upgrade(dstr, SVt_PV);
4422         break;
4423     case SVt_PVIV:
4424         if (dtype < SVt_PVIV)
4425             sv_upgrade(dstr, SVt_PVIV);
4426         break;
4427     case SVt_PVNV:
4428         if (dtype < SVt_PVNV)
4429             sv_upgrade(dstr, SVt_PVNV);
4430         break;
4431     default:
4432         {
4433         const char * const type = sv_reftype(sstr,0);
4434         if (PL_op)
4435             /* diag_listed_as: Bizarre copy of %s */
4436             Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
4437         else
4438             Perl_croak(aTHX_ "Bizarre copy of %s", type);
4439         }
4440         NOT_REACHED; /* NOTREACHED */
4441
4442     case SVt_REGEXP:
4443       upgregexp:
4444         if (dtype < SVt_REGEXP)
4445         {
4446             if (dtype >= SVt_PV) {
4447                 SvPV_free(dstr);
4448                 SvPV_set(dstr, 0);
4449                 SvLEN_set(dstr, 0);
4450                 SvCUR_set(dstr, 0);
4451             }
4452             sv_upgrade(dstr, SVt_REGEXP);
4453         }
4454         break;
4455
4456         case SVt_INVLIST:
4457     case SVt_PVLV:
4458     case SVt_PVGV:
4459     case SVt_PVMG:
4460         if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
4461             mg_get(sstr);
4462             if (SvTYPE(sstr) != stype)
4463                 stype = SvTYPE(sstr);
4464         }
4465         if (isGV_with_GP(sstr) && dtype <= SVt_PVLV) {
4466                     glob_assign_glob(dstr, sstr, dtype);
4467                     return;
4468         }
4469         if (stype == SVt_PVLV)
4470         {
4471             if (isREGEXP(sstr)) goto upgregexp;
4472             SvUPGRADE(dstr, SVt_PVNV);
4473         }
4474         else
4475             SvUPGRADE(dstr, (svtype)stype);
4476     }
4477  end_of_first_switch:
4478
4479     /* dstr may have been upgraded.  */
4480     dtype = SvTYPE(dstr);
4481     sflags = SvFLAGS(sstr);
4482
4483     if (UNLIKELY( dtype == SVt_PVCV )) {
4484         /* Assigning to a subroutine sets the prototype.  */
4485         if (SvOK(sstr)) {
4486             STRLEN len;
4487             const char *const ptr = SvPV_const(sstr, len);
4488
4489             SvGROW(dstr, len + 1);
4490             Copy(ptr, SvPVX(dstr), len + 1, char);
4491             SvCUR_set(dstr, len);
4492             SvPOK_only(dstr);
4493             SvFLAGS(dstr) |= sflags & SVf_UTF8;
4494             CvAUTOLOAD_off(dstr);
4495         } else {
4496             SvOK_off(dstr);
4497         }
4498     }
4499     else if (UNLIKELY(dtype == SVt_PVAV || dtype == SVt_PVHV
4500              || dtype == SVt_PVFM))
4501     {
4502         const char * const type = sv_reftype(dstr,0);
4503         if (PL_op)
4504             /* diag_listed_as: Cannot copy to %s */
4505             Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
4506         else
4507             Perl_croak(aTHX_ "Cannot copy to %s", type);
4508     } else if (sflags & SVf_ROK) {
4509         if (isGV_with_GP(dstr)
4510             && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
4511             sstr = SvRV(sstr);
4512             if (sstr == dstr) {
4513                 if (GvIMPORTED(dstr) != GVf_IMPORTED
4514                     && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4515                 {
4516                     GvIMPORTED_on(dstr);
4517                 }
4518                 GvMULTI_on(dstr);
4519                 return;
4520             }
4521             glob_assign_glob(dstr, sstr, dtype);
4522             return;
4523         }
4524
4525         if (dtype >= SVt_PV) {
4526             if (isGV_with_GP(dstr)) {
4527                 gv_setref(dstr, sstr);
4528                 return;
4529             }
4530             if (SvPVX_const(dstr)) {
4531                 SvPV_free(dstr);
4532                 SvLEN_set(dstr, 0);
4533                 SvCUR_set(dstr, 0);
4534             }
4535         }
4536         (void)SvOK_off(dstr);
4537         SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4538         SvFLAGS(dstr) |= sflags & SVf_ROK;
4539         assert(!(sflags & SVp_NOK));
4540         assert(!(sflags & SVp_IOK));
4541         assert(!(sflags & SVf_NOK));
4542         assert(!(sflags & SVf_IOK));
4543     }
4544     else if (isGV_with_GP(dstr)) {
4545         if (!(sflags & SVf_OK)) {
4546             Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4547                            "Undefined value assigned to typeglob");
4548         }
4549         else {
4550             GV *gv = gv_fetchsv_nomg(sstr, GV_ADD, SVt_PVGV);
4551             if (dstr != (const SV *)gv) {
4552                 const char * const name = GvNAME((const GV *)dstr);
4553                 const STRLEN len = GvNAMELEN(dstr);
4554                 HV *old_stash = NULL;
4555                 bool reset_isa = FALSE;
4556                 if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
4557                  || (len == 1 && name[0] == ':')) {
4558                     /* Set aside the old stash, so we can reset isa caches
4559                        on its subclasses. */
4560                     if((old_stash = GvHV(dstr))) {
4561                         /* Make sure we do not lose it early. */
4562                         SvREFCNT_inc_simple_void_NN(
4563                          sv_2mortal((SV *)old_stash)
4564                         );
4565                     }
4566                     reset_isa = TRUE;
4567                 }
4568
4569                 if (GvGP(dstr)) {
4570                     SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
4571                     gp_free(MUTABLE_GV(dstr));
4572                 }
4573                 GvGP_set(dstr, gp_ref(GvGP(gv)));
4574
4575                 if (reset_isa) {
4576                     HV * const stash = GvHV(dstr);
4577                     if(
4578                         old_stash ? (HV *)HvENAME_get(old_stash) : stash
4579                     )
4580                         mro_package_moved(
4581                          stash, old_stash,
4582                          (GV *)dstr, 0
4583                         );
4584                 }
4585             }
4586         }
4587     }
4588     else if ((dtype == SVt_REGEXP || dtype == SVt_PVLV)
4589           && (stype == SVt_REGEXP || isREGEXP(sstr))) {
4590         reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4591     }
4592     else if (sflags & SVp_POK) {
4593         const STRLEN cur = SvCUR(sstr);
4594         const STRLEN len = SvLEN(sstr);
4595
4596         /*
4597          * We have three basic ways to copy the string:
4598          *
4599          *  1. Swipe
4600          *  2. Copy-on-write
4601          *  3. Actual copy
4602          * 
4603          * Which we choose is based on various factors.  The following
4604          * things are listed in order of speed, fastest to slowest:
4605          *  - Swipe
4606          *  - Copying a short string
4607          *  - Copy-on-write bookkeeping
4608          *  - malloc
4609          *  - Copying a long string
4610          * 
4611          * We swipe the string (steal the string buffer) if the SV on the
4612          * rhs is about to be freed anyway (TEMP and refcnt==1).  This is a
4613          * big win on long strings.  It should be a win on short strings if
4614          * SvPVX_const(dstr) has to be allocated.  If not, it should not 
4615          * slow things down, as SvPVX_const(sstr) would have been freed
4616          * soon anyway.
4617          * 
4618          * We also steal the buffer from a PADTMP (operator target) if it
4619          * is â€˜long enough’.  For short strings, a swipe does not help
4620          * here, as it causes more malloc calls the next time the target
4621          * is used.  Benchmarks show that even if SvPVX_const(dstr) has to
4622          * be allocated it is still not worth swiping PADTMPs for short
4623          * strings, as the savings here are small.
4624          * 
4625          * If swiping is not an option, then we see whether it is
4626          * worth using copy-on-write.  If the lhs already has a buf-
4627          * fer big enough and the string is short, we skip it and fall back
4628          * to method 3, since memcpy is faster for short strings than the
4629          * later bookkeeping overhead that copy-on-write entails.
4630
4631          * If the rhs is not a copy-on-write string yet, then we also
4632          * consider whether the buffer is too large relative to the string
4633          * it holds.  Some operations such as readline allocate a large
4634          * buffer in the expectation of reusing it.  But turning such into
4635          * a COW buffer is counter-productive because it increases memory
4636          * usage by making readline allocate a new large buffer the sec-
4637          * ond time round.  So, if the buffer is too large, again, we use
4638          * method 3 (copy).
4639          * 
4640          * Finally, if there is no buffer on the left, or the buffer is too 
4641          * small, then we use copy-on-write and make both SVs share the
4642          * string buffer.
4643          *
4644          */
4645
4646         /* Whichever path we take through the next code, we want this true,
4647            and doing it now facilitates the COW check.  */
4648         (void)SvPOK_only(dstr);
4649
4650         if (
4651                  (              /* Either ... */
4652                                 /* slated for free anyway (and not COW)? */
4653                     (sflags & (SVs_TEMP|SVf_IsCOW)) == SVs_TEMP
4654                                 /* or a swipable TARG */
4655                  || ((sflags &
4656                            (SVs_PADTMP|SVf_READONLY|SVf_PROTECT|SVf_IsCOW))
4657                        == SVs_PADTMP
4658                                 /* whose buffer is worth stealing */
4659                      && CHECK_COWBUF_THRESHOLD(cur,len)
4660                     )
4661                  ) &&
4662                  !(sflags & SVf_OOK) &&   /* and not involved in OOK hack? */
4663                  (!(flags & SV_NOSTEAL)) &&
4664                                         /* and we're allowed to steal temps */
4665                  SvREFCNT(sstr) == 1 &&   /* and no other references to it? */
4666                  len)             /* and really is a string */
4667         {       /* Passes the swipe test.  */
4668             if (SvPVX_const(dstr))      /* we know that dtype >= SVt_PV */
4669                 SvPV_free(dstr);
4670             SvPV_set(dstr, SvPVX_mutable(sstr));
4671             SvLEN_set(dstr, SvLEN(sstr));
4672             SvCUR_set(dstr, SvCUR(sstr));
4673
4674             SvTEMP_off(dstr);
4675             (void)SvOK_off(sstr);       /* NOTE: nukes most SvFLAGS on sstr */
4676             SvPV_set(sstr, NULL);
4677             SvLEN_set(sstr, 0);
4678             SvCUR_set(sstr, 0);
4679             SvTEMP_off(sstr);
4680         }
4681         else if (flags & SV_COW_SHARED_HASH_KEYS
4682               &&
4683 #ifdef PERL_COPY_ON_WRITE
4684                  (sflags & SVf_IsCOW
4685                    ? (!len ||
4686                        (  (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
4687                           /* If this is a regular (non-hek) COW, only so
4688                              many COW "copies" are possible. */
4689                        && CowREFCNT(sstr) != SV_COW_REFCNT_MAX  ))
4690                    : (  (sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4691                      && !(SvFLAGS(dstr) & SVf_BREAK)
4692                      && CHECK_COW_THRESHOLD(cur,len) && cur+1 < len
4693                      && (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
4694                     ))
4695 #else
4696                  sflags & SVf_IsCOW
4697               && !(SvFLAGS(dstr) & SVf_BREAK)
4698 #endif
4699             ) {
4700             /* Either it's a shared hash key, or it's suitable for
4701                copy-on-write.  */
4702             if (DEBUG_C_TEST) {
4703                 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4704                 sv_dump(sstr);
4705                 sv_dump(dstr);
4706             }
4707 #ifdef PERL_ANY_COW
4708             if (!(sflags & SVf_IsCOW)) {
4709                     SvIsCOW_on(sstr);
4710                     CowREFCNT(sstr) = 0;
4711             }
4712 #endif
4713             if (SvPVX_const(dstr)) {    /* we know that dtype >= SVt_PV */
4714                 SvPV_free(dstr);
4715             }
4716
4717 #ifdef PERL_ANY_COW
4718             if (len) {
4719                     if (sflags & SVf_IsCOW) {
4720                         sv_buf_to_rw(sstr);
4721                     }
4722                     CowREFCNT(sstr)++;
4723                     SvPV_set(dstr, SvPVX_mutable(sstr));
4724                     sv_buf_to_ro(sstr);
4725             } else
4726 #endif
4727             {
4728                     /* SvIsCOW_shared_hash */
4729                     DEBUG_C(PerlIO_printf(Perl_debug_log,
4730                                           "Copy on write: Sharing hash\n"));
4731
4732                     assert (SvTYPE(dstr) >= SVt_PV);
4733                     SvPV_set(dstr,
4734                              HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
4735             }
4736             SvLEN_set(dstr, len);
4737             SvCUR_set(dstr, cur);
4738             SvIsCOW_on(dstr);
4739         } else {
4740             /* Failed the swipe test, and we cannot do copy-on-write either.
4741                Have to copy the string.  */
4742             SvGROW(dstr, cur + 1);      /* inlined from sv_setpvn */
4743             Move(SvPVX_const(sstr),SvPVX(dstr),cur,char);
4744             SvCUR_set(dstr, cur);
4745             *SvEND(dstr) = '\0';
4746         }
4747         if (sflags & SVp_NOK) {
4748             SvNV_set(dstr, SvNVX(sstr));
4749         }
4750         if (sflags & SVp_IOK) {
4751             SvIV_set(dstr, SvIVX(sstr));
4752             if (sflags & SVf_IVisUV)
4753                 SvIsUV_on(dstr);
4754         }
4755         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4756         {
4757             const MAGIC * const smg = SvVSTRING_mg(sstr);
4758             if (smg) {
4759                 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4760                          smg->mg_ptr, smg->mg_len);
4761                 SvRMAGICAL_on(dstr);
4762             }
4763         }
4764     }
4765     else if (sflags & (SVp_IOK|SVp_NOK)) {
4766         (void)SvOK_off(dstr);
4767         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
4768         if (sflags & SVp_IOK) {
4769             /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
4770             SvIV_set(dstr, SvIVX(sstr));
4771         }
4772         if (sflags & SVp_NOK) {
4773             SvNV_set(dstr, SvNVX(sstr));
4774         }
4775     }
4776     else {
4777         if (isGV_with_GP(sstr)) {
4778             gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
4779         }
4780         else
4781             (void)SvOK_off(dstr);
4782     }
4783     if (SvTAINTED(sstr))
4784         SvTAINT(dstr);
4785 }
4786
4787
4788 /*
4789 =for apidoc sv_set_undef
4790
4791 Equivalent to C<sv_setsv(sv, &PL_sv_undef)>, but more efficient.
4792 Doesn't handle set magic.
4793
4794 The perl equivalent is C<$sv = undef;>. Note that it doesn't free any string
4795 buffer, unlike C<undef $sv>.
4796
4797 Introduced in perl 5.25.12.
4798
4799 =cut
4800 */
4801
4802 void
4803 Perl_sv_set_undef(pTHX_ SV *sv)
4804 {
4805     U32 type = SvTYPE(sv);
4806
4807     PERL_ARGS_ASSERT_SV_SET_UNDEF;
4808
4809     /* shortcut, NULL, IV, RV */
4810
4811     if (type <= SVt_IV) {
4812         assert(!SvGMAGICAL(sv));
4813         if (SvREADONLY(sv)) {
4814             /* does undeffing PL_sv_undef count as modifying a read-only
4815              * variable? Some XS code does this */
4816             if (sv == &PL_sv_undef)
4817                 return;
4818             Perl_croak_no_modify();
4819         }
4820
4821         if (SvROK(sv)) {
4822             if (SvWEAKREF(sv))
4823                 sv_unref_flags(sv, 0);
4824             else {
4825                 SV *rv = SvRV(sv);
4826                 SvFLAGS(sv) = type; /* quickly turn off all flags */
4827                 SvREFCNT_dec_NN(rv);
4828                 return;
4829             }
4830         }
4831         SvFLAGS(sv) = type; /* quickly turn off all flags */
4832         return;
4833     }
4834
4835     if (SvIS_FREED(sv))
4836         Perl_croak(aTHX_ "panic: attempt to undefine a freed scalar %p",
4837             (void *)sv);
4838
4839     SV_CHECK_THINKFIRST_COW_DROP(sv);
4840
4841     if (isGV_with_GP(sv))
4842         Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4843                        "Undefined value assigned to typeglob");
4844     else
4845         SvOK_off(sv);
4846 }
4847
4848
4849
4850 /*
4851 =for apidoc sv_setsv_mg
4852
4853 Like C<sv_setsv>, but also handles 'set' magic.
4854
4855 =cut
4856 */
4857
4858 void
4859 Perl_sv_setsv_mg(pTHX_ SV *const dstr, SV *const sstr)
4860 {
4861     PERL_ARGS_ASSERT_SV_SETSV_MG;
4862
4863     sv_setsv(dstr,sstr);
4864     SvSETMAGIC(dstr);
4865 }
4866
4867 #ifdef PERL_ANY_COW
4868 #  define SVt_COW SVt_PV
4869 SV *
4870 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4871 {
4872     STRLEN cur = SvCUR(sstr);
4873     STRLEN len = SvLEN(sstr);
4874     char *new_pv;
4875 #if defined(PERL_DEBUG_READONLY_COW) && defined(PERL_COPY_ON_WRITE)
4876     const bool already = cBOOL(SvIsCOW(sstr));
4877 #endif
4878
4879     PERL_ARGS_ASSERT_SV_SETSV_COW;
4880
4881     if (DEBUG_C_TEST) {
4882         PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4883                       (void*)sstr, (void*)dstr);
4884         sv_dump(sstr);
4885         if (dstr)
4886                     sv_dump(dstr);
4887     }
4888
4889     if (dstr) {
4890         if (SvTHINKFIRST(dstr))
4891             sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4892         else if (SvPVX_const(dstr))
4893             Safefree(SvPVX_mutable(dstr));
4894     }
4895     else
4896         new_SV(dstr);
4897     SvUPGRADE(dstr, SVt_COW);
4898
4899     assert (SvPOK(sstr));
4900     assert (SvPOKp(sstr));
4901
4902     if (SvIsCOW(sstr)) {
4903
4904         if (SvLEN(sstr) == 0) {
4905             /* source is a COW shared hash key.  */
4906             DEBUG_C(PerlIO_printf(Perl_debug_log,
4907                                   "Fast copy on write: Sharing hash\n"));
4908             new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
4909             goto common_exit;
4910         }
4911         assert(SvCUR(sstr)+1 < SvLEN(sstr));
4912         assert(CowREFCNT(sstr) < SV_COW_REFCNT_MAX);
4913     } else {
4914         assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4915         SvUPGRADE(sstr, SVt_COW);
4916         SvIsCOW_on(sstr);
4917         DEBUG_C(PerlIO_printf(Perl_debug_log,
4918                               "Fast copy on write: Converting sstr to COW\n"));
4919         CowREFCNT(sstr) = 0;    
4920     }
4921 #  ifdef PERL_DEBUG_READONLY_COW
4922     if (already) sv_buf_to_rw(sstr);
4923 #  endif
4924     CowREFCNT(sstr)++;  
4925     new_pv = SvPVX_mutable(sstr);
4926     sv_buf_to_ro(sstr);
4927
4928   common_exit:
4929     SvPV_set(dstr, new_pv);
4930     SvFLAGS(dstr) = (SVt_COW|SVf_POK|SVp_POK|SVf_IsCOW);
4931     if (SvUTF8(sstr))
4932         SvUTF8_on(dstr);
4933     SvLEN_set(dstr, len);
4934     SvCUR_set(dstr, cur);
4935     if (DEBUG_C_TEST) {
4936         sv_dump(dstr);
4937     }
4938     return dstr;
4939 }
4940 #endif
4941
4942 /*
4943 =for apidoc sv_setpv_bufsize
4944
4945 Sets the SV to be a string of cur bytes length, with at least
4946 len bytes available. Ensures that there is a null byte at SvEND.
4947 Returns a char * pointer to the SvPV buffer.
4948
4949 =cut
4950 */
4951
4952 char *
4953 Perl_sv_setpv_bufsize(pTHX_ SV *const sv, const STRLEN cur, const STRLEN len)
4954 {
4955     char *pv;
4956
4957     PERL_ARGS_ASSERT_SV_SETPV_BUFSIZE;
4958
4959     SV_CHECK_THINKFIRST_COW_DROP(sv);
4960     SvUPGRADE(sv, SVt_PV);
4961     pv = SvGROW(sv, len + 1);
4962     SvCUR_set(sv, cur);
4963     *(SvEND(sv))= '\0';
4964     (void)SvPOK_only_UTF8(sv);                /* validate pointer */
4965
4966     SvTAINT(sv);
4967     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4968     return pv;
4969 }
4970
4971 /*
4972 =for apidoc sv_setpvn
4973
4974 Copies a string (possibly containing embedded C<NUL> characters) into an SV.
4975 The C<len> parameter indicates the number of
4976 bytes to be copied.  If the C<ptr> argument is NULL the SV will become
4977 undefined.  Does not handle 'set' magic.  See C<L</sv_setpvn_mg>>.
4978
4979 =cut
4980 */
4981
4982 void
4983 Perl_sv_setpvn(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4984 {
4985     char *dptr;
4986
4987     PERL_ARGS_ASSERT_SV_SETPVN;
4988
4989     SV_CHECK_THINKFIRST_COW_DROP(sv);
4990     if (isGV_with_GP(sv))
4991         Perl_croak_no_modify();
4992     if (!ptr) {
4993         (void)SvOK_off(sv);
4994         return;
4995     }
4996     else {
4997         /* len is STRLEN which is unsigned, need to copy to signed */
4998         const IV iv = len;
4999         if (iv < 0)
5000             Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen %"
5001                        IVdf, iv);
5002     }
5003     SvUPGRADE(sv, SVt_PV);
5004
5005     dptr = SvGROW(sv, len + 1);
5006     Move(ptr,dptr,len,char);
5007     dptr[len] = '\0';
5008     SvCUR_set(sv, len);
5009     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5010     SvTAINT(sv);
5011     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
5012 }
5013
5014 /*
5015 =for apidoc sv_setpvn_mg
5016
5017 Like C<sv_setpvn>, but also handles 'set' magic.
5018
5019 =cut
5020 */
5021
5022 void
5023 Perl_sv_setpvn_mg(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
5024 {
5025     PERL_ARGS_ASSERT_SV_SETPVN_MG;
5026
5027     sv_setpvn(sv,ptr,len);
5028     SvSETMAGIC(sv);
5029 }
5030
5031 /*
5032 =for apidoc sv_setpv
5033
5034 Copies a string into an SV.  The string must be terminated with a C<NUL>
5035 character, and not contain embeded C<NUL>'s.
5036 Does not handle 'set' magic.  See C<L</sv_setpv_mg>>.
5037
5038 =cut
5039 */
5040
5041 void
5042 Perl_sv_setpv(pTHX_ SV *const sv, const char *const ptr)
5043 {
5044     STRLEN len;
5045
5046     PERL_ARGS_ASSERT_SV_SETPV;
5047
5048     SV_CHECK_THINKFIRST_COW_DROP(sv);
5049     if (!ptr) {
5050         (void)SvOK_off(sv);
5051         return;
5052     }
5053     len = strlen(ptr);
5054     SvUPGRADE(sv, SVt_PV);
5055
5056     SvGROW(sv, len + 1);
5057     Move(ptr,SvPVX(sv),len+1,char);
5058     SvCUR_set(sv, len);
5059     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5060     SvTAINT(sv);
5061     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
5062 }
5063
5064 /*
5065 =for apidoc sv_setpv_mg
5066
5067 Like C<sv_setpv>, but also handles 'set' magic.
5068
5069 =cut
5070 */
5071
5072 void
5073 Perl_sv_setpv_mg(pTHX_ SV *const sv, const char *const ptr)
5074 {
5075     PERL_ARGS_ASSERT_SV_SETPV_MG;
5076
5077     sv_setpv(sv,ptr);
5078     SvSETMAGIC(sv);
5079 }
5080
5081 void
5082 Perl_sv_sethek(pTHX_ SV *const sv, const HEK *const hek)
5083 {
5084     PERL_ARGS_ASSERT_SV_SETHEK;
5085
5086     if (!hek) {
5087         return;
5088     }
5089
5090     if (HEK_LEN(hek) == HEf_SVKEY) {
5091         sv_setsv(sv, *(SV**)HEK_KEY(hek));
5092         return;
5093     } else {
5094         const int flags = HEK_FLAGS(hek);
5095         if (flags & HVhek_WASUTF8) {
5096             STRLEN utf8_len = HEK_LEN(hek);
5097             char *as_utf8 = (char *)bytes_to_utf8((U8*)HEK_KEY(hek), &utf8_len);
5098             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
5099             SvUTF8_on(sv);
5100             return;
5101         } else if (flags & HVhek_UNSHARED) {
5102             sv_setpvn(sv, HEK_KEY(hek), HEK_LEN(hek));
5103             if (HEK_UTF8(hek))
5104                 SvUTF8_on(sv);
5105             else SvUTF8_off(sv);
5106             return;
5107         }
5108         {
5109             SV_CHECK_THINKFIRST_COW_DROP(sv);
5110             SvUPGRADE(sv, SVt_PV);
5111             SvPV_free(sv);
5112             SvPV_set(sv,(char *)HEK_KEY(share_hek_hek(hek)));
5113             SvCUR_set(sv, HEK_LEN(hek));
5114             SvLEN_set(sv, 0);
5115             SvIsCOW_on(sv);
5116             SvPOK_on(sv);
5117             if (HEK_UTF8(hek))
5118                 SvUTF8_on(sv);
5119             else SvUTF8_off(sv);
5120             return;
5121         }
5122     }
5123 }
5124
5125
5126 /*
5127 =for apidoc sv_usepvn_flags
5128
5129 Tells an SV to use C<ptr> to find its string value.  Normally the
5130 string is stored inside the SV, but sv_usepvn allows the SV to use an
5131 outside string.  C<ptr> should point to memory that was allocated
5132 by L<C<Newx>|perlclib/Memory Management and String Handling>.  It must be
5133 the start of a C<Newx>-ed block of memory, and not a pointer to the
5134 middle of it (beware of L<C<OOK>|perlguts/Offsets> and copy-on-write),
5135 and not be from a non-C<Newx> memory allocator like C<malloc>.  The
5136 string length, C<len>, must be supplied.  By default this function
5137 will C<Renew> (i.e. realloc, move) the memory pointed to by C<ptr>,
5138 so that pointer should not be freed or used by the programmer after
5139 giving it to C<sv_usepvn>, and neither should any pointers from "behind"
5140 that pointer (e.g. ptr + 1) be used.
5141
5142 If S<C<flags & SV_SMAGIC>> is true, will call C<SvSETMAGIC>.  If
5143 S<C<flags> & SV_HAS_TRAILING_NUL>> is true, then C<ptr[len]> must be C<NUL>,
5144 and the realloc
5145 will be skipped (i.e. the buffer is actually at least 1 byte longer than
5146 C<len>, and already meets the requirements for storing in C<SvPVX>).
5147
5148 =cut
5149 */
5150
5151 void
5152 Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
5153 {
5154     STRLEN allocate;
5155
5156     PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
5157
5158     SV_CHECK_THINKFIRST_COW_DROP(sv);
5159     SvUPGRADE(sv, SVt_PV);
5160     if (!ptr) {
5161         (void)SvOK_off(sv);
5162         if (flags & SV_SMAGIC)
5163             SvSETMAGIC(sv);
5164         return;
5165     }
5166     if (SvPVX_const(sv))
5167         SvPV_free(sv);
5168
5169 #ifdef DEBUGGING
5170     if (flags & SV_HAS_TRAILING_NUL)
5171         assert(ptr[len] == '\0');
5172 #endif
5173
5174     allocate = (flags & SV_HAS_TRAILING_NUL)
5175         ? len + 1 :
5176 #ifdef Perl_safesysmalloc_size
5177         len + 1;
5178 #else 
5179         PERL_STRLEN_ROUNDUP(len + 1);
5180 #endif
5181     if (flags & SV_HAS_TRAILING_NUL) {
5182         /* It's long enough - do nothing.
5183            Specifically Perl_newCONSTSUB is relying on this.  */
5184     } else {
5185 #ifdef DEBUGGING
5186         /* Force a move to shake out bugs in callers.  */
5187         char *new_ptr = (char*)safemalloc(allocate);
5188         Copy(ptr, new_ptr, len, char);
5189         PoisonFree(ptr,len,char);
5190         Safefree(ptr);
5191         ptr = new_ptr;
5192 #else
5193         ptr = (char*) saferealloc (ptr, allocate);
5194 #endif
5195     }
5196 #ifdef Perl_safesysmalloc_size
5197     SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
5198 #else
5199     SvLEN_set(sv, allocate);
5200 #endif
5201     SvCUR_set(sv, len);
5202     SvPV_set(sv, ptr);
5203     if (!(flags & SV_HAS_TRAILING_NUL)) {
5204         ptr[len] = '\0';
5205     }
5206     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5207     SvTAINT(sv);
5208     if (flags & SV_SMAGIC)
5209         SvSETMAGIC(sv);
5210 }
5211
5212 /*
5213 =for apidoc sv_force_normal_flags
5214
5215 Undo various types of fakery on an SV, where fakery means
5216 "more than" a string: if the PV is a shared string, make
5217 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
5218 an C<xpvmg>; if we're a copy-on-write scalar, this is the on-write time when
5219 we do the copy, and is also used locally; if this is a
5220 vstring, drop the vstring magic.  If C<SV_COW_DROP_PV> is set
5221 then a copy-on-write scalar drops its PV buffer (if any) and becomes
5222 C<SvPOK_off> rather than making a copy.  (Used where this
5223 scalar is about to be set to some other value.)  In addition,
5224 the C<flags> parameter gets passed to C<sv_unref_flags()>
5225 when unreffing.  C<sv_force_normal> calls this function
5226 with flags set to 0.
5227
5228 This function is expected to be used to signal to perl that this SV is
5229 about to be written to, and any extra book-keeping needs to be taken care
5230 of.  Hence, it croaks on read-only values.
5231
5232 =cut
5233 */
5234
5235 static void
5236 S_sv_uncow(pTHX_ SV * const sv, const U32 flags)
5237 {
5238     assert(SvIsCOW(sv));
5239     {
5240 #ifdef PERL_ANY_COW
5241         const char * const pvx = SvPVX_const(sv);
5242         const STRLEN len = SvLEN(sv);
5243         const STRLEN cur = SvCUR(sv);
5244
5245         if (DEBUG_C_TEST) {
5246                 PerlIO_printf(Perl_debug_log,
5247                               "Copy on write: Force normal %ld\n",
5248                               (long) flags);
5249                 sv_dump(sv);
5250         }
5251         SvIsCOW_off(sv);
5252 # ifdef PERL_COPY_ON_WRITE
5253         if (len) {
5254             /* Must do this first, since the CowREFCNT uses SvPVX and
5255             we need to write to CowREFCNT, or de-RO the whole buffer if we are
5256             the only owner left of the buffer. */
5257             sv_buf_to_rw(sv); /* NOOP if RO-ing not supported */
5258             {
5259                 U8 cowrefcnt = CowREFCNT(sv);
5260                 if(cowrefcnt != 0) {
5261                     cowrefcnt--;
5262                     CowREFCNT(sv) = cowrefcnt;
5263                     sv_buf_to_ro(sv);
5264                     goto copy_over;
5265                 }
5266             }
5267             /* Else we are the only owner of the buffer. */
5268         }
5269         else
5270 # endif
5271         {
5272             /* This SV doesn't own the buffer, so need to Newx() a new one:  */
5273             copy_over:
5274             SvPV_set(sv, NULL);
5275             SvCUR_set(sv, 0);
5276             SvLEN_set(sv, 0);
5277             if (flags & SV_COW_DROP_PV) {
5278                 /* OK, so we don't need to copy our buffer.  */
5279                 SvPOK_off(sv);
5280             } else {
5281                 SvGROW(sv, cur + 1);
5282                 Move(pvx,SvPVX(sv),cur,char);
5283                 SvCUR_set(sv, cur);
5284                 *SvEND(sv) = '\0';
5285             }
5286             if (len) {
5287             } else {
5288                 unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5289             }
5290             if (DEBUG_C_TEST) {
5291                 sv_dump(sv);
5292             }
5293         }
5294 #else
5295             const char * const pvx = SvPVX_const(sv);
5296             const STRLEN len = SvCUR(sv);
5297             SvIsCOW_off(sv);
5298             SvPV_set(sv, NULL);
5299             SvLEN_set(sv, 0);
5300             if (flags & SV_COW_DROP_PV) {
5301                 /* OK, so we don't need to copy our buffer.  */
5302                 SvPOK_off(sv);
5303             } else {
5304                 SvGROW(sv, len + 1);
5305                 Move(pvx,SvPVX(sv),len,char);
5306                 *SvEND(sv) = '\0';
5307             }
5308             unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5309 #endif
5310     }
5311 }
5312
5313 void
5314 Perl_sv_force_normal_flags(pTHX_ SV *const sv, const U32 flags)
5315 {
5316     PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
5317
5318     if (SvREADONLY(sv))
5319         Perl_croak_no_modify();
5320     else if (SvIsCOW(sv) && LIKELY(SvTYPE(sv) != SVt_PVHV))
5321         S_sv_uncow(aTHX_ sv, flags);
5322     if (SvROK(sv))
5323         sv_unref_flags(sv, flags);
5324     else if (SvFAKE(sv) && isGV_with_GP(sv))
5325         sv_unglob(sv, flags);
5326     else if (SvFAKE(sv) && isREGEXP(sv)) {
5327         /* Need to downgrade the REGEXP to a simple(r) scalar. This is analogous
5328            to sv_unglob. We only need it here, so inline it.  */
5329         const bool islv = SvTYPE(sv) == SVt_PVLV;
5330         const svtype new_type =
5331           islv ? SVt_NULL : SvMAGIC(sv) || SvSTASH(sv) ? SVt_PVMG : SVt_PV;
5332         SV *const temp = newSV_type(new_type);
5333         regexp *const temp_p = ReANY((REGEXP *)sv);
5334
5335         if (new_type == SVt_PVMG) {
5336             SvMAGIC_set(temp, SvMAGIC(sv));
5337             SvMAGIC_set(sv, NULL);
5338             SvSTASH_set(temp, SvSTASH(sv));
5339             SvSTASH_set(sv, NULL);
5340         }
5341         if (!islv) SvCUR_set(temp, SvCUR(sv));
5342         /* Remember that SvPVX is in the head, not the body.  But
5343            RX_WRAPPED is in the body. */
5344         assert(ReANY((REGEXP *)sv)->mother_re);
5345         /* Their buffer is already owned by someone else. */
5346         if (flags & SV_COW_DROP_PV) {
5347             /* SvLEN is already 0.  For SVt_REGEXP, we have a brand new
5348                zeroed body.  For SVt_PVLV, it should have been set to 0
5349                before turning into a regexp. */
5350             assert(!SvLEN(islv ? sv : temp));
5351             sv->sv_u.svu_pv = 0;
5352         }
5353         else {
5354             sv->sv_u.svu_pv = savepvn(RX_WRAPPED((REGEXP *)sv), SvCUR(sv));
5355             SvLEN_set(islv ? sv : temp, SvCUR(sv)+1);
5356             SvPOK_on(sv);
5357         }
5358
5359         /* Now swap the rest of the bodies. */
5360
5361         SvFAKE_off(sv);
5362         if (!islv) {
5363             SvFLAGS(sv) &= ~SVTYPEMASK;
5364             SvFLAGS(sv) |= new_type;
5365             SvANY(sv) = SvANY(temp);
5366         }
5367
5368         SvFLAGS(temp) &= ~(SVTYPEMASK);
5369         SvFLAGS(temp) |= SVt_REGEXP|SVf_FAKE;
5370         SvANY(temp) = temp_p;
5371         temp->sv_u.svu_rx = (regexp *)temp_p;
5372
5373         SvREFCNT_dec_NN(temp);
5374     }
5375     else if (SvVOK(sv)) sv_unmagic(sv, PERL_MAGIC_vstring);
5376 }
5377
5378 /*
5379 =for apidoc sv_chop
5380
5381 Efficient removal of characters from the beginning of the string buffer.
5382 C<SvPOK(sv)>, or at least C<SvPOKp(sv)>, must be true and C<ptr> must be a
5383 pointer to somewhere inside the string buffer.  C<ptr> becomes the first
5384 character of the adjusted string.  Uses the C<OOK> hack.  On return, only
5385 C<SvPOK(sv)> and C<SvPOKp(sv)> among the C<OK> flags will be true.
5386
5387 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
5388 refer to the same chunk of data.
5389
5390 The unfortunate similarity of this function's name to that of Perl's C<chop>
5391 operator is strictly coincidental.  This function works from the left;
5392 C<chop> works from the right.
5393
5394 =cut
5395 */
5396
5397 void
5398 Perl_sv_chop(pTHX_ SV *const sv, const char *const ptr)
5399 {
5400     STRLEN delta;
5401     STRLEN old_delta;
5402     U8 *p;
5403 #ifdef DEBUGGING
5404     const U8 *evacp;
5405     STRLEN evacn;
5406 #endif
5407     STRLEN max_delta;
5408
5409     PERL_ARGS_ASSERT_SV_CHOP;
5410
5411     if (!ptr || !SvPOKp(sv))
5412         return;
5413     delta = ptr - SvPVX_const(sv);
5414     if (!delta) {
5415         /* Nothing to do.  */
5416         return;
5417     }
5418     max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
5419     if (delta > max_delta)
5420         Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
5421                    ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
5422     /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), so don't use ptr any more */
5423     SV_CHECK_THINKFIRST(sv);
5424     SvPOK_only_UTF8(sv);
5425
5426     if (!SvOOK(sv)) {
5427         if (!SvLEN(sv)) { /* make copy of shared string */
5428             const char *pvx = SvPVX_const(sv);
5429             const STRLEN len = SvCUR(sv);
5430             SvGROW(sv, len + 1);
5431             Move(pvx,SvPVX(sv),len,char);
5432             *SvEND(sv) = '\0';
5433         }
5434         SvOOK_on(sv);
5435         old_delta = 0;
5436     } else {
5437         SvOOK_offset(sv, old_delta);
5438     }
5439     SvLEN_set(sv, SvLEN(sv) - delta);
5440     SvCUR_set(sv, SvCUR(sv) - delta);
5441     SvPV_set(sv, SvPVX(sv) + delta);
5442
5443     p = (U8 *)SvPVX_const(sv);
5444
5445 #ifdef DEBUGGING
5446     /* how many bytes were evacuated?  we will fill them with sentinel
5447        bytes, except for the part holding the new offset of course. */
5448     evacn = delta;
5449     if (old_delta)
5450         evacn += (old_delta < 0x100 ? 1 : 1 + sizeof(STRLEN));
5451     assert(evacn);
5452     assert(evacn <= delta + old_delta);
5453     evacp = p - evacn;
5454 #endif
5455
5456     /* This sets 'delta' to the accumulated value of all deltas so far */
5457     delta += old_delta;
5458     assert(delta);
5459
5460     /* If 'delta' fits in a byte, store it just prior to the new beginning of
5461      * the string; otherwise store a 0 byte there and store 'delta' just prior
5462      * to that, using as many bytes as a STRLEN occupies.  Thus it overwrites a
5463      * portion of the chopped part of the string */
5464     if (delta < 0x100) {
5465         *--p = (U8) delta;
5466     } else {
5467         *--p = 0;
5468         p -= sizeof(STRLEN);
5469         Copy((U8*)&delta, p, sizeof(STRLEN), U8);
5470     }
5471
5472 #ifdef DEBUGGING
5473     /* Fill the preceding buffer with sentinals to verify that no-one is
5474        using it.  */
5475     while (p > evacp) {
5476         --p;
5477         *p = (U8)PTR2UV(p);
5478     }
5479 #endif
5480 }
5481
5482 /*
5483 =for apidoc sv_catpvn
5484
5485 Concatenates the string onto the end of the string which is in the SV.
5486 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
5487 status set, then the bytes appended should be valid UTF-8.
5488 Handles 'get' magic, but not 'set' magic.  See C<L</sv_catpvn_mg>>.
5489
5490 =for apidoc sv_catpvn_flags
5491
5492 Concatenates the string onto the end of the string which is in the SV.  The
5493 C<len> indicates number of bytes to copy.
5494
5495 By default, the string appended is assumed to be valid UTF-8 if the SV has
5496 the UTF-8 status set, and a string of bytes otherwise.  One can force the
5497 appended string to be interpreted as UTF-8 by supplying the C<SV_CATUTF8>
5498 flag, and as bytes by supplying the C<SV_CATBYTES> flag; the SV or the
5499 string appended will be upgraded to UTF-8 if necessary.
5500
5501 If C<flags> has the C<SV_SMAGIC> bit set, will
5502 C<mg_set> on C<dsv> afterwards if appropriate.
5503 C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
5504 in terms of this function.
5505
5506 =cut
5507 */
5508
5509 void
5510 Perl_sv_catpvn_flags(pTHX_ SV *const dsv, const char *sstr, const STRLEN slen, const I32 flags)
5511 {
5512     STRLEN dlen;
5513     const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
5514
5515     PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
5516     assert((flags & (SV_CATBYTES|SV_CATUTF8)) != (SV_CATBYTES|SV_CATUTF8));
5517
5518     if (!(flags & SV_CATBYTES) || !SvUTF8(dsv)) {
5519       if (flags & SV_CATUTF8 && !SvUTF8(dsv)) {
5520          sv_utf8_upgrade_flags_grow(dsv, 0, slen + 1);
5521          dlen = SvCUR(dsv);
5522       }
5523       else SvGROW(dsv, dlen + slen + 3);
5524       if (sstr == dstr)
5525         sstr = SvPVX_const(dsv);
5526       Move(sstr, SvPVX(dsv) + dlen, slen, char);
5527       SvCUR_set(dsv, SvCUR(dsv) + slen);
5528     }
5529     else {
5530         /* We inline bytes_to_utf8, to avoid an extra malloc. */
5531         const char * const send = sstr + slen;
5532         U8 *d;
5533
5534         /* Something this code does not account for, which I think is
5535            impossible; it would require the same pv to be treated as
5536            bytes *and* utf8, which would indicate a bug elsewhere. */
5537         assert(sstr != dstr);
5538
5539         SvGROW(dsv, dlen + slen * 2 + 3);
5540         d = (U8 *)SvPVX(dsv) + dlen;
5541
5542         while (sstr < send) {
5543             append_utf8_from_native_byte(*sstr, &d);
5544             sstr++;
5545         }
5546         SvCUR_set(dsv, d-(const U8 *)SvPVX(dsv));
5547     }
5548     *SvEND(dsv) = '\0';
5549     (void)SvPOK_only_UTF8(dsv);         /* validate pointer */
5550     SvTAINT(dsv);
5551     if (flags & SV_SMAGIC)
5552         SvSETMAGIC(dsv);
5553 }
5554
5555 /*
5556 =for apidoc sv_catsv
5557
5558 Concatenates the string from SV C<ssv> onto the end of the string in SV
5559 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5560 Handles 'get' magic on both SVs, but no 'set' magic.  See C<L</sv_catsv_mg>>
5561 and C<L</sv_catsv_nomg>>.
5562
5563 =for apidoc sv_catsv_flags
5564
5565 Concatenates the string from SV C<ssv> onto the end of the string in SV
5566 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5567 If C<flags> has the C<SV_GMAGIC> bit set, will call C<mg_get> on both SVs if
5568 appropriate.  If C<flags> has the C<SV_SMAGIC> bit set, C<mg_set> will be called on
5569 the modified SV afterward, if appropriate.  C<sv_catsv>, C<sv_catsv_nomg>,
5570 and C<sv_catsv_mg> are implemented in terms of this function.
5571
5572 =cut */
5573
5574 void
5575 Perl_sv_catsv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
5576 {
5577     PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
5578
5579     if (ssv) {
5580         STRLEN slen;
5581         const char *spv = SvPV_flags_const(ssv, slen, flags);
5582         if (flags & SV_GMAGIC)
5583                 SvGETMAGIC(dsv);
5584         sv_catpvn_flags(dsv, spv, slen,
5585                             DO_UTF8(ssv) ? SV_CATUTF8 : SV_CATBYTES);
5586         if (flags & SV_SMAGIC)
5587                 SvSETMAGIC(dsv);
5588     }
5589 }
5590
5591 /*
5592 =for apidoc sv_catpv
5593
5594 Concatenates the C<NUL>-terminated string onto the end of the string which is
5595 in the SV.
5596 If the SV has the UTF-8 status set, then the bytes appended should be
5597 valid UTF-8.  Handles 'get' magic, but not 'set' magic.  See
5598 C<L</sv_catpv_mg>>.
5599
5600 =cut */
5601
5602 void
5603 Perl_sv_catpv(pTHX_ SV *const sv, const char *ptr)
5604 {
5605     STRLEN len;
5606     STRLEN tlen;
5607     char *junk;
5608
5609     PERL_ARGS_ASSERT_SV_CATPV;
5610
5611     if (!ptr)
5612         return;
5613     junk = SvPV_force(sv, tlen);
5614     len = strlen(ptr);
5615     SvGROW(sv, tlen + len + 1);
5616     if (ptr == junk)
5617         ptr = SvPVX_const(sv);
5618     Move(ptr,SvPVX(sv)+tlen,len+1,char);
5619     SvCUR_set(sv, SvCUR(sv) + len);
5620     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5621     SvTAINT(sv);
5622 }
5623
5624 /*
5625 =for apidoc sv_catpv_flags
5626
5627 Concatenates the C<NUL>-terminated string onto the end of the string which is
5628 in the SV.
5629 If the SV has the UTF-8 status set, then the bytes appended should
5630 be valid UTF-8.  If C<flags> has the C<SV_SMAGIC> bit set, will C<mg_set>
5631 on the modified SV if appropriate.
5632
5633 =cut
5634 */
5635
5636 void
5637 Perl_sv_catpv_flags(pTHX_ SV *dstr, const char *sstr, const I32 flags)
5638 {
5639     PERL_ARGS_ASSERT_SV_CATPV_FLAGS;
5640     sv_catpvn_flags(dstr, sstr, strlen(sstr), flags);
5641 }
5642
5643 /*
5644 =for apidoc sv_catpv_mg
5645
5646 Like C<sv_catpv>, but also handles 'set' magic.
5647
5648 =cut
5649 */
5650
5651 void
5652 Perl_sv_catpv_mg(pTHX_ SV *const sv, const char *const ptr)
5653 {
5654     PERL_ARGS_ASSERT_SV_CATPV_MG;
5655
5656     sv_catpv(sv,ptr);
5657     SvSETMAGIC(sv);
5658 }
5659
5660 /*
5661 =for apidoc newSV
5662
5663 Creates a new SV.  A non-zero C<len> parameter indicates the number of
5664 bytes of preallocated string space the SV should have.  An extra byte for a
5665 trailing C<NUL> is also reserved.  (C<SvPOK> is not set for the SV even if string
5666 space is allocated.)  The reference count for the new SV is set to 1.
5667
5668 In 5.9.3, C<newSV()> replaces the older C<NEWSV()> API, and drops the first
5669 parameter, I<x>, a debug aid which allowed callers to identify themselves.
5670 This aid has been superseded by a new build option, C<PERL_MEM_LOG> (see
5671 L<perlhacktips/PERL_MEM_LOG>).  The older API is still there for use in XS
5672 modules supporting older perls.
5673
5674 =cut
5675 */
5676
5677 SV *
5678 Perl_newSV(pTHX_ const STRLEN len)
5679 {
5680     SV *sv;
5681
5682     new_SV(sv);
5683     if (len) {
5684         sv_grow(sv, len + 1);
5685     }
5686     return sv;
5687 }
5688 /*
5689 =for apidoc sv_magicext
5690
5691 Adds magic to an SV, upgrading it if necessary.  Applies the
5692 supplied C<vtable> and returns a pointer to the magic added.
5693
5694 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
5695 In particular, you can add magic to C<SvREADONLY> SVs, and add more than
5696 one instance of the same C<how>.
5697
5698 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
5699 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
5700 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
5701 to contain an SV* and is stored as-is with its C<REFCNT> incremented.
5702
5703 (This is now used as a subroutine by C<sv_magic>.)
5704
5705 =cut
5706 */
5707 MAGIC * 
5708 Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how, 
5709                 const MGVTBL *const vtable, const char *const name, const I32 namlen)
5710 {
5711     MAGIC* mg;
5712
5713     PERL_ARGS_ASSERT_SV_MAGICEXT;
5714
5715     SvUPGRADE(sv, SVt_PVMG);
5716     Newxz(mg, 1, MAGIC);
5717     mg->mg_moremagic = SvMAGIC(sv);
5718     SvMAGIC_set(sv, mg);
5719
5720     /* Sometimes a magic contains a reference loop, where the sv and
5721        object refer to each other.  To prevent a reference loop that
5722        would prevent such objects being freed, we look for such loops
5723        and if we find one we avoid incrementing the object refcount.
5724
5725        Note we cannot do this to avoid self-tie loops as intervening RV must
5726        have its REFCNT incremented to keep it in existence.
5727
5728     */
5729     if (!obj || obj == sv ||
5730         how == PERL_MAGIC_arylen ||
5731         how == PERL_MAGIC_regdata ||
5732         how == PERL_MAGIC_regdatum ||
5733         how == PERL_MAGIC_symtab ||
5734         (SvTYPE(obj) == SVt_PVGV &&
5735             (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
5736              || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
5737              || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
5738     {
5739         mg->mg_obj = obj;
5740     }
5741     else {
5742         mg->mg_obj = SvREFCNT_inc_simple(obj);
5743         mg->mg_flags |= MGf_REFCOUNTED;
5744     }
5745
5746     /* Normal self-ties simply pass a null object, and instead of
5747        using mg_obj directly, use the SvTIED_obj macro to produce a
5748        new RV as needed.  For glob "self-ties", we are tieing the PVIO
5749        with an RV obj pointing to the glob containing the PVIO.  In
5750        this case, to avoid a reference loop, we need to weaken the
5751        reference.
5752     */
5753
5754     if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
5755         obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
5756     {
5757       sv_rvweaken(obj);
5758     }
5759
5760     mg->mg_type = how;
5761     mg->mg_len = namlen;
5762     if (name) {
5763         if (namlen > 0)
5764             mg->mg_ptr = savepvn(name, namlen);
5765         else if (namlen == HEf_SVKEY) {
5766             /* Yes, this is casting away const. This is only for the case of
5767                HEf_SVKEY. I think we need to document this aberation of the
5768                constness of the API, rather than making name non-const, as
5769                that change propagating outwards a long way.  */
5770             mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
5771         } else
5772             mg->mg_ptr = (char *) name;
5773     }
5774     mg->mg_virtual = (MGVTBL *) vtable;
5775
5776     mg_magical(sv);
5777     return mg;
5778 }
5779
5780 MAGIC *
5781 Perl_sv_magicext_mglob(pTHX_ SV *sv)
5782 {
5783     PERL_ARGS_ASSERT_SV_MAGICEXT_MGLOB;
5784     if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y') {
5785         /* This sv is only a delegate.  //g magic must be attached to
5786            its target. */
5787         vivify_defelem(sv);
5788         sv = LvTARG(sv);
5789     }
5790     return sv_magicext(sv, NULL, PERL_MAGIC_regex_global,
5791                        &PL_vtbl_mglob, 0, 0);
5792 }
5793
5794 /*
5795 =for apidoc sv_magic
5796
5797 Adds magic to an SV.  First upgrades C<sv> to type C<SVt_PVMG> if
5798 necessary, then adds a new magic item of type C<how> to the head of the
5799 magic list.
5800
5801 See C<L</sv_magicext>> (which C<sv_magic> now calls) for a description of the
5802 handling of the C<name> and C<namlen> arguments.
5803
5804 You need to use C<sv_magicext> to add magic to C<SvREADONLY> SVs and also
5805 to add more than one instance of the same C<how>.
5806
5807 =cut
5808 */
5809
5810 void
5811 Perl_sv_magic(pTHX_ SV *const sv, SV *const obj, const int how,
5812              const char *const name, const I32 namlen)
5813 {
5814     const MGVTBL *vtable;
5815     MAGIC* mg;
5816     unsigned int flags;
5817     unsigned int vtable_index;
5818
5819     PERL_ARGS_ASSERT_SV_MAGIC;
5820
5821     if (how < 0 || (unsigned)how >= C_ARRAY_LENGTH(PL_magic_data)
5822         || ((flags = PL_magic_data[how]),
5823             (vtable_index = flags & PERL_MAGIC_VTABLE_MASK)
5824             > magic_vtable_max))
5825         Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
5826
5827     /* PERL_MAGIC_ext is reserved for use by extensions not perl internals.
5828        Useful for attaching extension internal data to perl vars.
5829        Note that multiple extensions may clash if magical scalars
5830        etc holding private data from one are passed to another. */
5831
5832     vtable = (vtable_index == magic_vtable_max)
5833         ? NULL : PL_magic_vtables + vtable_index;
5834
5835     if (SvREADONLY(sv)) {
5836         if (
5837             !PERL_MAGIC_TYPE_READONLY_ACCEPTABLE(how)
5838            )
5839         {
5840             Perl_croak_no_modify();
5841         }
5842     }
5843     if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5844         if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
5845             /* sv_magic() refuses to add a magic of the same 'how' as an
5846                existing one
5847              */
5848             if (how == PERL_MAGIC_taint)
5849                 mg->mg_len |= 1;
5850             return;
5851         }
5852     }
5853
5854     /* Force pos to be stored as characters, not bytes. */
5855     if (SvMAGICAL(sv) && DO_UTF8(sv)
5856       && (mg = mg_find(sv, PERL_MAGIC_regex_global))
5857       && mg->mg_len != -1
5858       && mg->mg_flags & MGf_BYTES) {
5859         mg->mg_len = (SSize_t)sv_pos_b2u_flags(sv, (STRLEN)mg->mg_len,
5860                                                SV_CONST_RETURN);
5861         mg->mg_flags &= ~MGf_BYTES;
5862     }
5863
5864     /* Rest of work is done else where */
5865     mg = sv_magicext(sv,obj,how,vtable,name,namlen);
5866
5867     switch (how) {
5868     case PERL_MAGIC_taint:
5869         mg->mg_len = 1;
5870         break;
5871     case PERL_MAGIC_ext:
5872     case PERL_MAGIC_dbfile:
5873         SvRMAGICAL_on(sv);
5874         break;
5875     }
5876 }
5877
5878 static int
5879 S_sv_unmagicext_flags(pTHX_ SV *const sv, const int type, MGVTBL *vtbl, const U32 flags)
5880 {
5881     MAGIC* mg;
5882     MAGIC** mgp;
5883
5884     assert(flags <= 1);
5885
5886     if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
5887         return 0;
5888     mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
5889     for (mg = *mgp; mg; mg = *mgp) {
5890         const MGVTBL* const virt = mg->mg_virtual;
5891         if (mg->mg_type == type && (!flags || virt == vtbl)) {
5892             *mgp = mg->mg_moremagic;
5893             if (virt && virt->svt_free)
5894                 virt->svt_free(aTHX_ sv, mg);
5895             if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
5896                 if (mg->mg_len > 0)
5897                     Safefree(mg->mg_ptr);
5898                 else if (mg->mg_len == HEf_SVKEY)
5899                     SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
5900                 else if (mg->mg_type == PERL_MAGIC_utf8)
5901                     Safefree(mg->mg_ptr);
5902             }
5903             if (mg->mg_flags & MGf_REFCOUNTED)
5904                 SvREFCNT_dec(mg->mg_obj);
5905             Safefree(mg);
5906         }
5907         else
5908             mgp = &mg->mg_moremagic;
5909     }
5910     if (SvMAGIC(sv)) {
5911         if (SvMAGICAL(sv))      /* if we're under save_magic, wait for restore_magic; */
5912             mg_magical(sv);     /*    else fix the flags now */
5913     }
5914     else
5915         SvMAGICAL_off(sv);
5916
5917     return 0;
5918 }
5919
5920 /*
5921 =for apidoc sv_unmagic
5922
5923 Removes all magic of type C<type> from an SV.
5924
5925 =cut
5926 */
5927
5928 int
5929 Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
5930 {
5931     PERL_ARGS_ASSERT_SV_UNMAGIC;
5932     return S_sv_unmagicext_flags(aTHX_ sv, type, NULL, 0);
5933 }
5934
5935 /*
5936 =for apidoc sv_unmagicext
5937
5938 Removes all magic of type C<type> with the specified C<vtbl> from an SV.
5939
5940 =cut
5941 */
5942
5943 int
5944 Perl_sv_unmagicext(pTHX_ SV *const sv, const int type, MGVTBL *vtbl)
5945 {
5946     PERL_ARGS_ASSERT_SV_UNMAGICEXT;
5947     return S_sv_unmagicext_flags(aTHX_ sv, type, vtbl, 1);
5948 }
5949
5950 /*
5951 =for apidoc sv_rvweaken
5952
5953 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5954 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5955 push a back-reference to this RV onto the array of backreferences
5956 associated with that magic.  If the RV is magical, set magic will be
5957 called after the RV is cleared.
5958
5959 =cut
5960 */
5961
5962 SV *
5963 Perl_sv_rvweaken(pTHX_ SV *const sv)
5964 {
5965     SV *tsv;
5966
5967     PERL_ARGS_ASSERT_SV_RVWEAKEN;
5968
5969     if (!SvOK(sv))  /* let undefs pass */
5970         return sv;
5971     if (!SvROK(sv))
5972         Perl_croak(aTHX_ "Can't weaken a nonreference");
5973     else if (SvWEAKREF(sv)) {
5974         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
5975         return sv;
5976     }
5977     else if (SvREADONLY(sv)) croak_no_modify();
5978     tsv = SvRV(sv);
5979     Perl_sv_add_backref(aTHX_ tsv, sv);
5980     SvWEAKREF_on(sv);
5981     SvREFCNT_dec_NN(tsv);
5982     return sv;
5983 }
5984
5985 /*
5986 =for apidoc sv_get_backrefs
5987
5988 If C<sv> is the target of a weak reference then it returns the back
5989 references structure associated with the sv; otherwise return C<NULL>.
5990
5991 When returning a non-null result the type of the return is relevant. If it
5992 is an AV then the elements of the AV are the weak reference RVs which
5993 point at this item. If it is any other type then the item itself is the
5994 weak reference.
5995
5996 See also C<Perl_sv_add_backref()>, C<Perl_sv_del_backref()>,
5997 C<Perl_sv_kill_backrefs()>
5998
5999 =cut
6000 */
6001
6002 SV *
6003 Perl_sv_get_backrefs(SV *const sv)
6004 {
6005     SV *backrefs= NULL;
6006
6007     PERL_ARGS_ASSERT_SV_GET_BACKREFS;
6008
6009     /* find slot to store array or singleton backref */
6010
6011     if (SvTYPE(sv) == SVt_PVHV) {
6012         if (SvOOK(sv)) {
6013             struct xpvhv_aux * const iter = HvAUX((HV *)sv);
6014             backrefs = (SV *)iter->xhv_backreferences;
6015         }
6016     } else if (SvMAGICAL(sv)) {
6017         MAGIC *mg = mg_find(sv, PERL_MAGIC_backref);
6018         if (mg)
6019             backrefs = mg->mg_obj;
6020     }
6021     return backrefs;
6022 }
6023
6024 /* Give tsv backref magic if it hasn't already got it, then push a
6025  * back-reference to sv onto the array associated with the backref magic.
6026  *
6027  * As an optimisation, if there's only one backref and it's not an AV,
6028  * store it directly in the HvAUX or mg_obj slot, avoiding the need to
6029  * allocate an AV. (Whether the slot holds an AV tells us whether this is
6030  * active.)
6031  */
6032
6033 /* A discussion about the backreferences array and its refcount:
6034  *
6035  * The AV holding the backreferences is pointed to either as the mg_obj of
6036  * PERL_MAGIC_backref, or in the specific case of a HV, from the
6037  * xhv_backreferences field. The array is created with a refcount
6038  * of 2. This means that if during global destruction the array gets
6039  * picked on before its parent to have its refcount decremented by the
6040  * random zapper, it won't actually be freed, meaning it's still there for
6041  * when its parent gets freed.
6042  *
6043  * When the parent SV is freed, the extra ref is killed by
6044  * Perl_sv_kill_backrefs.  The other ref is killed, in the case of magic,
6045  * by mg_free() / MGf_REFCOUNTED, or for a hash, by Perl_hv_kill_backrefs.
6046  *
6047  * When a single backref SV is stored directly, it is not reference
6048  * counted.
6049  */
6050
6051 void
6052 Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
6053 {
6054     SV **svp;
6055     AV *av = NULL;
6056     MAGIC *mg = NULL;
6057
6058     PERL_ARGS_ASSERT_SV_ADD_BACKREF;
6059
6060     /* find slot to store array or singleton backref */
6061
6062     if (SvTYPE(tsv) == SVt_PVHV) {
6063         svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
6064     } else {
6065         if (SvMAGICAL(tsv))
6066             mg = mg_find(tsv, PERL_MAGIC_backref);
6067         if (!mg)
6068             mg = sv_magicext(tsv, NULL, PERL_MAGIC_backref, &PL_vtbl_backref, NULL, 0);
6069         svp = &(mg->mg_obj);
6070     }
6071
6072     /* create or retrieve the array */
6073
6074     if (   (!*svp && SvTYPE(sv) == SVt_PVAV)
6075         || (*svp && SvTYPE(*svp) != SVt_PVAV)
6076     ) {
6077         /* create array */
6078         if (mg)
6079             mg->mg_flags |= MGf_REFCOUNTED;
6080         av = newAV();
6081         AvREAL_off(av);
6082         SvREFCNT_inc_simple_void_NN(av);
6083         /* av now has a refcnt of 2; see discussion above */
6084         av_extend(av, *svp ? 2 : 1);
6085         if (*svp) {
6086             /* move single existing backref to the array */
6087             AvARRAY(av)[++AvFILLp(av)] = *svp; /* av_push() */
6088         }
6089         *svp = (SV*)av;
6090     }
6091     else {
6092         av = MUTABLE_AV(*svp);
6093         if (!av) {
6094             /* optimisation: store single backref directly in HvAUX or mg_obj */
6095             *svp = sv;
6096             return;
6097         }
6098         assert(SvTYPE(av) == SVt_PVAV);
6099         if (AvFILLp(av) >= AvMAX(av)) {
6100             av_extend(av, AvFILLp(av)+1);
6101         }
6102     }
6103     /* push new backref */
6104     AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
6105 }
6106
6107 /* delete a back-reference to ourselves from the backref magic associated
6108  * with the SV we point to.
6109  */
6110
6111 void
6112 Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
6113 {
6114     SV **svp = NULL;
6115
6116     PERL_ARGS_ASSERT_SV_DEL_BACKREF;
6117
6118     if (SvTYPE(tsv) == SVt_PVHV) {
6119         if (SvOOK(tsv))
6120             svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
6121     }
6122     else if (SvIS_FREED(tsv) && PL_phase == PERL_PHASE_DESTRUCT) {
6123         /* It's possible for the the last (strong) reference to tsv to have
6124            become freed *before* the last thing holding a weak reference.
6125            If both survive longer than the backreferences array, then when
6126            the referent's reference count drops to 0 and it is freed, it's
6127            not able to chase the backreferences, so they aren't NULLed.
6128
6129            For example, a CV holds a weak reference to its stash. If both the
6130            CV and the stash survive longer than the backreferences array,
6131            and the CV gets picked for the SvBREAK() treatment first,
6132            *and* it turns out that the stash is only being kept alive because
6133            of an our variable in the pad of the CV, then midway during CV
6134            destruction the stash gets freed, but CvSTASH() isn't set to NULL.
6135            It ends up pointing to the freed HV. Hence it's chased in here, and
6136            if this block wasn't here, it would hit the !svp panic just below.
6137
6138            I don't believe that "better" destruction ordering is going to help
6139            here - during global destruction there's always going to be the
6140            chance that something goes out of order. We've tried to make it
6141            foolproof before, and it only resulted in evolutionary pressure on
6142            fools. Which made us look foolish for our hubris. :-(
6143         */
6144         return;
6145     }
6146     else {
6147         MAGIC *const mg
6148             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
6149         svp =  mg ? &(mg->mg_obj) : NULL;
6150     }
6151
6152     if (!svp)
6153         Perl_croak(aTHX_ "panic: del_backref, svp=0");
6154     if (!*svp) {
6155         /* It's possible that sv is being freed recursively part way through the
6156            freeing of tsv. If this happens, the backreferences array of tsv has
6157            already been freed, and so svp will be NULL. If this is the case,
6158            we should not panic. Instead, nothing needs doing, so return.  */
6159         if (PL_phase == PERL_PHASE_DESTRUCT && SvREFCNT(tsv) == 0)
6160             return;
6161         Perl_croak(aTHX_ "panic: del_backref, *svp=%p phase=%s refcnt=%" UVuf,
6162                    (void*)*svp, PL_phase_names[PL_phase], (UV)SvREFCNT(tsv));
6163     }
6164
6165     if (SvTYPE(*svp) == SVt_PVAV) {
6166 #ifdef DEBUGGING
6167         int count = 1;
6168 #endif
6169         AV * const av = (AV*)*svp;
6170         SSize_t fill;
6171         assert(!SvIS_FREED(av));
6172         fill = AvFILLp(av);
6173         assert(fill > -1);
6174         svp = AvARRAY(av);
6175         /* for an SV with N weak references to it, if all those
6176          * weak refs are deleted, then sv_del_backref will be called
6177          * N times and O(N^2) compares will be done within the backref
6178          * array. To ameliorate this potential slowness, we:
6179          * 1) make sure this code is as tight as possible;
6180          * 2) when looking for SV, look for it at both the head and tail of the
6181          *    array first before searching the rest, since some create/destroy
6182          *    patterns will cause the backrefs to be freed in order.
6183          */
6184         if (*svp == sv) {
6185             AvARRAY(av)++;
6186             AvMAX(av)--;
6187         }
6188         else {
6189             SV **p = &svp[fill];
6190             SV *const topsv = *p;
6191             if (topsv != sv) {
6192 #ifdef DEBUGGING
6193                 count = 0;
6194 #endif
6195                 while (--p > svp) {
6196                     if (*p == sv) {
6197                         /* We weren't the last entry.
6198                            An unordered list has this property that you
6199                            can take the last element off the end to fill
6200                            the hole, and it's still an unordered list :-)
6201                         */
6202                         *p = topsv;
6203 #ifdef DEBUGGING
6204                         count++;
6205 #else
6206                         break; /* should only be one */
6207 #endif
6208                     }
6209                 }
6210             }
6211         }
6212         assert(count ==1);
6213         AvFILLp(av) = fill-1;
6214     }
6215     else if (SvIS_FREED(*svp) && PL_phase == PERL_PHASE_DESTRUCT) {
6216         /* freed AV; skip */
6217     }
6218     else {
6219         /* optimisation: only a single backref, stored directly */
6220         if (*svp != sv)
6221             Perl_croak(aTHX_ "panic: del_backref, *svp=%p, sv=%p",
6222                        (void*)*svp, (void*)sv);
6223         *svp = NULL;
6224     }
6225
6226 }
6227
6228 void
6229 Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
6230 {
6231     SV **svp;
6232     SV **last;
6233     bool is_array;
6234
6235     PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
6236
6237     if (!av)
6238         return;
6239
6240     /* after multiple passes through Perl_sv_clean_all() for a thingy
6241      * that has badly leaked, the backref array may have gotten freed,
6242      * since we only protect it against 1 round of cleanup */
6243     if (SvIS_FREED(av)) {
6244         if (PL_in_clean_all) /* All is fair */
6245             return;
6246         Perl_croak(aTHX_
6247                    "panic: magic_killbackrefs (freed backref AV/SV)");
6248     }
6249
6250
6251     is_array = (SvTYPE(av) == SVt_PVAV);
6252     if (is_array) {
6253         assert(!SvIS_FREED(av));
6254         svp = AvARRAY(av);
6255         if (svp)
6256             last = svp + AvFILLp(av);
6257     }
6258     else {
6259         /* optimisation: only a single backref, stored directly */
6260         svp = (SV**)&av;
6261         last = svp;
6262     }
6263
6264     if (svp) {
6265         while (svp <= last) {
6266             if (*svp) {
6267                 SV *const referrer = *svp;
6268                 if (SvWEAKREF(referrer)) {
6269                     /* XXX Should we check that it hasn't changed? */
6270                     assert(SvROK(referrer));
6271                     SvRV_set(referrer, 0);
6272                     SvOK_off(referrer);
6273                     SvWEAKREF_off(referrer);
6274                     SvSETMAGIC(referrer);
6275                 } else if (SvTYPE(referrer) == SVt_PVGV ||
6276                            SvTYPE(referrer) == SVt_PVLV) {
6277                     assert(SvTYPE(sv) == SVt_PVHV); /* stash backref */
6278                     /* You lookin' at me?  */
6279                     assert(GvSTASH(referrer));
6280                     assert(GvSTASH(referrer) == (const HV *)sv);
6281                     GvSTASH(referrer) = 0;
6282                 } else if (SvTYPE(referrer) == SVt_PVCV ||
6283                            SvTYPE(referrer) == SVt_PVFM) {
6284                     if (SvTYPE(sv) == SVt_PVHV) { /* stash backref */
6285                         /* You lookin' at me?  */
6286                         assert(CvSTASH(referrer));
6287                         assert(CvSTASH(referrer) == (const HV *)sv);
6288                         SvANY(MUTABLE_CV(referrer))->xcv_stash = 0;
6289                     }
6290                     else {
6291                         assert(SvTYPE(sv) == SVt_PVGV);
6292                         /* You lookin' at me?  */
6293                         assert(CvGV(referrer));
6294                         assert(CvGV(referrer) == (const GV *)sv);
6295                         anonymise_cv_maybe(MUTABLE_GV(sv),
6296                                                 MUTABLE_CV(referrer));
6297                     }
6298
6299                 } else {
6300                     Perl_croak(aTHX_
6301                                "panic: magic_killbackrefs (flags=%" UVxf ")",
6302                                (UV)SvFLAGS(referrer));
6303                 }
6304
6305                 if (is_array)
6306                     *svp = NULL;
6307             }
6308             svp++;
6309         }
6310     }
6311     if (is_array) {
6312         AvFILLp(av) = -1;
6313         SvREFCNT_dec_NN(av); /* remove extra count added by sv_add_backref() */
6314     }
6315     return;
6316 }
6317
6318 /*
6319 =for apidoc sv_insert
6320
6321 Inserts a string at the specified offset/length within the SV.  Similar to
6322 the Perl C<substr()> function.  Handles get magic.
6323
6324 =for apidoc sv_insert_flags
6325
6326 Same as C<sv_insert>, but the extra C<flags> are passed to the
6327 C<SvPV_force_flags> that applies to C<bigstr>.
6328
6329 =cut
6330 */
6331
6332 void
6333 Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *little, const STRLEN littlelen, const U32 flags)
6334 {
6335     char *big;
6336     char *mid;
6337     char *midend;
6338     char *bigend;
6339     SSize_t i;          /* better be sizeof(STRLEN) or bad things happen */
6340     STRLEN curlen;
6341
6342     PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
6343
6344     SvPV_force_flags(bigstr, curlen, flags);
6345     (void)SvPOK_only_UTF8(bigstr);
6346
6347     if (little >= SvPVX(bigstr) &&
6348         little < SvPVX(bigstr) + (SvLEN(bigstr) ? SvLEN(bigstr) : SvCUR(bigstr))) {
6349         /* little is a pointer to within bigstr, since we can reallocate bigstr,
6350            or little...little+littlelen might overlap offset...offset+len we make a copy
6351         */
6352         little = savepvn(little, littlelen);
6353         SAVEFREEPV(little);
6354     }
6355
6356     if (offset + len > curlen) {
6357         SvGROW(bigstr, offset+len+1);
6358         Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
6359         SvCUR_set(bigstr, offset+len);
6360     }
6361
6362     SvTAINT(bigstr);
6363     i = littlelen - len;
6364     if (i > 0) {                        /* string might grow */
6365         big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
6366         mid = big + offset + len;
6367         midend = bigend = big + SvCUR(bigstr);
6368         bigend += i;
6369         *bigend = '\0';
6370         while (midend > mid)            /* shove everything down */
6371             *--bigend = *--midend;
6372         Move(little,big+offset,littlelen,char);
6373         SvCUR_set(bigstr, SvCUR(bigstr) + i);
6374         SvSETMAGIC(bigstr);
6375         return;
6376     }
6377     else if (i == 0) {
6378         Move(little,SvPVX(bigstr)+offset,len,char);
6379         SvSETMAGIC(bigstr);
6380         return;
6381     }
6382
6383     big = SvPVX(bigstr);
6384     mid = big + offset;
6385     midend = mid + len;
6386     bigend = big + SvCUR(bigstr);
6387
6388     if (midend > bigend)
6389         Perl_croak(aTHX_ "panic: sv_insert, midend=%p, bigend=%p",
6390                    midend, bigend);
6391
6392     if (mid - big > bigend - midend) {  /* faster to shorten from end */
6393         if (littlelen) {
6394             Move(little, mid, littlelen,char);
6395             mid += littlelen;
6396         }
6397         i = bigend - midend;
6398         if (i > 0) {
6399             Move(midend, mid, i,char);
6400             mid += i;
6401         }
6402         *mid = '\0';
6403         SvCUR_set(bigstr, mid - big);
6404     }
6405     else if ((i = mid - big)) { /* faster from front */
6406         midend -= littlelen;
6407         mid = midend;
6408         Move(big, midend - i, i, char);
6409         sv_chop(bigstr,midend-i);
6410         if (littlelen)
6411             Move(little, mid, littlelen,char);
6412     }
6413     else if (littlelen) {
6414         midend -= littlelen;
6415         sv_chop(bigstr,midend);
6416         Move(little,midend,littlelen,char);
6417     }
6418     else {
6419         sv_chop(bigstr,midend);
6420     }
6421     SvSETMAGIC(bigstr);
6422 }
6423
6424 /*
6425 =for apidoc sv_replace
6426
6427 Make the first argument a copy of the second, then delete the original.
6428 The target SV physically takes over ownership of the body of the source SV
6429 and inherits its flags; however, the target keeps any magic it owns,
6430 and any magic in the source is discarded.
6431 Note that this is a rather specialist SV copying operation; most of the
6432 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
6433
6434 =cut
6435 */
6436
6437 void
6438 Perl_sv_replace(pTHX_ SV *const sv, SV *const nsv)
6439 {
6440     const U32 refcnt = SvREFCNT(sv);
6441
6442     PERL_ARGS_ASSERT_SV_REPLACE;
6443
6444     SV_CHECK_THINKFIRST_COW_DROP(sv);
6445     if (SvREFCNT(nsv) != 1) {
6446         Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
6447                    " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
6448     }
6449     if (SvMAGICAL(sv)) {
6450         if (SvMAGICAL(nsv))
6451             mg_free(nsv);
6452         else
6453             sv_upgrade(nsv, SVt_PVMG);
6454         SvMAGIC_set(nsv, SvMAGIC(sv));
6455         SvFLAGS(nsv) |= SvMAGICAL(sv);
6456         SvMAGICAL_off(sv);
6457         SvMAGIC_set(sv, NULL);
6458     }
6459     SvREFCNT(sv) = 0;
6460     sv_clear(sv);
6461     assert(!SvREFCNT(sv));
6462 #ifdef DEBUG_LEAKING_SCALARS
6463     sv->sv_flags  = nsv->sv_flags;
6464     sv->sv_any    = nsv->sv_any;
6465     sv->sv_refcnt = nsv->sv_refcnt;
6466     sv->sv_u      = nsv->sv_u;
6467 #else
6468     StructCopy(nsv,sv,SV);
6469 #endif
6470     if(SvTYPE(sv) == SVt_IV) {
6471         SET_SVANY_FOR_BODYLESS_IV(sv);
6472     }
6473         
6474
6475     SvREFCNT(sv) = refcnt;
6476     SvFLAGS(nsv) |= SVTYPEMASK;         /* Mark as freed */
6477     SvREFCNT(nsv) = 0;
6478     del_SV(nsv);
6479 }
6480
6481 /* We're about to free a GV which has a CV that refers back to us.
6482  * If that CV will outlive us, make it anonymous (i.e. fix up its CvGV
6483  * field) */
6484
6485 STATIC void
6486 S_anonymise_cv_maybe(pTHX_ GV *gv, CV* cv)
6487 {
6488     SV *gvname;
6489     GV *anongv;
6490
6491     PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE;
6492
6493     /* be assertive! */
6494     assert(SvREFCNT(gv) == 0);
6495     assert(isGV(gv) && isGV_with_GP(gv));
6496     assert(GvGP(gv));
6497     assert(!CvANON(cv));
6498     assert(CvGV(cv) == gv);
6499     assert(!CvNAMED(cv));
6500
6501     /* will the CV shortly be freed by gp_free() ? */
6502     if (GvCV(gv) == cv && GvGP(gv)->gp_refcnt < 2 && SvREFCNT(cv) < 2) {
6503         SvANY(cv)->xcv_gv_u.xcv_gv = NULL;
6504         return;
6505     }
6506
6507     /* if not, anonymise: */
6508     gvname = (GvSTASH(gv) && HvNAME(GvSTASH(gv)) && HvENAME(GvSTASH(gv)))
6509                     ? newSVhek(HvENAME_HEK(GvSTASH(gv)))
6510                     : newSVpvn_flags( "__ANON__", 8, 0 );
6511     sv_catpvs(gvname, "::__ANON__");
6512     anongv = gv_fetchsv(gvname, GV_ADDMULTI, SVt_PVCV);
6513     SvREFCNT_dec_NN(gvname);
6514
6515     CvANON_on(cv);
6516     CvCVGV_RC_on(cv);
6517     SvANY(cv)->xcv_gv_u.xcv_gv = MUTABLE_GV(SvREFCNT_inc(anongv));
6518 }
6519
6520
6521 /*
6522 =for apidoc sv_clear
6523
6524 Clear an SV: call any destructors, free up any memory used by the body,
6525 and free the body itself.  The SV's head is I<not> freed, although
6526 its type is set to all 1's so that it won't inadvertently be assumed
6527 to be live during global destruction etc.
6528 This function should only be called when C<REFCNT> is zero.  Most of the time
6529 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
6530 instead.
6531
6532 =cut
6533 */
6534
6535 void
6536 Perl_sv_clear(pTHX_ SV *const orig_sv)
6537 {
6538     dVAR;
6539     HV *stash;
6540     U32 type;
6541     const struct body_details *sv_type_details;
6542     SV* iter_sv = NULL;
6543     SV* next_sv = NULL;
6544     SV *sv = orig_sv;
6545     STRLEN hash_index = 0; /* initialise to make Coverity et al happy.
6546                               Not strictly necessary */
6547
6548     PERL_ARGS_ASSERT_SV_CLEAR;
6549
6550     /* within this loop, sv is the SV currently being freed, and
6551      * iter_sv is the most recent AV or whatever that's being iterated
6552      * over to provide more SVs */
6553
6554     while (sv) {
6555
6556         type = SvTYPE(sv);
6557
6558         assert(SvREFCNT(sv) == 0);
6559         assert(SvTYPE(sv) != (svtype)SVTYPEMASK);
6560
6561         if (type <= SVt_IV) {
6562             /* See the comment in sv.h about the collusion between this
6563              * early return and the overloading of the NULL slots in the
6564              * size table.  */
6565             if (SvROK(sv))
6566                 goto free_rv;
6567             SvFLAGS(sv) &= SVf_BREAK;
6568             SvFLAGS(sv) |= SVTYPEMASK;
6569             goto free_head;
6570         }
6571
6572         /* objs are always >= MG, but pad names use the SVs_OBJECT flag
6573            for another purpose  */
6574         assert(!SvOBJECT(sv) || type >= SVt_PVMG);
6575
6576         if (type >= SVt_PVMG) {
6577             if (SvOBJECT(sv)) {
6578                 if (!curse(sv, 1)) goto get_next_sv;
6579                 type = SvTYPE(sv); /* destructor may have changed it */
6580             }
6581             /* Free back-references before magic, in case the magic calls
6582              * Perl code that has weak references to sv. */
6583             if (type == SVt_PVHV) {
6584                 Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
6585                 if (SvMAGIC(sv))
6586                     mg_free(sv);
6587             }
6588             else if (SvMAGIC(sv)) {
6589                 /* Free back-references before other types of magic. */
6590                 sv_unmagic(sv, PERL_MAGIC_backref);
6591                 mg_free(sv);
6592             }
6593             SvMAGICAL_off(sv);
6594         }
6595         switch (type) {
6596             /* case SVt_INVLIST: */
6597         case SVt_PVIO:
6598             if (IoIFP(sv) &&
6599                 IoIFP(sv) != PerlIO_stdin() &&
6600                 IoIFP(sv) != PerlIO_stdout() &&
6601                 IoIFP(sv) != PerlIO_stderr() &&
6602                 !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6603             {
6604                 io_close(MUTABLE_IO(sv), NULL, FALSE,
6605                          (IoTYPE(sv) == IoTYPE_WRONLY ||
6606                           IoTYPE(sv) == IoTYPE_RDWR   ||
6607                           IoTYPE(sv) == IoTYPE_APPEND));
6608             }
6609             if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6610                 PerlDir_close(IoDIRP(sv));
6611             IoDIRP(sv) = (DIR*)NULL;
6612             Safefree(IoTOP_NAME(sv));
6613             Safefree(IoFMT_NAME(sv));
6614             Safefree(IoBOTTOM_NAME(sv));
6615             if ((const GV *)sv == PL_statgv)
6616                 PL_statgv = NULL;
6617             goto freescalar;
6618         case SVt_REGEXP:
6619             /* FIXME for plugins */
6620           freeregexp:
6621             pregfree2((REGEXP*) sv);
6622             goto freescalar;
6623         case SVt_PVCV:
6624         case SVt_PVFM:
6625             cv_undef(MUTABLE_CV(sv));
6626             /* If we're in a stash, we don't own a reference to it.
6627              * However it does have a back reference to us, which needs to
6628              * be cleared.  */
6629             if ((stash = CvSTASH(sv)))
6630                 sv_del_backref(MUTABLE_SV(stash), sv);
6631             goto freescalar;
6632         case SVt_PVHV:
6633             if (PL_last_swash_hv == (const HV *)sv) {
6634                 PL_last_swash_hv = NULL;
6635             }
6636             if (HvTOTALKEYS((HV*)sv) > 0) {
6637                 const HEK *hek;
6638                 /* this statement should match the one at the beginning of
6639                  * hv_undef_flags() */
6640                 if (   PL_phase != PERL_PHASE_DESTRUCT
6641                     && (hek = HvNAME_HEK((HV*)sv)))
6642                 {
6643                     if (PL_stashcache) {
6644                         DEBUG_o(Perl_deb(aTHX_
6645                             "sv_clear clearing PL_stashcache for '%" HEKf
6646                             "'\n",
6647                              HEKfARG(hek)));
6648                         (void)hv_deletehek(PL_stashcache,
6649                                            hek, G_DISCARD);
6650                     }
6651                     hv_name_set((HV*)sv, NULL, 0, 0);
6652                 }
6653
6654                 /* save old iter_sv in unused SvSTASH field */
6655                 assert(!SvOBJECT(sv));
6656                 SvSTASH(sv) = (HV*)iter_sv;
6657                 iter_sv = sv;
6658
6659                 /* save old hash_index in unused SvMAGIC field */
6660                 assert(!SvMAGICAL(sv));
6661                 assert(!SvMAGIC(sv));
6662                 ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index = hash_index;
6663                 hash_index = 0;
6664
6665                 next_sv = Perl_hfree_next_entry(aTHX_ (HV*)sv, &hash_index);
6666                 goto get_next_sv; /* process this new sv */
6667             }
6668             /* free empty hash */
6669             Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6670             assert(!HvARRAY((HV*)sv));
6671             break;
6672         case SVt_PVAV:
6673             {
6674                 AV* av = MUTABLE_AV(sv);
6675                 if (PL_comppad == av) {
6676                     PL_comppad = NULL;
6677                     PL_curpad = NULL;
6678                 }
6679                 if (AvREAL(av) && AvFILLp(av) > -1) {
6680                     next_sv = AvARRAY(av)[AvFILLp(av)--];
6681                     /* save old iter_sv in top-most slot of AV,
6682                      * and pray that it doesn't get wiped in the meantime */
6683                     AvARRAY(av)[AvMAX(av)] = iter_sv;
6684                     iter_sv = sv;
6685                     goto get_next_sv; /* process this new sv */
6686                 }
6687                 Safefree(AvALLOC(av));
6688             }
6689
6690             break;
6691         case SVt_PVLV:
6692             if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
6693                 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
6694                 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
6695                 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
6696             }
6697             else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV**  */
6698                 SvREFCNT_dec(LvTARG(sv));
6699             if (isREGEXP(sv)) goto freeregexp;
6700             /* FALLTHROUGH */
6701         case SVt_PVGV:
6702             if (isGV_with_GP(sv)) {
6703                 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
6704                    && HvENAME_get(stash))
6705                     mro_method_changed_in(stash);
6706                 gp_free(MUTABLE_GV(sv));
6707                 if (GvNAME_HEK(sv))
6708                     unshare_hek(GvNAME_HEK(sv));
6709                 /* If we're in a stash, we don't own a reference to it.
6710                  * However it does have a back reference to us, which
6711                  * needs to be cleared.  */
6712                 if ((stash = GvSTASH(sv)))
6713                         sv_del_backref(MUTABLE_SV(stash), sv);
6714             }
6715             /* FIXME. There are probably more unreferenced pointers to SVs
6716              * in the interpreter struct that we should check and tidy in
6717              * a similar fashion to this:  */
6718             /* See also S_sv_unglob, which does the same thing. */
6719             if ((const GV *)sv == PL_last_in_gv)
6720                 PL_last_in_gv = NULL;
6721             else if ((const GV *)sv == PL_statgv)
6722                 PL_statgv = NULL;
6723             else if ((const GV *)sv == PL_stderrgv)
6724                 PL_stderrgv = NULL;
6725             /* FALLTHROUGH */
6726         case SVt_PVMG:
6727         case SVt_PVNV:
6728         case SVt_PVIV:
6729         case SVt_INVLIST:
6730         case SVt_PV:
6731           freescalar:
6732             /* Don't bother with SvOOK_off(sv); as we're only going to
6733              * free it.  */
6734             if (SvOOK(sv)) {
6735                 STRLEN offset;
6736                 SvOOK_offset(sv, offset);
6737                 SvPV_set(sv, SvPVX_mutable(sv) - offset);
6738                 /* Don't even bother with turning off the OOK flag.  */
6739             }
6740             if (SvROK(sv)) {
6741             free_rv:
6742                 {
6743                     SV * const target = SvRV(sv);
6744                     if (SvWEAKREF(sv))
6745                         sv_del_backref(target, sv);
6746                     else
6747                         next_sv = target;
6748                 }
6749             }
6750 #ifdef PERL_ANY_COW
6751             else if (SvPVX_const(sv)
6752                      && !(SvTYPE(sv) == SVt_PVIO
6753                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6754             {
6755                 if (SvIsCOW(sv)) {
6756                     if (DEBUG_C_TEST) {
6757                         PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
6758                         sv_dump(sv);
6759                     }
6760                     if (SvLEN(sv)) {
6761                         if (CowREFCNT(sv)) {
6762                             sv_buf_to_rw(sv);
6763                             CowREFCNT(sv)--;
6764                             sv_buf_to_ro(sv);
6765                             SvLEN_set(sv, 0);
6766                         }
6767                     } else {
6768                         unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6769                     }
6770
6771                 }
6772                 if (SvLEN(sv)) {
6773                     Safefree(SvPVX_mutable(sv));
6774                 }
6775             }
6776 #else
6777             else if (SvPVX_const(sv) && SvLEN(sv)
6778                      && !(SvTYPE(sv) == SVt_PVIO
6779                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6780                 Safefree(SvPVX_mutable(sv));
6781             else if (SvPVX_const(sv) && SvIsCOW(sv)) {
6782                 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6783             }
6784 #endif
6785             break;
6786         case SVt_NV:
6787             break;
6788         }
6789
6790       free_body:
6791
6792         SvFLAGS(sv) &= SVf_BREAK;
6793         SvFLAGS(sv) |= SVTYPEMASK;
6794
6795         sv_type_details = bodies_by_type + type;
6796         if (sv_type_details->arena) {
6797             del_body(((char *)SvANY(sv) + sv_type_details->offset),
6798                      &PL_body_roots[type]);
6799         }
6800         else if (sv_type_details->body_size) {
6801             safefree(SvANY(sv));
6802         }
6803
6804       free_head:
6805         /* caller is responsible for freeing the head of the original sv */
6806         if (sv != orig_sv && !SvREFCNT(sv))
6807             del_SV(sv);
6808
6809         /* grab and free next sv, if any */
6810       get_next_sv:
6811         while (1) {
6812             sv = NULL;
6813             if (next_sv) {
6814                 sv = next_sv;
6815                 next_sv = NULL;
6816             }
6817             else if (!iter_sv) {
6818                 break;
6819             } else if (SvTYPE(iter_sv) == SVt_PVAV) {
6820                 AV *const av = (AV*)iter_sv;
6821                 if (AvFILLp(av) > -1) {
6822                     sv = AvARRAY(av)[AvFILLp(av)--];
6823                 }
6824                 else { /* no more elements of current AV to free */
6825                     sv = iter_sv;
6826                     type = SvTYPE(sv);
6827                     /* restore previous value, squirrelled away */
6828                     iter_sv = AvARRAY(av)[AvMAX(av)];
6829                     Safefree(AvALLOC(av));
6830                     goto free_body;
6831                 }
6832             } else if (SvTYPE(iter_sv) == SVt_PVHV) {
6833                 sv = Perl_hfree_next_entry(aTHX_ (HV*)iter_sv, &hash_index);
6834                 if (!sv && !HvTOTALKEYS((HV *)iter_sv)) {
6835                     /* no more elements of current HV to free */
6836                     sv = iter_sv;
6837                     type = SvTYPE(sv);
6838                     /* Restore previous values of iter_sv and hash_index,
6839                      * squirrelled away */
6840                     assert(!SvOBJECT(sv));
6841                     iter_sv = (SV*)SvSTASH(sv);
6842                     assert(!SvMAGICAL(sv));
6843                     hash_index = ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index;
6844 #ifdef DEBUGGING
6845                     /* perl -DA does not like rubbish in SvMAGIC. */
6846                     SvMAGIC_set(sv, 0);
6847 #endif
6848
6849                     /* free any remaining detritus from the hash struct */
6850                     Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6851                     assert(!HvARRAY((HV*)sv));
6852                     goto free_body;
6853                 }
6854             }
6855
6856             /* unrolled SvREFCNT_dec and sv_free2 follows: */
6857
6858             if (!sv)
6859                 continue;
6860             if (!SvREFCNT(sv)) {
6861                 sv_free(sv);
6862                 continue;
6863             }
6864             if (--(SvREFCNT(sv)))
6865                 continue;
6866 #ifdef DEBUGGING
6867             if (SvTEMP(sv)) {
6868                 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6869                          "Attempt to free temp prematurely: SV 0x%" UVxf
6870                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6871                 continue;
6872             }
6873 #endif
6874             if (SvIMMORTAL(sv)) {
6875                 /* make sure SvREFCNT(sv)==0 happens very seldom */
6876                 SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6877                 continue;
6878             }
6879             break;
6880         } /* while 1 */
6881
6882     } /* while sv */
6883 }
6884
6885 /* This routine curses the sv itself, not the object referenced by sv. So
6886    sv does not have to be ROK. */
6887
6888 static bool
6889 S_curse(pTHX_ SV * const sv, const bool check_refcnt) {
6890     PERL_ARGS_ASSERT_CURSE;
6891     assert(SvOBJECT(sv));
6892
6893     if (PL_defstash &&  /* Still have a symbol table? */
6894         SvDESTROYABLE(sv))
6895     {
6896         dSP;
6897         HV* stash;
6898         do {
6899           stash = SvSTASH(sv);
6900           assert(SvTYPE(stash) == SVt_PVHV);
6901           if (HvNAME(stash)) {
6902             CV* destructor = NULL;
6903             struct mro_meta *meta;
6904
6905             assert (SvOOK(stash));
6906
6907             DEBUG_o( Perl_deb(aTHX_ "Looking for DESTROY method for %s\n",
6908                          HvNAME(stash)) );
6909
6910             /* don't make this an initialization above the assert, since it needs
6911                an AUX structure */
6912             meta = HvMROMETA(stash);
6913             if (meta->destroy_gen && meta->destroy_gen == PL_sub_generation) {
6914                 destructor = meta->destroy;
6915                 DEBUG_o( Perl_deb(aTHX_ "Using cached DESTROY method %p for %s\n",
6916                              (void *)destructor, HvNAME(stash)) );
6917             }
6918             else {
6919                 bool autoload = FALSE;
6920                 GV *gv =
6921                     gv_fetchmeth_pvn(stash, S_destroy, S_destroy_len, -1, 0);
6922                 if (gv)
6923                     destructor = GvCV(gv);
6924                 if (!destructor) {
6925                     gv = gv_autoload_pvn(stash, S_destroy, S_destroy_len,
6926                                          GV_AUTOLOAD_ISMETHOD);
6927                     if (gv)
6928                         destructor = GvCV(gv);
6929                     if (destructor)
6930                         autoload = TRUE;
6931                 }
6932                 /* we don't cache AUTOLOAD for DESTROY, since this code
6933                    would then need to set $__PACKAGE__::AUTOLOAD, or the
6934                    equivalent for XS AUTOLOADs */
6935                 if (!autoload) {
6936                     meta->destroy_gen = PL_sub_generation;
6937                     meta->destroy = destructor;
6938
6939                     DEBUG_o( Perl_deb(aTHX_ "Set cached DESTROY method %p for %s\n",
6940                                       (void *)destructor, HvNAME(stash)) );
6941                 }
6942                 else {
6943                     DEBUG_o( Perl_deb(aTHX_ "Not caching AUTOLOAD for DESTROY method for %s\n",
6944                                       HvNAME(stash)) );
6945                 }
6946             }
6947             assert(!destructor || SvTYPE(destructor) == SVt_PVCV);
6948             if (destructor
6949                 /* A constant subroutine can have no side effects, so
6950                    don't bother calling it.  */
6951                 && !CvCONST(destructor)
6952                 /* Don't bother calling an empty destructor or one that
6953                    returns immediately. */
6954                 && (CvISXSUB(destructor)
6955                 || (CvSTART(destructor)
6956                     && (CvSTART(destructor)->op_next->op_type
6957                                         != OP_LEAVESUB)
6958                     && (CvSTART(destructor)->op_next->op_type
6959                                         != OP_PUSHMARK
6960                         || CvSTART(destructor)->op_next->op_next->op_type
6961                                         != OP_RETURN
6962                        )
6963                    ))
6964                )
6965             {
6966                 SV* const tmpref = newRV(sv);
6967                 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
6968                 ENTER;
6969                 PUSHSTACKi(PERLSI_DESTROY);
6970                 EXTEND(SP, 2);
6971                 PUSHMARK(SP);
6972                 PUSHs(tmpref);
6973                 PUTBACK;
6974                 call_sv(MUTABLE_SV(destructor),
6975                             G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
6976                 POPSTACK;
6977                 SPAGAIN;
6978                 LEAVE;
6979                 if(SvREFCNT(tmpref) < 2) {
6980                     /* tmpref is not kept alive! */
6981                     SvREFCNT(sv)--;
6982                     SvRV_set(tmpref, NULL);
6983                     SvROK_off(tmpref);
6984                 }
6985                 SvREFCNT_dec_NN(tmpref);
6986             }
6987           }
6988         } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
6989
6990
6991         if (check_refcnt && SvREFCNT(sv)) {
6992             if (PL_in_clean_objs)
6993                 Perl_croak(aTHX_
6994                   "DESTROY created new reference to dead object '%" HEKf "'",
6995                    HEKfARG(HvNAME_HEK(stash)));
6996             /* DESTROY gave object new lease on life */
6997             return FALSE;
6998         }
6999     }
7000
7001     if (SvOBJECT(sv)) {
7002         HV * const stash = SvSTASH(sv);
7003         /* Curse before freeing the stash, as freeing the stash could cause
7004            a recursive call into S_curse. */
7005         SvOBJECT_off(sv);       /* Curse the object. */
7006         SvSTASH_set(sv,0);      /* SvREFCNT_dec may try to read this */
7007         SvREFCNT_dec(stash); /* possibly of changed persuasion */
7008     }
7009     return TRUE;
7010 }
7011
7012 /*
7013 =for apidoc sv_newref
7014
7015 Increment an SV's reference count.  Use the C<SvREFCNT_inc()> wrapper
7016 instead.
7017
7018 =cut
7019 */
7020
7021 SV *
7022 Perl_sv_newref(pTHX_ SV *const sv)
7023 {
7024     PERL_UNUSED_CONTEXT;
7025     if (sv)
7026         (SvREFCNT(sv))++;
7027     return sv;
7028 }
7029
7030 /*
7031 =for apidoc sv_free
7032
7033 Decrement an SV's reference count, and if it drops to zero, call
7034 C<sv_clear> to invoke destructors and free up any memory used by
7035 the body; finally, deallocating the SV's head itself.
7036 Normally called via a wrapper macro C<SvREFCNT_dec>.
7037
7038 =cut
7039 */
7040
7041 void
7042 Perl_sv_free(pTHX_ SV *const sv)
7043 {
7044     SvREFCNT_dec(sv);
7045 }
7046
7047
7048 /* Private helper function for SvREFCNT_dec().
7049  * Called with rc set to original SvREFCNT(sv), where rc == 0 or 1 */
7050
7051 void
7052 Perl_sv_free2(pTHX_ SV *const sv, const U32 rc)
7053 {
7054     dVAR;
7055
7056     PERL_ARGS_ASSERT_SV_FREE2;
7057
7058     if (LIKELY( rc == 1 )) {
7059         /* normal case */
7060         SvREFCNT(sv) = 0;
7061
7062 #ifdef DEBUGGING
7063         if (SvTEMP(sv)) {
7064             Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
7065                              "Attempt to free temp prematurely: SV 0x%" UVxf
7066                              pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
7067             return;
7068         }
7069 #endif
7070         if (SvIMMORTAL(sv)) {
7071             /* make sure SvREFCNT(sv)==0 happens very seldom */
7072             SvREFCNT(sv) = SvREFCNT_IMMORTAL;
7073             return;
7074         }
7075         sv_clear(sv);
7076         if (! SvREFCNT(sv)) /* may have have been resurrected */
7077             del_SV(sv);
7078         return;
7079     }
7080
7081     /* handle exceptional cases */
7082
7083     assert(rc == 0);
7084
7085     if (SvFLAGS(sv) & SVf_BREAK)
7086         /* this SV's refcnt has been artificially decremented to
7087          * trigger cleanup */
7088         return;
7089     if (PL_in_clean_all) /* All is fair */
7090         return;
7091     if (SvIMMORTAL(sv)) {
7092         /* make sure SvREFCNT(sv)==0 happens very seldom */
7093         SvREFCNT(sv) = SvREFCNT_IMMORTAL;
7094         return;
7095     }
7096     if (ckWARN_d(WARN_INTERNAL)) {
7097 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
7098         Perl_dump_sv_child(aTHX_ sv);
7099 #else
7100     #ifdef DEBUG_LEAKING_SCALARS
7101         sv_dump(sv);
7102     #endif
7103 #ifdef DEBUG_LEAKING_SCALARS_ABORT
7104         if (PL_warnhook == PERL_WARNHOOK_FATAL
7105             || ckDEAD(packWARN(WARN_INTERNAL))) {
7106             /* Don't let Perl_warner cause us to escape our fate:  */
7107             abort();
7108         }
7109 #endif
7110         /* This may not return:  */
7111         Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
7112                     "Attempt to free unreferenced scalar: SV 0x%" UVxf
7113                     pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
7114 #endif
7115     }
7116 #ifdef DEBUG_LEAKING_SCALARS_ABORT
7117     abort();
7118 #endif
7119
7120 }
7121
7122
7123 /*
7124 =for apidoc sv_len
7125
7126 Returns the length of the string in the SV.  Handles magic and type
7127 coercion and sets the UTF8 flag appropriately.  See also C<L</SvCUR>>, which
7128 gives raw access to the C<xpv_cur> slot.
7129
7130 =cut
7131 */
7132
7133 STRLEN
7134 Perl_sv_len(pTHX_ SV *const sv)
7135 {
7136     STRLEN len;
7137
7138     if (!sv)
7139         return 0;
7140
7141     (void)SvPV_const(sv, len);
7142     return len;
7143 }
7144
7145 /*
7146 =for apidoc sv_len_utf8
7147
7148 Returns the number of characters in the string in an SV, counting wide
7149 UTF-8 bytes as a single character.  Handles magic and type coercion.
7150
7151 =cut
7152 */
7153
7154 /*
7155  * The length is cached in PERL_MAGIC_utf8, in the mg_len field.  Also the
7156  * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
7157  * (Note that the mg_len is not the length of the mg_ptr field.
7158  * This allows the cache to store the character length of the string without
7159  * needing to malloc() extra storage to attach to the mg_ptr.)
7160  *
7161  */
7162
7163 STRLEN
7164 Perl_sv_len_utf8(pTHX_ SV *const sv)
7165 {
7166     if (!sv)
7167         return 0;
7168
7169     SvGETMAGIC(sv);
7170     return sv_len_utf8_nomg(sv);
7171 }
7172
7173 STRLEN
7174 Perl_sv_len_utf8_nomg(pTHX_ SV * const sv)
7175 {
7176     STRLEN len;
7177     const U8 *s = (U8*)SvPV_nomg_const(sv, len);
7178
7179     PERL_ARGS_ASSERT_SV_LEN_UTF8_NOMG;
7180
7181     if (PL_utf8cache && SvUTF8(sv)) {
7182             STRLEN ulen;
7183             MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
7184
7185             if (mg && (mg->mg_len != -1 || mg->mg_ptr)) {
7186                 if (mg->mg_len != -1)
7187                     ulen = mg->mg_len;
7188                 else {
7189                     /* We can use the offset cache for a headstart.
7190                        The longer value is stored in the first pair.  */
7191                     STRLEN *cache = (STRLEN *) mg->mg_ptr;
7192
7193                     ulen = cache[0] + Perl_utf8_length(aTHX_ s + cache[1],
7194                                                        s + len);
7195                 }
7196                 
7197                 if (PL_utf8cache < 0) {
7198                     const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
7199                     assert_uft8_cache_coherent("sv_len_utf8", ulen, real, sv);
7200                 }
7201             }
7202             else {
7203                 ulen = Perl_utf8_length(aTHX_ s, s + len);
7204                 utf8_mg_len_cache_update(sv, &mg, ulen);
7205             }
7206             return ulen;
7207     }
7208     return SvUTF8(sv) ? Perl_utf8_length(aTHX_ s, s + len) : len;
7209 }
7210
7211 /* Walk forwards to find the byte corresponding to the passed in UTF-8
7212    offset.  */
7213 static STRLEN
7214 S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
7215                       STRLEN *const uoffset_p, bool *const at_end)
7216 {
7217     const U8 *s = start;
7218     STRLEN uoffset = *uoffset_p;
7219
7220     PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
7221
7222     while (s < send && uoffset) {
7223         --uoffset;
7224         s += UTF8SKIP(s);
7225     }
7226     if (s == send) {
7227         *at_end = TRUE;
7228     }
7229     else if (s > send) {
7230         *at_end = TRUE;
7231         /* This is the existing behaviour. Possibly it should be a croak, as
7232            it's actually a bounds error  */
7233         s = send;
7234     }
7235     *uoffset_p -= uoffset;
7236     return s - start;
7237 }
7238
7239 /* Given the length of the string in both bytes and UTF-8 characters, decide
7240    whether to walk forwards or backwards to find the byte corresponding to
7241    the passed in UTF-8 offset.  */
7242 static STRLEN
7243 S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
7244                     STRLEN uoffset, const STRLEN uend)
7245 {
7246     STRLEN backw = uend - uoffset;
7247
7248     PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
7249
7250     if (uoffset < 2 * backw) {
7251         /* The assumption is that going forwards is twice the speed of going
7252            forward (that's where the 2 * backw comes from).
7253            (The real figure of course depends on the UTF-8 data.)  */
7254         const U8 *s = start;
7255
7256         while (s < send && uoffset--)
7257             s += UTF8SKIP(s);
7258         assert (s <= send);
7259         if (s > send)
7260             s = send;
7261         return s - start;
7262     }
7263
7264     while (backw--) {
7265         send--;
7266         while (UTF8_IS_CONTINUATION(*send))
7267             send--;
7268     }
7269     return send - start;
7270 }
7271
7272 /* For the string representation of the given scalar, find the byte
7273    corresponding to the passed in UTF-8 offset.  uoffset0 and boffset0
7274    give another position in the string, *before* the sought offset, which
7275    (which is always true, as 0, 0 is a valid pair of positions), which should
7276    help reduce the amount of linear searching.
7277    If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
7278    will be used to reduce the amount of linear searching. The cache will be
7279    created if necessary, and the found value offered to it for update.  */
7280 static STRLEN
7281 S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
7282                     const U8 *const send, STRLEN uoffset,
7283                     STRLEN uoffset0, STRLEN boffset0)
7284 {
7285     STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy.  */
7286     bool found = FALSE;
7287     bool at_end = FALSE;
7288
7289     PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
7290
7291     assert (uoffset >= uoffset0);
7292
7293     if (!uoffset)
7294         return 0;
7295
7296     if (!SvREADONLY(sv) && !SvGMAGICAL(sv) && SvPOK(sv)
7297         && PL_utf8cache
7298         && (*mgp || (SvTYPE(sv) >= SVt_PVMG &&
7299                      (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) {
7300         if ((*mgp)->mg_ptr) {
7301             STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
7302             if (cache[0] == uoffset) {
7303                 /* An exact match. */
7304                 return cache[1];
7305             }
7306             if (cache[2] == uoffset) {
7307                 /* An exact match. */
7308                 return cache[3];
7309             }
7310
7311             if (cache[0] < uoffset) {
7312                 /* The cache already knows part of the way.   */
7313                 if (cache[0] > uoffset0) {
7314                     /* The cache knows more than the passed in pair  */
7315                     uoffset0 = cache[0];
7316                     boffset0 = cache[1];
7317                 }
7318                 if ((*mgp)->mg_len != -1) {
7319                     /* And we know the end too.  */
7320                     boffset = boffset0
7321                         + sv_pos_u2b_midway(start + boffset0, send,
7322                                               uoffset - uoffset0,
7323                                               (*mgp)->mg_len - uoffset0);
7324                 } else {
7325                     uoffset -= uoffset0;
7326                     boffset = boffset0
7327                         + sv_pos_u2b_forwards(start + boffset0,
7328                                               send, &uoffset, &at_end);
7329                     uoffset += uoffset0;
7330                 }
7331             }
7332             else if (cache[2] < uoffset) {
7333                 /* We're between the two cache entries.  */
7334                 if (cache[2] > uoffset0) {
7335                     /* and the cache knows more than the passed in pair  */
7336                     uoffset0 = cache[2];
7337                     boffset0 = cache[3];
7338                 }
7339
7340                 boffset = boffset0
7341                     + sv_pos_u2b_midway(start + boffset0,
7342                                           start + cache[1],
7343                                           uoffset - uoffset0,
7344                                           cache[0] - uoffset0);
7345             } else {
7346                 boffset = boffset0
7347                     + sv_pos_u2b_midway(start + boffset0,
7348                                           start + cache[3],
7349                                           uoffset - uoffset0,
7350                                           cache[2] - uoffset0);
7351             }
7352             found = TRUE;
7353         }
7354         else if ((*mgp)->mg_len != -1) {
7355             /* If we can take advantage of a passed in offset, do so.  */
7356             /* In fact, offset0 is either 0, or less than offset, so don't
7357                need to worry about the other possibility.  */
7358             boffset = boffset0
7359                 + sv_pos_u2b_midway(start + boffset0, send,
7360                                       uoffset - uoffset0,
7361                                       (*mgp)->mg_len - uoffset0);
7362             found = TRUE;
7363         }
7364     }
7365
7366     if (!found || PL_utf8cache < 0) {
7367         STRLEN real_boffset;
7368         uoffset -= uoffset0;
7369         real_boffset = boffset0 + sv_pos_u2b_forwards(start + boffset0,
7370                                                       send, &uoffset, &at_end);
7371         uoffset += uoffset0;
7372
7373         if (found && PL_utf8cache < 0)
7374             assert_uft8_cache_coherent("sv_pos_u2b_cache", boffset,
7375                                        real_boffset, sv);
7376         boffset = real_boffset;
7377     }
7378
7379     if (PL_utf8cache && !SvGMAGICAL(sv) && SvPOK(sv)) {
7380         if (at_end)
7381             utf8_mg_len_cache_update(sv, mgp, uoffset);
7382         else
7383             utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
7384     }
7385     return boffset;
7386 }
7387
7388
7389 /*
7390 =for apidoc sv_pos_u2b_flags
7391
7392 Converts the offset from a count of UTF-8 chars from
7393 the start of the string, to a count of the equivalent number of bytes; if
7394 C<lenp> is non-zero, it does the same to C<lenp>, but this time starting from
7395 C<offset>, rather than from the start
7396 of the string.  Handles type coercion.
7397 C<flags> is passed to C<SvPV_flags>, and usually should be
7398 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7399
7400 =cut
7401 */
7402
7403 /*
7404  * sv_pos_u2b_flags() uses, like sv_pos_b2u(), the mg_ptr of the potential
7405  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7406  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7407  *
7408  */
7409
7410 STRLEN
7411 Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp,
7412                       U32 flags)
7413 {
7414     const U8 *start;
7415     STRLEN len;
7416     STRLEN boffset;
7417
7418     PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS;
7419
7420     start = (U8*)SvPV_flags(sv, len, flags);
7421     if (len) {
7422         const U8 * const send = start + len;
7423         MAGIC *mg = NULL;
7424         boffset = sv_pos_u2b_cached(sv, &mg, start, send, uoffset, 0, 0);
7425
7426         if (lenp
7427             && *lenp /* don't bother doing work for 0, as its bytes equivalent
7428                         is 0, and *lenp is already set to that.  */) {
7429             /* Convert the relative offset to absolute.  */
7430             const STRLEN uoffset2 = uoffset + *lenp;
7431             const STRLEN boffset2
7432                 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
7433                                       uoffset, boffset) - boffset;
7434
7435             *lenp = boffset2;
7436         }
7437     } else {
7438         if (lenp)
7439             *lenp = 0;
7440         boffset = 0;
7441     }
7442
7443     return boffset;
7444 }
7445
7446 /*
7447 =for apidoc sv_pos_u2b
7448
7449 Converts the value pointed to by C<offsetp> from a count of UTF-8 chars from
7450 the start of the string, to a count of the equivalent number of bytes; if
7451 C<lenp> is non-zero, it does the same to C<lenp>, but this time starting from
7452 the offset, rather than from the start of the string.  Handles magic and
7453 type coercion.
7454
7455 Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
7456 than 2Gb.
7457
7458 =cut
7459 */
7460
7461 /*
7462  * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
7463  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7464  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7465  *
7466  */
7467
7468 /* This function is subject to size and sign problems */
7469
7470 void
7471 Perl_sv_pos_u2b(pTHX_ SV *const sv, I32 *const offsetp, I32 *const lenp)
7472 {
7473     PERL_ARGS_ASSERT_SV_POS_U2B;
7474
7475     if (lenp) {
7476         STRLEN ulen = (STRLEN)*lenp;
7477         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, &ulen,
7478                                          SV_GMAGIC|SV_CONST_RETURN);
7479         *lenp = (I32)ulen;
7480     } else {
7481         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, NULL,
7482                                          SV_GMAGIC|SV_CONST_RETURN);
7483     }
7484 }
7485
7486 static void
7487 S_utf8_mg_len_cache_update(pTHX_ SV *const sv, MAGIC **const mgp,
7488                            const STRLEN ulen)
7489 {
7490     PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE;
7491     if (SvREADONLY(sv) || SvGMAGICAL(sv) || !SvPOK(sv))
7492         return;
7493
7494     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7495                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7496         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, &PL_vtbl_utf8, 0, 0);
7497     }
7498     assert(*mgp);
7499
7500     (*mgp)->mg_len = ulen;
7501 }
7502
7503 /* Create and update the UTF8 magic offset cache, with the proffered utf8/
7504    byte length pairing. The (byte) length of the total SV is passed in too,
7505    as blen, because for some (more esoteric) SVs, the call to SvPV_const()
7506    may not have updated SvCUR, so we can't rely on reading it directly.
7507
7508    The proffered utf8/byte length pairing isn't used if the cache already has
7509    two pairs, and swapping either for the proffered pair would increase the
7510    RMS of the intervals between known byte offsets.
7511
7512    The cache itself consists of 4 STRLEN values
7513    0: larger UTF-8 offset
7514    1: corresponding byte offset
7515    2: smaller UTF-8 offset
7516    3: corresponding byte offset
7517
7518    Unused cache pairs have the value 0, 0.
7519    Keeping the cache "backwards" means that the invariant of
7520    cache[0] >= cache[2] is maintained even with empty slots, which means that
7521    the code that uses it doesn't need to worry if only 1 entry has actually
7522    been set to non-zero.  It also makes the "position beyond the end of the
7523    cache" logic much simpler, as the first slot is always the one to start
7524    from.   
7525 */
7526 static void
7527 S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
7528                            const STRLEN utf8, const STRLEN blen)
7529 {
7530     STRLEN *cache;
7531
7532     PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
7533
7534     if (SvREADONLY(sv))
7535         return;
7536
7537     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7538                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7539         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
7540                            0);
7541         (*mgp)->mg_len = -1;
7542     }
7543     assert(*mgp);
7544
7545     if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
7546         Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
7547         (*mgp)->mg_ptr = (char *) cache;
7548     }
7549     assert(cache);
7550
7551     if (PL_utf8cache < 0 && SvPOKp(sv)) {
7552         /* SvPOKp() because, if sv is a reference, then SvPVX() is actually
7553            a pointer.  Note that we no longer cache utf8 offsets on refer-
7554            ences, but this check is still a good idea, for robustness.  */
7555         const U8 *start = (const U8 *) SvPVX_const(sv);
7556         const STRLEN realutf8 = utf8_length(start, start + byte);
7557
7558         assert_uft8_cache_coherent("utf8_mg_pos_cache_update", utf8, realutf8,
7559                                    sv);
7560     }
7561
7562     /* Cache is held with the later position first, to simplify the code
7563        that deals with unbounded ends.  */
7564        
7565     ASSERT_UTF8_CACHE(cache);
7566     if (cache[1] == 0) {
7567         /* Cache is totally empty  */
7568         cache[0] = utf8;
7569         cache[1] = byte;
7570     } else if (cache[3] == 0) {
7571         if (byte > cache[1]) {
7572             /* New one is larger, so goes first.  */
7573             cache[2] = cache[0];
7574             cache[3] = cache[1];
7575             cache[0] = utf8;
7576             cache[1] = byte;
7577         } else {
7578             cache[2] = utf8;
7579             cache[3] = byte;
7580         }
7581     } else {
7582 /* float casts necessary? XXX */
7583 #define THREEWAY_SQUARE(a,b,c,d) \
7584             ((float)((d) - (c))) * ((float)((d) - (c))) \
7585             + ((float)((c) - (b))) * ((float)((c) - (b))) \
7586                + ((float)((b) - (a))) * ((float)((b) - (a)))
7587
7588         /* Cache has 2 slots in use, and we know three potential pairs.
7589            Keep the two that give the lowest RMS distance. Do the
7590            calculation in bytes simply because we always know the byte
7591            length.  squareroot has the same ordering as the positive value,
7592            so don't bother with the actual square root.  */
7593         if (byte > cache[1]) {
7594             /* New position is after the existing pair of pairs.  */
7595             const float keep_earlier
7596                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
7597             const float keep_later
7598                 = THREEWAY_SQUARE(0, cache[1], byte, blen);
7599
7600             if (keep_later < keep_earlier) {
7601                 cache[2] = cache[0];
7602                 cache[3] = cache[1];
7603             }
7604             cache[0] = utf8;
7605             cache[1] = byte;
7606         }
7607         else {
7608             const float keep_later = THREEWAY_SQUARE(0, byte, cache[1], blen);
7609             float b, c, keep_earlier;
7610             if (byte > cache[3]) {
7611                 /* New position is between the existing pair of pairs.  */
7612                 b = (float)cache[3];
7613                 c = (float)byte;
7614             } else {
7615                 /* New position is before the existing pair of pairs.  */
7616                 b = (float)byte;
7617                 c = (float)cache[3];
7618             }
7619             keep_earlier = THREEWAY_SQUARE(0, b, c, blen);
7620             if (byte > cache[3]) {
7621                 if (keep_later < keep_earlier) {
7622                     cache[2] = utf8;
7623                     cache[3] = byte;
7624                 }
7625                 else {
7626                     cache[0] = utf8;
7627                     cache[1] = byte;
7628                 }
7629             }
7630             else {
7631                 if (! (keep_later < keep_earlier)) {
7632                     cache[0] = cache[2];
7633                     cache[1] = cache[3];
7634                 }
7635                 cache[2] = utf8;
7636                 cache[3] = byte;
7637             }
7638         }
7639     }
7640     ASSERT_UTF8_CACHE(cache);
7641 }
7642
7643 /* We already know all of the way, now we may be able to walk back.  The same
7644    assumption is made as in S_sv_pos_u2b_midway(), namely that walking
7645    backward is half the speed of walking forward. */
7646 static STRLEN
7647 S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
7648                     const U8 *end, STRLEN endu)
7649 {
7650     const STRLEN forw = target - s;
7651     STRLEN backw = end - target;
7652
7653     PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
7654
7655     if (forw < 2 * backw) {
7656         return utf8_length(s, target);
7657     }
7658
7659     while (end > target) {
7660         end--;
7661         while (UTF8_IS_CONTINUATION(*end)) {
7662             end--;
7663         }
7664         endu--;
7665     }
7666     return endu;
7667 }
7668
7669 /*
7670 =for apidoc sv_pos_b2u_flags
7671
7672 Converts C<offset> from a count of bytes from the start of the string, to
7673 a count of the equivalent number of UTF-8 chars.  Handles type coercion.
7674 C<flags> is passed to C<SvPV_flags>, and usually should be
7675 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7676
7677 =cut
7678 */
7679
7680 /*
7681  * sv_pos_b2u_flags() uses, like sv_pos_u2b_flags(), the mg_ptr of the
7682  * potential PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8
7683  * and byte offsets.
7684  *
7685  */
7686 STRLEN
7687 Perl_sv_pos_b2u_flags(pTHX_ SV *const sv, STRLEN const offset, U32 flags)
7688 {
7689     const U8* s;
7690     STRLEN len = 0; /* Actually always set, but let's keep gcc happy.  */
7691     STRLEN blen;
7692     MAGIC* mg = NULL;
7693     const U8* send;
7694     bool found = FALSE;
7695
7696     PERL_ARGS_ASSERT_SV_POS_B2U_FLAGS;
7697
7698     s = (const U8*)SvPV_flags(sv, blen, flags);
7699
7700     if (blen < offset)
7701         Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset, blen=%" UVuf
7702                    ", byte=%" UVuf, (UV)blen, (UV)offset);
7703
7704     send = s + offset;
7705
7706     if (!SvREADONLY(sv)
7707         && PL_utf8cache
7708         && SvTYPE(sv) >= SVt_PVMG
7709         && (mg = mg_find(sv, PERL_MAGIC_utf8)))
7710     {
7711         if (mg->mg_ptr) {
7712             STRLEN * const cache = (STRLEN *) mg->mg_ptr;
7713             if (cache[1] == offset) {
7714                 /* An exact match. */
7715                 return cache[0];
7716             }
7717             if (cache[3] == offset) {
7718                 /* An exact match. */
7719                 return cache[2];
7720             }
7721
7722             if (cache[1] < offset) {
7723                 /* We already know part of the way. */
7724                 if (mg->mg_len != -1) {
7725                     /* Actually, we know the end too.  */
7726                     len = cache[0]
7727                         + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
7728                                               s + blen, mg->mg_len - cache[0]);
7729                 } else {
7730                     len = cache[0] + utf8_length(s + cache[1], send);
7731                 }
7732             }
7733             else if (cache[3] < offset) {
7734                 /* We're between the two cached pairs, so we do the calculation
7735                    offset by the byte/utf-8 positions for the earlier pair,
7736                    then add the utf-8 characters from the string start to
7737                    there.  */
7738                 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
7739                                           s + cache[1], cache[0] - cache[2])
7740                     + cache[2];
7741
7742             }
7743             else { /* cache[3] > offset */
7744                 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
7745                                           cache[2]);
7746
7747             }
7748             ASSERT_UTF8_CACHE(cache);
7749             found = TRUE;
7750         } else if (mg->mg_len != -1) {
7751             len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
7752             found = TRUE;
7753         }
7754     }
7755     if (!found || PL_utf8cache < 0) {
7756         const STRLEN real_len = utf8_length(s, send);
7757
7758         if (found && PL_utf8cache < 0)
7759             assert_uft8_cache_coherent("sv_pos_b2u", len, real_len, sv);
7760         len = real_len;
7761     }
7762
7763     if (PL_utf8cache) {
7764         if (blen == offset)
7765             utf8_mg_len_cache_update(sv, &mg, len);
7766         else
7767             utf8_mg_pos_cache_update(sv, &mg, offset, len, blen);
7768     }
7769
7770     return len;
7771 }
7772
7773 /*
7774 =for apidoc sv_pos_b2u
7775
7776 Converts the value pointed to by C<offsetp> from a count of bytes from the
7777 start of the string, to a count of the equivalent number of UTF-8 chars.
7778 Handles magic and type coercion.
7779
7780 Use C<sv_pos_b2u_flags> in preference, which correctly handles strings
7781 longer than 2Gb.
7782
7783 =cut
7784 */
7785
7786 /*
7787  * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
7788  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7789  * byte offsets.
7790  *
7791  */
7792 void
7793 Perl_sv_pos_b2u(pTHX_ SV *const sv, I32 *const offsetp)
7794 {
7795     PERL_ARGS_ASSERT_SV_POS_B2U;
7796
7797     if (!sv)
7798         return;
7799
7800     *offsetp = (I32)sv_pos_b2u_flags(sv, (STRLEN)*offsetp,
7801                                      SV_GMAGIC|SV_CONST_RETURN);
7802 }
7803
7804 static void
7805 S_assert_uft8_cache_coherent(pTHX_ const char *const func, STRLEN from_cache,
7806                              STRLEN real, SV *const sv)
7807 {
7808     PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT;
7809
7810     /* As this is debugging only code, save space by keeping this test here,
7811        rather than inlining it in all the callers.  */
7812     if (from_cache == real)
7813         return;
7814
7815     /* Need to turn the assertions off otherwise we may recurse infinitely
7816        while printing error messages.  */
7817     SAVEI8(PL_utf8cache);
7818     PL_utf8cache = 0;
7819     Perl_croak(aTHX_ "panic: %s cache %" UVuf " real %" UVuf " for %" SVf,
7820                func, (UV) from_cache, (UV) real, SVfARG(sv));
7821 }
7822
7823 /*
7824 =for apidoc sv_eq
7825
7826 Returns a boolean indicating whether the strings in the two SVs are
7827 identical.  Is UTF-8 and S<C<'use bytes'>> aware, handles get magic, and will
7828 coerce its args to strings if necessary.
7829
7830 =for apidoc sv_eq_flags
7831
7832 Returns a boolean indicating whether the strings in the two SVs are
7833 identical.  Is UTF-8 and S<C<'use bytes'>> aware and coerces its args to strings
7834 if necessary.  If the flags has the C<SV_GMAGIC> bit set, it handles get-magic, too.
7835
7836 =cut
7837 */
7838
7839 I32
7840 Perl_sv_eq_flags(pTHX_ SV *sv1, SV *sv2, const U32 flags)
7841 {
7842     const char *pv1;
7843     STRLEN cur1;
7844     const char *pv2;
7845     STRLEN cur2;
7846     I32  eq     = 0;
7847     SV* svrecode = NULL;
7848
7849     if (!sv1) {
7850         pv1 = "";
7851         cur1 = 0;
7852     }
7853     else {
7854         /* if pv1 and pv2 are the same, second SvPV_const call may
7855          * invalidate pv1 (if we are handling magic), so we may need to
7856          * make a copy */
7857         if (sv1 == sv2 && flags & SV_GMAGIC
7858          && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
7859             pv1 = SvPV_const(sv1, cur1);
7860             sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
7861         }
7862         pv1 = SvPV_flags_const(sv1, cur1, flags);
7863     }
7864
7865     if (!sv2){
7866         pv2 = "";
7867         cur2 = 0;
7868     }
7869     else
7870         pv2 = SvPV_flags_const(sv2, cur2, flags);
7871
7872     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7873         /* Differing utf8ness.  */
7874         if (SvUTF8(sv1)) {
7875                   /* sv1 is the UTF-8 one  */
7876                   return bytes_cmp_utf8((const U8*)pv2, cur2,
7877                                         (const U8*)pv1, cur1) == 0;
7878         }
7879         else {
7880                   /* sv2 is the UTF-8 one  */
7881                   return bytes_cmp_utf8((const U8*)pv1, cur1,
7882                                         (const U8*)pv2, cur2) == 0;
7883         }
7884     }
7885
7886     if (cur1 == cur2)
7887         eq = (pv1 == pv2) || memEQ(pv1, pv2, cur1);
7888         
7889     SvREFCNT_dec(svrecode);
7890
7891     return eq;
7892 }
7893
7894 /*
7895 =for apidoc sv_cmp
7896
7897 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7898 string in C<sv1> is less than, equal to, or greater than the string in
7899 C<sv2>.  Is UTF-8 and S<C<'use bytes'>> aware, handles get magic, and will
7900 coerce its args to strings if necessary.  See also C<L</sv_cmp_locale>>.
7901
7902 =for apidoc sv_cmp_flags
7903
7904 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7905 string in C<sv1> is less than, equal to, or greater than the string in
7906 C<sv2>.  Is UTF-8 and S<C<'use bytes'>> aware and will coerce its args to strings
7907 if necessary.  If the flags has the C<SV_GMAGIC> bit set, it handles get magic.  See
7908 also C<L</sv_cmp_locale_flags>>.
7909
7910 =cut
7911 */
7912
7913 I32
7914 Perl_sv_cmp(pTHX_ SV *const sv1, SV *const sv2)
7915 {
7916     return sv_cmp_flags(sv1, sv2, SV_GMAGIC);
7917 }
7918
7919 I32
7920 Perl_sv_cmp_flags(pTHX_ SV *const sv1, SV *const sv2,
7921                   const U32 flags)
7922 {
7923     STRLEN cur1, cur2;
7924     const char *pv1, *pv2;
7925     I32  cmp;
7926     SV *svrecode = NULL;
7927
7928     if (!sv1) {
7929         pv1 = "";
7930         cur1 = 0;
7931     }
7932     else
7933         pv1 = SvPV_flags_const(sv1, cur1, flags);
7934
7935     if (!sv2) {
7936         pv2 = "";
7937         cur2 = 0;
7938     }
7939     else
7940         pv2 = SvPV_flags_const(sv2, cur2, flags);
7941
7942     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7943         /* Differing utf8ness.  */
7944         if (SvUTF8(sv1)) {
7945                 const int retval = -bytes_cmp_utf8((const U8*)pv2, cur2,
7946                                                    (const U8*)pv1, cur1);
7947                 return retval ? retval < 0 ? -1 : +1 : 0;
7948         }
7949         else {
7950                 const int retval = bytes_cmp_utf8((const U8*)pv1, cur1,
7951                                                   (const U8*)pv2, cur2);
7952                 return retval ? retval < 0 ? -1 : +1 : 0;
7953         }
7954     }
7955
7956     /* Here, if both are non-NULL, then they have the same UTF8ness. */
7957
7958     if (!cur1) {
7959         cmp = cur2 ? -1 : 0;
7960     } else if (!cur2) {
7961         cmp = 1;
7962     } else {
7963         STRLEN shortest_len = cur1 < cur2 ? cur1 : cur2;
7964
7965 #ifdef EBCDIC
7966         if (! DO_UTF8(sv1)) {
7967 #endif
7968             const I32 retval = memcmp((const void*)pv1,
7969                                       (const void*)pv2,
7970                                       shortest_len);
7971             if (retval) {
7972                 cmp = retval < 0 ? -1 : 1;
7973             } else if (cur1 == cur2) {
7974                 cmp = 0;
7975             } else {
7976                 cmp = cur1 < cur2 ? -1 : 1;
7977             }
7978 #ifdef EBCDIC
7979         }
7980         else {  /* Both are to be treated as UTF-EBCDIC */
7981
7982             /* EBCDIC UTF-8 is complicated by the fact that it is based on I8
7983              * which remaps code points 0-255.  We therefore generally have to
7984              * unmap back to the original values to get an accurate comparison.
7985              * But we don't have to do that for UTF-8 invariants, as by
7986              * definition, they aren't remapped, nor do we have to do it for
7987              * above-latin1 code points, as they also aren't remapped.  (This
7988              * code also works on ASCII platforms, but the memcmp() above is
7989              * much faster). */
7990
7991             const char *e = pv1 + shortest_len;
7992
7993             /* Find the first bytes that differ between the two strings */
7994             while (pv1 < e && *pv1 == *pv2) {
7995                 pv1++;
7996                 pv2++;
7997             }
7998
7999
8000             if (pv1 == e) { /* Are the same all the way to the end */
8001                 if (cur1 == cur2) {
8002                     cmp = 0;
8003                 } else {
8004                     cmp = cur1 < cur2 ? -1 : 1;
8005                 }
8006             }
8007             else   /* Here *pv1 and *pv2 are not equal, but all bytes earlier
8008                     * in the strings were.  The current bytes may or may not be
8009                     * at the beginning of a character.  But neither or both are
8010                     * (or else earlier bytes would have been different).  And
8011                     * if we are in the middle of a character, the two
8012                     * characters are comprised of the same number of bytes
8013                     * (because in this case the start bytes are the same, and
8014                     * the start bytes encode the character's length). */
8015                  if (UTF8_IS_INVARIANT(*pv1))
8016             {
8017                 /* If both are invariants; can just compare directly */
8018                 if (UTF8_IS_INVARIANT(*pv2)) {
8019                     cmp = ((U8) *pv1 < (U8) *pv2) ? -1 : 1;
8020                 }
8021                 else   /* Since *pv1 is invariant, it is the whole character,
8022                           which means it is at the beginning of a character.
8023                           That means pv2 is also at the beginning of a
8024                           character (see earlier comment).  Since it isn't
8025                           invariant, it must be a start byte.  If it starts a
8026                           character whose code point is above 255, that
8027                           character is greater than any single-byte char, which
8028                           *pv1 is */
8029                       if (UTF8_IS_ABOVE_LATIN1_START(*pv2))
8030                 {
8031                     cmp = -1;
8032                 }
8033                 else {
8034                     /* Here, pv2 points to a character composed of 2 bytes
8035                      * whose code point is < 256.  Get its code point and
8036                      * compare with *pv1 */
8037                     cmp = ((U8) *pv1 < EIGHT_BIT_UTF8_TO_NATIVE(*pv2, *(pv2 + 1)))
8038                            ?  -1
8039                            : 1;
8040                 }
8041             }
8042             else   /* The code point starting at pv1 isn't a single byte */
8043                  if (UTF8_IS_INVARIANT(*pv2))
8044             {
8045                 /* But here, the code point starting at *pv2 is a single byte,
8046                  * and so *pv1 must begin a character, hence is a start byte.
8047                  * If that character is above 255, it is larger than any
8048                  * single-byte char, which *pv2 is */
8049                 if (UTF8_IS_ABOVE_LATIN1_START(*pv1)) {
8050                     cmp = 1;
8051                 }
8052                 else {
8053                     /* Here, pv1 points to a character composed of 2 bytes
8054                      * whose code point is < 256.  Get its code point and
8055                      * compare with the single byte character *pv2 */
8056                     cmp = (EIGHT_BIT_UTF8_TO_NATIVE(*pv1, *(pv1 + 1)) < (U8) *pv2)
8057                           ?  -1
8058                           : 1;
8059                 }
8060             }
8061             else   /* Here, we've ruled out either *pv1 and *pv2 being
8062                       invariant.  That means both are part of variants, but not
8063                       necessarily at the start of a character */
8064                  if (   UTF8_IS_ABOVE_LATIN1_START(*pv1)
8065                      || UTF8_IS_ABOVE_LATIN1_START(*pv2))
8066             {
8067                 /* Here, at least one is the start of a character, which means
8068                  * the other is also a start byte.  And the code point of at
8069                  * least one of the characters is above 255.  It is a
8070                  * characteristic of UTF-EBCDIC that all start bytes for
8071                  * above-latin1 code points are well behaved as far as code
8072                  * point comparisons go, and all are larger than all other
8073                  * start bytes, so the comparison with those is also well
8074                  * behaved */
8075                 cmp = ((U8) *pv1 < (U8) *pv2) ? -1 : 1;
8076             }
8077             else {
8078                 /* Here both *pv1 and *pv2 are part of variant characters.
8079                  * They could be both continuations, or both start characters.
8080                  * (One or both could even be an illegal start character (for
8081                  * an overlong) which for the purposes of sorting we treat as
8082                  * legal. */
8083                 if (UTF8_IS_CONTINUATION(*pv1)) {
8084
8085                     /* If they are continuations for code points above 255,
8086                      * then comparing the current byte is sufficient, as there
8087                      * is no remapping of these and so the comparison is
8088                      * well-behaved.   We determine if they are such
8089                      * continuations by looking at the preceding byte.  It
8090                      * could be a start byte, from which we can tell if it is
8091                      * for an above 255 code point.  Or it could be a
8092                      * continuation, which means the character occupies at
8093                      * least 3 bytes, so must be above 255.  */
8094                     if (   UTF8_IS_CONTINUATION(*(pv2 - 1))
8095                         || UTF8_IS_ABOVE_LATIN1_START(*(pv2 -1)))
8096                     {
8097                         cmp = ((U8) *pv1 < (U8) *pv2) ? -1 : 1;
8098                         goto cmp_done;
8099                     }
8100
8101                     /* Here, the continuations are for code points below 256;
8102                      * back up one to get to the start byte */
8103                     pv1--;
8104                     pv2--;
8105                 }
8106
8107                 /* We need to get the actual native code point of each of these
8108                  * variants in order to compare them */
8109                 cmp =  (  EIGHT_BIT_UTF8_TO_NATIVE(*pv1, *(pv1 + 1))
8110                         < EIGHT_BIT_UTF8_TO_NATIVE(*pv2, *(pv2 + 1)))
8111                         ? -1
8112                         : 1;
8113             }
8114         }
8115       cmp_done: ;
8116 #endif
8117     }
8118
8119     SvREFCNT_dec(svrecode);
8120
8121     return cmp;
8122 }
8123
8124 /*
8125 =for apidoc sv_cmp_locale
8126
8127 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
8128 S<C<'use bytes'>> aware, handles get magic, and will coerce its args to strings
8129 if necessary.  See also C<L</sv_cmp>>.
8130
8131 =for apidoc sv_cmp_locale_flags
8132
8133 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
8134 S<C<'use bytes'>> aware and will coerce its args to strings if necessary.  If
8135 the flags contain C<SV_GMAGIC>, it handles get magic.  See also
8136 C<L</sv_cmp_flags>>.
8137
8138 =cut
8139 */
8140
8141 I32
8142 Perl_sv_cmp_locale(pTHX_ SV *const sv1, SV *const sv2)
8143 {
8144     return sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC);
8145 }
8146
8147 I32
8148 Perl_sv_cmp_locale_flags(pTHX_ SV *const sv1, SV *const sv2,
8149                          const U32 flags)
8150 {
8151 #ifdef USE_LOCALE_COLLATE
8152
8153     char *pv1, *pv2;
8154     STRLEN len1, len2;
8155     I32 retval;
8156
8157     if (PL_collation_standard)
8158         goto raw_compare;
8159
8160     len1 = len2 = 0;
8161
8162     /* Revert to using raw compare if both operands exist, but either one
8163      * doesn't transform properly for collation */
8164     if (sv1 && sv2) {
8165         pv1 = sv_collxfrm_flags(sv1, &len1, flags);
8166         if (! pv1) {
8167             goto raw_compare;
8168         }
8169         pv2 = sv_collxfrm_flags(sv2, &len2, flags);
8170         if (! pv2) {
8171             goto raw_compare;
8172         }
8173     }
8174     else {
8175         pv1 = sv1 ? sv_collxfrm_flags(sv1, &len1, flags) : (char *) NULL;
8176         pv2 = sv2 ? sv_collxfrm_flags(sv2, &len2, flags) : (char *) NULL;
8177     }
8178
8179     if (!pv1 || !len1) {
8180         if (pv2 && len2)
8181             return -1;
8182         else
8183             goto raw_compare;
8184     }
8185     else {
8186         if (!pv2 || !len2)
8187             return 1;
8188     }
8189
8190     retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
8191
8192     if (retval)
8193         return retval < 0 ? -1 : 1;
8194
8195     /*
8196      * When the result of collation is equality, that doesn't mean
8197      * that there are no differences -- some locales exclude some
8198      * characters from consideration.  So to avoid false equalities,
8199      * we use the raw string as a tiebreaker.
8200      */
8201
8202   raw_compare:
8203     /* FALLTHROUGH */
8204
8205 #else
8206     PERL_UNUSED_ARG(flags);
8207 #endif /* USE_LOCALE_COLLATE */
8208
8209     return sv_cmp(sv1, sv2);
8210 }
8211
8212
8213 #ifdef USE_LOCALE_COLLATE
8214
8215 /*
8216 =for apidoc sv_collxfrm
8217
8218 This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag.  See
8219 C<L</sv_collxfrm_flags>>.
8220
8221 =for apidoc sv_collxfrm_flags
8222
8223 Add Collate Transform magic to an SV if it doesn't already have it.  If the
8224 flags contain C<SV_GMAGIC>, it handles get-magic.
8225
8226 Any scalar variable may carry C<PERL_MAGIC_collxfrm> magic that contains the
8227 scalar data of the variable, but transformed to such a format that a normal
8228 memory comparison can be used to compare the data according to the locale
8229 settings.
8230
8231 =cut
8232 */
8233
8234 char *
8235 Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp, const I32 flags)
8236 {
8237     MAGIC *mg;
8238
8239     PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS;
8240
8241     mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
8242
8243     /* If we don't have collation magic on 'sv', or the locale has changed
8244      * since the last time we calculated it, get it and save it now */
8245     if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
8246         const char *s;
8247         char *xf;
8248         STRLEN len, xlen;
8249
8250         /* Free the old space */
8251         if (mg)
8252             Safefree(mg->mg_ptr);
8253
8254         s = SvPV_flags_const(sv, len, flags);
8255         if ((xf = _mem_collxfrm(s, len, &xlen, cBOOL(SvUTF8(sv))))) {
8256             if (! mg) {
8257                 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
8258                                  0, 0);
8259                 assert(mg);
8260             }
8261             mg->mg_ptr = xf;
8262             mg->mg_len = xlen;
8263         }
8264         else {
8265             if (mg) {
8266                 mg->mg_ptr = NULL;
8267                 mg->mg_len = -1;
8268             }
8269         }
8270     }
8271
8272     if (mg && mg->mg_ptr) {
8273         *nxp = mg->mg_len;
8274         return mg->mg_ptr + sizeof(PL_collation_ix);
8275     }
8276     else {
8277         *nxp = 0;
8278         return NULL;
8279     }
8280 }
8281
8282 #endif /* USE_LOCALE_COLLATE */
8283
8284 static char *
8285 S_sv_gets_append_to_utf8(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8286 {
8287     SV * const tsv = newSV(0);
8288     ENTER;
8289     SAVEFREESV(tsv);
8290     sv_gets(tsv, fp, 0);
8291     sv_utf8_upgrade_nomg(tsv);
8292     SvCUR_set(sv,append);
8293     sv_catsv(sv,tsv);
8294     LEAVE;
8295     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8296 }
8297
8298 static char *
8299 S_sv_gets_read_record(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8300 {
8301     SSize_t bytesread;
8302     const STRLEN recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
8303       /* Grab the size of the record we're getting */
8304     char *buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
8305     
8306     /* Go yank in */
8307 #ifdef __VMS
8308     int fd;
8309     Stat_t st;
8310
8311     /* With a true, record-oriented file on VMS, we need to use read directly
8312      * to ensure that we respect RMS record boundaries.  The user is responsible
8313      * for providing a PL_rs value that corresponds to the FAB$W_MRS (maximum
8314      * record size) field.  N.B. This is likely to produce invalid results on
8315      * varying-width character data when a record ends mid-character.
8316      */
8317     fd = PerlIO_fileno(fp);
8318     if (fd != -1
8319         && PerlLIO_fstat(fd, &st) == 0
8320         && (st.st_fab_rfm == FAB$C_VAR
8321             || st.st_fab_rfm == FAB$C_VFC
8322             || st.st_fab_rfm == FAB$C_FIX)) {
8323
8324         bytesread = PerlLIO_read(fd, buffer, recsize);
8325     }
8326     else /* in-memory file from PerlIO::Scalar
8327           * or not a record-oriented file
8328           */
8329 #endif
8330     {
8331         bytesread = PerlIO_read(fp, buffer, recsize);
8332
8333         /* At this point, the logic in sv_get() means that sv will
8334            be treated as utf-8 if the handle is utf8.
8335         */
8336         if (PerlIO_isutf8(fp) && bytesread > 0) {
8337             char *bend = buffer + bytesread;
8338             char *bufp = buffer;
8339             size_t charcount = 0;
8340             bool charstart = TRUE;
8341             STRLEN skip = 0;
8342
8343             while (charcount < recsize) {
8344                 /* count accumulated characters */
8345                 while (bufp < bend) {
8346                     if (charstart) {
8347                         skip = UTF8SKIP(bufp);
8348                     }
8349                     if (bufp + skip > bend) {
8350                         /* partial at the end */
8351                         charstart = FALSE;
8352                         break;
8353                     }
8354                     else {
8355                         ++charcount;
8356                         bufp += skip;
8357                         charstart = TRUE;
8358                     }
8359                 }
8360
8361                 if (charcount < recsize) {
8362                     STRLEN readsize;
8363                     STRLEN bufp_offset = bufp - buffer;
8364                     SSize_t morebytesread;
8365
8366                     /* originally I read enough to fill any incomplete
8367                        character and the first byte of the next
8368                        character if needed, but if there's many
8369                        multi-byte encoded characters we're going to be
8370                        making a read call for every character beyond
8371                        the original read size.
8372
8373                        So instead, read the rest of the character if
8374                        any, and enough bytes to match at least the
8375                        start bytes for each character we're going to
8376                        read.
8377                     */
8378                     if (charstart)
8379                         readsize = recsize - charcount;
8380                     else 
8381                         readsize = skip - (bend - bufp) + recsize - charcount - 1;
8382                     buffer = SvGROW(sv, append + bytesread + readsize + 1) + append;
8383                     bend = buffer + bytesread;
8384                     morebytesread = PerlIO_read(fp, bend, readsize);
8385                     if (morebytesread <= 0) {
8386                         /* we're done, if we still have incomplete
8387                            characters the check code in sv_gets() will
8388                            warn about them.
8389
8390                            I'd originally considered doing
8391                            PerlIO_ungetc() on all but the lead
8392                            character of the incomplete character, but
8393                            read() doesn't do that, so I don't.
8394                         */
8395                         break;
8396                     }
8397
8398                     /* prepare to scan some more */
8399                     bytesread += morebytesread;
8400                     bend = buffer + bytesread;
8401                     bufp = buffer + bufp_offset;
8402                 }
8403             }
8404         }
8405     }
8406
8407     if (bytesread < 0)
8408         bytesread = 0;
8409     SvCUR_set(sv, bytesread + append);
8410     buffer[bytesread] = '\0';
8411     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8412 }
8413
8414 /*
8415 =for apidoc sv_gets
8416
8417 Get a line from the filehandle and store it into the SV, optionally
8418 appending to the currently-stored string.  If C<append> is not 0, the
8419 line is appended to the SV instead of overwriting it.  C<append> should
8420 be set to the byte offset that the appended string should start at
8421 in the SV (typically, C<SvCUR(sv)> is a suitable choice).
8422
8423 =cut
8424 */
8425
8426 char *
8427 Perl_sv_gets(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8428 {
8429     const char *rsptr;
8430     STRLEN rslen;
8431     STDCHAR rslast;
8432     STDCHAR *bp;
8433     SSize_t cnt;
8434     int i = 0;
8435     int rspara = 0;
8436
8437     PERL_ARGS_ASSERT_SV_GETS;
8438
8439     if (SvTHINKFIRST(sv))
8440         sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
8441     /* XXX. If you make this PVIV, then copy on write can copy scalars read
8442        from <>.
8443        However, perlbench says it's slower, because the existing swipe code
8444        is faster than copy on write.
8445        Swings and roundabouts.  */
8446     SvUPGRADE(sv, SVt_PV);
8447
8448     if (append) {
8449         /* line is going to be appended to the existing buffer in the sv */
8450         if (PerlIO_isutf8(fp)) {
8451             if (!SvUTF8(sv)) {
8452                 sv_utf8_upgrade_nomg(sv);
8453                 sv_pos_u2b(sv,&append,0);
8454             }
8455         } else if (SvUTF8(sv)) {
8456             return S_sv_gets_append_to_utf8(aTHX_ sv, fp, append);
8457         }
8458     }
8459
8460     SvPOK_only(sv);
8461     if (!append) {
8462         /* not appending - "clear" the string by setting SvCUR to 0,
8463          * the pv is still avaiable. */
8464         SvCUR_set(sv,0);
8465     }
8466     if (PerlIO_isutf8(fp))
8467         SvUTF8_on(sv);
8468
8469     if (IN_PERL_COMPILETIME) {
8470         /* we always read code in line mode */
8471         rsptr = "\n";
8472         rslen = 1;
8473     }
8474     else if (RsSNARF(PL_rs)) {
8475         /* If it is a regular disk file use size from stat() as estimate
8476            of amount we are going to read -- may result in mallocing
8477            more memory than we really need if the layers below reduce
8478            the size we read (e.g. CRLF or a gzip layer).
8479          */
8480         Stat_t st;
8481         int fd = PerlIO_fileno(fp);
8482         if (fd >= 0 && (PerlLIO_fstat(fd, &st) == 0) && S_ISREG(st.st_mode))  {
8483             const Off_t offset = PerlIO_tell(fp);
8484             if (offset != (Off_t) -1 && st.st_size + append > offset) {
8485 #ifdef PERL_COPY_ON_WRITE
8486                 /* Add an extra byte for the sake of copy-on-write's
8487                  * buffer reference count. */
8488                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 2));
8489 #else
8490                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
8491 #endif
8492             }
8493         }
8494         rsptr = NULL;
8495         rslen = 0;
8496     }
8497     else if (RsRECORD(PL_rs)) {
8498         return S_sv_gets_read_record(aTHX_ sv, fp, append);
8499     }
8500     else if (RsPARA(PL_rs)) {
8501         rsptr = "\n\n";
8502         rslen = 2;
8503         rspara = 1;
8504     }
8505     else {
8506         /* Get $/ i.e. PL_rs into same encoding as stream wants */
8507         if (PerlIO_isutf8(fp)) {
8508             rsptr = SvPVutf8(PL_rs, rslen);
8509         }
8510         else {
8511             if (SvUTF8(PL_rs)) {
8512                 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
8513                     Perl_croak(aTHX_ "Wide character in $/");
8514                 }
8515             }
8516             /* extract the raw pointer to the record separator */
8517             rsptr = SvPV_const(PL_rs, rslen);
8518         }
8519     }
8520
8521     /* rslast is the last character in the record separator
8522      * note we don't use rslast except when rslen is true, so the
8523      * null assign is a placeholder. */
8524     rslast = rslen ? rsptr[rslen - 1] : '\0';
8525
8526     if (rspara) {               /* have to do this both before and after */
8527         do {                    /* to make sure file boundaries work right */
8528             if (PerlIO_eof(fp))
8529                 return 0;
8530             i = PerlIO_getc(fp);
8531             if (i != '\n') {
8532                 if (i == -1)
8533                     return 0;
8534                 PerlIO_ungetc(fp,i);
8535                 break;
8536             }
8537         } while (i != EOF);
8538     }
8539
8540     /* See if we know enough about I/O mechanism to cheat it ! */
8541
8542     /* This used to be #ifdef test - it is made run-time test for ease
8543        of abstracting out stdio interface. One call should be cheap
8544        enough here - and may even be a macro allowing compile
8545        time optimization.
8546      */
8547
8548     if (PerlIO_fast_gets(fp)) {
8549     /*
8550      * We can do buffer based IO operations on this filehandle.
8551      *
8552      * This means we can bypass a lot of subcalls and process
8553      * the buffer directly, it also means we know the upper bound
8554      * on the amount of data we might read of the current buffer
8555      * into our sv. Knowing this allows us to preallocate the pv
8556      * to be able to hold that maximum, which allows us to simplify
8557      * a lot of logic. */
8558
8559     /*
8560      * We're going to steal some values from the stdio struct
8561      * and put EVERYTHING in the innermost loop into registers.
8562      */
8563     STDCHAR *ptr;       /* pointer into fp's read-ahead buffer */
8564     STRLEN bpx;         /* length of the data in the target sv
8565                            used to fix pointers after a SvGROW */
8566     I32 shortbuffered;  /* If the pv buffer is shorter than the amount
8567                            of data left in the read-ahead buffer.
8568                            If 0 then the pv buffer can hold the full
8569                            amount left, otherwise this is the amount it
8570                            can hold. */
8571
8572     /* Here is some breathtakingly efficient cheating */
8573
8574     /* When you read the following logic resist the urge to think
8575      * of record separators that are 1 byte long. They are an
8576      * uninteresting special (simple) case.
8577      *
8578      * Instead think of record separators which are at least 2 bytes
8579      * long, and keep in mind that we need to deal with such
8580      * separators when they cross a read-ahead buffer boundary.
8581      *
8582      * Also consider that we need to gracefully deal with separators
8583      * that may be longer than a single read ahead buffer.
8584      *
8585      * Lastly do not forget we want to copy the delimiter as well. We
8586      * are copying all data in the file _up_to_and_including_ the separator
8587      * itself.
8588      *
8589      * Now that you have all that in mind here is what is happening below:
8590      *
8591      * 1. When we first enter the loop we do some memory book keeping to see
8592      * how much free space there is in the target SV. (This sub assumes that
8593      * it is operating on the same SV most of the time via $_ and that it is
8594      * going to be able to reuse the same pv buffer each call.) If there is
8595      * "enough" room then we set "shortbuffered" to how much space there is
8596      * and start reading forward.
8597      *
8598      * 2. When we scan forward we copy from the read-ahead buffer to the target
8599      * SV's pv buffer. While we go we watch for the end of the read-ahead buffer,
8600      * and the end of the of pv, as well as for the "rslast", which is the last
8601      * char of the separator.
8602      *
8603      * 3. When scanning forward if we see rslast then we jump backwards in *pv*
8604      * (which has a "complete" record up to the point we saw rslast) and check
8605      * it to see if it matches the separator. If it does we are done. If it doesn't
8606      * we continue on with the scan/copy.
8607      *
8608      * 4. If we run out of read-ahead buffer (cnt goes to 0) then we have to get
8609      * the IO system to read the next buffer. We do this by doing a getc(), which
8610      * returns a single char read (or EOF), and prefills the buffer, and also
8611      * allows us to find out how full the buffer is.  We use this information to
8612      * SvGROW() the sv to the size remaining in the buffer, after which we copy
8613      * the returned single char into the target sv, and then go back into scan
8614      * forward mode.
8615      *
8616      * 5. If we run out of write-buffer then we SvGROW() it by the size of the
8617      * remaining space in the read-buffer.
8618      *
8619      * Note that this code despite its twisty-turny nature is pretty darn slick.
8620      * It manages single byte separators, multi-byte cross boundary separators,
8621      * and cross-read-buffer separators cleanly and efficiently at the cost
8622      * of potentially greatly overallocating the target SV.
8623      *
8624      * Yves
8625      */
8626
8627
8628     /* get the number of bytes remaining in the read-ahead buffer
8629      * on first call on a given fp this will return 0.*/
8630     cnt = PerlIO_get_cnt(fp);
8631
8632     /* make sure we have the room */
8633     if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
8634         /* Not room for all of it
8635            if we are looking for a separator and room for some
8636          */
8637         if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
8638             /* just process what we have room for */
8639             shortbuffered = cnt - SvLEN(sv) + append + 1;
8640             cnt -= shortbuffered;
8641         }
8642         else {
8643             /* ensure that the target sv has enough room to hold
8644              * the rest of the read-ahead buffer */
8645             shortbuffered = 0;
8646             /* remember that cnt can be negative */
8647             SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
8648         }
8649     }
8650     else {
8651         /* we have enough room to hold the full buffer, lets scream */
8652         shortbuffered = 0;
8653     }
8654
8655     /* extract the pointer to sv's string buffer, offset by append as necessary */
8656     bp = (STDCHAR*)SvPVX_const(sv) + append;  /* move these two too to registers */
8657     /* extract the point to the read-ahead buffer */
8658     ptr = (STDCHAR*)PerlIO_get_ptr(fp);
8659
8660     /* some trace debug output */
8661     DEBUG_P(PerlIO_printf(Perl_debug_log,
8662         "Screamer: entering, ptr=%" UVuf ", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
8663     DEBUG_P(PerlIO_printf(Perl_debug_log,
8664         "Screamer: entering: PerlIO * thinks ptr=%" UVuf ", cnt=%" IVdf ", base=%"
8665          UVuf "\n",
8666                PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8667                PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
8668
8669     for (;;) {
8670       screamer:
8671         /* if there is stuff left in the read-ahead buffer */
8672         if (cnt > 0) {
8673             /* if there is a separator */
8674             if (rslen) {
8675                 /* find next rslast */
8676                 STDCHAR *p;
8677
8678                 /* shortcut common case of blank line */
8679                 cnt--;
8680                 if ((*bp++ = *ptr++) == rslast)
8681                     goto thats_all_folks;
8682
8683                 p = (STDCHAR *)memchr(ptr, rslast, cnt);
8684                 if (p) {
8685                     SSize_t got = p - ptr + 1;
8686                     Copy(ptr, bp, got, STDCHAR);
8687                     ptr += got;
8688                     bp  += got;
8689                     cnt -= got;
8690                     goto thats_all_folks;
8691                 }
8692                 Copy(ptr, bp, cnt, STDCHAR);
8693                 ptr += cnt;
8694                 bp  += cnt;
8695                 cnt = 0;
8696             }
8697             else {
8698                 /* no separator, slurp the full buffer */
8699                 Copy(ptr, bp, cnt, char);            /* this     |  eat */
8700                 bp += cnt;                           /* screams  |  dust */
8701                 ptr += cnt;                          /* louder   |  sed :-) */
8702                 cnt = 0;
8703                 assert (!shortbuffered);
8704                 goto cannot_be_shortbuffered;
8705             }
8706         }
8707         
8708         if (shortbuffered) {            /* oh well, must extend */
8709             /* we didnt have enough room to fit the line into the target buffer
8710              * so we must extend the target buffer and keep going */
8711             cnt = shortbuffered;
8712             shortbuffered = 0;
8713             bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
8714             SvCUR_set(sv, bpx);
8715             /* extned the target sv's buffer so it can hold the full read-ahead buffer */
8716             SvGROW(sv, SvLEN(sv) + append + cnt + 2);
8717             bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
8718             continue;
8719         }
8720
8721     cannot_be_shortbuffered:
8722         /* we need to refill the read-ahead buffer if possible */
8723
8724         DEBUG_P(PerlIO_printf(Perl_debug_log,
8725                              "Screamer: going to getc, ptr=%" UVuf ", cnt=%" IVdf "\n",
8726                               PTR2UV(ptr),(IV)cnt));
8727         PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
8728
8729         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8730            "Screamer: pre: FILE * thinks ptr=%" UVuf ", cnt=%" IVdf ", base=%" UVuf "\n",
8731             PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8732             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8733
8734         /*
8735             call PerlIO_getc() to let it prefill the lookahead buffer
8736
8737             This used to call 'filbuf' in stdio form, but as that behaves like
8738             getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
8739             another abstraction.
8740
8741             Note we have to deal with the char in 'i' if we are not at EOF
8742         */
8743         i   = PerlIO_getc(fp);          /* get more characters */
8744
8745         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8746            "Screamer: post: FILE * thinks ptr=%" UVuf ", cnt=%" IVdf ", base=%" UVuf "\n",
8747             PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8748             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8749
8750         /* find out how much is left in the read-ahead buffer, and rextract its pointer */
8751         cnt = PerlIO_get_cnt(fp);
8752         ptr = (STDCHAR*)PerlIO_get_ptr(fp);     /* reregisterize cnt and ptr */
8753         DEBUG_P(PerlIO_printf(Perl_debug_log,
8754             "Screamer: after getc, ptr=%" UVuf ", cnt=%" IVdf "\n",
8755             PTR2UV(ptr),(IV)cnt));
8756
8757         if (i == EOF)                   /* all done for ever? */
8758             goto thats_really_all_folks;
8759
8760         /* make sure we have enough space in the target sv */
8761         bpx = bp - (STDCHAR*)SvPVX_const(sv);   /* box up before relocation */
8762         SvCUR_set(sv, bpx);
8763         SvGROW(sv, bpx + cnt + 2);
8764         bp = (STDCHAR*)SvPVX_const(sv) + bpx;   /* unbox after relocation */
8765
8766         /* copy of the char we got from getc() */
8767         *bp++ = (STDCHAR)i;             /* store character from PerlIO_getc */
8768
8769         /* make sure we deal with the i being the last character of a separator */
8770         if (rslen && (STDCHAR)i == rslast)  /* all done for now? */
8771             goto thats_all_folks;
8772     }
8773
8774   thats_all_folks:
8775     /* check if we have actually found the separator - only really applies
8776      * when rslen > 1 */
8777     if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
8778           memNE((char*)bp - rslen, rsptr, rslen))
8779         goto screamer;                          /* go back to the fray */
8780   thats_really_all_folks:
8781     if (shortbuffered)
8782         cnt += shortbuffered;
8783         DEBUG_P(PerlIO_printf(Perl_debug_log,
8784              "Screamer: quitting, ptr=%" UVuf ", cnt=%" IVdf "\n",PTR2UV(ptr),(IV)cnt));
8785     PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt);  /* put these back or we're in trouble */
8786     DEBUG_P(PerlIO_printf(Perl_debug_log,
8787         "Screamer: end: FILE * thinks ptr=%" UVuf ", cnt=%" IVdf ", base=%" UVuf
8788         "\n",
8789         PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8790         PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8791     *bp = '\0';
8792     SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv));      /* set length */
8793     DEBUG_P(PerlIO_printf(Perl_debug_log,
8794         "Screamer: done, len=%ld, string=|%.*s|\n",
8795         (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
8796     }
8797    else
8798     {
8799        /*The big, slow, and stupid way. */
8800 #ifdef USE_HEAP_INSTEAD_OF_STACK        /* Even slower way. */
8801         STDCHAR *buf = NULL;
8802         Newx(buf, 8192, STDCHAR);
8803         assert(buf);
8804 #else
8805         STDCHAR buf[8192];
8806 #endif
8807
8808       screamer2:
8809         if (rslen) {
8810             const STDCHAR * const bpe = buf + sizeof(buf);
8811             bp = buf;
8812             while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
8813                 ; /* keep reading */
8814             cnt = bp - buf;
8815         }
8816         else {
8817             cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
8818             /* Accommodate broken VAXC compiler, which applies U8 cast to
8819              * both args of ?: operator, causing EOF to change into 255
8820              */
8821             if (cnt > 0)
8822                  i = (U8)buf[cnt - 1];
8823             else
8824                  i = EOF;
8825         }
8826
8827         if (cnt < 0)
8828             cnt = 0;  /* we do need to re-set the sv even when cnt <= 0 */
8829         if (append)
8830             sv_catpvn_nomg(sv, (char *) buf, cnt);
8831         else
8832             sv_setpvn(sv, (char *) buf, cnt);   /* "nomg" is implied */
8833
8834         if (i != EOF &&                 /* joy */
8835             (!rslen ||
8836              SvCUR(sv) < rslen ||
8837              memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
8838         {
8839             append = -1;
8840             /*
8841              * If we're reading from a TTY and we get a short read,
8842              * indicating that the user hit his EOF character, we need
8843              * to notice it now, because if we try to read from the TTY
8844              * again, the EOF condition will disappear.
8845              *
8846              * The comparison of cnt to sizeof(buf) is an optimization
8847              * that prevents unnecessary calls to feof().
8848              *
8849              * - jik 9/25/96
8850              */
8851             if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
8852                 goto screamer2;
8853         }
8854
8855 #ifdef USE_HEAP_INSTEAD_OF_STACK
8856         Safefree(buf);
8857 #endif
8858     }
8859
8860     if (rspara) {               /* have to do this both before and after */
8861         while (i != EOF) {      /* to make sure file boundaries work right */
8862             i = PerlIO_getc(fp);
8863             if (i != '\n') {
8864                 PerlIO_ungetc(fp,i);
8865                 break;
8866             }
8867         }
8868     }
8869
8870     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8871 }
8872
8873 /*
8874 =for apidoc sv_inc
8875
8876 Auto-increment of the value in the SV, doing string to numeric conversion
8877 if necessary.  Handles 'get' magic and operator overloading.
8878
8879 =cut
8880 */
8881
8882 void
8883 Perl_sv_inc(pTHX_ SV *const sv)
8884 {
8885     if (!sv)
8886         return;
8887     SvGETMAGIC(sv);
8888     sv_inc_nomg(sv);
8889 }
8890
8891 /*
8892 =for apidoc sv_inc_nomg
8893
8894 Auto-increment of the value in the SV, doing string to numeric conversion
8895 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8896
8897 =cut
8898 */
8899
8900 void
8901 Perl_sv_inc_nomg(pTHX_ SV *const sv)
8902 {
8903     char *d;
8904     int flags;
8905
8906     if (!sv)
8907         return;
8908     if (SvTHINKFIRST(sv)) {
8909         if (SvREADONLY(sv)) {
8910                 Perl_croak_no_modify();
8911         }
8912         if (SvROK(sv)) {
8913             IV i;
8914             if (SvAMAGIC(sv) && AMG_CALLunary(sv, inc_amg))
8915                 return;
8916             i = PTR2IV(SvRV(sv));
8917             sv_unref(sv);
8918             sv_setiv(sv, i);
8919         }
8920         else sv_force_normal_flags(sv, 0);
8921     }
8922     flags = SvFLAGS(sv);
8923     if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
8924         /* It's (privately or publicly) a float, but not tested as an
8925            integer, so test it to see. */
8926         (void) SvIV(sv);
8927         flags = SvFLAGS(sv);
8928     }
8929     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8930         /* It's publicly an integer, or privately an integer-not-float */
8931 #ifdef PERL_PRESERVE_IVUV
8932       oops_its_int:
8933 #endif
8934         if (SvIsUV(sv)) {
8935             if (SvUVX(sv) == UV_MAX)
8936                 sv_setnv(sv, UV_MAX_P1);
8937             else
8938                 (void)SvIOK_only_UV(sv);
8939                 SvUV_set(sv, SvUVX(sv) + 1);
8940         } else {
8941             if (SvIVX(sv) == IV_MAX)
8942                 sv_setuv(sv, (UV)IV_MAX + 1);
8943             else {
8944                 (void)SvIOK_only(sv);
8945                 SvIV_set(sv, SvIVX(sv) + 1);
8946             }   
8947         }
8948         return;
8949     }
8950     if (flags & SVp_NOK) {
8951         const NV was = SvNVX(sv);
8952         if (LIKELY(!Perl_isinfnan(was)) &&
8953             NV_OVERFLOWS_INTEGERS_AT &&
8954             was >= NV_OVERFLOWS_INTEGERS_AT) {
8955             /* diag_listed_as: Lost precision when %s %f by 1 */
8956             Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8957                            "Lost precision when incrementing %" NVff " by 1",
8958                            was);
8959         }
8960         (void)SvNOK_only(sv);
8961         SvNV_set(sv, was + 1.0);
8962         return;
8963     }
8964
8965     /* treat AV/HV/CV/FM/IO and non-fake GVs as immutable */
8966     if (SvTYPE(sv) >= SVt_PVAV || (isGV_with_GP(sv) && !SvFAKE(sv)))
8967         Perl_croak_no_modify();
8968
8969     if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
8970         if ((flags & SVTYPEMASK) < SVt_PVIV)
8971             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
8972         (void)SvIOK_only(sv);
8973         SvIV_set(sv, 1);
8974         return;
8975     }
8976     d = SvPVX(sv);
8977     while (isALPHA(*d)) d++;
8978     while (isDIGIT(*d)) d++;
8979     if (d < SvEND(sv)) {
8980         const int numtype = grok_number_flags(SvPVX_const(sv), SvCUR(sv), NULL, PERL_SCAN_TRAILING);
8981 #ifdef PERL_PRESERVE_IVUV
8982         /* Got to punt this as an integer if needs be, but we don't issue
8983            warnings. Probably ought to make the sv_iv_please() that does
8984            the conversion if possible, and silently.  */
8985         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8986             /* Need to try really hard to see if it's an integer.
8987                9.22337203685478e+18 is an integer.
8988                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
8989                so $a="9.22337203685478e+18"; $a+0; $a++
8990                needs to be the same as $a="9.22337203685478e+18"; $a++
8991                or we go insane. */
8992         
8993             (void) sv_2iv(sv);
8994             if (SvIOK(sv))
8995                 goto oops_its_int;
8996
8997             /* sv_2iv *should* have made this an NV */
8998             if (flags & SVp_NOK) {
8999                 (void)SvNOK_only(sv);
9000                 SvNV_set(sv, SvNVX(sv) + 1.0);
9001                 return;
9002             }
9003             /* I don't think we can get here. Maybe I should assert this
9004                And if we do get here I suspect that sv_setnv will croak. NWC
9005                Fall through. */
9006             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%" UVxf " NV=%" NVgf "\n",
9007                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
9008         }
9009 #endif /* PERL_PRESERVE_IVUV */
9010         if (!numtype && ckWARN(WARN_NUMERIC))
9011             not_incrementable(sv);
9012         sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
9013         return;
9014     }
9015     d--;
9016     while (d >= SvPVX_const(sv)) {
9017         if (isDIGIT(*d)) {
9018             if (++*d <= '9')
9019                 return;
9020             *(d--) = '0';
9021         }
9022         else {
9023 #ifdef EBCDIC
9024             /* MKS: The original code here died if letters weren't consecutive.
9025              * at least it didn't have to worry about non-C locales.  The
9026              * new code assumes that ('z'-'a')==('Z'-'A'), letters are
9027              * arranged in order (although not consecutively) and that only
9028              * [A-Za-z] are accepted by isALPHA in the C locale.
9029              */
9030             if (isALPHA_FOLD_NE(*d, 'z')) {
9031                 do { ++*d; } while (!isALPHA(*d));
9032                 return;
9033             }
9034             *(d--) -= 'z' - 'a';
9035 #else
9036             ++*d;
9037             if (isALPHA(*d))
9038                 return;
9039             *(d--) -= 'z' - 'a' + 1;
9040 #endif
9041         }
9042     }
9043     /* oh,oh, the number grew */
9044     SvGROW(sv, SvCUR(sv) + 2);
9045     SvCUR_set(sv, SvCUR(sv) + 1);
9046     for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
9047         *d = d[-1];
9048     if (isDIGIT(d[1]))
9049         *d = '1';
9050     else
9051         *d = d[1];
9052 }
9053
9054 /*
9055 =for apidoc sv_dec
9056
9057 Auto-decrement of the value in the SV, doing string to numeric conversion
9058 if necessary.  Handles 'get' magic and operator overloading.
9059
9060 =cut
9061 */
9062
9063 void
9064 Perl_sv_dec(pTHX_ SV *const sv)
9065 {
9066     if (!sv)
9067         return;
9068     SvGETMAGIC(sv);
9069     sv_dec_nomg(sv);
9070 }
9071
9072 /*
9073 =for apidoc sv_dec_nomg
9074
9075 Auto-decrement of the value in the SV, doing string to numeric conversion
9076 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
9077
9078 =cut
9079 */
9080
9081 void
9082 Perl_sv_dec_nomg(pTHX_ SV *const sv)
9083 {
9084     int flags;
9085
9086     if (!sv)
9087         return;
9088     if (SvTHINKFIRST(sv)) {
9089         if (SvREADONLY(sv)) {
9090                 Perl_croak_no_modify();
9091         }
9092         if (SvROK(sv)) {
9093             IV i;
9094             if (SvAMAGIC(sv) && AMG_CALLunary(sv, dec_amg))
9095                 return;
9096             i = PTR2IV(SvRV(sv));
9097             sv_unref(sv);
9098             sv_setiv(sv, i);
9099         }
9100         else sv_force_normal_flags(sv, 0);
9101     }
9102     /* Unlike sv_inc we don't have to worry about string-never-numbers
9103        and keeping them magic. But we mustn't warn on punting */
9104     flags = SvFLAGS(sv);
9105     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
9106         /* It's publicly an integer, or privately an integer-not-float */
9107 #ifdef PERL_PRESERVE_IVUV
9108       oops_its_int:
9109 #endif
9110         if (SvIsUV(sv)) {
9111             if (SvUVX(sv) == 0) {
9112                 (void)SvIOK_only(sv);
9113                 SvIV_set(sv, -1);
9114             }
9115             else {
9116                 (void)SvIOK_only_UV(sv);
9117                 SvUV_set(sv, SvUVX(sv) - 1);
9118             }   
9119         } else {
9120             if (SvIVX(sv) == IV_MIN) {
9121                 sv_setnv(sv, (NV)IV_MIN);
9122                 goto oops_its_num;
9123             }
9124             else {
9125                 (void)SvIOK_only(sv);
9126                 SvIV_set(sv, SvIVX(sv) - 1);
9127             }   
9128         }
9129         return;
9130     }
9131     if (flags & SVp_NOK) {
9132     oops_its_num:
9133         {
9134             const NV was = SvNVX(sv);
9135             if (LIKELY(!Perl_isinfnan(was)) &&
9136                 NV_OVERFLOWS_INTEGERS_AT &&
9137                 was <= -NV_OVERFLOWS_INTEGERS_AT) {
9138                 /* diag_listed_as: Lost precision when %s %f by 1 */
9139                 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
9140                                "Lost precision when decrementing %" NVff " by 1",
9141                                was);
9142             }
9143             (void)SvNOK_only(sv);
9144             SvNV_set(sv, was - 1.0);
9145             return;
9146         }
9147     }
9148
9149     /* treat AV/HV/CV/FM/IO and non-fake GVs as immutable */
9150     if (SvTYPE(sv) >= SVt_PVAV || (isGV_with_GP(sv) && !SvFAKE(sv)))
9151         Perl_croak_no_modify();
9152
9153     if (!(flags & SVp_POK)) {
9154         if ((flags & SVTYPEMASK) < SVt_PVIV)
9155             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
9156         SvIV_set(sv, -1);
9157         (void)SvIOK_only(sv);
9158         return;
9159     }
9160 #ifdef PERL_PRESERVE_IVUV
9161     {
9162         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
9163         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
9164             /* Need to try really hard to see if it's an integer.
9165                9.22337203685478e+18 is an integer.
9166                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
9167                so $a="9.22337203685478e+18"; $a+0; $a--
9168                needs to be the same as $a="9.22337203685478e+18"; $a--
9169                or we go insane. */
9170         
9171             (void) sv_2iv(sv);
9172             if (SvIOK(sv))
9173                 goto oops_its_int;
9174
9175             /* sv_2iv *should* have made this an NV */
9176             if (flags & SVp_NOK) {
9177                 (void)SvNOK_only(sv);
9178                 SvNV_set(sv, SvNVX(sv) - 1.0);
9179                 return;
9180             }
9181             /* I don't think we can get here. Maybe I should assert this
9182                And if we do get here I suspect that sv_setnv will croak. NWC
9183                Fall through. */
9184             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%" UVxf " NV=%" NVgf "\n",
9185                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
9186         }
9187     }
9188 #endif /* PERL_PRESERVE_IVUV */
9189     sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0);   /* punt */
9190 }
9191
9192 /* this define is used to eliminate a chunk of duplicated but shared logic
9193  * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
9194  * used anywhere but here - yves
9195  */
9196 #define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
9197     STMT_START {      \
9198         SSize_t ix = ++PL_tmps_ix;              \
9199         if (UNLIKELY(ix >= PL_tmps_max))        \
9200             ix = tmps_grow_p(ix);                       \
9201         PL_tmps_stack[ix] = (AnSv); \
9202     } STMT_END
9203
9204 /*
9205 =for apidoc sv_mortalcopy
9206
9207 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
9208 The new SV is marked as mortal.  It will be destroyed "soon", either by an
9209 explicit call to C<FREETMPS>, or by an implicit call at places such as
9210 statement boundaries.  See also C<L</sv_newmortal>> and C<L</sv_2mortal>>.
9211
9212 =cut
9213 */
9214
9215 /* Make a string that will exist for the duration of the expression
9216  * evaluation.  Actually, it may have to last longer than that, but
9217  * hopefully we won't free it until it has been assigned to a
9218  * permanent location. */
9219
9220 SV *
9221 Perl_sv_mortalcopy_flags(pTHX_ SV *const oldstr, U32 flags)
9222 {
9223     SV *sv;
9224
9225     if (flags & SV_GMAGIC)
9226         SvGETMAGIC(oldstr); /* before new_SV, in case it dies */
9227     new_SV(sv);
9228     sv_setsv_flags(sv,oldstr,flags & ~SV_GMAGIC);
9229     PUSH_EXTEND_MORTAL__SV_C(sv);
9230     SvTEMP_on(sv);
9231     return sv;
9232 }
9233
9234 /*
9235 =for apidoc sv_newmortal
9236
9237 Creates a new null SV which is mortal.  The reference count of the SV is
9238 set to 1.  It will be destroyed "soon", either by an explicit call to
9239 C<FREETMPS>, or by an implicit call at places such as statement boundaries.
9240 See also C<L</sv_mortalcopy>> and C<L</sv_2mortal>>.
9241
9242 =cut
9243 */
9244
9245 SV *
9246 Perl_sv_newmortal(pTHX)
9247 {
9248     SV *sv;
9249
9250     new_SV(sv);
9251     SvFLAGS(sv) = SVs_TEMP;
9252     PUSH_EXTEND_MORTAL__SV_C(sv);
9253     return sv;
9254 }
9255
9256
9257 /*
9258 =for apidoc newSVpvn_flags
9259
9260 Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
9261 characters) into it.  The reference count for the
9262 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
9263 string.  You are responsible for ensuring that the source string is at least
9264 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
9265 Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
9266 If C<SVs_TEMP> is set, then C<sv_2mortal()> is called on the result before
9267 returning.  If C<SVf_UTF8> is set, C<s>
9268 is considered to be in UTF-8 and the
9269 C<SVf_UTF8> flag will be set on the new SV.
9270 C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
9271
9272     #define newSVpvn_utf8(s, len, u)                    \
9273         newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
9274
9275 =cut
9276 */
9277
9278 SV *
9279 Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
9280 {
9281     SV *sv;
9282
9283     /* All the flags we don't support must be zero.
9284        And we're new code so I'm going to assert this from the start.  */
9285     assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
9286     new_SV(sv);
9287     sv_setpvn(sv,s,len);
9288
9289     /* This code used to do a sv_2mortal(), however we now unroll the call to
9290      * sv_2mortal() and do what it does ourselves here.  Since we have asserted
9291      * that flags can only have the SVf_UTF8 and/or SVs_TEMP flags set above we
9292      * can use it to enable the sv flags directly (bypassing SvTEMP_on), which
9293      * in turn means we dont need to mask out the SVf_UTF8 flag below, which
9294      * means that we eliminate quite a few steps than it looks - Yves
9295      * (explaining patch by gfx) */
9296
9297     SvFLAGS(sv) |= flags;
9298
9299     if(flags & SVs_TEMP){
9300         PUSH_EXTEND_MORTAL__SV_C(sv);
9301     }
9302
9303     return sv;
9304 }
9305
9306 /*
9307 =for apidoc sv_2mortal
9308
9309 Marks an existing SV as mortal.  The SV will be destroyed "soon", either
9310 by an explicit call to C<FREETMPS>, or by an implicit call at places such as
9311 statement boundaries.  C<SvTEMP()> is turned on which means that the SV's
9312 string buffer can be "stolen" if this SV is copied.  See also
9313 C<L</sv_newmortal>> and C<L</sv_mortalcopy>>.
9314
9315 =cut
9316 */
9317
9318 SV *
9319 Perl_sv_2mortal(pTHX_ SV *const sv)
9320 {
9321     dVAR;
9322     if (!sv)
9323         return sv;
9324     if (SvIMMORTAL(sv))
9325         return sv;
9326     PUSH_EXTEND_MORTAL__SV_C(sv);
9327     SvTEMP_on(sv);
9328     return sv;
9329 }
9330
9331 /*
9332 =for apidoc newSVpv
9333
9334 Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
9335 characters) into it.  The reference count for the
9336 SV is set to 1.  If C<len> is zero, Perl will compute the length using
9337 C<strlen()>, (which means if you use this option, that C<s> can't have embedded
9338 C<NUL> characters and has to have a terminating C<NUL> byte).
9339
9340 This function can cause reliability issues if you are likely to pass in
9341 empty strings that are not null terminated, because it will run
9342 strlen on the string and potentially run past valid memory.
9343
9344 Using L</newSVpvn> is a safer alternative for non C<NUL> terminated strings.
9345 For string literals use L</newSVpvs> instead.  This function will work fine for
9346 C<NUL> terminated strings, but if you want to avoid the if statement on whether
9347 to call C<strlen> use C<newSVpvn> instead (calling C<strlen> yourself).
9348
9349 =cut
9350 */
9351
9352 SV *
9353 Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
9354 {
9355     SV *sv;
9356
9357     new_SV(sv);
9358     sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
9359     return sv;
9360 }
9361
9362 /*
9363 =for apidoc newSVpvn
9364
9365 Creates a new SV and copies a string into it, which may contain C<NUL> characters
9366 (C<\0>) and other binary data.  The reference count for the SV is set to 1.
9367 Note that if C<len> is zero, Perl will create a zero length (Perl) string.  You
9368 are responsible for ensuring that the source buffer is at least
9369 C<len> bytes long.  If the C<buffer> argument is NULL the new SV will be
9370 undefined.
9371
9372 =cut
9373 */
9374
9375 SV *
9376 Perl_newSVpvn(pTHX_ const char *const buffer, const STRLEN len)
9377 {
9378     SV *sv;
9379     new_SV(sv);
9380     sv_setpvn(sv,buffer,len);
9381     return sv;
9382 }
9383
9384 /*
9385 =for apidoc newSVhek
9386
9387 Creates a new SV from the hash key structure.  It will generate scalars that
9388 point to the shared string table where possible.  Returns a new (undefined)
9389 SV if C<hek> is NULL.
9390
9391 =cut
9392 */
9393
9394 SV *
9395 Perl_newSVhek(pTHX_ const HEK *const hek)
9396 {
9397     if (!hek) {
9398         SV *sv;
9399
9400         new_SV(sv);
9401         return sv;
9402     }
9403
9404     if (HEK_LEN(hek) == HEf_SVKEY) {
9405         return newSVsv(*(SV**)HEK_KEY(hek));
9406     } else {
9407         const int flags = HEK_FLAGS(hek);
9408         if (flags & HVhek_WASUTF8) {
9409             /* Trouble :-)
9410                Andreas would like keys he put in as utf8 to come back as utf8
9411             */
9412             STRLEN utf8_len = HEK_LEN(hek);
9413             SV * const sv = newSV_type(SVt_PV);
9414             char *as_utf8 = (char *)bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
9415             /* bytes_to_utf8() allocates a new string, which we can repurpose: */
9416             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
9417             SvUTF8_on (sv);
9418             return sv;
9419         } else if (flags & HVhek_UNSHARED) {
9420             /* A hash that isn't using shared hash keys has to have
9421                the flag in every key so that we know not to try to call
9422                share_hek_hek on it.  */
9423
9424             SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
9425             if (HEK_UTF8(hek))
9426                 SvUTF8_on (sv);
9427             return sv;
9428         }
9429         /* This will be overwhelminly the most common case.  */
9430         {
9431             /* Inline most of newSVpvn_share(), because share_hek_hek() is far
9432                more efficient than sharepvn().  */
9433             SV *sv;
9434
9435             new_SV(sv);
9436             sv_upgrade(sv, SVt_PV);
9437             SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
9438             SvCUR_set(sv, HEK_LEN(hek));
9439             SvLEN_set(sv, 0);
9440             SvIsCOW_on(sv);
9441             SvPOK_on(sv);
9442             if (HEK_UTF8(hek))
9443                 SvUTF8_on(sv);
9444             return sv;
9445         }
9446     }
9447 }
9448
9449 /*
9450 =for apidoc newSVpvn_share
9451
9452 Creates a new SV with its C<SvPVX_const> pointing to a shared string in the string
9453 table.  If the string does not already exist in the table, it is
9454 created first.  Turns on the C<SvIsCOW> flag (or C<READONLY>
9455 and C<FAKE> in 5.16 and earlier).  If the C<hash> parameter
9456 is non-zero, that value is used; otherwise the hash is computed.
9457 The string's hash can later be retrieved from the SV
9458 with the C<SvSHARED_HASH()> macro.  The idea here is
9459 that as the string table is used for shared hash keys these strings will have
9460 C<SvPVX_const == HeKEY> and hash lookup will avoid string compare.
9461
9462 =cut
9463 */
9464
9465 SV *
9466 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
9467 {
9468     dVAR;
9469     SV *sv;
9470     bool is_utf8 = FALSE;
9471     const char *const orig_src = src;
9472
9473     if (len < 0) {
9474         STRLEN tmplen = -len;
9475         is_utf8 = TRUE;
9476         /* See the note in hv.c:hv_fetch() --jhi */
9477         src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
9478         len = tmplen;
9479     }
9480     if (!hash)
9481         PERL_HASH(hash, src, len);
9482     new_SV(sv);
9483     /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
9484        changes here, update it there too.  */
9485     sv_upgrade(sv, SVt_PV);
9486     SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
9487     SvCUR_set(sv, len);
9488     SvLEN_set(sv, 0);
9489     SvIsCOW_on(sv);
9490     SvPOK_on(sv);
9491     if (is_utf8)
9492         SvUTF8_on(sv);
9493     if (src != orig_src)
9494         Safefree(src);
9495     return sv;
9496 }
9497
9498 /*
9499 =for apidoc newSVpv_share
9500
9501 Like C<newSVpvn_share>, but takes a C<NUL>-terminated string instead of a
9502 string/length pair.
9503
9504 =cut
9505 */
9506
9507 SV *
9508 Perl_newSVpv_share(pTHX_ const char *src, U32 hash)
9509 {
9510     return newSVpvn_share(src, strlen(src), hash);
9511 }
9512
9513 #if defined(PERL_IMPLICIT_CONTEXT)
9514
9515 /* pTHX_ magic can't cope with varargs, so this is a no-context
9516  * version of the main function, (which may itself be aliased to us).
9517  * Don't access this version directly.
9518  */
9519
9520 SV *
9521 Perl_newSVpvf_nocontext(const char *const pat, ...)
9522 {
9523     dTHX;
9524     SV *sv;
9525     va_list args;
9526
9527     PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
9528
9529     va_start(args, pat);
9530     sv = vnewSVpvf(pat, &args);
9531     va_end(args);
9532     return sv;
9533 }
9534 #endif
9535
9536 /*
9537 =for apidoc newSVpvf
9538
9539 Creates a new SV and initializes it with the string formatted like
9540 C<sv_catpvf>.
9541
9542 =cut
9543 */
9544
9545 SV *
9546 Perl_newSVpvf(pTHX_ const char *const pat, ...)
9547 {
9548     SV *sv;
9549     va_list args;
9550
9551     PERL_ARGS_ASSERT_NEWSVPVF;
9552
9553     va_start(args, pat);
9554     sv = vnewSVpvf(pat, &args);
9555     va_end(args);
9556     return sv;
9557 }
9558
9559 /* backend for newSVpvf() and newSVpvf_nocontext() */
9560
9561 SV *
9562 Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
9563 {
9564     SV *sv;
9565
9566     PERL_ARGS_ASSERT_VNEWSVPVF;
9567
9568     new_SV(sv);
9569     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9570     return sv;
9571 }
9572
9573 /*
9574 =for apidoc newSVnv
9575
9576 Creates a new SV and copies a floating point value into it.
9577 The reference count for the SV is set to 1.
9578
9579 =cut
9580 */
9581
9582 SV *
9583 Perl_newSVnv(pTHX_ const NV n)
9584 {
9585     SV *sv;
9586
9587     new_SV(sv);
9588     sv_setnv(sv,n);
9589     return sv;
9590 }
9591
9592 /*
9593 =for apidoc newSViv
9594
9595 Creates a new SV and copies an integer into it.  The reference count for the
9596 SV is set to 1.
9597
9598 =cut
9599 */
9600
9601 SV *
9602 Perl_newSViv(pTHX_ const IV i)
9603 {
9604     SV *sv;
9605
9606     new_SV(sv);
9607
9608     /* Inlining ONLY the small relevant subset of sv_setiv here
9609      * for performance. Makes a significant difference. */
9610
9611     /* We're starting from SVt_FIRST, so provided that's
9612      * actual 0, we don't have to unset any SV type flags
9613      * to promote to SVt_IV. */
9614     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9615
9616     SET_SVANY_FOR_BODYLESS_IV(sv);
9617     SvFLAGS(sv) |= SVt_IV;
9618     (void)SvIOK_on(sv);
9619
9620     SvIV_set(sv, i);
9621     SvTAINT(sv);
9622
9623     return sv;
9624 }
9625
9626 /*
9627 =for apidoc newSVuv
9628
9629 Creates a new SV and copies an unsigned integer into it.
9630 The reference count for the SV is set to 1.
9631
9632 =cut
9633 */
9634
9635 SV *
9636 Perl_newSVuv(pTHX_ const UV u)
9637 {
9638     SV *sv;
9639
9640     /* Inlining ONLY the small relevant subset of sv_setuv here
9641      * for performance. Makes a significant difference. */
9642
9643     /* Using ivs is more efficient than using uvs - see sv_setuv */
9644     if (u <= (UV)IV_MAX) {
9645         return newSViv((IV)u);
9646     }
9647
9648     new_SV(sv);
9649
9650     /* We're starting from SVt_FIRST, so provided that's
9651      * actual 0, we don't have to unset any SV type flags
9652      * to promote to SVt_IV. */
9653     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9654
9655     SET_SVANY_FOR_BODYLESS_IV(sv);
9656     SvFLAGS(sv) |= SVt_IV;
9657     (void)SvIOK_on(sv);
9658     (void)SvIsUV_on(sv);
9659
9660     SvUV_set(sv, u);
9661     SvTAINT(sv);
9662
9663     return sv;
9664 }
9665
9666 /*
9667 =for apidoc newSV_type
9668
9669 Creates a new SV, of the type specified.  The reference count for the new SV
9670 is set to 1.
9671
9672 =cut
9673 */
9674
9675 SV *
9676 Perl_newSV_type(pTHX_ const svtype type)
9677 {
9678     SV *sv;
9679
9680     new_SV(sv);
9681     ASSUME(SvTYPE(sv) == SVt_FIRST);
9682     if(type != SVt_FIRST)
9683         sv_upgrade(sv, type);
9684     return sv;
9685 }
9686
9687 /*
9688 =for apidoc newRV_noinc
9689
9690 Creates an RV wrapper for an SV.  The reference count for the original
9691 SV is B<not> incremented.
9692
9693 =cut
9694 */
9695
9696 SV *
9697 Perl_newRV_noinc(pTHX_ SV *const tmpRef)
9698 {
9699     SV *sv;
9700
9701     PERL_ARGS_ASSERT_NEWRV_NOINC;
9702
9703     new_SV(sv);
9704
9705     /* We're starting from SVt_FIRST, so provided that's
9706      * actual 0, we don't have to unset any SV type flags
9707      * to promote to SVt_IV. */
9708     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9709
9710     SET_SVANY_FOR_BODYLESS_IV(sv);
9711     SvFLAGS(sv) |= SVt_IV;
9712     SvROK_on(sv);
9713     SvIV_set(sv, 0);
9714
9715     SvTEMP_off(tmpRef);
9716     SvRV_set(sv, tmpRef);
9717
9718     return sv;
9719 }
9720
9721 /* newRV_inc is the official function name to use now.
9722  * newRV_inc is in fact #defined to newRV in sv.h
9723  */
9724
9725 SV *
9726 Perl_newRV(pTHX_ SV *const sv)
9727 {
9728     PERL_ARGS_ASSERT_NEWRV;
9729
9730     return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
9731 }
9732
9733 /*
9734 =for apidoc newSVsv
9735
9736 Creates a new SV which is an exact duplicate of the original SV.
9737 (Uses C<sv_setsv>.)
9738
9739 =cut
9740 */
9741
9742 SV *
9743 Perl_newSVsv(pTHX_ SV *const old)
9744 {
9745     SV *sv;
9746
9747     if (!old)
9748         return NULL;
9749     if (SvTYPE(old) == (svtype)SVTYPEMASK) {
9750         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
9751         return NULL;
9752     }
9753     /* Do this here, otherwise we leak the new SV if this croaks. */
9754     SvGETMAGIC(old);
9755     new_SV(sv);
9756     /* SV_NOSTEAL prevents TEMP buffers being, well, stolen, and saves games
9757        with SvTEMP_off and SvTEMP_on round a call to sv_setsv.  */
9758     sv_setsv_flags(sv, old, SV_NOSTEAL);
9759     return sv;
9760 }
9761
9762 /*
9763 =for apidoc sv_reset
9764
9765 Underlying implementation for the C<reset> Perl function.
9766 Note that the perl-level function is vaguely deprecated.
9767
9768 =cut
9769 */
9770
9771 void
9772 Perl_sv_reset(pTHX_ const char *s, HV *const stash)
9773 {
9774     PERL_ARGS_ASSERT_SV_RESET;
9775
9776     sv_resetpvn(*s ? s : NULL, strlen(s), stash);
9777 }
9778
9779 void
9780 Perl_sv_resetpvn(pTHX_ const char *s, STRLEN len, HV * const stash)
9781 {
9782     char todo[PERL_UCHAR_MAX+1];
9783     const char *send;
9784
9785     if (!stash || SvTYPE(stash) != SVt_PVHV)
9786         return;
9787
9788     if (!s) {           /* reset ?? searches */
9789         MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
9790         if (mg) {
9791             const U32 count = mg->mg_len / sizeof(PMOP**);
9792             PMOP **pmp = (PMOP**) mg->mg_ptr;
9793             PMOP *const *const end = pmp + count;
9794
9795             while (pmp < end) {
9796 #ifdef USE_ITHREADS
9797                 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
9798 #else
9799                 (*pmp)->op_pmflags &= ~PMf_USED;
9800 #endif
9801                 ++pmp;
9802             }
9803         }
9804         return;
9805     }
9806
9807     /* reset variables */
9808
9809     if (!HvARRAY(stash))
9810         return;
9811
9812     Zero(todo, 256, char);
9813     send = s + len;
9814     while (s < send) {
9815         I32 max;
9816         I32 i = (unsigned char)*s;
9817         if (s[1] == '-') {
9818             s += 2;
9819         }
9820         max = (unsigned char)*s++;
9821         for ( ; i <= max; i++) {
9822             todo[i] = 1;
9823         }
9824         for (i = 0; i <= (I32) HvMAX(stash); i++) {
9825             HE *entry;
9826             for (entry = HvARRAY(stash)[i];
9827                  entry;
9828                  entry = HeNEXT(entry))
9829             {
9830                 GV *gv;
9831                 SV *sv;
9832
9833                 if (!todo[(U8)*HeKEY(entry)])
9834                     continue;
9835                 gv = MUTABLE_GV(HeVAL(entry));
9836                 if (!isGV(gv))
9837                     continue;
9838                 sv = GvSV(gv);
9839                 if (sv && !SvREADONLY(sv)) {
9840                     SV_CHECK_THINKFIRST_COW_DROP(sv);
9841                     if (!isGV(sv)) SvOK_off(sv);
9842                 }
9843                 if (GvAV(gv)) {
9844                     av_clear(GvAV(gv));
9845                 }
9846                 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
9847                     hv_clear(GvHV(gv));
9848                 }
9849             }
9850         }
9851     }
9852 }
9853
9854 /*
9855 =for apidoc sv_2io
9856
9857 Using various gambits, try to get an IO from an SV: the IO slot if its a
9858 GV; or the recursive result if we're an RV; or the IO slot of the symbol
9859 named after the PV if we're a string.
9860
9861 'Get' magic is ignored on the C<sv> passed in, but will be called on
9862 C<SvRV(sv)> if C<sv> is an RV.
9863
9864 =cut
9865 */
9866
9867 IO*
9868 Perl_sv_2io(pTHX_ SV *const sv)
9869 {
9870     IO* io;
9871     GV* gv;
9872
9873     PERL_ARGS_ASSERT_SV_2IO;
9874
9875     switch (SvTYPE(sv)) {
9876     case SVt_PVIO:
9877         io = MUTABLE_IO(sv);
9878         break;
9879     case SVt_PVGV:
9880     case SVt_PVLV:
9881         if (isGV_with_GP(sv)) {
9882             gv = MUTABLE_GV(sv);
9883             io = GvIO(gv);
9884             if (!io)
9885                 Perl_croak(aTHX_ "Bad filehandle: %" HEKf,
9886                                     HEKfARG(GvNAME_HEK(gv)));
9887             break;
9888         }
9889         /* FALLTHROUGH */
9890     default:
9891         if (!SvOK(sv))
9892             Perl_croak(aTHX_ PL_no_usym, "filehandle");
9893         if (SvROK(sv)) {
9894             SvGETMAGIC(SvRV(sv));
9895             return sv_2io(SvRV(sv));
9896         }
9897         gv = gv_fetchsv_nomg(sv, 0, SVt_PVIO);
9898         if (gv)
9899             io = GvIO(gv);
9900         else
9901             io = 0;
9902         if (!io) {
9903             SV *newsv = sv;
9904             if (SvGMAGICAL(sv)) {
9905                 newsv = sv_newmortal();
9906                 sv_setsv_nomg(newsv, sv);
9907             }
9908             Perl_croak(aTHX_ "Bad filehandle: %" SVf, SVfARG(newsv));
9909         }
9910         break;
9911     }
9912     return io;
9913 }
9914
9915 /*
9916 =for apidoc sv_2cv
9917
9918 Using various gambits, try to get a CV from an SV; in addition, try if
9919 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
9920 The flags in C<lref> are passed to C<gv_fetchsv>.
9921
9922 =cut
9923 */
9924
9925 CV *
9926 Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
9927 {
9928     GV *gv = NULL;
9929     CV *cv = NULL;
9930
9931     PERL_ARGS_ASSERT_SV_2CV;
9932
9933     if (!sv) {
9934         *st = NULL;
9935         *gvp = NULL;
9936         return NULL;
9937     }
9938     switch (SvTYPE(sv)) {
9939     case SVt_PVCV:
9940         *st = CvSTASH(sv);
9941         *gvp = NULL;
9942         return MUTABLE_CV(sv);
9943     case SVt_PVHV:
9944     case SVt_PVAV:
9945         *st = NULL;
9946         *gvp = NULL;
9947         return NULL;
9948     default:
9949         SvGETMAGIC(sv);
9950         if (SvROK(sv)) {
9951             if (SvAMAGIC(sv))
9952                 sv = amagic_deref_call(sv, to_cv_amg);
9953
9954             sv = SvRV(sv);
9955             if (SvTYPE(sv) == SVt_PVCV) {
9956                 cv = MUTABLE_CV(sv);
9957                 *gvp = NULL;
9958                 *st = CvSTASH(cv);
9959                 return cv;
9960             }
9961             else if(SvGETMAGIC(sv), isGV_with_GP(sv))
9962                 gv = MUTABLE_GV(sv);
9963             else
9964                 Perl_croak(aTHX_ "Not a subroutine reference");
9965         }
9966         else if (isGV_with_GP(sv)) {
9967             gv = MUTABLE_GV(sv);
9968         }
9969         else {
9970             gv = gv_fetchsv_nomg(sv, lref, SVt_PVCV);
9971         }
9972         *gvp = gv;
9973         if (!gv) {
9974             *st = NULL;
9975             return NULL;
9976         }
9977         /* Some flags to gv_fetchsv mean don't really create the GV  */
9978         if (!isGV_with_GP(gv)) {
9979             *st = NULL;
9980             return NULL;
9981         }
9982         *st = GvESTASH(gv);
9983         if (lref & ~GV_ADDMG && !GvCVu(gv)) {
9984             /* XXX this is probably not what they think they're getting.
9985              * It has the same effect as "sub name;", i.e. just a forward
9986              * declaration! */
9987             newSTUB(gv,0);
9988         }
9989         return GvCVu(gv);
9990     }
9991 }
9992
9993 /*
9994 =for apidoc sv_true
9995
9996 Returns true if the SV has a true value by Perl's rules.
9997 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
9998 instead use an in-line version.
9999
10000 =cut
10001 */
10002
10003 I32
10004 Perl_sv_true(pTHX_ SV *const sv)
10005 {
10006     if (!sv)
10007         return 0;
10008     if (SvPOK(sv)) {
10009         const XPV* const tXpv = (XPV*)SvANY(sv);
10010         if (tXpv &&
10011                 (tXpv->xpv_cur > 1 ||
10012                 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
10013             return 1;
10014         else
10015             return 0;
10016     }
10017     else {
10018         if (SvIOK(sv))
10019             return SvIVX(sv) != 0;
10020         else {
10021             if (SvNOK(sv))
10022                 return SvNVX(sv) != 0.0;
10023             else
10024                 return sv_2bool(sv);
10025         }
10026     }
10027 }
10028
10029 /*
10030 =for apidoc sv_pvn_force
10031
10032 Get a sensible string out of the SV somehow.
10033 A private implementation of the C<SvPV_force> macro for compilers which
10034 can't cope with complex macro expressions.  Always use the macro instead.
10035
10036 =for apidoc sv_pvn_force_flags
10037
10038 Get a sensible string out of the SV somehow.
10039 If C<flags> has the C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
10040 appropriate, else not.  C<sv_pvn_force> and C<sv_pvn_force_nomg> are
10041 implemented in terms of this function.
10042 You normally want to use the various wrapper macros instead: see
10043 C<L</SvPV_force>> and C<L</SvPV_force_nomg>>.
10044
10045 =cut
10046 */
10047
10048 char *
10049 Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
10050 {
10051     PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
10052
10053     if (flags & SV_GMAGIC) SvGETMAGIC(sv);
10054     if (SvTHINKFIRST(sv) && (!SvROK(sv) || SvREADONLY(sv)))
10055         sv_force_normal_flags(sv, 0);
10056
10057     if (SvPOK(sv)) {
10058         if (lp)
10059             *lp = SvCUR(sv);
10060     }
10061     else {
10062         char *s;
10063         STRLEN len;
10064  
10065         if (SvTYPE(sv) > SVt_PVLV
10066             || isGV_with_GP(sv))
10067             /* diag_listed_as: Can't coerce %s to %s in %s */
10068             Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
10069                 OP_DESC(PL_op));
10070         s = sv_2pv_flags(sv, &len, flags &~ SV_GMAGIC);
10071         if (!s) {
10072           s = (char *)"";
10073         }
10074         if (lp)
10075             *lp = len;
10076
10077         if (SvTYPE(sv) < SVt_PV ||
10078             s != SvPVX_const(sv)) {     /* Almost, but not quite, sv_setpvn() */
10079             if (SvROK(sv))
10080                 sv_unref(sv);
10081             SvUPGRADE(sv, SVt_PV);              /* Never FALSE */
10082             SvGROW(sv, len + 1);
10083             Move(s,SvPVX(sv),len,char);
10084             SvCUR_set(sv, len);
10085             SvPVX(sv)[len] = '\0';
10086         }
10087         if (!SvPOK(sv)) {
10088             SvPOK_on(sv);               /* validate pointer */
10089             SvTAINT(sv);
10090             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2pv(%s)\n",
10091                                   PTR2UV(sv),SvPVX_const(sv)));
10092         }
10093     }
10094     (void)SvPOK_only_UTF8(sv);
10095     return SvPVX_mutable(sv);
10096 }
10097
10098 /*
10099 =for apidoc sv_pvbyten_force
10100
10101 The backend for the C<SvPVbytex_force> macro.  Always use the macro
10102 instead.
10103
10104 =cut
10105 */
10106
10107 char *
10108 Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
10109 {
10110     PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
10111
10112     sv_pvn_force(sv,lp);
10113     sv_utf8_downgrade(sv,0);
10114     *lp = SvCUR(sv);
10115     return SvPVX(sv);
10116 }
10117
10118 /*
10119 =for apidoc sv_pvutf8n_force
10120
10121 The backend for the C<SvPVutf8x_force> macro.  Always use the macro
10122 instead.
10123
10124 =cut
10125 */
10126
10127 char *
10128 Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
10129 {
10130     PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
10131
10132     sv_pvn_force(sv,0);
10133     sv_utf8_upgrade_nomg(sv);
10134     *lp = SvCUR(sv);
10135     return SvPVX(sv);
10136 }
10137
10138 /*
10139 =for apidoc sv_reftype
10140
10141 Returns a string describing what the SV is a reference to.
10142
10143 If ob is true and the SV is blessed, the string is the class name,
10144 otherwise it is the type of the SV, "SCALAR", "ARRAY" etc.
10145
10146 =cut
10147 */
10148
10149 const char *
10150 Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
10151 {
10152     PERL_ARGS_ASSERT_SV_REFTYPE;
10153     if (ob && SvOBJECT(sv)) {
10154         return SvPV_nolen_const(sv_ref(NULL, sv, ob));
10155     }
10156     else {
10157         /* WARNING - There is code, for instance in mg.c, that assumes that
10158          * the only reason that sv_reftype(sv,0) would return a string starting
10159          * with 'L' or 'S' is that it is a LVALUE or a SCALAR.
10160          * Yes this a dodgy way to do type checking, but it saves practically reimplementing
10161          * this routine inside other subs, and it saves time.
10162          * Do not change this assumption without searching for "dodgy type check" in
10163          * the code.
10164          * - Yves */
10165         switch (SvTYPE(sv)) {
10166         case SVt_NULL:
10167         case SVt_IV:
10168         case SVt_NV:
10169         case SVt_PV:
10170         case SVt_PVIV:
10171         case SVt_PVNV:
10172         case SVt_PVMG:
10173                                 if (SvVOK(sv))
10174                                     return "VSTRING";
10175                                 if (SvROK(sv))
10176                                     return "REF";
10177                                 else
10178                                     return "SCALAR";
10179
10180         case SVt_PVLV:          return (char *)  (SvROK(sv) ? "REF"
10181                                 /* tied lvalues should appear to be
10182                                  * scalars for backwards compatibility */
10183                                 : (isALPHA_FOLD_EQ(LvTYPE(sv), 't'))
10184                                     ? "SCALAR" : "LVALUE");
10185         case SVt_PVAV:          return "ARRAY";
10186         case SVt_PVHV:          return "HASH";
10187         case SVt_PVCV:          return "CODE";
10188         case SVt_PVGV:          return (char *) (isGV_with_GP(sv)
10189                                     ? "GLOB" : "SCALAR");
10190         case SVt_PVFM:          return "FORMAT";
10191         case SVt_PVIO:          return "IO";
10192         case SVt_INVLIST:       return "INVLIST";
10193         case SVt_REGEXP:        return "REGEXP";
10194         default:                return "UNKNOWN";
10195         }
10196     }
10197 }
10198
10199 /*
10200 =for apidoc sv_ref
10201
10202 Returns a SV describing what the SV passed in is a reference to.
10203
10204 dst can be a SV to be set to the description or NULL, in which case a
10205 mortal SV is returned.
10206
10207 If ob is true and the SV is blessed, the description is the class
10208 name, otherwise it is the type of the SV, "SCALAR", "ARRAY" etc.
10209
10210 =cut
10211 */
10212
10213 SV *
10214 Perl_sv_ref(pTHX_ SV *dst, const SV *const sv, const int ob)
10215 {
10216     PERL_ARGS_ASSERT_SV_REF;
10217
10218     if (!dst)
10219         dst = sv_newmortal();
10220
10221     if (ob && SvOBJECT(sv)) {
10222         HvNAME_get(SvSTASH(sv))
10223                     ? sv_sethek(dst, HvNAME_HEK(SvSTASH(sv)))
10224                     : sv_setpvs(dst, "__ANON__");
10225     }
10226     else {
10227         const char * reftype = sv_reftype(sv, 0);
10228         sv_setpv(dst, reftype);
10229     }
10230     return dst;
10231 }
10232
10233 /*
10234 =for apidoc sv_isobject
10235
10236 Returns a boolean indicating whether the SV is an RV pointing to a blessed
10237 object.  If the SV is not an RV, or if the object is not blessed, then this
10238 will return false.
10239
10240 =cut
10241 */
10242
10243 int
10244 Perl_sv_isobject(pTHX_ SV *sv)
10245 {
10246     if (!sv)
10247         return 0;
10248     SvGETMAGIC(sv);
10249     if (!SvROK(sv))
10250         return 0;
10251     sv = SvRV(sv);
10252     if (!SvOBJECT(sv))
10253         return 0;
10254     return 1;
10255 }
10256
10257 /*
10258 =for apidoc sv_isa
10259
10260 Returns a boolean indicating whether the SV is blessed into the specified
10261 class.  This does not check for subtypes; use C<sv_derived_from> to verify
10262 an inheritance relationship.
10263
10264 =cut
10265 */
10266
10267 int
10268 Perl_sv_isa(pTHX_ SV *sv, const char *const name)
10269 {
10270     const char *hvname;
10271
10272     PERL_ARGS_ASSERT_SV_ISA;
10273
10274     if (!sv)
10275         return 0;
10276     SvGETMAGIC(sv);
10277     if (!SvROK(sv))
10278         return 0;
10279     sv = SvRV(sv);
10280     if (!SvOBJECT(sv))
10281         return 0;
10282     hvname = HvNAME_get(SvSTASH(sv));
10283     if (!hvname)
10284         return 0;
10285
10286     return strEQ(hvname, name);
10287 }
10288
10289 /*
10290 =for apidoc newSVrv
10291
10292 Creates a new SV for the existing RV, C<rv>, to point to.  If C<rv> is not an
10293 RV then it will be upgraded to one.  If C<classname> is non-null then the new
10294 SV will be blessed in the specified package.  The new SV is returned and its
10295 reference count is 1.  The reference count 1 is owned by C<rv>.
10296
10297 =cut
10298 */
10299
10300 SV*
10301 Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
10302 {
10303     SV *sv;
10304
10305     PERL_ARGS_ASSERT_NEWSVRV;
10306
10307     new_SV(sv);
10308
10309     SV_CHECK_THINKFIRST_COW_DROP(rv);
10310
10311     if (UNLIKELY( SvTYPE(rv) >= SVt_PVMG )) {
10312         const U32 refcnt = SvREFCNT(rv);
10313         SvREFCNT(rv) = 0;
10314         sv_clear(rv);
10315         SvFLAGS(rv) = 0;
10316         SvREFCNT(rv) = refcnt;
10317
10318         sv_upgrade(rv, SVt_IV);
10319     } else if (SvROK(rv)) {
10320         SvREFCNT_dec(SvRV(rv));
10321     } else {
10322         prepare_SV_for_RV(rv);
10323     }
10324
10325     SvOK_off(rv);
10326     SvRV_set(rv, sv);
10327     SvROK_on(rv);
10328
10329     if (classname) {
10330         HV* const stash = gv_stashpv(classname, GV_ADD);
10331         (void)sv_bless(rv, stash);
10332     }
10333     return sv;
10334 }
10335
10336 SV *
10337 Perl_newSVavdefelem(pTHX_ AV *av, SSize_t ix, bool extendible)
10338 {
10339     SV * const lv = newSV_type(SVt_PVLV);
10340     PERL_ARGS_ASSERT_NEWSVAVDEFELEM;
10341     LvTYPE(lv) = 'y';
10342     sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
10343     LvTARG(lv) = SvREFCNT_inc_simple_NN(av);
10344     LvSTARGOFF(lv) = ix;
10345     LvTARGLEN(lv) = extendible ? 1 : (STRLEN)UV_MAX;
10346     return lv;
10347 }
10348
10349 /*
10350 =for apidoc sv_setref_pv
10351
10352 Copies a pointer into a new SV, optionally blessing the SV.  The C<rv>
10353 argument will be upgraded to an RV.  That RV will be modified to point to
10354 the new SV.  If the C<pv> argument is C<NULL>, then C<PL_sv_undef> will be placed
10355 into the SV.  The C<classname> argument indicates the package for the
10356 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10357 will have a reference count of 1, and the RV will be returned.
10358
10359 Do not use with other Perl types such as HV, AV, SV, CV, because those
10360 objects will become corrupted by the pointer copy process.
10361
10362 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
10363
10364 =cut
10365 */
10366
10367 SV*
10368 Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
10369 {
10370     PERL_ARGS_ASSERT_SV_SETREF_PV;
10371
10372     if (!pv) {
10373         sv_set_undef(rv);
10374         SvSETMAGIC(rv);
10375     }
10376     else
10377         sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
10378     return rv;
10379 }
10380
10381 /*
10382 =for apidoc sv_setref_iv
10383
10384 Copies an 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_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
10395 {
10396     PERL_ARGS_ASSERT_SV_SETREF_IV;
10397
10398     sv_setiv(newSVrv(rv,classname), iv);
10399     return rv;
10400 }
10401
10402 /*
10403 =for apidoc sv_setref_uv
10404
10405 Copies an unsigned integer 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_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
10416 {
10417     PERL_ARGS_ASSERT_SV_SETREF_UV;
10418
10419     sv_setuv(newSVrv(rv,classname), uv);
10420     return rv;
10421 }
10422
10423 /*
10424 =for apidoc sv_setref_nv
10425
10426 Copies a double into a new SV, optionally blessing the SV.  The C<rv>
10427 argument will be upgraded to an RV.  That RV will be modified to point to
10428 the new SV.  The C<classname> argument indicates the package for the
10429 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10430 will have a reference count of 1, and the RV will be returned.
10431
10432 =cut
10433 */
10434
10435 SV*
10436 Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
10437 {
10438     PERL_ARGS_ASSERT_SV_SETREF_NV;
10439
10440     sv_setnv(newSVrv(rv,classname), nv);
10441     return rv;
10442 }
10443
10444 /*
10445 =for apidoc sv_setref_pvn
10446
10447 Copies a string into a new SV, optionally blessing the SV.  The length of the
10448 string must be specified with C<n>.  The C<rv> argument will be upgraded to
10449 an RV.  That RV will be modified to point to the new SV.  The C<classname>
10450 argument indicates the package for the blessing.  Set C<classname> to
10451 C<NULL> to avoid the blessing.  The new SV will have a reference count
10452 of 1, and the RV will be returned.
10453
10454 Note that C<sv_setref_pv> copies the pointer while this copies the string.
10455
10456 =cut
10457 */
10458
10459 SV*
10460 Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
10461                    const char *const pv, const STRLEN n)
10462 {
10463     PERL_ARGS_ASSERT_SV_SETREF_PVN;
10464
10465     sv_setpvn(newSVrv(rv,classname), pv, n);
10466     return rv;
10467 }
10468
10469 /*
10470 =for apidoc sv_bless
10471
10472 Blesses an SV into a specified package.  The SV must be an RV.  The package
10473 must be designated by its stash (see C<L</gv_stashpv>>).  The reference count
10474 of the SV is unaffected.
10475
10476 =cut
10477 */
10478
10479 SV*
10480 Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
10481 {
10482     SV *tmpRef;
10483     HV *oldstash = NULL;
10484
10485     PERL_ARGS_ASSERT_SV_BLESS;
10486
10487     SvGETMAGIC(sv);
10488     if (!SvROK(sv))
10489         Perl_croak(aTHX_ "Can't bless non-reference value");
10490     tmpRef = SvRV(sv);
10491     if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY|SVf_PROTECT)) {
10492         if (SvREADONLY(tmpRef))
10493             Perl_croak_no_modify();
10494         if (SvOBJECT(tmpRef)) {
10495             oldstash = SvSTASH(tmpRef);
10496         }
10497     }
10498     SvOBJECT_on(tmpRef);
10499     SvUPGRADE(tmpRef, SVt_PVMG);
10500     SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
10501     SvREFCNT_dec(oldstash);
10502
10503     if(SvSMAGICAL(tmpRef))
10504         if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
10505             mg_set(tmpRef);
10506
10507
10508
10509     return sv;
10510 }
10511
10512 /* Downgrades a PVGV to a PVMG. If it's actually a PVLV, we leave the type
10513  * as it is after unglobbing it.
10514  */
10515
10516 PERL_STATIC_INLINE void
10517 S_sv_unglob(pTHX_ SV *const sv, U32 flags)
10518 {
10519     void *xpvmg;
10520     HV *stash;
10521     SV * const temp = flags & SV_COW_DROP_PV ? NULL : sv_newmortal();
10522
10523     PERL_ARGS_ASSERT_SV_UNGLOB;
10524
10525     assert(SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV);
10526     SvFAKE_off(sv);
10527     if (!(flags & SV_COW_DROP_PV))
10528         gv_efullname3(temp, MUTABLE_GV(sv), "*");
10529
10530     SvREFCNT_inc_simple_void_NN(sv_2mortal(sv));
10531     if (GvGP(sv)) {
10532         if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
10533            && HvNAME_get(stash))
10534             mro_method_changed_in(stash);
10535         gp_free(MUTABLE_GV(sv));
10536     }
10537     if (GvSTASH(sv)) {
10538         sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
10539         GvSTASH(sv) = NULL;
10540     }
10541     GvMULTI_off(sv);
10542     if (GvNAME_HEK(sv)) {
10543         unshare_hek(GvNAME_HEK(sv));
10544     }
10545     isGV_with_GP_off(sv);
10546
10547     if(SvTYPE(sv) == SVt_PVGV) {
10548         /* need to keep SvANY(sv) in the right arena */
10549         xpvmg = new_XPVMG();
10550         StructCopy(SvANY(sv), xpvmg, XPVMG);
10551         del_XPVGV(SvANY(sv));
10552         SvANY(sv) = xpvmg;
10553
10554         SvFLAGS(sv) &= ~SVTYPEMASK;
10555         SvFLAGS(sv) |= SVt_PVMG;
10556     }
10557
10558     /* Intentionally not calling any local SET magic, as this isn't so much a
10559        set operation as merely an internal storage change.  */
10560     if (flags & SV_COW_DROP_PV) SvOK_off(sv);
10561     else sv_setsv_flags(sv, temp, 0);
10562
10563     if ((const GV *)sv == PL_last_in_gv)
10564         PL_last_in_gv = NULL;
10565     else if ((const GV *)sv == PL_statgv)
10566         PL_statgv = NULL;
10567 }
10568
10569 /*
10570 =for apidoc sv_unref_flags
10571
10572 Unsets the RV status of the SV, and decrements the reference count of
10573 whatever was being referenced by the RV.  This can almost be thought of
10574 as a reversal of C<newSVrv>.  The C<cflags> argument can contain
10575 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
10576 (otherwise the decrementing is conditional on the reference count being
10577 different from one or the reference being a readonly SV).
10578 See C<L</SvROK_off>>.
10579
10580 =cut
10581 */
10582
10583 void
10584 Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
10585 {
10586     SV* const target = SvRV(ref);
10587
10588     PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
10589
10590     if (SvWEAKREF(ref)) {
10591         sv_del_backref(target, ref);
10592         SvWEAKREF_off(ref);
10593         SvRV_set(ref, NULL);
10594         return;
10595     }
10596     SvRV_set(ref, NULL);
10597     SvROK_off(ref);
10598     /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
10599        assigned to as BEGIN {$a = \"Foo"} will fail.  */
10600     if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
10601         SvREFCNT_dec_NN(target);
10602     else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
10603         sv_2mortal(target);     /* Schedule for freeing later */
10604 }
10605
10606 /*
10607 =for apidoc sv_untaint
10608
10609 Untaint an SV.  Use C<SvTAINTED_off> instead.
10610
10611 =cut
10612 */
10613
10614 void
10615 Perl_sv_untaint(pTHX_ SV *const sv)
10616 {
10617     PERL_ARGS_ASSERT_SV_UNTAINT;
10618     PERL_UNUSED_CONTEXT;
10619
10620     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
10621         MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
10622         if (mg)
10623             mg->mg_len &= ~1;
10624     }
10625 }
10626
10627 /*
10628 =for apidoc sv_tainted
10629
10630 Test an SV for taintedness.  Use C<SvTAINTED> instead.
10631
10632 =cut
10633 */
10634
10635 bool
10636 Perl_sv_tainted(pTHX_ SV *const sv)
10637 {
10638     PERL_ARGS_ASSERT_SV_TAINTED;
10639     PERL_UNUSED_CONTEXT;
10640
10641     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
10642         const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
10643         if (mg && (mg->mg_len & 1) )
10644             return TRUE;
10645     }
10646     return FALSE;
10647 }
10648
10649 #ifndef NO_MATHOMS  /* Can't move these to mathoms.c because call uiv_2buf(),
10650                        private to this file */
10651
10652 /*
10653 =for apidoc sv_setpviv
10654
10655 Copies an integer into the given SV, also updating its string value.
10656 Does not handle 'set' magic.  See C<L</sv_setpviv_mg>>.
10657
10658 =cut
10659 */
10660
10661 void
10662 Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
10663 {
10664     char buf[TYPE_CHARS(UV)];
10665     char *ebuf;
10666     char * const ptr = uiv_2buf(buf, iv, 0, 0, &ebuf);
10667
10668     PERL_ARGS_ASSERT_SV_SETPVIV;
10669
10670     sv_setpvn(sv, ptr, ebuf - ptr);
10671 }
10672
10673 /*
10674 =for apidoc sv_setpviv_mg
10675
10676 Like C<sv_setpviv>, but also handles 'set' magic.
10677
10678 =cut
10679 */
10680
10681 void
10682 Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
10683 {
10684     PERL_ARGS_ASSERT_SV_SETPVIV_MG;
10685
10686     sv_setpviv(sv, iv);
10687     SvSETMAGIC(sv);
10688 }
10689
10690 #endif  /* NO_MATHOMS */
10691
10692 #if defined(PERL_IMPLICIT_CONTEXT)
10693
10694 /* pTHX_ magic can't cope with varargs, so this is a no-context
10695  * version of the main function, (which may itself be aliased to us).
10696  * Don't access this version directly.
10697  */
10698
10699 void
10700 Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
10701 {
10702     dTHX;
10703     va_list args;
10704
10705     PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
10706
10707     va_start(args, pat);
10708     sv_vsetpvf(sv, pat, &args);
10709     va_end(args);
10710 }
10711
10712 /* pTHX_ magic can't cope with varargs, so this is a no-context
10713  * version of the main function, (which may itself be aliased to us).
10714  * Don't access this version directly.
10715  */
10716
10717 void
10718 Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10719 {
10720     dTHX;
10721     va_list args;
10722
10723     PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
10724
10725     va_start(args, pat);
10726     sv_vsetpvf_mg(sv, pat, &args);
10727     va_end(args);
10728 }
10729 #endif
10730
10731 /*
10732 =for apidoc sv_setpvf
10733
10734 Works like C<sv_catpvf> but copies the text into the SV instead of
10735 appending it.  Does not handle 'set' magic.  See C<L</sv_setpvf_mg>>.
10736
10737 =cut
10738 */
10739
10740 void
10741 Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
10742 {
10743     va_list args;
10744
10745     PERL_ARGS_ASSERT_SV_SETPVF;
10746
10747     va_start(args, pat);
10748     sv_vsetpvf(sv, pat, &args);
10749     va_end(args);
10750 }
10751
10752 /*
10753 =for apidoc sv_vsetpvf
10754
10755 Works like C<sv_vcatpvf> but copies the text into the SV instead of
10756 appending it.  Does not handle 'set' magic.  See C<L</sv_vsetpvf_mg>>.
10757
10758 Usually used via its frontend C<sv_setpvf>.
10759
10760 =cut
10761 */
10762
10763 void
10764 Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10765 {
10766     PERL_ARGS_ASSERT_SV_VSETPVF;
10767
10768     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10769 }
10770
10771 /*
10772 =for apidoc sv_setpvf_mg
10773
10774 Like C<sv_setpvf>, but also handles 'set' magic.
10775
10776 =cut
10777 */
10778
10779 void
10780 Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10781 {
10782     va_list args;
10783
10784     PERL_ARGS_ASSERT_SV_SETPVF_MG;
10785
10786     va_start(args, pat);
10787     sv_vsetpvf_mg(sv, pat, &args);
10788     va_end(args);
10789 }
10790
10791 /*
10792 =for apidoc sv_vsetpvf_mg
10793
10794 Like C<sv_vsetpvf>, but also handles 'set' magic.
10795
10796 Usually used via its frontend C<sv_setpvf_mg>.
10797
10798 =cut
10799 */
10800
10801 void
10802 Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10803 {
10804     PERL_ARGS_ASSERT_SV_VSETPVF_MG;
10805
10806     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10807     SvSETMAGIC(sv);
10808 }
10809
10810 #if defined(PERL_IMPLICIT_CONTEXT)
10811
10812 /* pTHX_ magic can't cope with varargs, so this is a no-context
10813  * version of the main function, (which may itself be aliased to us).
10814  * Don't access this version directly.
10815  */
10816
10817 void
10818 Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
10819 {
10820     dTHX;
10821     va_list args;
10822
10823     PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
10824
10825     va_start(args, pat);
10826     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10827     va_end(args);
10828 }
10829
10830 /* pTHX_ magic can't cope with varargs, so this is a no-context
10831  * version of the main function, (which may itself be aliased to us).
10832  * Don't access this version directly.
10833  */
10834
10835 void
10836 Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10837 {
10838     dTHX;
10839     va_list args;
10840
10841     PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
10842
10843     va_start(args, pat);
10844     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10845     SvSETMAGIC(sv);
10846     va_end(args);
10847 }
10848 #endif
10849
10850 /*
10851 =for apidoc sv_catpvf
10852
10853 Processes its arguments like C<sv_catpvfn>, and appends the formatted
10854 output to an SV.  As with C<sv_catpvfn> called with a non-null C-style
10855 variable argument list, argument reordering is not supported.
10856 If the appended data contains "wide" characters
10857 (including, but not limited to, SVs with a UTF-8 PV formatted with C<%s>,
10858 and characters >255 formatted with C<%c>), the original SV might get
10859 upgraded to UTF-8.  Handles 'get' magic, but not 'set' magic.  See
10860 C<L</sv_catpvf_mg>>.  If the original SV was UTF-8, the pattern should be
10861 valid UTF-8; if the original SV was bytes, the pattern should be too.
10862
10863 =cut */
10864
10865 void
10866 Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
10867 {
10868     va_list args;
10869
10870     PERL_ARGS_ASSERT_SV_CATPVF;
10871
10872     va_start(args, pat);
10873     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10874     va_end(args);
10875 }
10876
10877 /*
10878 =for apidoc sv_vcatpvf
10879
10880 Processes its arguments like C<sv_catpvfn> called with a non-null C-style
10881 variable argument list, and appends the formatted output
10882 to an SV.  Does not handle 'set' magic.  See C<L</sv_vcatpvf_mg>>.
10883
10884 Usually used via its frontend C<sv_catpvf>.
10885
10886 =cut
10887 */
10888
10889 void
10890 Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10891 {
10892     PERL_ARGS_ASSERT_SV_VCATPVF;
10893
10894     sv_vcatpvfn_flags(sv, pat, strlen(pat), args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10895 }
10896
10897 /*
10898 =for apidoc sv_catpvf_mg
10899
10900 Like C<sv_catpvf>, but also handles 'set' magic.
10901
10902 =cut
10903 */
10904
10905 void
10906 Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10907 {
10908     va_list args;
10909
10910     PERL_ARGS_ASSERT_SV_CATPVF_MG;
10911
10912     va_start(args, pat);
10913     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10914     SvSETMAGIC(sv);
10915     va_end(args);
10916 }
10917
10918 /*
10919 =for apidoc sv_vcatpvf_mg
10920
10921 Like C<sv_vcatpvf>, but also handles 'set' magic.
10922
10923 Usually used via its frontend C<sv_catpvf_mg>.
10924
10925 =cut
10926 */
10927
10928 void
10929 Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10930 {
10931     PERL_ARGS_ASSERT_SV_VCATPVF_MG;
10932
10933     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10934     SvSETMAGIC(sv);
10935 }
10936
10937 /*
10938 =for apidoc sv_vsetpvfn
10939
10940 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
10941 appending it.
10942
10943 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
10944
10945 =cut
10946 */
10947
10948 void
10949 Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
10950                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
10951 {
10952     PERL_ARGS_ASSERT_SV_VSETPVFN;
10953
10954     SvPVCLEAR(sv);
10955     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, 0);
10956 }
10957
10958
10959 /*
10960  * Warn of missing argument to sprintf. The value used in place of such
10961  * arguments should be &PL_sv_no; an undefined value would yield
10962  * inappropriate "use of uninit" warnings [perl #71000].
10963  */
10964 STATIC void
10965 S_warn_vcatpvfn_missing_argument(pTHX) {
10966     if (ckWARN(WARN_MISSING)) {
10967         Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
10968                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
10969     }
10970 }
10971
10972
10973 STATIC I32
10974 S_expect_number(pTHX_ char **const pattern)
10975 {
10976     I32 var = 0;
10977
10978     PERL_ARGS_ASSERT_EXPECT_NUMBER;
10979
10980     switch (**pattern) {
10981     case '1': case '2': case '3':
10982     case '4': case '5': case '6':
10983     case '7': case '8': case '9':
10984         var = *(*pattern)++ - '0';
10985         while (isDIGIT(**pattern)) {
10986             const I32 tmp = var * 10 + (*(*pattern)++ - '0');
10987             if (tmp < var)
10988                 Perl_croak(aTHX_ "Integer overflow in format string for %s", (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
10989             var = tmp;
10990         }
10991     }
10992     return var;
10993 }
10994
10995 STATIC char *
10996 S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
10997 {
10998     const int neg = nv < 0;
10999     UV uv;
11000
11001     PERL_ARGS_ASSERT_F0CONVERT;
11002
11003     if (UNLIKELY(Perl_isinfnan(nv))) {
11004         STRLEN n = S_infnan_2pv(nv, endbuf - *len, *len, 0);
11005         *len = n;
11006         return endbuf - n;
11007     }
11008     if (neg)
11009         nv = -nv;
11010     if (nv < UV_MAX) {
11011         char *p = endbuf;
11012         nv += 0.5;
11013         uv = (UV)nv;
11014         if (uv & 1 && uv == nv)
11015             uv--;                       /* Round to even */
11016         do {
11017             const unsigned dig = uv % 10;
11018             *--p = '0' + dig;
11019         } while (uv /= 10);
11020         if (neg)
11021             *--p = '-';
11022         *len = endbuf - p;
11023         return p;
11024     }
11025     return NULL;
11026 }
11027
11028
11029 /*
11030 =for apidoc sv_vcatpvfn
11031
11032 =for apidoc sv_vcatpvfn_flags
11033
11034 Processes its arguments like C<vsprintf> and appends the formatted output
11035 to an SV.  Uses an array of SVs if the C-style variable argument list is
11036 missing (C<NULL>). Argument reordering (using format specifiers like C<%2$d>
11037 or C<%*2$d>) is supported only when using an array of SVs; using a C-style
11038 C<va_list> argument list with a format string that uses argument reordering
11039 will yield an exception.
11040
11041 When running with taint checks enabled, indicates via
11042 C<maybe_tainted> if results are untrustworthy (often due to the use of
11043 locales).
11044
11045 If called as C<sv_vcatpvfn> or flags has the C<SV_GMAGIC> bit set, calls get magic.
11046
11047 Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
11048
11049 =cut
11050 */
11051
11052 #define VECTORIZE_ARGS  vecsv = va_arg(*args, SV*);\
11053                         vecstr = (U8*)SvPV_const(vecsv,veclen);\
11054                         vec_utf8 = DO_UTF8(vecsv);
11055
11056 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
11057
11058 void
11059 Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
11060                  va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted)
11061 {
11062     PERL_ARGS_ASSERT_SV_VCATPVFN;
11063
11064     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, SV_GMAGIC|SV_SMAGIC);
11065 }
11066
11067 #ifdef LONGDOUBLE_DOUBLEDOUBLE
11068 /* The first double can be as large as 2**1023, or '1' x '0' x 1023.
11069  * The second double can be as small as 2**-1074, or '0' x 1073 . '1'.
11070  * The sum of them can be '1' . '0' x 2096 . '1', with implied radix point
11071  * after the first 1023 zero bits.
11072  *
11073  * XXX The 2098 is quite large (262.25 bytes) and therefore some sort
11074  * of dynamically growing buffer might be better, start at just 16 bytes
11075  * (for example) and grow only when necessary.  Or maybe just by looking
11076  * at the exponents of the two doubles? */
11077 #  define DOUBLEDOUBLE_MAXBITS 2098
11078 #endif
11079
11080 /* vhex will contain the values (0..15) of the hex digits ("nybbles"
11081  * of 4 bits); 1 for the implicit 1, and the mantissa bits, four bits
11082  * per xdigit.  For the double-double case, this can be rather many.
11083  * The non-double-double-long-double overshoots since all bits of NV
11084  * are not mantissa bits, there are also exponent bits. */
11085 #ifdef LONGDOUBLE_DOUBLEDOUBLE
11086 #  define VHEX_SIZE (3+DOUBLEDOUBLE_MAXBITS/4)
11087 #else
11088 #  define VHEX_SIZE (1+(NVSIZE * 8)/4)
11089 #endif
11090
11091 /* If we do not have a known long double format, (including not using
11092  * long doubles, or long doubles being equal to doubles) then we will
11093  * fall back to the ldexp/frexp route, with which we can retrieve at
11094  * most as many bits as our widest unsigned integer type is.  We try
11095  * to get a 64-bit unsigned integer even if we are not using a 64-bit UV.
11096  *
11097  * (If you want to test the case of UVSIZE == 4, NVSIZE == 8,
11098  *  set the MANTISSATYPE to int and the MANTISSASIZE to 4.)
11099  */
11100 #if defined(HAS_QUAD) && defined(Uquad_t)
11101 #  define MANTISSATYPE Uquad_t
11102 #  define MANTISSASIZE 8
11103 #else
11104 #  define MANTISSATYPE UV
11105 #  define MANTISSASIZE UVSIZE
11106 #endif
11107
11108 #if defined(DOUBLE_LITTLE_ENDIAN) || defined(LONGDOUBLE_LITTLE_ENDIAN)
11109 #  define HEXTRACT_LITTLE_ENDIAN
11110 #elif defined(DOUBLE_BIG_ENDIAN) || defined(LONGDOUBLE_BIG_ENDIAN)
11111 #  define HEXTRACT_BIG_ENDIAN
11112 #else
11113 #  define HEXTRACT_MIX_ENDIAN
11114 #endif
11115
11116 /* S_hextract() is a helper for Perl_sv_vcatpvfn_flags, for extracting
11117  * the hexadecimal values (for %a/%A).  The nv is the NV where the value
11118  * are being extracted from (either directly from the long double in-memory
11119  * presentation, or from the uquad computed via frexp+ldexp).  frexp also
11120  * is used to update the exponent.  The subnormal is set to true
11121  * for IEEE 754 subnormals/denormals (including the x86 80-bit format).
11122  * The vhex is the pointer to the beginning of the output buffer of VHEX_SIZE.
11123  *
11124  * The tricky part is that S_hextract() needs to be called twice:
11125  * the first time with vend as NULL, and the second time with vend as
11126  * the pointer returned by the first call.  What happens is that on
11127  * the first round the output size is computed, and the intended
11128  * extraction sanity checked.  On the second round the actual output
11129  * (the extraction of the hexadecimal values) takes place.
11130  * Sanity failures cause fatal failures during both rounds. */
11131 STATIC U8*
11132 S_hextract(pTHX_ const NV nv, int* exponent, bool *subnormal,
11133            U8* vhex, U8* vend)
11134 {
11135     U8* v = vhex;
11136     int ix;
11137     int ixmin = 0, ixmax = 0;
11138
11139     /* XXX Inf/NaN are not handled here, since it is
11140      * assumed they are to be output as "Inf" and "NaN". */
11141
11142     /* These macros are just to reduce typos, they have multiple
11143      * repetitions below, but usually only one (or sometimes two)
11144      * of them is really being used. */
11145     /* HEXTRACT_OUTPUT() extracts the high nybble first. */
11146 #define HEXTRACT_OUTPUT_HI(ix) (*v++ = nvp[ix] >> 4)
11147 #define HEXTRACT_OUTPUT_LO(ix) (*v++ = nvp[ix] & 0xF)
11148 #define HEXTRACT_OUTPUT(ix) \
11149     STMT_START { \
11150       HEXTRACT_OUTPUT_HI(ix); HEXTRACT_OUTPUT_LO(ix); \
11151    } STMT_END
11152 #define HEXTRACT_COUNT(ix, c) \
11153     STMT_START { \
11154       v += c; if (ix < ixmin) ixmin = ix; else if (ix > ixmax) ixmax = ix; \
11155    } STMT_END
11156 #define HEXTRACT_BYTE(ix) \
11157     STMT_START { \
11158       if (vend) HEXTRACT_OUTPUT(ix); else HEXTRACT_COUNT(ix, 2); \
11159    } STMT_END
11160 #define HEXTRACT_LO_NYBBLE(ix) \
11161     STMT_START { \
11162       if (vend) HEXTRACT_OUTPUT_LO(ix); else HEXTRACT_COUNT(ix, 1); \
11163    } STMT_END
11164     /* HEXTRACT_TOP_NYBBLE is just convenience disguise,
11165      * to make it look less odd when the top bits of a NV
11166      * are extracted using HEXTRACT_LO_NYBBLE: the highest
11167      * order bits can be in the "low nybble" of a byte. */
11168 #define HEXTRACT_TOP_NYBBLE(ix) HEXTRACT_LO_NYBBLE(ix)
11169 #define HEXTRACT_BYTES_LE(a, b) \
11170     for (ix = a; ix >= b; ix--) { HEXTRACT_BYTE(ix); }
11171 #define HEXTRACT_BYTES_BE(a, b) \
11172     for (ix = a; ix <= b; ix++) { HEXTRACT_BYTE(ix); }
11173 #define HEXTRACT_GET_SUBNORMAL(nv) *subnormal = Perl_fp_class_denorm(nv)
11174 #define HEXTRACT_IMPLICIT_BIT(nv) \
11175     STMT_START { \
11176         if (!*subnormal) { \
11177             if (vend) *v++ = ((nv) == 0.0) ? 0 : 1; else v++; \
11178         } \
11179    } STMT_END
11180
11181 /* Most formats do.  Those which don't should undef this.
11182  *
11183  * But also note that IEEE 754 subnormals do not have it, or,
11184  * expressed alternatively, their implicit bit is zero. */
11185 #define HEXTRACT_HAS_IMPLICIT_BIT
11186
11187 /* Many formats do.  Those which don't should undef this. */
11188 #define HEXTRACT_HAS_TOP_NYBBLE
11189
11190     /* HEXTRACTSIZE is the maximum number of xdigits. */
11191 #if defined(USE_LONG_DOUBLE) && defined(LONGDOUBLE_DOUBLEDOUBLE)
11192 #  define HEXTRACTSIZE (2+DOUBLEDOUBLE_MAXBITS/4)
11193 #else
11194 #  define HEXTRACTSIZE 2 * NVSIZE
11195 #endif
11196
11197     const U8* vmaxend = vhex + HEXTRACTSIZE;
11198     PERL_UNUSED_VAR(ix); /* might happen */
11199     (void)Perl_frexp(PERL_ABS(nv), exponent);
11200     *subnormal = FALSE;
11201     if (vend && (vend <= vhex || vend > vmaxend)) {
11202         /* diag_listed_as: Hexadecimal float: internal error (%s) */
11203         Perl_croak(aTHX_ "Hexadecimal float: internal error (entry)");
11204     }
11205     {
11206         /* First check if using long doubles. */
11207 #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE)
11208 #  if LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN
11209         /* Used in e.g. VMS and HP-UX IA-64, e.g. -0.1L:
11210          * 9a 99 99 99 99 99 99 99 99 99 99 99 99 99 fb bf */
11211         /* The bytes 13..0 are the mantissa/fraction,
11212          * the 15,14 are the sign+exponent. */
11213         const U8* nvp = (const U8*)(&nv);
11214         HEXTRACT_GET_SUBNORMAL(nv);
11215         HEXTRACT_IMPLICIT_BIT(nv);
11216 #   undef HEXTRACT_HAS_TOP_NYBBLE
11217         HEXTRACT_BYTES_LE(13, 0);
11218 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN
11219         /* Used in e.g. Solaris Sparc and HP-UX PA-RISC, e.g. -0.1L:
11220          * bf fb 99 99 99 99 99 99 99 99 99 99 99 99 99 9a */
11221         /* The bytes 2..15 are the mantissa/fraction,
11222          * the 0,1 are the sign+exponent. */
11223         const U8* nvp = (const U8*)(&nv);
11224         HEXTRACT_GET_SUBNORMAL(nv);
11225         HEXTRACT_IMPLICIT_BIT(nv);
11226 #   undef HEXTRACT_HAS_TOP_NYBBLE
11227         HEXTRACT_BYTES_BE(2, 15);
11228 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN
11229         /* x86 80-bit "extended precision", 64 bits of mantissa / fraction /
11230          * significand, 15 bits of exponent, 1 bit of sign.  No implicit bit.
11231          * NVSIZE can be either 12 (ILP32, Solaris x86) or 16 (LP64, Linux
11232          * and OS X), meaning that 2 or 6 bytes are empty padding. */
11233         /* The bytes 0..1 are the sign+exponent,
11234          * the bytes 2..9 are the mantissa/fraction. */
11235         const U8* nvp = (const U8*)(&nv);
11236 #    undef HEXTRACT_HAS_IMPLICIT_BIT
11237 #    undef HEXTRACT_HAS_TOP_NYBBLE
11238         HEXTRACT_GET_SUBNORMAL(nv);
11239         HEXTRACT_BYTES_LE(7, 0);
11240 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN
11241         /* Does this format ever happen? (Wikipedia says the Motorola
11242          * 6888x math coprocessors used format _like_ this but padded
11243          * to 96 bits with 16 unused bits between the exponent and the
11244          * mantissa.) */
11245         const U8* nvp = (const U8*)(&nv);
11246 #    undef HEXTRACT_HAS_IMPLICIT_BIT
11247 #    undef HEXTRACT_HAS_TOP_NYBBLE
11248         HEXTRACT_GET_SUBNORMAL(nv);
11249         HEXTRACT_BYTES_BE(0, 7);
11250 #  else
11251 #    define HEXTRACT_FALLBACK
11252         /* Double-double format: two doubles next to each other.
11253          * The first double is the high-order one, exactly like
11254          * it would be for a "lone" double.  The second double
11255          * is shifted down using the exponent so that that there
11256          * are no common bits.  The tricky part is that the value
11257          * of the double-double is the SUM of the two doubles and
11258          * the second one can be also NEGATIVE.
11259          *
11260          * Because of this tricky construction the bytewise extraction we
11261          * use for the other long double formats doesn't work, we must
11262          * extract the values bit by bit.
11263          *
11264          * The little-endian double-double is used .. somewhere?
11265          *
11266          * The big endian double-double is used in e.g. PPC/Power (AIX)
11267          * and MIPS (SGI).
11268          *
11269          * The mantissa bits are in two separate stretches, e.g. for -0.1L:
11270          * 9a 99 99 99 99 99 59 bc 9a 99 99 99 99 99 b9 3f (LE)
11271          * 3f b9 99 99 99 99 99 9a bc 59 99 99 99 99 99 9a (BE)
11272          */
11273 #  endif
11274 #else /* #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE) */
11275         /* Using normal doubles, not long doubles.
11276          *
11277          * We generate 4-bit xdigits (nybble/nibble) instead of 8-bit
11278          * bytes, since we might need to handle printf precision, and
11279          * also need to insert the radix. */
11280 #  if NVSIZE == 8
11281 #    ifdef HEXTRACT_LITTLE_ENDIAN
11282         /* 0 1 2 3 4 5 6 7 (MSB = 7, LSB = 0, 6+7 = exponent+sign) */
11283         const U8* nvp = (const U8*)(&nv);
11284         HEXTRACT_GET_SUBNORMAL(nv);
11285         HEXTRACT_IMPLICIT_BIT(nv);
11286         HEXTRACT_TOP_NYBBLE(6);
11287         HEXTRACT_BYTES_LE(5, 0);
11288 #    elif defined(HEXTRACT_BIG_ENDIAN)
11289         /* 7 6 5 4 3 2 1 0 (MSB = 7, LSB = 0, 6+7 = exponent+sign) */
11290         const U8* nvp = (const U8*)(&nv);
11291         HEXTRACT_GET_SUBNORMAL(nv);
11292         HEXTRACT_IMPLICIT_BIT(nv);
11293         HEXTRACT_TOP_NYBBLE(1);
11294         HEXTRACT_BYTES_BE(2, 7);
11295 #    elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_LE_BE
11296         /* 4 5 6 7 0 1 2 3 (MSB = 7, LSB = 0, 6:7 = nybble:exponent:sign) */
11297         const U8* nvp = (const U8*)(&nv);
11298         HEXTRACT_GET_SUBNORMAL(nv);
11299         HEXTRACT_IMPLICIT_BIT(nv);
11300         HEXTRACT_TOP_NYBBLE(2); /* 6 */
11301         HEXTRACT_BYTE(1); /* 5 */
11302         HEXTRACT_BYTE(0); /* 4 */
11303         HEXTRACT_BYTE(7); /* 3 */
11304         HEXTRACT_BYTE(6); /* 2 */
11305         HEXTRACT_BYTE(5); /* 1 */
11306         HEXTRACT_BYTE(4); /* 0 */
11307 #    elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_BE_LE
11308         /* 3 2 1 0 7 6 5 4 (MSB = 7, LSB = 0, 7:6 = sign:exponent:nybble) */
11309         const U8* nvp = (const U8*)(&nv);
11310         HEXTRACT_GET_SUBNORMAL(nv);
11311         HEXTRACT_IMPLICIT_BIT(nv);
11312         HEXTRACT_TOP_NYBBLE(5); /* 6 */
11313         HEXTRACT_BYTE(6); /* 5 */
11314         HEXTRACT_BYTE(7); /* 4 */
11315         HEXTRACT_BYTE(0); /* 3 */
11316         HEXTRACT_BYTE(1); /* 2 */
11317         HEXTRACT_BYTE(2); /* 1 */
11318         HEXTRACT_BYTE(3); /* 0 */
11319 #    else
11320 #      define HEXTRACT_FALLBACK
11321 #    endif
11322 #  else
11323 #    define HEXTRACT_FALLBACK
11324 #  endif
11325 #endif /* #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE) #else */
11326 #  ifdef HEXTRACT_FALLBACK
11327         HEXTRACT_GET_SUBNORMAL(nv);
11328 #    undef HEXTRACT_HAS_TOP_NYBBLE /* Meaningless, but consistent. */
11329         /* The fallback is used for the double-double format, and
11330          * for unknown long double formats, and for unknown double
11331          * formats, or in general unknown NV formats. */
11332         if (nv == (NV)0.0) {
11333             if (vend)
11334                 *v++ = 0;
11335             else
11336                 v++;
11337             *exponent = 0;
11338         }
11339         else {
11340             NV d = nv < 0 ? -nv : nv;
11341             NV e = (NV)1.0;
11342             U8 ha = 0x0; /* hexvalue accumulator */
11343             U8 hd = 0x8; /* hexvalue digit */
11344
11345             /* Shift d and e (and update exponent) so that e <= d < 2*e,
11346              * this is essentially manual frexp(). Multiplying by 0.5 and
11347              * doubling should be lossless in binary floating point. */
11348
11349             *exponent = 1;
11350
11351             while (e > d) {
11352                 e *= (NV)0.5;
11353                 (*exponent)--;
11354             }
11355             /* Now d >= e */
11356
11357             while (d >= e + e) {
11358                 e += e;
11359                 (*exponent)++;
11360             }
11361             /* Now e <= d < 2*e */
11362
11363             /* First extract the leading hexdigit (the implicit bit). */
11364             if (d >= e) {
11365                 d -= e;
11366                 if (vend)
11367                     *v++ = 1;
11368                 else
11369                     v++;
11370             }
11371             else {
11372                 if (vend)
11373                     *v++ = 0;
11374                 else
11375                     v++;
11376             }
11377             e *= (NV)0.5;
11378
11379             /* Then extract the remaining hexdigits. */
11380             while (d > (NV)0.0) {
11381                 if (d >= e) {
11382                     ha |= hd;
11383                     d -= e;
11384                 }
11385                 if (hd == 1) {
11386                     /* Output or count in groups of four bits,
11387                      * that is, when the hexdigit is down to one. */
11388                     if (vend)
11389                         *v++ = ha;
11390                     else
11391                         v++;
11392                     /* Reset the hexvalue. */
11393                     ha = 0x0;
11394                     hd = 0x8;
11395                 }
11396                 else
11397                     hd >>= 1;
11398                 e *= (NV)0.5;
11399             }
11400
11401             /* Flush possible pending hexvalue. */
11402             if (ha) {
11403                 if (vend)
11404                     *v++ = ha;
11405                 else
11406                     v++;
11407             }
11408         }
11409 #  endif
11410     }
11411     /* Croak for various reasons: if the output pointer escaped the
11412      * output buffer, if the extraction index escaped the extraction
11413      * buffer, or if the ending output pointer didn't match the
11414      * previously computed value. */
11415     if (v <= vhex || v - vhex >= VHEX_SIZE ||
11416         /* For double-double the ixmin and ixmax stay at zero,
11417          * which is convenient since the HEXTRACTSIZE is tricky
11418          * for double-double. */
11419         ixmin < 0 || ixmax >= NVSIZE ||
11420         (vend && v != vend)) {
11421         /* diag_listed_as: Hexadecimal float: internal error (%s) */
11422         Perl_croak(aTHX_ "Hexadecimal float: internal error (overflow)");
11423     }
11424     return v;
11425 }
11426
11427 /* Helper for sv_vcatpvfn_flags().  */
11428 #define FETCH_VCATPVFN_ARGUMENT(var, in_range, expr)   \
11429     STMT_START {                                       \
11430         if (in_range)                                  \
11431             (var) = (expr);                            \
11432         else {                                         \
11433             (var) = &PL_sv_no; /* [perl #71000] */     \
11434             arg_missing = TRUE;                        \
11435         }                                              \
11436     } STMT_END
11437
11438 void
11439 Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
11440                        va_list *const args, SV **const svargs, const I32 svmax, bool *const maybe_tainted,
11441                        const U32 flags)
11442 {
11443     char *p;
11444     char *q;
11445     const char *patend;
11446     STRLEN origlen;
11447     I32 svix = 0;
11448     static const char nullstr[] = "(null)";
11449     SV *argsv = NULL;
11450     bool has_utf8 = DO_UTF8(sv);    /* has the result utf8? */
11451     const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
11452     SV *nsv = NULL;
11453     /* Times 4: a decimal digit takes more than 3 binary digits.
11454      * NV_DIG: mantissa takes than many decimal digits.
11455      * Plus 32: Playing safe. */
11456     char ebuf[IV_DIG * 4 + NV_DIG + 32];
11457     bool no_redundant_warning = FALSE; /* did we use any explicit format parameter index? */
11458     bool hexfp = FALSE; /* hexadecimal floating point? */
11459
11460     DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
11461
11462     PERL_ARGS_ASSERT_SV_VCATPVFN_FLAGS;
11463     PERL_UNUSED_ARG(maybe_tainted);
11464
11465     if (flags & SV_GMAGIC)
11466         SvGETMAGIC(sv);
11467
11468     /* no matter what, this is a string now */
11469     (void)SvPV_force_nomg(sv, origlen);
11470
11471     /* special-case "", "%s", and "%-p" (SVf - see below) */
11472     if (patlen == 0) {
11473         if (svmax && ckWARN(WARN_REDUNDANT))
11474             Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
11475                         PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
11476         return;
11477     }
11478     if (patlen == 2 && pat[0] == '%' && pat[1] == 's') {
11479         if (svmax > 1 && ckWARN(WARN_REDUNDANT))
11480             Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
11481                         PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
11482
11483         if (args) {
11484             const char * const s = va_arg(*args, char*);
11485             sv_catpv_nomg(sv, s ? s : nullstr);
11486         }
11487         else if (svix < svmax) {
11488             /* we want get magic on the source but not the target. sv_catsv can't do that, though */
11489             SvGETMAGIC(*svargs);
11490             sv_catsv_nomg(sv, *svargs);
11491         }
11492         else
11493             S_warn_vcatpvfn_missing_argument(aTHX);
11494         return;
11495     }
11496     if (args && patlen == 3 && pat[0] == '%' &&
11497                 pat[1] == '-' && pat[2] == 'p') {
11498         if (svmax > 1 && ckWARN(WARN_REDUNDANT))
11499             Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
11500                         PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
11501         argsv = MUTABLE_SV(va_arg(*args, void*));
11502         sv_catsv_nomg(sv, argsv);
11503         return;
11504     }
11505
11506 #if !defined(USE_LONG_DOUBLE) && !defined(USE_QUADMATH)
11507     /* special-case "%.<number>[gf]" */
11508     if ( !args && patlen <= 5 && pat[0] == '%' && pat[1] == '.'
11509          && (pat[patlen-1] == 'g' || pat[patlen-1] == 'f') ) {
11510         unsigned digits = 0;
11511         const char *pp;
11512
11513         pp = pat + 2;
11514         while (*pp >= '0' && *pp <= '9')
11515             digits = 10 * digits + (*pp++ - '0');
11516
11517         /* XXX: Why do this `svix < svmax` test? Couldn't we just
11518            format the first argument and WARN_REDUNDANT if svmax > 1?
11519            Munged by Nicholas Clark in v5.13.0-209-g95ea86d */
11520         if (pp - pat == (int)patlen - 1 && svix < svmax) {
11521             const NV nv = SvNV(*svargs);
11522             if (LIKELY(!Perl_isinfnan(nv))) {
11523                 if (*pp == 'g') {
11524                     /* Add check for digits != 0 because it seems that some
11525                        gconverts are buggy in this case, and we don't yet have
11526                        a Configure test for this.  */
11527                     if (digits && digits < sizeof(ebuf) - NV_DIG - 10) {
11528                         /* 0, point, slack */
11529                         STORE_LC_NUMERIC_SET_TO_NEEDED();
11530                         SNPRINTF_G(nv, ebuf, size, digits);
11531                         sv_catpv_nomg(sv, ebuf);
11532                         if (*ebuf)      /* May return an empty string for digits==0 */
11533                             return;
11534                     }
11535                 } else if (!digits) {
11536                     STRLEN l;
11537
11538                     if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
11539                         sv_catpvn_nomg(sv, p, l);
11540                         return;
11541                     }
11542                 }
11543             }
11544         }
11545     }
11546 #endif /* !USE_LONG_DOUBLE */
11547
11548     if (!args && svix < svmax && DO_UTF8(*svargs))
11549         has_utf8 = TRUE;
11550
11551     patend = (char*)pat + patlen;
11552     for (p = (char*)pat; p < patend; p = q) {
11553         bool alt = FALSE;
11554         bool left = FALSE;
11555         bool vectorize = FALSE;
11556         bool vectorarg = FALSE;
11557         bool vec_utf8 = FALSE;
11558         char fill = ' ';
11559         char plus = 0;
11560         char intsize = 0;
11561         STRLEN width = 0;
11562         STRLEN zeros = 0;
11563         bool has_precis = FALSE;
11564         STRLEN precis = 0;
11565         const I32 osvix = svix;
11566         bool is_utf8 = FALSE;  /* is this item utf8?   */
11567         bool used_explicit_ix = FALSE;
11568         bool arg_missing = FALSE;
11569 #ifdef HAS_LDBL_SPRINTF_BUG
11570         /* This is to try to fix a bug with irix/nonstop-ux/powerux and
11571            with sfio - Allen <allens@cpan.org> */
11572         bool fix_ldbl_sprintf_bug = FALSE;
11573 #endif
11574
11575         char esignbuf[4];
11576         U8 utf8buf[UTF8_MAXBYTES+1];
11577         STRLEN esignlen = 0;
11578
11579         const char *eptr = NULL;
11580         const char *fmtstart;
11581         STRLEN elen = 0;
11582         SV *vecsv = NULL;
11583         const U8 *vecstr = NULL;
11584         STRLEN veclen = 0;
11585         char c = 0;
11586         int i;
11587         unsigned base = 0;
11588         IV iv = 0;
11589         UV uv = 0;
11590         /* We need a long double target in case HAS_LONG_DOUBLE,
11591          * even without USE_LONG_DOUBLE, so that we can printf with
11592          * long double formats, even without NV being long double.
11593          * But we call the target 'fv' instead of 'nv', since most of
11594          * the time it is not (most compilers these days recognize
11595          * "long double", even if only as a synonym for "double").
11596         */
11597 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE && \
11598         defined(PERL_PRIgldbl) && !defined(USE_QUADMATH)
11599         long double fv;
11600 #  ifdef Perl_isfinitel
11601 #    define FV_ISFINITE(x) Perl_isfinitel(x)
11602 #  endif
11603 #  define FV_GF PERL_PRIgldbl
11604 #    if defined(__VMS) && defined(__ia64) && defined(__IEEE_FLOAT)
11605        /* Work around breakage in OTS$CVT_FLOAT_T_X */
11606 #      define NV_TO_FV(nv,fv) STMT_START {                   \
11607                                            double _dv = nv;  \
11608                                            fv = Perl_isnan(_dv) ? LDBL_QNAN : _dv; \
11609                               } STMT_END
11610 #    else
11611 #      define NV_TO_FV(nv,fv) (fv)=(nv)
11612 #    endif
11613 #else
11614         NV fv;
11615 #  define FV_GF NVgf
11616 #  define NV_TO_FV(nv,fv) (fv)=(nv)
11617 #endif
11618 #ifndef FV_ISFINITE
11619 #  define FV_ISFINITE(x) Perl_isfinite((NV)(x))
11620 #endif
11621         NV nv;
11622         STRLEN have;
11623         STRLEN need;
11624         STRLEN gap;
11625         const char *dotstr = ".";
11626         STRLEN dotstrlen = 1;
11627         I32 efix = 0; /* explicit format parameter index */
11628         I32 ewix = 0; /* explicit width index */
11629         I32 epix = 0; /* explicit precision index */
11630         I32 evix = 0; /* explicit vector index */
11631         bool asterisk = FALSE;
11632         bool infnan = FALSE;
11633
11634         /* echo everything up to the next format specification */
11635         for (q = p; q < patend && *q != '%'; ++q) ;
11636         if (q > p) {
11637             if (has_utf8 && !pat_utf8)
11638                 sv_catpvn_nomg_utf8_upgrade(sv, p, q - p, nsv);
11639             else
11640                 sv_catpvn_nomg(sv, p, q - p);
11641             p = q;
11642         }
11643         if (q++ >= patend)
11644             break;
11645
11646         fmtstart = q;
11647
11648 /*
11649     We allow format specification elements in this order:
11650         \d+\$              explicit format parameter index
11651         [-+ 0#]+           flags
11652         v|\*(\d+\$)?v      vector with optional (optionally specified) arg
11653         0                  flag (as above): repeated to allow "v02"     
11654         \d+|\*(\d+\$)?     width using optional (optionally specified) arg
11655         \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
11656         [hlqLV]            size
11657     [%bcdefginopsuxDFOUX] format (mandatory)
11658 */
11659
11660         if (args) {
11661 /*  
11662         As of perl5.9.3, printf format checking is on by default.
11663         Internally, perl uses %p formats to provide an escape to
11664         some extended formatting.  This block deals with those
11665         extensions: if it does not match, (char*)q is reset and
11666         the normal format processing code is used.
11667
11668         Currently defined extensions are:
11669                 %p              include pointer address (standard)      
11670                 %-p     (SVf)   include an SV (previously %_)
11671                 %-<num>p        include an SV with precision <num>      
11672                 %2p             include a HEK
11673                 %3p             include a HEK with precision of 256
11674                 %4p             char* preceded by utf8 flag and length
11675                 %<num>p         (where num is 1 or > 4) reserved for future
11676                                 extensions
11677
11678         Robin Barker 2005-07-14 (but modified since)
11679
11680                 %1p     (VDf)   removed.  RMB 2007-10-19
11681 */
11682             char* r = q; 
11683             bool sv = FALSE;    
11684             STRLEN n = 0;
11685             if (*q == '-')
11686                 sv = *q++;
11687             else if (strnEQ(q, UTF8f, sizeof(UTF8f)-1)) { /* UTF8f */
11688                 /* The argument has already gone through cBOOL, so the cast
11689                    is safe. */
11690                 is_utf8 = (bool)va_arg(*args, int);
11691                 elen = va_arg(*args, UV);
11692                 /* if utf8 length is larger than 0x7ffff..., then it might
11693                  * have been a signed value that wrapped */
11694                 if (elen  > ((~(STRLEN)0) >> 1)) {
11695                     assert(0); /* in DEBUGGING build we want to crash */
11696                     elen= 0; /* otherwise we want to treat this as an empty string */
11697                 }
11698                 eptr = va_arg(*args, char *);
11699                 q += sizeof(UTF8f)-1;
11700                 goto string;
11701             }
11702             n = expect_number(&q);
11703             if (*q++ == 'p') {
11704                 if (sv) {                       /* SVf */
11705                     if (n) {
11706                         precis = n;
11707                         has_precis = TRUE;
11708                     }
11709                     argsv = MUTABLE_SV(va_arg(*args, void*));
11710                     eptr = SvPV_const(argsv, elen);
11711                     if (DO_UTF8(argsv))
11712                         is_utf8 = TRUE;
11713                     goto string;
11714                 }
11715                 else if (n==2 || n==3) {        /* HEKf */
11716                     HEK * const hek = va_arg(*args, HEK *);
11717                     eptr = HEK_KEY(hek);
11718                     elen = HEK_LEN(hek);
11719                     if (HEK_UTF8(hek)) is_utf8 = TRUE;
11720                     if (n==3) precis = 256, has_precis = TRUE;
11721                     goto string;
11722                 }
11723                 else if (n) {
11724                     Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
11725                                      "internal %%<num>p might conflict with future printf extensions");
11726                 }
11727             }
11728             q = r; 
11729         }
11730
11731         if ( (width = expect_number(&q)) ) {
11732             if (*q == '$') {
11733                 if (args)
11734                     Perl_croak_nocontext(
11735                         "Cannot yet reorder sv_catpvfn() arguments from va_list");
11736                 ++q;
11737                 efix = width;
11738                 used_explicit_ix = TRUE;
11739             } else {
11740                 goto gotwidth;
11741             }
11742         }
11743
11744         /* FLAGS */
11745
11746         while (*q) {
11747             switch (*q) {
11748             case ' ':
11749             case '+':
11750                 if (plus == '+' && *q == ' ') /* '+' over ' ' */
11751                     q++;
11752                 else
11753                     plus = *q++;
11754                 continue;
11755
11756             case '-':
11757                 left = TRUE;
11758                 q++;
11759                 continue;
11760
11761             case '0':
11762                 fill = *q++;
11763                 continue;
11764
11765             case '#':
11766                 alt = TRUE;
11767                 q++;
11768                 continue;
11769
11770             default:
11771                 break;
11772             }
11773             break;
11774         }
11775
11776       tryasterisk:
11777         if (*q == '*') {
11778             q++;
11779             if ( (ewix = expect_number(&q)) ) {
11780                 if (*q++ == '$') {
11781                     if (args)
11782                         Perl_croak_nocontext(
11783                             "Cannot yet reorder sv_catpvfn() arguments from va_list");
11784                     used_explicit_ix = TRUE;
11785                 } else
11786                     goto unknown;
11787             }
11788             asterisk = TRUE;
11789         }
11790         if (*q == 'v') {
11791             q++;
11792             if (vectorize)
11793                 goto unknown;
11794             if ((vectorarg = asterisk)) {
11795                 evix = ewix;
11796                 ewix = 0;
11797                 asterisk = FALSE;
11798             }
11799             vectorize = TRUE;
11800             goto tryasterisk;
11801         }
11802
11803         if (!asterisk)
11804         {
11805             if( *q == '0' )
11806                 fill = *q++;
11807             width = expect_number(&q);
11808         }
11809
11810         if (vectorize && vectorarg) {
11811             /* vectorizing, but not with the default "." */
11812             if (args)
11813                 vecsv = va_arg(*args, SV*);
11814             else if (evix) {
11815                 FETCH_VCATPVFN_ARGUMENT(
11816                     vecsv, evix > 0 && evix <= svmax, svargs[evix-1]);
11817             } else {
11818                 FETCH_VCATPVFN_ARGUMENT(
11819                     vecsv, svix < svmax, svargs[svix++]);
11820             }
11821             dotstr = SvPV_const(vecsv, dotstrlen);
11822             /* Keep the DO_UTF8 test *after* the SvPV call, else things go
11823                bad with tied or overloaded values that return UTF8.  */
11824             if (DO_UTF8(vecsv))
11825                 is_utf8 = TRUE;
11826             else if (has_utf8) {
11827                 vecsv = sv_mortalcopy(vecsv);
11828                 sv_utf8_upgrade(vecsv);
11829                 dotstr = SvPV_const(vecsv, dotstrlen);
11830                 is_utf8 = TRUE;
11831             }               
11832         }
11833
11834         if (asterisk) {
11835             if (args)
11836                 i = va_arg(*args, int);
11837             else
11838                 i = (ewix ? ewix <= svmax : svix < svmax) ?
11839                     SvIVx(svargs[ewix ? ewix-1 : svix++]) : 0;
11840             left |= (i < 0);
11841             width = (i < 0) ? -i : i;
11842         }
11843       gotwidth:
11844
11845         /* PRECISION */
11846
11847         if (*q == '.') {
11848             q++;
11849             if (*q == '*') {
11850                 q++;
11851                 if ( (epix = expect_number(&q)) ) {
11852                     if (*q++ == '$') {
11853                         if (args)
11854                             Perl_croak_nocontext(
11855                                 "Cannot yet reorder sv_catpvfn() arguments from va_list");
11856                         used_explicit_ix = TRUE;
11857                     } else
11858                         goto unknown;
11859                 }
11860                 if (args)
11861                     i = va_arg(*args, int);
11862                 else {
11863                     SV *precsv;
11864                     if (epix)
11865                         FETCH_VCATPVFN_ARGUMENT(
11866                             precsv, epix > 0 && epix <= svmax, svargs[epix-1]);
11867                     else
11868                         FETCH_VCATPVFN_ARGUMENT(
11869                             precsv, svix < svmax, svargs[svix++]);
11870                     i = precsv == &PL_sv_no ? 0 : SvIVx(precsv);
11871                 }
11872                 precis = i;
11873                 has_precis = !(i < 0);
11874             }
11875             else {
11876                 precis = 0;
11877                 while (isDIGIT(*q))
11878                     precis = precis * 10 + (*q++ - '0');
11879                 has_precis = TRUE;
11880             }
11881         }
11882
11883         if (vectorize) {
11884             if (args) {
11885                 VECTORIZE_ARGS
11886             }
11887             else if (efix ? (efix > 0 && efix <= svmax) : svix < svmax) {
11888                 vecsv = svargs[efix ? efix-1 : svix++];
11889                 vecstr = (U8*)SvPV_const(vecsv,veclen);
11890                 vec_utf8 = DO_UTF8(vecsv);
11891
11892                 /* if this is a version object, we need to convert
11893                  * back into v-string notation and then let the
11894                  * vectorize happen normally
11895                  */
11896                 if (sv_isobject(vecsv) && sv_derived_from(vecsv, "version")) {
11897                     if ( hv_existss(MUTABLE_HV(SvRV(vecsv)), "alpha") ) {
11898                         Perl_ck_warner_d(aTHX_ packWARN(WARN_PRINTF),
11899                         "vector argument not supported with alpha versions");
11900                         goto vdblank;
11901                     }
11902                     vecsv = sv_newmortal();
11903                     scan_vstring((char *)vecstr, (char *)vecstr + veclen,
11904                                  vecsv);
11905                     vecstr = (U8*)SvPV_const(vecsv, veclen);
11906                     vec_utf8 = DO_UTF8(vecsv);
11907                 }
11908             }
11909             else {
11910               vdblank:
11911                 vecstr = (U8*)"";
11912                 veclen = 0;
11913             }
11914         }
11915
11916         /* SIZE */
11917
11918         switch (*q) {
11919 #ifdef WIN32
11920         case 'I':                       /* Ix, I32x, and I64x */
11921 #  ifdef USE_64_BIT_INT
11922             if (q[1] == '6' && q[2] == '4') {
11923                 q += 3;
11924                 intsize = 'q';
11925                 break;
11926             }
11927 #  endif
11928             if (q[1] == '3' && q[2] == '2') {
11929                 q += 3;
11930                 break;
11931             }
11932 #  ifdef USE_64_BIT_INT
11933             intsize = 'q';
11934 #  endif
11935             q++;
11936             break;
11937 #endif
11938 #if (IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)) || \
11939     (IVSIZE == 4 && !defined(HAS_LONG_DOUBLE))
11940         case 'L':                       /* Ld */
11941             /* FALLTHROUGH */
11942 #  ifdef USE_QUADMATH
11943         case 'Q':
11944             /* FALLTHROUGH */
11945 #  endif
11946 #  if IVSIZE >= 8
11947         case 'q':                       /* qd */
11948 #  endif
11949             intsize = 'q';
11950             q++;
11951             break;
11952 #endif
11953         case 'l':
11954             ++q;
11955 #if (IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)) || \
11956     (IVSIZE == 4 && !defined(HAS_LONG_DOUBLE))
11957             if (*q == 'l') {    /* lld, llf */
11958                 intsize = 'q';
11959                 ++q;
11960             }
11961             else
11962 #endif
11963                 intsize = 'l';
11964             break;
11965         case 'h':
11966             if (*++q == 'h') {  /* hhd, hhu */
11967                 intsize = 'c';
11968                 ++q;
11969             }
11970             else
11971                 intsize = 'h';
11972             break;
11973         case 'V':
11974         case 'z':
11975         case 't':
11976 #ifdef I_STDINT
11977         case 'j':
11978 #endif
11979             intsize = *q++;
11980             break;
11981         }
11982
11983         /* CONVERSION */
11984
11985         if (*q == '%') {
11986             eptr = q++;
11987             elen = 1;
11988             if (vectorize) {
11989                 c = '%';
11990                 goto unknown;
11991             }
11992             goto string;
11993         }
11994
11995         if (!vectorize && !args) {
11996             if (efix) {
11997                 const I32 i = efix-1;
11998                 FETCH_VCATPVFN_ARGUMENT(argsv, i >= 0 && i < svmax, svargs[i]);
11999             } else {
12000                 FETCH_VCATPVFN_ARGUMENT(argsv, svix >= 0 && svix < svmax,
12001                                         svargs[svix++]);
12002             }
12003         }
12004
12005         if (argsv && strchr("BbcDdiOopuUXx",*q)) {
12006             /* XXX va_arg(*args) case? need peek, use va_copy? */
12007             SvGETMAGIC(argsv);
12008             if (UNLIKELY(SvAMAGIC(argsv)))
12009                 argsv = sv_2num(argsv);
12010             infnan = UNLIKELY(isinfnansv(argsv));
12011         }
12012
12013         switch (c = *q++) {
12014
12015             /* STRINGS */
12016
12017         case 'c':
12018             if (vectorize)
12019                 goto unknown;
12020             if (infnan)
12021                 Perl_croak(aTHX_ "Cannot printf %" NVgf " with '%c'",
12022                            /* no va_arg() case */
12023                            SvNV_nomg(argsv), (int)c);
12024             uv = (args) ? va_arg(*args, int) : SvIV_nomg(argsv);
12025             if ((uv > 255 ||
12026                  (!UVCHR_IS_INVARIANT(uv) && SvUTF8(sv)))
12027                 && !IN_BYTES) {
12028                 eptr = (char*)utf8buf;
12029                 elen = uvchr_to_utf8((U8*)eptr, uv) - utf8buf;
12030                 is_utf8 = TRUE;
12031             }
12032             else {
12033                 c = (char)uv;
12034                 eptr = &c;
12035                 elen = 1;
12036             }
12037             goto string;
12038
12039         case 's':
12040             if (vectorize)
12041                 goto unknown;
12042             if (args) {
12043                 eptr = va_arg(*args, char*);
12044                 if (eptr)
12045                     elen = strlen(eptr);
12046                 else {
12047                     eptr = (char *)nullstr;
12048                     elen = sizeof nullstr - 1;
12049                 }
12050             }
12051             else {
12052                 eptr = SvPV_const(argsv, elen);
12053                 if (DO_UTF8(argsv)) {
12054                     STRLEN old_precis = precis;
12055                     if (has_precis && precis < elen) {
12056                         STRLEN ulen = sv_or_pv_len_utf8(argsv, eptr, elen);
12057                         STRLEN p = precis > ulen ? ulen : precis;
12058                         precis = sv_or_pv_pos_u2b(argsv, eptr, p, 0);
12059                                                         /* sticks at end */
12060                     }
12061                     if (width) { /* fudge width (can't fudge elen) */
12062                         if (has_precis && precis < elen)
12063                             width += precis - old_precis;
12064                         else
12065                             width +=
12066                                 elen - sv_or_pv_len_utf8(argsv,eptr,elen);
12067                     }
12068                     is_utf8 = TRUE;
12069                 }
12070             }
12071
12072         string:
12073             if (has_precis && precis < elen)
12074                 elen = precis;
12075             break;
12076
12077             /* INTEGERS */
12078
12079         case 'p':
12080             if (infnan) {
12081                 goto floating_point;
12082             }
12083             if (alt || vectorize)
12084                 goto unknown;
12085             uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
12086             base = 16;
12087             goto integer;
12088
12089         case 'D':
12090 #ifdef IV_IS_QUAD
12091             intsize = 'q';
12092 #else
12093             intsize = 'l';
12094 #endif
12095             /* FALLTHROUGH */
12096         case 'd':
12097         case 'i':
12098             if (infnan) {
12099                 goto floating_point;
12100             }
12101             if (vectorize) {
12102                 STRLEN ulen;
12103                 if (!veclen)
12104                     goto donevalidconversion;
12105                 if (vec_utf8)
12106                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
12107                                         UTF8_ALLOW_ANYUV);
12108                 else {
12109                     uv = *vecstr;
12110                     ulen = 1;
12111                 }
12112                 vecstr += ulen;
12113                 veclen -= ulen;
12114                 if (plus)
12115                      esignbuf[esignlen++] = plus;
12116             }
12117             else if (args) {
12118                 switch (intsize) {
12119                 case 'c':       iv = (char)va_arg(*args, int); break;
12120                 case 'h':       iv = (short)va_arg(*args, int); break;
12121                 case 'l':       iv = va_arg(*args, long); break;
12122                 case 'V':       iv = va_arg(*args, IV); break;
12123                 case 'z':       iv = va_arg(*args, SSize_t); break;
12124 #ifdef HAS_PTRDIFF_T
12125                 case 't':       iv = va_arg(*args, ptrdiff_t); break;
12126 #endif
12127                 default:        iv = va_arg(*args, int); break;
12128 #ifdef I_STDINT
12129                 case 'j':       iv = va_arg(*args, intmax_t); break;
12130 #endif
12131                 case 'q':
12132 #if IVSIZE >= 8
12133                                 iv = va_arg(*args, Quad_t); break;
12134 #else
12135                                 goto unknown;
12136 #endif
12137                 }
12138             }
12139             else {
12140                 IV tiv = SvIV_nomg(argsv); /* work around GCC bug #13488 */
12141                 switch (intsize) {
12142                 case 'c':       iv = (char)tiv; break;
12143                 case 'h':       iv = (short)tiv; break;
12144                 case 'l':       iv = (long)tiv; break;
12145                 case 'V':
12146                 default:        iv = tiv; break;
12147                 case 'q':
12148 #if IVSIZE >= 8
12149                                 iv = (Quad_t)tiv; break;
12150 #else
12151                                 goto unknown;
12152 #endif
12153                 }
12154             }
12155             if ( !vectorize )   /* we already set uv above */
12156             {
12157                 if (iv >= 0) {
12158                     uv = iv;
12159                     if (plus)
12160                         esignbuf[esignlen++] = plus;
12161                 }
12162                 else {
12163                     uv = (iv == IV_MIN) ? (UV)iv : (UV)(-iv);
12164                     esignbuf[esignlen++] = '-';
12165                 }
12166             }
12167             base = 10;
12168             goto integer;
12169
12170         case 'U':
12171 #ifdef IV_IS_QUAD
12172             intsize = 'q';
12173 #else
12174             intsize = 'l';
12175 #endif
12176             /* FALLTHROUGH */
12177         case 'u':
12178             base = 10;
12179             goto uns_integer;
12180
12181         case 'B':
12182         case 'b':
12183             base = 2;
12184             goto uns_integer;
12185
12186         case 'O':
12187 #ifdef IV_IS_QUAD
12188             intsize = 'q';
12189 #else
12190             intsize = 'l';
12191 #endif
12192             /* FALLTHROUGH */
12193         case 'o':
12194             base = 8;
12195             goto uns_integer;
12196
12197         case 'X':
12198         case 'x':
12199             base = 16;
12200
12201         uns_integer:
12202             if (infnan) {
12203                 goto floating_point;
12204             }
12205             if (vectorize) {
12206                 STRLEN ulen;
12207         vector:
12208                 if (!veclen)
12209                     goto donevalidconversion;
12210                 if (vec_utf8)
12211                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
12212                                         UTF8_ALLOW_ANYUV);
12213                 else {
12214                     uv = *vecstr;
12215                     ulen = 1;
12216                 }
12217                 vecstr += ulen;
12218                 veclen -= ulen;
12219             }
12220             else if (args) {
12221                 switch (intsize) {
12222                 case 'c':  uv = (unsigned char)va_arg(*args, unsigned); break;
12223                 case 'h':  uv = (unsigned short)va_arg(*args, unsigned); break;
12224                 case 'l':  uv = va_arg(*args, unsigned long); break;
12225                 case 'V':  uv = va_arg(*args, UV); break;
12226                 case 'z':  uv = va_arg(*args, Size_t); break;
12227 #ifdef HAS_PTRDIFF_T
12228                 case 't':  uv = va_arg(*args, ptrdiff_t); break; /* will sign extend, but there is no uptrdiff_t, so oh well */
12229 #endif
12230 #ifdef I_STDINT
12231                 case 'j':  uv = va_arg(*args, uintmax_t); break;
12232 #endif
12233                 default:   uv = va_arg(*args, unsigned); break;
12234                 case 'q':
12235 #if IVSIZE >= 8
12236                            uv = va_arg(*args, Uquad_t); break;
12237 #else
12238                            goto unknown;
12239 #endif
12240                 }
12241             }
12242             else {
12243                 UV tuv = SvUV_nomg(argsv); /* work around GCC bug #13488 */
12244                 switch (intsize) {
12245                 case 'c':       uv = (unsigned char)tuv; break;
12246                 case 'h':       uv = (unsigned short)tuv; break;
12247                 case 'l':       uv = (unsigned long)tuv; break;
12248                 case 'V':
12249                 default:        uv = tuv; break;
12250                 case 'q':
12251 #if IVSIZE >= 8
12252                                 uv = (Uquad_t)tuv; break;
12253 #else
12254                                 goto unknown;
12255 #endif
12256                 }
12257             }
12258
12259         integer:
12260             {
12261                 char *ptr = ebuf + sizeof ebuf;
12262                 bool tempalt = uv ? alt : FALSE; /* Vectors can't change alt */
12263                 unsigned dig;
12264                 zeros = 0;
12265
12266                 switch (base) {
12267                 case 16:
12268                     p = (char *)((c == 'X') ? PL_hexdigit + 16 : PL_hexdigit);
12269                     do {
12270                         dig = uv & 15;
12271                         *--ptr = p[dig];
12272                     } while (uv >>= 4);
12273                     if (tempalt) {
12274                         esignbuf[esignlen++] = '0';
12275                         esignbuf[esignlen++] = c;  /* 'x' or 'X' */
12276                     }
12277                     break;
12278                 case 8:
12279                     do {
12280                         dig = uv & 7;
12281                         *--ptr = '0' + dig;
12282                     } while (uv >>= 3);
12283                     if (alt && *ptr != '0')
12284                         *--ptr = '0';
12285                     break;
12286                 case 2:
12287                     do {
12288                         dig = uv & 1;
12289                         *--ptr = '0' + dig;
12290                     } while (uv >>= 1);
12291                     if (tempalt) {
12292                         esignbuf[esignlen++] = '0';
12293                         esignbuf[esignlen++] = c;
12294                     }
12295                     break;
12296                 default:                /* it had better be ten or less */
12297                     do {
12298                         dig = uv % base;
12299                         *--ptr = '0' + dig;
12300                     } while (uv /= base);
12301                     break;
12302                 }
12303                 elen = (ebuf + sizeof ebuf) - ptr;
12304                 eptr = ptr;
12305                 if (has_precis) {
12306                     if (precis > elen)
12307                         zeros = precis - elen;
12308                     else if (precis == 0 && elen == 1 && *eptr == '0'
12309                              && !(base == 8 && alt)) /* "%#.0o" prints "0" */
12310                         elen = 0;
12311
12312                 /* a precision nullifies the 0 flag. */
12313                     if (fill == '0')
12314                         fill = ' ';
12315                 }
12316             }
12317             break;
12318
12319             /* FLOATING POINT */
12320
12321         floating_point:
12322
12323         case 'F':
12324             c = 'f';            /* maybe %F isn't supported here */
12325             /* FALLTHROUGH */
12326         case 'e': case 'E':
12327         case 'f':
12328         case 'g': case 'G':
12329         case 'a': case 'A':
12330             if (vectorize)
12331                 goto unknown;
12332
12333             /* This is evil, but floating point is even more evil */
12334
12335             /* for SV-style calling, we can only get NV
12336                for C-style calling, we assume %f is double;
12337                for simplicity we allow any of %Lf, %llf, %qf for long double
12338             */
12339             switch (intsize) {
12340             case 'V':
12341 #if defined(USE_LONG_DOUBLE) || defined(USE_QUADMATH)
12342                 intsize = 'q';
12343 #endif
12344                 break;
12345 /* [perl #20339] - we should accept and ignore %lf rather than die */
12346             case 'l':
12347                 /* FALLTHROUGH */
12348             default:
12349 #if defined(USE_LONG_DOUBLE) || defined(USE_QUADMATH)
12350                 intsize = args ? 0 : 'q';
12351 #endif
12352                 break;
12353             case 'q':
12354 #if defined(HAS_LONG_DOUBLE)
12355                 break;
12356 #else
12357                 /* FALLTHROUGH */
12358 #endif
12359             case 'c':
12360             case 'h':
12361             case 'z':
12362             case 't':
12363             case 'j':
12364                 goto unknown;
12365             }
12366
12367             /* Now we need (long double) if intsize == 'q', else (double). */
12368             if (args) {
12369                 /* Note: do not pull NVs off the va_list with va_arg()
12370                  * (pull doubles instead) because if you have a build
12371                  * with long doubles, you would always be pulling long
12372                  * doubles, which would badly break anyone using only
12373                  * doubles (i.e. the majority of builds). In other
12374                  * words, you cannot mix doubles and long doubles.
12375                  * The only case where you can pull off long doubles
12376                  * is when the format specifier explicitly asks so with
12377                  * e.g. "%Lg". */
12378 #ifdef USE_QUADMATH
12379                 fv = intsize == 'q' ?
12380                     va_arg(*args, NV) : va_arg(*args, double);
12381                 nv = fv;
12382 #elif LONG_DOUBLESIZE > DOUBLESIZE
12383                 if (intsize == 'q') {
12384                     fv = va_arg(*args, long double);
12385                     nv = fv;
12386                 } else {
12387                     nv = va_arg(*args, double);
12388                     NV_TO_FV(nv, fv);
12389                 }
12390 #else
12391                 nv = va_arg(*args, double);
12392                 fv = nv;
12393 #endif
12394             }
12395             else
12396             {
12397                 if (!infnan) SvGETMAGIC(argsv);
12398                 nv = SvNV_nomg(argsv);
12399                 NV_TO_FV(nv, fv);
12400             }
12401
12402             need = 0;
12403             /* frexp() (or frexpl) has some unspecified behaviour for
12404              * nan/inf/-inf, so let's avoid calling that on non-finites. */
12405             if (isALPHA_FOLD_NE(c, 'e') && FV_ISFINITE(fv)) {
12406                 i = PERL_INT_MIN;
12407                 (void)Perl_frexp((NV)fv, &i);
12408                 if (i == PERL_INT_MIN)
12409                     Perl_die(aTHX_ "panic: frexp: %" FV_GF, fv);
12410                 /* Do not set hexfp earlier since we want to printf
12411                  * Inf/NaN for Inf/NaN, not their hexfp. */
12412                 hexfp = isALPHA_FOLD_EQ(c, 'a');
12413                 if (UNLIKELY(hexfp)) {
12414                     /* This seriously overshoots in most cases, but
12415                      * better the undershooting.  Firstly, all bytes
12416                      * of the NV are not mantissa, some of them are
12417                      * exponent.  Secondly, for the reasonably common
12418                      * long doubles case, the "80-bit extended", two
12419                      * or six bytes of the NV are unused. */
12420                     need +=
12421                         (fv < 0) ? 1 : 0 + /* possible unary minus */
12422                         2 + /* "0x" */
12423                         1 + /* the very unlikely carry */
12424                         1 + /* "1" */
12425                         1 + /* "." */
12426                         2 * NVSIZE + /* 2 hexdigits for each byte */
12427                         2 + /* "p+" */
12428                         6 + /* exponent: sign, plus up to 16383 (quad fp) */
12429                         1;   /* \0 */
12430 #ifdef LONGDOUBLE_DOUBLEDOUBLE
12431                     /* However, for the "double double", we need more.
12432                      * Since each double has their own exponent, the
12433                      * doubles may float (haha) rather far from each
12434                      * other, and the number of required bits is much
12435                      * larger, up to total of DOUBLEDOUBLE_MAXBITS bits.
12436                      * See the definition of DOUBLEDOUBLE_MAXBITS.
12437                      *
12438                      * Need 2 hexdigits for each byte. */
12439                     need += (DOUBLEDOUBLE_MAXBITS/8 + 1) * 2;
12440                     /* the size for the exponent already added */
12441 #endif
12442 #ifdef USE_LOCALE_NUMERIC
12443                         STORE_LC_NUMERIC_SET_TO_NEEDED();
12444                         if (PL_numeric_radix_sv && IN_LC(LC_NUMERIC))
12445                             need += SvLEN(PL_numeric_radix_sv);
12446                         RESTORE_LC_NUMERIC();
12447 #endif
12448                 }
12449                 else if (i > 0) {
12450                     need = BIT_DIGITS(i);
12451                 } /* if i < 0, the number of digits is hard to predict. */
12452             }
12453
12454             {
12455                 STRLEN pr = has_precis ? precis : 6; /* known default */
12456                 if (need >= ((STRLEN)~0) - pr)
12457                     croak_memory_wrap();
12458                 need += pr;
12459             }
12460
12461             if (need < width)
12462                 need = width;
12463
12464 #ifdef HAS_LDBL_SPRINTF_BUG
12465             /* This is to try to fix a bug with irix/nonstop-ux/powerux and
12466                with sfio - Allen <allens@cpan.org> */
12467
12468 #  ifdef DBL_MAX
12469 #    define MY_DBL_MAX DBL_MAX
12470 #  else /* XXX guessing! HUGE_VAL may be defined as infinity, so not using */
12471 #    if DOUBLESIZE >= 8
12472 #      define MY_DBL_MAX 1.7976931348623157E+308L
12473 #    else
12474 #      define MY_DBL_MAX 3.40282347E+38L
12475 #    endif
12476 #  endif
12477
12478 #  ifdef HAS_LDBL_SPRINTF_BUG_LESS1 /* only between -1L & 1L - Allen */
12479 #    define MY_DBL_MAX_BUG 1L
12480 #  else
12481 #    define MY_DBL_MAX_BUG MY_DBL_MAX
12482 #  endif
12483
12484 #  ifdef DBL_MIN
12485 #    define MY_DBL_MIN DBL_MIN
12486 #  else  /* XXX guessing! -Allen */
12487 #    if DOUBLESIZE >= 8
12488 #      define MY_DBL_MIN 2.2250738585072014E-308L
12489 #    else
12490 #      define MY_DBL_MIN 1.17549435E-38L
12491 #    endif
12492 #  endif
12493
12494             if ((intsize == 'q') && (c == 'f') &&
12495                 ((fv < MY_DBL_MAX_BUG) && (fv > -MY_DBL_MAX_BUG)) &&
12496                 (need < DBL_DIG)) {
12497                 /* it's going to be short enough that
12498                  * long double precision is not needed */
12499
12500                 if ((fv <= 0L) && (fv >= -0L))
12501                     fix_ldbl_sprintf_bug = TRUE; /* 0 is 0 - easiest */
12502                 else {
12503                     /* would use Perl_fp_class as a double-check but not
12504                      * functional on IRIX - see perl.h comments */
12505
12506                     if ((fv >= MY_DBL_MIN) || (fv <= -MY_DBL_MIN)) {
12507                         /* It's within the range that a double can represent */
12508 #if defined(DBL_MAX) && !defined(DBL_MIN)
12509                         if ((fv >= ((long double)1/DBL_MAX)) ||
12510                             (fv <= (-(long double)1/DBL_MAX)))
12511 #endif
12512                         fix_ldbl_sprintf_bug = TRUE;
12513                     }
12514                 }
12515                 if (fix_ldbl_sprintf_bug == TRUE) {
12516                     double temp;
12517
12518                     intsize = 0;
12519                     temp = (double)fv;
12520                     fv = (NV)temp;
12521                 }
12522             }
12523
12524 #  undef MY_DBL_MAX
12525 #  undef MY_DBL_MAX_BUG
12526 #  undef MY_DBL_MIN
12527
12528 #endif /* HAS_LDBL_SPRINTF_BUG */
12529
12530             if (need >= ((STRLEN)~0) - 40)
12531                 croak_memory_wrap();
12532             need += 40; /* fudge factor */
12533             if (PL_efloatsize < need) {
12534                 Safefree(PL_efloatbuf);
12535                 PL_efloatsize = need;
12536                 Newx(PL_efloatbuf, PL_efloatsize, char);
12537                 PL_efloatbuf[0] = '\0';
12538             }
12539
12540             if ( !(width || left || plus || alt) && fill != '0'
12541                  && has_precis && intsize != 'q'        /* Shortcuts */
12542                  && LIKELY(!Perl_isinfnan((NV)fv)) ) {
12543                 /* See earlier comment about buggy Gconvert when digits,
12544                    aka precis is 0  */
12545                 if ( c == 'g' && precis ) {
12546                     STORE_LC_NUMERIC_SET_TO_NEEDED();
12547                     SNPRINTF_G(fv, PL_efloatbuf, PL_efloatsize, precis);
12548                     /* May return an empty string for digits==0 */
12549                     if (*PL_efloatbuf) {
12550                         elen = strlen(PL_efloatbuf);
12551                         goto float_converted;
12552                     }
12553                 } else if ( c == 'f' && !precis ) {
12554                     if ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
12555                         break;
12556                 }
12557             }
12558
12559             if (UNLIKELY(hexfp)) {
12560                 /* Hexadecimal floating point. */
12561                 char* p = PL_efloatbuf;
12562                 U8 vhex[VHEX_SIZE];
12563                 U8* v = vhex; /* working pointer to vhex */
12564                 U8* vend; /* pointer to one beyond last digit of vhex */
12565                 U8* vfnz = NULL; /* first non-zero */
12566                 U8* vlnz = NULL; /* last non-zero */
12567                 U8* v0 = NULL; /* first output */
12568                 const bool lower = (c == 'a');
12569                 /* At output the values of vhex (up to vend) will
12570                  * be mapped through the xdig to get the actual
12571                  * human-readable xdigits. */
12572                 const char* xdig = PL_hexdigit;
12573                 int zerotail = 0; /* how many extra zeros to append */
12574                 int exponent = 0; /* exponent of the floating point input */
12575                 bool hexradix = FALSE; /* should we output the radix */
12576                 bool subnormal = FALSE; /* IEEE 754 subnormal/denormal */
12577                 bool negative = FALSE;
12578
12579                 /* XXX: NaN, Inf -- though they are printed as "NaN" and "Inf".
12580                  *
12581                  * For example with denormals, (assuming the vanilla
12582                  * 64-bit double): the exponent is zero. 1xp-1074 is
12583                  * the smallest denormal and the smallest double, it
12584                  * could be output also as 0x0.0000000000001p-1022 to
12585                  * match its internal structure. */
12586
12587                 vend = S_hextract(aTHX_ nv, &exponent, &subnormal, vhex, NULL);
12588                 S_hextract(aTHX_ nv, &exponent, &subnormal, vhex, vend);
12589
12590 #if NVSIZE > DOUBLESIZE
12591 #  ifdef HEXTRACT_HAS_IMPLICIT_BIT
12592                 /* In this case there is an implicit bit,
12593                  * and therefore the exponent is shifted by one. */
12594                 exponent--;
12595 #  else
12596 #   ifdef NV_X86_80_BIT
12597                 if (subnormal) {
12598                     /* The subnormals of the x86-80 have a base exponent of -16382,
12599                      * (while the physical exponent bits are zero) but the frexp()
12600                      * returned the scientific-style floating exponent.  We want
12601                      * to map the last one as:
12602                      * -16831..-16384 -> -16382 (the last normal is 0x1p-16382)
12603                      * -16835..-16388 -> -16384
12604                      * since we want to keep the first hexdigit
12605                      * as one of the [8421]. */
12606                     exponent = -4 * ( (exponent + 1) / -4) - 2;
12607                 } else {
12608                     exponent -= 4;
12609                 }
12610 #   endif
12611                 /* TBD: other non-implicit-bit platforms than the x86-80. */
12612 #  endif
12613 #endif
12614
12615                 negative = fv < 0 || Perl_signbit(nv);
12616                 if (negative)
12617                     *p++ = '-';
12618                 else if (plus)
12619                     *p++ = plus;
12620                 *p++ = '0';
12621                 if (lower) {
12622                     *p++ = 'x';
12623                 }
12624                 else {
12625                     *p++ = 'X';
12626                     xdig += 16; /* Use uppercase hex. */
12627                 }
12628
12629                 /* Find the first non-zero xdigit. */
12630                 for (v = vhex; v < vend; v++) {
12631                     if (*v) {
12632                         vfnz = v;
12633                         break;
12634                     }
12635                 }
12636
12637                 if (vfnz) {
12638                     /* Find the last non-zero xdigit. */
12639                     for (v = vend - 1; v >= vhex; v--) {
12640                         if (*v) {
12641                             vlnz = v;
12642                             break;
12643                         }
12644                     }
12645
12646 #if NVSIZE == DOUBLESIZE
12647                     if (fv != 0.0)
12648                         exponent--;
12649 #endif
12650
12651                     if (subnormal) {
12652 #ifndef NV_X86_80_BIT
12653                       if (vfnz[0] > 1) {
12654                         /* IEEE 754 subnormals (but not the x86 80-bit):
12655                          * we want "normalize" the subnormal,
12656                          * so we need to right shift the hex nybbles
12657                          * so that the output of the subnormal starts
12658                          * from the first true bit.  (Another, equally
12659                          * valid, policy would be to dump the subnormal
12660                          * nybbles as-is, to display the "physical" layout.) */
12661                         int i, n;
12662                         U8 *vshr;
12663                         /* Find the ceil(log2(v[0])) of
12664                          * the top non-zero nybble. */
12665                         for (i = vfnz[0], n = 0; i > 1; i >>= 1, n++) { }
12666                         assert(n < 4);
12667                         vlnz[1] = 0;
12668                         for (vshr = vlnz; vshr >= vfnz; vshr--) {
12669                           vshr[1] |= (vshr[0] & (0xF >> (4 - n))) << (4 - n);
12670                           vshr[0] >>= n;
12671                         }
12672                         if (vlnz[1]) {
12673                           vlnz++;
12674                         }
12675                       }
12676 #endif
12677                       v0 = vfnz;
12678                     } else {
12679                       v0 = vhex;
12680                     }
12681
12682                     if (has_precis) {
12683                         U8* ve = (subnormal ? vlnz + 1 : vend);
12684                         SSize_t vn = ve - (subnormal ? vfnz : vhex);
12685                         if ((SSize_t)(precis + 1) < vn) {
12686                             bool overflow = FALSE;
12687                             if (v0[precis + 1] < 0x8) {
12688                                 /* Round down, nothing to do. */
12689                             } else if (v0[precis + 1] > 0x8) {
12690                                 /* Round up. */
12691                                 v0[precis]++;
12692                                 overflow = v0[precis] > 0xF;
12693                                 v0[precis] &= 0xF;
12694                             } else { /* v0[precis] == 0x8 */
12695                                 /* Half-point: round towards the one
12696                                  * with the even least-significant digit:
12697                                  * 08 -> 0  88 -> 8
12698                                  * 18 -> 2  98 -> a
12699                                  * 28 -> 2  a8 -> a
12700                                  * 38 -> 4  b8 -> c
12701                                  * 48 -> 4  c8 -> c
12702                                  * 58 -> 6  d8 -> e
12703                                  * 68 -> 6  e8 -> e
12704                                  * 78 -> 8  f8 -> 10 */
12705                                 if ((v0[precis] & 0x1)) {
12706                                     v0[precis]++;
12707                                 }
12708                                 overflow = v0[precis] > 0xF;
12709                                 v0[precis] &= 0xF;
12710                             }
12711
12712                             if (overflow) {
12713                                 for (v = v0 + precis - 1; v >= v0; v--) {
12714                                     (*v)++;
12715                                     overflow = *v > 0xF;
12716                                     (*v) &= 0xF;
12717                                     if (!overflow) {
12718                                         break;
12719                                     }
12720                                 }
12721                                 if (v == v0 - 1 && overflow) {
12722                                     /* If the overflow goes all the
12723                                      * way to the front, we need to
12724                                      * insert 0x1 in front, and adjust
12725                                      * the exponent. */
12726                                     Move(v0, v0 + 1, vn, char);
12727                                     *v0 = 0x1;
12728                                     exponent += 4;
12729                                 }
12730                             }
12731
12732                             /* The new effective "last non zero". */
12733                             vlnz = v0 + precis;
12734                         }
12735                         else {
12736                             zerotail =
12737                               subnormal ? precis - vn + 1 :
12738                               precis - (vlnz - vhex);
12739                         }
12740                     }
12741
12742                     v = v0;
12743                     *p++ = xdig[*v++];
12744
12745                     /* If there are non-zero xdigits, the radix
12746                      * is output after the first one. */
12747                     if (vfnz < vlnz) {
12748                       hexradix = TRUE;
12749                     }
12750                 }
12751                 else {
12752                     *p++ = '0';
12753                     exponent = 0;
12754                     zerotail = precis;
12755                 }
12756
12757                 /* The radix is always output if precis, or if alt. */
12758                 if (precis > 0 || alt) {
12759                   hexradix = TRUE;
12760                 }
12761
12762                 if (hexradix) {
12763 #ifndef USE_LOCALE_NUMERIC
12764                         *p++ = '.';
12765 #else
12766                         STORE_LC_NUMERIC_SET_TO_NEEDED();
12767                         if (PL_numeric_radix_sv && IN_LC(LC_NUMERIC)) {
12768                             STRLEN n;
12769                             const char* r = SvPV(PL_numeric_radix_sv, n);
12770                             Copy(r, p, n, char);
12771                             p += n;
12772                         }
12773                         else {
12774                             *p++ = '.';
12775                         }
12776                         RESTORE_LC_NUMERIC();
12777 #endif
12778                 }
12779
12780                 if (vlnz) {
12781                     while (v <= vlnz)
12782                         *p++ = xdig[*v++];
12783                 }
12784
12785                 if (zerotail > 0) {
12786                   while (zerotail--) {
12787                     *p++ = '0';
12788                   }
12789                 }
12790
12791                 elen = p - PL_efloatbuf;
12792                 elen += my_snprintf(p, PL_efloatsize - elen,
12793                                     "%c%+d", lower ? 'p' : 'P',
12794                                     exponent);
12795
12796                 if (elen < width) {
12797                     if (left) {
12798                         /* Pad the back with spaces. */
12799                         memset(PL_efloatbuf + elen, ' ', width - elen);
12800                     }
12801                     else if (fill == '0') {
12802                         /* Insert the zeros after the "0x" and the
12803                          * the potential sign, but before the digits,
12804                          * otherwise we end up with "0000xH.HHH...",
12805                          * when we want "0x000H.HHH..."  */
12806                         STRLEN nzero = width - elen;
12807                         char* zerox = PL_efloatbuf + 2;
12808                         STRLEN nmove = elen - 2;
12809                         if (negative || plus) {
12810                             zerox++;
12811                             nmove--;
12812                         }
12813                         Move(zerox, zerox + nzero, nmove, char);
12814                         memset(zerox, fill, nzero);
12815                     }
12816                     else {
12817                         /* Move it to the right. */
12818                         Move(PL_efloatbuf, PL_efloatbuf + width - elen,
12819                              elen, char);
12820                         /* Pad the front with spaces. */
12821                         memset(PL_efloatbuf, ' ', width - elen);
12822                     }
12823                     elen = width;
12824                 }
12825             }
12826             else {
12827                 elen = S_infnan_2pv(nv, PL_efloatbuf, PL_efloatsize, plus);
12828                 if (elen) {
12829                     /* Not affecting infnan output: precision, alt, fill. */
12830                     if (elen < width) {
12831                         if (left) {
12832                             /* Pack the back with spaces. */
12833                             memset(PL_efloatbuf + elen, ' ', width - elen);
12834                         } else {
12835                             /* Move it to the right. */
12836                             Move(PL_efloatbuf, PL_efloatbuf + width - elen,
12837                                  elen, char);
12838                             /* Pad the front with spaces. */
12839                             memset(PL_efloatbuf, ' ', width - elen);
12840                         }
12841                         elen = width;
12842                     }
12843                 }
12844             }
12845
12846             if (elen == 0) {
12847                 char *ptr = ebuf + sizeof ebuf;
12848                 *--ptr = '\0';
12849                 *--ptr = c;
12850 #if defined(USE_QUADMATH)
12851                 if (intsize == 'q') {
12852                     /* "g" -> "Qg" */
12853                     *--ptr = 'Q';
12854                 }
12855                 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
12856 #elif defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
12857                 /* Note that this is HAS_LONG_DOUBLE and PERL_PRIfldbl,
12858                  * not USE_LONG_DOUBLE and NVff.  In other words,
12859                  * this needs to work without USE_LONG_DOUBLE. */
12860                 if (intsize == 'q') {
12861                     /* Copy the one or more characters in a long double
12862                      * format before the 'base' ([efgEFG]) character to
12863                      * the format string. */
12864                     static char const ldblf[] = PERL_PRIfldbl;
12865                     char const *p = ldblf + sizeof(ldblf) - 3;
12866                     while (p >= ldblf) { *--ptr = *p--; }
12867                 }
12868 #endif
12869                 if (has_precis) {
12870                     base = precis;
12871                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
12872                     *--ptr = '.';
12873                 }
12874                 if (width) {
12875                     base = width;
12876                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
12877                 }
12878                 if (fill == '0')
12879                     *--ptr = fill;
12880                 if (left)
12881                     *--ptr = '-';
12882                 if (plus)
12883                     *--ptr = plus;
12884                 if (alt)
12885                     *--ptr = '#';
12886                 *--ptr = '%';
12887
12888                 /* No taint.  Otherwise we are in the strange situation
12889                  * where printf() taints but print($float) doesn't.
12890                  * --jhi */
12891
12892                 STORE_LC_NUMERIC_SET_TO_NEEDED();
12893
12894                 /* hopefully the above makes ptr a very constrained format
12895                  * that is safe to use, even though it's not literal */
12896                 GCC_DIAG_IGNORE(-Wformat-nonliteral);
12897 #ifdef USE_QUADMATH
12898                 {
12899                     const char* qfmt = quadmath_format_single(ptr);
12900                     if (!qfmt)
12901                         Perl_croak_nocontext("panic: quadmath invalid format \"%s\"", ptr);
12902                     elen = quadmath_snprintf(PL_efloatbuf, PL_efloatsize,
12903                                              qfmt, nv);
12904                     if ((IV)elen == -1) {
12905                         if (qfmt != ptr)
12906                             SAVEFREEPV(qfmt);
12907                         Perl_croak_nocontext("panic: quadmath_snprintf failed, format \"%s\"", qfmt);
12908                     }
12909                     if (qfmt != ptr)
12910                         Safefree(qfmt);
12911                 }
12912 #elif defined(HAS_LONG_DOUBLE)
12913                 elen = ((intsize == 'q')
12914                         ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, fv)
12915                         : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)fv));
12916 #else
12917                 elen = my_sprintf(PL_efloatbuf, ptr, fv);
12918 #endif
12919                 GCC_DIAG_RESTORE;
12920             }
12921
12922         float_converted:
12923             eptr = PL_efloatbuf;
12924             assert((IV)elen > 0); /* here zero elen is bad */
12925
12926 #ifdef USE_LOCALE_NUMERIC
12927             /* If the decimal point character in the string is UTF-8, make the
12928              * output utf8 */
12929             if (PL_numeric_radix_sv && SvUTF8(PL_numeric_radix_sv)
12930                 && instr(eptr, SvPVX_const(PL_numeric_radix_sv)))
12931             {
12932                 is_utf8 = TRUE;
12933             }
12934 #endif
12935
12936             break;
12937
12938             /* SPECIAL */
12939
12940         case 'n':
12941             if (vectorize)
12942                 goto unknown;
12943             i = SvCUR(sv) - origlen;
12944             if (args) {
12945                 switch (intsize) {
12946                 case 'c':       *(va_arg(*args, char*)) = i; break;
12947                 case 'h':       *(va_arg(*args, short*)) = i; break;
12948                 default:        *(va_arg(*args, int*)) = i; break;
12949                 case 'l':       *(va_arg(*args, long*)) = i; break;
12950                 case 'V':       *(va_arg(*args, IV*)) = i; break;
12951                 case 'z':       *(va_arg(*args, SSize_t*)) = i; break;
12952 #ifdef HAS_PTRDIFF_T
12953                 case 't':       *(va_arg(*args, ptrdiff_t*)) = i; break;
12954 #endif
12955 #ifdef I_STDINT
12956                 case 'j':       *(va_arg(*args, intmax_t*)) = i; break;
12957 #endif
12958                 case 'q':
12959 #if IVSIZE >= 8
12960                                 *(va_arg(*args, Quad_t*)) = i; break;
12961 #else
12962                                 goto unknown;
12963 #endif
12964                 }
12965             }
12966             else
12967                 sv_setuv_mg(argsv, has_utf8 ? (UV)sv_len_utf8(sv) : (UV)i);
12968             goto donevalidconversion;
12969
12970             /* UNKNOWN */
12971
12972         default:
12973       unknown:
12974             if (!args
12975                 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
12976                 && ckWARN(WARN_PRINTF))
12977             {
12978                 SV * const msg = sv_newmortal();
12979                 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
12980                           (PL_op->op_type == OP_PRTF) ? "" : "s");
12981                 if (fmtstart < patend) {
12982                     const char * const fmtend = q < patend ? q : patend;
12983                     const char * f;
12984                     sv_catpvs(msg, "\"%");
12985                     for (f = fmtstart; f < fmtend; f++) {
12986                         if (isPRINT(*f)) {
12987                             sv_catpvn_nomg(msg, f, 1);
12988                         } else {
12989                             Perl_sv_catpvf(aTHX_ msg,
12990                                            "\\%03" UVof, (UV)*f & 0xFF);
12991                         }
12992                     }
12993                     sv_catpvs(msg, "\"");
12994                 } else {
12995                     sv_catpvs(msg, "end of string");
12996                 }
12997                 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%" SVf, SVfARG(msg)); /* yes, this is reentrant */
12998             }
12999
13000             /* output mangled stuff ... */
13001             if (c == '\0')
13002                 --q;
13003             eptr = p;
13004             elen = q - p;
13005
13006             /* ... right here, because formatting flags should not apply */
13007             SvGROW(sv, SvCUR(sv) + elen + 1);
13008             p = SvEND(sv);
13009             Copy(eptr, p, elen, char);
13010             p += elen;
13011             *p = '\0';
13012             SvCUR_set(sv, p - SvPVX_const(sv));
13013             svix = osvix;
13014             continue;   /* not "break" */
13015         }
13016
13017         if (is_utf8 != has_utf8) {
13018             if (is_utf8) {
13019                 if (SvCUR(sv))
13020                     sv_utf8_upgrade(sv);
13021             }
13022             else {
13023                 const STRLEN old_elen = elen;
13024                 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
13025                 sv_utf8_upgrade(nsv);
13026                 eptr = SvPVX_const(nsv);
13027                 elen = SvCUR(nsv);
13028
13029                 if (width) { /* fudge width (can't fudge elen) */
13030                     width += elen - old_elen;
13031                 }
13032                 is_utf8 = TRUE;
13033             }
13034         }
13035
13036         /* signed value that's wrapped? */
13037         assert(elen  <= ((~(STRLEN)0) >> 1));
13038         have = esignlen + zeros + elen;
13039         if (have < zeros)
13040             croak_memory_wrap();
13041
13042         need = (have > width ? have : width);
13043         gap = need - have;
13044
13045         if (need >= (((STRLEN)~0) - SvCUR(sv) - dotstrlen - 1))
13046             croak_memory_wrap();
13047         SvGROW(sv, SvCUR(sv) + need + dotstrlen + 1);
13048         p = SvEND(sv);
13049         if (esignlen && fill == '0') {
13050             int i;
13051             for (i = 0; i < (int)esignlen; i++)
13052                 *p++ = esignbuf[i];
13053         }
13054         if (gap && !left) {
13055             memset(p, fill, gap);
13056             p += gap;
13057         }
13058         if (esignlen && fill != '0') {
13059             int i;
13060             for (i = 0; i < (int)esignlen; i++)
13061                 *p++ = esignbuf[i];
13062         }
13063         if (zeros) {
13064             int i;
13065             for (i = zeros; i; i--)
13066                 *p++ = '0';
13067         }
13068         if (elen) {
13069             Copy(eptr, p, elen, char);
13070             p += elen;
13071         }
13072         if (gap && left) {
13073             memset(p, ' ', gap);
13074             p += gap;
13075         }
13076         if (vectorize) {
13077             if (veclen) {
13078                 Copy(dotstr, p, dotstrlen, char);
13079                 p += dotstrlen;
13080             }
13081             else
13082                 vectorize = FALSE;              /* done iterating over vecstr */
13083         }
13084         if (is_utf8)
13085             has_utf8 = TRUE;
13086         if (has_utf8)
13087             SvUTF8_on(sv);
13088         *p = '\0';
13089         SvCUR_set(sv, p - SvPVX_const(sv));
13090         if (vectorize) {
13091             esignlen = 0;
13092             goto vector;
13093         }
13094
13095       donevalidconversion:
13096         if (used_explicit_ix)
13097             no_redundant_warning = TRUE;
13098         if (arg_missing)
13099             S_warn_vcatpvfn_missing_argument(aTHX);
13100     }
13101
13102     /* Now that we've consumed all our printf format arguments (svix)
13103      * do we have things left on the stack that we didn't use?
13104      */
13105     if (!no_redundant_warning && svmax >= svix + 1 && ckWARN(WARN_REDUNDANT)) {
13106         Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
13107                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
13108     }
13109
13110     SvTAINT(sv);
13111
13112     RESTORE_LC_NUMERIC();   /* Done outside loop, so don't have to save/restore
13113                                each iteration. */
13114 }
13115
13116 /* =========================================================================
13117
13118 =head1 Cloning an interpreter
13119
13120 =cut
13121
13122 All the macros and functions in this section are for the private use of
13123 the main function, perl_clone().
13124
13125 The foo_dup() functions make an exact copy of an existing foo thingy.
13126 During the course of a cloning, a hash table is used to map old addresses
13127 to new addresses.  The table is created and manipulated with the
13128 ptr_table_* functions.
13129
13130  * =========================================================================*/
13131
13132
13133 #if defined(USE_ITHREADS)
13134
13135 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
13136 #ifndef GpREFCNT_inc
13137 #  define GpREFCNT_inc(gp)      ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
13138 #endif
13139
13140
13141 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact
13142    that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
13143    If this changes, please unmerge ss_dup.
13144    Likewise, sv_dup_inc_multiple() relies on this fact.  */
13145 #define sv_dup_inc_NN(s,t)      SvREFCNT_inc_NN(sv_dup_inc(s,t))
13146 #define av_dup(s,t)     MUTABLE_AV(sv_dup((const SV *)s,t))
13147 #define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
13148 #define hv_dup(s,t)     MUTABLE_HV(sv_dup((const SV *)s,t))
13149 #define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
13150 #define cv_dup(s,t)     MUTABLE_CV(sv_dup((const SV *)s,t))
13151 #define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t))
13152 #define io_dup(s,t)     MUTABLE_IO(sv_dup((const SV *)s,t))
13153 #define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t))
13154 #define gv_dup(s,t)     MUTABLE_GV(sv_dup((const SV *)s,t))
13155 #define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t))
13156 #define SAVEPV(p)       ((p) ? savepv(p) : NULL)
13157 #define SAVEPVN(p,n)    ((p) ? savepvn(p,n) : NULL)
13158
13159 /* clone a parser */
13160
13161 yy_parser *
13162 Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
13163 {
13164     yy_parser *parser;
13165
13166     PERL_ARGS_ASSERT_PARSER_DUP;
13167
13168     if (!proto)
13169         return NULL;
13170
13171     /* look for it in the table first */
13172     parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
13173     if (parser)
13174         return parser;
13175
13176     /* create anew and remember what it is */
13177     Newxz(parser, 1, yy_parser);
13178     ptr_table_store(PL_ptr_table, proto, parser);
13179
13180     /* XXX these not yet duped */
13181     parser->old_parser = NULL;
13182     parser->stack = NULL;
13183     parser->ps = NULL;
13184     parser->stack_max1 = 0;
13185     /* XXX parser->stack->state = 0; */
13186
13187     /* XXX eventually, just Copy() most of the parser struct ? */
13188
13189     parser->lex_brackets = proto->lex_brackets;
13190     parser->lex_casemods = proto->lex_casemods;
13191     parser->lex_brackstack = savepvn(proto->lex_brackstack,
13192                     (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
13193     parser->lex_casestack = savepvn(proto->lex_casestack,
13194                     (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
13195     parser->lex_defer   = proto->lex_defer;
13196     parser->lex_dojoin  = proto->lex_dojoin;
13197     parser->lex_formbrack = proto->lex_formbrack;
13198     parser->lex_inpat   = proto->lex_inpat;
13199     parser->lex_inwhat  = proto->lex_inwhat;
13200     parser->lex_op      = proto->lex_op;
13201     parser->lex_repl    = sv_dup_inc(proto->lex_repl, param);
13202     parser->lex_starts  = proto->lex_starts;
13203     parser->lex_stuff   = sv_dup_inc(proto->lex_stuff, param);
13204     parser->multi_close = proto->multi_close;
13205     parser->multi_open  = proto->multi_open;
13206     parser->multi_start = proto->multi_start;
13207     parser->multi_end   = proto->multi_end;
13208     parser->preambled   = proto->preambled;
13209     parser->lex_super_state = proto->lex_super_state;
13210     parser->lex_sub_inwhat  = proto->lex_sub_inwhat;
13211     parser->lex_sub_op  = proto->lex_sub_op;
13212     parser->lex_sub_repl= sv_dup_inc(proto->lex_sub_repl, param);
13213     parser->linestr     = sv_dup_inc(proto->linestr, param);
13214     parser->expect      = proto->expect;
13215     parser->copline     = proto->copline;
13216     parser->last_lop_op = proto->last_lop_op;
13217     parser->lex_state   = proto->lex_state;
13218     parser->rsfp        = fp_dup(proto->rsfp, '<', param);
13219     /* rsfp_filters entries have fake IoDIRP() */
13220     parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
13221     parser->in_my       = proto->in_my;
13222     parser->in_my_stash = hv_dup(proto->in_my_stash, param);
13223     parser->error_count = proto->error_count;
13224     parser->sig_elems   = proto->sig_elems;
13225     parser->sig_optelems= proto->sig_optelems;
13226     parser->sig_slurpy  = proto->sig_slurpy;
13227     parser->recheck_utf8_validity = proto->recheck_utf8_validity;
13228     parser->linestr     = sv_dup_inc(proto->linestr, param);
13229
13230     {
13231         char * const ols = SvPVX(proto->linestr);
13232         char * const ls  = SvPVX(parser->linestr);
13233
13234         parser->bufptr      = ls + (proto->bufptr >= ols ?
13235                                     proto->bufptr -  ols : 0);
13236         parser->oldbufptr   = ls + (proto->oldbufptr >= ols ?
13237                                     proto->oldbufptr -  ols : 0);
13238         parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
13239                                     proto->oldoldbufptr -  ols : 0);
13240         parser->linestart   = ls + (proto->linestart >= ols ?
13241                                     proto->linestart -  ols : 0);
13242         parser->last_uni    = ls + (proto->last_uni >= ols ?
13243                                     proto->last_uni -  ols : 0);
13244         parser->last_lop    = ls + (proto->last_lop >= ols ?
13245                                     proto->last_lop -  ols : 0);
13246
13247         parser->bufend      = ls + SvCUR(parser->linestr);
13248     }
13249
13250     Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
13251
13252
13253     Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
13254     Copy(proto->nexttype, parser->nexttype, 5,  I32);
13255     parser->nexttoke    = proto->nexttoke;
13256
13257     /* XXX should clone saved_curcop here, but we aren't passed
13258      * proto_perl; so do it in perl_clone_using instead */
13259
13260     return parser;
13261 }
13262
13263
13264 /* duplicate a file handle */
13265
13266 PerlIO *
13267 Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
13268 {
13269     PerlIO *ret;
13270
13271     PERL_ARGS_ASSERT_FP_DUP;
13272     PERL_UNUSED_ARG(type);
13273
13274     if (!fp)
13275         return (PerlIO*)NULL;
13276
13277     /* look for it in the table first */
13278     ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
13279     if (ret)
13280         return ret;
13281
13282     /* create anew and remember what it is */
13283 #ifdef __amigaos4__
13284     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE|PERLIO_DUP_FD);
13285 #else
13286     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
13287 #endif
13288     ptr_table_store(PL_ptr_table, fp, ret);
13289     return ret;
13290 }
13291
13292 /* duplicate a directory handle */
13293
13294 DIR *
13295 Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
13296 {
13297     DIR *ret;
13298
13299 #if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
13300     DIR *pwd;
13301     const Direntry_t *dirent;
13302     char smallbuf[256]; /* XXX MAXPATHLEN, surely? */
13303     char *name = NULL;
13304     STRLEN len = 0;
13305     long pos;
13306 #endif
13307
13308     PERL_UNUSED_CONTEXT;
13309     PERL_ARGS_ASSERT_DIRP_DUP;
13310
13311     if (!dp)
13312         return (DIR*)NULL;
13313
13314     /* look for it in the table first */
13315     ret = (DIR*)ptr_table_fetch(PL_ptr_table, dp);
13316     if (ret)
13317         return ret;
13318
13319 #if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
13320
13321     PERL_UNUSED_ARG(param);
13322
13323     /* create anew */
13324
13325     /* open the current directory (so we can switch back) */
13326     if (!(pwd = PerlDir_open("."))) return (DIR *)NULL;
13327
13328     /* chdir to our dir handle and open the present working directory */
13329     if (fchdir(my_dirfd(dp)) < 0 || !(ret = PerlDir_open("."))) {
13330         PerlDir_close(pwd);
13331         return (DIR *)NULL;
13332     }
13333     /* Now we should have two dir handles pointing to the same dir. */
13334
13335     /* Be nice to the calling code and chdir back to where we were. */
13336     /* XXX If this fails, then what? */
13337     PERL_UNUSED_RESULT(fchdir(my_dirfd(pwd)));
13338
13339     /* We have no need of the pwd handle any more. */
13340     PerlDir_close(pwd);
13341
13342 #ifdef DIRNAMLEN
13343 # define d_namlen(d) (d)->d_namlen
13344 #else
13345 # define d_namlen(d) strlen((d)->d_name)
13346 #endif
13347     /* Iterate once through dp, to get the file name at the current posi-
13348        tion. Then step back. */
13349     pos = PerlDir_tell(dp);
13350     if ((dirent = PerlDir_read(dp))) {
13351         len = d_namlen(dirent);
13352         if (len > sizeof(dirent->d_name) && sizeof(dirent->d_name) > PTRSIZE) {
13353             /* If the len is somehow magically longer than the
13354              * maximum length of the directory entry, even though
13355              * we could fit it in a buffer, we could not copy it
13356              * from the dirent.  Bail out. */
13357             PerlDir_close(ret);
13358             return (DIR*)NULL;
13359         }
13360         if (len <= sizeof smallbuf) name = smallbuf;
13361         else Newx(name, len, char);
13362         Move(dirent->d_name, name, len, char);
13363     }
13364     PerlDir_seek(dp, pos);
13365
13366     /* Iterate through the new dir handle, till we find a file with the
13367        right name. */
13368     if (!dirent) /* just before the end */
13369         for(;;) {
13370             pos = PerlDir_tell(ret);
13371             if (PerlDir_read(ret)) continue; /* not there yet */
13372             PerlDir_seek(ret, pos); /* step back */
13373             break;
13374         }
13375     else {
13376         const long pos0 = PerlDir_tell(ret);
13377         for(;;) {
13378             pos = PerlDir_tell(ret);
13379             if ((dirent = PerlDir_read(ret))) {
13380                 if (len == (STRLEN)d_namlen(dirent)
13381                     && memEQ(name, dirent->d_name, len)) {
13382                     /* found it */
13383                     PerlDir_seek(ret, pos); /* step back */
13384                     break;
13385                 }
13386                 /* else we are not there yet; keep iterating */
13387             }
13388             else { /* This is not meant to happen. The best we can do is
13389                       reset the iterator to the beginning. */
13390                 PerlDir_seek(ret, pos0);
13391                 break;
13392             }
13393         }
13394     }
13395 #undef d_namlen
13396
13397     if (name && name != smallbuf)
13398         Safefree(name);
13399 #endif
13400
13401 #ifdef WIN32
13402     ret = win32_dirp_dup(dp, param);
13403 #endif
13404
13405     /* pop it in the pointer table */
13406     if (ret)
13407         ptr_table_store(PL_ptr_table, dp, ret);
13408
13409     return ret;
13410 }
13411
13412 /* duplicate a typeglob */
13413
13414 GP *
13415 Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
13416 {
13417     GP *ret;
13418
13419     PERL_ARGS_ASSERT_GP_DUP;
13420
13421     if (!gp)
13422         return (GP*)NULL;
13423     /* look for it in the table first */
13424     ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
13425     if (ret)
13426         return ret;
13427
13428     /* create anew and remember what it is */
13429     Newxz(ret, 1, GP);
13430     ptr_table_store(PL_ptr_table, gp, ret);
13431
13432     /* clone */
13433     /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
13434        on Newxz() to do this for us.  */
13435     ret->gp_sv          = sv_dup_inc(gp->gp_sv, param);
13436     ret->gp_io          = io_dup_inc(gp->gp_io, param);
13437     ret->gp_form        = cv_dup_inc(gp->gp_form, param);
13438     ret->gp_av          = av_dup_inc(gp->gp_av, param);
13439     ret->gp_hv          = hv_dup_inc(gp->gp_hv, param);
13440     ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
13441     ret->gp_cv          = cv_dup_inc(gp->gp_cv, param);
13442     ret->gp_cvgen       = gp->gp_cvgen;
13443     ret->gp_line        = gp->gp_line;
13444     ret->gp_file_hek    = hek_dup(gp->gp_file_hek, param);
13445     return ret;
13446 }
13447
13448 /* duplicate a chain of magic */
13449
13450 MAGIC *
13451 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
13452 {
13453     MAGIC *mgret = NULL;
13454     MAGIC **mgprev_p = &mgret;
13455
13456     PERL_ARGS_ASSERT_MG_DUP;
13457
13458     for (; mg; mg = mg->mg_moremagic) {
13459         MAGIC *nmg;
13460
13461         if ((param->flags & CLONEf_JOIN_IN)
13462                 && mg->mg_type == PERL_MAGIC_backref)
13463             /* when joining, we let the individual SVs add themselves to
13464              * backref as needed. */
13465             continue;
13466
13467         Newx(nmg, 1, MAGIC);
13468         *mgprev_p = nmg;
13469         mgprev_p = &(nmg->mg_moremagic);
13470
13471         /* There was a comment "XXX copy dynamic vtable?" but as we don't have
13472            dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
13473            from the original commit adding Perl_mg_dup() - revision 4538.
13474            Similarly there is the annotation "XXX random ptr?" next to the
13475            assignment to nmg->mg_ptr.  */
13476         *nmg = *mg;
13477
13478         /* FIXME for plugins
13479         if (nmg->mg_type == PERL_MAGIC_qr) {
13480             nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
13481         }
13482         else
13483         */
13484         nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
13485                           ? nmg->mg_type == PERL_MAGIC_backref
13486                                 /* The backref AV has its reference
13487                                  * count deliberately bumped by 1 */
13488                                 ? SvREFCNT_inc(av_dup_inc((const AV *)
13489                                                     nmg->mg_obj, param))
13490                                 : sv_dup_inc(nmg->mg_obj, param)
13491                           : (nmg->mg_type == PERL_MAGIC_regdatum ||
13492                              nmg->mg_type == PERL_MAGIC_regdata)
13493                                   ? nmg->mg_obj
13494                                   : sv_dup(nmg->mg_obj, param);
13495
13496         if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
13497             if (nmg->mg_len > 0) {
13498                 nmg->mg_ptr     = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
13499                 if (nmg->mg_type == PERL_MAGIC_overload_table &&
13500                         AMT_AMAGIC((AMT*)nmg->mg_ptr))
13501                 {
13502                     AMT * const namtp = (AMT*)nmg->mg_ptr;
13503                     sv_dup_inc_multiple((SV**)(namtp->table),
13504                                         (SV**)(namtp->table), NofAMmeth, param);
13505                 }
13506             }
13507             else if (nmg->mg_len == HEf_SVKEY)
13508                 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
13509         }
13510         if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
13511             nmg->mg_virtual->svt_dup(aTHX_ nmg, param);
13512         }
13513     }
13514     return mgret;
13515 }
13516
13517 #endif /* USE_ITHREADS */
13518
13519 struct ptr_tbl_arena {
13520     struct ptr_tbl_arena *next;
13521     struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers.  */
13522 };
13523
13524 /* create a new pointer-mapping table */
13525
13526 PTR_TBL_t *
13527 Perl_ptr_table_new(pTHX)
13528 {
13529     PTR_TBL_t *tbl;
13530     PERL_UNUSED_CONTEXT;
13531
13532     Newx(tbl, 1, PTR_TBL_t);
13533     tbl->tbl_max        = 511;
13534     tbl->tbl_items      = 0;
13535     tbl->tbl_arena      = NULL;
13536     tbl->tbl_arena_next = NULL;
13537     tbl->tbl_arena_end  = NULL;
13538     Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
13539     return tbl;
13540 }
13541
13542 #define PTR_TABLE_HASH(ptr) \
13543   ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
13544
13545 /* map an existing pointer using a table */
13546
13547 STATIC PTR_TBL_ENT_t *
13548 S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
13549 {
13550     PTR_TBL_ENT_t *tblent;
13551     const UV hash = PTR_TABLE_HASH(sv);
13552
13553     PERL_ARGS_ASSERT_PTR_TABLE_FIND;
13554
13555     tblent = tbl->tbl_ary[hash & tbl->tbl_max];
13556     for (; tblent; tblent = tblent->next) {
13557         if (tblent->oldval == sv)
13558             return tblent;
13559     }
13560     return NULL;
13561 }
13562
13563 void *
13564 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
13565 {
13566     PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
13567
13568     PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
13569     PERL_UNUSED_CONTEXT;
13570
13571     return tblent ? tblent->newval : NULL;
13572 }
13573
13574 /* add a new entry to a pointer-mapping table 'tbl'.  In hash terms, 'oldsv' is
13575  * the key; 'newsv' is the value.  The names "old" and "new" are specific to
13576  * the core's typical use of ptr_tables in thread cloning. */
13577
13578 void
13579 Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
13580 {
13581     PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
13582
13583     PERL_ARGS_ASSERT_PTR_TABLE_STORE;
13584     PERL_UNUSED_CONTEXT;
13585
13586     if (tblent) {
13587         tblent->newval = newsv;
13588     } else {
13589         const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
13590
13591         if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
13592             struct ptr_tbl_arena *new_arena;
13593
13594             Newx(new_arena, 1, struct ptr_tbl_arena);
13595             new_arena->next = tbl->tbl_arena;
13596             tbl->tbl_arena = new_arena;
13597             tbl->tbl_arena_next = new_arena->array;
13598             tbl->tbl_arena_end = C_ARRAY_END(new_arena->array);
13599         }
13600
13601         tblent = tbl->tbl_arena_next++;
13602
13603         tblent->oldval = oldsv;
13604         tblent->newval = newsv;
13605         tblent->next = tbl->tbl_ary[entry];
13606         tbl->tbl_ary[entry] = tblent;
13607         tbl->tbl_items++;
13608         if (tblent->next && tbl->tbl_items > tbl->tbl_max)
13609             ptr_table_split(tbl);
13610     }
13611 }
13612
13613 /* double the hash bucket size of an existing ptr table */
13614
13615 void
13616 Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
13617 {
13618     PTR_TBL_ENT_t **ary = tbl->tbl_ary;
13619     const UV oldsize = tbl->tbl_max + 1;
13620     UV newsize = oldsize * 2;
13621     UV i;
13622
13623     PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
13624     PERL_UNUSED_CONTEXT;
13625
13626     Renew(ary, newsize, PTR_TBL_ENT_t*);
13627     Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
13628     tbl->tbl_max = --newsize;
13629     tbl->tbl_ary = ary;
13630     for (i=0; i < oldsize; i++, ary++) {
13631         PTR_TBL_ENT_t **entp = ary;
13632         PTR_TBL_ENT_t *ent = *ary;
13633         PTR_TBL_ENT_t **curentp;
13634         if (!ent)
13635             continue;
13636         curentp = ary + oldsize;
13637         do {
13638             if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
13639                 *entp = ent->next;
13640                 ent->next = *curentp;
13641                 *curentp = ent;
13642             }
13643             else
13644                 entp = &ent->next;
13645             ent = *entp;
13646         } while (ent);
13647     }
13648 }
13649
13650 /* remove all the entries from a ptr table */
13651 /* Deprecated - will be removed post 5.14 */
13652
13653 void
13654 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
13655 {
13656     PERL_UNUSED_CONTEXT;
13657     if (tbl && tbl->tbl_items) {
13658         struct ptr_tbl_arena *arena = tbl->tbl_arena;
13659
13660         Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent *);
13661
13662         while (arena) {
13663             struct ptr_tbl_arena *next = arena->next;
13664
13665             Safefree(arena);
13666             arena = next;
13667         };
13668
13669         tbl->tbl_items = 0;
13670         tbl->tbl_arena = NULL;
13671         tbl->tbl_arena_next = NULL;
13672         tbl->tbl_arena_end = NULL;
13673     }
13674 }
13675
13676 /* clear and free a ptr table */
13677
13678 void
13679 Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
13680 {
13681     struct ptr_tbl_arena *arena;
13682
13683     PERL_UNUSED_CONTEXT;
13684
13685     if (!tbl) {
13686         return;
13687     }
13688
13689     arena = tbl->tbl_arena;
13690
13691     while (arena) {
13692         struct ptr_tbl_arena *next = arena->next;
13693
13694         Safefree(arena);
13695         arena = next;
13696     }
13697
13698     Safefree(tbl->tbl_ary);
13699     Safefree(tbl);
13700 }
13701
13702 #if defined(USE_ITHREADS)
13703
13704 void
13705 Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
13706 {
13707     PERL_ARGS_ASSERT_RVPV_DUP;
13708
13709     assert(!isREGEXP(sstr));
13710     if (SvROK(sstr)) {
13711         if (SvWEAKREF(sstr)) {
13712             SvRV_set(dstr, sv_dup(SvRV_const(sstr), param));
13713             if (param->flags & CLONEf_JOIN_IN) {
13714                 /* if joining, we add any back references individually rather
13715                  * than copying the whole backref array */
13716                 Perl_sv_add_backref(aTHX_ SvRV(dstr), dstr);
13717             }
13718         }
13719         else
13720             SvRV_set(dstr, sv_dup_inc(SvRV_const(sstr), param));
13721     }
13722     else if (SvPVX_const(sstr)) {
13723         /* Has something there */
13724         if (SvLEN(sstr)) {
13725             /* Normal PV - clone whole allocated space */
13726             SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
13727             /* sstr may not be that normal, but actually copy on write.
13728                But we are a true, independent SV, so:  */
13729             SvIsCOW_off(dstr);
13730         }
13731         else {
13732             /* Special case - not normally malloced for some reason */
13733             if (isGV_with_GP(sstr)) {
13734                 /* Don't need to do anything here.  */
13735             }
13736             else if ((SvIsCOW(sstr))) {
13737                 /* A "shared" PV - clone it as "shared" PV */
13738                 SvPV_set(dstr,
13739                          HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
13740                                          param)));
13741             }
13742             else {
13743                 /* Some other special case - random pointer */
13744                 SvPV_set(dstr, (char *) SvPVX_const(sstr));             
13745             }
13746         }
13747     }
13748     else {
13749         /* Copy the NULL */
13750         SvPV_set(dstr, NULL);
13751     }
13752 }
13753
13754 /* duplicate a list of SVs. source and dest may point to the same memory.  */
13755 static SV **
13756 S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
13757                       SSize_t items, CLONE_PARAMS *const param)
13758 {
13759     PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
13760
13761     while (items-- > 0) {
13762         *dest++ = sv_dup_inc(*source++, param);
13763     }
13764
13765     return dest;
13766 }
13767
13768 /* duplicate an SV of any type (including AV, HV etc) */
13769
13770 static SV *
13771 S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
13772 {
13773     dVAR;
13774     SV *dstr;
13775
13776     PERL_ARGS_ASSERT_SV_DUP_COMMON;
13777
13778     if (SvTYPE(sstr) == (svtype)SVTYPEMASK) {
13779 #ifdef DEBUG_LEAKING_SCALARS_ABORT
13780         abort();
13781 #endif
13782         return NULL;
13783     }
13784     /* look for it in the table first */
13785     dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
13786     if (dstr)
13787         return dstr;
13788
13789     if(param->flags & CLONEf_JOIN_IN) {
13790         /** We are joining here so we don't want do clone
13791             something that is bad **/
13792         if (SvTYPE(sstr) == SVt_PVHV) {
13793             const HEK * const hvname = HvNAME_HEK(sstr);
13794             if (hvname) {
13795                 /** don't clone stashes if they already exist **/
13796                 dstr = MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
13797                                                 HEK_UTF8(hvname) ? SVf_UTF8 : 0));
13798                 ptr_table_store(PL_ptr_table, sstr, dstr);
13799                 return dstr;
13800             }
13801         }
13802         else if (SvTYPE(sstr) == SVt_PVGV && !SvFAKE(sstr)) {
13803             HV *stash = GvSTASH(sstr);
13804             const HEK * hvname;
13805             if (stash && (hvname = HvNAME_HEK(stash))) {
13806                 /** don't clone GVs if they already exist **/
13807                 SV **svp;
13808                 stash = gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
13809                                     HEK_UTF8(hvname) ? SVf_UTF8 : 0);
13810                 svp = hv_fetch(
13811                         stash, GvNAME(sstr),
13812                         GvNAMEUTF8(sstr)
13813                             ? -GvNAMELEN(sstr)
13814                             :  GvNAMELEN(sstr),
13815                         0
13816                       );
13817                 if (svp && *svp && SvTYPE(*svp) == SVt_PVGV) {
13818                     ptr_table_store(PL_ptr_table, sstr, *svp);
13819                     return *svp;
13820                 }
13821             }
13822         }
13823     }
13824
13825     /* create anew and remember what it is */
13826     new_SV(dstr);
13827
13828 #ifdef DEBUG_LEAKING_SCALARS
13829     dstr->sv_debug_optype = sstr->sv_debug_optype;
13830     dstr->sv_debug_line = sstr->sv_debug_line;
13831     dstr->sv_debug_inpad = sstr->sv_debug_inpad;
13832     dstr->sv_debug_parent = (SV*)sstr;
13833     FREE_SV_DEBUG_FILE(dstr);
13834     dstr->sv_debug_file = savesharedpv(sstr->sv_debug_file);
13835 #endif
13836
13837     ptr_table_store(PL_ptr_table, sstr, dstr);
13838
13839     /* clone */
13840     SvFLAGS(dstr)       = SvFLAGS(sstr);
13841     SvFLAGS(dstr)       &= ~SVf_OOK;            /* don't propagate OOK hack */
13842     SvREFCNT(dstr)      = 0;                    /* must be before any other dups! */
13843
13844 #ifdef DEBUGGING
13845     if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
13846         PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
13847                       (void*)PL_watch_pvx, SvPVX_const(sstr));
13848 #endif
13849
13850     /* don't clone objects whose class has asked us not to */
13851     if (SvOBJECT(sstr)
13852      && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE))
13853     {
13854         SvFLAGS(dstr) = 0;
13855         return dstr;
13856     }
13857
13858     switch (SvTYPE(sstr)) {
13859     case SVt_NULL:
13860         SvANY(dstr)     = NULL;
13861         break;
13862     case SVt_IV:
13863         SET_SVANY_FOR_BODYLESS_IV(dstr);
13864         if(SvROK(sstr)) {
13865             Perl_rvpv_dup(aTHX_ dstr, sstr, param);
13866         } else {
13867             SvIV_set(dstr, SvIVX(sstr));
13868         }
13869         break;
13870     case SVt_NV:
13871 #if NVSIZE <= IVSIZE
13872         SET_SVANY_FOR_BODYLESS_NV(dstr);
13873 #else
13874         SvANY(dstr)     = new_XNV();
13875 #endif
13876         SvNV_set(dstr, SvNVX(sstr));
13877         break;
13878     default:
13879         {
13880             /* These are all the types that need complex bodies allocating.  */
13881             void *new_body;
13882             const svtype sv_type = SvTYPE(sstr);
13883             const struct body_details *const sv_type_details
13884                 = bodies_by_type + sv_type;
13885
13886             switch (sv_type) {
13887             default:
13888                 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
13889                 NOT_REACHED; /* NOTREACHED */
13890                 break;
13891
13892             case SVt_PVGV:
13893             case SVt_PVIO:
13894             case SVt_PVFM:
13895             case SVt_PVHV:
13896             case SVt_PVAV:
13897             case SVt_PVCV:
13898             case SVt_PVLV:
13899             case SVt_REGEXP:
13900             case SVt_PVMG:
13901             case SVt_PVNV:
13902             case SVt_PVIV:
13903             case SVt_INVLIST:
13904             case SVt_PV:
13905                 assert(sv_type_details->body_size);
13906                 if (sv_type_details->arena) {
13907                     new_body_inline(new_body, sv_type);
13908                     new_body
13909                         = (void*)((char*)new_body - sv_type_details->offset);
13910                 } else {
13911                     new_body = new_NOARENA(sv_type_details);
13912                 }
13913             }
13914             assert(new_body);
13915             SvANY(dstr) = new_body;
13916
13917 #ifndef PURIFY
13918             Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
13919                  ((char*)SvANY(dstr)) + sv_type_details->offset,
13920                  sv_type_details->copy, char);
13921 #else
13922             Copy(((char*)SvANY(sstr)),
13923                  ((char*)SvANY(dstr)),
13924                  sv_type_details->body_size + sv_type_details->offset, char);
13925 #endif
13926
13927             if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
13928                 && !isGV_with_GP(dstr)
13929                 && !isREGEXP(dstr)
13930                 && !(sv_type == SVt_PVIO && !(IoFLAGS(dstr) & IOf_FAKE_DIRP)))
13931                 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
13932
13933             /* The Copy above means that all the source (unduplicated) pointers
13934                are now in the destination.  We can check the flags and the
13935                pointers in either, but it's possible that there's less cache
13936                missing by always going for the destination.
13937                FIXME - instrument and check that assumption  */
13938             if (sv_type >= SVt_PVMG) {
13939                 if (SvMAGIC(dstr))
13940                     SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
13941                 if (SvOBJECT(dstr) && SvSTASH(dstr))
13942                     SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
13943                 else SvSTASH_set(dstr, 0); /* don't copy DESTROY cache */
13944             }
13945
13946             /* The cast silences a GCC warning about unhandled types.  */
13947             switch ((int)sv_type) {
13948             case SVt_PV:
13949                 break;
13950             case SVt_PVIV:
13951                 break;
13952             case SVt_PVNV:
13953                 break;
13954             case SVt_PVMG:
13955                 break;
13956             case SVt_REGEXP:
13957               duprex:
13958                 /* FIXME for plugins */
13959                 dstr->sv_u.svu_rx = ((REGEXP *)dstr)->sv_any;
13960                 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
13961                 break;
13962             case SVt_PVLV:
13963                 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
13964                 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
13965                     LvTARG(dstr) = dstr;
13966                 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
13967                     LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
13968                 else
13969                     LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
13970                 if (isREGEXP(sstr)) goto duprex;
13971             case SVt_PVGV:
13972                 /* non-GP case already handled above */
13973                 if(isGV_with_GP(sstr)) {
13974                     GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
13975                     /* Don't call sv_add_backref here as it's going to be
13976                        created as part of the magic cloning of the symbol
13977                        table--unless this is during a join and the stash
13978                        is not actually being cloned.  */
13979                     /* Danger Will Robinson - GvGP(dstr) isn't initialised
13980                        at the point of this comment.  */
13981                     GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
13982                     if (param->flags & CLONEf_JOIN_IN)
13983                         Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
13984                     GvGP_set(dstr, gp_dup(GvGP(sstr), param));
13985                     (void)GpREFCNT_inc(GvGP(dstr));
13986                 }
13987                 break;
13988             case SVt_PVIO:
13989                 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
13990                 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
13991                     /* I have no idea why fake dirp (rsfps)
13992                        should be treated differently but otherwise
13993                        we end up with leaks -- sky*/
13994                     IoTOP_GV(dstr)      = gv_dup_inc(IoTOP_GV(dstr), param);
13995                     IoFMT_GV(dstr)      = gv_dup_inc(IoFMT_GV(dstr), param);
13996                     IoBOTTOM_GV(dstr)   = gv_dup_inc(IoBOTTOM_GV(dstr), param);
13997                 } else {
13998                     IoTOP_GV(dstr)      = gv_dup(IoTOP_GV(dstr), param);
13999                     IoFMT_GV(dstr)      = gv_dup(IoFMT_GV(dstr), param);
14000                     IoBOTTOM_GV(dstr)   = gv_dup(IoBOTTOM_GV(dstr), param);
14001                     if (IoDIRP(dstr)) {
14002                         IoDIRP(dstr)    = dirp_dup(IoDIRP(dstr), param);
14003                     } else {
14004                         NOOP;
14005                         /* IoDIRP(dstr) is already a copy of IoDIRP(sstr)  */
14006                     }
14007                     IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(dstr), param);
14008                 }
14009                 if (IoOFP(dstr) == IoIFP(sstr))
14010                     IoOFP(dstr) = IoIFP(dstr);
14011                 else
14012                     IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
14013                 IoTOP_NAME(dstr)        = SAVEPV(IoTOP_NAME(dstr));
14014                 IoFMT_NAME(dstr)        = SAVEPV(IoFMT_NAME(dstr));
14015                 IoBOTTOM_NAME(dstr)     = SAVEPV(IoBOTTOM_NAME(dstr));
14016                 break;
14017             case SVt_PVAV:
14018                 /* avoid cloning an empty array */
14019                 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
14020                     SV **dst_ary, **src_ary;
14021                     SSize_t items = AvFILLp((const AV *)sstr) + 1;
14022
14023                     src_ary = AvARRAY((const AV *)sstr);
14024                     Newxz(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
14025                     ptr_table_store(PL_ptr_table, src_ary, dst_ary);
14026                     AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
14027                     AvALLOC((const AV *)dstr) = dst_ary;
14028                     if (AvREAL((const AV *)sstr)) {
14029                         dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
14030                                                       param);
14031                     }
14032                     else {
14033                         while (items-- > 0)
14034                             *dst_ary++ = sv_dup(*src_ary++, param);
14035                     }
14036                     items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
14037                     while (items-- > 0) {
14038                         *dst_ary++ = NULL;
14039                     }
14040                 }
14041                 else {
14042                     AvARRAY(MUTABLE_AV(dstr))   = NULL;
14043                     AvALLOC((const AV *)dstr)   = (SV**)NULL;
14044                     AvMAX(  (const AV *)dstr)   = -1;
14045                     AvFILLp((const AV *)dstr)   = -1;
14046                 }
14047                 break;
14048             case SVt_PVHV:
14049                 if (HvARRAY((const HV *)sstr)) {
14050                     STRLEN i = 0;
14051                     const bool sharekeys = !!HvSHAREKEYS(sstr);
14052                     XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
14053                     XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
14054                     char *darray;
14055                     Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
14056                         + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
14057                         char);
14058                     HvARRAY(dstr) = (HE**)darray;
14059                     while (i <= sxhv->xhv_max) {
14060                         const HE * const source = HvARRAY(sstr)[i];
14061                         HvARRAY(dstr)[i] = source
14062                             ? he_dup(source, sharekeys, param) : 0;
14063                         ++i;
14064                     }
14065                     if (SvOOK(sstr)) {
14066                         const struct xpvhv_aux * const saux = HvAUX(sstr);
14067                         struct xpvhv_aux * const daux = HvAUX(dstr);
14068                         /* This flag isn't copied.  */
14069                         SvOOK_on(dstr);
14070
14071                         if (saux->xhv_name_count) {
14072                             HEK ** const sname = saux->xhv_name_u.xhvnameu_names;
14073                             const I32 count
14074                              = saux->xhv_name_count < 0
14075                                 ? -saux->xhv_name_count
14076                                 :  saux->xhv_name_count;
14077                             HEK **shekp = sname + count;
14078                             HEK **dhekp;
14079                             Newx(daux->xhv_name_u.xhvnameu_names, count, HEK *);
14080                             dhekp = daux->xhv_name_u.xhvnameu_names + count;
14081                             while (shekp-- > sname) {
14082                                 dhekp--;
14083                                 *dhekp = hek_dup(*shekp, param);
14084                             }
14085                         }
14086                         else {
14087                             daux->xhv_name_u.xhvnameu_name
14088                                 = hek_dup(saux->xhv_name_u.xhvnameu_name,
14089                                           param);
14090                         }
14091                         daux->xhv_name_count = saux->xhv_name_count;
14092
14093                         daux->xhv_aux_flags = saux->xhv_aux_flags;
14094 #ifdef PERL_HASH_RANDOMIZE_KEYS
14095                         daux->xhv_rand = saux->xhv_rand;
14096                         daux->xhv_last_rand = saux->xhv_last_rand;
14097 #endif
14098                         daux->xhv_riter = saux->xhv_riter;
14099                         daux->xhv_eiter = saux->xhv_eiter
14100                             ? he_dup(saux->xhv_eiter,
14101                                         cBOOL(HvSHAREKEYS(sstr)), param) : 0;
14102                         /* backref array needs refcnt=2; see sv_add_backref */
14103                         daux->xhv_backreferences =
14104                             (param->flags & CLONEf_JOIN_IN)
14105                                 /* when joining, we let the individual GVs and
14106                                  * CVs add themselves to backref as
14107                                  * needed. This avoids pulling in stuff
14108                                  * that isn't required, and simplifies the
14109                                  * case where stashes aren't cloned back
14110                                  * if they already exist in the parent
14111                                  * thread */
14112                             ? NULL
14113                             : saux->xhv_backreferences
14114                                 ? (SvTYPE(saux->xhv_backreferences) == SVt_PVAV)
14115                                     ? MUTABLE_AV(SvREFCNT_inc(
14116                                           sv_dup_inc((const SV *)
14117                                             saux->xhv_backreferences, param)))
14118                                     : MUTABLE_AV(sv_dup((const SV *)
14119                                             saux->xhv_backreferences, param))
14120                                 : 0;
14121
14122                         daux->xhv_mro_meta = saux->xhv_mro_meta
14123                             ? mro_meta_dup(saux->xhv_mro_meta, param)
14124                             : 0;
14125
14126                         /* Record stashes for possible cloning in Perl_clone(). */
14127                         if (HvNAME(sstr))
14128                             av_push(param->stashes, dstr);
14129                     }
14130                 }
14131                 else
14132                     HvARRAY(MUTABLE_HV(dstr)) = NULL;
14133                 break;
14134             case SVt_PVCV:
14135                 if (!(param->flags & CLONEf_COPY_STACKS)) {
14136                     CvDEPTH(dstr) = 0;
14137                 }
14138                 /* FALLTHROUGH */
14139             case SVt_PVFM:
14140                 /* NOTE: not refcounted */
14141                 SvANY(MUTABLE_CV(dstr))->xcv_stash =
14142                     hv_dup(CvSTASH(dstr), param);
14143                 if ((param->flags & CLONEf_JOIN_IN) && CvSTASH(dstr))
14144                     Perl_sv_add_backref(aTHX_ MUTABLE_SV(CvSTASH(dstr)), dstr);
14145                 if (!CvISXSUB(dstr)) {
14146                     OP_REFCNT_LOCK;
14147                     CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
14148                     OP_REFCNT_UNLOCK;
14149                     CvSLABBED_off(dstr);
14150                 } else if (CvCONST(dstr)) {
14151                     CvXSUBANY(dstr).any_ptr =
14152                         sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
14153                 }
14154                 assert(!CvSLABBED(dstr));
14155                 if (CvDYNFILE(dstr)) CvFILE(dstr) = SAVEPV(CvFILE(dstr));
14156                 if (CvNAMED(dstr))
14157                     SvANY((CV *)dstr)->xcv_gv_u.xcv_hek =
14158                         hek_dup(CvNAME_HEK((CV *)sstr), param);
14159                 /* don't dup if copying back - CvGV isn't refcounted, so the
14160                  * duped GV may never be freed. A bit of a hack! DAPM */
14161                 else
14162                   SvANY(MUTABLE_CV(dstr))->xcv_gv_u.xcv_gv =
14163                     CvCVGV_RC(dstr)
14164                     ? gv_dup_inc(CvGV(sstr), param)
14165                     : (param->flags & CLONEf_JOIN_IN)
14166                         ? NULL
14167                         : gv_dup(CvGV(sstr), param);
14168
14169                 if (!CvISXSUB(sstr)) {
14170                     PADLIST * padlist = CvPADLIST(sstr);
14171                     if(padlist)
14172                         padlist = padlist_dup(padlist, param);
14173                     CvPADLIST_set(dstr, padlist);
14174                 } else
14175 /* unthreaded perl can't sv_dup so we dont support unthreaded's CvHSCXT */
14176                     PoisonPADLIST(dstr);
14177
14178                 CvOUTSIDE(dstr) =
14179                     CvWEAKOUTSIDE(sstr)
14180                     ? cv_dup(    CvOUTSIDE(dstr), param)
14181                     : cv_dup_inc(CvOUTSIDE(dstr), param);
14182                 break;
14183             }
14184         }
14185     }
14186
14187     return dstr;
14188  }
14189
14190 SV *
14191 Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
14192 {
14193     PERL_ARGS_ASSERT_SV_DUP_INC;
14194     return sstr ? SvREFCNT_inc(sv_dup_common(sstr, param)) : NULL;
14195 }
14196
14197 SV *
14198 Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
14199 {
14200     SV *dstr = sstr ? sv_dup_common(sstr, param) : NULL;
14201     PERL_ARGS_ASSERT_SV_DUP;
14202
14203     /* Track every SV that (at least initially) had a reference count of 0.
14204        We need to do this by holding an actual reference to it in this array.
14205        If we attempt to cheat, turn AvREAL_off(), and store only pointers
14206        (akin to the stashes hash, and the perl stack), we come unstuck if
14207        a weak reference (or other SV legitimately SvREFCNT() == 0 for this
14208        thread) is manipulated in a CLONE method, because CLONE runs before the
14209        unreferenced array is walked to find SVs still with SvREFCNT() == 0
14210        (and fix things up by giving each a reference via the temps stack).
14211        Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and
14212        then SvREFCNT_dec(), it will be cleaned up (and added to the free list)
14213        before the walk of unreferenced happens and a reference to that is SV
14214        added to the temps stack. At which point we have the same SV considered
14215        to be in use, and free to be re-used. Not good.
14216     */
14217     if (dstr && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dstr)) {
14218         assert(param->unreferenced);
14219         av_push(param->unreferenced, SvREFCNT_inc(dstr));
14220     }
14221
14222     return dstr;
14223 }
14224
14225 /* duplicate a context */
14226
14227 PERL_CONTEXT *
14228 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
14229 {
14230     PERL_CONTEXT *ncxs;
14231
14232     PERL_ARGS_ASSERT_CX_DUP;
14233
14234     if (!cxs)
14235         return (PERL_CONTEXT*)NULL;
14236
14237     /* look for it in the table first */
14238     ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
14239     if (ncxs)
14240         return ncxs;
14241
14242     /* create anew and remember what it is */
14243     Newx(ncxs, max + 1, PERL_CONTEXT);
14244     ptr_table_store(PL_ptr_table, cxs, ncxs);
14245     Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
14246
14247     while (ix >= 0) {
14248         PERL_CONTEXT * const ncx = &ncxs[ix];
14249         if (CxTYPE(ncx) == CXt_SUBST) {
14250             Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
14251         }
14252         else {
14253             ncx->blk_oldcop = (COP*)any_dup(ncx->blk_oldcop, param->proto_perl);
14254             switch (CxTYPE(ncx)) {
14255             case CXt_SUB:
14256                 ncx->blk_sub.cv         = cv_dup_inc(ncx->blk_sub.cv, param);
14257                 if(CxHASARGS(ncx)){
14258                     ncx->blk_sub.savearray = av_dup_inc(ncx->blk_sub.savearray,param);
14259                 } else {
14260                     ncx->blk_sub.savearray = NULL;
14261                 }
14262                 ncx->blk_sub.prevcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
14263                                            ncx->blk_sub.prevcomppad);
14264                 break;
14265             case CXt_EVAL:
14266                 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
14267                                                       param);
14268                 /* XXX should this sv_dup_inc? Or only if CxEVAL_TXT_REFCNTED ???? */
14269                 ncx->blk_eval.cur_text  = sv_dup(ncx->blk_eval.cur_text, param);
14270                 ncx->blk_eval.cv = cv_dup(ncx->blk_eval.cv, param);
14271                 /* XXX what do do with cur_top_env ???? */
14272                 break;
14273             case CXt_LOOP_LAZYSV:
14274                 ncx->blk_loop.state_u.lazysv.end
14275                     = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
14276                 /* Fallthrough: duplicate lazysv.cur by using the ary.ary
14277                    duplication code instead.
14278                    We are taking advantage of (1) av_dup_inc and sv_dup_inc
14279                    actually being the same function, and (2) order
14280                    equivalence of the two unions.
14281                    We can assert the later [but only at run time :-(]  */
14282                 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
14283                         (void *) &ncx->blk_loop.state_u.lazysv.cur);
14284                 /* FALLTHROUGH */
14285             case CXt_LOOP_ARY:
14286                 ncx->blk_loop.state_u.ary.ary
14287                     = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
14288                 /* FALLTHROUGH */
14289             case CXt_LOOP_LIST:
14290             case CXt_LOOP_LAZYIV:
14291                 /* code common to all 'for' CXt_LOOP_* types */
14292                 ncx->blk_loop.itersave =
14293                                     sv_dup_inc(ncx->blk_loop.itersave, param);
14294                 if (CxPADLOOP(ncx)) {
14295                     PADOFFSET off = ncx->blk_loop.itervar_u.svp
14296                                     - &CX_CURPAD_SV(ncx->blk_loop, 0);
14297                     ncx->blk_loop.oldcomppad =
14298                                     (PAD*)ptr_table_fetch(PL_ptr_table,
14299                                                 ncx->blk_loop.oldcomppad);
14300                     ncx->blk_loop.itervar_u.svp =
14301                                     &CX_CURPAD_SV(ncx->blk_loop, off);
14302                 }
14303                 else {
14304                     /* this copies the GV if CXp_FOR_GV, or the SV for an
14305                      * alias (for \$x (...)) - relies on gv_dup being the
14306                      * same as sv_dup */
14307                     ncx->blk_loop.itervar_u.gv
14308                         = gv_dup((const GV *)ncx->blk_loop.itervar_u.gv,
14309                                     param);
14310                 }
14311                 break;
14312             case CXt_LOOP_PLAIN:
14313                 break;
14314             case CXt_FORMAT:
14315                 ncx->blk_format.prevcomppad =
14316                         (PAD*)ptr_table_fetch(PL_ptr_table,
14317                                            ncx->blk_format.prevcomppad);
14318                 ncx->blk_format.cv      = cv_dup_inc(ncx->blk_format.cv, param);
14319                 ncx->blk_format.gv      = gv_dup(ncx->blk_format.gv, param);
14320                 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
14321                                                      param);
14322                 break;
14323             case CXt_GIVEN:
14324                 ncx->blk_givwhen.defsv_save =
14325                                 sv_dup_inc(ncx->blk_givwhen.defsv_save, param);
14326                 break;
14327             case CXt_BLOCK:
14328             case CXt_NULL:
14329             case CXt_WHEN:
14330                 break;
14331             }
14332         }
14333         --ix;
14334     }
14335     return ncxs;
14336 }
14337
14338 /* duplicate a stack info structure */
14339
14340 PERL_SI *
14341 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
14342 {
14343     PERL_SI *nsi;
14344
14345     PERL_ARGS_ASSERT_SI_DUP;
14346
14347     if (!si)
14348         return (PERL_SI*)NULL;
14349
14350     /* look for it in the table first */
14351     nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
14352     if (nsi)
14353         return nsi;
14354
14355     /* create anew and remember what it is */
14356     Newxz(nsi, 1, PERL_SI);
14357     ptr_table_store(PL_ptr_table, si, nsi);
14358
14359     nsi->si_stack       = av_dup_inc(si->si_stack, param);
14360     nsi->si_cxix        = si->si_cxix;
14361     nsi->si_cxmax       = si->si_cxmax;
14362     nsi->si_cxstack     = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
14363     nsi->si_type        = si->si_type;
14364     nsi->si_prev        = si_dup(si->si_prev, param);
14365     nsi->si_next        = si_dup(si->si_next, param);
14366     nsi->si_markoff     = si->si_markoff;
14367
14368     return nsi;
14369 }
14370
14371 #define POPINT(ss,ix)   ((ss)[--(ix)].any_i32)
14372 #define TOPINT(ss,ix)   ((ss)[ix].any_i32)
14373 #define POPLONG(ss,ix)  ((ss)[--(ix)].any_long)
14374 #define TOPLONG(ss,ix)  ((ss)[ix].any_long)
14375 #define POPIV(ss,ix)    ((ss)[--(ix)].any_iv)
14376 #define TOPIV(ss,ix)    ((ss)[ix].any_iv)
14377 #define POPUV(ss,ix)    ((ss)[--(ix)].any_uv)
14378 #define TOPUV(ss,ix)    ((ss)[ix].any_uv)
14379 #define POPBOOL(ss,ix)  ((ss)[--(ix)].any_bool)
14380 #define TOPBOOL(ss,ix)  ((ss)[ix].any_bool)
14381 #define POPPTR(ss,ix)   ((ss)[--(ix)].any_ptr)
14382 #define TOPPTR(ss,ix)   ((ss)[ix].any_ptr)
14383 #define POPDPTR(ss,ix)  ((ss)[--(ix)].any_dptr)
14384 #define TOPDPTR(ss,ix)  ((ss)[ix].any_dptr)
14385 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
14386 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
14387
14388 /* XXXXX todo */
14389 #define pv_dup_inc(p)   SAVEPV(p)
14390 #define pv_dup(p)       SAVEPV(p)
14391 #define svp_dup_inc(p,pp)       any_dup(p,pp)
14392
14393 /* map any object to the new equivent - either something in the
14394  * ptr table, or something in the interpreter structure
14395  */
14396
14397 void *
14398 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
14399 {
14400     void *ret;
14401
14402     PERL_ARGS_ASSERT_ANY_DUP;
14403
14404     if (!v)
14405         return (void*)NULL;
14406
14407     /* look for it in the table first */
14408     ret = ptr_table_fetch(PL_ptr_table, v);
14409     if (ret)
14410         return ret;
14411
14412     /* see if it is part of the interpreter structure */
14413     if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
14414         ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
14415     else {
14416         ret = v;
14417     }
14418
14419     return ret;
14420 }
14421
14422 /* duplicate the save stack */
14423
14424 ANY *
14425 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
14426 {
14427     dVAR;
14428     ANY * const ss      = proto_perl->Isavestack;
14429     const I32 max       = proto_perl->Isavestack_max + SS_MAXPUSH;
14430     I32 ix              = proto_perl->Isavestack_ix;
14431     ANY *nss;
14432     const SV *sv;
14433     const GV *gv;
14434     const AV *av;
14435     const HV *hv;
14436     void* ptr;
14437     int intval;
14438     long longval;
14439     GP *gp;
14440     IV iv;
14441     I32 i;
14442     char *c = NULL;
14443     void (*dptr) (void*);
14444     void (*dxptr) (pTHX_ void*);
14445
14446     PERL_ARGS_ASSERT_SS_DUP;
14447
14448     Newxz(nss, max, ANY);
14449
14450     while (ix > 0) {
14451         const UV uv = POPUV(ss,ix);
14452         const U8 type = (U8)uv & SAVE_MASK;
14453
14454         TOPUV(nss,ix) = uv;
14455         switch (type) {
14456         case SAVEt_CLEARSV:
14457         case SAVEt_CLEARPADRANGE:
14458             break;
14459         case SAVEt_HELEM:               /* hash element */
14460         case SAVEt_SV:                  /* scalar reference */
14461             sv = (const SV *)POPPTR(ss,ix);
14462             TOPPTR(nss,ix) = SvREFCNT_inc(sv_dup_inc(sv, param));
14463             /* FALLTHROUGH */
14464         case SAVEt_ITEM:                        /* normal string */
14465         case SAVEt_GVSV:                        /* scalar slot in GV */
14466             sv = (const SV *)POPPTR(ss,ix);
14467             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14468             if (type == SAVEt_SV)
14469                 break;
14470             /* FALLTHROUGH */
14471         case SAVEt_FREESV:
14472         case SAVEt_MORTALIZESV:
14473         case SAVEt_READONLY_OFF:
14474             sv = (const SV *)POPPTR(ss,ix);
14475             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14476             break;
14477         case SAVEt_FREEPADNAME:
14478             ptr = POPPTR(ss,ix);
14479             TOPPTR(nss,ix) = padname_dup((PADNAME *)ptr, param);
14480             PadnameREFCNT((PADNAME *)TOPPTR(nss,ix))++;
14481             break;
14482         case SAVEt_SHARED_PVREF:                /* char* in shared space */
14483             c = (char*)POPPTR(ss,ix);
14484             TOPPTR(nss,ix) = savesharedpv(c);
14485             ptr = POPPTR(ss,ix);
14486             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14487             break;
14488         case SAVEt_GENERIC_SVREF:               /* generic sv */
14489         case SAVEt_SVREF:                       /* scalar reference */
14490             sv = (const SV *)POPPTR(ss,ix);
14491             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14492             if (type == SAVEt_SVREF)
14493                 SvREFCNT_inc_simple_void((SV *)TOPPTR(nss,ix));
14494             ptr = POPPTR(ss,ix);
14495             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
14496             break;
14497         case SAVEt_GVSLOT:              /* any slot in GV */
14498             sv = (const SV *)POPPTR(ss,ix);
14499             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14500             ptr = POPPTR(ss,ix);
14501             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
14502             sv = (const SV *)POPPTR(ss,ix);
14503             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14504             break;
14505         case SAVEt_HV:                          /* hash reference */
14506         case SAVEt_AV:                          /* array reference */
14507             sv = (const SV *) POPPTR(ss,ix);
14508             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14509             /* FALLTHROUGH */
14510         case SAVEt_COMPPAD:
14511         case SAVEt_NSTAB:
14512             sv = (const SV *) POPPTR(ss,ix);
14513             TOPPTR(nss,ix) = sv_dup(sv, param);
14514             break;
14515         case SAVEt_INT:                         /* int reference */
14516             ptr = POPPTR(ss,ix);
14517             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14518             intval = (int)POPINT(ss,ix);
14519             TOPINT(nss,ix) = intval;
14520             break;
14521         case SAVEt_LONG:                        /* long reference */
14522             ptr = POPPTR(ss,ix);
14523             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14524             longval = (long)POPLONG(ss,ix);
14525             TOPLONG(nss,ix) = longval;
14526             break;
14527         case SAVEt_I32:                         /* I32 reference */
14528             ptr = POPPTR(ss,ix);
14529             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14530             i = POPINT(ss,ix);
14531             TOPINT(nss,ix) = i;
14532             break;
14533         case SAVEt_IV:                          /* IV reference */
14534         case SAVEt_STRLEN:                      /* STRLEN/size_t ref */
14535             ptr = POPPTR(ss,ix);
14536             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14537             iv = POPIV(ss,ix);
14538             TOPIV(nss,ix) = iv;
14539             break;
14540         case SAVEt_TMPSFLOOR:
14541             iv = POPIV(ss,ix);
14542             TOPIV(nss,ix) = iv;
14543             break;
14544         case SAVEt_HPTR:                        /* HV* reference */
14545         case SAVEt_APTR:                        /* AV* reference */
14546         case SAVEt_SPTR:                        /* SV* reference */
14547             ptr = POPPTR(ss,ix);
14548             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14549             sv = (const SV *)POPPTR(ss,ix);
14550             TOPPTR(nss,ix) = sv_dup(sv, param);
14551             break;
14552         case SAVEt_VPTR:                        /* random* reference */
14553             ptr = POPPTR(ss,ix);
14554             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14555             /* FALLTHROUGH */
14556         case SAVEt_INT_SMALL:
14557         case SAVEt_I32_SMALL:
14558         case SAVEt_I16:                         /* I16 reference */
14559         case SAVEt_I8:                          /* I8 reference */
14560         case SAVEt_BOOL:
14561             ptr = POPPTR(ss,ix);
14562             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14563             break;
14564         case SAVEt_GENERIC_PVREF:               /* generic char* */
14565         case SAVEt_PPTR:                        /* char* reference */
14566             ptr = POPPTR(ss,ix);
14567             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14568             c = (char*)POPPTR(ss,ix);
14569             TOPPTR(nss,ix) = pv_dup(c);
14570             break;
14571         case SAVEt_GP:                          /* scalar reference */
14572             gp = (GP*)POPPTR(ss,ix);
14573             TOPPTR(nss,ix) = gp = gp_dup(gp, param);
14574             (void)GpREFCNT_inc(gp);
14575             gv = (const GV *)POPPTR(ss,ix);
14576             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
14577             break;
14578         case SAVEt_FREEOP:
14579             ptr = POPPTR(ss,ix);
14580             if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
14581                 /* these are assumed to be refcounted properly */
14582                 OP *o;
14583                 switch (((OP*)ptr)->op_type) {
14584                 case OP_LEAVESUB:
14585                 case OP_LEAVESUBLV:
14586                 case OP_LEAVEEVAL:
14587                 case OP_LEAVE:
14588                 case OP_SCOPE:
14589                 case OP_LEAVEWRITE:
14590                     TOPPTR(nss,ix) = ptr;
14591                     o = (OP*)ptr;
14592                     OP_REFCNT_LOCK;
14593                     (void) OpREFCNT_inc(o);
14594                     OP_REFCNT_UNLOCK;
14595                     break;
14596                 default:
14597                     TOPPTR(nss,ix) = NULL;
14598                     break;
14599                 }
14600             }
14601             else
14602                 TOPPTR(nss,ix) = NULL;
14603             break;
14604         case SAVEt_FREECOPHH:
14605             ptr = POPPTR(ss,ix);
14606             TOPPTR(nss,ix) = cophh_copy((COPHH *)ptr);
14607             break;
14608         case SAVEt_ADELETE:
14609             av = (const AV *)POPPTR(ss,ix);
14610             TOPPTR(nss,ix) = av_dup_inc(av, param);
14611             i = POPINT(ss,ix);
14612             TOPINT(nss,ix) = i;
14613             break;
14614         case SAVEt_DELETE:
14615             hv = (const HV *)POPPTR(ss,ix);
14616             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
14617             i = POPINT(ss,ix);
14618             TOPINT(nss,ix) = i;
14619             /* FALLTHROUGH */
14620         case SAVEt_FREEPV:
14621             c = (char*)POPPTR(ss,ix);
14622             TOPPTR(nss,ix) = pv_dup_inc(c);
14623             break;
14624         case SAVEt_STACK_POS:           /* Position on Perl stack */
14625             i = POPINT(ss,ix);
14626             TOPINT(nss,ix) = i;
14627             break;
14628         case SAVEt_DESTRUCTOR:
14629             ptr = POPPTR(ss,ix);
14630             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
14631             dptr = POPDPTR(ss,ix);
14632             TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
14633                                         any_dup(FPTR2DPTR(void *, dptr),
14634                                                 proto_perl));
14635             break;
14636         case SAVEt_DESTRUCTOR_X:
14637             ptr = POPPTR(ss,ix);
14638             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
14639             dxptr = POPDXPTR(ss,ix);
14640             TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
14641                                          any_dup(FPTR2DPTR(void *, dxptr),
14642                                                  proto_perl));
14643             break;
14644         case SAVEt_REGCONTEXT:
14645         case SAVEt_ALLOC:
14646             ix -= uv >> SAVE_TIGHT_SHIFT;
14647             break;
14648         case SAVEt_AELEM:               /* array element */
14649             sv = (const SV *)POPPTR(ss,ix);
14650             TOPPTR(nss,ix) = SvREFCNT_inc(sv_dup_inc(sv, param));
14651             i = POPINT(ss,ix);
14652             TOPINT(nss,ix) = i;
14653             av = (const AV *)POPPTR(ss,ix);
14654             TOPPTR(nss,ix) = av_dup_inc(av, param);
14655             break;
14656         case SAVEt_OP:
14657             ptr = POPPTR(ss,ix);
14658             TOPPTR(nss,ix) = ptr;
14659             break;
14660         case SAVEt_HINTS:
14661             ptr = POPPTR(ss,ix);
14662             ptr = cophh_copy((COPHH*)ptr);
14663             TOPPTR(nss,ix) = ptr;
14664             i = POPINT(ss,ix);
14665             TOPINT(nss,ix) = i;
14666             if (i & HINT_LOCALIZE_HH) {
14667                 hv = (const HV *)POPPTR(ss,ix);
14668                 TOPPTR(nss,ix) = hv_dup_inc(hv, param);
14669             }
14670             break;
14671         case SAVEt_PADSV_AND_MORTALIZE:
14672             longval = (long)POPLONG(ss,ix);
14673             TOPLONG(nss,ix) = longval;
14674             ptr = POPPTR(ss,ix);
14675             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14676             sv = (const SV *)POPPTR(ss,ix);
14677             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14678             break;
14679         case SAVEt_SET_SVFLAGS:
14680             i = POPINT(ss,ix);
14681             TOPINT(nss,ix) = i;
14682             i = POPINT(ss,ix);
14683             TOPINT(nss,ix) = i;
14684             sv = (const SV *)POPPTR(ss,ix);
14685             TOPPTR(nss,ix) = sv_dup(sv, param);
14686             break;
14687         case SAVEt_COMPILE_WARNINGS:
14688             ptr = POPPTR(ss,ix);
14689             TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
14690             break;
14691         case SAVEt_PARSER:
14692             ptr = POPPTR(ss,ix);
14693             TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
14694             break;
14695         default:
14696             Perl_croak(aTHX_
14697                        "panic: ss_dup inconsistency (%" IVdf ")", (IV) type);
14698         }
14699     }
14700
14701     return nss;
14702 }
14703
14704
14705 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
14706  * flag to the result. This is done for each stash before cloning starts,
14707  * so we know which stashes want their objects cloned */
14708
14709 static void
14710 do_mark_cloneable_stash(pTHX_ SV *const sv)
14711 {
14712     const HEK * const hvname = HvNAME_HEK((const HV *)sv);
14713     if (hvname) {
14714         GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
14715         SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
14716         if (cloner && GvCV(cloner)) {
14717             dSP;
14718             UV status;
14719
14720             ENTER;
14721             SAVETMPS;
14722             PUSHMARK(SP);
14723             mXPUSHs(newSVhek(hvname));
14724             PUTBACK;
14725             call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
14726             SPAGAIN;
14727             status = POPu;
14728             PUTBACK;
14729             FREETMPS;
14730             LEAVE;
14731             if (status)
14732                 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
14733         }
14734     }
14735 }
14736
14737
14738
14739 /*
14740 =for apidoc perl_clone
14741
14742 Create and return a new interpreter by cloning the current one.
14743
14744 C<perl_clone> takes these flags as parameters:
14745
14746 C<CLONEf_COPY_STACKS> - is used to, well, copy the stacks also,
14747 without it we only clone the data and zero the stacks,
14748 with it we copy the stacks and the new perl interpreter is
14749 ready to run at the exact same point as the previous one.
14750 The pseudo-fork code uses C<COPY_STACKS> while the
14751 threads->create doesn't.
14752
14753 C<CLONEf_KEEP_PTR_TABLE> -
14754 C<perl_clone> keeps a ptr_table with the pointer of the old
14755 variable as a key and the new variable as a value,
14756 this allows it to check if something has been cloned and not
14757 clone it again but rather just use the value and increase the
14758 refcount.  If C<KEEP_PTR_TABLE> is not set then C<perl_clone> will kill
14759 the ptr_table using the function
14760 C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
14761 reason to keep it around is if you want to dup some of your own
14762 variable who are outside the graph perl scans, an example of this
14763 code is in F<threads.xs> create.
14764
14765 C<CLONEf_CLONE_HOST> -
14766 This is a win32 thing, it is ignored on unix, it tells perls
14767 win32host code (which is c++) to clone itself, this is needed on
14768 win32 if you want to run two threads at the same time,
14769 if you just want to do some stuff in a separate perl interpreter
14770 and then throw it away and return to the original one,
14771 you don't need to do anything.
14772
14773 =cut
14774 */
14775
14776 /* XXX the above needs expanding by someone who actually understands it ! */
14777 EXTERN_C PerlInterpreter *
14778 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
14779
14780 PerlInterpreter *
14781 perl_clone(PerlInterpreter *proto_perl, UV flags)
14782 {
14783    dVAR;
14784 #ifdef PERL_IMPLICIT_SYS
14785
14786     PERL_ARGS_ASSERT_PERL_CLONE;
14787
14788    /* perlhost.h so we need to call into it
14789    to clone the host, CPerlHost should have a c interface, sky */
14790
14791 #ifndef __amigaos4__
14792    if (flags & CLONEf_CLONE_HOST) {
14793        return perl_clone_host(proto_perl,flags);
14794    }
14795 #endif
14796    return perl_clone_using(proto_perl, flags,
14797                             proto_perl->IMem,
14798                             proto_perl->IMemShared,
14799                             proto_perl->IMemParse,
14800                             proto_perl->IEnv,
14801                             proto_perl->IStdIO,
14802                             proto_perl->ILIO,
14803                             proto_perl->IDir,
14804                             proto_perl->ISock,
14805                             proto_perl->IProc);
14806 }
14807
14808 PerlInterpreter *
14809 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
14810                  struct IPerlMem* ipM, struct IPerlMem* ipMS,
14811                  struct IPerlMem* ipMP, struct IPerlEnv* ipE,
14812                  struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
14813                  struct IPerlDir* ipD, struct IPerlSock* ipS,
14814                  struct IPerlProc* ipP)
14815 {
14816     /* XXX many of the string copies here can be optimized if they're
14817      * constants; they need to be allocated as common memory and just
14818      * their pointers copied. */
14819
14820     IV i;
14821     CLONE_PARAMS clone_params;
14822     CLONE_PARAMS* const param = &clone_params;
14823
14824     PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
14825
14826     PERL_ARGS_ASSERT_PERL_CLONE_USING;
14827 #else           /* !PERL_IMPLICIT_SYS */
14828     IV i;
14829     CLONE_PARAMS clone_params;
14830     CLONE_PARAMS* param = &clone_params;
14831     PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
14832
14833     PERL_ARGS_ASSERT_PERL_CLONE;
14834 #endif          /* PERL_IMPLICIT_SYS */
14835
14836     /* for each stash, determine whether its objects should be cloned */
14837     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
14838     PERL_SET_THX(my_perl);
14839
14840 #ifdef DEBUGGING
14841     PoisonNew(my_perl, 1, PerlInterpreter);
14842     PL_op = NULL;
14843     PL_curcop = NULL;
14844     PL_defstash = NULL; /* may be used by perl malloc() */
14845     PL_markstack = 0;
14846     PL_scopestack = 0;
14847     PL_scopestack_name = 0;
14848     PL_savestack = 0;
14849     PL_savestack_ix = 0;
14850     PL_savestack_max = -1;
14851     PL_sig_pending = 0;
14852     PL_parser = NULL;
14853     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
14854     Zero(&PL_padname_undef, 1, PADNAME);
14855     Zero(&PL_padname_const, 1, PADNAME);
14856 #  ifdef DEBUG_LEAKING_SCALARS
14857     PL_sv_serial = (((UV)my_perl >> 2) & 0xfff) * 1000000;
14858 #  endif
14859 #  ifdef PERL_TRACE_OPS
14860     Zero(PL_op_exec_cnt, OP_max+2, UV);
14861 #  endif
14862 #else   /* !DEBUGGING */
14863     Zero(my_perl, 1, PerlInterpreter);
14864 #endif  /* DEBUGGING */
14865
14866 #ifdef PERL_IMPLICIT_SYS
14867     /* host pointers */
14868     PL_Mem              = ipM;
14869     PL_MemShared        = ipMS;
14870     PL_MemParse         = ipMP;
14871     PL_Env              = ipE;
14872     PL_StdIO            = ipStd;
14873     PL_LIO              = ipLIO;
14874     PL_Dir              = ipD;
14875     PL_Sock             = ipS;
14876     PL_Proc             = ipP;
14877 #endif          /* PERL_IMPLICIT_SYS */
14878
14879
14880     param->flags = flags;
14881     /* Nothing in the core code uses this, but we make it available to
14882        extensions (using mg_dup).  */
14883     param->proto_perl = proto_perl;
14884     /* Likely nothing will use this, but it is initialised to be consistent
14885        with Perl_clone_params_new().  */
14886     param->new_perl = my_perl;
14887     param->unreferenced = NULL;
14888
14889
14890     INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
14891
14892     PL_body_arenas = NULL;
14893     Zero(&PL_body_roots, 1, PL_body_roots);
14894     
14895     PL_sv_count         = 0;
14896     PL_sv_root          = NULL;
14897     PL_sv_arenaroot     = NULL;
14898
14899     PL_debug            = proto_perl->Idebug;
14900
14901     /* dbargs array probably holds garbage */
14902     PL_dbargs           = NULL;
14903
14904     PL_compiling = proto_perl->Icompiling;
14905
14906     /* pseudo environmental stuff */
14907     PL_origargc         = proto_perl->Iorigargc;
14908     PL_origargv         = proto_perl->Iorigargv;
14909
14910 #ifndef NO_TAINT_SUPPORT
14911     /* Set tainting stuff before PerlIO_debug can possibly get called */
14912     PL_tainting         = proto_perl->Itainting;
14913     PL_taint_warn       = proto_perl->Itaint_warn;
14914 #else
14915     PL_tainting         = FALSE;
14916     PL_taint_warn       = FALSE;
14917 #endif
14918
14919     PL_minus_c          = proto_perl->Iminus_c;
14920
14921     PL_localpatches     = proto_perl->Ilocalpatches;
14922     PL_splitstr         = proto_perl->Isplitstr;
14923     PL_minus_n          = proto_perl->Iminus_n;
14924     PL_minus_p          = proto_perl->Iminus_p;
14925     PL_minus_l          = proto_perl->Iminus_l;
14926     PL_minus_a          = proto_perl->Iminus_a;
14927     PL_minus_E          = proto_perl->Iminus_E;
14928     PL_minus_F          = proto_perl->Iminus_F;
14929     PL_doswitches       = proto_perl->Idoswitches;
14930     PL_dowarn           = proto_perl->Idowarn;
14931 #ifdef PERL_SAWAMPERSAND
14932     PL_sawampersand     = proto_perl->Isawampersand;
14933 #endif
14934     PL_unsafe           = proto_perl->Iunsafe;
14935     PL_perldb           = proto_perl->Iperldb;
14936     PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
14937     PL_exit_flags       = proto_perl->Iexit_flags;
14938
14939     /* XXX time(&PL_basetime) when asked for? */
14940     PL_basetime         = proto_perl->Ibasetime;
14941
14942     PL_maxsysfd         = proto_perl->Imaxsysfd;
14943     PL_statusvalue      = proto_perl->Istatusvalue;
14944 #ifdef __VMS
14945     PL_statusvalue_vms  = proto_perl->Istatusvalue_vms;
14946 #else
14947     PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
14948 #endif
14949
14950     /* RE engine related */
14951     PL_regmatch_slab    = NULL;
14952     PL_reg_curpm        = NULL;
14953
14954     PL_sub_generation   = proto_perl->Isub_generation;
14955
14956     /* funky return mechanisms */
14957     PL_forkprocess      = proto_perl->Iforkprocess;
14958
14959     /* internal state */
14960     PL_main_start       = proto_perl->Imain_start;
14961     PL_eval_root        = proto_perl->Ieval_root;
14962     PL_eval_start       = proto_perl->Ieval_start;
14963
14964     PL_filemode         = proto_perl->Ifilemode;
14965     PL_lastfd           = proto_perl->Ilastfd;
14966     PL_oldname          = proto_perl->Ioldname;         /* XXX not quite right */
14967     PL_Argv             = NULL;
14968     PL_Cmd              = NULL;
14969     PL_gensym           = proto_perl->Igensym;
14970
14971     PL_laststatval      = proto_perl->Ilaststatval;
14972     PL_laststype        = proto_perl->Ilaststype;
14973     PL_mess_sv          = NULL;
14974
14975     PL_profiledata      = NULL;
14976
14977     PL_generation       = proto_perl->Igeneration;
14978
14979     PL_in_clean_objs    = proto_perl->Iin_clean_objs;
14980     PL_in_clean_all     = proto_perl->Iin_clean_all;
14981
14982     PL_delaymagic_uid   = proto_perl->Idelaymagic_uid;
14983     PL_delaymagic_euid  = proto_perl->Idelaymagic_euid;
14984     PL_delaymagic_gid   = proto_perl->Idelaymagic_gid;
14985     PL_delaymagic_egid  = proto_perl->Idelaymagic_egid;
14986     PL_nomemok          = proto_perl->Inomemok;
14987     PL_an               = proto_perl->Ian;
14988     PL_evalseq          = proto_perl->Ievalseq;
14989     PL_origenviron      = proto_perl->Iorigenviron;     /* XXX not quite right */
14990     PL_origalen         = proto_perl->Iorigalen;
14991
14992     PL_sighandlerp      = proto_perl->Isighandlerp;
14993
14994     PL_runops           = proto_perl->Irunops;
14995
14996     PL_subline          = proto_perl->Isubline;
14997
14998     PL_cv_has_eval      = proto_perl->Icv_has_eval;
14999
15000 #ifdef FCRYPT
15001     PL_cryptseen        = proto_perl->Icryptseen;
15002 #endif
15003
15004 #ifdef USE_LOCALE_COLLATE
15005     PL_collation_ix     = proto_perl->Icollation_ix;
15006     PL_collation_standard       = proto_perl->Icollation_standard;
15007     PL_collxfrm_base    = proto_perl->Icollxfrm_base;
15008     PL_collxfrm_mult    = proto_perl->Icollxfrm_mult;
15009     PL_strxfrm_max_cp   = proto_perl->Istrxfrm_max_cp;
15010 #endif /* USE_LOCALE_COLLATE */
15011
15012 #ifdef USE_LOCALE_NUMERIC
15013     PL_numeric_standard = proto_perl->Inumeric_standard;
15014     PL_numeric_local    = proto_perl->Inumeric_local;
15015 #endif /* !USE_LOCALE_NUMERIC */
15016
15017     /* Did the locale setup indicate UTF-8? */
15018     PL_utf8locale       = proto_perl->Iutf8locale;
15019     PL_in_utf8_CTYPE_locale = proto_perl->Iin_utf8_CTYPE_locale;
15020     PL_in_utf8_COLLATE_locale = proto_perl->Iin_utf8_COLLATE_locale;
15021     /* Unicode features (see perlrun/-C) */
15022     PL_unicode          = proto_perl->Iunicode;
15023
15024     /* Pre-5.8 signals control */
15025     PL_signals          = proto_perl->Isignals;
15026
15027     /* times() ticks per second */
15028     PL_clocktick        = proto_perl->Iclocktick;
15029
15030     /* Recursion stopper for PerlIO_find_layer */
15031     PL_in_load_module   = proto_perl->Iin_load_module;
15032
15033     /* sort() routine */
15034     PL_sort_RealCmp     = proto_perl->Isort_RealCmp;
15035
15036     /* Not really needed/useful since the reenrant_retint is "volatile",
15037      * but do it for consistency's sake. */
15038     PL_reentrant_retint = proto_perl->Ireentrant_retint;
15039
15040     /* Hooks to shared SVs and locks. */
15041     PL_sharehook        = proto_perl->Isharehook;
15042     PL_lockhook         = proto_perl->Ilockhook;
15043     PL_unlockhook       = proto_perl->Iunlockhook;
15044     PL_threadhook       = proto_perl->Ithreadhook;
15045     PL_destroyhook      = proto_perl->Idestroyhook;
15046     PL_signalhook       = proto_perl->Isignalhook;
15047
15048     PL_globhook         = proto_perl->Iglobhook;
15049
15050     /* swatch cache */
15051     PL_last_swash_hv    = NULL; /* reinits on demand */
15052     PL_last_swash_klen  = 0;
15053     PL_last_swash_key[0]= '\0';
15054     PL_last_swash_tmps  = (U8*)NULL;
15055     PL_last_swash_slen  = 0;
15056
15057     PL_srand_called     = proto_perl->Isrand_called;
15058     Copy(&(proto_perl->Irandom_state), &PL_random_state, 1, PL_RANDOM_STATE_TYPE);
15059
15060     if (flags & CLONEf_COPY_STACKS) {
15061         /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
15062         PL_tmps_ix              = proto_perl->Itmps_ix;
15063         PL_tmps_max             = proto_perl->Itmps_max;
15064         PL_tmps_floor           = proto_perl->Itmps_floor;
15065
15066         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
15067          * NOTE: unlike the others! */
15068         PL_scopestack_ix        = proto_perl->Iscopestack_ix;
15069         PL_scopestack_max       = proto_perl->Iscopestack_max;
15070
15071         /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
15072          * NOTE: unlike the others! */
15073         PL_savestack_ix         = proto_perl->Isavestack_ix;
15074         PL_savestack_max        = proto_perl->Isavestack_max;
15075     }
15076
15077     PL_start_env        = proto_perl->Istart_env;       /* XXXXXX */
15078     PL_top_env          = &PL_start_env;
15079
15080     PL_op               = proto_perl->Iop;
15081
15082     PL_Sv               = NULL;
15083     PL_Xpv              = (XPV*)NULL;
15084     my_perl->Ina        = proto_perl->Ina;
15085
15086     PL_statcache        = proto_perl->Istatcache;
15087
15088 #ifndef NO_TAINT_SUPPORT
15089     PL_tainted          = proto_perl->Itainted;
15090 #else
15091     PL_tainted          = FALSE;
15092 #endif
15093     PL_curpm            = proto_perl->Icurpm;   /* XXX No PMOP ref count */
15094
15095     PL_chopset          = proto_perl->Ichopset; /* XXX never deallocated */
15096
15097     PL_restartjmpenv    = proto_perl->Irestartjmpenv;
15098     PL_restartop        = proto_perl->Irestartop;
15099     PL_in_eval          = proto_perl->Iin_eval;
15100     PL_delaymagic       = proto_perl->Idelaymagic;
15101     PL_phase            = proto_perl->Iphase;
15102     PL_localizing       = proto_perl->Ilocalizing;
15103
15104     PL_hv_fetch_ent_mh  = NULL;
15105     PL_modcount         = proto_perl->Imodcount;
15106     PL_lastgotoprobe    = NULL;
15107     PL_dumpindent       = proto_perl->Idumpindent;
15108
15109     PL_efloatbuf        = NULL;         /* reinits on demand */
15110     PL_efloatsize       = 0;                    /* reinits on demand */
15111
15112     /* regex stuff */
15113
15114     PL_colorset         = 0;            /* reinits PL_colors[] */
15115     /*PL_colors[6]      = {0,0,0,0,0,0};*/
15116
15117     /* Pluggable optimizer */
15118     PL_peepp            = proto_perl->Ipeepp;
15119     PL_rpeepp           = proto_perl->Irpeepp;
15120     /* op_free() hook */
15121     PL_opfreehook       = proto_perl->Iopfreehook;
15122
15123 #ifdef USE_REENTRANT_API
15124     /* XXX: things like -Dm will segfault here in perlio, but doing
15125      *  PERL_SET_CONTEXT(proto_perl);
15126      * breaks too many other things
15127      */
15128     Perl_reentrant_init(aTHX);
15129 #endif
15130
15131     /* create SV map for pointer relocation */
15132     PL_ptr_table = ptr_table_new();
15133
15134     /* initialize these special pointers as early as possible */
15135     init_constants();
15136     ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
15137     ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
15138     ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
15139     ptr_table_store(PL_ptr_table, &proto_perl->Ipadname_const,
15140                     &PL_padname_const);
15141
15142     /* create (a non-shared!) shared string table */
15143     PL_strtab           = newHV();
15144     HvSHAREKEYS_off(PL_strtab);
15145     hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
15146     ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
15147
15148     Zero(PL_sv_consts, SV_CONSTS_COUNT, SV*);
15149
15150     /* This PV will be free'd special way so must set it same way op.c does */
15151     PL_compiling.cop_file    = savesharedpv(PL_compiling.cop_file);
15152     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
15153
15154     ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
15155     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
15156     CopHINTHASH_set(&PL_compiling, cophh_copy(CopHINTHASH_get(&PL_compiling)));
15157     PL_curcop           = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
15158
15159     param->stashes      = newAV();  /* Setup array of objects to call clone on */
15160     /* This makes no difference to the implementation, as it always pushes
15161        and shifts pointers to other SVs without changing their reference
15162        count, with the array becoming empty before it is freed. However, it
15163        makes it conceptually clear what is going on, and will avoid some
15164        work inside av.c, filling slots between AvFILL() and AvMAX() with
15165        &PL_sv_undef, and SvREFCNT_dec()ing those.  */
15166     AvREAL_off(param->stashes);
15167
15168     if (!(flags & CLONEf_COPY_STACKS)) {
15169         param->unreferenced = newAV();
15170     }
15171
15172 #ifdef PERLIO_LAYERS
15173     /* Clone PerlIO tables as soon as we can handle general xx_dup() */
15174     PerlIO_clone(aTHX_ proto_perl, param);
15175 #endif
15176
15177     PL_envgv            = gv_dup_inc(proto_perl->Ienvgv, param);
15178     PL_incgv            = gv_dup_inc(proto_perl->Iincgv, param);
15179     PL_hintgv           = gv_dup_inc(proto_perl->Ihintgv, param);
15180     PL_origfilename     = SAVEPV(proto_perl->Iorigfilename);
15181     PL_xsubfilename     = proto_perl->Ixsubfilename;
15182     PL_diehook          = sv_dup_inc(proto_perl->Idiehook, param);
15183     PL_warnhook         = sv_dup_inc(proto_perl->Iwarnhook, param);
15184
15185     /* switches */
15186     PL_patchlevel       = sv_dup_inc(proto_perl->Ipatchlevel, param);
15187     PL_inplace          = SAVEPV(proto_perl->Iinplace);
15188     PL_e_script         = sv_dup_inc(proto_perl->Ie_script, param);
15189
15190     /* magical thingies */
15191
15192     SvPVCLEAR(PERL_DEBUG_PAD(0));        /* For regex debugging. */
15193     SvPVCLEAR(PERL_DEBUG_PAD(1));        /* ext/re needs these */
15194     SvPVCLEAR(PERL_DEBUG_PAD(2));        /* even without DEBUGGING. */
15195
15196    
15197     /* Clone the regex array */
15198     /* ORANGE FIXME for plugins, probably in the SV dup code.
15199        newSViv(PTR2IV(CALLREGDUPE(
15200        INT2PTR(REGEXP *, SvIVX(regex)), param))))
15201     */
15202     PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
15203     PL_regex_pad = AvARRAY(PL_regex_padav);
15204
15205     PL_stashpadmax      = proto_perl->Istashpadmax;
15206     PL_stashpadix       = proto_perl->Istashpadix ;
15207     Newx(PL_stashpad, PL_stashpadmax, HV *);
15208     {
15209         PADOFFSET o = 0;
15210         for (; o < PL_stashpadmax; ++o)
15211             PL_stashpad[o] = hv_dup(proto_perl->Istashpad[o], param);
15212     }
15213
15214     /* shortcuts to various I/O objects */
15215     PL_ofsgv            = gv_dup_inc(proto_perl->Iofsgv, param);
15216     PL_stdingv          = gv_dup(proto_perl->Istdingv, param);
15217     PL_stderrgv         = gv_dup(proto_perl->Istderrgv, param);
15218     PL_defgv            = gv_dup(proto_perl->Idefgv, param);
15219     PL_argvgv           = gv_dup_inc(proto_perl->Iargvgv, param);
15220     PL_argvoutgv        = gv_dup(proto_perl->Iargvoutgv, param);
15221     PL_argvout_stack    = av_dup_inc(proto_perl->Iargvout_stack, param);
15222
15223     /* shortcuts to regexp stuff */
15224     PL_replgv           = gv_dup_inc(proto_perl->Ireplgv, param);
15225
15226     /* shortcuts to misc objects */
15227     PL_errgv            = gv_dup(proto_perl->Ierrgv, param);
15228
15229     /* shortcuts to debugging objects */
15230     PL_DBgv             = gv_dup_inc(proto_perl->IDBgv, param);
15231     PL_DBline           = gv_dup_inc(proto_perl->IDBline, param);
15232     PL_DBsub            = gv_dup_inc(proto_perl->IDBsub, param);
15233     PL_DBsingle         = sv_dup(proto_perl->IDBsingle, param);
15234     PL_DBtrace          = sv_dup(proto_perl->IDBtrace, param);
15235     PL_DBsignal         = sv_dup(proto_perl->IDBsignal, param);
15236     Copy(proto_perl->IDBcontrol, PL_DBcontrol, DBVARMG_COUNT, IV);
15237
15238     /* symbol tables */
15239     PL_defstash         = hv_dup_inc(proto_perl->Idefstash, param);
15240     PL_curstash         = hv_dup_inc(proto_perl->Icurstash, param);
15241     PL_debstash         = hv_dup(proto_perl->Idebstash, param);
15242     PL_globalstash      = hv_dup(proto_perl->Iglobalstash, param);
15243     PL_curstname        = sv_dup_inc(proto_perl->Icurstname, param);
15244
15245     PL_beginav          = av_dup_inc(proto_perl->Ibeginav, param);
15246     PL_beginav_save     = av_dup_inc(proto_perl->Ibeginav_save, param);
15247     PL_checkav_save     = av_dup_inc(proto_perl->Icheckav_save, param);
15248     PL_unitcheckav      = av_dup_inc(proto_perl->Iunitcheckav, param);
15249     PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
15250     PL_endav            = av_dup_inc(proto_perl->Iendav, param);
15251     PL_checkav          = av_dup_inc(proto_perl->Icheckav, param);
15252     PL_initav           = av_dup_inc(proto_perl->Iinitav, param);
15253     PL_savebegin        = proto_perl->Isavebegin;
15254
15255     PL_isarev           = hv_dup_inc(proto_perl->Iisarev, param);
15256
15257     /* subprocess state */
15258     PL_fdpid            = av_dup_inc(proto_perl->Ifdpid, param);
15259
15260     if (proto_perl->Iop_mask)
15261         PL_op_mask      = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
15262     else
15263         PL_op_mask      = NULL;
15264     /* PL_asserting        = proto_perl->Iasserting; */
15265
15266     /* current interpreter roots */
15267     PL_main_cv          = cv_dup_inc(proto_perl->Imain_cv, param);
15268     OP_REFCNT_LOCK;
15269     PL_main_root        = OpREFCNT_inc(proto_perl->Imain_root);
15270     OP_REFCNT_UNLOCK;
15271
15272     /* runtime control stuff */
15273     PL_curcopdb         = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
15274
15275     PL_preambleav       = av_dup_inc(proto_perl->Ipreambleav, param);
15276
15277     PL_ors_sv           = sv_dup_inc(proto_perl->Iors_sv, param);
15278
15279     /* interpreter atexit processing */
15280     PL_exitlistlen      = proto_perl->Iexitlistlen;
15281     if (PL_exitlistlen) {
15282         Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
15283         Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
15284     }
15285     else
15286         PL_exitlist     = (PerlExitListEntry*)NULL;
15287
15288     PL_my_cxt_size = proto_perl->Imy_cxt_size;
15289     if (PL_my_cxt_size) {
15290         Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
15291         Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
15292 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
15293         Newx(PL_my_cxt_keys, PL_my_cxt_size, const char *);
15294         Copy(proto_perl->Imy_cxt_keys, PL_my_cxt_keys, PL_my_cxt_size, char *);
15295 #endif
15296     }
15297     else {
15298         PL_my_cxt_list  = (void**)NULL;
15299 #ifdef PERL_GLOBAL_STRUCT_PRIVATE
15300         PL_my_cxt_keys  = (const char**)NULL;
15301 #endif
15302     }
15303     PL_modglobal        = hv_dup_inc(proto_perl->Imodglobal, param);
15304     PL_custom_op_names  = hv_dup_inc(proto_perl->Icustom_op_names,param);
15305     PL_custom_op_descs  = hv_dup_inc(proto_perl->Icustom_op_descs,param);
15306     PL_custom_ops       = hv_dup_inc(proto_perl->Icustom_ops, param);
15307
15308     PL_compcv                   = cv_dup(proto_perl->Icompcv, param);
15309
15310     PAD_CLONE_VARS(proto_perl, param);
15311
15312 #ifdef HAVE_INTERP_INTERN
15313     sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
15314 #endif
15315
15316     PL_DBcv             = cv_dup(proto_perl->IDBcv, param);
15317
15318 #ifdef PERL_USES_PL_PIDSTATUS
15319     PL_pidstatus        = newHV();                      /* XXX flag for cloning? */
15320 #endif
15321     PL_osname           = SAVEPV(proto_perl->Iosname);
15322     PL_parser           = parser_dup(proto_perl->Iparser, param);
15323
15324     /* XXX this only works if the saved cop has already been cloned */
15325     if (proto_perl->Iparser) {
15326         PL_parser->saved_curcop = (COP*)any_dup(
15327                                     proto_perl->Iparser->saved_curcop,
15328                                     proto_perl);
15329     }
15330
15331     PL_subname          = sv_dup_inc(proto_perl->Isubname, param);
15332
15333 #ifdef USE_LOCALE_CTYPE
15334     /* Should we warn if uses locale? */
15335     PL_warn_locale      = sv_dup_inc(proto_perl->Iwarn_locale, param);
15336 #endif
15337
15338 #ifdef USE_LOCALE_COLLATE
15339     PL_collation_name   = SAVEPV(proto_perl->Icollation_name);
15340 #endif /* USE_LOCALE_COLLATE */
15341
15342 #ifdef USE_LOCALE_NUMERIC
15343     PL_numeric_name     = SAVEPV(proto_perl->Inumeric_name);
15344     PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
15345 #endif /* !USE_LOCALE_NUMERIC */
15346
15347     /* Unicode inversion lists */
15348     PL_Latin1           = sv_dup_inc(proto_perl->ILatin1, param);
15349     PL_UpperLatin1      = sv_dup_inc(proto_perl->IUpperLatin1, param);
15350     PL_AboveLatin1      = sv_dup_inc(proto_perl->IAboveLatin1, param);
15351     PL_InBitmap         = sv_dup_inc(proto_perl->IInBitmap, param);
15352
15353     PL_NonL1NonFinalFold = sv_dup_inc(proto_perl->INonL1NonFinalFold, param);
15354     PL_HasMultiCharFold = sv_dup_inc(proto_perl->IHasMultiCharFold, param);
15355
15356     /* utf8 character class swashes */
15357     for (i = 0; i < POSIX_SWASH_COUNT; i++) {
15358         PL_utf8_swash_ptrs[i] = sv_dup_inc(proto_perl->Iutf8_swash_ptrs[i], param);
15359     }
15360     for (i = 0; i < POSIX_CC_COUNT; i++) {
15361         PL_XPosix_ptrs[i] = sv_dup_inc(proto_perl->IXPosix_ptrs[i], param);
15362     }
15363     PL_GCB_invlist = sv_dup_inc(proto_perl->IGCB_invlist, param);
15364     PL_SB_invlist = sv_dup_inc(proto_perl->ISB_invlist, param);
15365     PL_WB_invlist = sv_dup_inc(proto_perl->IWB_invlist, param);
15366     PL_seen_deprecated_macro = hv_dup_inc(proto_perl->Iseen_deprecated_macro, param);
15367     PL_utf8_mark        = sv_dup_inc(proto_perl->Iutf8_mark, param);
15368     PL_utf8_toupper     = sv_dup_inc(proto_perl->Iutf8_toupper, param);
15369     PL_utf8_totitle     = sv_dup_inc(proto_perl->Iutf8_totitle, param);
15370     PL_utf8_tolower     = sv_dup_inc(proto_perl->Iutf8_tolower, param);
15371     PL_utf8_tofold      = sv_dup_inc(proto_perl->Iutf8_tofold, param);
15372     PL_utf8_idstart     = sv_dup_inc(proto_perl->Iutf8_idstart, param);
15373     PL_utf8_xidstart    = sv_dup_inc(proto_perl->Iutf8_xidstart, param);
15374     PL_utf8_perl_idstart = sv_dup_inc(proto_perl->Iutf8_perl_idstart, param);
15375     PL_utf8_perl_idcont = sv_dup_inc(proto_perl->Iutf8_perl_idcont, param);
15376     PL_utf8_idcont      = sv_dup_inc(proto_perl->Iutf8_idcont, param);
15377     PL_utf8_xidcont     = sv_dup_inc(proto_perl->Iutf8_xidcont, param);
15378     PL_utf8_foldable    = sv_dup_inc(proto_perl->Iutf8_foldable, param);
15379     PL_utf8_charname_begin = sv_dup_inc(proto_perl->Iutf8_charname_begin, param);
15380     PL_utf8_charname_continue = sv_dup_inc(proto_perl->Iutf8_charname_continue, param);
15381
15382     if (proto_perl->Ipsig_pend) {
15383         Newxz(PL_psig_pend, SIG_SIZE, int);
15384     }
15385     else {
15386         PL_psig_pend    = (int*)NULL;
15387     }
15388
15389     if (proto_perl->Ipsig_name) {
15390         Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
15391         sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
15392                             param);
15393         PL_psig_ptr = PL_psig_name + SIG_SIZE;
15394     }
15395     else {
15396         PL_psig_ptr     = (SV**)NULL;
15397         PL_psig_name    = (SV**)NULL;
15398     }
15399
15400     if (flags & CLONEf_COPY_STACKS) {
15401         Newx(PL_tmps_stack, PL_tmps_max, SV*);
15402         sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
15403                             PL_tmps_ix+1, param);
15404
15405         /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
15406         i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
15407         Newxz(PL_markstack, i, I32);
15408         PL_markstack_max        = PL_markstack + (proto_perl->Imarkstack_max
15409                                                   - proto_perl->Imarkstack);
15410         PL_markstack_ptr        = PL_markstack + (proto_perl->Imarkstack_ptr
15411                                                   - proto_perl->Imarkstack);
15412         Copy(proto_perl->Imarkstack, PL_markstack,
15413              PL_markstack_ptr - PL_markstack + 1, I32);
15414
15415         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
15416          * NOTE: unlike the others! */
15417         Newxz(PL_scopestack, PL_scopestack_max, I32);
15418         Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
15419
15420 #ifdef DEBUGGING
15421         Newxz(PL_scopestack_name, PL_scopestack_max, const char *);
15422         Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
15423 #endif
15424         /* reset stack AV to correct length before its duped via
15425          * PL_curstackinfo */
15426         AvFILLp(proto_perl->Icurstack) =
15427                             proto_perl->Istack_sp - proto_perl->Istack_base;
15428
15429         /* NOTE: si_dup() looks at PL_markstack */
15430         PL_curstackinfo         = si_dup(proto_perl->Icurstackinfo, param);
15431
15432         /* PL_curstack          = PL_curstackinfo->si_stack; */
15433         PL_curstack             = av_dup(proto_perl->Icurstack, param);
15434         PL_mainstack            = av_dup(proto_perl->Imainstack, param);
15435
15436         /* next PUSHs() etc. set *(PL_stack_sp+1) */
15437         PL_stack_base           = AvARRAY(PL_curstack);
15438         PL_stack_sp             = PL_stack_base + (proto_perl->Istack_sp
15439                                                    - proto_perl->Istack_base);
15440         PL_stack_max            = PL_stack_base + AvMAX(PL_curstack);
15441
15442         /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
15443         PL_savestack            = ss_dup(proto_perl, param);
15444     }
15445     else {
15446         init_stacks();
15447         ENTER;                  /* perl_destruct() wants to LEAVE; */
15448     }
15449
15450     PL_statgv           = gv_dup(proto_perl->Istatgv, param);
15451     PL_statname         = sv_dup_inc(proto_perl->Istatname, param);
15452
15453     PL_rs               = sv_dup_inc(proto_perl->Irs, param);
15454     PL_last_in_gv       = gv_dup(proto_perl->Ilast_in_gv, param);
15455     PL_defoutgv         = gv_dup_inc(proto_perl->Idefoutgv, param);
15456     PL_toptarget        = sv_dup_inc(proto_perl->Itoptarget, param);
15457     PL_bodytarget       = sv_dup_inc(proto_perl->Ibodytarget, param);
15458     PL_formtarget       = sv_dup(proto_perl->Iformtarget, param);
15459
15460     PL_errors           = sv_dup_inc(proto_perl->Ierrors, param);
15461
15462     PL_sortcop          = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
15463     PL_firstgv          = gv_dup_inc(proto_perl->Ifirstgv, param);
15464     PL_secondgv         = gv_dup_inc(proto_perl->Isecondgv, param);
15465
15466     PL_stashcache       = newHV();
15467
15468     PL_watchaddr        = (char **) ptr_table_fetch(PL_ptr_table,
15469                                             proto_perl->Iwatchaddr);
15470     PL_watchok          = PL_watchaddr ? * PL_watchaddr : NULL;
15471     if (PL_debug && PL_watchaddr) {
15472         PerlIO_printf(Perl_debug_log,
15473           "WATCHING: %" UVxf " cloned as %" UVxf " with value %" UVxf "\n",
15474           PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
15475           PTR2UV(PL_watchok));
15476     }
15477
15478     PL_registered_mros  = hv_dup_inc(proto_perl->Iregistered_mros, param);
15479     PL_blockhooks       = av_dup_inc(proto_perl->Iblockhooks, param);
15480     PL_utf8_foldclosures = hv_dup_inc(proto_perl->Iutf8_foldclosures, param);
15481
15482     /* Call the ->CLONE method, if it exists, for each of the stashes
15483        identified by sv_dup() above.
15484     */
15485     while(av_tindex(param->stashes) != -1) {
15486         HV* const stash = MUTABLE_HV(av_shift(param->stashes));
15487         GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
15488         if (cloner && GvCV(cloner)) {
15489             dSP;
15490             ENTER;
15491             SAVETMPS;
15492             PUSHMARK(SP);
15493             mXPUSHs(newSVhek(HvNAME_HEK(stash)));
15494             PUTBACK;
15495             call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
15496             FREETMPS;
15497             LEAVE;
15498         }
15499     }
15500
15501     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
15502         ptr_table_free(PL_ptr_table);
15503         PL_ptr_table = NULL;
15504     }
15505
15506     if (!(flags & CLONEf_COPY_STACKS)) {
15507         unreferenced_to_tmp_stack(param->unreferenced);
15508     }
15509
15510     SvREFCNT_dec(param->stashes);
15511
15512     /* orphaned? eg threads->new inside BEGIN or use */
15513     if (PL_compcv && ! SvREFCNT(PL_compcv)) {
15514         SvREFCNT_inc_simple_void(PL_compcv);
15515         SAVEFREESV(PL_compcv);
15516     }
15517
15518     return my_perl;
15519 }
15520
15521 static void
15522 S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
15523 {
15524     PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK;
15525     
15526     if (AvFILLp(unreferenced) > -1) {
15527         SV **svp = AvARRAY(unreferenced);
15528         SV **const last = svp + AvFILLp(unreferenced);
15529         SSize_t count = 0;
15530
15531         do {
15532             if (SvREFCNT(*svp) == 1)
15533                 ++count;
15534         } while (++svp <= last);
15535
15536         EXTEND_MORTAL(count);
15537         svp = AvARRAY(unreferenced);
15538
15539         do {
15540             if (SvREFCNT(*svp) == 1) {
15541                 /* Our reference is the only one to this SV. This means that
15542                    in this thread, the scalar effectively has a 0 reference.
15543                    That doesn't work (cleanup never happens), so donate our
15544                    reference to it onto the save stack. */
15545                 PL_tmps_stack[++PL_tmps_ix] = *svp;
15546             } else {
15547                 /* As an optimisation, because we are already walking the
15548                    entire array, instead of above doing either
15549                    SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead
15550                    release our reference to the scalar, so that at the end of
15551                    the array owns zero references to the scalars it happens to
15552                    point to. We are effectively converting the array from
15553                    AvREAL() on to AvREAL() off. This saves the av_clear()
15554                    (triggered by the SvREFCNT_dec(unreferenced) below) from
15555                    walking the array a second time.  */
15556                 SvREFCNT_dec(*svp);
15557             }
15558
15559         } while (++svp <= last);
15560         AvREAL_off(unreferenced);
15561     }
15562     SvREFCNT_dec_NN(unreferenced);
15563 }
15564
15565 void
15566 Perl_clone_params_del(CLONE_PARAMS *param)
15567 {
15568     /* This seemingly funky ordering keeps the build with PERL_GLOBAL_STRUCT
15569        happy: */
15570     PerlInterpreter *const to = param->new_perl;
15571     dTHXa(to);
15572     PerlInterpreter *const was = PERL_GET_THX;
15573
15574     PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
15575
15576     if (was != to) {
15577         PERL_SET_THX(to);
15578     }
15579
15580     SvREFCNT_dec(param->stashes);
15581     if (param->unreferenced)
15582         unreferenced_to_tmp_stack(param->unreferenced);
15583
15584     Safefree(param);
15585
15586     if (was != to) {
15587         PERL_SET_THX(was);
15588     }
15589 }
15590
15591 CLONE_PARAMS *
15592 Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
15593 {
15594     dVAR;
15595     /* Need to play this game, as newAV() can call safesysmalloc(), and that
15596        does a dTHX; to get the context from thread local storage.
15597        FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
15598        a version that passes in my_perl.  */
15599     PerlInterpreter *const was = PERL_GET_THX;
15600     CLONE_PARAMS *param;
15601
15602     PERL_ARGS_ASSERT_CLONE_PARAMS_NEW;
15603
15604     if (was != to) {
15605         PERL_SET_THX(to);
15606     }
15607
15608     /* Given that we've set the context, we can do this unshared.  */
15609     Newx(param, 1, CLONE_PARAMS);
15610
15611     param->flags = 0;
15612     param->proto_perl = from;
15613     param->new_perl = to;
15614     param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV);
15615     AvREAL_off(param->stashes);
15616     param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV);
15617
15618     if (was != to) {
15619         PERL_SET_THX(was);
15620     }
15621     return param;
15622 }
15623
15624 #endif /* USE_ITHREADS */
15625
15626 void
15627 Perl_init_constants(pTHX)
15628 {
15629     SvREFCNT(&PL_sv_undef)      = SvREFCNT_IMMORTAL;
15630     SvFLAGS(&PL_sv_undef)       = SVf_READONLY|SVf_PROTECT|SVt_NULL;
15631     SvANY(&PL_sv_undef)         = NULL;
15632
15633     SvANY(&PL_sv_no)            = new_XPVNV();
15634     SvREFCNT(&PL_sv_no)         = SvREFCNT_IMMORTAL;
15635     SvFLAGS(&PL_sv_no)          = SVt_PVNV|SVf_READONLY|SVf_PROTECT
15636                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
15637                                   |SVp_POK|SVf_POK;
15638
15639     SvANY(&PL_sv_yes)           = new_XPVNV();
15640     SvREFCNT(&PL_sv_yes)        = SvREFCNT_IMMORTAL;
15641     SvFLAGS(&PL_sv_yes)         = SVt_PVNV|SVf_READONLY|SVf_PROTECT
15642                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
15643                                   |SVp_POK|SVf_POK;
15644
15645     SvPV_set(&PL_sv_no, (char*)PL_No);
15646     SvCUR_set(&PL_sv_no, 0);
15647     SvLEN_set(&PL_sv_no, 0);
15648     SvIV_set(&PL_sv_no, 0);
15649     SvNV_set(&PL_sv_no, 0);
15650
15651     SvPV_set(&PL_sv_yes, (char*)PL_Yes);
15652     SvCUR_set(&PL_sv_yes, 1);
15653     SvLEN_set(&PL_sv_yes, 0);
15654     SvIV_set(&PL_sv_yes, 1);
15655     SvNV_set(&PL_sv_yes, 1);
15656
15657     PadnamePV(&PL_padname_const) = (char *)PL_No;
15658 }
15659
15660 /*
15661 =head1 Unicode Support
15662
15663 =for apidoc sv_recode_to_utf8
15664
15665 C<encoding> is assumed to be an C<Encode> object, on entry the PV
15666 of C<sv> is assumed to be octets in that encoding, and C<sv>
15667 will be converted into Unicode (and UTF-8).
15668
15669 If C<sv> already is UTF-8 (or if it is not C<POK>), or if C<encoding>
15670 is not a reference, nothing is done to C<sv>.  If C<encoding> is not
15671 an C<Encode::XS> Encoding object, bad things will happen.
15672 (See F<cpan/Encode/encoding.pm> and L<Encode>.)
15673
15674 The PV of C<sv> is returned.
15675
15676 =cut */
15677
15678 char *
15679 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
15680 {
15681     PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
15682
15683     if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
15684         SV *uni;
15685         STRLEN len;
15686         const char *s;
15687         dSP;
15688         SV *nsv = sv;
15689         ENTER;
15690         PUSHSTACK;
15691         SAVETMPS;
15692         if (SvPADTMP(nsv)) {
15693             nsv = sv_newmortal();
15694             SvSetSV_nosteal(nsv, sv);
15695         }
15696         save_re_context();
15697         PUSHMARK(sp);
15698         EXTEND(SP, 3);
15699         PUSHs(encoding);
15700         PUSHs(nsv);
15701 /*
15702   NI-S 2002/07/09
15703   Passing sv_yes is wrong - it needs to be or'ed set of constants
15704   for Encode::XS, while UTf-8 decode (currently) assumes a true value means
15705   remove converted chars from source.
15706
15707   Both will default the value - let them.
15708
15709         XPUSHs(&PL_sv_yes);
15710 */
15711         PUTBACK;
15712         call_method("decode", G_SCALAR);
15713         SPAGAIN;
15714         uni = POPs;
15715         PUTBACK;
15716         s = SvPV_const(uni, len);
15717         if (s != SvPVX_const(sv)) {
15718             SvGROW(sv, len + 1);
15719             Move(s, SvPVX(sv), len + 1, char);
15720             SvCUR_set(sv, len);
15721         }
15722         FREETMPS;
15723         POPSTACK;
15724         LEAVE;
15725         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
15726             /* clear pos and any utf8 cache */
15727             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
15728             if (mg)
15729                 mg->mg_len = -1;
15730             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
15731                 magic_setutf8(sv,mg); /* clear UTF8 cache */
15732         }
15733         SvUTF8_on(sv);
15734         return SvPVX(sv);
15735     }
15736     return SvPOKp(sv) ? SvPVX(sv) : NULL;
15737 }
15738
15739 /*
15740 =for apidoc sv_cat_decode
15741
15742 C<encoding> is assumed to be an C<Encode> object, the PV of C<ssv> is
15743 assumed to be octets in that encoding and decoding the input starts
15744 from the position which S<C<(PV + *offset)>> pointed to.  C<dsv> will be
15745 concatenated with the decoded UTF-8 string from C<ssv>.  Decoding will terminate
15746 when the string C<tstr> appears in decoding output or the input ends on
15747 the PV of C<ssv>.  The value which C<offset> points will be modified
15748 to the last input position on C<ssv>.
15749
15750 Returns TRUE if the terminator was found, else returns FALSE.
15751
15752 =cut */
15753
15754 bool
15755 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
15756                    SV *ssv, int *offset, char *tstr, int tlen)
15757 {
15758     bool ret = FALSE;
15759
15760     PERL_ARGS_ASSERT_SV_CAT_DECODE;
15761
15762     if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding)) {
15763         SV *offsv;
15764         dSP;
15765         ENTER;
15766         SAVETMPS;
15767         save_re_context();
15768         PUSHMARK(sp);
15769         EXTEND(SP, 6);
15770         PUSHs(encoding);
15771         PUSHs(dsv);
15772         PUSHs(ssv);
15773         offsv = newSViv(*offset);
15774         mPUSHs(offsv);
15775         mPUSHp(tstr, tlen);
15776         PUTBACK;
15777         call_method("cat_decode", G_SCALAR);
15778         SPAGAIN;
15779         ret = SvTRUE(TOPs);
15780         *offset = SvIV(offsv);
15781         PUTBACK;
15782         FREETMPS;
15783         LEAVE;
15784     }
15785     else
15786         Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
15787     return ret;
15788
15789 }
15790
15791 /* ---------------------------------------------------------------------
15792  *
15793  * support functions for report_uninit()
15794  */
15795
15796 /* the maxiumum size of array or hash where we will scan looking
15797  * for the undefined element that triggered the warning */
15798
15799 #define FUV_MAX_SEARCH_SIZE 1000
15800
15801 /* Look for an entry in the hash whose value has the same SV as val;
15802  * If so, return a mortal copy of the key. */
15803
15804 STATIC SV*
15805 S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
15806 {
15807     dVAR;
15808     HE **array;
15809     I32 i;
15810
15811     PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
15812
15813     if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
15814                         (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
15815         return NULL;
15816
15817     array = HvARRAY(hv);
15818
15819     for (i=HvMAX(hv); i>=0; i--) {
15820         HE *entry;
15821         for (entry = array[i]; entry; entry = HeNEXT(entry)) {
15822             if (HeVAL(entry) != val)
15823                 continue;
15824             if (    HeVAL(entry) == &PL_sv_undef ||
15825                     HeVAL(entry) == &PL_sv_placeholder)
15826                 continue;
15827             if (!HeKEY(entry))
15828                 return NULL;
15829             if (HeKLEN(entry) == HEf_SVKEY)
15830                 return sv_mortalcopy(HeKEY_sv(entry));
15831             return sv_2mortal(newSVhek(HeKEY_hek(entry)));
15832         }
15833     }
15834     return NULL;
15835 }
15836
15837 /* Look for an entry in the array whose value has the same SV as val;
15838  * If so, return the index, otherwise return -1. */
15839
15840 STATIC SSize_t
15841 S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
15842 {
15843     PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
15844
15845     if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
15846                         (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
15847         return -1;
15848
15849     if (val != &PL_sv_undef) {
15850         SV ** const svp = AvARRAY(av);
15851         SSize_t i;
15852
15853         for (i=AvFILLp(av); i>=0; i--)
15854             if (svp[i] == val)
15855                 return i;
15856     }
15857     return -1;
15858 }
15859
15860 /* varname(): return the name of a variable, optionally with a subscript.
15861  * If gv is non-zero, use the name of that global, along with gvtype (one
15862  * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
15863  * targ.  Depending on the value of the subscript_type flag, return:
15864  */
15865
15866 #define FUV_SUBSCRIPT_NONE      1       /* "@foo"          */
15867 #define FUV_SUBSCRIPT_ARRAY     2       /* "$foo[aindex]"  */
15868 #define FUV_SUBSCRIPT_HASH      3       /* "$foo{keyname}" */
15869 #define FUV_SUBSCRIPT_WITHIN    4       /* "within @foo"   */
15870
15871 SV*
15872 Perl_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
15873         const SV *const keyname, SSize_t aindex, int subscript_type)
15874 {
15875
15876     SV * const name = sv_newmortal();
15877     if (gv && isGV(gv)) {
15878         char buffer[2];
15879         buffer[0] = gvtype;
15880         buffer[1] = 0;
15881
15882         /* as gv_fullname4(), but add literal '^' for $^FOO names  */
15883
15884         gv_fullname4(name, gv, buffer, 0);
15885
15886         if ((unsigned int)SvPVX(name)[1] <= 26) {
15887             buffer[0] = '^';
15888             buffer[1] = SvPVX(name)[1] + 'A' - 1;
15889
15890             /* Swap the 1 unprintable control character for the 2 byte pretty
15891                version - ie substr($name, 1, 1) = $buffer; */
15892             sv_insert(name, 1, 1, buffer, 2);
15893         }
15894     }
15895     else {
15896         CV * const cv = gv ? ((CV *)gv) : find_runcv(NULL);
15897         PADNAME *sv;
15898
15899         assert(!cv || SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM);
15900
15901         if (!cv || !CvPADLIST(cv))
15902             return NULL;
15903         sv = padnamelist_fetch(PadlistNAMES(CvPADLIST(cv)), targ);
15904         sv_setpvn(name, PadnamePV(sv), PadnameLEN(sv));
15905         SvUTF8_on(name);
15906     }
15907
15908     if (subscript_type == FUV_SUBSCRIPT_HASH) {
15909         SV * const sv = newSV(0);
15910         STRLEN len;
15911         const char * const pv = SvPV_nomg_const((SV*)keyname, len);
15912
15913         *SvPVX(name) = '$';
15914         Perl_sv_catpvf(aTHX_ name, "{%s}",
15915             pv_pretty(sv, pv, len, 32, NULL, NULL,
15916                     PERL_PV_PRETTY_DUMP | PERL_PV_ESCAPE_UNI_DETECT ));
15917         SvREFCNT_dec_NN(sv);
15918     }
15919     else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
15920         *SvPVX(name) = '$';
15921         Perl_sv_catpvf(aTHX_ name, "[%" IVdf "]", (IV)aindex);
15922     }
15923     else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
15924         /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
15925         Perl_sv_insert_flags(aTHX_ name, 0, 0,  STR_WITH_LEN("within "), 0);
15926     }
15927
15928     return name;
15929 }
15930
15931
15932 /*
15933 =for apidoc find_uninit_var
15934
15935 Find the name of the undefined variable (if any) that caused the operator
15936 to issue a "Use of uninitialized value" warning.
15937 If match is true, only return a name if its value matches C<uninit_sv>.
15938 So roughly speaking, if a unary operator (such as C<OP_COS>) generates a
15939 warning, then following the direct child of the op may yield an
15940 C<OP_PADSV> or C<OP_GV> that gives the name of the undefined variable.  On the
15941 other hand, with C<OP_ADD> there are two branches to follow, so we only print
15942 the variable name if we get an exact match.
15943 C<desc_p> points to a string pointer holding the description of the op.
15944 This may be updated if needed.
15945
15946 The name is returned as a mortal SV.
15947
15948 Assumes that C<PL_op> is the OP that originally triggered the error, and that
15949 C<PL_comppad>/C<PL_curpad> points to the currently executing pad.
15950
15951 =cut
15952 */
15953
15954 STATIC SV *
15955 S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
15956                   bool match, const char **desc_p)
15957 {
15958     dVAR;
15959     SV *sv;
15960     const GV *gv;
15961     const OP *o, *o2, *kid;
15962
15963     PERL_ARGS_ASSERT_FIND_UNINIT_VAR;
15964
15965     if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
15966                             uninit_sv == &PL_sv_placeholder)))
15967         return NULL;
15968
15969     switch (obase->op_type) {
15970
15971     case OP_UNDEF:
15972         /* undef should care if its args are undef - any warnings
15973          * will be from tied/magic vars */
15974         break;
15975
15976     case OP_RV2AV:
15977     case OP_RV2HV:
15978     case OP_PADAV:
15979     case OP_PADHV:
15980       {
15981         const bool pad  = (    obase->op_type == OP_PADAV
15982                             || obase->op_type == OP_PADHV
15983                             || obase->op_type == OP_PADRANGE
15984                           );
15985
15986         const bool hash = (    obase->op_type == OP_PADHV
15987                             || obase->op_type == OP_RV2HV
15988                             || (obase->op_type == OP_PADRANGE
15989                                 && SvTYPE(PAD_SVl(obase->op_targ)) == SVt_PVHV)
15990                           );
15991         SSize_t index = 0;
15992         SV *keysv = NULL;
15993         int subscript_type = FUV_SUBSCRIPT_WITHIN;
15994
15995         if (pad) { /* @lex, %lex */
15996             sv = PAD_SVl(obase->op_targ);
15997             gv = NULL;
15998         }
15999         else {
16000             if (cUNOPx(obase)->op_first->op_type == OP_GV) {
16001             /* @global, %global */
16002                 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
16003                 if (!gv)
16004                     break;
16005                 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
16006             }
16007             else if (obase == PL_op) /* @{expr}, %{expr} */
16008                 return find_uninit_var(cUNOPx(obase)->op_first,
16009                                                 uninit_sv, match, desc_p);
16010             else /* @{expr}, %{expr} as a sub-expression */
16011                 return NULL;
16012         }
16013
16014         /* attempt to find a match within the aggregate */
16015         if (hash) {
16016             keysv = find_hash_subscript((const HV*)sv, uninit_sv);
16017             if (keysv)
16018                 subscript_type = FUV_SUBSCRIPT_HASH;
16019         }
16020         else {
16021             index = find_array_subscript((const AV *)sv, uninit_sv);
16022             if (index >= 0)
16023                 subscript_type = FUV_SUBSCRIPT_ARRAY;
16024         }
16025
16026         if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
16027             break;
16028
16029         return varname(gv, (char)(hash ? '%' : '@'), obase->op_targ,
16030                                     keysv, index, subscript_type);
16031       }
16032
16033     case OP_RV2SV:
16034         if (cUNOPx(obase)->op_first->op_type == OP_GV) {
16035             /* $global */
16036             gv = cGVOPx_gv(cUNOPx(obase)->op_first);
16037             if (!gv || !GvSTASH(gv))
16038                 break;
16039             if (match && (GvSV(gv) != uninit_sv))
16040                 break;
16041             return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
16042         }
16043         /* ${expr} */
16044         return find_uninit_var(cUNOPx(obase)->op_first, uninit_sv, 1, desc_p);
16045
16046     case OP_PADSV:
16047         if (match && PAD_SVl(obase->op_targ) != uninit_sv)
16048             break;
16049         return varname(NULL, '$', obase->op_targ,
16050                                     NULL, 0, FUV_SUBSCRIPT_NONE);
16051
16052     case OP_GVSV:
16053         gv = cGVOPx_gv(obase);
16054         if (!gv || (match && GvSV(gv) != uninit_sv) || !GvSTASH(gv))
16055             break;
16056         return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
16057
16058     case OP_AELEMFAST_LEX:
16059         if (match) {
16060             SV **svp;
16061             AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
16062             if (!av || SvRMAGICAL(av))
16063                 break;
16064             svp = av_fetch(av, (I8)obase->op_private, FALSE);
16065             if (!svp || *svp != uninit_sv)
16066                 break;
16067         }
16068         return varname(NULL, '$', obase->op_targ,
16069                        NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
16070     case OP_AELEMFAST:
16071         {
16072             gv = cGVOPx_gv(obase);
16073             if (!gv)
16074                 break;
16075             if (match) {
16076                 SV **svp;
16077                 AV *const av = GvAV(gv);
16078                 if (!av || SvRMAGICAL(av))
16079                     break;
16080                 svp = av_fetch(av, (I8)obase->op_private, FALSE);
16081                 if (!svp || *svp != uninit_sv)
16082                     break;
16083             }
16084             return varname(gv, '$', 0,
16085                     NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
16086         }
16087         NOT_REACHED; /* NOTREACHED */
16088
16089     case OP_EXISTS:
16090         o = cUNOPx(obase)->op_first;
16091         if (!o || o->op_type != OP_NULL ||
16092                 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
16093             break;
16094         return find_uninit_var(cBINOPo->op_last, uninit_sv, match, desc_p);
16095
16096     case OP_AELEM:
16097     case OP_HELEM:
16098     {
16099         bool negate = FALSE;
16100
16101         if (PL_op == obase)
16102             /* $a[uninit_expr] or $h{uninit_expr} */
16103             return find_uninit_var(cBINOPx(obase)->op_last,
16104                                                 uninit_sv, match, desc_p);
16105
16106         gv = NULL;
16107         o = cBINOPx(obase)->op_first;
16108         kid = cBINOPx(obase)->op_last;
16109
16110         /* get the av or hv, and optionally the gv */
16111         sv = NULL;
16112         if  (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
16113             sv = PAD_SV(o->op_targ);
16114         }
16115         else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
16116                 && cUNOPo->op_first->op_type == OP_GV)
16117         {
16118             gv = cGVOPx_gv(cUNOPo->op_first);
16119             if (!gv)
16120                 break;
16121             sv = o->op_type
16122                 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
16123         }
16124         if (!sv)
16125             break;
16126
16127         if (kid && kid->op_type == OP_NEGATE) {
16128             negate = TRUE;
16129             kid = cUNOPx(kid)->op_first;
16130         }
16131
16132         if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
16133             /* index is constant */
16134             SV* kidsv;
16135             if (negate) {
16136                 kidsv = newSVpvs_flags("-", SVs_TEMP);
16137                 sv_catsv(kidsv, cSVOPx_sv(kid));
16138             }
16139             else
16140                 kidsv = cSVOPx_sv(kid);
16141             if (match) {
16142                 if (SvMAGICAL(sv))
16143                     break;
16144                 if (obase->op_type == OP_HELEM) {
16145                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), kidsv, 0, 0);
16146                     if (!he || HeVAL(he) != uninit_sv)
16147                         break;
16148                 }
16149                 else {
16150                     SV * const  opsv = cSVOPx_sv(kid);
16151                     const IV  opsviv = SvIV(opsv);
16152                     SV * const * const svp = av_fetch(MUTABLE_AV(sv),
16153                         negate ? - opsviv : opsviv,
16154                         FALSE);
16155                     if (!svp || *svp != uninit_sv)
16156                         break;
16157                 }
16158             }
16159             if (obase->op_type == OP_HELEM)
16160                 return varname(gv, '%', o->op_targ,
16161                             kidsv, 0, FUV_SUBSCRIPT_HASH);
16162             else
16163                 return varname(gv, '@', o->op_targ, NULL,
16164                     negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
16165                     FUV_SUBSCRIPT_ARRAY);
16166         }
16167         else  {
16168             /* index is an expression;
16169              * attempt to find a match within the aggregate */
16170             if (obase->op_type == OP_HELEM) {
16171                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
16172                 if (keysv)
16173                     return varname(gv, '%', o->op_targ,
16174                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
16175             }
16176             else {
16177                 const SSize_t index
16178                     = find_array_subscript((const AV *)sv, uninit_sv);
16179                 if (index >= 0)
16180                     return varname(gv, '@', o->op_targ,
16181                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
16182             }
16183             if (match)
16184                 break;
16185             return varname(gv,
16186                 (char)((o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
16187                 ? '@' : '%'),
16188                 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
16189         }
16190         NOT_REACHED; /* NOTREACHED */
16191     }
16192
16193     case OP_MULTIDEREF: {
16194         /* If we were executing OP_MULTIDEREF when the undef warning
16195          * triggered, then it must be one of the index values within
16196          * that triggered it. If not, then the only possibility is that
16197          * the value retrieved by the last aggregate index might be the
16198          * culprit. For the former, we set PL_multideref_pc each time before
16199          * using an index, so work though the item list until we reach
16200          * that point. For the latter, just work through the entire item
16201          * list; the last aggregate retrieved will be the candidate.
16202          * There is a third rare possibility: something triggered
16203          * magic while fetching an array/hash element. Just display
16204          * nothing in this case.
16205          */
16206
16207         /* the named aggregate, if any */
16208         PADOFFSET agg_targ = 0;
16209         GV       *agg_gv   = NULL;
16210         /* the last-seen index */
16211         UV        index_type;
16212         PADOFFSET index_targ;
16213         GV       *index_gv;
16214         IV        index_const_iv = 0; /* init for spurious compiler warn */
16215         SV       *index_const_sv;
16216         int       depth = 0;  /* how many array/hash lookups we've done */
16217
16218         UNOP_AUX_item *items = cUNOP_AUXx(obase)->op_aux;
16219         UNOP_AUX_item *last = NULL;
16220         UV actions = items->uv;
16221         bool is_hv;
16222
16223         if (PL_op == obase) {
16224             last = PL_multideref_pc;
16225             assert(last >= items && last <= items + items[-1].uv);
16226         }
16227
16228         assert(actions);
16229
16230         while (1) {
16231             is_hv = FALSE;
16232             switch (actions & MDEREF_ACTION_MASK) {
16233
16234             case MDEREF_reload:
16235                 actions = (++items)->uv;
16236                 continue;
16237
16238             case MDEREF_HV_padhv_helem:               /* $lex{...} */
16239                 is_hv = TRUE;
16240                 /* FALLTHROUGH */
16241             case MDEREF_AV_padav_aelem:               /* $lex[...] */
16242                 agg_targ = (++items)->pad_offset;
16243                 agg_gv = NULL;
16244                 break;
16245
16246             case MDEREF_HV_gvhv_helem:                /* $pkg{...} */
16247                 is_hv = TRUE;
16248                 /* FALLTHROUGH */
16249             case MDEREF_AV_gvav_aelem:                /* $pkg[...] */
16250                 agg_targ = 0;
16251                 agg_gv = (GV*)UNOP_AUX_item_sv(++items);
16252                 assert(isGV_with_GP(agg_gv));
16253                 break;
16254
16255             case MDEREF_HV_gvsv_vivify_rv2hv_helem:   /* $pkg->{...} */
16256             case MDEREF_HV_padsv_vivify_rv2hv_helem:  /* $lex->{...} */
16257                 ++items;
16258                 /* FALLTHROUGH */
16259             case MDEREF_HV_pop_rv2hv_helem:           /* expr->{...} */
16260             case MDEREF_HV_vivify_rv2hv_helem:        /* vivify, ->{...} */
16261                 agg_targ = 0;
16262                 agg_gv   = NULL;
16263                 is_hv    = TRUE;
16264                 break;
16265
16266             case MDEREF_AV_gvsv_vivify_rv2av_aelem:   /* $pkg->[...] */
16267             case MDEREF_AV_padsv_vivify_rv2av_aelem:  /* $lex->[...] */
16268                 ++items;
16269                 /* FALLTHROUGH */
16270             case MDEREF_AV_pop_rv2av_aelem:           /* expr->[...] */
16271             case MDEREF_AV_vivify_rv2av_aelem:        /* vivify, ->[...] */
16272                 agg_targ = 0;
16273                 agg_gv   = NULL;
16274             } /* switch */
16275
16276             index_targ     = 0;
16277             index_gv       = NULL;
16278             index_const_sv = NULL;
16279
16280             index_type = (actions & MDEREF_INDEX_MASK);
16281             switch (index_type) {
16282             case MDEREF_INDEX_none:
16283                 break;
16284             case MDEREF_INDEX_const:
16285                 if (is_hv)
16286                     index_const_sv = UNOP_AUX_item_sv(++items)
16287                 else
16288                     index_const_iv = (++items)->iv;
16289                 break;
16290             case MDEREF_INDEX_padsv:
16291                 index_targ = (++items)->pad_offset;
16292                 break;
16293             case MDEREF_INDEX_gvsv:
16294                 index_gv = (GV*)UNOP_AUX_item_sv(++items);
16295                 assert(isGV_with_GP(index_gv));
16296                 break;
16297             }
16298
16299             if (index_type != MDEREF_INDEX_none)
16300                 depth++;
16301
16302             if (   index_type == MDEREF_INDEX_none
16303                 || (actions & MDEREF_FLAG_last)
16304                 || (last && items >= last)
16305             )
16306                 break;
16307
16308             actions >>= MDEREF_SHIFT;
16309         } /* while */
16310
16311         if (PL_op == obase) {
16312             /* most likely index was undef */
16313
16314             *desc_p = (    (actions & MDEREF_FLAG_last)
16315                         && (obase->op_private
16316                                 & (OPpMULTIDEREF_EXISTS|OPpMULTIDEREF_DELETE)))
16317                         ?
16318                             (obase->op_private & OPpMULTIDEREF_EXISTS)
16319                                 ? "exists"
16320                                 : "delete"
16321                         : is_hv ? "hash element" : "array element";
16322             assert(index_type != MDEREF_INDEX_none);
16323             if (index_gv) {
16324                 if (GvSV(index_gv) == uninit_sv)
16325                     return varname(index_gv, '$', 0, NULL, 0,
16326                                                     FUV_SUBSCRIPT_NONE);
16327                 else
16328                     return NULL;
16329             }
16330             if (index_targ) {
16331                 if (PL_curpad[index_targ] == uninit_sv)
16332                     return varname(NULL, '$', index_targ,
16333                                     NULL, 0, FUV_SUBSCRIPT_NONE);
16334                 else
16335                     return NULL;
16336             }
16337             /* If we got to this point it was undef on a const subscript,
16338              * so magic probably involved, e.g. $ISA[0]. Give up. */
16339             return NULL;
16340         }
16341
16342         /* the SV returned by pp_multideref() was undef, if anything was */
16343
16344         if (depth != 1)
16345             break;
16346
16347         if (agg_targ)
16348             sv = PAD_SV(agg_targ);
16349         else if (agg_gv)
16350             sv = is_hv ? MUTABLE_SV(GvHV(agg_gv)) : MUTABLE_SV(GvAV(agg_gv));
16351         else
16352             break;
16353
16354         if (index_type == MDEREF_INDEX_const) {
16355             if (match) {
16356                 if (SvMAGICAL(sv))
16357                     break;
16358                 if (is_hv) {
16359                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), index_const_sv, 0, 0);
16360                     if (!he || HeVAL(he) != uninit_sv)
16361                         break;
16362                 }
16363                 else {
16364                     SV * const * const svp =
16365                             av_fetch(MUTABLE_AV(sv), index_const_iv, FALSE);
16366                     if (!svp || *svp != uninit_sv)
16367                         break;
16368                 }
16369             }
16370             return is_hv
16371                 ? varname(agg_gv, '%', agg_targ,
16372                                 index_const_sv, 0,    FUV_SUBSCRIPT_HASH)
16373                 : varname(agg_gv, '@', agg_targ,
16374                                 NULL, index_const_iv, FUV_SUBSCRIPT_ARRAY);
16375         }
16376         else  {
16377             /* index is an var */
16378             if (is_hv) {
16379                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
16380                 if (keysv)
16381                     return varname(agg_gv, '%', agg_targ,
16382                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
16383             }
16384             else {
16385                 const SSize_t index
16386                     = find_array_subscript((const AV *)sv, uninit_sv);
16387                 if (index >= 0)
16388                     return varname(agg_gv, '@', agg_targ,
16389                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
16390             }
16391             if (match)
16392                 break;
16393             return varname(agg_gv,
16394                 is_hv ? '%' : '@',
16395                 agg_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
16396         }
16397         NOT_REACHED; /* NOTREACHED */
16398     }
16399
16400     case OP_AASSIGN:
16401         /* only examine RHS */
16402         return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv,
16403                                                                 match, desc_p);
16404
16405     case OP_OPEN:
16406         o = cUNOPx(obase)->op_first;
16407         if (   o->op_type == OP_PUSHMARK
16408            || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)
16409         )
16410             o = OpSIBLING(o);
16411
16412         if (!OpHAS_SIBLING(o)) {
16413             /* one-arg version of open is highly magical */
16414
16415             if (o->op_type == OP_GV) { /* open FOO; */
16416                 gv = cGVOPx_gv(o);
16417                 if (match && GvSV(gv) != uninit_sv)
16418                     break;
16419                 return varname(gv, '$', 0,
16420                             NULL, 0, FUV_SUBSCRIPT_NONE);
16421             }
16422             /* other possibilities not handled are:
16423              * open $x; or open my $x;  should return '${*$x}'
16424              * open expr;               should return '$'.expr ideally
16425              */
16426              break;
16427         }
16428         match = 1;
16429         goto do_op;
16430
16431     /* ops where $_ may be an implicit arg */
16432     case OP_TRANS:
16433     case OP_TRANSR:
16434     case OP_SUBST:
16435     case OP_MATCH:
16436         if ( !(obase->op_flags & OPf_STACKED)) {
16437             if (uninit_sv == DEFSV)
16438                 return newSVpvs_flags("$_", SVs_TEMP);
16439             else if (obase->op_targ
16440                   && uninit_sv == PAD_SVl(obase->op_targ))
16441                 return varname(NULL, '$', obase->op_targ, NULL, 0,
16442                                FUV_SUBSCRIPT_NONE);
16443         }
16444         goto do_op;
16445
16446     case OP_PRTF:
16447     case OP_PRINT:
16448     case OP_SAY:
16449         match = 1; /* print etc can return undef on defined args */
16450         /* skip filehandle as it can't produce 'undef' warning  */
16451         o = cUNOPx(obase)->op_first;
16452         if ((obase->op_flags & OPf_STACKED)
16453             &&
16454                (   o->op_type == OP_PUSHMARK
16455                || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)))
16456             o = OpSIBLING(OpSIBLING(o));
16457         goto do_op2;
16458
16459
16460     case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
16461     case OP_CUSTOM: /* XS or custom code could trigger random warnings */
16462
16463         /* the following ops are capable of returning PL_sv_undef even for
16464          * defined arg(s) */
16465
16466     case OP_BACKTICK:
16467     case OP_PIPE_OP:
16468     case OP_FILENO:
16469     case OP_BINMODE:
16470     case OP_TIED:
16471     case OP_GETC:
16472     case OP_SYSREAD:
16473     case OP_SEND:
16474     case OP_IOCTL:
16475     case OP_SOCKET:
16476     case OP_SOCKPAIR:
16477     case OP_BIND:
16478     case OP_CONNECT:
16479     case OP_LISTEN:
16480     case OP_ACCEPT:
16481     case OP_SHUTDOWN:
16482     case OP_SSOCKOPT:
16483     case OP_GETPEERNAME:
16484     case OP_FTRREAD:
16485     case OP_FTRWRITE:
16486     case OP_FTREXEC:
16487     case OP_FTROWNED:
16488     case OP_FTEREAD:
16489     case OP_FTEWRITE:
16490     case OP_FTEEXEC:
16491     case OP_FTEOWNED:
16492     case OP_FTIS:
16493     case OP_FTZERO:
16494     case OP_FTSIZE:
16495     case OP_FTFILE:
16496     case OP_FTDIR:
16497     case OP_FTLINK:
16498     case OP_FTPIPE:
16499     case OP_FTSOCK:
16500     case OP_FTBLK:
16501     case OP_FTCHR:
16502     case OP_FTTTY:
16503     case OP_FTSUID:
16504     case OP_FTSGID:
16505     case OP_FTSVTX:
16506     case OP_FTTEXT:
16507     case OP_FTBINARY:
16508     case OP_FTMTIME:
16509     case OP_FTATIME:
16510     case OP_FTCTIME:
16511     case OP_READLINK:
16512     case OP_OPEN_DIR:
16513     case OP_READDIR:
16514     case OP_TELLDIR:
16515     case OP_SEEKDIR:
16516     case OP_REWINDDIR:
16517     case OP_CLOSEDIR:
16518     case OP_GMTIME:
16519     case OP_ALARM:
16520     case OP_SEMGET:
16521     case OP_GETLOGIN:
16522     case OP_SUBSTR:
16523     case OP_AEACH:
16524     case OP_EACH:
16525     case OP_SORT:
16526     case OP_CALLER:
16527     case OP_DOFILE:
16528     case OP_PROTOTYPE:
16529     case OP_NCMP:
16530     case OP_SMARTMATCH:
16531     case OP_UNPACK:
16532     case OP_SYSOPEN:
16533     case OP_SYSSEEK:
16534         match = 1;
16535         goto do_op;
16536
16537     case OP_ENTERSUB:
16538     case OP_GOTO:
16539         /* XXX tmp hack: these two may call an XS sub, and currently
16540           XS subs don't have a SUB entry on the context stack, so CV and
16541           pad determination goes wrong, and BAD things happen. So, just
16542           don't try to determine the value under those circumstances.
16543           Need a better fix at dome point. DAPM 11/2007 */
16544         break;
16545
16546     case OP_FLIP:
16547     case OP_FLOP:
16548     {
16549         GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
16550         if (gv && GvSV(gv) == uninit_sv)
16551             return newSVpvs_flags("$.", SVs_TEMP);
16552         goto do_op;
16553     }
16554
16555     case OP_POS:
16556         /* def-ness of rval pos() is independent of the def-ness of its arg */
16557         if ( !(obase->op_flags & OPf_MOD))
16558             break;
16559
16560     case OP_SCHOMP:
16561     case OP_CHOMP:
16562         if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
16563             return newSVpvs_flags("${$/}", SVs_TEMP);
16564         /* FALLTHROUGH */
16565
16566     default:
16567     do_op:
16568         if (!(obase->op_flags & OPf_KIDS))
16569             break;
16570         o = cUNOPx(obase)->op_first;
16571         
16572     do_op2:
16573         if (!o)
16574             break;
16575
16576         /* This loop checks all the kid ops, skipping any that cannot pos-
16577          * sibly be responsible for the uninitialized value; i.e., defined
16578          * constants and ops that return nothing.  If there is only one op
16579          * left that is not skipped, then we *know* it is responsible for
16580          * the uninitialized value.  If there is more than one op left, we
16581          * have to look for an exact match in the while() loop below.
16582          * Note that we skip padrange, because the individual pad ops that
16583          * it replaced are still in the tree, so we work on them instead.
16584          */
16585         o2 = NULL;
16586         for (kid=o; kid; kid = OpSIBLING(kid)) {
16587             const OPCODE type = kid->op_type;
16588             if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
16589               || (type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
16590               || (type == OP_PUSHMARK)
16591               || (type == OP_PADRANGE)
16592             )
16593             continue;
16594
16595             if (o2) { /* more than one found */
16596                 o2 = NULL;
16597                 break;
16598             }
16599             o2 = kid;
16600         }
16601         if (o2)
16602             return find_uninit_var(o2, uninit_sv, match, desc_p);
16603
16604         /* scan all args */
16605         while (o) {
16606             sv = find_uninit_var(o, uninit_sv, 1, desc_p);
16607             if (sv)
16608                 return sv;
16609             o = OpSIBLING(o);
16610         }
16611         break;
16612     }
16613     return NULL;
16614 }
16615
16616
16617 /*
16618 =for apidoc report_uninit
16619
16620 Print appropriate "Use of uninitialized variable" warning.
16621
16622 =cut
16623 */
16624
16625 void
16626 Perl_report_uninit(pTHX_ const SV *uninit_sv)
16627 {
16628     const char *desc = NULL;
16629     SV* varname = NULL;
16630
16631     if (PL_op) {
16632         desc = PL_op->op_type == OP_STRINGIFY && PL_op->op_folded
16633                 ? "join or string"
16634                 : OP_DESC(PL_op);
16635         if (uninit_sv && PL_curpad) {
16636             varname = find_uninit_var(PL_op, uninit_sv, 0, &desc);
16637             if (varname)
16638                 sv_insert(varname, 0, 0, " ", 1);
16639         }
16640     }
16641     else if (PL_curstackinfo->si_type == PERLSI_SORT && cxstack_ix == 0)
16642         /* we've reached the end of a sort block or sub,
16643          * and the uninit value is probably what that code returned */
16644         desc = "sort";
16645
16646     /* PL_warn_uninit_sv is constant */
16647     GCC_DIAG_IGNORE(-Wformat-nonliteral);
16648     if (desc)
16649         /* diag_listed_as: Use of uninitialized value%s */
16650         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit_sv,
16651                 SVfARG(varname ? varname : &PL_sv_no),
16652                 " in ", desc);
16653     else
16654         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
16655                 "", "", "");
16656     GCC_DIAG_RESTORE;
16657 }
16658
16659 /*
16660  * ex: set ts=8 sts=4 sw=4 et:
16661  */