This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Document cPERLscope
[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 =for apidoc_section SV Handling
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 =for apidoc_section SV Handling
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 4 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 type 4)
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 Allocation of SV-bodies is similar to SV-heads, differing as follows;
795 the allocation mechanism is used for many body types, so is somewhat
796 more complicated, it uses arena-sets, and has no need for still-live
797 SV detection.
798
799 At the outermost level, (new|del)_X*V macros return bodies of the
800 appropriate type.  These macros call either (new|del)_body_type or
801 (new|del)_body_allocated macro pairs, depending on specifics of the
802 type.  Most body types use the former pair, the latter pair is used to
803 allocate body types with "ghost fields".
804
805 "ghost fields" are fields that are unused in certain types, and
806 consequently don't need to actually exist.  They are declared because
807 they're part of a "base type", which allows use of functions as
808 methods.  The simplest examples are AVs and HVs, 2 aggregate types
809 which don't use the fields which support SCALAR semantics.
810
811 For these types, the arenas are carved up into appropriately sized
812 chunks, we thus avoid wasted memory for those unaccessed members.
813 When bodies are allocated, we adjust the pointer back in memory by the
814 size of the part not allocated, so it's as if we allocated the full
815 structure.  (But things will all go boom if you write to the part that
816 is "not there", because you'll be overwriting the last members of the
817 preceding structure in memory.)
818
819 We calculate the correction using the STRUCT_OFFSET macro on the first
820 member present.  If the allocated structure is smaller (no initial NV
821 actually allocated) then the net effect is to subtract the size of the NV
822 from the pointer, to return a new pointer as if an initial NV were actually
823 allocated.  (We were using structures named *_allocated for this, but
824 this turned out to be a subtle bug, because a structure without an NV
825 could have a lower alignment constraint, but the compiler is allowed to
826 optimised accesses based on the alignment constraint of the actual pointer
827 to the full structure, for example, using a single 64 bit load instruction
828 because it "knows" that two adjacent 32 bit members will be 8-byte aligned.)
829
830 This is the same trick as was used for NV and IV bodies.  Ironically it
831 doesn't need to be used for NV bodies any more, because NV is now at
832 the start of the structure.  IV bodies, and also in some builds NV bodies,
833 don't need it either, because they are no longer allocated.
834
835 In turn, the new_body_* allocators call S_new_body(), which invokes
836 new_body_inline macro, which takes a lock, and takes a body off the
837 linked list at PL_body_roots[sv_type], calling Perl_more_bodies() if
838 necessary to refresh an empty list.  Then the lock is released, and
839 the body is returned.
840
841 Perl_more_bodies allocates a new arena, and carves it up into an array of N
842 bodies, which it strings into a linked list.  It looks up arena-size
843 and body-size from the body_details table described below, thus
844 supporting the multiple body-types.
845
846 If PURIFY is defined, or PERL_ARENA_SIZE=0, arenas are not used, and
847 the (new|del)_X*V macros are mapped directly to malloc/free.
848
849 For each sv-type, struct body_details bodies_by_type[] carries
850 parameters which control these aspects of SV handling:
851
852 Arena_size determines whether arenas are used for this body type, and if
853 so, how big they are.  PURIFY or PERL_ARENA_SIZE=0 set this field to
854 zero, forcing individual mallocs and frees.
855
856 Body_size determines how big a body is, and therefore how many fit into
857 each arena.  Offset carries the body-pointer adjustment needed for
858 "ghost fields", and is used in *_allocated macros.
859
860 But its main purpose is to parameterize info needed in
861 Perl_sv_upgrade().  The info here dramatically simplifies the function
862 vs the implementation in 5.8.8, making it table-driven.  All fields
863 are used for this, except for arena_size.
864
865 For the sv-types that have no bodies, arenas are not used, so those
866 PL_body_roots[sv_type] are unused, and can be overloaded.  In
867 something of a special case, SVt_NULL is borrowed for HE arenas;
868 PL_body_roots[HE_SVSLOT=SVt_NULL] is filled by S_more_he, but the
869 bodies_by_type[SVt_NULL] slot is not used, as the table is not
870 available in hv.c.
871
872 */
873
874 struct body_details {
875     U8 body_size;       /* Size to allocate  */
876     U8 copy;            /* Size of structure to copy (may be shorter)  */
877     U8 offset;          /* Size of unalloced ghost fields to first alloced field*/
878     PERL_BITFIELD8 type : 4;        /* We have space for a sanity check. */
879     PERL_BITFIELD8 cant_upgrade : 1;/* Cannot upgrade this type */
880     PERL_BITFIELD8 zero_nv : 1;     /* zero the NV when upgrading from this */
881     PERL_BITFIELD8 arena : 1;       /* Allocated from an arena */
882     U32 arena_size;                 /* Size of arena to allocate */
883 };
884
885 #define ALIGNED_TYPE_NAME(name) name##_aligned
886 #define ALIGNED_TYPE(name)              \
887     typedef union {     \
888         name align_me;                          \
889         NV nv;                          \
890         IV iv;                          \
891     } ALIGNED_TYPE_NAME(name);
892
893 ALIGNED_TYPE(regexp);
894 ALIGNED_TYPE(XPVGV);
895 ALIGNED_TYPE(XPVLV);
896 ALIGNED_TYPE(XPVAV);
897 ALIGNED_TYPE(XPVHV);
898 ALIGNED_TYPE(XPVCV);
899 ALIGNED_TYPE(XPVFM);
900 ALIGNED_TYPE(XPVIO);
901
902 #define HADNV FALSE
903 #define NONV TRUE
904
905
906 #ifdef PURIFY
907 /* With -DPURFIY we allocate everything directly, and don't use arenas.
908    This seems a rather elegant way to simplify some of the code below.  */
909 #define HASARENA FALSE
910 #else
911 #define HASARENA TRUE
912 #endif
913 #define NOARENA FALSE
914
915 /* Size the arenas to exactly fit a given number of bodies.  A count
916    of 0 fits the max number bodies into a PERL_ARENA_SIZE.block,
917    simplifying the default.  If count > 0, the arena is sized to fit
918    only that many bodies, allowing arenas to be used for large, rare
919    bodies (XPVFM, XPVIO) without undue waste.  The arena size is
920    limited by PERL_ARENA_SIZE, so we can safely oversize the
921    declarations.
922  */
923 #define FIT_ARENA0(body_size)                           \
924     ((size_t)(PERL_ARENA_SIZE / body_size) * body_size)
925 #define FIT_ARENAn(count,body_size)                     \
926     ( count * body_size <= PERL_ARENA_SIZE)             \
927     ? count * body_size                                 \
928     : FIT_ARENA0 (body_size)
929 #define FIT_ARENA(count,body_size)                      \
930    (U32)(count                                          \
931     ? FIT_ARENAn (count, body_size)                     \
932     : FIT_ARENA0 (body_size))
933
934 /* Calculate the length to copy. Specifically work out the length less any
935    final padding the compiler needed to add.  See the comment in sv_upgrade
936    for why copying the padding proved to be a bug.  */
937
938 #define copy_length(type, last_member) \
939         STRUCT_OFFSET(type, last_member) \
940         + sizeof (((type*)SvANY((const SV *)0))->last_member)
941
942 static const struct body_details bodies_by_type[] = {
943     /* HEs use this offset for their arena.  */
944     { 0, 0, 0, SVt_NULL, FALSE, NONV, NOARENA, 0 },
945
946     /* IVs are in the head, so the allocation size is 0.  */
947     { 0,
948       sizeof(IV), /* This is used to copy out the IV body.  */
949       STRUCT_OFFSET(XPVIV, xiv_iv), SVt_IV, FALSE, NONV,
950       NOARENA /* IVS don't need an arena  */, 0
951     },
952
953 #if NVSIZE <= IVSIZE
954     { 0, sizeof(NV),
955       STRUCT_OFFSET(XPVNV, xnv_u),
956       SVt_NV, FALSE, HADNV, NOARENA, 0 },
957 #else
958     { sizeof(NV), sizeof(NV),
959       STRUCT_OFFSET(XPVNV, xnv_u),
960       SVt_NV, FALSE, HADNV, HASARENA, FIT_ARENA(0, sizeof(NV)) },
961 #endif
962
963     { sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur),
964       copy_length(XPV, xpv_len) - STRUCT_OFFSET(XPV, xpv_cur),
965       + STRUCT_OFFSET(XPV, xpv_cur),
966       SVt_PV, FALSE, NONV, HASARENA,
967       FIT_ARENA(0, sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur)) },
968
969     { sizeof(XINVLIST) - STRUCT_OFFSET(XPV, xpv_cur),
970       copy_length(XINVLIST, is_offset) - STRUCT_OFFSET(XPV, xpv_cur),
971       + STRUCT_OFFSET(XPV, xpv_cur),
972       SVt_INVLIST, TRUE, NONV, HASARENA,
973       FIT_ARENA(0, sizeof(XINVLIST) - STRUCT_OFFSET(XPV, xpv_cur)) },
974
975     { sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur),
976       copy_length(XPVIV, xiv_u) - STRUCT_OFFSET(XPV, xpv_cur),
977       + STRUCT_OFFSET(XPV, xpv_cur),
978       SVt_PVIV, FALSE, NONV, HASARENA,
979       FIT_ARENA(0, sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur)) },
980
981     { sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur),
982       copy_length(XPVNV, xnv_u) - STRUCT_OFFSET(XPV, xpv_cur),
983       + STRUCT_OFFSET(XPV, xpv_cur),
984       SVt_PVNV, FALSE, HADNV, HASARENA,
985       FIT_ARENA(0, sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur)) },
986
987     { sizeof(XPVMG), copy_length(XPVMG, xnv_u), 0, SVt_PVMG, FALSE, HADNV,
988       HASARENA, FIT_ARENA(0, sizeof(XPVMG)) },
989
990     { sizeof(ALIGNED_TYPE_NAME(regexp)),
991       sizeof(regexp),
992       0,
993       SVt_REGEXP, TRUE, NONV, HASARENA,
994       FIT_ARENA(0, sizeof(ALIGNED_TYPE_NAME(regexp)))
995     },
996
997     { sizeof(ALIGNED_TYPE_NAME(XPVGV)), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
998       HASARENA, FIT_ARENA(0, sizeof(ALIGNED_TYPE_NAME(XPVGV))) },
999     
1000     { sizeof(ALIGNED_TYPE_NAME(XPVLV)), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
1001       HASARENA, FIT_ARENA(0, sizeof(ALIGNED_TYPE_NAME(XPVLV))) },
1002
1003     { sizeof(ALIGNED_TYPE_NAME(XPVAV)),
1004       copy_length(XPVAV, xav_alloc),
1005       0,
1006       SVt_PVAV, TRUE, NONV, HASARENA,
1007       FIT_ARENA(0, sizeof(ALIGNED_TYPE_NAME(XPVAV))) },
1008
1009     { sizeof(ALIGNED_TYPE_NAME(XPVHV)),
1010       copy_length(XPVHV, xhv_max),
1011       0,
1012       SVt_PVHV, TRUE, NONV, HASARENA,
1013       FIT_ARENA(0, sizeof(ALIGNED_TYPE_NAME(XPVHV))) },
1014
1015     { sizeof(ALIGNED_TYPE_NAME(XPVCV)),
1016       sizeof(XPVCV),
1017       0,
1018       SVt_PVCV, TRUE, NONV, HASARENA,
1019       FIT_ARENA(0, sizeof(ALIGNED_TYPE_NAME(XPVCV))) },
1020
1021     { sizeof(ALIGNED_TYPE_NAME(XPVFM)),
1022       sizeof(XPVFM),
1023       0,
1024       SVt_PVFM, TRUE, NONV, NOARENA,
1025       FIT_ARENA(20, sizeof(ALIGNED_TYPE_NAME(XPVFM))) },
1026
1027     { sizeof(ALIGNED_TYPE_NAME(XPVIO)),
1028       sizeof(XPVIO),
1029       0,
1030       SVt_PVIO, TRUE, NONV, HASARENA,
1031       FIT_ARENA(24, sizeof(ALIGNED_TYPE_NAME(XPVIO))) },
1032 };
1033
1034 #define new_body_allocated(sv_type)             \
1035     (void *)((char *)S_new_body(aTHX_ sv_type)  \
1036              - bodies_by_type[sv_type].offset)
1037
1038 /* return a thing to the free list */
1039
1040 #define del_body(thing, root)                           \
1041     STMT_START {                                        \
1042         void ** const thing_copy = (void **)thing;      \
1043         *thing_copy = *root;                            \
1044         *root = (void*)thing_copy;                      \
1045     } STMT_END
1046
1047 #ifdef PURIFY
1048 #if !(NVSIZE <= IVSIZE)
1049 #  define new_XNV()     safemalloc(sizeof(XPVNV))
1050 #endif
1051 #define new_XPVNV()     safemalloc(sizeof(XPVNV))
1052 #define new_XPVMG()     safemalloc(sizeof(XPVMG))
1053
1054 #define del_XPVGV(p)    safefree(p)
1055
1056 #else /* !PURIFY */
1057
1058 #if !(NVSIZE <= IVSIZE)
1059 #  define new_XNV()     new_body_allocated(SVt_NV)
1060 #endif
1061 #define new_XPVNV()     new_body_allocated(SVt_PVNV)
1062 #define new_XPVMG()     new_body_allocated(SVt_PVMG)
1063
1064 #define del_XPVGV(p)    del_body(p + bodies_by_type[SVt_PVGV].offset,   \
1065                                  &PL_body_roots[SVt_PVGV])
1066
1067 #endif /* PURIFY */
1068
1069 /* no arena for you! */
1070
1071 #define new_NOARENA(details) \
1072         safemalloc((details)->body_size + (details)->offset)
1073 #define new_NOARENAZ(details) \
1074         safecalloc((details)->body_size + (details)->offset, 1)
1075
1076 void *
1077 Perl_more_bodies (pTHX_ const svtype sv_type, const size_t body_size,
1078                   const size_t arena_size)
1079 {
1080     void ** const root = &PL_body_roots[sv_type];
1081     struct arena_desc *adesc;
1082     struct arena_set *aroot = (struct arena_set *) PL_body_arenas;
1083     unsigned int curr;
1084     char *start;
1085     const char *end;
1086     const size_t good_arena_size = Perl_malloc_good_size(arena_size);
1087 #if defined(DEBUGGING)
1088     static bool done_sanity_check;
1089
1090     if (!done_sanity_check) {
1091         unsigned int i = SVt_LAST;
1092
1093         done_sanity_check = TRUE;
1094
1095         while (i--)
1096             assert (bodies_by_type[i].type == i);
1097     }
1098 #endif
1099
1100     assert(arena_size);
1101
1102     /* may need new arena-set to hold new arena */
1103     if (!aroot || aroot->curr >= aroot->set_size) {
1104         struct arena_set *newroot;
1105         Newxz(newroot, 1, struct arena_set);
1106         newroot->set_size = ARENAS_PER_SET;
1107         newroot->next = aroot;
1108         aroot = newroot;
1109         PL_body_arenas = (void *) newroot;
1110         DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", (void*)aroot));
1111     }
1112
1113     /* ok, now have arena-set with at least 1 empty/available arena-desc */
1114     curr = aroot->curr++;
1115     adesc = &(aroot->set[curr]);
1116     assert(!adesc->arena);
1117     
1118     Newx(adesc->arena, good_arena_size, char);
1119     adesc->size = good_arena_size;
1120     adesc->utype = sv_type;
1121     DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p size %" UVuf "\n",
1122                           curr, (void*)adesc->arena, (UV)good_arena_size));
1123
1124     start = (char *) adesc->arena;
1125
1126     /* Get the address of the byte after the end of the last body we can fit.
1127        Remember, this is integer division:  */
1128     end = start + good_arena_size / body_size * body_size;
1129
1130     /* computed count doesn't reflect the 1st slot reservation */
1131 #if defined(MYMALLOC) || defined(HAS_MALLOC_GOOD_SIZE)
1132     DEBUG_m(PerlIO_printf(Perl_debug_log,
1133                           "arena %p end %p arena-size %d (from %d) type %d "
1134                           "size %d ct %d\n",
1135                           (void*)start, (void*)end, (int)good_arena_size,
1136                           (int)arena_size, sv_type, (int)body_size,
1137                           (int)good_arena_size / (int)body_size));
1138 #else
1139     DEBUG_m(PerlIO_printf(Perl_debug_log,
1140                           "arena %p end %p arena-size %d type %d size %d ct %d\n",
1141                           (void*)start, (void*)end,
1142                           (int)arena_size, sv_type, (int)body_size,
1143                           (int)good_arena_size / (int)body_size));
1144 #endif
1145     *root = (void *)start;
1146
1147     while (1) {
1148         /* Where the next body would start:  */
1149         char * const next = start + body_size;
1150
1151         if (next >= end) {
1152             /* This is the last body:  */
1153             assert(next == end);
1154
1155             *(void **)start = 0;
1156             return *root;
1157         }
1158
1159         *(void**) start = (void *)next;
1160         start = next;
1161     }
1162 }
1163
1164 /* grab a new thing from the free list, allocating more if necessary.
1165    The inline version is used for speed in hot routines, and the
1166    function using it serves the rest (unless PURIFY).
1167 */
1168 #define new_body_inline(xpv, sv_type) \
1169     STMT_START { \
1170         void ** const r3wt = &PL_body_roots[sv_type]; \
1171         xpv = (PTR_TBL_ENT_t*) (*((void **)(r3wt))      \
1172           ? *((void **)(r3wt)) : Perl_more_bodies(aTHX_ sv_type, \
1173                                              bodies_by_type[sv_type].body_size,\
1174                                              bodies_by_type[sv_type].arena_size)); \
1175         *(r3wt) = *(void**)(xpv); \
1176     } STMT_END
1177
1178 #ifndef PURIFY
1179
1180 STATIC void *
1181 S_new_body(pTHX_ const svtype sv_type)
1182 {
1183     void *xpv;
1184     new_body_inline(xpv, sv_type);
1185     return xpv;
1186 }
1187
1188 #endif
1189
1190 static const struct body_details fake_rv =
1191     { 0, 0, 0, SVt_IV, FALSE, NONV, NOARENA, 0 };
1192
1193 /*
1194 =for apidoc sv_upgrade
1195
1196 Upgrade an SV to a more complex form.  Generally adds a new body type to the
1197 SV, then copies across as much information as possible from the old body.
1198 It croaks if the SV is already in a more complex form than requested.  You
1199 generally want to use the C<SvUPGRADE> macro wrapper, which checks the type
1200 before calling C<sv_upgrade>, and hence does not croak.  See also
1201 C<L</svtype>>.
1202
1203 =cut
1204 */
1205
1206 void
1207 Perl_sv_upgrade(pTHX_ SV *const sv, svtype new_type)
1208 {
1209     void*       old_body;
1210     void*       new_body;
1211     const svtype old_type = SvTYPE(sv);
1212     const struct body_details *new_type_details;
1213     const struct body_details *old_type_details
1214         = bodies_by_type + old_type;
1215     SV *referent = NULL;
1216
1217     PERL_ARGS_ASSERT_SV_UPGRADE;
1218
1219     if (old_type == new_type)
1220         return;
1221
1222     /* This clause was purposefully added ahead of the early return above to
1223        the shared string hackery for (sort {$a <=> $b} keys %hash), with the
1224        inference by Nick I-S that it would fix other troublesome cases. See
1225        changes 7162, 7163 (f130fd4589cf5fbb24149cd4db4137c8326f49c1 and parent)
1226
1227        Given that shared hash key scalars are no longer PVIV, but PV, there is
1228        no longer need to unshare so as to free up the IVX slot for its proper
1229        purpose. So it's safe to move the early return earlier.  */
1230
1231     if (new_type > SVt_PVMG && SvIsCOW(sv)) {
1232         sv_force_normal_flags(sv, 0);
1233     }
1234
1235     old_body = SvANY(sv);
1236
1237     /* Copying structures onto other structures that have been neatly zeroed
1238        has a subtle gotcha. Consider XPVMG
1239
1240        +------+------+------+------+------+-------+-------+
1241        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |
1242        +------+------+------+------+------+-------+-------+
1243        0      4      8     12     16     20      24      28
1244
1245        where NVs are aligned to 8 bytes, so that sizeof that structure is
1246        actually 32 bytes long, with 4 bytes of padding at the end:
1247
1248        +------+------+------+------+------+-------+-------+------+
1249        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH | ???  |
1250        +------+------+------+------+------+-------+-------+------+
1251        0      4      8     12     16     20      24      28     32
1252
1253        so what happens if you allocate memory for this structure:
1254
1255        +------+------+------+------+------+-------+-------+------+------+...
1256        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |  GP  | NAME |
1257        +------+------+------+------+------+-------+-------+------+------+...
1258        0      4      8     12     16     20      24      28     32     36
1259
1260        zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1261        expect, because you copy the area marked ??? onto GP. Now, ??? may have
1262        started out as zero once, but it's quite possible that it isn't. So now,
1263        rather than a nicely zeroed GP, you have it pointing somewhere random.
1264        Bugs ensue.
1265
1266        (In fact, GP ends up pointing at a previous GP structure, because the
1267        principle cause of the padding in XPVMG getting garbage is a copy of
1268        sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob. Right now
1269        this happens to be moot because XPVGV has been re-ordered, with GP
1270        no longer after STASH)
1271
1272        So we are careful and work out the size of used parts of all the
1273        structures.  */
1274
1275     switch (old_type) {
1276     case SVt_NULL:
1277         break;
1278     case SVt_IV:
1279         if (SvROK(sv)) {
1280             referent = SvRV(sv);
1281             old_type_details = &fake_rv;
1282             if (new_type == SVt_NV)
1283                 new_type = SVt_PVNV;
1284         } else {
1285             if (new_type < SVt_PVIV) {
1286                 new_type = (new_type == SVt_NV)
1287                     ? SVt_PVNV : SVt_PVIV;
1288             }
1289         }
1290         break;
1291     case SVt_NV:
1292         if (new_type < SVt_PVNV) {
1293             new_type = SVt_PVNV;
1294         }
1295         break;
1296     case SVt_PV:
1297         assert(new_type > SVt_PV);
1298         STATIC_ASSERT_STMT(SVt_IV < SVt_PV);
1299         STATIC_ASSERT_STMT(SVt_NV < SVt_PV);
1300         break;
1301     case SVt_PVIV:
1302         break;
1303     case SVt_PVNV:
1304         break;
1305     case SVt_PVMG:
1306         /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1307            there's no way that it can be safely upgraded, because perl.c
1308            expects to Safefree(SvANY(PL_mess_sv))  */
1309         assert(sv != PL_mess_sv);
1310         break;
1311     default:
1312         if (UNLIKELY(old_type_details->cant_upgrade))
1313             Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1314                        sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
1315     }
1316
1317     if (UNLIKELY(old_type > new_type))
1318         Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1319                 (int)old_type, (int)new_type);
1320
1321     new_type_details = bodies_by_type + new_type;
1322
1323     SvFLAGS(sv) &= ~SVTYPEMASK;
1324     SvFLAGS(sv) |= new_type;
1325
1326     /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1327        the return statements above will have triggered.  */
1328     assert (new_type != SVt_NULL);
1329     switch (new_type) {
1330     case SVt_IV:
1331         assert(old_type == SVt_NULL);
1332         SET_SVANY_FOR_BODYLESS_IV(sv);
1333         SvIV_set(sv, 0);
1334         return;
1335     case SVt_NV:
1336         assert(old_type == SVt_NULL);
1337 #if NVSIZE <= IVSIZE
1338         SET_SVANY_FOR_BODYLESS_NV(sv);
1339 #else
1340         SvANY(sv) = new_XNV();
1341 #endif
1342         SvNV_set(sv, 0);
1343         return;
1344     case SVt_PVHV:
1345     case SVt_PVAV:
1346         assert(new_type_details->body_size);
1347
1348 #ifndef PURIFY  
1349         assert(new_type_details->arena);
1350         assert(new_type_details->arena_size);
1351         /* This points to the start of the allocated area.  */
1352         new_body_inline(new_body, new_type);
1353         Zero(new_body, new_type_details->body_size, char);
1354         new_body = ((char *)new_body) - new_type_details->offset;
1355 #else
1356         /* We always allocated the full length item with PURIFY. To do this
1357            we fake things so that arena is false for all 16 types..  */
1358         new_body = new_NOARENAZ(new_type_details);
1359 #endif
1360         SvANY(sv) = new_body;
1361         if (new_type == SVt_PVAV) {
1362             AvMAX(sv)   = -1;
1363             AvFILLp(sv) = -1;
1364             AvREAL_only(sv);
1365             if (old_type_details->body_size) {
1366                 AvALLOC(sv) = 0;
1367             } else {
1368                 /* It will have been zeroed when the new body was allocated.
1369                    Lets not write to it, in case it confuses a write-back
1370                    cache.  */
1371             }
1372         } else {
1373             assert(!SvOK(sv));
1374             SvOK_off(sv);
1375 #ifndef NODEFAULT_SHAREKEYS
1376             HvSHAREKEYS_on(sv);         /* key-sharing on by default */
1377 #endif
1378             /* start with PERL_HASH_DEFAULT_HvMAX+1 buckets: */
1379             HvMAX(sv) = PERL_HASH_DEFAULT_HvMAX;
1380         }
1381
1382         /* SVt_NULL isn't the only thing upgraded to AV or HV.
1383            The target created by newSVrv also is, and it can have magic.
1384            However, it never has SvPVX set.
1385         */
1386         if (old_type == SVt_IV) {
1387             assert(!SvROK(sv));
1388         } else if (old_type >= SVt_PV) {
1389             assert(SvPVX_const(sv) == 0);
1390         }
1391
1392         if (old_type >= SVt_PVMG) {
1393             SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic);
1394             SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
1395         } else {
1396             sv->sv_u.svu_array = NULL; /* or svu_hash  */
1397         }
1398         break;
1399
1400     case SVt_PVIV:
1401         /* XXX Is this still needed?  Was it ever needed?   Surely as there is
1402            no route from NV to PVIV, NOK can never be true  */
1403         assert(!SvNOKp(sv));
1404         assert(!SvNOK(sv));
1405         /* FALLTHROUGH */
1406     case SVt_PVIO:
1407     case SVt_PVFM:
1408     case SVt_PVGV:
1409     case SVt_PVCV:
1410     case SVt_PVLV:
1411     case SVt_INVLIST:
1412     case SVt_REGEXP:
1413     case SVt_PVMG:
1414     case SVt_PVNV:
1415     case SVt_PV:
1416
1417         assert(new_type_details->body_size);
1418         /* We always allocated the full length item with PURIFY. To do this
1419            we fake things so that arena is false for all 16 types..  */
1420         if(new_type_details->arena) {
1421             /* This points to the start of the allocated area.  */
1422             new_body_inline(new_body, new_type);
1423             Zero(new_body, new_type_details->body_size, char);
1424             new_body = ((char *)new_body) - new_type_details->offset;
1425         } else {
1426             new_body = new_NOARENAZ(new_type_details);
1427         }
1428         SvANY(sv) = new_body;
1429
1430         if (old_type_details->copy) {
1431             /* There is now the potential for an upgrade from something without
1432                an offset (PVNV or PVMG) to something with one (PVCV, PVFM)  */
1433             int offset = old_type_details->offset;
1434             int length = old_type_details->copy;
1435
1436             if (new_type_details->offset > old_type_details->offset) {
1437                 const int difference
1438                     = new_type_details->offset - old_type_details->offset;
1439                 offset += difference;
1440                 length -= difference;
1441             }
1442             assert (length >= 0);
1443                 
1444             Copy((char *)old_body + offset, (char *)new_body + offset, length,
1445                  char);
1446         }
1447
1448 #ifndef NV_ZERO_IS_ALLBITS_ZERO
1449         /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
1450          * correct 0.0 for us.  Otherwise, if the old body didn't have an
1451          * NV slot, but the new one does, then we need to initialise the
1452          * freshly created NV slot with whatever the correct bit pattern is
1453          * for 0.0  */
1454         if (old_type_details->zero_nv && !new_type_details->zero_nv
1455             && !isGV_with_GP(sv))
1456             SvNV_set(sv, 0);
1457 #endif
1458
1459         if (UNLIKELY(new_type == SVt_PVIO)) {
1460             IO * const io = MUTABLE_IO(sv);
1461             GV *iogv = gv_fetchpvs("IO::File::", GV_ADD, SVt_PVHV);
1462
1463             SvOBJECT_on(io);
1464             /* Clear the stashcache because a new IO could overrule a package
1465                name */
1466             DEBUG_o(Perl_deb(aTHX_ "sv_upgrade clearing PL_stashcache\n"));
1467             hv_clear(PL_stashcache);
1468
1469             SvSTASH_set(io, MUTABLE_HV(SvREFCNT_inc(GvHV(iogv))));
1470             IoPAGE_LEN(sv) = 60;
1471         }
1472         if (old_type < SVt_PV) {
1473             /* referent will be NULL unless the old type was SVt_IV emulating
1474                SVt_RV */
1475             sv->sv_u.svu_rv = referent;
1476         }
1477         break;
1478     default:
1479         Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1480                    (unsigned long)new_type);
1481     }
1482
1483     /* if this is zero, this is a body-less SVt_NULL, SVt_IV/SVt_RV,
1484        and sometimes SVt_NV */
1485     if (old_type_details->body_size) {
1486 #ifdef PURIFY
1487         safefree(old_body);
1488 #else
1489         /* Note that there is an assumption that all bodies of types that
1490            can be upgraded came from arenas. Only the more complex non-
1491            upgradable types are allowed to be directly malloc()ed.  */
1492         assert(old_type_details->arena);
1493         del_body((void*)((char*)old_body + old_type_details->offset),
1494                  &PL_body_roots[old_type]);
1495 #endif
1496     }
1497 }
1498
1499 /*
1500 =for apidoc sv_backoff
1501
1502 Remove any string offset.  You should normally use the C<SvOOK_off> macro
1503 wrapper instead.
1504
1505 =cut
1506 */
1507
1508 /* prior to 5.000 stable, this function returned the new OOK-less SvFLAGS
1509    prior to 5.23.4 this function always returned 0
1510 */
1511
1512 void
1513 Perl_sv_backoff(SV *const sv)
1514 {
1515     STRLEN delta;
1516     const char * const s = SvPVX_const(sv);
1517
1518     PERL_ARGS_ASSERT_SV_BACKOFF;
1519
1520     assert(SvOOK(sv));
1521     assert(SvTYPE(sv) != SVt_PVHV);
1522     assert(SvTYPE(sv) != SVt_PVAV);
1523
1524     SvOOK_offset(sv, delta);
1525     
1526     SvLEN_set(sv, SvLEN(sv) + delta);
1527     SvPV_set(sv, SvPVX(sv) - delta);
1528     SvFLAGS(sv) &= ~SVf_OOK;
1529     Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1530     return;
1531 }
1532
1533
1534 /* forward declaration */
1535 static void S_sv_uncow(pTHX_ SV * const sv, const U32 flags);
1536
1537
1538 /*
1539 =for apidoc sv_grow
1540
1541 Expands the character buffer in the SV.  If necessary, uses C<sv_unref> and
1542 upgrades the SV to C<SVt_PV>.  Returns a pointer to the character buffer.
1543 Use the C<SvGROW> wrapper instead.
1544
1545 =cut
1546 */
1547
1548
1549 char *
1550 Perl_sv_grow(pTHX_ SV *const sv, STRLEN newlen)
1551 {
1552     char *s;
1553
1554     PERL_ARGS_ASSERT_SV_GROW;
1555
1556     if (SvROK(sv))
1557         sv_unref(sv);
1558     if (SvTYPE(sv) < SVt_PV) {
1559         sv_upgrade(sv, SVt_PV);
1560         s = SvPVX_mutable(sv);
1561     }
1562     else if (SvOOK(sv)) {       /* pv is offset? */
1563         sv_backoff(sv);
1564         s = SvPVX_mutable(sv);
1565         if (newlen > SvLEN(sv))
1566             newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1567     }
1568     else
1569     {
1570         if (SvIsCOW(sv)) S_sv_uncow(aTHX_ sv, 0);
1571         s = SvPVX_mutable(sv);
1572     }
1573
1574 #ifdef PERL_COPY_ON_WRITE
1575     /* the new COW scheme uses SvPVX(sv)[SvLEN(sv)-1] (if spare)
1576      * to store the COW count. So in general, allocate one more byte than
1577      * asked for, to make it likely this byte is always spare: and thus
1578      * make more strings COW-able.
1579      *
1580      * Only increment if the allocation isn't MEM_SIZE_MAX,
1581      * otherwise it will wrap to 0.
1582      */
1583     if ( newlen != MEM_SIZE_MAX )
1584         newlen++;
1585 #endif
1586
1587 #if defined(PERL_USE_MALLOC_SIZE) && defined(Perl_safesysmalloc_size)
1588 #define PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1589 #endif
1590
1591     if (newlen > SvLEN(sv)) {           /* need more room? */
1592         STRLEN minlen = SvCUR(sv);
1593         minlen += (minlen >> PERL_STRLEN_EXPAND_SHIFT) + 10;
1594         if (newlen < minlen)
1595             newlen = minlen;
1596 #ifndef PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1597
1598         /* Don't round up on the first allocation, as odds are pretty good that
1599          * the initial request is accurate as to what is really needed */
1600         if (SvLEN(sv)) {
1601             STRLEN rounded = PERL_STRLEN_ROUNDUP(newlen);
1602             if (rounded > newlen)
1603                 newlen = rounded;
1604         }
1605 #endif
1606         if (SvLEN(sv) && s) {
1607             s = (char*)saferealloc(s, newlen);
1608         }
1609         else {
1610             s = (char*)safemalloc(newlen);
1611             if (SvPVX_const(sv) && SvCUR(sv)) {
1612                 Move(SvPVX_const(sv), s, SvCUR(sv), char);
1613             }
1614         }
1615         SvPV_set(sv, s);
1616 #ifdef PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1617         /* Do this here, do it once, do it right, and then we will never get
1618            called back into sv_grow() unless there really is some growing
1619            needed.  */
1620         SvLEN_set(sv, Perl_safesysmalloc_size(s));
1621 #else
1622         SvLEN_set(sv, newlen);
1623 #endif
1624     }
1625     return s;
1626 }
1627
1628 /*
1629 =for apidoc sv_setiv
1630
1631 Copies an integer into the given SV, upgrading first if necessary.
1632 Does not handle 'set' magic.  See also C<L</sv_setiv_mg>>.
1633
1634 =cut
1635 */
1636
1637 void
1638 Perl_sv_setiv(pTHX_ SV *const sv, const IV i)
1639 {
1640     PERL_ARGS_ASSERT_SV_SETIV;
1641
1642     SV_CHECK_THINKFIRST_COW_DROP(sv);
1643     switch (SvTYPE(sv)) {
1644     case SVt_NULL:
1645     case SVt_NV:
1646         sv_upgrade(sv, SVt_IV);
1647         break;
1648     case SVt_PV:
1649         sv_upgrade(sv, SVt_PVIV);
1650         break;
1651
1652     case SVt_PVGV:
1653         if (!isGV_with_GP(sv))
1654             break;
1655         /* FALLTHROUGH */
1656     case SVt_PVAV:
1657     case SVt_PVHV:
1658     case SVt_PVCV:
1659     case SVt_PVFM:
1660     case SVt_PVIO:
1661         /* diag_listed_as: Can't coerce %s to %s in %s */
1662         Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1663                    OP_DESC(PL_op));
1664         NOT_REACHED; /* NOTREACHED */
1665         break;
1666     default: NOOP;
1667     }
1668     (void)SvIOK_only(sv);                       /* validate number */
1669     SvIV_set(sv, i);
1670     SvTAINT(sv);
1671 }
1672
1673 /*
1674 =for apidoc sv_setiv_mg
1675
1676 Like C<sv_setiv>, but also handles 'set' magic.
1677
1678 =cut
1679 */
1680
1681 void
1682 Perl_sv_setiv_mg(pTHX_ SV *const sv, const IV i)
1683 {
1684     PERL_ARGS_ASSERT_SV_SETIV_MG;
1685
1686     sv_setiv(sv,i);
1687     SvSETMAGIC(sv);
1688 }
1689
1690 /*
1691 =for apidoc sv_setuv
1692
1693 Copies an unsigned integer into the given SV, upgrading first if necessary.
1694 Does not handle 'set' magic.  See also C<L</sv_setuv_mg>>.
1695
1696 =cut
1697 */
1698
1699 void
1700 Perl_sv_setuv(pTHX_ SV *const sv, const UV u)
1701 {
1702     PERL_ARGS_ASSERT_SV_SETUV;
1703
1704     /* With the if statement to ensure that integers are stored as IVs whenever
1705        possible:
1706        u=1.49  s=0.52  cu=72.49  cs=10.64  scripts=270  tests=20865
1707
1708        without
1709        u=1.35  s=0.47  cu=73.45  cs=11.43  scripts=270  tests=20865
1710
1711        If you wish to remove the following if statement, so that this routine
1712        (and its callers) always return UVs, please benchmark to see what the
1713        effect is. Modern CPUs may be different. Or may not :-)
1714     */
1715     if (u <= (UV)IV_MAX) {
1716        sv_setiv(sv, (IV)u);
1717        return;
1718     }
1719     sv_setiv(sv, 0);
1720     SvIsUV_on(sv);
1721     SvUV_set(sv, u);
1722 }
1723
1724 /*
1725 =for apidoc sv_setuv_mg
1726
1727 Like C<sv_setuv>, but also handles 'set' magic.
1728
1729 =cut
1730 */
1731
1732 void
1733 Perl_sv_setuv_mg(pTHX_ SV *const sv, const UV u)
1734 {
1735     PERL_ARGS_ASSERT_SV_SETUV_MG;
1736
1737     sv_setuv(sv,u);
1738     SvSETMAGIC(sv);
1739 }
1740
1741 /*
1742 =for apidoc sv_setnv
1743
1744 Copies a double into the given SV, upgrading first if necessary.
1745 Does not handle 'set' magic.  See also C<L</sv_setnv_mg>>.
1746
1747 =cut
1748 */
1749
1750 void
1751 Perl_sv_setnv(pTHX_ SV *const sv, const NV num)
1752 {
1753     PERL_ARGS_ASSERT_SV_SETNV;
1754
1755     SV_CHECK_THINKFIRST_COW_DROP(sv);
1756     switch (SvTYPE(sv)) {
1757     case SVt_NULL:
1758     case SVt_IV:
1759         sv_upgrade(sv, SVt_NV);
1760         break;
1761     case SVt_PV:
1762     case SVt_PVIV:
1763         sv_upgrade(sv, SVt_PVNV);
1764         break;
1765
1766     case SVt_PVGV:
1767         if (!isGV_with_GP(sv))
1768             break;
1769         /* FALLTHROUGH */
1770     case SVt_PVAV:
1771     case SVt_PVHV:
1772     case SVt_PVCV:
1773     case SVt_PVFM:
1774     case SVt_PVIO:
1775         /* diag_listed_as: Can't coerce %s to %s in %s */
1776         Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1777                    OP_DESC(PL_op));
1778         NOT_REACHED; /* NOTREACHED */
1779         break;
1780     default: NOOP;
1781     }
1782     SvNV_set(sv, num);
1783     (void)SvNOK_only(sv);                       /* validate number */
1784     SvTAINT(sv);
1785 }
1786
1787 /*
1788 =for apidoc sv_setnv_mg
1789
1790 Like C<sv_setnv>, but also handles 'set' magic.
1791
1792 =cut
1793 */
1794
1795 void
1796 Perl_sv_setnv_mg(pTHX_ SV *const sv, const NV num)
1797 {
1798     PERL_ARGS_ASSERT_SV_SETNV_MG;
1799
1800     sv_setnv(sv,num);
1801     SvSETMAGIC(sv);
1802 }
1803
1804 /* Return a cleaned-up, printable version of sv, for non-numeric, or
1805  * not incrementable warning display.
1806  * Originally part of S_not_a_number().
1807  * The return value may be != tmpbuf.
1808  */
1809
1810 STATIC const char *
1811 S_sv_display(pTHX_ SV *const sv, char *tmpbuf, STRLEN tmpbuf_size) {
1812     const char *pv;
1813
1814      PERL_ARGS_ASSERT_SV_DISPLAY;
1815
1816      if (DO_UTF8(sv)) {
1817           SV *dsv = newSVpvs_flags("", SVs_TEMP);
1818           pv = sv_uni_display(dsv, sv, 32, UNI_DISPLAY_ISPRINT);
1819      } else {
1820           char *d = tmpbuf;
1821           const char * const limit = tmpbuf + tmpbuf_size - 8;
1822           /* each *s can expand to 4 chars + "...\0",
1823              i.e. need room for 8 chars */
1824         
1825           const char *s = SvPVX_const(sv);
1826           const char * const end = s + SvCUR(sv);
1827           for ( ; s < end && d < limit; s++ ) {
1828                int ch = *s & 0xFF;
1829                if (! isASCII(ch) && !isPRINT_LC(ch)) {
1830                     *d++ = 'M';
1831                     *d++ = '-';
1832
1833                     /* Map to ASCII "equivalent" of Latin1 */
1834                     ch = LATIN1_TO_NATIVE(NATIVE_TO_LATIN1(ch) & 127);
1835                }
1836                if (ch == '\n') {
1837                     *d++ = '\\';
1838                     *d++ = 'n';
1839                }
1840                else if (ch == '\r') {
1841                     *d++ = '\\';
1842                     *d++ = 'r';
1843                }
1844                else if (ch == '\f') {
1845                     *d++ = '\\';
1846                     *d++ = 'f';
1847                }
1848                else if (ch == '\\') {
1849                     *d++ = '\\';
1850                     *d++ = '\\';
1851                }
1852                else if (ch == '\0') {
1853                     *d++ = '\\';
1854                     *d++ = '0';
1855                }
1856                else if (isPRINT_LC(ch))
1857                     *d++ = ch;
1858                else {
1859                     *d++ = '^';
1860                     *d++ = toCTRL(ch);
1861                }
1862           }
1863           if (s < end) {
1864                *d++ = '.';
1865                *d++ = '.';
1866                *d++ = '.';
1867           }
1868           *d = '\0';
1869           pv = tmpbuf;
1870     }
1871
1872     return pv;
1873 }
1874
1875 /* Print an "isn't numeric" warning, using a cleaned-up,
1876  * printable version of the offending string
1877  */
1878
1879 STATIC void
1880 S_not_a_number(pTHX_ SV *const sv)
1881 {
1882      char tmpbuf[64];
1883      const char *pv;
1884
1885      PERL_ARGS_ASSERT_NOT_A_NUMBER;
1886
1887      pv = sv_display(sv, tmpbuf, sizeof(tmpbuf));
1888
1889     if (PL_op)
1890         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1891                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1892                     "Argument \"%s\" isn't numeric in %s", pv,
1893                     OP_DESC(PL_op));
1894     else
1895         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1896                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1897                     "Argument \"%s\" isn't numeric", pv);
1898 }
1899
1900 STATIC void
1901 S_not_incrementable(pTHX_ SV *const sv) {
1902      char tmpbuf[64];
1903      const char *pv;
1904
1905      PERL_ARGS_ASSERT_NOT_INCREMENTABLE;
1906
1907      pv = sv_display(sv, tmpbuf, sizeof(tmpbuf));
1908
1909      Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1910                  "Argument \"%s\" treated as 0 in increment (++)", pv);
1911 }
1912
1913 /*
1914 =for apidoc looks_like_number
1915
1916 Test if the content of an SV looks like a number (or is a number).
1917 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1918 non-numeric warning), even if your C<atof()> doesn't grok them.  Get-magic is
1919 ignored.
1920
1921 =cut
1922 */
1923
1924 I32
1925 Perl_looks_like_number(pTHX_ SV *const sv)
1926 {
1927     const char *sbegin;
1928     STRLEN len;
1929     int numtype;
1930
1931     PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER;
1932
1933     if (SvPOK(sv) || SvPOKp(sv)) {
1934         sbegin = SvPV_nomg_const(sv, len);
1935     }
1936     else
1937         return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1938     numtype = grok_number(sbegin, len, NULL);
1939     return ((numtype & IS_NUMBER_TRAILING)) ? 0 : numtype;
1940 }
1941
1942 STATIC bool
1943 S_glob_2number(pTHX_ GV * const gv)
1944 {
1945     PERL_ARGS_ASSERT_GLOB_2NUMBER;
1946
1947     /* We know that all GVs stringify to something that is not-a-number,
1948         so no need to test that.  */
1949     if (ckWARN(WARN_NUMERIC))
1950     {
1951         SV *const buffer = sv_newmortal();
1952         gv_efullname3(buffer, gv, "*");
1953         not_a_number(buffer);
1954     }
1955     /* We just want something true to return, so that S_sv_2iuv_common
1956         can tail call us and return true.  */
1957     return TRUE;
1958 }
1959
1960 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1961    until proven guilty, assume that things are not that bad... */
1962
1963 /*
1964    NV_PRESERVES_UV:
1965
1966    As 64 bit platforms often have an NV that doesn't preserve all bits of
1967    an IV (an assumption perl has been based on to date) it becomes necessary
1968    to remove the assumption that the NV always carries enough precision to
1969    recreate the IV whenever needed, and that the NV is the canonical form.
1970    Instead, IV/UV and NV need to be given equal rights. So as to not lose
1971    precision as a side effect of conversion (which would lead to insanity
1972    and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1973    1) to distinguish between IV/UV/NV slots that have a valid conversion cached
1974       where precision was lost, and IV/UV/NV slots that have a valid conversion
1975       which has lost no precision
1976    2) to ensure that if a numeric conversion to one form is requested that
1977       would lose precision, the precise conversion (or differently
1978       imprecise conversion) is also performed and cached, to prevent
1979       requests for different numeric formats on the same SV causing
1980       lossy conversion chains. (lossless conversion chains are perfectly
1981       acceptable (still))
1982
1983
1984    flags are used:
1985    SvIOKp is true if the IV slot contains a valid value
1986    SvIOK  is true only if the IV value is accurate (UV if SvIOK_UV true)
1987    SvNOKp is true if the NV slot contains a valid value
1988    SvNOK  is true only if the NV value is accurate
1989
1990    so
1991    while converting from PV to NV, check to see if converting that NV to an
1992    IV(or UV) would lose accuracy over a direct conversion from PV to
1993    IV(or UV). If it would, cache both conversions, return NV, but mark
1994    SV as IOK NOKp (ie not NOK).
1995
1996    While converting from PV to IV, check to see if converting that IV to an
1997    NV would lose accuracy over a direct conversion from PV to NV. If it
1998    would, cache both conversions, flag similarly.
1999
2000    Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
2001    correctly because if IV & NV were set NV *always* overruled.
2002    Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
2003    changes - now IV and NV together means that the two are interchangeable:
2004    SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
2005
2006    The benefit of this is that operations such as pp_add know that if
2007    SvIOK is true for both left and right operands, then integer addition
2008    can be used instead of floating point (for cases where the result won't
2009    overflow). Before, floating point was always used, which could lead to
2010    loss of precision compared with integer addition.
2011
2012    * making IV and NV equal status should make maths accurate on 64 bit
2013      platforms
2014    * may speed up maths somewhat if pp_add and friends start to use
2015      integers when possible instead of fp. (Hopefully the overhead in
2016      looking for SvIOK and checking for overflow will not outweigh the
2017      fp to integer speedup)
2018    * will slow down integer operations (callers of SvIV) on "inaccurate"
2019      values, as the change from SvIOK to SvIOKp will cause a call into
2020      sv_2iv each time rather than a macro access direct to the IV slot
2021    * should speed up number->string conversion on integers as IV is
2022      favoured when IV and NV are equally accurate
2023
2024    ####################################################################
2025    You had better be using SvIOK_notUV if you want an IV for arithmetic:
2026    SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
2027    On the other hand, SvUOK is true iff UV.
2028    ####################################################################
2029
2030    Your mileage will vary depending your CPU's relative fp to integer
2031    performance ratio.
2032 */
2033
2034 #ifndef NV_PRESERVES_UV
2035 #  define IS_NUMBER_UNDERFLOW_IV 1
2036 #  define IS_NUMBER_UNDERFLOW_UV 2
2037 #  define IS_NUMBER_IV_AND_UV    2
2038 #  define IS_NUMBER_OVERFLOW_IV  4
2039 #  define IS_NUMBER_OVERFLOW_UV  5
2040
2041 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
2042
2043 /* For sv_2nv these three cases are "SvNOK and don't bother casting"  */
2044 STATIC int
2045 S_sv_2iuv_non_preserve(pTHX_ SV *const sv
2046 #  ifdef DEBUGGING
2047                        , I32 numtype
2048 #  endif
2049                        )
2050 {
2051     PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE;
2052     PERL_UNUSED_CONTEXT;
2053
2054     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));
2055     if (SvNVX(sv) < (NV)IV_MIN) {
2056         (void)SvIOKp_on(sv);
2057         (void)SvNOK_on(sv);
2058         SvIV_set(sv, IV_MIN);
2059         return IS_NUMBER_UNDERFLOW_IV;
2060     }
2061     if (SvNVX(sv) > (NV)UV_MAX) {
2062         (void)SvIOKp_on(sv);
2063         (void)SvNOK_on(sv);
2064         SvIsUV_on(sv);
2065         SvUV_set(sv, UV_MAX);
2066         return IS_NUMBER_OVERFLOW_UV;
2067     }
2068     (void)SvIOKp_on(sv);
2069     (void)SvNOK_on(sv);
2070     /* Can't use strtol etc to convert this string.  (See truth table in
2071        sv_2iv  */
2072     if (SvNVX(sv) <= (UV)IV_MAX) {
2073         SvIV_set(sv, I_V(SvNVX(sv)));
2074         if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2075             SvIOK_on(sv); /* Integer is precise. NOK, IOK */
2076         } else {
2077             /* Integer is imprecise. NOK, IOKp */
2078         }
2079         return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
2080     }
2081     SvIsUV_on(sv);
2082     SvUV_set(sv, U_V(SvNVX(sv)));
2083     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2084         if (SvUVX(sv) == UV_MAX) {
2085             /* As we know that NVs don't preserve UVs, UV_MAX cannot
2086                possibly be preserved by NV. Hence, it must be overflow.
2087                NOK, IOKp */
2088             return IS_NUMBER_OVERFLOW_UV;
2089         }
2090         SvIOK_on(sv); /* Integer is precise. NOK, UOK */
2091     } else {
2092         /* Integer is imprecise. NOK, IOKp */
2093     }
2094     return IS_NUMBER_OVERFLOW_IV;
2095 }
2096 #endif /* !NV_PRESERVES_UV*/
2097
2098 /* If numtype is infnan, set the NV of the sv accordingly.
2099  * If numtype is anything else, try setting the NV using Atof(PV). */
2100 static void
2101 S_sv_setnv(pTHX_ SV* sv, int numtype)
2102 {
2103     bool pok = cBOOL(SvPOK(sv));
2104     bool nok = FALSE;
2105 #ifdef NV_INF
2106     if ((numtype & IS_NUMBER_INFINITY)) {
2107         SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -NV_INF : NV_INF);
2108         nok = TRUE;
2109     } else
2110 #endif
2111 #ifdef NV_NAN
2112     if ((numtype & IS_NUMBER_NAN)) {
2113         SvNV_set(sv, NV_NAN);
2114         nok = TRUE;
2115     } else
2116 #endif
2117     if (pok) {
2118         SvNV_set(sv, Atof(SvPVX_const(sv)));
2119         /* Purposefully no true nok here, since we don't want to blow
2120          * away the possible IOK/UV of an existing sv. */
2121     }
2122     if (nok) {
2123         SvNOK_only(sv); /* No IV or UV please, this is pure infnan. */
2124         if (pok)
2125             SvPOK_on(sv); /* PV is okay, though. */
2126     }
2127 }
2128
2129 STATIC bool
2130 S_sv_2iuv_common(pTHX_ SV *const sv)
2131 {
2132     PERL_ARGS_ASSERT_SV_2IUV_COMMON;
2133
2134     if (SvNOKp(sv)) {
2135         /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2136          * without also getting a cached IV/UV from it at the same time
2137          * (ie PV->NV conversion should detect loss of accuracy and cache
2138          * IV or UV at same time to avoid this. */
2139         /* IV-over-UV optimisation - choose to cache IV if possible */
2140
2141         if (SvTYPE(sv) == SVt_NV)
2142             sv_upgrade(sv, SVt_PVNV);
2143
2144         (void)SvIOKp_on(sv);    /* Must do this first, to clear any SvOOK */
2145         /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
2146            certainly cast into the IV range at IV_MAX, whereas the correct
2147            answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
2148            cases go to UV */
2149 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2150         if (Perl_isnan(SvNVX(sv))) {
2151             SvUV_set(sv, 0);
2152             SvIsUV_on(sv);
2153             return FALSE;
2154         }
2155 #endif
2156         if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2157             SvIV_set(sv, I_V(SvNVX(sv)));
2158             if (SvNVX(sv) == (NV) SvIVX(sv)
2159 #ifndef NV_PRESERVES_UV
2160                 && SvIVX(sv) != IV_MIN /* avoid negating IV_MIN below */
2161                 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2162                     (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2163                 /* Don't flag it as "accurately an integer" if the number
2164                    came from a (by definition imprecise) NV operation, and
2165                    we're outside the range of NV integer precision */
2166 #endif
2167                 ) {
2168                 if (SvNOK(sv))
2169                     SvIOK_on(sv);  /* Can this go wrong with rounding? NWC */
2170                 else {
2171                     /* scalar has trailing garbage, eg "42a" */
2172                 }
2173                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2174                                       "0x%" UVxf " iv(%" NVgf " => %" IVdf ") (precise)\n",
2175                                       PTR2UV(sv),
2176                                       SvNVX(sv),
2177                                       SvIVX(sv)));
2178
2179             } else {
2180                 /* IV not precise.  No need to convert from PV, as NV
2181                    conversion would already have cached IV if it detected
2182                    that PV->IV would be better than PV->NV->IV
2183                    flags already correct - don't set public IOK.  */
2184                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2185                                       "0x%" UVxf " iv(%" NVgf " => %" IVdf ") (imprecise)\n",
2186                                       PTR2UV(sv),
2187                                       SvNVX(sv),
2188                                       SvIVX(sv)));
2189             }
2190             /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2191                but the cast (NV)IV_MIN rounds to a the value less (more
2192                negative) than IV_MIN which happens to be equal to SvNVX ??
2193                Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2194                NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2195                (NV)UVX == NVX are both true, but the values differ. :-(
2196                Hopefully for 2s complement IV_MIN is something like
2197                0x8000000000000000 which will be exact. NWC */
2198         }
2199         else {
2200             SvUV_set(sv, U_V(SvNVX(sv)));
2201             if (
2202                 (SvNVX(sv) == (NV) SvUVX(sv))
2203 #ifndef  NV_PRESERVES_UV
2204                 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2205                 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2206                 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2207                 /* Don't flag it as "accurately an integer" if the number
2208                    came from a (by definition imprecise) NV operation, and
2209                    we're outside the range of NV integer precision */
2210 #endif
2211                 && SvNOK(sv)
2212                 )
2213                 SvIOK_on(sv);
2214             SvIsUV_on(sv);
2215             DEBUG_c(PerlIO_printf(Perl_debug_log,
2216                                   "0x%" UVxf " 2iv(%" UVuf " => %" IVdf ") (as unsigned)\n",
2217                                   PTR2UV(sv),
2218                                   SvUVX(sv),
2219                                   SvUVX(sv)));
2220         }
2221     }
2222     else if (SvPOKp(sv)) {
2223         UV value;
2224         int numtype;
2225         const char *s = SvPVX_const(sv);
2226         const STRLEN cur = SvCUR(sv);
2227
2228         /* short-cut for a single digit string like "1" */
2229
2230         if (cur == 1) {
2231             char c = *s;
2232             if (isDIGIT(c)) {
2233                 if (SvTYPE(sv) < SVt_PVIV)
2234                     sv_upgrade(sv, SVt_PVIV);
2235                 (void)SvIOK_on(sv);
2236                 SvIV_set(sv, (IV)(c - '0'));
2237                 return FALSE;
2238             }
2239         }
2240
2241         numtype = grok_number(s, cur, &value);
2242         /* We want to avoid a possible problem when we cache an IV/ a UV which
2243            may be later translated to an NV, and the resulting NV is not
2244            the same as the direct translation of the initial string
2245            (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2246            be careful to ensure that the value with the .456 is around if the
2247            NV value is requested in the future).
2248         
2249            This means that if we cache such an IV/a UV, we need to cache the
2250            NV as well.  Moreover, we trade speed for space, and do not
2251            cache the NV if we are sure it's not needed.
2252          */
2253
2254         /* SVt_PVNV is one higher than SVt_PVIV, hence this order  */
2255         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2256              == IS_NUMBER_IN_UV) {
2257             /* It's definitely an integer, only upgrade to PVIV */
2258             if (SvTYPE(sv) < SVt_PVIV)
2259                 sv_upgrade(sv, SVt_PVIV);
2260             (void)SvIOK_on(sv);
2261         } else if (SvTYPE(sv) < SVt_PVNV)
2262             sv_upgrade(sv, SVt_PVNV);
2263
2264         if ((numtype & (IS_NUMBER_INFINITY | IS_NUMBER_NAN))) {
2265             if (ckWARN(WARN_NUMERIC) && ((numtype & IS_NUMBER_TRAILING)))
2266                 not_a_number(sv);
2267             S_sv_setnv(aTHX_ sv, numtype);
2268             return FALSE;
2269         }
2270
2271         /* If NVs preserve UVs then we only use the UV value if we know that
2272            we aren't going to call atof() below. If NVs don't preserve UVs
2273            then the value returned may have more precision than atof() will
2274            return, even though value isn't perfectly accurate.  */
2275         if ((numtype & (IS_NUMBER_IN_UV
2276 #ifdef NV_PRESERVES_UV
2277                         | IS_NUMBER_NOT_INT
2278 #endif
2279             )) == IS_NUMBER_IN_UV) {
2280             /* This won't turn off the public IOK flag if it was set above  */
2281             (void)SvIOKp_on(sv);
2282
2283             if (!(numtype & IS_NUMBER_NEG)) {
2284                 /* positive */;
2285                 if (value <= (UV)IV_MAX) {
2286                     SvIV_set(sv, (IV)value);
2287                 } else {
2288                     /* it didn't overflow, and it was positive. */
2289                     SvUV_set(sv, value);
2290                     SvIsUV_on(sv);
2291                 }
2292             } else {
2293                 /* 2s complement assumption  */
2294                 if (value <= (UV)IV_MIN) {
2295                     SvIV_set(sv, value == (UV)IV_MIN
2296                                     ? IV_MIN : -(IV)value);
2297                 } else {
2298                     /* Too negative for an IV.  This is a double upgrade, but
2299                        I'm assuming it will be rare.  */
2300                     if (SvTYPE(sv) < SVt_PVNV)
2301                         sv_upgrade(sv, SVt_PVNV);
2302                     SvNOK_on(sv);
2303                     SvIOK_off(sv);
2304                     SvIOKp_on(sv);
2305                     SvNV_set(sv, -(NV)value);
2306                     SvIV_set(sv, IV_MIN);
2307                 }
2308             }
2309         }
2310         /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2311            will be in the previous block to set the IV slot, and the next
2312            block to set the NV slot.  So no else here.  */
2313         
2314         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2315             != IS_NUMBER_IN_UV) {
2316             /* It wasn't an (integer that doesn't overflow the UV). */
2317             S_sv_setnv(aTHX_ sv, numtype);
2318
2319             if (! numtype && ckWARN(WARN_NUMERIC))
2320                 not_a_number(sv);
2321
2322             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2iv(%" NVgf ")\n",
2323                                   PTR2UV(sv), SvNVX(sv)));
2324
2325 #ifdef NV_PRESERVES_UV
2326             (void)SvIOKp_on(sv);
2327             (void)SvNOK_on(sv);
2328 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2329             if (Perl_isnan(SvNVX(sv))) {
2330                 SvUV_set(sv, 0);
2331                 SvIsUV_on(sv);
2332                 return FALSE;
2333             }
2334 #endif
2335             if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2336                 SvIV_set(sv, I_V(SvNVX(sv)));
2337                 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2338                     SvIOK_on(sv);
2339                 } else {
2340                     NOOP;  /* Integer is imprecise. NOK, IOKp */
2341                 }
2342                 /* UV will not work better than IV */
2343             } else {
2344                 if (SvNVX(sv) > (NV)UV_MAX) {
2345                     SvIsUV_on(sv);
2346                     /* Integer is inaccurate. NOK, IOKp, is UV */
2347                     SvUV_set(sv, UV_MAX);
2348                 } else {
2349                     SvUV_set(sv, U_V(SvNVX(sv)));
2350                     /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2351                        NV preservse UV so can do correct comparison.  */
2352                     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2353                         SvIOK_on(sv);
2354                     } else {
2355                         NOOP;   /* Integer is imprecise. NOK, IOKp, is UV */
2356                     }
2357                 }
2358                 SvIsUV_on(sv);
2359             }
2360 #else /* NV_PRESERVES_UV */
2361             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2362                 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2363                 /* The IV/UV slot will have been set from value returned by
2364                    grok_number above.  The NV slot has just been set using
2365                    Atof.  */
2366                 SvNOK_on(sv);
2367                 assert (SvIOKp(sv));
2368             } else {
2369                 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2370                     U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2371                     /* Small enough to preserve all bits. */
2372                     (void)SvIOKp_on(sv);
2373                     SvNOK_on(sv);
2374                     SvIV_set(sv, I_V(SvNVX(sv)));
2375                     if ((NV)(SvIVX(sv)) == SvNVX(sv))
2376                         SvIOK_on(sv);
2377                     /* Assumption: first non-preserved integer is < IV_MAX,
2378                        this NV is in the preserved range, therefore: */
2379                     if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2380                           < (UV)IV_MAX)) {
2381                         Perl_croak(aTHX_ "sv_2iv assumed (U_V(fabs((double)SvNVX(sv))) < (UV)IV_MAX) but SvNVX(sv)=%" NVgf " U_V is 0x%" UVxf ", IV_MAX is 0x%" UVxf "\n", SvNVX(sv), U_V(SvNVX(sv)), (UV)IV_MAX);
2382                     }
2383                 } else {
2384                     /* IN_UV NOT_INT
2385                          0      0       already failed to read UV.
2386                          0      1       already failed to read UV.
2387                          1      0       you won't get here in this case. IV/UV
2388                                         slot set, public IOK, Atof() unneeded.
2389                          1      1       already read UV.
2390                        so there's no point in sv_2iuv_non_preserve() attempting
2391                        to use atol, strtol, strtoul etc.  */
2392 #  ifdef DEBUGGING
2393                     sv_2iuv_non_preserve (sv, numtype);
2394 #  else
2395                     sv_2iuv_non_preserve (sv);
2396 #  endif
2397                 }
2398             }
2399 #endif /* NV_PRESERVES_UV */
2400         /* It might be more code efficient to go through the entire logic above
2401            and conditionally set with SvIOKp_on() rather than SvIOK(), but it
2402            gets complex and potentially buggy, so more programmer efficient
2403            to do it this way, by turning off the public flags:  */
2404         if (!numtype)
2405             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2406         }
2407     }
2408     else {
2409         if (isGV_with_GP(sv))
2410             return glob_2number(MUTABLE_GV(sv));
2411
2412         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2413                 report_uninit(sv);
2414         if (SvTYPE(sv) < SVt_IV)
2415             /* Typically the caller expects that sv_any is not NULL now.  */
2416             sv_upgrade(sv, SVt_IV);
2417         /* Return 0 from the caller.  */
2418         return TRUE;
2419     }
2420     return FALSE;
2421 }
2422
2423 /*
2424 =for apidoc sv_2iv_flags
2425
2426 Return the integer value of an SV, doing any necessary string
2427 conversion.  If C<flags> has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.
2428 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2429
2430 =cut
2431 */
2432
2433 IV
2434 Perl_sv_2iv_flags(pTHX_ SV *const sv, const I32 flags)
2435 {
2436     PERL_ARGS_ASSERT_SV_2IV_FLAGS;
2437
2438     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2439          && SvTYPE(sv) != SVt_PVFM);
2440
2441     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2442         mg_get(sv);
2443
2444     if (SvROK(sv)) {
2445         if (SvAMAGIC(sv)) {
2446             SV * tmpstr;
2447             if (flags & SV_SKIP_OVERLOAD)
2448                 return 0;
2449             tmpstr = AMG_CALLunary(sv, numer_amg);
2450             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2451                 return SvIV(tmpstr);
2452             }
2453         }
2454         return PTR2IV(SvRV(sv));
2455     }
2456
2457     if (SvVALID(sv) || isREGEXP(sv)) {
2458         /* FBMs use the space for SvIVX and SvNVX for other purposes, so
2459            must not let them cache IVs.
2460            In practice they are extremely unlikely to actually get anywhere
2461            accessible by user Perl code - the only way that I'm aware of is when
2462            a constant subroutine which is used as the second argument to index.
2463
2464            Regexps have no SvIVX and SvNVX fields.
2465         */
2466         assert(SvPOKp(sv));
2467         {
2468             UV value;
2469             const char * const ptr =
2470                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2471             const int numtype
2472                 = grok_number(ptr, SvCUR(sv), &value);
2473
2474             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2475                 == IS_NUMBER_IN_UV) {
2476                 /* It's definitely an integer */
2477                 if (numtype & IS_NUMBER_NEG) {
2478                     if (value < (UV)IV_MIN)
2479                         return -(IV)value;
2480                 } else {
2481                     if (value < (UV)IV_MAX)
2482                         return (IV)value;
2483                 }
2484             }
2485
2486             /* Quite wrong but no good choices. */
2487             if ((numtype & IS_NUMBER_INFINITY)) {
2488                 return (numtype & IS_NUMBER_NEG) ? IV_MIN : IV_MAX;
2489             } else if ((numtype & IS_NUMBER_NAN)) {
2490                 return 0; /* So wrong. */
2491             }
2492
2493             if (!numtype) {
2494                 if (ckWARN(WARN_NUMERIC))
2495                     not_a_number(sv);
2496             }
2497             return I_V(Atof(ptr));
2498         }
2499     }
2500
2501     if (SvTHINKFIRST(sv)) {
2502         if (SvREADONLY(sv) && !SvOK(sv)) {
2503             if (ckWARN(WARN_UNINITIALIZED))
2504                 report_uninit(sv);
2505             return 0;
2506         }
2507     }
2508
2509     if (!SvIOKp(sv)) {
2510         if (S_sv_2iuv_common(aTHX_ sv))
2511             return 0;
2512     }
2513
2514     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2iv(%" IVdf ")\n",
2515         PTR2UV(sv),SvIVX(sv)));
2516     return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2517 }
2518
2519 /*
2520 =for apidoc sv_2uv_flags
2521
2522 Return the unsigned integer value of an SV, doing any necessary string
2523 conversion.  If C<flags> has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.
2524 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2525
2526 =for apidoc Amnh||SV_GMAGIC
2527
2528 =cut
2529 */
2530
2531 UV
2532 Perl_sv_2uv_flags(pTHX_ SV *const sv, const I32 flags)
2533 {
2534     PERL_ARGS_ASSERT_SV_2UV_FLAGS;
2535
2536     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2537         mg_get(sv);
2538
2539     if (SvROK(sv)) {
2540         if (SvAMAGIC(sv)) {
2541             SV *tmpstr;
2542             if (flags & SV_SKIP_OVERLOAD)
2543                 return 0;
2544             tmpstr = AMG_CALLunary(sv, numer_amg);
2545             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2546                 return SvUV(tmpstr);
2547             }
2548         }
2549         return PTR2UV(SvRV(sv));
2550     }
2551
2552     if (SvVALID(sv) || isREGEXP(sv)) {
2553         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2554            the same flag bit as SVf_IVisUV, so must not let them cache IVs.  
2555            Regexps have no SvIVX and SvNVX fields. */
2556         assert(SvPOKp(sv));
2557         {
2558             UV value;
2559             const char * const ptr =
2560                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2561             const int numtype
2562                 = grok_number(ptr, SvCUR(sv), &value);
2563
2564             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2565                 == IS_NUMBER_IN_UV) {
2566                 /* It's definitely an integer */
2567                 if (!(numtype & IS_NUMBER_NEG))
2568                     return value;
2569             }
2570
2571             /* Quite wrong but no good choices. */
2572             if ((numtype & IS_NUMBER_INFINITY)) {
2573                 return UV_MAX; /* So wrong. */
2574             } else if ((numtype & IS_NUMBER_NAN)) {
2575                 return 0; /* So wrong. */
2576             }
2577
2578             if (!numtype) {
2579                 if (ckWARN(WARN_NUMERIC))
2580                     not_a_number(sv);
2581             }
2582             return U_V(Atof(ptr));
2583         }
2584     }
2585
2586     if (SvTHINKFIRST(sv)) {
2587         if (SvREADONLY(sv) && !SvOK(sv)) {
2588             if (ckWARN(WARN_UNINITIALIZED))
2589                 report_uninit(sv);
2590             return 0;
2591         }
2592     }
2593
2594     if (!SvIOKp(sv)) {
2595         if (S_sv_2iuv_common(aTHX_ sv))
2596             return 0;
2597     }
2598
2599     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2uv(%" UVuf ")\n",
2600                           PTR2UV(sv),SvUVX(sv)));
2601     return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2602 }
2603
2604 /*
2605 =for apidoc sv_2nv_flags
2606
2607 Return the num value of an SV, doing any necessary string or integer
2608 conversion.  If C<flags> has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.
2609 Normally used via the C<SvNV(sv)> and C<SvNVx(sv)> macros.
2610
2611 =cut
2612 */
2613
2614 NV
2615 Perl_sv_2nv_flags(pTHX_ SV *const sv, const I32 flags)
2616 {
2617     PERL_ARGS_ASSERT_SV_2NV_FLAGS;
2618
2619     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2620          && SvTYPE(sv) != SVt_PVFM);
2621     if (SvGMAGICAL(sv) || SvVALID(sv) || isREGEXP(sv)) {
2622         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2623            the same flag bit as SVf_IVisUV, so must not let them cache NVs.
2624            Regexps have no SvIVX and SvNVX fields.  */
2625         const char *ptr;
2626         if (flags & SV_GMAGIC)
2627             mg_get(sv);
2628         if (SvNOKp(sv))
2629             return SvNVX(sv);
2630         if (SvPOKp(sv) && !SvIOKp(sv)) {
2631             ptr = SvPVX_const(sv);
2632             if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2633                 !grok_number(ptr, SvCUR(sv), NULL))
2634                 not_a_number(sv);
2635             return Atof(ptr);
2636         }
2637         if (SvIOKp(sv)) {
2638             if (SvIsUV(sv))
2639                 return (NV)SvUVX(sv);
2640             else
2641                 return (NV)SvIVX(sv);
2642         }
2643         if (SvROK(sv)) {
2644             goto return_rok;
2645         }
2646         assert(SvTYPE(sv) >= SVt_PVMG);
2647         /* This falls through to the report_uninit near the end of the
2648            function. */
2649     } else if (SvTHINKFIRST(sv)) {
2650         if (SvROK(sv)) {
2651         return_rok:
2652             if (SvAMAGIC(sv)) {
2653                 SV *tmpstr;
2654                 if (flags & SV_SKIP_OVERLOAD)
2655                     return 0;
2656                 tmpstr = AMG_CALLunary(sv, numer_amg);
2657                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2658                     return SvNV(tmpstr);
2659                 }
2660             }
2661             return PTR2NV(SvRV(sv));
2662         }
2663         if (SvREADONLY(sv) && !SvOK(sv)) {
2664             if (ckWARN(WARN_UNINITIALIZED))
2665                 report_uninit(sv);
2666             return 0.0;
2667         }
2668     }
2669     if (SvTYPE(sv) < SVt_NV) {
2670         /* The logic to use SVt_PVNV if necessary is in sv_upgrade.  */
2671         sv_upgrade(sv, SVt_NV);
2672         CLANG_DIAG_IGNORE_STMT(-Wthread-safety);
2673         DEBUG_c({
2674             DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
2675             STORE_LC_NUMERIC_SET_STANDARD();
2676             PerlIO_printf(Perl_debug_log,
2677                           "0x%" UVxf " num(%" NVgf ")\n",
2678                           PTR2UV(sv), SvNVX(sv));
2679             RESTORE_LC_NUMERIC();
2680         });
2681         CLANG_DIAG_RESTORE_STMT;
2682
2683     }
2684     else if (SvTYPE(sv) < SVt_PVNV)
2685         sv_upgrade(sv, SVt_PVNV);
2686     if (SvNOKp(sv)) {
2687         return SvNVX(sv);
2688     }
2689     if (SvIOKp(sv)) {
2690         SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2691 #ifdef NV_PRESERVES_UV
2692         if (SvIOK(sv))
2693             SvNOK_on(sv);
2694         else
2695             SvNOKp_on(sv);
2696 #else
2697         /* Only set the public NV OK flag if this NV preserves the IV  */
2698         /* Check it's not 0xFFFFFFFFFFFFFFFF */
2699         if (SvIOK(sv) &&
2700             SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2701                        : (SvIVX(sv) == I_V(SvNVX(sv))))
2702             SvNOK_on(sv);
2703         else
2704             SvNOKp_on(sv);
2705 #endif
2706     }
2707     else if (SvPOKp(sv)) {
2708         UV value;
2709         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2710         if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2711             not_a_number(sv);
2712 #ifdef NV_PRESERVES_UV
2713         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2714             == IS_NUMBER_IN_UV) {
2715             /* It's definitely an integer */
2716             SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2717         } else {
2718             S_sv_setnv(aTHX_ sv, numtype);
2719         }
2720         if (numtype)
2721             SvNOK_on(sv);
2722         else
2723             SvNOKp_on(sv);
2724 #else
2725         SvNV_set(sv, Atof(SvPVX_const(sv)));
2726         /* Only set the public NV OK flag if this NV preserves the value in
2727            the PV at least as well as an IV/UV would.
2728            Not sure how to do this 100% reliably. */
2729         /* if that shift count is out of range then Configure's test is
2730            wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2731            UV_BITS */
2732         if (((UV)1 << NV_PRESERVES_UV_BITS) >
2733             U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2734             SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2735         } else if (!(numtype & IS_NUMBER_IN_UV)) {
2736             /* Can't use strtol etc to convert this string, so don't try.
2737                sv_2iv and sv_2uv will use the NV to convert, not the PV.  */
2738             SvNOK_on(sv);
2739         } else {
2740             /* value has been set.  It may not be precise.  */
2741             if ((numtype & IS_NUMBER_NEG) && (value >= (UV)IV_MIN)) {
2742                 /* 2s complement assumption for (UV)IV_MIN  */
2743                 SvNOK_on(sv); /* Integer is too negative.  */
2744             } else {
2745                 SvNOKp_on(sv);
2746                 SvIOKp_on(sv);
2747
2748                 if (numtype & IS_NUMBER_NEG) {
2749                     /* -IV_MIN is undefined, but we should never reach
2750                      * this point with both IS_NUMBER_NEG and value ==
2751                      * (UV)IV_MIN */
2752                     assert(value != (UV)IV_MIN);
2753                     SvIV_set(sv, -(IV)value);
2754                 } else if (value <= (UV)IV_MAX) {
2755                     SvIV_set(sv, (IV)value);
2756                 } else {
2757                     SvUV_set(sv, value);
2758                     SvIsUV_on(sv);
2759                 }
2760
2761                 if (numtype & IS_NUMBER_NOT_INT) {
2762                     /* I believe that even if the original PV had decimals,
2763                        they are lost beyond the limit of the FP precision.
2764                        However, neither is canonical, so both only get p
2765                        flags.  NWC, 2000/11/25 */
2766                     /* Both already have p flags, so do nothing */
2767                 } else {
2768                     const NV nv = SvNVX(sv);
2769                     /* XXX should this spot have NAN_COMPARE_BROKEN, too? */
2770                     if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2771                         if (SvIVX(sv) == I_V(nv)) {
2772                             SvNOK_on(sv);
2773                         } else {
2774                             /* It had no "." so it must be integer.  */
2775                         }
2776                         SvIOK_on(sv);
2777                     } else {
2778                         /* between IV_MAX and NV(UV_MAX).
2779                            Could be slightly > UV_MAX */
2780
2781                         if (numtype & IS_NUMBER_NOT_INT) {
2782                             /* UV and NV both imprecise.  */
2783                         } else {
2784                             const UV nv_as_uv = U_V(nv);
2785
2786                             if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2787                                 SvNOK_on(sv);
2788                             }
2789                             SvIOK_on(sv);
2790                         }
2791                     }
2792                 }
2793             }
2794         }
2795         /* It might be more code efficient to go through the entire logic above
2796            and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2797            gets complex and potentially buggy, so more programmer efficient
2798            to do it this way, by turning off the public flags:  */
2799         if (!numtype)
2800             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2801 #endif /* NV_PRESERVES_UV */
2802     }
2803     else {
2804         if (isGV_with_GP(sv)) {
2805             glob_2number(MUTABLE_GV(sv));
2806             return 0.0;
2807         }
2808
2809         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2810             report_uninit(sv);
2811         assert (SvTYPE(sv) >= SVt_NV);
2812         /* Typically the caller expects that sv_any is not NULL now.  */
2813         /* XXX Ilya implies that this is a bug in callers that assume this
2814            and ideally should be fixed.  */
2815         return 0.0;
2816     }
2817     CLANG_DIAG_IGNORE_STMT(-Wthread-safety);
2818     DEBUG_c({
2819         DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
2820         STORE_LC_NUMERIC_SET_STANDARD();
2821         PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2nv(%" NVgf ")\n",
2822                       PTR2UV(sv), SvNVX(sv));
2823         RESTORE_LC_NUMERIC();
2824     });
2825     CLANG_DIAG_RESTORE_STMT;
2826     return SvNVX(sv);
2827 }
2828
2829 /*
2830 =for apidoc sv_2num
2831
2832 Return an SV with the numeric value of the source SV, doing any necessary
2833 reference or overload conversion.  The caller is expected to have handled
2834 get-magic already.
2835
2836 =cut
2837 */
2838
2839 SV *
2840 Perl_sv_2num(pTHX_ SV *const sv)
2841 {
2842     PERL_ARGS_ASSERT_SV_2NUM;
2843
2844     if (!SvROK(sv))
2845         return sv;
2846     if (SvAMAGIC(sv)) {
2847         SV * const tmpsv = AMG_CALLunary(sv, numer_amg);
2848         TAINT_IF(tmpsv && SvTAINTED(tmpsv));
2849         if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2850             return sv_2num(tmpsv);
2851     }
2852     return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2853 }
2854
2855 /* int2str_table: lookup table containing string representations of all
2856  * two digit numbers. For example, int2str_table.arr[0] is "00" and
2857  * int2str_table.arr[12*2] is "12".
2858  *
2859  * We are going to read two bytes at a time, so we have to ensure that
2860  * the array is aligned to a 2 byte boundary. That's why it was made a
2861  * union with a dummy U16 member. */
2862 static const union {
2863     char arr[200];
2864     U16 dummy;
2865 } int2str_table = {{
2866     '0', '0', '0', '1', '0', '2', '0', '3', '0', '4', '0', '5', '0', '6',
2867     '0', '7', '0', '8', '0', '9', '1', '0', '1', '1', '1', '2', '1', '3',
2868     '1', '4', '1', '5', '1', '6', '1', '7', '1', '8', '1', '9', '2', '0',
2869     '2', '1', '2', '2', '2', '3', '2', '4', '2', '5', '2', '6', '2', '7',
2870     '2', '8', '2', '9', '3', '0', '3', '1', '3', '2', '3', '3', '3', '4',
2871     '3', '5', '3', '6', '3', '7', '3', '8', '3', '9', '4', '0', '4', '1',
2872     '4', '2', '4', '3', '4', '4', '4', '5', '4', '6', '4', '7', '4', '8',
2873     '4', '9', '5', '0', '5', '1', '5', '2', '5', '3', '5', '4', '5', '5',
2874     '5', '6', '5', '7', '5', '8', '5', '9', '6', '0', '6', '1', '6', '2',
2875     '6', '3', '6', '4', '6', '5', '6', '6', '6', '7', '6', '8', '6', '9',
2876     '7', '0', '7', '1', '7', '2', '7', '3', '7', '4', '7', '5', '7', '6',
2877     '7', '7', '7', '8', '7', '9', '8', '0', '8', '1', '8', '2', '8', '3',
2878     '8', '4', '8', '5', '8', '6', '8', '7', '8', '8', '8', '9', '9', '0',
2879     '9', '1', '9', '2', '9', '3', '9', '4', '9', '5', '9', '6', '9', '7',
2880     '9', '8', '9', '9'
2881 }};
2882
2883 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2884  * UV as a string towards the end of buf, and return pointers to start and
2885  * end of it.
2886  *
2887  * We assume that buf is at least TYPE_CHARS(UV) long.
2888  */
2889
2890 PERL_STATIC_INLINE char *
2891 S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
2892 {
2893     char *ptr = buf + TYPE_CHARS(UV);
2894     char * const ebuf = ptr;
2895     int sign;
2896     U16 *word_ptr, *word_table;
2897
2898     PERL_ARGS_ASSERT_UIV_2BUF;
2899
2900     /* ptr has to be properly aligned, because we will cast it to U16* */
2901     assert(PTR2nat(ptr) % 2 == 0);
2902     /* we are going to read/write two bytes at a time */
2903     word_ptr = (U16*)ptr;
2904     word_table = (U16*)int2str_table.arr;
2905
2906     if (UNLIKELY(is_uv))
2907         sign = 0;
2908     else if (iv >= 0) {
2909         uv = iv;
2910         sign = 0;
2911     } else {
2912         /* Using 0- here to silence bogus warning from MS VC */
2913         uv = (UV) (0 - (UV) iv);
2914         sign = 1;
2915     }
2916
2917     while (uv > 99) {
2918         *--word_ptr = word_table[uv % 100];
2919         uv /= 100;
2920     }
2921     ptr = (char*)word_ptr;
2922
2923     if (uv < 10)
2924         *--ptr = (char)uv + '0';
2925     else {
2926         *--word_ptr = word_table[uv];
2927         ptr = (char*)word_ptr;
2928     }
2929
2930     if (sign)
2931         *--ptr = '-';
2932
2933     *peob = ebuf;
2934     return ptr;
2935 }
2936
2937 /* Helper for sv_2pv_flags and sv_vcatpvfn_flags.  If the NV is an
2938  * infinity or a not-a-number, writes the appropriate strings to the
2939  * buffer, including a zero byte.  On success returns the written length,
2940  * excluding the zero byte, on failure (not an infinity, not a nan)
2941  * returns zero, assert-fails on maxlen being too short.
2942  *
2943  * XXX for "Inf", "-Inf", and "NaN", we could have three read-only
2944  * shared string constants we point to, instead of generating a new
2945  * string for each instance. */
2946 STATIC size_t
2947 S_infnan_2pv(NV nv, char* buffer, size_t maxlen, char plus) {
2948     char* s = buffer;
2949     assert(maxlen >= 4);
2950     if (Perl_isinf(nv)) {
2951         if (nv < 0) {
2952             if (maxlen < 5) /* "-Inf\0"  */
2953                 return 0;
2954             *s++ = '-';
2955         } else if (plus) {
2956             *s++ = '+';
2957         }
2958         *s++ = 'I';
2959         *s++ = 'n';
2960         *s++ = 'f';
2961     }
2962     else if (Perl_isnan(nv)) {
2963         *s++ = 'N';
2964         *s++ = 'a';
2965         *s++ = 'N';
2966         /* XXX optionally output the payload mantissa bits as
2967          * "(unsigned)" (to match the nan("...") C99 function,
2968          * or maybe as "(0xhhh...)"  would make more sense...
2969          * provide a format string so that the user can decide?
2970          * NOTE: would affect the maxlen and assert() logic.*/
2971     }
2972     else {
2973       return 0;
2974     }
2975     assert((s == buffer + 3) || (s == buffer + 4));
2976     *s = 0;
2977     return s - buffer;
2978 }
2979
2980 /*
2981 =for apidoc sv_2pv_flags
2982
2983 Returns a pointer to the string value of an SV, and sets C<*lp> to its length.
2984 If flags has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.  Coerces C<sv> to a
2985 string if necessary.  Normally invoked via the C<SvPV_flags> macro.
2986 C<sv_2pv()> and C<sv_2pv_nomg> usually end up here too.
2987
2988 =cut
2989 */
2990
2991 char *
2992 Perl_sv_2pv_flags(pTHX_ SV *const sv, STRLEN *const lp, const U32 flags)
2993 {
2994     char *s;
2995
2996     PERL_ARGS_ASSERT_SV_2PV_FLAGS;
2997
2998     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2999          && SvTYPE(sv) != SVt_PVFM);
3000     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
3001         mg_get(sv);
3002     if (SvROK(sv)) {
3003         if (SvAMAGIC(sv)) {
3004             SV *tmpstr;
3005             if (flags & SV_SKIP_OVERLOAD)
3006                 return NULL;
3007             tmpstr = AMG_CALLunary(sv, string_amg);
3008             TAINT_IF(tmpstr && SvTAINTED(tmpstr));
3009             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
3010                 /* Unwrap this:  */
3011                 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
3012                  */
3013
3014                 char *pv;
3015                 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
3016                     if (flags & SV_CONST_RETURN) {
3017                         pv = (char *) SvPVX_const(tmpstr);
3018                     } else {
3019                         pv = (flags & SV_MUTABLE_RETURN)
3020                             ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
3021                     }
3022                     if (lp)
3023                         *lp = SvCUR(tmpstr);
3024                 } else {
3025                     pv = sv_2pv_flags(tmpstr, lp, flags);
3026                 }
3027                 if (SvUTF8(tmpstr))
3028                     SvUTF8_on(sv);
3029                 else
3030                     SvUTF8_off(sv);
3031                 return pv;
3032             }
3033         }
3034         {
3035             STRLEN len;
3036             char *retval;
3037             char *buffer;
3038             SV *const referent = SvRV(sv);
3039
3040             if (!referent) {
3041                 len = 7;
3042                 retval = buffer = savepvn("NULLREF", len);
3043             } else if (SvTYPE(referent) == SVt_REGEXP &&
3044                        (!(PL_curcop->cop_hints & HINT_NO_AMAGIC) ||
3045                         amagic_is_enabled(string_amg))) {
3046                 REGEXP * const re = (REGEXP *)MUTABLE_PTR(referent);
3047
3048                 assert(re);
3049                         
3050                 /* If the regex is UTF-8 we want the containing scalar to
3051                    have an UTF-8 flag too */
3052                 if (RX_UTF8(re))
3053                     SvUTF8_on(sv);
3054                 else
3055                     SvUTF8_off(sv);     
3056
3057                 if (lp)
3058                     *lp = RX_WRAPLEN(re);
3059  
3060                 return RX_WRAPPED(re);
3061             } else {
3062                 const char *const typestring = sv_reftype(referent, 0);
3063                 const STRLEN typelen = strlen(typestring);
3064                 UV addr = PTR2UV(referent);
3065                 const char *stashname = NULL;
3066                 STRLEN stashnamelen = 0; /* hush, gcc */
3067                 const char *buffer_end;
3068
3069                 if (SvOBJECT(referent)) {
3070                     const HEK *const name = HvNAME_HEK(SvSTASH(referent));
3071
3072                     if (name) {
3073                         stashname = HEK_KEY(name);
3074                         stashnamelen = HEK_LEN(name);
3075
3076                         if (HEK_UTF8(name)) {
3077                             SvUTF8_on(sv);
3078                         } else {
3079                             SvUTF8_off(sv);
3080                         }
3081                     } else {
3082                         stashname = "__ANON__";
3083                         stashnamelen = 8;
3084                     }
3085                     len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
3086                         + 2 * sizeof(UV) + 2 /* )\0 */;
3087                 } else {
3088                     len = typelen + 3 /* (0x */
3089                         + 2 * sizeof(UV) + 2 /* )\0 */;
3090                 }
3091
3092                 Newx(buffer, len, char);
3093                 buffer_end = retval = buffer + len;
3094
3095                 /* Working backwards  */
3096                 *--retval = '\0';
3097                 *--retval = ')';
3098                 do {
3099                     *--retval = PL_hexdigit[addr & 15];
3100                 } while (addr >>= 4);
3101                 *--retval = 'x';
3102                 *--retval = '0';
3103                 *--retval = '(';
3104
3105                 retval -= typelen;
3106                 memcpy(retval, typestring, typelen);
3107
3108                 if (stashname) {
3109                     *--retval = '=';
3110                     retval -= stashnamelen;
3111                     memcpy(retval, stashname, stashnamelen);
3112                 }
3113                 /* retval may not necessarily have reached the start of the
3114                    buffer here.  */
3115                 assert (retval >= buffer);
3116
3117                 len = buffer_end - retval - 1; /* -1 for that \0  */
3118             }
3119             if (lp)
3120                 *lp = len;
3121             SAVEFREEPV(buffer);
3122             return retval;
3123         }
3124     }
3125
3126     if (SvPOKp(sv)) {
3127         if (lp)
3128             *lp = SvCUR(sv);
3129         if (flags & SV_MUTABLE_RETURN)
3130             return SvPVX_mutable(sv);
3131         if (flags & SV_CONST_RETURN)
3132             return (char *)SvPVX_const(sv);
3133         return SvPVX(sv);
3134     }
3135
3136     if (SvIOK(sv)) {
3137         /* I'm assuming that if both IV and NV are equally valid then
3138            converting the IV is going to be more efficient */
3139         const U32 isUIOK = SvIsUV(sv);
3140         /* The purpose of this union is to ensure that arr is aligned on
3141            a 2 byte boundary, because that is what uiv_2buf() requires */
3142         union {
3143             char arr[TYPE_CHARS(UV)];
3144             U16 dummy;
3145         } buf;
3146         char *ebuf, *ptr;
3147         STRLEN len;
3148
3149         if (SvTYPE(sv) < SVt_PVIV)
3150             sv_upgrade(sv, SVt_PVIV);
3151         ptr = uiv_2buf(buf.arr, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
3152         len = ebuf - ptr;
3153         /* inlined from sv_setpvn */
3154         s = SvGROW_mutable(sv, len + 1);
3155         Move(ptr, s, len, char);
3156         s += len;
3157         *s = '\0';
3158         SvPOK_on(sv);
3159     }
3160     else if (SvNOK(sv)) {
3161         if (SvTYPE(sv) < SVt_PVNV)
3162             sv_upgrade(sv, SVt_PVNV);
3163         if (SvNVX(sv) == 0.0
3164 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
3165             && !Perl_isnan(SvNVX(sv))
3166 #endif
3167         ) {
3168             s = SvGROW_mutable(sv, 2);
3169             *s++ = '0';
3170             *s = '\0';
3171         } else {
3172             STRLEN len;
3173             STRLEN size = 5; /* "-Inf\0" */
3174
3175             s = SvGROW_mutable(sv, size);
3176             len = S_infnan_2pv(SvNVX(sv), s, size, 0);
3177             if (len > 0) {
3178                 s += len;
3179                 SvPOK_on(sv);
3180             }
3181             else {
3182                 /* some Xenix systems wipe out errno here */
3183                 dSAVE_ERRNO;
3184
3185                 size =
3186                     1 + /* sign */
3187                     1 + /* "." */
3188                     NV_DIG +
3189                     1 + /* "e" */
3190                     1 + /* sign */
3191                     5 + /* exponent digits */
3192                     1 + /* \0 */
3193                     2; /* paranoia */
3194
3195                 s = SvGROW_mutable(sv, size);
3196 #ifndef USE_LOCALE_NUMERIC
3197                 SNPRINTF_G(SvNVX(sv), s, SvLEN(sv), NV_DIG);
3198
3199                 SvPOK_on(sv);
3200 #else
3201                 {
3202                     bool local_radix;
3203                     DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
3204                     STORE_LC_NUMERIC_SET_TO_NEEDED();
3205
3206                     local_radix = _NOT_IN_NUMERIC_STANDARD;
3207                     if (local_radix && SvCUR(PL_numeric_radix_sv) > 1) {
3208                         size += SvCUR(PL_numeric_radix_sv) - 1;
3209                         s = SvGROW_mutable(sv, size);
3210                     }
3211
3212                     SNPRINTF_G(SvNVX(sv), s, SvLEN(sv), NV_DIG);
3213
3214                     /* If the radix character is UTF-8, and actually is in the
3215                      * output, turn on the UTF-8 flag for the scalar */
3216                     if (   local_radix
3217                         && SvUTF8(PL_numeric_radix_sv)
3218                         && instr(s, SvPVX_const(PL_numeric_radix_sv)))
3219                     {
3220                         SvUTF8_on(sv);
3221                     }
3222
3223                     RESTORE_LC_NUMERIC();
3224                 }
3225
3226                 /* We don't call SvPOK_on(), because it may come to
3227                  * pass that the locale changes so that the
3228                  * stringification we just did is no longer correct.  We
3229                  * will have to re-stringify every time it is needed */
3230 #endif
3231                 RESTORE_ERRNO;
3232             }
3233             while (*s) s++;
3234         }
3235     }
3236     else if (isGV_with_GP(sv)) {
3237         GV *const gv = MUTABLE_GV(sv);
3238         SV *const buffer = sv_newmortal();
3239
3240         gv_efullname3(buffer, gv, "*");
3241
3242         assert(SvPOK(buffer));
3243         if (SvUTF8(buffer))
3244             SvUTF8_on(sv);
3245         else
3246             SvUTF8_off(sv);
3247         if (lp)
3248             *lp = SvCUR(buffer);
3249         return SvPVX(buffer);
3250     }
3251     else {
3252         if (lp)
3253             *lp = 0;
3254         if (flags & SV_UNDEF_RETURNS_NULL)
3255             return NULL;
3256         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
3257             report_uninit(sv);
3258         /* Typically the caller expects that sv_any is not NULL now.  */
3259         if (!SvREADONLY(sv) && SvTYPE(sv) < SVt_PV)
3260             sv_upgrade(sv, SVt_PV);
3261         return (char *)"";
3262     }
3263
3264     {
3265         const STRLEN len = s - SvPVX_const(sv);
3266         if (lp) 
3267             *lp = len;
3268         SvCUR_set(sv, len);
3269     }
3270     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2pv(%s)\n",
3271                           PTR2UV(sv),SvPVX_const(sv)));
3272     if (flags & SV_CONST_RETURN)
3273         return (char *)SvPVX_const(sv);
3274     if (flags & SV_MUTABLE_RETURN)
3275         return SvPVX_mutable(sv);
3276     return SvPVX(sv);
3277 }
3278
3279 /*
3280 =for apidoc sv_copypv
3281
3282 Copies a stringified representation of the source SV into the
3283 destination SV.  Automatically performs any necessary C<L</mg_get>> and
3284 coercion of numeric values into strings.  Guaranteed to preserve
3285 C<UTF8> flag even from overloaded objects.  Similar in nature to
3286 C<sv_2pv[_flags]> but operates directly on an SV instead of just the
3287 string.  Mostly uses C<sv_2pv_flags> to do its work, except when that
3288 would lose the UTF-8'ness of the PV.
3289
3290 =for apidoc sv_copypv_nomg
3291
3292 Like C<sv_copypv>, but doesn't invoke get magic first.
3293
3294 =for apidoc sv_copypv_flags
3295
3296 Implementation of C<sv_copypv> and C<sv_copypv_nomg>.  Calls get magic iff flags
3297 has the C<SV_GMAGIC> bit set.
3298
3299 =cut
3300 */
3301
3302 void
3303 Perl_sv_copypv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
3304 {
3305     STRLEN len;
3306     const char *s;
3307
3308     PERL_ARGS_ASSERT_SV_COPYPV_FLAGS;
3309
3310     s = SvPV_flags_const(ssv,len,(flags & SV_GMAGIC));
3311     sv_setpvn(dsv,s,len);
3312     if (SvUTF8(ssv))
3313         SvUTF8_on(dsv);
3314     else
3315         SvUTF8_off(dsv);
3316 }
3317
3318 /*
3319 =for apidoc sv_2pvbyte
3320
3321 Return a pointer to the byte-encoded representation of the SV, and set C<*lp>
3322 to its length.  If the SV is marked as being encoded as UTF-8, it will
3323 downgrade it to a byte string as a side-effect, if possible.  If the SV cannot
3324 be downgraded, this croaks.
3325
3326 Usually accessed via the C<SvPVbyte> macro.
3327
3328 =cut
3329 */
3330
3331 char *
3332 Perl_sv_2pvbyte_flags(pTHX_ SV *sv, STRLEN *const lp, const U32 flags)
3333 {
3334     PERL_ARGS_ASSERT_SV_2PVBYTE_FLAGS;
3335
3336     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
3337         mg_get(sv);
3338     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3339      || isGV_with_GP(sv) || SvROK(sv)) {
3340         SV *sv2 = sv_newmortal();
3341         sv_copypv_nomg(sv2,sv);
3342         sv = sv2;
3343     }
3344     sv_utf8_downgrade_nomg(sv,0);
3345     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3346 }
3347
3348 /*
3349 =for apidoc sv_2pvutf8
3350
3351 Return a pointer to the UTF-8-encoded representation of the SV, and set C<*lp>
3352 to its length.  May cause the SV to be upgraded to UTF-8 as a side-effect.
3353
3354 Usually accessed via the C<SvPVutf8> macro.
3355
3356 =cut
3357 */
3358
3359 char *
3360 Perl_sv_2pvutf8_flags(pTHX_ SV *sv, STRLEN *const lp, const U32 flags)
3361 {
3362     PERL_ARGS_ASSERT_SV_2PVUTF8_FLAGS;
3363
3364     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
3365         mg_get(sv);
3366     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3367      || isGV_with_GP(sv) || SvROK(sv)) {
3368         SV *sv2 = sv_newmortal();
3369         sv_copypv_nomg(sv2,sv);
3370         sv = sv2;
3371     }
3372     sv_utf8_upgrade_nomg(sv);
3373     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3374 }
3375
3376
3377 /*
3378 =for apidoc sv_2bool
3379
3380 This macro is only used by C<sv_true()> or its macro equivalent, and only if
3381 the latter's argument is neither C<SvPOK>, C<SvIOK> nor C<SvNOK>.
3382 It calls C<sv_2bool_flags> with the C<SV_GMAGIC> flag.
3383
3384 =for apidoc sv_2bool_flags
3385
3386 This function is only used by C<sv_true()> and friends,  and only if
3387 the latter's argument is neither C<SvPOK>, C<SvIOK> nor C<SvNOK>.  If the flags
3388 contain C<SV_GMAGIC>, then it does an C<mg_get()> first.
3389
3390
3391 =cut
3392 */
3393
3394 bool
3395 Perl_sv_2bool_flags(pTHX_ SV *sv, I32 flags)
3396 {
3397     PERL_ARGS_ASSERT_SV_2BOOL_FLAGS;
3398
3399     restart:
3400     if(flags & SV_GMAGIC) SvGETMAGIC(sv);
3401
3402     if (!SvOK(sv))
3403         return 0;
3404     if (SvROK(sv)) {
3405         if (SvAMAGIC(sv)) {
3406             SV * const tmpsv = AMG_CALLunary(sv, bool__amg);
3407             if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv)))) {
3408                 bool svb;
3409                 sv = tmpsv;
3410                 if(SvGMAGICAL(sv)) {
3411                     flags = SV_GMAGIC;
3412                     goto restart; /* call sv_2bool */
3413                 }
3414                 /* expanded SvTRUE_common(sv, (flags = 0, goto restart)) */
3415                 else if(!SvOK(sv)) {
3416                     svb = 0;
3417                 }
3418                 else if(SvPOK(sv)) {
3419                     svb = SvPVXtrue(sv);
3420                 }
3421                 else if((SvFLAGS(sv) & (SVf_IOK|SVf_NOK))) {
3422                     svb = (SvIOK(sv) && SvIVX(sv) != 0)
3423                         || (SvNOK(sv) && SvNVX(sv) != 0.0);
3424                 }
3425                 else {
3426                     flags = 0;
3427                     goto restart; /* call sv_2bool_nomg */
3428                 }
3429                 return cBOOL(svb);
3430             }
3431         }
3432         assert(SvRV(sv));
3433         return TRUE;
3434     }
3435     if (isREGEXP(sv))
3436         return
3437           RX_WRAPLEN(sv) > 1 || (RX_WRAPLEN(sv) && *RX_WRAPPED(sv) != '0');
3438
3439     if (SvNOK(sv) && !SvPOK(sv))
3440         return SvNVX(sv) != 0.0;
3441
3442     return SvTRUE_common(sv, isGV_with_GP(sv) ? 1 : 0);
3443 }
3444
3445 /*
3446 =for apidoc sv_utf8_upgrade
3447
3448 Converts the PV of an SV to its UTF-8-encoded form.
3449 Forces the SV to string form if it is not already.
3450 Will C<L</mg_get>> on C<sv> if appropriate.
3451 Always sets the C<SvUTF8> flag to avoid future validity checks even
3452 if the whole string is the same in UTF-8 as not.
3453 Returns the number of bytes in the converted string
3454
3455 This is not a general purpose byte encoding to Unicode interface:
3456 use the Encode extension for that.
3457
3458 =for apidoc sv_utf8_upgrade_nomg
3459
3460 Like C<sv_utf8_upgrade>, but doesn't do magic on C<sv>.
3461
3462 =for apidoc sv_utf8_upgrade_flags
3463
3464 Converts the PV of an SV to its UTF-8-encoded form.
3465 Forces the SV to string form if it is not already.
3466 Always sets the SvUTF8 flag to avoid future validity checks even
3467 if all the bytes are invariant in UTF-8.
3468 If C<flags> has C<SV_GMAGIC> bit set,
3469 will C<L</mg_get>> on C<sv> if appropriate, else not.
3470
3471 The C<SV_FORCE_UTF8_UPGRADE> flag is now ignored.
3472
3473 Returns the number of bytes in the converted string.
3474
3475 This is not a general purpose byte encoding to Unicode interface:
3476 use the Encode extension for that.
3477
3478 =for apidoc sv_utf8_upgrade_flags_grow
3479
3480 Like C<sv_utf8_upgrade_flags>, but has an additional parameter C<extra>, which is
3481 the number of unused bytes the string of C<sv> is guaranteed to have free after
3482 it upon return.  This allows the caller to reserve extra space that it intends
3483 to fill, to avoid extra grows.
3484
3485 C<sv_utf8_upgrade>, C<sv_utf8_upgrade_nomg>, and C<sv_utf8_upgrade_flags>
3486 are implemented in terms of this function.
3487
3488 Returns the number of bytes in the converted string (not including the spares).
3489
3490 =cut
3491
3492 If the routine itself changes the string, it adds a trailing C<NUL>.  Such a
3493 C<NUL> isn't guaranteed due to having other routines do the work in some input
3494 cases, or if the input is already flagged as being in utf8.
3495
3496 */
3497
3498 STRLEN
3499 Perl_sv_utf8_upgrade_flags_grow(pTHX_ SV *const sv, const I32 flags, STRLEN extra)
3500 {
3501     PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
3502
3503     if (sv == &PL_sv_undef)
3504         return 0;
3505     if (!SvPOK_nog(sv)) {
3506         STRLEN len = 0;
3507         if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3508             (void) sv_2pv_flags(sv,&len, flags);
3509             if (SvUTF8(sv)) {
3510                 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3511                 return len;
3512             }
3513         } else {
3514             (void) SvPV_force_flags(sv,len,flags & SV_GMAGIC);
3515         }
3516     }
3517
3518     /* SVt_REGEXP's shouldn't be upgraded to UTF8 - they're already
3519      * compiled and individual nodes will remain non-utf8 even if the
3520      * stringified version of the pattern gets upgraded. Whether the
3521      * PVX of a REGEXP should be grown or we should just croak, I don't
3522      * know - DAPM */
3523     if (SvUTF8(sv) || isREGEXP(sv)) {
3524         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3525         return SvCUR(sv);
3526     }
3527
3528     if (SvIsCOW(sv)) {
3529         S_sv_uncow(aTHX_ sv, 0);
3530     }
3531
3532     if (SvCUR(sv) == 0) {
3533         if (extra) SvGROW(sv, extra + 1); /* Make sure is room for a trailing
3534                                              byte */
3535     } else { /* Assume Latin-1/EBCDIC */
3536         /* This function could be much more efficient if we
3537          * had a FLAG in SVs to signal if there are any variant
3538          * chars in the PV.  Given that there isn't such a flag
3539          * make the loop as fast as possible. */
3540         U8 * s = (U8 *) SvPVX_const(sv);
3541         U8 *t = s;
3542         
3543         if (is_utf8_invariant_string_loc(s, SvCUR(sv), (const U8 **) &t)) {
3544
3545             /* utf8 conversion not needed because all are invariants.  Mark
3546              * as UTF-8 even if no variant - saves scanning loop */
3547             SvUTF8_on(sv);
3548             if (extra) SvGROW(sv, SvCUR(sv) + extra);
3549             return SvCUR(sv);
3550         }
3551
3552         /* Here, there is at least one variant (t points to the first one), so
3553          * the string should be converted to utf8.  Everything from 's' to
3554          * 't - 1' will occupy only 1 byte each on output.
3555          *
3556          * Note that the incoming SV may not have a trailing '\0', as certain
3557          * code in pp_formline can send us partially built SVs.
3558          *
3559          * There are two main ways to convert.  One is to create a new string
3560          * and go through the input starting from the beginning, appending each
3561          * converted value onto the new string as we go along.  Going this
3562          * route, it's probably best to initially allocate enough space in the
3563          * string rather than possibly running out of space and having to
3564          * reallocate and then copy what we've done so far.  Since everything
3565          * from 's' to 't - 1' is invariant, the destination can be initialized
3566          * with these using a fast memory copy.  To be sure to allocate enough
3567          * space, one could use the worst case scenario, where every remaining
3568          * byte expands to two under UTF-8, or one could parse it and count
3569          * exactly how many do expand.
3570          *
3571          * The other way is to unconditionally parse the remainder of the
3572          * string to figure out exactly how big the expanded string will be,
3573          * growing if needed.  Then start at the end of the string and place
3574          * the character there at the end of the unfilled space in the expanded
3575          * one, working backwards until reaching 't'.
3576          *
3577          * The problem with assuming the worst case scenario is that for very
3578          * long strings, we could allocate much more memory than actually
3579          * needed, which can create performance problems.  If we have to parse
3580          * anyway, the second method is the winner as it may avoid an extra
3581          * copy.  The code used to use the first method under some
3582          * circumstances, but now that there is faster variant counting on
3583          * ASCII platforms, the second method is used exclusively, eliminating
3584          * some code that no longer has to be maintained. */
3585
3586         {
3587             /* Count the total number of variants there are.  We can start
3588              * just beyond the first one, which is known to be at 't' */
3589             const Size_t invariant_length = t - s;
3590             U8 * e = (U8 *) SvEND(sv);
3591
3592             /* The length of the left overs, plus 1. */
3593             const Size_t remaining_length_p1 = e - t;
3594
3595             /* We expand by 1 for the variant at 't' and one for each remaining
3596              * variant (we start looking at 't+1') */
3597             Size_t expansion = 1 + variant_under_utf8_count(t + 1, e);
3598
3599             /* +1 = trailing NUL */
3600             Size_t need = SvCUR(sv) + expansion + extra + 1;
3601             U8 * d;
3602
3603             /* Grow if needed */
3604             if (SvLEN(sv) < need) {
3605                 t = invariant_length + (U8*) SvGROW(sv, need);
3606                 e = t + remaining_length_p1;
3607             }
3608             SvCUR_set(sv, invariant_length + remaining_length_p1 + expansion);
3609
3610             /* Set the NUL at the end */
3611             d = (U8 *) SvEND(sv);
3612             *d-- = '\0';
3613
3614             /* Having decremented d, it points to the position to put the
3615              * very last byte of the expanded string.  Go backwards through
3616              * the string, copying and expanding as we go, stopping when we
3617              * get to the part that is invariant the rest of the way down */
3618
3619             e--;
3620             while (e >= t) {
3621                 if (NATIVE_BYTE_IS_INVARIANT(*e)) {
3622                     *d-- = *e;
3623                 } else {
3624                     *d-- = UTF8_EIGHT_BIT_LO(*e);
3625                     *d-- = UTF8_EIGHT_BIT_HI(*e);
3626                 }
3627                 e--;
3628             }
3629
3630             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3631                 /* Update pos. We do it at the end rather than during
3632                  * the upgrade, to avoid slowing down the common case
3633                  * (upgrade without pos).
3634                  * pos can be stored as either bytes or characters.  Since
3635                  * this was previously a byte string we can just turn off
3636                  * the bytes flag. */
3637                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3638                 if (mg) {
3639                     mg->mg_flags &= ~MGf_BYTES;
3640                 }
3641                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3642                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3643             }
3644         }
3645     }
3646
3647     SvUTF8_on(sv);
3648     return SvCUR(sv);
3649 }
3650
3651 /*
3652 =for apidoc sv_utf8_downgrade
3653
3654 Attempts to convert the PV of an SV from characters to bytes.
3655 If the PV contains a character that cannot fit
3656 in a byte, this conversion will fail;
3657 in this case, either returns false or, if C<fail_ok> is not
3658 true, croaks.
3659
3660 This is not a general purpose Unicode to byte encoding interface:
3661 use the C<Encode> extension for that.
3662
3663 This function process get magic on C<sv>.
3664
3665 =for apidoc sv_utf8_downgrade_nomg
3666
3667 Like C<sv_utf8_downgrade>, but does not process get magic on C<sv>.
3668
3669 =for apidoc sv_utf8_downgrade_flags
3670
3671 Like C<sv_utf8_downgrade>, but with additional C<flags>.
3672 If C<flags> has C<SV_GMAGIC> bit set, processes get magic on C<sv>.
3673
3674 =cut
3675 */
3676
3677 bool
3678 Perl_sv_utf8_downgrade_flags(pTHX_ SV *const sv, const bool fail_ok, const U32 flags)
3679 {
3680     PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE_FLAGS;
3681
3682     if (SvPOKp(sv) && SvUTF8(sv)) {
3683         if (SvCUR(sv)) {
3684             U8 *s;
3685             STRLEN len;
3686             U32 mg_flags = flags & SV_GMAGIC;
3687
3688             if (SvIsCOW(sv)) {
3689                 S_sv_uncow(aTHX_ sv, 0);
3690             }
3691             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3692                 /* update pos */
3693                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3694                 if (mg && mg->mg_len > 0 && mg->mg_flags & MGf_BYTES) {
3695                         mg->mg_len = sv_pos_b2u_flags(sv, mg->mg_len,
3696                                                 mg_flags|SV_CONST_RETURN);
3697                         mg_flags = 0; /* sv_pos_b2u does get magic */
3698                 }
3699                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3700                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3701
3702             }
3703             s = (U8 *) SvPV_flags(sv, len, mg_flags);
3704
3705             if (!utf8_to_bytes(s, &len)) {
3706                 if (fail_ok)
3707                     return FALSE;
3708                 else {
3709                     if (PL_op)
3710                         Perl_croak(aTHX_ "Wide character in %s",
3711                                    OP_DESC(PL_op));
3712                     else
3713                         Perl_croak(aTHX_ "Wide character");
3714                 }
3715             }
3716             SvCUR_set(sv, len);
3717         }
3718     }
3719     SvUTF8_off(sv);
3720     return TRUE;
3721 }
3722
3723 /*
3724 =for apidoc sv_utf8_encode
3725
3726 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3727 flag off so that it looks like octets again.
3728
3729 =cut
3730 */
3731
3732 void
3733 Perl_sv_utf8_encode(pTHX_ SV *const sv)
3734 {
3735     PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3736
3737     if (SvREADONLY(sv)) {
3738         sv_force_normal_flags(sv, 0);
3739     }
3740     (void) sv_utf8_upgrade(sv);
3741     SvUTF8_off(sv);
3742 }
3743
3744 /*
3745 =for apidoc sv_utf8_decode
3746
3747 If the PV of the SV is an octet sequence in Perl's extended UTF-8
3748 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3749 so that it looks like a character.  If the PV contains only single-byte
3750 characters, the C<SvUTF8> flag stays off.
3751 Scans PV for validity and returns FALSE if the PV is invalid UTF-8.
3752
3753 =cut
3754 */
3755
3756 bool
3757 Perl_sv_utf8_decode(pTHX_ SV *const sv)
3758 {
3759     PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3760
3761     if (SvPOKp(sv)) {
3762         const U8 *start, *c, *first_variant;
3763
3764         /* The octets may have got themselves encoded - get them back as
3765          * bytes
3766          */
3767         if (!sv_utf8_downgrade(sv, TRUE))
3768             return FALSE;
3769
3770         /* it is actually just a matter of turning the utf8 flag on, but
3771          * we want to make sure everything inside is valid utf8 first.
3772          */
3773         c = start = (const U8 *) SvPVX_const(sv);
3774         if (! is_utf8_invariant_string_loc(c, SvCUR(sv), &first_variant)) {
3775             if (!is_utf8_string(first_variant, SvCUR(sv) - (first_variant -c)))
3776                 return FALSE;
3777             SvUTF8_on(sv);
3778         }
3779         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3780             /* XXX Is this dead code?  XS_utf8_decode calls SvSETMAGIC
3781                    after this, clearing pos.  Does anything on CPAN
3782                    need this? */
3783             /* adjust pos to the start of a UTF8 char sequence */
3784             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3785             if (mg) {
3786                 I32 pos = mg->mg_len;
3787                 if (pos > 0) {
3788                     for (c = start + pos; c > start; c--) {
3789                         if (UTF8_IS_START(*c))
3790                             break;
3791                     }
3792                     mg->mg_len  = c - start;
3793                 }
3794             }
3795             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3796                 magic_setutf8(sv,mg); /* clear UTF8 cache */
3797         }
3798     }
3799     return TRUE;
3800 }
3801
3802 /*
3803 =for apidoc sv_setsv
3804
3805 Copies the contents of the source SV C<ssv> into the destination SV
3806 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3807 function if the source SV needs to be reused.  Does not handle 'set' magic on
3808 destination SV.  Calls 'get' magic on source SV.  Loosely speaking, it
3809 performs a copy-by-value, obliterating any previous content of the
3810 destination.
3811
3812 You probably want to use one of the assortment of wrappers, such as
3813 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3814 C<SvSetMagicSV_nosteal>.
3815
3816 =for apidoc sv_setsv_flags
3817
3818 Copies the contents of the source SV C<ssv> into the destination SV
3819 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3820 function if the source SV needs to be reused.  Does not handle 'set' magic.
3821 Loosely speaking, it performs a copy-by-value, obliterating any previous
3822 content of the destination.
3823 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<L</mg_get>> on
3824 C<ssv> if appropriate, else not.  If the C<flags>
3825 parameter has the C<SV_NOSTEAL> bit set then the
3826 buffers of temps will not be stolen.  C<sv_setsv>
3827 and C<sv_setsv_nomg> are implemented in terms of this function.
3828
3829 You probably want to use one of the assortment of wrappers, such as
3830 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3831 C<SvSetMagicSV_nosteal>.
3832
3833 This is the primary function for copying scalars, and most other
3834 copy-ish functions and macros use this underneath.
3835
3836 =for apidoc Amnh||SV_NOSTEAL
3837
3838 =cut
3839 */
3840
3841 static void
3842 S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
3843 {
3844     I32 mro_changes = 0; /* 1 = method, 2 = isa, 3 = recursive isa */
3845     HV *old_stash = NULL;
3846
3847     PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3848
3849     if (dtype != SVt_PVGV && !isGV_with_GP(dstr)) {
3850         const char * const name = GvNAME(sstr);
3851         const STRLEN len = GvNAMELEN(sstr);
3852         {
3853             if (dtype >= SVt_PV) {
3854                 SvPV_free(dstr);
3855                 SvPV_set(dstr, 0);
3856                 SvLEN_set(dstr, 0);
3857                 SvCUR_set(dstr, 0);
3858             }
3859             SvUPGRADE(dstr, SVt_PVGV);
3860             (void)SvOK_off(dstr);
3861             isGV_with_GP_on(dstr);
3862         }
3863         GvSTASH(dstr) = GvSTASH(sstr);
3864         if (GvSTASH(dstr))
3865             Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
3866         gv_name_set(MUTABLE_GV(dstr), name, len,
3867                         GV_ADD | (GvNAMEUTF8(sstr) ? SVf_UTF8 : 0 ));
3868         SvFAKE_on(dstr);        /* can coerce to non-glob */
3869     }
3870
3871     if(GvGP(MUTABLE_GV(sstr))) {
3872         /* If source has method cache entry, clear it */
3873         if(GvCVGEN(sstr)) {
3874             SvREFCNT_dec(GvCV(sstr));
3875             GvCV_set(sstr, NULL);
3876             GvCVGEN(sstr) = 0;
3877         }
3878         /* If source has a real method, then a method is
3879            going to change */
3880         else if(
3881          GvCV((const GV *)sstr) && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3882         ) {
3883             mro_changes = 1;
3884         }
3885     }
3886
3887     /* If dest already had a real method, that's a change as well */
3888     if(
3889         !mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)
3890      && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3891     ) {
3892         mro_changes = 1;
3893     }
3894
3895     /* We don't need to check the name of the destination if it was not a
3896        glob to begin with. */
3897     if(dtype == SVt_PVGV) {
3898         const char * const name = GvNAME((const GV *)dstr);
3899         const STRLEN len = GvNAMELEN(dstr);
3900         if(memEQs(name, len, "ISA")
3901          /* The stash may have been detached from the symbol table, so
3902             check its name. */
3903          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3904         )
3905             mro_changes = 2;
3906         else {
3907             if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
3908              || (len == 1 && name[0] == ':')) {
3909                 mro_changes = 3;
3910
3911                 /* Set aside the old stash, so we can reset isa caches on
3912                    its subclasses. */
3913                 if((old_stash = GvHV(dstr)))
3914                     /* Make sure we do not lose it early. */
3915                     SvREFCNT_inc_simple_void_NN(
3916                      sv_2mortal((SV *)old_stash)
3917                     );
3918             }
3919         }
3920
3921         SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
3922     }
3923
3924     /* freeing dstr's GP might free sstr (e.g. *x = $x),
3925      * so temporarily protect it */
3926     ENTER;
3927     SAVEFREESV(SvREFCNT_inc_simple_NN(sstr));
3928     gp_free(MUTABLE_GV(dstr));
3929     GvINTRO_off(dstr);          /* one-shot flag */
3930     GvGP_set(dstr, gp_ref(GvGP(sstr)));
3931     LEAVE;
3932
3933     if (SvTAINTED(sstr))
3934         SvTAINT(dstr);
3935     if (GvIMPORTED(dstr) != GVf_IMPORTED
3936         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3937         {
3938             GvIMPORTED_on(dstr);
3939         }
3940     GvMULTI_on(dstr);
3941     if(mro_changes == 2) {
3942       if (GvAV((const GV *)sstr)) {
3943         MAGIC *mg;
3944         SV * const sref = (SV *)GvAV((const GV *)dstr);
3945         if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3946             if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3947                 AV * const ary = newAV();
3948                 av_push(ary, mg->mg_obj); /* takes the refcount */
3949                 mg->mg_obj = (SV *)ary;
3950             }
3951             av_push((AV *)mg->mg_obj, SvREFCNT_inc_simple_NN(dstr));
3952         }
3953         else sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
3954       }
3955       mro_isa_changed_in(GvSTASH(dstr));
3956     }
3957     else if(mro_changes == 3) {
3958         HV * const stash = GvHV(dstr);
3959         if(old_stash ? (HV *)HvENAME_get(old_stash) : stash)
3960             mro_package_moved(
3961                 stash, old_stash,
3962                 (GV *)dstr, 0
3963             );
3964     }
3965     else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
3966     if (GvIO(dstr) && dtype == SVt_PVGV) {
3967         DEBUG_o(Perl_deb(aTHX_
3968                         "glob_assign_glob clearing PL_stashcache\n"));
3969         /* It's a cache. It will rebuild itself quite happily.
3970            It's a lot of effort to work out exactly which key (or keys)
3971            might be invalidated by the creation of the this file handle.
3972          */
3973         hv_clear(PL_stashcache);
3974     }
3975     return;
3976 }
3977
3978 void
3979 Perl_gv_setref(pTHX_ SV *const dstr, SV *const sstr)
3980 {
3981     SV * const sref = SvRV(sstr);
3982     SV *dref;
3983     const int intro = GvINTRO(dstr);
3984     SV **location;
3985     U8 import_flag = 0;
3986     const U32 stype = SvTYPE(sref);
3987
3988     PERL_ARGS_ASSERT_GV_SETREF;
3989
3990     if (intro) {
3991         GvINTRO_off(dstr);      /* one-shot flag */
3992         GvLINE(dstr) = CopLINE(PL_curcop);
3993         GvEGV(dstr) = MUTABLE_GV(dstr);
3994     }
3995     GvMULTI_on(dstr);
3996     switch (stype) {
3997     case SVt_PVCV:
3998         location = (SV **) &(GvGP(dstr)->gp_cv); /* XXX bypassing GvCV_set */
3999         import_flag = GVf_IMPORTED_CV;
4000         goto common;
4001     case SVt_PVHV:
4002         location = (SV **) &GvHV(dstr);
4003         import_flag = GVf_IMPORTED_HV;
4004         goto common;
4005     case SVt_PVAV:
4006         location = (SV **) &GvAV(dstr);
4007         import_flag = GVf_IMPORTED_AV;
4008         goto common;
4009     case SVt_PVIO:
4010         location = (SV **) &GvIOp(dstr);
4011         goto common;
4012     case SVt_PVFM:
4013         location = (SV **) &GvFORM(dstr);
4014         goto common;
4015     default:
4016         location = &GvSV(dstr);
4017         import_flag = GVf_IMPORTED_SV;
4018     common:
4019         if (intro) {
4020             if (stype == SVt_PVCV) {
4021                 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
4022                 if (GvCVGEN(dstr)) {
4023                     SvREFCNT_dec(GvCV(dstr));
4024                     GvCV_set(dstr, NULL);
4025                     GvCVGEN(dstr) = 0; /* Switch off cacheness. */
4026                 }
4027             }
4028             /* SAVEt_GVSLOT takes more room on the savestack and has more
4029                overhead in leave_scope than SAVEt_GENERIC_SV.  But for CVs
4030                leave_scope needs access to the GV so it can reset method
4031                caches.  We must use SAVEt_GVSLOT whenever the type is
4032                SVt_PVCV, even if the stash is anonymous, as the stash may
4033                gain a name somehow before leave_scope. */
4034             if (stype == SVt_PVCV) {
4035                 /* There is no save_pushptrptrptr.  Creating it for this
4036                    one call site would be overkill.  So inline the ss add
4037                    routines here. */
4038                 dSS_ADD;
4039                 SS_ADD_PTR(dstr);
4040                 SS_ADD_PTR(location);
4041                 SS_ADD_PTR(SvREFCNT_inc(*location));
4042                 SS_ADD_UV(SAVEt_GVSLOT);
4043                 SS_ADD_END(4);
4044             }
4045             else SAVEGENERICSV(*location);
4046         }
4047         dref = *location;
4048         if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
4049             CV* const cv = MUTABLE_CV(*location);
4050             if (cv) {
4051                 if (!GvCVGEN((const GV *)dstr) &&
4052                     (CvROOT(cv) || CvXSUB(cv)) &&
4053                     /* redundant check that avoids creating the extra SV
4054                        most of the time: */
4055                     (CvCONST(cv) || ckWARN(WARN_REDEFINE)))
4056                     {
4057                         SV * const new_const_sv =
4058                             CvCONST((const CV *)sref)
4059                                  ? cv_const_sv((const CV *)sref)
4060                                  : NULL;
4061                         HV * const stash = GvSTASH((const GV *)dstr);
4062                         report_redefined_cv(
4063                            sv_2mortal(
4064                              stash
4065                                ? Perl_newSVpvf(aTHX_
4066                                     "%" HEKf "::%" HEKf,
4067                                     HEKfARG(HvNAME_HEK(stash)),
4068                                     HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr))))
4069                                : Perl_newSVpvf(aTHX_
4070                                     "%" HEKf,
4071                                     HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr))))
4072                            ),
4073                            cv,
4074                            CvCONST((const CV *)sref) ? &new_const_sv : NULL
4075                         );
4076                     }
4077                 if (!intro)
4078                     cv_ckproto_len_flags(cv, (const GV *)dstr,
4079                                    SvPOK(sref) ? CvPROTO(sref) : NULL,
4080                                    SvPOK(sref) ? CvPROTOLEN(sref) : 0,
4081                                    SvPOK(sref) ? SvUTF8(sref) : 0);
4082             }
4083             GvCVGEN(dstr) = 0; /* Switch off cacheness. */
4084             GvASSUMECV_on(dstr);
4085             if(GvSTASH(dstr)) { /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
4086                 if (intro && GvREFCNT(dstr) > 1) {
4087                     /* temporary remove extra savestack's ref */
4088                     --GvREFCNT(dstr);
4089                     gv_method_changed(dstr);
4090                     ++GvREFCNT(dstr);
4091                 }
4092                 else gv_method_changed(dstr);
4093             }
4094         }
4095         *location = SvREFCNT_inc_simple_NN(sref);
4096         if (import_flag && !(GvFLAGS(dstr) & import_flag)
4097             && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
4098             GvFLAGS(dstr) |= import_flag;
4099         }
4100
4101         if (stype == SVt_PVHV) {
4102             const char * const name = GvNAME((GV*)dstr);
4103             const STRLEN len = GvNAMELEN(dstr);
4104             if (
4105                 (
4106                    (len > 1 && name[len-2] == ':' && name[len-1] == ':')
4107                 || (len == 1 && name[0] == ':')
4108                 )
4109              && (!dref || HvENAME_get(dref))
4110             ) {
4111                 mro_package_moved(
4112                     (HV *)sref, (HV *)dref,
4113                     (GV *)dstr, 0
4114                 );
4115             }
4116         }
4117         else if (
4118             stype == SVt_PVAV && sref != dref
4119          && memEQs(GvNAME((GV*)dstr), GvNAMELEN((GV*)dstr), "ISA")
4120          /* The stash may have been detached from the symbol table, so
4121             check its name before doing anything. */
4122          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
4123         ) {
4124             MAGIC *mg;
4125             MAGIC * const omg = dref && SvSMAGICAL(dref)
4126                                  ? mg_find(dref, PERL_MAGIC_isa)
4127                                  : NULL;
4128             if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
4129                 if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
4130                     AV * const ary = newAV();
4131                     av_push(ary, mg->mg_obj); /* takes the refcount */
4132                     mg->mg_obj = (SV *)ary;
4133                 }
4134                 if (omg) {
4135                     if (SvTYPE(omg->mg_obj) == SVt_PVAV) {
4136                         SV **svp = AvARRAY((AV *)omg->mg_obj);
4137                         I32 items = AvFILLp((AV *)omg->mg_obj) + 1;
4138                         while (items--)
4139                             av_push(
4140                              (AV *)mg->mg_obj,
4141                              SvREFCNT_inc_simple_NN(*svp++)
4142                             );
4143                     }
4144                     else
4145                         av_push(
4146                          (AV *)mg->mg_obj,
4147                          SvREFCNT_inc_simple_NN(omg->mg_obj)
4148                         );
4149                 }
4150                 else
4151                     av_push((AV *)mg->mg_obj,SvREFCNT_inc_simple_NN(dstr));
4152             }
4153             else
4154             {
4155                 SSize_t i;
4156                 sv_magic(
4157                  sref, omg ? omg->mg_obj : dstr, PERL_MAGIC_isa, NULL, 0
4158                 );
4159                 for (i = 0; i <= AvFILL(sref); ++i) {
4160                     SV **elem = av_fetch ((AV*)sref, i, 0);
4161                     if (elem) {
4162                         sv_magic(
4163                           *elem, sref, PERL_MAGIC_isaelem, NULL, i
4164                         );
4165                     }
4166                 }
4167                 mg = mg_find(sref, PERL_MAGIC_isa);
4168             }
4169             /* Since the *ISA assignment could have affected more than
4170                one stash, don't call mro_isa_changed_in directly, but let
4171                magic_clearisa do it for us, as it already has the logic for
4172                dealing with globs vs arrays of globs. */
4173             assert(mg);
4174             Perl_magic_clearisa(aTHX_ NULL, mg);
4175         }
4176         else if (stype == SVt_PVIO) {
4177             DEBUG_o(Perl_deb(aTHX_ "gv_setref clearing PL_stashcache\n"));
4178             /* It's a cache. It will rebuild itself quite happily.
4179                It's a lot of effort to work out exactly which key (or keys)
4180                might be invalidated by the creation of the this file handle.
4181             */
4182             hv_clear(PL_stashcache);
4183         }
4184         break;
4185     }
4186     if (!intro) SvREFCNT_dec(dref);
4187     if (SvTAINTED(sstr))
4188         SvTAINT(dstr);
4189     return;
4190 }
4191
4192
4193
4194
4195 #ifdef PERL_DEBUG_READONLY_COW
4196 # include <sys/mman.h>
4197
4198 # ifndef PERL_MEMORY_DEBUG_HEADER_SIZE
4199 #  define PERL_MEMORY_DEBUG_HEADER_SIZE 0
4200 # endif
4201
4202 void
4203 Perl_sv_buf_to_ro(pTHX_ SV *sv)
4204 {
4205     struct perl_memory_debug_header * const header =
4206         (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4207     const MEM_SIZE len = header->size;
4208     PERL_ARGS_ASSERT_SV_BUF_TO_RO;
4209 # ifdef PERL_TRACK_MEMPOOL
4210     if (!header->readonly) header->readonly = 1;
4211 # endif
4212     if (mprotect(header, len, PROT_READ))
4213         Perl_warn(aTHX_ "mprotect RW for COW string %p %lu failed with %d",
4214                          header, len, errno);
4215 }
4216
4217 static void
4218 S_sv_buf_to_rw(pTHX_ SV *sv)
4219 {
4220     struct perl_memory_debug_header * const header =
4221         (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4222     const MEM_SIZE len = header->size;
4223     PERL_ARGS_ASSERT_SV_BUF_TO_RW;
4224     if (mprotect(header, len, PROT_READ|PROT_WRITE))
4225         Perl_warn(aTHX_ "mprotect for COW string %p %lu failed with %d",
4226                          header, len, errno);
4227 # ifdef PERL_TRACK_MEMPOOL
4228     header->readonly = 0;
4229 # endif
4230 }
4231
4232 #else
4233 # define sv_buf_to_ro(sv)       NOOP
4234 # define sv_buf_to_rw(sv)       NOOP
4235 #endif
4236
4237 void
4238 Perl_sv_setsv_flags(pTHX_ SV *dstr, SV* sstr, const I32 flags)
4239 {
4240     U32 sflags;
4241     int dtype;
4242     svtype stype;
4243     unsigned int both_type;
4244
4245     PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
4246
4247     if (UNLIKELY( sstr == dstr ))
4248         return;
4249
4250     if (UNLIKELY( !sstr ))
4251         sstr = &PL_sv_undef;
4252
4253     stype = SvTYPE(sstr);
4254     dtype = SvTYPE(dstr);
4255     both_type = (stype | dtype);
4256
4257     /* with these values, we can check that both SVs are NULL/IV (and not
4258      * freed) just by testing the or'ed types */
4259     STATIC_ASSERT_STMT(SVt_NULL == 0);
4260     STATIC_ASSERT_STMT(SVt_IV   == 1);
4261     if (both_type <= 1) {
4262         /* both src and dst are UNDEF/IV/RV, so we can do a lot of
4263          * special-casing */
4264         U32 sflags;
4265         U32 new_dflags;
4266         SV *old_rv = NULL;
4267
4268         /* minimal subset of SV_CHECK_THINKFIRST_COW_DROP(dstr) */
4269         if (SvREADONLY(dstr))
4270             Perl_croak_no_modify();
4271         if (SvROK(dstr)) {
4272             if (SvWEAKREF(dstr))
4273                 sv_unref_flags(dstr, 0);
4274             else
4275                 old_rv = SvRV(dstr);
4276         }
4277
4278         assert(!SvGMAGICAL(sstr));
4279         assert(!SvGMAGICAL(dstr));
4280
4281         sflags = SvFLAGS(sstr);
4282         if (sflags & (SVf_IOK|SVf_ROK)) {
4283             SET_SVANY_FOR_BODYLESS_IV(dstr);
4284             new_dflags = SVt_IV;
4285
4286             if (sflags & SVf_ROK) {
4287                 dstr->sv_u.svu_rv = SvREFCNT_inc(SvRV(sstr));
4288                 new_dflags |= SVf_ROK;
4289             }
4290             else {
4291                 /* both src and dst are <= SVt_IV, so sv_any points to the
4292                  * head; so access the head directly
4293                  */
4294                 assert(    &(sstr->sv_u.svu_iv)
4295                         == &(((XPVIV*) SvANY(sstr))->xiv_iv));
4296                 assert(    &(dstr->sv_u.svu_iv)
4297                         == &(((XPVIV*) SvANY(dstr))->xiv_iv));
4298                 dstr->sv_u.svu_iv = sstr->sv_u.svu_iv;
4299                 new_dflags |= (SVf_IOK|SVp_IOK|(sflags & SVf_IVisUV));
4300             }
4301         }
4302         else {
4303             new_dflags = dtype; /* turn off everything except the type */
4304         }
4305         SvFLAGS(dstr) = new_dflags;
4306         SvREFCNT_dec(old_rv);
4307
4308         return;
4309     }
4310
4311     if (UNLIKELY(both_type == SVTYPEMASK)) {
4312         if (SvIS_FREED(dstr)) {
4313             Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
4314                        " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
4315         }
4316         if (SvIS_FREED(sstr)) {
4317             Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
4318                        (void*)sstr, (void*)dstr);
4319         }
4320     }
4321
4322
4323
4324     SV_CHECK_THINKFIRST_COW_DROP(dstr);
4325     dtype = SvTYPE(dstr); /* THINKFIRST may have changed type */
4326
4327     /* There's a lot of redundancy below but we're going for speed here */
4328
4329     switch (stype) {
4330     case SVt_NULL:
4331       undef_sstr:
4332         if (LIKELY( dtype != SVt_PVGV && dtype != SVt_PVLV )) {
4333             (void)SvOK_off(dstr);
4334             return;
4335         }
4336         break;
4337     case SVt_IV:
4338         if (SvIOK(sstr)) {
4339             switch (dtype) {
4340             case SVt_NULL:
4341                 /* For performance, we inline promoting to type SVt_IV. */
4342                 /* We're starting from SVt_NULL, so provided that define is
4343                  * actual 0, we don't have to unset any SV type flags
4344                  * to promote to SVt_IV. */
4345                 STATIC_ASSERT_STMT(SVt_NULL == 0);
4346                 SET_SVANY_FOR_BODYLESS_IV(dstr);
4347                 SvFLAGS(dstr) |= SVt_IV;
4348                 break;
4349             case SVt_NV:
4350             case SVt_PV:
4351                 sv_upgrade(dstr, SVt_PVIV);
4352                 break;
4353             case SVt_PVGV:
4354             case SVt_PVLV:
4355                 goto end_of_first_switch;
4356             }
4357             (void)SvIOK_only(dstr);
4358             SvIV_set(dstr,  SvIVX(sstr));
4359             if (SvIsUV(sstr))
4360                 SvIsUV_on(dstr);
4361             /* SvTAINTED can only be true if the SV has taint magic, which in
4362                turn means that the SV type is PVMG (or greater). This is the
4363                case statement for SVt_IV, so this cannot be true (whatever gcov
4364                may say).  */
4365             assert(!SvTAINTED(sstr));
4366             return;
4367         }
4368         if (!SvROK(sstr))
4369             goto undef_sstr;
4370         if (dtype < SVt_PV && dtype != SVt_IV)
4371             sv_upgrade(dstr, SVt_IV);
4372         break;
4373
4374     case SVt_NV:
4375         if (LIKELY( SvNOK(sstr) )) {
4376             switch (dtype) {
4377             case SVt_NULL:
4378             case SVt_IV:
4379                 sv_upgrade(dstr, SVt_NV);
4380                 break;
4381             case SVt_PV:
4382             case SVt_PVIV:
4383                 sv_upgrade(dstr, SVt_PVNV);
4384                 break;
4385             case SVt_PVGV:
4386             case SVt_PVLV:
4387                 goto end_of_first_switch;
4388             }
4389             SvNV_set(dstr, SvNVX(sstr));
4390             (void)SvNOK_only(dstr);
4391             /* SvTAINTED can only be true if the SV has taint magic, which in
4392                turn means that the SV type is PVMG (or greater). This is the
4393                case statement for SVt_NV, so this cannot be true (whatever gcov
4394                may say).  */
4395             assert(!SvTAINTED(sstr));
4396             return;
4397         }
4398         goto undef_sstr;
4399
4400     case SVt_PV:
4401         if (dtype < SVt_PV)
4402             sv_upgrade(dstr, SVt_PV);
4403         break;
4404     case SVt_PVIV:
4405         if (dtype < SVt_PVIV)
4406             sv_upgrade(dstr, SVt_PVIV);
4407         break;
4408     case SVt_PVNV:
4409         if (dtype < SVt_PVNV)
4410             sv_upgrade(dstr, SVt_PVNV);
4411         break;
4412
4413     case SVt_INVLIST:
4414         invlist_clone(sstr, dstr);
4415         break;
4416     default:
4417         {
4418         const char * const type = sv_reftype(sstr,0);
4419         if (PL_op)
4420             /* diag_listed_as: Bizarre copy of %s */
4421             Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
4422         else
4423             Perl_croak(aTHX_ "Bizarre copy of %s", type);
4424         }
4425         NOT_REACHED; /* NOTREACHED */
4426
4427     case SVt_REGEXP:
4428       upgregexp:
4429         if (dtype < SVt_REGEXP)
4430             sv_upgrade(dstr, SVt_REGEXP);
4431         break;
4432
4433     case SVt_PVLV:
4434     case SVt_PVGV:
4435     case SVt_PVMG:
4436         if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
4437             mg_get(sstr);
4438             if (SvTYPE(sstr) != stype)
4439                 stype = SvTYPE(sstr);
4440         }
4441         if (isGV_with_GP(sstr) && dtype <= SVt_PVLV) {
4442                     glob_assign_glob(dstr, sstr, dtype);
4443                     return;
4444         }
4445         if (stype == SVt_PVLV)
4446         {
4447             if (isREGEXP(sstr)) goto upgregexp;
4448             SvUPGRADE(dstr, SVt_PVNV);
4449         }
4450         else
4451             SvUPGRADE(dstr, (svtype)stype);
4452     }
4453  end_of_first_switch:
4454
4455     /* dstr may have been upgraded.  */
4456     dtype = SvTYPE(dstr);
4457     sflags = SvFLAGS(sstr);
4458
4459     if (UNLIKELY( dtype == SVt_PVCV )) {
4460         /* Assigning to a subroutine sets the prototype.  */
4461         if (SvOK(sstr)) {
4462             STRLEN len;
4463             const char *const ptr = SvPV_const(sstr, len);
4464
4465             SvGROW(dstr, len + 1);
4466             Copy(ptr, SvPVX(dstr), len + 1, char);
4467             SvCUR_set(dstr, len);
4468             SvPOK_only(dstr);
4469             SvFLAGS(dstr) |= sflags & SVf_UTF8;
4470             CvAUTOLOAD_off(dstr);
4471         } else {
4472             SvOK_off(dstr);
4473         }
4474     }
4475     else if (UNLIKELY(dtype == SVt_PVAV || dtype == SVt_PVHV
4476              || dtype == SVt_PVFM))
4477     {
4478         const char * const type = sv_reftype(dstr,0);
4479         if (PL_op)
4480             /* diag_listed_as: Cannot copy to %s */
4481             Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
4482         else
4483             Perl_croak(aTHX_ "Cannot copy to %s", type);
4484     } else if (sflags & SVf_ROK) {
4485         if (isGV_with_GP(dstr)
4486             && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
4487             sstr = SvRV(sstr);
4488             if (sstr == dstr) {
4489                 if (GvIMPORTED(dstr) != GVf_IMPORTED
4490                     && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4491                 {
4492                     GvIMPORTED_on(dstr);
4493                 }
4494                 GvMULTI_on(dstr);
4495                 return;
4496             }
4497             glob_assign_glob(dstr, sstr, dtype);
4498             return;
4499         }
4500
4501         if (dtype >= SVt_PV) {
4502             if (isGV_with_GP(dstr)) {
4503                 gv_setref(dstr, sstr);
4504                 return;
4505             }
4506             if (SvPVX_const(dstr)) {
4507                 SvPV_free(dstr);
4508                 SvLEN_set(dstr, 0);
4509                 SvCUR_set(dstr, 0);
4510             }
4511         }
4512         (void)SvOK_off(dstr);
4513         SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4514         SvFLAGS(dstr) |= sflags & SVf_ROK;
4515         assert(!(sflags & SVp_NOK));
4516         assert(!(sflags & SVp_IOK));
4517         assert(!(sflags & SVf_NOK));
4518         assert(!(sflags & SVf_IOK));
4519     }
4520     else if (isGV_with_GP(dstr)) {
4521         if (!(sflags & SVf_OK)) {
4522             Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4523                            "Undefined value assigned to typeglob");
4524         }
4525         else {
4526             GV *gv = gv_fetchsv_nomg(sstr, GV_ADD, SVt_PVGV);
4527             if (dstr != (const SV *)gv) {
4528                 const char * const name = GvNAME((const GV *)dstr);
4529                 const STRLEN len = GvNAMELEN(dstr);
4530                 HV *old_stash = NULL;
4531                 bool reset_isa = FALSE;
4532                 if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
4533                  || (len == 1 && name[0] == ':')) {
4534                     /* Set aside the old stash, so we can reset isa caches
4535                        on its subclasses. */
4536                     if((old_stash = GvHV(dstr))) {
4537                         /* Make sure we do not lose it early. */
4538                         SvREFCNT_inc_simple_void_NN(
4539                          sv_2mortal((SV *)old_stash)
4540                         );
4541                     }
4542                     reset_isa = TRUE;
4543                 }
4544
4545                 if (GvGP(dstr)) {
4546                     SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
4547                     gp_free(MUTABLE_GV(dstr));
4548                 }
4549                 GvGP_set(dstr, gp_ref(GvGP(gv)));
4550
4551                 if (reset_isa) {
4552                     HV * const stash = GvHV(dstr);
4553                     if(
4554                         old_stash ? (HV *)HvENAME_get(old_stash) : stash
4555                     )
4556                         mro_package_moved(
4557                          stash, old_stash,
4558                          (GV *)dstr, 0
4559                         );
4560                 }
4561             }
4562         }
4563     }
4564     else if ((dtype == SVt_REGEXP || dtype == SVt_PVLV)
4565           && (stype == SVt_REGEXP || isREGEXP(sstr))) {
4566         reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4567     }
4568     else if (sflags & SVp_POK) {
4569         const STRLEN cur = SvCUR(sstr);
4570         const STRLEN len = SvLEN(sstr);
4571
4572         /*
4573          * We have three basic ways to copy the string:
4574          *
4575          *  1. Swipe
4576          *  2. Copy-on-write
4577          *  3. Actual copy
4578          * 
4579          * Which we choose is based on various factors.  The following
4580          * things are listed in order of speed, fastest to slowest:
4581          *  - Swipe
4582          *  - Copying a short string
4583          *  - Copy-on-write bookkeeping
4584          *  - malloc
4585          *  - Copying a long string
4586          * 
4587          * We swipe the string (steal the string buffer) if the SV on the
4588          * rhs is about to be freed anyway (TEMP and refcnt==1).  This is a
4589          * big win on long strings.  It should be a win on short strings if
4590          * SvPVX_const(dstr) has to be allocated.  If not, it should not 
4591          * slow things down, as SvPVX_const(sstr) would have been freed
4592          * soon anyway.
4593          * 
4594          * We also steal the buffer from a PADTMP (operator target) if it
4595          * is â€˜long enough’.  For short strings, a swipe does not help
4596          * here, as it causes more malloc calls the next time the target
4597          * is used.  Benchmarks show that even if SvPVX_const(dstr) has to
4598          * be allocated it is still not worth swiping PADTMPs for short
4599          * strings, as the savings here are small.
4600          * 
4601          * If swiping is not an option, then we see whether it is
4602          * worth using copy-on-write.  If the lhs already has a buf-
4603          * fer big enough and the string is short, we skip it and fall back
4604          * to method 3, since memcpy is faster for short strings than the
4605          * later bookkeeping overhead that copy-on-write entails.
4606
4607          * If the rhs is not a copy-on-write string yet, then we also
4608          * consider whether the buffer is too large relative to the string
4609          * it holds.  Some operations such as readline allocate a large
4610          * buffer in the expectation of reusing it.  But turning such into
4611          * a COW buffer is counter-productive because it increases memory
4612          * usage by making readline allocate a new large buffer the sec-
4613          * ond time round.  So, if the buffer is too large, again, we use
4614          * method 3 (copy).
4615          * 
4616          * Finally, if there is no buffer on the left, or the buffer is too 
4617          * small, then we use copy-on-write and make both SVs share the
4618          * string buffer.
4619          *
4620          */
4621
4622         /* Whichever path we take through the next code, we want this true,
4623            and doing it now facilitates the COW check.  */
4624         (void)SvPOK_only(dstr);
4625
4626         if (
4627                  (              /* Either ... */
4628                                 /* slated for free anyway (and not COW)? */
4629                     (sflags & (SVs_TEMP|SVf_IsCOW)) == SVs_TEMP
4630                                 /* or a swipable TARG */
4631                  || ((sflags &
4632                            (SVs_PADTMP|SVf_READONLY|SVf_PROTECT|SVf_IsCOW))
4633                        == SVs_PADTMP
4634                                 /* whose buffer is worth stealing */
4635                      && CHECK_COWBUF_THRESHOLD(cur,len)
4636                     )
4637                  ) &&
4638                  !(sflags & SVf_OOK) &&   /* and not involved in OOK hack? */
4639                  (!(flags & SV_NOSTEAL)) &&
4640                                         /* and we're allowed to steal temps */
4641                  SvREFCNT(sstr) == 1 &&   /* and no other references to it? */
4642                  len)             /* and really is a string */
4643         {       /* Passes the swipe test.  */
4644             if (SvPVX_const(dstr))      /* we know that dtype >= SVt_PV */
4645                 SvPV_free(dstr);
4646             SvPV_set(dstr, SvPVX_mutable(sstr));
4647             SvLEN_set(dstr, SvLEN(sstr));
4648             SvCUR_set(dstr, SvCUR(sstr));
4649
4650             SvTEMP_off(dstr);
4651             (void)SvOK_off(sstr);       /* NOTE: nukes most SvFLAGS on sstr */
4652             SvPV_set(sstr, NULL);
4653             SvLEN_set(sstr, 0);
4654             SvCUR_set(sstr, 0);
4655             SvTEMP_off(sstr);
4656         }
4657         else if (flags & SV_COW_SHARED_HASH_KEYS
4658               &&
4659 #ifdef PERL_COPY_ON_WRITE
4660                  (sflags & SVf_IsCOW
4661                    ? (!len ||
4662                        (  (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
4663                           /* If this is a regular (non-hek) COW, only so
4664                              many COW "copies" are possible. */
4665                        && CowREFCNT(sstr) != SV_COW_REFCNT_MAX  ))
4666                    : (  (sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4667                      && !(SvFLAGS(dstr) & SVf_BREAK)
4668                      && CHECK_COW_THRESHOLD(cur,len) && cur+1 < len
4669                      && (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
4670                     ))
4671 #else
4672                  sflags & SVf_IsCOW
4673               && !(SvFLAGS(dstr) & SVf_BREAK)
4674 #endif
4675             ) {
4676             /* Either it's a shared hash key, or it's suitable for
4677                copy-on-write.  */
4678 #ifdef DEBUGGING
4679             if (DEBUG_C_TEST) {
4680                 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4681                 sv_dump(sstr);
4682                 sv_dump(dstr);
4683             }
4684 #endif
4685 #ifdef PERL_ANY_COW
4686             if (!(sflags & SVf_IsCOW)) {
4687                     SvIsCOW_on(sstr);
4688                     CowREFCNT(sstr) = 0;
4689             }
4690 #endif
4691             if (SvPVX_const(dstr)) {    /* we know that dtype >= SVt_PV */
4692                 SvPV_free(dstr);
4693             }
4694
4695 #ifdef PERL_ANY_COW
4696             if (len) {
4697                     if (sflags & SVf_IsCOW) {
4698                         sv_buf_to_rw(sstr);
4699                     }
4700                     CowREFCNT(sstr)++;
4701                     SvPV_set(dstr, SvPVX_mutable(sstr));
4702                     sv_buf_to_ro(sstr);
4703             } else
4704 #endif
4705             {
4706                     /* SvIsCOW_shared_hash */
4707                     DEBUG_C(PerlIO_printf(Perl_debug_log,
4708                                           "Copy on write: Sharing hash\n"));
4709
4710                     assert (SvTYPE(dstr) >= SVt_PV);
4711                     SvPV_set(dstr,
4712                              HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
4713             }
4714             SvLEN_set(dstr, len);
4715             SvCUR_set(dstr, cur);
4716             SvIsCOW_on(dstr);
4717         } else {
4718             /* Failed the swipe test, and we cannot do copy-on-write either.
4719                Have to copy the string.  */
4720             SvGROW(dstr, cur + 1);      /* inlined from sv_setpvn */
4721             Move(SvPVX_const(sstr),SvPVX(dstr),cur,char);
4722             SvCUR_set(dstr, cur);
4723             *SvEND(dstr) = '\0';
4724         }
4725         if (sflags & SVp_NOK) {
4726             SvNV_set(dstr, SvNVX(sstr));
4727         }
4728         if (sflags & SVp_IOK) {
4729             SvIV_set(dstr, SvIVX(sstr));
4730             if (sflags & SVf_IVisUV)
4731                 SvIsUV_on(dstr);
4732         }
4733         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4734         {
4735             const MAGIC * const smg = SvVSTRING_mg(sstr);
4736             if (smg) {
4737                 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4738                          smg->mg_ptr, smg->mg_len);
4739                 SvRMAGICAL_on(dstr);
4740             }
4741         }
4742     }
4743     else if (sflags & (SVp_IOK|SVp_NOK)) {
4744         (void)SvOK_off(dstr);
4745         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
4746         if (sflags & SVp_IOK) {
4747             /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
4748             SvIV_set(dstr, SvIVX(sstr));
4749         }
4750         if (sflags & SVp_NOK) {
4751             SvNV_set(dstr, SvNVX(sstr));
4752         }
4753     }
4754     else {
4755         if (isGV_with_GP(sstr)) {
4756             gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
4757         }
4758         else
4759             (void)SvOK_off(dstr);
4760     }
4761     if (SvTAINTED(sstr))
4762         SvTAINT(dstr);
4763 }
4764
4765
4766 /*
4767 =for apidoc sv_set_undef
4768
4769 Equivalent to C<sv_setsv(sv, &PL_sv_undef)>, but more efficient.
4770 Doesn't handle set magic.
4771
4772 The perl equivalent is C<$sv = undef;>. Note that it doesn't free any string
4773 buffer, unlike C<undef $sv>.
4774
4775 Introduced in perl 5.25.12.
4776
4777 =cut
4778 */
4779
4780 void
4781 Perl_sv_set_undef(pTHX_ SV *sv)
4782 {
4783     U32 type = SvTYPE(sv);
4784
4785     PERL_ARGS_ASSERT_SV_SET_UNDEF;
4786
4787     /* shortcut, NULL, IV, RV */
4788
4789     if (type <= SVt_IV) {
4790         assert(!SvGMAGICAL(sv));
4791         if (SvREADONLY(sv)) {
4792             /* does undeffing PL_sv_undef count as modifying a read-only
4793              * variable? Some XS code does this */
4794             if (sv == &PL_sv_undef)
4795                 return;
4796             Perl_croak_no_modify();
4797         }
4798
4799         if (SvROK(sv)) {
4800             if (SvWEAKREF(sv))
4801                 sv_unref_flags(sv, 0);
4802             else {
4803                 SV *rv = SvRV(sv);
4804                 SvFLAGS(sv) = type; /* quickly turn off all flags */
4805                 SvREFCNT_dec_NN(rv);
4806                 return;
4807             }
4808         }
4809         SvFLAGS(sv) = type; /* quickly turn off all flags */
4810         return;
4811     }
4812
4813     if (SvIS_FREED(sv))
4814         Perl_croak(aTHX_ "panic: attempt to undefine a freed scalar %p",
4815             (void *)sv);
4816
4817     SV_CHECK_THINKFIRST_COW_DROP(sv);
4818
4819     if (isGV_with_GP(sv))
4820         Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4821                        "Undefined value assigned to typeglob");
4822     else
4823         SvOK_off(sv);
4824 }
4825
4826
4827
4828 /*
4829 =for apidoc sv_setsv_mg
4830
4831 Like C<sv_setsv>, but also handles 'set' magic.
4832
4833 =cut
4834 */
4835
4836 void
4837 Perl_sv_setsv_mg(pTHX_ SV *const dstr, SV *const sstr)
4838 {
4839     PERL_ARGS_ASSERT_SV_SETSV_MG;
4840
4841     sv_setsv(dstr,sstr);
4842     SvSETMAGIC(dstr);
4843 }
4844
4845 #ifdef PERL_ANY_COW
4846 #  define SVt_COW SVt_PV
4847 SV *
4848 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4849 {
4850     STRLEN cur = SvCUR(sstr);
4851     STRLEN len = SvLEN(sstr);
4852     char *new_pv;
4853 #if defined(PERL_DEBUG_READONLY_COW) && defined(PERL_COPY_ON_WRITE)
4854     const bool already = cBOOL(SvIsCOW(sstr));
4855 #endif
4856
4857     PERL_ARGS_ASSERT_SV_SETSV_COW;
4858 #ifdef DEBUGGING
4859     if (DEBUG_C_TEST) {
4860         PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4861                       (void*)sstr, (void*)dstr);
4862         sv_dump(sstr);
4863         if (dstr)
4864                     sv_dump(dstr);
4865     }
4866 #endif
4867     if (dstr) {
4868         if (SvTHINKFIRST(dstr))
4869             sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4870         else if (SvPVX_const(dstr))
4871             Safefree(SvPVX_mutable(dstr));
4872     }
4873     else
4874         new_SV(dstr);
4875     SvUPGRADE(dstr, SVt_COW);
4876
4877     assert (SvPOK(sstr));
4878     assert (SvPOKp(sstr));
4879
4880     if (SvIsCOW(sstr)) {
4881
4882         if (SvLEN(sstr) == 0) {
4883             /* source is a COW shared hash key.  */
4884             DEBUG_C(PerlIO_printf(Perl_debug_log,
4885                                   "Fast copy on write: Sharing hash\n"));
4886             new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
4887             goto common_exit;
4888         }
4889         assert(SvCUR(sstr)+1 < SvLEN(sstr));
4890         assert(CowREFCNT(sstr) < SV_COW_REFCNT_MAX);
4891     } else {
4892         assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4893         SvUPGRADE(sstr, SVt_COW);
4894         SvIsCOW_on(sstr);
4895         DEBUG_C(PerlIO_printf(Perl_debug_log,
4896                               "Fast copy on write: Converting sstr to COW\n"));
4897         CowREFCNT(sstr) = 0;    
4898     }
4899 #  ifdef PERL_DEBUG_READONLY_COW
4900     if (already) sv_buf_to_rw(sstr);
4901 #  endif
4902     CowREFCNT(sstr)++;  
4903     new_pv = SvPVX_mutable(sstr);
4904     sv_buf_to_ro(sstr);
4905
4906   common_exit:
4907     SvPV_set(dstr, new_pv);
4908     SvFLAGS(dstr) = (SVt_COW|SVf_POK|SVp_POK|SVf_IsCOW);
4909     if (SvUTF8(sstr))
4910         SvUTF8_on(dstr);
4911     SvLEN_set(dstr, len);
4912     SvCUR_set(dstr, cur);
4913 #ifdef DEBUGGING
4914     if (DEBUG_C_TEST)
4915                 sv_dump(dstr);
4916 #endif
4917     return dstr;
4918 }
4919 #endif
4920
4921 /*
4922 =for apidoc sv_setpv_bufsize
4923
4924 Sets the SV to be a string of cur bytes length, with at least
4925 len bytes available. Ensures that there is a null byte at SvEND.
4926 Returns a char * pointer to the SvPV buffer.
4927
4928 =cut
4929 */
4930
4931 char *
4932 Perl_sv_setpv_bufsize(pTHX_ SV *const sv, const STRLEN cur, const STRLEN len)
4933 {
4934     char *pv;
4935
4936     PERL_ARGS_ASSERT_SV_SETPV_BUFSIZE;
4937
4938     SV_CHECK_THINKFIRST_COW_DROP(sv);
4939     SvUPGRADE(sv, SVt_PV);
4940     pv = SvGROW(sv, len + 1);
4941     SvCUR_set(sv, cur);
4942     *(SvEND(sv))= '\0';
4943     (void)SvPOK_only_UTF8(sv);                /* validate pointer */
4944
4945     SvTAINT(sv);
4946     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4947     return pv;
4948 }
4949
4950 /*
4951 =for apidoc sv_setpvn
4952
4953 Copies a string (possibly containing embedded C<NUL> characters) into an SV.
4954 The C<len> parameter indicates the number of
4955 bytes to be copied.  If the C<ptr> argument is NULL the SV will become
4956 undefined.  Does not handle 'set' magic.  See C<L</sv_setpvn_mg>>.
4957
4958 The UTF-8 flag is not changed by this function.  A terminating NUL byte is
4959 guaranteed.
4960
4961 =cut
4962 */
4963
4964 void
4965 Perl_sv_setpvn(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4966 {
4967     char *dptr;
4968
4969     PERL_ARGS_ASSERT_SV_SETPVN;
4970
4971     SV_CHECK_THINKFIRST_COW_DROP(sv);
4972     if (isGV_with_GP(sv))
4973         Perl_croak_no_modify();
4974     if (!ptr) {
4975         (void)SvOK_off(sv);
4976         return;
4977     }
4978     else {
4979         /* len is STRLEN which is unsigned, need to copy to signed */
4980         const IV iv = len;
4981         if (iv < 0)
4982             Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen %"
4983                        IVdf, iv);
4984     }
4985     SvUPGRADE(sv, SVt_PV);
4986
4987     dptr = SvGROW(sv, len + 1);
4988     Move(ptr,dptr,len,char);
4989     dptr[len] = '\0';
4990     SvCUR_set(sv, len);
4991     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4992     SvTAINT(sv);
4993     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4994 }
4995
4996 /*
4997 =for apidoc sv_setpvn_mg
4998
4999 Like C<sv_setpvn>, but also handles 'set' magic.
5000
5001 =cut
5002 */
5003
5004 void
5005 Perl_sv_setpvn_mg(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
5006 {
5007     PERL_ARGS_ASSERT_SV_SETPVN_MG;
5008
5009     sv_setpvn(sv,ptr,len);
5010     SvSETMAGIC(sv);
5011 }
5012
5013 /*
5014 =for apidoc sv_setpv
5015
5016 Copies a string into an SV.  The string must be terminated with a C<NUL>
5017 character, and not contain embeded C<NUL>'s.
5018 Does not handle 'set' magic.  See C<L</sv_setpv_mg>>.
5019
5020 =cut
5021 */
5022
5023 void
5024 Perl_sv_setpv(pTHX_ SV *const sv, const char *const ptr)
5025 {
5026     STRLEN len;
5027
5028     PERL_ARGS_ASSERT_SV_SETPV;
5029
5030     SV_CHECK_THINKFIRST_COW_DROP(sv);
5031     if (!ptr) {
5032         (void)SvOK_off(sv);
5033         return;
5034     }
5035     len = strlen(ptr);
5036     SvUPGRADE(sv, SVt_PV);
5037
5038     SvGROW(sv, len + 1);
5039     Move(ptr,SvPVX(sv),len+1,char);
5040     SvCUR_set(sv, len);
5041     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5042     SvTAINT(sv);
5043     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
5044 }
5045
5046 /*
5047 =for apidoc sv_setpv_mg
5048
5049 Like C<sv_setpv>, but also handles 'set' magic.
5050
5051 =cut
5052 */
5053
5054 void
5055 Perl_sv_setpv_mg(pTHX_ SV *const sv, const char *const ptr)
5056 {
5057     PERL_ARGS_ASSERT_SV_SETPV_MG;
5058
5059     sv_setpv(sv,ptr);
5060     SvSETMAGIC(sv);
5061 }
5062
5063 void
5064 Perl_sv_sethek(pTHX_ SV *const sv, const HEK *const hek)
5065 {
5066     PERL_ARGS_ASSERT_SV_SETHEK;
5067
5068     if (!hek) {
5069         return;
5070     }
5071
5072     if (HEK_LEN(hek) == HEf_SVKEY) {
5073         sv_setsv(sv, *(SV**)HEK_KEY(hek));
5074         return;
5075     } else {
5076         const int flags = HEK_FLAGS(hek);
5077         if (flags & HVhek_WASUTF8) {
5078             STRLEN utf8_len = HEK_LEN(hek);
5079             char *as_utf8 = (char *)bytes_to_utf8((U8*)HEK_KEY(hek), &utf8_len);
5080             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
5081             SvUTF8_on(sv);
5082             return;
5083         } else if (flags & HVhek_UNSHARED) {
5084             sv_setpvn(sv, HEK_KEY(hek), HEK_LEN(hek));
5085             if (HEK_UTF8(hek))
5086                 SvUTF8_on(sv);
5087             else SvUTF8_off(sv);
5088             return;
5089         }
5090         {
5091             SV_CHECK_THINKFIRST_COW_DROP(sv);
5092             SvUPGRADE(sv, SVt_PV);
5093             SvPV_free(sv);
5094             SvPV_set(sv,(char *)HEK_KEY(share_hek_hek(hek)));
5095             SvCUR_set(sv, HEK_LEN(hek));
5096             SvLEN_set(sv, 0);
5097             SvIsCOW_on(sv);
5098             SvPOK_on(sv);
5099             if (HEK_UTF8(hek))
5100                 SvUTF8_on(sv);
5101             else SvUTF8_off(sv);
5102             return;
5103         }
5104     }
5105 }
5106
5107
5108 /*
5109 =for apidoc sv_usepvn_flags
5110
5111 Tells an SV to use C<ptr> to find its string value.  Normally the
5112 string is stored inside the SV, but sv_usepvn allows the SV to use an
5113 outside string.  C<ptr> should point to memory that was allocated
5114 by L<C<Newx>|perlclib/Memory Management and String Handling>.  It must be
5115 the start of a C<Newx>-ed block of memory, and not a pointer to the
5116 middle of it (beware of L<C<OOK>|perlguts/Offsets> and copy-on-write),
5117 and not be from a non-C<Newx> memory allocator like C<malloc>.  The
5118 string length, C<len>, must be supplied.  By default this function
5119 will C<Renew> (i.e. realloc, move) the memory pointed to by C<ptr>,
5120 so that pointer should not be freed or used by the programmer after
5121 giving it to C<sv_usepvn>, and neither should any pointers from "behind"
5122 that pointer (e.g. ptr + 1) be used.
5123
5124 If S<C<flags & SV_SMAGIC>> is true, will call C<SvSETMAGIC>.  If
5125 S<C<flags & SV_HAS_TRAILING_NUL>> is true, then C<ptr[len]> must be C<NUL>,
5126 and the realloc
5127 will be skipped (i.e. the buffer is actually at least 1 byte longer than
5128 C<len>, and already meets the requirements for storing in C<SvPVX>).
5129
5130 =for apidoc Amnh||SV_SMAGIC
5131 =for apidoc Amnh||SV_HAS_TRAILING_NUL
5132
5133 =cut
5134 */
5135
5136 void
5137 Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
5138 {
5139     STRLEN allocate;
5140
5141     PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
5142
5143     SV_CHECK_THINKFIRST_COW_DROP(sv);
5144     SvUPGRADE(sv, SVt_PV);
5145     if (!ptr) {
5146         (void)SvOK_off(sv);
5147         if (flags & SV_SMAGIC)
5148             SvSETMAGIC(sv);
5149         return;
5150     }
5151     if (SvPVX_const(sv))
5152         SvPV_free(sv);
5153
5154 #ifdef DEBUGGING
5155     if (flags & SV_HAS_TRAILING_NUL)
5156         assert(ptr[len] == '\0');
5157 #endif
5158
5159     allocate = (flags & SV_HAS_TRAILING_NUL)
5160         ? len + 1 :
5161 #ifdef Perl_safesysmalloc_size
5162         len + 1;
5163 #else 
5164         PERL_STRLEN_ROUNDUP(len + 1);
5165 #endif
5166     if (flags & SV_HAS_TRAILING_NUL) {
5167         /* It's long enough - do nothing.
5168            Specifically Perl_newCONSTSUB is relying on this.  */
5169     } else {
5170 #ifdef DEBUGGING
5171         /* Force a move to shake out bugs in callers.  */
5172         char *new_ptr = (char*)safemalloc(allocate);
5173         Copy(ptr, new_ptr, len, char);
5174         PoisonFree(ptr,len,char);
5175         Safefree(ptr);
5176         ptr = new_ptr;
5177 #else
5178         ptr = (char*) saferealloc (ptr, allocate);
5179 #endif
5180     }
5181 #ifdef Perl_safesysmalloc_size
5182     SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
5183 #else
5184     SvLEN_set(sv, allocate);
5185 #endif
5186     SvCUR_set(sv, len);
5187     SvPV_set(sv, ptr);
5188     if (!(flags & SV_HAS_TRAILING_NUL)) {
5189         ptr[len] = '\0';
5190     }
5191     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5192     SvTAINT(sv);
5193     if (flags & SV_SMAGIC)
5194         SvSETMAGIC(sv);
5195 }
5196
5197
5198 static void
5199 S_sv_uncow(pTHX_ SV * const sv, const U32 flags)
5200 {
5201     assert(SvIsCOW(sv));
5202     {
5203 #ifdef PERL_ANY_COW
5204         const char * const pvx = SvPVX_const(sv);
5205         const STRLEN len = SvLEN(sv);
5206         const STRLEN cur = SvCUR(sv);
5207
5208 #ifdef DEBUGGING
5209         if (DEBUG_C_TEST) {
5210                 PerlIO_printf(Perl_debug_log,
5211                               "Copy on write: Force normal %ld\n",
5212                               (long) flags);
5213                 sv_dump(sv);
5214         }
5215 #endif
5216         SvIsCOW_off(sv);
5217 # ifdef PERL_COPY_ON_WRITE
5218         if (len) {
5219             /* Must do this first, since the CowREFCNT uses SvPVX and
5220             we need to write to CowREFCNT, or de-RO the whole buffer if we are
5221             the only owner left of the buffer. */
5222             sv_buf_to_rw(sv); /* NOOP if RO-ing not supported */
5223             {
5224                 U8 cowrefcnt = CowREFCNT(sv);
5225                 if(cowrefcnt != 0) {
5226                     cowrefcnt--;
5227                     CowREFCNT(sv) = cowrefcnt;
5228                     sv_buf_to_ro(sv);
5229                     goto copy_over;
5230                 }
5231             }
5232             /* Else we are the only owner of the buffer. */
5233         }
5234         else
5235 # endif
5236         {
5237             /* This SV doesn't own the buffer, so need to Newx() a new one:  */
5238             copy_over:
5239             SvPV_set(sv, NULL);
5240             SvCUR_set(sv, 0);
5241             SvLEN_set(sv, 0);
5242             if (flags & SV_COW_DROP_PV) {
5243                 /* OK, so we don't need to copy our buffer.  */
5244                 SvPOK_off(sv);
5245             } else {
5246                 SvGROW(sv, cur + 1);
5247                 Move(pvx,SvPVX(sv),cur,char);
5248                 SvCUR_set(sv, cur);
5249                 *SvEND(sv) = '\0';
5250             }
5251             if (! len) {
5252                         unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5253             }
5254 #ifdef DEBUGGING
5255             if (DEBUG_C_TEST)
5256                 sv_dump(sv);
5257 #endif
5258         }
5259 #else
5260             const char * const pvx = SvPVX_const(sv);
5261             const STRLEN len = SvCUR(sv);
5262             SvIsCOW_off(sv);
5263             SvPV_set(sv, NULL);
5264             SvLEN_set(sv, 0);
5265             if (flags & SV_COW_DROP_PV) {
5266                 /* OK, so we don't need to copy our buffer.  */
5267                 SvPOK_off(sv);
5268             } else {
5269                 SvGROW(sv, len + 1);
5270                 Move(pvx,SvPVX(sv),len,char);
5271                 *SvEND(sv) = '\0';
5272             }
5273             unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5274 #endif
5275     }
5276 }
5277
5278
5279 /*
5280 =for apidoc sv_force_normal_flags
5281
5282 Undo various types of fakery on an SV, where fakery means
5283 "more than" a string: if the PV is a shared string, make
5284 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
5285 an C<xpvmg>; if we're a copy-on-write scalar, this is the on-write time when
5286 we do the copy, and is also used locally; if this is a
5287 vstring, drop the vstring magic.  If C<SV_COW_DROP_PV> is set
5288 then a copy-on-write scalar drops its PV buffer (if any) and becomes
5289 C<SvPOK_off> rather than making a copy.  (Used where this
5290 scalar is about to be set to some other value.)  In addition,
5291 the C<flags> parameter gets passed to C<sv_unref_flags()>
5292 when unreffing.  C<sv_force_normal> calls this function
5293 with flags set to 0.
5294
5295 This function is expected to be used to signal to perl that this SV is
5296 about to be written to, and any extra book-keeping needs to be taken care
5297 of.  Hence, it croaks on read-only values.
5298
5299 =for apidoc Amnh||SV_COW_DROP_PV
5300
5301 =cut
5302 */
5303
5304 void
5305 Perl_sv_force_normal_flags(pTHX_ SV *const sv, const U32 flags)
5306 {
5307     PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
5308
5309     if (SvREADONLY(sv))
5310         Perl_croak_no_modify();
5311     else if (SvIsCOW(sv) && LIKELY(SvTYPE(sv) != SVt_PVHV))
5312         S_sv_uncow(aTHX_ sv, flags);
5313     if (SvROK(sv))
5314         sv_unref_flags(sv, flags);
5315     else if (SvFAKE(sv) && isGV_with_GP(sv))
5316         sv_unglob(sv, flags);
5317     else if (SvFAKE(sv) && isREGEXP(sv)) {
5318         /* Need to downgrade the REGEXP to a simple(r) scalar. This is analogous
5319            to sv_unglob. We only need it here, so inline it.  */
5320         const bool islv = SvTYPE(sv) == SVt_PVLV;
5321         const svtype new_type =
5322           islv ? SVt_NULL : SvMAGIC(sv) || SvSTASH(sv) ? SVt_PVMG : SVt_PV;
5323         SV *const temp = newSV_type(new_type);
5324         regexp *old_rx_body;
5325
5326         if (new_type == SVt_PVMG) {
5327             SvMAGIC_set(temp, SvMAGIC(sv));
5328             SvMAGIC_set(sv, NULL);
5329             SvSTASH_set(temp, SvSTASH(sv));
5330             SvSTASH_set(sv, NULL);
5331         }
5332         if (!islv)
5333             SvCUR_set(temp, SvCUR(sv));
5334         /* Remember that SvPVX is in the head, not the body. */
5335         assert(ReANY((REGEXP *)sv)->mother_re);
5336
5337         if (islv) {
5338             /* LV-as-regex has sv->sv_any pointing to an XPVLV body,
5339              * whose xpvlenu_rx field points to the regex body */
5340             XPV *xpv = (XPV*)(SvANY(sv));
5341             old_rx_body = xpv->xpv_len_u.xpvlenu_rx;
5342             xpv->xpv_len_u.xpvlenu_rx = NULL;
5343         }
5344         else
5345             old_rx_body = ReANY((REGEXP *)sv);
5346
5347         /* Their buffer is already owned by someone else. */
5348         if (flags & SV_COW_DROP_PV) {
5349             /* SvLEN is already 0.  For SVt_REGEXP, we have a brand new
5350                zeroed body.  For SVt_PVLV, we zeroed it above (len field
5351                a union with xpvlenu_rx) */
5352             assert(!SvLEN(islv ? sv : temp));
5353             sv->sv_u.svu_pv = 0;
5354         }
5355         else {
5356             sv->sv_u.svu_pv = savepvn(RX_WRAPPED((REGEXP *)sv), SvCUR(sv));
5357             SvLEN_set(islv ? sv : temp, SvCUR(sv)+1);
5358             SvPOK_on(sv);
5359         }
5360
5361         /* Now swap the rest of the bodies. */
5362
5363         SvFAKE_off(sv);
5364         if (!islv) {
5365             SvFLAGS(sv) &= ~SVTYPEMASK;
5366             SvFLAGS(sv) |= new_type;
5367             SvANY(sv) = SvANY(temp);
5368         }
5369
5370         SvFLAGS(temp) &= ~(SVTYPEMASK);
5371         SvFLAGS(temp) |= SVt_REGEXP|SVf_FAKE;
5372         SvANY(temp) = old_rx_body;
5373
5374         SvREFCNT_dec_NN(temp);
5375     }
5376     else if (SvVOK(sv)) sv_unmagic(sv, PERL_MAGIC_vstring);
5377 }
5378
5379 /*
5380 =for apidoc sv_chop
5381
5382 Efficient removal of characters from the beginning of the string buffer.
5383 C<SvPOK(sv)>, or at least C<SvPOKp(sv)>, must be true and C<ptr> must be a
5384 pointer to somewhere inside the string buffer.  C<ptr> becomes the first
5385 character of the adjusted string.  Uses the C<OOK> hack.  On return, only
5386 C<SvPOK(sv)> and C<SvPOKp(sv)> among the C<OK> flags will be true.
5387
5388 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
5389 refer to the same chunk of data.
5390
5391 The unfortunate similarity of this function's name to that of Perl's C<chop>
5392 operator is strictly coincidental.  This function works from the left;
5393 C<chop> works from the right.
5394
5395 =cut
5396 */
5397
5398 void
5399 Perl_sv_chop(pTHX_ SV *const sv, const char *const ptr)
5400 {
5401     STRLEN delta;
5402     STRLEN old_delta;
5403     U8 *p;
5404 #ifdef DEBUGGING
5405     const U8 *evacp;
5406     STRLEN evacn;
5407 #endif
5408     STRLEN max_delta;
5409
5410     PERL_ARGS_ASSERT_SV_CHOP;
5411
5412     if (!ptr || !SvPOKp(sv))
5413         return;
5414     delta = ptr - SvPVX_const(sv);
5415     if (!delta) {
5416         /* Nothing to do.  */
5417         return;
5418     }
5419     max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
5420     if (delta > max_delta)
5421         Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
5422                    ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
5423     /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), so don't use ptr any more */
5424     SV_CHECK_THINKFIRST(sv);
5425     SvPOK_only_UTF8(sv);
5426
5427     if (!SvOOK(sv)) {
5428         if (!SvLEN(sv)) { /* make copy of shared string */
5429             const char *pvx = SvPVX_const(sv);
5430             const STRLEN len = SvCUR(sv);
5431             SvGROW(sv, len + 1);
5432             Move(pvx,SvPVX(sv),len,char);
5433             *SvEND(sv) = '\0';
5434         }
5435         SvOOK_on(sv);
5436         old_delta = 0;
5437     } else {
5438         SvOOK_offset(sv, old_delta);
5439     }
5440     SvLEN_set(sv, SvLEN(sv) - delta);
5441     SvCUR_set(sv, SvCUR(sv) - delta);
5442     SvPV_set(sv, SvPVX(sv) + delta);
5443
5444     p = (U8 *)SvPVX_const(sv);
5445
5446 #ifdef DEBUGGING
5447     /* how many bytes were evacuated?  we will fill them with sentinel
5448        bytes, except for the part holding the new offset of course. */
5449     evacn = delta;
5450     if (old_delta)
5451         evacn += (old_delta < 0x100 ? 1 : 1 + sizeof(STRLEN));
5452     assert(evacn);
5453     assert(evacn <= delta + old_delta);
5454     evacp = p - evacn;
5455 #endif
5456
5457     /* This sets 'delta' to the accumulated value of all deltas so far */
5458     delta += old_delta;
5459     assert(delta);
5460
5461     /* If 'delta' fits in a byte, store it just prior to the new beginning of
5462      * the string; otherwise store a 0 byte there and store 'delta' just prior
5463      * to that, using as many bytes as a STRLEN occupies.  Thus it overwrites a
5464      * portion of the chopped part of the string */
5465     if (delta < 0x100) {
5466         *--p = (U8) delta;
5467     } else {
5468         *--p = 0;
5469         p -= sizeof(STRLEN);
5470         Copy((U8*)&delta, p, sizeof(STRLEN), U8);
5471     }
5472
5473 #ifdef DEBUGGING
5474     /* Fill the preceding buffer with sentinals to verify that no-one is
5475        using it.  */
5476     while (p > evacp) {
5477         --p;
5478         *p = (U8)PTR2UV(p);
5479     }
5480 #endif
5481 }
5482
5483 /*
5484 =for apidoc sv_catpvn
5485
5486 Concatenates the string onto the end of the string which is in the SV.
5487 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
5488 status set, then the bytes appended should be valid UTF-8.
5489 Handles 'get' magic, but not 'set' magic.  See C<L</sv_catpvn_mg>>.
5490
5491 =for apidoc sv_catpvn_flags
5492
5493 Concatenates the string onto the end of the string which is in the SV.  The
5494 C<len> indicates number of bytes to copy.
5495
5496 By default, the string appended is assumed to be valid UTF-8 if the SV has
5497 the UTF-8 status set, and a string of bytes otherwise.  One can force the
5498 appended string to be interpreted as UTF-8 by supplying the C<SV_CATUTF8>
5499 flag, and as bytes by supplying the C<SV_CATBYTES> flag; the SV or the
5500 string appended will be upgraded to UTF-8 if necessary.
5501
5502 If C<flags> has the C<SV_SMAGIC> bit set, will
5503 C<L</mg_set>> on C<dsv> afterwards if appropriate.
5504 C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
5505 in terms of this function.
5506
5507 =for apidoc Amnh||SV_CATUTF8
5508 =for apidoc Amnh||SV_CATBYTES
5509
5510 =cut
5511 */
5512
5513 void
5514 Perl_sv_catpvn_flags(pTHX_ SV *const dsv, const char *sstr, const STRLEN slen, const I32 flags)
5515 {
5516     STRLEN dlen;
5517     const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
5518
5519     PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
5520     assert((flags & (SV_CATBYTES|SV_CATUTF8)) != (SV_CATBYTES|SV_CATUTF8));
5521
5522     if (!(flags & SV_CATBYTES) || !SvUTF8(dsv)) {
5523       if (flags & SV_CATUTF8 && !SvUTF8(dsv)) {
5524          sv_utf8_upgrade_flags_grow(dsv, 0, slen + 1);
5525          dlen = SvCUR(dsv);
5526       }
5527       else SvGROW(dsv, dlen + slen + 3);
5528       if (sstr == dstr)
5529         sstr = SvPVX_const(dsv);
5530       Move(sstr, SvPVX(dsv) + dlen, slen, char);
5531       SvCUR_set(dsv, SvCUR(dsv) + slen);
5532     }
5533     else {
5534         /* We inline bytes_to_utf8, to avoid an extra malloc. */
5535         const char * const send = sstr + slen;
5536         U8 *d;
5537
5538         /* Something this code does not account for, which I think is
5539            impossible; it would require the same pv to be treated as
5540            bytes *and* utf8, which would indicate a bug elsewhere. */
5541         assert(sstr != dstr);
5542
5543         SvGROW(dsv, dlen + slen * 2 + 3);
5544         d = (U8 *)SvPVX(dsv) + dlen;
5545
5546         while (sstr < send) {
5547             append_utf8_from_native_byte(*sstr, &d);
5548             sstr++;
5549         }
5550         SvCUR_set(dsv, d-(const U8 *)SvPVX(dsv));
5551     }
5552     *SvEND(dsv) = '\0';
5553     (void)SvPOK_only_UTF8(dsv);         /* validate pointer */
5554     SvTAINT(dsv);
5555     if (flags & SV_SMAGIC)
5556         SvSETMAGIC(dsv);
5557 }
5558
5559 /*
5560 =for apidoc sv_catsv
5561
5562 Concatenates the string from SV C<ssv> onto the end of the string in SV
5563 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5564 Handles 'get' magic on both SVs, but no 'set' magic.  See C<L</sv_catsv_mg>>
5565 and C<L</sv_catsv_nomg>>.
5566
5567 =for apidoc sv_catsv_flags
5568
5569 Concatenates the string from SV C<ssv> onto the end of the string in SV
5570 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5571 If C<flags> has the C<SV_GMAGIC> bit set, will call C<L</mg_get>> on both SVs if
5572 appropriate.  If C<flags> has the C<SV_SMAGIC> bit set, C<L</mg_set>> will be called on
5573 the modified SV afterward, if appropriate.  C<sv_catsv>, C<sv_catsv_nomg>,
5574 and C<sv_catsv_mg> are implemented in terms of this function.
5575
5576 =cut */
5577
5578 void
5579 Perl_sv_catsv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
5580 {
5581     PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
5582
5583     if (ssv) {
5584         STRLEN slen;
5585         const char *spv = SvPV_flags_const(ssv, slen, flags);
5586         if (flags & SV_GMAGIC)
5587                 SvGETMAGIC(dsv);
5588         sv_catpvn_flags(dsv, spv, slen,
5589                             DO_UTF8(ssv) ? SV_CATUTF8 : SV_CATBYTES);
5590         if (flags & SV_SMAGIC)
5591                 SvSETMAGIC(dsv);
5592     }
5593 }
5594
5595 /*
5596 =for apidoc sv_catpv
5597
5598 Concatenates the C<NUL>-terminated string onto the end of the string which is
5599 in the SV.
5600 If the SV has the UTF-8 status set, then the bytes appended should be
5601 valid UTF-8.  Handles 'get' magic, but not 'set' magic.  See
5602 C<L</sv_catpv_mg>>.
5603
5604 =cut */
5605
5606 void
5607 Perl_sv_catpv(pTHX_ SV *const sv, const char *ptr)
5608 {
5609     STRLEN len;
5610     STRLEN tlen;
5611     char *junk;
5612
5613     PERL_ARGS_ASSERT_SV_CATPV;
5614
5615     if (!ptr)
5616         return;
5617     junk = SvPV_force(sv, tlen);
5618     len = strlen(ptr);
5619     SvGROW(sv, tlen + len + 1);
5620     if (ptr == junk)
5621         ptr = SvPVX_const(sv);
5622     Move(ptr,SvPVX(sv)+tlen,len+1,char);
5623     SvCUR_set(sv, SvCUR(sv) + len);
5624     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5625     SvTAINT(sv);
5626 }
5627
5628 /*
5629 =for apidoc sv_catpv_flags
5630
5631 Concatenates the C<NUL>-terminated string onto the end of the string which is
5632 in the SV.
5633 If the SV has the UTF-8 status set, then the bytes appended should
5634 be valid UTF-8.  If C<flags> has the C<SV_SMAGIC> bit set, will C<L</mg_set>>
5635 on the modified SV if appropriate.
5636
5637 =cut
5638 */
5639
5640 void
5641 Perl_sv_catpv_flags(pTHX_ SV *dstr, const char *sstr, const I32 flags)
5642 {
5643     PERL_ARGS_ASSERT_SV_CATPV_FLAGS;
5644     sv_catpvn_flags(dstr, sstr, strlen(sstr), flags);
5645 }
5646
5647 /*
5648 =for apidoc sv_catpv_mg
5649
5650 Like C<sv_catpv>, but also handles 'set' magic.
5651
5652 =cut
5653 */
5654
5655 void
5656 Perl_sv_catpv_mg(pTHX_ SV *const sv, const char *const ptr)
5657 {
5658     PERL_ARGS_ASSERT_SV_CATPV_MG;
5659
5660     sv_catpv(sv,ptr);
5661     SvSETMAGIC(sv);
5662 }
5663
5664 /*
5665 =for apidoc newSV
5666
5667 Creates a new SV.  A non-zero C<len> parameter indicates the number of
5668 bytes of preallocated string space the SV should have.  An extra byte for a
5669 trailing C<NUL> is also reserved.  (C<SvPOK> is not set for the SV even if string
5670 space is allocated.)  The reference count for the new SV is set to 1.
5671
5672 In 5.9.3, C<newSV()> replaces the older C<NEWSV()> API, and drops the first
5673 parameter, I<x>, a debug aid which allowed callers to identify themselves.
5674 This aid has been superseded by a new build option, C<PERL_MEM_LOG> (see
5675 L<perlhacktips/PERL_MEM_LOG>).  The older API is still there for use in XS
5676 modules supporting older perls.
5677
5678 =cut
5679 */
5680
5681 SV *
5682 Perl_newSV(pTHX_ const STRLEN len)
5683 {
5684     SV *sv;
5685
5686     new_SV(sv);
5687     if (len) {
5688         sv_grow(sv, len + 1);
5689     }
5690     return sv;
5691 }
5692 /*
5693 =for apidoc sv_magicext
5694
5695 Adds magic to an SV, upgrading it if necessary.  Applies the
5696 supplied C<vtable> and returns a pointer to the magic added.
5697
5698 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
5699 In particular, you can add magic to C<SvREADONLY> SVs, and add more than
5700 one instance of the same C<how>.
5701
5702 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
5703 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
5704 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
5705 to contain an SV* and is stored as-is with its C<REFCNT> incremented.
5706
5707 (This is now used as a subroutine by C<sv_magic>.)
5708
5709 =cut
5710 */
5711 MAGIC * 
5712 Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how, 
5713                 const MGVTBL *const vtable, const char *const name, const I32 namlen)
5714 {
5715     MAGIC* mg;
5716
5717     PERL_ARGS_ASSERT_SV_MAGICEXT;
5718
5719     SvUPGRADE(sv, SVt_PVMG);
5720     Newxz(mg, 1, MAGIC);
5721     mg->mg_moremagic = SvMAGIC(sv);
5722     SvMAGIC_set(sv, mg);
5723
5724     /* Sometimes a magic contains a reference loop, where the sv and
5725        object refer to each other.  To prevent a reference loop that
5726        would prevent such objects being freed, we look for such loops
5727        and if we find one we avoid incrementing the object refcount.
5728
5729        Note we cannot do this to avoid self-tie loops as intervening RV must
5730        have its REFCNT incremented to keep it in existence.
5731
5732     */
5733     if (!obj || obj == sv ||
5734         how == PERL_MAGIC_arylen ||
5735         how == PERL_MAGIC_regdata ||
5736         how == PERL_MAGIC_regdatum ||
5737         how == PERL_MAGIC_symtab ||
5738         (SvTYPE(obj) == SVt_PVGV &&
5739             (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
5740              || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
5741              || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
5742     {
5743         mg->mg_obj = obj;
5744     }
5745     else {
5746         mg->mg_obj = SvREFCNT_inc_simple(obj);
5747         mg->mg_flags |= MGf_REFCOUNTED;
5748     }
5749
5750     /* Normal self-ties simply pass a null object, and instead of
5751        using mg_obj directly, use the SvTIED_obj macro to produce a
5752        new RV as needed.  For glob "self-ties", we are tieing the PVIO
5753        with an RV obj pointing to the glob containing the PVIO.  In
5754        this case, to avoid a reference loop, we need to weaken the
5755        reference.
5756     */
5757
5758     if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
5759         obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
5760     {
5761       sv_rvweaken(obj);
5762     }
5763
5764     mg->mg_type = how;
5765     mg->mg_len = namlen;
5766     if (name) {
5767         if (namlen > 0)
5768             mg->mg_ptr = savepvn(name, namlen);
5769         else if (namlen == HEf_SVKEY) {
5770             /* Yes, this is casting away const. This is only for the case of
5771                HEf_SVKEY. I think we need to document this aberation of the
5772                constness of the API, rather than making name non-const, as
5773                that change propagating outwards a long way.  */
5774             mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
5775         } else
5776             mg->mg_ptr = (char *) name;
5777     }
5778     mg->mg_virtual = (MGVTBL *) vtable;
5779
5780     mg_magical(sv);
5781     return mg;
5782 }
5783
5784 MAGIC *
5785 Perl_sv_magicext_mglob(pTHX_ SV *sv)
5786 {
5787     PERL_ARGS_ASSERT_SV_MAGICEXT_MGLOB;
5788     if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y') {
5789         /* This sv is only a delegate.  //g magic must be attached to
5790            its target. */
5791         vivify_defelem(sv);
5792         sv = LvTARG(sv);
5793     }
5794     return sv_magicext(sv, NULL, PERL_MAGIC_regex_global,
5795                        &PL_vtbl_mglob, 0, 0);
5796 }
5797
5798 /*
5799 =for apidoc sv_magic
5800
5801 Adds magic to an SV.  First upgrades C<sv> to type C<SVt_PVMG> if
5802 necessary, then adds a new magic item of type C<how> to the head of the
5803 magic list.
5804
5805 See C<L</sv_magicext>> (which C<sv_magic> now calls) for a description of the
5806 handling of the C<name> and C<namlen> arguments.
5807
5808 You need to use C<sv_magicext> to add magic to C<SvREADONLY> SVs and also
5809 to add more than one instance of the same C<how>.
5810
5811 =cut
5812 */
5813
5814 void
5815 Perl_sv_magic(pTHX_ SV *const sv, SV *const obj, const int how,
5816              const char *const name, const I32 namlen)
5817 {
5818     const MGVTBL *vtable;
5819     MAGIC* mg;
5820     unsigned int flags;
5821     unsigned int vtable_index;
5822
5823     PERL_ARGS_ASSERT_SV_MAGIC;
5824
5825     if (how < 0 || (unsigned)how >= C_ARRAY_LENGTH(PL_magic_data)
5826         || ((flags = PL_magic_data[how]),
5827             (vtable_index = flags & PERL_MAGIC_VTABLE_MASK)
5828             > magic_vtable_max))
5829         Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
5830
5831     /* PERL_MAGIC_ext is reserved for use by extensions not perl internals.
5832        Useful for attaching extension internal data to perl vars.
5833        Note that multiple extensions may clash if magical scalars
5834        etc holding private data from one are passed to another. */
5835
5836     vtable = (vtable_index == magic_vtable_max)
5837         ? NULL : PL_magic_vtables + vtable_index;
5838
5839     if (SvREADONLY(sv)) {
5840         if (
5841             !PERL_MAGIC_TYPE_READONLY_ACCEPTABLE(how)
5842            )
5843         {
5844             Perl_croak_no_modify();
5845         }
5846     }
5847     if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5848         if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
5849             /* sv_magic() refuses to add a magic of the same 'how' as an
5850                existing one
5851              */
5852             if (how == PERL_MAGIC_taint)
5853                 mg->mg_len |= 1;
5854             return;
5855         }
5856     }
5857
5858     /* Force pos to be stored as characters, not bytes. */
5859     if (SvMAGICAL(sv) && DO_UTF8(sv)
5860       && (mg = mg_find(sv, PERL_MAGIC_regex_global))
5861       && mg->mg_len != -1
5862       && mg->mg_flags & MGf_BYTES) {
5863         mg->mg_len = (SSize_t)sv_pos_b2u_flags(sv, (STRLEN)mg->mg_len,
5864                                                SV_CONST_RETURN);
5865         mg->mg_flags &= ~MGf_BYTES;
5866     }
5867
5868     /* Rest of work is done else where */
5869     mg = sv_magicext(sv,obj,how,vtable,name,namlen);
5870
5871     switch (how) {
5872     case PERL_MAGIC_taint:
5873         mg->mg_len = 1;
5874         break;
5875     case PERL_MAGIC_ext:
5876     case PERL_MAGIC_dbfile:
5877         SvRMAGICAL_on(sv);
5878         break;
5879     }
5880 }
5881
5882 static int
5883 S_sv_unmagicext_flags(pTHX_ SV *const sv, const int type, MGVTBL *vtbl, const U32 flags)
5884 {
5885     MAGIC* mg;
5886     MAGIC** mgp;
5887
5888     assert(flags <= 1);
5889
5890     if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
5891         return 0;
5892     mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
5893     for (mg = *mgp; mg; mg = *mgp) {
5894         const MGVTBL* const virt = mg->mg_virtual;
5895         if (mg->mg_type == type && (!flags || virt == vtbl)) {
5896             *mgp = mg->mg_moremagic;
5897             if (virt && virt->svt_free)
5898                 virt->svt_free(aTHX_ sv, mg);
5899             if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
5900                 if (mg->mg_len > 0)
5901                     Safefree(mg->mg_ptr);
5902                 else if (mg->mg_len == HEf_SVKEY)
5903                     SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
5904                 else if (mg->mg_type == PERL_MAGIC_utf8)
5905                     Safefree(mg->mg_ptr);
5906             }
5907             if (mg->mg_flags & MGf_REFCOUNTED)
5908                 SvREFCNT_dec(mg->mg_obj);
5909             Safefree(mg);
5910         }
5911         else
5912             mgp = &mg->mg_moremagic;
5913     }
5914     if (SvMAGIC(sv)) {
5915         if (SvMAGICAL(sv))      /* if we're under save_magic, wait for restore_magic; */
5916             mg_magical(sv);     /*    else fix the flags now */
5917     }
5918     else
5919         SvMAGICAL_off(sv);
5920
5921     return 0;
5922 }
5923
5924 /*
5925 =for apidoc sv_unmagic
5926
5927 Removes all magic of type C<type> from an SV.
5928
5929 =cut
5930 */
5931
5932 int
5933 Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
5934 {
5935     PERL_ARGS_ASSERT_SV_UNMAGIC;
5936     return S_sv_unmagicext_flags(aTHX_ sv, type, NULL, 0);
5937 }
5938
5939 /*
5940 =for apidoc sv_unmagicext
5941
5942 Removes all magic of type C<type> with the specified C<vtbl> from an SV.
5943
5944 =cut
5945 */
5946
5947 int
5948 Perl_sv_unmagicext(pTHX_ SV *const sv, const int type, MGVTBL *vtbl)
5949 {
5950     PERL_ARGS_ASSERT_SV_UNMAGICEXT;
5951     return S_sv_unmagicext_flags(aTHX_ sv, type, vtbl, 1);
5952 }
5953
5954 /*
5955 =for apidoc sv_rvweaken
5956
5957 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5958 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5959 push a back-reference to this RV onto the array of backreferences
5960 associated with that magic.  If the RV is magical, set magic will be
5961 called after the RV is cleared.  Silently ignores C<undef> and warns
5962 on already-weak references.
5963
5964 =cut
5965 */
5966
5967 SV *
5968 Perl_sv_rvweaken(pTHX_ SV *const sv)
5969 {
5970     SV *tsv;
5971
5972     PERL_ARGS_ASSERT_SV_RVWEAKEN;
5973
5974     if (!SvOK(sv))  /* let undefs pass */
5975         return sv;
5976     if (!SvROK(sv))
5977         Perl_croak(aTHX_ "Can't weaken a nonreference");
5978     else if (SvWEAKREF(sv)) {
5979         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
5980         return sv;
5981     }
5982     else if (SvREADONLY(sv)) croak_no_modify();
5983     tsv = SvRV(sv);
5984     Perl_sv_add_backref(aTHX_ tsv, sv);
5985     SvWEAKREF_on(sv);
5986     SvREFCNT_dec_NN(tsv);
5987     return sv;
5988 }
5989
5990 /*
5991 =for apidoc sv_rvunweaken
5992
5993 Unweaken a reference: Clear the C<SvWEAKREF> flag on this RV; remove
5994 the backreference to this RV from the array of backreferences
5995 associated with the target SV, increment the refcount of the target.
5996 Silently ignores C<undef> and warns on non-weak references.
5997
5998 =cut
5999 */
6000
6001 SV *
6002 Perl_sv_rvunweaken(pTHX_ SV *const sv)
6003 {
6004     SV *tsv;
6005
6006     PERL_ARGS_ASSERT_SV_RVUNWEAKEN;
6007
6008     if (!SvOK(sv)) /* let undefs pass */
6009         return sv;
6010     if (!SvROK(sv))
6011         Perl_croak(aTHX_ "Can't unweaken a nonreference");
6012     else if (!SvWEAKREF(sv)) {
6013         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is not weak");
6014         return sv;
6015     }
6016     else if (SvREADONLY(sv)) croak_no_modify();
6017
6018     tsv = SvRV(sv);
6019     SvWEAKREF_off(sv);
6020     SvROK_on(sv);
6021     SvREFCNT_inc_NN(tsv);
6022     Perl_sv_del_backref(aTHX_ tsv, sv);
6023     return sv;
6024 }
6025
6026 /*
6027 =for apidoc sv_get_backrefs
6028
6029 If C<sv> is the target of a weak reference then it returns the back
6030 references structure associated with the sv; otherwise return C<NULL>.
6031
6032 When returning a non-null result the type of the return is relevant. If it
6033 is an AV then the elements of the AV are the weak reference RVs which
6034 point at this item. If it is any other type then the item itself is the
6035 weak reference.
6036
6037 See also C<Perl_sv_add_backref()>, C<Perl_sv_del_backref()>,
6038 C<Perl_sv_kill_backrefs()>
6039
6040 =cut
6041 */
6042
6043 SV *
6044 Perl_sv_get_backrefs(SV *const sv)
6045 {
6046     SV *backrefs= NULL;
6047
6048     PERL_ARGS_ASSERT_SV_GET_BACKREFS;
6049
6050     /* find slot to store array or singleton backref */
6051
6052     if (SvTYPE(sv) == SVt_PVHV) {
6053         if (SvOOK(sv)) {
6054             struct xpvhv_aux * const iter = HvAUX((HV *)sv);
6055             backrefs = (SV *)iter->xhv_backreferences;
6056         }
6057     } else if (SvMAGICAL(sv)) {
6058         MAGIC *mg = mg_find(sv, PERL_MAGIC_backref);
6059         if (mg)
6060             backrefs = mg->mg_obj;
6061     }
6062     return backrefs;
6063 }
6064
6065 /* Give tsv backref magic if it hasn't already got it, then push a
6066  * back-reference to sv onto the array associated with the backref magic.
6067  *
6068  * As an optimisation, if there's only one backref and it's not an AV,
6069  * store it directly in the HvAUX or mg_obj slot, avoiding the need to
6070  * allocate an AV. (Whether the slot holds an AV tells us whether this is
6071  * active.)
6072  */
6073
6074 /* A discussion about the backreferences array and its refcount:
6075  *
6076  * The AV holding the backreferences is pointed to either as the mg_obj of
6077  * PERL_MAGIC_backref, or in the specific case of a HV, from the
6078  * xhv_backreferences field. The array is created with a refcount
6079  * of 2. This means that if during global destruction the array gets
6080  * picked on before its parent to have its refcount decremented by the
6081  * random zapper, it won't actually be freed, meaning it's still there for
6082  * when its parent gets freed.
6083  *
6084  * When the parent SV is freed, the extra ref is killed by
6085  * Perl_sv_kill_backrefs.  The other ref is killed, in the case of magic,
6086  * by mg_free() / MGf_REFCOUNTED, or for a hash, by Perl_hv_kill_backrefs.
6087  *
6088  * When a single backref SV is stored directly, it is not reference
6089  * counted.
6090  */
6091
6092 void
6093 Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
6094 {
6095     SV **svp;
6096     AV *av = NULL;
6097     MAGIC *mg = NULL;
6098
6099     PERL_ARGS_ASSERT_SV_ADD_BACKREF;
6100
6101     /* find slot to store array or singleton backref */
6102
6103     if (SvTYPE(tsv) == SVt_PVHV) {
6104         svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
6105     } else {
6106         if (SvMAGICAL(tsv))
6107             mg = mg_find(tsv, PERL_MAGIC_backref);
6108         if (!mg)
6109             mg = sv_magicext(tsv, NULL, PERL_MAGIC_backref, &PL_vtbl_backref, NULL, 0);
6110         svp = &(mg->mg_obj);
6111     }
6112
6113     /* create or retrieve the array */
6114
6115     if (   (!*svp && SvTYPE(sv) == SVt_PVAV)
6116         || (*svp && SvTYPE(*svp) != SVt_PVAV)
6117     ) {
6118         /* create array */
6119         if (mg)
6120             mg->mg_flags |= MGf_REFCOUNTED;
6121         av = newAV();
6122         AvREAL_off(av);
6123         SvREFCNT_inc_simple_void_NN(av);
6124         /* av now has a refcnt of 2; see discussion above */
6125         av_extend(av, *svp ? 2 : 1);
6126         if (*svp) {
6127             /* move single existing backref to the array */
6128             AvARRAY(av)[++AvFILLp(av)] = *svp; /* av_push() */
6129         }
6130         *svp = (SV*)av;
6131     }
6132     else {
6133         av = MUTABLE_AV(*svp);
6134         if (!av) {
6135             /* optimisation: store single backref directly in HvAUX or mg_obj */
6136             *svp = sv;
6137             return;
6138         }
6139         assert(SvTYPE(av) == SVt_PVAV);
6140         if (AvFILLp(av) >= AvMAX(av)) {
6141             av_extend(av, AvFILLp(av)+1);
6142         }
6143     }
6144     /* push new backref */
6145     AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
6146 }
6147
6148 /* delete a back-reference to ourselves from the backref magic associated
6149  * with the SV we point to.
6150  */
6151
6152 void
6153 Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
6154 {
6155     SV **svp = NULL;
6156
6157     PERL_ARGS_ASSERT_SV_DEL_BACKREF;
6158
6159     if (SvTYPE(tsv) == SVt_PVHV) {
6160         if (SvOOK(tsv))
6161             svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
6162     }
6163     else if (SvIS_FREED(tsv) && PL_phase == PERL_PHASE_DESTRUCT) {
6164         /* It's possible for the the last (strong) reference to tsv to have
6165            become freed *before* the last thing holding a weak reference.
6166            If both survive longer than the backreferences array, then when
6167            the referent's reference count drops to 0 and it is freed, it's
6168            not able to chase the backreferences, so they aren't NULLed.
6169
6170            For example, a CV holds a weak reference to its stash. If both the
6171            CV and the stash survive longer than the backreferences array,
6172            and the CV gets picked for the SvBREAK() treatment first,
6173            *and* it turns out that the stash is only being kept alive because
6174            of an our variable in the pad of the CV, then midway during CV
6175            destruction the stash gets freed, but CvSTASH() isn't set to NULL.
6176            It ends up pointing to the freed HV. Hence it's chased in here, and
6177            if this block wasn't here, it would hit the !svp panic just below.
6178
6179            I don't believe that "better" destruction ordering is going to help
6180            here - during global destruction there's always going to be the
6181            chance that something goes out of order. We've tried to make it
6182            foolproof before, and it only resulted in evolutionary pressure on
6183            fools. Which made us look foolish for our hubris. :-(
6184         */
6185         return;
6186     }
6187     else {
6188         MAGIC *const mg
6189             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
6190         svp =  mg ? &(mg->mg_obj) : NULL;
6191     }
6192
6193     if (!svp)
6194         Perl_croak(aTHX_ "panic: del_backref, svp=0");
6195     if (!*svp) {
6196         /* It's possible that sv is being freed recursively part way through the
6197            freeing of tsv. If this happens, the backreferences array of tsv has
6198            already been freed, and so svp will be NULL. If this is the case,
6199            we should not panic. Instead, nothing needs doing, so return.  */
6200         if (PL_phase == PERL_PHASE_DESTRUCT && SvREFCNT(tsv) == 0)
6201             return;
6202         Perl_croak(aTHX_ "panic: del_backref, *svp=%p phase=%s refcnt=%" UVuf,
6203                    (void*)*svp, PL_phase_names[PL_phase], (UV)SvREFCNT(tsv));
6204     }
6205
6206     if (SvTYPE(*svp) == SVt_PVAV) {
6207 #ifdef DEBUGGING
6208         int count = 1;
6209 #endif
6210         AV * const av = (AV*)*svp;
6211         SSize_t fill;
6212         assert(!SvIS_FREED(av));
6213         fill = AvFILLp(av);
6214         assert(fill > -1);
6215         svp = AvARRAY(av);
6216         /* for an SV with N weak references to it, if all those
6217          * weak refs are deleted, then sv_del_backref will be called
6218          * N times and O(N^2) compares will be done within the backref
6219          * array. To ameliorate this potential slowness, we:
6220          * 1) make sure this code is as tight as possible;
6221          * 2) when looking for SV, look for it at both the head and tail of the
6222          *    array first before searching the rest, since some create/destroy
6223          *    patterns will cause the backrefs to be freed in order.
6224          */
6225         if (*svp == sv) {
6226             AvARRAY(av)++;
6227             AvMAX(av)--;
6228         }
6229         else {
6230             SV **p = &svp[fill];
6231             SV *const topsv = *p;
6232             if (topsv != sv) {
6233 #ifdef DEBUGGING
6234                 count = 0;
6235 #endif
6236                 while (--p > svp) {
6237                     if (*p == sv) {
6238                         /* We weren't the last entry.
6239                            An unordered list has this property that you
6240                            can take the last element off the end to fill
6241                            the hole, and it's still an unordered list :-)
6242                         */
6243                         *p = topsv;
6244 #ifdef DEBUGGING
6245                         count++;
6246 #else
6247                         break; /* should only be one */
6248 #endif
6249                     }
6250                 }
6251             }
6252         }
6253         assert(count ==1);
6254         AvFILLp(av) = fill-1;
6255     }
6256     else if (SvIS_FREED(*svp) && PL_phase == PERL_PHASE_DESTRUCT) {
6257         /* freed AV; skip */
6258     }
6259     else {
6260         /* optimisation: only a single backref, stored directly */
6261         if (*svp != sv)
6262             Perl_croak(aTHX_ "panic: del_backref, *svp=%p, sv=%p",
6263                        (void*)*svp, (void*)sv);
6264         *svp = NULL;
6265     }
6266
6267 }
6268
6269 void
6270 Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
6271 {
6272     SV **svp;
6273     SV **last;
6274     bool is_array;
6275
6276     PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
6277
6278     if (!av)
6279         return;
6280
6281     /* after multiple passes through Perl_sv_clean_all() for a thingy
6282      * that has badly leaked, the backref array may have gotten freed,
6283      * since we only protect it against 1 round of cleanup */
6284     if (SvIS_FREED(av)) {
6285         if (PL_in_clean_all) /* All is fair */
6286             return;
6287         Perl_croak(aTHX_
6288                    "panic: magic_killbackrefs (freed backref AV/SV)");
6289     }
6290
6291
6292     is_array = (SvTYPE(av) == SVt_PVAV);
6293     if (is_array) {
6294         assert(!SvIS_FREED(av));
6295         svp = AvARRAY(av);
6296         if (svp)
6297             last = svp + AvFILLp(av);
6298     }
6299     else {
6300         /* optimisation: only a single backref, stored directly */
6301         svp = (SV**)&av;
6302         last = svp;
6303     }
6304
6305     if (svp) {
6306         while (svp <= last) {
6307             if (*svp) {
6308                 SV *const referrer = *svp;
6309                 if (SvWEAKREF(referrer)) {
6310                     /* XXX Should we check that it hasn't changed? */
6311                     assert(SvROK(referrer));
6312                     SvRV_set(referrer, 0);
6313                     SvOK_off(referrer);
6314                     SvWEAKREF_off(referrer);
6315                     SvSETMAGIC(referrer);
6316                 } else if (SvTYPE(referrer) == SVt_PVGV ||
6317                            SvTYPE(referrer) == SVt_PVLV) {
6318                     assert(SvTYPE(sv) == SVt_PVHV); /* stash backref */
6319                     /* You lookin' at me?  */
6320                     assert(GvSTASH(referrer));
6321                     assert(GvSTASH(referrer) == (const HV *)sv);
6322                     GvSTASH(referrer) = 0;
6323                 } else if (SvTYPE(referrer) == SVt_PVCV ||
6324                            SvTYPE(referrer) == SVt_PVFM) {
6325                     if (SvTYPE(sv) == SVt_PVHV) { /* stash backref */
6326                         /* You lookin' at me?  */
6327                         assert(CvSTASH(referrer));
6328                         assert(CvSTASH(referrer) == (const HV *)sv);
6329                         SvANY(MUTABLE_CV(referrer))->xcv_stash = 0;
6330                     }
6331                     else {
6332                         assert(SvTYPE(sv) == SVt_PVGV);
6333                         /* You lookin' at me?  */
6334                         assert(CvGV(referrer));
6335                         assert(CvGV(referrer) == (const GV *)sv);
6336                         anonymise_cv_maybe(MUTABLE_GV(sv),
6337                                                 MUTABLE_CV(referrer));
6338                     }
6339
6340                 } else {
6341                     Perl_croak(aTHX_
6342                                "panic: magic_killbackrefs (flags=%" UVxf ")",
6343                                (UV)SvFLAGS(referrer));
6344                 }
6345
6346                 if (is_array)
6347                     *svp = NULL;
6348             }
6349             svp++;
6350         }
6351     }
6352     if (is_array) {
6353         AvFILLp(av) = -1;
6354         SvREFCNT_dec_NN(av); /* remove extra count added by sv_add_backref() */
6355     }
6356     return;
6357 }
6358
6359 /*
6360 =for apidoc sv_insert
6361
6362 Inserts and/or replaces a string at the specified offset/length within the SV.
6363 Similar to the Perl C<substr()> function, with C<littlelen> bytes starting at
6364 C<little> replacing C<len> bytes of the string in C<bigstr> starting at
6365 C<offset>.  Handles get magic.
6366
6367 =for apidoc sv_insert_flags
6368
6369 Same as C<sv_insert>, but the extra C<flags> are passed to the
6370 C<SvPV_force_flags> that applies to C<bigstr>.
6371
6372 =cut
6373 */
6374
6375 void
6376 Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *little, const STRLEN littlelen, const U32 flags)
6377 {
6378     char *big;
6379     char *mid;
6380     char *midend;
6381     char *bigend;
6382     SSize_t i;          /* better be sizeof(STRLEN) or bad things happen */
6383     STRLEN curlen;
6384
6385     PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
6386
6387     SvPV_force_flags(bigstr, curlen, flags);
6388     (void)SvPOK_only_UTF8(bigstr);
6389
6390     if (little >= SvPVX(bigstr) &&
6391         little < SvPVX(bigstr) + (SvLEN(bigstr) ? SvLEN(bigstr) : SvCUR(bigstr))) {
6392         /* little is a pointer to within bigstr, since we can reallocate bigstr,
6393            or little...little+littlelen might overlap offset...offset+len we make a copy
6394         */
6395         little = savepvn(little, littlelen);
6396         SAVEFREEPV(little);
6397     }
6398
6399     if (offset + len > curlen) {
6400         SvGROW(bigstr, offset+len+1);
6401         Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
6402         SvCUR_set(bigstr, offset+len);
6403     }
6404
6405     SvTAINT(bigstr);
6406     i = littlelen - len;
6407     if (i > 0) {                        /* string might grow */
6408         big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
6409         mid = big + offset + len;
6410         midend = bigend = big + SvCUR(bigstr);
6411         bigend += i;
6412         *bigend = '\0';
6413         while (midend > mid)            /* shove everything down */
6414             *--bigend = *--midend;
6415         Move(little,big+offset,littlelen,char);
6416         SvCUR_set(bigstr, SvCUR(bigstr) + i);
6417         SvSETMAGIC(bigstr);
6418         return;
6419     }
6420     else if (i == 0) {
6421         Move(little,SvPVX(bigstr)+offset,len,char);
6422         SvSETMAGIC(bigstr);
6423         return;
6424     }
6425
6426     big = SvPVX(bigstr);
6427     mid = big + offset;
6428     midend = mid + len;
6429     bigend = big + SvCUR(bigstr);
6430
6431     if (midend > bigend)
6432         Perl_croak(aTHX_ "panic: sv_insert, midend=%p, bigend=%p",
6433                    midend, bigend);
6434
6435     if (mid - big > bigend - midend) {  /* faster to shorten from end */
6436         if (littlelen) {
6437             Move(little, mid, littlelen,char);
6438             mid += littlelen;
6439         }
6440         i = bigend - midend;
6441         if (i > 0) {
6442             Move(midend, mid, i,char);
6443             mid += i;
6444         }
6445         *mid = '\0';
6446         SvCUR_set(bigstr, mid - big);
6447     }
6448     else if ((i = mid - big)) { /* faster from front */
6449         midend -= littlelen;
6450         mid = midend;
6451         Move(big, midend - i, i, char);
6452         sv_chop(bigstr,midend-i);
6453         if (littlelen)
6454             Move(little, mid, littlelen,char);
6455     }
6456     else if (littlelen) {
6457         midend -= littlelen;
6458         sv_chop(bigstr,midend);
6459         Move(little,midend,littlelen,char);
6460     }
6461     else {
6462         sv_chop(bigstr,midend);
6463     }
6464     SvSETMAGIC(bigstr);
6465 }
6466
6467 /*
6468 =for apidoc sv_replace
6469
6470 Make the first argument a copy of the second, then delete the original.
6471 The target SV physically takes over ownership of the body of the source SV
6472 and inherits its flags; however, the target keeps any magic it owns,
6473 and any magic in the source is discarded.
6474 Note that this is a rather specialist SV copying operation; most of the
6475 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
6476
6477 =cut
6478 */
6479
6480 void
6481 Perl_sv_replace(pTHX_ SV *const sv, SV *const nsv)
6482 {
6483     const U32 refcnt = SvREFCNT(sv);
6484
6485     PERL_ARGS_ASSERT_SV_REPLACE;
6486
6487     SV_CHECK_THINKFIRST_COW_DROP(sv);
6488     if (SvREFCNT(nsv) != 1) {
6489         Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
6490                    " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
6491     }
6492     if (SvMAGICAL(sv)) {
6493         if (SvMAGICAL(nsv))
6494             mg_free(nsv);
6495         else
6496             sv_upgrade(nsv, SVt_PVMG);
6497         SvMAGIC_set(nsv, SvMAGIC(sv));
6498         SvFLAGS(nsv) |= SvMAGICAL(sv);
6499         SvMAGICAL_off(sv);
6500         SvMAGIC_set(sv, NULL);
6501     }
6502     SvREFCNT(sv) = 0;
6503     sv_clear(sv);
6504     assert(!SvREFCNT(sv));
6505 #ifdef DEBUG_LEAKING_SCALARS
6506     sv->sv_flags  = nsv->sv_flags;
6507     sv->sv_any    = nsv->sv_any;
6508     sv->sv_refcnt = nsv->sv_refcnt;
6509     sv->sv_u      = nsv->sv_u;
6510 #else
6511     StructCopy(nsv,sv,SV);
6512 #endif
6513     if(SvTYPE(sv) == SVt_IV) {
6514         SET_SVANY_FOR_BODYLESS_IV(sv);
6515     }
6516         
6517
6518     SvREFCNT(sv) = refcnt;
6519     SvFLAGS(nsv) |= SVTYPEMASK;         /* Mark as freed */
6520     SvREFCNT(nsv) = 0;
6521     del_SV(nsv);
6522 }
6523
6524 /* We're about to free a GV which has a CV that refers back to us.
6525  * If that CV will outlive us, make it anonymous (i.e. fix up its CvGV
6526  * field) */
6527
6528 STATIC void
6529 S_anonymise_cv_maybe(pTHX_ GV *gv, CV* cv)
6530 {
6531     SV *gvname;
6532     GV *anongv;
6533
6534     PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE;
6535
6536     /* be assertive! */
6537     assert(SvREFCNT(gv) == 0);
6538     assert(isGV(gv) && isGV_with_GP(gv));
6539     assert(GvGP(gv));
6540     assert(!CvANON(cv));
6541     assert(CvGV(cv) == gv);
6542     assert(!CvNAMED(cv));
6543
6544     /* will the CV shortly be freed by gp_free() ? */
6545     if (GvCV(gv) == cv && GvGP(gv)->gp_refcnt < 2 && SvREFCNT(cv) < 2) {
6546         SvANY(cv)->xcv_gv_u.xcv_gv = NULL;
6547         return;
6548     }
6549
6550     /* if not, anonymise: */
6551     gvname = (GvSTASH(gv) && HvNAME(GvSTASH(gv)) && HvENAME(GvSTASH(gv)))
6552                     ? newSVhek(HvENAME_HEK(GvSTASH(gv)))
6553                     : newSVpvn_flags( "__ANON__", 8, 0 );
6554     sv_catpvs(gvname, "::__ANON__");
6555     anongv = gv_fetchsv(gvname, GV_ADDMULTI, SVt_PVCV);
6556     SvREFCNT_dec_NN(gvname);
6557
6558     CvANON_on(cv);
6559     CvCVGV_RC_on(cv);
6560     SvANY(cv)->xcv_gv_u.xcv_gv = MUTABLE_GV(SvREFCNT_inc(anongv));
6561 }
6562
6563
6564 /*
6565 =for apidoc sv_clear
6566
6567 Clear an SV: call any destructors, free up any memory used by the body,
6568 and free the body itself.  The SV's head is I<not> freed, although
6569 its type is set to all 1's so that it won't inadvertently be assumed
6570 to be live during global destruction etc.
6571 This function should only be called when C<REFCNT> is zero.  Most of the time
6572 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
6573 instead.
6574
6575 =cut
6576 */
6577
6578 void
6579 Perl_sv_clear(pTHX_ SV *const orig_sv)
6580 {
6581     HV *stash;
6582     U32 type;
6583     const struct body_details *sv_type_details;
6584     SV* iter_sv = NULL;
6585     SV* next_sv = NULL;
6586     SV *sv = orig_sv;
6587     STRLEN hash_index = 0; /* initialise to make Coverity et al happy.
6588                               Not strictly necessary */
6589
6590     PERL_ARGS_ASSERT_SV_CLEAR;
6591
6592     /* within this loop, sv is the SV currently being freed, and
6593      * iter_sv is the most recent AV or whatever that's being iterated
6594      * over to provide more SVs */
6595
6596     while (sv) {
6597
6598         type = SvTYPE(sv);
6599
6600         assert(SvREFCNT(sv) == 0);
6601         assert(SvTYPE(sv) != (svtype)SVTYPEMASK);
6602
6603         if (type <= SVt_IV) {
6604             /* See the comment in sv.h about the collusion between this
6605              * early return and the overloading of the NULL slots in the
6606              * size table.  */
6607             if (SvROK(sv))
6608                 goto free_rv;
6609             SvFLAGS(sv) &= SVf_BREAK;
6610             SvFLAGS(sv) |= SVTYPEMASK;
6611             goto free_head;
6612         }
6613
6614         /* objs are always >= MG, but pad names use the SVs_OBJECT flag
6615            for another purpose  */
6616         assert(!SvOBJECT(sv) || type >= SVt_PVMG);
6617
6618         if (type >= SVt_PVMG) {
6619             if (SvOBJECT(sv)) {
6620                 if (!curse(sv, 1)) goto get_next_sv;
6621                 type = SvTYPE(sv); /* destructor may have changed it */
6622             }
6623             /* Free back-references before magic, in case the magic calls
6624              * Perl code that has weak references to sv. */
6625             if (type == SVt_PVHV) {
6626                 Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
6627                 if (SvMAGIC(sv))
6628                     mg_free(sv);
6629             }
6630             else if (SvMAGIC(sv)) {
6631                 /* Free back-references before other types of magic. */
6632                 sv_unmagic(sv, PERL_MAGIC_backref);
6633                 mg_free(sv);
6634             }
6635             SvMAGICAL_off(sv);
6636         }
6637         switch (type) {
6638             /* case SVt_INVLIST: */
6639         case SVt_PVIO:
6640             if (IoIFP(sv) &&
6641                 IoIFP(sv) != PerlIO_stdin() &&
6642                 IoIFP(sv) != PerlIO_stdout() &&
6643                 IoIFP(sv) != PerlIO_stderr() &&
6644                 !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6645             {
6646                 io_close(MUTABLE_IO(sv), NULL, FALSE,
6647                          (IoTYPE(sv) == IoTYPE_WRONLY ||
6648                           IoTYPE(sv) == IoTYPE_RDWR   ||
6649                           IoTYPE(sv) == IoTYPE_APPEND));
6650             }
6651             if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6652                 PerlDir_close(IoDIRP(sv));
6653             IoDIRP(sv) = (DIR*)NULL;
6654             Safefree(IoTOP_NAME(sv));
6655             Safefree(IoFMT_NAME(sv));
6656             Safefree(IoBOTTOM_NAME(sv));
6657             if ((const GV *)sv == PL_statgv)
6658                 PL_statgv = NULL;
6659             goto freescalar;
6660         case SVt_REGEXP:
6661             /* FIXME for plugins */
6662             pregfree2((REGEXP*) sv);
6663             goto freescalar;
6664         case SVt_PVCV:
6665         case SVt_PVFM:
6666             cv_undef(MUTABLE_CV(sv));
6667             /* If we're in a stash, we don't own a reference to it.
6668              * However it does have a back reference to us, which needs to
6669              * be cleared.  */
6670             if ((stash = CvSTASH(sv)))
6671                 sv_del_backref(MUTABLE_SV(stash), sv);
6672             goto freescalar;
6673         case SVt_PVHV:
6674             if (HvTOTALKEYS((HV*)sv) > 0) {
6675                 const HEK *hek;
6676                 /* this statement should match the one at the beginning of
6677                  * hv_undef_flags() */
6678                 if (   PL_phase != PERL_PHASE_DESTRUCT
6679                     && (hek = HvNAME_HEK((HV*)sv)))
6680                 {
6681                     if (PL_stashcache) {
6682                         DEBUG_o(Perl_deb(aTHX_
6683                             "sv_clear clearing PL_stashcache for '%" HEKf
6684                             "'\n",
6685                              HEKfARG(hek)));
6686                         (void)hv_deletehek(PL_stashcache,
6687                                            hek, G_DISCARD);
6688                     }
6689                     hv_name_set((HV*)sv, NULL, 0, 0);
6690                 }
6691
6692                 /* save old iter_sv in unused SvSTASH field */
6693                 assert(!SvOBJECT(sv));
6694                 SvSTASH(sv) = (HV*)iter_sv;
6695                 iter_sv = sv;
6696
6697                 /* save old hash_index in unused SvMAGIC field */
6698                 assert(!SvMAGICAL(sv));
6699                 assert(!SvMAGIC(sv));
6700                 ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index = hash_index;
6701                 hash_index = 0;
6702
6703                 next_sv = Perl_hfree_next_entry(aTHX_ (HV*)sv, &hash_index);
6704                 goto get_next_sv; /* process this new sv */
6705             }
6706             /* free empty hash */
6707             Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6708             assert(!HvARRAY((HV*)sv));
6709             break;
6710         case SVt_PVAV:
6711             {
6712                 AV* av = MUTABLE_AV(sv);
6713                 if (PL_comppad == av) {
6714                     PL_comppad = NULL;
6715                     PL_curpad = NULL;
6716                 }
6717                 if (AvREAL(av) && AvFILLp(av) > -1) {
6718                     next_sv = AvARRAY(av)[AvFILLp(av)--];
6719                     /* save old iter_sv in top-most slot of AV,
6720                      * and pray that it doesn't get wiped in the meantime */
6721                     AvARRAY(av)[AvMAX(av)] = iter_sv;
6722                     iter_sv = sv;
6723                     goto get_next_sv; /* process this new sv */
6724                 }
6725                 Safefree(AvALLOC(av));
6726             }
6727
6728             break;
6729         case SVt_PVLV:
6730             if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
6731                 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
6732                 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
6733                 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
6734             }
6735             else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV**  */
6736                 SvREFCNT_dec(LvTARG(sv));
6737             if (isREGEXP(sv)) {
6738                 /* SvLEN points to a regex body. Free the body, then
6739                  * set SvLEN to whatever value was in the now-freed
6740                  * regex body. The PVX buffer is shared by multiple re's
6741                  * and only freed once, by the re whose len in non-null */
6742                 STRLEN len = ReANY(sv)->xpv_len;
6743                 pregfree2((REGEXP*) sv);
6744                 SvLEN_set((sv), len);
6745                 goto freescalar;
6746             }
6747             /* FALLTHROUGH */
6748         case SVt_PVGV:
6749             if (isGV_with_GP(sv)) {
6750                 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
6751                    && HvENAME_get(stash))
6752                     mro_method_changed_in(stash);
6753                 gp_free(MUTABLE_GV(sv));
6754                 if (GvNAME_HEK(sv))
6755                     unshare_hek(GvNAME_HEK(sv));
6756                 /* If we're in a stash, we don't own a reference to it.
6757                  * However it does have a back reference to us, which
6758                  * needs to be cleared.  */
6759                 if ((stash = GvSTASH(sv)))
6760                         sv_del_backref(MUTABLE_SV(stash), sv);
6761             }
6762             /* FIXME. There are probably more unreferenced pointers to SVs
6763              * in the interpreter struct that we should check and tidy in
6764              * a similar fashion to this:  */
6765             /* See also S_sv_unglob, which does the same thing. */
6766             if ((const GV *)sv == PL_last_in_gv)
6767                 PL_last_in_gv = NULL;
6768             else if ((const GV *)sv == PL_statgv)
6769                 PL_statgv = NULL;
6770             else if ((const GV *)sv == PL_stderrgv)
6771                 PL_stderrgv = NULL;
6772             /* FALLTHROUGH */
6773         case SVt_PVMG:
6774         case SVt_PVNV:
6775         case SVt_PVIV:
6776         case SVt_INVLIST:
6777         case SVt_PV:
6778           freescalar:
6779             /* Don't bother with SvOOK_off(sv); as we're only going to
6780              * free it.  */
6781             if (SvOOK(sv)) {
6782                 STRLEN offset;
6783                 SvOOK_offset(sv, offset);
6784                 SvPV_set(sv, SvPVX_mutable(sv) - offset);
6785                 /* Don't even bother with turning off the OOK flag.  */
6786             }
6787             if (SvROK(sv)) {
6788             free_rv:
6789                 {
6790                     SV * const target = SvRV(sv);
6791                     if (SvWEAKREF(sv))
6792                         sv_del_backref(target, sv);
6793                     else
6794                         next_sv = target;
6795                 }
6796             }
6797 #ifdef PERL_ANY_COW
6798             else if (SvPVX_const(sv)
6799                      && !(SvTYPE(sv) == SVt_PVIO
6800                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6801             {
6802                 if (SvIsCOW(sv)) {
6803 #ifdef DEBUGGING
6804                     if (DEBUG_C_TEST) {
6805                         PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
6806                         sv_dump(sv);
6807                     }
6808 #endif
6809                     if (SvLEN(sv)) {
6810                         if (CowREFCNT(sv)) {
6811                             sv_buf_to_rw(sv);
6812                             CowREFCNT(sv)--;
6813                             sv_buf_to_ro(sv);
6814                             SvLEN_set(sv, 0);
6815                         }
6816                     } else {
6817                         unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6818                     }
6819
6820                 }
6821                 if (SvLEN(sv)) {
6822                     Safefree(SvPVX_mutable(sv));
6823                 }
6824             }
6825 #else
6826             else if (SvPVX_const(sv) && SvLEN(sv)
6827                      && !(SvTYPE(sv) == SVt_PVIO
6828                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6829                 Safefree(SvPVX_mutable(sv));
6830             else if (SvPVX_const(sv) && SvIsCOW(sv)) {
6831                 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6832             }
6833 #endif
6834             break;
6835         case SVt_NV:
6836             break;
6837         }
6838
6839       free_body:
6840
6841         SvFLAGS(sv) &= SVf_BREAK;
6842         SvFLAGS(sv) |= SVTYPEMASK;
6843
6844         sv_type_details = bodies_by_type + type;
6845         if (sv_type_details->arena) {
6846             del_body(((char *)SvANY(sv) + sv_type_details->offset),
6847                      &PL_body_roots[type]);
6848         }
6849         else if (sv_type_details->body_size) {
6850             safefree(SvANY(sv));
6851         }
6852
6853       free_head:
6854         /* caller is responsible for freeing the head of the original sv */
6855         if (sv != orig_sv && !SvREFCNT(sv))
6856             del_SV(sv);
6857
6858         /* grab and free next sv, if any */
6859       get_next_sv:
6860         while (1) {
6861             sv = NULL;
6862             if (next_sv) {
6863                 sv = next_sv;
6864                 next_sv = NULL;
6865             }
6866             else if (!iter_sv) {
6867                 break;
6868             } else if (SvTYPE(iter_sv) == SVt_PVAV) {
6869                 AV *const av = (AV*)iter_sv;
6870                 if (AvFILLp(av) > -1) {
6871                     sv = AvARRAY(av)[AvFILLp(av)--];
6872                 }
6873                 else { /* no more elements of current AV to free */
6874                     sv = iter_sv;
6875                     type = SvTYPE(sv);
6876                     /* restore previous value, squirrelled away */
6877                     iter_sv = AvARRAY(av)[AvMAX(av)];
6878                     Safefree(AvALLOC(av));
6879                     goto free_body;
6880                 }
6881             } else if (SvTYPE(iter_sv) == SVt_PVHV) {
6882                 sv = Perl_hfree_next_entry(aTHX_ (HV*)iter_sv, &hash_index);
6883                 if (!sv && !HvTOTALKEYS((HV *)iter_sv)) {
6884                     /* no more elements of current HV to free */
6885                     sv = iter_sv;
6886                     type = SvTYPE(sv);
6887                     /* Restore previous values of iter_sv and hash_index,
6888                      * squirrelled away */
6889                     assert(!SvOBJECT(sv));
6890                     iter_sv = (SV*)SvSTASH(sv);
6891                     assert(!SvMAGICAL(sv));
6892                     hash_index = ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index;
6893 #ifdef DEBUGGING
6894                     /* perl -DA does not like rubbish in SvMAGIC. */
6895                     SvMAGIC_set(sv, 0);
6896 #endif
6897
6898                     /* free any remaining detritus from the hash struct */
6899                     Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6900                     assert(!HvARRAY((HV*)sv));
6901                     goto free_body;
6902                 }
6903             }
6904
6905             /* unrolled SvREFCNT_dec and sv_free2 follows: */
6906
6907             if (!sv)
6908                 continue;
6909             if (!SvREFCNT(sv)) {
6910                 sv_free(sv);
6911                 continue;
6912             }
6913             if (--(SvREFCNT(sv)))
6914                 continue;
6915 #ifdef DEBUGGING
6916             if (SvTEMP(sv)) {
6917                 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6918                          "Attempt to free temp prematurely: SV 0x%" UVxf
6919                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6920                 continue;
6921             }
6922 #endif
6923             if (SvIMMORTAL(sv)) {
6924                 /* make sure SvREFCNT(sv)==0 happens very seldom */
6925                 SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6926                 continue;
6927             }
6928             break;
6929         } /* while 1 */
6930
6931     } /* while sv */
6932 }
6933
6934 /* This routine curses the sv itself, not the object referenced by sv. So
6935    sv does not have to be ROK. */
6936
6937 static bool
6938 S_curse(pTHX_ SV * const sv, const bool check_refcnt) {
6939     PERL_ARGS_ASSERT_CURSE;
6940     assert(SvOBJECT(sv));
6941
6942     if (PL_defstash &&  /* Still have a symbol table? */
6943         SvDESTROYABLE(sv))
6944     {
6945         dSP;
6946         HV* stash;
6947         do {
6948           stash = SvSTASH(sv);
6949           assert(SvTYPE(stash) == SVt_PVHV);
6950           if (HvNAME(stash)) {
6951             CV* destructor = NULL;
6952             struct mro_meta *meta;
6953
6954             assert (SvOOK(stash));
6955
6956             DEBUG_o( Perl_deb(aTHX_ "Looking for DESTROY method for %s\n",
6957                          HvNAME(stash)) );
6958
6959             /* don't make this an initialization above the assert, since it needs
6960                an AUX structure */
6961             meta = HvMROMETA(stash);
6962             if (meta->destroy_gen && meta->destroy_gen == PL_sub_generation) {
6963                 destructor = meta->destroy;
6964                 DEBUG_o( Perl_deb(aTHX_ "Using cached DESTROY method %p for %s\n",
6965                              (void *)destructor, HvNAME(stash)) );
6966             }
6967             else {
6968                 bool autoload = FALSE;
6969                 GV *gv =
6970                     gv_fetchmeth_pvn(stash, S_destroy, S_destroy_len, -1, 0);
6971                 if (gv)
6972                     destructor = GvCV(gv);
6973                 if (!destructor) {
6974                     gv = gv_autoload_pvn(stash, S_destroy, S_destroy_len,
6975                                          GV_AUTOLOAD_ISMETHOD);
6976                     if (gv)
6977                         destructor = GvCV(gv);
6978                     if (destructor)
6979                         autoload = TRUE;
6980                 }
6981                 /* we don't cache AUTOLOAD for DESTROY, since this code
6982                    would then need to set $__PACKAGE__::AUTOLOAD, or the
6983                    equivalent for XS AUTOLOADs */
6984                 if (!autoload) {
6985                     meta->destroy_gen = PL_sub_generation;
6986                     meta->destroy = destructor;
6987
6988                     DEBUG_o( Perl_deb(aTHX_ "Set cached DESTROY method %p for %s\n",
6989                                       (void *)destructor, HvNAME(stash)) );
6990                 }
6991                 else {
6992                     DEBUG_o( Perl_deb(aTHX_ "Not caching AUTOLOAD for DESTROY method for %s\n",
6993                                       HvNAME(stash)) );
6994                 }
6995             }
6996             assert(!destructor || SvTYPE(destructor) == SVt_PVCV);
6997             if (destructor
6998                 /* A constant subroutine can have no side effects, so
6999                    don't bother calling it.  */
7000                 && !CvCONST(destructor)
7001                 /* Don't bother calling an empty destructor or one that
7002                    returns immediately. */
7003                 && (CvISXSUB(destructor)
7004                 || (CvSTART(destructor)
7005                     && (CvSTART(destructor)->op_next->op_type
7006                                         != OP_LEAVESUB)
7007                     && (CvSTART(destructor)->op_next->op_type
7008                                         != OP_PUSHMARK
7009                         || CvSTART(destructor)->op_next->op_next->op_type
7010                                         != OP_RETURN
7011                        )
7012                    ))
7013                )
7014             {
7015                 SV* const tmpref = newRV(sv);
7016                 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
7017                 ENTER;
7018                 PUSHSTACKi(PERLSI_DESTROY);
7019                 EXTEND(SP, 2);
7020                 PUSHMARK(SP);
7021                 PUSHs(tmpref);
7022                 PUTBACK;
7023                 call_sv(MUTABLE_SV(destructor),
7024                             G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
7025                 POPSTACK;
7026                 SPAGAIN;
7027                 LEAVE;
7028                 if(SvREFCNT(tmpref) < 2) {
7029                     /* tmpref is not kept alive! */
7030                     SvREFCNT(sv)--;
7031                     SvRV_set(tmpref, NULL);
7032                     SvROK_off(tmpref);
7033                 }
7034                 SvREFCNT_dec_NN(tmpref);
7035             }
7036           }
7037         } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
7038
7039
7040         if (check_refcnt && SvREFCNT(sv)) {
7041             if (PL_in_clean_objs)
7042                 Perl_croak(aTHX_
7043                   "DESTROY created new reference to dead object '%" HEKf "'",
7044                    HEKfARG(HvNAME_HEK(stash)));
7045             /* DESTROY gave object new lease on life */
7046             return FALSE;
7047         }
7048     }
7049
7050     if (SvOBJECT(sv)) {
7051         HV * const stash = SvSTASH(sv);
7052         /* Curse before freeing the stash, as freeing the stash could cause
7053            a recursive call into S_curse. */
7054         SvOBJECT_off(sv);       /* Curse the object. */
7055         SvSTASH_set(sv,0);      /* SvREFCNT_dec may try to read this */
7056         SvREFCNT_dec(stash); /* possibly of changed persuasion */
7057     }
7058     return TRUE;
7059 }
7060
7061 /*
7062 =for apidoc sv_newref
7063
7064 Increment an SV's reference count.  Use the C<SvREFCNT_inc()> wrapper
7065 instead.
7066
7067 =cut
7068 */
7069
7070 SV *
7071 Perl_sv_newref(pTHX_ SV *const sv)
7072 {
7073     PERL_UNUSED_CONTEXT;
7074     if (sv)
7075         (SvREFCNT(sv))++;
7076     return sv;
7077 }
7078
7079 /*
7080 =for apidoc sv_free
7081
7082 Decrement an SV's reference count, and if it drops to zero, call
7083 C<sv_clear> to invoke destructors and free up any memory used by
7084 the body; finally, deallocating the SV's head itself.
7085 Normally called via a wrapper macro C<SvREFCNT_dec>.
7086
7087 =cut
7088 */
7089
7090 void
7091 Perl_sv_free(pTHX_ SV *const sv)
7092 {
7093     SvREFCNT_dec(sv);
7094 }
7095
7096
7097 /* Private helper function for SvREFCNT_dec().
7098  * Called with rc set to original SvREFCNT(sv), where rc == 0 or 1 */
7099
7100 void
7101 Perl_sv_free2(pTHX_ SV *const sv, const U32 rc)
7102 {
7103
7104     PERL_ARGS_ASSERT_SV_FREE2;
7105
7106     if (LIKELY( rc == 1 )) {
7107         /* normal case */
7108         SvREFCNT(sv) = 0;
7109
7110 #ifdef DEBUGGING
7111         if (SvTEMP(sv)) {
7112             Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
7113                              "Attempt to free temp prematurely: SV 0x%" UVxf
7114                              pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
7115             return;
7116         }
7117 #endif
7118         if (SvIMMORTAL(sv)) {
7119             /* make sure SvREFCNT(sv)==0 happens very seldom */
7120             SvREFCNT(sv) = SvREFCNT_IMMORTAL;
7121             return;
7122         }
7123         sv_clear(sv);
7124         if (! SvREFCNT(sv)) /* may have have been resurrected */
7125             del_SV(sv);
7126         return;
7127     }
7128
7129     /* handle exceptional cases */
7130
7131     assert(rc == 0);
7132
7133     if (SvFLAGS(sv) & SVf_BREAK)
7134         /* this SV's refcnt has been artificially decremented to
7135          * trigger cleanup */
7136         return;
7137     if (PL_in_clean_all) /* All is fair */
7138         return;
7139     if (SvIMMORTAL(sv)) {
7140         /* make sure SvREFCNT(sv)==0 happens very seldom */
7141         SvREFCNT(sv) = SvREFCNT_IMMORTAL;
7142         return;
7143     }
7144     if (ckWARN_d(WARN_INTERNAL)) {
7145 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
7146         Perl_dump_sv_child(aTHX_ sv);
7147 #else
7148     #ifdef DEBUG_LEAKING_SCALARS
7149         sv_dump(sv);
7150     #endif
7151 #ifdef DEBUG_LEAKING_SCALARS_ABORT
7152         if (PL_warnhook == PERL_WARNHOOK_FATAL
7153             || ckDEAD(packWARN(WARN_INTERNAL))) {
7154             /* Don't let Perl_warner cause us to escape our fate:  */
7155             abort();
7156         }
7157 #endif
7158         /* This may not return:  */
7159         Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
7160                     "Attempt to free unreferenced scalar: SV 0x%" UVxf
7161                     pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
7162 #endif
7163     }
7164 #ifdef DEBUG_LEAKING_SCALARS_ABORT
7165     abort();
7166 #endif
7167
7168 }
7169
7170
7171 /*
7172 =for apidoc sv_len
7173
7174 Returns the length of the string in the SV.  Handles magic and type
7175 coercion and sets the UTF8 flag appropriately.  See also C<L</SvCUR>>, which
7176 gives raw access to the C<xpv_cur> slot.
7177
7178 =cut
7179 */
7180
7181 STRLEN
7182 Perl_sv_len(pTHX_ SV *const sv)
7183 {
7184     STRLEN len;
7185
7186     if (!sv)
7187         return 0;
7188
7189     (void)SvPV_const(sv, len);
7190     return len;
7191 }
7192
7193 /*
7194 =for apidoc sv_len_utf8
7195
7196 Returns the number of characters in the string in an SV, counting wide
7197 UTF-8 bytes as a single character.  Handles magic and type coercion.
7198
7199 =cut
7200 */
7201
7202 /*
7203  * The length is cached in PERL_MAGIC_utf8, in the mg_len field.  Also the
7204  * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
7205  * (Note that the mg_len is not the length of the mg_ptr field.
7206  * This allows the cache to store the character length of the string without
7207  * needing to malloc() extra storage to attach to the mg_ptr.)
7208  *
7209  */
7210
7211 STRLEN
7212 Perl_sv_len_utf8(pTHX_ SV *const sv)
7213 {
7214     if (!sv)
7215         return 0;
7216
7217     SvGETMAGIC(sv);
7218     return sv_len_utf8_nomg(sv);
7219 }
7220
7221 STRLEN
7222 Perl_sv_len_utf8_nomg(pTHX_ SV * const sv)
7223 {
7224     STRLEN len;
7225     const U8 *s = (U8*)SvPV_nomg_const(sv, len);
7226
7227     PERL_ARGS_ASSERT_SV_LEN_UTF8_NOMG;
7228
7229     if (PL_utf8cache && SvUTF8(sv)) {
7230             STRLEN ulen;
7231             MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
7232
7233             if (mg && (mg->mg_len != -1 || mg->mg_ptr)) {
7234                 if (mg->mg_len != -1)
7235                     ulen = mg->mg_len;
7236                 else {
7237                     /* We can use the offset cache for a headstart.
7238                        The longer value is stored in the first pair.  */
7239                     STRLEN *cache = (STRLEN *) mg->mg_ptr;
7240
7241                     ulen = cache[0] + Perl_utf8_length(aTHX_ s + cache[1],
7242                                                        s + len);
7243                 }
7244                 
7245                 if (PL_utf8cache < 0) {
7246                     const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
7247                     assert_uft8_cache_coherent("sv_len_utf8", ulen, real, sv);
7248                 }
7249             }
7250             else {
7251                 ulen = Perl_utf8_length(aTHX_ s, s + len);
7252                 utf8_mg_len_cache_update(sv, &mg, ulen);
7253             }
7254             return ulen;
7255     }
7256     return SvUTF8(sv) ? Perl_utf8_length(aTHX_ s, s + len) : len;
7257 }
7258
7259 /* Walk forwards to find the byte corresponding to the passed in UTF-8
7260    offset.  */
7261 static STRLEN
7262 S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
7263                       STRLEN *const uoffset_p, bool *const at_end)
7264 {
7265     const U8 *s = start;
7266     STRLEN uoffset = *uoffset_p;
7267
7268     PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
7269
7270     while (s < send && uoffset) {
7271         --uoffset;
7272         s += UTF8SKIP(s);
7273     }
7274     if (s == send) {
7275         *at_end = TRUE;
7276     }
7277     else if (s > send) {
7278         *at_end = TRUE;
7279         /* This is the existing behaviour. Possibly it should be a croak, as
7280            it's actually a bounds error  */
7281         s = send;
7282     }
7283     *uoffset_p -= uoffset;
7284     return s - start;
7285 }
7286
7287 /* Given the length of the string in both bytes and UTF-8 characters, decide
7288    whether to walk forwards or backwards to find the byte corresponding to
7289    the passed in UTF-8 offset.  */
7290 static STRLEN
7291 S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
7292                     STRLEN uoffset, const STRLEN uend)
7293 {
7294     STRLEN backw = uend - uoffset;
7295
7296     PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
7297
7298     if (uoffset < 2 * backw) {
7299         /* The assumption is that going forwards is twice the speed of going
7300            forward (that's where the 2 * backw comes from).
7301            (The real figure of course depends on the UTF-8 data.)  */
7302         const U8 *s = start;
7303
7304         while (s < send && uoffset--)
7305             s += UTF8SKIP(s);
7306         assert (s <= send);
7307         if (s > send)
7308             s = send;
7309         return s - start;
7310     }
7311
7312     while (backw--) {
7313         send--;
7314         while (UTF8_IS_CONTINUATION(*send))
7315             send--;
7316     }
7317     return send - start;
7318 }
7319
7320 /* For the string representation of the given scalar, find the byte
7321    corresponding to the passed in UTF-8 offset.  uoffset0 and boffset0
7322    give another position in the string, *before* the sought offset, which
7323    (which is always true, as 0, 0 is a valid pair of positions), which should
7324    help reduce the amount of linear searching.
7325    If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
7326    will be used to reduce the amount of linear searching. The cache will be
7327    created if necessary, and the found value offered to it for update.  */
7328 static STRLEN
7329 S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
7330                     const U8 *const send, STRLEN uoffset,
7331                     STRLEN uoffset0, STRLEN boffset0)
7332 {
7333     STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy.  */
7334     bool found = FALSE;
7335     bool at_end = FALSE;
7336
7337     PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
7338
7339     assert (uoffset >= uoffset0);
7340
7341     if (!uoffset)
7342         return 0;
7343
7344     if (!SvREADONLY(sv) && !SvGMAGICAL(sv) && SvPOK(sv)
7345         && PL_utf8cache
7346         && (*mgp || (SvTYPE(sv) >= SVt_PVMG &&
7347                      (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) {
7348         if ((*mgp)->mg_ptr) {
7349             STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
7350             if (cache[0] == uoffset) {
7351                 /* An exact match. */
7352                 return cache[1];
7353             }
7354             if (cache[2] == uoffset) {
7355                 /* An exact match. */
7356                 return cache[3];
7357             }
7358
7359             if (cache[0] < uoffset) {
7360                 /* The cache already knows part of the way.   */
7361                 if (cache[0] > uoffset0) {
7362                     /* The cache knows more than the passed in pair  */
7363                     uoffset0 = cache[0];
7364                     boffset0 = cache[1];
7365                 }
7366                 if ((*mgp)->mg_len != -1) {
7367                     /* And we know the end too.  */
7368                     boffset = boffset0
7369                         + sv_pos_u2b_midway(start + boffset0, send,
7370                                               uoffset - uoffset0,
7371                                               (*mgp)->mg_len - uoffset0);
7372                 } else {
7373                     uoffset -= uoffset0;
7374                     boffset = boffset0
7375                         + sv_pos_u2b_forwards(start + boffset0,
7376                                               send, &uoffset, &at_end);
7377                     uoffset += uoffset0;
7378                 }
7379             }
7380             else if (cache[2] < uoffset) {
7381                 /* We're between the two cache entries.  */
7382                 if (cache[2] > uoffset0) {
7383                     /* and the cache knows more than the passed in pair  */
7384                     uoffset0 = cache[2];
7385                     boffset0 = cache[3];
7386                 }
7387
7388                 boffset = boffset0
7389                     + sv_pos_u2b_midway(start + boffset0,
7390                                           start + cache[1],
7391                                           uoffset - uoffset0,
7392                                           cache[0] - uoffset0);
7393             } else {
7394                 boffset = boffset0
7395                     + sv_pos_u2b_midway(start + boffset0,
7396                                           start + cache[3],
7397                                           uoffset - uoffset0,
7398                                           cache[2] - uoffset0);
7399             }
7400             found = TRUE;
7401         }
7402         else if ((*mgp)->mg_len != -1) {
7403             /* If we can take advantage of a passed in offset, do so.  */
7404             /* In fact, offset0 is either 0, or less than offset, so don't
7405                need to worry about the other possibility.  */
7406             boffset = boffset0
7407                 + sv_pos_u2b_midway(start + boffset0, send,
7408                                       uoffset - uoffset0,
7409                                       (*mgp)->mg_len - uoffset0);
7410             found = TRUE;
7411         }
7412     }
7413
7414     if (!found || PL_utf8cache < 0) {
7415         STRLEN real_boffset;
7416         uoffset -= uoffset0;
7417         real_boffset = boffset0 + sv_pos_u2b_forwards(start + boffset0,
7418                                                       send, &uoffset, &at_end);
7419         uoffset += uoffset0;
7420
7421         if (found && PL_utf8cache < 0)
7422             assert_uft8_cache_coherent("sv_pos_u2b_cache", boffset,
7423                                        real_boffset, sv);
7424         boffset = real_boffset;
7425     }
7426
7427     if (PL_utf8cache && !SvGMAGICAL(sv) && SvPOK(sv)) {
7428         if (at_end)
7429             utf8_mg_len_cache_update(sv, mgp, uoffset);
7430         else
7431             utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
7432     }
7433     return boffset;
7434 }
7435
7436
7437 /*
7438 =for apidoc sv_pos_u2b_flags
7439
7440 Converts the offset from a count of UTF-8 chars from
7441 the start of the string, to a count of the equivalent number of bytes; if
7442 C<lenp> is non-zero, it does the same to C<lenp>, but this time starting from
7443 C<offset>, rather than from the start
7444 of the string.  Handles type coercion.
7445 C<flags> is passed to C<SvPV_flags>, and usually should be
7446 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7447
7448 =cut
7449 */
7450
7451 /*
7452  * sv_pos_u2b_flags() uses, like sv_pos_b2u(), the mg_ptr of the potential
7453  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7454  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7455  *
7456  */
7457
7458 STRLEN
7459 Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp,
7460                       U32 flags)
7461 {
7462     const U8 *start;
7463     STRLEN len;
7464     STRLEN boffset;
7465
7466     PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS;
7467
7468     start = (U8*)SvPV_flags(sv, len, flags);
7469     if (len) {
7470         const U8 * const send = start + len;
7471         MAGIC *mg = NULL;
7472         boffset = sv_pos_u2b_cached(sv, &mg, start, send, uoffset, 0, 0);
7473
7474         if (lenp
7475             && *lenp /* don't bother doing work for 0, as its bytes equivalent
7476                         is 0, and *lenp is already set to that.  */) {
7477             /* Convert the relative offset to absolute.  */
7478             const STRLEN uoffset2 = uoffset + *lenp;
7479             const STRLEN boffset2
7480                 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
7481                                       uoffset, boffset) - boffset;
7482
7483             *lenp = boffset2;
7484         }
7485     } else {
7486         if (lenp)
7487             *lenp = 0;
7488         boffset = 0;
7489     }
7490
7491     return boffset;
7492 }
7493
7494 /*
7495 =for apidoc sv_pos_u2b
7496
7497 Converts the value pointed to by C<offsetp> from a count of UTF-8 chars from
7498 the start of the string, to a count of the equivalent number of bytes; if
7499 C<lenp> is non-zero, it does the same to C<lenp>, but this time starting from
7500 the offset, rather than from the start of the string.  Handles magic and
7501 type coercion.
7502
7503 Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
7504 than 2Gb.
7505
7506 =cut
7507 */
7508
7509 /*
7510  * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
7511  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7512  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7513  *
7514  */
7515
7516 /* This function is subject to size and sign problems */
7517
7518 void
7519 Perl_sv_pos_u2b(pTHX_ SV *const sv, I32 *const offsetp, I32 *const lenp)
7520 {
7521     PERL_ARGS_ASSERT_SV_POS_U2B;
7522
7523     if (lenp) {
7524         STRLEN ulen = (STRLEN)*lenp;
7525         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, &ulen,
7526                                          SV_GMAGIC|SV_CONST_RETURN);
7527         *lenp = (I32)ulen;
7528     } else {
7529         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, NULL,
7530                                          SV_GMAGIC|SV_CONST_RETURN);
7531     }
7532 }
7533
7534 static void
7535 S_utf8_mg_len_cache_update(pTHX_ SV *const sv, MAGIC **const mgp,
7536                            const STRLEN ulen)
7537 {
7538     PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE;
7539     if (SvREADONLY(sv) || SvGMAGICAL(sv) || !SvPOK(sv))
7540         return;
7541
7542     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7543                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7544         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, &PL_vtbl_utf8, 0, 0);
7545     }
7546     assert(*mgp);
7547
7548     (*mgp)->mg_len = ulen;
7549 }
7550
7551 /* Create and update the UTF8 magic offset cache, with the proffered utf8/
7552    byte length pairing. The (byte) length of the total SV is passed in too,
7553    as blen, because for some (more esoteric) SVs, the call to SvPV_const()
7554    may not have updated SvCUR, so we can't rely on reading it directly.
7555
7556    The proffered utf8/byte length pairing isn't used if the cache already has
7557    two pairs, and swapping either for the proffered pair would increase the
7558    RMS of the intervals between known byte offsets.
7559
7560    The cache itself consists of 4 STRLEN values
7561    0: larger UTF-8 offset
7562    1: corresponding byte offset
7563    2: smaller UTF-8 offset
7564    3: corresponding byte offset
7565
7566    Unused cache pairs have the value 0, 0.
7567    Keeping the cache "backwards" means that the invariant of
7568    cache[0] >= cache[2] is maintained even with empty slots, which means that
7569    the code that uses it doesn't need to worry if only 1 entry has actually
7570    been set to non-zero.  It also makes the "position beyond the end of the
7571    cache" logic much simpler, as the first slot is always the one to start
7572    from.   
7573 */
7574 static void
7575 S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
7576                            const STRLEN utf8, const STRLEN blen)
7577 {
7578     STRLEN *cache;
7579
7580     PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
7581
7582     if (SvREADONLY(sv))
7583         return;
7584
7585     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7586                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7587         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
7588                            0);
7589         (*mgp)->mg_len = -1;
7590     }
7591     assert(*mgp);
7592
7593     if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
7594         Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
7595         (*mgp)->mg_ptr = (char *) cache;
7596     }
7597     assert(cache);
7598
7599     if (PL_utf8cache < 0 && SvPOKp(sv)) {
7600         /* SvPOKp() because, if sv is a reference, then SvPVX() is actually
7601            a pointer.  Note that we no longer cache utf8 offsets on refer-
7602            ences, but this check is still a good idea, for robustness.  */
7603         const U8 *start = (const U8 *) SvPVX_const(sv);
7604         const STRLEN realutf8 = utf8_length(start, start + byte);
7605
7606         assert_uft8_cache_coherent("utf8_mg_pos_cache_update", utf8, realutf8,
7607                                    sv);
7608     }
7609
7610     /* Cache is held with the later position first, to simplify the code
7611        that deals with unbounded ends.  */
7612        
7613     ASSERT_UTF8_CACHE(cache);
7614     if (cache[1] == 0) {
7615         /* Cache is totally empty  */
7616         cache[0] = utf8;
7617         cache[1] = byte;
7618     } else if (cache[3] == 0) {
7619         if (byte > cache[1]) {
7620             /* New one is larger, so goes first.  */
7621             cache[2] = cache[0];
7622             cache[3] = cache[1];
7623             cache[0] = utf8;
7624             cache[1] = byte;
7625         } else {
7626             cache[2] = utf8;
7627             cache[3] = byte;
7628         }
7629     } else {
7630 /* float casts necessary? XXX */
7631 #define THREEWAY_SQUARE(a,b,c,d) \
7632             ((float)((d) - (c))) * ((float)((d) - (c))) \
7633             + ((float)((c) - (b))) * ((float)((c) - (b))) \
7634                + ((float)((b) - (a))) * ((float)((b) - (a)))
7635
7636         /* Cache has 2 slots in use, and we know three potential pairs.
7637            Keep the two that give the lowest RMS distance. Do the
7638            calculation in bytes simply because we always know the byte
7639            length.  squareroot has the same ordering as the positive value,
7640            so don't bother with the actual square root.  */
7641         if (byte > cache[1]) {
7642             /* New position is after the existing pair of pairs.  */
7643             const float keep_earlier
7644                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
7645             const float keep_later
7646                 = THREEWAY_SQUARE(0, cache[1], byte, blen);
7647
7648             if (keep_later < keep_earlier) {
7649                 cache[2] = cache[0];
7650                 cache[3] = cache[1];
7651             }
7652             cache[0] = utf8;
7653             cache[1] = byte;
7654         }
7655         else {
7656             const float keep_later = THREEWAY_SQUARE(0, byte, cache[1], blen);
7657             float b, c, keep_earlier;
7658             if (byte > cache[3]) {
7659                 /* New position is between the existing pair of pairs.  */
7660                 b = (float)cache[3];
7661                 c = (float)byte;
7662             } else {
7663                 /* New position is before the existing pair of pairs.  */
7664                 b = (float)byte;
7665                 c = (float)cache[3];
7666             }
7667             keep_earlier = THREEWAY_SQUARE(0, b, c, blen);
7668             if (byte > cache[3]) {
7669                 if (keep_later < keep_earlier) {
7670                     cache[2] = utf8;
7671                     cache[3] = byte;
7672                 }
7673                 else {
7674                     cache[0] = utf8;
7675                     cache[1] = byte;
7676                 }
7677             }
7678             else {
7679                 if (! (keep_later < keep_earlier)) {
7680                     cache[0] = cache[2];
7681                     cache[1] = cache[3];
7682                 }
7683                 cache[2] = utf8;
7684                 cache[3] = byte;
7685             }
7686         }
7687     }
7688     ASSERT_UTF8_CACHE(cache);
7689 }
7690
7691 /* We already know all of the way, now we may be able to walk back.  The same
7692    assumption is made as in S_sv_pos_u2b_midway(), namely that walking
7693    backward is half the speed of walking forward. */
7694 static STRLEN
7695 S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
7696                     const U8 *end, STRLEN endu)
7697 {
7698     const STRLEN forw = target - s;
7699     STRLEN backw = end - target;
7700
7701     PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
7702
7703     if (forw < 2 * backw) {
7704         return utf8_length(s, target);
7705     }
7706
7707     while (end > target) {
7708         end--;
7709         while (UTF8_IS_CONTINUATION(*end)) {
7710             end--;
7711         }
7712         endu--;
7713     }
7714     return endu;
7715 }
7716
7717 /*
7718 =for apidoc sv_pos_b2u_flags
7719
7720 Converts C<offset> from a count of bytes from the start of the string, to
7721 a count of the equivalent number of UTF-8 chars.  Handles type coercion.
7722 C<flags> is passed to C<SvPV_flags>, and usually should be
7723 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7724
7725 =cut
7726 */
7727
7728 /*
7729  * sv_pos_b2u_flags() uses, like sv_pos_u2b_flags(), the mg_ptr of the
7730  * potential PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8
7731  * and byte offsets.
7732  *
7733  */
7734 STRLEN
7735 Perl_sv_pos_b2u_flags(pTHX_ SV *const sv, STRLEN const offset, U32 flags)
7736 {
7737     const U8* s;
7738     STRLEN len = 0; /* Actually always set, but let's keep gcc happy.  */
7739     STRLEN blen;
7740     MAGIC* mg = NULL;
7741     const U8* send;
7742     bool found = FALSE;
7743
7744     PERL_ARGS_ASSERT_SV_POS_B2U_FLAGS;
7745
7746     s = (const U8*)SvPV_flags(sv, blen, flags);
7747
7748     if (blen < offset)
7749         Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset, blen=%" UVuf
7750                    ", byte=%" UVuf, (UV)blen, (UV)offset);
7751
7752     send = s + offset;
7753
7754     if (!SvREADONLY(sv)
7755         && PL_utf8cache
7756         && SvTYPE(sv) >= SVt_PVMG
7757         && (mg = mg_find(sv, PERL_MAGIC_utf8)))
7758     {
7759         if (mg->mg_ptr) {
7760             STRLEN * const cache = (STRLEN *) mg->mg_ptr;
7761             if (cache[1] == offset) {
7762                 /* An exact match. */
7763                 return cache[0];
7764             }
7765             if (cache[3] == offset) {
7766                 /* An exact match. */
7767                 return cache[2];
7768             }
7769
7770             if (cache[1] < offset) {
7771                 /* We already know part of the way. */
7772                 if (mg->mg_len != -1) {
7773                     /* Actually, we know the end too.  */
7774                     len = cache[0]
7775                         + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
7776                                               s + blen, mg->mg_len - cache[0]);
7777                 } else {
7778                     len = cache[0] + utf8_length(s + cache[1], send);
7779                 }
7780             }
7781             else if (cache[3] < offset) {
7782                 /* We're between the two cached pairs, so we do the calculation
7783                    offset by the byte/utf-8 positions for the earlier pair,
7784                    then add the utf-8 characters from the string start to
7785                    there.  */
7786                 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
7787                                           s + cache[1], cache[0] - cache[2])
7788                     + cache[2];
7789
7790             }
7791             else { /* cache[3] > offset */
7792                 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
7793                                           cache[2]);
7794
7795             }
7796             ASSERT_UTF8_CACHE(cache);
7797             found = TRUE;
7798         } else if (mg->mg_len != -1) {
7799             len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
7800             found = TRUE;
7801         }
7802     }
7803     if (!found || PL_utf8cache < 0) {
7804         const STRLEN real_len = utf8_length(s, send);
7805
7806         if (found && PL_utf8cache < 0)
7807             assert_uft8_cache_coherent("sv_pos_b2u", len, real_len, sv);
7808         len = real_len;
7809     }
7810
7811     if (PL_utf8cache) {
7812         if (blen == offset)
7813             utf8_mg_len_cache_update(sv, &mg, len);
7814         else
7815             utf8_mg_pos_cache_update(sv, &mg, offset, len, blen);
7816     }
7817
7818     return len;
7819 }
7820
7821 /*
7822 =for apidoc sv_pos_b2u
7823
7824 Converts the value pointed to by C<offsetp> from a count of bytes from the
7825 start of the string, to a count of the equivalent number of UTF-8 chars.
7826 Handles magic and type coercion.
7827
7828 Use C<sv_pos_b2u_flags> in preference, which correctly handles strings
7829 longer than 2Gb.
7830
7831 =cut
7832 */
7833
7834 /*
7835  * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
7836  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7837  * byte offsets.
7838  *
7839  */
7840 void
7841 Perl_sv_pos_b2u(pTHX_ SV *const sv, I32 *const offsetp)
7842 {
7843     PERL_ARGS_ASSERT_SV_POS_B2U;
7844
7845     if (!sv)
7846         return;
7847
7848     *offsetp = (I32)sv_pos_b2u_flags(sv, (STRLEN)*offsetp,
7849                                      SV_GMAGIC|SV_CONST_RETURN);
7850 }
7851
7852 static void
7853 S_assert_uft8_cache_coherent(pTHX_ const char *const func, STRLEN from_cache,
7854                              STRLEN real, SV *const sv)
7855 {
7856     PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT;
7857
7858     /* As this is debugging only code, save space by keeping this test here,
7859        rather than inlining it in all the callers.  */
7860     if (from_cache == real)
7861         return;
7862
7863     /* Need to turn the assertions off otherwise we may recurse infinitely
7864        while printing error messages.  */
7865     SAVEI8(PL_utf8cache);
7866     PL_utf8cache = 0;
7867     Perl_croak(aTHX_ "panic: %s cache %" UVuf " real %" UVuf " for %" SVf,
7868                func, (UV) from_cache, (UV) real, SVfARG(sv));
7869 }
7870
7871 /*
7872 =for apidoc sv_eq
7873
7874 Returns a boolean indicating whether the strings in the two SVs are
7875 identical.  Is UTF-8 and S<C<'use bytes'>> aware, handles get magic, and will
7876 coerce its args to strings if necessary.
7877
7878 =for apidoc sv_eq_flags
7879
7880 Returns a boolean indicating whether the strings in the two SVs are
7881 identical.  Is UTF-8 and S<C<'use bytes'>> aware and coerces its args to strings
7882 if necessary.  If the flags has the C<SV_GMAGIC> bit set, it handles get-magic, too.
7883
7884 =cut
7885 */
7886
7887 I32
7888 Perl_sv_eq_flags(pTHX_ SV *sv1, SV *sv2, const U32 flags)
7889 {
7890     const char *pv1;
7891     STRLEN cur1;
7892     const char *pv2;
7893     STRLEN cur2;
7894
7895     if (!sv1) {
7896         pv1 = "";
7897         cur1 = 0;
7898     }
7899     else {
7900         /* if pv1 and pv2 are the same, second SvPV_const call may
7901          * invalidate pv1 (if we are handling magic), so we may need to
7902          * make a copy */
7903         if (sv1 == sv2 && flags & SV_GMAGIC
7904          && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
7905             pv1 = SvPV_const(sv1, cur1);
7906             sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
7907         }
7908         pv1 = SvPV_flags_const(sv1, cur1, flags);
7909     }
7910
7911     if (!sv2){
7912         pv2 = "";
7913         cur2 = 0;
7914     }
7915     else
7916         pv2 = SvPV_flags_const(sv2, cur2, flags);
7917
7918     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7919         /* Differing utf8ness.  */
7920         if (SvUTF8(sv1)) {
7921                   /* sv1 is the UTF-8 one  */
7922                   return bytes_cmp_utf8((const U8*)pv2, cur2,
7923                                         (const U8*)pv1, cur1) == 0;
7924         }
7925         else {
7926                   /* sv2 is the UTF-8 one  */
7927                   return bytes_cmp_utf8((const U8*)pv1, cur1,
7928                                         (const U8*)pv2, cur2) == 0;
7929         }
7930     }
7931
7932     if (cur1 == cur2)
7933         return (pv1 == pv2) || memEQ(pv1, pv2, cur1);
7934     else
7935         return 0;
7936 }
7937
7938 /*
7939 =for apidoc sv_cmp
7940
7941 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7942 string in C<sv1> is less than, equal to, or greater than the string in
7943 C<sv2>.  Is UTF-8 and S<C<'use bytes'>> aware, handles get magic, and will
7944 coerce its args to strings if necessary.  See also C<L</sv_cmp_locale>>.
7945
7946 =for apidoc sv_cmp_flags
7947
7948 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7949 string in C<sv1> is less than, equal to, or greater than the string in
7950 C<sv2>.  Is UTF-8 and S<C<'use bytes'>> aware and will coerce its args to strings
7951 if necessary.  If the flags has the C<SV_GMAGIC> bit set, it handles get magic.  See
7952 also C<L</sv_cmp_locale_flags>>.
7953
7954 =cut
7955 */
7956
7957 I32
7958 Perl_sv_cmp(pTHX_ SV *const sv1, SV *const sv2)
7959 {
7960     return sv_cmp_flags(sv1, sv2, SV_GMAGIC);
7961 }
7962
7963 I32
7964 Perl_sv_cmp_flags(pTHX_ SV *const sv1, SV *const sv2,
7965                   const U32 flags)
7966 {
7967     STRLEN cur1, cur2;
7968     const char *pv1, *pv2;
7969     I32  cmp;
7970     SV *svrecode = NULL;
7971
7972     if (!sv1) {
7973         pv1 = "";
7974         cur1 = 0;
7975     }
7976     else
7977         pv1 = SvPV_flags_const(sv1, cur1, flags);
7978
7979     if (!sv2) {
7980         pv2 = "";
7981         cur2 = 0;
7982     }
7983     else
7984         pv2 = SvPV_flags_const(sv2, cur2, flags);
7985
7986     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7987         /* Differing utf8ness.  */
7988         if (SvUTF8(sv1)) {
7989                 const int retval = -bytes_cmp_utf8((const U8*)pv2, cur2,
7990                                                    (const U8*)pv1, cur1);
7991                 return retval ? retval < 0 ? -1 : +1 : 0;
7992         }
7993         else {
7994                 const int retval = bytes_cmp_utf8((const U8*)pv1, cur1,
7995                                                   (const U8*)pv2, cur2);
7996                 return retval ? retval < 0 ? -1 : +1 : 0;
7997         }
7998     }
7999
8000     /* Here, if both are non-NULL, then they have the same UTF8ness. */
8001
8002     if (!cur1) {
8003         cmp = cur2 ? -1 : 0;
8004     } else if (!cur2) {
8005         cmp = 1;
8006     } else {
8007         STRLEN shortest_len = cur1 < cur2 ? cur1 : cur2;
8008
8009 #ifdef EBCDIC
8010         if (! DO_UTF8(sv1)) {
8011 #endif
8012             const I32 retval = memcmp((const void*)pv1,
8013                                       (const void*)pv2,
8014                                       shortest_len);
8015             if (retval) {
8016                 cmp = retval < 0 ? -1 : 1;
8017             } else if (cur1 == cur2) {
8018                 cmp = 0;
8019             } else {
8020                 cmp = cur1 < cur2 ? -1 : 1;
8021             }
8022 #ifdef EBCDIC
8023         }
8024         else {  /* Both are to be treated as UTF-EBCDIC */
8025
8026             /* EBCDIC UTF-8 is complicated by the fact that it is based on I8
8027              * which remaps code points 0-255.  We therefore generally have to
8028              * unmap back to the original values to get an accurate comparison.
8029              * But we don't have to do that for UTF-8 invariants, as by
8030              * definition, they aren't remapped, nor do we have to do it for
8031              * above-latin1 code points, as they also aren't remapped.  (This
8032              * code also works on ASCII platforms, but the memcmp() above is
8033              * much faster). */
8034
8035             const char *e = pv1 + shortest_len;
8036
8037             /* Find the first bytes that differ between the two strings */
8038             while (pv1 < e && *pv1 == *pv2) {
8039                 pv1++;
8040                 pv2++;
8041             }
8042
8043
8044             if (pv1 == e) { /* Are the same all the way to the end */
8045                 if (cur1 == cur2) {
8046                     cmp = 0;
8047                 } else {
8048                     cmp = cur1 < cur2 ? -1 : 1;
8049                 }
8050             }
8051             else   /* Here *pv1 and *pv2 are not equal, but all bytes earlier
8052                     * in the strings were.  The current bytes may or may not be
8053                     * at the beginning of a character.  But neither or both are
8054                     * (or else earlier bytes would have been different).  And
8055                     * if we are in the middle of a character, the two
8056                     * characters are comprised of the same number of bytes
8057                     * (because in this case the start bytes are the same, and
8058                     * the start bytes encode the character's length). */
8059                  if (UTF8_IS_INVARIANT(*pv1))
8060             {
8061                 /* If both are invariants; can just compare directly */
8062                 if (UTF8_IS_INVARIANT(*pv2)) {
8063                     cmp = ((U8) *pv1 < (U8) *pv2) ? -1 : 1;
8064                 }
8065                 else   /* Since *pv1 is invariant, it is the whole character,
8066                           which means it is at the beginning of a character.
8067                           That means pv2 is also at the beginning of a
8068                           character (see earlier comment).  Since it isn't
8069                           invariant, it must be a start byte.  If it starts a
8070                           character whose code point is above 255, that
8071                           character is greater than any single-byte char, which
8072                           *pv1 is */
8073                       if (UTF8_IS_ABOVE_LATIN1_START(*pv2))
8074                 {
8075                     cmp = -1;
8076                 }
8077                 else {
8078                     /* Here, pv2 points to a character composed of 2 bytes
8079                      * whose code point is < 256.  Get its code point and
8080                      * compare with *pv1 */
8081                     cmp = ((U8) *pv1 < EIGHT_BIT_UTF8_TO_NATIVE(*pv2, *(pv2 + 1)))
8082                            ?  -1
8083                            : 1;
8084                 }
8085             }
8086             else   /* The code point starting at pv1 isn't a single byte */
8087                  if (UTF8_IS_INVARIANT(*pv2))
8088             {
8089                 /* But here, the code point starting at *pv2 is a single byte,
8090                  * and so *pv1 must begin a character, hence is a start byte.
8091                  * If that character is above 255, it is larger than any
8092                  * single-byte char, which *pv2 is */
8093                 if (UTF8_IS_ABOVE_LATIN1_START(*pv1)) {
8094                     cmp = 1;
8095                 }
8096                 else {
8097                     /* Here, pv1 points to a character composed of 2 bytes
8098                      * whose code point is < 256.  Get its code point and
8099                      * compare with the single byte character *pv2 */
8100                     cmp = (EIGHT_BIT_UTF8_TO_NATIVE(*pv1, *(pv1 + 1)) < (U8) *pv2)
8101                           ?  -1
8102                           : 1;
8103                 }
8104             }
8105             else   /* Here, we've ruled out either *pv1 and *pv2 being
8106                       invariant.  That means both are part of variants, but not
8107                       necessarily at the start of a character */
8108                  if (   UTF8_IS_ABOVE_LATIN1_START(*pv1)
8109                      || UTF8_IS_ABOVE_LATIN1_START(*pv2))
8110             {
8111                 /* Here, at least one is the start of a character, which means
8112                  * the other is also a start byte.  And the code point of at
8113                  * least one of the characters is above 255.  It is a
8114                  * characteristic of UTF-EBCDIC that all start bytes for
8115                  * above-latin1 code points are well behaved as far as code
8116                  * point comparisons go, and all are larger than all other
8117                  * start bytes, so the comparison with those is also well
8118                  * behaved */
8119                 cmp = ((U8) *pv1 < (U8) *pv2) ? -1 : 1;
8120             }
8121             else {
8122                 /* Here both *pv1 and *pv2 are part of variant characters.
8123                  * They could be both continuations, or both start characters.
8124                  * (One or both could even be an illegal start character (for
8125                  * an overlong) which for the purposes of sorting we treat as
8126                  * legal. */
8127                 if (UTF8_IS_CONTINUATION(*pv1)) {
8128
8129                     /* If they are continuations for code points above 255,
8130                      * then comparing the current byte is sufficient, as there
8131                      * is no remapping of these and so the comparison is
8132                      * well-behaved.   We determine if they are such
8133                      * continuations by looking at the preceding byte.  It
8134                      * could be a start byte, from which we can tell if it is
8135                      * for an above 255 code point.  Or it could be a
8136                      * continuation, which means the character occupies at
8137                      * least 3 bytes, so must be above 255.  */
8138                     if (   UTF8_IS_CONTINUATION(*(pv2 - 1))
8139                         || UTF8_IS_ABOVE_LATIN1_START(*(pv2 -1)))
8140                     {
8141                         cmp = ((U8) *pv1 < (U8) *pv2) ? -1 : 1;
8142                         goto cmp_done;
8143                     }
8144
8145                     /* Here, the continuations are for code points below 256;
8146                      * back up one to get to the start byte */
8147                     pv1--;
8148                     pv2--;
8149                 }
8150
8151                 /* We need to get the actual native code point of each of these
8152                  * variants in order to compare them */
8153                 cmp =  (  EIGHT_BIT_UTF8_TO_NATIVE(*pv1, *(pv1 + 1))
8154                         < EIGHT_BIT_UTF8_TO_NATIVE(*pv2, *(pv2 + 1)))
8155                         ? -1
8156                         : 1;
8157             }
8158         }
8159       cmp_done: ;
8160 #endif
8161     }
8162
8163     SvREFCNT_dec(svrecode);
8164
8165     return cmp;
8166 }
8167
8168 /*
8169 =for apidoc sv_cmp_locale
8170
8171 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
8172 S<C<'use bytes'>> aware, handles get magic, and will coerce its args to strings
8173 if necessary.  See also C<L</sv_cmp>>.
8174
8175 =for apidoc sv_cmp_locale_flags
8176
8177 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
8178 S<C<'use bytes'>> aware and will coerce its args to strings if necessary.  If
8179 the flags contain C<SV_GMAGIC>, it handles get magic.  See also
8180 C<L</sv_cmp_flags>>.
8181
8182 =cut
8183 */
8184
8185 I32
8186 Perl_sv_cmp_locale(pTHX_ SV *const sv1, SV *const sv2)
8187 {
8188     return sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC);
8189 }
8190
8191 I32
8192 Perl_sv_cmp_locale_flags(pTHX_ SV *const sv1, SV *const sv2,
8193                          const U32 flags)
8194 {
8195 #ifdef USE_LOCALE_COLLATE
8196
8197     char *pv1, *pv2;
8198     STRLEN len1, len2;
8199     I32 retval;
8200
8201     if (PL_collation_standard)
8202         goto raw_compare;
8203
8204     len1 = len2 = 0;
8205
8206     /* Revert to using raw compare if both operands exist, but either one
8207      * doesn't transform properly for collation */
8208     if (sv1 && sv2) {
8209         pv1 = sv_collxfrm_flags(sv1, &len1, flags);
8210         if (! pv1) {
8211             goto raw_compare;
8212         }
8213         pv2 = sv_collxfrm_flags(sv2, &len2, flags);
8214         if (! pv2) {
8215             goto raw_compare;
8216         }
8217     }
8218     else {
8219         pv1 = sv1 ? sv_collxfrm_flags(sv1, &len1, flags) : (char *) NULL;
8220         pv2 = sv2 ? sv_collxfrm_flags(sv2, &len2, flags) : (char *) NULL;
8221     }
8222
8223     if (!pv1 || !len1) {
8224         if (pv2 && len2)
8225             return -1;
8226         else
8227             goto raw_compare;
8228     }
8229     else {
8230         if (!pv2 || !len2)
8231             return 1;
8232     }
8233
8234     retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
8235
8236     if (retval)
8237         return retval < 0 ? -1 : 1;
8238
8239     /*
8240      * When the result of collation is equality, that doesn't mean
8241      * that there are no differences -- some locales exclude some
8242      * characters from consideration.  So to avoid false equalities,
8243      * we use the raw string as a tiebreaker.
8244      */
8245
8246   raw_compare:
8247     /* FALLTHROUGH */
8248
8249 #else
8250     PERL_UNUSED_ARG(flags);
8251 #endif /* USE_LOCALE_COLLATE */
8252
8253     return sv_cmp(sv1, sv2);
8254 }
8255
8256
8257 #ifdef USE_LOCALE_COLLATE
8258
8259 /*
8260 =for apidoc sv_collxfrm
8261
8262 This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag.  See
8263 C<L</sv_collxfrm_flags>>.
8264
8265 =for apidoc sv_collxfrm_flags
8266
8267 Add Collate Transform magic to an SV if it doesn't already have it.  If the
8268 flags contain C<SV_GMAGIC>, it handles get-magic.
8269
8270 Any scalar variable may carry C<PERL_MAGIC_collxfrm> magic that contains the
8271 scalar data of the variable, but transformed to such a format that a normal
8272 memory comparison can be used to compare the data according to the locale
8273 settings.
8274
8275 =cut
8276 */
8277
8278 char *
8279 Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp, const I32 flags)
8280 {
8281     MAGIC *mg;
8282
8283     PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS;
8284
8285     mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
8286
8287     /* If we don't have collation magic on 'sv', or the locale has changed
8288      * since the last time we calculated it, get it and save it now */
8289     if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
8290         const char *s;
8291         char *xf;
8292         STRLEN len, xlen;
8293
8294         /* Free the old space */
8295         if (mg)
8296             Safefree(mg->mg_ptr);
8297
8298         s = SvPV_flags_const(sv, len, flags);
8299         if ((xf = _mem_collxfrm(s, len, &xlen, cBOOL(SvUTF8(sv))))) {
8300             if (! mg) {
8301                 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
8302                                  0, 0);
8303                 assert(mg);
8304             }
8305             mg->mg_ptr = xf;
8306             mg->mg_len = xlen;
8307         }
8308         else {
8309             if (mg) {
8310                 mg->mg_ptr = NULL;
8311                 mg->mg_len = -1;
8312             }
8313         }
8314     }
8315
8316     if (mg && mg->mg_ptr) {
8317         *nxp = mg->mg_len;
8318         return mg->mg_ptr + sizeof(PL_collation_ix);
8319     }
8320     else {
8321         *nxp = 0;
8322         return NULL;
8323     }
8324 }
8325
8326 #endif /* USE_LOCALE_COLLATE */
8327
8328 static char *
8329 S_sv_gets_append_to_utf8(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8330 {
8331     SV * const tsv = newSV(0);
8332     ENTER;
8333     SAVEFREESV(tsv);
8334     sv_gets(tsv, fp, 0);
8335     sv_utf8_upgrade_nomg(tsv);
8336     SvCUR_set(sv,append);
8337     sv_catsv(sv,tsv);
8338     LEAVE;
8339     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8340 }
8341
8342 static char *
8343 S_sv_gets_read_record(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8344 {
8345     SSize_t bytesread;
8346     const STRLEN recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
8347       /* Grab the size of the record we're getting */
8348     char *buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
8349     
8350     /* Go yank in */
8351 #ifdef __VMS
8352     int fd;
8353     Stat_t st;
8354
8355     /* With a true, record-oriented file on VMS, we need to use read directly
8356      * to ensure that we respect RMS record boundaries.  The user is responsible
8357      * for providing a PL_rs value that corresponds to the FAB$W_MRS (maximum
8358      * record size) field.  N.B. This is likely to produce invalid results on
8359      * varying-width character data when a record ends mid-character.
8360      */
8361     fd = PerlIO_fileno(fp);
8362     if (fd != -1
8363         && PerlLIO_fstat(fd, &st) == 0
8364         && (st.st_fab_rfm == FAB$C_VAR
8365             || st.st_fab_rfm == FAB$C_VFC
8366             || st.st_fab_rfm == FAB$C_FIX)) {
8367
8368         bytesread = PerlLIO_read(fd, buffer, recsize);
8369     }
8370     else /* in-memory file from PerlIO::Scalar
8371           * or not a record-oriented file
8372           */
8373 #endif
8374     {
8375         bytesread = PerlIO_read(fp, buffer, recsize);
8376
8377         /* At this point, the logic in sv_get() means that sv will
8378            be treated as utf-8 if the handle is utf8.
8379         */
8380         if (PerlIO_isutf8(fp) && bytesread > 0) {
8381             char *bend = buffer + bytesread;
8382             char *bufp = buffer;
8383             size_t charcount = 0;
8384             bool charstart = TRUE;
8385             STRLEN skip = 0;
8386
8387             while (charcount < recsize) {
8388                 /* count accumulated characters */
8389                 while (bufp < bend) {
8390                     if (charstart) {
8391                         skip = UTF8SKIP(bufp);
8392                     }
8393                     if (bufp + skip > bend) {
8394                         /* partial at the end */
8395                         charstart = FALSE;
8396                         break;
8397                     }
8398                     else {
8399                         ++charcount;
8400                         bufp += skip;
8401                         charstart = TRUE;
8402                     }
8403                 }
8404
8405                 if (charcount < recsize) {
8406                     STRLEN readsize;
8407                     STRLEN bufp_offset = bufp - buffer;
8408                     SSize_t morebytesread;
8409
8410                     /* originally I read enough to fill any incomplete
8411                        character and the first byte of the next
8412                        character if needed, but if there's many
8413                        multi-byte encoded characters we're going to be
8414                        making a read call for every character beyond
8415                        the original read size.
8416
8417                        So instead, read the rest of the character if
8418                        any, and enough bytes to match at least the
8419                        start bytes for each character we're going to
8420                        read.
8421                     */
8422                     if (charstart)
8423                         readsize = recsize - charcount;
8424                     else 
8425                         readsize = skip - (bend - bufp) + recsize - charcount - 1;
8426                     buffer = SvGROW(sv, append + bytesread + readsize + 1) + append;
8427                     bend = buffer + bytesread;
8428                     morebytesread = PerlIO_read(fp, bend, readsize);
8429                     if (morebytesread <= 0) {
8430                         /* we're done, if we still have incomplete
8431                            characters the check code in sv_gets() will
8432                            warn about them.
8433
8434                            I'd originally considered doing
8435                            PerlIO_ungetc() on all but the lead
8436                            character of the incomplete character, but
8437                            read() doesn't do that, so I don't.
8438                         */
8439                         break;
8440                     }
8441
8442                     /* prepare to scan some more */
8443                     bytesread += morebytesread;
8444                     bend = buffer + bytesread;
8445                     bufp = buffer + bufp_offset;
8446                 }
8447             }
8448         }
8449     }
8450
8451     if (bytesread < 0)
8452         bytesread = 0;
8453     SvCUR_set(sv, bytesread + append);
8454     buffer[bytesread] = '\0';
8455     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8456 }
8457
8458 /*
8459 =for apidoc sv_gets
8460
8461 Get a line from the filehandle and store it into the SV, optionally
8462 appending to the currently-stored string.  If C<append> is not 0, the
8463 line is appended to the SV instead of overwriting it.  C<append> should
8464 be set to the byte offset that the appended string should start at
8465 in the SV (typically, C<SvCUR(sv)> is a suitable choice).
8466
8467 =cut
8468 */
8469
8470 char *
8471 Perl_sv_gets(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8472 {
8473     const char *rsptr;
8474     STRLEN rslen;
8475     STDCHAR rslast;
8476     STDCHAR *bp;
8477     SSize_t cnt;
8478     int i = 0;
8479     int rspara = 0;
8480
8481     PERL_ARGS_ASSERT_SV_GETS;
8482
8483     if (SvTHINKFIRST(sv))
8484         sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
8485     /* XXX. If you make this PVIV, then copy on write can copy scalars read
8486        from <>.
8487        However, perlbench says it's slower, because the existing swipe code
8488        is faster than copy on write.
8489        Swings and roundabouts.  */
8490     SvUPGRADE(sv, SVt_PV);
8491
8492     if (append) {
8493         /* line is going to be appended to the existing buffer in the sv */
8494         if (PerlIO_isutf8(fp)) {
8495             if (!SvUTF8(sv)) {
8496                 sv_utf8_upgrade_nomg(sv);
8497                 sv_pos_u2b(sv,&append,0);
8498             }
8499         } else if (SvUTF8(sv)) {
8500             return S_sv_gets_append_to_utf8(aTHX_ sv, fp, append);
8501         }
8502     }
8503
8504     SvPOK_only(sv);
8505     if (!append) {
8506         /* not appending - "clear" the string by setting SvCUR to 0,
8507          * the pv is still avaiable. */
8508         SvCUR_set(sv,0);
8509     }
8510     if (PerlIO_isutf8(fp))
8511         SvUTF8_on(sv);
8512
8513     if (IN_PERL_COMPILETIME) {
8514         /* we always read code in line mode */
8515         rsptr = "\n";
8516         rslen = 1;
8517     }
8518     else if (RsSNARF(PL_rs)) {
8519         /* If it is a regular disk file use size from stat() as estimate
8520            of amount we are going to read -- may result in mallocing
8521            more memory than we really need if the layers below reduce
8522            the size we read (e.g. CRLF or a gzip layer).
8523          */
8524         Stat_t st;
8525         int fd = PerlIO_fileno(fp);
8526         if (fd >= 0 && (PerlLIO_fstat(fd, &st) == 0) && S_ISREG(st.st_mode))  {
8527             const Off_t offset = PerlIO_tell(fp);
8528             if (offset != (Off_t) -1 && st.st_size + append > offset) {
8529 #ifdef PERL_COPY_ON_WRITE
8530                 /* Add an extra byte for the sake of copy-on-write's
8531                  * buffer reference count. */
8532                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 2));
8533 #else
8534                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
8535 #endif
8536             }
8537         }
8538         rsptr = NULL;
8539         rslen = 0;
8540     }
8541     else if (RsRECORD(PL_rs)) {
8542         return S_sv_gets_read_record(aTHX_ sv, fp, append);
8543     }
8544     else if (RsPARA(PL_rs)) {
8545         rsptr = "\n\n";
8546         rslen = 2;
8547         rspara = 1;
8548     }
8549     else {
8550         /* Get $/ i.e. PL_rs into same encoding as stream wants */
8551         if (PerlIO_isutf8(fp)) {
8552             rsptr = SvPVutf8(PL_rs, rslen);
8553         }
8554         else {
8555             if (SvUTF8(PL_rs)) {
8556                 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
8557                     Perl_croak(aTHX_ "Wide character in $/");
8558                 }
8559             }
8560             /* extract the raw pointer to the record separator */
8561             rsptr = SvPV_const(PL_rs, rslen);
8562         }
8563     }
8564
8565     /* rslast is the last character in the record separator
8566      * note we don't use rslast except when rslen is true, so the
8567      * null assign is a placeholder. */
8568     rslast = rslen ? rsptr[rslen - 1] : '\0';
8569
8570     if (rspara) {        /* have to do this both before and after */
8571                          /* to make sure file boundaries work right */
8572         while (1) {
8573             if (PerlIO_eof(fp))
8574                 return 0;
8575             i = PerlIO_getc(fp);
8576             if (i != '\n') {
8577                 if (i == -1)
8578                     return 0;
8579                 PerlIO_ungetc(fp,i);
8580                 break;
8581             }
8582         }
8583     }
8584
8585     /* See if we know enough about I/O mechanism to cheat it ! */
8586
8587     /* This used to be #ifdef test - it is made run-time test for ease
8588        of abstracting out stdio interface. One call should be cheap
8589        enough here - and may even be a macro allowing compile
8590        time optimization.
8591      */
8592
8593     if (PerlIO_fast_gets(fp)) {
8594     /*
8595      * We can do buffer based IO operations on this filehandle.
8596      *
8597      * This means we can bypass a lot of subcalls and process
8598      * the buffer directly, it also means we know the upper bound
8599      * on the amount of data we might read of the current buffer
8600      * into our sv. Knowing this allows us to preallocate the pv
8601      * to be able to hold that maximum, which allows us to simplify
8602      * a lot of logic. */
8603
8604     /*
8605      * We're going to steal some values from the stdio struct
8606      * and put EVERYTHING in the innermost loop into registers.
8607      */
8608     STDCHAR *ptr;       /* pointer into fp's read-ahead buffer */
8609     STRLEN bpx;         /* length of the data in the target sv
8610                            used to fix pointers after a SvGROW */
8611     I32 shortbuffered;  /* If the pv buffer is shorter than the amount
8612                            of data left in the read-ahead buffer.
8613                            If 0 then the pv buffer can hold the full
8614                            amount left, otherwise this is the amount it
8615                            can hold. */
8616
8617     /* Here is some breathtakingly efficient cheating */
8618
8619     /* When you read the following logic resist the urge to think
8620      * of record separators that are 1 byte long. They are an
8621      * uninteresting special (simple) case.
8622      *
8623      * Instead think of record separators which are at least 2 bytes
8624      * long, and keep in mind that we need to deal with such
8625      * separators when they cross a read-ahead buffer boundary.
8626      *
8627      * Also consider that we need to gracefully deal with separators
8628      * that may be longer than a single read ahead buffer.
8629      *
8630      * Lastly do not forget we want to copy the delimiter as well. We
8631      * are copying all data in the file _up_to_and_including_ the separator
8632      * itself.
8633      *
8634      * Now that you have all that in mind here is what is happening below:
8635      *
8636      * 1. When we first enter the loop we do some memory book keeping to see
8637      * how much free space there is in the target SV. (This sub assumes that
8638      * it is operating on the same SV most of the time via $_ and that it is
8639      * going to be able to reuse the same pv buffer each call.) If there is
8640      * "enough" room then we set "shortbuffered" to how much space there is
8641      * and start reading forward.
8642      *
8643      * 2. When we scan forward we copy from the read-ahead buffer to the target
8644      * SV's pv buffer. While we go we watch for the end of the read-ahead buffer,
8645      * and the end of the of pv, as well as for the "rslast", which is the last
8646      * char of the separator.
8647      *
8648      * 3. When scanning forward if we see rslast then we jump backwards in *pv*
8649      * (which has a "complete" record up to the point we saw rslast) and check
8650      * it to see if it matches the separator. If it does we are done. If it doesn't
8651      * we continue on with the scan/copy.
8652      *
8653      * 4. If we run out of read-ahead buffer (cnt goes to 0) then we have to get
8654      * the IO system to read the next buffer. We do this by doing a getc(), which
8655      * returns a single char read (or EOF), and prefills the buffer, and also
8656      * allows us to find out how full the buffer is.  We use this information to
8657      * SvGROW() the sv to the size remaining in the buffer, after which we copy
8658      * the returned single char into the target sv, and then go back into scan
8659      * forward mode.
8660      *
8661      * 5. If we run out of write-buffer then we SvGROW() it by the size of the
8662      * remaining space in the read-buffer.
8663      *
8664      * Note that this code despite its twisty-turny nature is pretty darn slick.
8665      * It manages single byte separators, multi-byte cross boundary separators,
8666      * and cross-read-buffer separators cleanly and efficiently at the cost
8667      * of potentially greatly overallocating the target SV.
8668      *
8669      * Yves
8670      */
8671
8672
8673     /* get the number of bytes remaining in the read-ahead buffer
8674      * on first call on a given fp this will return 0.*/
8675     cnt = PerlIO_get_cnt(fp);
8676
8677     /* make sure we have the room */
8678     if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
8679         /* Not room for all of it
8680            if we are looking for a separator and room for some
8681          */
8682         if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
8683             /* just process what we have room for */
8684             shortbuffered = cnt - SvLEN(sv) + append + 1;
8685             cnt -= shortbuffered;
8686         }
8687         else {
8688             /* ensure that the target sv has enough room to hold
8689              * the rest of the read-ahead buffer */
8690             shortbuffered = 0;
8691             /* remember that cnt can be negative */
8692             SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
8693         }
8694     }
8695     else {
8696         /* we have enough room to hold the full buffer, lets scream */
8697         shortbuffered = 0;
8698     }
8699
8700     /* extract the pointer to sv's string buffer, offset by append as necessary */
8701     bp = (STDCHAR*)SvPVX_const(sv) + append;  /* move these two too to registers */
8702     /* extract the point to the read-ahead buffer */
8703     ptr = (STDCHAR*)PerlIO_get_ptr(fp);
8704
8705     /* some trace debug output */
8706     DEBUG_P(PerlIO_printf(Perl_debug_log,
8707         "Screamer: entering, ptr=%" UVuf ", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
8708     DEBUG_P(PerlIO_printf(Perl_debug_log,
8709         "Screamer: entering: PerlIO * thinks ptr=%" UVuf ", cnt=%" IVdf ", base=%"
8710          UVuf "\n",
8711                PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8712                PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
8713
8714     for (;;) {
8715       screamer:
8716         /* if there is stuff left in the read-ahead buffer */
8717         if (cnt > 0) {
8718             /* if there is a separator */
8719             if (rslen) {
8720                 /* find next rslast */
8721                 STDCHAR *p;
8722
8723                 /* shortcut common case of blank line */
8724                 cnt--;
8725                 if ((*bp++ = *ptr++) == rslast)
8726                     goto thats_all_folks;
8727
8728                 p = (STDCHAR *)memchr(ptr, rslast, cnt);
8729                 if (p) {
8730                     SSize_t got = p - ptr + 1;
8731                     Copy(ptr, bp, got, STDCHAR);
8732                     ptr += got;
8733                     bp  += got;
8734                     cnt -= got;
8735                     goto thats_all_folks;
8736                 }
8737                 Copy(ptr, bp, cnt, STDCHAR);
8738                 ptr += cnt;
8739                 bp  += cnt;
8740                 cnt = 0;
8741             }
8742             else {
8743                 /* no separator, slurp the full buffer */
8744                 Copy(ptr, bp, cnt, char);            /* this     |  eat */
8745                 bp += cnt;                           /* screams  |  dust */
8746                 ptr += cnt;                          /* louder   |  sed :-) */
8747                 cnt = 0;
8748                 assert (!shortbuffered);
8749                 goto cannot_be_shortbuffered;
8750             }
8751         }
8752         
8753         if (shortbuffered) {            /* oh well, must extend */
8754             /* we didnt have enough room to fit the line into the target buffer
8755              * so we must extend the target buffer and keep going */
8756             cnt = shortbuffered;
8757             shortbuffered = 0;
8758             bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
8759             SvCUR_set(sv, bpx);
8760             /* extned the target sv's buffer so it can hold the full read-ahead buffer */
8761             SvGROW(sv, SvLEN(sv) + append + cnt + 2);
8762             bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
8763             continue;
8764         }
8765
8766     cannot_be_shortbuffered:
8767         /* we need to refill the read-ahead buffer if possible */
8768
8769         DEBUG_P(PerlIO_printf(Perl_debug_log,
8770                              "Screamer: going to getc, ptr=%" UVuf ", cnt=%" IVdf "\n",
8771                               PTR2UV(ptr),(IV)cnt));
8772         PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
8773
8774         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8775            "Screamer: pre: FILE * thinks ptr=%" UVuf ", cnt=%" IVdf ", base=%" UVuf "\n",
8776             PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8777             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8778
8779         /*
8780             call PerlIO_getc() to let it prefill the lookahead buffer
8781
8782             This used to call 'filbuf' in stdio form, but as that behaves like
8783             getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
8784             another abstraction.
8785
8786             Note we have to deal with the char in 'i' if we are not at EOF
8787         */
8788         bpx = bp - (STDCHAR*)SvPVX_const(sv);
8789         /* signals might be called here, possibly modifying sv */
8790         i   = PerlIO_getc(fp);          /* get more characters */
8791         bp = (STDCHAR*)SvPVX_const(sv) + bpx;
8792
8793         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8794            "Screamer: post: FILE * thinks ptr=%" UVuf ", cnt=%" IVdf ", base=%" UVuf "\n",
8795             PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8796             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8797
8798         /* find out how much is left in the read-ahead buffer, and rextract its pointer */
8799         cnt = PerlIO_get_cnt(fp);
8800         ptr = (STDCHAR*)PerlIO_get_ptr(fp);     /* reregisterize cnt and ptr */
8801         DEBUG_P(PerlIO_printf(Perl_debug_log,
8802             "Screamer: after getc, ptr=%" UVuf ", cnt=%" IVdf "\n",
8803             PTR2UV(ptr),(IV)cnt));
8804
8805         if (i == EOF)                   /* all done for ever? */
8806             goto thats_really_all_folks;
8807
8808         /* make sure we have enough space in the target sv */
8809         bpx = bp - (STDCHAR*)SvPVX_const(sv);   /* box up before relocation */
8810         SvCUR_set(sv, bpx);
8811         SvGROW(sv, bpx + cnt + 2);
8812         bp = (STDCHAR*)SvPVX_const(sv) + bpx;   /* unbox after relocation */
8813
8814         /* copy of the char we got from getc() */
8815         *bp++ = (STDCHAR)i;             /* store character from PerlIO_getc */
8816
8817         /* make sure we deal with the i being the last character of a separator */
8818         if (rslen && (STDCHAR)i == rslast)  /* all done for now? */
8819             goto thats_all_folks;
8820     }
8821
8822   thats_all_folks:
8823     /* check if we have actually found the separator - only really applies
8824      * when rslen > 1 */
8825     if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
8826           memNE((char*)bp - rslen, rsptr, rslen))
8827         goto screamer;                          /* go back to the fray */
8828   thats_really_all_folks:
8829     if (shortbuffered)
8830         cnt += shortbuffered;
8831         DEBUG_P(PerlIO_printf(Perl_debug_log,
8832              "Screamer: quitting, ptr=%" UVuf ", cnt=%" IVdf "\n",PTR2UV(ptr),(IV)cnt));
8833     PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt);  /* put these back or we're in trouble */
8834     DEBUG_P(PerlIO_printf(Perl_debug_log,
8835         "Screamer: end: FILE * thinks ptr=%" UVuf ", cnt=%" IVdf ", base=%" UVuf
8836         "\n",
8837         PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8838         PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8839     *bp = '\0';
8840     SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv));      /* set length */
8841     DEBUG_P(PerlIO_printf(Perl_debug_log,
8842         "Screamer: done, len=%ld, string=|%.*s|\n",
8843         (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
8844     }
8845    else
8846     {
8847        /*The big, slow, and stupid way. */
8848         STDCHAR buf[8192];
8849
8850       screamer2:
8851         if (rslen) {
8852             const STDCHAR * const bpe = buf + sizeof(buf);
8853             bp = buf;
8854             while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
8855                 ; /* keep reading */
8856             cnt = bp - buf;
8857         }
8858         else {
8859             cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
8860             /* Accommodate broken VAXC compiler, which applies U8 cast to
8861              * both args of ?: operator, causing EOF to change into 255
8862              */
8863             if (cnt > 0)
8864                  i = (U8)buf[cnt - 1];
8865             else
8866                  i = EOF;
8867         }
8868
8869         if (cnt < 0)
8870             cnt = 0;  /* we do need to re-set the sv even when cnt <= 0 */
8871         if (append)
8872             sv_catpvn_nomg(sv, (char *) buf, cnt);
8873         else
8874             sv_setpvn(sv, (char *) buf, cnt);   /* "nomg" is implied */
8875
8876         if (i != EOF &&                 /* joy */
8877             (!rslen ||
8878              SvCUR(sv) < rslen ||
8879              memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
8880         {
8881             append = -1;
8882             /*
8883              * If we're reading from a TTY and we get a short read,
8884              * indicating that the user hit his EOF character, we need
8885              * to notice it now, because if we try to read from the TTY
8886              * again, the EOF condition will disappear.
8887              *
8888              * The comparison of cnt to sizeof(buf) is an optimization
8889              * that prevents unnecessary calls to feof().
8890              *
8891              * - jik 9/25/96
8892              */
8893             if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
8894                 goto screamer2;
8895         }
8896
8897     }
8898
8899     if (rspara) {               /* have to do this both before and after */
8900         while (i != EOF) {      /* to make sure file boundaries work right */
8901             i = PerlIO_getc(fp);
8902             if (i != '\n') {
8903                 PerlIO_ungetc(fp,i);
8904                 break;
8905             }
8906         }
8907     }
8908
8909     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8910 }
8911
8912 /*
8913 =for apidoc sv_inc
8914
8915 Auto-increment of the value in the SV, doing string to numeric conversion
8916 if necessary.  Handles 'get' magic and operator overloading.
8917
8918 =cut
8919 */
8920
8921 void
8922 Perl_sv_inc(pTHX_ SV *const sv)
8923 {
8924     if (!sv)
8925         return;
8926     SvGETMAGIC(sv);
8927     sv_inc_nomg(sv);
8928 }
8929
8930 /*
8931 =for apidoc sv_inc_nomg
8932
8933 Auto-increment of the value in the SV, doing string to numeric conversion
8934 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8935
8936 =cut
8937 */
8938
8939 void
8940 Perl_sv_inc_nomg(pTHX_ SV *const sv)
8941 {
8942     char *d;
8943     int flags;
8944
8945     if (!sv)
8946         return;
8947     if (SvTHINKFIRST(sv)) {
8948         if (SvREADONLY(sv)) {
8949                 Perl_croak_no_modify();
8950         }
8951         if (SvROK(sv)) {
8952             IV i;
8953             if (SvAMAGIC(sv) && AMG_CALLunary(sv, inc_amg))
8954                 return;
8955             i = PTR2IV(SvRV(sv));
8956             sv_unref(sv);
8957             sv_setiv(sv, i);
8958         }
8959         else sv_force_normal_flags(sv, 0);
8960     }
8961     flags = SvFLAGS(sv);
8962     if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
8963         /* It's (privately or publicly) a float, but not tested as an
8964            integer, so test it to see. */
8965         (void) SvIV(sv);
8966         flags = SvFLAGS(sv);
8967     }
8968     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8969         /* It's publicly an integer, or privately an integer-not-float */
8970 #ifdef PERL_PRESERVE_IVUV
8971       oops_its_int:
8972 #endif
8973         if (SvIsUV(sv)) {
8974             if (SvUVX(sv) == UV_MAX)
8975                 sv_setnv(sv, UV_MAX_P1);
8976             else
8977                 (void)SvIOK_only_UV(sv);
8978                 SvUV_set(sv, SvUVX(sv) + 1);
8979         } else {
8980             if (SvIVX(sv) == IV_MAX)
8981                 sv_setuv(sv, (UV)IV_MAX + 1);
8982             else {
8983                 (void)SvIOK_only(sv);
8984                 SvIV_set(sv, SvIVX(sv) + 1);
8985             }   
8986         }
8987         return;
8988     }
8989     if (flags & SVp_NOK) {
8990         const NV was = SvNVX(sv);
8991         if (LIKELY(!Perl_isinfnan(was)) &&
8992             NV_OVERFLOWS_INTEGERS_AT != 0.0 &&
8993             was >= NV_OVERFLOWS_INTEGERS_AT) {
8994             /* diag_listed_as: Lost precision when %s %f by 1 */
8995             Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8996                            "Lost precision when incrementing %" NVff " by 1",
8997                            was);
8998         }
8999         (void)SvNOK_only(sv);
9000         SvNV_set(sv, was + 1.0);
9001         return;
9002     }
9003
9004     /* treat AV/HV/CV/FM/IO and non-fake GVs as immutable */
9005     if (SvTYPE(sv) >= SVt_PVAV || (isGV_with_GP(sv) && !SvFAKE(sv)))
9006         Perl_croak_no_modify();
9007
9008     if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
9009         if ((flags & SVTYPEMASK) < SVt_PVIV)
9010             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
9011         (void)SvIOK_only(sv);
9012         SvIV_set(sv, 1);
9013         return;
9014     }
9015     d = SvPVX(sv);
9016     while (isALPHA(*d)) d++;
9017     while (isDIGIT(*d)) d++;
9018     if (d < SvEND(sv)) {
9019         const int numtype = grok_number_flags(SvPVX_const(sv), SvCUR(sv), NULL, PERL_SCAN_TRAILING);
9020 #ifdef PERL_PRESERVE_IVUV
9021         /* Got to punt this as an integer if needs be, but we don't issue
9022            warnings. Probably ought to make the sv_iv_please() that does
9023            the conversion if possible, and silently.  */
9024         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
9025             /* Need to try really hard to see if it's an integer.
9026                9.22337203685478e+18 is an integer.
9027                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
9028                so $a="9.22337203685478e+18"; $a+0; $a++
9029                needs to be the same as $a="9.22337203685478e+18"; $a++
9030                or we go insane. */
9031         
9032             (void) sv_2iv(sv);
9033             if (SvIOK(sv))
9034                 goto oops_its_int;
9035
9036             /* sv_2iv *should* have made this an NV */
9037             if (flags & SVp_NOK) {
9038                 (void)SvNOK_only(sv);
9039                 SvNV_set(sv, SvNVX(sv) + 1.0);
9040                 return;
9041             }
9042             /* I don't think we can get here. Maybe I should assert this
9043                And if we do get here I suspect that sv_setnv will croak. NWC
9044                Fall through. */
9045             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%" UVxf " NV=%" NVgf "\n",
9046                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
9047         }
9048 #endif /* PERL_PRESERVE_IVUV */
9049         if (!numtype && ckWARN(WARN_NUMERIC))
9050             not_incrementable(sv);
9051         sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
9052         return;
9053     }
9054     d--;
9055     while (d >= SvPVX_const(sv)) {
9056         if (isDIGIT(*d)) {
9057             if (++*d <= '9')
9058                 return;
9059             *(d--) = '0';
9060         }
9061         else {
9062 #ifdef EBCDIC
9063             /* MKS: The original code here died if letters weren't consecutive.
9064              * at least it didn't have to worry about non-C locales.  The
9065              * new code assumes that ('z'-'a')==('Z'-'A'), letters are
9066              * arranged in order (although not consecutively) and that only
9067              * [A-Za-z] are accepted by isALPHA in the C locale.
9068              */
9069             if (isALPHA_FOLD_NE(*d, 'z')) {
9070                 do { ++*d; } while (!isALPHA(*d));
9071                 return;
9072             }
9073             *(d--) -= 'z' - 'a';
9074 #else
9075             ++*d;
9076             if (isALPHA(*d))
9077                 return;
9078             *(d--) -= 'z' - 'a' + 1;
9079 #endif
9080         }
9081     }
9082     /* oh,oh, the number grew */
9083     SvGROW(sv, SvCUR(sv) + 2);
9084     SvCUR_set(sv, SvCUR(sv) + 1);
9085     for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
9086         *d = d[-1];
9087     if (isDIGIT(d[1]))
9088         *d = '1';
9089     else
9090         *d = d[1];
9091 }
9092
9093 /*
9094 =for apidoc sv_dec
9095
9096 Auto-decrement of the value in the SV, doing string to numeric conversion
9097 if necessary.  Handles 'get' magic and operator overloading.
9098
9099 =cut
9100 */
9101
9102 void
9103 Perl_sv_dec(pTHX_ SV *const sv)
9104 {
9105     if (!sv)
9106         return;
9107     SvGETMAGIC(sv);
9108     sv_dec_nomg(sv);
9109 }
9110
9111 /*
9112 =for apidoc sv_dec_nomg
9113
9114 Auto-decrement of the value in the SV, doing string to numeric conversion
9115 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
9116
9117 =cut
9118 */
9119
9120 void
9121 Perl_sv_dec_nomg(pTHX_ SV *const sv)
9122 {
9123     int flags;
9124
9125     if (!sv)
9126         return;
9127     if (SvTHINKFIRST(sv)) {
9128         if (SvREADONLY(sv)) {
9129                 Perl_croak_no_modify();
9130         }
9131         if (SvROK(sv)) {
9132             IV i;
9133             if (SvAMAGIC(sv) && AMG_CALLunary(sv, dec_amg))
9134                 return;
9135             i = PTR2IV(SvRV(sv));
9136             sv_unref(sv);
9137             sv_setiv(sv, i);
9138         }
9139         else sv_force_normal_flags(sv, 0);
9140     }
9141     /* Unlike sv_inc we don't have to worry about string-never-numbers
9142        and keeping them magic. But we mustn't warn on punting */
9143     flags = SvFLAGS(sv);
9144     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
9145         /* It's publicly an integer, or privately an integer-not-float */
9146 #ifdef PERL_PRESERVE_IVUV
9147       oops_its_int:
9148 #endif
9149         if (SvIsUV(sv)) {
9150             if (SvUVX(sv) == 0) {
9151                 (void)SvIOK_only(sv);
9152                 SvIV_set(sv, -1);
9153             }
9154             else {
9155                 (void)SvIOK_only_UV(sv);
9156                 SvUV_set(sv, SvUVX(sv) - 1);
9157             }   
9158         } else {
9159             if (SvIVX(sv) == IV_MIN) {
9160                 sv_setnv(sv, (NV)IV_MIN);
9161                 goto oops_its_num;
9162             }
9163             else {
9164                 (void)SvIOK_only(sv);
9165                 SvIV_set(sv, SvIVX(sv) - 1);
9166             }   
9167         }
9168         return;
9169     }
9170     if (flags & SVp_NOK) {
9171     oops_its_num:
9172         {
9173             const NV was = SvNVX(sv);
9174             if (LIKELY(!Perl_isinfnan(was)) &&
9175                 NV_OVERFLOWS_INTEGERS_AT != 0.0 &&
9176                 was <= -NV_OVERFLOWS_INTEGERS_AT) {
9177                 /* diag_listed_as: Lost precision when %s %f by 1 */
9178                 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
9179                                "Lost precision when decrementing %" NVff " by 1",
9180                                was);
9181             }
9182             (void)SvNOK_only(sv);
9183             SvNV_set(sv, was - 1.0);
9184             return;
9185         }
9186     }
9187
9188     /* treat AV/HV/CV/FM/IO and non-fake GVs as immutable */
9189     if (SvTYPE(sv) >= SVt_PVAV || (isGV_with_GP(sv) && !SvFAKE(sv)))
9190         Perl_croak_no_modify();
9191
9192     if (!(flags & SVp_POK)) {
9193         if ((flags & SVTYPEMASK) < SVt_PVIV)
9194             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
9195         SvIV_set(sv, -1);
9196         (void)SvIOK_only(sv);
9197         return;
9198     }
9199 #ifdef PERL_PRESERVE_IVUV
9200     {
9201         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
9202         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
9203             /* Need to try really hard to see if it's an integer.
9204                9.22337203685478e+18 is an integer.
9205                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
9206                so $a="9.22337203685478e+18"; $a+0; $a--
9207                needs to be the same as $a="9.22337203685478e+18"; $a--
9208                or we go insane. */
9209         
9210             (void) sv_2iv(sv);
9211             if (SvIOK(sv))
9212                 goto oops_its_int;
9213
9214             /* sv_2iv *should* have made this an NV */
9215             if (flags & SVp_NOK) {
9216                 (void)SvNOK_only(sv);
9217                 SvNV_set(sv, SvNVX(sv) - 1.0);
9218                 return;
9219             }
9220             /* I don't think we can get here. Maybe I should assert this
9221                And if we do get here I suspect that sv_setnv will croak. NWC
9222                Fall through. */
9223             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%" UVxf " NV=%" NVgf "\n",
9224                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
9225         }
9226     }
9227 #endif /* PERL_PRESERVE_IVUV */
9228     sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0);   /* punt */
9229 }
9230
9231 /* this define is used to eliminate a chunk of duplicated but shared logic
9232  * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
9233  * used anywhere but here - yves
9234  */
9235 #define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
9236     STMT_START {      \
9237         SSize_t ix = ++PL_tmps_ix;              \
9238         if (UNLIKELY(ix >= PL_tmps_max))        \
9239             ix = tmps_grow_p(ix);                       \
9240         PL_tmps_stack[ix] = (AnSv); \
9241     } STMT_END
9242
9243 /*
9244 =for apidoc sv_mortalcopy
9245
9246 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
9247 The new SV is marked as mortal.  It will be destroyed "soon", either by an
9248 explicit call to C<FREETMPS>, or by an implicit call at places such as
9249 statement boundaries.  See also C<L</sv_newmortal>> and C<L</sv_2mortal>>.
9250
9251 =for apidoc sv_mortalcopy_flags
9252
9253 Like C<sv_mortalcopy>, but the extra C<flags> are passed to the
9254 C<sv_setsv_flags>.
9255
9256 =cut
9257 */
9258
9259 /* Make a string that will exist for the duration of the expression
9260  * evaluation.  Actually, it may have to last longer than that, but
9261  * hopefully we won't free it until it has been assigned to a
9262  * permanent location. */
9263
9264 SV *
9265 Perl_sv_mortalcopy_flags(pTHX_ SV *const oldstr, U32 flags)
9266 {
9267     SV *sv;
9268
9269     if (flags & SV_GMAGIC)
9270         SvGETMAGIC(oldstr); /* before new_SV, in case it dies */
9271     new_SV(sv);
9272     sv_setsv_flags(sv,oldstr,flags & ~SV_GMAGIC);
9273     PUSH_EXTEND_MORTAL__SV_C(sv);
9274     SvTEMP_on(sv);
9275     return sv;
9276 }
9277
9278 /*
9279 =for apidoc sv_newmortal
9280
9281 Creates a new null SV which is mortal.  The reference count of the SV is
9282 set to 1.  It will be destroyed "soon", either by an explicit call to
9283 C<FREETMPS>, or by an implicit call at places such as statement boundaries.
9284 See also C<L</sv_mortalcopy>> and C<L</sv_2mortal>>.
9285
9286 =cut
9287 */
9288
9289 SV *
9290 Perl_sv_newmortal(pTHX)
9291 {
9292     SV *sv;
9293
9294     new_SV(sv);
9295     SvFLAGS(sv) = SVs_TEMP;
9296     PUSH_EXTEND_MORTAL__SV_C(sv);
9297     return sv;
9298 }
9299
9300
9301 /*
9302 =for apidoc newSVpvn_flags
9303
9304 Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
9305 characters) into it.  The reference count for the
9306 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
9307 string.  You are responsible for ensuring that the source string is at least
9308 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
9309 Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
9310 If C<SVs_TEMP> is set, then C<sv_2mortal()> is called on the result before
9311 returning.  If C<SVf_UTF8> is set, C<s>
9312 is considered to be in UTF-8 and the
9313 C<SVf_UTF8> flag will be set on the new SV.
9314 C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
9315
9316     #define newSVpvn_utf8(s, len, u)                    \
9317         newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
9318
9319 =for apidoc Amnh||SVs_TEMP
9320
9321 =cut
9322 */
9323
9324 SV *
9325 Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
9326 {
9327     SV *sv;
9328
9329     /* All the flags we don't support must be zero.
9330        And we're new code so I'm going to assert this from the start.  */
9331     assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
9332     new_SV(sv);
9333     sv_setpvn(sv,s,len);
9334
9335     /* This code used to do a sv_2mortal(), however we now unroll the call to
9336      * sv_2mortal() and do what it does ourselves here.  Since we have asserted
9337      * that flags can only have the SVf_UTF8 and/or SVs_TEMP flags set above we
9338      * can use it to enable the sv flags directly (bypassing SvTEMP_on), which
9339      * in turn means we dont need to mask out the SVf_UTF8 flag below, which
9340      * means that we eliminate quite a few steps than it looks - Yves
9341      * (explaining patch by gfx) */
9342
9343     SvFLAGS(sv) |= flags;
9344
9345     if(flags & SVs_TEMP){
9346         PUSH_EXTEND_MORTAL__SV_C(sv);
9347     }
9348
9349     return sv;
9350 }
9351
9352 /*
9353 =for apidoc sv_2mortal
9354
9355 Marks an existing SV as mortal.  The SV will be destroyed "soon", either
9356 by an explicit call to C<FREETMPS>, or by an implicit call at places such as
9357 statement boundaries.  C<SvTEMP()> is turned on which means that the SV's
9358 string buffer can be "stolen" if this SV is copied.  See also
9359 C<L</sv_newmortal>> and C<L</sv_mortalcopy>>.
9360
9361 =cut
9362 */
9363
9364 SV *
9365 Perl_sv_2mortal(pTHX_ SV *const sv)
9366 {
9367     if (!sv)
9368         return sv;
9369     if (SvIMMORTAL(sv))
9370         return sv;
9371     PUSH_EXTEND_MORTAL__SV_C(sv);
9372     SvTEMP_on(sv);
9373     return sv;
9374 }
9375
9376 /*
9377 =for apidoc newSVpv
9378
9379 Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
9380 characters) into it.  The reference count for the
9381 SV is set to 1.  If C<len> is zero, Perl will compute the length using
9382 C<strlen()>, (which means if you use this option, that C<s> can't have embedded
9383 C<NUL> characters and has to have a terminating C<NUL> byte).
9384
9385 This function can cause reliability issues if you are likely to pass in
9386 empty strings that are not null terminated, because it will run
9387 strlen on the string and potentially run past valid memory.
9388
9389 Using L</newSVpvn> is a safer alternative for non C<NUL> terminated strings.
9390 For string literals use L</newSVpvs> instead.  This function will work fine for
9391 C<NUL> terminated strings, but if you want to avoid the if statement on whether
9392 to call C<strlen> use C<newSVpvn> instead (calling C<strlen> yourself).
9393
9394 =cut
9395 */
9396
9397 SV *
9398 Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
9399 {
9400     SV *sv;
9401
9402     new_SV(sv);
9403     sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
9404     return sv;
9405 }
9406
9407 /*
9408 =for apidoc newSVpvn
9409
9410 Creates a new SV and copies a string into it, which may contain C<NUL> characters
9411 (C<\0>) and other binary data.  The reference count for the SV is set to 1.
9412 Note that if C<len> is zero, Perl will create a zero length (Perl) string.  You
9413 are responsible for ensuring that the source buffer is at least
9414 C<len> bytes long.  If the C<buffer> argument is NULL the new SV will be
9415 undefined.
9416
9417 =cut
9418 */
9419
9420 SV *
9421 Perl_newSVpvn(pTHX_ const char *const buffer, const STRLEN len)
9422 {
9423     SV *sv;
9424     new_SV(sv);
9425     sv_setpvn(sv,buffer,len);
9426     return sv;
9427 }
9428
9429 /*
9430 =for apidoc newSVhek
9431
9432 Creates a new SV from the hash key structure.  It will generate scalars that
9433 point to the shared string table where possible.  Returns a new (undefined)
9434 SV if C<hek> is NULL.
9435
9436 =cut
9437 */
9438
9439 SV *
9440 Perl_newSVhek(pTHX_ const HEK *const hek)
9441 {
9442     if (!hek) {
9443         SV *sv;
9444
9445         new_SV(sv);
9446         return sv;
9447     }
9448
9449     if (HEK_LEN(hek) == HEf_SVKEY) {
9450         return newSVsv(*(SV**)HEK_KEY(hek));
9451     } else {
9452         const int flags = HEK_FLAGS(hek);
9453         if (flags & HVhek_WASUTF8) {
9454             /* Trouble :-)
9455                Andreas would like keys he put in as utf8 to come back as utf8
9456             */
9457             STRLEN utf8_len = HEK_LEN(hek);
9458             SV * const sv = newSV_type(SVt_PV);
9459             char *as_utf8 = (char *)bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
9460             /* bytes_to_utf8() allocates a new string, which we can repurpose: */
9461             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
9462             SvUTF8_on (sv);
9463             return sv;
9464         } else if (flags & HVhek_UNSHARED) {
9465             /* A hash that isn't using shared hash keys has to have
9466                the flag in every key so that we know not to try to call
9467                share_hek_hek on it.  */
9468
9469             SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
9470             if (HEK_UTF8(hek))
9471                 SvUTF8_on (sv);
9472             return sv;
9473         }
9474         /* This will be overwhelminly the most common case.  */
9475         {
9476             /* Inline most of newSVpvn_share(), because share_hek_hek() is far
9477                more efficient than sharepvn().  */
9478             SV *sv;
9479
9480             new_SV(sv);
9481             sv_upgrade(sv, SVt_PV);
9482             SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
9483             SvCUR_set(sv, HEK_LEN(hek));
9484             SvLEN_set(sv, 0);
9485             SvIsCOW_on(sv);
9486             SvPOK_on(sv);
9487             if (HEK_UTF8(hek))
9488                 SvUTF8_on(sv);
9489             return sv;
9490         }
9491     }
9492 }
9493
9494 /*
9495 =for apidoc newSVpvn_share
9496
9497 Creates a new SV with its C<SvPVX_const> pointing to a shared string in the string
9498 table.  If the string does not already exist in the table, it is
9499 created first.  Turns on the C<SvIsCOW> flag (or C<READONLY>
9500 and C<FAKE> in 5.16 and earlier).  If the C<hash> parameter
9501 is non-zero, that value is used; otherwise the hash is computed.
9502 The string's hash can later be retrieved from the SV
9503 with the C<SvSHARED_HASH()> macro.  The idea here is
9504 that as the string table is used for shared hash keys these strings will have
9505 C<SvPVX_const == HeKEY> and hash lookup will avoid string compare.
9506
9507 =cut
9508 */
9509
9510 SV *
9511 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
9512 {
9513     SV *sv;
9514     bool is_utf8 = FALSE;
9515     const char *const orig_src = src;
9516
9517     if (len < 0) {
9518         STRLEN tmplen = -len;
9519         is_utf8 = TRUE;
9520         /* See the note in hv.c:hv_fetch() --jhi */
9521         src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
9522         len = tmplen;
9523     }
9524     if (!hash)
9525         PERL_HASH(hash, src, len);
9526     new_SV(sv);
9527     /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
9528        changes here, update it there too.  */
9529     sv_upgrade(sv, SVt_PV);
9530     SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
9531     SvCUR_set(sv, len);
9532     SvLEN_set(sv, 0);
9533     SvIsCOW_on(sv);
9534     SvPOK_on(sv);
9535     if (is_utf8)
9536         SvUTF8_on(sv);
9537     if (src != orig_src)
9538         Safefree(src);
9539     return sv;
9540 }
9541
9542 /*
9543 =for apidoc newSVpv_share
9544
9545 Like C<newSVpvn_share>, but takes a C<NUL>-terminated string instead of a
9546 string/length pair.
9547
9548 =cut
9549 */
9550
9551 SV *
9552 Perl_newSVpv_share(pTHX_ const char *src, U32 hash)
9553 {
9554     return newSVpvn_share(src, strlen(src), hash);
9555 }
9556
9557 #if defined(PERL_IMPLICIT_CONTEXT)
9558
9559 /* pTHX_ magic can't cope with varargs, so this is a no-context
9560  * version of the main function, (which may itself be aliased to us).
9561  * Don't access this version directly.
9562  */
9563
9564 SV *
9565 Perl_newSVpvf_nocontext(const char *const pat, ...)
9566 {
9567     dTHX;
9568     SV *sv;
9569     va_list args;
9570
9571     PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
9572
9573     va_start(args, pat);
9574     sv = vnewSVpvf(pat, &args);
9575     va_end(args);
9576     return sv;
9577 }
9578 #endif
9579
9580 /*
9581 =for apidoc newSVpvf
9582
9583 Creates a new SV and initializes it with the string formatted like
9584 C<sv_catpvf>.
9585
9586 =for apidoc newSVpvf_nocontext
9587 Like C<L</newSVpvf>> but does not take a thread context (C<aTHX>) parameter,
9588 so is used in situations where the caller doesn't already have the thread
9589 context.
9590
9591 =for apidoc vnewSVpvf
9592 Like C<L</newSVpvf>> but but the arguments are an encapsulated argument list.
9593
9594 =cut
9595 */
9596
9597 SV *
9598 Perl_newSVpvf(pTHX_ const char *const pat, ...)
9599 {
9600     SV *sv;
9601     va_list args;
9602
9603     PERL_ARGS_ASSERT_NEWSVPVF;
9604
9605     va_start(args, pat);
9606     sv = vnewSVpvf(pat, &args);
9607     va_end(args);
9608     return sv;
9609 }
9610
9611 /* backend for newSVpvf() and newSVpvf_nocontext() */
9612
9613 SV *
9614 Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
9615 {
9616     SV *sv;
9617
9618     PERL_ARGS_ASSERT_VNEWSVPVF;
9619
9620     new_SV(sv);
9621     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9622     return sv;
9623 }
9624
9625 /*
9626 =for apidoc newSVnv
9627
9628 Creates a new SV and copies a floating point value into it.
9629 The reference count for the SV is set to 1.
9630
9631 =cut
9632 */
9633
9634 SV *
9635 Perl_newSVnv(pTHX_ const NV n)
9636 {
9637     SV *sv;
9638
9639     new_SV(sv);
9640     sv_setnv(sv,n);
9641     return sv;
9642 }
9643
9644 /*
9645 =for apidoc newSViv
9646
9647 Creates a new SV and copies an integer into it.  The reference count for the
9648 SV is set to 1.
9649
9650 =cut
9651 */
9652
9653 SV *
9654 Perl_newSViv(pTHX_ const IV i)
9655 {
9656     SV *sv;
9657
9658     new_SV(sv);
9659
9660     /* Inlining ONLY the small relevant subset of sv_setiv here
9661      * for performance. Makes a significant difference. */
9662
9663     /* We're starting from SVt_FIRST, so provided that's
9664      * actual 0, we don't have to unset any SV type flags
9665      * to promote to SVt_IV. */
9666     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9667
9668     SET_SVANY_FOR_BODYLESS_IV(sv);
9669     SvFLAGS(sv) |= SVt_IV;
9670     (void)SvIOK_on(sv);
9671
9672     SvIV_set(sv, i);
9673     SvTAINT(sv);
9674
9675     return sv;
9676 }
9677
9678 /*
9679 =for apidoc newSVuv
9680
9681 Creates a new SV and copies an unsigned integer into it.
9682 The reference count for the SV is set to 1.
9683
9684 =cut
9685 */
9686
9687 SV *
9688 Perl_newSVuv(pTHX_ const UV u)
9689 {
9690     SV *sv;
9691
9692     /* Inlining ONLY the small relevant subset of sv_setuv here
9693      * for performance. Makes a significant difference. */
9694
9695     /* Using ivs is more efficient than using uvs - see sv_setuv */
9696     if (u <= (UV)IV_MAX) {
9697         return newSViv((IV)u);
9698     }
9699
9700     new_SV(sv);
9701
9702     /* We're starting from SVt_FIRST, so provided that's
9703      * actual 0, we don't have to unset any SV type flags
9704      * to promote to SVt_IV. */
9705     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9706
9707     SET_SVANY_FOR_BODYLESS_IV(sv);
9708     SvFLAGS(sv) |= SVt_IV;
9709     (void)SvIOK_on(sv);
9710     (void)SvIsUV_on(sv);
9711
9712     SvUV_set(sv, u);
9713     SvTAINT(sv);
9714
9715     return sv;
9716 }
9717
9718 /*
9719 =for apidoc newSV_type
9720
9721 Creates a new SV, of the type specified.  The reference count for the new SV
9722 is set to 1.
9723
9724 =cut
9725 */
9726
9727 SV *
9728 Perl_newSV_type(pTHX_ const svtype type)
9729 {
9730     SV *sv;
9731
9732     new_SV(sv);
9733     ASSUME(SvTYPE(sv) == SVt_FIRST);
9734     if(type != SVt_FIRST)
9735         sv_upgrade(sv, type);
9736     return sv;
9737 }
9738
9739 /*
9740 =for apidoc newRV_noinc
9741
9742 Creates an RV wrapper for an SV.  The reference count for the original
9743 SV is B<not> incremented.
9744
9745 =cut
9746 */
9747
9748 SV *
9749 Perl_newRV_noinc(pTHX_ SV *const tmpRef)
9750 {
9751     SV *sv;
9752
9753     PERL_ARGS_ASSERT_NEWRV_NOINC;
9754
9755     new_SV(sv);
9756
9757     /* We're starting from SVt_FIRST, so provided that's
9758      * actual 0, we don't have to unset any SV type flags
9759      * to promote to SVt_IV. */
9760     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9761
9762     SET_SVANY_FOR_BODYLESS_IV(sv);
9763     SvFLAGS(sv) |= SVt_IV;
9764     SvROK_on(sv);
9765     SvIV_set(sv, 0);
9766
9767     SvTEMP_off(tmpRef);
9768     SvRV_set(sv, tmpRef);
9769
9770     return sv;
9771 }
9772
9773 /* newRV_inc is the official function name to use now.
9774  * newRV_inc is in fact #defined to newRV in sv.h
9775  */
9776
9777 SV *
9778 Perl_newRV(pTHX_ SV *const sv)
9779 {
9780     PERL_ARGS_ASSERT_NEWRV;
9781
9782     return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
9783 }
9784
9785 /*
9786 =for apidoc newSVsv
9787
9788 Creates a new SV which is an exact duplicate of the original SV.
9789 (Uses C<sv_setsv>.)
9790
9791 =for apidoc newSVsv_nomg
9792
9793 Like C<newSVsv> but does not process get magic.
9794
9795 =cut
9796 */
9797
9798 SV *
9799 Perl_newSVsv_flags(pTHX_ SV *const old, I32 flags)
9800 {
9801     SV *sv;
9802
9803     if (!old)
9804         return NULL;
9805     if (SvTYPE(old) == (svtype)SVTYPEMASK) {
9806         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
9807         return NULL;
9808     }
9809     /* Do this here, otherwise we leak the new SV if this croaks. */
9810     if (flags & SV_GMAGIC)
9811         SvGETMAGIC(old);
9812     new_SV(sv);
9813     sv_setsv_flags(sv, old, flags & ~SV_GMAGIC);
9814     return sv;
9815 }
9816
9817 /*
9818 =for apidoc sv_reset
9819
9820 Underlying implementation for the C<reset> Perl function.
9821 Note that the perl-level function is vaguely deprecated.
9822
9823 =cut
9824 */
9825
9826 void
9827 Perl_sv_reset(pTHX_ const char *s, HV *const stash)
9828 {
9829     PERL_ARGS_ASSERT_SV_RESET;
9830
9831     sv_resetpvn(*s ? s : NULL, strlen(s), stash);
9832 }
9833
9834 void
9835 Perl_sv_resetpvn(pTHX_ const char *s, STRLEN len, HV * const stash)
9836 {
9837     char todo[PERL_UCHAR_MAX+1];
9838     const char *send;
9839
9840     if (!stash || SvTYPE(stash) != SVt_PVHV)
9841         return;
9842
9843     if (!s) {           /* reset ?? searches */
9844         MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
9845         if (mg) {
9846             const U32 count = mg->mg_len / sizeof(PMOP**);
9847             PMOP **pmp = (PMOP**) mg->mg_ptr;
9848             PMOP *const *const end = pmp + count;
9849
9850             while (pmp < end) {
9851 #ifdef USE_ITHREADS
9852                 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
9853 #else
9854                 (*pmp)->op_pmflags &= ~PMf_USED;
9855 #endif
9856                 ++pmp;
9857             }
9858         }
9859         return;
9860     }
9861
9862     /* reset variables */
9863
9864     if (!HvARRAY(stash))
9865         return;
9866
9867     Zero(todo, 256, char);
9868     send = s + len;
9869     while (s < send) {
9870         I32 max;
9871         I32 i = (unsigned char)*s;
9872         if (s[1] == '-') {
9873             s += 2;
9874         }
9875         max = (unsigned char)*s++;
9876         for ( ; i <= max; i++) {
9877             todo[i] = 1;
9878         }
9879         for (i = 0; i <= (I32) HvMAX(stash); i++) {
9880             HE *entry;
9881             for (entry = HvARRAY(stash)[i];
9882                  entry;
9883                  entry = HeNEXT(entry))
9884             {
9885                 GV *gv;
9886                 SV *sv;
9887
9888                 if (!todo[(U8)*HeKEY(entry)])
9889                     continue;
9890                 gv = MUTABLE_GV(HeVAL(entry));
9891                 if (!isGV(gv))
9892                     continue;
9893                 sv = GvSV(gv);
9894                 if (sv && !SvREADONLY(sv)) {
9895                     SV_CHECK_THINKFIRST_COW_DROP(sv);
9896                     if (!isGV(sv)) SvOK_off(sv);
9897                 }
9898                 if (GvAV(gv)) {
9899                     av_clear(GvAV(gv));
9900                 }
9901                 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
9902                     hv_clear(GvHV(gv));
9903                 }
9904             }
9905         }
9906     }
9907 }
9908
9909 /*
9910 =for apidoc sv_2io
9911
9912 Using various gambits, try to get an IO from an SV: the IO slot if its a
9913 GV; or the recursive result if we're an RV; or the IO slot of the symbol
9914 named after the PV if we're a string.
9915
9916 'Get' magic is ignored on the C<sv> passed in, but will be called on
9917 C<SvRV(sv)> if C<sv> is an RV.
9918
9919 =cut
9920 */
9921
9922 IO*
9923 Perl_sv_2io(pTHX_ SV *const sv)
9924 {
9925     IO* io;
9926     GV* gv;
9927
9928     PERL_ARGS_ASSERT_SV_2IO;
9929
9930     switch (SvTYPE(sv)) {
9931     case SVt_PVIO:
9932         io = MUTABLE_IO(sv);
9933         break;
9934     case SVt_PVGV:
9935     case SVt_PVLV:
9936         if (isGV_with_GP(sv)) {
9937             gv = MUTABLE_GV(sv);
9938             io = GvIO(gv);
9939             if (!io)
9940                 Perl_croak(aTHX_ "Bad filehandle: %" HEKf,
9941                                     HEKfARG(GvNAME_HEK(gv)));
9942             break;
9943         }
9944         /* FALLTHROUGH */
9945     default:
9946         if (!SvOK(sv))
9947             Perl_croak(aTHX_ PL_no_usym, "filehandle");
9948         if (SvROK(sv)) {
9949             SvGETMAGIC(SvRV(sv));
9950             return sv_2io(SvRV(sv));
9951         }
9952         gv = gv_fetchsv_nomg(sv, 0, SVt_PVIO);
9953         if (gv)
9954             io = GvIO(gv);
9955         else
9956             io = 0;
9957         if (!io) {
9958             SV *newsv = sv;
9959             if (SvGMAGICAL(sv)) {
9960                 newsv = sv_newmortal();
9961                 sv_setsv_nomg(newsv, sv);
9962             }
9963             Perl_croak(aTHX_ "Bad filehandle: %" SVf, SVfARG(newsv));
9964         }
9965         break;
9966     }
9967     return io;
9968 }
9969
9970 /*
9971 =for apidoc sv_2cv
9972
9973 Using various gambits, try to get a CV from an SV; in addition, try if
9974 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
9975 The flags in C<lref> are passed to C<gv_fetchsv>.
9976
9977 =cut
9978 */
9979
9980 CV *
9981 Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
9982 {
9983     GV *gv = NULL;
9984     CV *cv = NULL;
9985
9986     PERL_ARGS_ASSERT_SV_2CV;
9987
9988     if (!sv) {
9989         *st = NULL;
9990         *gvp = NULL;
9991         return NULL;
9992     }
9993     switch (SvTYPE(sv)) {
9994     case SVt_PVCV:
9995         *st = CvSTASH(sv);
9996         *gvp = NULL;
9997         return MUTABLE_CV(sv);
9998     case SVt_PVHV:
9999     case SVt_PVAV:
10000         *st = NULL;
10001         *gvp = NULL;
10002         return NULL;
10003     default:
10004         SvGETMAGIC(sv);
10005         if (SvROK(sv)) {
10006             if (SvAMAGIC(sv))
10007                 sv = amagic_deref_call(sv, to_cv_amg);
10008
10009             sv = SvRV(sv);
10010             if (SvTYPE(sv) == SVt_PVCV) {
10011                 cv = MUTABLE_CV(sv);
10012                 *gvp = NULL;
10013                 *st = CvSTASH(cv);
10014                 return cv;
10015             }
10016             else if(SvGETMAGIC(sv), isGV_with_GP(sv))
10017                 gv = MUTABLE_GV(sv);
10018             else
10019                 Perl_croak(aTHX_ "Not a subroutine reference");
10020         }
10021         else if (isGV_with_GP(sv)) {
10022             gv = MUTABLE_GV(sv);
10023         }
10024         else {
10025             gv = gv_fetchsv_nomg(sv, lref, SVt_PVCV);
10026         }
10027         *gvp = gv;
10028         if (!gv) {
10029             *st = NULL;
10030             return NULL;
10031         }
10032         /* Some flags to gv_fetchsv mean don't really create the GV  */
10033         if (!isGV_with_GP(gv)) {
10034             *st = NULL;
10035             return NULL;
10036         }
10037         *st = GvESTASH(gv);
10038         if (lref & ~GV_ADDMG && !GvCVu(gv)) {
10039             /* XXX this is probably not what they think they're getting.
10040              * It has the same effect as "sub name;", i.e. just a forward
10041              * declaration! */
10042             newSTUB(gv,0);
10043         }
10044         return GvCVu(gv);
10045     }
10046 }
10047
10048 /*
10049 =for apidoc sv_true
10050
10051 Returns true if the SV has a true value by Perl's rules.
10052 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
10053 instead use an in-line version.
10054
10055 =cut
10056 */
10057
10058 I32
10059 Perl_sv_true(pTHX_ SV *const sv)
10060 {
10061     if (!sv)
10062         return 0;
10063     if (SvPOK(sv)) {
10064         const XPV* const tXpv = (XPV*)SvANY(sv);
10065         if (tXpv &&
10066                 (tXpv->xpv_cur > 1 ||
10067                 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
10068             return 1;
10069         else
10070             return 0;
10071     }
10072     else {
10073         if (SvIOK(sv))
10074             return SvIVX(sv) != 0;
10075         else {
10076             if (SvNOK(sv))
10077                 return SvNVX(sv) != 0.0;
10078             else
10079                 return sv_2bool(sv);
10080         }
10081     }
10082 }
10083
10084 /*
10085 =for apidoc sv_pvn_force
10086
10087 Get a sensible string out of the SV somehow.
10088 A private implementation of the C<SvPV_force> macro for compilers which
10089 can't cope with complex macro expressions.  Always use the macro instead.
10090
10091 =for apidoc sv_pvn_force_flags
10092
10093 Get a sensible string out of the SV somehow.
10094 If C<flags> has the C<SV_GMAGIC> bit set, will C<L</mg_get>> on C<sv> if
10095 appropriate, else not.  C<sv_pvn_force> and C<sv_pvn_force_nomg> are
10096 implemented in terms of this function.
10097 You normally want to use the various wrapper macros instead: see
10098 C<L</SvPV_force>> and C<L</SvPV_force_nomg>>.
10099
10100 =cut
10101 */
10102
10103 char *
10104 Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const U32 flags)
10105 {
10106     PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
10107
10108     if (flags & SV_GMAGIC) SvGETMAGIC(sv);
10109     if (SvTHINKFIRST(sv) && (!SvROK(sv) || SvREADONLY(sv)))
10110         sv_force_normal_flags(sv, 0);
10111
10112     if (SvPOK(sv)) {
10113         if (lp)
10114             *lp = SvCUR(sv);
10115     }
10116     else {
10117         char *s;
10118         STRLEN len;
10119  
10120         if (SvTYPE(sv) > SVt_PVLV
10121             || isGV_with_GP(sv))
10122             /* diag_listed_as: Can't coerce %s to %s in %s */
10123             Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
10124                 OP_DESC(PL_op));
10125         s = sv_2pv_flags(sv, &len, flags &~ SV_GMAGIC);
10126         if (!s) {
10127           s = (char *)"";
10128         }
10129         if (lp)
10130             *lp = len;
10131
10132         if (SvTYPE(sv) < SVt_PV ||
10133             s != SvPVX_const(sv)) {     /* Almost, but not quite, sv_setpvn() */
10134             if (SvROK(sv))
10135                 sv_unref(sv);
10136             SvUPGRADE(sv, SVt_PV);              /* Never FALSE */
10137             SvGROW(sv, len + 1);
10138             Move(s,SvPVX(sv),len,char);
10139             SvCUR_set(sv, len);
10140             SvPVX(sv)[len] = '\0';
10141         }
10142         if (!SvPOK(sv)) {
10143             SvPOK_on(sv);               /* validate pointer */
10144             SvTAINT(sv);
10145             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2pv(%s)\n",
10146                                   PTR2UV(sv),SvPVX_const(sv)));
10147         }
10148     }
10149     (void)SvPOK_only_UTF8(sv);
10150     return SvPVX_mutable(sv);
10151 }
10152
10153 /*
10154 =for apidoc sv_pvbyten_force
10155
10156 The backend for the C<SvPVbytex_force> macro.  Always use the macro
10157 instead.  If the SV cannot be downgraded from UTF-8, this croaks.
10158
10159 =cut
10160 */
10161
10162 char *
10163 Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
10164 {
10165     PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
10166
10167     sv_pvn_force(sv,lp);
10168     sv_utf8_downgrade(sv,0);
10169     *lp = SvCUR(sv);
10170     return SvPVX(sv);
10171 }
10172
10173 /*
10174 =for apidoc sv_pvutf8n_force
10175
10176 The backend for the C<SvPVutf8x_force> macro.  Always use the macro
10177 instead.
10178
10179 =cut
10180 */
10181
10182 char *
10183 Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
10184 {
10185     PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
10186
10187     sv_pvn_force(sv,0);
10188     sv_utf8_upgrade_nomg(sv);
10189     *lp = SvCUR(sv);
10190     return SvPVX(sv);
10191 }
10192
10193 /*
10194 =for apidoc sv_reftype
10195
10196 Returns a string describing what the SV is a reference to.
10197
10198 If ob is true and the SV is blessed, the string is the class name,
10199 otherwise it is the type of the SV, "SCALAR", "ARRAY" etc.
10200
10201 =cut
10202 */
10203
10204 const char *
10205 Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
10206 {
10207     PERL_ARGS_ASSERT_SV_REFTYPE;
10208     if (ob && SvOBJECT(sv)) {
10209         return SvPV_nolen_const(sv_ref(NULL, sv, ob));
10210     }
10211     else {
10212         /* WARNING - There is code, for instance in mg.c, that assumes that
10213          * the only reason that sv_reftype(sv,0) would return a string starting
10214          * with 'L' or 'S' is that it is a LVALUE or a SCALAR.
10215          * Yes this a dodgy way to do type checking, but it saves practically reimplementing
10216          * this routine inside other subs, and it saves time.
10217          * Do not change this assumption without searching for "dodgy type check" in
10218          * the code.
10219          * - Yves */
10220         switch (SvTYPE(sv)) {
10221         case SVt_NULL:
10222         case SVt_IV:
10223         case SVt_NV:
10224         case SVt_PV:
10225         case SVt_PVIV:
10226         case SVt_PVNV:
10227         case SVt_PVMG:
10228                                 if (SvVOK(sv))
10229                                     return "VSTRING";
10230                                 if (SvROK(sv))
10231                                     return "REF";
10232                                 else
10233                                     return "SCALAR";
10234
10235         case SVt_PVLV:          return (char *)  (SvROK(sv) ? "REF"
10236                                 /* tied lvalues should appear to be
10237                                  * scalars for backwards compatibility */
10238                                 : (isALPHA_FOLD_EQ(LvTYPE(sv), 't'))
10239                                     ? "SCALAR" : "LVALUE");
10240         case SVt_PVAV:          return "ARRAY";
10241         case SVt_PVHV:          return "HASH";
10242         case SVt_PVCV:          return "CODE";
10243         case SVt_PVGV:          return (char *) (isGV_with_GP(sv)
10244                                     ? "GLOB" : "SCALAR");
10245         case SVt_PVFM:          return "FORMAT";
10246         case SVt_PVIO:          return "IO";
10247         case SVt_INVLIST:       return "INVLIST";
10248         case SVt_REGEXP:        return "REGEXP";
10249         default:                return "UNKNOWN";
10250         }
10251     }
10252 }
10253
10254 /*
10255 =for apidoc sv_ref
10256
10257 Returns a SV describing what the SV passed in is a reference to.
10258
10259 dst can be a SV to be set to the description or NULL, in which case a
10260 mortal SV is returned.
10261
10262 If ob is true and the SV is blessed, the description is the class
10263 name, otherwise it is the type of the SV, "SCALAR", "ARRAY" etc.
10264
10265 =cut
10266 */
10267
10268 SV *
10269 Perl_sv_ref(pTHX_ SV *dst, const SV *const sv, const int ob)
10270 {
10271     PERL_ARGS_ASSERT_SV_REF;
10272
10273     if (!dst)
10274         dst = sv_newmortal();
10275
10276     if (ob && SvOBJECT(sv)) {
10277         HvNAME_get(SvSTASH(sv))
10278                     ? sv_sethek(dst, HvNAME_HEK(SvSTASH(sv)))
10279                     : sv_setpvs(dst, "__ANON__");
10280     }
10281     else {
10282         const char * reftype = sv_reftype(sv, 0);
10283         sv_setpv(dst, reftype);
10284     }
10285     return dst;
10286 }
10287
10288 /*
10289 =for apidoc sv_isobject
10290
10291 Returns a boolean indicating whether the SV is an RV pointing to a blessed
10292 object.  If the SV is not an RV, or if the object is not blessed, then this
10293 will return false.
10294
10295 =cut
10296 */
10297
10298 int
10299 Perl_sv_isobject(pTHX_ SV *sv)
10300 {
10301     if (!sv)
10302         return 0;
10303     SvGETMAGIC(sv);
10304     if (!SvROK(sv))
10305         return 0;
10306     sv = SvRV(sv);
10307     if (!SvOBJECT(sv))
10308         return 0;
10309     return 1;
10310 }
10311
10312 /*
10313 =for apidoc sv_isa
10314
10315 Returns a boolean indicating whether the SV is blessed into the specified
10316 class.
10317
10318 This does not check for subtypes or method overloading. Use C<sv_isa_sv> to
10319 verify an inheritance relationship in the same way as the C<isa> operator by
10320 respecting any C<isa()> method overloading; or C<sv_derived_from_sv> to test
10321 directly on the actual object type.
10322
10323 =cut
10324 */
10325
10326 int
10327 Perl_sv_isa(pTHX_ SV *sv, const char *const name)
10328 {
10329     const char *hvname;
10330
10331     PERL_ARGS_ASSERT_SV_ISA;
10332
10333     if (!sv)
10334         return 0;
10335     SvGETMAGIC(sv);
10336     if (!SvROK(sv))
10337         return 0;
10338     sv = SvRV(sv);
10339     if (!SvOBJECT(sv))
10340         return 0;
10341     hvname = HvNAME_get(SvSTASH(sv));
10342     if (!hvname)
10343         return 0;
10344
10345     return strEQ(hvname, name);
10346 }
10347
10348 /*
10349 =for apidoc newSVrv
10350
10351 Creates a new SV for the existing RV, C<rv>, to point to.  If C<rv> is not an
10352 RV then it will be upgraded to one.  If C<classname> is non-null then the new
10353 SV will be blessed in the specified package.  The new SV is returned and its
10354 reference count is 1.  The reference count 1 is owned by C<rv>. See also
10355 newRV_inc() and newRV_noinc() for creating a new RV properly.
10356
10357 =cut
10358 */
10359
10360 SV*
10361 Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
10362 {
10363     SV *sv;
10364
10365     PERL_ARGS_ASSERT_NEWSVRV;
10366
10367     new_SV(sv);
10368
10369     SV_CHECK_THINKFIRST_COW_DROP(rv);
10370
10371     if (UNLIKELY( SvTYPE(rv) >= SVt_PVMG )) {
10372         const U32 refcnt = SvREFCNT(rv);
10373         SvREFCNT(rv) = 0;
10374         sv_clear(rv);
10375         SvFLAGS(rv) = 0;
10376         SvREFCNT(rv) = refcnt;
10377
10378         sv_upgrade(rv, SVt_IV);
10379     } else if (SvROK(rv)) {
10380         SvREFCNT_dec(SvRV(rv));
10381     } else {
10382         prepare_SV_for_RV(rv);
10383     }
10384
10385     SvOK_off(rv);
10386     SvRV_set(rv, sv);
10387     SvROK_on(rv);
10388
10389     if (classname) {
10390         HV* const stash = gv_stashpv(classname, GV_ADD);
10391         (void)sv_bless(rv, stash);
10392     }
10393     return sv;
10394 }
10395
10396 SV *
10397 Perl_newSVavdefelem(pTHX_ AV *av, SSize_t ix, bool extendible)
10398 {
10399     SV * const lv = newSV_type(SVt_PVLV);
10400     PERL_ARGS_ASSERT_NEWSVAVDEFELEM;
10401     LvTYPE(lv) = 'y';
10402     sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
10403     LvTARG(lv) = SvREFCNT_inc_simple_NN(av);
10404     LvSTARGOFF(lv) = ix;
10405     LvTARGLEN(lv) = extendible ? 1 : (STRLEN)UV_MAX;
10406     return lv;
10407 }
10408
10409 /*
10410 =for apidoc sv_setref_pv
10411
10412 Copies a pointer into a new SV, optionally blessing the SV.  The C<rv>
10413 argument will be upgraded to an RV.  That RV will be modified to point to
10414 the new SV.  If the C<pv> argument is C<NULL>, then C<PL_sv_undef> will be placed
10415 into the SV.  The C<classname> argument indicates the package for the
10416 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10417 will have a reference count of 1, and the RV will be returned.
10418
10419 Do not use with other Perl types such as HV, AV, SV, CV, because those
10420 objects will become corrupted by the pointer copy process.
10421
10422 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
10423
10424 =cut
10425 */
10426
10427 SV*
10428 Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
10429 {
10430     PERL_ARGS_ASSERT_SV_SETREF_PV;
10431
10432     if (!pv) {
10433         sv_set_undef(rv);
10434         SvSETMAGIC(rv);
10435     }
10436     else
10437         sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
10438     return rv;
10439 }
10440
10441 /*
10442 =for apidoc sv_setref_iv
10443
10444 Copies an integer into a new SV, optionally blessing the SV.  The C<rv>
10445 argument will be upgraded to an RV.  That RV will be modified to point to
10446 the new SV.  The C<classname> argument indicates the package for the
10447 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10448 will have a reference count of 1, and the RV will be returned.
10449
10450 =cut
10451 */
10452
10453 SV*
10454 Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
10455 {
10456     PERL_ARGS_ASSERT_SV_SETREF_IV;
10457
10458     sv_setiv(newSVrv(rv,classname), iv);
10459     return rv;
10460 }
10461
10462 /*
10463 =for apidoc sv_setref_uv
10464
10465 Copies an unsigned integer into a new SV, optionally blessing the SV.  The C<rv>
10466 argument will be upgraded to an RV.  That RV will be modified to point to
10467 the new SV.  The C<classname> argument indicates the package for the
10468 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10469 will have a reference count of 1, and the RV will be returned.
10470
10471 =cut
10472 */
10473
10474 SV*
10475 Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
10476 {
10477     PERL_ARGS_ASSERT_SV_SETREF_UV;
10478
10479     sv_setuv(newSVrv(rv,classname), uv);
10480     return rv;
10481 }
10482
10483 /*
10484 =for apidoc sv_setref_nv
10485
10486 Copies a double into a new SV, optionally blessing the SV.  The C<rv>
10487 argument will be upgraded to an RV.  That RV will be modified to point to
10488 the new SV.  The C<classname> argument indicates the package for the
10489 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10490 will have a reference count of 1, and the RV will be returned.
10491
10492 =cut
10493 */
10494
10495 SV*
10496 Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
10497 {
10498     PERL_ARGS_ASSERT_SV_SETREF_NV;
10499
10500     sv_setnv(newSVrv(rv,classname), nv);
10501     return rv;
10502 }
10503
10504 /*
10505 =for apidoc sv_setref_pvn
10506
10507 Copies a string into a new SV, optionally blessing the SV.  The length of the
10508 string must be specified with C<n>.  The C<rv> argument will be upgraded to
10509 an RV.  That RV will be modified to point to the new SV.  The C<classname>
10510 argument indicates the package for the blessing.  Set C<classname> to
10511 C<NULL> to avoid the blessing.  The new SV will have a reference count
10512 of 1, and the RV will be returned.
10513
10514 Note that C<sv_setref_pv> copies the pointer while this copies the string.
10515
10516 =cut
10517 */
10518
10519 SV*
10520 Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
10521                    const char *const pv, const STRLEN n)
10522 {
10523     PERL_ARGS_ASSERT_SV_SETREF_PVN;
10524
10525     sv_setpvn(newSVrv(rv,classname), pv, n);
10526     return rv;
10527 }
10528
10529 /*
10530 =for apidoc sv_bless
10531
10532 Blesses an SV into a specified package.  The SV must be an RV.  The package
10533 must be designated by its stash (see C<L</gv_stashpv>>).  The reference count
10534 of the SV is unaffected.
10535
10536 =cut
10537 */
10538
10539 SV*
10540 Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
10541 {
10542     SV *tmpRef;
10543     HV *oldstash = NULL;
10544
10545     PERL_ARGS_ASSERT_SV_BLESS;
10546
10547     SvGETMAGIC(sv);
10548     if (!SvROK(sv))
10549         Perl_croak(aTHX_ "Can't bless non-reference value");
10550     tmpRef = SvRV(sv);
10551     if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY|SVf_PROTECT)) {
10552         if (SvREADONLY(tmpRef))
10553             Perl_croak_no_modify();
10554         if (SvOBJECT(tmpRef)) {
10555             oldstash = SvSTASH(tmpRef);
10556         }
10557     }
10558     SvOBJECT_on(tmpRef);
10559     SvUPGRADE(tmpRef, SVt_PVMG);
10560     SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
10561     SvREFCNT_dec(oldstash);
10562
10563     if(SvSMAGICAL(tmpRef))
10564         if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
10565             mg_set(tmpRef);
10566
10567
10568
10569     return sv;
10570 }
10571
10572 /* Downgrades a PVGV to a PVMG. If it's actually a PVLV, we leave the type
10573  * as it is after unglobbing it.
10574  */
10575
10576 PERL_STATIC_INLINE void
10577 S_sv_unglob(pTHX_ SV *const sv, U32 flags)
10578 {
10579     void *xpvmg;
10580     HV *stash;
10581     SV * const temp = flags & SV_COW_DROP_PV ? NULL : sv_newmortal();
10582
10583     PERL_ARGS_ASSERT_SV_UNGLOB;
10584
10585     assert(SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV);
10586     SvFAKE_off(sv);
10587     if (!(flags & SV_COW_DROP_PV))
10588         gv_efullname3(temp, MUTABLE_GV(sv), "*");
10589
10590     SvREFCNT_inc_simple_void_NN(sv_2mortal(sv));
10591     if (GvGP(sv)) {
10592         if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
10593            && HvNAME_get(stash))
10594             mro_method_changed_in(stash);
10595         gp_free(MUTABLE_GV(sv));
10596     }
10597     if (GvSTASH(sv)) {
10598         sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
10599         GvSTASH(sv) = NULL;
10600     }
10601     GvMULTI_off(sv);
10602     if (GvNAME_HEK(sv)) {
10603         unshare_hek(GvNAME_HEK(sv));
10604     }
10605     isGV_with_GP_off(sv);
10606
10607     if(SvTYPE(sv) == SVt_PVGV) {
10608         /* need to keep SvANY(sv) in the right arena */
10609         xpvmg = new_XPVMG();
10610         StructCopy(SvANY(sv), xpvmg, XPVMG);
10611         del_XPVGV(SvANY(sv));
10612         SvANY(sv) = xpvmg;
10613
10614         SvFLAGS(sv) &= ~SVTYPEMASK;
10615         SvFLAGS(sv) |= SVt_PVMG;
10616     }
10617
10618     /* Intentionally not calling any local SET magic, as this isn't so much a
10619        set operation as merely an internal storage change.  */
10620     if (flags & SV_COW_DROP_PV) SvOK_off(sv);
10621     else sv_setsv_flags(sv, temp, 0);
10622
10623     if ((const GV *)sv == PL_last_in_gv)
10624         PL_last_in_gv = NULL;
10625     else if ((const GV *)sv == PL_statgv)
10626         PL_statgv = NULL;
10627 }
10628
10629 /*
10630 =for apidoc sv_unref_flags
10631
10632 Unsets the RV status of the SV, and decrements the reference count of
10633 whatever was being referenced by the RV.  This can almost be thought of
10634 as a reversal of C<newSVrv>.  The C<cflags> argument can contain
10635 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
10636 (otherwise the decrementing is conditional on the reference count being
10637 different from one or the reference being a readonly SV).
10638 See C<L</SvROK_off>>.
10639
10640 =for apidoc Amnh||SV_IMMEDIATE_UNREF
10641
10642 =cut
10643 */
10644
10645 void
10646 Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
10647 {
10648     SV* const target = SvRV(ref);
10649
10650     PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
10651
10652     if (SvWEAKREF(ref)) {
10653         sv_del_backref(target, ref);
10654         SvWEAKREF_off(ref);
10655         SvRV_set(ref, NULL);
10656         return;
10657     }
10658     SvRV_set(ref, NULL);
10659     SvROK_off(ref);
10660     /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
10661        assigned to as BEGIN {$a = \"Foo"} will fail.  */
10662     if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
10663         SvREFCNT_dec_NN(target);
10664     else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
10665         sv_2mortal(target);     /* Schedule for freeing later */
10666 }
10667
10668 /*
10669 =for apidoc sv_untaint
10670
10671 Untaint an SV.  Use C<SvTAINTED_off> instead.
10672
10673 =cut
10674 */
10675
10676 void
10677 Perl_sv_untaint(pTHX_ SV *const sv)
10678 {
10679     PERL_ARGS_ASSERT_SV_UNTAINT;
10680     PERL_UNUSED_CONTEXT;
10681
10682     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
10683         MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
10684         if (mg)
10685             mg->mg_len &= ~1;
10686     }
10687 }
10688
10689 /*
10690 =for apidoc sv_tainted
10691
10692 Test an SV for taintedness.  Use C<SvTAINTED> instead.
10693
10694 =cut
10695 */
10696
10697 bool
10698 Perl_sv_tainted(pTHX_ SV *const sv)
10699 {
10700     PERL_ARGS_ASSERT_SV_TAINTED;
10701     PERL_UNUSED_CONTEXT;
10702
10703     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
10704         const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
10705         if (mg && (mg->mg_len & 1) )
10706             return TRUE;
10707     }
10708     return FALSE;
10709 }
10710
10711 #ifndef NO_MATHOMS  /* Can't move these to mathoms.c because call uiv_2buf(),
10712                        private to this file */
10713
10714 /*
10715 =for apidoc sv_setpviv
10716
10717 Copies an integer into the given SV, also updating its string value.
10718 Does not handle 'set' magic.  See C<L</sv_setpviv_mg>>.
10719
10720 =cut
10721 */
10722
10723 void
10724 Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
10725 {
10726     /* The purpose of this union is to ensure that arr is aligned on
10727        a 2 byte boundary, because that is what uiv_2buf() requires */
10728     union {
10729         char arr[TYPE_CHARS(UV)];
10730         U16 dummy;
10731     } buf;
10732     char *ebuf;
10733     char * const ptr = uiv_2buf(buf.arr, iv, 0, 0, &ebuf);
10734
10735     PERL_ARGS_ASSERT_SV_SETPVIV;
10736
10737     sv_setpvn(sv, ptr, ebuf - ptr);
10738 }
10739
10740 /*
10741 =for apidoc sv_setpviv_mg
10742
10743 Like C<sv_setpviv>, but also handles 'set' magic.
10744
10745 =cut
10746 */
10747
10748 void
10749 Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
10750 {
10751     PERL_ARGS_ASSERT_SV_SETPVIV_MG;
10752
10753     GCC_DIAG_IGNORE_STMT(-Wdeprecated-declarations);
10754
10755     sv_setpviv(sv, iv);
10756
10757     GCC_DIAG_RESTORE_STMT;
10758
10759     SvSETMAGIC(sv);
10760 }
10761
10762 #endif  /* NO_MATHOMS */
10763
10764 #if defined(PERL_IMPLICIT_CONTEXT)
10765
10766 /* pTHX_ magic can't cope with varargs, so this is a no-context
10767  * version of the main function, (which may itself be aliased to us).
10768  * Don't access this version directly.
10769  */
10770
10771 void
10772 Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
10773 {
10774     dTHX;
10775     va_list args;
10776
10777     PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
10778
10779     va_start(args, pat);
10780     sv_vsetpvf(sv, pat, &args);
10781     va_end(args);
10782 }
10783
10784 /* pTHX_ magic can't cope with varargs, so this is a no-context
10785  * version of the main function, (which may itself be aliased to us).
10786  * Don't access this version directly.
10787  */
10788
10789 void
10790 Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10791 {
10792     dTHX;
10793     va_list args;
10794
10795     PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
10796
10797     va_start(args, pat);
10798     sv_vsetpvf_mg(sv, pat, &args);
10799     va_end(args);
10800 }
10801 #endif
10802
10803 /*
10804 =for apidoc sv_setpvf
10805
10806 Works like C<sv_catpvf> but copies the text into the SV instead of
10807 appending it.  Does not handle 'set' magic.  See C<L</sv_setpvf_mg>>.
10808
10809 =for apidoc sv_setpvf_nocontext
10810 Like C<L</sv_setpvf>> but does not take a thread context (C<aTHX>) parameter,
10811 so is used in situations where the caller doesn't already have the thread
10812 context.
10813
10814 =cut
10815 */
10816
10817 void
10818 Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
10819 {
10820     va_list args;
10821
10822     PERL_ARGS_ASSERT_SV_SETPVF;
10823
10824     va_start(args, pat);
10825     sv_vsetpvf(sv, pat, &args);
10826     va_end(args);
10827 }
10828
10829 /*
10830 =for apidoc sv_vsetpvf
10831
10832 Works like C<sv_vcatpvf> but copies the text into the SV instead of
10833 appending it.  Does not handle 'set' magic.  See C<L</sv_vsetpvf_mg>>.
10834
10835 Usually used via its frontend C<sv_setpvf>.
10836
10837 =cut
10838 */
10839
10840 void
10841 Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10842 {
10843     PERL_ARGS_ASSERT_SV_VSETPVF;
10844
10845     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10846 }
10847
10848 /*
10849 =for apidoc sv_setpvf_mg
10850
10851 Like C<sv_setpvf>, but also handles 'set' magic.
10852
10853 =for apidoc sv_setpvf_mg_nocontext
10854 Like C<L</sv_setpvf_mg>>, but does not take a thread context (C<aTHX>)
10855 parameter, so is used in situations where the caller doesn't already have the
10856 thread context.
10857
10858 =cut
10859 */
10860
10861 void
10862 Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10863 {
10864     va_list args;
10865
10866     PERL_ARGS_ASSERT_SV_SETPVF_MG;
10867
10868     va_start(args, pat);
10869     sv_vsetpvf_mg(sv, pat, &args);
10870     va_end(args);
10871 }
10872
10873 /*
10874 =for apidoc sv_vsetpvf_mg
10875
10876 Like C<sv_vsetpvf>, but also handles 'set' magic.
10877
10878 Usually used via its frontend C<sv_setpvf_mg>.
10879
10880 =cut
10881 */
10882
10883 void
10884 Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10885 {
10886     PERL_ARGS_ASSERT_SV_VSETPVF_MG;
10887
10888     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10889     SvSETMAGIC(sv);
10890 }
10891
10892 #if defined(PERL_IMPLICIT_CONTEXT)
10893
10894 /* pTHX_ magic can't cope with varargs, so this is a no-context
10895  * version of the main function, (which may itself be aliased to us).
10896  * Don't access this version directly.
10897  */
10898
10899 void
10900 Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
10901 {
10902     dTHX;
10903     va_list args;
10904
10905     PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
10906
10907     va_start(args, pat);
10908     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10909     va_end(args);
10910 }
10911
10912 /* pTHX_ magic can't cope with varargs, so this is a no-context
10913  * version of the main function, (which may itself be aliased to us).
10914  * Don't access this version directly.
10915  */
10916
10917 void
10918 Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10919 {
10920     dTHX;
10921     va_list args;
10922
10923     PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
10924
10925     va_start(args, pat);
10926     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10927     SvSETMAGIC(sv);
10928     va_end(args);
10929 }
10930 #endif
10931
10932 /*
10933 =for apidoc sv_catpvf
10934
10935 Processes its arguments like C<sprintf>, and appends the formatted
10936 output to an SV.  As with C<sv_vcatpvfn> called with a non-null C-style
10937 variable argument list, argument reordering is not supported.
10938 If the appended data contains "wide" characters
10939 (including, but not limited to, SVs with a UTF-8 PV formatted with C<%s>,
10940 and characters >255 formatted with C<%c>), the original SV might get
10941 upgraded to UTF-8.  Handles 'get' magic, but not 'set' magic.  See
10942 C<L</sv_catpvf_mg>>.  If the original SV was UTF-8, the pattern should be
10943 valid UTF-8; if the original SV was bytes, the pattern should be too.
10944
10945 =for apidoc sv_catpvf_nocontext
10946 Like C<L</sv_catpvf>> but does not take a thread context (C<aTHX>) parameter,
10947 so is used in situations where the caller doesn't already have the thread
10948 context.
10949
10950 =cut */
10951
10952 void
10953 Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
10954 {
10955     va_list args;
10956
10957     PERL_ARGS_ASSERT_SV_CATPVF;
10958
10959     va_start(args, pat);
10960     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10961     va_end(args);
10962 }
10963
10964 /*
10965 =for apidoc sv_vcatpvf
10966
10967 Processes its arguments like C<sv_vcatpvfn> called with a non-null C-style
10968 variable argument list, and appends the formatted output
10969 to an SV.  Does not handle 'set' magic.  See C<L</sv_vcatpvf_mg>>.
10970
10971 Usually used via its frontend C<sv_catpvf>.
10972
10973 =cut
10974 */
10975
10976 void
10977 Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10978 {
10979     PERL_ARGS_ASSERT_SV_VCATPVF;
10980
10981     sv_vcatpvfn_flags(sv, pat, strlen(pat), args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10982 }
10983
10984 /*
10985 =for apidoc sv_catpvf_mg
10986
10987 Like C<sv_catpvf>, but also handles 'set' magic.
10988
10989 =for apidoc sv_catpvf_mg_nocontext
10990 Like C<L</sv_catpvf_mg>> but does not take a thread context (C<aTHX>) parameter,
10991 so is used in situations where the caller doesn't already have the thread
10992 context.
10993
10994 =cut
10995 */
10996
10997 void
10998 Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10999 {
11000     va_list args;
11001
11002     PERL_ARGS_ASSERT_SV_CATPVF_MG;
11003
11004     va_start(args, pat);
11005     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
11006     SvSETMAGIC(sv);
11007     va_end(args);
11008 }
11009
11010 /*
11011 =for apidoc sv_vcatpvf_mg
11012
11013 Like C<sv_vcatpvf>, but also handles 'set' magic.
11014
11015 Usually used via its frontend C<sv_catpvf_mg>.
11016
11017 =cut
11018 */
11019
11020 void
11021 Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
11022 {
11023     PERL_ARGS_ASSERT_SV_VCATPVF_MG;
11024
11025     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
11026     SvSETMAGIC(sv);
11027 }
11028
11029 /*
11030 =for apidoc sv_vsetpvfn
11031
11032 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
11033 appending it.
11034
11035 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
11036
11037 =cut
11038 */
11039
11040 void
11041 Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
11042                  va_list *const args, SV **const svargs, const Size_t sv_count, bool *const maybe_tainted)
11043 {
11044     PERL_ARGS_ASSERT_SV_VSETPVFN;
11045
11046     SvPVCLEAR(sv);
11047     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, sv_count, maybe_tainted, 0);
11048 }
11049
11050
11051 /* simplified inline Perl_sv_catpvn_nomg() when you know the SV's SvPOK */
11052
11053 PERL_STATIC_INLINE void
11054 S_sv_catpvn_simple(pTHX_ SV *const sv, const char* const buf, const STRLEN len)
11055 {
11056     STRLEN const need = len + SvCUR(sv) + 1;
11057     char *end;
11058
11059     /* can't wrap as both len and SvCUR() are allocated in
11060      * memory and together can't consume all the address space
11061      */
11062     assert(need > len);
11063
11064     assert(SvPOK(sv));
11065     SvGROW(sv, need);
11066     end = SvEND(sv);
11067     Copy(buf, end, len, char);
11068     end += len;
11069     *end = '\0';
11070     SvCUR_set(sv, need - 1);
11071 }
11072
11073
11074 /*
11075  * Warn of missing argument to sprintf. The value used in place of such
11076  * arguments should be &PL_sv_no; an undefined value would yield
11077  * inappropriate "use of uninit" warnings [perl #71000].
11078  */
11079 STATIC void
11080 S_warn_vcatpvfn_missing_argument(pTHX) {
11081     if (ckWARN(WARN_MISSING)) {
11082         Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
11083                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
11084     }
11085 }
11086
11087
11088 static void
11089 S_croak_overflow()
11090 {
11091     dTHX;
11092     Perl_croak(aTHX_ "Integer overflow in format string for %s",
11093                     (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
11094 }
11095
11096
11097 /* Given an int i from the next arg (if args is true) or an sv from an arg
11098  * (if args is false), try to extract a STRLEN-ranged value from the arg,
11099  * with overflow checking.
11100  * Sets *neg to true if the value was negative (untouched otherwise.
11101  * Returns the absolute value.
11102  * As an extra margin of safety, it croaks if the returned value would
11103  * exceed the maximum value of a STRLEN / 4.
11104  */
11105
11106 static STRLEN
11107 S_sprintf_arg_num_val(pTHX_ va_list *const args, int i, SV *sv, bool *neg)
11108 {
11109     IV iv;
11110
11111     if (args) {
11112         iv = i;
11113         goto do_iv;
11114     }
11115
11116     if (!sv)
11117         return 0;
11118
11119     SvGETMAGIC(sv);
11120
11121     if (UNLIKELY(SvIsUV(sv))) {
11122         UV uv = SvUV_nomg(sv);
11123         if (uv > IV_MAX)
11124             S_croak_overflow();
11125         iv = uv;
11126     }
11127     else {
11128         iv = SvIV_nomg(sv);
11129       do_iv:
11130         if (iv < 0) {
11131             if (iv < -IV_MAX)
11132                 S_croak_overflow();
11133             iv = -iv;
11134             *neg = TRUE;
11135         }
11136     }
11137
11138     if (iv > (IV)(((STRLEN)~0) / 4))
11139         S_croak_overflow();
11140
11141     return (STRLEN)iv;
11142 }
11143
11144 /* Read in and return a number. Updates *pattern to point to the char
11145  * following the number. Expects the first char to 1..9.
11146  * Croaks if the number exceeds 1/4 of the maximum value of STRLEN.
11147  * This is a belt-and-braces safety measure to complement any
11148  * overflow/wrap checks done in the main body of sv_vcatpvfn_flags.
11149  * It means that e.g. on a 32-bit system the width/precision can't be more
11150  * than 1G, which seems reasonable.
11151  */
11152
11153 STATIC STRLEN
11154 S_expect_number(pTHX_ const char **const pattern)
11155 {
11156     STRLEN var;
11157
11158     PERL_ARGS_ASSERT_EXPECT_NUMBER;
11159
11160     assert(inRANGE(**pattern, '1', '9'));
11161
11162     var = *(*pattern)++ - '0';
11163     while (isDIGIT(**pattern)) {
11164         /* if var * 10 + 9 would exceed 1/4 max strlen, croak */
11165         if (var > ((((STRLEN)~0) / 4 - 9) / 10))
11166             S_croak_overflow();
11167         var = var * 10 + (*(*pattern)++ - '0');
11168     }
11169     return var;
11170 }
11171
11172 /* Implement a fast "%.0f": given a pointer to the end of a buffer (caller
11173  * ensures it's big enough), back fill it with the rounded integer part of
11174  * nv. Returns ptr to start of string, and sets *len to its length.
11175  * Returns NULL if not convertible.
11176  */
11177
11178 STATIC char *
11179 S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
11180 {
11181     const int neg = nv < 0;
11182     UV uv;
11183
11184     PERL_ARGS_ASSERT_F0CONVERT;
11185
11186     assert(!Perl_isinfnan(nv));
11187     if (neg)
11188         nv = -nv;
11189     if (nv != 0.0 && nv < UV_MAX) {
11190         char *p = endbuf;
11191         uv = (UV)nv;
11192         if (uv != nv) {
11193             nv += 0.5;
11194             uv = (UV)nv;
11195             if (uv & 1 && uv == nv)
11196                 uv--;                   /* Round to even */
11197         }
11198         do {
11199             const unsigned dig = uv % 10;
11200             *--p = '0' + dig;
11201         } while (uv /= 10);
11202         if (neg)
11203             *--p = '-';
11204         *len = endbuf - p;
11205         return p;
11206     }
11207     return NULL;
11208 }
11209
11210
11211 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
11212
11213 void
11214 Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
11215                  va_list *const args, SV **const svargs, const Size_t sv_count, bool *const maybe_tainted)
11216 {
11217     PERL_ARGS_ASSERT_SV_VCATPVFN;
11218
11219     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, sv_count, maybe_tainted, SV_GMAGIC|SV_SMAGIC);
11220 }
11221
11222
11223 /* For the vcatpvfn code, we need a long double target in case
11224  * HAS_LONG_DOUBLE, even without USE_LONG_DOUBLE, so that we can printf
11225  * with long double formats, even without NV being long double.  But we
11226  * call the target 'fv' instead of 'nv', since most of the time it is not
11227  * (most compilers these days recognize "long double", even if only as a
11228  * synonym for "double").
11229 */
11230 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE && \
11231         defined(PERL_PRIgldbl) && !defined(USE_QUADMATH)
11232 #  define VCATPVFN_FV_GF PERL_PRIgldbl
11233 #  if defined(__VMS) && defined(__ia64) && defined(__IEEE_FLOAT)
11234        /* Work around breakage in OTS$CVT_FLOAT_T_X */
11235 #    define VCATPVFN_NV_TO_FV(nv,fv)                    \
11236             STMT_START {                                \
11237                 double _dv = nv;                        \
11238                 fv = Perl_isnan(_dv) ? LDBL_QNAN : _dv; \
11239             } STMT_END
11240 #  else
11241 #    define VCATPVFN_NV_TO_FV(nv,fv) (fv)=(nv)
11242 #  endif
11243    typedef long double vcatpvfn_long_double_t;
11244 #else
11245 #  define VCATPVFN_FV_GF NVgf
11246 #  define VCATPVFN_NV_TO_FV(nv,fv) (fv)=(nv)
11247    typedef NV vcatpvfn_long_double_t;
11248 #endif
11249
11250 #ifdef LONGDOUBLE_DOUBLEDOUBLE
11251 /* The first double can be as large as 2**1023, or '1' x '0' x 1023.
11252  * The second double can be as small as 2**-1074, or '0' x 1073 . '1'.
11253  * The sum of them can be '1' . '0' x 2096 . '1', with implied radix point
11254  * after the first 1023 zero bits.
11255  *
11256  * XXX The 2098 is quite large (262.25 bytes) and therefore some sort
11257  * of dynamically growing buffer might be better, start at just 16 bytes
11258  * (for example) and grow only when necessary.  Or maybe just by looking
11259  * at the exponents of the two doubles? */
11260 #  define DOUBLEDOUBLE_MAXBITS 2098
11261 #endif
11262
11263 /* vhex will contain the values (0..15) of the hex digits ("nybbles"
11264  * of 4 bits); 1 for the implicit 1, and the mantissa bits, four bits
11265  * per xdigit.  For the double-double case, this can be rather many.
11266  * The non-double-double-long-double overshoots since all bits of NV
11267  * are not mantissa bits, there are also exponent bits. */
11268 #ifdef LONGDOUBLE_DOUBLEDOUBLE
11269 #  define VHEX_SIZE (3+DOUBLEDOUBLE_MAXBITS/4)
11270 #else
11271 #  define VHEX_SIZE (1+(NVSIZE * 8)/4)
11272 #endif
11273
11274 /* If we do not have a known long double format, (including not using
11275  * long doubles, or long doubles being equal to doubles) then we will
11276  * fall back to the ldexp/frexp route, with which we can retrieve at
11277  * most as many bits as our widest unsigned integer type is.  We try
11278  * to get a 64-bit unsigned integer even if we are not using a 64-bit UV.
11279  *
11280  * (If you want to test the case of UVSIZE == 4, NVSIZE == 8,
11281  *  set the MANTISSATYPE to int and the MANTISSASIZE to 4.)
11282  */
11283 #if defined(HAS_QUAD) && defined(Uquad_t)
11284 #  define MANTISSATYPE Uquad_t
11285 #  define MANTISSASIZE 8
11286 #else
11287 #  define MANTISSATYPE UV
11288 #  define MANTISSASIZE UVSIZE
11289 #endif
11290
11291 #if defined(DOUBLE_LITTLE_ENDIAN) || defined(LONGDOUBLE_LITTLE_ENDIAN)
11292 #  define HEXTRACT_LITTLE_ENDIAN
11293 #elif defined(DOUBLE_BIG_ENDIAN) || defined(LONGDOUBLE_BIG_ENDIAN)
11294 #  define HEXTRACT_BIG_ENDIAN
11295 #else
11296 #  define HEXTRACT_MIX_ENDIAN
11297 #endif
11298
11299 /* S_hextract() is a helper for S_format_hexfp, for extracting
11300  * the hexadecimal values (for %a/%A).  The nv is the NV where the value
11301  * are being extracted from (either directly from the long double in-memory
11302  * presentation, or from the uquad computed via frexp+ldexp).  frexp also
11303  * is used to update the exponent.  The subnormal is set to true
11304  * for IEEE 754 subnormals/denormals (including the x86 80-bit format).
11305  * The vhex is the pointer to the beginning of the output buffer of VHEX_SIZE.
11306  *
11307  * The tricky part is that S_hextract() needs to be called twice:
11308  * the first time with vend as NULL, and the second time with vend as
11309  * the pointer returned by the first call.  What happens is that on
11310  * the first round the output size is computed, and the intended
11311  * extraction sanity checked.  On the second round the actual output
11312  * (the extraction of the hexadecimal values) takes place.
11313  * Sanity failures cause fatal failures during both rounds. */
11314 STATIC U8*
11315 S_hextract(pTHX_ const NV nv, int* exponent, bool *subnormal,
11316            U8* vhex, U8* vend)
11317 {
11318     U8* v = vhex;
11319     int ix;
11320     int ixmin = 0, ixmax = 0;
11321
11322     /* XXX Inf/NaN are not handled here, since it is
11323      * assumed they are to be output as "Inf" and "NaN". */
11324
11325     /* These macros are just to reduce typos, they have multiple
11326      * repetitions below, but usually only one (or sometimes two)
11327      * of them is really being used. */
11328     /* HEXTRACT_OUTPUT() extracts the high nybble first. */
11329 #define HEXTRACT_OUTPUT_HI(ix) (*v++ = nvp[ix] >> 4)
11330 #define HEXTRACT_OUTPUT_LO(ix) (*v++ = nvp[ix] & 0xF)
11331 #define HEXTRACT_OUTPUT(ix) \
11332     STMT_START { \
11333       HEXTRACT_OUTPUT_HI(ix); HEXTRACT_OUTPUT_LO(ix); \
11334    } STMT_END
11335 #define HEXTRACT_COUNT(ix, c) \
11336     STMT_START { \
11337       v += c; if (ix < ixmin) ixmin = ix; else if (ix > ixmax) ixmax = ix; \
11338    } STMT_END
11339 #define HEXTRACT_BYTE(ix) \
11340     STMT_START { \
11341       if (vend) HEXTRACT_OUTPUT(ix); else HEXTRACT_COUNT(ix, 2); \
11342    } STMT_END
11343 #define HEXTRACT_LO_NYBBLE(ix) \
11344     STMT_START { \
11345       if (vend) HEXTRACT_OUTPUT_LO(ix); else HEXTRACT_COUNT(ix, 1); \
11346    } STMT_END
11347     /* HEXTRACT_TOP_NYBBLE is just convenience disguise,
11348      * to make it look less odd when the top bits of a NV
11349      * are extracted using HEXTRACT_LO_NYBBLE: the highest
11350      * order bits can be in the "low nybble" of a byte. */
11351 #define HEXTRACT_TOP_NYBBLE(ix) HEXTRACT_LO_NYBBLE(ix)
11352 #define HEXTRACT_BYTES_LE(a, b) \
11353     for (ix = a; ix >= b; ix--) { HEXTRACT_BYTE(ix); }
11354 #define HEXTRACT_BYTES_BE(a, b) \
11355     for (ix = a; ix <= b; ix++) { HEXTRACT_BYTE(ix); }
11356 #define HEXTRACT_GET_SUBNORMAL(nv) *subnormal = Perl_fp_class_denorm(nv)
11357 #define HEXTRACT_IMPLICIT_BIT(nv) \
11358     STMT_START { \
11359         if (!*subnormal) { \
11360             if (vend) *v++ = ((nv) == 0.0) ? 0 : 1; else v++; \
11361         } \
11362    } STMT_END
11363
11364 /* Most formats do.  Those which don't should undef this.
11365  *
11366  * But also note that IEEE 754 subnormals do not have it, or,
11367  * expressed alternatively, their implicit bit is zero. */
11368 #define HEXTRACT_HAS_IMPLICIT_BIT
11369
11370 /* Many formats do.  Those which don't should undef this. */
11371 #define HEXTRACT_HAS_TOP_NYBBLE
11372
11373     /* HEXTRACTSIZE is the maximum number of xdigits. */
11374 #if defined(USE_LONG_DOUBLE) && defined(LONGDOUBLE_DOUBLEDOUBLE)
11375 #  define HEXTRACTSIZE (2+DOUBLEDOUBLE_MAXBITS/4)
11376 #else
11377 #  define HEXTRACTSIZE 2 * NVSIZE
11378 #endif
11379
11380     const U8* vmaxend = vhex + HEXTRACTSIZE;
11381
11382     assert(HEXTRACTSIZE <= VHEX_SIZE);
11383
11384     PERL_UNUSED_VAR(ix); /* might happen */
11385     (void)Perl_frexp(PERL_ABS(nv), exponent);
11386     *subnormal = FALSE;
11387     if (vend && (vend <= vhex || vend > vmaxend)) {
11388         /* diag_listed_as: Hexadecimal float: internal error (%s) */
11389         Perl_croak(aTHX_ "Hexadecimal float: internal error (entry)");
11390     }
11391     {
11392         /* First check if using long doubles. */
11393 #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE)
11394 #  if LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN
11395         /* Used in e.g. VMS and HP-UX IA-64, e.g. -0.1L:
11396          * 9a 99 99 99 99 99 99 99 99 99 99 99 99 99 fb bf */
11397         /* The bytes 13..0 are the mantissa/fraction,
11398          * the 15,14 are the sign+exponent. */
11399         const U8* nvp = (const U8*)(&nv);
11400         HEXTRACT_GET_SUBNORMAL(nv);
11401         HEXTRACT_IMPLICIT_BIT(nv);
11402 #    undef HEXTRACT_HAS_TOP_NYBBLE
11403         HEXTRACT_BYTES_LE(13, 0);
11404 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN
11405         /* Used in e.g. Solaris Sparc and HP-UX PA-RISC, e.g. -0.1L:
11406          * bf fb 99 99 99 99 99 99 99 99 99 99 99 99 99 9a */
11407         /* The bytes 2..15 are the mantissa/fraction,
11408          * the 0,1 are the sign+exponent. */
11409         const U8* nvp = (const U8*)(&nv);
11410         HEXTRACT_GET_SUBNORMAL(nv);
11411         HEXTRACT_IMPLICIT_BIT(nv);
11412 #    undef HEXTRACT_HAS_TOP_NYBBLE
11413         HEXTRACT_BYTES_BE(2, 15);
11414 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN
11415         /* x86 80-bit "extended precision", 64 bits of mantissa / fraction /
11416          * significand, 15 bits of exponent, 1 bit of sign.  No implicit bit.
11417          * NVSIZE can be either 12 (ILP32, Solaris x86) or 16 (LP64, Linux
11418          * and OS X), meaning that 2 or 6 bytes are empty padding. */
11419         /* The bytes 0..1 are the sign+exponent,
11420          * the bytes 2..9 are the mantissa/fraction. */
11421         const U8* nvp = (const U8*)(&nv);
11422 #    undef HEXTRACT_HAS_IMPLICIT_BIT
11423 #    undef HEXTRACT_HAS_TOP_NYBBLE
11424         HEXTRACT_GET_SUBNORMAL(nv);
11425         HEXTRACT_BYTES_LE(7, 0);
11426 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN
11427         /* Does this format ever happen? (Wikipedia says the Motorola
11428          * 6888x math coprocessors used format _like_ this but padded
11429          * to 96 bits with 16 unused bits between the exponent and the
11430          * mantissa.) */
11431         const U8* nvp = (const U8*)(&nv);
11432 #    undef HEXTRACT_HAS_IMPLICIT_BIT
11433 #    undef HEXTRACT_HAS_TOP_NYBBLE
11434         HEXTRACT_GET_SUBNORMAL(nv);
11435         HEXTRACT_BYTES_BE(0, 7);
11436 #  else
11437 #    define HEXTRACT_FALLBACK
11438         /* Double-double format: two doubles next to each other.
11439          * The first double is the high-order one, exactly like
11440          * it would be for a "lone" double.  The second double
11441          * is shifted down using the exponent so that that there
11442          * are no common bits.  The tricky part is that the value
11443          * of the double-double is the SUM of the two doubles and
11444          * the second one can be also NEGATIVE.
11445          *
11446          * Because of this tricky construction the bytewise extraction we
11447          * use for the other long double formats doesn't work, we must
11448          * extract the values bit by bit.
11449          *
11450          * The little-endian double-double is used .. somewhere?
11451          *
11452          * The big endian double-double is used in e.g. PPC/Power (AIX)
11453          * and MIPS (SGI).
11454          *
11455          * The mantissa bits are in two separate stretches, e.g. for -0.1L:
11456          * 9a 99 99 99 99 99 59 bc 9a 99 99 99 99 99 b9 3f (LE)
11457          * 3f b9 99 99 99 99 99 9a bc 59 99 99 99 99 99 9a (BE)
11458          */
11459 #  endif
11460 #else /* #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE) */
11461         /* Using normal doubles, not long doubles.
11462          *
11463          * We generate 4-bit xdigits (nybble/nibble) instead of 8-bit
11464          * bytes, since we might need to handle printf precision, and
11465          * also need to insert the radix. */
11466 #  if NVSIZE == 8
11467 #    ifdef HEXTRACT_LITTLE_ENDIAN
11468         /* 0 1 2 3 4 5 6 7 (MSB = 7, LSB = 0, 6+7 = exponent+sign) */
11469         const U8* nvp = (const U8*)(&nv);
11470         HEXTRACT_GET_SUBNORMAL(nv);
11471         HEXTRACT_IMPLICIT_BIT(nv);
11472         HEXTRACT_TOP_NYBBLE(6);
11473         HEXTRACT_BYTES_LE(5, 0);
11474 #    elif defined(HEXTRACT_BIG_ENDIAN)
11475         /* 7 6 5 4 3 2 1 0 (MSB = 7, LSB = 0, 6+7 = exponent+sign) */
11476         const U8* nvp = (const U8*)(&nv);
11477         HEXTRACT_GET_SUBNORMAL(nv);
11478         HEXTRACT_IMPLICIT_BIT(nv);
11479         HEXTRACT_TOP_NYBBLE(1);
11480         HEXTRACT_BYTES_BE(2, 7);
11481 #    elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_LE_BE
11482         /* 4 5 6 7 0 1 2 3 (MSB = 7, LSB = 0, 6:7 = nybble:exponent:sign) */
11483         const U8* nvp = (const U8*)(&nv);
11484         HEXTRACT_GET_SUBNORMAL(nv);
11485         HEXTRACT_IMPLICIT_BIT(nv);
11486         HEXTRACT_TOP_NYBBLE(2); /* 6 */
11487         HEXTRACT_BYTE(1); /* 5 */
11488         HEXTRACT_BYTE(0); /* 4 */
11489         HEXTRACT_BYTE(7); /* 3 */
11490         HEXTRACT_BYTE(6); /* 2 */
11491         HEXTRACT_BYTE(5); /* 1 */
11492         HEXTRACT_BYTE(4); /* 0 */
11493 #    elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_BE_LE
11494         /* 3 2 1 0 7 6 5 4 (MSB = 7, LSB = 0, 7:6 = sign:exponent:nybble) */
11495         const U8* nvp = (const U8*)(&nv);
11496         HEXTRACT_GET_SUBNORMAL(nv);
11497         HEXTRACT_IMPLICIT_BIT(nv);
11498         HEXTRACT_TOP_NYBBLE(5); /* 6 */
11499         HEXTRACT_BYTE(6); /* 5 */
11500         HEXTRACT_BYTE(7); /* 4 */
11501         HEXTRACT_BYTE(0); /* 3 */
11502         HEXTRACT_BYTE(1); /* 2 */
11503         HEXTRACT_BYTE(2); /* 1 */
11504         HEXTRACT_BYTE(3); /* 0 */
11505 #    else
11506 #      define HEXTRACT_FALLBACK
11507 #    endif
11508 #  else
11509 #    define HEXTRACT_FALLBACK
11510 #  endif
11511 #endif /* #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE) #else */
11512
11513 #ifdef HEXTRACT_FALLBACK
11514         HEXTRACT_GET_SUBNORMAL(nv);
11515 #  undef HEXTRACT_HAS_TOP_NYBBLE /* Meaningless, but consistent. */
11516         /* The fallback is used for the double-double format, and
11517          * for unknown long double formats, and for unknown double
11518          * formats, or in general unknown NV formats. */
11519         if (nv == (NV)0.0) {
11520             if (vend)
11521                 *v++ = 0;
11522             else
11523                 v++;
11524             *exponent = 0;
11525         }
11526         else {
11527             NV d = nv < 0 ? -nv : nv;
11528             NV e = (NV)1.0;
11529             U8 ha = 0x0; /* hexvalue accumulator */
11530             U8 hd = 0x8; /* hexvalue digit */
11531
11532             /* Shift d and e (and update exponent) so that e <= d < 2*e,
11533              * this is essentially manual frexp(). Multiplying by 0.5 and
11534              * doubling should be lossless in binary floating point. */
11535
11536             *exponent = 1;
11537
11538             while (e > d) {
11539                 e *= (NV)0.5;
11540                 (*exponent)--;
11541             }
11542             /* Now d >= e */
11543
11544             while (d >= e + e) {
11545                 e += e;
11546                 (*exponent)++;
11547             }
11548             /* Now e <= d < 2*e */
11549
11550             /* First extract the leading hexdigit (the implicit bit). */
11551             if (d >= e) {
11552                 d -= e;
11553                 if (vend)
11554                     *v++ = 1;
11555                 else
11556                     v++;
11557             }
11558             else {
11559                 if (vend)
11560                     *v++ = 0;
11561                 else
11562                     v++;
11563             }
11564             e *= (NV)0.5;
11565
11566             /* Then extract the remaining hexdigits. */
11567             while (d > (NV)0.0) {
11568                 if (d >= e) {
11569                     ha |= hd;
11570                     d -= e;
11571                 }
11572                 if (hd == 1) {
11573                     /* Output or count in groups of four bits,
11574                      * that is, when the hexdigit is down to one. */
11575                     if (vend)
11576                         *v++ = ha;
11577                     else
11578                         v++;
11579                     /* Reset the hexvalue. */
11580                     ha = 0x0;
11581                     hd = 0x8;
11582                 }
11583                 else
11584                     hd >>= 1;
11585                 e *= (NV)0.5;
11586             }
11587
11588             /* Flush possible pending hexvalue. */
11589             if (ha) {
11590                 if (vend)
11591                     *v++ = ha;
11592                 else
11593                     v++;
11594             }
11595         }
11596 #endif
11597     }
11598     /* Croak for various reasons: if the output pointer escaped the
11599      * output buffer, if the extraction index escaped the extraction
11600      * buffer, or if the ending output pointer didn't match the
11601      * previously computed value. */
11602     if (v <= vhex || v - vhex >= VHEX_SIZE ||
11603         /* For double-double the ixmin and ixmax stay at zero,
11604          * which is convenient since the HEXTRACTSIZE is tricky
11605          * for double-double. */
11606         ixmin < 0 || ixmax >= NVSIZE ||
11607         (vend && v != vend)) {
11608         /* diag_listed_as: Hexadecimal float: internal error (%s) */
11609         Perl_croak(aTHX_ "Hexadecimal float: internal error (overflow)");
11610     }
11611     return v;
11612 }
11613
11614
11615 /* S_format_hexfp(): helper function for Perl_sv_vcatpvfn_flags().
11616  *
11617  * Processes the %a/%A hexadecimal floating-point format, since the
11618  * built-in snprintf()s which are used for most of the f/p formats, don't
11619  * universally handle %a/%A.
11620  * Populates buf of length bufsize, and returns the length of the created
11621  * string.
11622  * The rest of the args have the same meaning as the local vars of the
11623  * same name within Perl_sv_vcatpvfn_flags().
11624  *
11625  * The caller's determination of IN_LC(LC_NUMERIC), passed as in_lc_numeric,
11626  * is used to ensure we do the right thing when we need to access the locale's
11627  * numeric radix.
11628  *
11629  * It requires the caller to make buf large enough.
11630  */
11631
11632 static STRLEN
11633 S_format_hexfp(pTHX_ char * const buf, const STRLEN bufsize, const char c,
11634                     const NV nv, const vcatpvfn_long_double_t fv,
11635                     bool has_precis, STRLEN precis, STRLEN width,
11636                     bool alt, char plus, bool left, bool fill, bool in_lc_numeric)
11637 {
11638     /* Hexadecimal floating point. */
11639     char* p = buf;
11640     U8 vhex[VHEX_SIZE];
11641     U8* v = vhex; /* working pointer to vhex */
11642     U8* vend; /* pointer to one beyond last digit of vhex */
11643     U8* vfnz = NULL; /* first non-zero */
11644     U8* vlnz = NULL; /* last non-zero */
11645     U8* v0 = NULL; /* first output */
11646     const bool lower = (c == 'a');
11647     /* At output the values of vhex (up to vend) will
11648      * be mapped through the xdig to get the actual
11649      * human-readable xdigits. */
11650     const char* xdig = PL_hexdigit;
11651     STRLEN zerotail = 0; /* how many extra zeros to append */
11652     int exponent = 0; /* exponent of the floating point input */
11653     bool hexradix = FALSE; /* should we output the radix */
11654     bool subnormal = FALSE; /* IEEE 754 subnormal/denormal */
11655     bool negative = FALSE;
11656     STRLEN elen;
11657
11658     /* XXX: NaN, Inf -- though they are printed as "NaN" and "Inf".
11659      *
11660      * For example with denormals, (assuming the vanilla
11661      * 64-bit double): the exponent is zero. 1xp-1074 is
11662      * the smallest denormal and the smallest double, it
11663      * could be output also as 0x0.0000000000001p-1022 to
11664      * match its internal structure. */
11665
11666     vend = S_hextract(aTHX_ nv, &exponent, &subnormal, vhex, NULL);
11667     S_hextract(aTHX_ nv, &exponent, &subnormal, vhex, vend);
11668
11669 #if NVSIZE > DOUBLESIZE
11670 #  ifdef HEXTRACT_HAS_IMPLICIT_BIT
11671     /* In this case there is an implicit bit,
11672      * and therefore the exponent is shifted by one. */
11673     exponent--;
11674 #  elif defined(NV_X86_80_BIT)
11675     if (subnormal) {
11676         /* The subnormals of the x86-80 have a base exponent of -16382,
11677          * (while the physical exponent bits are zero) but the frexp()
11678          * returned the scientific-style floating exponent.  We want
11679          * to map the last one as:
11680          * -16831..-16384 -> -16382 (the last normal is 0x1p-16382)
11681          * -16835..-16388 -> -16384
11682          * since we want to keep the first hexdigit
11683          * as one of the [8421]. */
11684         exponent = -4 * ( (exponent + 1) / -4) - 2;
11685     } else {
11686         exponent -= 4;
11687     }
11688     /* TBD: other non-implicit-bit platforms than the x86-80. */
11689 #  endif
11690 #endif
11691
11692     negative = fv < 0 || Perl_signbit(nv);
11693     if (negative)
11694         *p++ = '-';
11695     else if (plus)
11696         *p++ = plus;
11697     *p++ = '0';
11698     if (lower) {
11699         *p++ = 'x';
11700     }
11701     else {
11702         *p++ = 'X';
11703         xdig += 16; /* Use uppercase hex. */
11704     }
11705
11706     /* Find the first non-zero xdigit. */
11707     for (v = vhex; v < vend; v++) {
11708         if (*v) {
11709             vfnz = v;
11710             break;
11711         }
11712     }
11713
11714     if (vfnz) {
11715         /* Find the last non-zero xdigit. */
11716         for (v = vend - 1; v >= vhex; v--) {
11717             if (*v) {
11718                 vlnz = v;
11719                 break;
11720             }
11721         }
11722
11723 #if NVSIZE == DOUBLESIZE
11724         if (fv != 0.0)
11725             exponent--;
11726 #endif
11727
11728         if (subnormal) {
11729 #ifndef NV_X86_80_BIT
11730           if (vfnz[0] > 1) {
11731             /* IEEE 754 subnormals (but not the x86 80-bit):
11732              * we want "normalize" the subnormal,
11733              * so we need to right shift the hex nybbles
11734              * so that the output of the subnormal starts
11735              * from the first true bit.  (Another, equally
11736              * valid, policy would be to dump the subnormal
11737              * nybbles as-is, to display the "physical" layout.) */
11738             int i, n;
11739             U8 *vshr;
11740             /* Find the ceil(log2(v[0])) of
11741              * the top non-zero nybble. */
11742             for (i = vfnz[0], n = 0; i > 1; i >>= 1, n++) { }
11743             assert(n < 4);
11744             assert(vlnz);
11745             vlnz[1] = 0;
11746             for (vshr = vlnz; vshr >= vfnz; vshr--) {
11747               vshr[1] |= (vshr[0] & (0xF >> (4 - n))) << (4 - n);
11748               vshr[0] >>= n;
11749             }
11750             if (vlnz[1]) {
11751               vlnz++;
11752             }
11753           }
11754 #endif
11755           v0 = vfnz;
11756         } else {
11757           v0 = vhex;
11758         }
11759
11760         if (has_precis) {
11761             U8* ve = (subnormal ? vlnz + 1 : vend);
11762             SSize_t vn = ve - v0;
11763             assert(vn >= 1);
11764             if (precis < (Size_t)(vn - 1)) {
11765                 bool overflow = FALSE;
11766                 if (v0[precis + 1] < 0x8) {
11767                     /* Round down, nothing to do. */
11768                 } else if (v0[precis + 1] > 0x8) {
11769                     /* Round up. */
11770                     v0[precis]++;
11771                     overflow = v0[precis] > 0xF;
11772                     v0[precis] &= 0xF;
11773                 } else { /* v0[precis] == 0x8 */
11774                     /* Half-point: round towards the one
11775                      * with the even least-significant digit:
11776                      * 08 -> 0  88 -> 8
11777                      * 18 -> 2  98 -> a
11778                      * 28 -> 2  a8 -> a
11779                      * 38 -> 4  b8 -> c
11780                      * 48 -> 4  c8 -> c
11781                      * 58 -> 6  d8 -> e
11782                      * 68 -> 6  e8 -> e
11783                      * 78 -> 8  f8 -> 10 */
11784                     if ((v0[precis] & 0x1)) {
11785                         v0[precis]++;
11786                     }
11787                     overflow = v0[precis] > 0xF;
11788                     v0[precis] &= 0xF;
11789                 }
11790
11791                 if (overflow) {
11792                     for (v = v0 + precis - 1; v >= v0; v--) {
11793                         (*v)++;
11794                         overflow = *v > 0xF;
11795                         (*v) &= 0xF;
11796                         if (!overflow) {
11797                             break;
11798                         }
11799                     }
11800                     if (v == v0 - 1 && overflow) {
11801                         /* If the overflow goes all the
11802                          * way to the front, we need to
11803                          * insert 0x1 in front, and adjust
11804                          * the exponent. */
11805                         Move(v0, v0 + 1, vn - 1, char);
11806                         *v0 = 0x1;
11807                         exponent += 4;
11808                     }
11809                 }
11810
11811                 /* The new effective "last non zero". */
11812                 vlnz = v0 + precis;
11813             }
11814             else {
11815                 zerotail =
11816                   subnormal ? precis - vn + 1 :
11817                   precis - (vlnz - vhex);
11818             }
11819         }
11820
11821         v = v0;
11822         *p++ = xdig[*v++];
11823
11824         /* If there are non-zero xdigits, the radix
11825          * is output after the first one. */
11826         if (vfnz < vlnz) {
11827           hexradix = TRUE;
11828         }
11829     }
11830     else {
11831         *p++ = '0';
11832         exponent = 0;
11833         zerotail = has_precis ? precis : 0;
11834     }
11835
11836     /* The radix is always output if precis, or if alt. */
11837     if ((has_precis && precis > 0) || alt) {
11838       hexradix = TRUE;
11839     }
11840
11841     if (hexradix) {
11842 #ifndef USE_LOCALE_NUMERIC
11843         *p++ = '.';
11844 #else
11845         if (in_lc_numeric) {
11846             STRLEN n;
11847             WITH_LC_NUMERIC_SET_TO_NEEDED_IN(TRUE, {
11848                 const char* r = SvPV(PL_numeric_radix_sv, n);
11849                 Copy(r, p, n, char);
11850             });
11851             p += n;
11852         }
11853         else {
11854             *p++ = '.';
11855         }
11856 #endif
11857     }
11858
11859     if (vlnz) {
11860         while (v <= vlnz)
11861             *p++ = xdig[*v++];
11862     }
11863
11864     if (zerotail > 0) {
11865       while (zerotail--) {
11866         *p++ = '0';
11867       }
11868     }
11869
11870     elen = p - buf;
11871
11872     /* sanity checks */
11873     if (elen >= bufsize || width >= bufsize)
11874         /* diag_listed_as: Hexadecimal float: internal error (%s) */
11875         Perl_croak(aTHX_ "Hexadecimal float: internal error (overflow)");
11876
11877     elen += my_snprintf(p, bufsize - elen,
11878                         "%c%+d", lower ? 'p' : 'P',
11879                         exponent);
11880
11881     if (elen < width) {
11882         STRLEN gap = (STRLEN)(width - elen);
11883         if (left) {
11884             /* Pad the back with spaces. */
11885             memset(buf + elen, ' ', gap);
11886         }
11887         else if (fill) {
11888             /* Insert the zeros after the "0x" and the
11889              * the potential sign, but before the digits,
11890              * otherwise we end up with "0000xH.HHH...",
11891              * when we want "0x000H.HHH..."  */
11892             STRLEN nzero = gap;
11893             char* zerox = buf + 2;
11894             STRLEN nmove = elen - 2;
11895             if (negative || plus) {
11896                 zerox++;
11897                 nmove--;
11898             }
11899             Move(zerox, zerox + nzero, nmove, char);
11900             memset(zerox, fill ? '0' : ' ', nzero);
11901         }
11902         else {
11903             /* Move it to the right. */
11904             Move(buf, buf + gap,
11905                  elen, char);
11906             /* Pad the front with spaces. */
11907             memset(buf, ' ', gap);
11908         }
11909         elen = width;
11910     }
11911     return elen;
11912 }
11913
11914 /*
11915 =for apidoc sv_vcatpvfn
11916 =for apidoc_item sv_vcatpvfn_flags
11917
11918 These process their arguments like C<L<vsprintf(3)>> and append the formatted output
11919 to an SV.  They use an array of SVs if the C-style variable argument list is
11920 missing (C<NULL>). Argument reordering (using format specifiers like C<%2$d> or
11921 C<%*2$d>) is supported only when using an array of SVs; using a C-style
11922 C<va_list> argument list with a format string that uses argument reordering
11923 will yield an exception.
11924
11925 When running with taint checks enabled, they indicate via C<maybe_tainted> if
11926 results are untrustworthy (often due to the use of locales).
11927
11928 They assume that C<pat> has the same utf8-ness as C<sv>.  It's the caller's
11929 responsibility to ensure that this is so.
11930
11931 They differ in that C<sv_vcatpvfn_flags> has a C<flags> parameter in which you
11932 can set or clear the C<SV_GMAGIC> and/or S<SV_SMAGIC> flags, to specify which
11933 magic to handle or not handle; whereas plain C<sv_vcatpvfn> always specifies
11934 both 'get' and 'set' magic.
11935
11936 They are usually used via one of the frontends C<sv_vcatpvf> and
11937 C<sv_vcatpvf_mg>.
11938
11939 =cut
11940 */
11941
11942
11943 void
11944 Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
11945                        va_list *const args, SV **const svargs, const Size_t sv_count, bool *const maybe_tainted,
11946                        const U32 flags)
11947 {
11948     const char *fmtstart; /* character following the current '%' */
11949     const char *q;        /* current position within format */
11950     const char *patend;
11951     STRLEN origlen;
11952     Size_t svix = 0;
11953     static const char nullstr[] = "(null)";
11954     bool has_utf8 = DO_UTF8(sv);    /* has the result utf8? */
11955     const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
11956     /* Times 4: a decimal digit takes more than 3 binary digits.
11957      * NV_DIG: mantissa takes that many decimal digits.
11958      * Plus 32: Playing safe. */
11959     char ebuf[IV_DIG * 4 + NV_DIG + 32];
11960     bool no_redundant_warning = FALSE; /* did we use any explicit format parameter index? */
11961 #ifdef USE_LOCALE_NUMERIC
11962     bool have_in_lc_numeric = FALSE;
11963 #endif
11964     /* we never change this unless USE_LOCALE_NUMERIC */
11965     bool in_lc_numeric = FALSE;
11966
11967     PERL_ARGS_ASSERT_SV_VCATPVFN_FLAGS;
11968     PERL_UNUSED_ARG(maybe_tainted);
11969
11970     if (flags & SV_GMAGIC)
11971         SvGETMAGIC(sv);
11972
11973     /* no matter what, this is a string now */
11974     (void)SvPV_force_nomg(sv, origlen);
11975
11976     /* the code that scans for flags etc following a % relies on
11977      * a '\0' being present to avoid falling off the end. Ideally that
11978      * should be fixed */
11979     assert(pat[patlen] == '\0');
11980
11981
11982     /* Special-case "", "%s", "%-p" (SVf - see below) and "%.0f".
11983      * In each case, if there isn't the correct number of args, instead
11984      * fall through to the main code to handle the issuing of any
11985      * warnings etc.
11986      */
11987
11988     if (patlen == 0 && (args || sv_count == 0))
11989         return;
11990
11991     if (patlen <= 4 && pat[0] == '%' && (args || sv_count == 1)) {
11992
11993         /* "%s" */
11994         if (patlen == 2 && pat[1] == 's') {
11995             if (args) {
11996                 const char * const s = va_arg(*args, char*);
11997                 sv_catpv_nomg(sv, s ? s : nullstr);
11998             }
11999             else {
12000                 /* we want get magic on the source but not the target.
12001                  * sv_catsv can't do that, though */
12002                 SvGETMAGIC(*svargs);
12003                 sv_catsv_nomg(sv, *svargs);
12004             }
12005             return;
12006         }
12007
12008         /* "%-p" */
12009         if (args) {
12010             if (patlen == 3  && pat[1] == '-' && pat[2] == 'p') {
12011                 SV *asv = MUTABLE_SV(va_arg(*args, void*));
12012                 sv_catsv_nomg(sv, asv);
12013                 return;
12014             }
12015         }
12016 #if !defined(USE_LONG_DOUBLE) && !defined(USE_QUADMATH)
12017         /* special-case "%.0f" */
12018         else if (   patlen == 4
12019                  && pat[1] == '.' && pat[2] == '0' && pat[3] == 'f')
12020         {
12021             const NV nv = SvNV(*svargs);
12022             if (LIKELY(!Perl_isinfnan(nv))) {
12023                 STRLEN l;
12024                 char *p;
12025
12026                 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
12027                     sv_catpvn_nomg(sv, p, l);
12028                     return;
12029                 }
12030             }
12031         }
12032 #endif /* !USE_LONG_DOUBLE */
12033     }
12034
12035
12036     patend = (char*)pat + patlen;
12037     for (fmtstart = pat; fmtstart < patend; fmtstart = q) {
12038         char intsize     = 0;         /* size qualifier in "%hi..." etc */
12039         bool alt         = FALSE;     /* has      "%#..."    */
12040         bool left        = FALSE;     /* has      "%-..."    */
12041         bool fill        = FALSE;     /* has      "%0..."    */
12042         char plus        = 0;         /* has      "%+..."    */
12043         STRLEN width     = 0;         /* value of "%NNN..."  */
12044         bool has_precis  = FALSE;     /* has      "%.NNN..." */
12045         STRLEN precis    = 0;         /* value of "%.NNN..." */
12046         int base         = 0;         /* base to print in, e.g. 8 for %o */
12047         UV uv            = 0;         /* the value to print of int-ish args */
12048
12049         bool vectorize   = FALSE;     /* has      "%v..."    */
12050         bool vec_utf8    = FALSE;     /* SvUTF8(vec arg)     */
12051         const U8 *vecstr = NULL;      /* SvPVX(vec arg)      */
12052         STRLEN veclen    = 0;         /* SvCUR(vec arg)      */
12053         const char *dotstr = NULL;    /* separator string for %v */
12054         STRLEN dotstrlen;             /* length of separator string for %v */
12055
12056         Size_t efix      = 0;         /* explicit format parameter index */
12057         const Size_t osvix  = svix;   /* original index in case of bad fmt */
12058
12059         SV *argsv        = NULL;
12060         bool is_utf8     = FALSE;     /* is this item utf8?   */
12061         bool arg_missing = FALSE;     /* give "Missing argument" warning */
12062         char esignbuf[4];             /* holds sign prefix, e.g. "-0x" */
12063         STRLEN esignlen  = 0;         /* length of e.g. "-0x" */
12064         STRLEN zeros     = 0;         /* how many '0' to prepend */
12065
12066         const char *eptr = NULL;      /* the address of the element string */
12067         STRLEN elen      = 0;         /* the length  of the element string */
12068
12069         char c;                       /* the actual format ('d', s' etc) */
12070
12071
12072         /* echo everything up to the next format specification */
12073         for (q = fmtstart; q < patend && *q != '%'; ++q)
12074             {};
12075
12076         if (q > fmtstart) {
12077             if (has_utf8 && !pat_utf8) {
12078                 /* upgrade and copy the bytes of fmtstart..q-1 to utf8 on
12079                  * the fly */
12080                 const char *p;
12081                 char *dst;
12082                 STRLEN need = SvCUR(sv) + (q - fmtstart) + 1;
12083
12084                 for (p = fmtstart; p < q; p++)
12085                     if (!NATIVE_BYTE_IS_INVARIANT(*p))
12086                         need++;
12087                 SvGROW(sv, need);
12088
12089                 dst = SvEND(sv);
12090                 for (p = fmtstart; p < q; p++)
12091                     append_utf8_from_native_byte((U8)*p, (U8**)&dst);
12092                 *dst = '\0';
12093                 SvCUR_set(sv, need - 1);
12094             }
12095             else
12096                 S_sv_catpvn_simple(aTHX_ sv, fmtstart, q - fmtstart);
12097         }
12098         if (q++ >= patend)
12099             break;
12100
12101         fmtstart = q; /* fmtstart is char following the '%' */
12102
12103 /*
12104     We allow format specification elements in this order:
12105         \d+\$              explicit format parameter index
12106         [-+ 0#]+           flags
12107         v|\*(\d+\$)?v      vector with optional (optionally specified) arg
12108         0                  flag (as above): repeated to allow "v02"     
12109         \d+|\*(\d+\$)?     width using optional (optionally specified) arg
12110         \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
12111         [hlqLV]            size
12112     [%bcdefginopsuxDFOUX] format (mandatory)
12113 */
12114
12115         if (inRANGE(*q, '1', '9')) {
12116             width = expect_number(&q);
12117             if (*q == '$') {
12118                 if (args)
12119                     Perl_croak_nocontext(
12120                         "Cannot yet reorder sv_vcatpvfn() arguments from va_list");
12121                 ++q;
12122                 efix = (Size_t)width;
12123                 width = 0;
12124                 no_redundant_warning = TRUE;
12125             } else {
12126                 goto gotwidth;
12127             }
12128         }
12129
12130         /* FLAGS */
12131
12132         while (*q) {
12133             switch (*q) {
12134             case ' ':
12135             case '+':
12136                 if (plus == '+' && *q == ' ') /* '+' over ' ' */
12137                     q++;
12138                 else
12139                     plus = *q++;
12140                 continue;
12141
12142             case '-':
12143                 left = TRUE;
12144                 q++;
12145                 continue;
12146
12147             case '0':
12148                 fill = TRUE;
12149                 q++;
12150                 continue;
12151
12152             case '#':
12153                 alt = TRUE;
12154                 q++;
12155                 continue;
12156
12157             default:
12158                 break;
12159             }
12160             break;
12161         }
12162
12163       /* at this point we can expect one of:
12164        *
12165        *  123  an explicit width
12166        *  *    width taken from next arg
12167        *  *12$ width taken from 12th arg
12168        *       or no width
12169        *
12170        * But any width specification may be preceded by a v, in one of its
12171        * forms:
12172        *        v
12173        *        *v
12174        *        *12$v
12175        * So an asterisk may be either a width specifier or a vector
12176        * separator arg specifier, and we don't know which initially
12177        */
12178
12179       tryasterisk:
12180         if (*q == '*') {
12181             STRLEN ix; /* explicit width/vector separator index */
12182             q++;
12183             if (inRANGE(*q, '1', '9')) {
12184                 ix = expect_number(&q);
12185                 if (*q++ == '$') {
12186                     if (args)
12187                         Perl_croak_nocontext(
12188                             "Cannot yet reorder sv_vcatpvfn() arguments from va_list");
12189                     no_redundant_warning = TRUE;
12190                 } else
12191                     goto unknown;
12192             }
12193             else
12194                 ix = 0;
12195
12196             if (*q == 'v') {
12197                 SV *vecsv;
12198                 /* The asterisk was for  *v, *NNN$v: vectorizing, but not
12199                  * with the default "." */
12200                 q++;
12201                 if (vectorize)
12202                     goto unknown;
12203                 if (args)
12204                     vecsv = va_arg(*args, SV*);
12205                 else {
12206                     ix = ix ? ix - 1 : svix++;
12207                     vecsv = ix < sv_count ? svargs[ix]
12208                                        : (arg_missing = TRUE, &PL_sv_no);
12209                 }
12210                 dotstr = SvPV_const(vecsv, dotstrlen);
12211                 /* Keep the DO_UTF8 test *after* the SvPV call, else things go
12212                    bad with tied or overloaded values that return UTF8.  */
12213                 if (DO_UTF8(vecsv))
12214                     is_utf8 = TRUE;
12215                 else if (has_utf8) {
12216                     vecsv = sv_mortalcopy(vecsv);
12217                     sv_utf8_upgrade(vecsv);
12218                     dotstr = SvPV_const(vecsv, dotstrlen);
12219                     is_utf8 = TRUE;
12220                 }
12221                 vectorize = TRUE;
12222                 goto tryasterisk;
12223             }
12224
12225             /* the asterisk specified a width */
12226             {
12227                 int i = 0;
12228                 SV *width_sv = NULL;
12229                 if (args)
12230                     i = va_arg(*args, int);
12231                 else {
12232                     ix = ix ? ix - 1 : svix++;
12233                     width_sv = (ix < sv_count) ? svargs[ix]
12234                                       : (arg_missing = TRUE, (SV*)NULL);
12235                 }
12236                 width = S_sprintf_arg_num_val(aTHX_ args, i, width_sv, &left);
12237             }
12238         }
12239         else if (*q == 'v') {
12240             q++;
12241             if (vectorize)
12242                 goto unknown;
12243             vectorize = TRUE;
12244             dotstr = ".";
12245             dotstrlen = 1;
12246             goto tryasterisk;
12247
12248         }
12249         else {
12250         /* explicit width? */
12251             if(*q == '0') {
12252                 fill = TRUE;
12253                 q++;
12254             }
12255             if (inRANGE(*q, '1', '9'))
12256                 width = expect_number(&q);
12257         }
12258
12259       gotwidth:
12260
12261         /* PRECISION */
12262
12263         if (*q == '.') {
12264             q++;
12265             if (*q == '*') {
12266                 STRLEN ix; /* explicit precision index */
12267                 q++;
12268                 if (inRANGE(*q, '1', '9')) {
12269                     ix = expect_number(&q);
12270                     if (*q++ == '$') {
12271                         if (args)
12272                             Perl_croak_nocontext(
12273                                 "Cannot yet reorder sv_vcatpvfn() arguments from va_list");
12274                         no_redundant_warning = TRUE;
12275                     } else
12276                         goto unknown;
12277                 }
12278                 else
12279                     ix = 0;
12280
12281                 {
12282                     int i = 0;
12283                     SV *width_sv = NULL;
12284                     bool neg = FALSE;
12285
12286                     if (args)
12287                         i = va_arg(*args, int);
12288                     else {
12289                         ix = ix ? ix - 1 : svix++;
12290                         width_sv = (ix < sv_count) ? svargs[ix]
12291                                           : (arg_missing = TRUE, (SV*)NULL);
12292                     }
12293                     precis = S_sprintf_arg_num_val(aTHX_ args, i, width_sv, &neg);
12294                     has_precis = !neg;
12295                     /* ignore negative precision */
12296                     if (!has_precis)
12297                         precis = 0;
12298                 }
12299             }
12300             else {
12301                 /* although it doesn't seem documented, this code has long
12302                  * behaved so that:
12303                  *   no digits following the '.' is treated like '.0'
12304                  *   the number may be preceded by any number of zeroes,
12305                  *      e.g. "%.0001f", which is the same as "%.1f"
12306                  * so I've kept that behaviour. DAPM May 2017
12307                  */
12308                 while (*q == '0')
12309                     q++;
12310                 precis = inRANGE(*q, '1', '9') ? expect_number(&q) : 0;
12311                 has_precis = TRUE;
12312             }
12313         }
12314
12315         /* SIZE */
12316
12317         switch (*q) {
12318 #ifdef WIN32
12319         case 'I':                       /* Ix, I32x, and I64x */
12320 #  ifdef USE_64_BIT_INT
12321             if (q[1] == '6' && q[2] == '4') {
12322                 q += 3;
12323                 intsize = 'q';
12324                 break;
12325             }
12326 #  endif
12327             if (q[1] == '3' && q[2] == '2') {
12328                 q += 3;
12329                 break;
12330             }
12331 #  ifdef USE_64_BIT_INT
12332             intsize = 'q';
12333 #  endif
12334             q++;
12335             break;
12336 #endif
12337 #if (IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)) || \
12338     (IVSIZE == 4 && !defined(HAS_LONG_DOUBLE))
12339         case 'L':                       /* Ld */
12340             /* FALLTHROUGH */
12341 #  ifdef USE_QUADMATH
12342         case 'Q':
12343             /* FALLTHROUGH */
12344 #  endif
12345 #  if IVSIZE >= 8
12346         case 'q':                       /* qd */
12347 #  endif
12348             intsize = 'q';
12349             q++;
12350             break;
12351 #endif
12352         case 'l':
12353             ++q;
12354 #if (IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)) || \
12355     (IVSIZE == 4 && !defined(HAS_LONG_DOUBLE))
12356             if (*q == 'l') {    /* lld, llf */
12357                 intsize = 'q';
12358                 ++q;
12359             }
12360             else
12361 #endif
12362                 intsize = 'l';
12363             break;
12364         case 'h':
12365             if (*++q == 'h') {  /* hhd, hhu */
12366                 intsize = 'c';
12367                 ++q;
12368             }
12369             else
12370                 intsize = 'h';
12371             break;
12372         case 'V':
12373         case 'z':
12374         case 't':
12375         case 'j':
12376             intsize = *q++;
12377             break;
12378         }
12379
12380         /* CONVERSION */
12381
12382         c = *q++; /* c now holds the conversion type */
12383
12384         /* '%' doesn't have an arg, so skip arg processing */
12385         if (c == '%') {
12386             eptr = q - 1;
12387             elen = 1;
12388             if (vectorize)
12389                 goto unknown;
12390             goto string;
12391         }
12392
12393         if (vectorize && !memCHRs("BbDdiOouUXx", c))
12394             goto unknown;
12395
12396         /* get next arg (individual branches do their own va_arg()
12397          * handling for the args case) */
12398
12399         if (!args) {
12400             efix = efix ? efix - 1 : svix++;
12401             argsv = efix < sv_count ? svargs[efix]
12402                                  : (arg_missing = TRUE, &PL_sv_no);
12403         }
12404
12405
12406         switch (c) {
12407
12408             /* STRINGS */
12409
12410         case 's':
12411             if (args) {
12412                 eptr = va_arg(*args, char*);
12413                 if (eptr)
12414                     if (has_precis)
12415                         elen = my_strnlen(eptr, precis);
12416                     else
12417                         elen = strlen(eptr);
12418                 else {
12419                     eptr = (char *)nullstr;
12420                     elen = sizeof nullstr - 1;
12421                 }
12422             }
12423             else {
12424                 eptr = SvPV_const(argsv, elen);
12425                 if (DO_UTF8(argsv)) {
12426                     STRLEN old_precis = precis;
12427                     if (has_precis && precis < elen) {
12428                         STRLEN ulen = sv_or_pv_len_utf8(argsv, eptr, elen);
12429                         STRLEN p = precis > ulen ? ulen : precis;
12430                         precis = sv_or_pv_pos_u2b(argsv, eptr, p, 0);
12431                                                         /* sticks at end */
12432                     }
12433                     if (width) { /* fudge width (can't fudge elen) */
12434                         if (has_precis && precis < elen)
12435                             width += precis - old_precis;
12436                         else
12437                             width +=
12438                                 elen - sv_or_pv_len_utf8(argsv,eptr,elen);
12439                     }
12440                     is_utf8 = TRUE;
12441                 }
12442             }
12443
12444         string:
12445             if (has_precis && precis < elen)
12446                 elen = precis;
12447             break;
12448
12449             /* INTEGERS */
12450
12451         case 'p':
12452             if (alt)
12453                 goto unknown;
12454
12455             /* %p extensions:
12456              *
12457              * "%...p" is normally treated like "%...x", except that the
12458              * number to print is the SV's address (or a pointer address
12459              * for C-ish sprintf).
12460              *
12461              * However, the C-ish sprintf variant allows a few special
12462              * extensions. These are currently:
12463              *
12464              * %-p       (SVf)  Like %s, but gets the string from an SV*
12465              *                  arg rather than a char* arg.
12466              *                  (This was previously %_).
12467              *
12468              * %-<num>p         Ditto but like %.<num>s (i.e. num is max width)
12469              *
12470              * %2p       (HEKf) Like %s, but using the key string in a HEK
12471              *
12472              * %3p       (HEKf256) Ditto but like %.256s
12473              *
12474              * %d%lu%4p  (UTF8f) A utf8 string. Consumes 3 args:
12475              *                       (cBOOL(utf8), len, string_buf).
12476              *                   It's handled by the "case 'd'" branch
12477              *                   rather than here.
12478              *
12479              * %<num>p   where num is 1 or > 4: reserved for future
12480              *           extensions. Warns, but then is treated as a
12481              *           general %p (print hex address) format.
12482              */
12483
12484             if (   args
12485                 && !intsize
12486                 && !fill
12487                 && !plus
12488                 && !has_precis
12489                     /* not %*p or %*1$p - any width was explicit */
12490                 && q[-2] != '*'
12491                 && q[-2] != '$'
12492             ) {
12493                 if (left) {                     /* %-p (SVf), %-NNNp */
12494                     if (width) {
12495                         precis = width;
12496                         has_precis = TRUE;
12497                     }
12498                     argsv = MUTABLE_SV(va_arg(*args, void*));
12499                     eptr = SvPV_const(argsv, elen);
12500                     if (DO_UTF8(argsv))
12501                         is_utf8 = TRUE;
12502                     width = 0;
12503                     goto string;
12504                 }
12505                 else if (width == 2 || width == 3) {    /* HEKf, HEKf256 */
12506                     HEK * const hek = va_arg(*args, HEK *);
12507                     eptr = HEK_KEY(hek);
12508                     elen = HEK_LEN(hek);
12509                     if (HEK_UTF8(hek))
12510                         is_utf8 = TRUE;
12511                     if (width == 3) {
12512                         precis = 256;
12513                         has_precis = TRUE;
12514                     }
12515                     width = 0;
12516                     goto string;
12517                 }
12518                 else if (width) {
12519                     Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
12520                          "internal %%<num>p might conflict with future printf extensions");
12521                 }
12522             }
12523
12524             /* treat as normal %...p */
12525
12526             uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
12527             base = 16;
12528             goto do_integer;
12529
12530         case 'c':
12531             /* Ignore any size specifiers, since they're not documented as
12532              * being allowed for %c (ideally we should warn on e.g. '%hc').
12533              * Setting a default intsize, along with a positive
12534              * (which signals unsigned) base, causes, for C-ish use, the
12535              * va_arg to be interpreted as an unsigned int, when it's
12536              * actually signed, which will convert -ve values to high +ve
12537              * values. Note that unlike the libc %c, values > 255 will
12538              * convert to high unicode points rather than being truncated
12539              * to 8 bits. For perlish use, it will do SvUV(argsv), which
12540              * will again convert -ve args to high -ve values.
12541              */
12542             intsize = 0;
12543             base = 1; /* special value that indicates we're doing a 'c' */
12544             goto get_int_arg_val;
12545
12546         case 'D':
12547 #ifdef IV_IS_QUAD
12548             intsize = 'q';
12549 #else
12550             intsize = 'l';
12551 #endif
12552             base = -10;
12553             goto get_int_arg_val;
12554
12555         case 'd':
12556             /* probably just a plain %d, but it might be the start of the
12557              * special UTF8f format, which usually looks something like
12558              * "%d%lu%4p" (the lu may vary by platform)
12559              */
12560             assert((UTF8f)[0] == 'd');
12561             assert((UTF8f)[1] == '%');
12562
12563              if (   args              /* UTF8f only valid for C-ish sprintf */
12564                  && q == fmtstart + 1 /* plain %d, not %....d */
12565                  && patend >= fmtstart + sizeof(UTF8f) - 1 /* long enough */
12566                  && *q == '%'
12567                  && strnEQ(q + 1, UTF8f + 2, sizeof(UTF8f) - 3))
12568             {
12569                 /* The argument has already gone through cBOOL, so the cast
12570                    is safe. */
12571                 is_utf8 = (bool)va_arg(*args, int);
12572                 elen = va_arg(*args, UV);
12573                 /* if utf8 length is larger than 0x7ffff..., then it might
12574                  * have been a signed value that wrapped */
12575                 if (elen  > ((~(STRLEN)0) >> 1)) {
12576                     assert(0); /* in DEBUGGING build we want to crash */
12577                     elen = 0; /* otherwise we want to treat this as an empty string */
12578                 }
12579                 eptr = va_arg(*args, char *);
12580                 q += sizeof(UTF8f) - 2;
12581                 goto string;
12582             }
12583
12584             /* FALLTHROUGH */
12585         case 'i':
12586             base = -10;
12587             goto get_int_arg_val;
12588
12589         case 'U':
12590 #ifdef IV_IS_QUAD
12591             intsize = 'q';
12592 #else
12593             intsize = 'l';
12594 #endif
12595             /* FALLTHROUGH */
12596         case 'u':
12597             base = 10;
12598             goto get_int_arg_val;
12599
12600         case 'B':
12601         case 'b':
12602             base = 2;
12603             goto get_int_arg_val;
12604
12605         case 'O':
12606 #ifdef IV_IS_QUAD
12607             intsize = 'q';
12608 #else
12609             intsize = 'l';
12610 #endif
12611             /* FALLTHROUGH */
12612         case 'o':
12613             base = 8;
12614             goto get_int_arg_val;
12615
12616         case 'X':
12617         case 'x':
12618             base = 16;
12619
12620           get_int_arg_val:
12621
12622             if (vectorize) {
12623                 STRLEN ulen;
12624                 SV *vecsv;
12625
12626                 if (base < 0) {
12627                     base = -base;
12628                     if (plus)
12629                          esignbuf[esignlen++] = plus;
12630                 }
12631
12632                 /* initialise the vector string to iterate over */
12633
12634                 vecsv = args ? va_arg(*args, SV*) : argsv;
12635
12636                 /* if this is a version object, we need to convert
12637                  * back into v-string notation and then let the
12638                  * vectorize happen normally
12639                  */
12640                 if (sv_isobject(vecsv) && sv_derived_from(vecsv, "version")) {
12641                     if ( hv_existss(MUTABLE_HV(SvRV(vecsv)), "alpha") ) {
12642                         Perl_ck_warner_d(aTHX_ packWARN(WARN_PRINTF),
12643                         "vector argument not supported with alpha versions");
12644                         vecsv = &PL_sv_no;
12645                     }
12646                     else {
12647                         vecstr = (U8*)SvPV_const(vecsv,veclen);
12648                         vecsv = sv_newmortal();
12649                         scan_vstring((char *)vecstr, (char *)vecstr + veclen,
12650                                      vecsv);
12651                     }
12652                 }
12653                 vecstr = (U8*)SvPV_const(vecsv, veclen);
12654                 vec_utf8 = DO_UTF8(vecsv);
12655
12656               /* This is the re-entry point for when we're iterating
12657                * over the individual characters of a vector arg */
12658               vector:
12659                 if (!veclen)
12660                     goto done_valid_conversion;
12661                 if (vec_utf8)
12662                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
12663                                         UTF8_ALLOW_ANYUV);
12664                 else {
12665                     uv = *vecstr;
12666                     ulen = 1;
12667                 }
12668                 vecstr += ulen;
12669                 veclen -= ulen;
12670             }
12671             else {
12672                 /* test arg for inf/nan. This can trigger an unwanted
12673                  * 'str' overload, so manually force 'num' overload first
12674                  * if necessary */
12675                 if (argsv) {
12676                     SvGETMAGIC(argsv);
12677                     if (UNLIKELY(SvAMAGIC(argsv)))
12678                         argsv = sv_2num(argsv);
12679                     if (UNLIKELY(isinfnansv(argsv)))
12680                         goto handle_infnan_argsv;
12681                 }
12682
12683                 if (base < 0) {
12684                     /* signed int type */
12685                     IV iv;
12686                     base = -base;
12687                     if (args) {
12688                         switch (intsize) {
12689                         case 'c':  iv = (char)va_arg(*args, int);  break;
12690                         case 'h':  iv = (short)va_arg(*args, int); break;
12691                         case 'l':  iv = va_arg(*args, long);       break;
12692                         case 'V':  iv = va_arg(*args, IV);         break;
12693                         case 'z':  iv = va_arg(*args, SSize_t);    break;
12694 #ifdef HAS_PTRDIFF_T
12695                         case 't':  iv = va_arg(*args, ptrdiff_t);  break;
12696 #endif
12697                         default:   iv = va_arg(*args, int);        break;
12698                         case 'j':  iv = (IV) va_arg(*args, PERL_INTMAX_T); break;
12699                         case 'q':
12700 #if IVSIZE >= 8
12701                                    iv = va_arg(*args, Quad_t);     break;
12702 #else
12703                                    goto unknown;
12704 #endif
12705                         }
12706                     }
12707                     else {
12708                         /* assign to tiv then cast to iv to work around
12709                          * 2003 GCC cast bug (gnu.org bugzilla #13488) */
12710                         IV tiv = SvIV_nomg(argsv);
12711                         switch (intsize) {
12712                         case 'c':  iv = (char)tiv;   break;
12713                         case 'h':  iv = (short)tiv;  break;
12714                         case 'l':  iv = (long)tiv;   break;
12715                         case 'V':
12716                         default:   iv = tiv;         break;
12717                         case 'q':
12718 #if IVSIZE >= 8
12719                                    iv = (Quad_t)tiv; break;
12720 #else
12721                                    goto unknown;
12722 #endif
12723                         }
12724                     }
12725
12726                     /* now convert iv to uv */
12727                     if (iv >= 0) {
12728                         uv = iv;
12729                         if (plus)
12730                             esignbuf[esignlen++] = plus;
12731                     }
12732                     else {
12733                         /* Using 0- here to silence bogus warning from MS VC */
12734                         uv = (UV) (0 - (UV) iv);
12735                         esignbuf[esignlen++] = '-';
12736                     }
12737                 }
12738                 else {
12739                     /* unsigned int type */
12740                     if (args) {
12741                         switch (intsize) {
12742                         case 'c': uv = (unsigned char)va_arg(*args, unsigned);
12743                                   break;
12744                         case 'h': uv = (unsigned short)va_arg(*args, unsigned);
12745                                   break;
12746                         case 'l': uv = va_arg(*args, unsigned long); break;
12747                         case 'V': uv = va_arg(*args, UV);            break;
12748                         case 'z': uv = va_arg(*args, Size_t);        break;
12749 #ifdef HAS_PTRDIFF_T
12750                                   /* will sign extend, but there is no
12751                                    * uptrdiff_t, so oh well */
12752                         case 't': uv = va_arg(*args, ptrdiff_t);     break;
12753 #endif
12754                         case 'j': uv = (UV) va_arg(*args, PERL_UINTMAX_T); break;
12755                         default:  uv = va_arg(*args, unsigned);      break;
12756                         case 'q':
12757 #if IVSIZE >= 8
12758                                   uv = va_arg(*args, Uquad_t);       break;
12759 #else
12760                                   goto unknown;
12761 #endif
12762                         }
12763                     }
12764                     else {
12765                         /* assign to tiv then cast to iv to work around
12766                          * 2003 GCC cast bug (gnu.org bugzilla #13488) */
12767                         UV tuv = SvUV_nomg(argsv);
12768                         switch (intsize) {
12769                         case 'c': uv = (unsigned char)tuv;  break;
12770                         case 'h': uv = (unsigned short)tuv; break;
12771                         case 'l': uv = (unsigned long)tuv;  break;
12772                         case 'V':
12773                         default:  uv = tuv;                 break;
12774                         case 'q':
12775 #if IVSIZE >= 8
12776                                   uv = (Uquad_t)tuv;        break;
12777 #else
12778                                   goto unknown;
12779 #endif
12780                         }
12781                     }
12782                 }
12783             }
12784
12785         do_integer:
12786             {
12787                 char *ptr = ebuf + sizeof ebuf;
12788                 unsigned dig;
12789                 zeros = 0;
12790
12791                 switch (base) {
12792                 case 16:
12793                     {
12794                     const char * const p =
12795                             (c == 'X') ? PL_hexdigit + 16 : PL_hexdigit;
12796
12797                         do {
12798                             dig = uv & 15;
12799                             *--ptr = p[dig];
12800                         } while (uv >>= 4);
12801                         if (alt && *ptr != '0') {
12802                             esignbuf[esignlen++] = '0';
12803                             esignbuf[esignlen++] = c;  /* 'x' or 'X' */
12804                         }
12805                         break;
12806                     }
12807                 case 8:
12808                     do {
12809                         dig = uv & 7;
12810                         *--ptr = '0' + dig;
12811                     } while (uv >>= 3);
12812                     if (alt && *ptr != '0')
12813                         *--ptr = '0';
12814                     break;
12815                 case 2:
12816                     do {
12817                         dig = uv & 1;
12818                         *--ptr = '0' + dig;
12819                     } while (uv >>= 1);
12820                     if (alt && *ptr != '0') {
12821                         esignbuf[esignlen++] = '0';
12822                         esignbuf[esignlen++] = c; /* 'b' or 'B' */
12823                     }
12824                     break;
12825
12826                 case 1:
12827                     /* special-case: base 1 indicates a 'c' format:
12828                      * we use the common code for extracting a uv,
12829                      * but handle that value differently here than
12830                      * all the other int types */
12831                     if ((uv > 255 ||
12832                          (!UVCHR_IS_INVARIANT(uv) && SvUTF8(sv)))
12833                         && !IN_BYTES)
12834                     {
12835                         STATIC_ASSERT_STMT(sizeof(ebuf) >= UTF8_MAXBYTES + 1);
12836                         eptr = ebuf;
12837                         elen = uvchr_to_utf8((U8*)eptr, uv) - (U8*)ebuf;
12838                         is_utf8 = TRUE;
12839                     }
12840                     else {
12841                         eptr = ebuf;
12842                         ebuf[0] = (char)uv;
12843                         elen = 1;
12844                     }
12845                     goto string;
12846
12847                 default:                /* it had better be ten or less */
12848                     do {
12849                         dig = uv % base;
12850                         *--ptr = '0' + dig;
12851                     } while (uv /= base);
12852                     break;
12853                 }
12854                 elen = (ebuf + sizeof ebuf) - ptr;
12855                 eptr = ptr;
12856                 if (has_precis) {
12857                     if (precis > elen)
12858                         zeros = precis - elen;
12859                     else if (precis == 0 && elen == 1 && *eptr == '0'
12860                              && !(base == 8 && alt)) /* "%#.0o" prints "0" */
12861                         elen = 0;
12862
12863                     /* a precision nullifies the 0 flag. */
12864                     fill = FALSE;
12865                 }
12866             }
12867             break;
12868
12869             /* FLOATING POINT */
12870
12871         case 'F':
12872             c = 'f';            /* maybe %F isn't supported here */
12873             /* FALLTHROUGH */
12874         case 'e': case 'E':
12875         case 'f':
12876         case 'g': case 'G':
12877         case 'a': case 'A':
12878
12879         {
12880             STRLEN float_need; /* what PL_efloatsize needs to become */
12881             bool hexfp;        /* hexadecimal floating point? */
12882
12883             vcatpvfn_long_double_t fv;
12884             NV                     nv;
12885
12886             /* This is evil, but floating point is even more evil */
12887
12888             /* for SV-style calling, we can only get NV
12889                for C-style calling, we assume %f is double;
12890                for simplicity we allow any of %Lf, %llf, %qf for long double
12891             */
12892             switch (intsize) {
12893             case 'V':
12894 #if defined(USE_LONG_DOUBLE) || defined(USE_QUADMATH)
12895                 intsize = 'q';
12896 #endif
12897                 break;
12898 /* [perl #20339] - we should accept and ignore %lf rather than die */
12899             case 'l':
12900                 /* FALLTHROUGH */
12901             default:
12902 #if defined(USE_LONG_DOUBLE) || defined(USE_QUADMATH)
12903                 intsize = args ? 0 : 'q';
12904 #endif
12905                 break;
12906             case 'q':
12907 #if defined(HAS_LONG_DOUBLE)
12908                 break;
12909 #else
12910                 /* FALLTHROUGH */
12911 #endif
12912             case 'c':
12913             case 'h':
12914             case 'z':
12915             case 't':
12916             case 'j':
12917                 goto unknown;
12918             }
12919
12920             /* Now we need (long double) if intsize == 'q', else (double). */
12921             if (args) {
12922                 /* Note: do not pull NVs off the va_list with va_arg()
12923                  * (pull doubles instead) because if you have a build
12924                  * with long doubles, you would always be pulling long
12925                  * doubles, which would badly break anyone using only
12926                  * doubles (i.e. the majority of builds). In other
12927                  * words, you cannot mix doubles and long doubles.
12928                  * The only case where you can pull off long doubles
12929                  * is when the format specifier explicitly asks so with
12930                  * e.g. "%Lg". */
12931 #ifdef USE_QUADMATH
12932                 fv = intsize == 'q' ?
12933                     va_arg(*args, NV) : va_arg(*args, double);
12934                 nv = fv;
12935 #elif LONG_DOUBLESIZE > DOUBLESIZE
12936                 if (intsize == 'q') {
12937                     fv = va_arg(*args, long double);
12938                     nv = fv;
12939                 } else {
12940                     nv = va_arg(*args, double);
12941                     VCATPVFN_NV_TO_FV(nv, fv);
12942                 }
12943 #else
12944                 nv = va_arg(*args, double);
12945                 fv = nv;
12946 #endif
12947             }
12948             else
12949             {
12950                 SvGETMAGIC(argsv);
12951                 /* we jump here if an int-ish format encountered an
12952                  * infinite/Nan argsv. After setting nv/fv, it falls
12953                  * into the isinfnan block which follows */
12954               handle_infnan_argsv:
12955                 nv = SvNV_nomg(argsv);
12956                 VCATPVFN_NV_TO_FV(nv, fv);
12957             }
12958
12959             if (Perl_isinfnan(nv)) {
12960                 if (c == 'c')
12961                     Perl_croak(aTHX_ "Cannot printf %" NVgf " with '%c'",
12962                            SvNV_nomg(argsv), (int)c);
12963
12964                 elen = S_infnan_2pv(nv, ebuf, sizeof(ebuf), plus);
12965                 assert(elen);
12966                 eptr = ebuf;
12967                 zeros     = 0;
12968                 esignlen  = 0;
12969                 dotstrlen = 0;
12970                 break;
12971             }
12972
12973             /* special-case "%.0f" */
12974             if (   c == 'f'
12975                 && !precis
12976                 && has_precis
12977                 && !(width || left || plus || alt)
12978                 && !fill
12979                 && intsize != 'q'
12980                 && ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
12981             )
12982                 goto float_concat;
12983
12984             /* Determine the buffer size needed for the various
12985              * floating-point formats.
12986              *
12987              * The basic possibilities are:
12988              *
12989              *               <---P--->
12990              *    %f 1111111.123456789
12991              *    %e       1.111111123e+06
12992              *    %a     0x1.0f4471f9bp+20
12993              *    %g        1111111.12
12994              *    %g        1.11111112e+15
12995              *
12996              * where P is the value of the precision in the format, or 6
12997              * if not specified. Note the two possible output formats of
12998              * %g; in both cases the number of significant digits is <=
12999              * precision.
13000              *
13001              * For most of the format types the maximum buffer size needed
13002              * is precision, plus: any leading 1 or 0x1, the radix
13003              * point, and an exponent.  The difficult one is %f: for a
13004              * large positive exponent it can have many leading digits,
13005              * which needs to be calculated specially. Also %a is slightly
13006              * different in that in the absence of a specified precision,
13007              * it uses as many digits as necessary to distinguish
13008              * different values.
13009              *
13010              * First, here are the constant bits. For ease of calculation
13011              * we over-estimate the needed buffer size, for example by
13012              * assuming all formats have an exponent and a leading 0x1.
13013              *
13014              * Also for production use, add a little extra overhead for
13015              * safety's sake. Under debugging don't, as it means we're
13016              * more likely to quickly spot issues during development.
13017              */
13018
13019             float_need =     1  /* possible unary minus */
13020                           +  4  /* "0x1" plus very unlikely carry */
13021                           +  1  /* default radix point '.' */
13022                           +  2  /* "e-", "p+" etc */
13023                           +  6  /* exponent: up to 16383 (quad fp) */
13024 #ifndef DEBUGGING
13025                           + 20  /* safety net */
13026 #endif
13027                           +  1; /* \0 */
13028
13029
13030             /* determine the radix point len, e.g. length(".") in "1.2" */
13031 #ifdef USE_LOCALE_NUMERIC
13032             /* note that we may either explicitly use PL_numeric_radix_sv
13033              * below, or implicitly, via an snprintf() variant.
13034              * Note also things like ps_AF.utf8 which has
13035              * "\N{ARABIC DECIMAL SEPARATOR} as a radix point */
13036             if (! have_in_lc_numeric) {
13037                 in_lc_numeric = IN_LC(LC_NUMERIC);
13038                 have_in_lc_numeric = TRUE;
13039             }
13040
13041             if (in_lc_numeric) {
13042                 WITH_LC_NUMERIC_SET_TO_NEEDED_IN(TRUE, {
13043                     /* this can't wrap unless PL_numeric_radix_sv is a string
13044                      * consuming virtually all the 32-bit or 64-bit address
13045                      * space
13046                      */
13047                     float_need += (SvCUR(PL_numeric_radix_sv) - 1);
13048
13049                     /* floating-point formats only get utf8 if the radix point
13050                      * is utf8. All other characters in the string are < 128
13051                      * and so can be safely appended to both a non-utf8 and utf8
13052                      * string as-is.
13053                      * Note that this will convert the output to utf8 even if
13054                      * the radix point didn't get output.
13055                      */
13056                     if (SvUTF8(PL_numeric_radix_sv) && !has_utf8) {
13057                         sv_utf8_upgrade(sv);
13058                         has_utf8 = TRUE;
13059                     }
13060                 });
13061             }
13062 #endif
13063
13064             hexfp = FALSE;
13065
13066             if (isALPHA_FOLD_EQ(c, 'f')) {
13067                 /* Determine how many digits before the radix point
13068                  * might be emitted.  frexp() (or frexpl) has some
13069                  * unspecified behaviour for nan/inf/-inf, so lucky we've
13070                  * already handled them above */
13071                 STRLEN digits;
13072                 int i = PERL_INT_MIN;
13073                 (void)Perl_frexp((NV)fv, &i);
13074                 if (i == PERL_INT_MIN)
13075                     Perl_die(aTHX_ "panic: frexp: %" VCATPVFN_FV_GF, fv);
13076
13077                 if (i > 0) {
13078                     digits = BIT_DIGITS(i);
13079                     /* this can't overflow. 'digits' will only be a few
13080                      * thousand even for the largest floating-point types.
13081                      * And up until now float_need is just some small
13082                      * constants plus radix len, which can't be in
13083                      * overflow territory unless the radix SV is consuming
13084                      * over 1/2 the address space */
13085                     assert(float_need < ((STRLEN)~0) - digits);
13086                     float_need += digits;
13087                 }
13088             }
13089             else if (UNLIKELY(isALPHA_FOLD_EQ(c, 'a'))) {
13090                 hexfp = TRUE;
13091                 if (!has_precis) {
13092                     /* %a in the absence of precision may print as many
13093                      * digits as needed to represent the entire mantissa
13094                      * bit pattern.
13095                      * This estimate seriously overshoots in most cases,
13096                      * but better the undershooting.  Firstly, all bytes
13097                      * of the NV are not mantissa, some of them are
13098                      * exponent.  Secondly, for the reasonably common
13099                      * long doubles case, the "80-bit extended", two
13100                      * or six bytes of the NV are unused. Also, we'll
13101                      * still pick up an extra +6 from the default
13102                      * precision calculation below. */
13103                     STRLEN digits =
13104 #ifdef LONGDOUBLE_DOUBLEDOUBLE
13105                         /* For the "double double", we need more.
13106                          * Since each double has their own exponent, the
13107                          * doubles may float (haha) rather far from each
13108                          * other, and the number of required bits is much
13109                          * larger, up to total of DOUBLEDOUBLE_MAXBITS bits.
13110                          * See the definition of DOUBLEDOUBLE_MAXBITS.
13111                          *
13112                          * Need 2 hexdigits for each byte. */
13113                         (DOUBLEDOUBLE_MAXBITS/8 + 1) * 2;
13114 #else
13115                         NVSIZE * 2; /* 2 hexdigits for each byte */
13116 #endif
13117                     /* see "this can't overflow" comment above */
13118                     assert(float_need < ((STRLEN)~0) - digits);
13119                     float_need += digits;
13120                 }
13121             }
13122             /* special-case "%.<number>g" if it will fit in ebuf */
13123             else if (c == 'g'
13124                 && precis   /* See earlier comment about buggy Gconvert
13125                                when digits, aka precis, is 0  */
13126                 && has_precis
13127                 /* check, in manner not involving wrapping, that it will
13128                  * fit in ebuf  */
13129                 && float_need < sizeof(ebuf)
13130                 && sizeof(ebuf) - float_need > precis
13131                 && !(width || left || plus || alt)
13132                 && !fill
13133                 && intsize != 'q'
13134             ) {
13135                 WITH_LC_NUMERIC_SET_TO_NEEDED_IN(in_lc_numeric,
13136                     SNPRINTF_G(fv, ebuf, sizeof(ebuf), precis)
13137                 );
13138                 elen = strlen(ebuf);
13139                 eptr = ebuf;
13140                 goto float_concat;
13141             }
13142
13143
13144             {
13145                 STRLEN pr = has_precis ? precis : 6; /* known default */
13146                 /* this probably can't wrap, since precis is limited
13147                  * to 1/4 address space size, but better safe than sorry
13148                  */
13149                 if (float_need >= ((STRLEN)~0) - pr)
13150                     croak_memory_wrap();
13151                 float_need += pr;
13152             }
13153
13154             if (float_need < width)
13155                 float_need = width;
13156
13157             if (float_need > INT_MAX) {
13158                 /* snprintf() returns an int, and we use that return value,
13159                    so die horribly if the expected size is too large for int
13160                 */
13161                 Perl_croak(aTHX_ "Numeric format result too large");
13162             }
13163
13164             if (PL_efloatsize <= float_need) {
13165                 /* PL_efloatbuf should be at least 1 greater than
13166                  * float_need to allow a trailing \0 to be returned by
13167                  * snprintf().  If we need to grow, overgrow for the
13168                  * benefit of future generations */
13169                 const STRLEN extra = 0x20;
13170                 if (float_need >= ((STRLEN)~0) - extra)
13171                     croak_memory_wrap();
13172                 float_need += extra;
13173                 Safefree(PL_efloatbuf);
13174                 PL_efloatsize = float_need;
13175                 Newx(PL_efloatbuf, PL_efloatsize, char);
13176                 PL_efloatbuf[0] = '\0';
13177             }
13178
13179             if (UNLIKELY(hexfp)) {
13180                 elen = S_format_hexfp(aTHX_ PL_efloatbuf, PL_efloatsize, c,
13181                                 nv, fv, has_precis, precis, width,
13182                                 alt, plus, left, fill, in_lc_numeric);
13183             }
13184             else {
13185                 char *ptr = ebuf + sizeof ebuf;
13186                 *--ptr = '\0';
13187                 *--ptr = c;
13188 #if defined(USE_QUADMATH)
13189                 if (intsize == 'q') {
13190                     /* "g" -> "Qg" */
13191                     *--ptr = 'Q';
13192                 }
13193                 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
13194 #elif defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
13195                 /* Note that this is HAS_LONG_DOUBLE and PERL_PRIfldbl,
13196                  * not USE_LONG_DOUBLE and NVff.  In other words,
13197                  * this needs to work without USE_LONG_DOUBLE. */
13198                 if (intsize == 'q') {
13199                     /* Copy the one or more characters in a long double
13200                      * format before the 'base' ([efgEFG]) character to
13201                      * the format string. */
13202                     static char const ldblf[] = PERL_PRIfldbl;
13203                     char const *p = ldblf + sizeof(ldblf) - 3;
13204                     while (p >= ldblf) { *--ptr = *p--; }
13205                 }
13206 #endif
13207                 if (has_precis) {
13208                     base = precis;
13209                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
13210                     *--ptr = '.';
13211                 }
13212                 if (width) {
13213                     base = width;
13214                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
13215                 }
13216                 if (fill)
13217                     *--ptr = '0';
13218                 if (left)
13219                     *--ptr = '-';
13220                 if (plus)
13221                     *--ptr = plus;
13222                 if (alt)
13223                     *--ptr = '#';
13224                 *--ptr = '%';
13225
13226                 /* No taint.  Otherwise we are in the strange situation
13227                  * where printf() taints but print($float) doesn't.
13228                  * --jhi */
13229
13230                 /* hopefully the above makes ptr a very constrained format
13231                  * that is safe to use, even though it's not literal */
13232                 GCC_DIAG_IGNORE_STMT(-Wformat-nonliteral);
13233 #ifdef USE_QUADMATH
13234                 {
13235                     if (!quadmath_format_valid(ptr))
13236                         Perl_croak_nocontext("panic: quadmath invalid format \"%s\"", ptr);
13237                     WITH_LC_NUMERIC_SET_TO_NEEDED_IN(in_lc_numeric,
13238                         elen = quadmath_snprintf(PL_efloatbuf, PL_efloatsize,
13239                                                  ptr, nv);
13240                     );
13241                     if ((IV)elen == -1) {
13242                         Perl_croak_nocontext("panic: quadmath_snprintf failed, format \"%s\"", ptr);
13243                     }
13244                 }
13245 #elif defined(HAS_LONG_DOUBLE)
13246                 WITH_LC_NUMERIC_SET_TO_NEEDED_IN(in_lc_numeric,
13247                     elen = ((intsize == 'q')
13248                             ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, fv)
13249                             : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)fv))
13250                 );
13251 #else
13252                 WITH_LC_NUMERIC_SET_TO_NEEDED_IN(in_lc_numeric,
13253                     elen = my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, fv)
13254                 );
13255 #endif
13256                 GCC_DIAG_RESTORE_STMT;
13257             }
13258
13259             eptr = PL_efloatbuf;
13260
13261           float_concat:
13262
13263             /* Since floating-point formats do their own formatting and
13264              * padding, we skip the main block of code at the end of this
13265              * loop which handles appending eptr to sv, and do our own
13266              * stripped-down version */
13267
13268             assert(!zeros);
13269             assert(!esignlen);
13270             assert(elen);
13271             assert(elen >= width);
13272
13273             S_sv_catpvn_simple(aTHX_ sv, eptr, elen);
13274
13275             goto done_valid_conversion;
13276         }
13277
13278             /* SPECIAL */
13279
13280         case 'n':
13281             {
13282                 STRLEN len;
13283                 /* XXX ideally we should warn if any flags etc have been
13284                  * set, e.g. "%-4.5n" */
13285                 /* XXX if sv was originally non-utf8 with a char in the
13286                  * range 0x80-0xff, then if it got upgraded, we should
13287                  * calculate char len rather than byte len here */
13288                 len = SvCUR(sv) - origlen;
13289                 if (args) {
13290                     int i = (len > PERL_INT_MAX) ? PERL_INT_MAX : (int)len;
13291
13292                     switch (intsize) {
13293                     case 'c':  *(va_arg(*args, char*))      = i; break;
13294                     case 'h':  *(va_arg(*args, short*))     = i; break;
13295                     default:   *(va_arg(*args, int*))       = i; break;
13296                     case 'l':  *(va_arg(*args, long*))      = i; break;
13297                     case 'V':  *(va_arg(*args, IV*))        = i; break;
13298                     case 'z':  *(va_arg(*args, SSize_t*))   = i; break;
13299 #ifdef HAS_PTRDIFF_T
13300                     case 't':  *(va_arg(*args, ptrdiff_t*)) = i; break;
13301 #endif
13302                     case 'j':  *(va_arg(*args, PERL_INTMAX_T*)) = i; break;
13303                     case 'q':
13304 #if IVSIZE >= 8
13305                                *(va_arg(*args, Quad_t*))    = i; break;
13306 #else
13307                                goto unknown;
13308 #endif
13309                     }
13310                 }
13311                 else {
13312                     if (arg_missing)
13313                         Perl_croak_nocontext(
13314                             "Missing argument for %%n in %s",
13315                                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
13316                     sv_setuv_mg(argsv, has_utf8
13317                         ? (UV)utf8_length((U8*)SvPVX(sv), (U8*)SvEND(sv))
13318                         : (UV)len);
13319                 }
13320                 goto done_valid_conversion;
13321             }
13322
13323             /* UNKNOWN */
13324
13325         default:
13326       unknown:
13327             if (!args
13328                 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
13329                 && ckWARN(WARN_PRINTF))
13330             {
13331                 SV * const msg = sv_newmortal();
13332                 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
13333                           (PL_op->op_type == OP_PRTF) ? "" : "s");
13334                 if (fmtstart < patend) {
13335                     const char * const fmtend = q < patend ? q : patend;
13336                     const char * f;
13337                     sv_catpvs(msg, "\"%");
13338                     for (f = fmtstart; f < fmtend; f++) {
13339                         if (isPRINT(*f)) {
13340                             sv_catpvn_nomg(msg, f, 1);
13341                         } else {
13342                             Perl_sv_catpvf(aTHX_ msg,
13343                                            "\\%03" UVof, (UV)*f & 0xFF);
13344                         }
13345                     }
13346                     sv_catpvs(msg, "\"");
13347                 } else {
13348                     sv_catpvs(msg, "end of string");
13349                 }
13350                 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%" SVf, SVfARG(msg)); /* yes, this is reentrant */
13351             }
13352
13353             /* mangled format: output the '%', then continue from the
13354              * character following that */
13355             sv_catpvn_nomg(sv, fmtstart-1, 1);
13356             q = fmtstart;
13357             svix = osvix;
13358             /* Any "redundant arg" warning from now onwards will probably
13359              * just be misleading, so don't bother. */
13360             no_redundant_warning = TRUE;
13361             continue;   /* not "break" */
13362         }
13363
13364         if (is_utf8 != has_utf8) {
13365             if (is_utf8) {
13366                 if (SvCUR(sv))
13367                     sv_utf8_upgrade(sv);
13368             }
13369             else {
13370                 const STRLEN old_elen = elen;
13371                 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
13372                 sv_utf8_upgrade(nsv);
13373                 eptr = SvPVX_const(nsv);
13374                 elen = SvCUR(nsv);
13375
13376                 if (width) { /* fudge width (can't fudge elen) */
13377                     width += elen - old_elen;
13378                 }
13379                 is_utf8 = TRUE;
13380             }
13381         }
13382
13383
13384         /* append esignbuf, filler, zeros, eptr and dotstr to sv */
13385
13386         {
13387             STRLEN need, have, gap;
13388             STRLEN i;
13389             char *s;
13390
13391             /* signed value that's wrapped? */
13392             assert(elen  <= ((~(STRLEN)0) >> 1));
13393
13394             /* if zeros is non-zero, then it represents filler between
13395              * elen and precis. So adding elen and zeros together will
13396              * always be <= precis, and the addition can never wrap */
13397             assert(!zeros || (precis > elen && precis - elen == zeros));
13398             have = elen + zeros;
13399
13400             if (have >= (((STRLEN)~0) - esignlen))
13401                 croak_memory_wrap();
13402             have += esignlen;
13403
13404             need = (have > width ? have : width);
13405             gap = need - have;
13406
13407             if (need >= (((STRLEN)~0) - (SvCUR(sv) + 1)))
13408                 croak_memory_wrap();
13409             need += (SvCUR(sv) + 1);
13410
13411             SvGROW(sv, need);
13412
13413             s = SvEND(sv);
13414
13415             if (left) {
13416                 for (i = 0; i < esignlen; i++)
13417                     *s++ = esignbuf[i];
13418                 for (i = zeros; i; i--)
13419                     *s++ = '0';
13420                 Copy(eptr, s, elen, char);
13421                 s += elen;
13422                 for (i = gap; i; i--)
13423                     *s++ = ' ';
13424             }
13425             else {
13426                 if (fill) {
13427                     for (i = 0; i < esignlen; i++)
13428                         *s++ = esignbuf[i];
13429                     assert(!zeros);
13430                     zeros = gap;
13431                 }
13432                 else {
13433                     for (i = gap; i; i--)
13434                         *s++ = ' ';
13435                     for (i = 0; i < esignlen; i++)
13436                         *s++ = esignbuf[i];
13437                 }
13438
13439                 for (i = zeros; i; i--)
13440                     *s++ = '0';
13441                 Copy(eptr, s, elen, char);
13442                 s += elen;
13443             }
13444
13445             *s = '\0';
13446             SvCUR_set(sv, s - SvPVX_const(sv));
13447
13448             if (is_utf8)
13449                 has_utf8 = TRUE;
13450             if (has_utf8)
13451                 SvUTF8_on(sv);
13452         }
13453
13454         if (vectorize && veclen) {
13455             /* we append the vector separator separately since %v isn't
13456              * very common: don't slow down the general case by adding
13457              * dotstrlen to need etc */
13458             sv_catpvn_nomg(sv, dotstr, dotstrlen);
13459             esignlen = 0;
13460             goto vector; /* do next iteration */
13461         }
13462
13463       done_valid_conversion:
13464
13465         if (arg_missing)
13466             S_warn_vcatpvfn_missing_argument(aTHX);
13467     }
13468
13469     /* Now that we've consumed all our printf format arguments (svix)
13470      * do we have things left on the stack that we didn't use?
13471      */
13472     if (!no_redundant_warning && sv_count >= svix + 1 && ckWARN(WARN_REDUNDANT)) {
13473         Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
13474                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
13475     }
13476
13477     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
13478         /* while we shouldn't set the cache, it may have been previously
13479            set in the caller, so clear it */
13480         MAGIC *mg = mg_find(sv, PERL_MAGIC_utf8);
13481         if (mg)
13482             magic_setutf8(sv,mg); /* clear UTF8 cache */
13483     }
13484     SvTAINT(sv);
13485 }
13486
13487 /* =========================================================================
13488
13489 =for apidoc_section Embedding and Interpreter Cloning
13490
13491 =cut
13492
13493 All the macros and functions in this section are for the private use of
13494 the main function, perl_clone().
13495
13496 The foo_dup() functions make an exact copy of an existing foo thingy.
13497 During the course of a cloning, a hash table is used to map old addresses
13498 to new addresses.  The table is created and manipulated with the
13499 ptr_table_* functions.
13500
13501  * =========================================================================*/
13502
13503
13504 #if defined(USE_ITHREADS)
13505
13506 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
13507 #ifndef GpREFCNT_inc
13508 #  define GpREFCNT_inc(gp)      ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
13509 #endif
13510
13511
13512 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact
13513    that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
13514    If this changes, please unmerge ss_dup.
13515    Likewise, sv_dup_inc_multiple() relies on this fact.  */
13516 #define sv_dup_inc_NN(s,t)      SvREFCNT_inc_NN(sv_dup_inc(s,t))
13517 #define av_dup(s,t)     MUTABLE_AV(sv_dup((const SV *)s,t))
13518 #define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
13519 #define hv_dup(s,t)     MUTABLE_HV(sv_dup((const SV *)s,t))
13520 #define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
13521 #define cv_dup(s,t)     MUTABLE_CV(sv_dup((const SV *)s,t))
13522 #define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t))
13523 #define io_dup(s,t)     MUTABLE_IO(sv_dup((const SV *)s,t))
13524 #define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t))
13525 #define gv_dup(s,t)     MUTABLE_GV(sv_dup((const SV *)s,t))
13526 #define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t))
13527 #define SAVEPV(p)       ((p) ? savepv(p) : NULL)
13528 #define SAVEPVN(p,n)    ((p) ? savepvn(p,n) : NULL)
13529
13530 /* clone a parser */
13531
13532 yy_parser *
13533 Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
13534 {
13535     yy_parser *parser;
13536
13537     PERL_ARGS_ASSERT_PARSER_DUP;
13538
13539     if (!proto)
13540         return NULL;
13541
13542     /* look for it in the table first */
13543     parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
13544     if (parser)
13545         return parser;
13546
13547     /* create anew and remember what it is */
13548     Newxz(parser, 1, yy_parser);
13549     ptr_table_store(PL_ptr_table, proto, parser);
13550
13551     /* XXX eventually, just Copy() most of the parser struct ? */
13552
13553     parser->lex_brackets = proto->lex_brackets;
13554     parser->lex_casemods = proto->lex_casemods;
13555     parser->lex_brackstack = savepvn(proto->lex_brackstack,
13556                     (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
13557     parser->lex_casestack = savepvn(proto->lex_casestack,
13558                     (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
13559     parser->lex_defer   = proto->lex_defer;
13560     parser->lex_dojoin  = proto->lex_dojoin;
13561     parser->lex_formbrack = proto->lex_formbrack;
13562     parser->lex_inpat   = proto->lex_inpat;
13563     parser->lex_inwhat  = proto->lex_inwhat;
13564     parser->lex_op      = proto->lex_op;
13565     parser->lex_repl    = sv_dup_inc(proto->lex_repl, param);
13566     parser->lex_starts  = proto->lex_starts;
13567     parser->lex_stuff   = sv_dup_inc(proto->lex_stuff, param);
13568     parser->multi_close = proto->multi_close;
13569     parser->multi_open  = proto->multi_open;
13570     parser->multi_start = proto->multi_start;
13571     parser->multi_end   = proto->multi_end;
13572     parser->preambled   = proto->preambled;
13573     parser->lex_super_state = proto->lex_super_state;
13574     parser->lex_sub_inwhat  = proto->lex_sub_inwhat;
13575     parser->lex_sub_op  = proto->lex_sub_op;
13576     parser->lex_sub_repl= sv_dup_inc(proto->lex_sub_repl, param);
13577     parser->linestr     = sv_dup_inc(proto->linestr, param);
13578     parser->expect      = proto->expect;
13579     parser->copline     = proto->copline;
13580     parser->last_lop_op = proto->last_lop_op;
13581     parser->lex_state   = proto->lex_state;
13582     parser->rsfp        = fp_dup(proto->rsfp, '<', param);
13583     /* rsfp_filters entries have fake IoDIRP() */
13584     parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
13585     parser->in_my       = proto->in_my;
13586     parser->in_my_stash = hv_dup(proto->in_my_stash, param);
13587     parser->error_count = proto->error_count;
13588     parser->sig_elems   = proto->sig_elems;
13589     parser->sig_optelems= proto->sig_optelems;
13590     parser->sig_slurpy  = proto->sig_slurpy;
13591     parser->recheck_utf8_validity = proto->recheck_utf8_validity;
13592
13593     {
13594         char * const ols = SvPVX(proto->linestr);
13595         char * const ls  = SvPVX(parser->linestr);
13596
13597         parser->bufptr      = ls + (proto->bufptr >= ols ?
13598                                     proto->bufptr -  ols : 0);
13599         parser->oldbufptr   = ls + (proto->oldbufptr >= ols ?
13600                                     proto->oldbufptr -  ols : 0);
13601         parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
13602                                     proto->oldoldbufptr -  ols : 0);
13603         parser->linestart   = ls + (proto->linestart >= ols ?
13604                                     proto->linestart -  ols : 0);
13605         parser->last_uni    = ls + (proto->last_uni >= ols ?
13606                                     proto->last_uni -  ols : 0);
13607         parser->last_lop    = ls + (proto->last_lop >= ols ?
13608                                     proto->last_lop -  ols : 0);
13609
13610         parser->bufend      = ls + SvCUR(parser->linestr);
13611     }
13612
13613     Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
13614
13615
13616     Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
13617     Copy(proto->nexttype, parser->nexttype, 5,  I32);
13618     parser->nexttoke    = proto->nexttoke;
13619
13620     /* XXX should clone saved_curcop here, but we aren't passed
13621      * proto_perl; so do it in perl_clone_using instead */
13622
13623     return parser;
13624 }
13625
13626
13627 /* duplicate a file handle */
13628
13629 PerlIO *
13630 Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
13631 {
13632     PerlIO *ret;
13633
13634     PERL_ARGS_ASSERT_FP_DUP;
13635     PERL_UNUSED_ARG(type);
13636
13637     if (!fp)
13638         return (PerlIO*)NULL;
13639
13640     /* look for it in the table first */
13641     ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
13642     if (ret)
13643         return ret;
13644
13645     /* create anew and remember what it is */
13646 #ifdef __amigaos4__
13647     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE|PERLIO_DUP_FD);
13648 #else
13649     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
13650 #endif
13651     ptr_table_store(PL_ptr_table, fp, ret);
13652     return ret;
13653 }
13654
13655 /* duplicate a directory handle */
13656
13657 DIR *
13658 Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
13659 {
13660     DIR *ret;
13661
13662 #if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
13663     DIR *pwd;
13664     const Direntry_t *dirent;
13665     char smallbuf[256]; /* XXX MAXPATHLEN, surely? */
13666     char *name = NULL;
13667     STRLEN len = 0;
13668     long pos;
13669 #endif
13670
13671     PERL_UNUSED_CONTEXT;
13672     PERL_ARGS_ASSERT_DIRP_DUP;
13673
13674     if (!dp)
13675         return (DIR*)NULL;
13676
13677     /* look for it in the table first */
13678     ret = (DIR*)ptr_table_fetch(PL_ptr_table, dp);
13679     if (ret)
13680         return ret;
13681
13682 #if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
13683
13684     PERL_UNUSED_ARG(param);
13685
13686     /* create anew */
13687
13688     /* open the current directory (so we can switch back) */
13689     if (!(pwd = PerlDir_open("."))) return (DIR *)NULL;
13690
13691     /* chdir to our dir handle and open the present working directory */
13692     if (fchdir(my_dirfd(dp)) < 0 || !(ret = PerlDir_open("."))) {
13693         PerlDir_close(pwd);
13694         return (DIR *)NULL;
13695     }
13696     /* Now we should have two dir handles pointing to the same dir. */
13697
13698     /* Be nice to the calling code and chdir back to where we were. */
13699     /* XXX If this fails, then what? */
13700     PERL_UNUSED_RESULT(fchdir(my_dirfd(pwd)));
13701
13702     /* We have no need of the pwd handle any more. */
13703     PerlDir_close(pwd);
13704
13705 #ifdef DIRNAMLEN
13706 # define d_namlen(d) (d)->d_namlen
13707 #else
13708 # define d_namlen(d) strlen((d)->d_name)
13709 #endif
13710     /* Iterate once through dp, to get the file name at the current posi-
13711        tion. Then step back. */
13712     pos = PerlDir_tell(dp);
13713     if ((dirent = PerlDir_read(dp))) {
13714         len = d_namlen(dirent);
13715         if (len > sizeof(dirent->d_name) && sizeof(dirent->d_name) > PTRSIZE) {
13716             /* If the len is somehow magically longer than the
13717              * maximum length of the directory entry, even though
13718              * we could fit it in a buffer, we could not copy it
13719              * from the dirent.  Bail out. */
13720             PerlDir_close(ret);
13721             return (DIR*)NULL;
13722         }
13723         if (len <= sizeof smallbuf) name = smallbuf;
13724         else Newx(name, len, char);
13725         Move(dirent->d_name, name, len, char);
13726     }
13727     PerlDir_seek(dp, pos);
13728
13729     /* Iterate through the new dir handle, till we find a file with the
13730        right name. */
13731     if (!dirent) /* just before the end */
13732         for(;;) {
13733             pos = PerlDir_tell(ret);
13734             if (PerlDir_read(ret)) continue; /* not there yet */
13735             PerlDir_seek(ret, pos); /* step back */
13736             break;
13737         }
13738     else {
13739         const long pos0 = PerlDir_tell(ret);
13740         for(;;) {
13741             pos = PerlDir_tell(ret);
13742             if ((dirent = PerlDir_read(ret))) {
13743                 if (len == (STRLEN)d_namlen(dirent)
13744                     && memEQ(name, dirent->d_name, len)) {
13745                     /* found it */
13746                     PerlDir_seek(ret, pos); /* step back */
13747                     break;
13748                 }
13749                 /* else we are not there yet; keep iterating */
13750             }
13751             else { /* This is not meant to happen. The best we can do is
13752                       reset the iterator to the beginning. */
13753                 PerlDir_seek(ret, pos0);
13754                 break;
13755             }
13756         }
13757     }
13758 #undef d_namlen
13759
13760     if (name && name != smallbuf)
13761         Safefree(name);
13762 #endif
13763
13764 #ifdef WIN32
13765     ret = win32_dirp_dup(dp, param);
13766 #endif
13767
13768     /* pop it in the pointer table */
13769     if (ret)
13770         ptr_table_store(PL_ptr_table, dp, ret);
13771
13772     return ret;
13773 }
13774
13775 /* duplicate a typeglob */
13776
13777 GP *
13778 Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
13779 {
13780     GP *ret;
13781
13782     PERL_ARGS_ASSERT_GP_DUP;
13783
13784     if (!gp)
13785         return (GP*)NULL;
13786     /* look for it in the table first */
13787     ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
13788     if (ret)
13789         return ret;
13790
13791     /* create anew and remember what it is */
13792     Newxz(ret, 1, GP);
13793     ptr_table_store(PL_ptr_table, gp, ret);
13794
13795     /* clone */
13796     /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
13797        on Newxz() to do this for us.  */
13798     ret->gp_sv          = sv_dup_inc(gp->gp_sv, param);
13799     ret->gp_io          = io_dup_inc(gp->gp_io, param);
13800     ret->gp_form        = cv_dup_inc(gp->gp_form, param);
13801     ret->gp_av          = av_dup_inc(gp->gp_av, param);
13802     ret->gp_hv          = hv_dup_inc(gp->gp_hv, param);
13803     ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
13804     ret->gp_cv          = cv_dup_inc(gp->gp_cv, param);
13805     ret->gp_cvgen       = gp->gp_cvgen;
13806     ret->gp_line        = gp->gp_line;
13807     ret->gp_file_hek    = hek_dup(gp->gp_file_hek, param);
13808     return ret;
13809 }
13810
13811 /* duplicate a chain of magic */
13812
13813 MAGIC *
13814 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
13815 {
13816     MAGIC *mgret = NULL;
13817     MAGIC **mgprev_p = &mgret;
13818
13819     PERL_ARGS_ASSERT_MG_DUP;
13820
13821     for (; mg; mg = mg->mg_moremagic) {
13822         MAGIC *nmg;
13823
13824         if ((param->flags & CLONEf_JOIN_IN)
13825                 && mg->mg_type == PERL_MAGIC_backref)
13826             /* when joining, we let the individual SVs add themselves to
13827              * backref as needed. */
13828             continue;
13829
13830         Newx(nmg, 1, MAGIC);
13831         *mgprev_p = nmg;
13832         mgprev_p = &(nmg->mg_moremagic);
13833
13834         /* There was a comment "XXX copy dynamic vtable?" but as we don't have
13835            dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
13836            from the original commit adding Perl_mg_dup() - revision 4538.
13837            Similarly there is the annotation "XXX random ptr?" next to the
13838            assignment to nmg->mg_ptr.  */
13839         *nmg = *mg;
13840
13841         /* FIXME for plugins
13842         if (nmg->mg_type == PERL_MAGIC_qr) {
13843             nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
13844         }
13845         else
13846         */
13847         nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
13848                           ? nmg->mg_type == PERL_MAGIC_backref
13849                                 /* The backref AV has its reference
13850                                  * count deliberately bumped by 1 */
13851                                 ? SvREFCNT_inc(av_dup_inc((const AV *)
13852                                                     nmg->mg_obj, param))
13853                                 : sv_dup_inc(nmg->mg_obj, param)
13854                           : (nmg->mg_type == PERL_MAGIC_regdatum ||
13855                              nmg->mg_type == PERL_MAGIC_regdata)
13856                                   ? nmg->mg_obj
13857                                   : sv_dup(nmg->mg_obj, param);
13858
13859         if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
13860             if (nmg->mg_len > 0) {
13861                 nmg->mg_ptr     = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
13862                 if (nmg->mg_type == PERL_MAGIC_overload_table &&
13863                         AMT_AMAGIC((AMT*)nmg->mg_ptr))
13864                 {
13865                     AMT * const namtp = (AMT*)nmg->mg_ptr;
13866                     sv_dup_inc_multiple((SV**)(namtp->table),
13867                                         (SV**)(namtp->table), NofAMmeth, param);
13868                 }
13869             }
13870             else if (nmg->mg_len == HEf_SVKEY)
13871                 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
13872         }
13873         if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
13874             nmg->mg_virtual->svt_dup(aTHX_ nmg, param);
13875         }
13876     }
13877     return mgret;
13878 }
13879
13880 #endif /* USE_ITHREADS */
13881
13882 struct ptr_tbl_arena {
13883     struct ptr_tbl_arena *next;
13884     struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers.  */
13885 };
13886
13887 /* create a new pointer-mapping table */
13888
13889 PTR_TBL_t *
13890 Perl_ptr_table_new(pTHX)
13891 {
13892     PTR_TBL_t *tbl;
13893     PERL_UNUSED_CONTEXT;
13894
13895     Newx(tbl, 1, PTR_TBL_t);
13896     tbl->tbl_max        = 511;
13897     tbl->tbl_items      = 0;
13898     tbl->tbl_arena      = NULL;
13899     tbl->tbl_arena_next = NULL;
13900     tbl->tbl_arena_end  = NULL;
13901     Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
13902     return tbl;
13903 }
13904
13905 #define PTR_TABLE_HASH(ptr) \
13906   ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
13907
13908 /* map an existing pointer using a table */
13909
13910 STATIC PTR_TBL_ENT_t *
13911 S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
13912 {
13913     PTR_TBL_ENT_t *tblent;
13914     const UV hash = PTR_TABLE_HASH(sv);
13915
13916     PERL_ARGS_ASSERT_PTR_TABLE_FIND;
13917
13918     tblent = tbl->tbl_ary[hash & tbl->tbl_max];
13919     for (; tblent; tblent = tblent->next) {
13920         if (tblent->oldval == sv)
13921             return tblent;
13922     }
13923     return NULL;
13924 }
13925
13926 void *
13927 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
13928 {
13929     PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
13930
13931     PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
13932     PERL_UNUSED_CONTEXT;
13933
13934     return tblent ? tblent->newval : NULL;
13935 }
13936
13937 /* add a new entry to a pointer-mapping table 'tbl'.  In hash terms, 'oldsv' is
13938  * the key; 'newsv' is the value.  The names "old" and "new" are specific to
13939  * the core's typical use of ptr_tables in thread cloning. */
13940
13941 void
13942 Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
13943 {
13944     PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
13945
13946     PERL_ARGS_ASSERT_PTR_TABLE_STORE;
13947     PERL_UNUSED_CONTEXT;
13948
13949     if (tblent) {
13950         tblent->newval = newsv;
13951     } else {
13952         const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
13953
13954         if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
13955             struct ptr_tbl_arena *new_arena;
13956
13957             Newx(new_arena, 1, struct ptr_tbl_arena);
13958             new_arena->next = tbl->tbl_arena;
13959             tbl->tbl_arena = new_arena;
13960             tbl->tbl_arena_next = new_arena->array;
13961             tbl->tbl_arena_end = C_ARRAY_END(new_arena->array);
13962         }
13963
13964         tblent = tbl->tbl_arena_next++;
13965
13966         tblent->oldval = oldsv;
13967         tblent->newval = newsv;
13968         tblent->next = tbl->tbl_ary[entry];
13969         tbl->tbl_ary[entry] = tblent;
13970         tbl->tbl_items++;
13971         if (tblent->next && tbl->tbl_items > tbl->tbl_max)
13972             ptr_table_split(tbl);
13973     }
13974 }
13975
13976 /* double the hash bucket size of an existing ptr table */
13977
13978 void
13979 Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
13980 {
13981     PTR_TBL_ENT_t **ary = tbl->tbl_ary;
13982     const UV oldsize = tbl->tbl_max + 1;
13983     UV newsize = oldsize * 2;
13984     UV i;
13985
13986     PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
13987     PERL_UNUSED_CONTEXT;
13988
13989     Renew(ary, newsize, PTR_TBL_ENT_t*);
13990     Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
13991     tbl->tbl_max = --newsize;
13992     tbl->tbl_ary = ary;
13993     for (i=0; i < oldsize; i++, ary++) {
13994         PTR_TBL_ENT_t **entp = ary;
13995         PTR_TBL_ENT_t *ent = *ary;
13996         PTR_TBL_ENT_t **curentp;
13997         if (!ent)
13998             continue;
13999         curentp = ary + oldsize;
14000         do {
14001             if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
14002                 *entp = ent->next;
14003                 ent->next = *curentp;
14004                 *curentp = ent;
14005             }
14006             else
14007                 entp = &ent->next;
14008             ent = *entp;
14009         } while (ent);
14010     }
14011 }
14012
14013 /* remove all the entries from a ptr table */
14014 /* Deprecated - will be removed post 5.14 */
14015
14016 void
14017 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
14018 {
14019     PERL_UNUSED_CONTEXT;
14020     if (tbl && tbl->tbl_items) {
14021         struct ptr_tbl_arena *arena = tbl->tbl_arena;
14022
14023         Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent *);
14024
14025         while (arena) {
14026             struct ptr_tbl_arena *next = arena->next;
14027
14028             Safefree(arena);
14029             arena = next;
14030         };
14031
14032         tbl->tbl_items = 0;
14033         tbl->tbl_arena = NULL;
14034         tbl->tbl_arena_next = NULL;
14035         tbl->tbl_arena_end = NULL;
14036     }
14037 }
14038
14039 /* clear and free a ptr table */
14040
14041 void
14042 Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
14043 {
14044     struct ptr_tbl_arena *arena;
14045
14046     PERL_UNUSED_CONTEXT;
14047
14048     if (!tbl) {
14049         return;
14050     }
14051
14052     arena = tbl->tbl_arena;
14053
14054     while (arena) {
14055         struct ptr_tbl_arena *next = arena->next;
14056
14057         Safefree(arena);
14058         arena = next;
14059     }
14060
14061     Safefree(tbl->tbl_ary);
14062     Safefree(tbl);
14063 }
14064
14065 #if defined(USE_ITHREADS)
14066
14067 void
14068 Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
14069 {
14070     PERL_ARGS_ASSERT_RVPV_DUP;
14071
14072     assert(!isREGEXP(sstr));
14073     if (SvROK(sstr)) {
14074         if (SvWEAKREF(sstr)) {
14075             SvRV_set(dstr, sv_dup(SvRV_const(sstr), param));
14076             if (param->flags & CLONEf_JOIN_IN) {
14077                 /* if joining, we add any back references individually rather
14078                  * than copying the whole backref array */
14079                 Perl_sv_add_backref(aTHX_ SvRV(dstr), dstr);
14080             }
14081         }
14082         else
14083             SvRV_set(dstr, sv_dup_inc(SvRV_const(sstr), param));
14084     }
14085     else if (SvPVX_const(sstr)) {
14086         /* Has something there */
14087         if (SvLEN(sstr)) {
14088             /* Normal PV - clone whole allocated space */
14089             SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
14090             /* sstr may not be that normal, but actually copy on write.
14091                But we are a true, independent SV, so:  */
14092             SvIsCOW_off(dstr);
14093         }
14094         else {
14095             /* Special case - not normally malloced for some reason */
14096             if (isGV_with_GP(sstr)) {
14097                 /* Don't need to do anything here.  */
14098             }
14099             else if ((SvIsCOW(sstr))) {
14100                 /* A "shared" PV - clone it as "shared" PV */
14101                 SvPV_set(dstr,
14102                          HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
14103                                          param)));
14104             }
14105             else {
14106                 /* Some other special case - random pointer */
14107                 SvPV_set(dstr, (char *) SvPVX_const(sstr));             
14108             }
14109         }
14110     }
14111     else {
14112         /* Copy the NULL */
14113         SvPV_set(dstr, NULL);
14114     }
14115 }
14116
14117 /* duplicate a list of SVs. source and dest may point to the same memory.  */
14118 static SV **
14119 S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
14120                       SSize_t items, CLONE_PARAMS *const param)
14121 {
14122     PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
14123
14124     while (items-- > 0) {
14125         *dest++ = sv_dup_inc(*source++, param);
14126     }
14127
14128     return dest;
14129 }
14130
14131 /* duplicate an SV of any type (including AV, HV etc) */
14132
14133 static SV *
14134 S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
14135 {
14136     SV *dstr;
14137
14138     PERL_ARGS_ASSERT_SV_DUP_COMMON;
14139
14140     if (SvTYPE(sstr) == (svtype)SVTYPEMASK) {
14141 #ifdef DEBUG_LEAKING_SCALARS_ABORT
14142         abort();
14143 #endif
14144         return NULL;
14145     }
14146     /* look for it in the table first */
14147     dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
14148     if (dstr)
14149         return dstr;
14150
14151     if(param->flags & CLONEf_JOIN_IN) {
14152         /** We are joining here so we don't want do clone
14153             something that is bad **/
14154         if (SvTYPE(sstr) == SVt_PVHV) {
14155             const HEK * const hvname = HvNAME_HEK(sstr);
14156             if (hvname) {
14157                 /** don't clone stashes if they already exist **/
14158                 dstr = MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
14159                                                 HEK_UTF8(hvname) ? SVf_UTF8 : 0));
14160                 ptr_table_store(PL_ptr_table, sstr, dstr);
14161                 return dstr;
14162             }
14163         }
14164         else if (SvTYPE(sstr) == SVt_PVGV && !SvFAKE(sstr)) {
14165             HV *stash = GvSTASH(sstr);
14166             const HEK * hvname;
14167             if (stash && (hvname = HvNAME_HEK(stash))) {
14168                 /** don't clone GVs if they already exist **/
14169                 SV **svp;
14170                 stash = gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
14171                                     HEK_UTF8(hvname) ? SVf_UTF8 : 0);
14172                 svp = hv_fetch(
14173                         stash, GvNAME(sstr),
14174                         GvNAMEUTF8(sstr)
14175                             ? -GvNAMELEN(sstr)
14176                             :  GvNAMELEN(sstr),
14177                         0
14178                       );
14179                 if (svp && *svp && SvTYPE(*svp) == SVt_PVGV) {
14180                     ptr_table_store(PL_ptr_table, sstr, *svp);
14181                     return *svp;
14182                 }
14183             }
14184         }
14185     }
14186
14187     /* create anew and remember what it is */
14188     new_SV(dstr);
14189
14190 #ifdef DEBUG_LEAKING_SCALARS
14191     dstr->sv_debug_optype = sstr->sv_debug_optype;
14192     dstr->sv_debug_line = sstr->sv_debug_line;
14193     dstr->sv_debug_inpad = sstr->sv_debug_inpad;
14194     dstr->sv_debug_parent = (SV*)sstr;
14195     FREE_SV_DEBUG_FILE(dstr);
14196     dstr->sv_debug_file = savesharedpv(sstr->sv_debug_file);
14197 #endif
14198
14199     ptr_table_store(PL_ptr_table, sstr, dstr);
14200
14201     /* clone */
14202     SvFLAGS(dstr)       = SvFLAGS(sstr);
14203     SvFLAGS(dstr)       &= ~SVf_OOK;            /* don't propagate OOK hack */
14204     SvREFCNT(dstr)      = 0;                    /* must be before any other dups! */
14205
14206 #ifdef DEBUGGING
14207     if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
14208         PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
14209                       (void*)PL_watch_pvx, SvPVX_const(sstr));
14210 #endif
14211
14212     /* don't clone objects whose class has asked us not to */
14213     if (SvOBJECT(sstr)
14214      && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE))
14215     {
14216         SvFLAGS(dstr) = 0;
14217         return dstr;
14218     }
14219
14220     switch (SvTYPE(sstr)) {
14221     case SVt_NULL:
14222         SvANY(dstr)     = NULL;
14223         break;
14224     case SVt_IV:
14225         SET_SVANY_FOR_BODYLESS_IV(dstr);
14226         if(SvROK(sstr)) {
14227             Perl_rvpv_dup(aTHX_ dstr, sstr, param);
14228         } else {
14229             SvIV_set(dstr, SvIVX(sstr));
14230         }
14231         break;
14232     case SVt_NV:
14233 #if NVSIZE <= IVSIZE
14234         SET_SVANY_FOR_BODYLESS_NV(dstr);
14235 #else
14236         SvANY(dstr)     = new_XNV();
14237 #endif
14238         SvNV_set(dstr, SvNVX(sstr));
14239         break;
14240     default:
14241         {
14242             /* These are all the types that need complex bodies allocating.  */
14243             void *new_body;
14244             const svtype sv_type = SvTYPE(sstr);
14245             const struct body_details *const sv_type_details
14246                 = bodies_by_type + sv_type;
14247
14248             switch (sv_type) {
14249             default:
14250                 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
14251                 NOT_REACHED; /* NOTREACHED */
14252                 break;
14253
14254             case SVt_PVGV:
14255             case SVt_PVIO:
14256             case SVt_PVFM:
14257             case SVt_PVHV:
14258             case SVt_PVAV:
14259             case SVt_PVCV:
14260             case SVt_PVLV:
14261             case SVt_REGEXP:
14262             case SVt_PVMG:
14263             case SVt_PVNV:
14264             case SVt_PVIV:
14265             case SVt_INVLIST:
14266             case SVt_PV:
14267                 assert(sv_type_details->body_size);
14268                 if (sv_type_details->arena) {
14269                     new_body_inline(new_body, sv_type);
14270                     new_body
14271                         = (void*)((char*)new_body - sv_type_details->offset);
14272                 } else {
14273                     new_body = new_NOARENA(sv_type_details);
14274                 }
14275             }
14276             assert(new_body);
14277             SvANY(dstr) = new_body;
14278
14279 #ifndef PURIFY
14280             Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
14281                  ((char*)SvANY(dstr)) + sv_type_details->offset,
14282                  sv_type_details->copy, char);
14283 #else
14284             Copy(((char*)SvANY(sstr)),
14285                  ((char*)SvANY(dstr)),
14286                  sv_type_details->body_size + sv_type_details->offset, char);
14287 #endif
14288
14289             if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
14290                 && !isGV_with_GP(dstr)
14291                 && !isREGEXP(dstr)
14292                 && !(sv_type == SVt_PVIO && !(IoFLAGS(dstr) & IOf_FAKE_DIRP)))
14293                 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
14294
14295             /* The Copy above means that all the source (unduplicated) pointers
14296                are now in the destination.  We can check the flags and the
14297                pointers in either, but it's possible that there's less cache
14298                missing by always going for the destination.
14299                FIXME - instrument and check that assumption  */
14300             if (sv_type >= SVt_PVMG) {
14301                 if (SvMAGIC(dstr))
14302                     SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
14303                 if (SvOBJECT(dstr) && SvSTASH(dstr))
14304                     SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
14305                 else SvSTASH_set(dstr, 0); /* don't copy DESTROY cache */
14306             }
14307
14308             /* The cast silences a GCC warning about unhandled types.  */
14309             switch ((int)sv_type) {
14310             case SVt_PV:
14311                 break;
14312             case SVt_PVIV:
14313                 break;
14314             case SVt_PVNV:
14315                 break;
14316             case SVt_PVMG:
14317                 break;
14318             case SVt_REGEXP:
14319               duprex:
14320                 /* FIXME for plugins */
14321                 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
14322                 break;
14323             case SVt_PVLV:
14324                 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
14325                 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
14326                     LvTARG(dstr) = dstr;
14327                 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
14328                     LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
14329                 else
14330                     LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
14331                 if (isREGEXP(sstr)) goto duprex;
14332                 /* FALLTHROUGH */
14333             case SVt_PVGV:
14334                 /* non-GP case already handled above */
14335                 if(isGV_with_GP(sstr)) {
14336                     GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
14337                     /* Don't call sv_add_backref here as it's going to be
14338                        created as part of the magic cloning of the symbol
14339                        table--unless this is during a join and the stash
14340                        is not actually being cloned.  */
14341                     /* Danger Will Robinson - GvGP(dstr) isn't initialised
14342                        at the point of this comment.  */
14343                     GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
14344                     if (param->flags & CLONEf_JOIN_IN)
14345                         Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
14346                     GvGP_set(dstr, gp_dup(GvGP(sstr), param));
14347                     (void)GpREFCNT_inc(GvGP(dstr));
14348                 }
14349                 break;
14350             case SVt_PVIO:
14351                 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
14352                 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
14353                     /* I have no idea why fake dirp (rsfps)
14354                        should be treated differently but otherwise
14355                        we end up with leaks -- sky*/
14356                     IoTOP_GV(dstr)      = gv_dup_inc(IoTOP_GV(dstr), param);
14357                     IoFMT_GV(dstr)      = gv_dup_inc(IoFMT_GV(dstr), param);
14358                     IoBOTTOM_GV(dstr)   = gv_dup_inc(IoBOTTOM_GV(dstr), param);
14359                 } else {
14360                     IoTOP_GV(dstr)      = gv_dup(IoTOP_GV(dstr), param);
14361                     IoFMT_GV(dstr)      = gv_dup(IoFMT_GV(dstr), param);
14362                     IoBOTTOM_GV(dstr)   = gv_dup(IoBOTTOM_GV(dstr), param);
14363                     if (IoDIRP(dstr)) {
14364                         IoDIRP(dstr)    = dirp_dup(IoDIRP(dstr), param);
14365                     } else {
14366                         NOOP;
14367                         /* IoDIRP(dstr) is already a copy of IoDIRP(sstr)  */
14368                     }
14369                     IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(dstr), param);
14370                 }
14371                 if (IoOFP(dstr) == IoIFP(sstr))
14372                     IoOFP(dstr) = IoIFP(dstr);
14373                 else
14374                     IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
14375                 IoTOP_NAME(dstr)        = SAVEPV(IoTOP_NAME(dstr));
14376                 IoFMT_NAME(dstr)        = SAVEPV(IoFMT_NAME(dstr));
14377                 IoBOTTOM_NAME(dstr)     = SAVEPV(IoBOTTOM_NAME(dstr));
14378                 break;
14379             case SVt_PVAV:
14380                 /* avoid cloning an empty array */
14381                 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
14382                     SV **dst_ary, **src_ary;
14383                     SSize_t items = AvFILLp((const AV *)sstr) + 1;
14384
14385                     src_ary = AvARRAY((const AV *)sstr);
14386                     Newx(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
14387                     ptr_table_store(PL_ptr_table, src_ary, dst_ary);
14388                     AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
14389                     AvALLOC((const AV *)dstr) = dst_ary;
14390                     if (AvREAL((const AV *)sstr)) {
14391                         dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
14392                                                       param);
14393                     }
14394                     else {
14395                         while (items-- > 0)
14396                             *dst_ary++ = sv_dup(*src_ary++, param);
14397                     }
14398                     items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
14399                     while (items-- > 0) {
14400                         *dst_ary++ = NULL;
14401                     }
14402                 }
14403                 else {
14404                     AvARRAY(MUTABLE_AV(dstr))   = NULL;
14405                     AvALLOC((const AV *)dstr)   = (SV**)NULL;
14406                     AvMAX(  (const AV *)dstr)   = -1;
14407                     AvFILLp((const AV *)dstr)   = -1;
14408                 }
14409                 break;
14410             case SVt_PVHV:
14411                 if (HvARRAY((const HV *)sstr)) {
14412                     STRLEN i = 0;
14413                     const bool sharekeys = !!HvSHAREKEYS(sstr);
14414                     XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
14415                     XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
14416                     char *darray;
14417                     Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
14418                         + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
14419                         char);
14420                     HvARRAY(dstr) = (HE**)darray;
14421                     while (i <= sxhv->xhv_max) {
14422                         const HE * const source = HvARRAY(sstr)[i];
14423                         HvARRAY(dstr)[i] = source
14424                             ? he_dup(source, sharekeys, param) : 0;
14425                         ++i;
14426                     }
14427                     if (SvOOK(sstr)) {
14428                         const struct xpvhv_aux * const saux = HvAUX(sstr);
14429                         struct xpvhv_aux * const daux = HvAUX(dstr);
14430                         /* This flag isn't copied.  */
14431                         SvOOK_on(dstr);
14432
14433                         if (saux->xhv_name_count) {
14434                             HEK ** const sname = saux->xhv_name_u.xhvnameu_names;
14435                             const I32 count
14436                              = saux->xhv_name_count < 0
14437                                 ? -saux->xhv_name_count
14438                                 :  saux->xhv_name_count;
14439                             HEK **shekp = sname + count;
14440                             HEK **dhekp;
14441                             Newx(daux->xhv_name_u.xhvnameu_names, count, HEK *);
14442                             dhekp = daux->xhv_name_u.xhvnameu_names + count;
14443                             while (shekp-- > sname) {
14444                                 dhekp--;
14445                                 *dhekp = hek_dup(*shekp, param);
14446                             }
14447                         }
14448                         else {
14449                             daux->xhv_name_u.xhvnameu_name
14450                                 = hek_dup(saux->xhv_name_u.xhvnameu_name,
14451                                           param);
14452                         }
14453                         daux->xhv_name_count = saux->xhv_name_count;
14454
14455                         daux->xhv_aux_flags = saux->xhv_aux_flags;
14456 #ifdef PERL_HASH_RANDOMIZE_KEYS
14457                         daux->xhv_rand = saux->xhv_rand;
14458                         daux->xhv_last_rand = saux->xhv_last_rand;
14459 #endif
14460                         daux->xhv_riter = saux->xhv_riter;
14461                         daux->xhv_eiter = saux->xhv_eiter
14462                             ? he_dup(saux->xhv_eiter,
14463                                         cBOOL(HvSHAREKEYS(sstr)), param) : 0;
14464                         /* backref array needs refcnt=2; see sv_add_backref */
14465                         daux->xhv_backreferences =
14466                             (param->flags & CLONEf_JOIN_IN)
14467                                 /* when joining, we let the individual GVs and
14468                                  * CVs add themselves to backref as
14469                                  * needed. This avoids pulling in stuff
14470                                  * that isn't required, and simplifies the
14471                                  * case where stashes aren't cloned back
14472                                  * if they already exist in the parent
14473                                  * thread */
14474                             ? NULL
14475                             : saux->xhv_backreferences
14476                                 ? (SvTYPE(saux->xhv_backreferences) == SVt_PVAV)
14477                                     ? MUTABLE_AV(SvREFCNT_inc(
14478                                           sv_dup_inc((const SV *)
14479                                             saux->xhv_backreferences, param)))
14480                                     : MUTABLE_AV(sv_dup((const SV *)
14481                                             saux->xhv_backreferences, param))
14482                                 : 0;
14483
14484                         daux->xhv_mro_meta = saux->xhv_mro_meta
14485                             ? mro_meta_dup(saux->xhv_mro_meta, param)
14486                             : 0;
14487
14488                         /* Record stashes for possible cloning in Perl_clone(). */
14489                         if (HvNAME(sstr))
14490                             av_push(param->stashes, dstr);
14491                     }
14492                 }
14493                 else
14494                     HvARRAY(MUTABLE_HV(dstr)) = NULL;
14495                 break;
14496             case SVt_PVCV:
14497                 if (!(param->flags & CLONEf_COPY_STACKS)) {
14498                     CvDEPTH(dstr) = 0;
14499                 }
14500                 /* FALLTHROUGH */
14501             case SVt_PVFM:
14502                 /* NOTE: not refcounted */
14503                 SvANY(MUTABLE_CV(dstr))->xcv_stash =
14504                     hv_dup(CvSTASH(dstr), param);
14505                 if ((param->flags & CLONEf_JOIN_IN) && CvSTASH(dstr))
14506                     Perl_sv_add_backref(aTHX_ MUTABLE_SV(CvSTASH(dstr)), dstr);
14507                 if (!CvISXSUB(dstr)) {
14508                     OP_REFCNT_LOCK;
14509                     CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
14510                     OP_REFCNT_UNLOCK;
14511                     CvSLABBED_off(dstr);
14512                 } else if (CvCONST(dstr)) {
14513                     CvXSUBANY(dstr).any_ptr =
14514                         sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
14515                 }
14516                 assert(!CvSLABBED(dstr));
14517                 if (CvDYNFILE(dstr)) CvFILE(dstr) = SAVEPV(CvFILE(dstr));
14518                 if (CvNAMED(dstr))
14519                     SvANY((CV *)dstr)->xcv_gv_u.xcv_hek =
14520                         hek_dup(CvNAME_HEK((CV *)sstr), param);
14521                 /* don't dup if copying back - CvGV isn't refcounted, so the
14522                  * duped GV may never be freed. A bit of a hack! DAPM */
14523                 else
14524                   SvANY(MUTABLE_CV(dstr))->xcv_gv_u.xcv_gv =
14525                     CvCVGV_RC(dstr)
14526                     ? gv_dup_inc(CvGV(sstr), param)
14527                     : (param->flags & CLONEf_JOIN_IN)
14528                         ? NULL
14529                         : gv_dup(CvGV(sstr), param);
14530
14531                 if (!CvISXSUB(sstr)) {
14532                     PADLIST * padlist = CvPADLIST(sstr);
14533                     if(padlist)
14534                         padlist = padlist_dup(padlist, param);
14535                     CvPADLIST_set(dstr, padlist);
14536                 } else
14537 /* unthreaded perl can't sv_dup so we dont support unthreaded's CvHSCXT */
14538                     PoisonPADLIST(dstr);
14539
14540                 CvOUTSIDE(dstr) =
14541                     CvWEAKOUTSIDE(sstr)
14542                     ? cv_dup(    CvOUTSIDE(dstr), param)
14543                     : cv_dup_inc(CvOUTSIDE(dstr), param);
14544                 break;
14545             }
14546         }
14547     }
14548
14549     return dstr;
14550  }
14551
14552 SV *
14553 Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
14554 {
14555     PERL_ARGS_ASSERT_SV_DUP_INC;
14556     return sstr ? SvREFCNT_inc(sv_dup_common(sstr, param)) : NULL;
14557 }
14558
14559 SV *
14560 Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
14561 {
14562     SV *dstr = sstr ? sv_dup_common(sstr, param) : NULL;
14563     PERL_ARGS_ASSERT_SV_DUP;
14564
14565     /* Track every SV that (at least initially) had a reference count of 0.
14566        We need to do this by holding an actual reference to it in this array.
14567        If we attempt to cheat, turn AvREAL_off(), and store only pointers
14568        (akin to the stashes hash, and the perl stack), we come unstuck if
14569        a weak reference (or other SV legitimately SvREFCNT() == 0 for this
14570        thread) is manipulated in a CLONE method, because CLONE runs before the
14571        unreferenced array is walked to find SVs still with SvREFCNT() == 0
14572        (and fix things up by giving each a reference via the temps stack).
14573        Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and
14574        then SvREFCNT_dec(), it will be cleaned up (and added to the free list)
14575        before the walk of unreferenced happens and a reference to that is SV
14576        added to the temps stack. At which point we have the same SV considered
14577        to be in use, and free to be re-used. Not good.
14578     */
14579     if (dstr && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dstr)) {
14580         assert(param->unreferenced);
14581         av_push(param->unreferenced, SvREFCNT_inc(dstr));
14582     }
14583
14584     return dstr;
14585 }
14586
14587 /* duplicate a context */
14588
14589 PERL_CONTEXT *
14590 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
14591 {
14592     PERL_CONTEXT *ncxs;
14593
14594     PERL_ARGS_ASSERT_CX_DUP;
14595
14596     if (!cxs)
14597         return (PERL_CONTEXT*)NULL;
14598
14599     /* look for it in the table first */
14600     ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
14601     if (ncxs)
14602         return ncxs;
14603
14604     /* create anew and remember what it is */
14605     Newx(ncxs, max + 1, PERL_CONTEXT);
14606     ptr_table_store(PL_ptr_table, cxs, ncxs);
14607     Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
14608
14609     while (ix >= 0) {
14610         PERL_CONTEXT * const ncx = &ncxs[ix];
14611         if (CxTYPE(ncx) == CXt_SUBST) {
14612             Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
14613         }
14614         else {
14615             ncx->blk_oldcop = (COP*)any_dup(ncx->blk_oldcop, param->proto_perl);
14616             switch (CxTYPE(ncx)) {
14617             case CXt_SUB:
14618                 ncx->blk_sub.cv         = cv_dup_inc(ncx->blk_sub.cv, param);
14619                 if(CxHASARGS(ncx)){
14620                     ncx->blk_sub.savearray = av_dup_inc(ncx->blk_sub.savearray,param);
14621                 } else {
14622                     ncx->blk_sub.savearray = NULL;
14623                 }
14624                 ncx->blk_sub.prevcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
14625                                            ncx->blk_sub.prevcomppad);
14626                 break;
14627             case CXt_EVAL:
14628                 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
14629                                                       param);
14630                 /* XXX should this sv_dup_inc? Or only if CxEVAL_TXT_REFCNTED ???? */
14631                 ncx->blk_eval.cur_text  = sv_dup(ncx->blk_eval.cur_text, param);
14632                 ncx->blk_eval.cv = cv_dup(ncx->blk_eval.cv, param);
14633                 /* XXX what to do with cur_top_env ???? */
14634                 break;
14635             case CXt_LOOP_LAZYSV:
14636                 ncx->blk_loop.state_u.lazysv.end
14637                     = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
14638                 /* Fallthrough: duplicate lazysv.cur by using the ary.ary
14639                    duplication code instead.
14640                    We are taking advantage of (1) av_dup_inc and sv_dup_inc
14641                    actually being the same function, and (2) order
14642                    equivalence of the two unions.
14643                    We can assert the later [but only at run time :-(]  */
14644                 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
14645                         (void *) &ncx->blk_loop.state_u.lazysv.cur);
14646                 /* FALLTHROUGH */
14647             case CXt_LOOP_ARY:
14648                 ncx->blk_loop.state_u.ary.ary
14649                     = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
14650                 /* FALLTHROUGH */
14651             case CXt_LOOP_LIST:
14652             case CXt_LOOP_LAZYIV:
14653                 /* code common to all 'for' CXt_LOOP_* types */
14654                 ncx->blk_loop.itersave =
14655                                     sv_dup_inc(ncx->blk_loop.itersave, param);
14656                 if (CxPADLOOP(ncx)) {
14657                     PADOFFSET off = ncx->blk_loop.itervar_u.svp
14658                                     - &CX_CURPAD_SV(ncx->blk_loop, 0);
14659                     ncx->blk_loop.oldcomppad =
14660                                     (PAD*)ptr_table_fetch(PL_ptr_table,
14661                                                 ncx->blk_loop.oldcomppad);
14662                     ncx->blk_loop.itervar_u.svp =
14663                                     &CX_CURPAD_SV(ncx->blk_loop, off);
14664                 }
14665                 else {
14666                     /* this copies the GV if CXp_FOR_GV, or the SV for an
14667                      * alias (for \$x (...)) - relies on gv_dup being the
14668                      * same as sv_dup */
14669                     ncx->blk_loop.itervar_u.gv
14670                         = gv_dup((const GV *)ncx->blk_loop.itervar_u.gv,
14671                                     param);
14672                 }
14673                 break;
14674             case CXt_LOOP_PLAIN:
14675                 break;
14676             case CXt_FORMAT:
14677                 ncx->blk_format.prevcomppad =
14678                         (PAD*)ptr_table_fetch(PL_ptr_table,
14679                                            ncx->blk_format.prevcomppad);
14680                 ncx->blk_format.cv      = cv_dup_inc(ncx->blk_format.cv, param);
14681                 ncx->blk_format.gv      = gv_dup(ncx->blk_format.gv, param);
14682                 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
14683                                                      param);
14684                 break;
14685             case CXt_GIVEN:
14686                 ncx->blk_givwhen.defsv_save =
14687                                 sv_dup_inc(ncx->blk_givwhen.defsv_save, param);
14688                 break;
14689             case CXt_BLOCK:
14690             case CXt_NULL:
14691             case CXt_WHEN:
14692                 break;
14693             }
14694         }
14695         --ix;
14696     }
14697     return ncxs;
14698 }
14699
14700 /* duplicate a stack info structure */
14701
14702 PERL_SI *
14703 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
14704 {
14705     PERL_SI *nsi;
14706
14707     PERL_ARGS_ASSERT_SI_DUP;
14708
14709     if (!si)
14710         return (PERL_SI*)NULL;
14711
14712     /* look for it in the table first */
14713     nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
14714     if (nsi)
14715         return nsi;
14716
14717     /* create anew and remember what it is */
14718     Newx(nsi, 1, PERL_SI);
14719     ptr_table_store(PL_ptr_table, si, nsi);
14720
14721     nsi->si_stack       = av_dup_inc(si->si_stack, param);
14722     nsi->si_cxix        = si->si_cxix;
14723     nsi->si_cxsubix     = si->si_cxsubix;
14724     nsi->si_cxmax       = si->si_cxmax;
14725     nsi->si_cxstack     = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
14726     nsi->si_type        = si->si_type;
14727     nsi->si_prev        = si_dup(si->si_prev, param);
14728     nsi->si_next        = si_dup(si->si_next, param);
14729     nsi->si_markoff     = si->si_markoff;
14730 #if defined DEBUGGING && !defined DEBUGGING_RE_ONLY
14731     nsi->si_stack_hwm   = 0;
14732 #endif
14733
14734     return nsi;
14735 }
14736
14737 #define POPINT(ss,ix)   ((ss)[--(ix)].any_i32)
14738 #define TOPINT(ss,ix)   ((ss)[ix].any_i32)
14739 #define POPLONG(ss,ix)  ((ss)[--(ix)].any_long)
14740 #define TOPLONG(ss,ix)  ((ss)[ix].any_long)
14741 #define POPIV(ss,ix)    ((ss)[--(ix)].any_iv)
14742 #define TOPIV(ss,ix)    ((ss)[ix].any_iv)
14743 #define POPUV(ss,ix)    ((ss)[--(ix)].any_uv)
14744 #define TOPUV(ss,ix)    ((ss)[ix].any_uv)
14745 #define POPBOOL(ss,ix)  ((ss)[--(ix)].any_bool)
14746 #define TOPBOOL(ss,ix)  ((ss)[ix].any_bool)
14747 #define POPPTR(ss,ix)   ((ss)[--(ix)].any_ptr)
14748 #define TOPPTR(ss,ix)   ((ss)[ix].any_ptr)
14749 #define POPDPTR(ss,ix)  ((ss)[--(ix)].any_dptr)
14750 #define TOPDPTR(ss,ix)  ((ss)[ix].any_dptr)
14751 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
14752 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
14753
14754 /* XXXXX todo */
14755 #define pv_dup_inc(p)   SAVEPV(p)
14756 #define pv_dup(p)       SAVEPV(p)
14757 #define svp_dup_inc(p,pp)       any_dup(p,pp)
14758
14759 /* map any object to the new equivent - either something in the
14760  * ptr table, or something in the interpreter structure
14761  */
14762
14763 void *
14764 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
14765 {
14766     void *ret;
14767
14768     PERL_ARGS_ASSERT_ANY_DUP;
14769
14770     if (!v)
14771         return (void*)NULL;
14772
14773     /* look for it in the table first */
14774     ret = ptr_table_fetch(PL_ptr_table, v);
14775     if (ret)
14776         return ret;
14777
14778     /* see if it is part of the interpreter structure */
14779     if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
14780         ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
14781     else {
14782         ret = v;
14783     }
14784
14785     return ret;
14786 }
14787
14788 /* duplicate the save stack */
14789
14790 ANY *
14791 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
14792 {
14793     ANY * const ss      = proto_perl->Isavestack;
14794     const I32 max       = proto_perl->Isavestack_max + SS_MAXPUSH;
14795     I32 ix              = proto_perl->Isavestack_ix;
14796     ANY *nss;
14797     const SV *sv;
14798     const GV *gv;
14799     const AV *av;
14800     const HV *hv;
14801     void* ptr;
14802     int intval;
14803     long longval;
14804     GP *gp;
14805     IV iv;
14806     I32 i;
14807     char *c = NULL;
14808     void (*dptr) (void*);
14809     void (*dxptr) (pTHX_ void*);
14810
14811     PERL_ARGS_ASSERT_SS_DUP;
14812
14813     Newx(nss, max, ANY);
14814
14815     while (ix > 0) {
14816         const UV uv = POPUV(ss,ix);
14817         const U8 type = (U8)uv & SAVE_MASK;
14818
14819         TOPUV(nss,ix) = uv;
14820         switch (type) {
14821         case SAVEt_CLEARSV:
14822         case SAVEt_CLEARPADRANGE:
14823             break;
14824         case SAVEt_HELEM:               /* hash element */
14825         case SAVEt_SV:                  /* scalar reference */
14826             sv = (const SV *)POPPTR(ss,ix);
14827             TOPPTR(nss,ix) = SvREFCNT_inc(sv_dup_inc(sv, param));
14828             /* FALLTHROUGH */
14829         case SAVEt_ITEM:                        /* normal string */
14830         case SAVEt_GVSV:                        /* scalar slot in GV */
14831             sv = (const SV *)POPPTR(ss,ix);
14832             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14833             if (type == SAVEt_SV)
14834                 break;
14835             /* FALLTHROUGH */
14836         case SAVEt_FREESV:
14837         case SAVEt_MORTALIZESV:
14838         case SAVEt_READONLY_OFF:
14839             sv = (const SV *)POPPTR(ss,ix);
14840             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14841             break;
14842         case SAVEt_FREEPADNAME:
14843             ptr = POPPTR(ss,ix);
14844             TOPPTR(nss,ix) = padname_dup((PADNAME *)ptr, param);
14845             PadnameREFCNT((PADNAME *)TOPPTR(nss,ix))++;
14846             break;
14847         case SAVEt_SHARED_PVREF:                /* char* in shared space */
14848             c = (char*)POPPTR(ss,ix);
14849             TOPPTR(nss,ix) = savesharedpv(c);
14850             ptr = POPPTR(ss,ix);
14851             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14852             break;
14853         case SAVEt_GENERIC_SVREF:               /* generic sv */
14854         case SAVEt_SVREF:                       /* scalar reference */
14855             sv = (const SV *)POPPTR(ss,ix);
14856             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14857             if (type == SAVEt_SVREF)
14858                 SvREFCNT_inc_simple_void((SV *)TOPPTR(nss,ix));
14859             ptr = POPPTR(ss,ix);
14860             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
14861             break;
14862         case SAVEt_GVSLOT:              /* any slot in GV */
14863             sv = (const SV *)POPPTR(ss,ix);
14864             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14865             ptr = POPPTR(ss,ix);
14866             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
14867             sv = (const SV *)POPPTR(ss,ix);
14868             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14869             break;
14870         case SAVEt_HV:                          /* hash reference */
14871         case SAVEt_AV:                          /* array reference */
14872             sv = (const SV *) POPPTR(ss,ix);
14873             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14874             /* FALLTHROUGH */
14875         case SAVEt_COMPPAD:
14876         case SAVEt_NSTAB:
14877             sv = (const SV *) POPPTR(ss,ix);
14878             TOPPTR(nss,ix) = sv_dup(sv, param);
14879             break;
14880         case SAVEt_INT:                         /* int reference */
14881             ptr = POPPTR(ss,ix);
14882             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14883             intval = (int)POPINT(ss,ix);
14884             TOPINT(nss,ix) = intval;
14885             break;
14886         case SAVEt_LONG:                        /* long reference */
14887             ptr = POPPTR(ss,ix);
14888             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14889             longval = (long)POPLONG(ss,ix);
14890             TOPLONG(nss,ix) = longval;
14891             break;
14892         case SAVEt_I32:                         /* I32 reference */
14893             ptr = POPPTR(ss,ix);
14894             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14895             i = POPINT(ss,ix);
14896             TOPINT(nss,ix) = i;
14897             break;
14898         case SAVEt_IV:                          /* IV reference */
14899         case SAVEt_STRLEN:                      /* STRLEN/size_t ref */
14900             ptr = POPPTR(ss,ix);
14901             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14902             iv = POPIV(ss,ix);
14903             TOPIV(nss,ix) = iv;
14904             break;
14905         case SAVEt_TMPSFLOOR:
14906             iv = POPIV(ss,ix);
14907             TOPIV(nss,ix) = iv;
14908             break;
14909         case SAVEt_HPTR:                        /* HV* reference */
14910         case SAVEt_APTR:                        /* AV* reference */
14911         case SAVEt_SPTR:                        /* SV* reference */
14912             ptr = POPPTR(ss,ix);
14913             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14914             sv = (const SV *)POPPTR(ss,ix);
14915             TOPPTR(nss,ix) = sv_dup(sv, param);
14916             break;
14917         case SAVEt_VPTR:                        /* random* reference */
14918             ptr = POPPTR(ss,ix);
14919             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14920             /* FALLTHROUGH */
14921         case SAVEt_INT_SMALL:
14922         case SAVEt_I32_SMALL:
14923         case SAVEt_I16:                         /* I16 reference */
14924         case SAVEt_I8:                          /* I8 reference */
14925         case SAVEt_BOOL:
14926             ptr = POPPTR(ss,ix);
14927             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14928             break;
14929         case SAVEt_GENERIC_PVREF:               /* generic char* */
14930         case SAVEt_PPTR:                        /* char* reference */
14931             ptr = POPPTR(ss,ix);
14932             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14933             c = (char*)POPPTR(ss,ix);
14934             TOPPTR(nss,ix) = pv_dup(c);
14935             break;
14936         case SAVEt_GP:                          /* scalar reference */
14937             gp = (GP*)POPPTR(ss,ix);
14938             TOPPTR(nss,ix) = gp = gp_dup(gp, param);
14939             (void)GpREFCNT_inc(gp);
14940             gv = (const GV *)POPPTR(ss,ix);
14941             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
14942             break;
14943         case SAVEt_FREEOP:
14944             ptr = POPPTR(ss,ix);
14945             if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
14946                 /* these are assumed to be refcounted properly */
14947                 OP *o;
14948                 switch (((OP*)ptr)->op_type) {
14949                 case OP_LEAVESUB:
14950                 case OP_LEAVESUBLV:
14951                 case OP_LEAVEEVAL:
14952                 case OP_LEAVE:
14953                 case OP_SCOPE:
14954                 case OP_LEAVEWRITE:
14955                     TOPPTR(nss,ix) = ptr;
14956                     o = (OP*)ptr;
14957                     OP_REFCNT_LOCK;
14958                     (void) OpREFCNT_inc(o);
14959                     OP_REFCNT_UNLOCK;
14960                     break;
14961                 default:
14962                     TOPPTR(nss,ix) = NULL;
14963                     break;
14964                 }
14965             }
14966             else
14967                 TOPPTR(nss,ix) = NULL;
14968             break;
14969         case SAVEt_FREECOPHH:
14970             ptr = POPPTR(ss,ix);
14971             TOPPTR(nss,ix) = cophh_copy((COPHH *)ptr);
14972             break;
14973         case SAVEt_ADELETE:
14974             av = (const AV *)POPPTR(ss,ix);
14975             TOPPTR(nss,ix) = av_dup_inc(av, param);
14976             i = POPINT(ss,ix);
14977             TOPINT(nss,ix) = i;
14978             break;
14979         case SAVEt_DELETE:
14980             hv = (const HV *)POPPTR(ss,ix);
14981             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
14982             i = POPINT(ss,ix);
14983             TOPINT(nss,ix) = i;
14984             /* FALLTHROUGH */
14985         case SAVEt_FREEPV:
14986             c = (char*)POPPTR(ss,ix);
14987             TOPPTR(nss,ix) = pv_dup_inc(c);
14988             break;
14989         case SAVEt_STACK_POS:           /* Position on Perl stack */
14990             i = POPINT(ss,ix);
14991             TOPINT(nss,ix) = i;
14992             break;
14993         case SAVEt_DESTRUCTOR:
14994             ptr = POPPTR(ss,ix);
14995             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
14996             dptr = POPDPTR(ss,ix);
14997             TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
14998                                         any_dup(FPTR2DPTR(void *, dptr),
14999                                                 proto_perl));
15000             break;
15001         case SAVEt_DESTRUCTOR_X:
15002             ptr = POPPTR(ss,ix);
15003             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
15004             dxptr = POPDXPTR(ss,ix);
15005             TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
15006                                          any_dup(FPTR2DPTR(void *, dxptr),
15007                                                  proto_perl));
15008             break;
15009         case SAVEt_REGCONTEXT:
15010         case SAVEt_ALLOC:
15011             ix -= uv >> SAVE_TIGHT_SHIFT;
15012             break;
15013         case SAVEt_AELEM:               /* array element */
15014             sv = (const SV *)POPPTR(ss,ix);
15015             TOPPTR(nss,ix) = SvREFCNT_inc(sv_dup_inc(sv, param));
15016             iv = POPIV(ss,ix);
15017             TOPIV(nss,ix) = iv;
15018             av = (const AV *)POPPTR(ss,ix);
15019             TOPPTR(nss,ix) = av_dup_inc(av, param);
15020             break;
15021         case SAVEt_OP:
15022             ptr = POPPTR(ss,ix);
15023             TOPPTR(nss,ix) = ptr;
15024             break;
15025         case SAVEt_HINTS_HH:
15026             hv = (const HV *)POPPTR(ss,ix);
15027             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
15028             /* FALLTHROUGH */
15029         case SAVEt_HINTS:
15030             ptr = POPPTR(ss,ix);
15031             ptr = cophh_copy((COPHH*)ptr);
15032             TOPPTR(nss,ix) = ptr;
15033             i = POPINT(ss,ix);
15034             TOPINT(nss,ix) = i;
15035             break;
15036         case SAVEt_PADSV_AND_MORTALIZE:
15037             longval = (long)POPLONG(ss,ix);
15038             TOPLONG(nss,ix) = longval;
15039             ptr = POPPTR(ss,ix);
15040             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
15041             sv = (const SV *)POPPTR(ss,ix);
15042             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
15043             break;
15044         case SAVEt_SET_SVFLAGS:
15045             i = POPINT(ss,ix);
15046             TOPINT(nss,ix) = i;
15047             i = POPINT(ss,ix);
15048             TOPINT(nss,ix) = i;
15049             sv = (const SV *)POPPTR(ss,ix);
15050             TOPPTR(nss,ix) = sv_dup(sv, param);
15051             break;
15052         case SAVEt_COMPILE_WARNINGS:
15053             ptr = POPPTR(ss,ix);
15054             TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
15055             break;
15056         case SAVEt_PARSER:
15057             ptr = POPPTR(ss,ix);
15058             TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
15059             break;
15060         default:
15061             Perl_croak(aTHX_
15062                        "panic: ss_dup inconsistency (%" IVdf ")", (IV) type);
15063         }
15064     }
15065
15066     return nss;
15067 }
15068
15069
15070 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
15071  * flag to the result. This is done for each stash before cloning starts,
15072  * so we know which stashes want their objects cloned */
15073
15074 static void
15075 do_mark_cloneable_stash(pTHX_ SV *const sv)
15076 {
15077     const HEK * const hvname = HvNAME_HEK((const HV *)sv);
15078     if (hvname) {
15079         GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
15080         SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
15081         if (cloner && GvCV(cloner)) {
15082             dSP;
15083             UV status;
15084
15085             ENTER;
15086             SAVETMPS;
15087             PUSHMARK(SP);
15088             mXPUSHs(newSVhek(hvname));
15089             PUTBACK;
15090             call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
15091             SPAGAIN;
15092             status = POPu;
15093             PUTBACK;
15094             FREETMPS;
15095             LEAVE;
15096             if (status)
15097                 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
15098         }
15099     }
15100 }
15101
15102
15103
15104 /*
15105 =for apidoc perl_clone
15106
15107 Create and return a new interpreter by cloning the current one.
15108
15109 C<perl_clone> takes these flags as parameters:
15110
15111 C<CLONEf_COPY_STACKS> - is used to, well, copy the stacks also,
15112 without it we only clone the data and zero the stacks,
15113 with it we copy the stacks and the new perl interpreter is
15114 ready to run at the exact same point as the previous one.
15115 The pseudo-fork code uses C<COPY_STACKS> while the
15116 threads->create doesn't.
15117
15118 C<CLONEf_KEEP_PTR_TABLE> -
15119 C<perl_clone> keeps a ptr_table with the pointer of the old
15120 variable as a key and the new variable as a value,
15121 this allows it to check if something has been cloned and not
15122 clone it again, but rather just use the value and increase the
15123 refcount.
15124 If C<KEEP_PTR_TABLE> is not set then C<perl_clone> will kill the ptr_table
15125 using the function S<C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>>.
15126 A reason to keep it around is if you want to dup some of your own
15127 variables which are outside the graph that perl scans.
15128
15129 C<CLONEf_CLONE_HOST> -
15130 This is a win32 thing, it is ignored on unix, it tells perl's
15131 win32host code (which is c++) to clone itself, this is needed on
15132 win32 if you want to run two threads at the same time,
15133 if you just want to do some stuff in a separate perl interpreter
15134 and then throw it away and return to the original one,
15135 you don't need to do anything.
15136
15137 =cut
15138 */
15139
15140 /* XXX the above needs expanding by someone who actually understands it ! */
15141 EXTERN_C PerlInterpreter *
15142 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
15143
15144 PerlInterpreter *
15145 perl_clone(PerlInterpreter *proto_perl, UV flags)
15146 {
15147 #ifdef PERL_IMPLICIT_SYS
15148
15149     PERL_ARGS_ASSERT_PERL_CLONE;
15150
15151    /* perlhost.h so we need to call into it
15152    to clone the host, CPerlHost should have a c interface, sky */
15153
15154 #ifndef __amigaos4__
15155    if (flags & CLONEf_CLONE_HOST) {
15156        return perl_clone_host(proto_perl,flags);
15157    }
15158 #endif
15159    return perl_clone_using(proto_perl, flags,
15160                             proto_perl->IMem,
15161                             proto_perl->IMemShared,
15162                             proto_perl->IMemParse,
15163                             proto_perl->IEnv,
15164                             proto_perl->IStdIO,
15165                             proto_perl->ILIO,
15166                             proto_perl->IDir,
15167                             proto_perl->ISock,
15168                             proto_perl->IProc);
15169 }
15170
15171 PerlInterpreter *
15172 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
15173                  struct IPerlMem* ipM, struct IPerlMem* ipMS,
15174                  struct IPerlMem* ipMP, struct IPerlEnv* ipE,
15175                  struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
15176                  struct IPerlDir* ipD, struct IPerlSock* ipS,
15177                  struct IPerlProc* ipP)
15178 {
15179     /* XXX many of the string copies here can be optimized if they're
15180      * constants; they need to be allocated as common memory and just
15181      * their pointers copied. */
15182
15183     IV i;
15184     CLONE_PARAMS clone_params;
15185     CLONE_PARAMS* const param = &clone_params;
15186
15187     PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
15188
15189     PERL_ARGS_ASSERT_PERL_CLONE_USING;
15190 #else           /* !PERL_IMPLICIT_SYS */
15191     IV i;
15192     CLONE_PARAMS clone_params;
15193     CLONE_PARAMS* param = &clone_params;
15194     PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
15195
15196     PERL_ARGS_ASSERT_PERL_CLONE;
15197 #endif          /* PERL_IMPLICIT_SYS */
15198
15199     /* for each stash, determine whether its objects should be cloned */
15200     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
15201     PERL_SET_THX(my_perl);
15202
15203 #ifdef DEBUGGING
15204     PoisonNew(my_perl, 1, PerlInterpreter);
15205     PL_op = NULL;
15206     PL_curcop = NULL;
15207     PL_defstash = NULL; /* may be used by perl malloc() */
15208     PL_markstack = 0;
15209     PL_scopestack = 0;
15210     PL_scopestack_name = 0;
15211     PL_savestack = 0;
15212     PL_savestack_ix = 0;
15213     PL_savestack_max = -1;
15214     PL_sig_pending = 0;
15215     PL_parser = NULL;
15216     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
15217     Zero(&PL_padname_undef, 1, PADNAME);
15218     Zero(&PL_padname_const, 1, PADNAME);
15219 #  ifdef DEBUG_LEAKING_SCALARS
15220     PL_sv_serial = (((UV)my_perl >> 2) & 0xfff) * 1000000;
15221 #  endif
15222 #  ifdef PERL_TRACE_OPS
15223     Zero(PL_op_exec_cnt, OP_max+2, UV);
15224 #  endif
15225 #else   /* !DEBUGGING */
15226     Zero(my_perl, 1, PerlInterpreter);
15227 #endif  /* DEBUGGING */
15228
15229 #ifdef PERL_IMPLICIT_SYS
15230     /* host pointers */
15231     PL_Mem              = ipM;
15232     PL_MemShared        = ipMS;
15233     PL_MemParse         = ipMP;
15234     PL_Env              = ipE;
15235     PL_StdIO            = ipStd;
15236     PL_LIO              = ipLIO;
15237     PL_Dir              = ipD;
15238     PL_Sock             = ipS;
15239     PL_Proc             = ipP;
15240 #endif          /* PERL_IMPLICIT_SYS */
15241
15242
15243     param->flags = flags;
15244     /* Nothing in the core code uses this, but we make it available to
15245        extensions (using mg_dup).  */
15246     param->proto_perl = proto_perl;
15247     /* Likely nothing will use this, but it is initialised to be consistent
15248        with Perl_clone_params_new().  */
15249     param->new_perl = my_perl;
15250     param->unreferenced = NULL;
15251
15252
15253     INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
15254
15255     PL_body_arenas = NULL;
15256     Zero(&PL_body_roots, 1, PL_body_roots);
15257     
15258     PL_sv_count         = 0;
15259     PL_sv_root          = NULL;
15260     PL_sv_arenaroot     = NULL;
15261
15262     PL_debug            = proto_perl->Idebug;
15263
15264     /* dbargs array probably holds garbage */
15265     PL_dbargs           = NULL;
15266
15267     PL_compiling = proto_perl->Icompiling;
15268
15269     /* pseudo environmental stuff */
15270     PL_origargc         = proto_perl->Iorigargc;
15271     PL_origargv         = proto_perl->Iorigargv;
15272
15273 #ifndef NO_TAINT_SUPPORT
15274     /* Set tainting stuff before PerlIO_debug can possibly get called */
15275     PL_tainting         = proto_perl->Itainting;
15276     PL_taint_warn       = proto_perl->Itaint_warn;
15277 #else
15278     PL_tainting         = FALSE;
15279     PL_taint_warn       = FALSE;
15280 #endif
15281
15282     PL_minus_c          = proto_perl->Iminus_c;
15283
15284     PL_localpatches     = proto_perl->Ilocalpatches;
15285     PL_splitstr         = proto_perl->Isplitstr;
15286     PL_minus_n          = proto_perl->Iminus_n;
15287     PL_minus_p          = proto_perl->Iminus_p;
15288     PL_minus_l          = proto_perl->Iminus_l;
15289     PL_minus_a          = proto_perl->Iminus_a;
15290     PL_minus_E          = proto_perl->Iminus_E;
15291     PL_minus_F          = proto_perl->Iminus_F;
15292     PL_doswitches       = proto_perl->Idoswitches;
15293     PL_dowarn           = proto_perl->Idowarn;
15294 #ifdef PERL_SAWAMPERSAND
15295     PL_sawampersand     = proto_perl->Isawampersand;
15296 #endif
15297     PL_unsafe           = proto_perl->Iunsafe;
15298     PL_perldb           = proto_perl->Iperldb;
15299     PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
15300     PL_exit_flags       = proto_perl->Iexit_flags;
15301
15302     /* XXX time(&PL_basetime) when asked for? */
15303     PL_basetime         = proto_perl->Ibasetime;
15304
15305     PL_maxsysfd         = proto_perl->Imaxsysfd;
15306     PL_statusvalue      = proto_perl->Istatusvalue;
15307 #ifdef __VMS
15308     PL_statusvalue_vms  = proto_perl->Istatusvalue_vms;
15309 #else
15310     PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
15311 #endif
15312
15313     /* RE engine related */
15314     PL_regmatch_slab    = NULL;
15315     PL_reg_curpm        = NULL;
15316
15317     PL_sub_generation   = proto_perl->Isub_generation;
15318
15319     /* funky return mechanisms */
15320     PL_forkprocess      = proto_perl->Iforkprocess;
15321
15322     /* internal state */
15323     PL_main_start       = proto_perl->Imain_start;
15324     PL_eval_root        = proto_perl->Ieval_root;
15325     PL_eval_start       = proto_perl->Ieval_start;
15326
15327     PL_filemode         = proto_perl->Ifilemode;
15328     PL_lastfd           = proto_perl->Ilastfd;
15329     PL_oldname          = proto_perl->Ioldname;         /* XXX not quite right */
15330     PL_gensym           = proto_perl->Igensym;
15331
15332     PL_laststatval      = proto_perl->Ilaststatval;
15333     PL_laststype        = proto_perl->Ilaststype;
15334     PL_mess_sv          = NULL;
15335
15336     PL_profiledata      = NULL;
15337
15338     PL_generation       = proto_perl->Igeneration;
15339
15340     PL_in_clean_objs    = proto_perl->Iin_clean_objs;
15341     PL_in_clean_all     = proto_perl->Iin_clean_all;
15342
15343     PL_delaymagic_uid   = proto_perl->Idelaymagic_uid;
15344     PL_delaymagic_euid  = proto_perl->Idelaymagic_euid;
15345     PL_delaymagic_gid   = proto_perl->Idelaymagic_gid;
15346     PL_delaymagic_egid  = proto_perl->Idelaymagic_egid;
15347     PL_nomemok          = proto_perl->Inomemok;
15348     PL_an               = proto_perl->Ian;
15349     PL_evalseq          = proto_perl->Ievalseq;
15350     PL_origenviron      = proto_perl->Iorigenviron;     /* XXX not quite right */
15351     PL_origalen         = proto_perl->Iorigalen;
15352
15353     PL_sighandlerp      = proto_perl->Isighandlerp;
15354     PL_sighandler1p     = proto_perl->Isighandler1p;
15355     PL_sighandler3p     = proto_perl->Isighandler3p;
15356
15357     PL_runops           = proto_perl->Irunops;
15358
15359     PL_subline          = proto_perl->Isubline;
15360
15361     PL_cv_has_eval      = proto_perl->Icv_has_eval;
15362
15363 #ifdef USE_LOCALE_COLLATE
15364     PL_collation_ix     = proto_perl->Icollation_ix;
15365     PL_collation_standard       = proto_perl->Icollation_standard;
15366     PL_collxfrm_base    = proto_perl->Icollxfrm_base;
15367     PL_collxfrm_mult    = proto_perl->Icollxfrm_mult;
15368     PL_strxfrm_max_cp   = proto_perl->Istrxfrm_max_cp;
15369 #endif /* USE_LOCALE_COLLATE */
15370
15371 #ifdef USE_LOCALE_NUMERIC
15372     PL_numeric_standard = proto_perl->Inumeric_standard;
15373     PL_numeric_underlying       = proto_perl->Inumeric_underlying;
15374     PL_numeric_underlying_is_standard   = proto_perl->Inumeric_underlying_is_standard;
15375 #endif /* !USE_LOCALE_NUMERIC */
15376
15377     /* Did the locale setup indicate UTF-8? */
15378     PL_utf8locale       = proto_perl->Iutf8locale;
15379     PL_in_utf8_CTYPE_locale = proto_perl->Iin_utf8_CTYPE_locale;
15380     PL_in_utf8_COLLATE_locale = proto_perl->Iin_utf8_COLLATE_locale;
15381     my_strlcpy(PL_locale_utf8ness, proto_perl->Ilocale_utf8ness, sizeof(PL_locale_utf8ness));
15382 #if defined(USE_ITHREADS) && ! defined(USE_THREAD_SAFE_LOCALE)
15383     PL_lc_numeric_mutex_depth = 0;
15384 #endif
15385     /* Unicode features (see perlrun/-C) */
15386     PL_unicode          = proto_perl->Iunicode;
15387
15388     /* Pre-5.8 signals control */
15389     PL_signals          = proto_perl->Isignals;
15390
15391     /* times() ticks per second */
15392     PL_clocktick        = proto_perl->Iclocktick;
15393
15394     /* Recursion stopper for PerlIO_find_layer */
15395     PL_in_load_module   = proto_perl->Iin_load_module;
15396
15397     /* Not really needed/useful since the reenrant_retint is "volatile",
15398      * but do it for consistency's sake. */
15399     PL_reentrant_retint = proto_perl->Ireentrant_retint;
15400
15401     /* Hooks to shared SVs and locks. */
15402     PL_sharehook        = proto_perl->Isharehook;
15403     PL_lockhook         = proto_perl->Ilockhook;
15404     PL_unlockhook       = proto_perl->Iunlockhook;
15405     PL_threadhook       = proto_perl->Ithreadhook;
15406     PL_destroyhook      = proto_perl->Idestroyhook;
15407     PL_signalhook       = proto_perl->Isignalhook;
15408
15409     PL_globhook         = proto_perl->Iglobhook;
15410
15411     PL_srand_called     = proto_perl->Isrand_called;
15412     Copy(&(proto_perl->Irandom_state), &PL_random_state, 1, PL_RANDOM_STATE_TYPE);
15413
15414     if (flags & CLONEf_COPY_STACKS) {
15415         /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
15416         PL_tmps_ix              = proto_perl->Itmps_ix;
15417         PL_tmps_max             = proto_perl->Itmps_max;
15418         PL_tmps_floor           = proto_perl->Itmps_floor;
15419
15420         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
15421          * NOTE: unlike the others! */
15422         PL_scopestack_ix        = proto_perl->Iscopestack_ix;
15423         PL_scopestack_max       = proto_perl->Iscopestack_max;
15424
15425         /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
15426          * NOTE: unlike the others! */
15427         PL_savestack_ix         = proto_perl->Isavestack_ix;
15428         PL_savestack_max        = proto_perl->Isavestack_max;
15429     }
15430
15431     PL_start_env        = proto_perl->Istart_env;       /* XXXXXX */
15432     PL_top_env          = &PL_start_env;
15433
15434     PL_op               = proto_perl->Iop;
15435
15436     PL_Sv               = NULL;
15437     PL_Xpv              = (XPV*)NULL;
15438     my_perl->Ina        = proto_perl->Ina;
15439
15440     PL_statcache        = proto_perl->Istatcache;
15441
15442 #ifndef NO_TAINT_SUPPORT
15443     PL_tainted          = proto_perl->Itainted;
15444 #else
15445     PL_tainted          = FALSE;
15446 #endif
15447     PL_curpm            = proto_perl->Icurpm;   /* XXX No PMOP ref count */
15448
15449     PL_chopset          = proto_perl->Ichopset; /* XXX never deallocated */
15450
15451     PL_restartjmpenv    = proto_perl->Irestartjmpenv;
15452     PL_restartop        = proto_perl->Irestartop;
15453     PL_in_eval          = proto_perl->Iin_eval;
15454     PL_delaymagic       = proto_perl->Idelaymagic;
15455     PL_phase            = proto_perl->Iphase;
15456     PL_localizing       = proto_perl->Ilocalizing;
15457
15458     PL_hv_fetch_ent_mh  = NULL;
15459     PL_modcount         = proto_perl->Imodcount;
15460     PL_lastgotoprobe    = NULL;
15461     PL_dumpindent       = proto_perl->Idumpindent;
15462
15463     PL_efloatbuf        = NULL;         /* reinits on demand */
15464     PL_efloatsize       = 0;                    /* reinits on demand */
15465
15466     /* regex stuff */
15467
15468     PL_colorset         = 0;            /* reinits PL_colors[] */
15469     /*PL_colors[6]      = {0,0,0,0,0,0};*/
15470
15471     /* Pluggable optimizer */
15472     PL_peepp            = proto_perl->Ipeepp;
15473     PL_rpeepp           = proto_perl->Irpeepp;
15474     /* op_free() hook */
15475     PL_opfreehook       = proto_perl->Iopfreehook;
15476
15477 #ifdef USE_REENTRANT_API
15478     /* XXX: things like -Dm will segfault here in perlio, but doing
15479      *  PERL_SET_CONTEXT(proto_perl);
15480      * breaks too many other things
15481      */
15482     Perl_reentrant_init(aTHX);
15483 #endif
15484
15485     /* create SV map for pointer relocation */
15486     PL_ptr_table = ptr_table_new();
15487
15488     /* initialize these special pointers as early as possible */
15489     init_constants();
15490     ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
15491     ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
15492     ptr_table_store(PL_ptr_table, &proto_perl->Isv_zero, &PL_sv_zero);
15493     ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
15494     ptr_table_store(PL_ptr_table, &proto_perl->Ipadname_const,
15495                     &PL_padname_const);
15496
15497     /* create (a non-shared!) shared string table */
15498     PL_strtab           = newHV();
15499     HvSHAREKEYS_off(PL_strtab);
15500     hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
15501     ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
15502
15503     Zero(PL_sv_consts, SV_CONSTS_COUNT, SV*);
15504
15505     /* This PV will be free'd special way so must set it same way op.c does */
15506     PL_compiling.cop_file    = savesharedpv(PL_compiling.cop_file);
15507     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
15508
15509     ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
15510     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
15511     CopHINTHASH_set(&PL_compiling, cophh_copy(CopHINTHASH_get(&PL_compiling)));
15512     PL_curcop           = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
15513
15514     param->stashes      = newAV();  /* Setup array of objects to call clone on */
15515     /* This makes no difference to the implementation, as it always pushes
15516        and shifts pointers to other SVs without changing their reference
15517        count, with the array becoming empty before it is freed. However, it
15518        makes it conceptually clear what is going on, and will avoid some
15519        work inside av.c, filling slots between AvFILL() and AvMAX() with
15520        &PL_sv_undef, and SvREFCNT_dec()ing those.  */
15521     AvREAL_off(param->stashes);
15522
15523     if (!(flags & CLONEf_COPY_STACKS)) {
15524         param->unreferenced = newAV();
15525     }
15526
15527 #ifdef PERLIO_LAYERS
15528     /* Clone PerlIO tables as soon as we can handle general xx_dup() */
15529     PerlIO_clone(aTHX_ proto_perl, param);
15530 #endif
15531
15532     PL_envgv            = gv_dup_inc(proto_perl->Ienvgv, param);
15533     PL_incgv            = gv_dup_inc(proto_perl->Iincgv, param);
15534     PL_hintgv           = gv_dup_inc(proto_perl->Ihintgv, param);
15535     PL_origfilename     = SAVEPV(proto_perl->Iorigfilename);
15536     PL_xsubfilename     = proto_perl->Ixsubfilename;
15537     PL_diehook          = sv_dup_inc(proto_perl->Idiehook, param);
15538     PL_warnhook         = sv_dup_inc(proto_perl->Iwarnhook, param);
15539
15540     /* switches */
15541     PL_patchlevel       = sv_dup_inc(proto_perl->Ipatchlevel, param);
15542     PL_inplace          = SAVEPV(proto_perl->Iinplace);
15543     PL_e_script         = sv_dup_inc(proto_perl->Ie_script, param);
15544
15545     /* magical thingies */
15546
15547     SvPVCLEAR(PERL_DEBUG_PAD(0));        /* For regex debugging. */
15548     SvPVCLEAR(PERL_DEBUG_PAD(1));        /* ext/re needs these */
15549     SvPVCLEAR(PERL_DEBUG_PAD(2));        /* even without DEBUGGING. */
15550
15551    
15552     /* Clone the regex array */
15553     /* ORANGE FIXME for plugins, probably in the SV dup code.
15554        newSViv(PTR2IV(CALLREGDUPE(
15555        INT2PTR(REGEXP *, SvIVX(regex)), param))))
15556     */
15557     PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
15558     PL_regex_pad = AvARRAY(PL_regex_padav);
15559
15560     PL_stashpadmax      = proto_perl->Istashpadmax;
15561     PL_stashpadix       = proto_perl->Istashpadix ;
15562     Newx(PL_stashpad, PL_stashpadmax, HV *);
15563     {
15564         PADOFFSET o = 0;
15565         for (; o < PL_stashpadmax; ++o)
15566             PL_stashpad[o] = hv_dup(proto_perl->Istashpad[o], param);
15567     }
15568
15569     /* shortcuts to various I/O objects */
15570     PL_ofsgv            = gv_dup_inc(proto_perl->Iofsgv, param);
15571     PL_stdingv          = gv_dup(proto_perl->Istdingv, param);
15572     PL_stderrgv         = gv_dup(proto_perl->Istderrgv, param);
15573     PL_defgv            = gv_dup(proto_perl->Idefgv, param);
15574     PL_argvgv           = gv_dup_inc(proto_perl->Iargvgv, param);
15575     PL_argvoutgv        = gv_dup(proto_perl->Iargvoutgv, param);
15576     PL_argvout_stack    = av_dup_inc(proto_perl->Iargvout_stack, param);
15577
15578     /* shortcuts to regexp stuff */
15579     PL_replgv           = gv_dup_inc(proto_perl->Ireplgv, param);
15580
15581     /* shortcuts to misc objects */
15582     PL_errgv            = gv_dup(proto_perl->Ierrgv, param);
15583
15584     /* shortcuts to debugging objects */
15585     PL_DBgv             = gv_dup_inc(proto_perl->IDBgv, param);
15586     PL_DBline           = gv_dup_inc(proto_perl->IDBline, param);
15587     PL_DBsub            = gv_dup_inc(proto_perl->IDBsub, param);
15588     PL_DBsingle         = sv_dup(proto_perl->IDBsingle, param);
15589     PL_DBtrace          = sv_dup(proto_perl->IDBtrace, param);
15590     PL_DBsignal         = sv_dup(proto_perl->IDBsignal, param);
15591     Copy(proto_perl->IDBcontrol, PL_DBcontrol, DBVARMG_COUNT, IV);
15592
15593     /* symbol tables */
15594     PL_defstash         = hv_dup_inc(proto_perl->Idefstash, param);
15595     PL_curstash         = hv_dup_inc(proto_perl->Icurstash, param);
15596     PL_debstash         = hv_dup(proto_perl->Idebstash, param);
15597     PL_globalstash      = hv_dup(proto_perl->Iglobalstash, param);
15598     PL_curstname        = sv_dup_inc(proto_perl->Icurstname, param);
15599
15600     PL_beginav          = av_dup_inc(proto_perl->Ibeginav, param);
15601     PL_beginav_save     = av_dup_inc(proto_perl->Ibeginav_save, param);
15602     PL_checkav_save     = av_dup_inc(proto_perl->Icheckav_save, param);
15603     PL_unitcheckav      = av_dup_inc(proto_perl->Iunitcheckav, param);
15604     PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
15605     PL_endav            = av_dup_inc(proto_perl->Iendav, param);
15606     PL_checkav          = av_dup_inc(proto_perl->Icheckav, param);
15607     PL_initav           = av_dup_inc(proto_perl->Iinitav, param);
15608     PL_savebegin        = proto_perl->Isavebegin;
15609
15610     PL_isarev           = hv_dup_inc(proto_perl->Iisarev, param);
15611
15612     /* subprocess state */
15613     PL_fdpid            = av_dup_inc(proto_perl->Ifdpid, param);
15614
15615     if (proto_perl->Iop_mask)
15616         PL_op_mask      = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
15617     else
15618         PL_op_mask      = NULL;
15619     /* PL_asserting        = proto_perl->Iasserting; */
15620
15621     /* current interpreter roots */
15622     PL_main_cv          = cv_dup_inc(proto_perl->Imain_cv, param);
15623     OP_REFCNT_LOCK;
15624     PL_main_root        = OpREFCNT_inc(proto_perl->Imain_root);
15625     OP_REFCNT_UNLOCK;
15626
15627     /* runtime control stuff */
15628     PL_curcopdb         = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
15629
15630     PL_preambleav       = av_dup_inc(proto_perl->Ipreambleav, param);
15631
15632     PL_ors_sv           = sv_dup_inc(proto_perl->Iors_sv, param);
15633
15634     /* interpreter atexit processing */
15635     PL_exitlistlen      = proto_perl->Iexitlistlen;
15636     if (PL_exitlistlen) {
15637         Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
15638         Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
15639     }
15640     else
15641         PL_exitlist     = (PerlExitListEntry*)NULL;
15642
15643     PL_my_cxt_size = proto_perl->Imy_cxt_size;
15644     if (PL_my_cxt_size) {
15645         Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
15646         Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
15647     }
15648     else {
15649         PL_my_cxt_list  = (void**)NULL;
15650     }
15651     PL_modglobal        = hv_dup_inc(proto_perl->Imodglobal, param);
15652     PL_custom_op_names  = hv_dup_inc(proto_perl->Icustom_op_names,param);
15653     PL_custom_op_descs  = hv_dup_inc(proto_perl->Icustom_op_descs,param);
15654     PL_custom_ops       = hv_dup_inc(proto_perl->Icustom_ops, param);
15655
15656     PL_compcv                   = cv_dup(proto_perl->Icompcv, param);
15657
15658     PAD_CLONE_VARS(proto_perl, param);
15659
15660 #ifdef HAVE_INTERP_INTERN
15661     sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
15662 #endif
15663
15664     PL_DBcv             = cv_dup(proto_perl->IDBcv, param);
15665
15666 #ifdef PERL_USES_PL_PIDSTATUS
15667     PL_pidstatus        = newHV();                      /* XXX flag for cloning? */
15668 #endif
15669     PL_osname           = SAVEPV(proto_perl->Iosname);
15670     PL_parser           = parser_dup(proto_perl->Iparser, param);
15671
15672     /* XXX this only works if the saved cop has already been cloned */
15673     if (proto_perl->Iparser) {
15674         PL_parser->saved_curcop = (COP*)any_dup(
15675                                     proto_perl->Iparser->saved_curcop,
15676                                     proto_perl);
15677     }
15678
15679     PL_subname          = sv_dup_inc(proto_perl->Isubname, param);
15680
15681 #if   defined(USE_POSIX_2008_LOCALE)      \
15682  &&   defined(USE_THREAD_SAFE_LOCALE)     \
15683  && ! defined(HAS_QUERYLOCALE)
15684     for (i = 0; i < (int) C_ARRAY_LENGTH(PL_curlocales); i++) {
15685         PL_curlocales[i] = savepv("."); /* An illegal value */
15686     }
15687 #endif
15688 #ifdef USE_LOCALE_CTYPE
15689     /* Should we warn if uses locale? */
15690     PL_warn_locale      = sv_dup_inc(proto_perl->Iwarn_locale, param);
15691 #endif
15692
15693 #ifdef USE_LOCALE_COLLATE
15694     PL_collation_name   = SAVEPV(proto_perl->Icollation_name);
15695 #endif /* USE_LOCALE_COLLATE */
15696
15697 #ifdef USE_LOCALE_NUMERIC
15698     PL_numeric_name     = SAVEPV(proto_perl->Inumeric_name);
15699     PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
15700
15701 #  if defined(HAS_POSIX_2008_LOCALE)
15702     PL_underlying_numeric_obj = NULL;
15703 #  endif
15704 #endif /* !USE_LOCALE_NUMERIC */
15705
15706 #ifdef HAS_MBRLEN
15707     PL_mbrlen_ps = proto_perl->Imbrlen_ps;
15708 #endif
15709 #ifdef HAS_MBRTOWC
15710     PL_mbrtowc_ps = proto_perl->Imbrtowc_ps;
15711 #endif
15712 #ifdef HAS_WCRTOMB
15713     PL_wcrtomb_ps = proto_perl->Iwcrtomb_ps;
15714 #endif
15715
15716     PL_langinfo_buf = NULL;
15717     PL_langinfo_bufsize = 0;
15718
15719     PL_setlocale_buf = NULL;
15720     PL_setlocale_bufsize = 0;
15721
15722     /* Unicode inversion lists */
15723
15724     PL_AboveLatin1            = sv_dup_inc(proto_perl->IAboveLatin1, param);
15725     PL_Assigned_invlist       = sv_dup_inc(proto_perl->IAssigned_invlist, param);
15726     PL_GCB_invlist            = sv_dup_inc(proto_perl->IGCB_invlist, param);
15727     PL_HasMultiCharFold       = sv_dup_inc(proto_perl->IHasMultiCharFold, param);
15728     PL_InMultiCharFold        = sv_dup_inc(proto_perl->IInMultiCharFold, param);
15729     PL_Latin1                 = sv_dup_inc(proto_perl->ILatin1, param);
15730     PL_LB_invlist             = sv_dup_inc(proto_perl->ILB_invlist, param);
15731     PL_SB_invlist             = sv_dup_inc(proto_perl->ISB_invlist, param);
15732     PL_SCX_invlist            = sv_dup_inc(proto_perl->ISCX_invlist, param);
15733     PL_UpperLatin1            = sv_dup_inc(proto_perl->IUpperLatin1, param);
15734     PL_in_some_fold           = sv_dup_inc(proto_perl->Iin_some_fold, param);
15735     PL_utf8_foldclosures      = sv_dup_inc(proto_perl->Iutf8_foldclosures, param);
15736     PL_utf8_idcont            = sv_dup_inc(proto_perl->Iutf8_idcont, param);
15737     PL_utf8_idstart           = sv_dup_inc(proto_perl->Iutf8_idstart, param);
15738     PL_utf8_perl_idcont       = sv_dup_inc(proto_perl->Iutf8_perl_idcont, param);
15739     PL_utf8_perl_idstart      = sv_dup_inc(proto_perl->Iutf8_perl_idstart, param);
15740     PL_utf8_xidcont           = sv_dup_inc(proto_perl->Iutf8_xidcont, param);
15741     PL_utf8_xidstart          = sv_dup_inc(proto_perl->Iutf8_xidstart, param);
15742     PL_WB_invlist             = sv_dup_inc(proto_perl->IWB_invlist, param);
15743     for (i = 0; i < POSIX_CC_COUNT; i++) {
15744         PL_XPosix_ptrs[i]     = sv_dup_inc(proto_perl->IXPosix_ptrs[i], param);
15745         if (i != _CC_CASED && i != _CC_VERTSPACE) {
15746             PL_Posix_ptrs[i]  = sv_dup_inc(proto_perl->IPosix_ptrs[i], param);
15747         }
15748     }
15749     PL_Posix_ptrs[_CC_CASED]  = PL_Posix_ptrs[_CC_ALPHA];
15750     PL_Posix_ptrs[_CC_VERTSPACE] = NULL;
15751
15752     PL_utf8_toupper           = sv_dup_inc(proto_perl->Iutf8_toupper, param);
15753     PL_utf8_totitle           = sv_dup_inc(proto_perl->Iutf8_totitle, param);
15754     PL_utf8_tolower           = sv_dup_inc(proto_perl->Iutf8_tolower, param);
15755     PL_utf8_tofold            = sv_dup_inc(proto_perl->Iutf8_tofold, param);
15756     PL_utf8_tosimplefold      = sv_dup_inc(proto_perl->Iutf8_tosimplefold, param);
15757     PL_utf8_charname_begin    = sv_dup_inc(proto_perl->Iutf8_charname_begin, param);
15758     PL_utf8_charname_continue = sv_dup_inc(proto_perl->Iutf8_charname_continue, param);
15759     PL_utf8_mark              = sv_dup_inc(proto_perl->Iutf8_mark, param);
15760     PL_InBitmap               = sv_dup_inc(proto_perl->IInBitmap, param);
15761     PL_CCC_non0_non230        = sv_dup_inc(proto_perl->ICCC_non0_non230, param);
15762     PL_Private_Use            = sv_dup_inc(proto_perl->IPrivate_Use, param);
15763
15764 #if 0
15765     PL_seen_deprecated_macro = hv_dup_inc(proto_perl->Iseen_deprecated_macro, param);
15766 #endif
15767
15768     if (proto_perl->Ipsig_pend) {
15769         Newxz(PL_psig_pend, SIG_SIZE, int);
15770     }
15771     else {
15772         PL_psig_pend    = (int*)NULL;
15773     }
15774
15775     if (proto_perl->Ipsig_name) {
15776         Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
15777         sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
15778                             param);
15779         PL_psig_ptr = PL_psig_name + SIG_SIZE;
15780     }
15781     else {
15782         PL_psig_ptr     = (SV**)NULL;
15783         PL_psig_name    = (SV**)NULL;
15784     }
15785
15786     if (flags & CLONEf_COPY_STACKS) {
15787         Newx(PL_tmps_stack, PL_tmps_max, SV*);
15788         sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
15789                             PL_tmps_ix+1, param);
15790
15791         /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
15792         i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
15793         Newx(PL_markstack, i, I32);
15794         PL_markstack_max        = PL_markstack + (proto_perl->Imarkstack_max
15795                                                   - proto_perl->Imarkstack);
15796         PL_markstack_ptr        = PL_markstack + (proto_perl->Imarkstack_ptr
15797                                                   - proto_perl->Imarkstack);
15798         Copy(proto_perl->Imarkstack, PL_markstack,
15799              PL_markstack_ptr - PL_markstack + 1, I32);
15800
15801         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
15802          * NOTE: unlike the others! */
15803         Newx(PL_scopestack, PL_scopestack_max, I32);
15804         Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
15805
15806 #ifdef DEBUGGING
15807         Newx(PL_scopestack_name, PL_scopestack_max, const char *);
15808         Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
15809 #endif
15810         /* reset stack AV to correct length before its duped via
15811          * PL_curstackinfo */
15812         AvFILLp(proto_perl->Icurstack) =
15813                             proto_perl->Istack_sp - proto_perl->Istack_base;
15814
15815         /* NOTE: si_dup() looks at PL_markstack */
15816         PL_curstackinfo         = si_dup(proto_perl->Icurstackinfo, param);
15817
15818         /* PL_curstack          = PL_curstackinfo->si_stack; */
15819         PL_curstack             = av_dup(proto_perl->Icurstack, param);
15820         PL_mainstack            = av_dup(proto_perl->Imainstack, param);
15821
15822         /* next PUSHs() etc. set *(PL_stack_sp+1) */
15823         PL_stack_base           = AvARRAY(PL_curstack);
15824         PL_stack_sp             = PL_stack_base + (proto_perl->Istack_sp
15825                                                    - proto_perl->Istack_base);
15826         PL_stack_max            = PL_stack_base + AvMAX(PL_curstack);
15827
15828         /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
15829         PL_savestack            = ss_dup(proto_perl, param);
15830     }
15831     else {
15832         init_stacks();
15833         ENTER;                  /* perl_destruct() wants to LEAVE; */
15834     }
15835
15836     PL_statgv           = gv_dup(proto_perl->Istatgv, param);
15837     PL_statname         = sv_dup_inc(proto_perl->Istatname, param);
15838
15839     PL_rs               = sv_dup_inc(proto_perl->Irs, param);
15840     PL_last_in_gv       = gv_dup(proto_perl->Ilast_in_gv, param);
15841     PL_defoutgv         = gv_dup_inc(proto_perl->Idefoutgv, param);
15842     PL_toptarget        = sv_dup_inc(proto_perl->Itoptarget, param);
15843     PL_bodytarget       = sv_dup_inc(proto_perl->Ibodytarget, param);
15844     PL_formtarget       = sv_dup(proto_perl->Iformtarget, param);
15845
15846     PL_errors           = sv_dup_inc(proto_perl->Ierrors, param);
15847
15848     PL_sortcop          = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
15849     PL_firstgv          = gv_dup_inc(proto_perl->Ifirstgv, param);
15850     PL_secondgv         = gv_dup_inc(proto_perl->Isecondgv, param);
15851
15852     PL_stashcache       = newHV();
15853
15854     PL_watchaddr        = (char **) ptr_table_fetch(PL_ptr_table,
15855                                             proto_perl->Iwatchaddr);
15856     PL_watchok          = PL_watchaddr ? * PL_watchaddr : NULL;
15857     if (PL_debug && PL_watchaddr) {
15858         PerlIO_printf(Perl_debug_log,
15859           "WATCHING: %" UVxf " cloned as %" UVxf " with value %" UVxf "\n",
15860           PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
15861           PTR2UV(PL_watchok));
15862     }
15863
15864     PL_registered_mros  = hv_dup_inc(proto_perl->Iregistered_mros, param);
15865     PL_blockhooks       = av_dup_inc(proto_perl->Iblockhooks, param);
15866
15867     /* Call the ->CLONE method, if it exists, for each of the stashes
15868        identified by sv_dup() above.
15869     */
15870     while(av_count(param->stashes) != 0) {
15871         HV* const stash = MUTABLE_HV(av_shift(param->stashes));
15872         GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
15873         if (cloner && GvCV(cloner)) {
15874             dSP;
15875             ENTER;
15876             SAVETMPS;
15877             PUSHMARK(SP);
15878             mXPUSHs(newSVhek(HvNAME_HEK(stash)));
15879             PUTBACK;
15880             call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
15881             FREETMPS;
15882             LEAVE;
15883         }
15884     }
15885
15886     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
15887         ptr_table_free(PL_ptr_table);
15888         PL_ptr_table = NULL;
15889     }
15890
15891     if (!(flags & CLONEf_COPY_STACKS)) {
15892         unreferenced_to_tmp_stack(param->unreferenced);
15893     }
15894
15895     SvREFCNT_dec(param->stashes);
15896
15897     /* orphaned? eg threads->new inside BEGIN or use */
15898     if (PL_compcv && ! SvREFCNT(PL_compcv)) {
15899         SvREFCNT_inc_simple_void(PL_compcv);
15900         SAVEFREESV(PL_compcv);
15901     }
15902
15903     return my_perl;
15904 }
15905
15906 static void
15907 S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
15908 {
15909     PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK;
15910     
15911     if (AvFILLp(unreferenced) > -1) {
15912         SV **svp = AvARRAY(unreferenced);
15913         SV **const last = svp + AvFILLp(unreferenced);
15914         SSize_t count = 0;
15915
15916         do {
15917             if (SvREFCNT(*svp) == 1)
15918                 ++count;
15919         } while (++svp <= last);
15920
15921         EXTEND_MORTAL(count);
15922         svp = AvARRAY(unreferenced);
15923
15924         do {
15925             if (SvREFCNT(*svp) == 1) {
15926                 /* Our reference is the only one to this SV. This means that
15927                    in this thread, the scalar effectively has a 0 reference.
15928                    That doesn't work (cleanup never happens), so donate our
15929                    reference to it onto the save stack. */
15930                 PL_tmps_stack[++PL_tmps_ix] = *svp;
15931             } else {
15932                 /* As an optimisation, because we are already walking the
15933                    entire array, instead of above doing either
15934                    SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead
15935                    release our reference to the scalar, so that at the end of
15936                    the array owns zero references to the scalars it happens to
15937                    point to. We are effectively converting the array from
15938                    AvREAL() on to AvREAL() off. This saves the av_clear()
15939                    (triggered by the SvREFCNT_dec(unreferenced) below) from
15940                    walking the array a second time.  */
15941                 SvREFCNT_dec(*svp);
15942             }
15943
15944         } while (++svp <= last);
15945         AvREAL_off(unreferenced);
15946     }
15947     SvREFCNT_dec_NN(unreferenced);
15948 }
15949
15950 void
15951 Perl_clone_params_del(CLONE_PARAMS *param)
15952 {
15953     PerlInterpreter *const was = PERL_GET_THX;
15954     PerlInterpreter *const to = param->new_perl;
15955     dTHXa(to);
15956
15957     PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
15958
15959     if (was != to) {
15960         PERL_SET_THX(to);
15961     }
15962
15963     SvREFCNT_dec(param->stashes);
15964     if (param->unreferenced)
15965         unreferenced_to_tmp_stack(param->unreferenced);
15966
15967     Safefree(param);
15968
15969     if (was != to) {
15970         PERL_SET_THX(was);
15971     }
15972 }
15973
15974 CLONE_PARAMS *
15975 Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
15976 {
15977     /* Need to play this game, as newAV() can call safesysmalloc(), and that
15978        does a dTHX; to get the context from thread local storage.
15979        FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
15980        a version that passes in my_perl.  */
15981     PerlInterpreter *const was = PERL_GET_THX;
15982     CLONE_PARAMS *param;
15983
15984     PERL_ARGS_ASSERT_CLONE_PARAMS_NEW;
15985
15986     if (was != to) {
15987         PERL_SET_THX(to);
15988     }
15989
15990     /* Given that we've set the context, we can do this unshared.  */
15991     Newx(param, 1, CLONE_PARAMS);
15992
15993     param->flags = 0;
15994     param->proto_perl = from;
15995     param->new_perl = to;
15996     param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV);
15997     AvREAL_off(param->stashes);
15998     param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV);
15999
16000     if (was != to) {
16001         PERL_SET_THX(was);
16002     }
16003     return param;
16004 }
16005
16006 #endif /* USE_ITHREADS */
16007
16008 void
16009 Perl_init_constants(pTHX)
16010 {
16011
16012     SvREFCNT(&PL_sv_undef)      = SvREFCNT_IMMORTAL;
16013     SvFLAGS(&PL_sv_undef)       = SVf_READONLY|SVf_PROTECT|SVt_NULL;
16014     SvANY(&PL_sv_undef)         = NULL;
16015
16016     SvANY(&PL_sv_no)            = new_XPVNV();
16017     SvREFCNT(&PL_sv_no)         = SvREFCNT_IMMORTAL;
16018     SvFLAGS(&PL_sv_no)          = SVt_PVNV|SVf_READONLY|SVf_PROTECT
16019                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
16020                                   |SVp_POK|SVf_POK;
16021
16022     SvANY(&PL_sv_yes)           = new_XPVNV();
16023     SvREFCNT(&PL_sv_yes)        = SvREFCNT_IMMORTAL;
16024     SvFLAGS(&PL_sv_yes)         = SVt_PVNV|SVf_READONLY|SVf_PROTECT
16025                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
16026                                   |SVp_POK|SVf_POK;
16027
16028     SvANY(&PL_sv_zero)          = new_XPVNV();
16029     SvREFCNT(&PL_sv_zero)       = SvREFCNT_IMMORTAL;
16030     SvFLAGS(&PL_sv_zero)        = SVt_PVNV|SVf_READONLY|SVf_PROTECT
16031                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
16032                                   |SVp_POK|SVf_POK
16033                                   |SVs_PADTMP;
16034
16035     SvPV_set(&PL_sv_no, (char*)PL_No);
16036     SvCUR_set(&PL_sv_no, 0);
16037     SvLEN_set(&PL_sv_no, 0);
16038     SvIV_set(&PL_sv_no, 0);
16039     SvNV_set(&PL_sv_no, 0);
16040
16041     SvPV_set(&PL_sv_yes, (char*)PL_Yes);
16042     SvCUR_set(&PL_sv_yes, 1);
16043     SvLEN_set(&PL_sv_yes, 0);
16044     SvIV_set(&PL_sv_yes, 1);
16045     SvNV_set(&PL_sv_yes, 1);
16046
16047     SvPV_set(&PL_sv_zero, (char*)PL_Zero);
16048     SvCUR_set(&PL_sv_zero, 1);
16049     SvLEN_set(&PL_sv_zero, 0);
16050     SvIV_set(&PL_sv_zero, 0);
16051     SvNV_set(&PL_sv_zero, 0);
16052
16053     PadnamePV(&PL_padname_const) = (char *)PL_No;
16054
16055     assert(SvIMMORTAL_INTERP(&PL_sv_yes));
16056     assert(SvIMMORTAL_INTERP(&PL_sv_undef));
16057     assert(SvIMMORTAL_INTERP(&PL_sv_no));
16058     assert(SvIMMORTAL_INTERP(&PL_sv_zero));
16059
16060     assert(SvIMMORTAL(&PL_sv_yes));
16061     assert(SvIMMORTAL(&PL_sv_undef));
16062     assert(SvIMMORTAL(&PL_sv_no));
16063     assert(SvIMMORTAL(&PL_sv_zero));
16064
16065     assert( SvIMMORTAL_TRUE(&PL_sv_yes));
16066     assert(!SvIMMORTAL_TRUE(&PL_sv_undef));
16067     assert(!SvIMMORTAL_TRUE(&PL_sv_no));
16068     assert(!SvIMMORTAL_TRUE(&PL_sv_zero));
16069
16070     assert( SvTRUE_nomg_NN(&PL_sv_yes));
16071     assert(!SvTRUE_nomg_NN(&PL_sv_undef));
16072     assert(!SvTRUE_nomg_NN(&PL_sv_no));
16073     assert(!SvTRUE_nomg_NN(&PL_sv_zero));
16074 }
16075
16076 /*
16077 =for apidoc_section Unicode Support
16078
16079 =for apidoc sv_recode_to_utf8
16080
16081 C<encoding> is assumed to be an C<Encode> object, on entry the PV
16082 of C<sv> is assumed to be octets in that encoding, and C<sv>
16083 will be converted into Unicode (and UTF-8).
16084
16085 If C<sv> already is UTF-8 (or if it is not C<POK>), or if C<encoding>
16086 is not a reference, nothing is done to C<sv>.  If C<encoding> is not
16087 an C<Encode::XS> Encoding object, bad things will happen.
16088 (See F<cpan/Encode/encoding.pm> and L<Encode>.)
16089
16090 The PV of C<sv> is returned.
16091
16092 =cut */
16093
16094 char *
16095 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
16096 {
16097     PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
16098
16099     if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
16100         SV *uni;
16101         STRLEN len;
16102         const char *s;
16103         dSP;
16104         SV *nsv = sv;
16105         ENTER;
16106         PUSHSTACK;
16107         SAVETMPS;
16108         if (SvPADTMP(nsv)) {
16109             nsv = sv_newmortal();
16110             SvSetSV_nosteal(nsv, sv);
16111         }
16112         save_re_context();
16113         PUSHMARK(sp);
16114         EXTEND(SP, 3);
16115         PUSHs(encoding);
16116         PUSHs(nsv);
16117 /*
16118   NI-S 2002/07/09
16119   Passing sv_yes is wrong - it needs to be or'ed set of constants
16120   for Encode::XS, while UTf-8 decode (currently) assumes a true value means
16121   remove converted chars from source.
16122
16123   Both will default the value - let them.
16124
16125         XPUSHs(&PL_sv_yes);
16126 */
16127         PUTBACK;
16128         call_method("decode", G_SCALAR);
16129         SPAGAIN;
16130         uni = POPs;
16131         PUTBACK;
16132         s = SvPV_const(uni, len);
16133         if (s != SvPVX_const(sv)) {
16134             SvGROW(sv, len + 1);
16135             Move(s, SvPVX(sv), len + 1, char);
16136             SvCUR_set(sv, len);
16137         }
16138         FREETMPS;
16139         POPSTACK;
16140         LEAVE;
16141         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
16142             /* clear pos and any utf8 cache */
16143             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
16144             if (mg)
16145                 mg->mg_len = -1;
16146             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
16147                 magic_setutf8(sv,mg); /* clear UTF8 cache */
16148         }
16149         SvUTF8_on(sv);
16150         return SvPVX(sv);
16151     }
16152     return SvPOKp(sv) ? SvPVX(sv) : NULL;
16153 }
16154
16155 /*
16156 =for apidoc sv_cat_decode
16157
16158 C<encoding> is assumed to be an C<Encode> object, the PV of C<ssv> is
16159 assumed to be octets in that encoding and decoding the input starts
16160 from the position which S<C<(PV + *offset)>> pointed to.  C<dsv> will be
16161 concatenated with the decoded UTF-8 string from C<ssv>.  Decoding will terminate
16162 when the string C<tstr> appears in decoding output or the input ends on
16163 the PV of C<ssv>.  The value which C<offset> points will be modified
16164 to the last input position on C<ssv>.
16165
16166 Returns TRUE if the terminator was found, else returns FALSE.
16167
16168 =cut */
16169
16170 bool
16171 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
16172                    SV *ssv, int *offset, char *tstr, int tlen)
16173 {
16174     bool ret = FALSE;
16175
16176     PERL_ARGS_ASSERT_SV_CAT_DECODE;
16177
16178     if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding)) {
16179         SV *offsv;
16180         dSP;
16181         ENTER;
16182         SAVETMPS;
16183         save_re_context();
16184         PUSHMARK(sp);
16185         EXTEND(SP, 6);
16186         PUSHs(encoding);
16187         PUSHs(dsv);
16188         PUSHs(ssv);
16189         offsv = newSViv(*offset);
16190         mPUSHs(offsv);
16191         mPUSHp(tstr, tlen);
16192         PUTBACK;
16193         call_method("cat_decode", G_SCALAR);
16194         SPAGAIN;
16195         ret = SvTRUE(TOPs);
16196         *offset = SvIV(offsv);
16197         PUTBACK;
16198         FREETMPS;
16199         LEAVE;
16200     }
16201     else
16202         Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
16203     return ret;
16204
16205 }
16206
16207 /* ---------------------------------------------------------------------
16208  *
16209  * support functions for report_uninit()
16210  */
16211
16212 /* the maxiumum size of array or hash where we will scan looking
16213  * for the undefined element that triggered the warning */
16214
16215 #define FUV_MAX_SEARCH_SIZE 1000
16216
16217 /* Look for an entry in the hash whose value has the same SV as val;
16218  * If so, return a mortal copy of the key. */
16219
16220 STATIC SV*
16221 S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
16222 {
16223     HE **array;
16224     I32 i;
16225
16226     PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
16227
16228     if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
16229                         (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
16230         return NULL;
16231
16232     array = HvARRAY(hv);
16233
16234     for (i=HvMAX(hv); i>=0; i--) {
16235         HE *entry;
16236         for (entry = array[i]; entry; entry = HeNEXT(entry)) {
16237             if (HeVAL(entry) != val)
16238                 continue;
16239             if (    HeVAL(entry) == &PL_sv_undef ||
16240                     HeVAL(entry) == &PL_sv_placeholder)
16241                 continue;
16242             if (!HeKEY(entry))
16243                 return NULL;
16244             if (HeKLEN(entry) == HEf_SVKEY)
16245                 return sv_mortalcopy(HeKEY_sv(entry));
16246             return sv_2mortal(newSVhek(HeKEY_hek(entry)));
16247         }
16248     }
16249     return NULL;
16250 }
16251
16252 /* Look for an entry in the array whose value has the same SV as val;
16253  * If so, return the index, otherwise return -1. */
16254
16255 STATIC SSize_t
16256 S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
16257 {
16258     PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
16259
16260     if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
16261                         (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
16262         return -1;
16263
16264     if (val != &PL_sv_undef) {
16265         SV ** const svp = AvARRAY(av);
16266         SSize_t i;
16267
16268         for (i=AvFILLp(av); i>=0; i--)
16269             if (svp[i] == val)
16270                 return i;
16271     }
16272     return -1;
16273 }
16274
16275 /* varname(): return the name of a variable, optionally with a subscript.
16276  * If gv is non-zero, use the name of that global, along with gvtype (one
16277  * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
16278  * targ.  Depending on the value of the subscript_type flag, return:
16279  */
16280
16281 #define FUV_SUBSCRIPT_NONE      1       /* "@foo"          */
16282 #define FUV_SUBSCRIPT_ARRAY     2       /* "$foo[aindex]"  */
16283 #define FUV_SUBSCRIPT_HASH      3       /* "$foo{keyname}" */
16284 #define FUV_SUBSCRIPT_WITHIN    4       /* "within @foo"   */
16285
16286 SV*
16287 Perl_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
16288         const SV *const keyname, SSize_t aindex, int subscript_type)
16289 {
16290
16291     SV * const name = sv_newmortal();
16292     if (gv && isGV(gv)) {
16293         char buffer[2];
16294         buffer[0] = gvtype;
16295         buffer[1] = 0;
16296
16297         /* as gv_fullname4(), but add literal '^' for $^FOO names  */
16298
16299         gv_fullname4(name, gv, buffer, 0);
16300
16301         if ((unsigned int)SvPVX(name)[1] <= 26) {
16302             buffer[0] = '^';
16303             buffer[1] = SvPVX(name)[1] + 'A' - 1;
16304
16305             /* Swap the 1 unprintable control character for the 2 byte pretty
16306                version - ie substr($name, 1, 1) = $buffer; */
16307             sv_insert(name, 1, 1, buffer, 2);
16308         }
16309     }
16310     else {
16311         CV * const cv = gv ? ((CV *)gv) : find_runcv(NULL);
16312         PADNAME *sv;
16313
16314         assert(!cv || SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM);
16315
16316         if (!cv || !CvPADLIST(cv))
16317             return NULL;
16318         sv = padnamelist_fetch(PadlistNAMES(CvPADLIST(cv)), targ);
16319         sv_setpvn(name, PadnamePV(sv), PadnameLEN(sv));
16320         SvUTF8_on(name);
16321     }
16322
16323     if (subscript_type == FUV_SUBSCRIPT_HASH) {
16324         SV * const sv = newSV(0);
16325         STRLEN len;
16326         const char * const pv = SvPV_nomg_const((SV*)keyname, len);
16327
16328         *SvPVX(name) = '$';
16329         Perl_sv_catpvf(aTHX_ name, "{%s}",
16330             pv_pretty(sv, pv, len, 32, NULL, NULL,
16331                     PERL_PV_PRETTY_DUMP | PERL_PV_ESCAPE_UNI_DETECT ));
16332         SvREFCNT_dec_NN(sv);
16333     }
16334     else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
16335         *SvPVX(name) = '$';
16336         Perl_sv_catpvf(aTHX_ name, "[%" IVdf "]", (IV)aindex);
16337     }
16338     else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
16339         /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
16340         Perl_sv_insert_flags(aTHX_ name, 0, 0,  STR_WITH_LEN("within "), 0);
16341     }
16342
16343     return name;
16344 }
16345
16346
16347 /*
16348 =apidoc_section Warning and Dieing
16349 =for apidoc find_uninit_var
16350
16351 Find the name of the undefined variable (if any) that caused the operator
16352 to issue a "Use of uninitialized value" warning.
16353 If match is true, only return a name if its value matches C<uninit_sv>.
16354 So roughly speaking, if a unary operator (such as C<OP_COS>) generates a
16355 warning, then following the direct child of the op may yield an
16356 C<OP_PADSV> or C<OP_GV> that gives the name of the undefined variable.  On the
16357 other hand, with C<OP_ADD> there are two branches to follow, so we only print
16358 the variable name if we get an exact match.
16359 C<desc_p> points to a string pointer holding the description of the op.
16360 This may be updated if needed.
16361
16362 The name is returned as a mortal SV.
16363
16364 Assumes that C<PL_op> is the OP that originally triggered the error, and that
16365 C<PL_comppad>/C<PL_curpad> points to the currently executing pad.
16366
16367 =cut
16368 */
16369
16370 STATIC SV *
16371 S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
16372                   bool match, const char **desc_p)
16373 {
16374     SV *sv;
16375     const GV *gv;
16376     const OP *o, *o2, *kid;
16377
16378     PERL_ARGS_ASSERT_FIND_UNINIT_VAR;
16379
16380     if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
16381                             uninit_sv == &PL_sv_placeholder)))
16382         return NULL;
16383
16384     switch (obase->op_type) {
16385
16386     case OP_UNDEF:
16387         /* undef should care if its args are undef - any warnings
16388          * will be from tied/magic vars */
16389         break;
16390
16391     case OP_RV2AV:
16392     case OP_RV2HV:
16393     case OP_PADAV:
16394     case OP_PADHV:
16395       {
16396         const bool pad  = (    obase->op_type == OP_PADAV
16397                             || obase->op_type == OP_PADHV
16398                             || obase->op_type == OP_PADRANGE
16399                           );
16400
16401         const bool hash = (    obase->op_type == OP_PADHV
16402                             || obase->op_type == OP_RV2HV
16403                             || (obase->op_type == OP_PADRANGE
16404                                 && SvTYPE(PAD_SVl(obase->op_targ)) == SVt_PVHV)
16405                           );
16406         SSize_t index = 0;
16407         SV *keysv = NULL;
16408         int subscript_type = FUV_SUBSCRIPT_WITHIN;
16409
16410         if (pad) { /* @lex, %lex */
16411             sv = PAD_SVl(obase->op_targ);
16412             gv = NULL;
16413         }
16414         else {
16415             if (cUNOPx(obase)->op_first->op_type == OP_GV) {
16416             /* @global, %global */
16417                 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
16418                 if (!gv)
16419                     break;
16420                 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
16421             }
16422             else if (obase == PL_op) /* @{expr}, %{expr} */
16423                 return find_uninit_var(cUNOPx(obase)->op_first,
16424                                                 uninit_sv, match, desc_p);
16425             else /* @{expr}, %{expr} as a sub-expression */
16426                 return NULL;
16427         }
16428
16429         /* attempt to find a match within the aggregate */
16430         if (hash) {
16431             keysv = find_hash_subscript((const HV*)sv, uninit_sv);
16432             if (keysv)
16433                 subscript_type = FUV_SUBSCRIPT_HASH;
16434         }
16435         else {
16436             index = find_array_subscript((const AV *)sv, uninit_sv);
16437             if (index >= 0)
16438                 subscript_type = FUV_SUBSCRIPT_ARRAY;
16439         }
16440
16441         if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
16442             break;
16443
16444         return varname(gv, (char)(hash ? '%' : '@'), obase->op_targ,
16445                                     keysv, index, subscript_type);
16446       }
16447
16448     case OP_RV2SV:
16449         if (cUNOPx(obase)->op_first->op_type == OP_GV) {
16450             /* $global */
16451             gv = cGVOPx_gv(cUNOPx(obase)->op_first);
16452             if (!gv || !GvSTASH(gv))
16453                 break;
16454             if (match && (GvSV(gv) != uninit_sv))
16455                 break;
16456             return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
16457         }
16458         /* ${expr} */
16459         return find_uninit_var(cUNOPx(obase)->op_first, uninit_sv, 1, desc_p);
16460
16461     case OP_PADSV:
16462         if (match && PAD_SVl(obase->op_targ) != uninit_sv)
16463             break;
16464         return varname(NULL, '$', obase->op_targ,
16465                                     NULL, 0, FUV_SUBSCRIPT_NONE);
16466
16467     case OP_GVSV:
16468         gv = cGVOPx_gv(obase);
16469         if (!gv || (match && GvSV(gv) != uninit_sv) || !GvSTASH(gv))
16470             break;
16471         return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
16472
16473     case OP_AELEMFAST_LEX:
16474         if (match) {
16475             SV **svp;
16476             AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
16477             if (!av || SvRMAGICAL(av))
16478                 break;
16479             svp = av_fetch(av, (I8)obase->op_private, FALSE);
16480             if (!svp || *svp != uninit_sv)
16481                 break;
16482         }
16483         return varname(NULL, '$', obase->op_targ,
16484                        NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
16485     case OP_AELEMFAST:
16486         {
16487             gv = cGVOPx_gv(obase);
16488             if (!gv)
16489                 break;
16490             if (match) {
16491                 SV **svp;
16492                 AV *const av = GvAV(gv);
16493                 if (!av || SvRMAGICAL(av))
16494                     break;
16495                 svp = av_fetch(av, (I8)obase->op_private, FALSE);
16496                 if (!svp || *svp != uninit_sv)
16497                     break;
16498             }
16499             return varname(gv, '$', 0,
16500                     NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
16501         }
16502         NOT_REACHED; /* NOTREACHED */
16503
16504     case OP_EXISTS:
16505         o = cUNOPx(obase)->op_first;
16506         if (!o || o->op_type != OP_NULL ||
16507                 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
16508             break;
16509         return find_uninit_var(cBINOPo->op_last, uninit_sv, match, desc_p);
16510
16511     case OP_AELEM:
16512     case OP_HELEM:
16513     {
16514         bool negate = FALSE;
16515
16516         if (PL_op == obase)
16517             /* $a[uninit_expr] or $h{uninit_expr} */
16518             return find_uninit_var(cBINOPx(obase)->op_last,
16519                                                 uninit_sv, match, desc_p);
16520
16521         gv = NULL;
16522         o = cBINOPx(obase)->op_first;
16523         kid = cBINOPx(obase)->op_last;
16524
16525         /* get the av or hv, and optionally the gv */
16526         sv = NULL;
16527         if  (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
16528             sv = PAD_SV(o->op_targ);
16529         }
16530         else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
16531                 && cUNOPo->op_first->op_type == OP_GV)
16532         {
16533             gv = cGVOPx_gv(cUNOPo->op_first);
16534             if (!gv)
16535                 break;
16536             sv = o->op_type
16537                 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
16538         }
16539         if (!sv)
16540             break;
16541
16542         if (kid && kid->op_type == OP_NEGATE) {
16543             negate = TRUE;
16544             kid = cUNOPx(kid)->op_first;
16545         }
16546
16547         if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
16548             /* index is constant */
16549             SV* kidsv;
16550             if (negate) {
16551                 kidsv = newSVpvs_flags("-", SVs_TEMP);
16552                 sv_catsv(kidsv, cSVOPx_sv(kid));
16553             }
16554             else
16555                 kidsv = cSVOPx_sv(kid);
16556             if (match) {
16557                 if (SvMAGICAL(sv))
16558                     break;
16559                 if (obase->op_type == OP_HELEM) {
16560                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), kidsv, 0, 0);
16561                     if (!he || HeVAL(he) != uninit_sv)
16562                         break;
16563                 }
16564                 else {
16565                     SV * const  opsv = cSVOPx_sv(kid);
16566                     const IV  opsviv = SvIV(opsv);
16567                     SV * const * const svp = av_fetch(MUTABLE_AV(sv),
16568                         negate ? - opsviv : opsviv,
16569                         FALSE);
16570                     if (!svp || *svp != uninit_sv)
16571                         break;
16572                 }
16573             }
16574             if (obase->op_type == OP_HELEM)
16575                 return varname(gv, '%', o->op_targ,
16576                             kidsv, 0, FUV_SUBSCRIPT_HASH);
16577             else
16578                 return varname(gv, '@', o->op_targ, NULL,
16579                     negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
16580                     FUV_SUBSCRIPT_ARRAY);
16581         }
16582         else {
16583             /* index is an expression;
16584              * attempt to find a match within the aggregate */
16585             if (obase->op_type == OP_HELEM) {
16586                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
16587                 if (keysv)
16588                     return varname(gv, '%', o->op_targ,
16589                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
16590             }
16591             else {
16592                 const SSize_t index
16593                     = find_array_subscript((const AV *)sv, uninit_sv);
16594                 if (index >= 0)
16595                     return varname(gv, '@', o->op_targ,
16596                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
16597             }
16598             if (match)
16599                 break;
16600             return varname(gv,
16601                 (char)((o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
16602                 ? '@' : '%'),
16603                 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
16604         }
16605         NOT_REACHED; /* NOTREACHED */
16606     }
16607
16608     case OP_MULTIDEREF: {
16609         /* If we were executing OP_MULTIDEREF when the undef warning
16610          * triggered, then it must be one of the index values within
16611          * that triggered it. If not, then the only possibility is that
16612          * the value retrieved by the last aggregate index might be the
16613          * culprit. For the former, we set PL_multideref_pc each time before
16614          * using an index, so work though the item list until we reach
16615          * that point. For the latter, just work through the entire item
16616          * list; the last aggregate retrieved will be the candidate.
16617          * There is a third rare possibility: something triggered
16618          * magic while fetching an array/hash element. Just display
16619          * nothing in this case.
16620          */
16621
16622         /* the named aggregate, if any */
16623         PADOFFSET agg_targ = 0;
16624         GV       *agg_gv   = NULL;
16625         /* the last-seen index */
16626         UV        index_type;
16627         PADOFFSET index_targ;
16628         GV       *index_gv;
16629         IV        index_const_iv = 0; /* init for spurious compiler warn */
16630         SV       *index_const_sv;
16631         int       depth = 0;  /* how many array/hash lookups we've done */
16632
16633         UNOP_AUX_item *items = cUNOP_AUXx(obase)->op_aux;
16634         UNOP_AUX_item *last = NULL;
16635         UV actions = items->uv;
16636         bool is_hv;
16637
16638         if (PL_op == obase) {
16639             last = PL_multideref_pc;
16640             assert(last >= items && last <= items + items[-1].uv);
16641         }
16642
16643         assert(actions);
16644
16645         while (1) {
16646             is_hv = FALSE;
16647             switch (actions & MDEREF_ACTION_MASK) {
16648
16649             case MDEREF_reload:
16650                 actions = (++items)->uv;
16651                 continue;
16652
16653             case MDEREF_HV_padhv_helem:               /* $lex{...} */
16654                 is_hv = TRUE;
16655                 /* FALLTHROUGH */
16656             case MDEREF_AV_padav_aelem:               /* $lex[...] */
16657                 agg_targ = (++items)->pad_offset;
16658                 agg_gv = NULL;
16659                 break;
16660
16661             case MDEREF_HV_gvhv_helem:                /* $pkg{...} */
16662                 is_hv = TRUE;
16663                 /* FALLTHROUGH */
16664             case MDEREF_AV_gvav_aelem:                /* $pkg[...] */
16665                 agg_targ = 0;
16666                 agg_gv = (GV*)UNOP_AUX_item_sv(++items);
16667                 assert(isGV_with_GP(agg_gv));
16668                 break;
16669
16670             case MDEREF_HV_gvsv_vivify_rv2hv_helem:   /* $pkg->{...} */
16671             case MDEREF_HV_padsv_vivify_rv2hv_helem:  /* $lex->{...} */
16672                 ++items;
16673                 /* FALLTHROUGH */
16674             case MDEREF_HV_pop_rv2hv_helem:           /* expr->{...} */
16675             case MDEREF_HV_vivify_rv2hv_helem:        /* vivify, ->{...} */
16676                 agg_targ = 0;
16677                 agg_gv   = NULL;
16678                 is_hv    = TRUE;
16679                 break;
16680
16681             case MDEREF_AV_gvsv_vivify_rv2av_aelem:   /* $pkg->[...] */
16682             case MDEREF_AV_padsv_vivify_rv2av_aelem:  /* $lex->[...] */
16683                 ++items;
16684                 /* FALLTHROUGH */
16685             case MDEREF_AV_pop_rv2av_aelem:           /* expr->[...] */
16686             case MDEREF_AV_vivify_rv2av_aelem:        /* vivify, ->[...] */
16687                 agg_targ = 0;
16688                 agg_gv   = NULL;
16689             } /* switch */
16690
16691             index_targ     = 0;
16692             index_gv       = NULL;
16693             index_const_sv = NULL;
16694
16695             index_type = (actions & MDEREF_INDEX_MASK);
16696             switch (index_type) {
16697             case MDEREF_INDEX_none:
16698                 break;
16699             case MDEREF_INDEX_const:
16700                 if (is_hv)
16701                     index_const_sv = UNOP_AUX_item_sv(++items)
16702                 else
16703                     index_const_iv = (++items)->iv;
16704                 break;
16705             case MDEREF_INDEX_padsv:
16706                 index_targ = (++items)->pad_offset;
16707                 break;
16708             case MDEREF_INDEX_gvsv:
16709                 index_gv = (GV*)UNOP_AUX_item_sv(++items);
16710                 assert(isGV_with_GP(index_gv));
16711                 break;
16712             }
16713
16714             if (index_type != MDEREF_INDEX_none)
16715                 depth++;
16716
16717             if (   index_type == MDEREF_INDEX_none
16718                 || (actions & MDEREF_FLAG_last)
16719                 || (last && items >= last)
16720             )
16721                 break;
16722
16723             actions >>= MDEREF_SHIFT;
16724         } /* while */
16725
16726         if (PL_op == obase) {
16727             /* most likely index was undef */
16728
16729             *desc_p = (    (actions & MDEREF_FLAG_last)
16730                         && (obase->op_private
16731                                 & (OPpMULTIDEREF_EXISTS|OPpMULTIDEREF_DELETE)))
16732                         ?
16733                             (obase->op_private & OPpMULTIDEREF_EXISTS)
16734                                 ? "exists"
16735                                 : "delete"
16736                         : is_hv ? "hash element" : "array element";
16737             assert(index_type != MDEREF_INDEX_none);
16738             if (index_gv) {
16739                 if (GvSV(index_gv) == uninit_sv)
16740                     return varname(index_gv, '$', 0, NULL, 0,
16741                                                     FUV_SUBSCRIPT_NONE);
16742                 else
16743                     return NULL;
16744             }
16745             if (index_targ) {
16746                 if (PL_curpad[index_targ] == uninit_sv)
16747                     return varname(NULL, '$', index_targ,
16748                                     NULL, 0, FUV_SUBSCRIPT_NONE);
16749                 else
16750                     return NULL;
16751             }
16752             /* If we got to this point it was undef on a const subscript,
16753              * so magic probably involved, e.g. $ISA[0]. Give up. */
16754             return NULL;
16755         }
16756
16757         /* the SV returned by pp_multideref() was undef, if anything was */
16758
16759         if (depth != 1)
16760             break;
16761
16762         if (agg_targ)
16763             sv = PAD_SV(agg_targ);
16764         else if (agg_gv) {
16765             sv = is_hv ? MUTABLE_SV(GvHV(agg_gv)) : MUTABLE_SV(GvAV(agg_gv));
16766             if (!sv)
16767                 break;
16768             }
16769         else
16770             break;
16771
16772         if (index_type == MDEREF_INDEX_const) {
16773             if (match) {
16774                 if (SvMAGICAL(sv))
16775                     break;
16776                 if (is_hv) {
16777                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), index_const_sv, 0, 0);
16778                     if (!he || HeVAL(he) != uninit_sv)
16779                         break;
16780                 }
16781                 else {
16782                     SV * const * const svp =
16783                             av_fetch(MUTABLE_AV(sv), index_const_iv, FALSE);
16784                     if (!svp || *svp != uninit_sv)
16785                         break;
16786                 }
16787             }
16788             return is_hv
16789                 ? varname(agg_gv, '%', agg_targ,
16790                                 index_const_sv, 0,    FUV_SUBSCRIPT_HASH)
16791                 : varname(agg_gv, '@', agg_targ,
16792                                 NULL, index_const_iv, FUV_SUBSCRIPT_ARRAY);
16793         }
16794         else {
16795             /* index is an var */
16796             if (is_hv) {
16797                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
16798                 if (keysv)
16799                     return varname(agg_gv, '%', agg_targ,
16800                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
16801             }
16802             else {
16803                 const SSize_t index
16804                     = find_array_subscript((const AV *)sv, uninit_sv);
16805                 if (index >= 0)
16806                     return varname(agg_gv, '@', agg_targ,
16807                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
16808             }
16809             /* look for an element not found */
16810             if (!SvMAGICAL(sv)) {
16811                 SV *index_sv = NULL;
16812                 if (index_targ) {
16813                     index_sv = PL_curpad[index_targ];
16814                 }
16815                 else if (index_gv) {
16816                     index_sv = GvSV(index_gv);
16817                 }
16818                 if (index_sv && !SvMAGICAL(index_sv) && !SvROK(index_sv)) {
16819                     if (is_hv) {
16820                         HE *he = hv_fetch_ent(MUTABLE_HV(sv), index_sv, 0, 0);
16821                         if (!he) {
16822                             return varname(agg_gv, '%', agg_targ,
16823                                            index_sv, 0, FUV_SUBSCRIPT_HASH);
16824                         }
16825                     }
16826                     else {
16827                         SSize_t index = SvIV(index_sv);
16828                         SV * const * const svp =
16829                             av_fetch(MUTABLE_AV(sv), index, FALSE);
16830                         if (!svp) {
16831                             return varname(agg_gv, '@', agg_targ,
16832                                            NULL, index, FUV_SUBSCRIPT_ARRAY);
16833                         }
16834                     }
16835                 }
16836             }
16837             if (match)
16838                 break;
16839             return varname(agg_gv,
16840                 is_hv ? '%' : '@',
16841                 agg_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
16842         }
16843         NOT_REACHED; /* NOTREACHED */
16844     }
16845
16846     case OP_AASSIGN:
16847         /* only examine RHS */
16848         return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv,
16849                                                                 match, desc_p);
16850
16851     case OP_OPEN:
16852         o = cUNOPx(obase)->op_first;
16853         if (   o->op_type == OP_PUSHMARK
16854            || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)
16855         )
16856             o = OpSIBLING(o);
16857
16858         if (!OpHAS_SIBLING(o)) {
16859             /* one-arg version of open is highly magical */
16860
16861             if (o->op_type == OP_GV) { /* open FOO; */
16862                 gv = cGVOPx_gv(o);
16863                 if (match && GvSV(gv) != uninit_sv)
16864                     break;
16865                 return varname(gv, '$', 0,
16866                             NULL, 0, FUV_SUBSCRIPT_NONE);
16867             }
16868             /* other possibilities not handled are:
16869              * open $x; or open my $x;  should return '${*$x}'
16870              * open expr;               should return '$'.expr ideally
16871              */
16872              break;
16873         }
16874         match = 1;
16875         goto do_op;
16876
16877     /* ops where $_ may be an implicit arg */
16878     case OP_TRANS:
16879     case OP_TRANSR:
16880     case OP_SUBST:
16881     case OP_MATCH:
16882         if ( !(obase->op_flags & OPf_STACKED)) {
16883             if (uninit_sv == DEFSV)
16884                 return newSVpvs_flags("$_", SVs_TEMP);
16885             else if (obase->op_targ
16886                   && uninit_sv == PAD_SVl(obase->op_targ))
16887                 return varname(NULL, '$', obase->op_targ, NULL, 0,
16888                                FUV_SUBSCRIPT_NONE);
16889         }
16890         goto do_op;
16891
16892     case OP_PRTF:
16893     case OP_PRINT:
16894     case OP_SAY:
16895         match = 1; /* print etc can return undef on defined args */
16896         /* skip filehandle as it can't produce 'undef' warning  */
16897         o = cUNOPx(obase)->op_first;
16898         if ((obase->op_flags & OPf_STACKED)
16899             &&
16900                (   o->op_type == OP_PUSHMARK
16901                || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)))
16902             o = OpSIBLING(OpSIBLING(o));
16903         goto do_op2;
16904
16905
16906     case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
16907     case OP_CUSTOM: /* XS or custom code could trigger random warnings */
16908
16909         /* the following ops are capable of returning PL_sv_undef even for
16910          * defined arg(s) */
16911
16912     case OP_BACKTICK:
16913     case OP_PIPE_OP:
16914     case OP_FILENO:
16915     case OP_BINMODE:
16916     case OP_TIED:
16917     case OP_GETC:
16918     case OP_SYSREAD:
16919     case OP_SEND:
16920     case OP_IOCTL:
16921     case OP_SOCKET:
16922     case OP_SOCKPAIR:
16923     case OP_BIND:
16924     case OP_CONNECT:
16925     case OP_LISTEN:
16926     case OP_ACCEPT:
16927     case OP_SHUTDOWN:
16928     case OP_SSOCKOPT:
16929     case OP_GETPEERNAME:
16930     case OP_FTRREAD:
16931     case OP_FTRWRITE:
16932     case OP_FTREXEC:
16933     case OP_FTROWNED:
16934     case OP_FTEREAD:
16935     case OP_FTEWRITE:
16936     case OP_FTEEXEC:
16937     case OP_FTEOWNED:
16938     case OP_FTIS:
16939     case OP_FTZERO:
16940     case OP_FTSIZE:
16941     case OP_FTFILE:
16942     case OP_FTDIR:
16943     case OP_FTLINK:
16944     case OP_FTPIPE:
16945     case OP_FTSOCK:
16946     case OP_FTBLK:
16947     case OP_FTCHR:
16948     case OP_FTTTY:
16949     case OP_FTSUID:
16950     case OP_FTSGID:
16951     case OP_FTSVTX:
16952     case OP_FTTEXT:
16953     case OP_FTBINARY:
16954     case OP_FTMTIME:
16955     case OP_FTATIME:
16956     case OP_FTCTIME:
16957     case OP_READLINK:
16958     case OP_OPEN_DIR:
16959     case OP_READDIR:
16960     case OP_TELLDIR:
16961     case OP_SEEKDIR:
16962     case OP_REWINDDIR:
16963     case OP_CLOSEDIR:
16964     case OP_GMTIME:
16965     case OP_ALARM:
16966     case OP_SEMGET:
16967     case OP_GETLOGIN:
16968     case OP_SUBSTR:
16969     case OP_AEACH:
16970     case OP_EACH:
16971     case OP_SORT:
16972     case OP_CALLER:
16973     case OP_DOFILE:
16974     case OP_PROTOTYPE:
16975     case OP_NCMP:
16976     case OP_SMARTMATCH:
16977     case OP_UNPACK:
16978     case OP_SYSOPEN:
16979     case OP_SYSSEEK:
16980         match = 1;
16981         goto do_op;
16982
16983     case OP_ENTERSUB:
16984     case OP_GOTO:
16985         /* XXX tmp hack: these two may call an XS sub, and currently
16986           XS subs don't have a SUB entry on the context stack, so CV and
16987           pad determination goes wrong, and BAD things happen. So, just
16988           don't try to determine the value under those circumstances.
16989           Need a better fix at dome point. DAPM 11/2007 */
16990         break;
16991
16992     case OP_FLIP:
16993     case OP_FLOP:
16994     {
16995         GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
16996         if (gv && GvSV(gv) == uninit_sv)
16997             return newSVpvs_flags("$.", SVs_TEMP);
16998         goto do_op;
16999     }
17000
17001     case OP_POS:
17002         /* def-ness of rval pos() is independent of the def-ness of its arg */
17003         if ( !(obase->op_flags & OPf_MOD))
17004             break;
17005         /* FALLTHROUGH */
17006
17007     case OP_SCHOMP:
17008     case OP_CHOMP:
17009         if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
17010             return newSVpvs_flags("${$/}", SVs_TEMP);
17011         /* FALLTHROUGH */
17012
17013     default:
17014     do_op:
17015         if (!(obase->op_flags & OPf_KIDS))
17016             break;
17017         o = cUNOPx(obase)->op_first;
17018         
17019     do_op2:
17020         if (!o)
17021             break;
17022
17023         /* This loop checks all the kid ops, skipping any that cannot pos-
17024          * sibly be responsible for the uninitialized value; i.e., defined
17025          * constants and ops that return nothing.  If there is only one op
17026          * left that is not skipped, then we *know* it is responsible for
17027          * the uninitialized value.  If there is more than one op left, we
17028          * have to look for an exact match in the while() loop below.
17029          * Note that we skip padrange, because the individual pad ops that
17030          * it replaced are still in the tree, so we work on them instead.
17031          */
17032         o2 = NULL;
17033         for (kid=o; kid; kid = OpSIBLING(kid)) {
17034             const OPCODE type = kid->op_type;
17035             if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
17036               || (type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
17037               || (type == OP_PUSHMARK)
17038               || (type == OP_PADRANGE)
17039             )
17040             continue;
17041
17042             if (o2) { /* more than one found */
17043                 o2 = NULL;
17044                 break;
17045             }
17046             o2 = kid;
17047         }
17048         if (o2)
17049             return find_uninit_var(o2, uninit_sv, match, desc_p);
17050
17051         /* scan all args */
17052         while (o) {
17053             sv = find_uninit_var(o, uninit_sv, 1, desc_p);
17054             if (sv)
17055                 return sv;
17056             o = OpSIBLING(o);
17057         }
17058         break;
17059     }
17060     return NULL;
17061 }
17062
17063
17064 /*
17065 =for apidoc report_uninit
17066
17067 Print appropriate "Use of uninitialized variable" warning.
17068
17069 =cut
17070 */
17071
17072 void
17073 Perl_report_uninit(pTHX_ const SV *uninit_sv)
17074 {
17075     const char *desc = NULL;
17076     SV* varname = NULL;
17077
17078     if (PL_op) {
17079         desc = PL_op->op_type == OP_STRINGIFY && PL_op->op_folded
17080                 ? "join or string"
17081                 : PL_op->op_type == OP_MULTICONCAT
17082                     && (PL_op->op_private & OPpMULTICONCAT_FAKE)
17083                 ? "sprintf"
17084                 : OP_DESC(PL_op);
17085         if (uninit_sv && PL_curpad) {
17086             varname = find_uninit_var(PL_op, uninit_sv, 0, &desc);
17087             if (varname)
17088                 sv_insert(varname, 0, 0, " ", 1);
17089         }
17090     }
17091     else if (PL_curstackinfo->si_type == PERLSI_SORT && cxstack_ix == 0)
17092         /* we've reached the end of a sort block or sub,
17093          * and the uninit value is probably what that code returned */
17094         desc = "sort";
17095
17096     /* PL_warn_uninit_sv is constant */
17097     GCC_DIAG_IGNORE_STMT(-Wformat-nonliteral);
17098     if (desc)
17099         /* diag_listed_as: Use of uninitialized value%s */
17100         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit_sv,
17101                 SVfARG(varname ? varname : &PL_sv_no),
17102                 " in ", desc);
17103     else
17104         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
17105                 "", "", "");
17106     GCC_DIAG_RESTORE_STMT;
17107 }
17108
17109 /*
17110  * ex: set ts=8 sts=4 sw=4 et:
17111  */