This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
document the new flags behaviour and why
[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
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 internal function visit() scans the SV arenas list, and calls a specified
184 function for each SV it finds which is still live, I<i.e.> 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_body()
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
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_from_arena 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_ARENA_ROOT_IX=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. Similarly SVt_IV is re-used for HVAUX_ARENA_ROOT_IX.
871
872 */
873
874 typedef struct xpvhv_with_aux XPVHV_WITH_AUX;
875
876 struct body_details {
877     U8 body_size;       /* Size to allocate  */
878     U8 copy;            /* Size of structure to copy (may be shorter)  */
879     U8 offset;          /* Size of unalloced ghost fields to first alloced field*/
880     PERL_BITFIELD8 type : 4;        /* We have space for a sanity check. */
881     PERL_BITFIELD8 cant_upgrade : 1;/* Cannot upgrade this type */
882     PERL_BITFIELD8 zero_nv : 1;     /* zero the NV when upgrading from this */
883     PERL_BITFIELD8 arena : 1;       /* Allocated from an arena */
884     U32 arena_size;                 /* Size of arena to allocate */
885 };
886
887 #define ALIGNED_TYPE_NAME(name) name##_aligned
888 #define ALIGNED_TYPE(name)              \
889     typedef union {     \
890         name align_me;                          \
891         NV nv;                          \
892         IV iv;                          \
893     } ALIGNED_TYPE_NAME(name)
894
895 ALIGNED_TYPE(regexp);
896 ALIGNED_TYPE(XPVGV);
897 ALIGNED_TYPE(XPVLV);
898 ALIGNED_TYPE(XPVAV);
899 ALIGNED_TYPE(XPVHV);
900 ALIGNED_TYPE(XPVHV_WITH_AUX);
901 ALIGNED_TYPE(XPVCV);
902 ALIGNED_TYPE(XPVFM);
903 ALIGNED_TYPE(XPVIO);
904
905 #define HADNV FALSE
906 #define NONV TRUE
907
908
909 #ifdef PURIFY
910 /* With -DPURFIY we allocate everything directly, and don't use arenas.
911    This seems a rather elegant way to simplify some of the code below.  */
912 #define HASARENA FALSE
913 #else
914 #define HASARENA TRUE
915 #endif
916 #define NOARENA FALSE
917
918 /* Size the arenas to exactly fit a given number of bodies.  A count
919    of 0 fits the max number bodies into a PERL_ARENA_SIZE.block,
920    simplifying the default.  If count > 0, the arena is sized to fit
921    only that many bodies, allowing arenas to be used for large, rare
922    bodies (XPVFM, XPVIO) without undue waste.  The arena size is
923    limited by PERL_ARENA_SIZE, so we can safely oversize the
924    declarations.
925  */
926 #define FIT_ARENA0(body_size)                           \
927     ((size_t)(PERL_ARENA_SIZE / body_size) * body_size)
928 #define FIT_ARENAn(count,body_size)                     \
929     ( count * body_size <= PERL_ARENA_SIZE)             \
930     ? count * body_size                                 \
931     : FIT_ARENA0 (body_size)
932 #define FIT_ARENA(count,body_size)                      \
933    (U32)(count                                          \
934     ? FIT_ARENAn (count, body_size)                     \
935     : FIT_ARENA0 (body_size))
936
937 /* Calculate the length to copy. Specifically work out the length less any
938    final padding the compiler needed to add.  See the comment in sv_upgrade
939    for why copying the padding proved to be a bug.  */
940
941 #define copy_length(type, last_member) \
942         STRUCT_OFFSET(type, last_member) \
943         + sizeof (((type*)SvANY((const SV *)0))->last_member)
944
945 static const struct body_details bodies_by_type[] = {
946     /* HEs use this offset for their arena.  */
947     { 0, 0, 0, SVt_NULL, FALSE, NONV, NOARENA, 0 },
948
949     /* IVs are in the head, so the allocation size is 0.  */
950     { 0,
951       sizeof(IV), /* This is used to copy out the IV body.  */
952       STRUCT_OFFSET(XPVIV, xiv_iv), SVt_IV, FALSE, NONV,
953       NOARENA /* IVS don't need an arena  */, 0
954     },
955
956 #if NVSIZE <= IVSIZE
957     { 0, sizeof(NV),
958       STRUCT_OFFSET(XPVNV, xnv_u),
959       SVt_NV, FALSE, HADNV, NOARENA, 0 },
960 #else
961     { sizeof(NV), sizeof(NV),
962       STRUCT_OFFSET(XPVNV, xnv_u),
963       SVt_NV, FALSE, HADNV, HASARENA, FIT_ARENA(0, sizeof(NV)) },
964 #endif
965
966     { sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur),
967       copy_length(XPV, xpv_len) - STRUCT_OFFSET(XPV, xpv_cur),
968       + STRUCT_OFFSET(XPV, xpv_cur),
969       SVt_PV, FALSE, NONV, HASARENA,
970       FIT_ARENA(0, sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur)) },
971
972     { sizeof(XINVLIST) - STRUCT_OFFSET(XPV, xpv_cur),
973       copy_length(XINVLIST, is_offset) - STRUCT_OFFSET(XPV, xpv_cur),
974       + STRUCT_OFFSET(XPV, xpv_cur),
975       SVt_INVLIST, TRUE, NONV, HASARENA,
976       FIT_ARENA(0, sizeof(XINVLIST) - STRUCT_OFFSET(XPV, xpv_cur)) },
977
978     { sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur),
979       copy_length(XPVIV, xiv_u) - STRUCT_OFFSET(XPV, xpv_cur),
980       + STRUCT_OFFSET(XPV, xpv_cur),
981       SVt_PVIV, FALSE, NONV, HASARENA,
982       FIT_ARENA(0, sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur)) },
983
984     { sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur),
985       copy_length(XPVNV, xnv_u) - STRUCT_OFFSET(XPV, xpv_cur),
986       + STRUCT_OFFSET(XPV, xpv_cur),
987       SVt_PVNV, FALSE, HADNV, HASARENA,
988       FIT_ARENA(0, sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur)) },
989
990     { sizeof(XPVMG), copy_length(XPVMG, xnv_u), 0, SVt_PVMG, FALSE, HADNV,
991       HASARENA, FIT_ARENA(0, sizeof(XPVMG)) },
992
993     { sizeof(ALIGNED_TYPE_NAME(regexp)),
994       sizeof(regexp),
995       0,
996       SVt_REGEXP, TRUE, NONV, HASARENA,
997       FIT_ARENA(0, sizeof(ALIGNED_TYPE_NAME(regexp)))
998     },
999
1000     { sizeof(ALIGNED_TYPE_NAME(XPVGV)), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
1001       HASARENA, FIT_ARENA(0, sizeof(ALIGNED_TYPE_NAME(XPVGV))) },
1002
1003     { sizeof(ALIGNED_TYPE_NAME(XPVLV)), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
1004       HASARENA, FIT_ARENA(0, sizeof(ALIGNED_TYPE_NAME(XPVLV))) },
1005
1006     { sizeof(ALIGNED_TYPE_NAME(XPVAV)),
1007       copy_length(XPVAV, xav_alloc),
1008       0,
1009       SVt_PVAV, TRUE, NONV, HASARENA,
1010       FIT_ARENA(0, sizeof(ALIGNED_TYPE_NAME(XPVAV))) },
1011
1012     { sizeof(ALIGNED_TYPE_NAME(XPVHV)),
1013       copy_length(XPVHV, xhv_max),
1014       0,
1015       SVt_PVHV, TRUE, NONV, HASARENA,
1016       FIT_ARENA(0, sizeof(ALIGNED_TYPE_NAME(XPVHV))) },
1017
1018     { sizeof(ALIGNED_TYPE_NAME(XPVCV)),
1019       sizeof(XPVCV),
1020       0,
1021       SVt_PVCV, TRUE, NONV, HASARENA,
1022       FIT_ARENA(0, sizeof(ALIGNED_TYPE_NAME(XPVCV))) },
1023
1024     { sizeof(ALIGNED_TYPE_NAME(XPVFM)),
1025       sizeof(XPVFM),
1026       0,
1027       SVt_PVFM, TRUE, NONV, NOARENA,
1028       FIT_ARENA(20, sizeof(ALIGNED_TYPE_NAME(XPVFM))) },
1029
1030     { sizeof(ALIGNED_TYPE_NAME(XPVIO)),
1031       sizeof(XPVIO),
1032       0,
1033       SVt_PVIO, TRUE, NONV, HASARENA,
1034       FIT_ARENA(24, sizeof(ALIGNED_TYPE_NAME(XPVIO))) },
1035 };
1036
1037 #define new_body_allocated(sv_type)             \
1038     (void *)((char *)S_new_body(aTHX_ sv_type)  \
1039              - bodies_by_type[sv_type].offset)
1040
1041 /* return a thing to the free list */
1042
1043 #define del_body(thing, root)                           \
1044     STMT_START {                                        \
1045         void ** const thing_copy = (void **)thing;      \
1046         *thing_copy = *root;                            \
1047         *root = (void*)thing_copy;                      \
1048     } STMT_END
1049
1050 #ifdef PURIFY
1051 #if !(NVSIZE <= IVSIZE)
1052 #  define new_XNV()     safemalloc(sizeof(XPVNV))
1053 #endif
1054 #define new_XPVNV()     safemalloc(sizeof(XPVNV))
1055 #define new_XPVMG()     safemalloc(sizeof(XPVMG))
1056
1057 #define del_body_by_type(p, type)       safefree(p)
1058
1059 #else /* !PURIFY */
1060
1061 #if !(NVSIZE <= IVSIZE)
1062 #  define new_XNV()     new_body_allocated(SVt_NV)
1063 #endif
1064 #define new_XPVNV()     new_body_allocated(SVt_PVNV)
1065 #define new_XPVMG()     new_body_allocated(SVt_PVMG)
1066
1067 #define del_body_by_type(p, type)                               \
1068     del_body(p + bodies_by_type[(type)].offset,                 \
1069              &PL_body_roots[(type)])
1070
1071 #endif /* PURIFY */
1072
1073 /* no arena for you! */
1074
1075 #define new_NOARENA(details) \
1076         safemalloc((details)->body_size + (details)->offset)
1077 #define new_NOARENAZ(details) \
1078         safecalloc((details)->body_size + (details)->offset, 1)
1079
1080 void *
1081 Perl_more_bodies (pTHX_ const svtype sv_type, const size_t body_size,
1082                   const size_t arena_size)
1083 {
1084     void ** const root = &PL_body_roots[sv_type];
1085     struct arena_desc *adesc;
1086     struct arena_set *aroot = (struct arena_set *) PL_body_arenas;
1087     unsigned int curr;
1088     char *start;
1089     const char *end;
1090     const size_t good_arena_size = Perl_malloc_good_size(arena_size);
1091 #if defined(DEBUGGING)
1092     static bool done_sanity_check;
1093
1094     if (!done_sanity_check) {
1095         unsigned int i = SVt_LAST;
1096
1097         done_sanity_check = TRUE;
1098
1099         while (i--)
1100             assert (bodies_by_type[i].type == i);
1101     }
1102 #endif
1103
1104     assert(arena_size);
1105
1106     /* may need new arena-set to hold new arena */
1107     if (!aroot || aroot->curr >= aroot->set_size) {
1108         struct arena_set *newroot;
1109         Newxz(newroot, 1, struct arena_set);
1110         newroot->set_size = ARENAS_PER_SET;
1111         newroot->next = aroot;
1112         aroot = newroot;
1113         PL_body_arenas = (void *) newroot;
1114         DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", (void*)aroot));
1115     }
1116
1117     /* ok, now have arena-set with at least 1 empty/available arena-desc */
1118     curr = aroot->curr++;
1119     adesc = &(aroot->set[curr]);
1120     assert(!adesc->arena);
1121
1122     Newx(adesc->arena, good_arena_size, char);
1123     adesc->size = good_arena_size;
1124     adesc->utype = sv_type;
1125     DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p size %" UVuf "\n",
1126                           curr, (void*)adesc->arena, (UV)good_arena_size));
1127
1128     start = (char *) adesc->arena;
1129
1130     /* Get the address of the byte after the end of the last body we can fit.
1131        Remember, this is integer division:  */
1132     end = start + good_arena_size / body_size * body_size;
1133
1134     /* computed count doesn't reflect the 1st slot reservation */
1135 #if defined(MYMALLOC) || defined(HAS_MALLOC_GOOD_SIZE)
1136     DEBUG_m(PerlIO_printf(Perl_debug_log,
1137                           "arena %p end %p arena-size %d (from %d) type %d "
1138                           "size %d ct %d\n",
1139                           (void*)start, (void*)end, (int)good_arena_size,
1140                           (int)arena_size, sv_type, (int)body_size,
1141                           (int)good_arena_size / (int)body_size));
1142 #else
1143     DEBUG_m(PerlIO_printf(Perl_debug_log,
1144                           "arena %p end %p arena-size %d type %d size %d ct %d\n",
1145                           (void*)start, (void*)end,
1146                           (int)arena_size, sv_type, (int)body_size,
1147                           (int)good_arena_size / (int)body_size));
1148 #endif
1149     *root = (void *)start;
1150
1151     while (1) {
1152         /* Where the next body would start:  */
1153         char * const next = start + body_size;
1154
1155         if (next >= end) {
1156             /* This is the last body:  */
1157             assert(next == end);
1158
1159             *(void **)start = 0;
1160             return *root;
1161         }
1162
1163         *(void**) start = (void *)next;
1164         start = next;
1165     }
1166 }
1167
1168 #ifndef PURIFY
1169
1170 /* grab a new thing from the arena's free list, allocating more if necessary. */
1171 #define new_body_from_arena(xpv, root_index, type_meta) \
1172     STMT_START { \
1173         void ** const r3wt = &PL_body_roots[root_index]; \
1174         xpv = (PTR_TBL_ENT_t*) (*((void **)(r3wt))      \
1175           ? *((void **)(r3wt)) : Perl_more_bodies(aTHX_ root_index, \
1176                                              type_meta.body_size,\
1177                                              type_meta.arena_size)); \
1178         *(r3wt) = *(void**)(xpv); \
1179     } STMT_END
1180
1181 PERL_STATIC_INLINE void *
1182 S_new_body(pTHX_ const svtype sv_type)
1183 {
1184     void *xpv;
1185     new_body_from_arena(xpv, sv_type, bodies_by_type[sv_type]);
1186     return xpv;
1187 }
1188
1189 #endif
1190
1191 static const struct body_details fake_rv =
1192     { 0, 0, 0, SVt_IV, FALSE, NONV, NOARENA, 0 };
1193
1194 static const struct body_details fake_hv_with_aux =
1195     /* The SVt_IV arena is used for (larger) PVHV bodies.  */
1196     { sizeof(ALIGNED_TYPE_NAME(XPVHV_WITH_AUX)),
1197       copy_length(XPVHV, xhv_max),
1198       0,
1199       SVt_PVHV, TRUE, NONV, HASARENA,
1200       FIT_ARENA(0, sizeof(ALIGNED_TYPE_NAME(XPVHV_WITH_AUX))) };
1201
1202 /*
1203 =for apidoc sv_upgrade
1204
1205 Upgrade an SV to a more complex form.  Generally adds a new body type to the
1206 SV, then copies across as much information as possible from the old body.
1207 It croaks if the SV is already in a more complex form than requested.  You
1208 generally want to use the C<SvUPGRADE> macro wrapper, which checks the type
1209 before calling C<sv_upgrade>, and hence does not croak.  See also
1210 C<L</svtype>>.
1211
1212 =cut
1213 */
1214
1215 void
1216 Perl_sv_upgrade(pTHX_ SV *const sv, svtype new_type)
1217 {
1218     void*       old_body;
1219     void*       new_body;
1220     const svtype old_type = SvTYPE(sv);
1221     const struct body_details *new_type_details;
1222     const struct body_details *old_type_details
1223         = bodies_by_type + old_type;
1224     SV *referent = NULL;
1225
1226     PERL_ARGS_ASSERT_SV_UPGRADE;
1227
1228     if (old_type == new_type)
1229         return;
1230
1231     /* This clause was purposefully added ahead of the early return above to
1232        the shared string hackery for (sort {$a <=> $b} keys %hash), with the
1233        inference by Nick I-S that it would fix other troublesome cases. See
1234        changes 7162, 7163 (f130fd4589cf5fbb24149cd4db4137c8326f49c1 and parent)
1235
1236        Given that shared hash key scalars are no longer PVIV, but PV, there is
1237        no longer need to unshare so as to free up the IVX slot for its proper
1238        purpose. So it's safe to move the early return earlier.  */
1239
1240     if (new_type > SVt_PVMG && SvIsCOW(sv)) {
1241         sv_force_normal_flags(sv, 0);
1242     }
1243
1244     old_body = SvANY(sv);
1245
1246     /* Copying structures onto other structures that have been neatly zeroed
1247        has a subtle gotcha. Consider XPVMG
1248
1249        +------+------+------+------+------+-------+-------+
1250        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |
1251        +------+------+------+------+------+-------+-------+
1252        0      4      8     12     16     20      24      28
1253
1254        where NVs are aligned to 8 bytes, so that sizeof that structure is
1255        actually 32 bytes long, with 4 bytes of padding at the end:
1256
1257        +------+------+------+------+------+-------+-------+------+
1258        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH | ???  |
1259        +------+------+------+------+------+-------+-------+------+
1260        0      4      8     12     16     20      24      28     32
1261
1262        so what happens if you allocate memory for this structure:
1263
1264        +------+------+------+------+------+-------+-------+------+------+...
1265        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |  GP  | NAME |
1266        +------+------+------+------+------+-------+-------+------+------+...
1267        0      4      8     12     16     20      24      28     32     36
1268
1269        zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1270        expect, because you copy the area marked ??? onto GP. Now, ??? may have
1271        started out as zero once, but it's quite possible that it isn't. So now,
1272        rather than a nicely zeroed GP, you have it pointing somewhere random.
1273        Bugs ensue.
1274
1275        (In fact, GP ends up pointing at a previous GP structure, because the
1276        principle cause of the padding in XPVMG getting garbage is a copy of
1277        sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob. Right now
1278        this happens to be moot because XPVGV has been re-ordered, with GP
1279        no longer after STASH)
1280
1281        So we are careful and work out the size of used parts of all the
1282        structures.  */
1283
1284     switch (old_type) {
1285     case SVt_NULL:
1286         break;
1287     case SVt_IV:
1288         if (SvROK(sv)) {
1289             referent = SvRV(sv);
1290             old_type_details = &fake_rv;
1291             if (new_type == SVt_NV)
1292                 new_type = SVt_PVNV;
1293         } else {
1294             if (new_type < SVt_PVIV) {
1295                 new_type = (new_type == SVt_NV)
1296                     ? SVt_PVNV : SVt_PVIV;
1297             }
1298         }
1299         break;
1300     case SVt_NV:
1301         if (new_type < SVt_PVNV) {
1302             new_type = SVt_PVNV;
1303         }
1304         break;
1305     case SVt_PV:
1306         assert(new_type > SVt_PV);
1307         STATIC_ASSERT_STMT(SVt_IV < SVt_PV);
1308         STATIC_ASSERT_STMT(SVt_NV < SVt_PV);
1309         break;
1310     case SVt_PVIV:
1311         break;
1312     case SVt_PVNV:
1313         break;
1314     case SVt_PVMG:
1315         /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1316            there's no way that it can be safely upgraded, because perl.c
1317            expects to Safefree(SvANY(PL_mess_sv))  */
1318         assert(sv != PL_mess_sv);
1319         break;
1320     default:
1321         if (UNLIKELY(old_type_details->cant_upgrade))
1322             Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1323                        sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
1324     }
1325
1326     if (UNLIKELY(old_type > new_type))
1327         Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1328                 (int)old_type, (int)new_type);
1329
1330     new_type_details = bodies_by_type + new_type;
1331
1332     SvFLAGS(sv) &= ~SVTYPEMASK;
1333     SvFLAGS(sv) |= new_type;
1334
1335     /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1336        the return statements above will have triggered.  */
1337     assert (new_type != SVt_NULL);
1338     switch (new_type) {
1339     case SVt_IV:
1340         assert(old_type == SVt_NULL);
1341         SET_SVANY_FOR_BODYLESS_IV(sv);
1342         SvIV_set(sv, 0);
1343         return;
1344     case SVt_NV:
1345         assert(old_type == SVt_NULL);
1346 #if NVSIZE <= IVSIZE
1347         SET_SVANY_FOR_BODYLESS_NV(sv);
1348 #else
1349         SvANY(sv) = new_XNV();
1350 #endif
1351         SvNV_set(sv, 0);
1352         return;
1353     case SVt_PVHV:
1354     case SVt_PVAV:
1355         assert(new_type_details->body_size);
1356
1357 #ifndef PURIFY
1358         assert(new_type_details->arena);
1359         assert(new_type_details->arena_size);
1360         /* This points to the start of the allocated area.  */
1361         new_body = S_new_body(aTHX_ new_type);
1362         /* xpvav and xpvhv have no offset, so no need to adjust new_body */
1363         assert(!(new_type_details->offset));
1364 #else
1365         /* We always allocated the full length item with PURIFY. To do this
1366            we fake things so that arena is false for all 16 types..  */
1367         new_body = new_NOARENAZ(new_type_details);
1368 #endif
1369         SvANY(sv) = new_body;
1370         if (new_type == SVt_PVAV) {
1371             *((XPVAV*) SvANY(sv)) = (XPVAV) {
1372                 .xmg_stash = NULL, .xmg_u = {.xmg_magic = NULL},
1373                 .xav_fill = -1, .xav_max = -1, .xav_alloc = 0
1374                 };
1375
1376             AvREAL_only(sv);
1377         } else {
1378             *((XPVHV*) SvANY(sv)) = (XPVHV) {
1379                 .xmg_stash = NULL, .xmg_u = {.xmg_magic = NULL},
1380                 .xhv_keys = 0,
1381                 /* start with PERL_HASH_DEFAULT_HvMAX+1 buckets: */
1382                 .xhv_max = PERL_HASH_DEFAULT_HvMAX
1383                 };
1384
1385             assert(!SvOK(sv));
1386             SvOK_off(sv);
1387 #ifndef NODEFAULT_SHAREKEYS
1388             HvSHAREKEYS_on(sv);         /* key-sharing on by default */
1389 #endif
1390         }
1391
1392         /* SVt_NULL isn't the only thing upgraded to AV or HV.
1393            The target created by newSVrv also is, and it can have magic.
1394            However, it never has SvPVX set.
1395         */
1396         if (old_type == SVt_IV) {
1397             assert(!SvROK(sv));
1398         } else if (old_type >= SVt_PV) {
1399             assert(SvPVX_const(sv) == 0);
1400         }
1401
1402         if (old_type >= SVt_PVMG) {
1403             SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic);
1404             SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
1405         } else {
1406             sv->sv_u.svu_array = NULL; /* or svu_hash  */
1407         }
1408         break;
1409
1410     case SVt_PVIV:
1411         /* XXX Is this still needed?  Was it ever needed?   Surely as there is
1412            no route from NV to PVIV, NOK can never be true  */
1413         assert(!SvNOKp(sv));
1414         assert(!SvNOK(sv));
1415         /* FALLTHROUGH */
1416     case SVt_PVIO:
1417     case SVt_PVFM:
1418     case SVt_PVGV:
1419     case SVt_PVCV:
1420     case SVt_PVLV:
1421     case SVt_INVLIST:
1422     case SVt_REGEXP:
1423     case SVt_PVMG:
1424     case SVt_PVNV:
1425     case SVt_PV:
1426
1427         assert(new_type_details->body_size);
1428         /* We always allocated the full length item with PURIFY. To do this
1429            we fake things so that arena is false for all 16 types..  */
1430 #ifndef PURIFY
1431         if(new_type_details->arena) {
1432             /* This points to the start of the allocated area.  */
1433             new_body = S_new_body(aTHX_ new_type);
1434             Zero(new_body, new_type_details->body_size, char);
1435             new_body = ((char *)new_body) - new_type_details->offset;
1436         } else
1437 #endif
1438         {
1439             new_body = new_NOARENAZ(new_type_details);
1440         }
1441         SvANY(sv) = new_body;
1442
1443         if (old_type_details->copy) {
1444             /* There is now the potential for an upgrade from something without
1445                an offset (PVNV or PVMG) to something with one (PVCV, PVFM)  */
1446             int offset = old_type_details->offset;
1447             int length = old_type_details->copy;
1448
1449             if (new_type_details->offset > old_type_details->offset) {
1450                 const int difference
1451                     = new_type_details->offset - old_type_details->offset;
1452                 offset += difference;
1453                 length -= difference;
1454             }
1455             assert (length >= 0);
1456
1457             Copy((char *)old_body + offset, (char *)new_body + offset, length,
1458                  char);
1459         }
1460
1461 #ifndef NV_ZERO_IS_ALLBITS_ZERO
1462         /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
1463          * correct 0.0 for us.  Otherwise, if the old body didn't have an
1464          * NV slot, but the new one does, then we need to initialise the
1465          * freshly created NV slot with whatever the correct bit pattern is
1466          * for 0.0  */
1467         if (old_type_details->zero_nv && !new_type_details->zero_nv
1468             && !isGV_with_GP(sv))
1469             SvNV_set(sv, 0);
1470 #endif
1471
1472         if (UNLIKELY(new_type == SVt_PVIO)) {
1473             IO * const io = MUTABLE_IO(sv);
1474             GV *iogv = gv_fetchpvs("IO::File::", GV_ADD, SVt_PVHV);
1475
1476             SvOBJECT_on(io);
1477             /* Clear the stashcache because a new IO could overrule a package
1478                name */
1479             DEBUG_o(Perl_deb(aTHX_ "sv_upgrade clearing PL_stashcache\n"));
1480             hv_clear(PL_stashcache);
1481
1482             SvSTASH_set(io, MUTABLE_HV(SvREFCNT_inc(GvHV(iogv))));
1483             IoPAGE_LEN(sv) = 60;
1484         }
1485         if (old_type < SVt_PV) {
1486             /* referent will be NULL unless the old type was SVt_IV emulating
1487                SVt_RV */
1488             sv->sv_u.svu_rv = referent;
1489         }
1490         break;
1491     default:
1492         Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1493                    (unsigned long)new_type);
1494     }
1495
1496     /* if this is zero, this is a body-less SVt_NULL, SVt_IV/SVt_RV,
1497        and sometimes SVt_NV */
1498     if (old_type_details->body_size) {
1499 #ifdef PURIFY
1500         safefree(old_body);
1501 #else
1502         /* Note that there is an assumption that all bodies of types that
1503            can be upgraded came from arenas. Only the more complex non-
1504            upgradable types are allowed to be directly malloc()ed.  */
1505         assert(old_type_details->arena);
1506         del_body((void*)((char*)old_body + old_type_details->offset),
1507                  &PL_body_roots[old_type]);
1508 #endif
1509     }
1510 }
1511
1512 struct xpvhv_aux*
1513 Perl_hv_auxalloc(pTHX_ HV *hv) {
1514     const struct body_details *old_type_details = bodies_by_type + SVt_PVHV;
1515     void *old_body;
1516     void *new_body;
1517
1518     PERL_ARGS_ASSERT_HV_AUXALLOC;
1519     assert(SvTYPE(hv) == SVt_PVHV);
1520     assert(!SvOOK(hv));
1521
1522 #ifdef PURIFY
1523     new_body = new_NOARENAZ(&fake_hv_with_aux);
1524 #else
1525     new_body_from_arena(new_body, HVAUX_ARENA_ROOT_IX, fake_hv_with_aux);
1526 #endif
1527
1528     old_body = SvANY(hv);
1529
1530     Copy((char *)old_body + old_type_details->offset,
1531          (char *)new_body + fake_hv_with_aux.offset,
1532          old_type_details->copy,
1533          char);
1534
1535 #ifdef PURIFY
1536     safefree(old_body);
1537 #else
1538     assert(old_type_details->arena);
1539     del_body((void*)((char*)old_body + old_type_details->offset),
1540              &PL_body_roots[SVt_PVHV]);
1541 #endif
1542
1543     SvANY(hv) = (XPVHV *) new_body;
1544     SvOOK_on(hv);
1545     return HvAUX(hv);
1546 }
1547
1548 /*
1549 =for apidoc sv_backoff
1550
1551 Remove any string offset.  You should normally use the C<SvOOK_off> macro
1552 wrapper instead.
1553
1554 =cut
1555 */
1556
1557 /* prior to 5.000 stable, this function returned the new OOK-less SvFLAGS
1558    prior to 5.23.4 this function always returned 0
1559 */
1560
1561 void
1562 Perl_sv_backoff(SV *const sv)
1563 {
1564     STRLEN delta;
1565     const char * const s = SvPVX_const(sv);
1566
1567     PERL_ARGS_ASSERT_SV_BACKOFF;
1568
1569     assert(SvOOK(sv));
1570     assert(SvTYPE(sv) != SVt_PVHV);
1571     assert(SvTYPE(sv) != SVt_PVAV);
1572
1573     SvOOK_offset(sv, delta);
1574
1575     SvLEN_set(sv, SvLEN(sv) + delta);
1576     SvPV_set(sv, SvPVX(sv) - delta);
1577     SvFLAGS(sv) &= ~SVf_OOK;
1578     Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1579     return;
1580 }
1581
1582
1583 /* forward declaration */
1584 static void S_sv_uncow(pTHX_ SV * const sv, const U32 flags);
1585
1586
1587 /*
1588 =for apidoc sv_grow
1589
1590 Expands the character buffer in the SV.  If necessary, uses C<sv_unref> and
1591 upgrades the SV to C<SVt_PV>.  Returns a pointer to the character buffer.
1592 Use the C<SvGROW> wrapper instead.
1593
1594 =cut
1595 */
1596
1597
1598 char *
1599 Perl_sv_grow(pTHX_ SV *const sv, STRLEN newlen)
1600 {
1601     char *s;
1602
1603     PERL_ARGS_ASSERT_SV_GROW;
1604
1605     if (SvROK(sv))
1606         sv_unref(sv);
1607     if (SvTYPE(sv) < SVt_PV) {
1608         sv_upgrade(sv, SVt_PV);
1609         s = SvPVX_mutable(sv);
1610     }
1611     else if (SvOOK(sv)) {       /* pv is offset? */
1612         sv_backoff(sv);
1613         s = SvPVX_mutable(sv);
1614         if (newlen > SvLEN(sv))
1615             newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1616     }
1617     else
1618     {
1619         if (SvIsCOW(sv)) S_sv_uncow(aTHX_ sv, 0);
1620         s = SvPVX_mutable(sv);
1621     }
1622
1623 #ifdef PERL_COPY_ON_WRITE
1624     /* the new COW scheme uses SvPVX(sv)[SvLEN(sv)-1] (if spare)
1625      * to store the COW count. So in general, allocate one more byte than
1626      * asked for, to make it likely this byte is always spare: and thus
1627      * make more strings COW-able.
1628      *
1629      * Only increment if the allocation isn't MEM_SIZE_MAX,
1630      * otherwise it will wrap to 0.
1631      */
1632     if ( newlen != MEM_SIZE_MAX )
1633         newlen++;
1634 #endif
1635
1636 #if defined(PERL_USE_MALLOC_SIZE) && defined(Perl_safesysmalloc_size)
1637 #define PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1638 #endif
1639
1640     if (newlen > SvLEN(sv)) {           /* need more room? */
1641         STRLEN minlen = SvCUR(sv);
1642         minlen += (minlen >> PERL_STRLEN_EXPAND_SHIFT) + 10;
1643         if (newlen < minlen)
1644             newlen = minlen;
1645 #ifndef PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1646
1647         /* Don't round up on the first allocation, as odds are pretty good that
1648          * the initial request is accurate as to what is really needed */
1649         if (SvLEN(sv)) {
1650             STRLEN rounded = PERL_STRLEN_ROUNDUP(newlen);
1651             if (rounded > newlen)
1652                 newlen = rounded;
1653         }
1654 #endif
1655         if (SvLEN(sv) && s) {
1656             s = (char*)saferealloc(s, newlen);
1657         }
1658         else {
1659             s = (char*)safemalloc(newlen);
1660             if (SvPVX_const(sv) && SvCUR(sv)) {
1661                 Move(SvPVX_const(sv), s, SvCUR(sv), char);
1662             }
1663         }
1664         SvPV_set(sv, s);
1665 #ifdef PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1666         /* Do this here, do it once, do it right, and then we will never get
1667            called back into sv_grow() unless there really is some growing
1668            needed.  */
1669         SvLEN_set(sv, Perl_safesysmalloc_size(s));
1670 #else
1671         SvLEN_set(sv, newlen);
1672 #endif
1673     }
1674     return s;
1675 }
1676
1677 /*
1678 =for apidoc sv_grow_fresh
1679
1680 A cut-down version of sv_grow intended only for when sv is a freshly-minted
1681 SVt_PV, SVt_PVIV, SVt_PVNV, or SVt_PVMG. i.e. sv has the default flags, has
1682 never been any other type, and does not have an existing string. Basically,
1683 just assigns a char buffer and returns a pointer to it.
1684
1685 =cut
1686 */
1687
1688
1689 char *
1690 Perl_sv_grow_fresh(pTHX_ SV *const sv, STRLEN newlen)
1691 {
1692     char *s;
1693
1694     PERL_ARGS_ASSERT_SV_GROW_FRESH;
1695
1696     assert(SvTYPE(sv) >= SVt_PV && SvTYPE(sv) <= SVt_PVMG);
1697     assert(!SvROK(sv));
1698     assert(!SvOOK(sv));
1699     assert(!SvIsCOW(sv));
1700     assert(!SvLEN(sv));
1701     assert(!SvCUR(sv));
1702
1703 #ifdef PERL_COPY_ON_WRITE
1704     /* the new COW scheme uses SvPVX(sv)[SvLEN(sv)-1] (if spare)
1705      * to store the COW count. So in general, allocate one more byte than
1706      * asked for, to make it likely this byte is always spare: and thus
1707      * make more strings COW-able.
1708      *
1709      * Only increment if the allocation isn't MEM_SIZE_MAX,
1710      * otherwise it will wrap to 0.
1711      */
1712     if ( newlen != MEM_SIZE_MAX )
1713         newlen++;
1714 #endif
1715
1716     /* 10 is a longstanding, hardcoded minimum length in sv_grow. */
1717     /* Just doing the same here for consistency. */
1718     if (newlen < 10)
1719         newlen = 10;
1720
1721     s = (char*)safemalloc(newlen);
1722     SvPV_set(sv, s);
1723
1724     /* No PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC here, since many strings */
1725     /* will never be grown once set. Let the real sv_grow worry about that. */
1726     SvLEN_set(sv, newlen);
1727     return s;
1728 }
1729
1730 /*
1731 =for apidoc sv_setiv
1732 =for apidoc_item sv_setiv_mg
1733
1734 These copy an integer into the given SV, upgrading first if necessary.
1735
1736 They differ only in that C<sv_setiv_mg> handles 'set' magic; C<sv_setiv> does
1737 not.
1738
1739 =cut
1740 */
1741
1742 void
1743 Perl_sv_setiv(pTHX_ SV *const sv, const IV i)
1744 {
1745     PERL_ARGS_ASSERT_SV_SETIV;
1746
1747     SV_CHECK_THINKFIRST_COW_DROP(sv);
1748     switch (SvTYPE(sv)) {
1749     case SVt_NULL:
1750     case SVt_NV:
1751         sv_upgrade(sv, SVt_IV);
1752         break;
1753     case SVt_PV:
1754         sv_upgrade(sv, SVt_PVIV);
1755         break;
1756
1757     case SVt_PVGV:
1758         if (!isGV_with_GP(sv))
1759             break;
1760         /* FALLTHROUGH */
1761     case SVt_PVAV:
1762     case SVt_PVHV:
1763     case SVt_PVCV:
1764     case SVt_PVFM:
1765     case SVt_PVIO:
1766         /* diag_listed_as: Can't coerce %s to %s in %s */
1767         Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1768                    OP_DESC(PL_op));
1769         NOT_REACHED; /* NOTREACHED */
1770         break;
1771     default: NOOP;
1772     }
1773     (void)SvIOK_only(sv);                       /* validate number */
1774     SvIV_set(sv, i);
1775     SvTAINT(sv);
1776 }
1777
1778 void
1779 Perl_sv_setiv_mg(pTHX_ SV *const sv, const IV i)
1780 {
1781     PERL_ARGS_ASSERT_SV_SETIV_MG;
1782
1783     sv_setiv(sv,i);
1784     SvSETMAGIC(sv);
1785 }
1786
1787 /*
1788 =for apidoc sv_setuv
1789 =for apidoc_item sv_setuv_mg
1790
1791 These copy an unsigned integer into the given SV, upgrading first if necessary.
1792
1793
1794 They differ only in that C<sv_setuv_mg> handles 'set' magic; C<sv_setuv> does
1795 not.
1796
1797 =cut
1798 */
1799
1800 void
1801 Perl_sv_setuv(pTHX_ SV *const sv, const UV u)
1802 {
1803     PERL_ARGS_ASSERT_SV_SETUV;
1804
1805     /* With the if statement to ensure that integers are stored as IVs whenever
1806        possible:
1807        u=1.49  s=0.52  cu=72.49  cs=10.64  scripts=270  tests=20865
1808
1809        without
1810        u=1.35  s=0.47  cu=73.45  cs=11.43  scripts=270  tests=20865
1811
1812        If you wish to remove the following if statement, so that this routine
1813        (and its callers) always return UVs, please benchmark to see what the
1814        effect is. Modern CPUs may be different. Or may not :-)
1815     */
1816     if (u <= (UV)IV_MAX) {
1817        sv_setiv(sv, (IV)u);
1818        return;
1819     }
1820     sv_setiv(sv, 0);
1821     SvIsUV_on(sv);
1822     SvUV_set(sv, u);
1823 }
1824
1825 void
1826 Perl_sv_setuv_mg(pTHX_ SV *const sv, const UV u)
1827 {
1828     PERL_ARGS_ASSERT_SV_SETUV_MG;
1829
1830     sv_setuv(sv,u);
1831     SvSETMAGIC(sv);
1832 }
1833
1834 /*
1835 =for apidoc sv_setnv
1836 =for apidoc_item sv_setnv_mg
1837
1838 These copy a double into the given SV, upgrading first if necessary.
1839
1840 They differ only in that C<sv_setnv_mg> handles 'set' magic; C<sv_setnv> does
1841 not.
1842
1843 =cut
1844 */
1845
1846 void
1847 Perl_sv_setnv(pTHX_ SV *const sv, const NV num)
1848 {
1849     PERL_ARGS_ASSERT_SV_SETNV;
1850
1851     SV_CHECK_THINKFIRST_COW_DROP(sv);
1852     switch (SvTYPE(sv)) {
1853     case SVt_NULL:
1854     case SVt_IV:
1855         sv_upgrade(sv, SVt_NV);
1856         break;
1857     case SVt_PV:
1858     case SVt_PVIV:
1859         sv_upgrade(sv, SVt_PVNV);
1860         break;
1861
1862     case SVt_PVGV:
1863         if (!isGV_with_GP(sv))
1864             break;
1865         /* FALLTHROUGH */
1866     case SVt_PVAV:
1867     case SVt_PVHV:
1868     case SVt_PVCV:
1869     case SVt_PVFM:
1870     case SVt_PVIO:
1871         /* diag_listed_as: Can't coerce %s to %s in %s */
1872         Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1873                    OP_DESC(PL_op));
1874         NOT_REACHED; /* NOTREACHED */
1875         break;
1876     default: NOOP;
1877     }
1878     SvNV_set(sv, num);
1879     (void)SvNOK_only(sv);                       /* validate number */
1880     SvTAINT(sv);
1881 }
1882
1883 void
1884 Perl_sv_setnv_mg(pTHX_ SV *const sv, const NV num)
1885 {
1886     PERL_ARGS_ASSERT_SV_SETNV_MG;
1887
1888     sv_setnv(sv,num);
1889     SvSETMAGIC(sv);
1890 }
1891
1892 /*
1893 =for apidoc sv_setrv_noinc
1894 =for apidoc_item sv_setrv_noinc_mg
1895
1896 Copies an SV pointer into the given SV as an SV reference, upgrading it if
1897 necessary. After this, C<SvRV(sv)> is equal to I<ref>. This does not adjust
1898 the reference count of I<ref>. The reference I<ref> must not be NULL.
1899
1900 C<sv_setrv_noinc_mg> will invoke 'set' magic on the SV; C<sv_setrv_noinc> will
1901 not.
1902
1903 =cut
1904 */
1905
1906 void
1907 Perl_sv_setrv_noinc(pTHX_ SV *const sv, SV *const ref)
1908 {
1909     PERL_ARGS_ASSERT_SV_SETRV_NOINC;
1910
1911     SV_CHECK_THINKFIRST_COW_DROP(sv);
1912     prepare_SV_for_RV(sv);
1913
1914     SvOK_off(sv);
1915     SvRV_set(sv, ref);
1916     SvROK_on(sv);
1917 }
1918
1919 void
1920 Perl_sv_setrv_noinc_mg(pTHX_ SV *const sv, SV *const ref)
1921 {
1922     PERL_ARGS_ASSERT_SV_SETRV_NOINC_MG;
1923
1924     sv_setrv_noinc(sv, ref);
1925     SvSETMAGIC(sv);
1926 }
1927
1928 /*
1929 =for apidoc sv_setrv_inc
1930 =for apidoc_item sv_setrv_inc_mg
1931
1932 As C<sv_setrv_noinc> but increments the reference count of I<ref>.
1933
1934 C<sv_setrv_inc_mg> will invoke 'set' magic on the SV; C<sv_setrv_inc> will
1935 not.
1936
1937 =cut
1938 */
1939
1940 void
1941 Perl_sv_setrv_inc(pTHX_ SV *const sv, SV *const ref)
1942 {
1943     PERL_ARGS_ASSERT_SV_SETRV_INC;
1944
1945     sv_setrv_noinc(sv, SvREFCNT_inc_simple_NN(ref));
1946 }
1947
1948 void
1949 Perl_sv_setrv_inc_mg(pTHX_ SV *const sv, SV *const ref)
1950 {
1951     PERL_ARGS_ASSERT_SV_SETRV_INC_MG;
1952
1953     sv_setrv_noinc(sv, SvREFCNT_inc_simple_NN(ref));
1954     SvSETMAGIC(sv);
1955 }
1956
1957 /* Return a cleaned-up, printable version of sv, for non-numeric, or
1958  * not incrementable warning display.
1959  * Originally part of S_not_a_number().
1960  * The return value may be != tmpbuf.
1961  */
1962
1963 STATIC const char *
1964 S_sv_display(pTHX_ SV *const sv, char *tmpbuf, STRLEN tmpbuf_size) {
1965     const char *pv;
1966
1967      PERL_ARGS_ASSERT_SV_DISPLAY;
1968
1969      if (DO_UTF8(sv)) {
1970           SV *dsv = newSVpvs_flags("", SVs_TEMP);
1971           pv = sv_uni_display(dsv, sv, 32, UNI_DISPLAY_ISPRINT);
1972      } else {
1973           char *d = tmpbuf;
1974           const char * const limit = tmpbuf + tmpbuf_size - 8;
1975           /* each *s can expand to 4 chars + "...\0",
1976              i.e. need room for 8 chars */
1977
1978           const char *s = SvPVX_const(sv);
1979           const char * const end = s + SvCUR(sv);
1980           for ( ; s < end && d < limit; s++ ) {
1981                int ch = (U8) *s;
1982                if (! isASCII(ch) && !isPRINT_LC(ch)) {
1983                     *d++ = 'M';
1984                     *d++ = '-';
1985
1986                     /* Map to ASCII "equivalent" of Latin1 */
1987                     ch = LATIN1_TO_NATIVE(NATIVE_TO_LATIN1(ch) & 127);
1988                }
1989                if (ch == '\n') {
1990                     *d++ = '\\';
1991                     *d++ = 'n';
1992                }
1993                else if (ch == '\r') {
1994                     *d++ = '\\';
1995                     *d++ = 'r';
1996                }
1997                else if (ch == '\f') {
1998                     *d++ = '\\';
1999                     *d++ = 'f';
2000                }
2001                else if (ch == '\\') {
2002                     *d++ = '\\';
2003                     *d++ = '\\';
2004                }
2005                else if (ch == '\0') {
2006                     *d++ = '\\';
2007                     *d++ = '0';
2008                }
2009                else if (isPRINT_LC(ch))
2010                     *d++ = ch;
2011                else {
2012                     *d++ = '^';
2013                     *d++ = toCTRL(ch);
2014                }
2015           }
2016           if (s < end) {
2017                *d++ = '.';
2018                *d++ = '.';
2019                *d++ = '.';
2020           }
2021           *d = '\0';
2022           pv = tmpbuf;
2023     }
2024
2025     return pv;
2026 }
2027
2028 /* Print an "isn't numeric" warning, using a cleaned-up,
2029  * printable version of the offending string
2030  */
2031
2032 STATIC void
2033 S_not_a_number(pTHX_ SV *const sv)
2034 {
2035      char tmpbuf[64];
2036      const char *pv;
2037
2038      PERL_ARGS_ASSERT_NOT_A_NUMBER;
2039
2040      pv = sv_display(sv, tmpbuf, sizeof(tmpbuf));
2041
2042     if (PL_op)
2043         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
2044                     /* diag_listed_as: Argument "%s" isn't numeric%s */
2045                     "Argument \"%s\" isn't numeric in %s", pv,
2046                     OP_DESC(PL_op));
2047     else
2048         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
2049                     /* diag_listed_as: Argument "%s" isn't numeric%s */
2050                     "Argument \"%s\" isn't numeric", pv);
2051 }
2052
2053 STATIC void
2054 S_not_incrementable(pTHX_ SV *const sv) {
2055      char tmpbuf[64];
2056      const char *pv;
2057
2058      PERL_ARGS_ASSERT_NOT_INCREMENTABLE;
2059
2060      pv = sv_display(sv, tmpbuf, sizeof(tmpbuf));
2061
2062      Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
2063                  "Argument \"%s\" treated as 0 in increment (++)", pv);
2064 }
2065
2066 /*
2067 =for apidoc looks_like_number
2068
2069 Test if the content of an SV looks like a number (or is a number).
2070 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
2071 non-numeric warning), even if your C<atof()> doesn't grok them.  Get-magic is
2072 ignored.
2073
2074 =cut
2075 */
2076
2077 I32
2078 Perl_looks_like_number(pTHX_ SV *const sv)
2079 {
2080     const char *sbegin;
2081     STRLEN len;
2082     int numtype;
2083
2084     PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER;
2085
2086     if (SvPOK(sv) || SvPOKp(sv)) {
2087         sbegin = SvPV_nomg_const(sv, len);
2088     }
2089     else
2090         return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
2091     numtype = grok_number(sbegin, len, NULL);
2092     return ((numtype & IS_NUMBER_TRAILING)) ? 0 : numtype;
2093 }
2094
2095 STATIC bool
2096 S_glob_2number(pTHX_ GV * const gv)
2097 {
2098     PERL_ARGS_ASSERT_GLOB_2NUMBER;
2099
2100     /* We know that all GVs stringify to something that is not-a-number,
2101         so no need to test that.  */
2102     if (ckWARN(WARN_NUMERIC))
2103     {
2104         SV *const buffer = sv_newmortal();
2105         gv_efullname3(buffer, gv, "*");
2106         not_a_number(buffer);
2107     }
2108     /* We just want something true to return, so that S_sv_2iuv_common
2109         can tail call us and return true.  */
2110     return TRUE;
2111 }
2112
2113 /* Actually, ISO C leaves conversion of UV to IV undefined, but
2114    until proven guilty, assume that things are not that bad... */
2115
2116 /*
2117    NV_PRESERVES_UV:
2118
2119    As 64 bit platforms often have an NV that doesn't preserve all bits of
2120    an IV (an assumption perl has been based on to date) it becomes necessary
2121    to remove the assumption that the NV always carries enough precision to
2122    recreate the IV whenever needed, and that the NV is the canonical form.
2123    Instead, IV/UV and NV need to be given equal rights. So as to not lose
2124    precision as a side effect of conversion (which would lead to insanity
2125    and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
2126    1) to distinguish between IV/UV/NV slots that have a valid conversion cached
2127       where precision was lost, and IV/UV/NV slots that have a valid conversion
2128       which has lost no precision
2129    2) to ensure that if a numeric conversion to one form is requested that
2130       would lose precision, the precise conversion (or differently
2131       imprecise conversion) is also performed and cached, to prevent
2132       requests for different numeric formats on the same SV causing
2133       lossy conversion chains. (lossless conversion chains are perfectly
2134       acceptable (still))
2135
2136
2137    flags are used:
2138    SvIOKp is true if the IV slot contains a valid value
2139    SvIOK  is true only if the IV value is accurate (UV if SvIOK_UV true)
2140    SvNOKp is true if the NV slot contains a valid value
2141    SvNOK  is true only if the NV value is accurate
2142
2143    so
2144    while converting from PV to NV, check to see if converting that NV to an
2145    IV(or UV) would lose accuracy over a direct conversion from PV to
2146    IV(or UV). If it would, cache both conversions, return NV, but mark
2147    SV as IOK NOKp (ie not NOK).
2148
2149    While converting from PV to IV, check to see if converting that IV to an
2150    NV would lose accuracy over a direct conversion from PV to NV. If it
2151    would, cache both conversions, flag similarly.
2152
2153    Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
2154    correctly because if IV & NV were set NV *always* overruled.
2155    Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
2156    changes - now IV and NV together means that the two are interchangeable:
2157    SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
2158
2159    The benefit of this is that operations such as pp_add know that if
2160    SvIOK is true for both left and right operands, then integer addition
2161    can be used instead of floating point (for cases where the result won't
2162    overflow). Before, floating point was always used, which could lead to
2163    loss of precision compared with integer addition.
2164
2165    * making IV and NV equal status should make maths accurate on 64 bit
2166      platforms
2167    * may speed up maths somewhat if pp_add and friends start to use
2168      integers when possible instead of fp. (Hopefully the overhead in
2169      looking for SvIOK and checking for overflow will not outweigh the
2170      fp to integer speedup)
2171    * will slow down integer operations (callers of SvIV) on "inaccurate"
2172      values, as the change from SvIOK to SvIOKp will cause a call into
2173      sv_2iv each time rather than a macro access direct to the IV slot
2174    * should speed up number->string conversion on integers as IV is
2175      favoured when IV and NV are equally accurate
2176
2177    ####################################################################
2178    You had better be using SvIOK_notUV if you want an IV for arithmetic:
2179    SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
2180    On the other hand, SvUOK is true iff UV.
2181    ####################################################################
2182
2183    Your mileage will vary depending your CPU's relative fp to integer
2184    performance ratio.
2185 */
2186
2187 #ifndef NV_PRESERVES_UV
2188 #  define IS_NUMBER_UNDERFLOW_IV 1
2189 #  define IS_NUMBER_UNDERFLOW_UV 2
2190 #  define IS_NUMBER_IV_AND_UV    2
2191 #  define IS_NUMBER_OVERFLOW_IV  4
2192 #  define IS_NUMBER_OVERFLOW_UV  5
2193
2194 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
2195
2196 /* For sv_2nv these three cases are "SvNOK and don't bother casting"  */
2197 STATIC int
2198 S_sv_2iuv_non_preserve(pTHX_ SV *const sv
2199 #  ifdef DEBUGGING
2200                        , I32 numtype
2201 #  endif
2202                        )
2203 {
2204     PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE;
2205     PERL_UNUSED_CONTEXT;
2206
2207     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));
2208     if (SvNVX(sv) < (NV)IV_MIN) {
2209         (void)SvIOKp_on(sv);
2210         (void)SvNOK_on(sv);
2211         SvIV_set(sv, IV_MIN);
2212         return IS_NUMBER_UNDERFLOW_IV;
2213     }
2214     if (SvNVX(sv) > (NV)UV_MAX) {
2215         (void)SvIOKp_on(sv);
2216         (void)SvNOK_on(sv);
2217         SvIsUV_on(sv);
2218         SvUV_set(sv, UV_MAX);
2219         return IS_NUMBER_OVERFLOW_UV;
2220     }
2221     (void)SvIOKp_on(sv);
2222     (void)SvNOK_on(sv);
2223     /* Can't use strtol etc to convert this string.  (See truth table in
2224        sv_2iv  */
2225     if (SvNVX(sv) < IV_MAX_P1) {
2226         SvIV_set(sv, I_V(SvNVX(sv)));
2227         if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2228             SvIOK_on(sv); /* Integer is precise. NOK, IOK */
2229         } else {
2230             /* Integer is imprecise. NOK, IOKp */
2231         }
2232         return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
2233     }
2234     SvIsUV_on(sv);
2235     SvUV_set(sv, U_V(SvNVX(sv)));
2236     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2237         if (SvUVX(sv) == UV_MAX) {
2238             /* As we know that NVs don't preserve UVs, UV_MAX cannot
2239                possibly be preserved by NV. Hence, it must be overflow.
2240                NOK, IOKp */
2241             return IS_NUMBER_OVERFLOW_UV;
2242         }
2243         SvIOK_on(sv); /* Integer is precise. NOK, UOK */
2244     } else {
2245         /* Integer is imprecise. NOK, IOKp */
2246     }
2247     return IS_NUMBER_OVERFLOW_IV;
2248 }
2249 #endif /* !NV_PRESERVES_UV*/
2250
2251 /* If numtype is infnan, set the NV of the sv accordingly.
2252  * If numtype is anything else, try setting the NV using Atof(PV). */
2253 static void
2254 S_sv_setnv(pTHX_ SV* sv, int numtype)
2255 {
2256     bool pok = cBOOL(SvPOK(sv));
2257     bool nok = FALSE;
2258 #ifdef NV_INF
2259     if ((numtype & IS_NUMBER_INFINITY)) {
2260         SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -NV_INF : NV_INF);
2261         nok = TRUE;
2262     } else
2263 #endif
2264 #ifdef NV_NAN
2265     if ((numtype & IS_NUMBER_NAN)) {
2266         SvNV_set(sv, NV_NAN);
2267         nok = TRUE;
2268     } else
2269 #endif
2270     if (pok) {
2271         SvNV_set(sv, Atof(SvPVX_const(sv)));
2272         /* Purposefully no true nok here, since we don't want to blow
2273          * away the possible IOK/UV of an existing sv. */
2274     }
2275     if (nok) {
2276         SvNOK_only(sv); /* No IV or UV please, this is pure infnan. */
2277         if (pok)
2278             SvPOK_on(sv); /* PV is okay, though. */
2279     }
2280 }
2281
2282 STATIC bool
2283 S_sv_2iuv_common(pTHX_ SV *const sv)
2284 {
2285     PERL_ARGS_ASSERT_SV_2IUV_COMMON;
2286
2287     if (SvNOKp(sv)) {
2288         /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2289          * without also getting a cached IV/UV from it at the same time
2290          * (ie PV->NV conversion should detect loss of accuracy and cache
2291          * IV or UV at same time to avoid this. */
2292         /* IV-over-UV optimisation - choose to cache IV if possible */
2293
2294         if (SvTYPE(sv) == SVt_NV)
2295             sv_upgrade(sv, SVt_PVNV);
2296
2297     got_nv:
2298         (void)SvIOKp_on(sv);    /* Must do this first, to clear any SvOOK */
2299         /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
2300            certainly cast into the IV range at IV_MAX, whereas the correct
2301            answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
2302            cases go to UV */
2303 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2304         if (Perl_isnan(SvNVX(sv))) {
2305             SvUV_set(sv, 0);
2306             SvIsUV_on(sv);
2307             return FALSE;
2308         }
2309 #endif
2310         if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2311             SvIV_set(sv, I_V(SvNVX(sv)));
2312             if (SvNVX(sv) == (NV) SvIVX(sv)
2313 #ifndef NV_PRESERVES_UV
2314                 && SvIVX(sv) != IV_MIN /* avoid negating IV_MIN below */
2315                 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2316                     (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2317                 /* Don't flag it as "accurately an integer" if the number
2318                    came from a (by definition imprecise) NV operation, and
2319                    we're outside the range of NV integer precision */
2320 #endif
2321                 ) {
2322                 if (SvNOK(sv))
2323                     SvIOK_on(sv);  /* Can this go wrong with rounding? NWC */
2324                 else {
2325                     /* scalar has trailing garbage, eg "42a" */
2326                 }
2327                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2328                                       "0x%" UVxf " iv(%" NVgf " => %" IVdf ") (precise)\n",
2329                                       PTR2UV(sv),
2330                                       SvNVX(sv),
2331                                       SvIVX(sv)));
2332
2333             } else {
2334                 /* IV not precise.  No need to convert from PV, as NV
2335                    conversion would already have cached IV if it detected
2336                    that PV->IV would be better than PV->NV->IV
2337                    flags already correct - don't set public IOK.  */
2338                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2339                                       "0x%" UVxf " iv(%" NVgf " => %" IVdf ") (imprecise)\n",
2340                                       PTR2UV(sv),
2341                                       SvNVX(sv),
2342                                       SvIVX(sv)));
2343             }
2344             /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2345                but the cast (NV)IV_MIN rounds to a the value less (more
2346                negative) than IV_MIN which happens to be equal to SvNVX ??
2347                Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2348                NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2349                (NV)UVX == NVX are both true, but the values differ. :-(
2350                Hopefully for 2s complement IV_MIN is something like
2351                0x8000000000000000 which will be exact. NWC */
2352         }
2353         else {
2354             SvUV_set(sv, U_V(SvNVX(sv)));
2355             if (
2356                 (SvNVX(sv) == (NV) SvUVX(sv))
2357 #ifndef  NV_PRESERVES_UV
2358                 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2359                 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2360                 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2361                 /* Don't flag it as "accurately an integer" if the number
2362                    came from a (by definition imprecise) NV operation, and
2363                    we're outside the range of NV integer precision */
2364 #endif
2365                 && SvNOK(sv)
2366                 )
2367                 SvIOK_on(sv);
2368             SvIsUV_on(sv);
2369             DEBUG_c(PerlIO_printf(Perl_debug_log,
2370                                   "0x%" UVxf " 2iv(%" UVuf " => %" IVdf ") (as unsigned)\n",
2371                                   PTR2UV(sv),
2372                                   SvUVX(sv),
2373                                   SvUVX(sv)));
2374         }
2375     }
2376     else if (SvPOKp(sv)) {
2377         UV value;
2378         int numtype;
2379         const char *s = SvPVX_const(sv);
2380         const STRLEN cur = SvCUR(sv);
2381
2382         /* short-cut for a single digit string like "1" */
2383
2384         if (cur == 1) {
2385             char c = *s;
2386             if (isDIGIT(c)) {
2387                 if (SvTYPE(sv) < SVt_PVIV)
2388                     sv_upgrade(sv, SVt_PVIV);
2389                 (void)SvIOK_on(sv);
2390                 SvIV_set(sv, (IV)(c - '0'));
2391                 return FALSE;
2392             }
2393         }
2394
2395         numtype = grok_number(s, cur, &value);
2396         /* We want to avoid a possible problem when we cache an IV/ a UV which
2397            may be later translated to an NV, and the resulting NV is not
2398            the same as the direct translation of the initial string
2399            (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2400            be careful to ensure that the value with the .456 is around if the
2401            NV value is requested in the future).
2402
2403            This means that if we cache such an IV/a UV, we need to cache the
2404            NV as well.  Moreover, we trade speed for space, and do not
2405            cache the NV if we are sure it's not needed.
2406          */
2407
2408         /* SVt_PVNV is one higher than SVt_PVIV, hence this order  */
2409         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2410              == IS_NUMBER_IN_UV) {
2411             /* It's definitely an integer, only upgrade to PVIV */
2412             if (SvTYPE(sv) < SVt_PVIV)
2413                 sv_upgrade(sv, SVt_PVIV);
2414             (void)SvIOK_on(sv);
2415         } else if (SvTYPE(sv) < SVt_PVNV)
2416             sv_upgrade(sv, SVt_PVNV);
2417
2418         if ((numtype & (IS_NUMBER_INFINITY | IS_NUMBER_NAN))) {
2419             if (ckWARN(WARN_NUMERIC) && ((numtype & IS_NUMBER_TRAILING)))
2420                 not_a_number(sv);
2421             S_sv_setnv(aTHX_ sv, numtype);
2422             goto got_nv;        /* Fill IV/UV slot and set IOKp */
2423         }
2424
2425         /* If NVs preserve UVs then we only use the UV value if we know that
2426            we aren't going to call atof() below. If NVs don't preserve UVs
2427            then the value returned may have more precision than atof() will
2428            return, even though value isn't perfectly accurate.  */
2429         if ((numtype & (IS_NUMBER_IN_UV
2430 #ifdef NV_PRESERVES_UV
2431                         | IS_NUMBER_NOT_INT
2432 #endif
2433             )) == IS_NUMBER_IN_UV) {
2434             /* This won't turn off the public IOK flag if it was set above  */
2435             (void)SvIOKp_on(sv);
2436
2437             if (!(numtype & IS_NUMBER_NEG)) {
2438                 /* positive */;
2439                 if (value <= (UV)IV_MAX) {
2440                     SvIV_set(sv, (IV)value);
2441                 } else {
2442                     /* it didn't overflow, and it was positive. */
2443                     SvUV_set(sv, value);
2444                     SvIsUV_on(sv);
2445                 }
2446             } else {
2447                 /* 2s complement assumption  */
2448                 if (value <= (UV)IV_MIN) {
2449                     SvIV_set(sv, value == (UV)IV_MIN
2450                                     ? IV_MIN : -(IV)value);
2451                 } else {
2452                     /* Too negative for an IV.  This is a double upgrade, but
2453                        I'm assuming it will be rare.  */
2454                     if (SvTYPE(sv) < SVt_PVNV)
2455                         sv_upgrade(sv, SVt_PVNV);
2456                     SvNOK_on(sv);
2457                     SvIOK_off(sv);
2458                     SvIOKp_on(sv);
2459                     SvNV_set(sv, -(NV)value);
2460                     SvIV_set(sv, IV_MIN);
2461                 }
2462             }
2463         }
2464         /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2465            will be in the previous block to set the IV slot, and the next
2466            block to set the NV slot.  So no else here.  */
2467
2468         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2469             != IS_NUMBER_IN_UV) {
2470             /* It wasn't an (integer that doesn't overflow the UV). */
2471             S_sv_setnv(aTHX_ sv, numtype);
2472
2473             if (! numtype && ckWARN(WARN_NUMERIC))
2474                 not_a_number(sv);
2475
2476             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2iv(%" NVgf ")\n",
2477                                   PTR2UV(sv), SvNVX(sv)));
2478
2479 #ifdef NV_PRESERVES_UV
2480             (void)SvIOKp_on(sv);
2481             (void)SvNOK_on(sv);
2482 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2483             if (Perl_isnan(SvNVX(sv))) {
2484                 SvUV_set(sv, 0);
2485                 SvIsUV_on(sv);
2486                 return FALSE;
2487             }
2488 #endif
2489             if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2490                 SvIV_set(sv, I_V(SvNVX(sv)));
2491                 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2492                     SvIOK_on(sv);
2493                 } else {
2494                     NOOP;  /* Integer is imprecise. NOK, IOKp */
2495                 }
2496                 /* UV will not work better than IV */
2497             } else {
2498                 if (SvNVX(sv) > (NV)UV_MAX) {
2499                     SvIsUV_on(sv);
2500                     /* Integer is inaccurate. NOK, IOKp, is UV */
2501                     SvUV_set(sv, UV_MAX);
2502                 } else {
2503                     SvUV_set(sv, U_V(SvNVX(sv)));
2504                     /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2505                        NV preservse UV so can do correct comparison.  */
2506                     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2507                         SvIOK_on(sv);
2508                     } else {
2509                         NOOP;   /* Integer is imprecise. NOK, IOKp, is UV */
2510                     }
2511                 }
2512                 SvIsUV_on(sv);
2513             }
2514 #else /* NV_PRESERVES_UV */
2515             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2516                 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2517                 /* The IV/UV slot will have been set from value returned by
2518                    grok_number above.  The NV slot has just been set using
2519                    Atof.  */
2520                 SvNOK_on(sv);
2521                 assert (SvIOKp(sv));
2522             } else {
2523                 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2524                     U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2525                     /* Small enough to preserve all bits. */
2526                     (void)SvIOKp_on(sv);
2527                     SvNOK_on(sv);
2528                     SvIV_set(sv, I_V(SvNVX(sv)));
2529                     if ((NV)(SvIVX(sv)) == SvNVX(sv))
2530                         SvIOK_on(sv);
2531                     /* Assumption: first non-preserved integer is < IV_MAX,
2532                        this NV is in the preserved range, therefore: */
2533                     if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2534                           < (UV)IV_MAX)) {
2535                         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);
2536                     }
2537                 } else {
2538                     /* IN_UV NOT_INT
2539                          0      0       already failed to read UV.
2540                          0      1       already failed to read UV.
2541                          1      0       you won't get here in this case. IV/UV
2542                                         slot set, public IOK, Atof() unneeded.
2543                          1      1       already read UV.
2544                        so there's no point in sv_2iuv_non_preserve() attempting
2545                        to use atol, strtol, strtoul etc.  */
2546 #  ifdef DEBUGGING
2547                     sv_2iuv_non_preserve (sv, numtype);
2548 #  else
2549                     sv_2iuv_non_preserve (sv);
2550 #  endif
2551                 }
2552             }
2553 #endif /* NV_PRESERVES_UV */
2554         /* It might be more code efficient to go through the entire logic above
2555            and conditionally set with SvIOKp_on() rather than SvIOK(), but it
2556            gets complex and potentially buggy, so more programmer efficient
2557            to do it this way, by turning off the public flags:  */
2558         if (!numtype)
2559             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2560         }
2561     }
2562     else {
2563         if (isGV_with_GP(sv))
2564             return glob_2number(MUTABLE_GV(sv));
2565
2566         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2567                 report_uninit(sv);
2568         if (SvTYPE(sv) < SVt_IV)
2569             /* Typically the caller expects that sv_any is not NULL now.  */
2570             sv_upgrade(sv, SVt_IV);
2571         /* Return 0 from the caller.  */
2572         return TRUE;
2573     }
2574     return FALSE;
2575 }
2576
2577 /*
2578 =for apidoc sv_2iv_flags
2579
2580 Return the integer value of an SV, doing any necessary string
2581 conversion.  If C<flags> has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.
2582 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2583
2584 =cut
2585 */
2586
2587 IV
2588 Perl_sv_2iv_flags(pTHX_ SV *const sv, const I32 flags)
2589 {
2590     PERL_ARGS_ASSERT_SV_2IV_FLAGS;
2591
2592     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2593          && SvTYPE(sv) != SVt_PVFM);
2594
2595     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2596         mg_get(sv);
2597
2598     if (SvROK(sv)) {
2599         if (SvAMAGIC(sv)) {
2600             SV * tmpstr;
2601             if (flags & SV_SKIP_OVERLOAD)
2602                 return 0;
2603             tmpstr = AMG_CALLunary(sv, numer_amg);
2604             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2605                 return SvIV(tmpstr);
2606             }
2607         }
2608         return PTR2IV(SvRV(sv));
2609     }
2610
2611     if (SvVALID(sv) || isREGEXP(sv)) {
2612         /* FBMs use the space for SvIVX and SvNVX for other purposes, so
2613            must not let them cache IVs.
2614            In practice they are extremely unlikely to actually get anywhere
2615            accessible by user Perl code - the only way that I'm aware of is when
2616            a constant subroutine which is used as the second argument to index.
2617
2618            Regexps have no SvIVX and SvNVX fields.
2619         */
2620         assert(SvPOKp(sv));
2621         {
2622             UV value;
2623             const char * const ptr =
2624                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2625             const int numtype
2626                 = grok_number(ptr, SvCUR(sv), &value);
2627
2628             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2629                 == IS_NUMBER_IN_UV) {
2630                 /* It's definitely an integer */
2631                 if (numtype & IS_NUMBER_NEG) {
2632                     if (value < (UV)IV_MIN)
2633                         return -(IV)value;
2634                 } else {
2635                     if (value < (UV)IV_MAX)
2636                         return (IV)value;
2637                 }
2638             }
2639
2640             /* Quite wrong but no good choices. */
2641             if ((numtype & IS_NUMBER_INFINITY)) {
2642                 return (numtype & IS_NUMBER_NEG) ? IV_MIN : IV_MAX;
2643             } else if ((numtype & IS_NUMBER_NAN)) {
2644                 return 0; /* So wrong. */
2645             }
2646
2647             if (!numtype) {
2648                 if (ckWARN(WARN_NUMERIC))
2649                     not_a_number(sv);
2650             }
2651             return I_V(Atof(ptr));
2652         }
2653     }
2654
2655     if (SvTHINKFIRST(sv)) {
2656         if (SvREADONLY(sv) && !SvOK(sv)) {
2657             if (ckWARN(WARN_UNINITIALIZED))
2658                 report_uninit(sv);
2659             return 0;
2660         }
2661     }
2662
2663     if (!SvIOKp(sv)) {
2664         if (S_sv_2iuv_common(aTHX_ sv))
2665             return 0;
2666     }
2667
2668     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2iv(%" IVdf ")\n",
2669         PTR2UV(sv),SvIVX(sv)));
2670     return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2671 }
2672
2673 /*
2674 =for apidoc sv_2uv_flags
2675
2676 Return the unsigned integer value of an SV, doing any necessary string
2677 conversion.  If C<flags> has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.
2678 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2679
2680 =for apidoc Amnh||SV_GMAGIC
2681
2682 =cut
2683 */
2684
2685 UV
2686 Perl_sv_2uv_flags(pTHX_ SV *const sv, const I32 flags)
2687 {
2688     PERL_ARGS_ASSERT_SV_2UV_FLAGS;
2689
2690     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2691         mg_get(sv);
2692
2693     if (SvROK(sv)) {
2694         if (SvAMAGIC(sv)) {
2695             SV *tmpstr;
2696             if (flags & SV_SKIP_OVERLOAD)
2697                 return 0;
2698             tmpstr = AMG_CALLunary(sv, numer_amg);
2699             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2700                 return SvUV(tmpstr);
2701             }
2702         }
2703         return PTR2UV(SvRV(sv));
2704     }
2705
2706     if (SvVALID(sv) || isREGEXP(sv)) {
2707         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2708            the same flag bit as SVf_IVisUV, so must not let them cache IVs.
2709            Regexps have no SvIVX and SvNVX fields. */
2710         assert(SvPOKp(sv));
2711         {
2712             UV value;
2713             const char * const ptr =
2714                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2715             const int numtype
2716                 = grok_number(ptr, SvCUR(sv), &value);
2717
2718             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2719                 == IS_NUMBER_IN_UV) {
2720                 /* It's definitely an integer */
2721                 if (!(numtype & IS_NUMBER_NEG))
2722                     return value;
2723             }
2724
2725             /* Quite wrong but no good choices. */
2726             if ((numtype & IS_NUMBER_INFINITY)) {
2727                 return UV_MAX; /* So wrong. */
2728             } else if ((numtype & IS_NUMBER_NAN)) {
2729                 return 0; /* So wrong. */
2730             }
2731
2732             if (!numtype) {
2733                 if (ckWARN(WARN_NUMERIC))
2734                     not_a_number(sv);
2735             }
2736             return U_V(Atof(ptr));
2737         }
2738     }
2739
2740     if (SvTHINKFIRST(sv)) {
2741         if (SvREADONLY(sv) && !SvOK(sv)) {
2742             if (ckWARN(WARN_UNINITIALIZED))
2743                 report_uninit(sv);
2744             return 0;
2745         }
2746     }
2747
2748     if (!SvIOKp(sv)) {
2749         if (S_sv_2iuv_common(aTHX_ sv))
2750             return 0;
2751     }
2752
2753     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2uv(%" UVuf ")\n",
2754                           PTR2UV(sv),SvUVX(sv)));
2755     return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2756 }
2757
2758 /*
2759 =for apidoc sv_2nv_flags
2760
2761 Return the num value of an SV, doing any necessary string or integer
2762 conversion.  If C<flags> has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.
2763 Normally used via the C<SvNV(sv)> and C<SvNVx(sv)> macros.
2764
2765 =cut
2766 */
2767
2768 NV
2769 Perl_sv_2nv_flags(pTHX_ SV *const sv, const I32 flags)
2770 {
2771     PERL_ARGS_ASSERT_SV_2NV_FLAGS;
2772
2773     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2774          && SvTYPE(sv) != SVt_PVFM);
2775     if (SvGMAGICAL(sv) || SvVALID(sv) || isREGEXP(sv)) {
2776         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2777            the same flag bit as SVf_IVisUV, so must not let them cache NVs.
2778            Regexps have no SvIVX and SvNVX fields.  */
2779         const char *ptr;
2780         if (flags & SV_GMAGIC)
2781             mg_get(sv);
2782         if (SvNOKp(sv))
2783             return SvNVX(sv);
2784         if (SvPOKp(sv) && !SvIOKp(sv)) {
2785             ptr = SvPVX_const(sv);
2786             if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2787                 !grok_number(ptr, SvCUR(sv), NULL))
2788                 not_a_number(sv);
2789             return Atof(ptr);
2790         }
2791         if (SvIOKp(sv)) {
2792             if (SvIsUV(sv))
2793                 return (NV)SvUVX(sv);
2794             else
2795                 return (NV)SvIVX(sv);
2796         }
2797         if (SvROK(sv)) {
2798             goto return_rok;
2799         }
2800         assert(SvTYPE(sv) >= SVt_PVMG);
2801         /* This falls through to the report_uninit near the end of the
2802            function. */
2803     } else if (SvTHINKFIRST(sv)) {
2804         if (SvROK(sv)) {
2805         return_rok:
2806             if (SvAMAGIC(sv)) {
2807                 SV *tmpstr;
2808                 if (flags & SV_SKIP_OVERLOAD)
2809                     return 0;
2810                 tmpstr = AMG_CALLunary(sv, numer_amg);
2811                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2812                     return SvNV(tmpstr);
2813                 }
2814             }
2815             return PTR2NV(SvRV(sv));
2816         }
2817         if (SvREADONLY(sv) && !SvOK(sv)) {
2818             if (ckWARN(WARN_UNINITIALIZED))
2819                 report_uninit(sv);
2820             return 0.0;
2821         }
2822     }
2823     if (SvTYPE(sv) < SVt_NV) {
2824         /* The logic to use SVt_PVNV if necessary is in sv_upgrade.  */
2825         sv_upgrade(sv, SVt_NV);
2826         CLANG_DIAG_IGNORE_STMT(-Wthread-safety);
2827         DEBUG_c({
2828             DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
2829             STORE_LC_NUMERIC_SET_STANDARD();
2830             PerlIO_printf(Perl_debug_log,
2831                           "0x%" UVxf " num(%" NVgf ")\n",
2832                           PTR2UV(sv), SvNVX(sv));
2833             RESTORE_LC_NUMERIC();
2834         });
2835         CLANG_DIAG_RESTORE_STMT;
2836
2837     }
2838     else if (SvTYPE(sv) < SVt_PVNV)
2839         sv_upgrade(sv, SVt_PVNV);
2840     if (SvNOKp(sv)) {
2841         return SvNVX(sv);
2842     }
2843     if (SvIOKp(sv)) {
2844         SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2845 #ifdef NV_PRESERVES_UV
2846         if (SvIOK(sv))
2847             SvNOK_on(sv);
2848         else
2849             SvNOKp_on(sv);
2850 #else
2851         /* Only set the public NV OK flag if this NV preserves the IV  */
2852         /* Check it's not 0xFFFFFFFFFFFFFFFF */
2853         if (SvIOK(sv) &&
2854             SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2855                        : (SvIVX(sv) == I_V(SvNVX(sv))))
2856             SvNOK_on(sv);
2857         else
2858             SvNOKp_on(sv);
2859 #endif
2860     }
2861     else if (SvPOKp(sv)) {
2862         UV value;
2863         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2864         if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2865             not_a_number(sv);
2866 #ifdef NV_PRESERVES_UV
2867         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2868             == IS_NUMBER_IN_UV) {
2869             /* It's definitely an integer */
2870             SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2871         } else {
2872             S_sv_setnv(aTHX_ sv, numtype);
2873         }
2874         if (numtype)
2875             SvNOK_on(sv);
2876         else
2877             SvNOKp_on(sv);
2878 #else
2879         SvNV_set(sv, Atof(SvPVX_const(sv)));
2880         /* Only set the public NV OK flag if this NV preserves the value in
2881            the PV at least as well as an IV/UV would.
2882            Not sure how to do this 100% reliably. */
2883         /* if that shift count is out of range then Configure's test is
2884            wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2885            UV_BITS */
2886         if (((UV)1 << NV_PRESERVES_UV_BITS) >
2887             U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2888             SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2889         } else if (!(numtype & IS_NUMBER_IN_UV)) {
2890             /* Can't use strtol etc to convert this string, so don't try.
2891                sv_2iv and sv_2uv will use the NV to convert, not the PV.  */
2892             SvNOK_on(sv);
2893         } else {
2894             /* value has been set.  It may not be precise.  */
2895             if ((numtype & IS_NUMBER_NEG) && (value >= (UV)IV_MIN)) {
2896                 /* 2s complement assumption for (UV)IV_MIN  */
2897                 SvNOK_on(sv); /* Integer is too negative.  */
2898             } else {
2899                 SvNOKp_on(sv);
2900                 SvIOKp_on(sv);
2901
2902                 if (numtype & IS_NUMBER_NEG) {
2903                     /* -IV_MIN is undefined, but we should never reach
2904                      * this point with both IS_NUMBER_NEG and value ==
2905                      * (UV)IV_MIN */
2906                     assert(value != (UV)IV_MIN);
2907                     SvIV_set(sv, -(IV)value);
2908                 } else if (value <= (UV)IV_MAX) {
2909                     SvIV_set(sv, (IV)value);
2910                 } else {
2911                     SvUV_set(sv, value);
2912                     SvIsUV_on(sv);
2913                 }
2914
2915                 if (numtype & IS_NUMBER_NOT_INT) {
2916                     /* I believe that even if the original PV had decimals,
2917                        they are lost beyond the limit of the FP precision.
2918                        However, neither is canonical, so both only get p
2919                        flags.  NWC, 2000/11/25 */
2920                     /* Both already have p flags, so do nothing */
2921                 } else {
2922                     const NV nv = SvNVX(sv);
2923                     /* XXX should this spot have NAN_COMPARE_BROKEN, too? */
2924                     if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2925                         if (SvIVX(sv) == I_V(nv)) {
2926                             SvNOK_on(sv);
2927                         } else {
2928                             /* It had no "." so it must be integer.  */
2929                         }
2930                         SvIOK_on(sv);
2931                     } else {
2932                         /* between IV_MAX and NV(UV_MAX).
2933                            Could be slightly > UV_MAX */
2934
2935                         if (numtype & IS_NUMBER_NOT_INT) {
2936                             /* UV and NV both imprecise.  */
2937                         } else {
2938                             const UV nv_as_uv = U_V(nv);
2939
2940                             if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2941                                 SvNOK_on(sv);
2942                             }
2943                             SvIOK_on(sv);
2944                         }
2945                     }
2946                 }
2947             }
2948         }
2949         /* It might be more code efficient to go through the entire logic above
2950            and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2951            gets complex and potentially buggy, so more programmer efficient
2952            to do it this way, by turning off the public flags:  */
2953         if (!numtype)
2954             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2955 #endif /* NV_PRESERVES_UV */
2956     }
2957     else {
2958         if (isGV_with_GP(sv)) {
2959             glob_2number(MUTABLE_GV(sv));
2960             return 0.0;
2961         }
2962
2963         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2964             report_uninit(sv);
2965         assert (SvTYPE(sv) >= SVt_NV);
2966         /* Typically the caller expects that sv_any is not NULL now.  */
2967         /* XXX Ilya implies that this is a bug in callers that assume this
2968            and ideally should be fixed.  */
2969         return 0.0;
2970     }
2971     CLANG_DIAG_IGNORE_STMT(-Wthread-safety);
2972     DEBUG_c({
2973         DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
2974         STORE_LC_NUMERIC_SET_STANDARD();
2975         PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2nv(%" NVgf ")\n",
2976                       PTR2UV(sv), SvNVX(sv));
2977         RESTORE_LC_NUMERIC();
2978     });
2979     CLANG_DIAG_RESTORE_STMT;
2980     return SvNVX(sv);
2981 }
2982
2983 /*
2984 =for apidoc sv_2num
2985
2986 Return an SV with the numeric value of the source SV, doing any necessary
2987 reference or overload conversion.  The caller is expected to have handled
2988 get-magic already.
2989
2990 =cut
2991 */
2992
2993 SV *
2994 Perl_sv_2num(pTHX_ SV *const sv)
2995 {
2996     PERL_ARGS_ASSERT_SV_2NUM;
2997
2998     if (!SvROK(sv))
2999         return sv;
3000     if (SvAMAGIC(sv)) {
3001         SV * const tmpsv = AMG_CALLunary(sv, numer_amg);
3002         TAINT_IF(tmpsv && SvTAINTED(tmpsv));
3003         if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
3004             return sv_2num(tmpsv);
3005     }
3006     return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
3007 }
3008
3009 /* int2str_table: lookup table containing string representations of all
3010  * two digit numbers. For example, int2str_table.arr[0] is "00" and
3011  * int2str_table.arr[12*2] is "12".
3012  *
3013  * We are going to read two bytes at a time, so we have to ensure that
3014  * the array is aligned to a 2 byte boundary. That's why it was made a
3015  * union with a dummy U16 member. */
3016 static const union {
3017     char arr[200];
3018     U16 dummy;
3019 } int2str_table = {{
3020     '0', '0', '0', '1', '0', '2', '0', '3', '0', '4', '0', '5', '0', '6',
3021     '0', '7', '0', '8', '0', '9', '1', '0', '1', '1', '1', '2', '1', '3',
3022     '1', '4', '1', '5', '1', '6', '1', '7', '1', '8', '1', '9', '2', '0',
3023     '2', '1', '2', '2', '2', '3', '2', '4', '2', '5', '2', '6', '2', '7',
3024     '2', '8', '2', '9', '3', '0', '3', '1', '3', '2', '3', '3', '3', '4',
3025     '3', '5', '3', '6', '3', '7', '3', '8', '3', '9', '4', '0', '4', '1',
3026     '4', '2', '4', '3', '4', '4', '4', '5', '4', '6', '4', '7', '4', '8',
3027     '4', '9', '5', '0', '5', '1', '5', '2', '5', '3', '5', '4', '5', '5',
3028     '5', '6', '5', '7', '5', '8', '5', '9', '6', '0', '6', '1', '6', '2',
3029     '6', '3', '6', '4', '6', '5', '6', '6', '6', '7', '6', '8', '6', '9',
3030     '7', '0', '7', '1', '7', '2', '7', '3', '7', '4', '7', '5', '7', '6',
3031     '7', '7', '7', '8', '7', '9', '8', '0', '8', '1', '8', '2', '8', '3',
3032     '8', '4', '8', '5', '8', '6', '8', '7', '8', '8', '8', '9', '9', '0',
3033     '9', '1', '9', '2', '9', '3', '9', '4', '9', '5', '9', '6', '9', '7',
3034     '9', '8', '9', '9'
3035 }};
3036
3037 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
3038  * UV as a string towards the end of buf, and return pointers to start and
3039  * end of it.
3040  *
3041  * We assume that buf is at least TYPE_CHARS(UV) long.
3042  */
3043
3044 PERL_STATIC_INLINE char *
3045 S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
3046 {
3047     char *ptr = buf + TYPE_CHARS(UV);
3048     char * const ebuf = ptr;
3049     int sign;
3050     U16 *word_ptr, *word_table;
3051
3052     PERL_ARGS_ASSERT_UIV_2BUF;
3053
3054     /* ptr has to be properly aligned, because we will cast it to U16* */
3055     assert(PTR2nat(ptr) % 2 == 0);
3056     /* we are going to read/write two bytes at a time */
3057     word_ptr = (U16*)ptr;
3058     word_table = (U16*)int2str_table.arr;
3059
3060     if (UNLIKELY(is_uv))
3061         sign = 0;
3062     else if (iv >= 0) {
3063         uv = iv;
3064         sign = 0;
3065     } else {
3066         /* Using 0- here to silence bogus warning from MS VC */
3067         uv = (UV) (0 - (UV) iv);
3068         sign = 1;
3069     }
3070
3071     while (uv > 99) {
3072         *--word_ptr = word_table[uv % 100];
3073         uv /= 100;
3074     }
3075     ptr = (char*)word_ptr;
3076
3077     if (uv < 10)
3078         *--ptr = (char)uv + '0';
3079     else {
3080         *--word_ptr = word_table[uv];
3081         ptr = (char*)word_ptr;
3082     }
3083
3084     if (sign)
3085         *--ptr = '-';
3086
3087     *peob = ebuf;
3088     return ptr;
3089 }
3090
3091 /* Helper for sv_2pv_flags and sv_vcatpvfn_flags.  If the NV is an
3092  * infinity or a not-a-number, writes the appropriate strings to the
3093  * buffer, including a zero byte.  On success returns the written length,
3094  * excluding the zero byte, on failure (not an infinity, not a nan)
3095  * returns zero, assert-fails on maxlen being too short.
3096  *
3097  * XXX for "Inf", "-Inf", and "NaN", we could have three read-only
3098  * shared string constants we point to, instead of generating a new
3099  * string for each instance. */
3100 STATIC size_t
3101 S_infnan_2pv(NV nv, char* buffer, size_t maxlen, char plus) {
3102     char* s = buffer;
3103     assert(maxlen >= 4);
3104     if (Perl_isinf(nv)) {
3105         if (nv < 0) {
3106             if (maxlen < 5) /* "-Inf\0"  */
3107                 return 0;
3108             *s++ = '-';
3109         } else if (plus) {
3110             *s++ = '+';
3111         }
3112         *s++ = 'I';
3113         *s++ = 'n';
3114         *s++ = 'f';
3115     }
3116     else if (Perl_isnan(nv)) {
3117         *s++ = 'N';
3118         *s++ = 'a';
3119         *s++ = 'N';
3120         /* XXX optionally output the payload mantissa bits as
3121          * "(unsigned)" (to match the nan("...") C99 function,
3122          * or maybe as "(0xhhh...)"  would make more sense...
3123          * provide a format string so that the user can decide?
3124          * NOTE: would affect the maxlen and assert() logic.*/
3125     }
3126     else {
3127       return 0;
3128     }
3129     assert((s == buffer + 3) || (s == buffer + 4));
3130     *s = 0;
3131     return s - buffer;
3132 }
3133
3134 /*
3135 =for apidoc sv_2pv_flags
3136
3137 Returns a pointer to the string value of an SV, and sets C<*lp> to its length.
3138 If flags has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.  Coerces C<sv> to a
3139 string if necessary.  Normally invoked via the C<SvPV_flags> macro.
3140 C<sv_2pv()> and C<sv_2pv_nomg> usually end up here too.
3141
3142 =cut
3143 */
3144
3145 char *
3146 Perl_sv_2pv_flags(pTHX_ SV *const sv, STRLEN *const lp, const U32 flags)
3147 {
3148     char *s;
3149
3150     PERL_ARGS_ASSERT_SV_2PV_FLAGS;
3151
3152     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
3153          && SvTYPE(sv) != SVt_PVFM);
3154     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
3155         mg_get(sv);
3156     if (SvROK(sv)) {
3157         if (SvAMAGIC(sv)) {
3158             SV *tmpstr;
3159             if (flags & SV_SKIP_OVERLOAD)
3160                 return NULL;
3161             tmpstr = AMG_CALLunary(sv, string_amg);
3162             TAINT_IF(tmpstr && SvTAINTED(tmpstr));
3163             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
3164                 /* Unwrap this:  */
3165                 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
3166                  */
3167
3168                 char *pv;
3169                 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
3170                     if (flags & SV_CONST_RETURN) {
3171                         pv = (char *) SvPVX_const(tmpstr);
3172                     } else {
3173                         pv = (flags & SV_MUTABLE_RETURN)
3174                             ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
3175                     }
3176                     if (lp)
3177                         *lp = SvCUR(tmpstr);
3178                 } else {
3179                     pv = sv_2pv_flags(tmpstr, lp, flags);
3180                 }
3181                 if (SvUTF8(tmpstr))
3182                     SvUTF8_on(sv);
3183                 else
3184                     SvUTF8_off(sv);
3185                 return pv;
3186             }
3187         }
3188         {
3189             STRLEN len;
3190             char *retval;
3191             char *buffer;
3192             SV *const referent = SvRV(sv);
3193
3194             if (!referent) {
3195                 len = 7;
3196                 retval = buffer = savepvn("NULLREF", len);
3197             } else if (SvTYPE(referent) == SVt_REGEXP &&
3198                        (!(PL_curcop->cop_hints & HINT_NO_AMAGIC) ||
3199                         amagic_is_enabled(string_amg))) {
3200                 REGEXP * const re = (REGEXP *)MUTABLE_PTR(referent);
3201
3202                 assert(re);
3203
3204                 /* If the regex is UTF-8 we want the containing scalar to
3205                    have an UTF-8 flag too */
3206                 if (RX_UTF8(re))
3207                     SvUTF8_on(sv);
3208                 else
3209                     SvUTF8_off(sv);
3210
3211                 if (lp)
3212                     *lp = RX_WRAPLEN(re);
3213
3214                 return RX_WRAPPED(re);
3215             } else {
3216                 const char *const typestring = sv_reftype(referent, 0);
3217                 const STRLEN typelen = strlen(typestring);
3218                 UV addr = PTR2UV(referent);
3219                 const char *stashname = NULL;
3220                 STRLEN stashnamelen = 0; /* hush, gcc */
3221                 const char *buffer_end;
3222
3223                 if (SvOBJECT(referent)) {
3224                     const HEK *const name = HvNAME_HEK(SvSTASH(referent));
3225
3226                     if (name) {
3227                         stashname = HEK_KEY(name);
3228                         stashnamelen = HEK_LEN(name);
3229
3230                         if (HEK_UTF8(name)) {
3231                             SvUTF8_on(sv);
3232                         } else {
3233                             SvUTF8_off(sv);
3234                         }
3235                     } else {
3236                         stashname = "__ANON__";
3237                         stashnamelen = 8;
3238                     }
3239                     len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
3240                         + 2 * sizeof(UV) + 2 /* )\0 */;
3241                 } else {
3242                     len = typelen + 3 /* (0x */
3243                         + 2 * sizeof(UV) + 2 /* )\0 */;
3244                 }
3245
3246                 Newx(buffer, len, char);
3247                 buffer_end = retval = buffer + len;
3248
3249                 /* Working backwards  */
3250                 *--retval = '\0';
3251                 *--retval = ')';
3252                 do {
3253                     *--retval = PL_hexdigit[addr & 15];
3254                 } while (addr >>= 4);
3255                 *--retval = 'x';
3256                 *--retval = '0';
3257                 *--retval = '(';
3258
3259                 retval -= typelen;
3260                 memcpy(retval, typestring, typelen);
3261
3262                 if (stashname) {
3263                     *--retval = '=';
3264                     retval -= stashnamelen;
3265                     memcpy(retval, stashname, stashnamelen);
3266                 }
3267                 /* retval may not necessarily have reached the start of the
3268                    buffer here.  */
3269                 assert (retval >= buffer);
3270
3271                 len = buffer_end - retval - 1; /* -1 for that \0  */
3272             }
3273             if (lp)
3274                 *lp = len;
3275             SAVEFREEPV(buffer);
3276             return retval;
3277         }
3278     }
3279
3280     if (SvPOKp(sv)) {
3281         if (lp)
3282             *lp = SvCUR(sv);
3283         if (flags & SV_MUTABLE_RETURN)
3284             return SvPVX_mutable(sv);
3285         if (flags & SV_CONST_RETURN)
3286             return (char *)SvPVX_const(sv);
3287         return SvPVX(sv);
3288     }
3289
3290     if (SvIOK(sv)) {
3291         /* I'm assuming that if both IV and NV are equally valid then
3292            converting the IV is going to be more efficient */
3293         const U32 isUIOK = SvIsUV(sv);
3294         /* The purpose of this union is to ensure that arr is aligned on
3295            a 2 byte boundary, because that is what uiv_2buf() requires */
3296         union {
3297             char arr[TYPE_CHARS(UV)];
3298             U16 dummy;
3299         } buf;
3300         char *ebuf, *ptr;
3301         STRLEN len;
3302
3303         if (SvTYPE(sv) < SVt_PVIV)
3304             sv_upgrade(sv, SVt_PVIV);
3305         ptr = uiv_2buf(buf.arr, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
3306         len = ebuf - ptr;
3307         /* inlined from sv_setpvn */
3308         s = SvGROW_mutable(sv, len + 1);
3309         Move(ptr, s, len, char);
3310         s += len;
3311         *s = '\0';
3312         /* We used to call SvPOK_on(). Whilst this is fine for (most) Perl code,
3313            it means that after this stringification is cached, there is no way
3314            to distinguish between values originally assigned as $a = 42; and
3315            $a = "42"; (or results of string operators vs numeric operators)
3316            where the value has subsequently been used in the other sense
3317            and had a value cached.
3318            This (somewhat) hack means that we retain the cached stringification,
3319            but don't set SVf_POK. Hence if a value is SVf_IOK|SVf_POK then it
3320            originated as "42", whereas if it's SVf_IOK then it originated as 42.
3321            (ignore SVp_IOK and SVp_POK)
3322            The SvPV macros are now updated to recognise this specific case
3323            (and that there isn't overloading or magic that could alter the
3324            cached value) and so return the cached value immediately without
3325            re-entering this function, getting back here to this block of code,
3326            and repeating the same conversion. */
3327         SvPOKp_on(sv);
3328     }
3329     else if (SvNOK(sv)) {
3330         if (SvTYPE(sv) < SVt_PVNV)
3331             sv_upgrade(sv, SVt_PVNV);
3332         if (SvNVX(sv) == 0.0
3333 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
3334             && !Perl_isnan(SvNVX(sv))
3335 #endif
3336         ) {
3337             s = SvGROW_mutable(sv, 2);
3338             *s++ = '0';
3339             *s = '\0';
3340         } else {
3341             STRLEN len;
3342             STRLEN size = 5; /* "-Inf\0" */
3343
3344             s = SvGROW_mutable(sv, size);
3345             len = S_infnan_2pv(SvNVX(sv), s, size, 0);
3346             if (len > 0) {
3347                 s += len;
3348                 SvPOK_on(sv);
3349             }
3350             else {
3351                 /* some Xenix systems wipe out errno here */
3352                 dSAVE_ERRNO;
3353
3354                 size =
3355                     1 + /* sign */
3356                     1 + /* "." */
3357                     NV_DIG +
3358                     1 + /* "e" */
3359                     1 + /* sign */
3360                     5 + /* exponent digits */
3361                     1 + /* \0 */
3362                     2; /* paranoia */
3363
3364                 s = SvGROW_mutable(sv, size);
3365 #ifndef USE_LOCALE_NUMERIC
3366                 SNPRINTF_G(SvNVX(sv), s, SvLEN(sv), NV_DIG);
3367
3368                 SvPOK_on(sv);
3369 #else
3370                 {
3371                     bool local_radix;
3372                     DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
3373                     STORE_LC_NUMERIC_SET_TO_NEEDED();
3374
3375                     local_radix = _NOT_IN_NUMERIC_STANDARD;
3376                     if (local_radix && SvCUR(PL_numeric_radix_sv) > 1) {
3377                         size += SvCUR(PL_numeric_radix_sv) - 1;
3378                         s = SvGROW_mutable(sv, size);
3379                     }
3380
3381                     SNPRINTF_G(SvNVX(sv), s, SvLEN(sv), NV_DIG);
3382
3383                     /* If the radix character is UTF-8, and actually is in the
3384                      * output, turn on the UTF-8 flag for the scalar */
3385                     if (   local_radix
3386                         && SvUTF8(PL_numeric_radix_sv)
3387                         && instr(s, SvPVX_const(PL_numeric_radix_sv)))
3388                     {
3389                         SvUTF8_on(sv);
3390                     }
3391
3392                     RESTORE_LC_NUMERIC();
3393                 }
3394
3395                 /* We don't call SvPOK_on(), because it may come to
3396                  * pass that the locale changes so that the
3397                  * stringification we just did is no longer correct.  We
3398                  * will have to re-stringify every time it is needed */
3399 #endif
3400                 RESTORE_ERRNO;
3401             }
3402             while (*s) s++;
3403         }
3404     }
3405     else if (isGV_with_GP(sv)) {
3406         GV *const gv = MUTABLE_GV(sv);
3407         SV *const buffer = sv_newmortal();
3408
3409         gv_efullname3(buffer, gv, "*");
3410
3411         assert(SvPOK(buffer));
3412         if (SvUTF8(buffer))
3413             SvUTF8_on(sv);
3414         else
3415             SvUTF8_off(sv);
3416         if (lp)
3417             *lp = SvCUR(buffer);
3418         return SvPVX(buffer);
3419     }
3420     else {
3421         if (lp)
3422             *lp = 0;
3423         if (flags & SV_UNDEF_RETURNS_NULL)
3424             return NULL;
3425         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
3426             report_uninit(sv);
3427         /* Typically the caller expects that sv_any is not NULL now.  */
3428         if (!SvREADONLY(sv) && SvTYPE(sv) < SVt_PV)
3429             sv_upgrade(sv, SVt_PV);
3430         return (char *)"";
3431     }
3432
3433     {
3434         const STRLEN len = s - SvPVX_const(sv);
3435         if (lp)
3436             *lp = len;
3437         SvCUR_set(sv, len);
3438     }
3439     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2pv(%s)\n",
3440                           PTR2UV(sv),SvPVX_const(sv)));
3441     if (flags & SV_CONST_RETURN)
3442         return (char *)SvPVX_const(sv);
3443     if (flags & SV_MUTABLE_RETURN)
3444         return SvPVX_mutable(sv);
3445     return SvPVX(sv);
3446 }
3447
3448 /*
3449 =for apidoc sv_copypv
3450 =for apidoc_item sv_copypv_nomg
3451 =for apidoc_item sv_copypv_flags
3452
3453 These copy a stringified representation of the source SV into the
3454 destination SV.  They automatically perform coercion of numeric values into
3455 strings.  Guaranteed to preserve the C<UTF8> flag even from overloaded objects.
3456 Similar in nature to C<sv_2pv[_flags]> but they operate directly on an SV
3457 instead of just the string.  Mostly they use L<perlintern/C<sv_2pv_flags>> to
3458 do the work, except when that would lose the UTF-8'ness of the PV.
3459
3460 The three forms differ only in whether or not they perform 'get magic' on
3461 C<sv>.  C<sv_copypv_nomg> skips 'get magic'; C<sv_copypv> performs it; and
3462 C<sv_copypv_flags> either performs it (if the C<SV_GMAGIC> bit is set in
3463 C<flags>) or doesn't (if that bit is cleared).
3464
3465 =cut
3466 */
3467
3468 void
3469 Perl_sv_copypv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
3470 {
3471     STRLEN len;
3472     const char *s;
3473
3474     PERL_ARGS_ASSERT_SV_COPYPV_FLAGS;
3475
3476     s = SvPV_flags_const(ssv,len,(flags & SV_GMAGIC));
3477     sv_setpvn(dsv,s,len);
3478     if (SvUTF8(ssv))
3479         SvUTF8_on(dsv);
3480     else
3481         SvUTF8_off(dsv);
3482 }
3483
3484 /*
3485 =for apidoc sv_2pvbyte
3486
3487 Returns a pointer to the byte-encoded representation of the SV, and set C<*lp>
3488 to its length.  If the SV is marked as being encoded as UTF-8, it will
3489 downgrade it to a byte string as a side-effect, if possible.  If the SV cannot
3490 be downgraded, this croaks.
3491
3492 Processes 'get' magic.
3493
3494 Usually accessed via the C<SvPVbyte> macro.
3495
3496 =cut
3497 */
3498
3499 char *
3500 Perl_sv_2pvbyte_flags(pTHX_ SV *sv, STRLEN *const lp, const U32 flags)
3501 {
3502     PERL_ARGS_ASSERT_SV_2PVBYTE_FLAGS;
3503
3504     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
3505         mg_get(sv);
3506     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3507      || isGV_with_GP(sv) || SvROK(sv)) {
3508         SV *sv2 = sv_newmortal();
3509         sv_copypv_nomg(sv2,sv);
3510         sv = sv2;
3511     }
3512     sv_utf8_downgrade_nomg(sv,0);
3513     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3514 }
3515
3516 /*
3517 =for apidoc sv_2pvutf8
3518
3519 Return a pointer to the UTF-8-encoded representation of the SV, and set C<*lp>
3520 to its length.  May cause the SV to be upgraded to UTF-8 as a side-effect.
3521
3522 Usually accessed via the C<SvPVutf8> macro.
3523
3524 =cut
3525 */
3526
3527 char *
3528 Perl_sv_2pvutf8_flags(pTHX_ SV *sv, STRLEN *const lp, const U32 flags)
3529 {
3530     PERL_ARGS_ASSERT_SV_2PVUTF8_FLAGS;
3531
3532     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
3533         mg_get(sv);
3534     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3535      || isGV_with_GP(sv) || SvROK(sv)) {
3536         SV *sv2 = sv_newmortal();
3537         sv_copypv_nomg(sv2,sv);
3538         sv = sv2;
3539     }
3540     sv_utf8_upgrade_nomg(sv);
3541     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3542 }
3543
3544
3545 /*
3546 =for apidoc sv_2bool
3547
3548 This macro is only used by C<sv_true()> or its macro equivalent, and only if
3549 the latter's argument is neither C<SvPOK>, C<SvIOK> nor C<SvNOK>.
3550 It calls C<sv_2bool_flags> with the C<SV_GMAGIC> flag.
3551
3552 =for apidoc sv_2bool_flags
3553
3554 This function is only used by C<sv_true()> and friends,  and only if
3555 the latter's argument is neither C<SvPOK>, C<SvIOK> nor C<SvNOK>.  If the flags
3556 contain C<SV_GMAGIC>, then it does an C<mg_get()> first.
3557
3558
3559 =cut
3560 */
3561
3562 bool
3563 Perl_sv_2bool_flags(pTHX_ SV *sv, I32 flags)
3564 {
3565     PERL_ARGS_ASSERT_SV_2BOOL_FLAGS;
3566
3567     restart:
3568     if(flags & SV_GMAGIC) SvGETMAGIC(sv);
3569
3570     if (!SvOK(sv))
3571         return 0;
3572     if (SvROK(sv)) {
3573         if (SvAMAGIC(sv)) {
3574             SV * const tmpsv = AMG_CALLunary(sv, bool__amg);
3575             if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv)))) {
3576                 bool svb;
3577                 sv = tmpsv;
3578                 if(SvGMAGICAL(sv)) {
3579                     flags = SV_GMAGIC;
3580                     goto restart; /* call sv_2bool */
3581                 }
3582                 /* expanded SvTRUE_common(sv, (flags = 0, goto restart)) */
3583                 else if(!SvOK(sv)) {
3584                     svb = 0;
3585                 }
3586                 else if(SvPOK(sv)) {
3587                     svb = SvPVXtrue(sv);
3588                 }
3589                 else if((SvFLAGS(sv) & (SVf_IOK|SVf_NOK))) {
3590                     svb = (SvIOK(sv) && SvIVX(sv) != 0)
3591                         || (SvNOK(sv) && SvNVX(sv) != 0.0);
3592                 }
3593                 else {
3594                     flags = 0;
3595                     goto restart; /* call sv_2bool_nomg */
3596                 }
3597                 return cBOOL(svb);
3598             }
3599         }
3600         assert(SvRV(sv));
3601         return TRUE;
3602     }
3603     if (isREGEXP(sv))
3604         return
3605           RX_WRAPLEN(sv) > 1 || (RX_WRAPLEN(sv) && *RX_WRAPPED(sv) != '0');
3606
3607     if (SvNOK(sv) && !SvPOK(sv))
3608         return SvNVX(sv) != 0.0;
3609
3610     return SvTRUE_common(sv, 0);
3611 }
3612
3613 /*
3614 =for apidoc sv_utf8_upgrade
3615 =for apidoc_item sv_utf8_upgrade_nomg
3616 =for apidoc_item sv_utf8_upgrade_flags
3617 =for apidoc_item sv_utf8_upgrade_flags_grow
3618
3619 These convert the PV of an SV to its UTF-8-encoded form.
3620 The SV is forced to string form if it is not already.
3621 They always set the C<SvUTF8> flag to avoid future validity checks even if the
3622 whole string is the same in UTF-8 as not.
3623 They return the number of bytes in the converted string
3624
3625 The forms differ in just two ways.  The main difference is whether or not they
3626 perform 'get magic' on C<sv>.  C<sv_utf8_upgrade_nomg> skips 'get magic';
3627 C<sv_utf8_upgrade> performs it; and C<sv_utf8_upgrade_flags> and
3628 C<sv_utf8_upgrade_flags_grow> either perform it (if the C<SV_GMAGIC> bit is set
3629 in C<flags>) or don't (if that bit is cleared).
3630
3631 The other difference is that C<sv_utf8_upgrade_flags_grow> has an additional
3632 parameter, C<extra>, which allows the caller to specify an amount of space to
3633 be reserved as spare beyond what is needed for the actual conversion.  This is
3634 used when the caller knows it will soon be needing yet more space, and it is
3635 more efficient to request space from the system in a single call.
3636 This form is otherwise identical to C<sv_utf8_upgrade_flags>.
3637
3638 These are not a general purpose byte encoding to Unicode interface: use the
3639 Encode extension for that.
3640
3641 The C<SV_FORCE_UTF8_UPGRADE> flag is now ignored.
3642
3643 =for apidoc Amnh||SV_GMAGIC|
3644 =for apidoc Amnh||SV_FORCE_UTF8_UPGRADE|
3645
3646 =cut
3647
3648 If the routine itself changes the string, it adds a trailing C<NUL>.  Such a
3649 C<NUL> isn't guaranteed due to having other routines do the work in some input
3650 cases, or if the input is already flagged as being in utf8.
3651
3652 */
3653
3654 STRLEN
3655 Perl_sv_utf8_upgrade_flags_grow(pTHX_ SV *const sv, const I32 flags, STRLEN extra)
3656 {
3657     PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
3658
3659     if (sv == &PL_sv_undef)
3660         return 0;
3661     if (!SvPOK_nog(sv)) {
3662         STRLEN len = 0;
3663         if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3664             (void) sv_2pv_flags(sv,&len, flags);
3665             if (SvUTF8(sv)) {
3666                 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3667                 return len;
3668             }
3669         } else {
3670             (void) SvPV_force_flags(sv,len,flags & SV_GMAGIC);
3671         }
3672     }
3673
3674     /* SVt_REGEXP's shouldn't be upgraded to UTF8 - they're already
3675      * compiled and individual nodes will remain non-utf8 even if the
3676      * stringified version of the pattern gets upgraded. Whether the
3677      * PVX of a REGEXP should be grown or we should just croak, I don't
3678      * know - DAPM */
3679     if (SvUTF8(sv) || isREGEXP(sv)) {
3680         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3681         return SvCUR(sv);
3682     }
3683
3684     if (SvIsCOW(sv)) {
3685         S_sv_uncow(aTHX_ sv, 0);
3686     }
3687
3688     if (SvCUR(sv) == 0) {
3689         if (extra) SvGROW(sv, extra + 1); /* Make sure is room for a trailing
3690                                              byte */
3691     } else { /* Assume Latin-1/EBCDIC */
3692         /* This function could be much more efficient if we
3693          * had a FLAG in SVs to signal if there are any variant
3694          * chars in the PV.  Given that there isn't such a flag
3695          * make the loop as fast as possible. */
3696         U8 * s = (U8 *) SvPVX_const(sv);
3697         U8 *t = s;
3698
3699         if (is_utf8_invariant_string_loc(s, SvCUR(sv), (const U8 **) &t)) {
3700
3701             /* utf8 conversion not needed because all are invariants.  Mark
3702              * as UTF-8 even if no variant - saves scanning loop */
3703             SvUTF8_on(sv);
3704             if (extra) SvGROW(sv, SvCUR(sv) + extra);
3705             return SvCUR(sv);
3706         }
3707
3708         /* Here, there is at least one variant (t points to the first one), so
3709          * the string should be converted to utf8.  Everything from 's' to
3710          * 't - 1' will occupy only 1 byte each on output.
3711          *
3712          * Note that the incoming SV may not have a trailing '\0', as certain
3713          * code in pp_formline can send us partially built SVs.
3714          *
3715          * There are two main ways to convert.  One is to create a new string
3716          * and go through the input starting from the beginning, appending each
3717          * converted value onto the new string as we go along.  Going this
3718          * route, it's probably best to initially allocate enough space in the
3719          * string rather than possibly running out of space and having to
3720          * reallocate and then copy what we've done so far.  Since everything
3721          * from 's' to 't - 1' is invariant, the destination can be initialized
3722          * with these using a fast memory copy.  To be sure to allocate enough
3723          * space, one could use the worst case scenario, where every remaining
3724          * byte expands to two under UTF-8, or one could parse it and count
3725          * exactly how many do expand.
3726          *
3727          * The other way is to unconditionally parse the remainder of the
3728          * string to figure out exactly how big the expanded string will be,
3729          * growing if needed.  Then start at the end of the string and place
3730          * the character there at the end of the unfilled space in the expanded
3731          * one, working backwards until reaching 't'.
3732          *
3733          * The problem with assuming the worst case scenario is that for very
3734          * long strings, we could allocate much more memory than actually
3735          * needed, which can create performance problems.  If we have to parse
3736          * anyway, the second method is the winner as it may avoid an extra
3737          * copy.  The code used to use the first method under some
3738          * circumstances, but now that there is faster variant counting on
3739          * ASCII platforms, the second method is used exclusively, eliminating
3740          * some code that no longer has to be maintained. */
3741
3742         {
3743             /* Count the total number of variants there are.  We can start
3744              * just beyond the first one, which is known to be at 't' */
3745             const Size_t invariant_length = t - s;
3746             U8 * e = (U8 *) SvEND(sv);
3747
3748             /* The length of the left overs, plus 1. */
3749             const Size_t remaining_length_p1 = e - t;
3750
3751             /* We expand by 1 for the variant at 't' and one for each remaining
3752              * variant (we start looking at 't+1') */
3753             Size_t expansion = 1 + variant_under_utf8_count(t + 1, e);
3754
3755             /* +1 = trailing NUL */
3756             Size_t need = SvCUR(sv) + expansion + extra + 1;
3757             U8 * d;
3758
3759             /* Grow if needed */
3760             if (SvLEN(sv) < need) {
3761                 t = invariant_length + (U8*) SvGROW(sv, need);
3762                 e = t + remaining_length_p1;
3763             }
3764             SvCUR_set(sv, invariant_length + remaining_length_p1 + expansion);
3765
3766             /* Set the NUL at the end */
3767             d = (U8 *) SvEND(sv);
3768             *d-- = '\0';
3769
3770             /* Having decremented d, it points to the position to put the
3771              * very last byte of the expanded string.  Go backwards through
3772              * the string, copying and expanding as we go, stopping when we
3773              * get to the part that is invariant the rest of the way down */
3774
3775             e--;
3776             while (e >= t) {
3777                 if (NATIVE_BYTE_IS_INVARIANT(*e)) {
3778                     *d-- = *e;
3779                 } else {
3780                     *d-- = UTF8_EIGHT_BIT_LO(*e);
3781                     *d-- = UTF8_EIGHT_BIT_HI(*e);
3782                 }
3783                 e--;
3784             }
3785
3786             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3787                 /* Update pos. We do it at the end rather than during
3788                  * the upgrade, to avoid slowing down the common case
3789                  * (upgrade without pos).
3790                  * pos can be stored as either bytes or characters.  Since
3791                  * this was previously a byte string we can just turn off
3792                  * the bytes flag. */
3793                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3794                 if (mg) {
3795                     mg->mg_flags &= ~MGf_BYTES;
3796                 }
3797                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3798                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3799             }
3800         }
3801     }
3802
3803     SvUTF8_on(sv);
3804     return SvCUR(sv);
3805 }
3806
3807 /*
3808 =for apidoc sv_utf8_downgrade
3809 =for apidoc_item sv_utf8_downgrade_flags
3810 =for apidoc_item sv_utf8_downgrade_nomg
3811
3812 These attempt to convert the PV of an SV from characters to bytes.  If the PV
3813 contains a character that cannot fit in a byte, this conversion will fail; in
3814 this case, C<FALSE> is returned if C<fail_ok> is true; otherwise they croak.
3815
3816 They are not a general purpose Unicode to byte encoding interface:
3817 use the C<Encode> extension for that.
3818
3819 They differ only in that:
3820
3821 C<sv_utf8_downgrade> processes 'get' magic on C<sv>.
3822
3823 C<sv_utf8_downgrade_nomg> does not.
3824
3825 C<sv_utf8_downgrade_flags> has an additional C<flags> parameter in which you can specify
3826 C<SV_GMAGIC> to process 'get' magic, or leave it cleared to not proccess 'get' magic.
3827
3828 =cut
3829 */
3830
3831 bool
3832 Perl_sv_utf8_downgrade_flags(pTHX_ SV *const sv, const bool fail_ok, const U32 flags)
3833 {
3834     PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE_FLAGS;
3835
3836     if (SvPOKp(sv) && SvUTF8(sv)) {
3837         if (SvCUR(sv)) {
3838             U8 *s;
3839             STRLEN len;
3840             U32 mg_flags = flags & SV_GMAGIC;
3841
3842             if (SvIsCOW(sv)) {
3843                 S_sv_uncow(aTHX_ sv, 0);
3844             }
3845             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3846                 /* update pos */
3847                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3848                 if (mg && mg->mg_len > 0 && mg->mg_flags & MGf_BYTES) {
3849                         mg->mg_len = sv_pos_b2u_flags(sv, mg->mg_len,
3850                                                 mg_flags|SV_CONST_RETURN);
3851                         mg_flags = 0; /* sv_pos_b2u does get magic */
3852                 }
3853                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3854                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3855
3856             }
3857             s = (U8 *) SvPV_flags(sv, len, mg_flags);
3858
3859             if (!utf8_to_bytes(s, &len)) {
3860                 if (fail_ok)
3861                     return FALSE;
3862                 else {
3863                     if (PL_op)
3864                         Perl_croak(aTHX_ "Wide character in %s",
3865                                    OP_DESC(PL_op));
3866                     else
3867                         Perl_croak(aTHX_ "Wide character");
3868                 }
3869             }
3870             SvCUR_set(sv, len);
3871         }
3872     }
3873     SvUTF8_off(sv);
3874     return TRUE;
3875 }
3876
3877 /*
3878 =for apidoc sv_utf8_encode
3879
3880 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3881 flag off so that it looks like octets again.
3882
3883 =cut
3884 */
3885
3886 void
3887 Perl_sv_utf8_encode(pTHX_ SV *const sv)
3888 {
3889     PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3890
3891     if (SvREADONLY(sv)) {
3892         sv_force_normal_flags(sv, 0);
3893     }
3894     (void) sv_utf8_upgrade(sv);
3895     SvUTF8_off(sv);
3896 }
3897
3898 /*
3899 =for apidoc sv_utf8_decode
3900
3901 If the PV of the SV is an octet sequence in Perl's extended UTF-8
3902 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3903 so that it looks like a character.  If the PV contains only single-byte
3904 characters, the C<SvUTF8> flag stays off.
3905 Scans PV for validity and returns FALSE if the PV is invalid UTF-8.
3906
3907 =cut
3908 */
3909
3910 bool
3911 Perl_sv_utf8_decode(pTHX_ SV *const sv)
3912 {
3913     PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3914
3915     if (SvPOKp(sv)) {
3916         const U8 *start, *c, *first_variant;
3917
3918         /* The octets may have got themselves encoded - get them back as
3919          * bytes
3920          */
3921         if (!sv_utf8_downgrade(sv, TRUE))
3922             return FALSE;
3923
3924         /* it is actually just a matter of turning the utf8 flag on, but
3925          * we want to make sure everything inside is valid utf8 first.
3926          */
3927         c = start = (const U8 *) SvPVX_const(sv);
3928         if (! is_utf8_invariant_string_loc(c, SvCUR(sv), &first_variant)) {
3929             if (!is_utf8_string(first_variant, SvCUR(sv) - (first_variant -c)))
3930                 return FALSE;
3931             SvUTF8_on(sv);
3932         }
3933         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3934             /* XXX Is this dead code?  XS_utf8_decode calls SvSETMAGIC
3935                    after this, clearing pos.  Does anything on CPAN
3936                    need this? */
3937             /* adjust pos to the start of a UTF8 char sequence */
3938             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3939             if (mg) {
3940                 I32 pos = mg->mg_len;
3941                 if (pos > 0) {
3942                     for (c = start + pos; c > start; c--) {
3943                         if (UTF8_IS_START(*c))
3944                             break;
3945                     }
3946                     mg->mg_len  = c - start;
3947                 }
3948             }
3949             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3950                 magic_setutf8(sv,mg); /* clear UTF8 cache */
3951         }
3952     }
3953     return TRUE;
3954 }
3955
3956 /*
3957 =for apidoc sv_setsv
3958 =for apidoc_item sv_setsv_flags
3959 =for apidoc_item sv_setsv_mg
3960 =for apidoc_item sv_setsv_nomg
3961
3962 These copy the contents of the source SV C<ssv> into the destination SV C<dsv>.
3963 C<ssv> may be destroyed if it is mortal, so don't use these functions if
3964 the source SV needs to be reused.
3965 Loosely speaking, they perform a copy-by-value, obliterating any previous
3966 content of the destination.
3967
3968 They differ only in that:
3969
3970 C<sv_setsv> calls 'get' magic on C<ssv>, but skips 'set' magic on C<dsv>.
3971
3972 C<sv_setsv_mg> calls both 'get' magic on C<ssv> and 'set' magic on C<dsv>.
3973
3974 C<sv_setsv_nomg> skips all magic.
3975
3976 C<sv_setsv_flags> has a C<flags> parameter which you can use to specify any
3977 combination of magic handling, and also you can specify C<SV_NOSTEAL> so that
3978 the buffers of temps will not be stolen.
3979
3980 You probably want to instead use one of the assortment of wrappers, such as
3981 C<L</SvSetSV>>, C<L</SvSetSV_nosteal>>, C<L</SvSetMagicSV>> and
3982 C<L</SvSetMagicSV_nosteal>>.
3983
3984 C<sv_setsv_flags> is the primary function for copying scalars, and most other
3985 copy-ish functions and macros use it underneath.
3986
3987 =for apidoc Amnh||SV_NOSTEAL
3988
3989 =cut
3990 */
3991
3992 static void
3993 S_glob_assign_glob(pTHX_ SV *const dsv, SV *const ssv, const int dtype)
3994 {
3995     I32 mro_changes = 0; /* 1 = method, 2 = isa, 3 = recursive isa */
3996     HV *old_stash = NULL;
3997
3998     PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3999
4000     if (dtype != SVt_PVGV && !isGV_with_GP(dsv)) {
4001         const char * const name = GvNAME(ssv);
4002         const STRLEN len = GvNAMELEN(ssv);
4003         {
4004             if (dtype >= SVt_PV) {
4005                 SvPV_free(dsv);
4006                 SvPV_set(dsv, 0);
4007                 SvLEN_set(dsv, 0);
4008                 SvCUR_set(dsv, 0);
4009             }
4010             SvUPGRADE(dsv, SVt_PVGV);
4011             (void)SvOK_off(dsv);
4012             isGV_with_GP_on(dsv);
4013         }
4014         GvSTASH(dsv) = GvSTASH(ssv);
4015         if (GvSTASH(dsv))
4016             Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dsv)), dsv);
4017         gv_name_set(MUTABLE_GV(dsv), name, len,
4018                         GV_ADD | (GvNAMEUTF8(ssv) ? SVf_UTF8 : 0 ));
4019         SvFAKE_on(dsv); /* can coerce to non-glob */
4020     }
4021
4022     if(GvGP(MUTABLE_GV(ssv))) {
4023         /* If source has method cache entry, clear it */
4024         if(GvCVGEN(ssv)) {
4025             SvREFCNT_dec(GvCV(ssv));
4026             GvCV_set(ssv, NULL);
4027             GvCVGEN(ssv) = 0;
4028         }
4029         /* If source has a real method, then a method is
4030            going to change */
4031         else if(
4032          GvCV((const GV *)ssv) && GvSTASH(dsv) && HvENAME(GvSTASH(dsv))
4033         ) {
4034             mro_changes = 1;
4035         }
4036     }
4037
4038     /* If dest already had a real method, that's a change as well */
4039     if(
4040         !mro_changes && GvGP(MUTABLE_GV(dsv)) && GvCVu((const GV *)dsv)
4041      && GvSTASH(dsv) && HvENAME(GvSTASH(dsv))
4042     ) {
4043         mro_changes = 1;
4044     }
4045
4046     /* We don't need to check the name of the destination if it was not a
4047        glob to begin with. */
4048     if(dtype == SVt_PVGV) {
4049         const char * const name = GvNAME((const GV *)dsv);
4050         const STRLEN len = GvNAMELEN(dsv);
4051         if(memEQs(name, len, "ISA")
4052          /* The stash may have been detached from the symbol table, so
4053             check its name. */
4054          && GvSTASH(dsv) && HvENAME(GvSTASH(dsv))
4055         )
4056             mro_changes = 2;
4057         else {
4058             if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
4059              || (len == 1 && name[0] == ':')) {
4060                 mro_changes = 3;
4061
4062                 /* Set aside the old stash, so we can reset isa caches on
4063                    its subclasses. */
4064                 if((old_stash = GvHV(dsv)))
4065                     /* Make sure we do not lose it early. */
4066                     SvREFCNT_inc_simple_void_NN(
4067                      sv_2mortal((SV *)old_stash)
4068                     );
4069             }
4070         }
4071
4072         SvREFCNT_inc_simple_void_NN(sv_2mortal(dsv));
4073     }
4074
4075     /* freeing dsv's GP might free ssv (e.g. *x = $x),
4076      * so temporarily protect it */
4077     ENTER;
4078     SAVEFREESV(SvREFCNT_inc_simple_NN(ssv));
4079     gp_free(MUTABLE_GV(dsv));
4080     GvINTRO_off(dsv);           /* one-shot flag */
4081     GvGP_set(dsv, gp_ref(GvGP(ssv)));
4082     LEAVE;
4083
4084     if (SvTAINTED(ssv))
4085         SvTAINT(dsv);
4086     if (GvIMPORTED(dsv) != GVf_IMPORTED
4087         && CopSTASH_ne(PL_curcop, GvSTASH(dsv)))
4088         {
4089             GvIMPORTED_on(dsv);
4090         }
4091     GvMULTI_on(dsv);
4092     if(mro_changes == 2) {
4093       if (GvAV((const GV *)ssv)) {
4094         MAGIC *mg;
4095         SV * const sref = (SV *)GvAV((const GV *)dsv);
4096         if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
4097             if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
4098                 AV * const ary = newAV();
4099                 av_push(ary, mg->mg_obj); /* takes the refcount */
4100                 mg->mg_obj = (SV *)ary;
4101             }
4102             av_push((AV *)mg->mg_obj, SvREFCNT_inc_simple_NN(dsv));
4103         }
4104         else sv_magic(sref, dsv, PERL_MAGIC_isa, NULL, 0);
4105       }
4106       mro_isa_changed_in(GvSTASH(dsv));
4107     }
4108     else if(mro_changes == 3) {
4109         HV * const stash = GvHV(dsv);
4110         if(old_stash ? (HV *)HvENAME_get(old_stash) : stash)
4111             mro_package_moved(
4112                 stash, old_stash,
4113                 (GV *)dsv, 0
4114             );
4115     }
4116     else if(mro_changes) mro_method_changed_in(GvSTASH(dsv));
4117     if (GvIO(dsv) && dtype == SVt_PVGV) {
4118         DEBUG_o(Perl_deb(aTHX_
4119                         "glob_assign_glob clearing PL_stashcache\n"));
4120         /* It's a cache. It will rebuild itself quite happily.
4121            It's a lot of effort to work out exactly which key (or keys)
4122            might be invalidated by the creation of the this file handle.
4123          */
4124         hv_clear(PL_stashcache);
4125     }
4126     return;
4127 }
4128
4129 void
4130 Perl_gv_setref(pTHX_ SV *const dsv, SV *const ssv)
4131 {
4132     SV * const sref = SvRV(ssv);
4133     SV *dref;
4134     const int intro = GvINTRO(dsv);
4135     SV **location;
4136     U8 import_flag = 0;
4137     const U32 stype = SvTYPE(sref);
4138
4139     PERL_ARGS_ASSERT_GV_SETREF;
4140
4141     if (intro) {
4142         GvINTRO_off(dsv);       /* one-shot flag */
4143         GvLINE(dsv) = CopLINE(PL_curcop);
4144         GvEGV(dsv) = MUTABLE_GV(dsv);
4145     }
4146     GvMULTI_on(dsv);
4147     switch (stype) {
4148     case SVt_PVCV:
4149         location = (SV **) &(GvGP(dsv)->gp_cv); /* XXX bypassing GvCV_set */
4150         import_flag = GVf_IMPORTED_CV;
4151         goto common;
4152     case SVt_PVHV:
4153         location = (SV **) &GvHV(dsv);
4154         import_flag = GVf_IMPORTED_HV;
4155         goto common;
4156     case SVt_PVAV:
4157         location = (SV **) &GvAV(dsv);
4158         import_flag = GVf_IMPORTED_AV;
4159         goto common;
4160     case SVt_PVIO:
4161         location = (SV **) &GvIOp(dsv);
4162         goto common;
4163     case SVt_PVFM:
4164         location = (SV **) &GvFORM(dsv);
4165         goto common;
4166     default:
4167         location = &GvSV(dsv);
4168         import_flag = GVf_IMPORTED_SV;
4169     common:
4170         if (intro) {
4171             if (stype == SVt_PVCV) {
4172                 /*if (GvCVGEN(dsv) && (GvCV(dsv) != (const CV *)sref || GvCVGEN(dsv))) {*/
4173                 if (GvCVGEN(dsv)) {
4174                     SvREFCNT_dec(GvCV(dsv));
4175                     GvCV_set(dsv, NULL);
4176                     GvCVGEN(dsv) = 0; /* Switch off cacheness. */
4177                 }
4178             }
4179             /* SAVEt_GVSLOT takes more room on the savestack and has more
4180                overhead in leave_scope than SAVEt_GENERIC_SV.  But for CVs
4181                leave_scope needs access to the GV so it can reset method
4182                caches.  We must use SAVEt_GVSLOT whenever the type is
4183                SVt_PVCV, even if the stash is anonymous, as the stash may
4184                gain a name somehow before leave_scope. */
4185             if (stype == SVt_PVCV) {
4186                 /* There is no save_pushptrptrptr.  Creating it for this
4187                    one call site would be overkill.  So inline the ss add
4188                    routines here. */
4189                 dSS_ADD;
4190                 SS_ADD_PTR(dsv);
4191                 SS_ADD_PTR(location);
4192                 SS_ADD_PTR(SvREFCNT_inc(*location));
4193                 SS_ADD_UV(SAVEt_GVSLOT);
4194                 SS_ADD_END(4);
4195             }
4196             else SAVEGENERICSV(*location);
4197         }
4198         dref = *location;
4199         if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dsv))) {
4200             CV* const cv = MUTABLE_CV(*location);
4201             if (cv) {
4202                 if (!GvCVGEN((const GV *)dsv) &&
4203                     (CvROOT(cv) || CvXSUB(cv)) &&
4204                     /* redundant check that avoids creating the extra SV
4205                        most of the time: */
4206                     (CvCONST(cv) || (ckWARN(WARN_REDEFINE) && !intro)))
4207                     {
4208                         SV * const new_const_sv =
4209                             CvCONST((const CV *)sref)
4210                                  ? cv_const_sv((const CV *)sref)
4211                                  : NULL;
4212                         HV * const stash = GvSTASH((const GV *)dsv);
4213                         report_redefined_cv(
4214                            sv_2mortal(
4215                              stash
4216                                ? Perl_newSVpvf(aTHX_
4217                                     "%" HEKf "::%" HEKf,
4218                                     HEKfARG(HvNAME_HEK(stash)),
4219                                     HEKfARG(GvENAME_HEK(MUTABLE_GV(dsv))))
4220                                : Perl_newSVpvf(aTHX_
4221                                     "%" HEKf,
4222                                     HEKfARG(GvENAME_HEK(MUTABLE_GV(dsv))))
4223                            ),
4224                            cv,
4225                            CvCONST((const CV *)sref) ? &new_const_sv : NULL
4226                         );
4227                     }
4228                 if (!intro)
4229                     cv_ckproto_len_flags(cv, (const GV *)dsv,
4230                                    SvPOK(sref) ? CvPROTO(sref) : NULL,
4231                                    SvPOK(sref) ? CvPROTOLEN(sref) : 0,
4232                                    SvPOK(sref) ? SvUTF8(sref) : 0);
4233             }
4234             GvCVGEN(dsv) = 0; /* Switch off cacheness. */
4235             GvASSUMECV_on(dsv);
4236             if(GvSTASH(dsv)) { /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
4237                 if (intro && GvREFCNT(dsv) > 1) {
4238                     /* temporary remove extra savestack's ref */
4239                     --GvREFCNT(dsv);
4240                     gv_method_changed(dsv);
4241                     ++GvREFCNT(dsv);
4242                 }
4243                 else gv_method_changed(dsv);
4244             }
4245         }
4246         *location = SvREFCNT_inc_simple_NN(sref);
4247         if (import_flag && !(GvFLAGS(dsv) & import_flag)
4248             && CopSTASH_ne(PL_curcop, GvSTASH(dsv))) {
4249             GvFLAGS(dsv) |= import_flag;
4250         }
4251
4252         if (stype == SVt_PVHV) {
4253             const char * const name = GvNAME((GV*)dsv);
4254             const STRLEN len = GvNAMELEN(dsv);
4255             if (
4256                 (
4257                    (len > 1 && name[len-2] == ':' && name[len-1] == ':')
4258                 || (len == 1 && name[0] == ':')
4259                 )
4260              && (!dref || HvENAME_get(dref))
4261             ) {
4262                 mro_package_moved(
4263                     (HV *)sref, (HV *)dref,
4264                     (GV *)dsv, 0
4265                 );
4266             }
4267         }
4268         else if (
4269             stype == SVt_PVAV && sref != dref
4270          && memEQs(GvNAME((GV*)dsv), GvNAMELEN((GV*)dsv), "ISA")
4271          /* The stash may have been detached from the symbol table, so
4272             check its name before doing anything. */
4273          && GvSTASH(dsv) && HvENAME(GvSTASH(dsv))
4274         ) {
4275             MAGIC *mg;
4276             MAGIC * const omg = dref && SvSMAGICAL(dref)
4277                                  ? mg_find(dref, PERL_MAGIC_isa)
4278                                  : NULL;
4279             if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
4280                 if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
4281                     AV * const ary = newAV();
4282                     av_push(ary, mg->mg_obj); /* takes the refcount */
4283                     mg->mg_obj = (SV *)ary;
4284                 }
4285                 if (omg) {
4286                     if (SvTYPE(omg->mg_obj) == SVt_PVAV) {
4287                         SV **svp = AvARRAY((AV *)omg->mg_obj);
4288                         I32 items = AvFILLp((AV *)omg->mg_obj) + 1;
4289                         while (items--)
4290                             av_push(
4291                              (AV *)mg->mg_obj,
4292                              SvREFCNT_inc_simple_NN(*svp++)
4293                             );
4294                     }
4295                     else
4296                         av_push(
4297                          (AV *)mg->mg_obj,
4298                          SvREFCNT_inc_simple_NN(omg->mg_obj)
4299                         );
4300                 }
4301                 else
4302                     av_push((AV *)mg->mg_obj,SvREFCNT_inc_simple_NN(dsv));
4303             }
4304             else
4305             {
4306                 SSize_t i;
4307                 sv_magic(
4308                  sref, omg ? omg->mg_obj : dsv, PERL_MAGIC_isa, NULL, 0
4309                 );
4310                 for (i = 0; i <= AvFILL(sref); ++i) {
4311                     SV **elem = av_fetch ((AV*)sref, i, 0);
4312                     if (elem) {
4313                         sv_magic(
4314                           *elem, sref, PERL_MAGIC_isaelem, NULL, i
4315                         );
4316                     }
4317                 }
4318                 mg = mg_find(sref, PERL_MAGIC_isa);
4319             }
4320             /* Since the *ISA assignment could have affected more than
4321                one stash, don't call mro_isa_changed_in directly, but let
4322                magic_clearisa do it for us, as it already has the logic for
4323                dealing with globs vs arrays of globs. */
4324             assert(mg);
4325             Perl_magic_clearisa(aTHX_ NULL, mg);
4326         }
4327         else if (stype == SVt_PVIO) {
4328             DEBUG_o(Perl_deb(aTHX_ "gv_setref clearing PL_stashcache\n"));
4329             /* It's a cache. It will rebuild itself quite happily.
4330                It's a lot of effort to work out exactly which key (or keys)
4331                might be invalidated by the creation of the this file handle.
4332             */
4333             hv_clear(PL_stashcache);
4334         }
4335         break;
4336     }
4337     if (!intro) SvREFCNT_dec(dref);
4338     if (SvTAINTED(ssv))
4339         SvTAINT(dsv);
4340     return;
4341 }
4342
4343
4344
4345
4346 #ifdef PERL_DEBUG_READONLY_COW
4347 # include <sys/mman.h>
4348
4349 # ifndef PERL_MEMORY_DEBUG_HEADER_SIZE
4350 #  define PERL_MEMORY_DEBUG_HEADER_SIZE 0
4351 # endif
4352
4353 void
4354 Perl_sv_buf_to_ro(pTHX_ SV *sv)
4355 {
4356     struct perl_memory_debug_header * const header =
4357         (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4358     const MEM_SIZE len = header->size;
4359     PERL_ARGS_ASSERT_SV_BUF_TO_RO;
4360 # ifdef PERL_TRACK_MEMPOOL
4361     if (!header->readonly) header->readonly = 1;
4362 # endif
4363     if (mprotect(header, len, PROT_READ))
4364         Perl_warn(aTHX_ "mprotect RW for COW string %p %lu failed with %d",
4365                          header, len, errno);
4366 }
4367
4368 static void
4369 S_sv_buf_to_rw(pTHX_ SV *sv)
4370 {
4371     struct perl_memory_debug_header * const header =
4372         (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4373     const MEM_SIZE len = header->size;
4374     PERL_ARGS_ASSERT_SV_BUF_TO_RW;
4375     if (mprotect(header, len, PROT_READ|PROT_WRITE))
4376         Perl_warn(aTHX_ "mprotect for COW string %p %lu failed with %d",
4377                          header, len, errno);
4378 # ifdef PERL_TRACK_MEMPOOL
4379     header->readonly = 0;
4380 # endif
4381 }
4382
4383 #else
4384 # define sv_buf_to_ro(sv)       NOOP
4385 # define sv_buf_to_rw(sv)       NOOP
4386 #endif
4387
4388 void
4389 Perl_sv_setsv_flags(pTHX_ SV *dsv, SV* ssv, const I32 flags)
4390 {
4391     U32 sflags;
4392     int dtype;
4393     svtype stype;
4394     unsigned int both_type;
4395
4396     PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
4397
4398     if (UNLIKELY( ssv == dsv ))
4399         return;
4400
4401     if (UNLIKELY( !ssv ))
4402         ssv = &PL_sv_undef;
4403
4404     stype = SvTYPE(ssv);
4405     dtype = SvTYPE(dsv);
4406     both_type = (stype | dtype);
4407
4408     /* with these values, we can check that both SVs are NULL/IV (and not
4409      * freed) just by testing the or'ed types */
4410     STATIC_ASSERT_STMT(SVt_NULL == 0);
4411     STATIC_ASSERT_STMT(SVt_IV   == 1);
4412     if (both_type <= 1) {
4413         /* both src and dst are UNDEF/IV/RV, so we can do a lot of
4414          * special-casing */
4415         U32 sflags;
4416         U32 new_dflags;
4417         SV *old_rv = NULL;
4418
4419         /* minimal subset of SV_CHECK_THINKFIRST_COW_DROP(dsv) */
4420         if (SvREADONLY(dsv))
4421             Perl_croak_no_modify();
4422         if (SvROK(dsv)) {
4423             if (SvWEAKREF(dsv))
4424                 sv_unref_flags(dsv, 0);
4425             else
4426                 old_rv = SvRV(dsv);
4427         }
4428
4429         assert(!SvGMAGICAL(ssv));
4430         assert(!SvGMAGICAL(dsv));
4431
4432         sflags = SvFLAGS(ssv);
4433         if (sflags & (SVf_IOK|SVf_ROK)) {
4434             SET_SVANY_FOR_BODYLESS_IV(dsv);
4435             new_dflags = SVt_IV;
4436
4437             if (sflags & SVf_ROK) {
4438                 dsv->sv_u.svu_rv = SvREFCNT_inc(SvRV(ssv));
4439                 new_dflags |= SVf_ROK;
4440             }
4441             else {
4442                 /* both src and dst are <= SVt_IV, so sv_any points to the
4443                  * head; so access the head directly
4444                  */
4445                 assert(    &(ssv->sv_u.svu_iv)
4446                         == &(((XPVIV*) SvANY(ssv))->xiv_iv));
4447                 assert(    &(dsv->sv_u.svu_iv)
4448                         == &(((XPVIV*) SvANY(dsv))->xiv_iv));
4449                 dsv->sv_u.svu_iv = ssv->sv_u.svu_iv;
4450                 new_dflags |= (SVf_IOK|SVp_IOK|(sflags & SVf_IVisUV));
4451             }
4452         }
4453         else {
4454             new_dflags = dtype; /* turn off everything except the type */
4455         }
4456         SvFLAGS(dsv) = new_dflags;
4457         SvREFCNT_dec(old_rv);
4458
4459         return;
4460     }
4461
4462     if (UNLIKELY(both_type == SVTYPEMASK)) {
4463         if (SvIS_FREED(dsv)) {
4464             Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
4465                        " to a freed scalar %p", SVfARG(ssv), (void *)dsv);
4466         }
4467         if (SvIS_FREED(ssv)) {
4468             Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
4469                        (void*)ssv, (void*)dsv);
4470         }
4471     }
4472
4473
4474
4475     SV_CHECK_THINKFIRST_COW_DROP(dsv);
4476     dtype = SvTYPE(dsv); /* THINKFIRST may have changed type */
4477
4478     /* There's a lot of redundancy below but we're going for speed here */
4479
4480     switch (stype) {
4481     case SVt_NULL:
4482       undef_sstr:
4483         if (LIKELY( dtype != SVt_PVGV && dtype != SVt_PVLV )) {
4484             (void)SvOK_off(dsv);
4485             return;
4486         }
4487         break;
4488     case SVt_IV:
4489         if (SvIOK(ssv)) {
4490             switch (dtype) {
4491             case SVt_NULL:
4492                 /* For performance, we inline promoting to type SVt_IV. */
4493                 /* We're starting from SVt_NULL, so provided that define is
4494                  * actual 0, we don't have to unset any SV type flags
4495                  * to promote to SVt_IV. */
4496                 STATIC_ASSERT_STMT(SVt_NULL == 0);
4497                 SET_SVANY_FOR_BODYLESS_IV(dsv);
4498                 SvFLAGS(dsv) |= SVt_IV;
4499                 break;
4500             case SVt_NV:
4501             case SVt_PV:
4502                 sv_upgrade(dsv, SVt_PVIV);
4503                 break;
4504             case SVt_PVGV:
4505             case SVt_PVLV:
4506                 goto end_of_first_switch;
4507             }
4508             (void)SvIOK_only(dsv);
4509             SvIV_set(dsv,  SvIVX(ssv));
4510             if (SvIsUV(ssv))
4511                 SvIsUV_on(dsv);
4512             /* SvTAINTED can only be true if the SV has taint magic, which in
4513                turn means that the SV type is PVMG (or greater). This is the
4514                case statement for SVt_IV, so this cannot be true (whatever gcov
4515                may say).  */
4516             assert(!SvTAINTED(ssv));
4517             return;
4518         }
4519         if (!SvROK(ssv))
4520             goto undef_sstr;
4521         if (dtype < SVt_PV && dtype != SVt_IV)
4522             sv_upgrade(dsv, SVt_IV);
4523         break;
4524
4525     case SVt_NV:
4526         if (LIKELY( SvNOK(ssv) )) {
4527             switch (dtype) {
4528             case SVt_NULL:
4529             case SVt_IV:
4530                 sv_upgrade(dsv, SVt_NV);
4531                 break;
4532             case SVt_PV:
4533             case SVt_PVIV:
4534                 sv_upgrade(dsv, SVt_PVNV);
4535                 break;
4536             case SVt_PVGV:
4537             case SVt_PVLV:
4538                 goto end_of_first_switch;
4539             }
4540             SvNV_set(dsv, SvNVX(ssv));
4541             (void)SvNOK_only(dsv);
4542             /* SvTAINTED can only be true if the SV has taint magic, which in
4543                turn means that the SV type is PVMG (or greater). This is the
4544                case statement for SVt_NV, so this cannot be true (whatever gcov
4545                may say).  */
4546             assert(!SvTAINTED(ssv));
4547             return;
4548         }
4549         goto undef_sstr;
4550
4551     case SVt_PV:
4552         if (dtype < SVt_PV)
4553             sv_upgrade(dsv, SVt_PV);
4554         break;
4555     case SVt_PVIV:
4556         if (dtype < SVt_PVIV)
4557             sv_upgrade(dsv, SVt_PVIV);
4558         break;
4559     case SVt_PVNV:
4560         if (dtype < SVt_PVNV)
4561             sv_upgrade(dsv, SVt_PVNV);
4562         break;
4563
4564     case SVt_INVLIST:
4565         invlist_clone(ssv, dsv);
4566         break;
4567     default:
4568         {
4569         const char * const type = sv_reftype(ssv,0);
4570         if (PL_op)
4571             /* diag_listed_as: Bizarre copy of %s */
4572             Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
4573         else
4574             Perl_croak(aTHX_ "Bizarre copy of %s", type);
4575         }
4576         NOT_REACHED; /* NOTREACHED */
4577
4578     case SVt_REGEXP:
4579       upgregexp:
4580         if (dtype < SVt_REGEXP)
4581             sv_upgrade(dsv, SVt_REGEXP);
4582         break;
4583
4584     case SVt_PVLV:
4585     case SVt_PVGV:
4586     case SVt_PVMG:
4587         if (SvGMAGICAL(ssv) && (flags & SV_GMAGIC)) {
4588             mg_get(ssv);
4589             if (SvTYPE(ssv) != stype)
4590                 stype = SvTYPE(ssv);
4591         }
4592         if (isGV_with_GP(ssv) && dtype <= SVt_PVLV) {
4593                     glob_assign_glob(dsv, ssv, dtype);
4594                     return;
4595         }
4596         if (stype == SVt_PVLV)
4597         {
4598             if (isREGEXP(ssv)) goto upgregexp;
4599             SvUPGRADE(dsv, SVt_PVNV);
4600         }
4601         else
4602             SvUPGRADE(dsv, (svtype)stype);
4603     }
4604  end_of_first_switch:
4605
4606     /* dsv may have been upgraded.  */
4607     dtype = SvTYPE(dsv);
4608     sflags = SvFLAGS(ssv);
4609
4610     if (UNLIKELY( dtype == SVt_PVCV )) {
4611         /* Assigning to a subroutine sets the prototype.  */
4612         if (SvOK(ssv)) {
4613             STRLEN len;
4614             const char *const ptr = SvPV_const(ssv, len);
4615
4616             SvGROW(dsv, len + 1);
4617             Copy(ptr, SvPVX(dsv), len + 1, char);
4618             SvCUR_set(dsv, len);
4619             SvPOK_only(dsv);
4620             SvFLAGS(dsv) |= sflags & SVf_UTF8;
4621             CvAUTOLOAD_off(dsv);
4622         } else {
4623             SvOK_off(dsv);
4624         }
4625     }
4626     else if (UNLIKELY(dtype == SVt_PVAV || dtype == SVt_PVHV
4627              || dtype == SVt_PVFM))
4628     {
4629         const char * const type = sv_reftype(dsv,0);
4630         if (PL_op)
4631             /* diag_listed_as: Cannot copy to %s */
4632             Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
4633         else
4634             Perl_croak(aTHX_ "Cannot copy to %s", type);
4635     } else if (sflags & SVf_ROK) {
4636         if (isGV_with_GP(dsv)
4637             && SvTYPE(SvRV(ssv)) == SVt_PVGV && isGV_with_GP(SvRV(ssv))) {
4638             ssv = SvRV(ssv);
4639             if (ssv == dsv) {
4640                 if (GvIMPORTED(dsv) != GVf_IMPORTED
4641                     && CopSTASH_ne(PL_curcop, GvSTASH(dsv)))
4642                 {
4643                     GvIMPORTED_on(dsv);
4644                 }
4645                 GvMULTI_on(dsv);
4646                 return;
4647             }
4648             glob_assign_glob(dsv, ssv, dtype);
4649             return;
4650         }
4651
4652         if (dtype >= SVt_PV) {
4653             if (isGV_with_GP(dsv)) {
4654                 gv_setref(dsv, ssv);
4655                 return;
4656             }
4657             if (SvPVX_const(dsv)) {
4658                 SvPV_free(dsv);
4659                 SvLEN_set(dsv, 0);
4660                 SvCUR_set(dsv, 0);
4661             }
4662         }
4663         (void)SvOK_off(dsv);
4664         SvRV_set(dsv, SvREFCNT_inc(SvRV(ssv)));
4665         SvFLAGS(dsv) |= sflags & SVf_ROK;
4666         assert(!(sflags & SVp_NOK));
4667         assert(!(sflags & SVp_IOK));
4668         assert(!(sflags & SVf_NOK));
4669         assert(!(sflags & SVf_IOK));
4670     }
4671     else if (isGV_with_GP(dsv)) {
4672         if (!(sflags & SVf_OK)) {
4673             Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4674                            "Undefined value assigned to typeglob");
4675         }
4676         else {
4677             GV *gv = gv_fetchsv_nomg(ssv, GV_ADD, SVt_PVGV);
4678             if (dsv != (const SV *)gv) {
4679                 const char * const name = GvNAME((const GV *)dsv);
4680                 const STRLEN len = GvNAMELEN(dsv);
4681                 HV *old_stash = NULL;
4682                 bool reset_isa = FALSE;
4683                 if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
4684                  || (len == 1 && name[0] == ':')) {
4685                     /* Set aside the old stash, so we can reset isa caches
4686                        on its subclasses. */
4687                     if((old_stash = GvHV(dsv))) {
4688                         /* Make sure we do not lose it early. */
4689                         SvREFCNT_inc_simple_void_NN(
4690                          sv_2mortal((SV *)old_stash)
4691                         );
4692                     }
4693                     reset_isa = TRUE;
4694                 }
4695
4696                 if (GvGP(dsv)) {
4697                     SvREFCNT_inc_simple_void_NN(sv_2mortal(dsv));
4698                     gp_free(MUTABLE_GV(dsv));
4699                 }
4700                 GvGP_set(dsv, gp_ref(GvGP(gv)));
4701
4702                 if (reset_isa) {
4703                     HV * const stash = GvHV(dsv);
4704                     if(
4705                         old_stash ? (HV *)HvENAME_get(old_stash) : stash
4706                     )
4707                         mro_package_moved(
4708                          stash, old_stash,
4709                          (GV *)dsv, 0
4710                         );
4711                 }
4712             }
4713         }
4714     }
4715     else if ((dtype == SVt_REGEXP || dtype == SVt_PVLV)
4716           && (stype == SVt_REGEXP || isREGEXP(ssv))) {
4717         reg_temp_copy((REGEXP*)dsv, (REGEXP*)ssv);
4718     }
4719     else if (sflags & SVp_POK) {
4720         const STRLEN cur = SvCUR(ssv);
4721         const STRLEN len = SvLEN(ssv);
4722
4723         /*
4724          * We have three basic ways to copy the string:
4725          *
4726          *  1. Swipe
4727          *  2. Copy-on-write
4728          *  3. Actual copy
4729          *
4730          * Which we choose is based on various factors.  The following
4731          * things are listed in order of speed, fastest to slowest:
4732          *  - Swipe
4733          *  - Copying a short string
4734          *  - Copy-on-write bookkeeping
4735          *  - malloc
4736          *  - Copying a long string
4737          *
4738          * We swipe the string (steal the string buffer) if the SV on the
4739          * rhs is about to be freed anyway (TEMP and refcnt==1).  This is a
4740          * big win on long strings.  It should be a win on short strings if
4741          * SvPVX_const(dsv) has to be allocated.  If not, it should not
4742          * slow things down, as SvPVX_const(ssv) would have been freed
4743          * soon anyway.
4744          *
4745          * We also steal the buffer from a PADTMP (operator target) if it
4746          * is â€˜long enough’.  For short strings, a swipe does not help
4747          * here, as it causes more malloc calls the next time the target
4748          * is used.  Benchmarks show that even if SvPVX_const(dsv) has to
4749          * be allocated it is still not worth swiping PADTMPs for short
4750          * strings, as the savings here are small.
4751          *
4752          * If swiping is not an option, then we see whether it is
4753          * worth using copy-on-write.  If the lhs already has a buf-
4754          * fer big enough and the string is short, we skip it and fall back
4755          * to method 3, since memcpy is faster for short strings than the
4756          * later bookkeeping overhead that copy-on-write entails.
4757
4758          * If the rhs is not a copy-on-write string yet, then we also
4759          * consider whether the buffer is too large relative to the string
4760          * it holds.  Some operations such as readline allocate a large
4761          * buffer in the expectation of reusing it.  But turning such into
4762          * a COW buffer is counter-productive because it increases memory
4763          * usage by making readline allocate a new large buffer the sec-
4764          * ond time round.  So, if the buffer is too large, again, we use
4765          * method 3 (copy).
4766          *
4767          * Finally, if there is no buffer on the left, or the buffer is too
4768          * small, then we use copy-on-write and make both SVs share the
4769          * string buffer.
4770          *
4771          */
4772
4773         /* Whichever path we take through the next code, we want this true,
4774            and doing it now facilitates the COW check.  */
4775         (void)SvPOK_only(dsv);
4776
4777         if (
4778                  (              /* Either ... */
4779                                 /* slated for free anyway (and not COW)? */
4780                     (sflags & (SVs_TEMP|SVf_IsCOW)) == SVs_TEMP
4781                                 /* or a swipable TARG */
4782                  || ((sflags &
4783                            (SVs_PADTMP|SVf_READONLY|SVf_PROTECT|SVf_IsCOW))
4784                        == SVs_PADTMP
4785                                 /* whose buffer is worth stealing */
4786                      && CHECK_COWBUF_THRESHOLD(cur,len)
4787                     )
4788                  ) &&
4789                  !(sflags & SVf_OOK) &&   /* and not involved in OOK hack? */
4790                  (!(flags & SV_NOSTEAL)) &&
4791                                         /* and we're allowed to steal temps */
4792                  SvREFCNT(ssv) == 1 &&   /* and no other references to it? */
4793                  len)             /* and really is a string */
4794         {       /* Passes the swipe test.  */
4795             if (SvPVX_const(dsv))       /* we know that dtype >= SVt_PV */
4796                 SvPV_free(dsv);
4797             SvPV_set(dsv, SvPVX_mutable(ssv));
4798             SvLEN_set(dsv, SvLEN(ssv));
4799             SvCUR_set(dsv, SvCUR(ssv));
4800
4801             SvTEMP_off(dsv);
4802             (void)SvOK_off(ssv);        /* NOTE: nukes most SvFLAGS on ssv */
4803             SvPV_set(ssv, NULL);
4804             SvLEN_set(ssv, 0);
4805             SvCUR_set(ssv, 0);
4806             SvTEMP_off(ssv);
4807         }
4808         /* We must check for SvIsCOW_static() even without
4809          * SV_COW_SHARED_HASH_KEYS being set or else we'll break SvIsBOOL()
4810          */
4811         else if (SvIsCOW_static(ssv)) {
4812             if (SvPVX_const(dsv)) {     /* we know that dtype >= SVt_PV */
4813                 SvPV_free(dsv);
4814             }
4815             SvPV_set(dsv, SvPVX(ssv));
4816             SvLEN_set(dsv, 0);
4817             SvCUR_set(dsv, cur);
4818             SvFLAGS(dsv) |= (SVf_IsCOW|SVppv_STATIC);
4819         }
4820         else if (flags & SV_COW_SHARED_HASH_KEYS
4821               &&
4822 #ifdef PERL_COPY_ON_WRITE
4823                  (sflags & SVf_IsCOW
4824                    ? (!len ||
4825                        (  (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dsv) < cur+1)
4826                           /* If this is a regular (non-hek) COW, only so
4827                              many COW "copies" are possible. */
4828                        && CowREFCNT(ssv) != SV_COW_REFCNT_MAX  ))
4829                    : (  (sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4830                      && !(SvFLAGS(dsv) & SVf_BREAK)
4831                      && CHECK_COW_THRESHOLD(cur,len) && cur+1 < len
4832                      && (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dsv) < cur+1)
4833                     ))
4834 #else
4835                  sflags & SVf_IsCOW
4836               && !(SvFLAGS(dsv) & SVf_BREAK)
4837 #endif
4838             ) {
4839             /* Either it's a shared hash key, or it's suitable for
4840                copy-on-write.  */
4841 #ifdef DEBUGGING
4842             if (DEBUG_C_TEST) {
4843                 PerlIO_printf(Perl_debug_log, "Copy on write: ssv --> dsv\n");
4844                 sv_dump(ssv);
4845                 sv_dump(dsv);
4846             }
4847 #endif
4848 #ifdef PERL_ANY_COW
4849             if (!(sflags & SVf_IsCOW)) {
4850                     SvIsCOW_on(ssv);
4851                     CowREFCNT(ssv) = 0;
4852             }
4853 #endif
4854             if (SvPVX_const(dsv)) {     /* we know that dtype >= SVt_PV */
4855                 SvPV_free(dsv);
4856             }
4857
4858 #ifdef PERL_ANY_COW
4859             if (len) {
4860                     if (sflags & SVf_IsCOW) {
4861                         sv_buf_to_rw(ssv);
4862                     }
4863                     CowREFCNT(ssv)++;
4864                     SvPV_set(dsv, SvPVX_mutable(ssv));
4865                     sv_buf_to_ro(ssv);
4866             } else
4867 #endif
4868             {
4869                     /* SvIsCOW_shared_hash */
4870                     DEBUG_C(PerlIO_printf(Perl_debug_log,
4871                                           "Copy on write: Sharing hash\n"));
4872
4873                     assert (SvTYPE(dsv) >= SVt_PV);
4874                     SvPV_set(dsv,
4875                              HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(ssv)))));
4876             }
4877             SvLEN_set(dsv, len);
4878             SvCUR_set(dsv, cur);
4879             SvIsCOW_on(dsv);
4880         } else {
4881             /* Failed the swipe test, and we cannot do copy-on-write either.
4882                Have to copy the string.  */
4883             SvGROW(dsv, cur + 1);       /* inlined from sv_setpvn */
4884             Move(SvPVX_const(ssv),SvPVX(dsv),cur,char);
4885             SvCUR_set(dsv, cur);
4886             *SvEND(dsv) = '\0';
4887         }
4888         if (sflags & SVp_NOK) {
4889             SvNV_set(dsv, SvNVX(ssv));
4890         }
4891         if (sflags & SVp_IOK) {
4892             SvIV_set(dsv, SvIVX(ssv));
4893             if (sflags & SVf_IVisUV)
4894                 SvIsUV_on(dsv);
4895             if ((sflags & SVf_IOK) && !(sflags & SVf_POK)) {
4896                 /* Source was SVf_IOK|SVp_IOK|SVp_POK but not SVf_POK, meaning
4897                    a value set as an integer and later stringified. So mark
4898                    destination the same: */
4899                 SvFLAGS(dsv) &= ~SVf_POK;
4900             }
4901         }
4902         SvFLAGS(dsv) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4903         {
4904             const MAGIC * const smg = SvVSTRING_mg(ssv);
4905             if (smg) {
4906                 sv_magic(dsv, NULL, PERL_MAGIC_vstring,
4907                          smg->mg_ptr, smg->mg_len);
4908                 SvRMAGICAL_on(dsv);
4909             }
4910         }
4911     }
4912     else if (sflags & (SVp_IOK|SVp_NOK)) {
4913         (void)SvOK_off(dsv);
4914         SvFLAGS(dsv) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
4915         if (sflags & SVp_IOK) {
4916             /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
4917             SvIV_set(dsv, SvIVX(ssv));
4918         }
4919         if (sflags & SVp_NOK) {
4920             SvNV_set(dsv, SvNVX(ssv));
4921         }
4922     }
4923     else {
4924         if (isGV_with_GP(ssv)) {
4925             gv_efullname3(dsv, MUTABLE_GV(ssv), "*");
4926         }
4927         else
4928             (void)SvOK_off(dsv);
4929     }
4930     if (SvTAINTED(ssv))
4931         SvTAINT(dsv);
4932 }
4933
4934
4935 /*
4936 =for apidoc sv_set_undef
4937
4938 Equivalent to C<sv_setsv(sv, &PL_sv_undef)>, but more efficient.
4939 Doesn't handle set magic.
4940
4941 The perl equivalent is C<$sv = undef;>. Note that it doesn't free any string
4942 buffer, unlike C<undef $sv>.
4943
4944 Introduced in perl 5.25.12.
4945
4946 =cut
4947 */
4948
4949 void
4950 Perl_sv_set_undef(pTHX_ SV *sv)
4951 {
4952     U32 type = SvTYPE(sv);
4953
4954     PERL_ARGS_ASSERT_SV_SET_UNDEF;
4955
4956     /* shortcut, NULL, IV, RV */
4957
4958     if (type <= SVt_IV) {
4959         assert(!SvGMAGICAL(sv));
4960         if (SvREADONLY(sv)) {
4961             /* does undeffing PL_sv_undef count as modifying a read-only
4962              * variable? Some XS code does this */
4963             if (sv == &PL_sv_undef)
4964                 return;
4965             Perl_croak_no_modify();
4966         }
4967
4968         if (SvROK(sv)) {
4969             if (SvWEAKREF(sv))
4970                 sv_unref_flags(sv, 0);
4971             else {
4972                 SV *rv = SvRV(sv);
4973                 SvFLAGS(sv) = type; /* quickly turn off all flags */
4974                 SvREFCNT_dec_NN(rv);
4975                 return;
4976             }
4977         }
4978         SvFLAGS(sv) = type; /* quickly turn off all flags */
4979         return;
4980     }
4981
4982     if (SvIS_FREED(sv))
4983         Perl_croak(aTHX_ "panic: attempt to undefine a freed scalar %p",
4984             (void *)sv);
4985
4986     SV_CHECK_THINKFIRST_COW_DROP(sv);
4987
4988     if (isGV_with_GP(sv))
4989         Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4990                        "Undefined value assigned to typeglob");
4991     else
4992         SvOK_off(sv);
4993 }
4994
4995 void
4996 Perl_sv_setsv_mg(pTHX_ SV *const dsv, SV *const ssv)
4997 {
4998     PERL_ARGS_ASSERT_SV_SETSV_MG;
4999
5000     sv_setsv(dsv,ssv);
5001     SvSETMAGIC(dsv);
5002 }
5003
5004 #ifdef PERL_ANY_COW
5005 #  define SVt_COW SVt_PV
5006 SV *
5007 Perl_sv_setsv_cow(pTHX_ SV *dsv, SV *ssv)
5008 {
5009     STRLEN cur = SvCUR(ssv);
5010     STRLEN len = SvLEN(ssv);
5011     char *new_pv;
5012     U32 new_flags = (SVt_COW|SVf_POK|SVp_POK|SVf_IsCOW);
5013 #if defined(PERL_DEBUG_READONLY_COW) && defined(PERL_COPY_ON_WRITE)
5014     const bool already = cBOOL(SvIsCOW(ssv));
5015 #endif
5016
5017     PERL_ARGS_ASSERT_SV_SETSV_COW;
5018 #ifdef DEBUGGING
5019     if (DEBUG_C_TEST) {
5020         PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
5021                       (void*)ssv, (void*)dsv);
5022         sv_dump(ssv);
5023         if (dsv)
5024                     sv_dump(dsv);
5025     }
5026 #endif
5027     if (dsv) {
5028         if (SvTHINKFIRST(dsv))
5029             sv_force_normal_flags(dsv, SV_COW_DROP_PV);
5030         else if (SvPVX_const(dsv))
5031             Safefree(SvPVX_mutable(dsv));
5032     }
5033     else
5034         new_SV(dsv);
5035     SvUPGRADE(dsv, SVt_COW);
5036
5037     assert (SvPOK(ssv));
5038     assert (SvPOKp(ssv));
5039
5040     if (SvIsCOW(ssv)) {
5041         if (SvIsCOW_shared_hash(ssv)) {
5042             /* source is a COW shared hash key.  */
5043             DEBUG_C(PerlIO_printf(Perl_debug_log,
5044                                   "Fast copy on write: Sharing hash\n"));
5045             new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(ssv))));
5046             goto common_exit;
5047         }
5048         else if (SvIsCOW_static(ssv)) {
5049             /* source is static constant; preserve this */
5050             new_pv = SvPVX(ssv);
5051             new_flags |= SVppv_STATIC;
5052             goto common_exit;
5053         }
5054         assert(SvCUR(ssv)+1 < SvLEN(ssv));
5055         assert(CowREFCNT(ssv) < SV_COW_REFCNT_MAX);
5056     } else {
5057         assert ((SvFLAGS(ssv) & CAN_COW_MASK) == CAN_COW_FLAGS);
5058         SvUPGRADE(ssv, SVt_COW);
5059         SvIsCOW_on(ssv);
5060         DEBUG_C(PerlIO_printf(Perl_debug_log,
5061                               "Fast copy on write: Converting ssv to COW\n"));
5062         CowREFCNT(ssv) = 0;
5063     }
5064 #  ifdef PERL_DEBUG_READONLY_COW
5065     if (already) sv_buf_to_rw(ssv);
5066 #  endif
5067     CowREFCNT(ssv)++;
5068     new_pv = SvPVX_mutable(ssv);
5069     sv_buf_to_ro(ssv);
5070
5071   common_exit:
5072     SvPV_set(dsv, new_pv);
5073     SvFLAGS(dsv) = new_flags;
5074     if (SvUTF8(ssv))
5075         SvUTF8_on(dsv);
5076     SvLEN_set(dsv, len);
5077     SvCUR_set(dsv, cur);
5078 #ifdef DEBUGGING
5079     if (DEBUG_C_TEST)
5080                 sv_dump(dsv);
5081 #endif
5082     return dsv;
5083 }
5084 #endif
5085
5086 /*
5087 =for apidoc sv_setpv_bufsize
5088
5089 Sets the SV to be a string of cur bytes length, with at least
5090 len bytes available. Ensures that there is a null byte at SvEND.
5091 Returns a char * pointer to the SvPV buffer.
5092
5093 =cut
5094 */
5095
5096 char *
5097 Perl_sv_setpv_bufsize(pTHX_ SV *const sv, const STRLEN cur, const STRLEN len)
5098 {
5099     char *pv;
5100
5101     PERL_ARGS_ASSERT_SV_SETPV_BUFSIZE;
5102
5103     SV_CHECK_THINKFIRST_COW_DROP(sv);
5104     SvUPGRADE(sv, SVt_PV);
5105     pv = SvGROW(sv, len + 1);
5106     SvCUR_set(sv, cur);
5107     *(SvEND(sv))= '\0';
5108     (void)SvPOK_only_UTF8(sv);                /* validate pointer */
5109
5110     SvTAINT(sv);
5111     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
5112     return pv;
5113 }
5114
5115 /*
5116 =for apidoc sv_setpvn
5117 =for apidoc_item sv_setpvn_fresh
5118 =for apidoc_item sv_setpvn_mg
5119
5120 These copy a string (possibly containing embedded C<NUL> characters) into an
5121 SV.  The C<len> parameter indicates the number of bytes to be copied.  If the
5122 C<ptr> argument is NULL the SV will become
5123 undefined.
5124
5125 The UTF-8 flag is not changed by these functions.  A terminating NUL byte is
5126 guaranteed.
5127
5128 They differ only in that:
5129
5130 C<sv_setpvn> does not handle 'set' magic; C<sv_setpvn_mg> does.
5131
5132 C<sv_setpvn_fresh> is a cut-down alternative to C<sv_setpvn>, intended ONLY
5133 to be used with a fresh sv that has been upgraded to a SVt_PV, SVt_PVIV,
5134 SVt_PVNV, or SVt_PVMG.
5135
5136 =cut
5137 */
5138
5139 void
5140 Perl_sv_setpvn(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
5141 {
5142     char *dptr;
5143
5144     PERL_ARGS_ASSERT_SV_SETPVN;
5145
5146     SV_CHECK_THINKFIRST_COW_DROP(sv);
5147     if (isGV_with_GP(sv))
5148         Perl_croak_no_modify();
5149     if (!ptr) {
5150         (void)SvOK_off(sv);
5151         return;
5152     }
5153     else {
5154         /* len is STRLEN which is unsigned, need to copy to signed */
5155         const IV iv = len;
5156         if (iv < 0)
5157             Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen %"
5158                        IVdf, iv);
5159     }
5160     SvUPGRADE(sv, SVt_PV);
5161
5162     dptr = SvGROW(sv, len + 1);
5163     Move(ptr,dptr,len,char);
5164     dptr[len] = '\0';
5165     SvCUR_set(sv, len);
5166     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5167     SvTAINT(sv);
5168     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
5169 }
5170
5171 void
5172 Perl_sv_setpvn_mg(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
5173 {
5174     PERL_ARGS_ASSERT_SV_SETPVN_MG;
5175
5176     sv_setpvn(sv,ptr,len);
5177     SvSETMAGIC(sv);
5178 }
5179
5180 void
5181 Perl_sv_setpvn_fresh(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
5182 {
5183     char *dptr;
5184
5185     PERL_ARGS_ASSERT_SV_SETPVN_FRESH;
5186     assert(SvTYPE(sv) >= SVt_PV && SvTYPE(sv) <= SVt_PVMG);
5187     assert(!SvTHINKFIRST(sv));
5188     assert(!isGV_with_GP(sv));
5189
5190     if (ptr) {
5191         const IV iv = len;
5192         /* len is STRLEN which is unsigned, need to copy to signed */
5193         if (iv < 0)
5194             Perl_croak(aTHX_ "panic: sv_setpvn_fresh called with negative strlen %"
5195                        IVdf, iv);
5196
5197         dptr = sv_grow_fresh(sv, len + 1);
5198         Move(ptr,dptr,len,char);
5199         dptr[len] = '\0';
5200         SvCUR_set(sv, len);
5201         SvPOK_on(sv);
5202         SvTAINT(sv);
5203     }
5204 }
5205
5206 /*
5207 =for apidoc sv_setpv
5208 =for apidoc_item sv_setpv_mg
5209
5210 These copy a string into an SV.  The string must be terminated with a C<NUL>
5211 character, and not contain embeded C<NUL>'s.
5212
5213 They differ only in that:
5214
5215 C<sv_setpv> does not handle 'set' magic; C<sv_setpv_mg> does.
5216
5217 =cut
5218 */
5219
5220 void
5221 Perl_sv_setpv(pTHX_ SV *const sv, const char *const ptr)
5222 {
5223     STRLEN len;
5224
5225     PERL_ARGS_ASSERT_SV_SETPV;
5226
5227     SV_CHECK_THINKFIRST_COW_DROP(sv);
5228     if (!ptr) {
5229         (void)SvOK_off(sv);
5230         return;
5231     }
5232     len = strlen(ptr);
5233     SvUPGRADE(sv, SVt_PV);
5234
5235     SvGROW(sv, len + 1);
5236     Move(ptr,SvPVX(sv),len+1,char);
5237     SvCUR_set(sv, len);
5238     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5239     SvTAINT(sv);
5240     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
5241 }
5242
5243 void
5244 Perl_sv_setpv_mg(pTHX_ SV *const sv, const char *const ptr)
5245 {
5246     PERL_ARGS_ASSERT_SV_SETPV_MG;
5247
5248     sv_setpv(sv,ptr);
5249     SvSETMAGIC(sv);
5250 }
5251
5252 void
5253 Perl_sv_sethek(pTHX_ SV *const sv, const HEK *const hek)
5254 {
5255     PERL_ARGS_ASSERT_SV_SETHEK;
5256
5257     if (!hek) {
5258         return;
5259     }
5260
5261     if (HEK_LEN(hek) == HEf_SVKEY) {
5262         sv_setsv(sv, *(SV**)HEK_KEY(hek));
5263         return;
5264     } else {
5265         const int flags = HEK_FLAGS(hek);
5266         if (flags & HVhek_WASUTF8) {
5267             STRLEN utf8_len = HEK_LEN(hek);
5268             char *as_utf8 = (char *)bytes_to_utf8((U8*)HEK_KEY(hek), &utf8_len);
5269             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
5270             SvUTF8_on(sv);
5271             return;
5272         } else if (flags & HVhek_UNSHARED) {
5273             sv_setpvn(sv, HEK_KEY(hek), HEK_LEN(hek));
5274             if (HEK_UTF8(hek))
5275                 SvUTF8_on(sv);
5276             else SvUTF8_off(sv);
5277             return;
5278         }
5279         {
5280             SV_CHECK_THINKFIRST_COW_DROP(sv);
5281             SvUPGRADE(sv, SVt_PV);
5282             SvPV_free(sv);
5283             SvPV_set(sv,(char *)HEK_KEY(share_hek_hek(hek)));
5284             SvCUR_set(sv, HEK_LEN(hek));
5285             SvLEN_set(sv, 0);
5286             SvIsCOW_on(sv);
5287             SvPOK_on(sv);
5288             if (HEK_UTF8(hek))
5289                 SvUTF8_on(sv);
5290             else SvUTF8_off(sv);
5291             return;
5292         }
5293     }
5294 }
5295
5296
5297 /*
5298 =for apidoc sv_usepvn_flags
5299
5300 Tells an SV to use C<ptr> to find its string value.  Normally the
5301 string is stored inside the SV, but sv_usepvn allows the SV to use an
5302 outside string.  C<ptr> should point to memory that was allocated
5303 by L<C<Newx>|perlclib/Memory Management and String Handling>.  It must be
5304 the start of a C<Newx>-ed block of memory, and not a pointer to the
5305 middle of it (beware of L<C<OOK>|perlguts/Offsets> and copy-on-write),
5306 and not be from a non-C<Newx> memory allocator like C<malloc>.  The
5307 string length, C<len>, must be supplied.  By default this function
5308 will C<Renew> (i.e. realloc, move) the memory pointed to by C<ptr>,
5309 so that pointer should not be freed or used by the programmer after
5310 giving it to C<sv_usepvn>, and neither should any pointers from "behind"
5311 that pointer (e.g. ptr + 1) be used.
5312
5313 If S<C<flags & SV_SMAGIC>> is true, will call C<SvSETMAGIC>.  If
5314 S<C<flags & SV_HAS_TRAILING_NUL>> is true, then C<ptr[len]> must be C<NUL>,
5315 and the realloc
5316 will be skipped (i.e. the buffer is actually at least 1 byte longer than
5317 C<len>, and already meets the requirements for storing in C<SvPVX>).
5318
5319 =for apidoc Amnh||SV_SMAGIC
5320 =for apidoc Amnh||SV_HAS_TRAILING_NUL
5321
5322 =cut
5323 */
5324
5325 void
5326 Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
5327 {
5328     STRLEN allocate;
5329
5330     PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
5331
5332     SV_CHECK_THINKFIRST_COW_DROP(sv);
5333     SvUPGRADE(sv, SVt_PV);
5334     if (!ptr) {
5335         (void)SvOK_off(sv);
5336         if (flags & SV_SMAGIC)
5337             SvSETMAGIC(sv);
5338         return;
5339     }
5340     if (SvPVX_const(sv))
5341         SvPV_free(sv);
5342
5343 #ifdef DEBUGGING
5344     if (flags & SV_HAS_TRAILING_NUL)
5345         assert(ptr[len] == '\0');
5346 #endif
5347
5348     allocate = (flags & SV_HAS_TRAILING_NUL)
5349         ? len + 1 :
5350 #ifdef Perl_safesysmalloc_size
5351         len + 1;
5352 #else
5353         PERL_STRLEN_ROUNDUP(len + 1);
5354 #endif
5355     if (flags & SV_HAS_TRAILING_NUL) {
5356         /* It's long enough - do nothing.
5357            Specifically Perl_newCONSTSUB is relying on this.  */
5358     } else {
5359 #ifdef DEBUGGING
5360         /* Force a move to shake out bugs in callers.  */
5361         char *new_ptr = (char*)safemalloc(allocate);
5362         Copy(ptr, new_ptr, len, char);
5363         PoisonFree(ptr,len,char);
5364         Safefree(ptr);
5365         ptr = new_ptr;
5366 #else
5367         ptr = (char*) saferealloc (ptr, allocate);
5368 #endif
5369     }
5370 #ifdef Perl_safesysmalloc_size
5371     SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
5372 #else
5373     SvLEN_set(sv, allocate);
5374 #endif
5375     SvCUR_set(sv, len);
5376     SvPV_set(sv, ptr);
5377     if (!(flags & SV_HAS_TRAILING_NUL)) {
5378         ptr[len] = '\0';
5379     }
5380     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5381     SvTAINT(sv);
5382     if (flags & SV_SMAGIC)
5383         SvSETMAGIC(sv);
5384 }
5385
5386
5387 static void
5388 S_sv_uncow(pTHX_ SV * const sv, const U32 flags)
5389 {
5390     assert(SvIsCOW(sv));
5391     {
5392 #ifdef PERL_ANY_COW
5393         const char * const pvx = SvPVX_const(sv);
5394         const STRLEN len = SvLEN(sv);
5395         const STRLEN cur = SvCUR(sv);
5396         const bool was_shared_hek = SvIsCOW_shared_hash(sv);
5397
5398 #ifdef DEBUGGING
5399         if (DEBUG_C_TEST) {
5400                 PerlIO_printf(Perl_debug_log,
5401                               "Copy on write: Force normal %ld\n",
5402                               (long) flags);
5403                 sv_dump(sv);
5404         }
5405 #endif
5406         SvIsCOW_off(sv);
5407 # ifdef PERL_COPY_ON_WRITE
5408         if (len) {
5409             /* Must do this first, since the CowREFCNT uses SvPVX and
5410             we need to write to CowREFCNT, or de-RO the whole buffer if we are
5411             the only owner left of the buffer. */
5412             sv_buf_to_rw(sv); /* NOOP if RO-ing not supported */
5413             {
5414                 U8 cowrefcnt = CowREFCNT(sv);
5415                 if(cowrefcnt != 0) {
5416                     cowrefcnt--;
5417                     CowREFCNT(sv) = cowrefcnt;
5418                     sv_buf_to_ro(sv);
5419                     goto copy_over;
5420                 }
5421             }
5422             /* Else we are the only owner of the buffer. */
5423         }
5424         else
5425 # endif
5426         {
5427             /* This SV doesn't own the buffer, so need to Newx() a new one:  */
5428             copy_over:
5429             SvPV_set(sv, NULL);
5430             SvCUR_set(sv, 0);
5431             SvLEN_set(sv, 0);
5432             if (flags & SV_COW_DROP_PV) {
5433                 /* OK, so we don't need to copy our buffer.  */
5434                 SvPOK_off(sv);
5435             } else {
5436                 SvGROW(sv, cur + 1);
5437                 Move(pvx,SvPVX(sv),cur,char);
5438                 SvCUR_set(sv, cur);
5439                 *SvEND(sv) = '\0';
5440             }
5441             if (was_shared_hek) {
5442                         unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5443             }
5444 #ifdef DEBUGGING
5445             if (DEBUG_C_TEST)
5446                 sv_dump(sv);
5447 #endif
5448         }
5449 #else
5450             const char * const pvx = SvPVX_const(sv);
5451             const STRLEN len = SvCUR(sv);
5452             SvIsCOW_off(sv);
5453             SvPV_set(sv, NULL);
5454             SvLEN_set(sv, 0);
5455             if (flags & SV_COW_DROP_PV) {
5456                 /* OK, so we don't need to copy our buffer.  */
5457                 SvPOK_off(sv);
5458             } else {
5459                 SvGROW(sv, len + 1);
5460                 Move(pvx,SvPVX(sv),len,char);
5461                 *SvEND(sv) = '\0';
5462             }
5463             unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5464 #endif
5465     }
5466 }
5467
5468
5469 /*
5470 =for apidoc sv_force_normal_flags
5471
5472 Undo various types of fakery on an SV, where fakery means
5473 "more than" a string: if the PV is a shared string, make
5474 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
5475 an C<xpvmg>; if we're a copy-on-write scalar, this is the on-write time when
5476 we do the copy, and is also used locally; if this is a
5477 vstring, drop the vstring magic.  If C<SV_COW_DROP_PV> is set
5478 then a copy-on-write scalar drops its PV buffer (if any) and becomes
5479 C<SvPOK_off> rather than making a copy.  (Used where this
5480 scalar is about to be set to some other value.)  In addition,
5481 the C<flags> parameter gets passed to C<sv_unref_flags()>
5482 when unreffing.  C<sv_force_normal> calls this function
5483 with flags set to 0.
5484
5485 This function is expected to be used to signal to perl that this SV is
5486 about to be written to, and any extra book-keeping needs to be taken care
5487 of.  Hence, it croaks on read-only values.
5488
5489 =for apidoc Amnh||SV_COW_DROP_PV
5490
5491 =cut
5492 */
5493
5494 void
5495 Perl_sv_force_normal_flags(pTHX_ SV *const sv, const U32 flags)
5496 {
5497     PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
5498
5499     if (SvREADONLY(sv))
5500         Perl_croak_no_modify();
5501     else if (SvIsCOW(sv) && LIKELY(SvTYPE(sv) != SVt_PVHV))
5502         S_sv_uncow(aTHX_ sv, flags);
5503     if (SvROK(sv))
5504         sv_unref_flags(sv, flags);
5505     else if (SvFAKE(sv) && isGV_with_GP(sv))
5506         sv_unglob(sv, flags);
5507     else if (SvFAKE(sv) && isREGEXP(sv)) {
5508         /* Need to downgrade the REGEXP to a simple(r) scalar. This is analogous
5509            to sv_unglob. We only need it here, so inline it.  */
5510         const bool islv = SvTYPE(sv) == SVt_PVLV;
5511         const svtype new_type =
5512           islv ? SVt_NULL : SvMAGIC(sv) || SvSTASH(sv) ? SVt_PVMG : SVt_PV;
5513         SV *const temp = newSV_type(new_type);
5514         regexp *old_rx_body;
5515
5516         if (new_type == SVt_PVMG) {
5517             SvMAGIC_set(temp, SvMAGIC(sv));
5518             SvMAGIC_set(sv, NULL);
5519             SvSTASH_set(temp, SvSTASH(sv));
5520             SvSTASH_set(sv, NULL);
5521         }
5522         if (!islv)
5523             SvCUR_set(temp, SvCUR(sv));
5524         /* Remember that SvPVX is in the head, not the body. */
5525         assert(ReANY((REGEXP *)sv)->mother_re);
5526
5527         if (islv) {
5528             /* LV-as-regex has sv->sv_any pointing to an XPVLV body,
5529              * whose xpvlenu_rx field points to the regex body */
5530             XPV *xpv = (XPV*)(SvANY(sv));
5531             old_rx_body = xpv->xpv_len_u.xpvlenu_rx;
5532             xpv->xpv_len_u.xpvlenu_rx = NULL;
5533         }
5534         else
5535             old_rx_body = ReANY((REGEXP *)sv);
5536
5537         /* Their buffer is already owned by someone else. */
5538         if (flags & SV_COW_DROP_PV) {
5539             /* SvLEN is already 0.  For SVt_REGEXP, we have a brand new
5540                zeroed body.  For SVt_PVLV, we zeroed it above (len field
5541                a union with xpvlenu_rx) */
5542             assert(!SvLEN(islv ? sv : temp));
5543             sv->sv_u.svu_pv = 0;
5544         }
5545         else {
5546             sv->sv_u.svu_pv = savepvn(RX_WRAPPED((REGEXP *)sv), SvCUR(sv));
5547             SvLEN_set(islv ? sv : temp, SvCUR(sv)+1);
5548             SvPOK_on(sv);
5549         }
5550
5551         /* Now swap the rest of the bodies. */
5552
5553         SvFAKE_off(sv);
5554         if (!islv) {
5555             SvFLAGS(sv) &= ~SVTYPEMASK;
5556             SvFLAGS(sv) |= new_type;
5557             SvANY(sv) = SvANY(temp);
5558         }
5559
5560         SvFLAGS(temp) &= ~(SVTYPEMASK);
5561         SvFLAGS(temp) |= SVt_REGEXP|SVf_FAKE;
5562         SvANY(temp) = old_rx_body;
5563
5564         /* temp is now rebuilt as a correctly structured SVt_REGEXP, so this
5565          * will trigger a call to sv_clear() which will correctly free the
5566          * body. */
5567         SvREFCNT_dec_NN(temp);
5568     }
5569     else if (SvVOK(sv)) sv_unmagic(sv, PERL_MAGIC_vstring);
5570 }
5571
5572 /*
5573 =for apidoc sv_chop
5574
5575 Efficient removal of characters from the beginning of the string buffer.
5576 C<SvPOK(sv)>, or at least C<SvPOKp(sv)>, must be true and C<ptr> must be a
5577 pointer to somewhere inside the string buffer.  C<ptr> becomes the first
5578 character of the adjusted string.  Uses the C<OOK> hack.  On return, only
5579 C<SvPOK(sv)> and C<SvPOKp(sv)> among the C<OK> flags will be true.
5580
5581 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
5582 refer to the same chunk of data.
5583
5584 The unfortunate similarity of this function's name to that of Perl's C<chop>
5585 operator is strictly coincidental.  This function works from the left;
5586 C<chop> works from the right.
5587
5588 =cut
5589 */
5590
5591 void
5592 Perl_sv_chop(pTHX_ SV *const sv, const char *const ptr)
5593 {
5594     STRLEN delta;
5595     STRLEN old_delta;
5596     U8 *p;
5597 #ifdef DEBUGGING
5598     const U8 *evacp;
5599     STRLEN evacn;
5600 #endif
5601     STRLEN max_delta;
5602
5603     PERL_ARGS_ASSERT_SV_CHOP;
5604
5605     if (!ptr || !SvPOKp(sv))
5606         return;
5607     delta = ptr - SvPVX_const(sv);
5608     if (!delta) {
5609         /* Nothing to do.  */
5610         return;
5611     }
5612     max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
5613     if (delta > max_delta)
5614         Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
5615                    ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
5616     /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), so don't use ptr any more */
5617     SV_CHECK_THINKFIRST(sv);
5618     SvPOK_only_UTF8(sv);
5619
5620     if (!SvOOK(sv)) {
5621         if (!SvLEN(sv)) { /* make copy of shared string */
5622             const char *pvx = SvPVX_const(sv);
5623             const STRLEN len = SvCUR(sv);
5624             SvGROW(sv, len + 1);
5625             Move(pvx,SvPVX(sv),len,char);
5626             *SvEND(sv) = '\0';
5627         }
5628         SvOOK_on(sv);
5629         old_delta = 0;
5630     } else {
5631         SvOOK_offset(sv, old_delta);
5632     }
5633     SvLEN_set(sv, SvLEN(sv) - delta);
5634     SvCUR_set(sv, SvCUR(sv) - delta);
5635     SvPV_set(sv, SvPVX(sv) + delta);
5636
5637     p = (U8 *)SvPVX_const(sv);
5638
5639 #ifdef DEBUGGING
5640     /* how many bytes were evacuated?  we will fill them with sentinel
5641        bytes, except for the part holding the new offset of course. */
5642     evacn = delta;
5643     if (old_delta)
5644         evacn += (old_delta < 0x100 ? 1 : 1 + sizeof(STRLEN));
5645     assert(evacn);
5646     assert(evacn <= delta + old_delta);
5647     evacp = p - evacn;
5648 #endif
5649
5650     /* This sets 'delta' to the accumulated value of all deltas so far */
5651     delta += old_delta;
5652     assert(delta);
5653
5654     /* If 'delta' fits in a byte, store it just prior to the new beginning of
5655      * the string; otherwise store a 0 byte there and store 'delta' just prior
5656      * to that, using as many bytes as a STRLEN occupies.  Thus it overwrites a
5657      * portion of the chopped part of the string */
5658     if (delta < 0x100) {
5659         *--p = (U8) delta;
5660     } else {
5661         *--p = 0;
5662         p -= sizeof(STRLEN);
5663         Copy((U8*)&delta, p, sizeof(STRLEN), U8);
5664     }
5665
5666 #ifdef DEBUGGING
5667     /* Fill the preceding buffer with sentinals to verify that no-one is
5668        using it.  */
5669     while (p > evacp) {
5670         --p;
5671         *p = (U8)PTR2UV(p);
5672     }
5673 #endif
5674 }
5675
5676 /*
5677 =for apidoc sv_catpvn
5678 =for apidoc_item sv_catpvn_flags
5679 =for apidoc_item sv_catpvn_mg
5680 =for apidoc_item sv_catpvn_nomg
5681
5682 These concatenate the C<len> bytes of the string beginning at C<ptr> onto the
5683 end of the string which is in C<dsv>.  The caller must make sure C<ptr>
5684 contains at least C<len> bytes.
5685
5686 For all but C<sv_catpvn_flags>, the string appended is assumed to be valid
5687 UTF-8 if the SV has the UTF-8 status set, and a string of bytes otherwise.
5688
5689 They differ in that:
5690
5691 C<sv_catpvn_mg> performs both 'get' and 'set' magic on C<dsv>.
5692
5693 C<sv_catpvn> performs only 'get' magic.
5694
5695 C<sv_catpvn_nomg> skips all magic.
5696
5697 C<sv_catpvn_flags> has an extra C<flags> parameter which allows you to specify
5698 any combination of magic handling (using C<SV_GMAGIC> and/or C<SV_SMAGIC>) and
5699 to also override the UTF-8 handling.  By supplying the C<SV_CATBYTES> flag, the
5700 appended string is interpreted as plain bytes; by supplying instead the
5701 C<SV_CATUTF8> flag, it will be interpreted as UTF-8, and the C<dsv> will be
5702 upgraded to UTF-8 if necessary.
5703
5704 C<sv_catpvn>, C<sv_catpvn_mg>, and C<sv_catpvn_nomg> are implemented
5705 in terms of C<sv_catpvn_flags>.
5706
5707 =for apidoc Amnh||SV_CATUTF8
5708 =for apidoc Amnh||SV_CATBYTES
5709
5710 =cut
5711 */
5712
5713 void
5714 Perl_sv_catpvn_flags(pTHX_ SV *const dsv, const char *sstr, const STRLEN slen, const I32 flags)
5715 {
5716     STRLEN dlen;
5717     const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
5718
5719     PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
5720     assert((flags & (SV_CATBYTES|SV_CATUTF8)) != (SV_CATBYTES|SV_CATUTF8));
5721
5722     if (!(flags & SV_CATBYTES) || !SvUTF8(dsv)) {
5723       if (flags & SV_CATUTF8 && !SvUTF8(dsv)) {
5724          sv_utf8_upgrade_flags_grow(dsv, 0, slen + 1);
5725          dlen = SvCUR(dsv);
5726       }
5727       else SvGROW(dsv, dlen + slen + 3);
5728       if (sstr == dstr)
5729         sstr = SvPVX_const(dsv);
5730       Move(sstr, SvPVX(dsv) + dlen, slen, char);
5731       SvCUR_set(dsv, SvCUR(dsv) + slen);
5732     }
5733     else {
5734         /* We inline bytes_to_utf8, to avoid an extra malloc. */
5735         const char * const send = sstr + slen;
5736         U8 *d;
5737
5738         /* Something this code does not account for, which I think is
5739            impossible; it would require the same pv to be treated as
5740            bytes *and* utf8, which would indicate a bug elsewhere. */
5741         assert(sstr != dstr);
5742
5743         SvGROW(dsv, dlen + slen * 2 + 3);
5744         d = (U8 *)SvPVX(dsv) + dlen;
5745
5746         while (sstr < send) {
5747             append_utf8_from_native_byte(*sstr, &d);
5748             sstr++;
5749         }
5750         SvCUR_set(dsv, d-(const U8 *)SvPVX(dsv));
5751     }
5752     *SvEND(dsv) = '\0';
5753     (void)SvPOK_only_UTF8(dsv);         /* validate pointer */
5754     SvTAINT(dsv);
5755     if (flags & SV_SMAGIC)
5756         SvSETMAGIC(dsv);
5757 }
5758
5759 /*
5760 =for apidoc sv_catsv
5761 =for apidoc_item sv_catsv_flags
5762 =for apidoc_item sv_catsv_mg
5763 =for apidoc_item sv_catsv_nomg
5764
5765 These concatenate the string from SV C<sstr> onto the end of the string in SV
5766 C<dsv>.  If C<sstr> is null, these are no-ops; otherwise only C<dsv> is
5767 modified.
5768
5769 They differ only in what magic they perform:
5770
5771 C<sv_catsv_mg> performs 'get' magic on both SVs before the copy, and 'set' magic
5772 on C<dsv> afterwards.
5773
5774 C<sv_catsv> performs just 'get' magic, on both SVs.
5775
5776 C<sv_catsv_nomg> skips all magic.
5777
5778 C<sv_catsv_flags> has an extra C<flags> parameter which allows you to use
5779 C<SV_GMAGIC> and/or C<SV_SMAGIC> to specify any combination of magic handling
5780 (although either both or neither SV will have 'get' magic applied to it.)
5781
5782 C<sv_catsv>, C<sv_catsv_mg>, and C<sv_catsv_nomg> are implemented
5783 in terms of C<sv_catsv_flags>.
5784
5785 =cut */
5786
5787 void
5788 Perl_sv_catsv_flags(pTHX_ SV *const dsv, SV *const sstr, const I32 flags)
5789 {
5790     PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
5791
5792     if (sstr) {
5793         STRLEN slen;
5794         const char *spv = SvPV_flags_const(sstr, slen, flags);
5795         if (flags & SV_GMAGIC)
5796                 SvGETMAGIC(dsv);
5797         sv_catpvn_flags(dsv, spv, slen,
5798                             DO_UTF8(sstr) ? SV_CATUTF8 : SV_CATBYTES);
5799         if (flags & SV_SMAGIC)
5800                 SvSETMAGIC(dsv);
5801     }
5802 }
5803
5804 /*
5805 =for apidoc sv_catpv
5806 =for apidoc_item sv_catpv_flags
5807 =for apidoc_item sv_catpv_mg
5808 =for apidoc_item sv_catpv_nomg
5809
5810 These concatenate the C<NUL>-terminated string C<sstr> onto the end of the
5811 string which is in the SV.
5812 If the SV has the UTF-8 status set, then the bytes appended should be
5813 valid UTF-8.
5814
5815 They differ only in how they handle magic:
5816
5817 C<sv_catpv_mg> performs both 'get' and 'set' magic.
5818
5819 C<sv_catpv> performs only 'get' magic.
5820
5821 C<sv_catpv_nomg> skips all magic.
5822
5823 C<sv_catpv_flags> has an extra C<flags> parameter which allows you to specify
5824 any combination of magic handling (using C<SV_GMAGIC> and/or C<SV_SMAGIC>), and
5825 to also override the UTF-8 handling.  By supplying the C<SV_CATUTF8> flag, the
5826 appended string is forced to be interpreted as UTF-8; by supplying instead the
5827 C<SV_CATBYTES> flag, it will be interpreted as just bytes.  Either the SV or
5828 the string appended will be upgraded to UTF-8 if necessary.
5829
5830 =cut
5831 */
5832
5833 void
5834 Perl_sv_catpv(pTHX_ SV *const dsv, const char *sstr)
5835 {
5836     STRLEN len;
5837     STRLEN tlen;
5838     char *junk;
5839
5840     PERL_ARGS_ASSERT_SV_CATPV;
5841
5842     if (!sstr)
5843         return;
5844     junk = SvPV_force(dsv, tlen);
5845     len = strlen(sstr);
5846     SvGROW(dsv, tlen + len + 1);
5847     if (sstr == junk)
5848         sstr = SvPVX_const(dsv);
5849     Move(sstr,SvPVX(dsv)+tlen,len+1,char);
5850     SvCUR_set(dsv, SvCUR(dsv) + len);
5851     (void)SvPOK_only_UTF8(dsv);         /* validate pointer */
5852     SvTAINT(dsv);
5853 }
5854
5855 void
5856 Perl_sv_catpv_flags(pTHX_ SV *dsv, const char *sstr, const I32 flags)
5857 {
5858     PERL_ARGS_ASSERT_SV_CATPV_FLAGS;
5859     sv_catpvn_flags(dsv, sstr, strlen(sstr), flags);
5860 }
5861
5862 void
5863 Perl_sv_catpv_mg(pTHX_ SV *const dsv, const char *const sstr)
5864 {
5865     PERL_ARGS_ASSERT_SV_CATPV_MG;
5866
5867     sv_catpv(dsv,sstr);
5868     SvSETMAGIC(dsv);
5869 }
5870
5871 /*
5872 =for apidoc newSV
5873
5874 Creates a new SV.  A non-zero C<len> parameter indicates the number of
5875 bytes of preallocated string space the SV should have.  An extra byte for a
5876 trailing C<NUL> is also reserved.  (C<SvPOK> is not set for the SV even if string
5877 space is allocated.)  The reference count for the new SV is set to 1.
5878
5879 In 5.9.3, C<newSV()> replaces the older C<NEWSV()> API, and drops the first
5880 parameter, I<x>, a debug aid which allowed callers to identify themselves.
5881 This aid has been superseded by a new build option, C<PERL_MEM_LOG> (see
5882 L<perlhacktips/PERL_MEM_LOG>).  The older API is still there for use in XS
5883 modules supporting older perls.
5884
5885 =cut
5886 */
5887
5888 SV *
5889 Perl_newSV(pTHX_ const STRLEN len)
5890 {
5891     SV *sv;
5892
5893     new_SV(sv);
5894     if (len) {
5895         sv_upgrade(sv, SVt_PV);
5896         sv_grow_fresh(sv, len + 1);
5897     }
5898     return sv;
5899 }
5900 /*
5901 =for apidoc sv_magicext
5902
5903 Adds magic to an SV, upgrading it if necessary.  Applies the
5904 supplied C<vtable> and returns a pointer to the magic added.
5905
5906 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
5907 In particular, you can add magic to C<SvREADONLY> SVs, and add more than
5908 one instance of the same C<how>.
5909
5910 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
5911 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
5912 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
5913 to contain an SV* and is stored as-is with its C<REFCNT> incremented.
5914
5915 (This is now used as a subroutine by C<sv_magic>.)
5916
5917 =cut
5918 */
5919 MAGIC *
5920 Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how,
5921                 const MGVTBL *const vtable, const char *const name, const I32 namlen)
5922 {
5923     MAGIC* mg;
5924
5925     PERL_ARGS_ASSERT_SV_MAGICEXT;
5926
5927     SvUPGRADE(sv, SVt_PVMG);
5928     Newxz(mg, 1, MAGIC);
5929     mg->mg_moremagic = SvMAGIC(sv);
5930     SvMAGIC_set(sv, mg);
5931
5932     /* Sometimes a magic contains a reference loop, where the sv and
5933        object refer to each other.  To prevent a reference loop that
5934        would prevent such objects being freed, we look for such loops
5935        and if we find one we avoid incrementing the object refcount.
5936
5937        Note we cannot do this to avoid self-tie loops as intervening RV must
5938        have its REFCNT incremented to keep it in existence.
5939
5940     */
5941     if (!obj || obj == sv ||
5942         how == PERL_MAGIC_arylen ||
5943         how == PERL_MAGIC_regdata ||
5944         how == PERL_MAGIC_regdatum ||
5945         how == PERL_MAGIC_symtab ||
5946         (SvTYPE(obj) == SVt_PVGV &&
5947             (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
5948              || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
5949              || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
5950     {
5951         mg->mg_obj = obj;
5952     }
5953     else {
5954         mg->mg_obj = SvREFCNT_inc_simple(obj);
5955         mg->mg_flags |= MGf_REFCOUNTED;
5956     }
5957
5958     /* Normal self-ties simply pass a null object, and instead of
5959        using mg_obj directly, use the SvTIED_obj macro to produce a
5960        new RV as needed.  For glob "self-ties", we are tieing the PVIO
5961        with an RV obj pointing to the glob containing the PVIO.  In
5962        this case, to avoid a reference loop, we need to weaken the
5963        reference.
5964     */
5965
5966     if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
5967         obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
5968     {
5969       sv_rvweaken(obj);
5970     }
5971
5972     mg->mg_type = how;
5973     mg->mg_len = namlen;
5974     if (name) {
5975         if (namlen > 0)
5976             mg->mg_ptr = savepvn(name, namlen);
5977         else if (namlen == HEf_SVKEY) {
5978             /* Yes, this is casting away const. This is only for the case of
5979                HEf_SVKEY. I think we need to document this aberation of the
5980                constness of the API, rather than making name non-const, as
5981                that change propagating outwards a long way.  */
5982             mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
5983         } else
5984             mg->mg_ptr = (char *) name;
5985     }
5986     mg->mg_virtual = (MGVTBL *) vtable;
5987
5988     mg_magical(sv);
5989     return mg;
5990 }
5991
5992 MAGIC *
5993 Perl_sv_magicext_mglob(pTHX_ SV *sv)
5994 {
5995     PERL_ARGS_ASSERT_SV_MAGICEXT_MGLOB;
5996     if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y') {
5997         /* This sv is only a delegate.  //g magic must be attached to
5998            its target. */
5999         vivify_defelem(sv);
6000         sv = LvTARG(sv);
6001     }
6002     return sv_magicext(sv, NULL, PERL_MAGIC_regex_global,
6003                        &PL_vtbl_mglob, 0, 0);
6004 }
6005
6006 /*
6007 =for apidoc sv_magic
6008
6009 Adds magic to an SV.  First upgrades C<sv> to type C<SVt_PVMG> if
6010 necessary, then adds a new magic item of type C<how> to the head of the
6011 magic list.
6012
6013 See C<L</sv_magicext>> (which C<sv_magic> now calls) for a description of the
6014 handling of the C<name> and C<namlen> arguments.
6015
6016 You need to use C<sv_magicext> to add magic to C<SvREADONLY> SVs and also
6017 to add more than one instance of the same C<how>.
6018
6019 =cut
6020 */
6021
6022 void
6023 Perl_sv_magic(pTHX_ SV *const sv, SV *const obj, const int how,
6024              const char *const name, const I32 namlen)
6025 {
6026     const MGVTBL *vtable;
6027     MAGIC* mg;
6028     unsigned int flags;
6029     unsigned int vtable_index;
6030
6031     PERL_ARGS_ASSERT_SV_MAGIC;
6032
6033     if (how < 0 || (unsigned)how >= C_ARRAY_LENGTH(PL_magic_data)
6034         || ((flags = PL_magic_data[how]),
6035             (vtable_index = flags & PERL_MAGIC_VTABLE_MASK)
6036             > magic_vtable_max))
6037         Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
6038
6039     /* PERL_MAGIC_ext is reserved for use by extensions not perl internals.
6040        Useful for attaching extension internal data to perl vars.
6041        Note that multiple extensions may clash if magical scalars
6042        etc holding private data from one are passed to another. */
6043
6044     vtable = (vtable_index == magic_vtable_max)
6045         ? NULL : PL_magic_vtables + vtable_index;
6046
6047     if (SvREADONLY(sv)) {
6048         if (
6049             !PERL_MAGIC_TYPE_READONLY_ACCEPTABLE(how)
6050            )
6051         {
6052             Perl_croak_no_modify();
6053         }
6054     }
6055     if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
6056         if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
6057             /* sv_magic() refuses to add a magic of the same 'how' as an
6058                existing one
6059              */
6060             if (how == PERL_MAGIC_taint)
6061                 mg->mg_len |= 1;
6062             return;
6063         }
6064     }
6065
6066     /* Force pos to be stored as characters, not bytes. */
6067     if (SvMAGICAL(sv) && DO_UTF8(sv)
6068       && (mg = mg_find(sv, PERL_MAGIC_regex_global))
6069       && mg->mg_len != -1
6070       && mg->mg_flags & MGf_BYTES) {
6071         mg->mg_len = (SSize_t)sv_pos_b2u_flags(sv, (STRLEN)mg->mg_len,
6072                                                SV_CONST_RETURN);
6073         mg->mg_flags &= ~MGf_BYTES;
6074     }
6075
6076     /* Rest of work is done else where */
6077     mg = sv_magicext(sv,obj,how,vtable,name,namlen);
6078
6079     switch (how) {
6080     case PERL_MAGIC_taint:
6081         mg->mg_len = 1;
6082         break;
6083     case PERL_MAGIC_ext:
6084     case PERL_MAGIC_dbfile:
6085         SvRMAGICAL_on(sv);
6086         break;
6087     }
6088 }
6089
6090 static int
6091 S_sv_unmagicext_flags(pTHX_ SV *const sv, const int type, MGVTBL *vtbl, const U32 flags)
6092 {
6093     MAGIC* mg;
6094     MAGIC** mgp;
6095
6096     assert(flags <= 1);
6097
6098     if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
6099         return 0;
6100     mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
6101     for (mg = *mgp; mg; mg = *mgp) {
6102         const MGVTBL* const virt = mg->mg_virtual;
6103         if (mg->mg_type == type && (!flags || virt == vtbl)) {
6104             *mgp = mg->mg_moremagic;
6105             if (virt && virt->svt_free)
6106                 virt->svt_free(aTHX_ sv, mg);
6107             if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
6108                 if (mg->mg_len > 0)
6109                     Safefree(mg->mg_ptr);
6110                 else if (mg->mg_len == HEf_SVKEY)
6111                     SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
6112                 else if (mg->mg_type == PERL_MAGIC_utf8)
6113                     Safefree(mg->mg_ptr);
6114             }
6115             if (mg->mg_flags & MGf_REFCOUNTED)
6116                 SvREFCNT_dec(mg->mg_obj);
6117             Safefree(mg);
6118         }
6119         else
6120             mgp = &mg->mg_moremagic;
6121     }
6122     if (SvMAGIC(sv)) {
6123         if (SvMAGICAL(sv))      /* if we're under save_magic, wait for restore_magic; */
6124             mg_magical(sv);     /*    else fix the flags now */
6125     }
6126     else
6127         SvMAGICAL_off(sv);
6128
6129     return 0;
6130 }
6131
6132 /*
6133 =for apidoc sv_unmagic
6134
6135 Removes all magic of type C<type> from an SV.
6136
6137 =cut
6138 */
6139
6140 int
6141 Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
6142 {
6143     PERL_ARGS_ASSERT_SV_UNMAGIC;
6144     return S_sv_unmagicext_flags(aTHX_ sv, type, NULL, 0);
6145 }
6146
6147 /*
6148 =for apidoc sv_unmagicext
6149
6150 Removes all magic of type C<type> with the specified C<vtbl> from an SV.
6151
6152 =cut
6153 */
6154
6155 int
6156 Perl_sv_unmagicext(pTHX_ SV *const sv, const int type, MGVTBL *vtbl)
6157 {
6158     PERL_ARGS_ASSERT_SV_UNMAGICEXT;
6159     return S_sv_unmagicext_flags(aTHX_ sv, type, vtbl, 1);
6160 }
6161
6162 /*
6163 =for apidoc sv_rvweaken
6164
6165 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
6166 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
6167 push a back-reference to this RV onto the array of backreferences
6168 associated with that magic.  If the RV is magical, set magic will be
6169 called after the RV is cleared.  Silently ignores C<undef> and warns
6170 on already-weak references.
6171
6172 =cut
6173 */
6174
6175 SV *
6176 Perl_sv_rvweaken(pTHX_ SV *const sv)
6177 {
6178     SV *tsv;
6179
6180     PERL_ARGS_ASSERT_SV_RVWEAKEN;
6181
6182     if (!SvOK(sv))  /* let undefs pass */
6183         return sv;
6184     if (!SvROK(sv))
6185         Perl_croak(aTHX_ "Can't weaken a nonreference");
6186     else if (SvWEAKREF(sv)) {
6187         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
6188         return sv;
6189     }
6190     else if (SvREADONLY(sv)) croak_no_modify();
6191     tsv = SvRV(sv);
6192     Perl_sv_add_backref(aTHX_ tsv, sv);
6193     SvWEAKREF_on(sv);
6194     SvREFCNT_dec_NN(tsv);
6195     return sv;
6196 }
6197
6198 /*
6199 =for apidoc sv_rvunweaken
6200
6201 Unweaken a reference: Clear the C<SvWEAKREF> flag on this RV; remove
6202 the backreference to this RV from the array of backreferences
6203 associated with the target SV, increment the refcount of the target.
6204 Silently ignores C<undef> and warns on non-weak references.
6205
6206 =cut
6207 */
6208
6209 SV *
6210 Perl_sv_rvunweaken(pTHX_ SV *const sv)
6211 {
6212     SV *tsv;
6213
6214     PERL_ARGS_ASSERT_SV_RVUNWEAKEN;
6215
6216     if (!SvOK(sv)) /* let undefs pass */
6217         return sv;
6218     if (!SvROK(sv))
6219         Perl_croak(aTHX_ "Can't unweaken a nonreference");
6220     else if (!SvWEAKREF(sv)) {
6221         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is not weak");
6222         return sv;
6223     }
6224     else if (SvREADONLY(sv)) croak_no_modify();
6225
6226     tsv = SvRV(sv);
6227     SvWEAKREF_off(sv);
6228     SvROK_on(sv);
6229     SvREFCNT_inc_NN(tsv);
6230     Perl_sv_del_backref(aTHX_ tsv, sv);
6231     return sv;
6232 }
6233
6234 /*
6235 =for apidoc sv_get_backrefs
6236
6237 If C<sv> is the target of a weak reference then it returns the back
6238 references structure associated with the sv; otherwise return C<NULL>.
6239
6240 When returning a non-null result the type of the return is relevant. If it
6241 is an AV then the elements of the AV are the weak reference RVs which
6242 point at this item. If it is any other type then the item itself is the
6243 weak reference.
6244
6245 See also C<Perl_sv_add_backref()>, C<Perl_sv_del_backref()>,
6246 C<Perl_sv_kill_backrefs()>
6247
6248 =cut
6249 */
6250
6251 SV *
6252 Perl_sv_get_backrefs(SV *const sv)
6253 {
6254     SV *backrefs= NULL;
6255
6256     PERL_ARGS_ASSERT_SV_GET_BACKREFS;
6257
6258     /* find slot to store array or singleton backref */
6259
6260     if (SvTYPE(sv) == SVt_PVHV) {
6261         if (SvOOK(sv)) {
6262             struct xpvhv_aux * const iter = HvAUX((HV *)sv);
6263             backrefs = (SV *)iter->xhv_backreferences;
6264         }
6265     } else if (SvMAGICAL(sv)) {
6266         MAGIC *mg = mg_find(sv, PERL_MAGIC_backref);
6267         if (mg)
6268             backrefs = mg->mg_obj;
6269     }
6270     return backrefs;
6271 }
6272
6273 /* Give tsv backref magic if it hasn't already got it, then push a
6274  * back-reference to sv onto the array associated with the backref magic.
6275  *
6276  * As an optimisation, if there's only one backref and it's not an AV,
6277  * store it directly in the HvAUX or mg_obj slot, avoiding the need to
6278  * allocate an AV. (Whether the slot holds an AV tells us whether this is
6279  * active.)
6280  */
6281
6282 /* A discussion about the backreferences array and its refcount:
6283  *
6284  * The AV holding the backreferences is pointed to either as the mg_obj of
6285  * PERL_MAGIC_backref, or in the specific case of a HV, from the
6286  * xhv_backreferences field. The array is created with a refcount
6287  * of 2. This means that if during global destruction the array gets
6288  * picked on before its parent to have its refcount decremented by the
6289  * random zapper, it won't actually be freed, meaning it's still there for
6290  * when its parent gets freed.
6291  *
6292  * When the parent SV is freed, the extra ref is killed by
6293  * Perl_sv_kill_backrefs.  The other ref is killed, in the case of magic,
6294  * by mg_free() / MGf_REFCOUNTED, or for a hash, by Perl_hv_kill_backrefs.
6295  *
6296  * When a single backref SV is stored directly, it is not reference
6297  * counted.
6298  */
6299
6300 void
6301 Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
6302 {
6303     SV **svp;
6304     AV *av = NULL;
6305     MAGIC *mg = NULL;
6306
6307     PERL_ARGS_ASSERT_SV_ADD_BACKREF;
6308
6309     /* find slot to store array or singleton backref */
6310
6311     if (SvTYPE(tsv) == SVt_PVHV) {
6312         svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
6313     } else {
6314         if (SvMAGICAL(tsv))
6315             mg = mg_find(tsv, PERL_MAGIC_backref);
6316         if (!mg)
6317             mg = sv_magicext(tsv, NULL, PERL_MAGIC_backref, &PL_vtbl_backref, NULL, 0);
6318         svp = &(mg->mg_obj);
6319     }
6320
6321     /* create or retrieve the array */
6322
6323     if (   (!*svp && SvTYPE(sv) == SVt_PVAV)
6324         || (*svp && SvTYPE(*svp) != SVt_PVAV)
6325     ) {
6326         /* create array */
6327         if (mg)
6328             mg->mg_flags |= MGf_REFCOUNTED;
6329         av = newAV();
6330         AvREAL_off(av);
6331         SvREFCNT_inc_simple_void_NN(av);
6332         /* av now has a refcnt of 2; see discussion above */
6333         av_extend(av, *svp ? 2 : 1);
6334         if (*svp) {
6335             /* move single existing backref to the array */
6336             AvARRAY(av)[++AvFILLp(av)] = *svp; /* av_push() */
6337         }
6338         *svp = (SV*)av;
6339     }
6340     else {
6341         av = MUTABLE_AV(*svp);
6342         if (!av) {
6343             /* optimisation: store single backref directly in HvAUX or mg_obj */
6344             *svp = sv;
6345             return;
6346         }
6347         assert(SvTYPE(av) == SVt_PVAV);
6348         if (AvFILLp(av) >= AvMAX(av)) {
6349             av_extend(av, AvFILLp(av)+1);
6350         }
6351     }
6352     /* push new backref */
6353     AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
6354 }
6355
6356 /* delete a back-reference to ourselves from the backref magic associated
6357  * with the SV we point to.
6358  */
6359
6360 void
6361 Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
6362 {
6363     SV **svp = NULL;
6364
6365     PERL_ARGS_ASSERT_SV_DEL_BACKREF;
6366
6367     if (SvTYPE(tsv) == SVt_PVHV) {
6368         if (SvOOK(tsv))
6369             svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
6370     }
6371     else if (SvIS_FREED(tsv) && PL_phase == PERL_PHASE_DESTRUCT) {
6372         /* It's possible for the the last (strong) reference to tsv to have
6373            become freed *before* the last thing holding a weak reference.
6374            If both survive longer than the backreferences array, then when
6375            the referent's reference count drops to 0 and it is freed, it's
6376            not able to chase the backreferences, so they aren't NULLed.
6377
6378            For example, a CV holds a weak reference to its stash. If both the
6379            CV and the stash survive longer than the backreferences array,
6380            and the CV gets picked for the SvBREAK() treatment first,
6381            *and* it turns out that the stash is only being kept alive because
6382            of an our variable in the pad of the CV, then midway during CV
6383            destruction the stash gets freed, but CvSTASH() isn't set to NULL.
6384            It ends up pointing to the freed HV. Hence it's chased in here, and
6385            if this block wasn't here, it would hit the !svp panic just below.
6386
6387            I don't believe that "better" destruction ordering is going to help
6388            here - during global destruction there's always going to be the
6389            chance that something goes out of order. We've tried to make it
6390            foolproof before, and it only resulted in evolutionary pressure on
6391            fools. Which made us look foolish for our hubris. :-(
6392         */
6393         return;
6394     }
6395     else {
6396         MAGIC *const mg
6397             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
6398         svp =  mg ? &(mg->mg_obj) : NULL;
6399     }
6400
6401     if (!svp)
6402         Perl_croak(aTHX_ "panic: del_backref, svp=0");
6403     if (!*svp) {
6404         /* It's possible that sv is being freed recursively part way through the
6405            freeing of tsv. If this happens, the backreferences array of tsv has
6406            already been freed, and so svp will be NULL. If this is the case,
6407            we should not panic. Instead, nothing needs doing, so return.  */
6408         if (PL_phase == PERL_PHASE_DESTRUCT && SvREFCNT(tsv) == 0)
6409             return;
6410         Perl_croak(aTHX_ "panic: del_backref, *svp=%p phase=%s refcnt=%" UVuf,
6411                    (void*)*svp, PL_phase_names[PL_phase], (UV)SvREFCNT(tsv));
6412     }
6413
6414     if (SvTYPE(*svp) == SVt_PVAV) {
6415 #ifdef DEBUGGING
6416         int count = 1;
6417 #endif
6418         AV * const av = (AV*)*svp;
6419         SSize_t fill;
6420         assert(!SvIS_FREED(av));
6421         fill = AvFILLp(av);
6422         assert(fill > -1);
6423         svp = AvARRAY(av);
6424         /* for an SV with N weak references to it, if all those
6425          * weak refs are deleted, then sv_del_backref will be called
6426          * N times and O(N^2) compares will be done within the backref
6427          * array. To ameliorate this potential slowness, we:
6428          * 1) make sure this code is as tight as possible;
6429          * 2) when looking for SV, look for it at both the head and tail of the
6430          *    array first before searching the rest, since some create/destroy
6431          *    patterns will cause the backrefs to be freed in order.
6432          */
6433         if (*svp == sv) {
6434             AvARRAY(av)++;
6435             AvMAX(av)--;
6436         }
6437         else {
6438             SV **p = &svp[fill];
6439             SV *const topsv = *p;
6440             if (topsv != sv) {
6441 #ifdef DEBUGGING
6442                 count = 0;
6443 #endif
6444                 while (--p > svp) {
6445                     if (*p == sv) {
6446                         /* We weren't the last entry.
6447                            An unordered list has this property that you
6448                            can take the last element off the end to fill
6449                            the hole, and it's still an unordered list :-)
6450                         */
6451                         *p = topsv;
6452 #ifdef DEBUGGING
6453                         count++;
6454 #else
6455                         break; /* should only be one */
6456 #endif
6457                     }
6458                 }
6459             }
6460         }
6461         assert(count ==1);
6462         AvFILLp(av) = fill-1;
6463     }
6464     else if (SvIS_FREED(*svp) && PL_phase == PERL_PHASE_DESTRUCT) {
6465         /* freed AV; skip */
6466     }
6467     else {
6468         /* optimisation: only a single backref, stored directly */
6469         if (*svp != sv)
6470             Perl_croak(aTHX_ "panic: del_backref, *svp=%p, sv=%p",
6471                        (void*)*svp, (void*)sv);
6472         *svp = NULL;
6473     }
6474
6475 }
6476
6477 void
6478 Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
6479 {
6480     SV **svp;
6481     SV **last;
6482     bool is_array;
6483
6484     PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
6485
6486     if (!av)
6487         return;
6488
6489     /* after multiple passes through Perl_sv_clean_all() for a thingy
6490      * that has badly leaked, the backref array may have gotten freed,
6491      * since we only protect it against 1 round of cleanup */
6492     if (SvIS_FREED(av)) {
6493         if (PL_in_clean_all) /* All is fair */
6494             return;
6495         Perl_croak(aTHX_
6496                    "panic: magic_killbackrefs (freed backref AV/SV)");
6497     }
6498
6499
6500     is_array = (SvTYPE(av) == SVt_PVAV);
6501     if (is_array) {
6502         assert(!SvIS_FREED(av));
6503         svp = AvARRAY(av);
6504         if (svp)
6505             last = svp + AvFILLp(av);
6506     }
6507     else {
6508         /* optimisation: only a single backref, stored directly */
6509         svp = (SV**)&av;
6510         last = svp;
6511     }
6512
6513     if (svp) {
6514         while (svp <= last) {
6515             if (*svp) {
6516                 SV *const referrer = *svp;
6517                 if (SvWEAKREF(referrer)) {
6518                     /* XXX Should we check that it hasn't changed? */
6519                     assert(SvROK(referrer));
6520                     SvRV_set(referrer, 0);
6521                     SvOK_off(referrer);
6522                     SvWEAKREF_off(referrer);
6523                     SvSETMAGIC(referrer);
6524                 } else if (SvTYPE(referrer) == SVt_PVGV ||
6525                            SvTYPE(referrer) == SVt_PVLV) {
6526                     assert(SvTYPE(sv) == SVt_PVHV); /* stash backref */
6527                     /* You lookin' at me?  */
6528                     assert(GvSTASH(referrer));
6529                     assert(GvSTASH(referrer) == (const HV *)sv);
6530                     GvSTASH(referrer) = 0;
6531                 } else if (SvTYPE(referrer) == SVt_PVCV ||
6532                            SvTYPE(referrer) == SVt_PVFM) {
6533                     if (SvTYPE(sv) == SVt_PVHV) { /* stash backref */
6534                         /* You lookin' at me?  */
6535                         assert(CvSTASH(referrer));
6536                         assert(CvSTASH(referrer) == (const HV *)sv);
6537                         SvANY(MUTABLE_CV(referrer))->xcv_stash = 0;
6538                     }
6539                     else {
6540                         assert(SvTYPE(sv) == SVt_PVGV);
6541                         /* You lookin' at me?  */
6542                         assert(CvGV(referrer));
6543                         assert(CvGV(referrer) == (const GV *)sv);
6544                         anonymise_cv_maybe(MUTABLE_GV(sv),
6545                                                 MUTABLE_CV(referrer));
6546                     }
6547
6548                 } else {
6549                     Perl_croak(aTHX_
6550                                "panic: magic_killbackrefs (flags=%" UVxf ")",
6551                                (UV)SvFLAGS(referrer));
6552                 }
6553
6554                 if (is_array)
6555                     *svp = NULL;
6556             }
6557             svp++;
6558         }
6559     }
6560     if (is_array) {
6561         AvFILLp(av) = -1;
6562         SvREFCNT_dec_NN(av); /* remove extra count added by sv_add_backref() */
6563     }
6564     return;
6565 }
6566
6567 /*
6568 =for apidoc sv_insert
6569
6570 Inserts and/or replaces a string at the specified offset/length within the SV.
6571 Similar to the Perl C<substr()> function, with C<littlelen> bytes starting at
6572 C<little> replacing C<len> bytes of the string in C<bigstr> starting at
6573 C<offset>.  Handles get magic.
6574
6575 =for apidoc sv_insert_flags
6576
6577 Same as C<sv_insert>, but the extra C<flags> are passed to the
6578 C<SvPV_force_flags> that applies to C<bigstr>.
6579
6580 =cut
6581 */
6582
6583 void
6584 Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *little, const STRLEN littlelen, const U32 flags)
6585 {
6586     char *big;
6587     char *mid;
6588     char *midend;
6589     char *bigend;
6590     SSize_t i;          /* better be sizeof(STRLEN) or bad things happen */
6591     STRLEN curlen;
6592
6593     PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
6594
6595     SvPV_force_flags(bigstr, curlen, flags);
6596     (void)SvPOK_only_UTF8(bigstr);
6597
6598     if (little >= SvPVX(bigstr) &&
6599         little < SvPVX(bigstr) + (SvLEN(bigstr) ? SvLEN(bigstr) : SvCUR(bigstr))) {
6600         /* little is a pointer to within bigstr, since we can reallocate bigstr,
6601            or little...little+littlelen might overlap offset...offset+len we make a copy
6602         */
6603         little = savepvn(little, littlelen);
6604         SAVEFREEPV(little);
6605     }
6606
6607     if (offset + len > curlen) {
6608         SvGROW(bigstr, offset+len+1);
6609         Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
6610         SvCUR_set(bigstr, offset+len);
6611     }
6612
6613     SvTAINT(bigstr);
6614     i = littlelen - len;
6615     if (i > 0) {                        /* string might grow */
6616         big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
6617         mid = big + offset + len;
6618         midend = bigend = big + SvCUR(bigstr);
6619         bigend += i;
6620         *bigend = '\0';
6621         while (midend > mid)            /* shove everything down */
6622             *--bigend = *--midend;
6623         Move(little,big+offset,littlelen,char);
6624         SvCUR_set(bigstr, SvCUR(bigstr) + i);
6625         SvSETMAGIC(bigstr);
6626         return;
6627     }
6628     else if (i == 0) {
6629         Move(little,SvPVX(bigstr)+offset,len,char);
6630         SvSETMAGIC(bigstr);
6631         return;
6632     }
6633
6634     big = SvPVX(bigstr);
6635     mid = big + offset;
6636     midend = mid + len;
6637     bigend = big + SvCUR(bigstr);
6638
6639     if (midend > bigend)
6640         Perl_croak(aTHX_ "panic: sv_insert, midend=%p, bigend=%p",
6641                    midend, bigend);
6642
6643     if (mid - big > bigend - midend) {  /* faster to shorten from end */
6644         if (littlelen) {
6645             Move(little, mid, littlelen,char);
6646             mid += littlelen;
6647         }
6648         i = bigend - midend;
6649         if (i > 0) {
6650             Move(midend, mid, i,char);
6651             mid += i;
6652         }
6653         *mid = '\0';
6654         SvCUR_set(bigstr, mid - big);
6655     }
6656     else if ((i = mid - big)) { /* faster from front */
6657         midend -= littlelen;
6658         mid = midend;
6659         Move(big, midend - i, i, char);
6660         sv_chop(bigstr,midend-i);
6661         if (littlelen)
6662             Move(little, mid, littlelen,char);
6663     }
6664     else if (littlelen) {
6665         midend -= littlelen;
6666         sv_chop(bigstr,midend);
6667         Move(little,midend,littlelen,char);
6668     }
6669     else {
6670         sv_chop(bigstr,midend);
6671     }
6672     SvSETMAGIC(bigstr);
6673 }
6674
6675 /*
6676 =for apidoc sv_replace
6677
6678 Make the first argument a copy of the second, then delete the original.
6679 The target SV physically takes over ownership of the body of the source SV
6680 and inherits its flags; however, the target keeps any magic it owns,
6681 and any magic in the source is discarded.
6682 Note that this is a rather specialist SV copying operation; most of the
6683 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
6684
6685 =cut
6686 */
6687
6688 void
6689 Perl_sv_replace(pTHX_ SV *const sv, SV *const nsv)
6690 {
6691     const U32 refcnt = SvREFCNT(sv);
6692
6693     PERL_ARGS_ASSERT_SV_REPLACE;
6694
6695     SV_CHECK_THINKFIRST_COW_DROP(sv);
6696     if (SvREFCNT(nsv) != 1) {
6697         Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
6698                    " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
6699     }
6700     if (SvMAGICAL(sv)) {
6701         if (SvMAGICAL(nsv))
6702             mg_free(nsv);
6703         else
6704             sv_upgrade(nsv, SVt_PVMG);
6705         SvMAGIC_set(nsv, SvMAGIC(sv));
6706         SvFLAGS(nsv) |= SvMAGICAL(sv);
6707         SvMAGICAL_off(sv);
6708         SvMAGIC_set(sv, NULL);
6709     }
6710     SvREFCNT(sv) = 0;
6711     sv_clear(sv);
6712     assert(!SvREFCNT(sv));
6713 #ifdef DEBUG_LEAKING_SCALARS
6714     sv->sv_flags  = nsv->sv_flags;
6715     sv->sv_any    = nsv->sv_any;
6716     sv->sv_refcnt = nsv->sv_refcnt;
6717     sv->sv_u      = nsv->sv_u;
6718 #else
6719     StructCopy(nsv,sv,SV);
6720 #endif
6721     if(SvTYPE(sv) == SVt_IV) {
6722         SET_SVANY_FOR_BODYLESS_IV(sv);
6723     }
6724
6725
6726     SvREFCNT(sv) = refcnt;
6727     SvFLAGS(nsv) |= SVTYPEMASK;         /* Mark as freed */
6728     SvREFCNT(nsv) = 0;
6729     del_SV(nsv);
6730 }
6731
6732 /* We're about to free a GV which has a CV that refers back to us.
6733  * If that CV will outlive us, make it anonymous (i.e. fix up its CvGV
6734  * field) */
6735
6736 STATIC void
6737 S_anonymise_cv_maybe(pTHX_ GV *gv, CV* cv)
6738 {
6739     SV *gvname;
6740     GV *anongv;
6741
6742     PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE;
6743
6744     /* be assertive! */
6745     assert(SvREFCNT(gv) == 0);
6746     assert(isGV(gv) && isGV_with_GP(gv));
6747     assert(GvGP(gv));
6748     assert(!CvANON(cv));
6749     assert(CvGV(cv) == gv);
6750     assert(!CvNAMED(cv));
6751
6752     /* will the CV shortly be freed by gp_free() ? */
6753     if (GvCV(gv) == cv && GvGP(gv)->gp_refcnt < 2 && SvREFCNT(cv) < 2) {
6754         SvANY(cv)->xcv_gv_u.xcv_gv = NULL;
6755         return;
6756     }
6757
6758     /* if not, anonymise: */
6759     gvname = (GvSTASH(gv) && HvNAME(GvSTASH(gv)) && HvENAME(GvSTASH(gv)))
6760                     ? newSVhek(HvENAME_HEK(GvSTASH(gv)))
6761                     : newSVpvn_flags( "__ANON__", 8, 0 );
6762     sv_catpvs(gvname, "::__ANON__");
6763     anongv = gv_fetchsv(gvname, GV_ADDMULTI, SVt_PVCV);
6764     SvREFCNT_dec_NN(gvname);
6765
6766     CvANON_on(cv);
6767     CvCVGV_RC_on(cv);
6768     SvANY(cv)->xcv_gv_u.xcv_gv = MUTABLE_GV(SvREFCNT_inc(anongv));
6769 }
6770
6771
6772 /*
6773 =for apidoc sv_clear
6774
6775 Clear an SV: call any destructors, free up any memory used by the body,
6776 and free the body itself.  The SV's head is I<not> freed, although
6777 its type is set to all 1's so that it won't inadvertently be assumed
6778 to be live during global destruction etc.
6779 This function should only be called when C<REFCNT> is zero.  Most of the time
6780 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
6781 instead.
6782
6783 =cut
6784 */
6785
6786 void
6787 Perl_sv_clear(pTHX_ SV *const orig_sv)
6788 {
6789     SV* iter_sv = NULL;
6790     SV* next_sv = NULL;
6791     SV *sv = orig_sv;
6792     STRLEN hash_index = 0; /* initialise to make Coverity et al happy.
6793                               Not strictly necessary */
6794
6795     PERL_ARGS_ASSERT_SV_CLEAR;
6796
6797     /* within this loop, sv is the SV currently being freed, and
6798      * iter_sv is the most recent AV or whatever that's being iterated
6799      * over to provide more SVs */
6800
6801     while (sv) {
6802         U32 type = SvTYPE(sv);
6803         HV *stash;
6804
6805         assert(SvREFCNT(sv) == 0);
6806         assert(SvTYPE(sv) != (svtype)SVTYPEMASK);
6807
6808         if (type <= SVt_IV) {
6809             /* Historically this check on type was needed so that the code to
6810              * free bodies wasn't reached for these types, because the arena
6811              * slots were re-used for HEs and pointer table entries. The
6812              * metadata table `bodies_by_type` had the information for the sizes
6813              * for HEs and PTEs, hence the code here had to have a special-case
6814              * check to ensure that the "regular" body freeing code wasn't
6815              * reached, and get confused by the "lies" in `bodies_by_type`.
6816              *
6817              * However, it hasn't actually been needed for that reason since
6818              * Aug 2010 (commit 829cd18aa7f45221), because `bodies_by_type` was
6819              * changed to always hold the accurate metadata for the SV types.
6820              * This was possible because PTEs were no longer allocated from the
6821              * "SVt_IV" arena, and the code to allocate HEs from the "SVt_NULL"
6822              * arena is entirely in hv.c, so doesn't access the table.
6823              *
6824              * Some sort of check is still needed to handle SVt_IVs - pure RVs
6825              * need to take one code path which is common with RVs stored in
6826              * SVt_PV (or larger), but pure IVs mustn't take the "PV but not RV"
6827              * path, as SvPVX() doesn't point to valid memory.
6828              *
6829              * Hence this code is still the most efficient way to handle this.
6830              */
6831
6832             if (SvROK(sv))
6833                 goto free_rv;
6834             SvFLAGS(sv) &= SVf_BREAK;
6835             SvFLAGS(sv) |= SVTYPEMASK;
6836             goto free_head;
6837         }
6838
6839         /* objs are always >= MG, but pad names use the SVs_OBJECT flag
6840            for another purpose  */
6841         assert(!SvOBJECT(sv) || type >= SVt_PVMG);
6842
6843         if (type >= SVt_PVMG) {
6844             if (SvOBJECT(sv)) {
6845                 if (!curse(sv, 1)) goto get_next_sv;
6846                 type = SvTYPE(sv); /* destructor may have changed it */
6847             }
6848             /* Free back-references before magic, in case the magic calls
6849              * Perl code that has weak references to sv. */
6850             if (type == SVt_PVHV) {
6851                 Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
6852                 if (SvMAGIC(sv))
6853                     mg_free(sv);
6854             }
6855             else if (SvMAGIC(sv)) {
6856                 /* Free back-references before other types of magic. */
6857                 sv_unmagic(sv, PERL_MAGIC_backref);
6858                 mg_free(sv);
6859             }
6860             SvMAGICAL_off(sv);
6861         }
6862         switch (type) {
6863             /* case SVt_INVLIST: */
6864         case SVt_PVIO:
6865             if (IoIFP(sv) &&
6866                 IoIFP(sv) != PerlIO_stdin() &&
6867                 IoIFP(sv) != PerlIO_stdout() &&
6868                 IoIFP(sv) != PerlIO_stderr() &&
6869                 !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6870             {
6871                 io_close(MUTABLE_IO(sv), NULL, FALSE,
6872                          (IoTYPE(sv) == IoTYPE_WRONLY ||
6873                           IoTYPE(sv) == IoTYPE_RDWR   ||
6874                           IoTYPE(sv) == IoTYPE_APPEND));
6875             }
6876             if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6877                 PerlDir_close(IoDIRP(sv));
6878             IoDIRP(sv) = (DIR*)NULL;
6879             Safefree(IoTOP_NAME(sv));
6880             Safefree(IoFMT_NAME(sv));
6881             Safefree(IoBOTTOM_NAME(sv));
6882             if ((const GV *)sv == PL_statgv)
6883                 PL_statgv = NULL;
6884             goto freescalar;
6885         case SVt_REGEXP:
6886             /* FIXME for plugins */
6887             pregfree2((REGEXP*) sv);
6888             goto freescalar;
6889         case SVt_PVCV:
6890         case SVt_PVFM:
6891             cv_undef(MUTABLE_CV(sv));
6892             /* If we're in a stash, we don't own a reference to it.
6893              * However it does have a back reference to us, which needs to
6894              * be cleared.  */
6895             if ((stash = CvSTASH(sv)))
6896                 sv_del_backref(MUTABLE_SV(stash), sv);
6897             goto freescalar;
6898         case SVt_PVHV:
6899             if (HvTOTALKEYS((HV*)sv) > 0) {
6900                 const HEK *hek;
6901                 /* this statement should match the one at the beginning of
6902                  * hv_undef_flags() */
6903                 if (   PL_phase != PERL_PHASE_DESTRUCT
6904                     && (hek = HvNAME_HEK((HV*)sv)))
6905                 {
6906                     if (PL_stashcache) {
6907                         DEBUG_o(Perl_deb(aTHX_
6908                             "sv_clear clearing PL_stashcache for '%" HEKf
6909                             "'\n",
6910                              HEKfARG(hek)));
6911                         (void)hv_deletehek(PL_stashcache,
6912                                            hek, G_DISCARD);
6913                     }
6914                     hv_name_set((HV*)sv, NULL, 0, 0);
6915                 }
6916
6917                 /* save old iter_sv in unused SvSTASH field */
6918                 assert(!SvOBJECT(sv));
6919                 SvSTASH(sv) = (HV*)iter_sv;
6920                 iter_sv = sv;
6921
6922                 /* save old hash_index in unused SvMAGIC field */
6923                 assert(!SvMAGICAL(sv));
6924                 assert(!SvMAGIC(sv));
6925                 ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index = hash_index;
6926                 hash_index = 0;
6927
6928                 next_sv = Perl_hfree_next_entry(aTHX_ (HV*)sv, &hash_index);
6929                 goto get_next_sv; /* process this new sv */
6930             }
6931             /* free empty hash */
6932             Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6933             assert(!HvARRAY((HV*)sv));
6934             break;
6935         case SVt_PVAV:
6936             {
6937                 AV* av = MUTABLE_AV(sv);
6938                 if (PL_comppad == av) {
6939                     PL_comppad = NULL;
6940                     PL_curpad = NULL;
6941                 }
6942                 if (AvREAL(av) && AvFILLp(av) > -1) {
6943                     next_sv = AvARRAY(av)[AvFILLp(av)--];
6944                     /* save old iter_sv in top-most slot of AV,
6945                      * and pray that it doesn't get wiped in the meantime */
6946                     AvARRAY(av)[AvMAX(av)] = iter_sv;
6947                     iter_sv = sv;
6948                     goto get_next_sv; /* process this new sv */
6949                 }
6950                 Safefree(AvALLOC(av));
6951             }
6952
6953             break;
6954         case SVt_PVLV:
6955             if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
6956                 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
6957                 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
6958                 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
6959             }
6960             else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV**  */
6961                 SvREFCNT_dec(LvTARG(sv));
6962             if (isREGEXP(sv)) {
6963                 /* This PVLV has had a REGEXP assigned to it - the memory
6964                  * normally used to store SvLEN instead points to a regex body.
6965                  * Retrieving the pointer to the regex body from the correct
6966                  * location is normally abstracted by ReANY(), which handles
6967                  * both SVt_PVLV and SVt_REGEXP
6968                  *
6969                  * This code is unwinding the storage specific to SVt_PVLV.
6970                  * We get the body pointer directly from the union, free it,
6971                  * then set SvLEN to whatever value was in the now-freed regex
6972                  * body. The PVX buffer is shared by multiple re's and only
6973                  * freed once, by the re whose SvLEN is non-null.
6974                  *
6975                  * Perl_sv_force_normal_flags() also has code to free this
6976                  * hidden body - it swaps the body into a temporary SV it has
6977                  * just allocated, then frees that SV. That causes execution
6978                  * to reach the SVt_REGEXP: case about 60 lines earlier in this
6979                  * function.
6980                  *
6981                  * See Perl_reg_temp_copy() for the code that sets up this
6982                  * REGEXP body referenced by the PVLV. */
6983                 struct regexp *r = ((XPV*)SvANY(sv))->xpv_len_u.xpvlenu_rx;
6984                 STRLEN len = r->xpv_len;
6985                 pregfree2((REGEXP*) sv);
6986                 del_body_by_type(r, SVt_REGEXP);
6987                 SvLEN_set((sv), len);
6988                 goto freescalar;
6989             }
6990             /* FALLTHROUGH */
6991         case SVt_PVGV:
6992             if (isGV_with_GP(sv)) {
6993                 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
6994                    && HvENAME_get(stash))
6995                     mro_method_changed_in(stash);
6996                 gp_free(MUTABLE_GV(sv));
6997                 if (GvNAME_HEK(sv))
6998                     unshare_hek(GvNAME_HEK(sv));
6999                 /* If we're in a stash, we don't own a reference to it.
7000                  * However it does have a back reference to us, which
7001                  * needs to be cleared.  */
7002                 if ((stash = GvSTASH(sv)))
7003                         sv_del_backref(MUTABLE_SV(stash), sv);
7004             }
7005             /* FIXME. There are probably more unreferenced pointers to SVs
7006              * in the interpreter struct that we should check and tidy in
7007              * a similar fashion to this:  */
7008             /* See also S_sv_unglob, which does the same thing. */
7009             if ((const GV *)sv == PL_last_in_gv)
7010                 PL_last_in_gv = NULL;
7011             else if ((const GV *)sv == PL_statgv)
7012                 PL_statgv = NULL;
7013             else if ((const GV *)sv == PL_stderrgv)
7014                 PL_stderrgv = NULL;
7015             /* FALLTHROUGH */
7016         case SVt_PVMG:
7017         case SVt_PVNV:
7018         case SVt_PVIV:
7019         case SVt_INVLIST:
7020         case SVt_PV:
7021           freescalar:
7022             /* Don't bother with SvOOK_off(sv); as we're only going to
7023              * free it.  */
7024             if (SvOOK(sv)) {
7025                 STRLEN offset;
7026                 SvOOK_offset(sv, offset);
7027                 SvPV_set(sv, SvPVX_mutable(sv) - offset);
7028                 /* Don't even bother with turning off the OOK flag.  */
7029             }
7030             if (SvROK(sv)) {
7031             free_rv:
7032                 {
7033                     SV * const target = SvRV(sv);
7034                     if (SvWEAKREF(sv))
7035                         sv_del_backref(target, sv);
7036                     else
7037                         next_sv = target;
7038                 }
7039             }
7040 #ifdef PERL_ANY_COW
7041             else if (SvPVX_const(sv)
7042                      && !(SvTYPE(sv) == SVt_PVIO
7043                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
7044             {
7045                 if (SvIsCOW(sv)) {
7046 #ifdef DEBUGGING
7047                     if (DEBUG_C_TEST) {
7048                         PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
7049                         sv_dump(sv);
7050                     }
7051 #endif
7052                     if (SvIsCOW_static(sv)) {
7053                         SvLEN_set(sv, 0);
7054                     }
7055                     else if (SvIsCOW_shared_hash(sv)) {
7056                         unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
7057                     }
7058                     else {
7059                         if (CowREFCNT(sv)) {
7060                             sv_buf_to_rw(sv);
7061                             CowREFCNT(sv)--;
7062                             sv_buf_to_ro(sv);
7063                             SvLEN_set(sv, 0);
7064                         }
7065                     }
7066                 }
7067                 if (SvLEN(sv)) {
7068                     Safefree(SvPVX_mutable(sv));
7069                 }
7070             }
7071 #else
7072             else if (SvPVX_const(sv) && SvLEN(sv)
7073                      && !(SvTYPE(sv) == SVt_PVIO
7074                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
7075                 Safefree(SvPVX_mutable(sv));
7076             else if (SvPVX_const(sv) && SvIsCOW(sv)) {
7077                 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
7078             }
7079 #endif
7080             break;
7081         case SVt_NV:
7082             break;
7083         }
7084
7085       free_body:
7086
7087         {
7088             U32 arena_index;
7089             const struct body_details *sv_type_details;
7090
7091             if (type == SVt_PVHV && SvOOK(sv)) {
7092                 arena_index = HVAUX_ARENA_ROOT_IX;
7093                 sv_type_details = &fake_hv_with_aux;
7094             }
7095             else {
7096                 arena_index = type;
7097                 sv_type_details = bodies_by_type + arena_index;
7098             }
7099
7100             SvFLAGS(sv) &= SVf_BREAK;
7101             SvFLAGS(sv) |= SVTYPEMASK;
7102
7103             if (sv_type_details->arena) {
7104                 del_body(((char *)SvANY(sv) + sv_type_details->offset),
7105                          &PL_body_roots[arena_index]);
7106             }
7107             else if (sv_type_details->body_size) {
7108                 safefree(SvANY(sv));
7109             }
7110         }
7111
7112       free_head:
7113         /* caller is responsible for freeing the head of the original sv */
7114         if (sv != orig_sv && !SvREFCNT(sv))
7115             del_SV(sv);
7116
7117         /* grab and free next sv, if any */
7118       get_next_sv:
7119         while (1) {
7120             sv = NULL;
7121             if (next_sv) {
7122                 sv = next_sv;
7123                 next_sv = NULL;
7124             }
7125             else if (!iter_sv) {
7126                 break;
7127             } else if (SvTYPE(iter_sv) == SVt_PVAV) {
7128                 AV *const av = (AV*)iter_sv;
7129                 if (AvFILLp(av) > -1) {
7130                     sv = AvARRAY(av)[AvFILLp(av)--];
7131                 }
7132                 else { /* no more elements of current AV to free */
7133                     sv = iter_sv;
7134                     type = SvTYPE(sv);
7135                     /* restore previous value, squirrelled away */
7136                     iter_sv = AvARRAY(av)[AvMAX(av)];
7137                     Safefree(AvALLOC(av));
7138                     goto free_body;
7139                 }
7140             } else if (SvTYPE(iter_sv) == SVt_PVHV) {
7141                 sv = Perl_hfree_next_entry(aTHX_ (HV*)iter_sv, &hash_index);
7142                 if (!sv && !HvTOTALKEYS((HV *)iter_sv)) {
7143                     /* no more elements of current HV to free */
7144                     sv = iter_sv;
7145                     type = SvTYPE(sv);
7146                     /* Restore previous values of iter_sv and hash_index,
7147                      * squirrelled away */
7148                     assert(!SvOBJECT(sv));
7149                     iter_sv = (SV*)SvSTASH(sv);
7150                     assert(!SvMAGICAL(sv));
7151                     hash_index = ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index;
7152 #ifdef DEBUGGING
7153                     /* perl -DA does not like rubbish in SvMAGIC. */
7154                     SvMAGIC_set(sv, 0);
7155 #endif
7156
7157                     /* free any remaining detritus from the hash struct */
7158                     Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
7159                     assert(!HvARRAY((HV*)sv));
7160                     goto free_body;
7161                 }
7162             }
7163
7164             /* unrolled SvREFCNT_dec and sv_free2 follows: */
7165
7166             if (!sv)
7167                 continue;
7168             if (!SvREFCNT(sv)) {
7169                 sv_free(sv);
7170                 continue;
7171             }
7172             if (--(SvREFCNT(sv)))
7173                 continue;
7174 #ifdef DEBUGGING
7175             if (SvTEMP(sv)) {
7176                 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
7177                          "Attempt to free temp prematurely: SV 0x%" UVxf
7178                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
7179                 continue;
7180             }
7181 #endif
7182             if (SvIMMORTAL(sv)) {
7183                 /* make sure SvREFCNT(sv)==0 happens very seldom */
7184                 SvREFCNT(sv) = SvREFCNT_IMMORTAL;
7185                 continue;
7186             }
7187             break;
7188         } /* while 1 */
7189
7190     } /* while sv */
7191 }
7192
7193 /* This routine curses the sv itself, not the object referenced by sv. So
7194    sv does not have to be ROK. */
7195
7196 static bool
7197 S_curse(pTHX_ SV * const sv, const bool check_refcnt) {
7198     PERL_ARGS_ASSERT_CURSE;
7199     assert(SvOBJECT(sv));
7200
7201     if (PL_defstash &&  /* Still have a symbol table? */
7202         SvDESTROYABLE(sv))
7203     {
7204         dSP;
7205         HV* stash;
7206         do {
7207           stash = SvSTASH(sv);
7208           assert(SvTYPE(stash) == SVt_PVHV);
7209           if (HvNAME(stash)) {
7210             CV* destructor = NULL;
7211             struct mro_meta *meta;
7212
7213             assert (SvOOK(stash));
7214
7215             DEBUG_o( Perl_deb(aTHX_ "Looking for DESTROY method for %s\n",
7216                          HvNAME(stash)) );
7217
7218             /* don't make this an initialization above the assert, since it needs
7219                an AUX structure */
7220             meta = HvMROMETA(stash);
7221             if (meta->destroy_gen && meta->destroy_gen == PL_sub_generation) {
7222                 destructor = meta->destroy;
7223                 DEBUG_o( Perl_deb(aTHX_ "Using cached DESTROY method %p for %s\n",
7224                              (void *)destructor, HvNAME(stash)) );
7225             }
7226             else {
7227                 bool autoload = FALSE;
7228                 GV *gv =
7229                     gv_fetchmeth_pvn(stash, S_destroy, S_destroy_len, -1, 0);
7230                 if (gv)
7231                     destructor = GvCV(gv);
7232                 if (!destructor) {
7233                     gv = gv_autoload_pvn(stash, S_destroy, S_destroy_len,
7234                                          GV_AUTOLOAD_ISMETHOD);
7235                     if (gv)
7236                         destructor = GvCV(gv);
7237                     if (destructor)
7238                         autoload = TRUE;
7239                 }
7240                 /* we don't cache AUTOLOAD for DESTROY, since this code
7241                    would then need to set $__PACKAGE__::AUTOLOAD, or the
7242                    equivalent for XS AUTOLOADs */
7243                 if (!autoload) {
7244                     meta->destroy_gen = PL_sub_generation;
7245                     meta->destroy = destructor;
7246
7247                     DEBUG_o( Perl_deb(aTHX_ "Set cached DESTROY method %p for %s\n",
7248                                       (void *)destructor, HvNAME(stash)) );
7249                 }
7250                 else {
7251                     DEBUG_o( Perl_deb(aTHX_ "Not caching AUTOLOAD for DESTROY method for %s\n",
7252                                       HvNAME(stash)) );
7253                 }
7254             }
7255             assert(!destructor || SvTYPE(destructor) == SVt_PVCV);
7256             if (destructor
7257                 /* A constant subroutine can have no side effects, so
7258                    don't bother calling it.  */
7259                 && !CvCONST(destructor)
7260                 /* Don't bother calling an empty destructor or one that
7261                    returns immediately. */
7262                 && (CvISXSUB(destructor)
7263                 || (CvSTART(destructor)
7264                     && (CvSTART(destructor)->op_next->op_type
7265                                         != OP_LEAVESUB)
7266                     && (CvSTART(destructor)->op_next->op_type
7267                                         != OP_PUSHMARK
7268                         || CvSTART(destructor)->op_next->op_next->op_type
7269                                         != OP_RETURN
7270                        )
7271                    ))
7272                )
7273             {
7274                 SV* const tmpref = newRV(sv);
7275                 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
7276                 ENTER;
7277                 PUSHSTACKi(PERLSI_DESTROY);
7278                 EXTEND(SP, 2);
7279                 PUSHMARK(SP);
7280                 PUSHs(tmpref);
7281                 PUTBACK;
7282                 call_sv(MUTABLE_SV(destructor),
7283                             G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
7284                 POPSTACK;
7285                 SPAGAIN;
7286                 LEAVE;
7287                 if(SvREFCNT(tmpref) < 2) {
7288                     /* tmpref is not kept alive! */
7289                     SvREFCNT(sv)--;
7290                     SvRV_set(tmpref, NULL);
7291                     SvROK_off(tmpref);
7292                 }
7293                 SvREFCNT_dec_NN(tmpref);
7294             }
7295           }
7296         } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
7297
7298
7299         if (check_refcnt && SvREFCNT(sv)) {
7300             if (PL_in_clean_objs)
7301                 Perl_croak(aTHX_
7302                   "DESTROY created new reference to dead object '%" HEKf "'",
7303                    HEKfARG(HvNAME_HEK(stash)));
7304             /* DESTROY gave object new lease on life */
7305             return FALSE;
7306         }
7307     }
7308
7309     if (SvOBJECT(sv)) {
7310         HV * const stash = SvSTASH(sv);
7311         /* Curse before freeing the stash, as freeing the stash could cause
7312            a recursive call into S_curse. */
7313         SvOBJECT_off(sv);       /* Curse the object. */
7314         SvSTASH_set(sv,0);      /* SvREFCNT_dec may try to read this */
7315         SvREFCNT_dec(stash); /* possibly of changed persuasion */
7316     }
7317     return TRUE;
7318 }
7319
7320 /*
7321 =for apidoc sv_newref
7322
7323 Increment an SV's reference count.  Use the C<SvREFCNT_inc()> wrapper
7324 instead.
7325
7326 =cut
7327 */
7328
7329 SV *
7330 Perl_sv_newref(pTHX_ SV *const sv)
7331 {
7332     PERL_UNUSED_CONTEXT;
7333     if (sv)
7334         (SvREFCNT(sv))++;
7335     return sv;
7336 }
7337
7338 /*
7339 =for apidoc sv_free
7340
7341 Decrement an SV's reference count, and if it drops to zero, call
7342 C<sv_clear> to invoke destructors and free up any memory used by
7343 the body; finally, deallocating the SV's head itself.
7344 Normally called via a wrapper macro C<SvREFCNT_dec>.
7345
7346 =cut
7347 */
7348
7349 void
7350 Perl_sv_free(pTHX_ SV *const sv)
7351 {
7352     SvREFCNT_dec(sv);
7353 }
7354
7355
7356 /* Private helper function for SvREFCNT_dec().
7357  * Called with rc set to original SvREFCNT(sv), where rc == 0 or 1 */
7358
7359 void
7360 Perl_sv_free2(pTHX_ SV *const sv, const U32 rc)
7361 {
7362
7363     PERL_ARGS_ASSERT_SV_FREE2;
7364
7365     if (LIKELY( rc == 1 )) {
7366         /* normal case */
7367         SvREFCNT(sv) = 0;
7368
7369 #ifdef DEBUGGING
7370         if (SvTEMP(sv)) {
7371             Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
7372                              "Attempt to free temp prematurely: SV 0x%" UVxf
7373                              pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
7374             return;
7375         }
7376 #endif
7377         if (SvIMMORTAL(sv)) {
7378             /* make sure SvREFCNT(sv)==0 happens very seldom */
7379             SvREFCNT(sv) = SvREFCNT_IMMORTAL;
7380             return;
7381         }
7382         sv_clear(sv);
7383         if (! SvREFCNT(sv)) /* may have have been resurrected */
7384             del_SV(sv);
7385         return;
7386     }
7387
7388     /* handle exceptional cases */
7389
7390     assert(rc == 0);
7391
7392     if (SvFLAGS(sv) & SVf_BREAK)
7393         /* this SV's refcnt has been artificially decremented to
7394          * trigger cleanup */
7395         return;
7396     if (PL_in_clean_all) /* All is fair */
7397         return;
7398     if (SvIMMORTAL(sv)) {
7399         /* make sure SvREFCNT(sv)==0 happens very seldom */
7400         SvREFCNT(sv) = SvREFCNT_IMMORTAL;
7401         return;
7402     }
7403     if (ckWARN_d(WARN_INTERNAL)) {
7404 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
7405         Perl_dump_sv_child(aTHX_ sv);
7406 #else
7407     #ifdef DEBUG_LEAKING_SCALARS
7408         sv_dump(sv);
7409     #endif
7410 #ifdef DEBUG_LEAKING_SCALARS_ABORT
7411         if (PL_warnhook == PERL_WARNHOOK_FATAL
7412             || ckDEAD(packWARN(WARN_INTERNAL))) {
7413             /* Don't let Perl_warner cause us to escape our fate:  */
7414             abort();
7415         }
7416 #endif
7417         /* This may not return:  */
7418         Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
7419                     "Attempt to free unreferenced scalar: SV 0x%" UVxf
7420                     pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
7421 #endif
7422     }
7423 #ifdef DEBUG_LEAKING_SCALARS_ABORT
7424     abort();
7425 #endif
7426
7427 }
7428
7429
7430 /*
7431 =for apidoc sv_len
7432
7433 Returns the length of the string in the SV.  Handles magic and type
7434 coercion and sets the UTF8 flag appropriately.  See also C<L</SvCUR>>, which
7435 gives raw access to the C<xpv_cur> slot.
7436
7437 =cut
7438 */
7439
7440 STRLEN
7441 Perl_sv_len(pTHX_ SV *const sv)
7442 {
7443     STRLEN len;
7444
7445     if (!sv)
7446         return 0;
7447
7448     (void)SvPV_const(sv, len);
7449     return len;
7450 }
7451
7452 /*
7453 =for apidoc sv_len_utf8
7454
7455 Returns the number of characters in the string in an SV, counting wide
7456 UTF-8 bytes as a single character.  Handles magic and type coercion.
7457
7458 =cut
7459 */
7460
7461 /*
7462  * The length is cached in PERL_MAGIC_utf8, in the mg_len field.  Also the
7463  * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
7464  * (Note that the mg_len is not the length of the mg_ptr field.
7465  * This allows the cache to store the character length of the string without
7466  * needing to malloc() extra storage to attach to the mg_ptr.)
7467  *
7468  */
7469
7470 STRLEN
7471 Perl_sv_len_utf8(pTHX_ SV *const sv)
7472 {
7473     if (!sv)
7474         return 0;
7475
7476     SvGETMAGIC(sv);
7477     return sv_len_utf8_nomg(sv);
7478 }
7479
7480 STRLEN
7481 Perl_sv_len_utf8_nomg(pTHX_ SV * const sv)
7482 {
7483     STRLEN len;
7484     const U8 *s = (U8*)SvPV_nomg_const(sv, len);
7485
7486     PERL_ARGS_ASSERT_SV_LEN_UTF8_NOMG;
7487
7488     if (PL_utf8cache && SvUTF8(sv)) {
7489             STRLEN ulen;
7490             MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
7491
7492             if (mg && (mg->mg_len != -1 || mg->mg_ptr)) {
7493                 if (mg->mg_len != -1)
7494                     ulen = mg->mg_len;
7495                 else {
7496                     /* We can use the offset cache for a headstart.
7497                        The longer value is stored in the first pair.  */
7498                     STRLEN *cache = (STRLEN *) mg->mg_ptr;
7499
7500                     ulen = cache[0] + Perl_utf8_length(aTHX_ s + cache[1],
7501                                                        s + len);
7502                 }
7503
7504                 if (PL_utf8cache < 0) {
7505                     const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
7506                     assert_uft8_cache_coherent("sv_len_utf8", ulen, real, sv);
7507                 }
7508             }
7509             else {
7510                 ulen = Perl_utf8_length(aTHX_ s, s + len);
7511                 utf8_mg_len_cache_update(sv, &mg, ulen);
7512             }
7513             return ulen;
7514     }
7515     return SvUTF8(sv) ? Perl_utf8_length(aTHX_ s, s + len) : len;
7516 }
7517
7518 /* Walk forwards to find the byte corresponding to the passed in UTF-8
7519    offset.  */
7520 static STRLEN
7521 S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
7522                       STRLEN *const uoffset_p, bool *const at_end,
7523                       bool* canonical_position)
7524 {
7525     const U8 *s = start;
7526     STRLEN uoffset = *uoffset_p;
7527
7528     PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
7529
7530     while (s < send && uoffset) {
7531         --uoffset;
7532         s += UTF8SKIP(s);
7533     }
7534     if (s == send) {
7535         *at_end = TRUE;
7536     }
7537     else if (s > send) {
7538         *at_end = TRUE;
7539         /* This is the existing behaviour. Possibly it should be a croak, as
7540            it's actually a bounds error  */
7541         s = send;
7542     }
7543     /* If the unicode position is beyond the end, we return the end but
7544        shouldn't cache that position */
7545     *canonical_position = (uoffset == 0);
7546     *uoffset_p -= uoffset;
7547     return s - start;
7548 }
7549
7550 /* Given the length of the string in both bytes and UTF-8 characters, decide
7551    whether to walk forwards or backwards to find the byte corresponding to
7552    the passed in UTF-8 offset.  */
7553 static STRLEN
7554 S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
7555                     STRLEN uoffset, const STRLEN uend)
7556 {
7557     STRLEN backw = uend - uoffset;
7558
7559     PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
7560
7561     if (uoffset < 2 * backw) {
7562         /* The assumption is that going forwards is twice the speed of going
7563            forward (that's where the 2 * backw comes from).
7564            (The real figure of course depends on the UTF-8 data.)  */
7565         const U8 *s = start;
7566
7567         while (s < send && uoffset--)
7568             s += UTF8SKIP(s);
7569         assert (s <= send);
7570         if (s > send)
7571             s = send;
7572         return s - start;
7573     }
7574
7575     while (backw--) {
7576         send--;
7577         while (UTF8_IS_CONTINUATION(*send))
7578             send--;
7579     }
7580     return send - start;
7581 }
7582
7583 /* For the string representation of the given scalar, find the byte
7584    corresponding to the passed in UTF-8 offset.  uoffset0 and boffset0
7585    give another position in the string, *before* the sought offset, which
7586    (which is always true, as 0, 0 is a valid pair of positions), which should
7587    help reduce the amount of linear searching.
7588    If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
7589    will be used to reduce the amount of linear searching. The cache will be
7590    created if necessary, and the found value offered to it for update.  */
7591 static STRLEN
7592 S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
7593                     const U8 *const send, STRLEN uoffset,
7594                     STRLEN uoffset0, STRLEN boffset0)
7595 {
7596     STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy.  */
7597     bool found = FALSE;
7598     bool at_end = FALSE;
7599     bool canonical_position = FALSE;
7600
7601     PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
7602
7603     assert (uoffset >= uoffset0);
7604
7605     if (!uoffset)
7606         return 0;
7607
7608     if (!SvREADONLY(sv) && !SvGMAGICAL(sv) && SvPOK(sv)
7609         && PL_utf8cache
7610         && (*mgp || (SvTYPE(sv) >= SVt_PVMG &&
7611                      (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) {
7612         if ((*mgp)->mg_ptr) {
7613             STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
7614             if (cache[0] == uoffset) {
7615                 /* An exact match. */
7616                 return cache[1];
7617             }
7618             if (cache[2] == uoffset) {
7619                 /* An exact match. */
7620                 return cache[3];
7621             }
7622
7623             if (cache[0] < uoffset) {
7624                 /* The cache already knows part of the way.   */
7625                 if (cache[0] > uoffset0) {
7626                     /* The cache knows more than the passed in pair  */
7627                     uoffset0 = cache[0];
7628                     boffset0 = cache[1];
7629                 }
7630                 if ((*mgp)->mg_len != -1) {
7631                     /* And we know the end too.  */
7632                     boffset = boffset0
7633                         + sv_pos_u2b_midway(start + boffset0, send,
7634                                               uoffset - uoffset0,
7635                                               (*mgp)->mg_len - uoffset0);
7636                 } else {
7637                     uoffset -= uoffset0;
7638                     boffset = boffset0
7639                         + sv_pos_u2b_forwards(start + boffset0,
7640                                               send, &uoffset, &at_end,
7641                                               &canonical_position);
7642                     uoffset += uoffset0;
7643                 }
7644             }
7645             else if (cache[2] < uoffset) {
7646                 /* We're between the two cache entries.  */
7647                 if (cache[2] > uoffset0) {
7648                     /* and the cache knows more than the passed in pair  */
7649                     uoffset0 = cache[2];
7650                     boffset0 = cache[3];
7651                 }
7652
7653                 boffset = boffset0
7654                     + sv_pos_u2b_midway(start + boffset0,
7655                                           start + cache[1],
7656                                           uoffset - uoffset0,
7657                                           cache[0] - uoffset0);
7658             } else {
7659                 boffset = boffset0
7660                     + sv_pos_u2b_midway(start + boffset0,
7661                                           start + cache[3],
7662                                           uoffset - uoffset0,
7663                                           cache[2] - uoffset0);
7664             }
7665             found = TRUE;
7666         }
7667         else if ((*mgp)->mg_len != -1) {
7668             /* If we can take advantage of a passed in offset, do so.  */
7669             /* In fact, offset0 is either 0, or less than offset, so don't
7670                need to worry about the other possibility.  */
7671             boffset = boffset0
7672                 + sv_pos_u2b_midway(start + boffset0, send,
7673                                       uoffset - uoffset0,
7674                                       (*mgp)->mg_len - uoffset0);
7675             found = TRUE;
7676         }
7677     }
7678
7679     if (!found || PL_utf8cache < 0) {
7680         STRLEN real_boffset;
7681         uoffset -= uoffset0;
7682         real_boffset = boffset0 + sv_pos_u2b_forwards(start + boffset0,
7683                                                       send, &uoffset, &at_end,
7684                                                       &canonical_position);
7685         uoffset += uoffset0;
7686
7687         if (found && PL_utf8cache < 0)
7688             assert_uft8_cache_coherent("sv_pos_u2b_cache", boffset,
7689                                        real_boffset, sv);
7690         boffset = real_boffset;
7691     }
7692
7693     if (PL_utf8cache && canonical_position && !SvGMAGICAL(sv) && SvPOK(sv)) {
7694         if (at_end)
7695             utf8_mg_len_cache_update(sv, mgp, uoffset);
7696         else
7697             utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
7698     }
7699     return boffset;
7700 }
7701
7702
7703 /*
7704 =for apidoc sv_pos_u2b_flags
7705
7706 Converts the offset from a count of UTF-8 chars from
7707 the start of the string, to a count of the equivalent number of bytes; if
7708 C<lenp> is non-zero, it does the same to C<lenp>, but this time starting from
7709 C<offset>, rather than from the start
7710 of the string.  Handles type coercion.
7711 C<flags> is passed to C<SvPV_flags>, and usually should be
7712 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7713
7714 =cut
7715 */
7716
7717 /*
7718  * sv_pos_u2b_flags() uses, like sv_pos_b2u(), the mg_ptr of the potential
7719  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7720  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7721  *
7722  */
7723
7724 STRLEN
7725 Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp,
7726                       U32 flags)
7727 {
7728     const U8 *start;
7729     STRLEN len;
7730     STRLEN boffset;
7731
7732     PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS;
7733
7734     start = (U8*)SvPV_flags(sv, len, flags);
7735     if (len) {
7736         const U8 * const send = start + len;
7737         MAGIC *mg = NULL;
7738         boffset = sv_pos_u2b_cached(sv, &mg, start, send, uoffset, 0, 0);
7739
7740         if (lenp
7741             && *lenp /* don't bother doing work for 0, as its bytes equivalent
7742                         is 0, and *lenp is already set to that.  */) {
7743             /* Convert the relative offset to absolute.  */
7744             const STRLEN uoffset2 = uoffset + *lenp;
7745             const STRLEN boffset2
7746                 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
7747                                       uoffset, boffset) - boffset;
7748
7749             *lenp = boffset2;
7750         }
7751     } else {
7752         if (lenp)
7753             *lenp = 0;
7754         boffset = 0;
7755     }
7756
7757     return boffset;
7758 }
7759
7760 /*
7761 =for apidoc sv_pos_u2b
7762
7763 Converts the value pointed to by C<offsetp> from a count of UTF-8 chars from
7764 the start of the string, to a count of the equivalent number of bytes; if
7765 C<lenp> is non-zero, it does the same to C<lenp>, but this time starting from
7766 the offset, rather than from the start of the string.  Handles magic and
7767 type coercion.
7768
7769 Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
7770 than 2Gb.
7771
7772 =cut
7773 */
7774
7775 /*
7776  * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
7777  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7778  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7779  *
7780  */
7781
7782 /* This function is subject to size and sign problems */
7783
7784 void
7785 Perl_sv_pos_u2b(pTHX_ SV *const sv, I32 *const offsetp, I32 *const lenp)
7786 {
7787     PERL_ARGS_ASSERT_SV_POS_U2B;
7788
7789     if (lenp) {
7790         STRLEN ulen = (STRLEN)*lenp;
7791         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, &ulen,
7792                                          SV_GMAGIC|SV_CONST_RETURN);
7793         *lenp = (I32)ulen;
7794     } else {
7795         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, NULL,
7796                                          SV_GMAGIC|SV_CONST_RETURN);
7797     }
7798 }
7799
7800 static void
7801 S_utf8_mg_len_cache_update(pTHX_ SV *const sv, MAGIC **const mgp,
7802                            const STRLEN ulen)
7803 {
7804     PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE;
7805     if (SvREADONLY(sv) || SvGMAGICAL(sv) || !SvPOK(sv))
7806         return;
7807
7808     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7809                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7810         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, &PL_vtbl_utf8, 0, 0);
7811     }
7812     assert(*mgp);
7813
7814     (*mgp)->mg_len = ulen;
7815 }
7816
7817 /* Create and update the UTF8 magic offset cache, with the proffered utf8/
7818    byte length pairing. The (byte) length of the total SV is passed in too,
7819    as blen, because for some (more esoteric) SVs, the call to SvPV_const()
7820    may not have updated SvCUR, so we can't rely on reading it directly.
7821
7822    The proffered utf8/byte length pairing isn't used if the cache already has
7823    two pairs, and swapping either for the proffered pair would increase the
7824    RMS of the intervals between known byte offsets.
7825
7826    The cache itself consists of 4 STRLEN values
7827    0: larger UTF-8 offset
7828    1: corresponding byte offset
7829    2: smaller UTF-8 offset
7830    3: corresponding byte offset
7831
7832    Unused cache pairs have the value 0, 0.
7833    Keeping the cache "backwards" means that the invariant of
7834    cache[0] >= cache[2] is maintained even with empty slots, which means that
7835    the code that uses it doesn't need to worry if only 1 entry has actually
7836    been set to non-zero.  It also makes the "position beyond the end of the
7837    cache" logic much simpler, as the first slot is always the one to start
7838    from.
7839 */
7840 static void
7841 S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
7842                            const STRLEN utf8, const STRLEN blen)
7843 {
7844     STRLEN *cache;
7845
7846     PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
7847
7848     if (SvREADONLY(sv))
7849         return;
7850
7851     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7852                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7853         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
7854                            0);
7855         (*mgp)->mg_len = -1;
7856     }
7857     assert(*mgp);
7858
7859     if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
7860         Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
7861         (*mgp)->mg_ptr = (char *) cache;
7862     }
7863     assert(cache);
7864
7865     if (PL_utf8cache < 0 && SvPOKp(sv)) {
7866         /* SvPOKp() because, if sv is a reference, then SvPVX() is actually
7867            a pointer.  Note that we no longer cache utf8 offsets on refer-
7868            ences, but this check is still a good idea, for robustness.  */
7869         const U8 *start = (const U8 *) SvPVX_const(sv);
7870         const STRLEN realutf8 = utf8_length(start, start + byte);
7871
7872         assert_uft8_cache_coherent("utf8_mg_pos_cache_update", utf8, realutf8,
7873                                    sv);
7874     }
7875
7876     /* Cache is held with the later position first, to simplify the code
7877        that deals with unbounded ends.  */
7878
7879     ASSERT_UTF8_CACHE(cache);
7880     if (cache[1] == 0) {
7881         /* Cache is totally empty  */
7882         cache[0] = utf8;
7883         cache[1] = byte;
7884     } else if (cache[3] == 0) {
7885         if (byte > cache[1]) {
7886             /* New one is larger, so goes first.  */
7887             cache[2] = cache[0];
7888             cache[3] = cache[1];
7889             cache[0] = utf8;
7890             cache[1] = byte;
7891         } else {
7892             cache[2] = utf8;
7893             cache[3] = byte;
7894         }
7895     } else {
7896 /* float casts necessary? XXX */
7897 #define THREEWAY_SQUARE(a,b,c,d) \
7898             ((float)((d) - (c))) * ((float)((d) - (c))) \
7899             + ((float)((c) - (b))) * ((float)((c) - (b))) \
7900                + ((float)((b) - (a))) * ((float)((b) - (a)))
7901
7902         /* Cache has 2 slots in use, and we know three potential pairs.
7903            Keep the two that give the lowest RMS distance. Do the
7904            calculation in bytes simply because we always know the byte
7905            length.  squareroot has the same ordering as the positive value,
7906            so don't bother with the actual square root.  */
7907         if (byte > cache[1]) {
7908             /* New position is after the existing pair of pairs.  */
7909             const float keep_earlier
7910                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
7911             const float keep_later
7912                 = THREEWAY_SQUARE(0, cache[1], byte, blen);
7913
7914             if (keep_later < keep_earlier) {
7915                 cache[2] = cache[0];
7916                 cache[3] = cache[1];
7917             }
7918             cache[0] = utf8;
7919             cache[1] = byte;
7920         }
7921         else {
7922             const float keep_later = THREEWAY_SQUARE(0, byte, cache[1], blen);
7923             float b, c, keep_earlier;
7924             if (byte > cache[3]) {
7925                 /* New position is between the existing pair of pairs.  */
7926                 b = (float)cache[3];
7927                 c = (float)byte;
7928             } else {
7929                 /* New position is before the existing pair of pairs.  */
7930                 b = (float)byte;
7931                 c = (float)cache[3];
7932             }
7933             keep_earlier = THREEWAY_SQUARE(0, b, c, blen);
7934             if (byte > cache[3]) {
7935                 if (keep_later < keep_earlier) {
7936                     cache[2] = utf8;
7937                     cache[3] = byte;
7938                 }
7939                 else {
7940                     cache[0] = utf8;
7941                     cache[1] = byte;
7942                 }
7943             }
7944             else {
7945                 if (! (keep_later < keep_earlier)) {
7946                     cache[0] = cache[2];
7947                     cache[1] = cache[3];
7948                 }
7949                 cache[2] = utf8;
7950                 cache[3] = byte;
7951             }
7952         }
7953     }
7954     ASSERT_UTF8_CACHE(cache);
7955 }
7956
7957 /* We already know all of the way, now we may be able to walk back.  The same
7958    assumption is made as in S_sv_pos_u2b_midway(), namely that walking
7959    backward is half the speed of walking forward. */
7960 static STRLEN
7961 S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
7962                     const U8 *end, STRLEN endu)
7963 {
7964     const STRLEN forw = target - s;
7965     STRLEN backw = end - target;
7966
7967     PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
7968
7969     if (forw < 2 * backw) {
7970         return utf8_length(s, target);
7971     }
7972
7973     while (end > target) {
7974         end--;
7975         while (UTF8_IS_CONTINUATION(*end)) {
7976             end--;
7977         }
7978         endu--;
7979     }
7980     return endu;
7981 }
7982
7983 /*
7984 =for apidoc sv_pos_b2u_flags
7985
7986 Converts C<offset> from a count of bytes from the start of the string, to
7987 a count of the equivalent number of UTF-8 chars.  Handles type coercion.
7988 C<flags> is passed to C<SvPV_flags>, and usually should be
7989 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7990
7991 =cut
7992 */
7993
7994 /*
7995  * sv_pos_b2u_flags() uses, like sv_pos_u2b_flags(), the mg_ptr of the
7996  * potential PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8
7997  * and byte offsets.
7998  *
7999  */
8000 STRLEN
8001 Perl_sv_pos_b2u_flags(pTHX_ SV *const sv, STRLEN const offset, U32 flags)
8002 {
8003     const U8* s;
8004     STRLEN len = 0; /* Actually always set, but let's keep gcc happy.  */
8005     STRLEN blen;
8006     MAGIC* mg = NULL;
8007     const U8* send;
8008     bool found = FALSE;
8009
8010     PERL_ARGS_ASSERT_SV_POS_B2U_FLAGS;
8011
8012     s = (const U8*)SvPV_flags(sv, blen, flags);
8013
8014     if (blen < offset)
8015         Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset, blen=%" UVuf
8016                    ", byte=%" UVuf, (UV)blen, (UV)offset);
8017
8018     send = s + offset;
8019
8020     if (!SvREADONLY(sv)
8021         && PL_utf8cache
8022         && SvTYPE(sv) >= SVt_PVMG
8023         && (mg = mg_find(sv, PERL_MAGIC_utf8)))
8024     {
8025         if (mg->mg_ptr) {
8026             STRLEN * const cache = (STRLEN *) mg->mg_ptr;
8027             if (cache[1] == offset) {
8028                 /* An exact match. */
8029                 return cache[0];
8030             }
8031             if (cache[3] == offset) {
8032                 /* An exact match. */
8033                 return cache[2];
8034             }
8035
8036             if (cache[1] < offset) {
8037                 /* We already know part of the way. */
8038                 if (mg->mg_len != -1) {
8039                     /* Actually, we know the end too.  */
8040                     len = cache[0]
8041                         + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
8042                                               s + blen, mg->mg_len - cache[0]);
8043                 } else {
8044                     len = cache[0] + utf8_length(s + cache[1], send);
8045                 }
8046             }
8047             else if (cache[3] < offset) {
8048                 /* We're between the two cached pairs, so we do the calculation
8049                    offset by the byte/utf-8 positions for the earlier pair,
8050                    then add the utf-8 characters from the string start to
8051                    there.  */
8052                 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
8053                                           s + cache[1], cache[0] - cache[2])
8054                     + cache[2];
8055
8056             }
8057             else { /* cache[3] > offset */
8058                 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
8059                                           cache[2]);
8060
8061             }
8062             ASSERT_UTF8_CACHE(cache);
8063             found = TRUE;
8064         } else if (mg->mg_len != -1) {
8065             len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
8066             found = TRUE;
8067         }
8068     }
8069     if (!found || PL_utf8cache < 0) {
8070         const STRLEN real_len = utf8_length(s, send);
8071
8072         if (found && PL_utf8cache < 0)
8073             assert_uft8_cache_coherent("sv_pos_b2u", len, real_len, sv);
8074         len = real_len;
8075     }
8076
8077     if (PL_utf8cache) {
8078         if (blen == offset)
8079             utf8_mg_len_cache_update(sv, &mg, len);
8080         else
8081             utf8_mg_pos_cache_update(sv, &mg, offset, len, blen);
8082     }
8083
8084     return len;
8085 }
8086
8087 /*
8088 =for apidoc sv_pos_b2u
8089
8090 Converts the value pointed to by C<offsetp> from a count of bytes from the
8091 start of the string, to a count of the equivalent number of UTF-8 chars.
8092 Handles magic and type coercion.
8093
8094 Use C<sv_pos_b2u_flags> in preference, which correctly handles strings
8095 longer than 2Gb.
8096
8097 =cut
8098 */
8099
8100 /*
8101  * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
8102  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
8103  * byte offsets.
8104  *
8105  */
8106 void
8107 Perl_sv_pos_b2u(pTHX_ SV *const sv, I32 *const offsetp)
8108 {
8109     PERL_ARGS_ASSERT_SV_POS_B2U;
8110
8111     if (!sv)
8112         return;
8113
8114     *offsetp = (I32)sv_pos_b2u_flags(sv, (STRLEN)*offsetp,
8115                                      SV_GMAGIC|SV_CONST_RETURN);
8116 }
8117
8118 static void
8119 S_assert_uft8_cache_coherent(pTHX_ const char *const func, STRLEN from_cache,
8120                              STRLEN real, SV *const sv)
8121 {
8122     PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT;
8123
8124     /* As this is debugging only code, save space by keeping this test here,
8125        rather than inlining it in all the callers.  */
8126     if (from_cache == real)
8127         return;
8128
8129     /* Need to turn the assertions off otherwise we may recurse infinitely
8130        while printing error messages.  */
8131     SAVEI8(PL_utf8cache);
8132     PL_utf8cache = 0;
8133     Perl_croak(aTHX_ "panic: %s cache %" UVuf " real %" UVuf " for %" SVf,
8134                func, (UV) from_cache, (UV) real, SVfARG(sv));
8135 }
8136
8137 /*
8138 =for apidoc sv_eq
8139
8140 Returns a boolean indicating whether the strings in the two SVs are
8141 identical.  Is UTF-8 and S<C<'use bytes'>> aware, handles get magic, and will
8142 coerce its args to strings if necessary.
8143
8144 This function does not handle operator overloading. For a version that does,
8145 see instead C<sv_streq>.
8146
8147 =for apidoc sv_eq_flags
8148
8149 Returns a boolean indicating whether the strings in the two SVs are
8150 identical.  Is UTF-8 and S<C<'use bytes'>> aware and coerces its args to strings
8151 if necessary.  If the flags has the C<SV_GMAGIC> bit set, it handles get-magic, too.
8152
8153 This function does not handle operator overloading. For a version that does,
8154 see instead C<sv_streq_flags>.
8155
8156 =cut
8157 */
8158
8159 I32
8160 Perl_sv_eq_flags(pTHX_ SV *sv1, SV *sv2, const U32 flags)
8161 {
8162     const char *pv1;
8163     STRLEN cur1;
8164     const char *pv2;
8165     STRLEN cur2;
8166
8167     if (!sv1) {
8168         pv1 = "";
8169         cur1 = 0;
8170     }
8171     else {
8172         /* if pv1 and pv2 are the same, second SvPV_const call may
8173          * invalidate pv1 (if we are handling magic), so we may need to
8174          * make a copy */
8175         if (sv1 == sv2 && flags & SV_GMAGIC
8176          && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
8177             pv1 = SvPV_const(sv1, cur1);
8178             sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
8179         }
8180         pv1 = SvPV_flags_const(sv1, cur1, flags);
8181     }
8182
8183     if (!sv2){
8184         pv2 = "";
8185         cur2 = 0;
8186     }
8187     else
8188         pv2 = SvPV_flags_const(sv2, cur2, flags);
8189
8190     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
8191         /* Differing utf8ness.  */
8192         if (SvUTF8(sv1)) {
8193                   /* sv1 is the UTF-8 one  */
8194                   return bytes_cmp_utf8((const U8*)pv2, cur2,
8195                                         (const U8*)pv1, cur1) == 0;
8196         }
8197         else {
8198                   /* sv2 is the UTF-8 one  */
8199                   return bytes_cmp_utf8((const U8*)pv1, cur1,
8200                                         (const U8*)pv2, cur2) == 0;
8201         }
8202     }
8203
8204     if (cur1 == cur2)
8205         return (pv1 == pv2) || memEQ(pv1, pv2, cur1);
8206     else
8207         return 0;
8208 }
8209
8210 /*
8211 =for apidoc sv_streq_flags
8212
8213 Returns a boolean indicating whether the strings in the two SVs are
8214 identical. If the flags argument has the C<SV_GMAGIC> bit set, it handles
8215 get-magic too. Will coerce its args to strings if necessary. Treats
8216 C<NULL> as undef. Correctly handles the UTF8 flag.
8217
8218 If flags does not have the C<SV_SKIP_OVERLOAD> bit set, an attempt to use
8219 C<eq> overloading will be made. If such overloading does not exist or the
8220 flag is set, then regular string comparison will be used instead.
8221
8222 =for apidoc sv_streq
8223
8224 A convenient shortcut for calling C<sv_streq_flags> with the C<SV_GMAGIC>
8225 flag. This function basically behaves like the Perl code C<$sv1 eq $sv2>.
8226
8227 =cut
8228 */
8229
8230 bool
8231 Perl_sv_streq_flags(pTHX_ SV *sv1, SV *sv2, const U32 flags)
8232 {
8233     PERL_ARGS_ASSERT_SV_STREQ_FLAGS;
8234
8235     if(flags & SV_GMAGIC) {
8236         if(sv1)
8237             SvGETMAGIC(sv1);
8238         if(sv2)
8239             SvGETMAGIC(sv2);
8240     }
8241
8242     /* Treat NULL as undef */
8243     if(!sv1)
8244         sv1 = &PL_sv_undef;
8245     if(!sv2)
8246         sv2 = &PL_sv_undef;
8247
8248     if(!(flags & SV_SKIP_OVERLOAD) &&
8249             (SvAMAGIC(sv1) || SvAMAGIC(sv2))) {
8250         SV *ret = amagic_call(sv1, sv2, seq_amg, 0);
8251         if(ret)
8252             return SvTRUE(ret);
8253     }
8254
8255     return sv_eq_flags(sv1, sv2, 0);
8256 }
8257
8258 /*
8259 =for apidoc sv_numeq_flags
8260
8261 Returns a boolean indicating whether the numbers in the two SVs are
8262 identical. If the flags argument has the C<SV_GMAGIC> bit set, it handles
8263 get-magic too. Will coerce its args to numbers if necessary. Treats
8264 C<NULL> as undef.
8265
8266 If flags does not have the C<SV_SKIP_OVERLOAD> bit set, an attempt to use
8267 C<==> overloading will be made. If such overloading does not exist or the
8268 flag is set, then regular numerical comparison will be used instead.
8269
8270 =for apidoc sv_numeq
8271
8272 A convenient shortcut for calling C<sv_numeq_flags> with the C<SV_GMAGIC>
8273 flag. This function basically behaves like the Perl code C<$sv1 == $sv2>.
8274
8275 =cut
8276 */
8277
8278 bool
8279 Perl_sv_numeq_flags(pTHX_ SV *sv1, SV *sv2, const U32 flags)
8280 {
8281     PERL_ARGS_ASSERT_SV_NUMEQ_FLAGS;
8282
8283     if(flags & SV_GMAGIC) {
8284         if(sv1)
8285             SvGETMAGIC(sv1);
8286         if(sv2)
8287             SvGETMAGIC(sv2);
8288     }
8289
8290     /* Treat NULL as undef */
8291     if(!sv1)
8292         sv1 = &PL_sv_undef;
8293     if(!sv2)
8294         sv2 = &PL_sv_undef;
8295
8296     if(!(flags & SV_SKIP_OVERLOAD) &&
8297             (SvAMAGIC(sv1) || SvAMAGIC(sv2))) {
8298         SV *ret = amagic_call(sv1, sv2, eq_amg, 0);
8299         if(ret)
8300             return SvTRUE(ret);
8301     }
8302
8303     return do_ncmp(sv1, sv2) == 0;
8304 }
8305
8306 /*
8307 =for apidoc sv_cmp
8308
8309 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
8310 string in C<sv1> is less than, equal to, or greater than the string in
8311 C<sv2>.  Is UTF-8 and S<C<'use bytes'>> aware, handles get magic, and will
8312 coerce its args to strings if necessary.  See also C<L</sv_cmp_locale>>.
8313
8314 =for apidoc sv_cmp_flags
8315
8316 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
8317 string in C<sv1> is less than, equal to, or greater than the string in
8318 C<sv2>.  Is UTF-8 and S<C<'use bytes'>> aware and will coerce its args to strings
8319 if necessary.  If the flags has the C<SV_GMAGIC> bit set, it handles get magic.  See
8320 also C<L</sv_cmp_locale_flags>>.
8321
8322 =cut
8323 */
8324
8325 I32
8326 Perl_sv_cmp(pTHX_ SV *const sv1, SV *const sv2)
8327 {
8328     return sv_cmp_flags(sv1, sv2, SV_GMAGIC);
8329 }
8330
8331 I32
8332 Perl_sv_cmp_flags(pTHX_ SV *const sv1, SV *const sv2,
8333                   const U32 flags)
8334 {
8335     STRLEN cur1, cur2;
8336     const char *pv1, *pv2;
8337     I32  cmp;
8338     SV *svrecode = NULL;
8339
8340     if (!sv1) {
8341         pv1 = "";
8342         cur1 = 0;
8343     }
8344     else
8345         pv1 = SvPV_flags_const(sv1, cur1, flags);
8346
8347     if (!sv2) {
8348         pv2 = "";
8349         cur2 = 0;
8350     }
8351     else
8352         pv2 = SvPV_flags_const(sv2, cur2, flags);
8353
8354     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
8355         /* Differing utf8ness.  */
8356         if (SvUTF8(sv1)) {
8357                 const int retval = -bytes_cmp_utf8((const U8*)pv2, cur2,
8358                                                    (const U8*)pv1, cur1);
8359                 return retval ? retval < 0 ? -1 : +1 : 0;
8360         }
8361         else {
8362                 const int retval = bytes_cmp_utf8((const U8*)pv1, cur1,
8363                                                   (const U8*)pv2, cur2);
8364                 return retval ? retval < 0 ? -1 : +1 : 0;
8365         }
8366     }
8367
8368     /* Here, if both are non-NULL, then they have the same UTF8ness. */
8369
8370     if (!cur1) {
8371         cmp = cur2 ? -1 : 0;
8372     } else if (!cur2) {
8373         cmp = 1;
8374     } else {
8375         STRLEN shortest_len = cur1 < cur2 ? cur1 : cur2;
8376
8377 #ifdef EBCDIC
8378         if (! DO_UTF8(sv1)) {
8379 #endif
8380             const I32 retval = memcmp((const void*)pv1,
8381                                       (const void*)pv2,
8382                                       shortest_len);
8383             if (retval) {
8384                 cmp = retval < 0 ? -1 : 1;
8385             } else if (cur1 == cur2) {
8386                 cmp = 0;
8387             } else {
8388                 cmp = cur1 < cur2 ? -1 : 1;
8389             }
8390 #ifdef EBCDIC
8391         }
8392         else {  /* Both are to be treated as UTF-EBCDIC */
8393
8394             /* EBCDIC UTF-8 is complicated by the fact that it is based on I8
8395              * which remaps code points 0-255.  We therefore generally have to
8396              * unmap back to the original values to get an accurate comparison.
8397              * But we don't have to do that for UTF-8 invariants, as by
8398              * definition, they aren't remapped, nor do we have to do it for
8399              * above-latin1 code points, as they also aren't remapped.  (This
8400              * code also works on ASCII platforms, but the memcmp() above is
8401              * much faster). */
8402
8403             const char *e = pv1 + shortest_len;
8404
8405             /* Find the first bytes that differ between the two strings */
8406             while (pv1 < e && *pv1 == *pv2) {
8407                 pv1++;
8408                 pv2++;
8409             }
8410
8411
8412             if (pv1 == e) { /* Are the same all the way to the end */
8413                 if (cur1 == cur2) {
8414                     cmp = 0;
8415                 } else {
8416                     cmp = cur1 < cur2 ? -1 : 1;
8417                 }
8418             }
8419             else   /* Here *pv1 and *pv2 are not equal, but all bytes earlier
8420                     * in the strings were.  The current bytes may or may not be
8421                     * at the beginning of a character.  But neither or both are
8422                     * (or else earlier bytes would have been different).  And
8423                     * if we are in the middle of a character, the two
8424                     * characters are comprised of the same number of bytes
8425                     * (because in this case the start bytes are the same, and
8426                     * the start bytes encode the character's length). */
8427                  if (UTF8_IS_INVARIANT(*pv1))
8428             {
8429                 /* If both are invariants; can just compare directly */
8430                 if (UTF8_IS_INVARIANT(*pv2)) {
8431                     cmp = ((U8) *pv1 < (U8) *pv2) ? -1 : 1;
8432                 }
8433                 else   /* Since *pv1 is invariant, it is the whole character,
8434                           which means it is at the beginning of a character.
8435                           That means pv2 is also at the beginning of a
8436                           character (see earlier comment).  Since it isn't
8437                           invariant, it must be a start byte.  If it starts a
8438                           character whose code point is above 255, that
8439                           character is greater than any single-byte char, which
8440                           *pv1 is */
8441                       if (UTF8_IS_ABOVE_LATIN1_START(*pv2))
8442                 {
8443                     cmp = -1;
8444                 }
8445                 else {
8446                     /* Here, pv2 points to a character composed of 2 bytes
8447                      * whose code point is < 256.  Get its code point and
8448                      * compare with *pv1 */
8449                     cmp = ((U8) *pv1 < EIGHT_BIT_UTF8_TO_NATIVE(*pv2, *(pv2 + 1)))
8450                            ?  -1
8451                            : 1;
8452                 }
8453             }
8454             else   /* The code point starting at pv1 isn't a single byte */
8455                  if (UTF8_IS_INVARIANT(*pv2))
8456             {
8457                 /* But here, the code point starting at *pv2 is a single byte,
8458                  * and so *pv1 must begin a character, hence is a start byte.
8459                  * If that character is above 255, it is larger than any
8460                  * single-byte char, which *pv2 is */
8461                 if (UTF8_IS_ABOVE_LATIN1_START(*pv1)) {
8462                     cmp = 1;
8463                 }
8464                 else {
8465                     /* Here, pv1 points to a character composed of 2 bytes
8466                      * whose code point is < 256.  Get its code point and
8467                      * compare with the single byte character *pv2 */
8468                     cmp = (EIGHT_BIT_UTF8_TO_NATIVE(*pv1, *(pv1 + 1)) < (U8) *pv2)
8469                           ?  -1
8470                           : 1;
8471                 }
8472             }
8473             else   /* Here, we've ruled out either *pv1 and *pv2 being
8474                       invariant.  That means both are part of variants, but not
8475                       necessarily at the start of a character */
8476                  if (   UTF8_IS_ABOVE_LATIN1_START(*pv1)
8477                      || UTF8_IS_ABOVE_LATIN1_START(*pv2))
8478             {
8479                 /* Here, at least one is the start of a character, which means
8480                  * the other is also a start byte.  And the code point of at
8481                  * least one of the characters is above 255.  It is a
8482                  * characteristic of UTF-EBCDIC that all start bytes for
8483                  * above-latin1 code points are well behaved as far as code
8484                  * point comparisons go, and all are larger than all other
8485                  * start bytes, so the comparison with those is also well
8486                  * behaved */
8487                 cmp = ((U8) *pv1 < (U8) *pv2) ? -1 : 1;
8488             }
8489             else {
8490                 /* Here both *pv1 and *pv2 are part of variant characters.
8491                  * They could be both continuations, or both start characters.
8492                  * (One or both could even be an illegal start character (for
8493                  * an overlong) which for the purposes of sorting we treat as
8494                  * legal. */
8495                 if (UTF8_IS_CONTINUATION(*pv1)) {
8496
8497                     /* If they are continuations for code points above 255,
8498                      * then comparing the current byte is sufficient, as there
8499                      * is no remapping of these and so the comparison is
8500                      * well-behaved.   We determine if they are such
8501                      * continuations by looking at the preceding byte.  It
8502                      * could be a start byte, from which we can tell if it is
8503                      * for an above 255 code point.  Or it could be a
8504                      * continuation, which means the character occupies at
8505                      * least 3 bytes, so must be above 255.  */
8506                     if (   UTF8_IS_CONTINUATION(*(pv2 - 1))
8507                         || UTF8_IS_ABOVE_LATIN1_START(*(pv2 -1)))
8508                     {
8509                         cmp = ((U8) *pv1 < (U8) *pv2) ? -1 : 1;
8510                         goto cmp_done;
8511                     }
8512
8513                     /* Here, the continuations are for code points below 256;
8514                      * back up one to get to the start byte */
8515                     pv1--;
8516                     pv2--;
8517                 }
8518
8519                 /* We need to get the actual native code point of each of these
8520                  * variants in order to compare them */
8521                 cmp =  (  EIGHT_BIT_UTF8_TO_NATIVE(*pv1, *(pv1 + 1))
8522                         < EIGHT_BIT_UTF8_TO_NATIVE(*pv2, *(pv2 + 1)))
8523                         ? -1
8524                         : 1;
8525             }
8526         }
8527       cmp_done: ;
8528 #endif
8529     }
8530
8531     SvREFCNT_dec(svrecode);
8532
8533     return cmp;
8534 }
8535
8536 /*
8537 =for apidoc sv_cmp_locale
8538
8539 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
8540 S<C<'use bytes'>> aware, handles get magic, and will coerce its args to strings
8541 if necessary.  See also C<L</sv_cmp>>.
8542
8543 =for apidoc sv_cmp_locale_flags
8544
8545 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
8546 S<C<'use bytes'>> aware and will coerce its args to strings if necessary.  If
8547 the flags contain C<SV_GMAGIC>, it handles get magic.  See also
8548 C<L</sv_cmp_flags>>.
8549
8550 =cut
8551 */
8552
8553 I32
8554 Perl_sv_cmp_locale(pTHX_ SV *const sv1, SV *const sv2)
8555 {
8556     return sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC);
8557 }
8558
8559 I32
8560 Perl_sv_cmp_locale_flags(pTHX_ SV *const sv1, SV *const sv2,
8561                          const U32 flags)
8562 {
8563 #ifdef USE_LOCALE_COLLATE
8564
8565     char *pv1, *pv2;
8566     STRLEN len1, len2;
8567     I32 retval;
8568
8569     if (PL_collation_standard)
8570         goto raw_compare;
8571
8572     len1 = len2 = 0;
8573
8574     /* Revert to using raw compare if both operands exist, but either one
8575      * doesn't transform properly for collation */
8576     if (sv1 && sv2) {
8577         pv1 = sv_collxfrm_flags(sv1, &len1, flags);
8578         if (! pv1) {
8579             goto raw_compare;
8580         }
8581         pv2 = sv_collxfrm_flags(sv2, &len2, flags);
8582         if (! pv2) {
8583             goto raw_compare;
8584         }
8585     }
8586     else {
8587         pv1 = sv1 ? sv_collxfrm_flags(sv1, &len1, flags) : (char *) NULL;
8588         pv2 = sv2 ? sv_collxfrm_flags(sv2, &len2, flags) : (char *) NULL;
8589     }
8590
8591     if (!pv1 || !len1) {
8592         if (pv2 && len2)
8593             return -1;
8594         else
8595             goto raw_compare;
8596     }
8597     else {
8598         if (!pv2 || !len2)
8599             return 1;
8600     }
8601
8602     retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
8603
8604     if (retval)
8605         return retval < 0 ? -1 : 1;
8606
8607     /*
8608      * When the result of collation is equality, that doesn't mean
8609      * that there are no differences -- some locales exclude some
8610      * characters from consideration.  So to avoid false equalities,
8611      * we use the raw string as a tiebreaker.
8612      */
8613
8614   raw_compare:
8615     /* FALLTHROUGH */
8616
8617 #else
8618     PERL_UNUSED_ARG(flags);
8619 #endif /* USE_LOCALE_COLLATE */
8620
8621     return sv_cmp(sv1, sv2);
8622 }
8623
8624
8625 #ifdef USE_LOCALE_COLLATE
8626
8627 /*
8628 =for apidoc sv_collxfrm
8629
8630 This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag.  See
8631 C<L</sv_collxfrm_flags>>.
8632
8633 =for apidoc sv_collxfrm_flags
8634
8635 Add Collate Transform magic to an SV if it doesn't already have it.  If the
8636 flags contain C<SV_GMAGIC>, it handles get-magic.
8637
8638 Any scalar variable may carry C<PERL_MAGIC_collxfrm> magic that contains the
8639 scalar data of the variable, but transformed to such a format that a normal
8640 memory comparison can be used to compare the data according to the locale
8641 settings.
8642
8643 =cut
8644 */
8645
8646 char *
8647 Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp, const I32 flags)
8648 {
8649     MAGIC *mg;
8650
8651     PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS;
8652
8653     mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
8654
8655     /* If we don't have collation magic on 'sv', or the locale has changed
8656      * since the last time we calculated it, get it and save it now */
8657     if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
8658         const char *s;
8659         char *xf;
8660         STRLEN len, xlen;
8661
8662         /* Free the old space */
8663         if (mg)
8664             Safefree(mg->mg_ptr);
8665
8666         s = SvPV_flags_const(sv, len, flags);
8667         if ((xf = _mem_collxfrm(s, len, &xlen, cBOOL(SvUTF8(sv))))) {
8668             if (! mg) {
8669                 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
8670                                  0, 0);
8671                 assert(mg);
8672             }
8673             mg->mg_ptr = xf;
8674             mg->mg_len = xlen;
8675         }
8676         else {
8677             if (mg) {
8678                 mg->mg_ptr = NULL;
8679                 mg->mg_len = -1;
8680             }
8681         }
8682     }
8683
8684     if (mg && mg->mg_ptr) {
8685         *nxp = mg->mg_len;
8686         return mg->mg_ptr + sizeof(PL_collation_ix);
8687     }
8688     else {
8689         *nxp = 0;
8690         return NULL;
8691     }
8692 }
8693
8694 #endif /* USE_LOCALE_COLLATE */
8695
8696 static char *
8697 S_sv_gets_append_to_utf8(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8698 {
8699     SV * const tsv = newSV(0);
8700     ENTER;
8701     SAVEFREESV(tsv);
8702     sv_gets(tsv, fp, 0);
8703     sv_utf8_upgrade_nomg(tsv);
8704     SvCUR_set(sv,append);
8705     sv_catsv(sv,tsv);
8706     LEAVE;
8707     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8708 }
8709
8710 static char *
8711 S_sv_gets_read_record(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8712 {
8713     SSize_t bytesread;
8714     const STRLEN recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
8715       /* Grab the size of the record we're getting */
8716     char *buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
8717
8718     /* Go yank in */
8719 #ifdef __VMS
8720     int fd;
8721     Stat_t st;
8722
8723     /* With a true, record-oriented file on VMS, we need to use read directly
8724      * to ensure that we respect RMS record boundaries.  The user is responsible
8725      * for providing a PL_rs value that corresponds to the FAB$W_MRS (maximum
8726      * record size) field.  N.B. This is likely to produce invalid results on
8727      * varying-width character data when a record ends mid-character.
8728      */
8729     fd = PerlIO_fileno(fp);
8730     if (fd != -1
8731         && PerlLIO_fstat(fd, &st) == 0
8732         && (st.st_fab_rfm == FAB$C_VAR
8733             || st.st_fab_rfm == FAB$C_VFC
8734             || st.st_fab_rfm == FAB$C_FIX)) {
8735
8736         bytesread = PerlLIO_read(fd, buffer, recsize);
8737     }
8738     else /* in-memory file from PerlIO::Scalar
8739           * or not a record-oriented file
8740           */
8741 #endif
8742     {
8743         bytesread = PerlIO_read(fp, buffer, recsize);
8744
8745         /* At this point, the logic in sv_get() means that sv will
8746            be treated as utf-8 if the handle is utf8.
8747         */
8748         if (PerlIO_isutf8(fp) && bytesread > 0) {
8749             char *bend = buffer + bytesread;
8750             char *bufp = buffer;
8751             size_t charcount = 0;
8752             bool charstart = TRUE;
8753             STRLEN skip = 0;
8754
8755             while (charcount < recsize) {
8756                 /* count accumulated characters */
8757                 while (bufp < bend) {
8758                     if (charstart) {
8759                         skip = UTF8SKIP(bufp);
8760                     }
8761                     if (bufp + skip > bend) {
8762                         /* partial at the end */
8763                         charstart = FALSE;
8764                         break;
8765                     }
8766                     else {
8767                         ++charcount;
8768                         bufp += skip;
8769                         charstart = TRUE;
8770                     }
8771                 }
8772
8773                 if (charcount < recsize) {
8774                     STRLEN readsize;
8775                     STRLEN bufp_offset = bufp - buffer;
8776                     SSize_t morebytesread;
8777
8778                     /* originally I read enough to fill any incomplete
8779                        character and the first byte of the next
8780                        character if needed, but if there's many
8781                        multi-byte encoded characters we're going to be
8782                        making a read call for every character beyond
8783                        the original read size.
8784
8785                        So instead, read the rest of the character if
8786                        any, and enough bytes to match at least the
8787                        start bytes for each character we're going to
8788                        read.
8789                     */
8790                     if (charstart)
8791                         readsize = recsize - charcount;
8792                     else
8793                         readsize = skip - (bend - bufp) + recsize - charcount - 1;
8794                     buffer = SvGROW(sv, append + bytesread + readsize + 1) + append;
8795                     bend = buffer + bytesread;
8796                     morebytesread = PerlIO_read(fp, bend, readsize);
8797                     if (morebytesread <= 0) {
8798                         /* we're done, if we still have incomplete
8799                            characters the check code in sv_gets() will
8800                            warn about them.
8801
8802                            I'd originally considered doing
8803                            PerlIO_ungetc() on all but the lead
8804                            character of the incomplete character, but
8805                            read() doesn't do that, so I don't.
8806                         */
8807                         break;
8808                     }
8809
8810                     /* prepare to scan some more */
8811                     bytesread += morebytesread;
8812                     bend = buffer + bytesread;
8813                     bufp = buffer + bufp_offset;
8814                 }
8815             }
8816         }
8817     }
8818
8819     if (bytesread < 0)
8820         bytesread = 0;
8821     SvCUR_set(sv, bytesread + append);
8822     buffer[bytesread] = '\0';
8823     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8824 }
8825
8826 /*
8827 =for apidoc sv_gets
8828
8829 Get a line from the filehandle and store it into the SV, optionally
8830 appending to the currently-stored string.  If C<append> is not 0, the
8831 line is appended to the SV instead of overwriting it.  C<append> should
8832 be set to the byte offset that the appended string should start at
8833 in the SV (typically, C<SvCUR(sv)> is a suitable choice).
8834
8835 =cut
8836 */
8837
8838 char *
8839 Perl_sv_gets(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8840 {
8841     const char *rsptr;
8842     STRLEN rslen;
8843     STDCHAR rslast;
8844     STDCHAR *bp;
8845     SSize_t cnt;
8846     int i = 0;
8847     int rspara = 0;
8848
8849     PERL_ARGS_ASSERT_SV_GETS;
8850
8851     if (SvTHINKFIRST(sv))
8852         sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
8853     /* XXX. If you make this PVIV, then copy on write can copy scalars read
8854        from <>.
8855        However, perlbench says it's slower, because the existing swipe code
8856        is faster than copy on write.
8857        Swings and roundabouts.  */
8858     SvUPGRADE(sv, SVt_PV);
8859
8860     if (append) {
8861         /* line is going to be appended to the existing buffer in the sv */
8862         if (PerlIO_isutf8(fp)) {
8863             if (!SvUTF8(sv)) {
8864                 sv_utf8_upgrade_nomg(sv);
8865                 sv_pos_u2b(sv,&append,0);
8866             }
8867         } else if (SvUTF8(sv)) {
8868             return S_sv_gets_append_to_utf8(aTHX_ sv, fp, append);
8869         }
8870     }
8871
8872     SvPOK_only(sv);
8873     if (!append) {
8874         /* not appending - "clear" the string by setting SvCUR to 0,
8875          * the pv is still avaiable. */
8876         SvCUR_set(sv,0);
8877     }
8878     if (PerlIO_isutf8(fp))
8879         SvUTF8_on(sv);
8880
8881     if (IN_PERL_COMPILETIME) {
8882         /* we always read code in line mode */
8883         rsptr = "\n";
8884         rslen = 1;
8885     }
8886     else if (RsSNARF(PL_rs)) {
8887         /* If it is a regular disk file use size from stat() as estimate
8888            of amount we are going to read -- may result in mallocing
8889            more memory than we really need if the layers below reduce
8890            the size we read (e.g. CRLF or a gzip layer).
8891          */
8892         Stat_t st;
8893         int fd = PerlIO_fileno(fp);
8894         if (fd >= 0 && (PerlLIO_fstat(fd, &st) == 0) && S_ISREG(st.st_mode))  {
8895             const Off_t offset = PerlIO_tell(fp);
8896             if (offset != (Off_t) -1 && st.st_size + append > offset) {
8897 #ifdef PERL_COPY_ON_WRITE
8898                 /* Add an extra byte for the sake of copy-on-write's
8899                  * buffer reference count. */
8900                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 2));
8901 #else
8902                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
8903 #endif
8904             }
8905         }
8906         rsptr = NULL;
8907         rslen = 0;
8908     }
8909     else if (RsRECORD(PL_rs)) {
8910         return S_sv_gets_read_record(aTHX_ sv, fp, append);
8911     }
8912     else if (RsPARA(PL_rs)) {
8913         rsptr = "\n\n";
8914         rslen = 2;
8915         rspara = 1;
8916     }
8917     else {
8918         /* Get $/ i.e. PL_rs into same encoding as stream wants */
8919         if (PerlIO_isutf8(fp)) {
8920             rsptr = SvPVutf8(PL_rs, rslen);
8921         }
8922         else {
8923             if (SvUTF8(PL_rs)) {
8924                 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
8925                     Perl_croak(aTHX_ "Wide character in $/");
8926                 }
8927             }
8928             /* extract the raw pointer to the record separator */
8929             rsptr = SvPV_const(PL_rs, rslen);
8930         }
8931     }
8932
8933     /* rslast is the last character in the record separator
8934      * note we don't use rslast except when rslen is true, so the
8935      * null assign is a placeholder. */
8936     rslast = rslen ? rsptr[rslen - 1] : '\0';
8937
8938     if (rspara) {        /* have to do this both before and after */
8939                          /* to make sure file boundaries work right */
8940         while (1) {
8941             if (PerlIO_eof(fp))
8942                 return 0;
8943             i = PerlIO_getc(fp);
8944             if (i != '\n') {
8945                 if (i == -1)
8946                     return 0;
8947                 PerlIO_ungetc(fp,i);
8948                 break;
8949             }
8950         }
8951     }
8952
8953     /* See if we know enough about I/O mechanism to cheat it ! */
8954
8955     /* This used to be #ifdef test - it is made run-time test for ease
8956        of abstracting out stdio interface. One call should be cheap
8957        enough here - and may even be a macro allowing compile
8958        time optimization.
8959      */
8960
8961     if (PerlIO_fast_gets(fp)) {
8962     /*
8963      * We can do buffer based IO operations on this filehandle.
8964      *
8965      * This means we can bypass a lot of subcalls and process
8966      * the buffer directly, it also means we know the upper bound
8967      * on the amount of data we might read of the current buffer
8968      * into our sv. Knowing this allows us to preallocate the pv
8969      * to be able to hold that maximum, which allows us to simplify
8970      * a lot of logic. */
8971
8972     /*
8973      * We're going to steal some values from the stdio struct
8974      * and put EVERYTHING in the innermost loop into registers.
8975      */
8976     STDCHAR *ptr;       /* pointer into fp's read-ahead buffer */
8977     STRLEN bpx;         /* length of the data in the target sv
8978                            used to fix pointers after a SvGROW */
8979     I32 shortbuffered;  /* If the pv buffer is shorter than the amount
8980                            of data left in the read-ahead buffer.
8981                            If 0 then the pv buffer can hold the full
8982                            amount left, otherwise this is the amount it
8983                            can hold. */
8984
8985     /* Here is some breathtakingly efficient cheating */
8986
8987     /* When you read the following logic resist the urge to think
8988      * of record separators that are 1 byte long. They are an
8989      * uninteresting special (simple) case.
8990      *
8991      * Instead think of record separators which are at least 2 bytes
8992      * long, and keep in mind that we need to deal with such
8993      * separators when they cross a read-ahead buffer boundary.
8994      *
8995      * Also consider that we need to gracefully deal with separators
8996      * that may be longer than a single read ahead buffer.
8997      *
8998      * Lastly do not forget we want to copy the delimiter as well. We
8999      * are copying all data in the file _up_to_and_including_ the separator
9000      * itself.
9001      *
9002      * Now that you have all that in mind here is what is happening below:
9003      *
9004      * 1. When we first enter the loop we do some memory book keeping to see
9005      * how much free space there is in the target SV. (This sub assumes that
9006      * it is operating on the same SV most of the time via $_ and that it is
9007      * going to be able to reuse the same pv buffer each call.) If there is
9008      * "enough" room then we set "shortbuffered" to how much space there is
9009      * and start reading forward.
9010      *
9011      * 2. When we scan forward we copy from the read-ahead buffer to the target
9012      * SV's pv buffer. While we go we watch for the end of the read-ahead buffer,
9013      * and the end of the of pv, as well as for the "rslast", which is the last
9014      * char of the separator.
9015      *
9016      * 3. When scanning forward if we see rslast then we jump backwards in *pv*
9017      * (which has a "complete" record up to the point we saw rslast) and check
9018      * it to see if it matches the separator. If it does we are done. If it doesn't
9019      * we continue on with the scan/copy.
9020      *
9021      * 4. If we run out of read-ahead buffer (cnt goes to 0) then we have to get
9022      * the IO system to read the next buffer. We do this by doing a getc(), which
9023      * returns a single char read (or EOF), and prefills the buffer, and also
9024      * allows us to find out how full the buffer is.  We use this information to
9025      * SvGROW() the sv to the size remaining in the buffer, after which we copy
9026      * the returned single char into the target sv, and then go back into scan
9027      * forward mode.
9028      *
9029      * 5. If we run out of write-buffer then we SvGROW() it by the size of the
9030      * remaining space in the read-buffer.
9031      *
9032      * Note that this code despite its twisty-turny nature is pretty darn slick.
9033      * It manages single byte separators, multi-byte cross boundary separators,
9034      * and cross-read-buffer separators cleanly and efficiently at the cost
9035      * of potentially greatly overallocating the target SV.
9036      *
9037      * Yves
9038      */
9039
9040
9041     /* get the number of bytes remaining in the read-ahead buffer
9042      * on first call on a given fp this will return 0.*/
9043     cnt = PerlIO_get_cnt(fp);
9044
9045     /* make sure we have the room */
9046     if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
9047         /* Not room for all of it
9048            if we are looking for a separator and room for some
9049          */
9050         if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
9051             /* just process what we have room for */
9052             shortbuffered = cnt - SvLEN(sv) + append + 1;
9053             cnt -= shortbuffered;
9054         }
9055         else {
9056             /* ensure that the target sv has enough room to hold
9057              * the rest of the read-ahead buffer */
9058             shortbuffered = 0;
9059             /* remember that cnt can be negative */
9060             SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
9061         }
9062     }
9063     else {
9064         /* we have enough room to hold the full buffer, lets scream */
9065         shortbuffered = 0;
9066     }
9067
9068     /* extract the pointer to sv's string buffer, offset by append as necessary */
9069     bp = (STDCHAR*)SvPVX_const(sv) + append;  /* move these two too to registers */
9070     /* extract the point to the read-ahead buffer */
9071     ptr = (STDCHAR*)PerlIO_get_ptr(fp);
9072
9073     /* some trace debug output */
9074     DEBUG_P(PerlIO_printf(Perl_debug_log,
9075         "Screamer: entering, ptr=%" UVuf ", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
9076     DEBUG_P(PerlIO_printf(Perl_debug_log,
9077         "Screamer: entering: PerlIO * thinks ptr=%" UVuf ", cnt=%" IVdf ", base=%"
9078          UVuf "\n",
9079                PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
9080                PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
9081
9082     for (;;) {
9083       screamer:
9084         /* if there is stuff left in the read-ahead buffer */
9085         if (cnt > 0) {
9086             /* if there is a separator */
9087             if (rslen) {
9088                 /* find next rslast */
9089                 STDCHAR *p;
9090
9091                 /* shortcut common case of blank line */
9092                 cnt--;
9093                 if ((*bp++ = *ptr++) == rslast)
9094                     goto thats_all_folks;
9095
9096                 p = (STDCHAR *)memchr(ptr, rslast, cnt);
9097                 if (p) {
9098                     SSize_t got = p - ptr + 1;
9099                     Copy(ptr, bp, got, STDCHAR);
9100                     ptr += got;
9101                     bp  += got;
9102                     cnt -= got;
9103                     goto thats_all_folks;
9104                 }
9105                 Copy(ptr, bp, cnt, STDCHAR);
9106                 ptr += cnt;
9107                 bp  += cnt;
9108                 cnt = 0;
9109             }
9110             else {
9111                 /* no separator, slurp the full buffer */
9112                 Copy(ptr, bp, cnt, char);            /* this     |  eat */
9113                 bp += cnt;                           /* screams  |  dust */
9114                 ptr += cnt;                          /* louder   |  sed :-) */
9115                 cnt = 0;
9116                 assert (!shortbuffered);
9117                 goto cannot_be_shortbuffered;
9118             }
9119         }
9120
9121         if (shortbuffered) {            /* oh well, must extend */
9122             /* we didnt have enough room to fit the line into the target buffer
9123              * so we must extend the target buffer and keep going */
9124             cnt = shortbuffered;
9125             shortbuffered = 0;
9126             bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
9127             SvCUR_set(sv, bpx);
9128             /* extned the target sv's buffer so it can hold the full read-ahead buffer */
9129             SvGROW(sv, SvLEN(sv) + append + cnt + 2);
9130             bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
9131             continue;
9132         }
9133
9134     cannot_be_shortbuffered:
9135         /* we need to refill the read-ahead buffer if possible */
9136
9137         DEBUG_P(PerlIO_printf(Perl_debug_log,
9138                              "Screamer: going to getc, ptr=%" UVuf ", cnt=%" IVdf "\n",
9139                               PTR2UV(ptr),(IV)cnt));
9140         PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
9141
9142         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
9143            "Screamer: pre: FILE * thinks ptr=%" UVuf ", cnt=%" IVdf ", base=%" UVuf "\n",
9144             PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
9145             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
9146
9147         /*
9148             call PerlIO_getc() to let it prefill the lookahead buffer
9149
9150             This used to call 'filbuf' in stdio form, but as that behaves like
9151             getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
9152             another abstraction.
9153
9154             Note we have to deal with the char in 'i' if we are not at EOF
9155         */
9156         bpx = bp - (STDCHAR*)SvPVX_const(sv);
9157         /* signals might be called here, possibly modifying sv */
9158         i   = PerlIO_getc(fp);          /* get more characters */
9159         bp = (STDCHAR*)SvPVX_const(sv) + bpx;
9160
9161         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
9162            "Screamer: post: FILE * thinks ptr=%" UVuf ", cnt=%" IVdf ", base=%" UVuf "\n",
9163             PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
9164             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
9165
9166         /* find out how much is left in the read-ahead buffer, and rextract its pointer */
9167         cnt = PerlIO_get_cnt(fp);
9168         ptr = (STDCHAR*)PerlIO_get_ptr(fp);     /* reregisterize cnt and ptr */
9169         DEBUG_P(PerlIO_printf(Perl_debug_log,
9170             "Screamer: after getc, ptr=%" UVuf ", cnt=%" IVdf "\n",
9171             PTR2UV(ptr),(IV)cnt));
9172
9173         if (i == EOF)                   /* all done for ever? */
9174             goto thats_really_all_folks;
9175
9176         /* make sure we have enough space in the target sv */
9177         bpx = bp - (STDCHAR*)SvPVX_const(sv);   /* box up before relocation */
9178         SvCUR_set(sv, bpx);
9179         SvGROW(sv, bpx + cnt + 2);
9180         bp = (STDCHAR*)SvPVX_const(sv) + bpx;   /* unbox after relocation */
9181
9182         /* copy of the char we got from getc() */
9183         *bp++ = (STDCHAR)i;             /* store character from PerlIO_getc */
9184
9185         /* make sure we deal with the i being the last character of a separator */
9186         if (rslen && (STDCHAR)i == rslast)  /* all done for now? */
9187             goto thats_all_folks;
9188     }
9189
9190   thats_all_folks:
9191     /* check if we have actually found the separator - only really applies
9192      * when rslen > 1 */
9193     if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
9194           memNE((char*)bp - rslen, rsptr, rslen))
9195         goto screamer;                          /* go back to the fray */
9196   thats_really_all_folks:
9197     if (shortbuffered)
9198         cnt += shortbuffered;
9199     DEBUG_P(PerlIO_printf(Perl_debug_log,
9200          "Screamer: quitting, ptr=%" UVuf ", cnt=%" IVdf "\n",PTR2UV(ptr),(IV)cnt));
9201     PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt);  /* put these back or we're in trouble */
9202     DEBUG_P(PerlIO_printf(Perl_debug_log,
9203         "Screamer: end: FILE * thinks ptr=%" UVuf ", cnt=%" IVdf ", base=%" UVuf
9204         "\n",
9205         PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
9206         PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
9207     *bp = '\0';
9208     SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv));      /* set length */
9209     DEBUG_P(PerlIO_printf(Perl_debug_log,
9210         "Screamer: done, len=%ld, string=|%.*s|\n",
9211         (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
9212     }
9213    else
9214     {
9215        /*The big, slow, and stupid way. */
9216         STDCHAR buf[8192];
9217
9218       screamer2:
9219         if (rslen) {
9220             const STDCHAR * const bpe = buf + sizeof(buf);
9221             bp = buf;
9222             while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
9223                 ; /* keep reading */
9224             cnt = bp - buf;
9225         }
9226         else {
9227             cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
9228             /* Accommodate broken VAXC compiler, which applies U8 cast to
9229              * both args of ?: operator, causing EOF to change into 255
9230              */
9231             if (cnt > 0)
9232                  i = (U8)buf[cnt - 1];
9233             else
9234                  i = EOF;
9235         }
9236
9237         if (cnt < 0)
9238             cnt = 0;  /* we do need to re-set the sv even when cnt <= 0 */
9239         if (append)
9240             sv_catpvn_nomg(sv, (char *) buf, cnt);
9241         else
9242             sv_setpvn(sv, (char *) buf, cnt);   /* "nomg" is implied */
9243
9244         if (i != EOF &&                 /* joy */
9245             (!rslen ||
9246              SvCUR(sv) < rslen ||
9247              memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
9248         {
9249             append = -1;
9250             /*
9251              * If we're reading from a TTY and we get a short read,
9252              * indicating that the user hit his EOF character, we need
9253              * to notice it now, because if we try to read from the TTY
9254              * again, the EOF condition will disappear.
9255              *
9256              * The comparison of cnt to sizeof(buf) is an optimization
9257              * that prevents unnecessary calls to feof().
9258              *
9259              * - jik 9/25/96
9260              */
9261             if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
9262                 goto screamer2;
9263         }
9264
9265     }
9266
9267     if (rspara) {               /* have to do this both before and after */
9268         while (i != EOF) {      /* to make sure file boundaries work right */
9269             i = PerlIO_getc(fp);
9270             if (i != '\n') {
9271                 PerlIO_ungetc(fp,i);
9272                 break;
9273             }
9274         }
9275     }
9276
9277     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
9278 }
9279
9280 /*
9281 =for apidoc sv_inc
9282 =for apidoc_item sv_inc_nomg
9283
9284 These auto-increment the value in the SV, doing string to numeric conversion
9285 if necessary.  They both handle operator overloading.
9286
9287 They differ only in that C<sv_inc> performs 'get' magic; C<sv_inc_nomg> skips
9288 any magic.
9289
9290 =cut
9291 */
9292
9293 void
9294 Perl_sv_inc(pTHX_ SV *const sv)
9295 {
9296     if (!sv)
9297         return;
9298     SvGETMAGIC(sv);
9299     sv_inc_nomg(sv);
9300 }
9301
9302 void
9303 Perl_sv_inc_nomg(pTHX_ SV *const sv)
9304 {
9305     char *d;
9306     int flags;
9307
9308     if (!sv)
9309         return;
9310     if (SvTHINKFIRST(sv)) {
9311         if (SvREADONLY(sv)) {
9312                 Perl_croak_no_modify();
9313         }
9314         if (SvROK(sv)) {
9315             IV i;
9316             if (SvAMAGIC(sv) && AMG_CALLunary(sv, inc_amg))
9317                 return;
9318             i = PTR2IV(SvRV(sv));
9319             sv_unref(sv);
9320             sv_setiv(sv, i);
9321         }
9322         else sv_force_normal_flags(sv, 0);
9323     }
9324     flags = SvFLAGS(sv);
9325     if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
9326         /* It's (privately or publicly) a float, but not tested as an
9327            integer, so test it to see. */
9328         (void) SvIV(sv);
9329         flags = SvFLAGS(sv);
9330     }
9331     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
9332         /* It's publicly an integer, or privately an integer-not-float */
9333 #ifdef PERL_PRESERVE_IVUV
9334       oops_its_int:
9335 #endif
9336         if (SvIsUV(sv)) {
9337             if (SvUVX(sv) == UV_MAX)
9338                 sv_setnv(sv, UV_MAX_P1);
9339             else {
9340                 (void)SvIOK_only_UV(sv);
9341                 SvUV_set(sv, SvUVX(sv) + 1);
9342             }
9343         } else {
9344             if (SvIVX(sv) == IV_MAX)
9345                 sv_setuv(sv, (UV)IV_MAX + 1);
9346             else {
9347                 (void)SvIOK_only(sv);
9348                 SvIV_set(sv, SvIVX(sv) + 1);
9349             }
9350         }
9351         return;
9352     }
9353     if (flags & SVp_NOK) {
9354         const NV was = SvNVX(sv);
9355         if (NV_OVERFLOWS_INTEGERS_AT != 0.0 &&
9356             /* If NVX was NaN, the following comparisons return always false */
9357             UNLIKELY(was >= NV_OVERFLOWS_INTEGERS_AT ||
9358                      was < -NV_OVERFLOWS_INTEGERS_AT) &&
9359 #if defined(NAN_COMPARE_BROKEN)
9360             LIKELY(!Perl_isinfnan(was))
9361 #else
9362             LIKELY(!Perl_isinf(was))
9363 #endif
9364             ) {
9365             /* diag_listed_as: Lost precision when %s %f by 1 */
9366             Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
9367                            "Lost precision when incrementing %" NVff " by 1",
9368                            was);
9369         }
9370         (void)SvNOK_only(sv);
9371         SvNV_set(sv, was + 1.0);
9372         return;
9373     }
9374
9375     /* treat AV/HV/CV/FM/IO and non-fake GVs as immutable */
9376     if (SvTYPE(sv) >= SVt_PVAV || (isGV_with_GP(sv) && !SvFAKE(sv)))
9377         Perl_croak_no_modify();
9378
9379     if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
9380         if ((flags & SVTYPEMASK) < SVt_PVIV)
9381             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
9382         (void)SvIOK_only(sv);
9383         SvIV_set(sv, 1);
9384         return;
9385     }
9386     d = SvPVX(sv);
9387     while (isALPHA(*d)) d++;
9388     while (isDIGIT(*d)) d++;
9389     if (d < SvEND(sv)) {
9390         const int numtype = grok_number_flags(SvPVX_const(sv), SvCUR(sv), NULL, PERL_SCAN_TRAILING);
9391 #ifdef PERL_PRESERVE_IVUV
9392         /* Got to punt this as an integer if needs be, but we don't issue
9393            warnings. Probably ought to make the sv_iv_please() that does
9394            the conversion if possible, and silently.  */
9395         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
9396             /* Need to try really hard to see if it's an integer.
9397                9.22337203685478e+18 is an integer.
9398                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
9399                so $a="9.22337203685478e+18"; $a+0; $a++
9400                needs to be the same as $a="9.22337203685478e+18"; $a++
9401                or we go insane. */
9402
9403             (void) sv_2iv(sv);
9404             if (SvIOK(sv))
9405                 goto oops_its_int;
9406
9407             /* sv_2iv *should* have made this an NV */
9408             if (flags & SVp_NOK) {
9409                 (void)SvNOK_only(sv);
9410                 SvNV_set(sv, SvNVX(sv) + 1.0);
9411                 return;
9412             }
9413             /* I don't think we can get here. Maybe I should assert this
9414                And if we do get here I suspect that sv_setnv will croak. NWC
9415                Fall through. */
9416             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%" UVxf " NV=%" NVgf "\n",
9417                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
9418         }
9419 #endif /* PERL_PRESERVE_IVUV */
9420         if (!numtype && ckWARN(WARN_NUMERIC))
9421             not_incrementable(sv);
9422         sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
9423         return;
9424     }
9425     d--;
9426     while (d >= SvPVX_const(sv)) {
9427         if (isDIGIT(*d)) {
9428             if (++*d <= '9')
9429                 return;
9430             *(d--) = '0';
9431         }
9432         else {
9433 #ifdef EBCDIC
9434             /* MKS: The original code here died if letters weren't consecutive.
9435              * at least it didn't have to worry about non-C locales.  The
9436              * new code assumes that ('z'-'a')==('Z'-'A'), letters are
9437              * arranged in order (although not consecutively) and that only
9438              * [A-Za-z] are accepted by isALPHA in the C locale.
9439              */
9440             if (isALPHA_FOLD_NE(*d, 'z')) {
9441                 do { ++*d; } while (!isALPHA(*d));
9442                 return;
9443             }
9444             *(d--) -= 'z' - 'a';
9445 #else
9446             ++*d;
9447             if (isALPHA(*d))
9448                 return;
9449             *(d--) -= 'z' - 'a' + 1;
9450 #endif
9451         }
9452     }
9453     /* oh,oh, the number grew */
9454     SvGROW(sv, SvCUR(sv) + 2);
9455     SvCUR_set(sv, SvCUR(sv) + 1);
9456     for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
9457         *d = d[-1];
9458     if (isDIGIT(d[1]))
9459         *d = '1';
9460     else
9461         *d = d[1];
9462 }
9463
9464 /*
9465 =for apidoc sv_dec
9466 =for apidoc_item sv_dec_nomg
9467
9468 These auto-decrement the value in the SV, doing string to numeric conversion
9469 if necessary.  They both handle operator overloading.
9470
9471 They differ only in that:
9472
9473 C<sv_dec> handles 'get' magic; C<sv_dec_nomg> skips 'get' magic.
9474
9475 =cut
9476 */
9477
9478 void
9479 Perl_sv_dec(pTHX_ SV *const sv)
9480 {
9481     if (!sv)
9482         return;
9483     SvGETMAGIC(sv);
9484     sv_dec_nomg(sv);
9485 }
9486
9487 void
9488 Perl_sv_dec_nomg(pTHX_ SV *const sv)
9489 {
9490     int flags;
9491
9492     if (!sv)
9493         return;
9494     if (SvTHINKFIRST(sv)) {
9495         if (SvREADONLY(sv)) {
9496                 Perl_croak_no_modify();
9497         }
9498         if (SvROK(sv)) {
9499             IV i;
9500             if (SvAMAGIC(sv) && AMG_CALLunary(sv, dec_amg))
9501                 return;
9502             i = PTR2IV(SvRV(sv));
9503             sv_unref(sv);
9504             sv_setiv(sv, i);
9505         }
9506         else sv_force_normal_flags(sv, 0);
9507     }
9508     /* Unlike sv_inc we don't have to worry about string-never-numbers
9509        and keeping them magic. But we mustn't warn on punting */
9510     flags = SvFLAGS(sv);
9511     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
9512         /* It's publicly an integer, or privately an integer-not-float */
9513 #ifdef PERL_PRESERVE_IVUV
9514       oops_its_int:
9515 #endif
9516         if (SvIsUV(sv)) {
9517             if (SvUVX(sv) == 0) {
9518                 (void)SvIOK_only(sv);
9519                 SvIV_set(sv, -1);
9520             }
9521             else {
9522                 (void)SvIOK_only_UV(sv);
9523                 SvUV_set(sv, SvUVX(sv) - 1);
9524             }
9525         } else {
9526             if (SvIVX(sv) == IV_MIN) {
9527                 sv_setnv(sv, (NV)IV_MIN);
9528                 goto oops_its_num;
9529             }
9530             else {
9531                 (void)SvIOK_only(sv);
9532                 SvIV_set(sv, SvIVX(sv) - 1);
9533             }
9534         }
9535         return;
9536     }
9537     if (flags & SVp_NOK) {
9538     oops_its_num:
9539         {
9540             const NV was = SvNVX(sv);
9541             if (NV_OVERFLOWS_INTEGERS_AT != 0.0 &&
9542                 /* If NVX was NaN, these comparisons return always false */
9543                 UNLIKELY(was <= -NV_OVERFLOWS_INTEGERS_AT ||
9544                          was > NV_OVERFLOWS_INTEGERS_AT) &&
9545 #if defined(NAN_COMPARE_BROKEN)
9546                 LIKELY(!Perl_isinfnan(was))
9547 #else
9548                 LIKELY(!Perl_isinf(was))
9549 #endif
9550                 ) {
9551                 /* diag_listed_as: Lost precision when %s %f by 1 */
9552                 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
9553                                "Lost precision when decrementing %" NVff " by 1",
9554                                was);
9555             }
9556             (void)SvNOK_only(sv);
9557             SvNV_set(sv, was - 1.0);
9558             return;
9559         }
9560     }
9561
9562     /* treat AV/HV/CV/FM/IO and non-fake GVs as immutable */
9563     if (SvTYPE(sv) >= SVt_PVAV || (isGV_with_GP(sv) && !SvFAKE(sv)))
9564         Perl_croak_no_modify();
9565
9566     if (!(flags & SVp_POK)) {
9567         if ((flags & SVTYPEMASK) < SVt_PVIV)
9568             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
9569         SvIV_set(sv, -1);
9570         (void)SvIOK_only(sv);
9571         return;
9572     }
9573 #ifdef PERL_PRESERVE_IVUV
9574     {
9575         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
9576         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
9577             /* Need to try really hard to see if it's an integer.
9578                9.22337203685478e+18 is an integer.
9579                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
9580                so $a="9.22337203685478e+18"; $a+0; $a--
9581                needs to be the same as $a="9.22337203685478e+18"; $a--
9582                or we go insane. */
9583
9584             (void) sv_2iv(sv);
9585             if (SvIOK(sv))
9586                 goto oops_its_int;
9587
9588             /* sv_2iv *should* have made this an NV */
9589             if (flags & SVp_NOK) {
9590                 (void)SvNOK_only(sv);
9591                 SvNV_set(sv, SvNVX(sv) - 1.0);
9592                 return;
9593             }
9594             /* I don't think we can get here. Maybe I should assert this
9595                And if we do get here I suspect that sv_setnv will croak. NWC
9596                Fall through. */
9597             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%" UVxf " NV=%" NVgf "\n",
9598                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
9599         }
9600     }
9601 #endif /* PERL_PRESERVE_IVUV */
9602     sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0);   /* punt */
9603 }
9604
9605 /* this define is used to eliminate a chunk of duplicated but shared logic
9606  * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
9607  * used anywhere but here - yves
9608  */
9609 #define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
9610     STMT_START {      \
9611         SSize_t ix = ++PL_tmps_ix;              \
9612         if (UNLIKELY(ix >= PL_tmps_max))        \
9613             ix = tmps_grow_p(ix);                       \
9614         PL_tmps_stack[ix] = (AnSv); \
9615     } STMT_END
9616
9617 /*
9618 =for apidoc sv_mortalcopy
9619
9620 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
9621 The new SV is marked as mortal.  It will be destroyed "soon", either by an
9622 explicit call to C<FREETMPS>, or by an implicit call at places such as
9623 statement boundaries.  See also C<L</sv_newmortal>> and C<L</sv_2mortal>>.
9624
9625 =for apidoc sv_mortalcopy_flags
9626
9627 Like C<sv_mortalcopy>, but the extra C<flags> are passed to the
9628 C<sv_setsv_flags>.
9629
9630 =cut
9631 */
9632
9633 /* Make a string that will exist for the duration of the expression
9634  * evaluation.  Actually, it may have to last longer than that, but
9635  * hopefully we won't free it until it has been assigned to a
9636  * permanent location. */
9637
9638 SV *
9639 Perl_sv_mortalcopy_flags(pTHX_ SV *const oldstr, U32 flags)
9640 {
9641     SV *sv;
9642
9643     if (flags & SV_GMAGIC)
9644         SvGETMAGIC(oldstr); /* before new_SV, in case it dies */
9645     new_SV(sv);
9646     sv_setsv_flags(sv,oldstr,flags & ~SV_GMAGIC);
9647     PUSH_EXTEND_MORTAL__SV_C(sv);
9648     SvTEMP_on(sv);
9649     return sv;
9650 }
9651
9652 /*
9653 =for apidoc sv_newmortal
9654
9655 Creates a new null SV which is mortal.  The reference count of the SV is
9656 set to 1.  It will be destroyed "soon", either by an explicit call to
9657 C<FREETMPS>, or by an implicit call at places such as statement boundaries.
9658 See also C<L</sv_mortalcopy>> and C<L</sv_2mortal>>.
9659
9660 =cut
9661 */
9662
9663 SV *
9664 Perl_sv_newmortal(pTHX)
9665 {
9666     SV *sv;
9667
9668     new_SV(sv);
9669     SvFLAGS(sv) = SVs_TEMP;
9670     PUSH_EXTEND_MORTAL__SV_C(sv);
9671     return sv;
9672 }
9673
9674
9675 /*
9676 =for apidoc newSVpvn_flags
9677
9678 Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
9679 characters) into it.  The reference count for the
9680 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
9681 string.  You are responsible for ensuring that the source string is at least
9682 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
9683 Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
9684 If C<SVs_TEMP> is set, then C<sv_2mortal()> is called on the result before
9685 returning.  If C<SVf_UTF8> is set, C<s>
9686 is considered to be in UTF-8 and the
9687 C<SVf_UTF8> flag will be set on the new SV.
9688 C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
9689
9690     #define newSVpvn_utf8(s, len, u)                    \
9691         newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
9692
9693 =for apidoc Amnh||SVs_TEMP
9694
9695 =cut
9696 */
9697
9698 SV *
9699 Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
9700 {
9701     SV *sv;
9702
9703     /* All the flags we don't support must be zero.
9704        And we're new code so I'm going to assert this from the start.  */
9705     assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
9706     new_SV(sv);
9707     sv_upgrade(sv, SVt_PV);
9708     sv_setpvn_fresh(sv,s,len);
9709
9710     /* This code used to do a sv_2mortal(), however we now unroll the call to
9711      * sv_2mortal() and do what it does ourselves here.  Since we have asserted
9712      * that flags can only have the SVf_UTF8 and/or SVs_TEMP flags set above we
9713      * can use it to enable the sv flags directly (bypassing SvTEMP_on), which
9714      * in turn means we dont need to mask out the SVf_UTF8 flag below, which
9715      * means that we eliminate quite a few steps than it looks - Yves
9716      * (explaining patch by gfx) */
9717
9718     SvFLAGS(sv) |= flags;
9719
9720     if(flags & SVs_TEMP){
9721         PUSH_EXTEND_MORTAL__SV_C(sv);
9722     }
9723
9724     return sv;
9725 }
9726
9727 /*
9728 =for apidoc sv_2mortal
9729
9730 Marks an existing SV as mortal.  The SV will be destroyed "soon", either
9731 by an explicit call to C<FREETMPS>, or by an implicit call at places such as
9732 statement boundaries.  C<SvTEMP()> is turned on which means that the SV's
9733 string buffer can be "stolen" if this SV is copied.  See also
9734 C<L</sv_newmortal>> and C<L</sv_mortalcopy>>.
9735
9736 =cut
9737 */
9738
9739 SV *
9740 Perl_sv_2mortal(pTHX_ SV *const sv)
9741 {
9742     if (!sv)
9743         return sv;
9744     if (SvIMMORTAL(sv))
9745         return sv;
9746     PUSH_EXTEND_MORTAL__SV_C(sv);
9747     SvTEMP_on(sv);
9748     return sv;
9749 }
9750
9751 /*
9752 =for apidoc newSVpv
9753
9754 Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
9755 characters) into it.  The reference count for the
9756 SV is set to 1.  If C<len> is zero, Perl will compute the length using
9757 C<strlen()>, (which means if you use this option, that C<s> can't have embedded
9758 C<NUL> characters and has to have a terminating C<NUL> byte).
9759
9760 This function can cause reliability issues if you are likely to pass in
9761 empty strings that are not null terminated, because it will run
9762 strlen on the string and potentially run past valid memory.
9763
9764 Using L</newSVpvn> is a safer alternative for non C<NUL> terminated strings.
9765 For string literals use L</newSVpvs> instead.  This function will work fine for
9766 C<NUL> terminated strings, but if you want to avoid the if statement on whether
9767 to call C<strlen> use C<newSVpvn> instead (calling C<strlen> yourself).
9768
9769 =cut
9770 */
9771
9772 SV *
9773 Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
9774 {
9775     SV *sv;
9776
9777     new_SV(sv);
9778     sv_upgrade(sv, SVt_PV);
9779     sv_setpvn_fresh(sv, s, len || s == NULL ? len : strlen(s));
9780     return sv;
9781 }
9782
9783 /*
9784 =for apidoc newSVpvn
9785
9786 Creates a new SV and copies a string into it, which may contain C<NUL> characters
9787 (C<\0>) and other binary data.  The reference count for the SV is set to 1.
9788 Note that if C<len> is zero, Perl will create a zero length (Perl) string.  You
9789 are responsible for ensuring that the source buffer is at least
9790 C<len> bytes long.  If the C<buffer> argument is NULL the new SV will be
9791 undefined.
9792
9793 =cut
9794 */
9795
9796 SV *
9797 Perl_newSVpvn(pTHX_ const char *const buffer, const STRLEN len)
9798 {
9799     SV *sv;
9800     new_SV(sv);
9801     sv_upgrade(sv, SVt_PV);
9802     sv_setpvn_fresh(sv,buffer,len);
9803     return sv;
9804 }
9805
9806 /*
9807 =for apidoc newSVhek
9808
9809 Creates a new SV from the hash key structure.  It will generate scalars that
9810 point to the shared string table where possible.  Returns a new (undefined)
9811 SV if C<hek> is NULL.
9812
9813 =cut
9814 */
9815
9816 SV *
9817 Perl_newSVhek(pTHX_ const HEK *const hek)
9818 {
9819     if (!hek) {
9820         SV *sv;
9821
9822         new_SV(sv);
9823         return sv;
9824     }
9825
9826     if (HEK_LEN(hek) == HEf_SVKEY) {
9827         return newSVsv(*(SV**)HEK_KEY(hek));
9828     } else {
9829         const int flags = HEK_FLAGS(hek);
9830         if (flags & HVhek_WASUTF8) {
9831             /* Trouble :-)
9832                Andreas would like keys he put in as utf8 to come back as utf8
9833             */
9834             STRLEN utf8_len = HEK_LEN(hek);
9835             SV * const sv = newSV_type(SVt_PV);
9836             char *as_utf8 = (char *)bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
9837             /* bytes_to_utf8() allocates a new string, which we can repurpose: */
9838             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
9839             SvUTF8_on (sv);
9840             return sv;
9841         } else if (flags & HVhek_UNSHARED) {
9842             /* A hash that isn't using shared hash keys has to have
9843                the flag in every key so that we know not to try to call
9844                share_hek_hek on it.  */
9845
9846             SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
9847             if (HEK_UTF8(hek))
9848                 SvUTF8_on (sv);
9849             return sv;
9850         }
9851         /* This will be overwhelminly the most common case.  */
9852         {
9853             /* Inline most of newSVpvn_share(), because share_hek_hek() is far
9854                more efficient than sharepvn().  */
9855             SV *sv;
9856
9857             new_SV(sv);
9858             sv_upgrade(sv, SVt_PV);
9859             SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
9860             SvCUR_set(sv, HEK_LEN(hek));
9861             SvLEN_set(sv, 0);
9862             SvIsCOW_on(sv);
9863             SvPOK_on(sv);
9864             if (HEK_UTF8(hek))
9865                 SvUTF8_on(sv);
9866             return sv;
9867         }
9868     }
9869 }
9870
9871 /*
9872 =for apidoc newSVpvn_share
9873
9874 Creates a new SV with its C<SvPVX_const> pointing to a shared string in the string
9875 table.  If the string does not already exist in the table, it is
9876 created first.  Turns on the C<SvIsCOW> flag (or C<READONLY>
9877 and C<FAKE> in 5.16 and earlier).  If the C<hash> parameter
9878 is non-zero, that value is used; otherwise the hash is computed.
9879 The string's hash can later be retrieved from the SV
9880 with the C<L</SvSHARED_HASH>> macro.  The idea here is
9881 that as the string table is used for shared hash keys these strings will have
9882 C<SvPVX_const == HeKEY> and hash lookup will avoid string compare.
9883
9884 =cut
9885 */
9886
9887 SV *
9888 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
9889 {
9890     SV *sv;
9891     bool is_utf8 = FALSE;
9892     const char *const orig_src = src;
9893
9894     if (len < 0) {
9895         STRLEN tmplen = -len;
9896         is_utf8 = TRUE;
9897         /* See the note in hv.c:hv_fetch() --jhi */
9898         src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
9899         len = tmplen;
9900     }
9901     if (!hash)
9902         PERL_HASH(hash, src, len);
9903     new_SV(sv);
9904     /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
9905        changes here, update it there too.  */
9906     sv_upgrade(sv, SVt_PV);
9907     SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
9908     SvCUR_set(sv, len);
9909     SvLEN_set(sv, 0);
9910     SvIsCOW_on(sv);
9911     SvPOK_on(sv);
9912     if (is_utf8)
9913         SvUTF8_on(sv);
9914     if (src != orig_src)
9915         Safefree(src);
9916     return sv;
9917 }
9918
9919 /*
9920 =for apidoc newSVpv_share
9921
9922 Like C<newSVpvn_share>, but takes a C<NUL>-terminated string instead of a
9923 string/length pair.
9924
9925 =cut
9926 */
9927
9928 SV *
9929 Perl_newSVpv_share(pTHX_ const char *src, U32 hash)
9930 {
9931     return newSVpvn_share(src, strlen(src), hash);
9932 }
9933
9934 #if defined(MULTIPLICITY)
9935
9936 /* pTHX_ magic can't cope with varargs, so this is a no-context
9937  * version of the main function, (which may itself be aliased to us).
9938  * Don't access this version directly.
9939  */
9940
9941 SV *
9942 Perl_newSVpvf_nocontext(const char *const pat, ...)
9943 {
9944     dTHX;
9945     SV *sv;
9946     va_list args;
9947
9948     PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
9949
9950     va_start(args, pat);
9951     sv = vnewSVpvf(pat, &args);
9952     va_end(args);
9953     return sv;
9954 }
9955 #endif
9956
9957 /*
9958 =for apidoc newSVpvf
9959
9960 Creates a new SV and initializes it with the string formatted like
9961 C<sv_catpvf>.
9962
9963 =for apidoc newSVpvf_nocontext
9964 Like C<L</newSVpvf>> but does not take a thread context (C<aTHX>) parameter,
9965 so is used in situations where the caller doesn't already have the thread
9966 context.
9967
9968 =for apidoc vnewSVpvf
9969 Like C<L</newSVpvf>> but the arguments are an encapsulated argument list.
9970
9971 =cut
9972 */
9973
9974 SV *
9975 Perl_newSVpvf(pTHX_ const char *const pat, ...)
9976 {
9977     SV *sv;
9978     va_list args;
9979
9980     PERL_ARGS_ASSERT_NEWSVPVF;
9981
9982     va_start(args, pat);
9983     sv = vnewSVpvf(pat, &args);
9984     va_end(args);
9985     return sv;
9986 }
9987
9988 /* backend for newSVpvf() and newSVpvf_nocontext() */
9989
9990 SV *
9991 Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
9992 {
9993     SV *sv;
9994
9995     PERL_ARGS_ASSERT_VNEWSVPVF;
9996
9997     new_SV(sv);
9998     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9999     return sv;
10000 }
10001
10002 /*
10003 =for apidoc newSVnv
10004
10005 Creates a new SV and copies a floating point value into it.
10006 The reference count for the SV is set to 1.
10007
10008 =cut
10009 */
10010
10011 SV *
10012 Perl_newSVnv(pTHX_ const NV n)
10013 {
10014     SV *sv;
10015
10016     new_SV(sv);
10017     sv_setnv(sv,n);
10018     return sv;
10019 }
10020
10021 /*
10022 =for apidoc newSViv
10023
10024 Creates a new SV and copies an integer into it.  The reference count for the
10025 SV is set to 1.
10026
10027 =cut
10028 */
10029
10030 SV *
10031 Perl_newSViv(pTHX_ const IV i)
10032 {
10033     SV *sv;
10034
10035     new_SV(sv);
10036
10037     /* Inlining ONLY the small relevant subset of sv_setiv here
10038      * for performance. Makes a significant difference. */
10039
10040     /* We're starting from SVt_FIRST, so provided that's
10041      * actual 0, we don't have to unset any SV type flags
10042      * to promote to SVt_IV. */
10043     STATIC_ASSERT_STMT(SVt_FIRST == 0);
10044
10045     SET_SVANY_FOR_BODYLESS_IV(sv);
10046     SvFLAGS(sv) |= SVt_IV;
10047     (void)SvIOK_on(sv);
10048
10049     SvIV_set(sv, i);
10050     SvTAINT(sv);
10051
10052     return sv;
10053 }
10054
10055 /*
10056 =for apidoc newSVuv
10057
10058 Creates a new SV and copies an unsigned integer into it.
10059 The reference count for the SV is set to 1.
10060
10061 =cut
10062 */
10063
10064 SV *
10065 Perl_newSVuv(pTHX_ const UV u)
10066 {
10067     SV *sv;
10068
10069     /* Inlining ONLY the small relevant subset of sv_setuv here
10070      * for performance. Makes a significant difference. */
10071
10072     /* Using ivs is more efficient than using uvs - see sv_setuv */
10073     if (u <= (UV)IV_MAX) {
10074         return newSViv((IV)u);
10075     }
10076
10077     new_SV(sv);
10078
10079     /* We're starting from SVt_FIRST, so provided that's
10080      * actual 0, we don't have to unset any SV type flags
10081      * to promote to SVt_IV. */
10082     STATIC_ASSERT_STMT(SVt_FIRST == 0);
10083
10084     SET_SVANY_FOR_BODYLESS_IV(sv);
10085     SvFLAGS(sv) |= SVt_IV;
10086     (void)SvIOK_on(sv);
10087     (void)SvIsUV_on(sv);
10088
10089     SvUV_set(sv, u);
10090     SvTAINT(sv);
10091
10092     return sv;
10093 }
10094
10095 /*
10096 =for apidoc newSV_type
10097
10098 Creates a new SV, of the type specified.  The reference count for the new SV
10099 is set to 1.
10100
10101 =cut
10102 */
10103
10104 SV *
10105 Perl_newSV_type(pTHX_ const svtype type)
10106 {
10107     SV *sv;
10108
10109     new_SV(sv);
10110     ASSUME(SvTYPE(sv) == SVt_FIRST);
10111     if(type != SVt_FIRST)
10112         sv_upgrade(sv, type);
10113     return sv;
10114 }
10115
10116 /*
10117 =for apidoc newRV_noinc
10118
10119 Creates an RV wrapper for an SV.  The reference count for the original
10120 SV is B<not> incremented.
10121
10122 =cut
10123 */
10124
10125 SV *
10126 Perl_newRV_noinc(pTHX_ SV *const tmpRef)
10127 {
10128     SV *sv;
10129
10130     PERL_ARGS_ASSERT_NEWRV_NOINC;
10131
10132     new_SV(sv);
10133
10134     /* We're starting from SVt_FIRST, so provided that's
10135      * actual 0, we don't have to unset any SV type flags
10136      * to promote to SVt_IV. */
10137     STATIC_ASSERT_STMT(SVt_FIRST == 0);
10138
10139     SET_SVANY_FOR_BODYLESS_IV(sv);
10140     SvFLAGS(sv) |= SVt_IV;
10141
10142     SvTEMP_off(tmpRef);
10143
10144     sv_setrv_noinc(sv, tmpRef);
10145
10146     return sv;
10147 }
10148
10149 /* newRV_inc is the official function name to use now.
10150  * newRV_inc is in fact #defined to newRV in sv.h
10151  */
10152
10153 SV *
10154 Perl_newRV(pTHX_ SV *const sv)
10155 {
10156     PERL_ARGS_ASSERT_NEWRV;
10157
10158     return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
10159 }
10160
10161 /*
10162 =for apidoc newSVsv
10163 =for apidoc_item newSVsv_nomg
10164 =for apidoc_item newSVsv_flags
10165
10166 These create a new SV which is an exact duplicate of the original SV
10167 (using C<sv_setsv>.)
10168
10169 They differ only in that C<newSVsv> performs 'get' magic; C<newSVsv_nomg> skips
10170 any magic; and C<newSVsv_flags> allows you to explicitly set a C<flags>
10171 parameter.
10172
10173 =cut
10174 */
10175
10176 SV *
10177 Perl_newSVsv_flags(pTHX_ SV *const old, I32 flags)
10178 {
10179     SV *sv;
10180
10181     if (!old)
10182         return NULL;
10183     if (SvTYPE(old) == (svtype)SVTYPEMASK) {
10184         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
10185         return NULL;
10186     }
10187     /* Do this here, otherwise we leak the new SV if this croaks. */
10188     if (flags & SV_GMAGIC)
10189         SvGETMAGIC(old);
10190     new_SV(sv);
10191     sv_setsv_flags(sv, old, flags & ~SV_GMAGIC);
10192     return sv;
10193 }
10194
10195 /*
10196 =for apidoc sv_reset
10197
10198 Underlying implementation for the C<reset> Perl function.
10199 Note that the perl-level function is vaguely deprecated.
10200
10201 =cut
10202 */
10203
10204 void
10205 Perl_sv_reset(pTHX_ const char *s, HV *const stash)
10206 {
10207     PERL_ARGS_ASSERT_SV_RESET;
10208
10209     sv_resetpvn(*s ? s : NULL, strlen(s), stash);
10210 }
10211
10212 void
10213 Perl_sv_resetpvn(pTHX_ const char *s, STRLEN len, HV * const stash)
10214 {
10215     char todo[PERL_UCHAR_MAX+1];
10216     const char *send;
10217
10218     if (!stash || SvTYPE(stash) != SVt_PVHV)
10219         return;
10220
10221     if (!s) {           /* reset ?? searches */
10222         MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
10223         if (mg) {
10224             const U32 count = mg->mg_len / sizeof(PMOP**);
10225             PMOP **pmp = (PMOP**) mg->mg_ptr;
10226             PMOP *const *const end = pmp + count;
10227
10228             while (pmp < end) {
10229 #ifdef USE_ITHREADS
10230                 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
10231 #else
10232                 (*pmp)->op_pmflags &= ~PMf_USED;
10233 #endif
10234                 ++pmp;
10235             }
10236         }
10237         return;
10238     }
10239
10240     /* reset variables */
10241
10242     if (!HvTOTALKEYS(stash))
10243         return;
10244
10245     Zero(todo, 256, char);
10246     send = s + len;
10247     while (s < send) {
10248         I32 max;
10249         I32 i = (unsigned char)*s;
10250         if (s[1] == '-') {
10251             s += 2;
10252         }
10253         max = (unsigned char)*s++;
10254         for ( ; i <= max; i++) {
10255             todo[i] = 1;
10256         }
10257         for (i = 0; i <= (I32) HvMAX(stash); i++) {
10258             HE *entry;
10259             for (entry = HvARRAY(stash)[i];
10260                  entry;
10261                  entry = HeNEXT(entry))
10262             {
10263                 GV *gv;
10264                 SV *sv;
10265
10266                 if (!todo[(U8)*HeKEY(entry)])
10267                     continue;
10268                 gv = MUTABLE_GV(HeVAL(entry));
10269                 if (!isGV(gv))
10270                     continue;
10271                 sv = GvSV(gv);
10272                 if (sv && !SvREADONLY(sv)) {
10273                     SV_CHECK_THINKFIRST_COW_DROP(sv);
10274                     if (!isGV(sv)) SvOK_off(sv);
10275                 }
10276                 if (GvAV(gv)) {
10277                     av_clear(GvAV(gv));
10278                 }
10279                 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
10280                     hv_clear(GvHV(gv));
10281                 }
10282             }
10283         }
10284     }
10285 }
10286
10287 /*
10288 =for apidoc sv_2io
10289
10290 Using various gambits, try to get an IO from an SV: the IO slot if its a
10291 GV; or the recursive result if we're an RV; or the IO slot of the symbol
10292 named after the PV if we're a string.
10293
10294 'Get' magic is ignored on the C<sv> passed in, but will be called on
10295 C<SvRV(sv)> if C<sv> is an RV.
10296
10297 =cut
10298 */
10299
10300 IO*
10301 Perl_sv_2io(pTHX_ SV *const sv)
10302 {
10303     IO* io;
10304     GV* gv;
10305
10306     PERL_ARGS_ASSERT_SV_2IO;
10307
10308     switch (SvTYPE(sv)) {
10309     case SVt_PVIO:
10310         io = MUTABLE_IO(sv);
10311         break;
10312     case SVt_PVGV:
10313     case SVt_PVLV:
10314         if (isGV_with_GP(sv)) {
10315             gv = MUTABLE_GV(sv);
10316             io = GvIO(gv);
10317             if (!io)
10318                 Perl_croak(aTHX_ "Bad filehandle: %" HEKf,
10319                                     HEKfARG(GvNAME_HEK(gv)));
10320             break;
10321         }
10322         /* FALLTHROUGH */
10323     default:
10324         if (!SvOK(sv))
10325             Perl_croak(aTHX_ PL_no_usym, "filehandle");
10326         if (SvROK(sv)) {
10327             SvGETMAGIC(SvRV(sv));
10328             return sv_2io(SvRV(sv));
10329         }
10330         gv = gv_fetchsv_nomg(sv, 0, SVt_PVIO);
10331         if (gv)
10332             io = GvIO(gv);
10333         else
10334             io = 0;
10335         if (!io) {
10336             SV *newsv = sv;
10337             if (SvGMAGICAL(sv)) {
10338                 newsv = sv_newmortal();
10339                 sv_setsv_nomg(newsv, sv);
10340             }
10341             Perl_croak(aTHX_ "Bad filehandle: %" SVf, SVfARG(newsv));
10342         }
10343         break;
10344     }
10345     return io;
10346 }
10347
10348 /*
10349 =for apidoc sv_2cv
10350
10351 Using various gambits, try to get a CV from an SV; in addition, try if
10352 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
10353 The flags in C<lref> are passed to C<gv_fetchsv>.
10354
10355 =cut
10356 */
10357
10358 CV *
10359 Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
10360 {
10361     GV *gv = NULL;
10362     CV *cv = NULL;
10363
10364     PERL_ARGS_ASSERT_SV_2CV;
10365
10366     if (!sv) {
10367         *st = NULL;
10368         *gvp = NULL;
10369         return NULL;
10370     }
10371     switch (SvTYPE(sv)) {
10372     case SVt_PVCV:
10373         *st = CvSTASH(sv);
10374         *gvp = NULL;
10375         return MUTABLE_CV(sv);
10376     case SVt_PVHV:
10377     case SVt_PVAV:
10378         *st = NULL;
10379         *gvp = NULL;
10380         return NULL;
10381     default:
10382         SvGETMAGIC(sv);
10383         if (SvROK(sv)) {
10384             if (SvAMAGIC(sv))
10385                 sv = amagic_deref_call(sv, to_cv_amg);
10386
10387             sv = SvRV(sv);
10388             if (SvTYPE(sv) == SVt_PVCV) {
10389                 cv = MUTABLE_CV(sv);
10390                 *gvp = NULL;
10391                 *st = CvSTASH(cv);
10392                 return cv;
10393             }
10394             else if(SvGETMAGIC(sv), isGV_with_GP(sv))
10395                 gv = MUTABLE_GV(sv);
10396             else
10397                 Perl_croak(aTHX_ "Not a subroutine reference");
10398         }
10399         else if (isGV_with_GP(sv)) {
10400             gv = MUTABLE_GV(sv);
10401         }
10402         else {
10403             gv = gv_fetchsv_nomg(sv, lref, SVt_PVCV);
10404         }
10405         *gvp = gv;
10406         if (!gv) {
10407             *st = NULL;
10408             return NULL;
10409         }
10410         /* Some flags to gv_fetchsv mean don't really create the GV  */
10411         if (!isGV_with_GP(gv)) {
10412             *st = NULL;
10413             return NULL;
10414         }
10415         *st = GvESTASH(gv);
10416         if (lref & ~GV_ADDMG && !GvCVu(gv)) {
10417             /* XXX this is probably not what they think they're getting.
10418              * It has the same effect as "sub name;", i.e. just a forward
10419              * declaration! */
10420             newSTUB(gv,0);
10421         }
10422         return GvCVu(gv);
10423     }
10424 }
10425
10426 /*
10427 =for apidoc sv_true
10428
10429 Returns true if the SV has a true value by Perl's rules.
10430 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
10431 instead use an in-line version.
10432
10433 =cut
10434 */
10435
10436 I32
10437 Perl_sv_true(pTHX_ SV *const sv)
10438 {
10439     if (!sv)
10440         return 0;
10441     if (SvPOK(sv)) {
10442         const XPV* const tXpv = (XPV*)SvANY(sv);
10443         if (tXpv &&
10444                 (tXpv->xpv_cur > 1 ||
10445                 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
10446             return 1;
10447         else
10448             return 0;
10449     }
10450     else {
10451         if (SvIOK(sv))
10452             return SvIVX(sv) != 0;
10453         else {
10454             if (SvNOK(sv))
10455                 return SvNVX(sv) != 0.0;
10456             else
10457                 return sv_2bool(sv);
10458         }
10459     }
10460 }
10461
10462 /*
10463 =for apidoc sv_pvn_force
10464
10465 Get a sensible string out of the SV somehow.
10466 A private implementation of the C<SvPV_force> macro for compilers which
10467 can't cope with complex macro expressions.  Always use the macro instead.
10468
10469 =for apidoc sv_pvn_force_flags
10470
10471 Get a sensible string out of the SV somehow.
10472 If C<flags> has the C<SV_GMAGIC> bit set, will C<L</mg_get>> on C<sv> if
10473 appropriate, else not.  C<sv_pvn_force> and C<sv_pvn_force_nomg> are
10474 implemented in terms of this function.
10475 You normally want to use the various wrapper macros instead: see
10476 C<L</SvPV_force>> and C<L</SvPV_force_nomg>>.
10477
10478 =cut
10479 */
10480
10481 char *
10482 Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const U32 flags)
10483 {
10484     PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
10485
10486     if (flags & SV_GMAGIC) SvGETMAGIC(sv);
10487     if (SvTHINKFIRST(sv) && (!SvROK(sv) || SvREADONLY(sv)))
10488         sv_force_normal_flags(sv, 0);
10489
10490     if (SvPOK(sv)) {
10491         if (lp)
10492             *lp = SvCUR(sv);
10493     }
10494     else {
10495         char *s;
10496         STRLEN len;
10497
10498         if (SvTYPE(sv) > SVt_PVLV
10499             || isGV_with_GP(sv))
10500             /* diag_listed_as: Can't coerce %s to %s in %s */
10501             Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
10502                 OP_DESC(PL_op));
10503         s = sv_2pv_flags(sv, &len, flags &~ SV_GMAGIC);
10504         if (!s) {
10505           s = (char *)"";
10506         }
10507         if (lp)
10508             *lp = len;
10509
10510         if (SvTYPE(sv) < SVt_PV ||
10511             s != SvPVX_const(sv)) {     /* Almost, but not quite, sv_setpvn() */
10512             if (SvROK(sv))
10513                 sv_unref(sv);
10514             SvUPGRADE(sv, SVt_PV);              /* Never FALSE */
10515             SvGROW(sv, len + 1);
10516             Move(s,SvPVX(sv),len,char);
10517             SvCUR_set(sv, len);
10518             SvPVX(sv)[len] = '\0';
10519         }
10520         if (!SvPOK(sv)) {
10521             SvPOK_on(sv);               /* validate pointer */
10522             SvTAINT(sv);
10523             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2pv(%s)\n",
10524                                   PTR2UV(sv),SvPVX_const(sv)));
10525         }
10526     }
10527     (void)SvPOK_only_UTF8(sv);
10528     return SvPVX_mutable(sv);
10529 }
10530
10531 /*
10532 =for apidoc sv_pvbyten_force
10533
10534 The backend for the C<SvPVbytex_force> macro.  Always use the macro
10535 instead.  If the SV cannot be downgraded from UTF-8, this croaks.
10536
10537 =cut
10538 */
10539
10540 char *
10541 Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
10542 {
10543     PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
10544
10545     sv_pvn_force(sv,lp);
10546     sv_utf8_downgrade(sv,0);
10547     *lp = SvCUR(sv);
10548     return SvPVX(sv);
10549 }
10550
10551 /*
10552 =for apidoc sv_pvutf8n_force
10553
10554 The backend for the C<SvPVutf8x_force> macro.  Always use the macro
10555 instead.
10556
10557 =cut
10558 */
10559
10560 char *
10561 Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
10562 {
10563     PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
10564
10565     sv_pvn_force(sv,0);
10566     sv_utf8_upgrade_nomg(sv);
10567     *lp = SvCUR(sv);
10568     return SvPVX(sv);
10569 }
10570
10571 /*
10572 =for apidoc sv_reftype
10573
10574 Returns a string describing what the SV is a reference to.
10575
10576 If ob is true and the SV is blessed, the string is the class name,
10577 otherwise it is the type of the SV, "SCALAR", "ARRAY" etc.
10578
10579 =cut
10580 */
10581
10582 const char *
10583 Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
10584 {
10585     PERL_ARGS_ASSERT_SV_REFTYPE;
10586     if (ob && SvOBJECT(sv)) {
10587         return SvPV_nolen_const(sv_ref(NULL, sv, ob));
10588     }
10589     else {
10590         /* WARNING - There is code, for instance in mg.c, that assumes that
10591          * the only reason that sv_reftype(sv,0) would return a string starting
10592          * with 'L' or 'S' is that it is a LVALUE or a SCALAR.
10593          * Yes this a dodgy way to do type checking, but it saves practically reimplementing
10594          * this routine inside other subs, and it saves time.
10595          * Do not change this assumption without searching for "dodgy type check" in
10596          * the code.
10597          * - Yves */
10598         switch (SvTYPE(sv)) {
10599         case SVt_NULL:
10600         case SVt_IV:
10601         case SVt_NV:
10602         case SVt_PV:
10603         case SVt_PVIV:
10604         case SVt_PVNV:
10605         case SVt_PVMG:
10606                                 if (SvVOK(sv))
10607                                     return "VSTRING";
10608                                 if (SvROK(sv))
10609                                     return "REF";
10610                                 else
10611                                     return "SCALAR";
10612
10613         case SVt_PVLV:          return (char *)  (SvROK(sv) ? "REF"
10614                                 /* tied lvalues should appear to be
10615                                  * scalars for backwards compatibility */
10616                                 : (isALPHA_FOLD_EQ(LvTYPE(sv), 't'))
10617                                     ? "SCALAR" : "LVALUE");
10618         case SVt_PVAV:          return "ARRAY";
10619         case SVt_PVHV:          return "HASH";
10620         case SVt_PVCV:          return "CODE";
10621         case SVt_PVGV:          return (char *) (isGV_with_GP(sv)
10622                                     ? "GLOB" : "SCALAR");
10623         case SVt_PVFM:          return "FORMAT";
10624         case SVt_PVIO:          return "IO";
10625         case SVt_INVLIST:       return "INVLIST";
10626         case SVt_REGEXP:        return "REGEXP";
10627         default:                return "UNKNOWN";
10628         }
10629     }
10630 }
10631
10632 /*
10633 =for apidoc sv_ref
10634
10635 Returns a SV describing what the SV passed in is a reference to.
10636
10637 dst can be a SV to be set to the description or NULL, in which case a
10638 mortal SV is returned.
10639
10640 If ob is true and the SV is blessed, the description is the class
10641 name, otherwise it is the type of the SV, "SCALAR", "ARRAY" etc.
10642
10643 =cut
10644 */
10645
10646 SV *
10647 Perl_sv_ref(pTHX_ SV *dst, const SV *const sv, const int ob)
10648 {
10649     PERL_ARGS_ASSERT_SV_REF;
10650
10651     if (!dst)
10652         dst = sv_newmortal();
10653
10654     if (ob && SvOBJECT(sv)) {
10655         HvNAME_get(SvSTASH(sv))
10656                     ? sv_sethek(dst, HvNAME_HEK(SvSTASH(sv)))
10657                     : sv_setpvs(dst, "__ANON__");
10658     }
10659     else {
10660         const char * reftype = sv_reftype(sv, 0);
10661         sv_setpv(dst, reftype);
10662     }
10663     return dst;
10664 }
10665
10666 /*
10667 =for apidoc sv_isobject
10668
10669 Returns a boolean indicating whether the SV is an RV pointing to a blessed
10670 object.  If the SV is not an RV, or if the object is not blessed, then this
10671 will return false.
10672
10673 =cut
10674 */
10675
10676 int
10677 Perl_sv_isobject(pTHX_ SV *sv)
10678 {
10679     if (!sv)
10680         return 0;
10681     SvGETMAGIC(sv);
10682     if (!SvROK(sv))
10683         return 0;
10684     sv = SvRV(sv);
10685     if (!SvOBJECT(sv))
10686         return 0;
10687     return 1;
10688 }
10689
10690 /*
10691 =for apidoc sv_isa
10692
10693 Returns a boolean indicating whether the SV is blessed into the specified
10694 class.
10695
10696 This does not check for subtypes or method overloading. Use C<sv_isa_sv> to
10697 verify an inheritance relationship in the same way as the C<isa> operator by
10698 respecting any C<isa()> method overloading; or C<sv_derived_from_sv> to test
10699 directly on the actual object type.
10700
10701 =cut
10702 */
10703
10704 int
10705 Perl_sv_isa(pTHX_ SV *sv, const char *const name)
10706 {
10707     const char *hvname;
10708
10709     PERL_ARGS_ASSERT_SV_ISA;
10710
10711     if (!sv)
10712         return 0;
10713     SvGETMAGIC(sv);
10714     if (!SvROK(sv))
10715         return 0;
10716     sv = SvRV(sv);
10717     if (!SvOBJECT(sv))
10718         return 0;
10719     hvname = HvNAME_get(SvSTASH(sv));
10720     if (!hvname)
10721         return 0;
10722
10723     return strEQ(hvname, name);
10724 }
10725
10726 /*
10727 =for apidoc newSVrv
10728
10729 Creates a new SV for the existing RV, C<rv>, to point to.  If C<rv> is not an
10730 RV then it will be upgraded to one.  If C<classname> is non-null then the new
10731 SV will be blessed in the specified package.  The new SV is returned and its
10732 reference count is 1.  The reference count 1 is owned by C<rv>. See also
10733 newRV_inc() and newRV_noinc() for creating a new RV properly.
10734
10735 =cut
10736 */
10737
10738 SV*
10739 Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
10740 {
10741     SV *sv;
10742
10743     PERL_ARGS_ASSERT_NEWSVRV;
10744
10745     new_SV(sv);
10746
10747     SV_CHECK_THINKFIRST_COW_DROP(rv);
10748
10749     if (UNLIKELY( SvTYPE(rv) >= SVt_PVMG )) {
10750         const U32 refcnt = SvREFCNT(rv);
10751         SvREFCNT(rv) = 0;
10752         sv_clear(rv);
10753         SvFLAGS(rv) = 0;
10754         SvREFCNT(rv) = refcnt;
10755
10756         sv_upgrade(rv, SVt_IV);
10757     } else if (SvROK(rv)) {
10758         SvREFCNT_dec(SvRV(rv));
10759     } else {
10760         prepare_SV_for_RV(rv);
10761     }
10762
10763     SvOK_off(rv);
10764     SvRV_set(rv, sv);
10765     SvROK_on(rv);
10766
10767     if (classname) {
10768         HV* const stash = gv_stashpv(classname, GV_ADD);
10769         (void)sv_bless(rv, stash);
10770     }
10771     return sv;
10772 }
10773
10774 SV *
10775 Perl_newSVavdefelem(pTHX_ AV *av, SSize_t ix, bool extendible)
10776 {
10777     SV * const lv = newSV_type(SVt_PVLV);
10778     PERL_ARGS_ASSERT_NEWSVAVDEFELEM;
10779     LvTYPE(lv) = 'y';
10780     sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
10781     LvTARG(lv) = SvREFCNT_inc_simple_NN(av);
10782     LvSTARGOFF(lv) = ix;
10783     LvTARGLEN(lv) = extendible ? 1 : (STRLEN)UV_MAX;
10784     return lv;
10785 }
10786
10787 /*
10788 =for apidoc sv_setref_pv
10789
10790 Copies a pointer into a new SV, optionally blessing the SV.  The C<rv>
10791 argument will be upgraded to an RV.  That RV will be modified to point to
10792 the new SV.  If the C<pv> argument is C<NULL>, then C<PL_sv_undef> will be placed
10793 into the SV.  The C<classname> argument indicates the package for the
10794 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10795 will have a reference count of 1, and the RV will be returned.
10796
10797 Do not use with other Perl types such as HV, AV, SV, CV, because those
10798 objects will become corrupted by the pointer copy process.
10799
10800 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
10801
10802 =cut
10803 */
10804
10805 SV*
10806 Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
10807 {
10808     PERL_ARGS_ASSERT_SV_SETREF_PV;
10809
10810     if (!pv) {
10811         sv_set_undef(rv);
10812         SvSETMAGIC(rv);
10813     }
10814     else
10815         sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
10816     return rv;
10817 }
10818
10819 /*
10820 =for apidoc sv_setref_iv
10821
10822 Copies an integer into a new SV, optionally blessing the SV.  The C<rv>
10823 argument will be upgraded to an RV.  That RV will be modified to point to
10824 the new SV.  The C<classname> argument indicates the package for the
10825 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10826 will have a reference count of 1, and the RV will be returned.
10827
10828 =cut
10829 */
10830
10831 SV*
10832 Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
10833 {
10834     PERL_ARGS_ASSERT_SV_SETREF_IV;
10835
10836     sv_setiv(newSVrv(rv,classname), iv);
10837     return rv;
10838 }
10839
10840 /*
10841 =for apidoc sv_setref_uv
10842
10843 Copies an unsigned integer into a new SV, optionally blessing the SV.  The C<rv>
10844 argument will be upgraded to an RV.  That RV will be modified to point to
10845 the new SV.  The C<classname> argument indicates the package for the
10846 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10847 will have a reference count of 1, and the RV will be returned.
10848
10849 =cut
10850 */
10851
10852 SV*
10853 Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
10854 {
10855     PERL_ARGS_ASSERT_SV_SETREF_UV;
10856
10857     sv_setuv(newSVrv(rv,classname), uv);
10858     return rv;
10859 }
10860
10861 /*
10862 =for apidoc sv_setref_nv
10863
10864 Copies a double into a new SV, optionally blessing the SV.  The C<rv>
10865 argument will be upgraded to an RV.  That RV will be modified to point to
10866 the new SV.  The C<classname> argument indicates the package for the
10867 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10868 will have a reference count of 1, and the RV will be returned.
10869
10870 =cut
10871 */
10872
10873 SV*
10874 Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
10875 {
10876     PERL_ARGS_ASSERT_SV_SETREF_NV;
10877
10878     sv_setnv(newSVrv(rv,classname), nv);
10879     return rv;
10880 }
10881
10882 /*
10883 =for apidoc sv_setref_pvn
10884
10885 Copies a string into a new SV, optionally blessing the SV.  The length of the
10886 string must be specified with C<n>.  The C<rv> argument will be upgraded to
10887 an RV.  That RV will be modified to point to the new SV.  The C<classname>
10888 argument indicates the package for the blessing.  Set C<classname> to
10889 C<NULL> to avoid the blessing.  The new SV will have a reference count
10890 of 1, and the RV will be returned.
10891
10892 Note that C<sv_setref_pv> copies the pointer while this copies the string.
10893
10894 =cut
10895 */
10896
10897 SV*
10898 Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
10899                    const char *const pv, const STRLEN n)
10900 {
10901     PERL_ARGS_ASSERT_SV_SETREF_PVN;
10902
10903     sv_setpvn(newSVrv(rv,classname), pv, n);
10904     return rv;
10905 }
10906
10907 /*
10908 =for apidoc sv_bless
10909
10910 Blesses an SV into a specified package.  The SV must be an RV.  The package
10911 must be designated by its stash (see C<L</gv_stashpv>>).  The reference count
10912 of the SV is unaffected.
10913
10914 =cut
10915 */
10916
10917 SV*
10918 Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
10919 {
10920     SV *tmpRef;
10921     HV *oldstash = NULL;
10922
10923     PERL_ARGS_ASSERT_SV_BLESS;
10924
10925     SvGETMAGIC(sv);
10926     if (!SvROK(sv))
10927         Perl_croak(aTHX_ "Can't bless non-reference value");
10928     tmpRef = SvRV(sv);
10929     if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY|SVf_PROTECT)) {
10930         if (SvREADONLY(tmpRef))
10931             Perl_croak_no_modify();
10932         if (SvOBJECT(tmpRef)) {
10933             oldstash = SvSTASH(tmpRef);
10934         }
10935     }
10936     SvOBJECT_on(tmpRef);
10937     SvUPGRADE(tmpRef, SVt_PVMG);
10938     SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
10939     SvREFCNT_dec(oldstash);
10940
10941     if(SvSMAGICAL(tmpRef))
10942         if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
10943             mg_set(tmpRef);
10944
10945
10946
10947     return sv;
10948 }
10949
10950 /* Downgrades a PVGV to a PVMG. If it's actually a PVLV, we leave the type
10951  * as it is after unglobbing it.
10952  */
10953
10954 PERL_STATIC_INLINE void
10955 S_sv_unglob(pTHX_ SV *const sv, U32 flags)
10956 {
10957     void *xpvmg;
10958     HV *stash;
10959     SV * const temp = flags & SV_COW_DROP_PV ? NULL : sv_newmortal();
10960
10961     PERL_ARGS_ASSERT_SV_UNGLOB;
10962
10963     assert(SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV);
10964     SvFAKE_off(sv);
10965     if (!(flags & SV_COW_DROP_PV))
10966         gv_efullname3(temp, MUTABLE_GV(sv), "*");
10967
10968     SvREFCNT_inc_simple_void_NN(sv_2mortal(sv));
10969     if (GvGP(sv)) {
10970         if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
10971            && HvNAME_get(stash))
10972             mro_method_changed_in(stash);
10973         gp_free(MUTABLE_GV(sv));
10974     }
10975     if (GvSTASH(sv)) {
10976         sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
10977         GvSTASH(sv) = NULL;
10978     }
10979     GvMULTI_off(sv);
10980     if (GvNAME_HEK(sv)) {
10981         unshare_hek(GvNAME_HEK(sv));
10982     }
10983     isGV_with_GP_off(sv);
10984
10985     if(SvTYPE(sv) == SVt_PVGV) {
10986         /* need to keep SvANY(sv) in the right arena */
10987         xpvmg = new_XPVMG();
10988         StructCopy(SvANY(sv), xpvmg, XPVMG);
10989         del_body_by_type(SvANY(sv), SVt_PVGV);
10990         SvANY(sv) = xpvmg;
10991
10992         SvFLAGS(sv) &= ~SVTYPEMASK;
10993         SvFLAGS(sv) |= SVt_PVMG;
10994     }
10995
10996     /* Intentionally not calling any local SET magic, as this isn't so much a
10997        set operation as merely an internal storage change.  */
10998     if (flags & SV_COW_DROP_PV) SvOK_off(sv);
10999     else sv_setsv_flags(sv, temp, 0);
11000
11001     if ((const GV *)sv == PL_last_in_gv)
11002         PL_last_in_gv = NULL;
11003     else if ((const GV *)sv == PL_statgv)
11004         PL_statgv = NULL;
11005 }
11006
11007 /*
11008 =for apidoc sv_unref_flags
11009
11010 Unsets the RV status of the SV, and decrements the reference count of
11011 whatever was being referenced by the RV.  This can almost be thought of
11012 as a reversal of C<newSVrv>.  The C<cflags> argument can contain
11013 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
11014 (otherwise the decrementing is conditional on the reference count being
11015 different from one or the reference being a readonly SV).
11016 See C<L</SvROK_off>>.
11017
11018 =for apidoc Amnh||SV_IMMEDIATE_UNREF
11019
11020 =cut
11021 */
11022
11023 void
11024 Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
11025 {
11026     SV* const target = SvRV(ref);
11027
11028     PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
11029
11030     if (SvWEAKREF(ref)) {
11031         sv_del_backref(target, ref);
11032         SvWEAKREF_off(ref);
11033         SvRV_set(ref, NULL);
11034         return;
11035     }
11036     SvRV_set(ref, NULL);
11037     SvROK_off(ref);
11038     /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
11039        assigned to as BEGIN {$a = \"Foo"} will fail.  */
11040     if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
11041         SvREFCNT_dec_NN(target);
11042     else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
11043         sv_2mortal(target);     /* Schedule for freeing later */
11044 }
11045
11046 /*
11047 =for apidoc sv_untaint
11048
11049 Untaint an SV.  Use C<SvTAINTED_off> instead.
11050
11051 =cut
11052 */
11053
11054 void
11055 Perl_sv_untaint(pTHX_ SV *const sv)
11056 {
11057     PERL_ARGS_ASSERT_SV_UNTAINT;
11058     PERL_UNUSED_CONTEXT;
11059
11060     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
11061         MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
11062         if (mg)
11063             mg->mg_len &= ~1;
11064     }
11065 }
11066
11067 /*
11068 =for apidoc sv_tainted
11069
11070 Test an SV for taintedness.  Use C<SvTAINTED> instead.
11071
11072 =cut
11073 */
11074
11075 bool
11076 Perl_sv_tainted(pTHX_ SV *const sv)
11077 {
11078     PERL_ARGS_ASSERT_SV_TAINTED;
11079     PERL_UNUSED_CONTEXT;
11080
11081     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
11082         const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
11083         if (mg && (mg->mg_len & 1) )
11084             return TRUE;
11085     }
11086     return FALSE;
11087 }
11088
11089 #ifndef NO_MATHOMS  /* Can't move these to mathoms.c because call uiv_2buf(),
11090                        private to this file */
11091
11092 /*
11093 =for apidoc sv_setpviv
11094 =for apidoc_item sv_setpviv_mg
11095
11096 These copy an integer into the given SV, also updating its string value.
11097
11098 They differ only in that C<sv_setpviv_mg> performs 'set' magic; C<sv_setpviv>
11099 skips any magic.
11100
11101 =cut
11102 */
11103
11104 void
11105 Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
11106 {
11107     /* The purpose of this union is to ensure that arr is aligned on
11108        a 2 byte boundary, because that is what uiv_2buf() requires */
11109     union {
11110         char arr[TYPE_CHARS(UV)];
11111         U16 dummy;
11112     } buf;
11113     char *ebuf;
11114     char * const ptr = uiv_2buf(buf.arr, iv, 0, 0, &ebuf);
11115
11116     PERL_ARGS_ASSERT_SV_SETPVIV;
11117
11118     sv_setpvn(sv, ptr, ebuf - ptr);
11119 }
11120
11121 void
11122 Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
11123 {
11124     PERL_ARGS_ASSERT_SV_SETPVIV_MG;
11125
11126     GCC_DIAG_IGNORE_STMT(-Wdeprecated-declarations);
11127
11128     sv_setpviv(sv, iv);
11129
11130     GCC_DIAG_RESTORE_STMT;
11131
11132     SvSETMAGIC(sv);
11133 }
11134
11135 #endif  /* NO_MATHOMS */
11136
11137 #if defined(MULTIPLICITY)
11138
11139 /* pTHX_ magic can't cope with varargs, so this is a no-context
11140  * version of the main function, (which may itself be aliased to us).
11141  * Don't access this version directly.
11142  */
11143
11144 void
11145 Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
11146 {
11147     dTHX;
11148     va_list args;
11149
11150     PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
11151
11152     va_start(args, pat);
11153     sv_vsetpvf(sv, pat, &args);
11154     va_end(args);
11155 }
11156
11157 /* pTHX_ magic can't cope with varargs, so this is a no-context
11158  * version of the main function, (which may itself be aliased to us).
11159  * Don't access this version directly.
11160  */
11161
11162 void
11163 Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
11164 {
11165     dTHX;
11166     va_list args;
11167
11168     PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
11169
11170     va_start(args, pat);
11171     sv_vsetpvf_mg(sv, pat, &args);
11172     va_end(args);
11173 }
11174 #endif
11175
11176 /*
11177 =for apidoc sv_setpvf
11178 =for apidoc_item sv_setpvf_nocontext
11179 =for apidoc_item sv_setpvf_mg
11180 =for apidoc_item sv_setpvf_mg_nocontext
11181
11182 These work like C<L</sv_catpvf>> but copy the text into the SV instead of
11183 appending it.
11184
11185 The differences between these are:
11186
11187 C<sv_setpvf> and C<sv_setpvf_nocontext> do not handle 'set' magic;
11188 C<sv_setpvf_mg> and C<sv_setpvf_mg_nocontext> do.
11189
11190 C<sv_setpvf_nocontext> and C<sv_setpvf_mg_nocontext> do not take a thread
11191 context (C<aTHX>) parameter, so are used in situations where the caller
11192 doesn't already have the thread context.
11193
11194 =cut
11195 */
11196
11197 void
11198 Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
11199 {
11200     va_list args;
11201
11202     PERL_ARGS_ASSERT_SV_SETPVF;
11203
11204     va_start(args, pat);
11205     sv_vsetpvf(sv, pat, &args);
11206     va_end(args);
11207 }
11208
11209 /*
11210 =for apidoc sv_vsetpvf
11211 =for apidoc_item sv_vsetpvf_mg
11212
11213 These work like C<L</sv_vcatpvf>> but copy the text into the SV instead of
11214 appending it.
11215
11216 They differ only in that C<sv_vsetpvf_mg> performs 'set' magic;
11217 C<sv_vsetpvf> skips all magic.
11218
11219 They are usually used via their frontends, C<L</sv_setpvf>> and
11220 C<L</sv_setpvf_mg>>.
11221
11222 =cut
11223 */
11224
11225 void
11226 Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
11227 {
11228     PERL_ARGS_ASSERT_SV_VSETPVF;
11229
11230     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
11231 }
11232
11233 void
11234 Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
11235 {
11236     va_list args;
11237
11238     PERL_ARGS_ASSERT_SV_SETPVF_MG;
11239
11240     va_start(args, pat);
11241     sv_vsetpvf_mg(sv, pat, &args);
11242     va_end(args);
11243 }
11244
11245 void
11246 Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
11247 {
11248     PERL_ARGS_ASSERT_SV_VSETPVF_MG;
11249
11250     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
11251     SvSETMAGIC(sv);
11252 }
11253
11254 #if defined(MULTIPLICITY)
11255
11256 /* pTHX_ magic can't cope with varargs, so this is a no-context
11257  * version of the main function, (which may itself be aliased to us).
11258  * Don't access this version directly.
11259  */
11260
11261 void
11262 Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
11263 {
11264     dTHX;
11265     va_list args;
11266
11267     PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
11268
11269     va_start(args, pat);
11270     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
11271     va_end(args);
11272 }
11273
11274 /* pTHX_ magic can't cope with varargs, so this is a no-context
11275  * version of the main function, (which may itself be aliased to us).
11276  * Don't access this version directly.
11277  */
11278
11279 void
11280 Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
11281 {
11282     dTHX;
11283     va_list args;
11284
11285     PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
11286
11287     va_start(args, pat);
11288     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
11289     SvSETMAGIC(sv);
11290     va_end(args);
11291 }
11292 #endif
11293
11294 /*
11295 =for apidoc sv_catpvf
11296 =for apidoc_item sv_catpvf_nocontext
11297 =for apidoc_item sv_catpvf_mg
11298 =for apidoc_item sv_catpvf_mg_nocontext
11299
11300 These process their arguments like C<sprintf>, and append the formatted
11301 output to an SV.  As with C<sv_vcatpvfn>, argument reordering is not supporte
11302 when called with a non-null C-style variable argument list.
11303
11304 If the appended data contains "wide" characters
11305 (including, but not limited to, SVs with a UTF-8 PV formatted with C<%s>,
11306 and characters >255 formatted with C<%c>), the original SV might get
11307 upgraded to UTF-8.
11308
11309 If the original SV was UTF-8, the pattern should be
11310 valid UTF-8; if the original SV was bytes, the pattern should be too.
11311
11312 All perform 'get' magic, but only C<sv_catpvf_mg> and C<sv_catpvf_mg_nocontext>
11313 perform 'set' magic.
11314
11315 C<sv_catpvf_nocontext> and C<sv_catpvf_mg_nocontext> do not take a thread
11316 context (C<aTHX>) parameter, so are used in situations where the caller
11317 doesn't already have the thread context.
11318
11319 =cut
11320 */
11321
11322 void
11323 Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
11324 {
11325     va_list args;
11326
11327     PERL_ARGS_ASSERT_SV_CATPVF;
11328
11329     va_start(args, pat);
11330     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
11331     va_end(args);
11332 }
11333
11334 /*
11335 =for apidoc sv_vcatpvf
11336 =for apidoc_item sv_vcatpvf_mg
11337
11338 These process their arguments like C<sv_vcatpvfn> called with a non-null
11339 C-style variable argument list, and append the formatted output to C<sv>.
11340
11341 They differ only in that C<sv_vcatpvf_mg> performs 'set' magic;
11342 C<sv_vcatpvf> skips 'set' magic.
11343
11344 Both perform 'get' magic.
11345
11346 They are usually accessed via their frontends C<L</sv_catpvf>> and
11347 C<L</sv_catpvf_mg>>.
11348
11349 =cut
11350 */
11351
11352 void
11353 Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
11354 {
11355     PERL_ARGS_ASSERT_SV_VCATPVF;
11356
11357     sv_vcatpvfn_flags(sv, pat, strlen(pat), args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
11358 }
11359
11360 void
11361 Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
11362 {
11363     va_list args;
11364
11365     PERL_ARGS_ASSERT_SV_CATPVF_MG;
11366
11367     va_start(args, pat);
11368     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
11369     SvSETMAGIC(sv);
11370     va_end(args);
11371 }
11372
11373 void
11374 Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
11375 {
11376     PERL_ARGS_ASSERT_SV_VCATPVF_MG;
11377
11378     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
11379     SvSETMAGIC(sv);
11380 }
11381
11382 /*
11383 =for apidoc sv_vsetpvfn
11384
11385 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
11386 appending it.
11387
11388 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
11389
11390 =cut
11391 */
11392
11393 void
11394 Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
11395                  va_list *const args, SV **const svargs, const Size_t sv_count, bool *const maybe_tainted)
11396 {
11397     PERL_ARGS_ASSERT_SV_VSETPVFN;
11398
11399     SvPVCLEAR(sv);
11400     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, sv_count, maybe_tainted, 0);
11401 }
11402
11403
11404 /* simplified inline Perl_sv_catpvn_nomg() when you know the SV's SvPOK */
11405
11406 PERL_STATIC_INLINE void
11407 S_sv_catpvn_simple(pTHX_ SV *const sv, const char* const buf, const STRLEN len)
11408 {
11409     STRLEN const need = len + SvCUR(sv) + 1;
11410     char *end;
11411
11412     /* can't wrap as both len and SvCUR() are allocated in
11413      * memory and together can't consume all the address space
11414      */
11415     assert(need > len);
11416
11417     assert(SvPOK(sv));
11418     SvGROW(sv, need);
11419     end = SvEND(sv);
11420     Copy(buf, end, len, char);
11421     end += len;
11422     *end = '\0';
11423     SvCUR_set(sv, need - 1);
11424 }
11425
11426
11427 /*
11428  * Warn of missing argument to sprintf. The value used in place of such
11429  * arguments should be &PL_sv_no; an undefined value would yield
11430  * inappropriate "use of uninit" warnings [perl #71000].
11431  */
11432 STATIC void
11433 S_warn_vcatpvfn_missing_argument(pTHX) {
11434     if (ckWARN(WARN_MISSING)) {
11435         Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
11436                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
11437     }
11438 }
11439
11440
11441 static void
11442 S_croak_overflow()
11443 {
11444     dTHX;
11445     Perl_croak(aTHX_ "Integer overflow in format string for %s",
11446                     (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
11447 }
11448
11449
11450 /* Given an int i from the next arg (if args is true) or an sv from an arg
11451  * (if args is false), try to extract a STRLEN-ranged value from the arg,
11452  * with overflow checking.
11453  * Sets *neg to true if the value was negative (untouched otherwise.
11454  * Returns the absolute value.
11455  * As an extra margin of safety, it croaks if the returned value would
11456  * exceed the maximum value of a STRLEN / 4.
11457  */
11458
11459 static STRLEN
11460 S_sprintf_arg_num_val(pTHX_ va_list *const args, int i, SV *sv, bool *neg)
11461 {
11462     IV iv;
11463
11464     if (args) {
11465         iv = i;
11466         goto do_iv;
11467     }
11468
11469     if (!sv)
11470         return 0;
11471
11472     SvGETMAGIC(sv);
11473
11474     if (UNLIKELY(SvIsUV(sv))) {
11475         UV uv = SvUV_nomg(sv);
11476         if (uv > IV_MAX)
11477             S_croak_overflow();
11478         iv = uv;
11479     }
11480     else {
11481         iv = SvIV_nomg(sv);
11482       do_iv:
11483         if (iv < 0) {
11484             if (iv < -IV_MAX)
11485                 S_croak_overflow();
11486             iv = -iv;
11487             *neg = TRUE;
11488         }
11489     }
11490
11491     if (iv > (IV)(((STRLEN)~0) / 4))
11492         S_croak_overflow();
11493
11494     return (STRLEN)iv;
11495 }
11496
11497 /* Read in and return a number. Updates *pattern to point to the char
11498  * following the number. Expects the first char to 1..9.
11499  * Croaks if the number exceeds 1/4 of the maximum value of STRLEN.
11500  * This is a belt-and-braces safety measure to complement any
11501  * overflow/wrap checks done in the main body of sv_vcatpvfn_flags.
11502  * It means that e.g. on a 32-bit system the width/precision can't be more
11503  * than 1G, which seems reasonable.
11504  */
11505
11506 STATIC STRLEN
11507 S_expect_number(pTHX_ const char **const pattern)
11508 {
11509     STRLEN var;
11510
11511     PERL_ARGS_ASSERT_EXPECT_NUMBER;
11512
11513     assert(inRANGE(**pattern, '1', '9'));
11514
11515     var = *(*pattern)++ - '0';
11516     while (isDIGIT(**pattern)) {
11517         /* if var * 10 + 9 would exceed 1/4 max strlen, croak */
11518         if (var > ((((STRLEN)~0) / 4 - 9) / 10))
11519             S_croak_overflow();
11520         var = var * 10 + (*(*pattern)++ - '0');
11521     }
11522     return var;
11523 }
11524
11525 /* Implement a fast "%.0f": given a pointer to the end of a buffer (caller
11526  * ensures it's big enough), back fill it with the rounded integer part of
11527  * nv. Returns ptr to start of string, and sets *len to its length.
11528  * Returns NULL if not convertible.
11529  */
11530
11531 STATIC char *
11532 S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
11533 {
11534     const int neg = nv < 0;
11535     UV uv;
11536
11537     PERL_ARGS_ASSERT_F0CONVERT;
11538
11539     assert(!Perl_isinfnan(nv));
11540     if (neg)
11541         nv = -nv;
11542     if (nv != 0.0 && nv < (NV) UV_MAX) {
11543         char *p = endbuf;
11544         uv = (UV)nv;
11545         if (uv != nv) {
11546             nv += 0.5;
11547             uv = (UV)nv;
11548             if (uv & 1 && uv == nv)
11549                 uv--;                   /* Round to even */
11550         }
11551         do {
11552             const unsigned dig = uv % 10;
11553             *--p = '0' + dig;
11554         } while (uv /= 10);
11555         if (neg)
11556             *--p = '-';
11557         *len = endbuf - p;
11558         return p;
11559     }
11560     return NULL;
11561 }
11562
11563
11564 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
11565
11566 void
11567 Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
11568                  va_list *const args, SV **const svargs, const Size_t sv_count, bool *const maybe_tainted)
11569 {
11570     PERL_ARGS_ASSERT_SV_VCATPVFN;
11571
11572     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, sv_count, maybe_tainted, SV_GMAGIC|SV_SMAGIC);
11573 }
11574
11575
11576 /* For the vcatpvfn code, we need a long double target in case
11577  * HAS_LONG_DOUBLE, even without USE_LONG_DOUBLE, so that we can printf
11578  * with long double formats, even without NV being long double.  But we
11579  * call the target 'fv' instead of 'nv', since most of the time it is not
11580  * (most compilers these days recognize "long double", even if only as a
11581  * synonym for "double").
11582 */
11583 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE && \
11584         defined(PERL_PRIgldbl) && !defined(USE_QUADMATH)
11585 #  define VCATPVFN_FV_GF PERL_PRIgldbl
11586 #  if defined(__VMS) && defined(__ia64) && defined(__IEEE_FLOAT)
11587        /* Work around breakage in OTS$CVT_FLOAT_T_X */
11588 #    define VCATPVFN_NV_TO_FV(nv,fv)                    \
11589             STMT_START {                                \
11590                 double _dv = nv;                        \
11591                 fv = Perl_isnan(_dv) ? LDBL_QNAN : _dv; \
11592             } STMT_END
11593 #  else
11594 #    define VCATPVFN_NV_TO_FV(nv,fv) (fv)=(nv)
11595 #  endif
11596    typedef long double vcatpvfn_long_double_t;
11597 #else
11598 #  define VCATPVFN_FV_GF NVgf
11599 #  define VCATPVFN_NV_TO_FV(nv,fv) (fv)=(nv)
11600    typedef NV vcatpvfn_long_double_t;
11601 #endif
11602
11603 #ifdef LONGDOUBLE_DOUBLEDOUBLE
11604 /* The first double can be as large as 2**1023, or '1' x '0' x 1023.
11605  * The second double can be as small as 2**-1074, or '0' x 1073 . '1'.
11606  * The sum of them can be '1' . '0' x 2096 . '1', with implied radix point
11607  * after the first 1023 zero bits.
11608  *
11609  * XXX The 2098 is quite large (262.25 bytes) and therefore some sort
11610  * of dynamically growing buffer might be better, start at just 16 bytes
11611  * (for example) and grow only when necessary.  Or maybe just by looking
11612  * at the exponents of the two doubles? */
11613 #  define DOUBLEDOUBLE_MAXBITS 2098
11614 #endif
11615
11616 /* vhex will contain the values (0..15) of the hex digits ("nybbles"
11617  * of 4 bits); 1 for the implicit 1, and the mantissa bits, four bits
11618  * per xdigit.  For the double-double case, this can be rather many.
11619  * The non-double-double-long-double overshoots since all bits of NV
11620  * are not mantissa bits, there are also exponent bits. */
11621 #ifdef LONGDOUBLE_DOUBLEDOUBLE
11622 #  define VHEX_SIZE (3+DOUBLEDOUBLE_MAXBITS/4)
11623 #else
11624 #  define VHEX_SIZE (1+(NVSIZE * 8)/4)
11625 #endif
11626
11627 /* If we do not have a known long double format, (including not using
11628  * long doubles, or long doubles being equal to doubles) then we will
11629  * fall back to the ldexp/frexp route, with which we can retrieve at
11630  * most as many bits as our widest unsigned integer type is.  We try
11631  * to get a 64-bit unsigned integer even if we are not using a 64-bit UV.
11632  *
11633  * (If you want to test the case of UVSIZE == 4, NVSIZE == 8,
11634  *  set the MANTISSATYPE to int and the MANTISSASIZE to 4.)
11635  */
11636 #if defined(HAS_QUAD) && defined(Uquad_t)
11637 #  define MANTISSATYPE Uquad_t
11638 #  define MANTISSASIZE 8
11639 #else
11640 #  define MANTISSATYPE UV
11641 #  define MANTISSASIZE UVSIZE
11642 #endif
11643
11644 #if defined(DOUBLE_LITTLE_ENDIAN) || defined(LONGDOUBLE_LITTLE_ENDIAN)
11645 #  define HEXTRACT_LITTLE_ENDIAN
11646 #elif defined(DOUBLE_BIG_ENDIAN) || defined(LONGDOUBLE_BIG_ENDIAN)
11647 #  define HEXTRACT_BIG_ENDIAN
11648 #else
11649 #  define HEXTRACT_MIX_ENDIAN
11650 #endif
11651
11652 /* S_hextract() is a helper for S_format_hexfp, for extracting
11653  * the hexadecimal values (for %a/%A).  The nv is the NV where the value
11654  * are being extracted from (either directly from the long double in-memory
11655  * presentation, or from the uquad computed via frexp+ldexp).  frexp also
11656  * is used to update the exponent.  The subnormal is set to true
11657  * for IEEE 754 subnormals/denormals (including the x86 80-bit format).
11658  * The vhex is the pointer to the beginning of the output buffer of VHEX_SIZE.
11659  *
11660  * The tricky part is that S_hextract() needs to be called twice:
11661  * the first time with vend as NULL, and the second time with vend as
11662  * the pointer returned by the first call.  What happens is that on
11663  * the first round the output size is computed, and the intended
11664  * extraction sanity checked.  On the second round the actual output
11665  * (the extraction of the hexadecimal values) takes place.
11666  * Sanity failures cause fatal failures during both rounds. */
11667 STATIC U8*
11668 S_hextract(pTHX_ const NV nv, int* exponent, bool *subnormal,
11669            U8* vhex, U8* vend)
11670 {
11671     U8* v = vhex;
11672     int ix;
11673     int ixmin = 0, ixmax = 0;
11674
11675     /* XXX Inf/NaN are not handled here, since it is
11676      * assumed they are to be output as "Inf" and "NaN". */
11677
11678     /* These macros are just to reduce typos, they have multiple
11679      * repetitions below, but usually only one (or sometimes two)
11680      * of them is really being used. */
11681     /* HEXTRACT_OUTPUT() extracts the high nybble first. */
11682 #define HEXTRACT_OUTPUT_HI(ix) (*v++ = nvp[ix] >> 4)
11683 #define HEXTRACT_OUTPUT_LO(ix) (*v++ = nvp[ix] & 0xF)
11684 #define HEXTRACT_OUTPUT(ix) \
11685     STMT_START { \
11686       HEXTRACT_OUTPUT_HI(ix); HEXTRACT_OUTPUT_LO(ix); \
11687    } STMT_END
11688 #define HEXTRACT_COUNT(ix, c) \
11689     STMT_START { \
11690       v += c; if (ix < ixmin) ixmin = ix; else if (ix > ixmax) ixmax = ix; \
11691    } STMT_END
11692 #define HEXTRACT_BYTE(ix) \
11693     STMT_START { \
11694       if (vend) HEXTRACT_OUTPUT(ix); else HEXTRACT_COUNT(ix, 2); \
11695    } STMT_END
11696 #define HEXTRACT_LO_NYBBLE(ix) \
11697     STMT_START { \
11698       if (vend) HEXTRACT_OUTPUT_LO(ix); else HEXTRACT_COUNT(ix, 1); \
11699    } STMT_END
11700     /* HEXTRACT_TOP_NYBBLE is just convenience disguise,
11701      * to make it look less odd when the top bits of a NV
11702      * are extracted using HEXTRACT_LO_NYBBLE: the highest
11703      * order bits can be in the "low nybble" of a byte. */
11704 #define HEXTRACT_TOP_NYBBLE(ix) HEXTRACT_LO_NYBBLE(ix)
11705 #define HEXTRACT_BYTES_LE(a, b) \
11706     for (ix = a; ix >= b; ix--) { HEXTRACT_BYTE(ix); }
11707 #define HEXTRACT_BYTES_BE(a, b) \
11708     for (ix = a; ix <= b; ix++) { HEXTRACT_BYTE(ix); }
11709 #define HEXTRACT_GET_SUBNORMAL(nv) *subnormal = Perl_fp_class_denorm(nv)
11710 #define HEXTRACT_IMPLICIT_BIT(nv) \
11711     STMT_START { \
11712         if (!*subnormal) { \
11713             if (vend) *v++ = ((nv) == 0.0) ? 0 : 1; else v++; \
11714         } \
11715    } STMT_END
11716
11717 /* Most formats do.  Those which don't should undef this.
11718  *
11719  * But also note that IEEE 754 subnormals do not have it, or,
11720  * expressed alternatively, their implicit bit is zero. */
11721 #define HEXTRACT_HAS_IMPLICIT_BIT
11722
11723 /* Many formats do.  Those which don't should undef this. */
11724 #define HEXTRACT_HAS_TOP_NYBBLE
11725
11726     /* HEXTRACTSIZE is the maximum number of xdigits. */
11727 #if defined(USE_LONG_DOUBLE) && defined(LONGDOUBLE_DOUBLEDOUBLE)
11728 #  define HEXTRACTSIZE (2+DOUBLEDOUBLE_MAXBITS/4)
11729 #else
11730 #  define HEXTRACTSIZE 2 * NVSIZE
11731 #endif
11732
11733     const U8* vmaxend = vhex + HEXTRACTSIZE;
11734
11735     assert(HEXTRACTSIZE <= VHEX_SIZE);
11736
11737     PERL_UNUSED_VAR(ix); /* might happen */
11738     (void)Perl_frexp(PERL_ABS(nv), exponent);
11739     *subnormal = FALSE;
11740     if (vend && (vend <= vhex || vend > vmaxend)) {
11741         /* diag_listed_as: Hexadecimal float: internal error (%s) */
11742         Perl_croak(aTHX_ "Hexadecimal float: internal error (entry)");
11743     }
11744     {
11745         /* First check if using long doubles. */
11746 #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE)
11747 #  if LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN
11748         /* Used in e.g. VMS and HP-UX IA-64, e.g. -0.1L:
11749          * 9a 99 99 99 99 99 99 99 99 99 99 99 99 99 fb bf */
11750         /* The bytes 13..0 are the mantissa/fraction,
11751          * the 15,14 are the sign+exponent. */
11752         const U8* nvp = (const U8*)(&nv);
11753         HEXTRACT_GET_SUBNORMAL(nv);
11754         HEXTRACT_IMPLICIT_BIT(nv);
11755 #    undef HEXTRACT_HAS_TOP_NYBBLE
11756         HEXTRACT_BYTES_LE(13, 0);
11757 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN
11758         /* Used in e.g. Solaris Sparc and HP-UX PA-RISC, e.g. -0.1L:
11759          * bf fb 99 99 99 99 99 99 99 99 99 99 99 99 99 9a */
11760         /* The bytes 2..15 are the mantissa/fraction,
11761          * the 0,1 are the sign+exponent. */
11762         const U8* nvp = (const U8*)(&nv);
11763         HEXTRACT_GET_SUBNORMAL(nv);
11764         HEXTRACT_IMPLICIT_BIT(nv);
11765 #    undef HEXTRACT_HAS_TOP_NYBBLE
11766         HEXTRACT_BYTES_BE(2, 15);
11767 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN
11768         /* x86 80-bit "extended precision", 64 bits of mantissa / fraction /
11769          * significand, 15 bits of exponent, 1 bit of sign.  No implicit bit.
11770          * NVSIZE can be either 12 (ILP32, Solaris x86) or 16 (LP64, Linux
11771          * and OS X), meaning that 2 or 6 bytes are empty padding. */
11772         /* The bytes 0..1 are the sign+exponent,
11773          * the bytes 2..9 are the mantissa/fraction. */
11774         const U8* nvp = (const U8*)(&nv);
11775 #    undef HEXTRACT_HAS_IMPLICIT_BIT
11776 #    undef HEXTRACT_HAS_TOP_NYBBLE
11777         HEXTRACT_GET_SUBNORMAL(nv);
11778         HEXTRACT_BYTES_LE(7, 0);
11779 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN
11780         /* Does this format ever happen? (Wikipedia says the Motorola
11781          * 6888x math coprocessors used format _like_ this but padded
11782          * to 96 bits with 16 unused bits between the exponent and the
11783          * mantissa.) */
11784         const U8* nvp = (const U8*)(&nv);
11785 #    undef HEXTRACT_HAS_IMPLICIT_BIT
11786 #    undef HEXTRACT_HAS_TOP_NYBBLE
11787         HEXTRACT_GET_SUBNORMAL(nv);
11788         HEXTRACT_BYTES_BE(0, 7);
11789 #  else
11790 #    define HEXTRACT_FALLBACK
11791         /* Double-double format: two doubles next to each other.
11792          * The first double is the high-order one, exactly like
11793          * it would be for a "lone" double.  The second double
11794          * is shifted down using the exponent so that that there
11795          * are no common bits.  The tricky part is that the value
11796          * of the double-double is the SUM of the two doubles and
11797          * the second one can be also NEGATIVE.
11798          *
11799          * Because of this tricky construction the bytewise extraction we
11800          * use for the other long double formats doesn't work, we must
11801          * extract the values bit by bit.
11802          *
11803          * The little-endian double-double is used .. somewhere?
11804          *
11805          * The big endian double-double is used in e.g. PPC/Power (AIX)
11806          * and MIPS (SGI).
11807          *
11808          * The mantissa bits are in two separate stretches, e.g. for -0.1L:
11809          * 9a 99 99 99 99 99 59 bc 9a 99 99 99 99 99 b9 3f (LE)
11810          * 3f b9 99 99 99 99 99 9a bc 59 99 99 99 99 99 9a (BE)
11811          */
11812 #  endif
11813 #else /* #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE) */
11814         /* Using normal doubles, not long doubles.
11815          *
11816          * We generate 4-bit xdigits (nybble/nibble) instead of 8-bit
11817          * bytes, since we might need to handle printf precision, and
11818          * also need to insert the radix. */
11819 #  if NVSIZE == 8
11820 #    ifdef HEXTRACT_LITTLE_ENDIAN
11821         /* 0 1 2 3 4 5 6 7 (MSB = 7, LSB = 0, 6+7 = exponent+sign) */
11822         const U8* nvp = (const U8*)(&nv);
11823         HEXTRACT_GET_SUBNORMAL(nv);
11824         HEXTRACT_IMPLICIT_BIT(nv);
11825         HEXTRACT_TOP_NYBBLE(6);
11826         HEXTRACT_BYTES_LE(5, 0);
11827 #    elif defined(HEXTRACT_BIG_ENDIAN)
11828         /* 7 6 5 4 3 2 1 0 (MSB = 7, LSB = 0, 6+7 = exponent+sign) */
11829         const U8* nvp = (const U8*)(&nv);
11830         HEXTRACT_GET_SUBNORMAL(nv);
11831         HEXTRACT_IMPLICIT_BIT(nv);
11832         HEXTRACT_TOP_NYBBLE(1);
11833         HEXTRACT_BYTES_BE(2, 7);
11834 #    elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_LE_BE
11835         /* 4 5 6 7 0 1 2 3 (MSB = 7, LSB = 0, 6:7 = nybble:exponent:sign) */
11836         const U8* nvp = (const U8*)(&nv);
11837         HEXTRACT_GET_SUBNORMAL(nv);
11838         HEXTRACT_IMPLICIT_BIT(nv);
11839         HEXTRACT_TOP_NYBBLE(2); /* 6 */
11840         HEXTRACT_BYTE(1); /* 5 */
11841         HEXTRACT_BYTE(0); /* 4 */
11842         HEXTRACT_BYTE(7); /* 3 */
11843         HEXTRACT_BYTE(6); /* 2 */
11844         HEXTRACT_BYTE(5); /* 1 */
11845         HEXTRACT_BYTE(4); /* 0 */
11846 #    elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_BE_LE
11847         /* 3 2 1 0 7 6 5 4 (MSB = 7, LSB = 0, 7:6 = sign:exponent:nybble) */
11848         const U8* nvp = (const U8*)(&nv);
11849         HEXTRACT_GET_SUBNORMAL(nv);
11850         HEXTRACT_IMPLICIT_BIT(nv);
11851         HEXTRACT_TOP_NYBBLE(5); /* 6 */
11852         HEXTRACT_BYTE(6); /* 5 */
11853         HEXTRACT_BYTE(7); /* 4 */
11854         HEXTRACT_BYTE(0); /* 3 */
11855         HEXTRACT_BYTE(1); /* 2 */
11856         HEXTRACT_BYTE(2); /* 1 */
11857         HEXTRACT_BYTE(3); /* 0 */
11858 #    else
11859 #      define HEXTRACT_FALLBACK
11860 #    endif
11861 #  else
11862 #    define HEXTRACT_FALLBACK
11863 #  endif
11864 #endif /* #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE) #else */
11865
11866 #ifdef HEXTRACT_FALLBACK
11867         HEXTRACT_GET_SUBNORMAL(nv);
11868 #  undef HEXTRACT_HAS_TOP_NYBBLE /* Meaningless, but consistent. */
11869         /* The fallback is used for the double-double format, and
11870          * for unknown long double formats, and for unknown double
11871          * formats, or in general unknown NV formats. */
11872         if (nv == (NV)0.0) {
11873             if (vend)
11874                 *v++ = 0;
11875             else
11876                 v++;
11877             *exponent = 0;
11878         }
11879         else {
11880             NV d = nv < 0 ? -nv : nv;
11881             NV e = (NV)1.0;
11882             U8 ha = 0x0; /* hexvalue accumulator */
11883             U8 hd = 0x8; /* hexvalue digit */
11884
11885             /* Shift d and e (and update exponent) so that e <= d < 2*e,
11886              * this is essentially manual frexp(). Multiplying by 0.5 and
11887              * doubling should be lossless in binary floating point. */
11888
11889             *exponent = 1;
11890
11891             while (e > d) {
11892                 e *= (NV)0.5;
11893                 (*exponent)--;
11894             }
11895             /* Now d >= e */
11896
11897             while (d >= e + e) {
11898                 e += e;
11899                 (*exponent)++;
11900             }
11901             /* Now e <= d < 2*e */
11902
11903             /* First extract the leading hexdigit (the implicit bit). */
11904             if (d >= e) {
11905                 d -= e;
11906                 if (vend)
11907                     *v++ = 1;
11908                 else
11909                     v++;
11910             }
11911             else {
11912                 if (vend)
11913                     *v++ = 0;
11914                 else
11915                     v++;
11916             }
11917             e *= (NV)0.5;
11918
11919             /* Then extract the remaining hexdigits. */
11920             while (d > (NV)0.0) {
11921                 if (d >= e) {
11922                     ha |= hd;
11923                     d -= e;
11924                 }
11925                 if (hd == 1) {
11926                     /* Output or count in groups of four bits,
11927                      * that is, when the hexdigit is down to one. */
11928                     if (vend)
11929                         *v++ = ha;
11930                     else
11931                         v++;
11932                     /* Reset the hexvalue. */
11933                     ha = 0x0;
11934                     hd = 0x8;
11935                 }
11936                 else
11937                     hd >>= 1;
11938                 e *= (NV)0.5;
11939             }
11940
11941             /* Flush possible pending hexvalue. */
11942             if (ha) {
11943                 if (vend)
11944                     *v++ = ha;
11945                 else
11946                     v++;
11947             }
11948         }
11949 #endif
11950     }
11951     /* Croak for various reasons: if the output pointer escaped the
11952      * output buffer, if the extraction index escaped the extraction
11953      * buffer, or if the ending output pointer didn't match the
11954      * previously computed value. */
11955     if (v <= vhex || v - vhex >= VHEX_SIZE ||
11956         /* For double-double the ixmin and ixmax stay at zero,
11957          * which is convenient since the HEXTRACTSIZE is tricky
11958          * for double-double. */
11959         ixmin < 0 || ixmax >= NVSIZE ||
11960         (vend && v != vend)) {
11961         /* diag_listed_as: Hexadecimal float: internal error (%s) */
11962         Perl_croak(aTHX_ "Hexadecimal float: internal error (overflow)");
11963     }
11964     return v;
11965 }
11966
11967
11968 /* S_format_hexfp(): helper function for Perl_sv_vcatpvfn_flags().
11969  *
11970  * Processes the %a/%A hexadecimal floating-point format, since the
11971  * built-in snprintf()s which are used for most of the f/p formats, don't
11972  * universally handle %a/%A.
11973  * Populates buf of length bufsize, and returns the length of the created
11974  * string.
11975  * The rest of the args have the same meaning as the local vars of the
11976  * same name within Perl_sv_vcatpvfn_flags().
11977  *
11978  * The caller's determination of IN_LC(LC_NUMERIC), passed as in_lc_numeric,
11979  * is used to ensure we do the right thing when we need to access the locale's
11980  * numeric radix.
11981  *
11982  * It requires the caller to make buf large enough.
11983  */
11984
11985 static STRLEN
11986 S_format_hexfp(pTHX_ char * const buf, const STRLEN bufsize, const char c,
11987                     const NV nv, const vcatpvfn_long_double_t fv,
11988                     bool has_precis, STRLEN precis, STRLEN width,
11989                     bool alt, char plus, bool left, bool fill, bool in_lc_numeric)
11990 {
11991     /* Hexadecimal floating point. */
11992     char* p = buf;
11993     U8 vhex[VHEX_SIZE];
11994     U8* v = vhex; /* working pointer to vhex */
11995     U8* vend; /* pointer to one beyond last digit of vhex */
11996     U8* vfnz = NULL; /* first non-zero */
11997     U8* vlnz = NULL; /* last non-zero */
11998     U8* v0 = NULL; /* first output */
11999     const bool lower = (c == 'a');
12000     /* At output the values of vhex (up to vend) will
12001      * be mapped through the xdig to get the actual
12002      * human-readable xdigits. */
12003     const char* xdig = PL_hexdigit;
12004     STRLEN zerotail = 0; /* how many extra zeros to append */
12005     int exponent = 0; /* exponent of the floating point input */
12006     bool hexradix = FALSE; /* should we output the radix */
12007     bool subnormal = FALSE; /* IEEE 754 subnormal/denormal */
12008     bool negative = FALSE;
12009     STRLEN elen;
12010
12011     /* XXX: NaN, Inf -- though they are printed as "NaN" and "Inf".
12012      *
12013      * For example with denormals, (assuming the vanilla
12014      * 64-bit double): the exponent is zero. 1xp-1074 is
12015      * the smallest denormal and the smallest double, it
12016      * could be output also as 0x0.0000000000001p-1022 to
12017      * match its internal structure. */
12018
12019     vend = S_hextract(aTHX_ nv, &exponent, &subnormal, vhex, NULL);
12020     S_hextract(aTHX_ nv, &exponent, &subnormal, vhex, vend);
12021
12022 #if NVSIZE > DOUBLESIZE
12023 #  ifdef HEXTRACT_HAS_IMPLICIT_BIT
12024     /* In this case there is an implicit bit,
12025      * and therefore the exponent is shifted by one. */
12026     exponent--;
12027 #  elif defined(NV_X86_80_BIT)
12028     if (subnormal) {
12029         /* The subnormals of the x86-80 have a base exponent of -16382,
12030          * (while the physical exponent bits are zero) but the frexp()
12031          * returned the scientific-style floating exponent.  We want
12032          * to map the last one as:
12033          * -16831..-16384 -> -16382 (the last normal is 0x1p-16382)
12034          * -16835..-16388 -> -16384
12035          * since we want to keep the first hexdigit
12036          * as one of the [8421]. */
12037         exponent = -4 * ( (exponent + 1) / -4) - 2;
12038     } else {
12039         exponent -= 4;
12040     }
12041     /* TBD: other non-implicit-bit platforms than the x86-80. */
12042 #  endif
12043 #endif
12044
12045     negative = fv < 0 || Perl_signbit(nv);
12046     if (negative)
12047         *p++ = '-';
12048     else if (plus)
12049         *p++ = plus;
12050     *p++ = '0';
12051     if (lower) {
12052         *p++ = 'x';
12053     }
12054     else {
12055         *p++ = 'X';
12056         xdig += 16; /* Use uppercase hex. */
12057     }
12058
12059     /* Find the first non-zero xdigit. */
12060     for (v = vhex; v < vend; v++) {
12061         if (*v) {
12062             vfnz = v;
12063             break;
12064         }
12065     }
12066
12067     if (vfnz) {
12068         /* Find the last non-zero xdigit. */
12069         for (v = vend - 1; v >= vhex; v--) {
12070             if (*v) {
12071                 vlnz = v;
12072                 break;
12073             }
12074         }
12075
12076 #if NVSIZE == DOUBLESIZE
12077         if (fv != 0.0)
12078             exponent--;
12079 #endif
12080
12081         if (subnormal) {
12082 #ifndef NV_X86_80_BIT
12083           if (vfnz[0] > 1) {
12084             /* IEEE 754 subnormals (but not the x86 80-bit):
12085              * we want "normalize" the subnormal,
12086              * so we need to right shift the hex nybbles
12087              * so that the output of the subnormal starts
12088              * from the first true bit.  (Another, equally
12089              * valid, policy would be to dump the subnormal
12090              * nybbles as-is, to display the "physical" layout.) */
12091             int i, n;
12092             U8 *vshr;
12093             /* Find the ceil(log2(v[0])) of
12094              * the top non-zero nybble. */
12095             for (i = vfnz[0], n = 0; i > 1; i >>= 1, n++) { }
12096             assert(n < 4);
12097             assert(vlnz);
12098             vlnz[1] = 0;
12099             for (vshr = vlnz; vshr >= vfnz; vshr--) {
12100               vshr[1] |= (vshr[0] & (0xF >> (4 - n))) << (4 - n);
12101               vshr[0] >>= n;
12102             }
12103             if (vlnz[1]) {
12104               vlnz++;
12105             }
12106           }
12107 #endif
12108           v0 = vfnz;
12109         } else {
12110           v0 = vhex;
12111         }
12112
12113         if (has_precis) {
12114             U8* ve = (subnormal ? vlnz + 1 : vend);
12115             SSize_t vn = ve - v0;
12116             assert(vn >= 1);
12117             if (precis < (Size_t)(vn - 1)) {
12118                 bool overflow = FALSE;
12119                 if (v0[precis + 1] < 0x8) {
12120                     /* Round down, nothing to do. */
12121                 } else if (v0[precis + 1] > 0x8) {
12122                     /* Round up. */
12123                     v0[precis]++;
12124                     overflow = v0[precis] > 0xF;
12125                     v0[precis] &= 0xF;
12126                 } else { /* v0[precis] == 0x8 */
12127                     /* Half-point: round towards the one
12128                      * with the even least-significant digit:
12129                      * 08 -> 0  88 -> 8
12130                      * 18 -> 2  98 -> a
12131                      * 28 -> 2  a8 -> a
12132                      * 38 -> 4  b8 -> c
12133                      * 48 -> 4  c8 -> c
12134                      * 58 -> 6  d8 -> e
12135                      * 68 -> 6  e8 -> e
12136                      * 78 -> 8  f8 -> 10 */
12137                     if ((v0[precis] & 0x1)) {
12138                         v0[precis]++;
12139                     }
12140                     overflow = v0[precis] > 0xF;
12141                     v0[precis] &= 0xF;
12142                 }
12143
12144                 if (overflow) {
12145                     for (v = v0 + precis - 1; v >= v0; v--) {
12146                         (*v)++;
12147                         overflow = *v > 0xF;
12148                         (*v) &= 0xF;
12149                         if (!overflow) {
12150                             break;
12151                         }
12152                     }
12153                     if (v == v0 - 1 && overflow) {
12154                         /* If the overflow goes all the
12155                          * way to the front, we need to
12156                          * insert 0x1 in front, and adjust
12157                          * the exponent. */
12158                         Move(v0, v0 + 1, vn - 1, char);
12159                         *v0 = 0x1;
12160                         exponent += 4;
12161                     }
12162                 }
12163
12164                 /* The new effective "last non zero". */
12165                 vlnz = v0 + precis;
12166             }
12167             else {
12168                 zerotail =
12169                   subnormal ? precis - vn + 1 :
12170                   precis - (vlnz - vhex);
12171             }
12172         }
12173
12174         v = v0;
12175         *p++ = xdig[*v++];
12176
12177         /* If there are non-zero xdigits, the radix
12178          * is output after the first one. */
12179         if (vfnz < vlnz) {
12180           hexradix = TRUE;
12181         }
12182     }
12183     else {
12184         *p++ = '0';
12185         exponent = 0;
12186         zerotail = has_precis ? precis : 0;
12187     }
12188
12189     /* The radix is always output if precis, or if alt. */
12190     if ((has_precis && precis > 0) || alt) {
12191       hexradix = TRUE;
12192     }
12193
12194     if (hexradix) {
12195 #ifndef USE_LOCALE_NUMERIC
12196         PERL_UNUSED_ARG(in_lc_numeric);
12197
12198         *p++ = '.';
12199 #else
12200         if (in_lc_numeric) {
12201             STRLEN n;
12202             WITH_LC_NUMERIC_SET_TO_NEEDED_IN(TRUE, {
12203                 const char* r = SvPV(PL_numeric_radix_sv, n);
12204                 Copy(r, p, n, char);
12205             });
12206             p += n;
12207         }
12208         else {
12209             *p++ = '.';
12210         }
12211 #endif
12212     }
12213
12214     if (vlnz) {
12215         while (v <= vlnz)
12216             *p++ = xdig[*v++];
12217     }
12218
12219     if (zerotail > 0) {
12220       while (zerotail--) {
12221         *p++ = '0';
12222       }
12223     }
12224
12225     elen = p - buf;
12226
12227     /* sanity checks */
12228     if (elen >= bufsize || width >= bufsize)
12229         /* diag_listed_as: Hexadecimal float: internal error (%s) */
12230         Perl_croak(aTHX_ "Hexadecimal float: internal error (overflow)");
12231
12232     elen += my_snprintf(p, bufsize - elen,
12233                         "%c%+d", lower ? 'p' : 'P',
12234                         exponent);
12235
12236     if (elen < width) {
12237         STRLEN gap = (STRLEN)(width - elen);
12238         if (left) {
12239             /* Pad the back with spaces. */
12240             memset(buf + elen, ' ', gap);
12241         }
12242         else if (fill) {
12243             /* Insert the zeros after the "0x" and the
12244              * the potential sign, but before the digits,
12245              * otherwise we end up with "0000xH.HHH...",
12246              * when we want "0x000H.HHH..."  */
12247             STRLEN nzero = gap;
12248             char* zerox = buf + 2;
12249             STRLEN nmove = elen - 2;
12250             if (negative || plus) {
12251                 zerox++;
12252                 nmove--;
12253             }
12254             Move(zerox, zerox + nzero, nmove, char);
12255             memset(zerox, fill ? '0' : ' ', nzero);
12256         }
12257         else {
12258             /* Move it to the right. */
12259             Move(buf, buf + gap,
12260                  elen, char);
12261             /* Pad the front with spaces. */
12262             memset(buf, ' ', gap);
12263         }
12264         elen = width;
12265     }
12266     return elen;
12267 }
12268
12269 /*
12270 =for apidoc sv_vcatpvfn
12271 =for apidoc_item sv_vcatpvfn_flags
12272
12273 These process their arguments like C<L<vsprintf(3)>> and append the formatted output
12274 to an SV.  They use an array of SVs if the C-style variable argument list is
12275 missing (C<NULL>). Argument reordering (using format specifiers like C<%2$d> or
12276 C<%*2$d>) is supported only when using an array of SVs; using a C-style
12277 C<va_list> argument list with a format string that uses argument reordering
12278 will yield an exception.
12279
12280 When running with taint checks enabled, they indicate via C<maybe_tainted> if
12281 results are untrustworthy (often due to the use of locales).
12282
12283 They assume that C<pat> has the same utf8-ness as C<sv>.  It's the caller's
12284 responsibility to ensure that this is so.
12285
12286 They differ in that C<sv_vcatpvfn_flags> has a C<flags> parameter in which you
12287 can set or clear the C<SV_GMAGIC> and/or S<SV_SMAGIC> flags, to specify which
12288 magic to handle or not handle; whereas plain C<sv_vcatpvfn> always specifies
12289 both 'get' and 'set' magic.
12290
12291 They are usually used via one of the frontends C<sv_vcatpvf> and
12292 C<sv_vcatpvf_mg>.
12293
12294 =cut
12295 */
12296
12297
12298 void
12299 Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
12300                        va_list *const args, SV **const svargs, const Size_t sv_count, bool *const maybe_tainted,
12301                        const U32 flags)
12302 {
12303     const char *fmtstart; /* character following the current '%' */
12304     const char *q;        /* current position within format */
12305     const char *patend;
12306     STRLEN origlen;
12307     Size_t svix = 0;
12308     static const char nullstr[] = "(null)";
12309     bool has_utf8 = DO_UTF8(sv);    /* has the result utf8? */
12310     const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
12311     /* Times 4: a decimal digit takes more than 3 binary digits.
12312      * NV_DIG: mantissa takes that many decimal digits.
12313      * Plus 32: Playing safe. */
12314     char ebuf[IV_DIG * 4 + NV_DIG + 32];
12315     bool no_redundant_warning = FALSE; /* did we use any explicit format parameter index? */
12316 #ifdef USE_LOCALE_NUMERIC
12317     bool have_in_lc_numeric = FALSE;
12318 #endif
12319     /* we never change this unless USE_LOCALE_NUMERIC */
12320     bool in_lc_numeric = FALSE;
12321
12322     PERL_ARGS_ASSERT_SV_VCATPVFN_FLAGS;
12323     PERL_UNUSED_ARG(maybe_tainted);
12324
12325     if (flags & SV_GMAGIC)
12326         SvGETMAGIC(sv);
12327
12328     /* no matter what, this is a string now */
12329     (void)SvPV_force_nomg(sv, origlen);
12330
12331     /* the code that scans for flags etc following a % relies on
12332      * a '\0' being present to avoid falling off the end. Ideally that
12333      * should be fixed */
12334     assert(pat[patlen] == '\0');
12335
12336
12337     /* Special-case "", "%s", "%-p" (SVf - see below) and "%.0f".
12338      * In each case, if there isn't the correct number of args, instead
12339      * fall through to the main code to handle the issuing of any
12340      * warnings etc.
12341      */
12342
12343     if (patlen == 0 && (args || sv_count == 0))
12344         return;
12345
12346     if (patlen <= 4 && pat[0] == '%' && (args || sv_count == 1)) {
12347
12348         /* "%s" */
12349         if (patlen == 2 && pat[1] == 's') {
12350             if (args) {
12351                 const char * const s = va_arg(*args, char*);
12352                 sv_catpv_nomg(sv, s ? s : nullstr);
12353             }
12354             else {
12355                 /* we want get magic on the source but not the target.
12356                  * sv_catsv can't do that, though */
12357                 SvGETMAGIC(*svargs);
12358                 sv_catsv_nomg(sv, *svargs);
12359             }
12360             return;
12361         }
12362
12363         /* "%-p" */
12364         if (args) {
12365             if (patlen == 3  && pat[1] == '-' && pat[2] == 'p') {
12366                 SV *asv = MUTABLE_SV(va_arg(*args, void*));
12367                 sv_catsv_nomg(sv, asv);
12368                 return;
12369             }
12370         }
12371 #if !defined(USE_LONG_DOUBLE) && !defined(USE_QUADMATH)
12372         /* special-case "%.0f" */
12373         else if (   patlen == 4
12374                  && pat[1] == '.' && pat[2] == '0' && pat[3] == 'f')
12375         {
12376             const NV nv = SvNV(*svargs);
12377             if (LIKELY(!Perl_isinfnan(nv))) {
12378                 STRLEN l;
12379                 char *p;
12380
12381                 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
12382                     sv_catpvn_nomg(sv, p, l);
12383                     return;
12384                 }
12385             }
12386         }
12387 #endif /* !USE_LONG_DOUBLE */
12388     }
12389
12390
12391     patend = (char*)pat + patlen;
12392     for (fmtstart = pat; fmtstart < patend; fmtstart = q) {
12393         char intsize     = 0;         /* size qualifier in "%hi..." etc */
12394         bool alt         = FALSE;     /* has      "%#..."    */
12395         bool left        = FALSE;     /* has      "%-..."    */
12396         bool fill        = FALSE;     /* has      "%0..."    */
12397         char plus        = 0;         /* has      "%+..."    */
12398         STRLEN width     = 0;         /* value of "%NNN..."  */
12399         bool has_precis  = FALSE;     /* has      "%.NNN..." */
12400         STRLEN precis    = 0;         /* value of "%.NNN..." */
12401         int base         = 0;         /* base to print in, e.g. 8 for %o */
12402         UV uv            = 0;         /* the value to print of int-ish args */
12403
12404         bool vectorize   = FALSE;     /* has      "%v..."    */
12405         bool vec_utf8    = FALSE;     /* SvUTF8(vec arg)     */
12406         const U8 *vecstr = NULL;      /* SvPVX(vec arg)      */
12407         STRLEN veclen    = 0;         /* SvCUR(vec arg)      */
12408         const char *dotstr = NULL;    /* separator string for %v */
12409         STRLEN dotstrlen;             /* length of separator string for %v */
12410
12411         Size_t efix      = 0;         /* explicit format parameter index */
12412         const Size_t osvix  = svix;   /* original index in case of bad fmt */
12413
12414         SV *argsv        = NULL;
12415         bool is_utf8     = FALSE;     /* is this item utf8?   */
12416         bool arg_missing = FALSE;     /* give "Missing argument" warning */
12417         char esignbuf[4];             /* holds sign prefix, e.g. "-0x" */
12418         STRLEN esignlen  = 0;         /* length of e.g. "-0x" */
12419         STRLEN zeros     = 0;         /* how many '0' to prepend */
12420
12421         const char *eptr = NULL;      /* the address of the element string */
12422         STRLEN elen      = 0;         /* the length  of the element string */
12423
12424         char c;                       /* the actual format ('d', s' etc) */
12425
12426
12427         /* echo everything up to the next format specification */
12428         for (q = fmtstart; q < patend && *q != '%'; ++q)
12429             {};
12430
12431         if (q > fmtstart) {
12432             if (has_utf8 && !pat_utf8) {
12433                 /* upgrade and copy the bytes of fmtstart..q-1 to utf8 on
12434                  * the fly */
12435                 const char *p;
12436                 char *dst;
12437                 STRLEN need = SvCUR(sv) + (q - fmtstart) + 1;
12438
12439                 for (p = fmtstart; p < q; p++)
12440                     if (!NATIVE_BYTE_IS_INVARIANT(*p))
12441                         need++;
12442                 SvGROW(sv, need);
12443
12444                 dst = SvEND(sv);
12445                 for (p = fmtstart; p < q; p++)
12446                     append_utf8_from_native_byte((U8)*p, (U8**)&dst);
12447                 *dst = '\0';
12448                 SvCUR_set(sv, need - 1);
12449             }
12450             else
12451                 S_sv_catpvn_simple(aTHX_ sv, fmtstart, q - fmtstart);
12452         }
12453         if (q++ >= patend)
12454             break;
12455
12456         fmtstart = q; /* fmtstart is char following the '%' */
12457
12458 /*
12459     We allow format specification elements in this order:
12460         \d+\$              explicit format parameter index
12461         [-+ 0#]+           flags
12462         v|\*(\d+\$)?v      vector with optional (optionally specified) arg
12463         0                  flag (as above): repeated to allow "v02"
12464         \d+|\*(\d+\$)?     width using optional (optionally specified) arg
12465         \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
12466         [hlqLV]            size
12467     [%bcdefginopsuxDFOUX] format (mandatory)
12468 */
12469
12470         if (inRANGE(*q, '1', '9')) {
12471             width = expect_number(&q);
12472             if (*q == '$') {
12473                 if (args)
12474                     Perl_croak_nocontext(
12475                         "Cannot yet reorder sv_vcatpvfn() arguments from va_list");
12476                 ++q;
12477                 efix = (Size_t)width;
12478                 width = 0;
12479                 no_redundant_warning = TRUE;
12480             } else {
12481                 goto gotwidth;
12482             }
12483         }
12484
12485         /* FLAGS */
12486
12487         while (*q) {
12488             switch (*q) {
12489             case ' ':
12490             case '+':
12491                 if (plus == '+' && *q == ' ') /* '+' over ' ' */
12492                     q++;
12493                 else
12494                     plus = *q++;
12495                 continue;
12496
12497             case '-':
12498                 left = TRUE;
12499                 q++;
12500                 continue;
12501
12502             case '0':
12503                 fill = TRUE;
12504                 q++;
12505                 continue;
12506
12507             case '#':
12508                 alt = TRUE;
12509                 q++;
12510                 continue;
12511
12512             default:
12513                 break;
12514             }
12515             break;
12516         }
12517
12518       /* at this point we can expect one of:
12519        *
12520        *  123  an explicit width
12521        *  *    width taken from next arg
12522        *  *12$ width taken from 12th arg
12523        *       or no width
12524        *
12525        * But any width specification may be preceded by a v, in one of its
12526        * forms:
12527        *        v
12528        *        *v
12529        *        *12$v
12530        * So an asterisk may be either a width specifier or a vector
12531        * separator arg specifier, and we don't know which initially
12532        */
12533
12534       tryasterisk:
12535         if (*q == '*') {
12536             STRLEN ix; /* explicit width/vector separator index */
12537             q++;
12538             if (inRANGE(*q, '1', '9')) {
12539                 ix = expect_number(&q);
12540                 if (*q++ == '$') {
12541                     if (args)
12542                         Perl_croak_nocontext(
12543                             "Cannot yet reorder sv_vcatpvfn() arguments from va_list");
12544                     no_redundant_warning = TRUE;
12545                 } else
12546                     goto unknown;
12547             }
12548             else
12549                 ix = 0;
12550
12551             if (*q == 'v') {
12552                 SV *vecsv;
12553                 /* The asterisk was for  *v, *NNN$v: vectorizing, but not
12554                  * with the default "." */
12555                 q++;
12556                 if (vectorize)
12557                     goto unknown;
12558                 if (args)
12559                     vecsv = va_arg(*args, SV*);
12560                 else {
12561                     ix = ix ? ix - 1 : svix++;
12562                     vecsv = ix < sv_count ? svargs[ix]
12563                                        : (arg_missing = TRUE, &PL_sv_no);
12564                 }
12565                 dotstr = SvPV_const(vecsv, dotstrlen);
12566                 /* Keep the DO_UTF8 test *after* the SvPV call, else things go
12567                    bad with tied or overloaded values that return UTF8.  */
12568                 if (DO_UTF8(vecsv))
12569                     is_utf8 = TRUE;
12570                 else if (has_utf8) {
12571                     vecsv = sv_mortalcopy(vecsv);
12572                     sv_utf8_upgrade(vecsv);
12573                     dotstr = SvPV_const(vecsv, dotstrlen);
12574                     is_utf8 = TRUE;
12575                 }
12576                 vectorize = TRUE;
12577                 goto tryasterisk;
12578             }
12579
12580             /* the asterisk specified a width */
12581             {
12582                 int i = 0;
12583                 SV *width_sv = NULL;
12584                 if (args)
12585                     i = va_arg(*args, int);
12586                 else {
12587                     ix = ix ? ix - 1 : svix++;
12588                     width_sv = (ix < sv_count) ? svargs[ix]
12589                                       : (arg_missing = TRUE, (SV*)NULL);
12590                 }
12591                 width = S_sprintf_arg_num_val(aTHX_ args, i, width_sv, &left);
12592             }
12593         }
12594         else if (*q == 'v') {
12595             q++;
12596             if (vectorize)
12597                 goto unknown;
12598             vectorize = TRUE;
12599             dotstr = ".";
12600             dotstrlen = 1;
12601             goto tryasterisk;
12602
12603         }
12604         else {
12605         /* explicit width? */
12606             if(*q == '0') {
12607                 fill = TRUE;
12608                 q++;
12609             }
12610             if (inRANGE(*q, '1', '9'))
12611                 width = expect_number(&q);
12612         }
12613
12614       gotwidth:
12615
12616         /* PRECISION */
12617
12618         if (*q == '.') {
12619             q++;
12620             if (*q == '*') {
12621                 STRLEN ix; /* explicit precision index */
12622                 q++;
12623                 if (inRANGE(*q, '1', '9')) {
12624                     ix = expect_number(&q);
12625                     if (*q++ == '$') {
12626                         if (args)
12627                             Perl_croak_nocontext(
12628                                 "Cannot yet reorder sv_vcatpvfn() arguments from va_list");
12629                         no_redundant_warning = TRUE;
12630                     } else
12631                         goto unknown;
12632                 }
12633                 else
12634                     ix = 0;
12635
12636                 {
12637                     int i = 0;
12638                     SV *width_sv = NULL;
12639                     bool neg = FALSE;
12640
12641                     if (args)
12642                         i = va_arg(*args, int);
12643                     else {
12644                         ix = ix ? ix - 1 : svix++;
12645                         width_sv = (ix < sv_count) ? svargs[ix]
12646                                           : (arg_missing = TRUE, (SV*)NULL);
12647                     }
12648                     precis = S_sprintf_arg_num_val(aTHX_ args, i, width_sv, &neg);
12649                     has_precis = !neg;
12650                     /* ignore negative precision */
12651                     if (!has_precis)
12652                         precis = 0;
12653                 }
12654             }
12655             else {
12656                 /* although it doesn't seem documented, this code has long
12657                  * behaved so that:
12658                  *   no digits following the '.' is treated like '.0'
12659                  *   the number may be preceded by any number of zeroes,
12660                  *      e.g. "%.0001f", which is the same as "%.1f"
12661                  * so I've kept that behaviour. DAPM May 2017
12662                  */
12663                 while (*q == '0')
12664                     q++;
12665                 precis = inRANGE(*q, '1', '9') ? expect_number(&q) : 0;
12666                 has_precis = TRUE;
12667             }
12668         }
12669
12670         /* SIZE */
12671
12672         switch (*q) {
12673 #ifdef WIN32
12674         case 'I':                       /* Ix, I32x, and I64x */
12675 #  ifdef USE_64_BIT_INT
12676             if (q[1] == '6' && q[2] == '4') {
12677                 q += 3;
12678                 intsize = 'q';
12679                 break;
12680             }
12681 #  endif
12682             if (q[1] == '3' && q[2] == '2') {
12683                 q += 3;
12684                 break;
12685             }
12686 #  ifdef USE_64_BIT_INT
12687             intsize = 'q';
12688 #  endif
12689             q++;
12690             break;
12691 #endif
12692 #if (IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)) || \
12693     (IVSIZE == 4 && !defined(HAS_LONG_DOUBLE))
12694         case 'L':                       /* Ld */
12695             /* FALLTHROUGH */
12696 #  if IVSIZE >= 8
12697         case 'q':                       /* qd */
12698 #  endif
12699             intsize = 'q';
12700             q++;
12701             break;
12702 #endif
12703         case 'l':
12704             ++q;
12705 #if (IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)) || \
12706     (IVSIZE == 4 && !defined(HAS_LONG_DOUBLE))
12707             if (*q == 'l') {    /* lld, llf */
12708                 intsize = 'q';
12709                 ++q;
12710             }
12711             else
12712 #endif
12713                 intsize = 'l';
12714             break;
12715         case 'h':
12716             if (*++q == 'h') {  /* hhd, hhu */
12717                 intsize = 'c';
12718                 ++q;
12719             }
12720             else
12721                 intsize = 'h';
12722             break;
12723 #ifdef USE_QUADMATH
12724         case 'Q':
12725 #endif
12726         case 'V':
12727         case 'z':
12728         case 't':
12729         case 'j':
12730             intsize = *q++;
12731             break;
12732         }
12733
12734         /* CONVERSION */
12735
12736         c = *q++; /* c now holds the conversion type */
12737
12738         /* '%' doesn't have an arg, so skip arg processing */
12739         if (c == '%') {
12740             eptr = q - 1;
12741             elen = 1;
12742             if (vectorize)
12743                 goto unknown;
12744             goto string;
12745         }
12746
12747         if (vectorize && !memCHRs("BbDdiOouUXx", c))
12748             goto unknown;
12749
12750         /* get next arg (individual branches do their own va_arg()
12751          * handling for the args case) */
12752
12753         if (!args) {
12754             efix = efix ? efix - 1 : svix++;
12755             argsv = efix < sv_count ? svargs[efix]
12756                                  : (arg_missing = TRUE, &PL_sv_no);
12757         }
12758
12759
12760         switch (c) {
12761
12762             /* STRINGS */
12763
12764         case 's':
12765             if (args) {
12766                 eptr = va_arg(*args, char*);
12767                 if (eptr)
12768                     if (has_precis)
12769                         elen = my_strnlen(eptr, precis);
12770                     else
12771                         elen = strlen(eptr);
12772                 else {
12773                     eptr = (char *)nullstr;
12774                     elen = sizeof nullstr - 1;
12775                 }
12776             }
12777             else {
12778                 eptr = SvPV_const(argsv, elen);
12779                 if (DO_UTF8(argsv)) {
12780                     STRLEN old_precis = precis;
12781                     if (has_precis && precis < elen) {
12782                         STRLEN ulen = sv_or_pv_len_utf8(argsv, eptr, elen);
12783                         STRLEN p = precis > ulen ? ulen : precis;
12784                         precis = sv_or_pv_pos_u2b(argsv, eptr, p, 0);
12785                                                         /* sticks at end */
12786                     }
12787                     if (width) { /* fudge width (can't fudge elen) */
12788                         if (has_precis && precis < elen)
12789                             width += precis - old_precis;
12790                         else
12791                             width +=
12792                                 elen - sv_or_pv_len_utf8(argsv,eptr,elen);
12793                     }
12794                     is_utf8 = TRUE;
12795                 }
12796             }
12797
12798         string:
12799             if (has_precis && precis < elen)
12800                 elen = precis;
12801             break;
12802
12803             /* INTEGERS */
12804
12805         case 'p':
12806
12807             /* %p extensions:
12808              *
12809              * "%...p" is normally treated like "%...x", except that the
12810              * number to print is the SV's address (or a pointer address
12811              * for C-ish sprintf).
12812              *
12813              * However, the C-ish sprintf variant allows a few special
12814              * extensions. These are currently:
12815              *
12816              * %-p       (SVf)  Like %s, but gets the string from an SV*
12817              *                  arg rather than a char* arg.
12818              *                  (This was previously %_).
12819              *
12820              * %-<num>p         Ditto but like %.<num>s (i.e. num is max width)
12821              *
12822              * %2p       (HEKf) Like %s, but using the key string in a HEK
12823              *
12824              * %3p       (HEKf256) Ditto but like %.256s
12825              *
12826              * %d%lu%4p  (UTF8f) A utf8 string. Consumes 3 args:
12827              *                       (cBOOL(utf8), len, string_buf).
12828              *                   It's handled by the "case 'd'" branch
12829              *                   rather than here.
12830              *
12831              * %<num>p   where num is 1 or > 4: reserved for future
12832              *           extensions. Warns, but then is treated as a
12833              *           general %p (print hex address) format.
12834              */
12835
12836             if (   args
12837                 && !intsize
12838                 && !fill
12839                 && !plus
12840                 && !has_precis
12841                     /* not %*p or %*1$p - any width was explicit */
12842                 && q[-2] != '*'
12843                 && q[-2] != '$'
12844             ) {
12845                 if (left) {                     /* %-p (SVf), %-NNNp */
12846                     if (width) {
12847                         precis = width;
12848                         has_precis = TRUE;
12849                     }
12850                     argsv = MUTABLE_SV(va_arg(*args, void*));
12851                     eptr = SvPV_const(argsv, elen);
12852                     if (DO_UTF8(argsv))
12853                         is_utf8 = TRUE;
12854                     width = 0;
12855                     goto string;
12856                 }
12857                 else if (width == 2 || width == 3) {    /* HEKf, HEKf256 */
12858                     HEK * const hek = va_arg(*args, HEK *);
12859                     eptr = HEK_KEY(hek);
12860                     elen = HEK_LEN(hek);
12861                     if (HEK_UTF8(hek))
12862                         is_utf8 = TRUE;
12863                     if (width == 3) {
12864                         precis = 256;
12865                         has_precis = TRUE;
12866                     }
12867                     width = 0;
12868                     goto string;
12869                 }
12870                 else if (width) {
12871                     Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
12872                          "internal %%<num>p might conflict with future printf extensions");
12873                 }
12874             }
12875
12876             /* treat as normal %...p */
12877
12878             uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
12879             base = 16;
12880             c = 'x';    /* in case the format string contains '#' */
12881             goto do_integer;
12882
12883         case 'c':
12884             /* Ignore any size specifiers, since they're not documented as
12885              * being allowed for %c (ideally we should warn on e.g. '%hc').
12886              * Setting a default intsize, along with a positive
12887              * (which signals unsigned) base, causes, for C-ish use, the
12888              * va_arg to be interpreted as an unsigned int, when it's
12889              * actually signed, which will convert -ve values to high +ve
12890              * values. Note that unlike the libc %c, values > 255 will
12891              * convert to high unicode points rather than being truncated
12892              * to 8 bits. For perlish use, it will do SvUV(argsv), which
12893              * will again convert -ve args to high -ve values.
12894              */
12895             intsize = 0;
12896             base = 1; /* special value that indicates we're doing a 'c' */
12897             goto get_int_arg_val;
12898
12899         case 'D':
12900 #ifdef IV_IS_QUAD
12901             intsize = 'q';
12902 #else
12903             intsize = 'l';
12904 #endif
12905             base = -10;
12906             goto get_int_arg_val;
12907
12908         case 'd':
12909             /* probably just a plain %d, but it might be the start of the
12910              * special UTF8f format, which usually looks something like
12911              * "%d%lu%4p" (the lu may vary by platform)
12912              */
12913             assert((UTF8f)[0] == 'd');
12914             assert((UTF8f)[1] == '%');
12915
12916              if (   args              /* UTF8f only valid for C-ish sprintf */
12917                  && q == fmtstart + 1 /* plain %d, not %....d */
12918                  && patend >= fmtstart + sizeof(UTF8f) - 1 /* long enough */
12919                  && *q == '%'
12920                  && strnEQ(q + 1, (UTF8f) + 2, sizeof(UTF8f) - 3))
12921             {
12922                 /* The argument has already gone through cBOOL, so the cast
12923                    is safe. */
12924                 is_utf8 = (bool)va_arg(*args, int);
12925                 elen = va_arg(*args, UV);
12926                 /* if utf8 length is larger than 0x7ffff..., then it might
12927                  * have been a signed value that wrapped */
12928                 if (elen  > ((~(STRLEN)0) >> 1)) {
12929                     assert(0); /* in DEBUGGING build we want to crash */
12930                     elen = 0; /* otherwise we want to treat this as an empty string */
12931                 }
12932                 eptr = va_arg(*args, char *);
12933                 q += sizeof(UTF8f) - 2;
12934                 goto string;
12935             }
12936
12937             /* FALLTHROUGH */
12938         case 'i':
12939             base = -10;
12940             goto get_int_arg_val;
12941
12942         case 'U':
12943 #ifdef IV_IS_QUAD
12944             intsize = 'q';
12945 #else
12946             intsize = 'l';
12947 #endif
12948             /* FALLTHROUGH */
12949         case 'u':
12950             base = 10;
12951             goto get_int_arg_val;
12952
12953         case 'B':
12954         case 'b':
12955             base = 2;
12956             goto get_int_arg_val;
12957
12958         case 'O':
12959 #ifdef IV_IS_QUAD
12960             intsize = 'q';
12961 #else
12962             intsize = 'l';
12963 #endif
12964             /* FALLTHROUGH */
12965         case 'o':
12966             base = 8;
12967             goto get_int_arg_val;
12968
12969         case 'X':
12970         case 'x':
12971             base = 16;
12972
12973           get_int_arg_val:
12974
12975             if (vectorize) {
12976                 STRLEN ulen;
12977                 SV *vecsv;
12978
12979                 if (base < 0) {
12980                     base = -base;
12981                     if (plus)
12982                          esignbuf[esignlen++] = plus;
12983                 }
12984
12985                 /* initialise the vector string to iterate over */
12986
12987                 vecsv = args ? va_arg(*args, SV*) : argsv;
12988
12989                 /* if this is a version object, we need to convert
12990                  * back into v-string notation and then let the
12991                  * vectorize happen normally
12992                  */
12993                 if (sv_isobject(vecsv) && sv_derived_from(vecsv, "version")) {
12994                     if ( hv_existss(MUTABLE_HV(SvRV(vecsv)), "alpha") ) {
12995                         Perl_ck_warner_d(aTHX_ packWARN(WARN_PRINTF),
12996                         "vector argument not supported with alpha versions");
12997                         vecsv = &PL_sv_no;
12998                     }
12999                     else {
13000                         vecstr = (U8*)SvPV_const(vecsv,veclen);
13001                         vecsv = sv_newmortal();
13002                         scan_vstring((char *)vecstr, (char *)vecstr + veclen,
13003                                      vecsv);
13004                     }
13005                 }
13006                 vecstr = (U8*)SvPV_const(vecsv, veclen);
13007                 vec_utf8 = DO_UTF8(vecsv);
13008
13009               /* This is the re-entry point for when we're iterating
13010                * over the individual characters of a vector arg */
13011               vector:
13012                 if (!veclen)
13013                     goto done_valid_conversion;
13014                 if (vec_utf8)
13015                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
13016                                         UTF8_ALLOW_ANYUV);
13017                 else {
13018                     uv = *vecstr;
13019                     ulen = 1;
13020                 }
13021                 vecstr += ulen;
13022                 veclen -= ulen;
13023             }
13024             else {
13025                 /* test arg for inf/nan. This can trigger an unwanted
13026                  * 'str' overload, so manually force 'num' overload first
13027                  * if necessary */
13028                 if (argsv) {
13029                     SvGETMAGIC(argsv);
13030                     if (UNLIKELY(SvAMAGIC(argsv)))
13031                         argsv = sv_2num(argsv);
13032                     if (UNLIKELY(isinfnansv(argsv)))
13033                         goto handle_infnan_argsv;
13034                 }
13035
13036                 if (base < 0) {
13037                     /* signed int type */
13038                     IV iv;
13039                     base = -base;
13040                     if (args) {
13041                         switch (intsize) {
13042                         case 'c':  iv = (char)va_arg(*args, int);  break;
13043                         case 'h':  iv = (short)va_arg(*args, int); break;
13044                         case 'l':  iv = va_arg(*args, long);       break;
13045                         case 'V':  iv = va_arg(*args, IV);         break;
13046                         case 'z':  iv = va_arg(*args, SSize_t);    break;
13047 #ifdef HAS_PTRDIFF_T
13048                         case 't':  iv = va_arg(*args, ptrdiff_t);  break;
13049 #endif
13050                         default:   iv = va_arg(*args, int);        break;
13051                         case 'j':  iv = (IV) va_arg(*args, PERL_INTMAX_T); break;
13052                         case 'q':
13053 #if IVSIZE >= 8
13054                                    iv = va_arg(*args, Quad_t);     break;
13055 #else
13056                                    goto unknown;
13057 #endif
13058                         }
13059                     }
13060                     else {
13061                         /* assign to tiv then cast to iv to work around
13062                          * 2003 GCC cast bug (gnu.org bugzilla #13488) */
13063                         IV tiv = SvIV_nomg(argsv);
13064                         switch (intsize) {
13065                         case 'c':  iv = (char)tiv;   break;
13066                         case 'h':  iv = (short)tiv;  break;
13067                         case 'l':  iv = (long)tiv;   break;
13068                         case 'V':
13069                         default:   iv = tiv;         break;
13070                         case 'q':
13071 #if IVSIZE >= 8
13072                                    iv = (Quad_t)tiv; break;
13073 #else
13074                                    goto unknown;
13075 #endif
13076                         }
13077                     }
13078
13079                     /* now convert iv to uv */
13080                     if (iv >= 0) {
13081                         uv = iv;
13082                         if (plus)
13083                             esignbuf[esignlen++] = plus;
13084                     }
13085                     else {
13086                         /* Using 0- here to silence bogus warning from MS VC */
13087                         uv = (UV) (0 - (UV) iv);
13088                         esignbuf[esignlen++] = '-';
13089                     }
13090                 }
13091                 else {
13092                     /* unsigned int type */
13093                     if (args) {
13094                         switch (intsize) {
13095                         case 'c': uv = (unsigned char)va_arg(*args, unsigned);
13096                                   break;
13097                         case 'h': uv = (unsigned short)va_arg(*args, unsigned);
13098                                   break;
13099                         case 'l': uv = va_arg(*args, unsigned long); break;
13100                         case 'V': uv = va_arg(*args, UV);            break;
13101                         case 'z': uv = va_arg(*args, Size_t);        break;
13102 #ifdef HAS_PTRDIFF_T
13103                                   /* will sign extend, but there is no
13104                                    * uptrdiff_t, so oh well */
13105                         case 't': uv = va_arg(*args, ptrdiff_t);     break;
13106 #endif
13107                         case 'j': uv = (UV) va_arg(*args, PERL_UINTMAX_T); break;
13108                         default:  uv = va_arg(*args, unsigned);      break;
13109                         case 'q':
13110 #if IVSIZE >= 8
13111                                   uv = va_arg(*args, Uquad_t);       break;
13112 #else
13113                                   goto unknown;
13114 #endif
13115                         }
13116                     }
13117                     else {
13118                         /* assign to tiv then cast to iv to work around
13119                          * 2003 GCC cast bug (gnu.org bugzilla #13488) */
13120                         UV tuv = SvUV_nomg(argsv);
13121                         switch (intsize) {
13122                         case 'c': uv = (unsigned char)tuv;  break;
13123                         case 'h': uv = (unsigned short)tuv; break;
13124                         case 'l': uv = (unsigned long)tuv;  break;
13125                         case 'V':
13126                         default:  uv = tuv;                 break;
13127                         case 'q':
13128 #if IVSIZE >= 8
13129                                   uv = (Uquad_t)tuv;        break;
13130 #else
13131                                   goto unknown;
13132 #endif
13133                         }
13134                     }
13135                 }
13136             }
13137
13138         do_integer:
13139             {
13140                 char *ptr = ebuf + sizeof ebuf;
13141                 unsigned dig;
13142                 zeros = 0;
13143
13144                 switch (base) {
13145                 case 16:
13146                     {
13147                     const char * const p =
13148                             (c == 'X') ? PL_hexdigit + 16 : PL_hexdigit;
13149
13150                         do {
13151                             dig = uv & 15;
13152                             *--ptr = p[dig];
13153                         } while (uv >>= 4);
13154                         if (alt && *ptr != '0') {
13155                             esignbuf[esignlen++] = '0';
13156                             esignbuf[esignlen++] = c;  /* 'x' or 'X' */
13157                         }
13158                         break;
13159                     }
13160                 case 8:
13161                     do {
13162                         dig = uv & 7;
13163                         *--ptr = '0' + dig;
13164                     } while (uv >>= 3);
13165                     if (alt && *ptr != '0')
13166                         *--ptr = '0';
13167                     break;
13168                 case 2:
13169                     do {
13170                         dig = uv & 1;
13171                         *--ptr = '0' + dig;
13172                     } while (uv >>= 1);
13173                     if (alt && *ptr != '0') {
13174                         esignbuf[esignlen++] = '0';
13175                         esignbuf[esignlen++] = c; /* 'b' or 'B' */
13176                     }
13177                     break;
13178
13179                 case 1:
13180                     /* special-case: base 1 indicates a 'c' format:
13181                      * we use the common code for extracting a uv,
13182                      * but handle that value differently here than
13183                      * all the other int types */
13184                     if ((uv > 255 ||
13185                          (!UVCHR_IS_INVARIANT(uv) && SvUTF8(sv)))
13186                         && !IN_BYTES)
13187                     {
13188                         STATIC_ASSERT_STMT(sizeof(ebuf) >= UTF8_MAXBYTES + 1);
13189                         eptr = ebuf;
13190                         elen = uvchr_to_utf8((U8*)eptr, uv) - (U8*)ebuf;
13191                         is_utf8 = TRUE;
13192                     }
13193                     else {
13194                         eptr = ebuf;
13195                         ebuf[0] = (char)uv;
13196                         elen = 1;
13197                     }
13198                     goto string;
13199
13200                 default:                /* it had better be ten or less */
13201                     do {
13202                         dig = uv % base;
13203                         *--ptr = '0' + dig;
13204                     } while (uv /= base);
13205                     break;
13206                 }
13207                 elen = (ebuf + sizeof ebuf) - ptr;
13208                 eptr = ptr;
13209                 if (has_precis) {
13210                     if (precis > elen)
13211                         zeros = precis - elen;
13212                     else if (precis == 0 && elen == 1 && *eptr == '0'
13213                              && !(base == 8 && alt)) /* "%#.0o" prints "0" */
13214                         elen = 0;
13215
13216                     /* a precision nullifies the 0 flag. */
13217                     fill = FALSE;
13218                 }
13219             }
13220             break;
13221
13222             /* FLOATING POINT */
13223
13224         case 'F':
13225             c = 'f';            /* maybe %F isn't supported here */
13226             /* FALLTHROUGH */
13227         case 'e': case 'E':
13228         case 'f':
13229         case 'g': case 'G':
13230         case 'a': case 'A':
13231
13232         {
13233             STRLEN float_need; /* what PL_efloatsize needs to become */
13234             bool hexfp;        /* hexadecimal floating point? */
13235
13236             vcatpvfn_long_double_t fv;
13237             NV                     nv;
13238
13239             /* This is evil, but floating point is even more evil */
13240
13241             /* for SV-style calling, we can only get NV
13242                for C-style calling, we assume %f is double;
13243                for simplicity we allow any of %Lf, %llf, %qf for long double
13244             */
13245             switch (intsize) {
13246 #if defined(USE_QUADMATH)
13247             case 'Q':
13248                 break;
13249 #endif
13250             case 'V':
13251 #if defined(USE_LONG_DOUBLE) || defined(USE_QUADMATH)
13252                 intsize = 'q';
13253 #endif
13254                 break;
13255 /* [perl #20339] - we should accept and ignore %lf rather than die */
13256             case 'l':
13257                 /* FALLTHROUGH */
13258             default:
13259 #if defined(USE_LONG_DOUBLE) || defined(USE_QUADMATH)
13260                 intsize = args ? 0 : 'q';
13261 #endif
13262                 break;
13263             case 'q':
13264 #if defined(HAS_LONG_DOUBLE)
13265                 break;
13266 #else
13267                 /* FALLTHROUGH */
13268 #endif
13269             case 'c':
13270             case 'h':
13271             case 'z':
13272             case 't':
13273             case 'j':
13274                 goto unknown;
13275             }
13276
13277             /* Now we need (long double) if intsize == 'q', else (double). */
13278             if (args) {
13279                 /* Note: do not pull NVs off the va_list with va_arg()
13280                  * (pull doubles instead) because if you have a build
13281                  * with long doubles, you would always be pulling long
13282                  * doubles, which would badly break anyone using only
13283                  * doubles (i.e. the majority of builds). In other
13284                  * words, you cannot mix doubles and long doubles.
13285                  * The only case where you can pull off long doubles
13286                  * is when the format specifier explicitly asks so with
13287                  * e.g. "%Lg". */
13288 #ifdef USE_QUADMATH
13289                 nv = intsize == 'Q' ? va_arg(*args, NV) :
13290                     intsize == 'q' ? va_arg(*args, long double) :
13291                     va_arg(*args, double);
13292                 fv = nv;
13293 #elif LONG_DOUBLESIZE > DOUBLESIZE
13294                 if (intsize == 'q') {
13295                     fv = va_arg(*args, long double);
13296                     nv = fv;
13297                 } else {
13298                     nv = va_arg(*args, double);
13299                     VCATPVFN_NV_TO_FV(nv, fv);
13300                 }
13301 #else
13302                 nv = va_arg(*args, double);
13303                 fv = nv;
13304 #endif
13305             }
13306             else
13307             {
13308                 SvGETMAGIC(argsv);
13309                 /* we jump here if an int-ish format encountered an
13310                  * infinite/Nan argsv. After setting nv/fv, it falls
13311                  * into the isinfnan block which follows */
13312               handle_infnan_argsv:
13313                 nv = SvNV_nomg(argsv);
13314                 VCATPVFN_NV_TO_FV(nv, fv);
13315             }
13316
13317             if (Perl_isinfnan(nv)) {
13318                 if (c == 'c')
13319                     Perl_croak(aTHX_ "Cannot printf %" NVgf " with '%c'",
13320                                nv, (int)c);
13321
13322                 elen = S_infnan_2pv(nv, ebuf, sizeof(ebuf), plus);
13323                 assert(elen);
13324                 eptr = ebuf;
13325                 zeros     = 0;
13326                 esignlen  = 0;
13327                 dotstrlen = 0;
13328                 break;
13329             }
13330
13331             /* special-case "%.0f" */
13332             if (   c == 'f'
13333                 && !precis
13334                 && has_precis
13335                 && !(width || left || plus || alt)
13336                 && !fill
13337                 && intsize != 'q'
13338                 && ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
13339             )
13340                 goto float_concat;
13341
13342             /* Determine the buffer size needed for the various
13343              * floating-point formats.
13344              *
13345              * The basic possibilities are:
13346              *
13347              *               <---P--->
13348              *    %f 1111111.123456789
13349              *    %e       1.111111123e+06
13350              *    %a     0x1.0f4471f9bp+20
13351              *    %g        1111111.12
13352              *    %g        1.11111112e+15
13353              *
13354              * where P is the value of the precision in the format, or 6
13355              * if not specified. Note the two possible output formats of
13356              * %g; in both cases the number of significant digits is <=
13357              * precision.
13358              *
13359              * For most of the format types the maximum buffer size needed
13360              * is precision, plus: any leading 1 or 0x1, the radix
13361              * point, and an exponent.  The difficult one is %f: for a
13362              * large positive exponent it can have many leading digits,
13363              * which needs to be calculated specially. Also %a is slightly
13364              * different in that in the absence of a specified precision,
13365              * it uses as many digits as necessary to distinguish
13366              * different values.
13367              *
13368              * First, here are the constant bits. For ease of calculation
13369              * we over-estimate the needed buffer size, for example by
13370              * assuming all formats have an exponent and a leading 0x1.
13371              *
13372              * Also for production use, add a little extra overhead for
13373              * safety's sake. Under debugging don't, as it means we're
13374              * more likely to quickly spot issues during development.
13375              */
13376
13377             float_need =     1  /* possible unary minus */
13378                           +  4  /* "0x1" plus very unlikely carry */
13379                           +  1  /* default radix point '.' */
13380                           +  2  /* "e-", "p+" etc */
13381                           +  6  /* exponent: up to 16383 (quad fp) */
13382 #ifndef DEBUGGING
13383                           + 20  /* safety net */
13384 #endif
13385                           +  1; /* \0 */
13386
13387
13388             /* determine the radix point len, e.g. length(".") in "1.2" */
13389 #ifdef USE_LOCALE_NUMERIC
13390             /* note that we may either explicitly use PL_numeric_radix_sv
13391              * below, or implicitly, via an snprintf() variant.
13392              * Note also things like ps_AF.utf8 which has
13393              * "\N{ARABIC DECIMAL SEPARATOR} as a radix point */
13394             if (! have_in_lc_numeric) {
13395                 in_lc_numeric = IN_LC(LC_NUMERIC);
13396                 have_in_lc_numeric = TRUE;
13397             }
13398
13399             if (in_lc_numeric) {
13400                 WITH_LC_NUMERIC_SET_TO_NEEDED_IN(TRUE, {
13401                     /* this can't wrap unless PL_numeric_radix_sv is a string
13402                      * consuming virtually all the 32-bit or 64-bit address
13403                      * space
13404                      */
13405                     float_need += (SvCUR(PL_numeric_radix_sv) - 1);
13406
13407                     /* floating-point formats only get utf8 if the radix point
13408                      * is utf8. All other characters in the string are < 128
13409                      * and so can be safely appended to both a non-utf8 and utf8
13410                      * string as-is.
13411                      * Note that this will convert the output to utf8 even if
13412                      * the radix point didn't get output.
13413                      */
13414                     if (SvUTF8(PL_numeric_radix_sv) && !has_utf8) {
13415                         sv_utf8_upgrade(sv);
13416                         has_utf8 = TRUE;
13417                     }
13418                 });
13419             }
13420 #endif
13421
13422             hexfp = FALSE;
13423
13424             if (isALPHA_FOLD_EQ(c, 'f')) {
13425                 /* Determine how many digits before the radix point
13426                  * might be emitted.  frexp() (or frexpl) has some
13427                  * unspecified behaviour for nan/inf/-inf, so lucky we've
13428                  * already handled them above */
13429                 STRLEN digits;
13430                 int i = PERL_INT_MIN;
13431                 (void)Perl_frexp((NV)fv, &i);
13432                 if (i == PERL_INT_MIN)
13433                     Perl_die(aTHX_ "panic: frexp: %" VCATPVFN_FV_GF, fv);
13434
13435                 if (i > 0) {
13436                     digits = BIT_DIGITS(i);
13437                     /* this can't overflow. 'digits' will only be a few
13438                      * thousand even for the largest floating-point types.
13439                      * And up until now float_need is just some small
13440                      * constants plus radix len, which can't be in
13441                      * overflow territory unless the radix SV is consuming
13442                      * over 1/2 the address space */
13443                     assert(float_need < ((STRLEN)~0) - digits);
13444                     float_need += digits;
13445                 }
13446             }
13447             else if (UNLIKELY(isALPHA_FOLD_EQ(c, 'a'))) {
13448                 hexfp = TRUE;
13449                 if (!has_precis) {
13450                     /* %a in the absence of precision may print as many
13451                      * digits as needed to represent the entire mantissa
13452                      * bit pattern.
13453                      * This estimate seriously overshoots in most cases,
13454                      * but better the undershooting.  Firstly, all bytes
13455                      * of the NV are not mantissa, some of them are
13456                      * exponent.  Secondly, for the reasonably common
13457                      * long doubles case, the "80-bit extended", two
13458                      * or six bytes of the NV are unused. Also, we'll
13459                      * still pick up an extra +6 from the default
13460                      * precision calculation below. */
13461                     STRLEN digits =
13462 #ifdef LONGDOUBLE_DOUBLEDOUBLE
13463                         /* For the "double double", we need more.
13464                          * Since each double has their own exponent, the
13465                          * doubles may float (haha) rather far from each
13466                          * other, and the number of required bits is much
13467                          * larger, up to total of DOUBLEDOUBLE_MAXBITS bits.
13468                          * See the definition of DOUBLEDOUBLE_MAXBITS.
13469                          *
13470                          * Need 2 hexdigits for each byte. */
13471                         (DOUBLEDOUBLE_MAXBITS/8 + 1) * 2;
13472 #else
13473                         NVSIZE * 2; /* 2 hexdigits for each byte */
13474 #endif
13475                     /* see "this can't overflow" comment above */
13476                     assert(float_need < ((STRLEN)~0) - digits);
13477                     float_need += digits;
13478                 }
13479             }
13480             /* special-case "%.<number>g" if it will fit in ebuf */
13481             else if (c == 'g'
13482                 && precis   /* See earlier comment about buggy Gconvert
13483                                when digits, aka precis, is 0  */
13484                 && has_precis
13485                 /* check that "%.<number>g" formatting will fit in ebuf  */
13486                 && sizeof(ebuf) - float_need > precis
13487                 /* sizeof(ebuf) - float_need will have wrapped if float_need > sizeof(ebuf).     *
13488                  * Therefore we should check that float_need < sizeof(ebuf). Normally, we would  *
13489                  * have run this check first, but that triggers incorrect -Wformat-overflow      *
13490                  * compilation warnings with some versions of gcc if Gconvert invokes sprintf(). *
13491                  * ( See: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89161 )                   *
13492                  * So, instead, we check it next:                                                */
13493                 && float_need < sizeof(ebuf)
13494                 && !(width || left || plus || alt)
13495                 && !fill
13496                 && intsize != 'q'
13497             ) {
13498                 WITH_LC_NUMERIC_SET_TO_NEEDED_IN(in_lc_numeric,
13499                     SNPRINTF_G(fv, ebuf, sizeof(ebuf), precis)
13500                 );
13501                 elen = strlen(ebuf);
13502                 eptr = ebuf;
13503                 goto float_concat;
13504             }
13505
13506
13507             {
13508                 STRLEN pr = has_precis ? precis : 6; /* known default */
13509                 /* this probably can't wrap, since precis is limited
13510                  * to 1/4 address space size, but better safe than sorry
13511                  */
13512                 if (float_need >= ((STRLEN)~0) - pr)
13513                     croak_memory_wrap();
13514                 float_need += pr;
13515             }
13516
13517             if (float_need < width)
13518                 float_need = width;
13519
13520             if (float_need > INT_MAX) {
13521                 /* snprintf() returns an int, and we use that return value,
13522                    so die horribly if the expected size is too large for int
13523                 */
13524                 Perl_croak(aTHX_ "Numeric format result too large");
13525             }
13526
13527             if (PL_efloatsize <= float_need) {
13528                 /* PL_efloatbuf should be at least 1 greater than
13529                  * float_need to allow a trailing \0 to be returned by
13530                  * snprintf().  If we need to grow, overgrow for the
13531                  * benefit of future generations */
13532                 const STRLEN extra = 0x20;
13533                 if (float_need >= ((STRLEN)~0) - extra)
13534                     croak_memory_wrap();
13535                 float_need += extra;
13536                 Safefree(PL_efloatbuf);
13537                 PL_efloatsize = float_need;
13538                 Newx(PL_efloatbuf, PL_efloatsize, char);
13539                 PL_efloatbuf[0] = '\0';
13540             }
13541
13542             if (UNLIKELY(hexfp)) {
13543                 elen = S_format_hexfp(aTHX_ PL_efloatbuf, PL_efloatsize, c,
13544                                 nv, fv, has_precis, precis, width,
13545                                 alt, plus, left, fill, in_lc_numeric);
13546             }
13547             else {
13548                 char *ptr = ebuf + sizeof ebuf;
13549                 *--ptr = '\0';
13550                 *--ptr = c;
13551 #if defined(USE_QUADMATH)
13552                 /* always use Q here.  my_snprint() throws an exception if we
13553                    fallthrough to the double/long double code, even when the
13554                    format is correct, presumably to avoid any accidentally
13555                    missing Q.
13556                 */
13557                 *--ptr = 'Q';
13558                 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
13559 #elif defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
13560                 /* Note that this is HAS_LONG_DOUBLE and PERL_PRIfldbl,
13561                  * not USE_LONG_DOUBLE and NVff.  In other words,
13562                  * this needs to work without USE_LONG_DOUBLE. */
13563                 if (intsize == 'q') {
13564                     /* Copy the one or more characters in a long double
13565                      * format before the 'base' ([efgEFG]) character to
13566                      * the format string. */
13567                     static char const ldblf[] = PERL_PRIfldbl;
13568                     char const *p = ldblf + sizeof(ldblf) - 3;
13569                     while (p >= ldblf) { *--ptr = *p--; }
13570                 }
13571 #endif
13572                 if (has_precis) {
13573                     base = precis;
13574                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
13575                     *--ptr = '.';
13576                 }
13577                 if (width) {
13578                     base = width;
13579                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
13580                 }
13581                 if (fill)
13582                     *--ptr = '0';
13583                 if (left)
13584                     *--ptr = '-';
13585                 if (plus)
13586                     *--ptr = plus;
13587                 if (alt)
13588                     *--ptr = '#';
13589                 *--ptr = '%';
13590
13591                 /* No taint.  Otherwise we are in the strange situation
13592                  * where printf() taints but print($float) doesn't.
13593                  * --jhi */
13594
13595                 /* hopefully the above makes ptr a very constrained format
13596                  * that is safe to use, even though it's not literal */
13597                 GCC_DIAG_IGNORE_STMT(-Wformat-nonliteral);
13598 #ifdef USE_QUADMATH
13599                 {
13600                     if (!quadmath_format_valid(ptr))
13601                         Perl_croak_nocontext("panic: quadmath invalid format \"%s\"", ptr);
13602                     WITH_LC_NUMERIC_SET_TO_NEEDED_IN(in_lc_numeric,
13603                         elen = quadmath_snprintf(PL_efloatbuf, PL_efloatsize,
13604                                                  ptr, nv);
13605                     );
13606                     if ((IV)elen == -1) {
13607                         Perl_croak_nocontext("panic: quadmath_snprintf failed, format \"%s\"", ptr);
13608                     }
13609                 }
13610 #elif defined(HAS_LONG_DOUBLE)
13611                 WITH_LC_NUMERIC_SET_TO_NEEDED_IN(in_lc_numeric,
13612                     elen = ((intsize == 'q')
13613                             ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, fv)
13614                             : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)fv))
13615                 );
13616 #else
13617                 WITH_LC_NUMERIC_SET_TO_NEEDED_IN(in_lc_numeric,
13618                     elen = my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, fv)
13619                 );
13620 #endif
13621                 GCC_DIAG_RESTORE_STMT;
13622             }
13623
13624             eptr = PL_efloatbuf;
13625
13626           float_concat:
13627
13628             /* Since floating-point formats do their own formatting and
13629              * padding, we skip the main block of code at the end of this
13630              * loop which handles appending eptr to sv, and do our own
13631              * stripped-down version */
13632
13633             assert(!zeros);
13634             assert(!esignlen);
13635             assert(elen);
13636             assert(elen >= width);
13637
13638             S_sv_catpvn_simple(aTHX_ sv, eptr, elen);
13639
13640             goto done_valid_conversion;
13641         }
13642
13643             /* SPECIAL */
13644
13645         case 'n':
13646             {
13647                 STRLEN len;
13648                 /* XXX ideally we should warn if any flags etc have been
13649                  * set, e.g. "%-4.5n" */
13650                 /* XXX if sv was originally non-utf8 with a char in the
13651                  * range 0x80-0xff, then if it got upgraded, we should
13652                  * calculate char len rather than byte len here */
13653                 len = SvCUR(sv) - origlen;
13654                 if (args) {
13655                     int i = (len > PERL_INT_MAX) ? PERL_INT_MAX : (int)len;
13656
13657                     switch (intsize) {
13658                     case 'c':  *(va_arg(*args, char*))      = i; break;
13659                     case 'h':  *(va_arg(*args, short*))     = i; break;
13660                     default:   *(va_arg(*args, int*))       = i; break;
13661                     case 'l':  *(va_arg(*args, long*))      = i; break;
13662                     case 'V':  *(va_arg(*args, IV*))        = i; break;
13663                     case 'z':  *(va_arg(*args, SSize_t*))   = i; break;
13664 #ifdef HAS_PTRDIFF_T
13665                     case 't':  *(va_arg(*args, ptrdiff_t*)) = i; break;
13666 #endif
13667                     case 'j':  *(va_arg(*args, PERL_INTMAX_T*)) = i; break;
13668                     case 'q':
13669 #if IVSIZE >= 8
13670                                *(va_arg(*args, Quad_t*))    = i; break;
13671 #else
13672                                goto unknown;
13673 #endif
13674                     }
13675                 }
13676                 else {
13677                     if (arg_missing)
13678                         Perl_croak_nocontext(
13679                             "Missing argument for %%n in %s",
13680                                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
13681                     sv_setuv_mg(argsv, has_utf8
13682                         ? (UV)utf8_length((U8*)SvPVX(sv), (U8*)SvEND(sv))
13683                         : (UV)len);
13684                 }
13685                 goto done_valid_conversion;
13686             }
13687
13688             /* UNKNOWN */
13689
13690         default:
13691       unknown:
13692             if (!args
13693                 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
13694                 && ckWARN(WARN_PRINTF))
13695             {
13696                 SV * const msg = sv_newmortal();
13697                 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
13698                           (PL_op->op_type == OP_PRTF) ? "" : "s");
13699                 if (fmtstart < patend) {
13700                     const char * const fmtend = q < patend ? q : patend;
13701                     const char * f;
13702                     sv_catpvs(msg, "\"%");
13703                     for (f = fmtstart; f < fmtend; f++) {
13704                         if (isPRINT(*f)) {
13705                             sv_catpvn_nomg(msg, f, 1);
13706                         } else {
13707                             Perl_sv_catpvf(aTHX_ msg, "\\%03o", (U8) *f);
13708                         }
13709                     }
13710                     sv_catpvs(msg, "\"");
13711                 } else {
13712                     sv_catpvs(msg, "end of string");
13713                 }
13714                 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%" SVf, SVfARG(msg)); /* yes, this is reentrant */
13715             }
13716
13717             /* mangled format: output the '%', then continue from the
13718              * character following that */
13719             sv_catpvn_nomg(sv, fmtstart-1, 1);
13720             q = fmtstart;
13721             svix = osvix;
13722             /* Any "redundant arg" warning from now onwards will probably
13723              * just be misleading, so don't bother. */
13724             no_redundant_warning = TRUE;
13725             continue;   /* not "break" */
13726         }
13727
13728         if (is_utf8 != has_utf8) {
13729             if (is_utf8) {
13730                 if (SvCUR(sv))
13731                     sv_utf8_upgrade(sv);
13732             }
13733             else {
13734                 const STRLEN old_elen = elen;
13735                 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
13736                 sv_utf8_upgrade(nsv);
13737                 eptr = SvPVX_const(nsv);
13738                 elen = SvCUR(nsv);
13739
13740                 if (width) { /* fudge width (can't fudge elen) */
13741                     width += elen - old_elen;
13742                 }
13743                 is_utf8 = TRUE;
13744             }
13745         }
13746
13747
13748         /* append esignbuf, filler, zeros, eptr and dotstr to sv */
13749
13750         {
13751             STRLEN need, have, gap;
13752             STRLEN i;
13753             char *s;
13754
13755             /* signed value that's wrapped? */
13756             assert(elen  <= ((~(STRLEN)0) >> 1));
13757
13758             /* if zeros is non-zero, then it represents filler between
13759              * elen and precis. So adding elen and zeros together will
13760              * always be <= precis, and the addition can never wrap */
13761             assert(!zeros || (precis > elen && precis - elen == zeros));
13762             have = elen + zeros;
13763
13764             if (have >= (((STRLEN)~0) - esignlen))
13765                 croak_memory_wrap();
13766             have += esignlen;
13767
13768             need = (have > width ? have : width);
13769             gap = need - have;
13770
13771             if (need >= (((STRLEN)~0) - (SvCUR(sv) + 1)))
13772                 croak_memory_wrap();
13773             need += (SvCUR(sv) + 1);
13774
13775             SvGROW(sv, need);
13776
13777             s = SvEND(sv);
13778
13779             if (left) {
13780                 for (i = 0; i < esignlen; i++)
13781                     *s++ = esignbuf[i];
13782                 for (i = zeros; i; i--)
13783                     *s++ = '0';
13784                 Copy(eptr, s, elen, char);
13785                 s += elen;
13786                 for (i = gap; i; i--)
13787                     *s++ = ' ';
13788             }
13789             else {
13790                 if (fill) {
13791                     for (i = 0; i < esignlen; i++)
13792                         *s++ = esignbuf[i];
13793                     assert(!zeros);
13794                     zeros = gap;
13795                 }
13796                 else {
13797                     for (i = gap; i; i--)
13798                         *s++ = ' ';
13799                     for (i = 0; i < esignlen; i++)
13800                         *s++ = esignbuf[i];
13801                 }
13802
13803                 for (i = zeros; i; i--)
13804                     *s++ = '0';
13805                 Copy(eptr, s, elen, char);
13806                 s += elen;
13807             }
13808
13809             *s = '\0';
13810             SvCUR_set(sv, s - SvPVX_const(sv));
13811
13812             if (is_utf8)
13813                 has_utf8 = TRUE;
13814             if (has_utf8)
13815                 SvUTF8_on(sv);
13816         }
13817
13818         if (vectorize && veclen) {
13819             /* we append the vector separator separately since %v isn't
13820              * very common: don't slow down the general case by adding
13821              * dotstrlen to need etc */
13822             sv_catpvn_nomg(sv, dotstr, dotstrlen);
13823             esignlen = 0;
13824             goto vector; /* do next iteration */
13825         }
13826
13827       done_valid_conversion:
13828
13829         if (arg_missing)
13830             S_warn_vcatpvfn_missing_argument(aTHX);
13831     }
13832
13833     /* Now that we've consumed all our printf format arguments (svix)
13834      * do we have things left on the stack that we didn't use?
13835      */
13836     if (!no_redundant_warning && sv_count >= svix + 1 && ckWARN(WARN_REDUNDANT)) {
13837         Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
13838                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
13839     }
13840
13841     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
13842         /* while we shouldn't set the cache, it may have been previously
13843            set in the caller, so clear it */
13844         MAGIC *mg = mg_find(sv, PERL_MAGIC_utf8);
13845         if (mg)
13846             magic_setutf8(sv,mg); /* clear UTF8 cache */
13847     }
13848     SvTAINT(sv);
13849 }
13850
13851 /* =========================================================================
13852
13853 =for apidoc_section $embedding
13854
13855 =cut
13856
13857 All the macros and functions in this section are for the private use of
13858 the main function, perl_clone().
13859
13860 The foo_dup() functions make an exact copy of an existing foo thingy.
13861 During the course of a cloning, a hash table is used to map old addresses
13862 to new addresses.  The table is created and manipulated with the
13863 ptr_table_* functions.
13864
13865  * =========================================================================*/
13866
13867
13868 #if defined(USE_ITHREADS)
13869
13870 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
13871 #ifndef GpREFCNT_inc
13872 #  define GpREFCNT_inc(gp)      ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
13873 #endif
13874
13875
13876 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact
13877    that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
13878    If this changes, please unmerge ss_dup.
13879    Likewise, sv_dup_inc_multiple() relies on this fact.  */
13880 #define sv_dup_inc_NN(s,t)      SvREFCNT_inc_NN(sv_dup_inc(s,t))
13881 #define av_dup(s,t)     MUTABLE_AV(sv_dup((const SV *)s,t))
13882 #define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
13883 #define hv_dup(s,t)     MUTABLE_HV(sv_dup((const SV *)s,t))
13884 #define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
13885 #define cv_dup(s,t)     MUTABLE_CV(sv_dup((const SV *)s,t))
13886 #define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t))
13887 #define io_dup(s,t)     MUTABLE_IO(sv_dup((const SV *)s,t))
13888 #define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t))
13889 #define gv_dup(s,t)     MUTABLE_GV(sv_dup((const SV *)s,t))
13890 #define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t))
13891 #define SAVEPV(p)       ((p) ? savepv(p) : NULL)
13892 #define SAVEPVN(p,n)    ((p) ? savepvn(p,n) : NULL)
13893
13894 /* clone a parser */
13895
13896 yy_parser *
13897 Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
13898 {
13899     yy_parser *parser;
13900
13901     PERL_ARGS_ASSERT_PARSER_DUP;
13902
13903     if (!proto)
13904         return NULL;
13905
13906     /* look for it in the table first */
13907     parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
13908     if (parser)
13909         return parser;
13910
13911     /* create anew and remember what it is */
13912     Newxz(parser, 1, yy_parser);
13913     ptr_table_store(PL_ptr_table, proto, parser);
13914
13915     /* XXX eventually, just Copy() most of the parser struct ? */
13916
13917     parser->lex_brackets = proto->lex_brackets;
13918     parser->lex_casemods = proto->lex_casemods;
13919     parser->lex_brackstack = savepvn(proto->lex_brackstack,
13920                     (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
13921     parser->lex_casestack = savepvn(proto->lex_casestack,
13922                     (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
13923     parser->lex_defer   = proto->lex_defer;
13924     parser->lex_dojoin  = proto->lex_dojoin;
13925     parser->lex_formbrack = proto->lex_formbrack;
13926     parser->lex_inpat   = proto->lex_inpat;
13927     parser->lex_inwhat  = proto->lex_inwhat;
13928     parser->lex_op      = proto->lex_op;
13929     parser->lex_repl    = sv_dup_inc(proto->lex_repl, param);
13930     parser->lex_starts  = proto->lex_starts;
13931     parser->lex_stuff   = sv_dup_inc(proto->lex_stuff, param);
13932     parser->multi_close = proto->multi_close;
13933     parser->multi_open  = proto->multi_open;
13934     parser->multi_start = proto->multi_start;
13935     parser->multi_end   = proto->multi_end;
13936     parser->preambled   = proto->preambled;
13937     parser->lex_super_state = proto->lex_super_state;
13938     parser->lex_sub_inwhat  = proto->lex_sub_inwhat;
13939     parser->lex_sub_op  = proto->lex_sub_op;
13940     parser->lex_sub_repl= sv_dup_inc(proto->lex_sub_repl, param);
13941     parser->linestr     = sv_dup_inc(proto->linestr, param);
13942     parser->expect      = proto->expect;
13943     parser->copline     = proto->copline;
13944     parser->last_lop_op = proto->last_lop_op;
13945     parser->lex_state   = proto->lex_state;
13946     parser->rsfp        = fp_dup(proto->rsfp, '<', param);
13947     /* rsfp_filters entries have fake IoDIRP() */
13948     parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
13949     parser->in_my       = proto->in_my;
13950     parser->in_my_stash = hv_dup(proto->in_my_stash, param);
13951     parser->error_count = proto->error_count;
13952     parser->sig_elems   = proto->sig_elems;
13953     parser->sig_optelems= proto->sig_optelems;
13954     parser->sig_slurpy  = proto->sig_slurpy;
13955     parser->recheck_utf8_validity = proto->recheck_utf8_validity;
13956
13957     {
13958         char * const ols = SvPVX(proto->linestr);
13959         char * const ls  = SvPVX(parser->linestr);
13960
13961         parser->bufptr      = ls + (proto->bufptr >= ols ?
13962                                     proto->bufptr -  ols : 0);
13963         parser->oldbufptr   = ls + (proto->oldbufptr >= ols ?
13964                                     proto->oldbufptr -  ols : 0);
13965         parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
13966                                     proto->oldoldbufptr -  ols : 0);
13967         parser->linestart   = ls + (proto->linestart >= ols ?
13968                                     proto->linestart -  ols : 0);
13969         parser->last_uni    = ls + (proto->last_uni >= ols ?
13970                                     proto->last_uni -  ols : 0);
13971         parser->last_lop    = ls + (proto->last_lop >= ols ?
13972                                     proto->last_lop -  ols : 0);
13973
13974         parser->bufend      = ls + SvCUR(parser->linestr);
13975     }
13976
13977     Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
13978
13979
13980     Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
13981     Copy(proto->nexttype, parser->nexttype, 5,  I32);
13982     parser->nexttoke    = proto->nexttoke;
13983
13984     /* XXX should clone saved_curcop here, but we aren't passed
13985      * proto_perl; so do it in perl_clone_using instead */
13986
13987     return parser;
13988 }
13989
13990
13991 /* duplicate a file handle */
13992
13993 PerlIO *
13994 Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
13995 {
13996     PerlIO *ret;
13997
13998     PERL_ARGS_ASSERT_FP_DUP;
13999     PERL_UNUSED_ARG(type);
14000
14001     if (!fp)
14002         return (PerlIO*)NULL;
14003
14004     /* look for it in the table first */
14005     ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
14006     if (ret)
14007         return ret;
14008
14009     /* create anew and remember what it is */
14010 #ifdef __amigaos4__
14011     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE|PERLIO_DUP_FD);
14012 #else
14013     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
14014 #endif
14015     ptr_table_store(PL_ptr_table, fp, ret);
14016     return ret;
14017 }
14018
14019 /* duplicate a directory handle */
14020
14021 DIR *
14022 Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
14023 {
14024     DIR *ret;
14025
14026 #if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
14027     DIR *pwd;
14028     const Direntry_t *dirent;
14029     char smallbuf[256]; /* XXX MAXPATHLEN, surely? */
14030     char *name = NULL;
14031     STRLEN len = 0;
14032     long pos;
14033 #endif
14034
14035     PERL_UNUSED_CONTEXT;
14036     PERL_ARGS_ASSERT_DIRP_DUP;
14037
14038     if (!dp)
14039         return (DIR*)NULL;
14040
14041     /* look for it in the table first */
14042     ret = (DIR*)ptr_table_fetch(PL_ptr_table, dp);
14043     if (ret)
14044         return ret;
14045
14046 #if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
14047
14048     PERL_UNUSED_ARG(param);
14049
14050     /* create anew */
14051
14052     /* open the current directory (so we can switch back) */
14053     if (!(pwd = PerlDir_open("."))) return (DIR *)NULL;
14054
14055     /* chdir to our dir handle and open the present working directory */
14056     if (fchdir(my_dirfd(dp)) < 0 || !(ret = PerlDir_open("."))) {
14057         PerlDir_close(pwd);
14058         return (DIR *)NULL;
14059     }
14060     /* Now we should have two dir handles pointing to the same dir. */
14061
14062     /* Be nice to the calling code and chdir back to where we were. */
14063     /* XXX If this fails, then what? */
14064     PERL_UNUSED_RESULT(fchdir(my_dirfd(pwd)));
14065
14066     /* We have no need of the pwd handle any more. */
14067     PerlDir_close(pwd);
14068
14069 #ifdef DIRNAMLEN
14070 # define d_namlen(d) (d)->d_namlen
14071 #else
14072 # define d_namlen(d) strlen((d)->d_name)
14073 #endif
14074     /* Iterate once through dp, to get the file name at the current posi-
14075        tion. Then step back. */
14076     pos = PerlDir_tell(dp);
14077     if ((dirent = PerlDir_read(dp))) {
14078         len = d_namlen(dirent);
14079         if (len > sizeof(dirent->d_name) && sizeof(dirent->d_name) > PTRSIZE) {
14080             /* If the len is somehow magically longer than the
14081              * maximum length of the directory entry, even though
14082              * we could fit it in a buffer, we could not copy it
14083              * from the dirent.  Bail out. */
14084             PerlDir_close(ret);
14085             return (DIR*)NULL;
14086         }
14087         if (len <= sizeof smallbuf) name = smallbuf;
14088         else Newx(name, len, char);
14089         Move(dirent->d_name, name, len, char);
14090     }
14091     PerlDir_seek(dp, pos);
14092
14093     /* Iterate through the new dir handle, till we find a file with the
14094        right name. */
14095     if (!dirent) /* just before the end */
14096         for(;;) {
14097             pos = PerlDir_tell(ret);
14098             if (PerlDir_read(ret)) continue; /* not there yet */
14099             PerlDir_seek(ret, pos); /* step back */
14100             break;
14101         }
14102     else {
14103         const long pos0 = PerlDir_tell(ret);
14104         for(;;) {
14105             pos = PerlDir_tell(ret);
14106             if ((dirent = PerlDir_read(ret))) {
14107                 if (len == (STRLEN)d_namlen(dirent)
14108                     && memEQ(name, dirent->d_name, len)) {
14109                     /* found it */
14110                     PerlDir_seek(ret, pos); /* step back */
14111                     break;
14112                 }
14113                 /* else we are not there yet; keep iterating */
14114             }
14115             else { /* This is not meant to happen. The best we can do is
14116                       reset the iterator to the beginning. */
14117                 PerlDir_seek(ret, pos0);
14118                 break;
14119             }
14120         }
14121     }
14122 #undef d_namlen
14123
14124     if (name && name != smallbuf)
14125         Safefree(name);
14126 #endif
14127
14128 #ifdef WIN32
14129     ret = win32_dirp_dup(dp, param);
14130 #endif
14131
14132     /* pop it in the pointer table */
14133     if (ret)
14134         ptr_table_store(PL_ptr_table, dp, ret);
14135
14136     return ret;
14137 }
14138
14139 /* duplicate a typeglob */
14140
14141 GP *
14142 Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
14143 {
14144     GP *ret;
14145
14146     PERL_ARGS_ASSERT_GP_DUP;
14147
14148     if (!gp)
14149         return (GP*)NULL;
14150     /* look for it in the table first */
14151     ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
14152     if (ret)
14153         return ret;
14154
14155     /* create anew and remember what it is */
14156     Newxz(ret, 1, GP);
14157     ptr_table_store(PL_ptr_table, gp, ret);
14158
14159     /* clone */
14160     /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
14161        on Newxz() to do this for us.  */
14162     ret->gp_sv          = sv_dup_inc(gp->gp_sv, param);
14163     ret->gp_io          = io_dup_inc(gp->gp_io, param);
14164     ret->gp_form        = cv_dup_inc(gp->gp_form, param);
14165     ret->gp_av          = av_dup_inc(gp->gp_av, param);
14166     ret->gp_hv          = hv_dup_inc(gp->gp_hv, param);
14167     ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
14168     ret->gp_cv          = cv_dup_inc(gp->gp_cv, param);
14169     ret->gp_cvgen       = gp->gp_cvgen;
14170     ret->gp_line        = gp->gp_line;
14171     ret->gp_file_hek    = hek_dup(gp->gp_file_hek, param);
14172     return ret;
14173 }
14174
14175 /* duplicate a chain of magic */
14176
14177 MAGIC *
14178 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
14179 {
14180     MAGIC *mgret = NULL;
14181     MAGIC **mgprev_p = &mgret;
14182
14183     PERL_ARGS_ASSERT_MG_DUP;
14184
14185     for (; mg; mg = mg->mg_moremagic) {
14186         MAGIC *nmg;
14187
14188         if ((param->flags & CLONEf_JOIN_IN)
14189                 && mg->mg_type == PERL_MAGIC_backref)
14190             /* when joining, we let the individual SVs add themselves to
14191              * backref as needed. */
14192             continue;
14193
14194         Newx(nmg, 1, MAGIC);
14195         *mgprev_p = nmg;
14196         mgprev_p = &(nmg->mg_moremagic);
14197
14198         /* There was a comment "XXX copy dynamic vtable?" but as we don't have
14199            dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
14200            from the original commit adding Perl_mg_dup() - revision 4538.
14201            Similarly there is the annotation "XXX random ptr?" next to the
14202            assignment to nmg->mg_ptr.  */
14203         *nmg = *mg;
14204
14205         /* FIXME for plugins
14206         if (nmg->mg_type == PERL_MAGIC_qr) {
14207             nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
14208         }
14209         else
14210         */
14211         nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
14212                           ? nmg->mg_type == PERL_MAGIC_backref
14213                                 /* The backref AV has its reference
14214                                  * count deliberately bumped by 1 */
14215                                 ? SvREFCNT_inc(av_dup_inc((const AV *)
14216                                                     nmg->mg_obj, param))
14217                                 : sv_dup_inc(nmg->mg_obj, param)
14218                           : (nmg->mg_type == PERL_MAGIC_regdatum ||
14219                              nmg->mg_type == PERL_MAGIC_regdata)
14220                                   ? nmg->mg_obj
14221                                   : sv_dup(nmg->mg_obj, param);
14222
14223         if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
14224             if (nmg->mg_len > 0) {
14225                 nmg->mg_ptr     = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
14226                 if (nmg->mg_type == PERL_MAGIC_overload_table &&
14227                         AMT_AMAGIC((AMT*)nmg->mg_ptr))
14228                 {
14229                     AMT * const namtp = (AMT*)nmg->mg_ptr;
14230                     sv_dup_inc_multiple((SV**)(namtp->table),
14231                                         (SV**)(namtp->table), NofAMmeth, param);
14232                 }
14233             }
14234             else if (nmg->mg_len == HEf_SVKEY)
14235                 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
14236         }
14237         if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
14238             nmg->mg_virtual->svt_dup(aTHX_ nmg, param);
14239         }
14240     }
14241     return mgret;
14242 }
14243
14244 #endif /* USE_ITHREADS */
14245
14246 struct ptr_tbl_arena {
14247     struct ptr_tbl_arena *next;
14248     struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers.  */
14249 };
14250
14251 /* create a new pointer-mapping table */
14252
14253 PTR_TBL_t *
14254 Perl_ptr_table_new(pTHX)
14255 {
14256     PTR_TBL_t *tbl;
14257     PERL_UNUSED_CONTEXT;
14258
14259     Newx(tbl, 1, PTR_TBL_t);
14260     tbl->tbl_max        = 511;
14261     tbl->tbl_items      = 0;
14262     tbl->tbl_arena      = NULL;
14263     tbl->tbl_arena_next = NULL;
14264     tbl->tbl_arena_end  = NULL;
14265     Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
14266     return tbl;
14267 }
14268
14269 #define PTR_TABLE_HASH(ptr) \
14270   ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
14271
14272 /* map an existing pointer using a table */
14273
14274 STATIC PTR_TBL_ENT_t *
14275 S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
14276 {
14277     PTR_TBL_ENT_t *tblent;
14278     const UV hash = PTR_TABLE_HASH(sv);
14279
14280     PERL_ARGS_ASSERT_PTR_TABLE_FIND;
14281
14282     tblent = tbl->tbl_ary[hash & tbl->tbl_max];
14283     for (; tblent; tblent = tblent->next) {
14284         if (tblent->oldval == sv)
14285             return tblent;
14286     }
14287     return NULL;
14288 }
14289
14290 void *
14291 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
14292 {
14293     PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
14294
14295     PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
14296     PERL_UNUSED_CONTEXT;
14297
14298     return tblent ? tblent->newval : NULL;
14299 }
14300
14301 /* add a new entry to a pointer-mapping table 'tbl'.  In hash terms, 'oldsv' is
14302  * the key; 'newsv' is the value.  The names "old" and "new" are specific to
14303  * the core's typical use of ptr_tables in thread cloning. */
14304
14305 void
14306 Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
14307 {
14308     PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
14309
14310     PERL_ARGS_ASSERT_PTR_TABLE_STORE;
14311     PERL_UNUSED_CONTEXT;
14312
14313     if (tblent) {
14314         tblent->newval = newsv;
14315     } else {
14316         const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
14317
14318         if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
14319             struct ptr_tbl_arena *new_arena;
14320
14321             Newx(new_arena, 1, struct ptr_tbl_arena);
14322             new_arena->next = tbl->tbl_arena;
14323             tbl->tbl_arena = new_arena;
14324             tbl->tbl_arena_next = new_arena->array;
14325             tbl->tbl_arena_end = C_ARRAY_END(new_arena->array);
14326         }
14327
14328         tblent = tbl->tbl_arena_next++;
14329
14330         tblent->oldval = oldsv;
14331         tblent->newval = newsv;
14332         tblent->next = tbl->tbl_ary[entry];
14333         tbl->tbl_ary[entry] = tblent;
14334         tbl->tbl_items++;
14335         if (tblent->next && tbl->tbl_items > tbl->tbl_max)
14336             ptr_table_split(tbl);
14337     }
14338 }
14339
14340 /* double the hash bucket size of an existing ptr table */
14341
14342 void
14343 Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
14344 {
14345     PTR_TBL_ENT_t **ary = tbl->tbl_ary;
14346     const UV oldsize = tbl->tbl_max + 1;
14347     UV newsize = oldsize * 2;
14348     UV i;
14349
14350     PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
14351     PERL_UNUSED_CONTEXT;
14352
14353     Renew(ary, newsize, PTR_TBL_ENT_t*);
14354     Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
14355     tbl->tbl_max = --newsize;
14356     tbl->tbl_ary = ary;
14357     for (i=0; i < oldsize; i++, ary++) {
14358         PTR_TBL_ENT_t **entp = ary;
14359         PTR_TBL_ENT_t *ent = *ary;
14360         PTR_TBL_ENT_t **curentp;
14361         if (!ent)
14362             continue;
14363         curentp = ary + oldsize;
14364         do {
14365             if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
14366                 *entp = ent->next;
14367                 ent->next = *curentp;
14368                 *curentp = ent;
14369             }
14370             else
14371                 entp = &ent->next;
14372             ent = *entp;
14373         } while (ent);
14374     }
14375 }
14376
14377 /* clear and free a ptr table */
14378
14379 void
14380 Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
14381 {
14382     struct ptr_tbl_arena *arena;
14383
14384     PERL_UNUSED_CONTEXT;
14385
14386     if (!tbl) {
14387         return;
14388     }
14389
14390     arena = tbl->tbl_arena;
14391
14392     while (arena) {
14393         struct ptr_tbl_arena *next = arena->next;
14394
14395         Safefree(arena);
14396         arena = next;
14397     }
14398
14399     Safefree(tbl->tbl_ary);
14400     Safefree(tbl);
14401 }
14402
14403 #if defined(USE_ITHREADS)
14404
14405 void
14406 Perl_rvpv_dup(pTHX_ SV *const dsv, const SV *const ssv, CLONE_PARAMS *const param)
14407 {
14408     PERL_ARGS_ASSERT_RVPV_DUP;
14409
14410     assert(!isREGEXP(ssv));
14411     if (SvROK(ssv)) {
14412         if (SvWEAKREF(ssv)) {
14413             SvRV_set(dsv, sv_dup(SvRV_const(ssv), param));
14414             if (param->flags & CLONEf_JOIN_IN) {
14415                 /* if joining, we add any back references individually rather
14416                  * than copying the whole backref array */
14417                 Perl_sv_add_backref(aTHX_ SvRV(dsv), dsv);
14418             }
14419         }
14420         else
14421             SvRV_set(dsv, sv_dup_inc(SvRV_const(ssv), param));
14422     }
14423     else if (SvPVX_const(ssv)) {
14424         /* Has something there */
14425         if (SvLEN(ssv)) {
14426             /* Normal PV - clone whole allocated space */
14427             SvPV_set(dsv, SAVEPVN(SvPVX_const(ssv), SvLEN(ssv)-1));
14428             /* ssv may not be that normal, but actually copy on write.
14429                But we are a true, independent SV, so:  */
14430             SvIsCOW_off(dsv);
14431         }
14432         else {
14433             /* Special case - not normally malloced for some reason */
14434             if (isGV_with_GP(ssv)) {
14435                 /* Don't need to do anything here.  */
14436             }
14437             else if ((SvIsCOW_shared_hash(ssv))) {
14438                 /* A "shared" PV - clone it as "shared" PV */
14439                 SvPV_set(dsv,
14440                          HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(ssv)),
14441                                          param)));
14442             }
14443             else {
14444                 /* Some other special case - random pointer */
14445                 SvPV_set(dsv, (char *) SvPVX_const(ssv));
14446             }
14447         }
14448     }
14449     else {
14450         /* Copy the NULL */
14451         SvPV_set(dsv, NULL);
14452     }
14453 }
14454
14455 /* duplicate a list of SVs. source and dest may point to the same memory.  */
14456 static SV **
14457 S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
14458                       SSize_t items, CLONE_PARAMS *const param)
14459 {
14460     PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
14461
14462     while (items-- > 0) {
14463         *dest++ = sv_dup_inc(*source++, param);
14464     }
14465
14466     return dest;
14467 }
14468
14469 /* duplicate an SV of any type (including AV, HV etc) */
14470
14471 static SV *
14472 S_sv_dup_common(pTHX_ const SV *const ssv, CLONE_PARAMS *const param)
14473 {
14474     SV *dsv;
14475
14476     PERL_ARGS_ASSERT_SV_DUP_COMMON;
14477
14478     if (SvTYPE(ssv) == (svtype)SVTYPEMASK) {
14479 #ifdef DEBUG_LEAKING_SCALARS_ABORT
14480         abort();
14481 #endif
14482         return NULL;
14483     }
14484     /* look for it in the table first */
14485     dsv = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, ssv));
14486     if (dsv)
14487         return dsv;
14488
14489     if(param->flags & CLONEf_JOIN_IN) {
14490         /** We are joining here so we don't want do clone
14491             something that is bad **/
14492         if (SvTYPE(ssv) == SVt_PVHV) {
14493             const HEK * const hvname = HvNAME_HEK(ssv);
14494             if (hvname) {
14495                 /** don't clone stashes if they already exist **/
14496                 dsv = MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
14497                                                 HEK_UTF8(hvname) ? SVf_UTF8 : 0));
14498                 ptr_table_store(PL_ptr_table, ssv, dsv);
14499                 return dsv;
14500             }
14501         }
14502         else if (SvTYPE(ssv) == SVt_PVGV && !SvFAKE(ssv)) {
14503             HV *stash = GvSTASH(ssv);
14504             const HEK * hvname;
14505             if (stash && (hvname = HvNAME_HEK(stash))) {
14506                 /** don't clone GVs if they already exist **/
14507                 SV **svp;
14508                 stash = gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
14509                                     HEK_UTF8(hvname) ? SVf_UTF8 : 0);
14510                 svp = hv_fetch(
14511                         stash, GvNAME(ssv),
14512                         GvNAMEUTF8(ssv)
14513                             ? -GvNAMELEN(ssv)
14514                             :  GvNAMELEN(ssv),
14515                         0
14516                       );
14517                 if (svp && *svp && SvTYPE(*svp) == SVt_PVGV) {
14518                     ptr_table_store(PL_ptr_table, ssv, *svp);
14519                     return *svp;
14520                 }
14521             }
14522         }
14523     }
14524
14525     /* create anew and remember what it is */
14526     new_SV(dsv);
14527
14528 #ifdef DEBUG_LEAKING_SCALARS
14529     dsv->sv_debug_optype = ssv->sv_debug_optype;
14530     dsv->sv_debug_line = ssv->sv_debug_line;
14531     dsv->sv_debug_inpad = ssv->sv_debug_inpad;
14532     dsv->sv_debug_parent = (SV*)ssv;
14533     FREE_SV_DEBUG_FILE(dsv);
14534     dsv->sv_debug_file = savesharedpv(ssv->sv_debug_file);
14535 #endif
14536
14537     ptr_table_store(PL_ptr_table, ssv, dsv);
14538
14539     /* clone */
14540     SvFLAGS(dsv)        = SvFLAGS(ssv);
14541     SvFLAGS(dsv)        &= ~SVf_OOK;            /* don't propagate OOK hack */
14542     SvREFCNT(dsv)       = 0;                    /* must be before any other dups! */
14543
14544 #ifdef DEBUGGING
14545     if (SvANY(ssv) && PL_watch_pvx && SvPVX_const(ssv) == PL_watch_pvx)
14546         PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
14547                       (void*)PL_watch_pvx, SvPVX_const(ssv));
14548 #endif
14549
14550     /* don't clone objects whose class has asked us not to */
14551     if (SvOBJECT(ssv)
14552      && ! (SvFLAGS(SvSTASH(ssv)) & SVphv_CLONEABLE))
14553     {
14554         SvFLAGS(dsv) = 0;
14555         return dsv;
14556     }
14557
14558     switch (SvTYPE(ssv)) {
14559     case SVt_NULL:
14560         SvANY(dsv)      = NULL;
14561         break;
14562     case SVt_IV:
14563         SET_SVANY_FOR_BODYLESS_IV(dsv);
14564         if(SvROK(ssv)) {
14565             Perl_rvpv_dup(aTHX_ dsv, ssv, param);
14566         } else {
14567             SvIV_set(dsv, SvIVX(ssv));
14568         }
14569         break;
14570     case SVt_NV:
14571 #if NVSIZE <= IVSIZE
14572         SET_SVANY_FOR_BODYLESS_NV(dsv);
14573 #else
14574         SvANY(dsv)      = new_XNV();
14575 #endif
14576         SvNV_set(dsv, SvNVX(ssv));
14577         break;
14578     default:
14579         {
14580             /* These are all the types that need complex bodies allocating.  */
14581             void *new_body;
14582             const svtype sv_type = SvTYPE(ssv);
14583             const struct body_details *sv_type_details
14584                 = bodies_by_type + sv_type;
14585
14586             switch (sv_type) {
14587             default:
14588                 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(ssv));
14589                 NOT_REACHED; /* NOTREACHED */
14590                 break;
14591
14592             case SVt_PVHV:
14593                 if (SvOOK(ssv)) {
14594                     sv_type_details = &fake_hv_with_aux;
14595 #ifdef PURIFY
14596                     new_body = new_NOARENA(sv_type_details);
14597 #else
14598                     new_body_from_arena(new_body, HVAUX_ARENA_ROOT_IX, fake_hv_with_aux);
14599 #endif
14600                     goto have_body;
14601                 }
14602                 /* FALLTHROUGH */
14603             case SVt_PVGV:
14604             case SVt_PVIO:
14605             case SVt_PVFM:
14606             case SVt_PVAV:
14607             case SVt_PVCV:
14608             case SVt_PVLV:
14609             case SVt_REGEXP:
14610             case SVt_PVMG:
14611             case SVt_PVNV:
14612             case SVt_PVIV:
14613             case SVt_INVLIST:
14614             case SVt_PV:
14615                 assert(sv_type_details->body_size);
14616 #ifndef PURIFY
14617                 if (sv_type_details->arena) {
14618                     new_body = S_new_body(aTHX_ sv_type);
14619                     new_body
14620                         = (void*)((char*)new_body - sv_type_details->offset);
14621                 } else
14622 #endif
14623                 {
14624                     new_body = new_NOARENA(sv_type_details);
14625                 }
14626             }
14627         have_body:
14628             assert(new_body);
14629             SvANY(dsv) = new_body;
14630
14631 #ifndef PURIFY
14632             Copy(((char*)SvANY(ssv)) + sv_type_details->offset,
14633                  ((char*)SvANY(dsv)) + sv_type_details->offset,
14634                  sv_type_details->copy, char);
14635 #else
14636             Copy(((char*)SvANY(ssv)),
14637                  ((char*)SvANY(dsv)),
14638                  sv_type_details->body_size + sv_type_details->offset, char);
14639 #endif
14640
14641             if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
14642                 && !isGV_with_GP(dsv)
14643                 && !isREGEXP(dsv)
14644                 && !(sv_type == SVt_PVIO && !(IoFLAGS(dsv) & IOf_FAKE_DIRP)))
14645                 Perl_rvpv_dup(aTHX_ dsv, ssv, param);
14646
14647             /* The Copy above means that all the source (unduplicated) pointers
14648                are now in the destination.  We can check the flags and the
14649                pointers in either, but it's possible that there's less cache
14650                missing by always going for the destination.
14651                FIXME - instrument and check that assumption  */
14652             if (sv_type >= SVt_PVMG) {
14653                 if (SvMAGIC(dsv))
14654                     SvMAGIC_set(dsv, mg_dup(SvMAGIC(dsv), param));
14655                 if (SvOBJECT(dsv) && SvSTASH(dsv))
14656                     SvSTASH_set(dsv, hv_dup_inc(SvSTASH(dsv), param));
14657                 else SvSTASH_set(dsv, 0); /* don't copy DESTROY cache */
14658             }
14659
14660             /* The cast silences a GCC warning about unhandled types.  */
14661             switch ((int)sv_type) {
14662             case SVt_PV:
14663                 break;
14664             case SVt_PVIV:
14665                 break;
14666             case SVt_PVNV:
14667                 break;
14668             case SVt_PVMG:
14669                 break;
14670             case SVt_REGEXP:
14671               duprex:
14672                 /* FIXME for plugins */
14673                 re_dup_guts((REGEXP*) ssv, (REGEXP*) dsv, param);
14674                 break;
14675             case SVt_PVLV:
14676                 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
14677                 if (LvTYPE(dsv) == 't') /* for tie: unrefcnted fake (SV**) */
14678                     LvTARG(dsv) = dsv;
14679                 else if (LvTYPE(dsv) == 'T') /* for tie: fake HE */
14680                     LvTARG(dsv) = MUTABLE_SV(he_dup((HE*)LvTARG(dsv), 0, param));
14681                 else
14682                     LvTARG(dsv) = sv_dup_inc(LvTARG(dsv), param);
14683                 if (isREGEXP(ssv)) goto duprex;
14684                 /* FALLTHROUGH */
14685             case SVt_PVGV:
14686                 /* non-GP case already handled above */
14687                 if(isGV_with_GP(ssv)) {
14688                     GvNAME_HEK(dsv) = hek_dup(GvNAME_HEK(dsv), param);
14689                     /* Don't call sv_add_backref here as it's going to be
14690                        created as part of the magic cloning of the symbol
14691                        table--unless this is during a join and the stash
14692                        is not actually being cloned.  */
14693                     /* Danger Will Robinson - GvGP(dsv) isn't initialised
14694                        at the point of this comment.  */
14695                     GvSTASH(dsv) = hv_dup(GvSTASH(dsv), param);
14696                     if (param->flags & CLONEf_JOIN_IN)
14697                         Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dsv)), dsv);
14698                     GvGP_set(dsv, gp_dup(GvGP(ssv), param));
14699                     (void)GpREFCNT_inc(GvGP(dsv));
14700                 }
14701                 break;
14702             case SVt_PVIO:
14703                 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
14704                 if(IoFLAGS(dsv) & IOf_FAKE_DIRP) {
14705                     /* I have no idea why fake dirp (rsfps)
14706                        should be treated differently but otherwise
14707                        we end up with leaks -- sky*/
14708                     IoTOP_GV(dsv)      = gv_dup_inc(IoTOP_GV(dsv), param);
14709                     IoFMT_GV(dsv)      = gv_dup_inc(IoFMT_GV(dsv), param);
14710                     IoBOTTOM_GV(dsv)   = gv_dup_inc(IoBOTTOM_GV(dsv), param);
14711                 } else {
14712                     IoTOP_GV(dsv)      = gv_dup(IoTOP_GV(dsv), param);
14713                     IoFMT_GV(dsv)      = gv_dup(IoFMT_GV(dsv), param);
14714                     IoBOTTOM_GV(dsv)   = gv_dup(IoBOTTOM_GV(dsv), param);
14715                     if (IoDIRP(dsv)) {
14716                         IoDIRP(dsv)     = dirp_dup(IoDIRP(dsv), param);
14717                     } else {
14718                         NOOP;
14719                         /* IoDIRP(dsv) is already a copy of IoDIRP(ssv)  */
14720                     }
14721                     IoIFP(dsv)  = fp_dup(IoIFP(ssv), IoTYPE(dsv), param);
14722                 }
14723                 if (IoOFP(dsv) == IoIFP(ssv))
14724                     IoOFP(dsv) = IoIFP(dsv);
14725                 else
14726                     IoOFP(dsv)  = fp_dup(IoOFP(dsv), IoTYPE(dsv), param);
14727                 IoTOP_NAME(dsv) = SAVEPV(IoTOP_NAME(dsv));
14728                 IoFMT_NAME(dsv) = SAVEPV(IoFMT_NAME(dsv));
14729                 IoBOTTOM_NAME(dsv)      = SAVEPV(IoBOTTOM_NAME(dsv));
14730                 break;
14731             case SVt_PVAV:
14732                 /* avoid cloning an empty array */
14733                 if (AvARRAY((const AV *)ssv) && AvFILLp((const AV *)ssv) >= 0) {
14734                     SV **dst_ary, **src_ary;
14735                     SSize_t items = AvFILLp((const AV *)ssv) + 1;
14736
14737                     src_ary = AvARRAY((const AV *)ssv);
14738                     Newx(dst_ary, AvMAX((const AV *)ssv)+1, SV*);
14739                     ptr_table_store(PL_ptr_table, src_ary, dst_ary);
14740                     AvARRAY(MUTABLE_AV(dsv)) = dst_ary;
14741                     AvALLOC((const AV *)dsv) = dst_ary;
14742                     if (AvREAL((const AV *)ssv)) {
14743                         dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
14744                                                       param);
14745                     }
14746                     else {
14747                         while (items-- > 0)
14748                             *dst_ary++ = sv_dup(*src_ary++, param);
14749                     }
14750                     items = AvMAX((const AV *)ssv) - AvFILLp((const AV *)ssv);
14751                     while (items-- > 0) {
14752                         *dst_ary++ = NULL;
14753                     }
14754                 }
14755                 else {
14756                     AvARRAY(MUTABLE_AV(dsv))    = NULL;
14757                     AvALLOC((const AV *)dsv)    = (SV**)NULL;
14758                     AvMAX(  (const AV *)dsv)    = -1;
14759                     AvFILLp((const AV *)dsv)    = -1;
14760                 }
14761                 break;
14762             case SVt_PVHV:
14763                 if (HvARRAY((const HV *)ssv)) {
14764                     STRLEN i = 0;
14765                     const bool sharekeys = !!HvSHAREKEYS(ssv);
14766                     XPVHV * const dxhv = (XPVHV*)SvANY(dsv);
14767                     XPVHV * const sxhv = (XPVHV*)SvANY(ssv);
14768                     char *darray;
14769                     Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1),
14770                         char);
14771                     HvARRAY(dsv) = (HE**)darray;
14772                     while (i <= sxhv->xhv_max) {
14773                         const HE * const source = HvARRAY(ssv)[i];
14774                         HvARRAY(dsv)[i] = source
14775                             ? he_dup(source, sharekeys, param) : 0;
14776                         ++i;
14777                     }
14778                     if (SvOOK(ssv)) {
14779                         const struct xpvhv_aux * const saux = HvAUX(ssv);
14780                         struct xpvhv_aux * const daux = HvAUX(dsv);
14781                         /* This flag isn't copied.  */
14782                         SvOOK_on(dsv);
14783
14784                         if (saux->xhv_name_count) {
14785                             HEK ** const sname = saux->xhv_name_u.xhvnameu_names;
14786                             const I32 count
14787                              = saux->xhv_name_count < 0
14788                                 ? -saux->xhv_name_count
14789                                 :  saux->xhv_name_count;
14790                             HEK **shekp = sname + count;
14791                             HEK **dhekp;
14792                             Newx(daux->xhv_name_u.xhvnameu_names, count, HEK *);
14793                             dhekp = daux->xhv_name_u.xhvnameu_names + count;
14794                             while (shekp-- > sname) {
14795                                 dhekp--;
14796                                 *dhekp = hek_dup(*shekp, param);
14797                             }
14798                         }
14799                         else {
14800                             daux->xhv_name_u.xhvnameu_name
14801                                 = hek_dup(saux->xhv_name_u.xhvnameu_name,
14802                                           param);
14803                         }
14804                         daux->xhv_name_count = saux->xhv_name_count;
14805
14806                         daux->xhv_aux_flags = saux->xhv_aux_flags;
14807 #ifdef PERL_HASH_RANDOMIZE_KEYS
14808                         daux->xhv_rand = saux->xhv_rand;
14809                         daux->xhv_last_rand = saux->xhv_last_rand;
14810 #endif
14811                         daux->xhv_riter = saux->xhv_riter;
14812                         daux->xhv_eiter = saux->xhv_eiter
14813                             ? he_dup(saux->xhv_eiter,
14814                                         cBOOL(HvSHAREKEYS(ssv)), param) : 0;
14815                         /* backref array needs refcnt=2; see sv_add_backref */
14816                         daux->xhv_backreferences =
14817                             (param->flags & CLONEf_JOIN_IN)
14818                                 /* when joining, we let the individual GVs and
14819                                  * CVs add themselves to backref as
14820                                  * needed. This avoids pulling in stuff
14821                                  * that isn't required, and simplifies the
14822                                  * case where stashes aren't cloned back
14823                                  * if they already exist in the parent
14824                                  * thread */
14825                             ? NULL
14826                             : saux->xhv_backreferences
14827                                 ? (SvTYPE(saux->xhv_backreferences) == SVt_PVAV)
14828                                     ? MUTABLE_AV(SvREFCNT_inc(
14829                                           sv_dup_inc((const SV *)
14830                                             saux->xhv_backreferences, param)))
14831                                     : MUTABLE_AV(sv_dup((const SV *)
14832                                             saux->xhv_backreferences, param))
14833                                 : 0;
14834
14835                         daux->xhv_mro_meta = saux->xhv_mro_meta
14836                             ? mro_meta_dup(saux->xhv_mro_meta, param)
14837                             : 0;
14838
14839                         /* Record stashes for possible cloning in Perl_clone(). */
14840                         if (HvNAME(ssv))
14841                             av_push(param->stashes, dsv);
14842                     }
14843                 }
14844                 else
14845                     HvARRAY(MUTABLE_HV(dsv)) = NULL;
14846                 break;
14847             case SVt_PVCV:
14848                 if (!(param->flags & CLONEf_COPY_STACKS)) {
14849                     CvDEPTH(dsv) = 0;
14850                 }
14851                 /* FALLTHROUGH */
14852             case SVt_PVFM:
14853                 /* NOTE: not refcounted */
14854                 SvANY(MUTABLE_CV(dsv))->xcv_stash =
14855                     hv_dup(CvSTASH(dsv), param);
14856                 if ((param->flags & CLONEf_JOIN_IN) && CvSTASH(dsv))
14857                     Perl_sv_add_backref(aTHX_ MUTABLE_SV(CvSTASH(dsv)), dsv);
14858                 if (!CvISXSUB(dsv)) {
14859                     OP_REFCNT_LOCK;
14860                     CvROOT(dsv) = OpREFCNT_inc(CvROOT(dsv));
14861                     OP_REFCNT_UNLOCK;
14862                     CvSLABBED_off(dsv);
14863                 } else if (CvCONST(dsv)) {
14864                     CvXSUBANY(dsv).any_ptr =
14865                         sv_dup_inc((const SV *)CvXSUBANY(dsv).any_ptr, param);
14866                 }
14867                 assert(!CvSLABBED(dsv));
14868                 if (CvDYNFILE(dsv)) CvFILE(dsv) = SAVEPV(CvFILE(dsv));
14869                 if (CvNAMED(dsv))
14870                     SvANY((CV *)dsv)->xcv_gv_u.xcv_hek =
14871                         hek_dup(CvNAME_HEK((CV *)ssv), param);
14872                 /* don't dup if copying back - CvGV isn't refcounted, so the
14873                  * duped GV may never be freed. A bit of a hack! DAPM */
14874                 else
14875                   SvANY(MUTABLE_CV(dsv))->xcv_gv_u.xcv_gv =
14876                     CvCVGV_RC(dsv)
14877                     ? gv_dup_inc(CvGV(ssv), param)
14878                     : (param->flags & CLONEf_JOIN_IN)
14879                         ? NULL
14880                         : gv_dup(CvGV(ssv), param);
14881
14882                 if (!CvISXSUB(ssv)) {
14883                     PADLIST * padlist = CvPADLIST(ssv);
14884                     if(padlist)
14885                         padlist = padlist_dup(padlist, param);
14886                     CvPADLIST_set(dsv, padlist);
14887                 } else
14888 /* unthreaded perl can't sv_dup so we dont support unthreaded's CvHSCXT */
14889                     PoisonPADLIST(dsv);
14890
14891                 CvOUTSIDE(dsv)  =
14892                     CvWEAKOUTSIDE(ssv)
14893                     ? cv_dup(    CvOUTSIDE(dsv), param)
14894                     : cv_dup_inc(CvOUTSIDE(dsv), param);
14895                 break;
14896             }
14897         }
14898     }
14899
14900     return dsv;
14901  }
14902
14903 SV *
14904 Perl_sv_dup_inc(pTHX_ const SV *const ssv, CLONE_PARAMS *const param)
14905 {
14906     PERL_ARGS_ASSERT_SV_DUP_INC;
14907     return ssv ? SvREFCNT_inc(sv_dup_common(ssv, param)) : NULL;
14908 }
14909
14910 SV *
14911 Perl_sv_dup(pTHX_ const SV *const ssv, CLONE_PARAMS *const param)
14912 {
14913     SV *dsv = ssv ? sv_dup_common(ssv, param) : NULL;
14914     PERL_ARGS_ASSERT_SV_DUP;
14915
14916     /* Track every SV that (at least initially) had a reference count of 0.
14917        We need to do this by holding an actual reference to it in this array.
14918        If we attempt to cheat, turn AvREAL_off(), and store only pointers
14919        (akin to the stashes hash, and the perl stack), we come unstuck if
14920        a weak reference (or other SV legitimately SvREFCNT() == 0 for this
14921        thread) is manipulated in a CLONE method, because CLONE runs before the
14922        unreferenced array is walked to find SVs still with SvREFCNT() == 0
14923        (and fix things up by giving each a reference via the temps stack).
14924        Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and
14925        then SvREFCNT_dec(), it will be cleaned up (and added to the free list)
14926        before the walk of unreferenced happens and a reference to that is SV
14927        added to the temps stack. At which point we have the same SV considered
14928        to be in use, and free to be re-used. Not good.
14929     */
14930     if (dsv && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dsv)) {
14931         assert(param->unreferenced);
14932         av_push(param->unreferenced, SvREFCNT_inc(dsv));
14933     }
14934
14935     return dsv;
14936 }
14937
14938 /* duplicate a context */
14939
14940 PERL_CONTEXT *
14941 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
14942 {
14943     PERL_CONTEXT *ncxs;
14944
14945     PERL_ARGS_ASSERT_CX_DUP;
14946
14947     if (!cxs)
14948         return (PERL_CONTEXT*)NULL;
14949
14950     /* look for it in the table first */
14951     ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
14952     if (ncxs)
14953         return ncxs;
14954
14955     /* create anew and remember what it is */
14956     Newx(ncxs, max + 1, PERL_CONTEXT);
14957     ptr_table_store(PL_ptr_table, cxs, ncxs);
14958     Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
14959
14960     while (ix >= 0) {
14961         PERL_CONTEXT * const ncx = &ncxs[ix];
14962         if (CxTYPE(ncx) == CXt_SUBST) {
14963             Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
14964         }
14965         else {
14966             ncx->blk_oldcop = (COP*)any_dup(ncx->blk_oldcop, param->proto_perl);
14967             switch (CxTYPE(ncx)) {
14968             case CXt_SUB:
14969                 ncx->blk_sub.cv         = cv_dup_inc(ncx->blk_sub.cv, param);
14970                 if(CxHASARGS(ncx)){
14971                     ncx->blk_sub.savearray = av_dup_inc(ncx->blk_sub.savearray,param);
14972                 } else {
14973                     ncx->blk_sub.savearray = NULL;
14974                 }
14975                 ncx->blk_sub.prevcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
14976                                            ncx->blk_sub.prevcomppad);
14977                 break;
14978             case CXt_EVAL:
14979                 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
14980                                                       param);
14981                 /* XXX should this sv_dup_inc? Or only if CxEVAL_TXT_REFCNTED ???? */
14982                 ncx->blk_eval.cur_text  = sv_dup(ncx->blk_eval.cur_text, param);
14983                 ncx->blk_eval.cv = cv_dup(ncx->blk_eval.cv, param);
14984                 /* XXX what to do with cur_top_env ???? */
14985                 break;
14986             case CXt_LOOP_LAZYSV:
14987                 ncx->blk_loop.state_u.lazysv.end
14988                     = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
14989                 /* Fallthrough: duplicate lazysv.cur by using the ary.ary
14990                    duplication code instead.
14991                    We are taking advantage of (1) av_dup_inc and sv_dup_inc
14992                    actually being the same function, and (2) order
14993                    equivalence of the two unions.
14994                    We can assert the later [but only at run time :-(]  */
14995                 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
14996                         (void *) &ncx->blk_loop.state_u.lazysv.cur);
14997                 /* FALLTHROUGH */
14998             case CXt_LOOP_ARY:
14999                 ncx->blk_loop.state_u.ary.ary
15000                     = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
15001                 /* FALLTHROUGH */
15002             case CXt_LOOP_LIST:
15003             case CXt_LOOP_LAZYIV:
15004                 /* code common to all 'for' CXt_LOOP_* types */
15005                 ncx->blk_loop.itersave =
15006                                     sv_dup_inc(ncx->blk_loop.itersave, param);
15007                 if (CxPADLOOP(ncx)) {
15008                     PADOFFSET off = ncx->blk_loop.itervar_u.svp
15009                                     - &CX_CURPAD_SV(ncx->blk_loop, 0);
15010                     ncx->blk_loop.oldcomppad =
15011                                     (PAD*)ptr_table_fetch(PL_ptr_table,
15012                                                 ncx->blk_loop.oldcomppad);
15013                     ncx->blk_loop.itervar_u.svp =
15014                                     &CX_CURPAD_SV(ncx->blk_loop, off);
15015                 }
15016                 else {
15017                     /* this copies the GV if CXp_FOR_GV, or the SV for an
15018                      * alias (for \$x (...)) - relies on gv_dup being the
15019                      * same as sv_dup */
15020                     ncx->blk_loop.itervar_u.gv
15021                         = gv_dup((const GV *)ncx->blk_loop.itervar_u.gv,
15022                                     param);
15023                 }
15024                 break;
15025             case CXt_LOOP_PLAIN:
15026                 break;
15027             case CXt_FORMAT:
15028                 ncx->blk_format.prevcomppad =
15029                         (PAD*)ptr_table_fetch(PL_ptr_table,
15030                                            ncx->blk_format.prevcomppad);
15031                 ncx->blk_format.cv      = cv_dup_inc(ncx->blk_format.cv, param);
15032                 ncx->blk_format.gv      = gv_dup(ncx->blk_format.gv, param);
15033                 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
15034                                                      param);
15035                 break;
15036             case CXt_GIVEN:
15037                 ncx->blk_givwhen.defsv_save =
15038                                 sv_dup_inc(ncx->blk_givwhen.defsv_save, param);
15039                 break;
15040             case CXt_BLOCK:
15041             case CXt_NULL:
15042             case CXt_WHEN:
15043             case CXt_DEFER:
15044                 break;
15045             }
15046         }
15047         --ix;
15048     }
15049     return ncxs;
15050 }
15051
15052 /* duplicate a stack info structure */
15053
15054 PERL_SI *
15055 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
15056 {
15057     PERL_SI *nsi;
15058
15059     PERL_ARGS_ASSERT_SI_DUP;
15060
15061     if (!si)
15062         return (PERL_SI*)NULL;
15063
15064     /* look for it in the table first */
15065     nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
15066     if (nsi)
15067         return nsi;
15068
15069     /* create anew and remember what it is */
15070     Newx(nsi, 1, PERL_SI);
15071     ptr_table_store(PL_ptr_table, si, nsi);
15072
15073     nsi->si_stack       = av_dup_inc(si->si_stack, param);
15074     nsi->si_cxix        = si->si_cxix;
15075     nsi->si_cxsubix     = si->si_cxsubix;
15076     nsi->si_cxmax       = si->si_cxmax;
15077     nsi->si_cxstack     = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
15078     nsi->si_type        = si->si_type;
15079     nsi->si_prev        = si_dup(si->si_prev, param);
15080     nsi->si_next        = si_dup(si->si_next, param);
15081     nsi->si_markoff     = si->si_markoff;
15082 #if defined DEBUGGING && !defined DEBUGGING_RE_ONLY
15083     nsi->si_stack_hwm   = 0;
15084 #endif
15085
15086     return nsi;
15087 }
15088
15089 #define POPINT(ss,ix)   ((ss)[--(ix)].any_i32)
15090 #define TOPINT(ss,ix)   ((ss)[ix].any_i32)
15091 #define POPLONG(ss,ix)  ((ss)[--(ix)].any_long)
15092 #define TOPLONG(ss,ix)  ((ss)[ix].any_long)
15093 #define POPIV(ss,ix)    ((ss)[--(ix)].any_iv)
15094 #define TOPIV(ss,ix)    ((ss)[ix].any_iv)
15095 #define POPUV(ss,ix)    ((ss)[--(ix)].any_uv)
15096 #define TOPUV(ss,ix)    ((ss)[ix].any_uv)
15097 #define POPBOOL(ss,ix)  ((ss)[--(ix)].any_bool)
15098 #define TOPBOOL(ss,ix)  ((ss)[ix].any_bool)
15099 #define POPPTR(ss,ix)   ((ss)[--(ix)].any_ptr)
15100 #define TOPPTR(ss,ix)   ((ss)[ix].any_ptr)
15101 #define POPDPTR(ss,ix)  ((ss)[--(ix)].any_dptr)
15102 #define TOPDPTR(ss,ix)  ((ss)[ix].any_dptr)
15103 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
15104 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
15105
15106 /* XXXXX todo */
15107 #define pv_dup_inc(p)   SAVEPV(p)
15108 #define pv_dup(p)       SAVEPV(p)
15109 #define svp_dup_inc(p,pp)       any_dup(p,pp)
15110
15111 /* map any object to the new equivent - either something in the
15112  * ptr table, or something in the interpreter structure
15113  */
15114
15115 void *
15116 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
15117 {
15118     void *ret;
15119
15120     PERL_ARGS_ASSERT_ANY_DUP;
15121
15122     if (!v)
15123         return (void*)NULL;
15124
15125     /* look for it in the table first */
15126     ret = ptr_table_fetch(PL_ptr_table, v);
15127     if (ret)
15128         return ret;
15129
15130     /* see if it is part of the interpreter structure */
15131     if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
15132         ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
15133     else {
15134         ret = v;
15135     }
15136
15137     return ret;
15138 }
15139
15140 /* duplicate the save stack */
15141
15142 ANY *
15143 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
15144 {
15145     ANY * const ss      = proto_perl->Isavestack;
15146     const I32 max       = proto_perl->Isavestack_max + SS_MAXPUSH;
15147     I32 ix              = proto_perl->Isavestack_ix;
15148     ANY *nss;
15149     const SV *sv;
15150     const GV *gv;
15151     const AV *av;
15152     const HV *hv;
15153     void* ptr;
15154     int intval;
15155     long longval;
15156     GP *gp;
15157     IV iv;
15158     I32 i;
15159     char *c = NULL;
15160     void (*dptr) (void*);
15161     void (*dxptr) (pTHX_ void*);
15162
15163     PERL_ARGS_ASSERT_SS_DUP;
15164
15165     Newx(nss, max, ANY);
15166
15167     while (ix > 0) {
15168         const UV uv = POPUV(ss,ix);
15169         const U8 type = (U8)uv & SAVE_MASK;
15170
15171         TOPUV(nss,ix) = uv;
15172         switch (type) {
15173         case SAVEt_CLEARSV:
15174         case SAVEt_CLEARPADRANGE:
15175             break;
15176         case SAVEt_HELEM:               /* hash element */
15177         case SAVEt_SV:                  /* scalar reference */
15178             sv = (const SV *)POPPTR(ss,ix);
15179             TOPPTR(nss,ix) = SvREFCNT_inc(sv_dup_inc(sv, param));
15180             /* FALLTHROUGH */
15181         case SAVEt_ITEM:                        /* normal string */
15182         case SAVEt_GVSV:                        /* scalar slot in GV */
15183             sv = (const SV *)POPPTR(ss,ix);
15184             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
15185             if (type == SAVEt_SV)
15186                 break;
15187             /* FALLTHROUGH */
15188         case SAVEt_FREESV:
15189         case SAVEt_MORTALIZESV:
15190         case SAVEt_READONLY_OFF:
15191             sv = (const SV *)POPPTR(ss,ix);
15192             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
15193             break;
15194         case SAVEt_FREEPADNAME:
15195             ptr = POPPTR(ss,ix);
15196             TOPPTR(nss,ix) = padname_dup((PADNAME *)ptr, param);
15197             PadnameREFCNT((PADNAME *)TOPPTR(nss,ix))++;
15198             break;
15199         case SAVEt_SHARED_PVREF:                /* char* in shared space */
15200             c = (char*)POPPTR(ss,ix);
15201             TOPPTR(nss,ix) = savesharedpv(c);
15202             ptr = POPPTR(ss,ix);
15203             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
15204             break;
15205         case SAVEt_GENERIC_SVREF:               /* generic sv */
15206         case SAVEt_SVREF:                       /* scalar reference */
15207             sv = (const SV *)POPPTR(ss,ix);
15208             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
15209             if (type == SAVEt_SVREF)
15210                 SvREFCNT_inc_simple_void((SV *)TOPPTR(nss,ix));
15211             ptr = POPPTR(ss,ix);
15212             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
15213             break;
15214         case SAVEt_GVSLOT:              /* any slot in GV */
15215             sv = (const SV *)POPPTR(ss,ix);
15216             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
15217             ptr = POPPTR(ss,ix);
15218             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
15219             sv = (const SV *)POPPTR(ss,ix);
15220             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
15221             break;
15222         case SAVEt_HV:                          /* hash reference */
15223         case SAVEt_AV:                          /* array reference */
15224             sv = (const SV *) POPPTR(ss,ix);
15225             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
15226             /* FALLTHROUGH */
15227         case SAVEt_COMPPAD:
15228         case SAVEt_NSTAB:
15229             sv = (const SV *) POPPTR(ss,ix);
15230             TOPPTR(nss,ix) = sv_dup(sv, param);
15231             break;
15232         case SAVEt_INT:                         /* int reference */
15233             ptr = POPPTR(ss,ix);
15234             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
15235             intval = (int)POPINT(ss,ix);
15236             TOPINT(nss,ix) = intval;
15237             break;
15238         case SAVEt_LONG:                        /* long reference */
15239             ptr = POPPTR(ss,ix);
15240             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
15241             longval = (long)POPLONG(ss,ix);
15242             TOPLONG(nss,ix) = longval;
15243             break;
15244         case SAVEt_I32:                         /* I32 reference */
15245             ptr = POPPTR(ss,ix);
15246             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
15247             i = POPINT(ss,ix);
15248             TOPINT(nss,ix) = i;
15249             break;
15250         case SAVEt_IV:                          /* IV reference */
15251         case SAVEt_STRLEN:                      /* STRLEN/size_t ref */
15252             ptr = POPPTR(ss,ix);
15253             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
15254             iv = POPIV(ss,ix);
15255             TOPIV(nss,ix) = iv;
15256             break;
15257         case SAVEt_TMPSFLOOR:
15258             iv = POPIV(ss,ix);
15259             TOPIV(nss,ix) = iv;
15260             break;
15261         case SAVEt_HPTR:                        /* HV* reference */
15262         case SAVEt_APTR:                        /* AV* reference */
15263         case SAVEt_SPTR:                        /* SV* reference */
15264             ptr = POPPTR(ss,ix);
15265             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
15266             sv = (const SV *)POPPTR(ss,ix);
15267             TOPPTR(nss,ix) = sv_dup(sv, param);
15268             break;
15269         case SAVEt_VPTR:                        /* random* reference */
15270             ptr = POPPTR(ss,ix);
15271             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
15272             /* FALLTHROUGH */
15273         case SAVEt_STRLEN_SMALL:
15274         case SAVEt_INT_SMALL:
15275         case SAVEt_I32_SMALL:
15276         case SAVEt_I16:                         /* I16 reference */
15277         case SAVEt_I8:                          /* I8 reference */
15278         case SAVEt_BOOL:
15279             ptr = POPPTR(ss,ix);
15280             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
15281             break;
15282         case SAVEt_GENERIC_PVREF:               /* generic char* */
15283         case SAVEt_PPTR:                        /* char* reference */
15284             ptr = POPPTR(ss,ix);
15285             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
15286             c = (char*)POPPTR(ss,ix);
15287             TOPPTR(nss,ix) = pv_dup(c);
15288             break;
15289         case SAVEt_GP:                          /* scalar reference */
15290             gp = (GP*)POPPTR(ss,ix);
15291             TOPPTR(nss,ix) = gp = gp_dup(gp, param);
15292             (void)GpREFCNT_inc(gp);
15293             gv = (const GV *)POPPTR(ss,ix);
15294             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
15295             break;
15296         case SAVEt_FREEOP:
15297             ptr = POPPTR(ss,ix);
15298             if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
15299                 /* these are assumed to be refcounted properly */
15300                 OP *o;
15301                 switch (((OP*)ptr)->op_type) {
15302                 case OP_LEAVESUB:
15303                 case OP_LEAVESUBLV:
15304                 case OP_LEAVEEVAL:
15305                 case OP_LEAVE:
15306                 case OP_SCOPE:
15307                 case OP_LEAVEWRITE:
15308                     TOPPTR(nss,ix) = ptr;
15309                     o = (OP*)ptr;
15310                     OP_REFCNT_LOCK;
15311                     (void) OpREFCNT_inc(o);
15312                     OP_REFCNT_UNLOCK;
15313                     break;
15314                 default:
15315                     TOPPTR(nss,ix) = NULL;
15316                     break;
15317                 }
15318             }
15319             else
15320                 TOPPTR(nss,ix) = NULL;
15321             break;
15322         case SAVEt_FREECOPHH:
15323             ptr = POPPTR(ss,ix);
15324             TOPPTR(nss,ix) = cophh_copy((COPHH *)ptr);
15325             break;
15326         case SAVEt_ADELETE:
15327             av = (const AV *)POPPTR(ss,ix);
15328             TOPPTR(nss,ix) = av_dup_inc(av, param);
15329             i = POPINT(ss,ix);
15330             TOPINT(nss,ix) = i;
15331             break;
15332         case SAVEt_DELETE:
15333             hv = (const HV *)POPPTR(ss,ix);
15334             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
15335             i = POPINT(ss,ix);
15336             TOPINT(nss,ix) = i;
15337             /* FALLTHROUGH */
15338         case SAVEt_FREEPV:
15339             c = (char*)POPPTR(ss,ix);
15340             TOPPTR(nss,ix) = pv_dup_inc(c);
15341             break;
15342         case SAVEt_STACK_POS:           /* Position on Perl stack */
15343             i = POPINT(ss,ix);
15344             TOPINT(nss,ix) = i;
15345             break;
15346         case SAVEt_DESTRUCTOR:
15347             ptr = POPPTR(ss,ix);
15348             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
15349             dptr = POPDPTR(ss,ix);
15350             TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
15351                                         any_dup(FPTR2DPTR(void *, dptr),
15352                                                 proto_perl));
15353             break;
15354         case SAVEt_DESTRUCTOR_X:
15355             ptr = POPPTR(ss,ix);
15356             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
15357             dxptr = POPDXPTR(ss,ix);
15358             TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
15359                                          any_dup(FPTR2DPTR(void *, dxptr),
15360                                                  proto_perl));
15361             break;
15362         case SAVEt_REGCONTEXT:
15363         case SAVEt_ALLOC:
15364             ix -= uv >> SAVE_TIGHT_SHIFT;
15365             break;
15366         case SAVEt_AELEM:               /* array element */
15367             sv = (const SV *)POPPTR(ss,ix);
15368             TOPPTR(nss,ix) = SvREFCNT_inc(sv_dup_inc(sv, param));
15369             iv = POPIV(ss,ix);
15370             TOPIV(nss,ix) = iv;
15371             av = (const AV *)POPPTR(ss,ix);
15372             TOPPTR(nss,ix) = av_dup_inc(av, param);
15373             break;
15374         case SAVEt_OP:
15375             ptr = POPPTR(ss,ix);
15376             TOPPTR(nss,ix) = ptr;
15377             break;
15378         case SAVEt_HINTS_HH:
15379             hv = (const HV *)POPPTR(ss,ix);
15380             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
15381             /* FALLTHROUGH */
15382         case SAVEt_HINTS:
15383             ptr = POPPTR(ss,ix);
15384             ptr = cophh_copy((COPHH*)ptr);
15385             TOPPTR(nss,ix) = ptr;
15386             i = POPINT(ss,ix);
15387             TOPINT(nss,ix) = i;
15388             break;
15389         case SAVEt_PADSV_AND_MORTALIZE:
15390             longval = (long)POPLONG(ss,ix);
15391             TOPLONG(nss,ix) = longval;
15392             ptr = POPPTR(ss,ix);
15393             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
15394             sv = (const SV *)POPPTR(ss,ix);
15395             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
15396             break;
15397         case SAVEt_SET_SVFLAGS:
15398             i = POPINT(ss,ix);
15399             TOPINT(nss,ix) = i;
15400             i = POPINT(ss,ix);
15401             TOPINT(nss,ix) = i;
15402             sv = (const SV *)POPPTR(ss,ix);
15403             TOPPTR(nss,ix) = sv_dup(sv, param);
15404             break;
15405         case SAVEt_COMPILE_WARNINGS:
15406             ptr = POPPTR(ss,ix);
15407             TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
15408             break;
15409         case SAVEt_PARSER:
15410             ptr = POPPTR(ss,ix);
15411             TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
15412             break;
15413         default:
15414             Perl_croak(aTHX_
15415                        "panic: ss_dup inconsistency (%" IVdf ")", (IV) type);
15416         }
15417     }
15418
15419     return nss;
15420 }
15421
15422
15423 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
15424  * flag to the result. This is done for each stash before cloning starts,
15425  * so we know which stashes want their objects cloned */
15426
15427 static void
15428 do_mark_cloneable_stash(pTHX_ SV *const sv)
15429 {
15430     const HEK * const hvname = HvNAME_HEK((const HV *)sv);
15431     if (hvname) {
15432         GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
15433         SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
15434         if (cloner && GvCV(cloner)) {
15435             dSP;
15436             UV status;
15437
15438             ENTER;
15439             SAVETMPS;
15440             PUSHMARK(SP);
15441             mXPUSHs(newSVhek(hvname));
15442             PUTBACK;
15443             call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
15444             SPAGAIN;
15445             status = POPu;
15446             PUTBACK;
15447             FREETMPS;
15448             LEAVE;
15449             if (status)
15450                 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
15451         }
15452     }
15453 }
15454
15455
15456
15457 /*
15458 =for apidoc perl_clone
15459
15460 Create and return a new interpreter by cloning the current one.
15461
15462 C<perl_clone> takes these flags as parameters:
15463
15464 C<CLONEf_COPY_STACKS> - is used to, well, copy the stacks also,
15465 without it we only clone the data and zero the stacks,
15466 with it we copy the stacks and the new perl interpreter is
15467 ready to run at the exact same point as the previous one.
15468 The pseudo-fork code uses C<COPY_STACKS> while the
15469 threads->create doesn't.
15470
15471 C<CLONEf_KEEP_PTR_TABLE> -
15472 C<perl_clone> keeps a ptr_table with the pointer of the old
15473 variable as a key and the new variable as a value,
15474 this allows it to check if something has been cloned and not
15475 clone it again, but rather just use the value and increase the
15476 refcount.
15477 If C<KEEP_PTR_TABLE> is not set then C<perl_clone> will kill the ptr_table
15478 using the function S<C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>>.
15479 A reason to keep it around is if you want to dup some of your own
15480 variables which are outside the graph that perl scans.
15481
15482 C<CLONEf_CLONE_HOST> -
15483 This is a win32 thing, it is ignored on unix, it tells perl's
15484 win32host code (which is c++) to clone itself, this is needed on
15485 win32 if you want to run two threads at the same time,
15486 if you just want to do some stuff in a separate perl interpreter
15487 and then throw it away and return to the original one,
15488 you don't need to do anything.
15489
15490 =cut
15491 */
15492
15493 /* XXX the above needs expanding by someone who actually understands it ! */
15494 EXTERN_C PerlInterpreter *
15495 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
15496
15497 PerlInterpreter *
15498 perl_clone(PerlInterpreter *proto_perl, UV flags)
15499 {
15500 #ifdef PERL_IMPLICIT_SYS
15501
15502     PERL_ARGS_ASSERT_PERL_CLONE;
15503
15504    /* perlhost.h so we need to call into it
15505    to clone the host, CPerlHost should have a c interface, sky */
15506
15507 #ifndef __amigaos4__
15508    if (flags & CLONEf_CLONE_HOST) {
15509        return perl_clone_host(proto_perl,flags);
15510    }
15511 #endif
15512    return perl_clone_using(proto_perl, flags,
15513                             proto_perl->IMem,
15514                             proto_perl->IMemShared,
15515                             proto_perl->IMemParse,
15516                             proto_perl->IEnv,
15517                             proto_perl->IStdIO,
15518                             proto_perl->ILIO,
15519                             proto_perl->IDir,
15520                             proto_perl->ISock,
15521                             proto_perl->IProc);
15522 }
15523
15524 PerlInterpreter *
15525 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
15526                  struct IPerlMem* ipM, struct IPerlMem* ipMS,
15527                  struct IPerlMem* ipMP, struct IPerlEnv* ipE,
15528                  struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
15529                  struct IPerlDir* ipD, struct IPerlSock* ipS,
15530                  struct IPerlProc* ipP)
15531 {
15532     /* XXX many of the string copies here can be optimized if they're
15533      * constants; they need to be allocated as common memory and just
15534      * their pointers copied. */
15535
15536     IV i;
15537     CLONE_PARAMS clone_params;
15538     CLONE_PARAMS* const param = &clone_params;
15539
15540     PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
15541
15542     PERL_ARGS_ASSERT_PERL_CLONE_USING;
15543 #else           /* !PERL_IMPLICIT_SYS */
15544     IV i;
15545     CLONE_PARAMS clone_params;
15546     CLONE_PARAMS* param = &clone_params;
15547     PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
15548
15549     PERL_ARGS_ASSERT_PERL_CLONE;
15550 #endif          /* PERL_IMPLICIT_SYS */
15551
15552     /* for each stash, determine whether its objects should be cloned */
15553     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
15554     PERL_SET_THX(my_perl);
15555
15556 #ifdef DEBUGGING
15557     PoisonNew(my_perl, 1, PerlInterpreter);
15558     PL_op = NULL;
15559     PL_curcop = NULL;
15560     PL_defstash = NULL; /* may be used by perl malloc() */
15561     PL_markstack = 0;
15562     PL_scopestack = 0;
15563     PL_scopestack_name = 0;
15564     PL_savestack = 0;
15565     PL_savestack_ix = 0;
15566     PL_savestack_max = -1;
15567     PL_sig_pending = 0;
15568     PL_parser = NULL;
15569     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
15570     Zero(&PL_padname_undef, 1, PADNAME);
15571     Zero(&PL_padname_const, 1, PADNAME);
15572 #  ifdef DEBUG_LEAKING_SCALARS
15573     PL_sv_serial = (((UV)my_perl >> 2) & 0xfff) * 1000000;
15574 #  endif
15575 #  ifdef PERL_TRACE_OPS
15576     Zero(PL_op_exec_cnt, OP_max+2, UV);
15577 #  endif
15578 #else   /* !DEBUGGING */
15579     Zero(my_perl, 1, PerlInterpreter);
15580 #endif  /* DEBUGGING */
15581
15582 #ifdef PERL_IMPLICIT_SYS
15583     /* host pointers */
15584     PL_Mem              = ipM;
15585     PL_MemShared        = ipMS;
15586     PL_MemParse         = ipMP;
15587     PL_Env              = ipE;
15588     PL_StdIO            = ipStd;
15589     PL_LIO              = ipLIO;
15590     PL_Dir              = ipD;
15591     PL_Sock             = ipS;
15592     PL_Proc             = ipP;
15593 #endif          /* PERL_IMPLICIT_SYS */
15594
15595
15596     param->flags = flags;
15597     /* Nothing in the core code uses this, but we make it available to
15598        extensions (using mg_dup).  */
15599     param->proto_perl = proto_perl;
15600     /* Likely nothing will use this, but it is initialised to be consistent
15601        with Perl_clone_params_new().  */
15602     param->new_perl = my_perl;
15603     param->unreferenced = NULL;
15604
15605
15606     INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
15607
15608     PL_body_arenas = NULL;
15609     Zero(&PL_body_roots, 1, PL_body_roots);
15610
15611     PL_sv_count         = 0;
15612     PL_sv_root          = NULL;
15613     PL_sv_arenaroot     = NULL;
15614
15615     PL_debug            = proto_perl->Idebug;
15616
15617     /* dbargs array probably holds garbage */
15618     PL_dbargs           = NULL;
15619
15620     PL_compiling = proto_perl->Icompiling;
15621
15622     /* pseudo environmental stuff */
15623     PL_origargc         = proto_perl->Iorigargc;
15624     PL_origargv         = proto_perl->Iorigargv;
15625
15626 #ifndef NO_TAINT_SUPPORT
15627     /* Set tainting stuff before PerlIO_debug can possibly get called */
15628     PL_tainting         = proto_perl->Itainting;
15629     PL_taint_warn       = proto_perl->Itaint_warn;
15630 #else
15631     PL_tainting         = FALSE;
15632     PL_taint_warn       = FALSE;
15633 #endif
15634
15635     PL_minus_c          = proto_perl->Iminus_c;
15636
15637     PL_localpatches     = proto_perl->Ilocalpatches;
15638     PL_splitstr         = proto_perl->Isplitstr;
15639     PL_minus_n          = proto_perl->Iminus_n;
15640     PL_minus_p          = proto_perl->Iminus_p;
15641     PL_minus_l          = proto_perl->Iminus_l;
15642     PL_minus_a          = proto_perl->Iminus_a;
15643     PL_minus_E          = proto_perl->Iminus_E;
15644     PL_minus_F          = proto_perl->Iminus_F;
15645     PL_doswitches       = proto_perl->Idoswitches;
15646     PL_dowarn           = proto_perl->Idowarn;
15647 #ifdef PERL_SAWAMPERSAND
15648     PL_sawampersand     = proto_perl->Isawampersand;
15649 #endif
15650     PL_unsafe           = proto_perl->Iunsafe;
15651     PL_perldb           = proto_perl->Iperldb;
15652     PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
15653     PL_exit_flags       = proto_perl->Iexit_flags;
15654
15655     /* XXX time(&PL_basetime) when asked for? */
15656     PL_basetime         = proto_perl->Ibasetime;
15657
15658     PL_maxsysfd         = proto_perl->Imaxsysfd;
15659     PL_statusvalue      = proto_perl->Istatusvalue;
15660 #ifdef __VMS
15661     PL_statusvalue_vms  = proto_perl->Istatusvalue_vms;
15662 #else
15663     PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
15664 #endif
15665
15666     /* RE engine related */
15667     PL_regmatch_slab    = NULL;
15668     PL_reg_curpm        = NULL;
15669
15670     PL_sub_generation   = proto_perl->Isub_generation;
15671
15672     /* funky return mechanisms */
15673     PL_forkprocess      = proto_perl->Iforkprocess;
15674
15675     /* internal state */
15676     PL_main_start       = proto_perl->Imain_start;
15677     PL_eval_root        = proto_perl->Ieval_root;
15678     PL_eval_start       = proto_perl->Ieval_start;
15679
15680     PL_filemode         = proto_perl->Ifilemode;
15681     PL_lastfd           = proto_perl->Ilastfd;
15682     PL_oldname          = proto_perl->Ioldname;         /* XXX not quite right */
15683     PL_gensym           = proto_perl->Igensym;
15684
15685     PL_laststatval      = proto_perl->Ilaststatval;
15686     PL_laststype        = proto_perl->Ilaststype;
15687     PL_mess_sv          = NULL;
15688
15689     PL_profiledata      = NULL;
15690
15691     PL_generation       = proto_perl->Igeneration;
15692
15693     PL_in_clean_objs    = proto_perl->Iin_clean_objs;
15694     PL_in_clean_all     = proto_perl->Iin_clean_all;
15695
15696     PL_delaymagic_uid   = proto_perl->Idelaymagic_uid;
15697     PL_delaymagic_euid  = proto_perl->Idelaymagic_euid;
15698     PL_delaymagic_gid   = proto_perl->Idelaymagic_gid;
15699     PL_delaymagic_egid  = proto_perl->Idelaymagic_egid;
15700     PL_nomemok          = proto_perl->Inomemok;
15701     PL_an               = proto_perl->Ian;
15702     PL_evalseq          = proto_perl->Ievalseq;
15703     PL_origenviron      = proto_perl->Iorigenviron;     /* XXX not quite right */
15704     PL_origalen         = proto_perl->Iorigalen;
15705
15706     PL_sighandlerp      = proto_perl->Isighandlerp;
15707     PL_sighandler1p     = proto_perl->Isighandler1p;
15708     PL_sighandler3p     = proto_perl->Isighandler3p;
15709
15710     PL_runops           = proto_perl->Irunops;
15711
15712     PL_subline          = proto_perl->Isubline;
15713
15714     PL_cv_has_eval      = proto_perl->Icv_has_eval;
15715
15716 #ifdef USE_LOCALE_COLLATE
15717     PL_collation_ix     = proto_perl->Icollation_ix;
15718     PL_collation_standard = proto_perl->Icollation_standard;
15719     PL_collxfrm_base    = proto_perl->Icollxfrm_base;
15720     PL_collxfrm_mult    = proto_perl->Icollxfrm_mult;
15721     PL_strxfrm_max_cp   = proto_perl->Istrxfrm_max_cp;
15722 #endif /* USE_LOCALE_COLLATE */
15723
15724 #ifdef USE_LOCALE_NUMERIC
15725     PL_numeric_standard = proto_perl->Inumeric_standard;
15726     PL_numeric_underlying       = proto_perl->Inumeric_underlying;
15727     PL_numeric_underlying_is_standard   = proto_perl->Inumeric_underlying_is_standard;
15728 #endif /* !USE_LOCALE_NUMERIC */
15729
15730     /* Did the locale setup indicate UTF-8? */
15731     PL_utf8locale       = proto_perl->Iutf8locale;
15732     PL_in_utf8_CTYPE_locale = proto_perl->Iin_utf8_CTYPE_locale;
15733     PL_in_utf8_COLLATE_locale = proto_perl->Iin_utf8_COLLATE_locale;
15734     my_strlcpy(PL_locale_utf8ness, proto_perl->Ilocale_utf8ness, sizeof(PL_locale_utf8ness));
15735 #if defined(USE_ITHREADS) && ! defined(USE_THREAD_SAFE_LOCALE)
15736     PL_lc_numeric_mutex_depth = 0;
15737 #endif
15738     /* Unicode features (see perlrun/-C) */
15739     PL_unicode          = proto_perl->Iunicode;
15740
15741     /* Pre-5.8 signals control */
15742     PL_signals          = proto_perl->Isignals;
15743
15744     /* times() ticks per second */
15745     PL_clocktick        = proto_perl->Iclocktick;
15746
15747     /* Recursion stopper for PerlIO_find_layer */
15748     PL_in_load_module   = proto_perl->Iin_load_module;
15749
15750     /* Not really needed/useful since the reenrant_retint is "volatile",
15751      * but do it for consistency's sake. */
15752     PL_reentrant_retint = proto_perl->Ireentrant_retint;
15753
15754     /* Hooks to shared SVs and locks. */
15755     PL_sharehook        = proto_perl->Isharehook;
15756     PL_lockhook         = proto_perl->Ilockhook;
15757     PL_unlockhook       = proto_perl->Iunlockhook;
15758     PL_threadhook       = proto_perl->Ithreadhook;
15759     PL_destroyhook      = proto_perl->Idestroyhook;
15760     PL_signalhook       = proto_perl->Isignalhook;
15761
15762     PL_globhook         = proto_perl->Iglobhook;
15763
15764     PL_srand_called     = proto_perl->Isrand_called;
15765     Copy(&(proto_perl->Irandom_state), &PL_random_state, 1, PL_RANDOM_STATE_TYPE);
15766
15767     if (flags & CLONEf_COPY_STACKS) {
15768         /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
15769         PL_tmps_ix              = proto_perl->Itmps_ix;
15770         PL_tmps_max             = proto_perl->Itmps_max;
15771         PL_tmps_floor           = proto_perl->Itmps_floor;
15772
15773         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
15774          * NOTE: unlike the others! */
15775         PL_scopestack_ix        = proto_perl->Iscopestack_ix;
15776         PL_scopestack_max       = proto_perl->Iscopestack_max;
15777
15778         /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
15779          * NOTE: unlike the others! */
15780         PL_savestack_ix         = proto_perl->Isavestack_ix;
15781         PL_savestack_max        = proto_perl->Isavestack_max;
15782     }
15783
15784     PL_start_env        = proto_perl->Istart_env;       /* XXXXXX */
15785     PL_top_env          = &PL_start_env;
15786
15787     PL_op               = proto_perl->Iop;
15788
15789     PL_Sv               = NULL;
15790     PL_Xpv              = (XPV*)NULL;
15791     my_perl->Ina        = proto_perl->Ina;
15792
15793     PL_statcache        = proto_perl->Istatcache;
15794
15795 #ifndef NO_TAINT_SUPPORT
15796     PL_tainted          = proto_perl->Itainted;
15797 #else
15798     PL_tainted          = FALSE;
15799 #endif
15800     PL_curpm            = proto_perl->Icurpm;   /* XXX No PMOP ref count */
15801
15802     PL_chopset          = proto_perl->Ichopset; /* XXX never deallocated */
15803
15804     PL_restartjmpenv    = proto_perl->Irestartjmpenv;
15805     PL_restartop        = proto_perl->Irestartop;
15806     PL_in_eval          = proto_perl->Iin_eval;
15807     PL_delaymagic       = proto_perl->Idelaymagic;
15808     PL_phase            = proto_perl->Iphase;
15809     PL_localizing       = proto_perl->Ilocalizing;
15810
15811     PL_hv_fetch_ent_mh  = NULL;
15812     PL_modcount         = proto_perl->Imodcount;
15813     PL_lastgotoprobe    = NULL;
15814     PL_dumpindent       = proto_perl->Idumpindent;
15815
15816     PL_efloatbuf        = NULL;         /* reinits on demand */
15817     PL_efloatsize       = 0;                    /* reinits on demand */
15818
15819     /* regex stuff */
15820
15821     PL_colorset         = 0;            /* reinits PL_colors[] */
15822     /*PL_colors[6]      = {0,0,0,0,0,0};*/
15823
15824     /* Pluggable optimizer */
15825     PL_peepp            = proto_perl->Ipeepp;
15826     PL_rpeepp           = proto_perl->Irpeepp;
15827     /* op_free() hook */
15828     PL_opfreehook       = proto_perl->Iopfreehook;
15829
15830 #  ifdef PERL_MEM_LOG
15831     Zero(PL_mem_log, sizeof(PL_mem_log), char);
15832 #  endif
15833
15834 #ifdef USE_REENTRANT_API
15835     /* XXX: things like -Dm will segfault here in perlio, but doing
15836      *  PERL_SET_CONTEXT(proto_perl);
15837      * breaks too many other things
15838      */
15839     Perl_reentrant_init(aTHX);
15840 #endif
15841
15842     /* create SV map for pointer relocation */
15843     PL_ptr_table = ptr_table_new();
15844
15845     /* initialize these special pointers as early as possible */
15846     init_constants();
15847     ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
15848     ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
15849     ptr_table_store(PL_ptr_table, &proto_perl->Isv_zero, &PL_sv_zero);
15850     ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
15851     ptr_table_store(PL_ptr_table, &proto_perl->Ipadname_const,
15852                     &PL_padname_const);
15853
15854     /* create (a non-shared!) shared string table */
15855     PL_strtab           = newHV();
15856     HvSHAREKEYS_off(PL_strtab);
15857     hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
15858     ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
15859
15860     Zero(PL_sv_consts, SV_CONSTS_COUNT, SV*);
15861
15862     /* This PV will be free'd special way so must set it same way op.c does */
15863     PL_compiling.cop_file    = savesharedpv(PL_compiling.cop_file);
15864     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
15865
15866     ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
15867     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
15868     CopHINTHASH_set(&PL_compiling, cophh_copy(CopHINTHASH_get(&PL_compiling)));
15869     PL_curcop           = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
15870
15871     param->stashes      = newAV();  /* Setup array of objects to call clone on */
15872     /* This makes no difference to the implementation, as it always pushes
15873        and shifts pointers to other SVs without changing their reference
15874        count, with the array becoming empty before it is freed. However, it
15875        makes it conceptually clear what is going on, and will avoid some
15876        work inside av.c, filling slots between AvFILL() and AvMAX() with
15877        &PL_sv_undef, and SvREFCNT_dec()ing those.  */
15878     AvREAL_off(param->stashes);
15879
15880     if (!(flags & CLONEf_COPY_STACKS)) {
15881         param->unreferenced = newAV();
15882     }
15883
15884 #ifdef PERLIO_LAYERS
15885     /* Clone PerlIO tables as soon as we can handle general xx_dup() */
15886     PerlIO_clone(aTHX_ proto_perl, param);
15887 #endif
15888
15889     PL_envgv            = gv_dup_inc(proto_perl->Ienvgv, param);
15890     PL_incgv            = gv_dup_inc(proto_perl->Iincgv, param);
15891     PL_hintgv           = gv_dup_inc(proto_perl->Ihintgv, param);
15892     PL_origfilename     = SAVEPV(proto_perl->Iorigfilename);
15893     PL_xsubfilename     = proto_perl->Ixsubfilename;
15894     PL_diehook          = sv_dup_inc(proto_perl->Idiehook, param);
15895     PL_warnhook         = sv_dup_inc(proto_perl->Iwarnhook, param);
15896
15897     /* switches */
15898     PL_patchlevel       = sv_dup_inc(proto_perl->Ipatchlevel, param);
15899     PL_inplace          = SAVEPV(proto_perl->Iinplace);
15900     PL_e_script         = sv_dup_inc(proto_perl->Ie_script, param);
15901
15902     /* magical thingies */
15903
15904     SvPVCLEAR(PERL_DEBUG_PAD(0));        /* For regex debugging. */
15905     SvPVCLEAR(PERL_DEBUG_PAD(1));        /* ext/re needs these */
15906     SvPVCLEAR(PERL_DEBUG_PAD(2));        /* even without DEBUGGING. */
15907
15908
15909     /* Clone the regex array */
15910     /* ORANGE FIXME for plugins, probably in the SV dup code.
15911        newSViv(PTR2IV(CALLREGDUPE(
15912        INT2PTR(REGEXP *, SvIVX(regex)), param))))
15913     */
15914     PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
15915     PL_regex_pad = AvARRAY(PL_regex_padav);
15916
15917     PL_stashpadmax      = proto_perl->Istashpadmax;
15918     PL_stashpadix       = proto_perl->Istashpadix ;
15919     Newx(PL_stashpad, PL_stashpadmax, HV *);
15920     {
15921         PADOFFSET o = 0;
15922         for (; o < PL_stashpadmax; ++o)
15923             PL_stashpad[o] = hv_dup(proto_perl->Istashpad[o], param);
15924     }
15925
15926     /* shortcuts to various I/O objects */
15927     PL_ofsgv            = gv_dup_inc(proto_perl->Iofsgv, param);
15928     PL_stdingv          = gv_dup(proto_perl->Istdingv, param);
15929     PL_stderrgv         = gv_dup(proto_perl->Istderrgv, param);
15930     PL_defgv            = gv_dup(proto_perl->Idefgv, param);
15931     PL_argvgv           = gv_dup_inc(proto_perl->Iargvgv, param);
15932     PL_argvoutgv        = gv_dup(proto_perl->Iargvoutgv, param);
15933     PL_argvout_stack    = av_dup_inc(proto_perl->Iargvout_stack, param);
15934
15935     /* shortcuts to regexp stuff */
15936     PL_replgv           = gv_dup_inc(proto_perl->Ireplgv, param);
15937
15938     /* shortcuts to misc objects */
15939     PL_errgv            = gv_dup(proto_perl->Ierrgv, param);
15940
15941     /* shortcuts to debugging objects */
15942     PL_DBgv             = gv_dup_inc(proto_perl->IDBgv, param);
15943     PL_DBline           = gv_dup_inc(proto_perl->IDBline, param);
15944     PL_DBsub            = gv_dup_inc(proto_perl->IDBsub, param);
15945     PL_DBsingle         = sv_dup(proto_perl->IDBsingle, param);
15946     PL_DBtrace          = sv_dup(proto_perl->IDBtrace, param);
15947     PL_DBsignal         = sv_dup(proto_perl->IDBsignal, param);
15948     Copy(proto_perl->IDBcontrol, PL_DBcontrol, DBVARMG_COUNT, IV);
15949
15950     /* symbol tables */
15951     PL_defstash         = hv_dup_inc(proto_perl->Idefstash, param);
15952     PL_curstash         = hv_dup_inc(proto_perl->Icurstash, param);
15953     PL_debstash         = hv_dup(proto_perl->Idebstash, param);
15954     PL_globalstash      = hv_dup(proto_perl->Iglobalstash, param);
15955     PL_curstname        = sv_dup_inc(proto_perl->Icurstname, param);
15956
15957     PL_beginav          = av_dup_inc(proto_perl->Ibeginav, param);
15958     PL_beginav_save     = av_dup_inc(proto_perl->Ibeginav_save, param);
15959     PL_checkav_save     = av_dup_inc(proto_perl->Icheckav_save, param);
15960     PL_unitcheckav      = av_dup_inc(proto_perl->Iunitcheckav, param);
15961     PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
15962     PL_endav            = av_dup_inc(proto_perl->Iendav, param);
15963     PL_checkav          = av_dup_inc(proto_perl->Icheckav, param);
15964     PL_initav           = av_dup_inc(proto_perl->Iinitav, param);
15965     PL_savebegin        = proto_perl->Isavebegin;
15966
15967     PL_isarev           = hv_dup_inc(proto_perl->Iisarev, param);
15968
15969     /* subprocess state */
15970     PL_fdpid            = av_dup_inc(proto_perl->Ifdpid, param);
15971
15972     if (proto_perl->Iop_mask)
15973         PL_op_mask      = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
15974     else
15975         PL_op_mask      = NULL;
15976     /* PL_asserting        = proto_perl->Iasserting; */
15977
15978     /* current interpreter roots */
15979     PL_main_cv          = cv_dup_inc(proto_perl->Imain_cv, param);
15980     OP_REFCNT_LOCK;
15981     PL_main_root        = OpREFCNT_inc(proto_perl->Imain_root);
15982     OP_REFCNT_UNLOCK;
15983
15984     /* runtime control stuff */
15985     PL_curcopdb         = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
15986
15987     PL_preambleav       = av_dup_inc(proto_perl->Ipreambleav, param);
15988
15989     PL_ors_sv           = sv_dup_inc(proto_perl->Iors_sv, param);
15990
15991     /* interpreter atexit processing */
15992     PL_exitlistlen      = proto_perl->Iexitlistlen;
15993     if (PL_exitlistlen) {
15994         Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
15995         Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
15996     }
15997     else
15998         PL_exitlist     = (PerlExitListEntry*)NULL;
15999
16000     PL_my_cxt_size = proto_perl->Imy_cxt_size;
16001     if (PL_my_cxt_size) {
16002         Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
16003         Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
16004     }
16005     else {
16006         PL_my_cxt_list  = (void**)NULL;
16007     }
16008     PL_modglobal        = hv_dup_inc(proto_perl->Imodglobal, param);
16009     PL_custom_op_names  = hv_dup_inc(proto_perl->Icustom_op_names,param);
16010     PL_custom_op_descs  = hv_dup_inc(proto_perl->Icustom_op_descs,param);
16011     PL_custom_ops       = hv_dup_inc(proto_perl->Icustom_ops, param);
16012
16013     PL_compcv                   = cv_dup(proto_perl->Icompcv, param);
16014
16015     PAD_CLONE_VARS(proto_perl, param);
16016
16017 #ifdef HAVE_INTERP_INTERN
16018     sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
16019 #endif
16020
16021     PL_DBcv             = cv_dup(proto_perl->IDBcv, param);
16022
16023 #ifdef PERL_USES_PL_PIDSTATUS
16024     PL_pidstatus        = newHV();                      /* XXX flag for cloning? */
16025 #endif
16026     PL_osname           = SAVEPV(proto_perl->Iosname);
16027     PL_parser           = parser_dup(proto_perl->Iparser, param);
16028
16029     /* XXX this only works if the saved cop has already been cloned */
16030     if (proto_perl->Iparser) {
16031         PL_parser->saved_curcop = (COP*)any_dup(
16032                                     proto_perl->Iparser->saved_curcop,
16033                                     proto_perl);
16034     }
16035
16036     PL_subname          = sv_dup_inc(proto_perl->Isubname, param);
16037
16038 #if   defined(USE_POSIX_2008_LOCALE)      \
16039  &&   defined(USE_THREAD_SAFE_LOCALE)     \
16040  && ! defined(HAS_QUERYLOCALE)
16041     for (i = 0; i < (int) C_ARRAY_LENGTH(PL_curlocales); i++) {
16042         PL_curlocales[i] = savepv("."); /* An illegal value */
16043     }
16044 #endif
16045 #ifdef USE_LOCALE_CTYPE
16046     /* Should we warn if uses locale? */
16047     PL_warn_locale      = sv_dup_inc(proto_perl->Iwarn_locale, param);
16048 #endif
16049
16050 #ifdef USE_LOCALE_COLLATE
16051     PL_collation_name   = SAVEPV(proto_perl->Icollation_name);
16052 #endif /* USE_LOCALE_COLLATE */
16053
16054 #ifdef USE_LOCALE_NUMERIC
16055     PL_numeric_name     = SAVEPV(proto_perl->Inumeric_name);
16056     PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
16057
16058 #  if defined(HAS_POSIX_2008_LOCALE)
16059     PL_underlying_numeric_obj = NULL;
16060 #  endif
16061 #endif /* !USE_LOCALE_NUMERIC */
16062
16063 #ifdef HAS_MBRLEN
16064     PL_mbrlen_ps = proto_perl->Imbrlen_ps;
16065 #endif
16066 #ifdef HAS_MBRTOWC
16067     PL_mbrtowc_ps = proto_perl->Imbrtowc_ps;
16068 #endif
16069 #ifdef HAS_WCRTOMB
16070     PL_wcrtomb_ps = proto_perl->Iwcrtomb_ps;
16071 #endif
16072
16073     PL_langinfo_buf = NULL;
16074     PL_langinfo_bufsize = 0;
16075
16076     PL_setlocale_buf = NULL;
16077     PL_setlocale_bufsize = 0;
16078
16079     /* Unicode inversion lists */
16080
16081     PL_AboveLatin1            = sv_dup_inc(proto_perl->IAboveLatin1, param);
16082     PL_Assigned_invlist       = sv_dup_inc(proto_perl->IAssigned_invlist, param);
16083     PL_GCB_invlist            = sv_dup_inc(proto_perl->IGCB_invlist, param);
16084     PL_HasMultiCharFold       = sv_dup_inc(proto_perl->IHasMultiCharFold, param);
16085     PL_InMultiCharFold        = sv_dup_inc(proto_perl->IInMultiCharFold, param);
16086     PL_Latin1                 = sv_dup_inc(proto_perl->ILatin1, param);
16087     PL_LB_invlist             = sv_dup_inc(proto_perl->ILB_invlist, param);
16088     PL_SB_invlist             = sv_dup_inc(proto_perl->ISB_invlist, param);
16089     PL_SCX_invlist            = sv_dup_inc(proto_perl->ISCX_invlist, param);
16090     PL_UpperLatin1            = sv_dup_inc(proto_perl->IUpperLatin1, param);
16091     PL_in_some_fold           = sv_dup_inc(proto_perl->Iin_some_fold, param);
16092     PL_utf8_foldclosures      = sv_dup_inc(proto_perl->Iutf8_foldclosures, param);
16093     PL_utf8_idcont            = sv_dup_inc(proto_perl->Iutf8_idcont, param);
16094     PL_utf8_idstart           = sv_dup_inc(proto_perl->Iutf8_idstart, param);
16095     PL_utf8_perl_idcont       = sv_dup_inc(proto_perl->Iutf8_perl_idcont, param);
16096     PL_utf8_perl_idstart      = sv_dup_inc(proto_perl->Iutf8_perl_idstart, param);
16097     PL_utf8_xidcont           = sv_dup_inc(proto_perl->Iutf8_xidcont, param);
16098     PL_utf8_xidstart          = sv_dup_inc(proto_perl->Iutf8_xidstart, param);
16099     PL_WB_invlist             = sv_dup_inc(proto_perl->IWB_invlist, param);
16100     for (i = 0; i < POSIX_CC_COUNT; i++) {
16101         PL_XPosix_ptrs[i]     = sv_dup_inc(proto_perl->IXPosix_ptrs[i], param);
16102         if (i != _CC_CASED && i != _CC_VERTSPACE) {
16103             PL_Posix_ptrs[i]  = sv_dup_inc(proto_perl->IPosix_ptrs[i], param);
16104         }
16105     }
16106     PL_Posix_ptrs[_CC_CASED]  = PL_Posix_ptrs[_CC_ALPHA];
16107     PL_Posix_ptrs[_CC_VERTSPACE] = NULL;
16108
16109     PL_utf8_toupper           = sv_dup_inc(proto_perl->Iutf8_toupper, param);
16110     PL_utf8_totitle           = sv_dup_inc(proto_perl->Iutf8_totitle, param);
16111     PL_utf8_tolower           = sv_dup_inc(proto_perl->Iutf8_tolower, param);
16112     PL_utf8_tofold            = sv_dup_inc(proto_perl->Iutf8_tofold, param);
16113     PL_utf8_tosimplefold      = sv_dup_inc(proto_perl->Iutf8_tosimplefold, param);
16114     PL_utf8_charname_begin    = sv_dup_inc(proto_perl->Iutf8_charname_begin, param);
16115     PL_utf8_charname_continue = sv_dup_inc(proto_perl->Iutf8_charname_continue, param);
16116     PL_utf8_mark              = sv_dup_inc(proto_perl->Iutf8_mark, param);
16117     PL_InBitmap               = sv_dup_inc(proto_perl->IInBitmap, param);
16118     PL_CCC_non0_non230        = sv_dup_inc(proto_perl->ICCC_non0_non230, param);
16119     PL_Private_Use            = sv_dup_inc(proto_perl->IPrivate_Use, param);
16120
16121 #if 0
16122     PL_seen_deprecated_macro = hv_dup_inc(proto_perl->Iseen_deprecated_macro, param);
16123 #endif
16124
16125     if (proto_perl->Ipsig_pend) {
16126         Newxz(PL_psig_pend, SIG_SIZE, int);
16127     }
16128     else {
16129         PL_psig_pend    = (int*)NULL;
16130     }
16131
16132     if (proto_perl->Ipsig_name) {
16133         Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
16134         sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
16135                             param);
16136         PL_psig_ptr = PL_psig_name + SIG_SIZE;
16137     }
16138     else {
16139         PL_psig_ptr     = (SV**)NULL;
16140         PL_psig_name    = (SV**)NULL;
16141     }
16142
16143     if (flags & CLONEf_COPY_STACKS) {
16144         Newx(PL_tmps_stack, PL_tmps_max, SV*);
16145         sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
16146                             PL_tmps_ix+1, param);
16147
16148         /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
16149         i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
16150         Newx(PL_markstack, i, I32);
16151         PL_markstack_max        = PL_markstack + (proto_perl->Imarkstack_max
16152                                                   - proto_perl->Imarkstack);
16153         PL_markstack_ptr        = PL_markstack + (proto_perl->Imarkstack_ptr
16154                                                   - proto_perl->Imarkstack);
16155         Copy(proto_perl->Imarkstack, PL_markstack,
16156              PL_markstack_ptr - PL_markstack + 1, I32);
16157
16158         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
16159          * NOTE: unlike the others! */
16160         Newx(PL_scopestack, PL_scopestack_max, I32);
16161         Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
16162
16163 #ifdef DEBUGGING
16164         Newx(PL_scopestack_name, PL_scopestack_max, const char *);
16165         Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
16166 #endif
16167         /* reset stack AV to correct length before its duped via
16168          * PL_curstackinfo */
16169         AvFILLp(proto_perl->Icurstack) =
16170                             proto_perl->Istack_sp - proto_perl->Istack_base;
16171
16172         /* NOTE: si_dup() looks at PL_markstack */
16173         PL_curstackinfo         = si_dup(proto_perl->Icurstackinfo, param);
16174
16175         /* PL_curstack          = PL_curstackinfo->si_stack; */
16176         PL_curstack             = av_dup(proto_perl->Icurstack, param);
16177         PL_mainstack            = av_dup(proto_perl->Imainstack, param);
16178
16179         /* next PUSHs() etc. set *(PL_stack_sp+1) */
16180         PL_stack_base           = AvARRAY(PL_curstack);
16181         PL_stack_sp             = PL_stack_base + (proto_perl->Istack_sp
16182                                                    - proto_perl->Istack_base);
16183         PL_stack_max            = PL_stack_base + AvMAX(PL_curstack);
16184
16185         /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
16186         PL_savestack            = ss_dup(proto_perl, param);
16187     }
16188     else {
16189         init_stacks();
16190         ENTER;                  /* perl_destruct() wants to LEAVE; */
16191     }
16192
16193     PL_statgv           = gv_dup(proto_perl->Istatgv, param);
16194     PL_statname         = sv_dup_inc(proto_perl->Istatname, param);
16195
16196     PL_rs               = sv_dup_inc(proto_perl->Irs, param);
16197     PL_last_in_gv       = gv_dup(proto_perl->Ilast_in_gv, param);
16198     PL_defoutgv         = gv_dup_inc(proto_perl->Idefoutgv, param);
16199     PL_toptarget        = sv_dup_inc(proto_perl->Itoptarget, param);
16200     PL_bodytarget       = sv_dup_inc(proto_perl->Ibodytarget, param);
16201     PL_formtarget       = sv_dup(proto_perl->Iformtarget, param);
16202
16203     PL_errors           = sv_dup_inc(proto_perl->Ierrors, param);
16204
16205     PL_sortcop          = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
16206     PL_firstgv          = gv_dup_inc(proto_perl->Ifirstgv, param);
16207     PL_secondgv         = gv_dup_inc(proto_perl->Isecondgv, param);
16208
16209     PL_stashcache       = newHV();
16210
16211     PL_watchaddr        = (char **) ptr_table_fetch(PL_ptr_table,
16212                                             proto_perl->Iwatchaddr);
16213     PL_watchok          = PL_watchaddr ? * PL_watchaddr : NULL;
16214     if (PL_debug && PL_watchaddr) {
16215         PerlIO_printf(Perl_debug_log,
16216           "WATCHING: %" UVxf " cloned as %" UVxf " with value %" UVxf "\n",
16217           PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
16218           PTR2UV(PL_watchok));
16219     }
16220
16221     PL_registered_mros  = hv_dup_inc(proto_perl->Iregistered_mros, param);
16222     PL_blockhooks       = av_dup_inc(proto_perl->Iblockhooks, param);
16223
16224     /* Call the ->CLONE method, if it exists, for each of the stashes
16225        identified by sv_dup() above.
16226     */
16227     while(av_count(param->stashes) != 0) {
16228         HV* const stash = MUTABLE_HV(av_shift(param->stashes));
16229         GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
16230         if (cloner && GvCV(cloner)) {
16231             dSP;
16232             ENTER;
16233             SAVETMPS;
16234             PUSHMARK(SP);
16235             mXPUSHs(newSVhek(HvNAME_HEK(stash)));
16236             PUTBACK;
16237             call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
16238             FREETMPS;
16239             LEAVE;
16240         }
16241     }
16242
16243     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
16244         ptr_table_free(PL_ptr_table);
16245         PL_ptr_table = NULL;
16246     }
16247
16248     if (!(flags & CLONEf_COPY_STACKS)) {
16249         unreferenced_to_tmp_stack(param->unreferenced);
16250     }
16251
16252     SvREFCNT_dec(param->stashes);
16253
16254     /* orphaned? eg threads->new inside BEGIN or use */
16255     if (PL_compcv && ! SvREFCNT(PL_compcv)) {
16256         SvREFCNT_inc_simple_void(PL_compcv);
16257         SAVEFREESV(PL_compcv);
16258     }
16259
16260     return my_perl;
16261 }
16262
16263 static void
16264 S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
16265 {
16266     PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK;
16267
16268     if (AvFILLp(unreferenced) > -1) {
16269         SV **svp = AvARRAY(unreferenced);
16270         SV **const last = svp + AvFILLp(unreferenced);
16271         SSize_t count = 0;
16272
16273         do {
16274             if (SvREFCNT(*svp) == 1)
16275                 ++count;
16276         } while (++svp <= last);
16277
16278         EXTEND_MORTAL(count);
16279         svp = AvARRAY(unreferenced);
16280
16281         do {
16282             if (SvREFCNT(*svp) == 1) {
16283                 /* Our reference is the only one to this SV. This means that
16284                    in this thread, the scalar effectively has a 0 reference.
16285                    That doesn't work (cleanup never happens), so donate our
16286                    reference to it onto the save stack. */
16287                 PL_tmps_stack[++PL_tmps_ix] = *svp;
16288             } else {
16289                 /* As an optimisation, because we are already walking the
16290                    entire array, instead of above doing either
16291                    SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead
16292                    release our reference to the scalar, so that at the end of
16293                    the array owns zero references to the scalars it happens to
16294                    point to. We are effectively converting the array from
16295                    AvREAL() on to AvREAL() off. This saves the av_clear()
16296                    (triggered by the SvREFCNT_dec(unreferenced) below) from
16297                    walking the array a second time.  */
16298                 SvREFCNT_dec(*svp);
16299             }
16300
16301         } while (++svp <= last);
16302         AvREAL_off(unreferenced);
16303     }
16304     SvREFCNT_dec_NN(unreferenced);
16305 }
16306
16307 void
16308 Perl_clone_params_del(CLONE_PARAMS *param)
16309 {
16310     PerlInterpreter *const was = PERL_GET_THX;
16311     PerlInterpreter *const to = param->new_perl;
16312     dTHXa(to);
16313
16314     PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
16315
16316     if (was != to) {
16317         PERL_SET_THX(to);
16318     }
16319
16320     SvREFCNT_dec(param->stashes);
16321     if (param->unreferenced)
16322         unreferenced_to_tmp_stack(param->unreferenced);
16323
16324     Safefree(param);
16325
16326     if (was != to) {
16327         PERL_SET_THX(was);
16328     }
16329 }
16330
16331 CLONE_PARAMS *
16332 Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
16333 {
16334     /* Need to play this game, as newAV() can call safesysmalloc(), and that
16335        does a dTHX; to get the context from thread local storage.
16336        FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
16337        a version that passes in my_perl.  */
16338     PerlInterpreter *const was = PERL_GET_THX;
16339     CLONE_PARAMS *param;
16340
16341     PERL_ARGS_ASSERT_CLONE_PARAMS_NEW;
16342
16343     if (was != to) {
16344         PERL_SET_THX(to);
16345     }
16346
16347     /* Given that we've set the context, we can do this unshared.  */
16348     Newx(param, 1, CLONE_PARAMS);
16349
16350     param->flags = 0;
16351     param->proto_perl = from;
16352     param->new_perl = to;
16353     param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV);
16354     AvREAL_off(param->stashes);
16355     param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV);
16356
16357     if (was != to) {
16358         PERL_SET_THX(was);
16359     }
16360     return param;
16361 }
16362
16363 #endif /* USE_ITHREADS */
16364
16365 void
16366 Perl_init_constants(pTHX)
16367 {
16368
16369     SvREFCNT(&PL_sv_undef)      = SvREFCNT_IMMORTAL;
16370     SvFLAGS(&PL_sv_undef)       = SVf_READONLY|SVf_PROTECT|SVt_NULL;
16371     SvANY(&PL_sv_undef)         = NULL;
16372
16373     SvANY(&PL_sv_no)            = new_XPVNV();
16374     SvREFCNT(&PL_sv_no)         = SvREFCNT_IMMORTAL;
16375     SvFLAGS(&PL_sv_no)          = SVt_PVNV|SVf_READONLY|SVf_PROTECT
16376                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
16377                                   |SVp_POK|SVf_POK|SVf_IsCOW|SVppv_STATIC;
16378
16379     SvANY(&PL_sv_yes)           = new_XPVNV();
16380     SvREFCNT(&PL_sv_yes)        = SvREFCNT_IMMORTAL;
16381     SvFLAGS(&PL_sv_yes)         = SVt_PVNV|SVf_READONLY|SVf_PROTECT
16382                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
16383                                   |SVp_POK|SVf_POK|SVf_IsCOW|SVppv_STATIC;
16384
16385     SvANY(&PL_sv_zero)          = new_XPVNV();
16386     SvREFCNT(&PL_sv_zero)       = SvREFCNT_IMMORTAL;
16387     SvFLAGS(&PL_sv_zero)        = SVt_PVNV|SVf_READONLY|SVf_PROTECT
16388                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
16389                                   |SVp_POK|SVf_POK
16390                                   |SVs_PADTMP;
16391
16392     SvPV_set(&PL_sv_no, (char*)PL_No);
16393     SvCUR_set(&PL_sv_no, 0);
16394     SvLEN_set(&PL_sv_no, 0);
16395     SvIV_set(&PL_sv_no, 0);
16396     SvNV_set(&PL_sv_no, 0);
16397
16398     SvPV_set(&PL_sv_yes, (char*)PL_Yes);
16399     SvCUR_set(&PL_sv_yes, 1);
16400     SvLEN_set(&PL_sv_yes, 0);
16401     SvIV_set(&PL_sv_yes, 1);
16402     SvNV_set(&PL_sv_yes, 1);
16403
16404     SvPV_set(&PL_sv_zero, (char*)PL_Zero);
16405     SvCUR_set(&PL_sv_zero, 1);
16406     SvLEN_set(&PL_sv_zero, 0);
16407     SvIV_set(&PL_sv_zero, 0);
16408     SvNV_set(&PL_sv_zero, 0);
16409
16410     PadnamePV(&PL_padname_const) = (char *)PL_No;
16411
16412     assert(SvIMMORTAL_INTERP(&PL_sv_yes));
16413     assert(SvIMMORTAL_INTERP(&PL_sv_undef));
16414     assert(SvIMMORTAL_INTERP(&PL_sv_no));
16415     assert(SvIMMORTAL_INTERP(&PL_sv_zero));
16416
16417     assert(SvIMMORTAL(&PL_sv_yes));
16418     assert(SvIMMORTAL(&PL_sv_undef));
16419     assert(SvIMMORTAL(&PL_sv_no));
16420     assert(SvIMMORTAL(&PL_sv_zero));
16421
16422     assert( SvIMMORTAL_TRUE(&PL_sv_yes));
16423     assert(!SvIMMORTAL_TRUE(&PL_sv_undef));
16424     assert(!SvIMMORTAL_TRUE(&PL_sv_no));
16425     assert(!SvIMMORTAL_TRUE(&PL_sv_zero));
16426
16427     assert( SvTRUE_nomg_NN(&PL_sv_yes));
16428     assert(!SvTRUE_nomg_NN(&PL_sv_undef));
16429     assert(!SvTRUE_nomg_NN(&PL_sv_no));
16430     assert(!SvTRUE_nomg_NN(&PL_sv_zero));
16431 }
16432
16433 /*
16434 =for apidoc_section $unicode
16435
16436 =for apidoc sv_recode_to_utf8
16437
16438 C<encoding> is assumed to be an C<Encode> object, on entry the PV
16439 of C<sv> is assumed to be octets in that encoding, and C<sv>
16440 will be converted into Unicode (and UTF-8).
16441
16442 If C<sv> already is UTF-8 (or if it is not C<POK>), or if C<encoding>
16443 is not a reference, nothing is done to C<sv>.  If C<encoding> is not
16444 an C<Encode::XS> Encoding object, bad things will happen.
16445 (See F<cpan/Encode/encoding.pm> and L<Encode>.)
16446
16447 The PV of C<sv> is returned.
16448
16449 =cut */
16450
16451 char *
16452 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
16453 {
16454     PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
16455
16456     if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
16457         SV *uni;
16458         STRLEN len;
16459         const char *s;
16460         dSP;
16461         SV *nsv = sv;
16462         ENTER;
16463         PUSHSTACK;
16464         SAVETMPS;
16465         if (SvPADTMP(nsv)) {
16466             nsv = sv_newmortal();
16467             SvSetSV_nosteal(nsv, sv);
16468         }
16469         save_re_context();
16470         PUSHMARK(sp);
16471         EXTEND(SP, 3);
16472         PUSHs(encoding);
16473         PUSHs(nsv);
16474 /*
16475   NI-S 2002/07/09
16476   Passing sv_yes is wrong - it needs to be or'ed set of constants
16477   for Encode::XS, while UTf-8 decode (currently) assumes a true value means
16478   remove converted chars from source.
16479
16480   Both will default the value - let them.
16481
16482         XPUSHs(&PL_sv_yes);
16483 */
16484         PUTBACK;
16485         call_method("decode", G_SCALAR);
16486         SPAGAIN;
16487         uni = POPs;
16488         PUTBACK;
16489         s = SvPV_const(uni, len);
16490         if (s != SvPVX_const(sv)) {
16491             SvGROW(sv, len + 1);
16492             Move(s, SvPVX(sv), len + 1, char);
16493             SvCUR_set(sv, len);
16494         }
16495         FREETMPS;
16496         POPSTACK;
16497         LEAVE;
16498         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
16499             /* clear pos and any utf8 cache */
16500             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
16501             if (mg)
16502                 mg->mg_len = -1;
16503             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
16504                 magic_setutf8(sv,mg); /* clear UTF8 cache */
16505         }
16506         SvUTF8_on(sv);
16507         return SvPVX(sv);
16508     }
16509     return SvPOKp(sv) ? SvPVX(sv) : NULL;
16510 }
16511
16512 /*
16513 =for apidoc sv_cat_decode
16514
16515 C<encoding> is assumed to be an C<Encode> object, the PV of C<ssv> is
16516 assumed to be octets in that encoding and decoding the input starts
16517 from the position which S<C<(PV + *offset)>> pointed to.  C<dsv> will be
16518 concatenated with the decoded UTF-8 string from C<ssv>.  Decoding will terminate
16519 when the string C<tstr> appears in decoding output or the input ends on
16520 the PV of C<ssv>.  The value which C<offset> points will be modified
16521 to the last input position on C<ssv>.
16522
16523 Returns TRUE if the terminator was found, else returns FALSE.
16524
16525 =cut */
16526
16527 bool
16528 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
16529                    SV *ssv, int *offset, char *tstr, int tlen)
16530 {
16531     bool ret = FALSE;
16532
16533     PERL_ARGS_ASSERT_SV_CAT_DECODE;
16534
16535     if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding)) {
16536         SV *offsv;
16537         dSP;
16538         ENTER;
16539         SAVETMPS;
16540         save_re_context();
16541         PUSHMARK(sp);
16542         EXTEND(SP, 6);
16543         PUSHs(encoding);
16544         PUSHs(dsv);
16545         PUSHs(ssv);
16546         offsv = newSViv(*offset);
16547         mPUSHs(offsv);
16548         mPUSHp(tstr, tlen);
16549         PUTBACK;
16550         call_method("cat_decode", G_SCALAR);
16551         SPAGAIN;
16552         ret = SvTRUE(TOPs);
16553         *offset = SvIV(offsv);
16554         PUTBACK;
16555         FREETMPS;
16556         LEAVE;
16557     }
16558     else
16559         Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
16560     return ret;
16561
16562 }
16563
16564 /* ---------------------------------------------------------------------
16565  *
16566  * support functions for report_uninit()
16567  */
16568
16569 /* the maxiumum size of array or hash where we will scan looking
16570  * for the undefined element that triggered the warning */
16571
16572 #define FUV_MAX_SEARCH_SIZE 1000
16573
16574 /* Look for an entry in the hash whose value has the same SV as val;
16575  * If so, return a mortal copy of the key. */
16576
16577 STATIC SV*
16578 S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
16579 {
16580     HE **array;
16581     I32 i;
16582
16583     PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
16584
16585     if (!hv || SvMAGICAL(hv) || !HvTOTALKEYS(hv) ||
16586                         (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
16587         return NULL;
16588
16589     if (val == &PL_sv_undef || val == &PL_sv_placeholder)
16590         return NULL;
16591
16592     array = HvARRAY(hv);
16593
16594     for (i=HvMAX(hv); i>=0; i--) {
16595         HE *entry;
16596         for (entry = array[i]; entry; entry = HeNEXT(entry)) {
16597             if (HeVAL(entry) == val)
16598                 return sv_2mortal(newSVhek(HeKEY_hek(entry)));
16599         }
16600     }
16601     return NULL;
16602 }
16603
16604 /* Look for an entry in the array whose value has the same SV as val;
16605  * If so, return the index, otherwise return -1. */
16606
16607 STATIC SSize_t
16608 S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
16609 {
16610     PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
16611
16612     if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
16613                         (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
16614         return -1;
16615
16616     if (val != &PL_sv_undef) {
16617         SV ** const svp = AvARRAY(av);
16618         SSize_t i;
16619
16620         for (i=AvFILLp(av); i>=0; i--)
16621             if (svp[i] == val)
16622                 return i;
16623     }
16624     return -1;
16625 }
16626
16627 /* varname(): return the name of a variable, optionally with a subscript.
16628  * If gv is non-zero, use the name of that global, along with gvtype (one
16629  * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
16630  * targ.  Depending on the value of the subscript_type flag, return:
16631  */
16632
16633 #define FUV_SUBSCRIPT_NONE      1       /* "@foo"          */
16634 #define FUV_SUBSCRIPT_ARRAY     2       /* "$foo[aindex]"  */
16635 #define FUV_SUBSCRIPT_HASH      3       /* "$foo{keyname}" */
16636 #define FUV_SUBSCRIPT_WITHIN    4       /* "within @foo"   */
16637
16638 SV*
16639 Perl_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
16640         const SV *const keyname, SSize_t aindex, int subscript_type)
16641 {
16642
16643     SV * const name = sv_newmortal();
16644     if (gv && isGV(gv)) {
16645         char buffer[2];
16646         buffer[0] = gvtype;
16647         buffer[1] = 0;
16648
16649         /* as gv_fullname4(), but add literal '^' for $^FOO names  */
16650
16651         gv_fullname4(name, gv, buffer, 0);
16652
16653         if ((unsigned int)SvPVX(name)[1] <= 26) {
16654             buffer[0] = '^';
16655             buffer[1] = SvPVX(name)[1] + 'A' - 1;
16656
16657             /* Swap the 1 unprintable control character for the 2 byte pretty
16658                version - ie substr($name, 1, 1) = $buffer; */
16659             sv_insert(name, 1, 1, buffer, 2);
16660         }
16661     }
16662     else {
16663         CV * const cv = gv ? ((CV *)gv) : find_runcv(NULL);
16664         PADNAME *sv;
16665
16666         assert(!cv || SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM);
16667
16668         if (!cv || !CvPADLIST(cv))
16669             return NULL;
16670         sv = padnamelist_fetch(PadlistNAMES(CvPADLIST(cv)), targ);
16671         sv_setpvn(name, PadnamePV(sv), PadnameLEN(sv));
16672         SvUTF8_on(name);
16673     }
16674
16675     if (subscript_type == FUV_SUBSCRIPT_HASH) {
16676         SV * const sv = newSV(0);
16677         STRLEN len;
16678         const char * const pv = SvPV_nomg_const((SV*)keyname, len);
16679
16680         *SvPVX(name) = '$';
16681         Perl_sv_catpvf(aTHX_ name, "{%s}",
16682             pv_pretty(sv, pv, len, 32, NULL, NULL,
16683                     PERL_PV_PRETTY_DUMP | PERL_PV_ESCAPE_UNI_DETECT ));
16684         SvREFCNT_dec_NN(sv);
16685     }
16686     else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
16687         *SvPVX(name) = '$';
16688         Perl_sv_catpvf(aTHX_ name, "[%" IVdf "]", (IV)aindex);
16689     }
16690     else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
16691         /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
16692         Perl_sv_insert_flags(aTHX_ name, 0, 0,  STR_WITH_LEN("within "), 0);
16693     }
16694
16695     return name;
16696 }
16697
16698
16699 /*
16700 =apidoc_section $warning
16701 =for apidoc find_uninit_var
16702
16703 Find the name of the undefined variable (if any) that caused the operator
16704 to issue a "Use of uninitialized value" warning.
16705 If match is true, only return a name if its value matches C<uninit_sv>.
16706 So roughly speaking, if a unary operator (such as C<OP_COS>) generates a
16707 warning, then following the direct child of the op may yield an
16708 C<OP_PADSV> or C<OP_GV> that gives the name of the undefined variable.  On the
16709 other hand, with C<OP_ADD> there are two branches to follow, so we only print
16710 the variable name if we get an exact match.
16711 C<desc_p> points to a string pointer holding the description of the op.
16712 This may be updated if needed.
16713
16714 The name is returned as a mortal SV.
16715
16716 Assumes that C<PL_op> is the OP that originally triggered the error, and that
16717 C<PL_comppad>/C<PL_curpad> points to the currently executing pad.
16718
16719 =cut
16720 */
16721
16722 STATIC SV *
16723 S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
16724                   bool match, const char **desc_p)
16725 {
16726     SV *sv;
16727     const GV *gv;
16728     const OP *o, *o2, *kid;
16729
16730     PERL_ARGS_ASSERT_FIND_UNINIT_VAR;
16731
16732     if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
16733                             uninit_sv == &PL_sv_placeholder)))
16734         return NULL;
16735
16736     switch (obase->op_type) {
16737
16738     case OP_UNDEF:
16739         /* undef should care if its args are undef - any warnings
16740          * will be from tied/magic vars */
16741         break;
16742
16743     case OP_RV2AV:
16744     case OP_RV2HV:
16745     case OP_PADAV:
16746     case OP_PADHV:
16747       {
16748         const bool pad  = (    obase->op_type == OP_PADAV
16749                             || obase->op_type == OP_PADHV
16750                             || obase->op_type == OP_PADRANGE
16751                           );
16752
16753         const bool hash = (    obase->op_type == OP_PADHV
16754                             || obase->op_type == OP_RV2HV
16755                             || (obase->op_type == OP_PADRANGE
16756                                 && SvTYPE(PAD_SVl(obase->op_targ)) == SVt_PVHV)
16757                           );
16758         SSize_t index = 0;
16759         SV *keysv = NULL;
16760         int subscript_type = FUV_SUBSCRIPT_WITHIN;
16761
16762         if (pad) { /* @lex, %lex */
16763             sv = PAD_SVl(obase->op_targ);
16764             gv = NULL;
16765         }
16766         else {
16767             if (cUNOPx(obase)->op_first->op_type == OP_GV) {
16768             /* @global, %global */
16769                 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
16770                 if (!gv)
16771                     break;
16772                 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
16773             }
16774             else if (obase == PL_op) /* @{expr}, %{expr} */
16775                 return find_uninit_var(cUNOPx(obase)->op_first,
16776                                                 uninit_sv, match, desc_p);
16777             else /* @{expr}, %{expr} as a sub-expression */
16778                 return NULL;
16779         }
16780
16781         /* attempt to find a match within the aggregate */
16782         if (hash) {
16783             keysv = find_hash_subscript((const HV*)sv, uninit_sv);
16784             if (keysv)
16785                 subscript_type = FUV_SUBSCRIPT_HASH;
16786         }
16787         else {
16788             index = find_array_subscript((const AV *)sv, uninit_sv);
16789             if (index >= 0)
16790                 subscript_type = FUV_SUBSCRIPT_ARRAY;
16791         }
16792
16793         if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
16794             break;
16795
16796         return varname(gv, (char)(hash ? '%' : '@'), obase->op_targ,
16797                                     keysv, index, subscript_type);
16798       }
16799
16800     case OP_RV2SV:
16801         if (cUNOPx(obase)->op_first->op_type == OP_GV) {
16802             /* $global */
16803             gv = cGVOPx_gv(cUNOPx(obase)->op_first);
16804             if (!gv || !GvSTASH(gv))
16805                 break;
16806             if (match && (GvSV(gv) != uninit_sv))
16807                 break;
16808             return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
16809         }
16810         /* ${expr} */
16811         return find_uninit_var(cUNOPx(obase)->op_first, uninit_sv, 1, desc_p);
16812
16813     case OP_PADSV:
16814         if (match && PAD_SVl(obase->op_targ) != uninit_sv)
16815             break;
16816         return varname(NULL, '$', obase->op_targ,
16817                                     NULL, 0, FUV_SUBSCRIPT_NONE);
16818
16819     case OP_GVSV:
16820         gv = cGVOPx_gv(obase);
16821         if (!gv || (match && GvSV(gv) != uninit_sv) || !GvSTASH(gv))
16822             break;
16823         return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
16824
16825     case OP_AELEMFAST_LEX:
16826         if (match) {
16827             SV **svp;
16828             AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
16829             if (!av || SvRMAGICAL(av))
16830                 break;
16831             svp = av_fetch(av, (I8)obase->op_private, FALSE);
16832             if (!svp || *svp != uninit_sv)
16833                 break;
16834         }
16835         return varname(NULL, '$', obase->op_targ,
16836                        NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
16837     case OP_AELEMFAST:
16838         {
16839             gv = cGVOPx_gv(obase);
16840             if (!gv)
16841                 break;
16842             if (match) {
16843                 SV **svp;
16844                 AV *const av = GvAV(gv);
16845                 if (!av || SvRMAGICAL(av))
16846                     break;
16847                 svp = av_fetch(av, (I8)obase->op_private, FALSE);
16848                 if (!svp || *svp != uninit_sv)
16849                     break;
16850             }
16851             return varname(gv, '$', 0,
16852                     NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
16853         }
16854         NOT_REACHED; /* NOTREACHED */
16855
16856     case OP_EXISTS:
16857         o = cUNOPx(obase)->op_first;
16858         if (!o || o->op_type != OP_NULL ||
16859                 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
16860             break;
16861         return find_uninit_var(cBINOPo->op_last, uninit_sv, match, desc_p);
16862
16863     case OP_AELEM:
16864     case OP_HELEM:
16865     {
16866         bool negate = FALSE;
16867
16868         if (PL_op == obase)
16869             /* $a[uninit_expr] or $h{uninit_expr} */
16870             return find_uninit_var(cBINOPx(obase)->op_last,
16871                                                 uninit_sv, match, desc_p);
16872
16873         gv = NULL;
16874         o = cBINOPx(obase)->op_first;
16875         kid = cBINOPx(obase)->op_last;
16876
16877         /* get the av or hv, and optionally the gv */
16878         sv = NULL;
16879         if  (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
16880             sv = PAD_SV(o->op_targ);
16881         }
16882         else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
16883                 && cUNOPo->op_first->op_type == OP_GV)
16884         {
16885             gv = cGVOPx_gv(cUNOPo->op_first);
16886             if (!gv)
16887                 break;
16888             sv = o->op_type
16889                 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
16890         }
16891         if (!sv)
16892             break;
16893
16894         if (kid && kid->op_type == OP_NEGATE) {
16895             negate = TRUE;
16896             kid = cUNOPx(kid)->op_first;
16897         }
16898
16899         if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
16900             /* index is constant */
16901             SV* kidsv;
16902             if (negate) {
16903                 kidsv = newSVpvs_flags("-", SVs_TEMP);
16904                 sv_catsv(kidsv, cSVOPx_sv(kid));
16905             }
16906             else
16907                 kidsv = cSVOPx_sv(kid);
16908             if (match) {
16909                 if (SvMAGICAL(sv))
16910                     break;
16911                 if (obase->op_type == OP_HELEM) {
16912                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), kidsv, 0, 0);
16913                     if (!he || HeVAL(he) != uninit_sv)
16914                         break;
16915                 }
16916                 else {
16917                     SV * const  opsv = cSVOPx_sv(kid);
16918                     const IV  opsviv = SvIV(opsv);
16919                     SV * const * const svp = av_fetch(MUTABLE_AV(sv),
16920                         negate ? - opsviv : opsviv,
16921                         FALSE);
16922                     if (!svp || *svp != uninit_sv)
16923                         break;
16924                 }
16925             }
16926             if (obase->op_type == OP_HELEM)
16927                 return varname(gv, '%', o->op_targ,
16928                             kidsv, 0, FUV_SUBSCRIPT_HASH);
16929             else
16930                 return varname(gv, '@', o->op_targ, NULL,
16931                     negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
16932                     FUV_SUBSCRIPT_ARRAY);
16933         }
16934         else {
16935             /* index is an expression;
16936              * attempt to find a match within the aggregate */
16937             if (obase->op_type == OP_HELEM) {
16938                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
16939                 if (keysv)
16940                     return varname(gv, '%', o->op_targ,
16941                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
16942             }
16943             else {
16944                 const SSize_t index
16945                     = find_array_subscript((const AV *)sv, uninit_sv);
16946                 if (index >= 0)
16947                     return varname(gv, '@', o->op_targ,
16948                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
16949             }
16950             if (match)
16951                 break;
16952             return varname(gv,
16953                 (char)((o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
16954                 ? '@' : '%'),
16955                 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
16956         }
16957         NOT_REACHED; /* NOTREACHED */
16958     }
16959
16960     case OP_MULTIDEREF: {
16961         /* If we were executing OP_MULTIDEREF when the undef warning
16962          * triggered, then it must be one of the index values within
16963          * that triggered it. If not, then the only possibility is that
16964          * the value retrieved by the last aggregate index might be the
16965          * culprit. For the former, we set PL_multideref_pc each time before
16966          * using an index, so work though the item list until we reach
16967          * that point. For the latter, just work through the entire item
16968          * list; the last aggregate retrieved will be the candidate.
16969          * There is a third rare possibility: something triggered
16970          * magic while fetching an array/hash element. Just display
16971          * nothing in this case.
16972          */
16973
16974         /* the named aggregate, if any */
16975         PADOFFSET agg_targ = 0;
16976         GV       *agg_gv   = NULL;
16977         /* the last-seen index */
16978         UV        index_type;
16979         PADOFFSET index_targ;
16980         GV       *index_gv;
16981         IV        index_const_iv = 0; /* init for spurious compiler warn */
16982         SV       *index_const_sv;
16983         int       depth = 0;  /* how many array/hash lookups we've done */
16984
16985         UNOP_AUX_item *items = cUNOP_AUXx(obase)->op_aux;
16986         UNOP_AUX_item *last = NULL;
16987         UV actions = items->uv;
16988         bool is_hv;
16989
16990         if (PL_op == obase) {
16991             last = PL_multideref_pc;
16992             assert(last >= items && last <= items + items[-1].uv);
16993         }
16994
16995         assert(actions);
16996
16997         while (1) {
16998             is_hv = FALSE;
16999             switch (actions & MDEREF_ACTION_MASK) {
17000
17001             case MDEREF_reload:
17002                 actions = (++items)->uv;
17003                 continue;
17004
17005             case MDEREF_HV_padhv_helem:               /* $lex{...} */
17006                 is_hv = TRUE;
17007                 /* FALLTHROUGH */
17008             case MDEREF_AV_padav_aelem:               /* $lex[...] */
17009                 agg_targ = (++items)->pad_offset;
17010                 agg_gv = NULL;
17011                 break;
17012
17013             case MDEREF_HV_gvhv_helem:                /* $pkg{...} */
17014                 is_hv = TRUE;
17015                 /* FALLTHROUGH */
17016             case MDEREF_AV_gvav_aelem:                /* $pkg[...] */
17017                 agg_targ = 0;
17018                 agg_gv = (GV*)UNOP_AUX_item_sv(++items);
17019                 assert(isGV_with_GP(agg_gv));
17020                 break;
17021
17022             case MDEREF_HV_gvsv_vivify_rv2hv_helem:   /* $pkg->{...} */
17023             case MDEREF_HV_padsv_vivify_rv2hv_helem:  /* $lex->{...} */
17024                 ++items;
17025                 /* FALLTHROUGH */
17026             case MDEREF_HV_pop_rv2hv_helem:           /* expr->{...} */
17027             case MDEREF_HV_vivify_rv2hv_helem:        /* vivify, ->{...} */
17028                 agg_targ = 0;
17029                 agg_gv   = NULL;
17030                 is_hv    = TRUE;
17031                 break;
17032
17033             case MDEREF_AV_gvsv_vivify_rv2av_aelem:   /* $pkg->[...] */
17034             case MDEREF_AV_padsv_vivify_rv2av_aelem:  /* $lex->[...] */
17035                 ++items;
17036                 /* FALLTHROUGH */
17037             case MDEREF_AV_pop_rv2av_aelem:           /* expr->[...] */
17038             case MDEREF_AV_vivify_rv2av_aelem:        /* vivify, ->[...] */
17039                 agg_targ = 0;
17040                 agg_gv   = NULL;
17041             } /* switch */
17042
17043             index_targ     = 0;
17044             index_gv       = NULL;
17045             index_const_sv = NULL;
17046
17047             index_type = (actions & MDEREF_INDEX_MASK);
17048             switch (index_type) {
17049             case MDEREF_INDEX_none:
17050                 break;
17051             case MDEREF_INDEX_const:
17052                 if (is_hv)
17053                     index_const_sv = UNOP_AUX_item_sv(++items)
17054                 else
17055                     index_const_iv = (++items)->iv;
17056                 break;
17057             case MDEREF_INDEX_padsv:
17058                 index_targ = (++items)->pad_offset;
17059                 break;
17060             case MDEREF_INDEX_gvsv:
17061                 index_gv = (GV*)UNOP_AUX_item_sv(++items);
17062                 assert(isGV_with_GP(index_gv));
17063                 break;
17064             }
17065
17066             if (index_type != MDEREF_INDEX_none)
17067                 depth++;
17068
17069             if (   index_type == MDEREF_INDEX_none
17070                 || (actions & MDEREF_FLAG_last)
17071                 || (last && items >= last)
17072             )
17073                 break;
17074
17075             actions >>= MDEREF_SHIFT;
17076         } /* while */
17077
17078         if (PL_op == obase) {
17079             /* most likely index was undef */
17080
17081             *desc_p = (    (actions & MDEREF_FLAG_last)
17082                         && (obase->op_private
17083                                 & (OPpMULTIDEREF_EXISTS|OPpMULTIDEREF_DELETE)))
17084                         ?
17085                             (obase->op_private & OPpMULTIDEREF_EXISTS)
17086                                 ? "exists"
17087                                 : "delete"
17088                         : is_hv ? "hash element" : "array element";
17089             assert(index_type != MDEREF_INDEX_none);
17090             if (index_gv) {
17091                 if (GvSV(index_gv) == uninit_sv)
17092                     return varname(index_gv, '$', 0, NULL, 0,
17093                                                     FUV_SUBSCRIPT_NONE);
17094                 else
17095                     return NULL;
17096             }
17097             if (index_targ) {
17098                 if (PL_curpad[index_targ] == uninit_sv)
17099                     return varname(NULL, '$', index_targ,
17100                                     NULL, 0, FUV_SUBSCRIPT_NONE);
17101                 else
17102                     return NULL;
17103             }
17104             /* If we got to this point it was undef on a const subscript,
17105              * so magic probably involved, e.g. $ISA[0]. Give up. */
17106             return NULL;
17107         }
17108
17109         /* the SV returned by pp_multideref() was undef, if anything was */
17110
17111         if (depth != 1)
17112             break;
17113
17114         if (agg_targ)
17115             sv = PAD_SV(agg_targ);
17116         else if (agg_gv) {
17117             sv = is_hv ? MUTABLE_SV(GvHV(agg_gv)) : MUTABLE_SV(GvAV(agg_gv));
17118             if (!sv)
17119                 break;
17120             }
17121         else
17122             break;
17123
17124         if (index_type == MDEREF_INDEX_const) {
17125             if (match) {
17126                 if (SvMAGICAL(sv))
17127                     break;
17128                 if (is_hv) {
17129                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), index_const_sv, 0, 0);
17130                     if (!he || HeVAL(he) != uninit_sv)
17131                         break;
17132                 }
17133                 else {
17134                     SV * const * const svp =
17135                             av_fetch(MUTABLE_AV(sv), index_const_iv, FALSE);
17136                     if (!svp || *svp != uninit_sv)
17137                         break;
17138                 }
17139             }
17140             return is_hv
17141                 ? varname(agg_gv, '%', agg_targ,
17142                                 index_const_sv, 0,    FUV_SUBSCRIPT_HASH)
17143                 : varname(agg_gv, '@', agg_targ,
17144                                 NULL, index_const_iv, FUV_SUBSCRIPT_ARRAY);
17145         }
17146         else {
17147             /* index is an var */
17148             if (is_hv) {
17149                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
17150                 if (keysv)
17151                     return varname(agg_gv, '%', agg_targ,
17152                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
17153             }
17154             else {
17155                 const SSize_t index
17156                     = find_array_subscript((const AV *)sv, uninit_sv);
17157                 if (index >= 0)
17158                     return varname(agg_gv, '@', agg_targ,
17159                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
17160             }
17161             /* look for an element not found */
17162             if (!SvMAGICAL(sv)) {
17163                 SV *index_sv = NULL;
17164                 if (index_targ) {
17165                     index_sv = PL_curpad[index_targ];
17166                 }
17167                 else if (index_gv) {
17168                     index_sv = GvSV(index_gv);
17169                 }
17170                 if (index_sv && !SvMAGICAL(index_sv) && !SvROK(index_sv)) {
17171                     if (is_hv) {
17172                         SV *report_index_sv = SvOK(index_sv) ? index_sv : &PL_sv_no;
17173                         HE *he = hv_fetch_ent(MUTABLE_HV(sv), report_index_sv, 0, 0);
17174                         if (!he) {
17175                             return varname(agg_gv, '%', agg_targ,
17176                                            report_index_sv, 0, FUV_SUBSCRIPT_HASH);
17177                         }
17178                     }
17179                     else {
17180                         SSize_t index = SvOK(index_sv) ? SvIV(index_sv) : 0;
17181                         SV * const * const svp =
17182                             av_fetch(MUTABLE_AV(sv), index, FALSE);
17183                         if (!svp) {
17184                             return varname(agg_gv, '@', agg_targ,
17185                                            NULL, index, FUV_SUBSCRIPT_ARRAY);
17186                         }
17187                     }
17188                 }
17189             }
17190             if (match)
17191                 break;
17192             return varname(agg_gv,
17193                 is_hv ? '%' : '@',
17194                 agg_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
17195         }
17196         NOT_REACHED; /* NOTREACHED */
17197     }
17198
17199     case OP_AASSIGN:
17200         /* only examine RHS */
17201         return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv,
17202                                                                 match, desc_p);
17203
17204     case OP_OPEN:
17205         o = cUNOPx(obase)->op_first;
17206         if (   o->op_type == OP_PUSHMARK
17207            || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)
17208         )
17209             o = OpSIBLING(o);
17210
17211         if (!OpHAS_SIBLING(o)) {
17212             /* one-arg version of open is highly magical */
17213
17214             if (o->op_type == OP_GV) { /* open FOO; */
17215                 gv = cGVOPx_gv(o);
17216                 if (match && GvSV(gv) != uninit_sv)
17217                     break;
17218                 return varname(gv, '$', 0,
17219                             NULL, 0, FUV_SUBSCRIPT_NONE);
17220             }
17221             /* other possibilities not handled are:
17222              * open $x; or open my $x;  should return '${*$x}'
17223              * open expr;               should return '$'.expr ideally
17224              */
17225              break;
17226         }
17227         match = 1;
17228         goto do_op;
17229
17230     /* ops where $_ may be an implicit arg */
17231     case OP_TRANS:
17232     case OP_TRANSR:
17233     case OP_SUBST:
17234     case OP_MATCH:
17235         if ( !(obase->op_flags & OPf_STACKED)) {
17236             if (uninit_sv == DEFSV)
17237                 return newSVpvs_flags("$_", SVs_TEMP);
17238             else if (obase->op_targ
17239                   && uninit_sv == PAD_SVl(obase->op_targ))
17240                 return varname(NULL, '$', obase->op_targ, NULL, 0,
17241                                FUV_SUBSCRIPT_NONE);
17242         }
17243         goto do_op;
17244
17245     case OP_PRTF:
17246     case OP_PRINT:
17247     case OP_SAY:
17248         match = 1; /* print etc can return undef on defined args */
17249         /* skip filehandle as it can't produce 'undef' warning  */
17250         o = cUNOPx(obase)->op_first;
17251         if ((obase->op_flags & OPf_STACKED)
17252             &&
17253                (   o->op_type == OP_PUSHMARK
17254                || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)))
17255             o = OpSIBLING(OpSIBLING(o));
17256         goto do_op2;
17257
17258
17259     case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
17260     case OP_CUSTOM: /* XS or custom code could trigger random warnings */
17261
17262         /* the following ops are capable of returning PL_sv_undef even for
17263          * defined arg(s) */
17264
17265     case OP_BACKTICK:
17266     case OP_PIPE_OP:
17267     case OP_FILENO:
17268     case OP_BINMODE:
17269     case OP_TIED:
17270     case OP_GETC:
17271     case OP_SYSREAD:
17272     case OP_SEND:
17273     case OP_IOCTL:
17274     case OP_SOCKET:
17275     case OP_SOCKPAIR:
17276     case OP_BIND:
17277     case OP_CONNECT:
17278     case OP_LISTEN:
17279     case OP_ACCEPT:
17280     case OP_SHUTDOWN:
17281     case OP_SSOCKOPT:
17282     case OP_GETPEERNAME:
17283     case OP_FTRREAD:
17284     case OP_FTRWRITE:
17285     case OP_FTREXEC:
17286     case OP_FTROWNED:
17287     case OP_FTEREAD:
17288     case OP_FTEWRITE:
17289     case OP_FTEEXEC:
17290     case OP_FTEOWNED:
17291     case OP_FTIS:
17292     case OP_FTZERO:
17293     case OP_FTSIZE:
17294     case OP_FTFILE:
17295     case OP_FTDIR:
17296     case OP_FTLINK:
17297     case OP_FTPIPE:
17298     case OP_FTSOCK:
17299     case OP_FTBLK:
17300     case OP_FTCHR:
17301     case OP_FTTTY:
17302     case OP_FTSUID:
17303     case OP_FTSGID:
17304     case OP_FTSVTX:
17305     case OP_FTTEXT:
17306     case OP_FTBINARY:
17307     case OP_FTMTIME:
17308     case OP_FTATIME:
17309     case OP_FTCTIME:
17310     case OP_READLINK:
17311     case OP_OPEN_DIR:
17312     case OP_READDIR:
17313     case OP_TELLDIR:
17314     case OP_SEEKDIR:
17315     case OP_REWINDDIR:
17316     case OP_CLOSEDIR:
17317     case OP_GMTIME:
17318     case OP_ALARM:
17319     case OP_SEMGET:
17320     case OP_GETLOGIN:
17321     case OP_SUBSTR:
17322     case OP_AEACH:
17323     case OP_EACH:
17324     case OP_SORT:
17325     case OP_CALLER:
17326     case OP_DOFILE:
17327     case OP_PROTOTYPE:
17328     case OP_NCMP:
17329     case OP_SMARTMATCH:
17330     case OP_UNPACK:
17331     case OP_SYSOPEN:
17332     case OP_SYSSEEK:
17333         match = 1;
17334         goto do_op;
17335
17336     case OP_ENTERSUB:
17337     case OP_GOTO:
17338         /* XXX tmp hack: these two may call an XS sub, and currently
17339           XS subs don't have a SUB entry on the context stack, so CV and
17340           pad determination goes wrong, and BAD things happen. So, just
17341           don't try to determine the value under those circumstances.
17342           Need a better fix at dome point. DAPM 11/2007 */
17343         break;
17344
17345     case OP_FLIP:
17346     case OP_FLOP:
17347     {
17348         GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
17349         if (gv && GvSV(gv) == uninit_sv)
17350             return newSVpvs_flags("$.", SVs_TEMP);
17351         goto do_op;
17352     }
17353
17354     case OP_POS:
17355         /* def-ness of rval pos() is independent of the def-ness of its arg */
17356         if ( !(obase->op_flags & OPf_MOD))
17357             break;
17358         /* FALLTHROUGH */
17359
17360     case OP_SCHOMP:
17361     case OP_CHOMP:
17362         if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
17363             return newSVpvs_flags("${$/}", SVs_TEMP);
17364         /* FALLTHROUGH */
17365
17366     default:
17367     do_op:
17368         if (!(obase->op_flags & OPf_KIDS))
17369             break;
17370         o = cUNOPx(obase)->op_first;
17371
17372     do_op2:
17373         if (!o)
17374             break;
17375
17376         /* This loop checks all the kid ops, skipping any that cannot pos-
17377          * sibly be responsible for the uninitialized value; i.e., defined
17378          * constants and ops that return nothing.  If there is only one op
17379          * left that is not skipped, then we *know* it is responsible for
17380          * the uninitialized value.  If there is more than one op left, we
17381          * have to look for an exact match in the while() loop below.
17382          * Note that we skip padrange, because the individual pad ops that
17383          * it replaced are still in the tree, so we work on them instead.
17384          */
17385         o2 = NULL;
17386         for (kid=o; kid; kid = OpSIBLING(kid)) {
17387             const OPCODE type = kid->op_type;
17388             if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
17389               || (type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
17390               || (type == OP_PUSHMARK)
17391               || (type == OP_PADRANGE)
17392             )
17393             continue;
17394
17395             if (o2) { /* more than one found */
17396                 o2 = NULL;
17397                 break;
17398             }
17399             o2 = kid;
17400         }
17401         if (o2)
17402             return find_uninit_var(o2, uninit_sv, match, desc_p);
17403
17404         /* scan all args */
17405         while (o) {
17406             sv = find_uninit_var(o, uninit_sv, 1, desc_p);
17407             if (sv)
17408                 return sv;
17409             o = OpSIBLING(o);
17410         }
17411         break;
17412     }
17413     return NULL;
17414 }
17415
17416
17417 /*
17418 =for apidoc report_uninit
17419
17420 Print appropriate "Use of uninitialized variable" warning.
17421
17422 =cut
17423 */
17424
17425 void
17426 Perl_report_uninit(pTHX_ const SV *uninit_sv)
17427 {
17428     const char *desc = NULL;
17429     SV* varname = NULL;
17430
17431     if (PL_op) {
17432         desc = PL_op->op_type == OP_STRINGIFY && PL_op->op_folded
17433                 ? "join or string"
17434                 : PL_op->op_type == OP_MULTICONCAT
17435                     && (PL_op->op_private & OPpMULTICONCAT_FAKE)
17436                 ? "sprintf"
17437                 : OP_DESC(PL_op);
17438         if (uninit_sv && PL_curpad) {
17439             varname = find_uninit_var(PL_op, uninit_sv, 0, &desc);
17440             if (varname)
17441                 sv_insert(varname, 0, 0, " ", 1);
17442         }
17443     }
17444     else if (PL_curstackinfo->si_type == PERLSI_SORT && cxstack_ix == 0)
17445         /* we've reached the end of a sort block or sub,
17446          * and the uninit value is probably what that code returned */
17447         desc = "sort";
17448
17449     /* PL_warn_uninit_sv is constant */
17450     GCC_DIAG_IGNORE_STMT(-Wformat-nonliteral);
17451     if (desc)
17452         /* diag_listed_as: Use of uninitialized value%s */
17453         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit_sv,
17454                 SVfARG(varname ? varname : &PL_sv_no),
17455                 " in ", desc);
17456     else
17457         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
17458                 "", "", "");
17459     GCC_DIAG_RESTORE_STMT;
17460 }
17461
17462 /*
17463  * ex: set ts=8 sts=4 sw=4 et:
17464  */