This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perl.h: Fix typo in comment
[perl5.git] / sv.c
1 /*    sv.c
2  *
3  *    Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4  *    2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 by Larry Wall
5  *    and others
6  *
7  *    You may distribute under the terms of either the GNU General Public
8  *    License or the Artistic License, as specified in the README file.
9  *
10  */
11
12 /*
13  * 'I wonder what the Entish is for "yes" and "no",' he thought.
14  *                                                      --Pippin
15  *
16  *     [p.480 of _The Lord of the Rings_, III/iv: "Treebeard"]
17  */
18
19 /*
20  *
21  *
22  * This file contains the code that creates, manipulates and destroys
23  * scalar values (SVs). The other types (AV, HV, GV, etc.) reuse the
24  * structure of an SV, so their creation and destruction is handled
25  * here; higher-level functions are in av.c, hv.c, and so on. Opcode
26  * level functions (eg. substr, split, join) for each of the types are
27  * in the pp*.c files.
28  */
29
30 #include "EXTERN.h"
31 #define PERL_IN_SV_C
32 #include "perl.h"
33 #include "regcomp.h"
34 #ifdef __VMS
35 # include <rms.h>
36 #endif
37
38 #ifdef __Lynx__
39 /* Missing proto on LynxOS */
40   char *gconvert(double, int, int,  char *);
41 #endif
42
43 #ifdef USE_QUADMATH
44 #  define SNPRINTF_G(nv, buffer, size, ndig) \
45     quadmath_snprintf(buffer, size, "%.*Qg", (int)ndig, (NV)(nv))
46 #else
47 #  define SNPRINTF_G(nv, buffer, size, ndig) \
48     PERL_UNUSED_RESULT(Gconvert((NV)(nv), (int)ndig, 0, buffer))
49 #endif
50
51 #ifndef SV_COW_THRESHOLD
52 #    define SV_COW_THRESHOLD                    0   /* COW iff len > K */
53 #endif
54 #ifndef SV_COWBUF_THRESHOLD
55 #    define SV_COWBUF_THRESHOLD                 1250 /* COW iff len > K */
56 #endif
57 #ifndef SV_COW_MAX_WASTE_THRESHOLD
58 #    define SV_COW_MAX_WASTE_THRESHOLD          80   /* COW iff (len - cur) < K */
59 #endif
60 #ifndef SV_COWBUF_WASTE_THRESHOLD
61 #    define SV_COWBUF_WASTE_THRESHOLD           80   /* COW iff (len - cur) < K */
62 #endif
63 #ifndef SV_COW_MAX_WASTE_FACTOR_THRESHOLD
64 #    define SV_COW_MAX_WASTE_FACTOR_THRESHOLD   2    /* COW iff len < (cur * K) */
65 #endif
66 #ifndef SV_COWBUF_WASTE_FACTOR_THRESHOLD
67 #    define SV_COWBUF_WASTE_FACTOR_THRESHOLD    2    /* COW iff len < (cur * K) */
68 #endif
69 /* Work around compiler warnings about unsigned >= THRESHOLD when thres-
70    hold is 0. */
71 #if SV_COW_THRESHOLD
72 # define GE_COW_THRESHOLD(cur) ((cur) >= SV_COW_THRESHOLD)
73 #else
74 # define GE_COW_THRESHOLD(cur) 1
75 #endif
76 #if SV_COWBUF_THRESHOLD
77 # define GE_COWBUF_THRESHOLD(cur) ((cur) >= SV_COWBUF_THRESHOLD)
78 #else
79 # define GE_COWBUF_THRESHOLD(cur) 1
80 #endif
81 #if SV_COW_MAX_WASTE_THRESHOLD
82 # define GE_COW_MAX_WASTE_THRESHOLD(cur,len) (((len)-(cur)) < SV_COW_MAX_WASTE_THRESHOLD)
83 #else
84 # define GE_COW_MAX_WASTE_THRESHOLD(cur,len) 1
85 #endif
86 #if SV_COWBUF_WASTE_THRESHOLD
87 # define GE_COWBUF_WASTE_THRESHOLD(cur,len) (((len)-(cur)) < SV_COWBUF_WASTE_THRESHOLD)
88 #else
89 # define GE_COWBUF_WASTE_THRESHOLD(cur,len) 1
90 #endif
91 #if SV_COW_MAX_WASTE_FACTOR_THRESHOLD
92 # define GE_COW_MAX_WASTE_FACTOR_THRESHOLD(cur,len) ((len) < SV_COW_MAX_WASTE_FACTOR_THRESHOLD * (cur))
93 #else
94 # define GE_COW_MAX_WASTE_FACTOR_THRESHOLD(cur,len) 1
95 #endif
96 #if SV_COWBUF_WASTE_FACTOR_THRESHOLD
97 # define GE_COWBUF_WASTE_FACTOR_THRESHOLD(cur,len) ((len) < SV_COWBUF_WASTE_FACTOR_THRESHOLD * (cur))
98 #else
99 # define GE_COWBUF_WASTE_FACTOR_THRESHOLD(cur,len) 1
100 #endif
101
102 #define CHECK_COW_THRESHOLD(cur,len) (\
103     GE_COW_THRESHOLD((cur)) && \
104     GE_COW_MAX_WASTE_THRESHOLD((cur),(len)) && \
105     GE_COW_MAX_WASTE_FACTOR_THRESHOLD((cur),(len)) \
106 )
107 #define CHECK_COWBUF_THRESHOLD(cur,len) (\
108     GE_COWBUF_THRESHOLD((cur)) && \
109     GE_COWBUF_WASTE_THRESHOLD((cur),(len)) && \
110     GE_COWBUF_WASTE_FACTOR_THRESHOLD((cur),(len)) \
111 )
112
113 #ifdef PERL_UTF8_CACHE_ASSERT
114 /* if adding more checks watch out for the following tests:
115  *   t/op/index.t t/op/length.t t/op/pat.t t/op/substr.t
116  *   lib/utf8.t lib/Unicode/Collate/t/index.t
117  * --jhi
118  */
119 #   define ASSERT_UTF8_CACHE(cache) \
120     STMT_START { if (cache) { assert((cache)[0] <= (cache)[1]); \
121                               assert((cache)[2] <= (cache)[3]); \
122                               assert((cache)[3] <= (cache)[1]);} \
123                               } STMT_END
124 #else
125 #   define ASSERT_UTF8_CACHE(cache) NOOP
126 #endif
127
128 static const char S_destroy[] = "DESTROY";
129 #define S_destroy_len (sizeof(S_destroy)-1)
130
131 /* ============================================================================
132
133 =for apidoc_section SV Handling
134 An SV (or AV, HV, etc.) is allocated in two parts: the head (struct
135 sv, av, hv...) contains type and reference count information, and for
136 many types, a pointer to the body (struct xrv, xpv, xpviv...), which
137 contains fields specific to each type.  Some types store all they need
138 in the head, so don't have a body.
139
140 In all but the most memory-paranoid configurations (ex: PURIFY), heads
141 and bodies are allocated out of arenas, which by default are
142 approximately 4K chunks of memory parcelled up into N heads or bodies.
143 Sv-bodies are allocated by their sv-type, guaranteeing size
144 consistency needed to allocate safely from arrays.
145
146 For SV-heads, the first slot in each arena is reserved, and holds a
147 link to the next arena, some flags, and a note of the number of slots.
148 Snaked through each arena chain is a linked list of free items; when
149 this becomes empty, an extra arena is allocated and divided up into N
150 items which are threaded into the free list.
151
152 SV-bodies are similar, but they use arena-sets by default, which
153 separate the link and info from the arena itself, and reclaim the 1st
154 slot in the arena.  SV-bodies are further described later.
155
156 The following global variables are associated with arenas:
157
158  PL_sv_arenaroot     pointer to list of SV arenas
159  PL_sv_root          pointer to list of free SV structures
160
161  PL_body_arenas      head of linked-list of body arenas
162  PL_body_roots[]     array of pointers to list of free bodies of svtype
163                      arrays are indexed by the svtype needed
164
165 A few special SV heads are not allocated from an arena, but are
166 instead directly created in the interpreter structure, eg PL_sv_undef.
167 The size of arenas can be changed from the default by setting
168 PERL_ARENA_SIZE appropriately at compile time.
169
170 The SV arena serves the secondary purpose of allowing still-live SVs
171 to be located and destroyed during final cleanup.
172
173 At the lowest level, the macros new_SV() and del_SV() grab and free
174 an SV head.  (If debugging with -DD, del_SV() calls the function S_del_sv()
175 to return the SV to the free list with error checking.) new_SV() calls
176 more_sv() / sv_add_arena() to add an extra arena if the free list is empty.
177 SVs in the free list have their SvTYPE field set to all ones.
178
179 At the time of very final cleanup, sv_free_arenas() is called from
180 perl_destruct() to physically free all the arenas allocated since the
181 start of the interpreter.
182
183 The internal function visit() scans the SV arenas list, and calls a specified
184 function for each SV it finds which is still live - ie which has an SvTYPE
185 other than all 1's, and a non-zero SvREFCNT. visit() is used by the
186 following functions (specified as [function that calls visit()] / [function
187 called by visit() for each SV]):
188
189     sv_report_used() / do_report_used()
190                         dump all remaining SVs (debugging aid)
191
192     sv_clean_objs() / do_clean_objs(),do_clean_named_objs(),
193                       do_clean_named_io_objs(),do_curse()
194                         Attempt to free all objects pointed to by RVs,
195                         try to do the same for all objects indir-
196                         ectly referenced by typeglobs too, and
197                         then do a final sweep, cursing any
198                         objects that remain.  Called once from
199                         perl_destruct(), prior to calling sv_clean_all()
200                         below.
201
202     sv_clean_all() / do_clean_all()
203                         SvREFCNT_dec(sv) each remaining SV, possibly
204                         triggering an sv_free(). It also sets the
205                         SVf_BREAK flag on the SV to indicate that the
206                         refcnt has been artificially lowered, and thus
207                         stopping sv_free() from giving spurious warnings
208                         about SVs which unexpectedly have a refcnt
209                         of zero.  called repeatedly from perl_destruct()
210                         until there are no SVs left.
211
212 =head2 Arena allocator API Summary
213
214 Private API to rest of sv.c
215
216     new_SV(),  del_SV(),
217
218     new_XPVNV(), del_XPVGV(),
219     etc
220
221 Public API:
222
223     sv_report_used(), sv_clean_objs(), sv_clean_all(), sv_free_arenas()
224
225 =cut
226
227  * ========================================================================= */
228
229 /*
230  * "A time to plant, and a time to uproot what was planted..."
231  */
232
233 #ifdef PERL_MEM_LOG
234 #  define MEM_LOG_NEW_SV(sv, file, line, func)  \
235             Perl_mem_log_new_sv(sv, file, line, func)
236 #  define MEM_LOG_DEL_SV(sv, file, line, func)  \
237             Perl_mem_log_del_sv(sv, file, line, func)
238 #else
239 #  define MEM_LOG_NEW_SV(sv, file, line, func)  NOOP
240 #  define MEM_LOG_DEL_SV(sv, file, line, func)  NOOP
241 #endif
242
243 #ifdef DEBUG_LEAKING_SCALARS
244 #  define FREE_SV_DEBUG_FILE(sv) STMT_START { \
245         if ((sv)->sv_debug_file) PerlMemShared_free((sv)->sv_debug_file); \
246     } STMT_END
247 #  define DEBUG_SV_SERIAL(sv)                                               \
248     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%" UVxf ": (%05ld) del_SV\n",    \
249             PTR2UV(sv), (long)(sv)->sv_debug_serial))
250 #else
251 #  define FREE_SV_DEBUG_FILE(sv)
252 #  define DEBUG_SV_SERIAL(sv)   NOOP
253 #endif
254
255 #ifdef PERL_POISON
256 #  define SvARENA_CHAIN(sv)     ((sv)->sv_u.svu_rv)
257 #  define SvARENA_CHAIN_SET(sv,val)     (sv)->sv_u.svu_rv = MUTABLE_SV((val))
258 /* Whilst I'd love to do this, it seems that things like to check on
259    unreferenced scalars
260 #  define POISON_SV_HEAD(sv)    PoisonNew(sv, 1, struct STRUCT_SV)
261 */
262 #  define POISON_SV_HEAD(sv)    PoisonNew(&SvANY(sv), 1, void *), \
263                                 PoisonNew(&SvREFCNT(sv), 1, U32)
264 #else
265 #  define SvARENA_CHAIN(sv)     SvANY(sv)
266 #  define SvARENA_CHAIN_SET(sv,val)     SvANY(sv) = (void *)(val)
267 #  define POISON_SV_HEAD(sv)
268 #endif
269
270 /* Mark an SV head as unused, and add to free list.
271  *
272  * If SVf_BREAK is set, skip adding it to the free list, as this SV had
273  * its refcount artificially decremented during global destruction, so
274  * there may be dangling pointers to it. The last thing we want in that
275  * case is for it to be reused. */
276
277 #define plant_SV(p) \
278     STMT_START {                                        \
279         const U32 old_flags = SvFLAGS(p);                       \
280         MEM_LOG_DEL_SV(p, __FILE__, __LINE__, FUNCTION__);  \
281         DEBUG_SV_SERIAL(p);                             \
282         FREE_SV_DEBUG_FILE(p);                          \
283         POISON_SV_HEAD(p);                              \
284         SvFLAGS(p) = SVTYPEMASK;                        \
285         if (!(old_flags & SVf_BREAK)) {         \
286             SvARENA_CHAIN_SET(p, PL_sv_root);   \
287             PL_sv_root = (p);                           \
288         }                                               \
289         --PL_sv_count;                                  \
290     } STMT_END
291
292 #define uproot_SV(p) \
293     STMT_START {                                        \
294         (p) = PL_sv_root;                               \
295         PL_sv_root = MUTABLE_SV(SvARENA_CHAIN(p));              \
296         ++PL_sv_count;                                  \
297     } STMT_END
298
299
300 /* make some more SVs by adding another arena */
301
302 STATIC SV*
303 S_more_sv(pTHX)
304 {
305     SV* sv;
306     char *chunk;                /* must use New here to match call to */
307     Newx(chunk,PERL_ARENA_SIZE,char);  /* Safefree() in sv_free_arenas() */
308     sv_add_arena(chunk, PERL_ARENA_SIZE, 0);
309     uproot_SV(sv);
310     return sv;
311 }
312
313 /* new_SV(): return a new, empty SV head */
314
315 #ifdef DEBUG_LEAKING_SCALARS
316 /* provide a real function for a debugger to play with */
317 STATIC SV*
318 S_new_SV(pTHX_ const char *file, int line, const char *func)
319 {
320     SV* sv;
321
322     if (PL_sv_root)
323         uproot_SV(sv);
324     else
325         sv = S_more_sv(aTHX);
326     SvANY(sv) = 0;
327     SvREFCNT(sv) = 1;
328     SvFLAGS(sv) = 0;
329     sv->sv_debug_optype = PL_op ? PL_op->op_type : 0;
330     sv->sv_debug_line = (U16) (PL_parser && PL_parser->copline != NOLINE
331                 ? PL_parser->copline
332                 :  PL_curcop
333                     ? CopLINE(PL_curcop)
334                     : 0
335             );
336     sv->sv_debug_inpad = 0;
337     sv->sv_debug_parent = NULL;
338     sv->sv_debug_file = PL_curcop ? savesharedpv(CopFILE(PL_curcop)): NULL;
339
340     sv->sv_debug_serial = PL_sv_serial++;
341
342     MEM_LOG_NEW_SV(sv, file, line, func);
343     DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%" UVxf ": (%05ld) new_SV (from %s:%d [%s])\n",
344             PTR2UV(sv), (long)sv->sv_debug_serial, file, line, func));
345
346     return sv;
347 }
348 #  define new_SV(p) (p)=S_new_SV(aTHX_ __FILE__, __LINE__, FUNCTION__)
349
350 #else
351 #  define new_SV(p) \
352     STMT_START {                                        \
353         if (PL_sv_root)                                 \
354             uproot_SV(p);                               \
355         else                                            \
356             (p) = S_more_sv(aTHX);                      \
357         SvANY(p) = 0;                                   \
358         SvREFCNT(p) = 1;                                \
359         SvFLAGS(p) = 0;                                 \
360         MEM_LOG_NEW_SV(p, __FILE__, __LINE__, FUNCTION__);  \
361     } STMT_END
362 #endif
363
364
365 /* del_SV(): return an empty SV head to the free list */
366
367 #ifdef DEBUGGING
368
369 #define del_SV(p) \
370     STMT_START {                                        \
371         if (DEBUG_D_TEST)                               \
372             del_sv(p);                                  \
373         else                                            \
374             plant_SV(p);                                \
375     } STMT_END
376
377 STATIC void
378 S_del_sv(pTHX_ SV *p)
379 {
380     PERL_ARGS_ASSERT_DEL_SV;
381
382     if (DEBUG_D_TEST) {
383         SV* sva;
384         bool ok = 0;
385         for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
386             const SV * const sv = sva + 1;
387             const SV * const svend = &sva[SvREFCNT(sva)];
388             if (p >= sv && p < svend) {
389                 ok = 1;
390                 break;
391             }
392         }
393         if (!ok) {
394             Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
395                              "Attempt to free non-arena SV: 0x%" UVxf
396                              pTHX__FORMAT, PTR2UV(p) pTHX__VALUE);
397             return;
398         }
399     }
400     plant_SV(p);
401 }
402
403 #else /* ! DEBUGGING */
404
405 #define del_SV(p)   plant_SV(p)
406
407 #endif /* DEBUGGING */
408
409
410 /*
411 =for apidoc_section SV Handling
412
413 =for apidoc sv_add_arena
414
415 Given a chunk of memory, link it to the head of the list of arenas,
416 and split it into a list of free SVs.
417
418 =cut
419 */
420
421 static void
422 S_sv_add_arena(pTHX_ char *const ptr, const U32 size, const U32 flags)
423 {
424     SV *const sva = MUTABLE_SV(ptr);
425     SV* sv;
426     SV* svend;
427
428     PERL_ARGS_ASSERT_SV_ADD_ARENA;
429
430     /* The first SV in an arena isn't an SV. */
431     SvANY(sva) = (void *) PL_sv_arenaroot;              /* ptr to next arena */
432     SvREFCNT(sva) = size / sizeof(SV);          /* number of SV slots */
433     SvFLAGS(sva) = flags;                       /* FAKE if not to be freed */
434
435     PL_sv_arenaroot = sva;
436     PL_sv_root = sva + 1;
437
438     svend = &sva[SvREFCNT(sva) - 1];
439     sv = sva + 1;
440     while (sv < svend) {
441         SvARENA_CHAIN_SET(sv, (sv + 1));
442 #ifdef DEBUGGING
443         SvREFCNT(sv) = 0;
444 #endif
445         /* Must always set typemask because it's always checked in on cleanup
446            when the arenas are walked looking for objects.  */
447         SvFLAGS(sv) = SVTYPEMASK;
448         sv++;
449     }
450     SvARENA_CHAIN_SET(sv, 0);
451 #ifdef DEBUGGING
452     SvREFCNT(sv) = 0;
453 #endif
454     SvFLAGS(sv) = SVTYPEMASK;
455 }
456
457 /* visit(): call the named function for each non-free SV in the arenas
458  * whose flags field matches the flags/mask args. */
459
460 STATIC I32
461 S_visit(pTHX_ SVFUNC_t f, const U32 flags, const U32 mask)
462 {
463     SV* sva;
464     I32 visited = 0;
465
466     PERL_ARGS_ASSERT_VISIT;
467
468     for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
469         const SV * const svend = &sva[SvREFCNT(sva)];
470         SV* sv;
471         for (sv = sva + 1; sv < svend; ++sv) {
472             if (SvTYPE(sv) != (svtype)SVTYPEMASK
473                     && (sv->sv_flags & mask) == flags
474                     && SvREFCNT(sv))
475             {
476                 (*f)(aTHX_ sv);
477                 ++visited;
478             }
479         }
480     }
481     return visited;
482 }
483
484 #ifdef DEBUGGING
485
486 /* called by sv_report_used() for each live SV */
487
488 static void
489 do_report_used(pTHX_ SV *const sv)
490 {
491     if (SvTYPE(sv) != (svtype)SVTYPEMASK) {
492         PerlIO_printf(Perl_debug_log, "****\n");
493         sv_dump(sv);
494     }
495 }
496 #endif
497
498 /*
499 =for apidoc sv_report_used
500
501 Dump the contents of all SVs not yet freed (debugging aid).
502
503 =cut
504 */
505
506 void
507 Perl_sv_report_used(pTHX)
508 {
509 #ifdef DEBUGGING
510     visit(do_report_used, 0, 0);
511 #else
512     PERL_UNUSED_CONTEXT;
513 #endif
514 }
515
516 /* called by sv_clean_objs() for each live SV */
517
518 static void
519 do_clean_objs(pTHX_ SV *const ref)
520 {
521     assert (SvROK(ref));
522     {
523         SV * const target = SvRV(ref);
524         if (SvOBJECT(target)) {
525             DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning object ref:\n "), sv_dump(ref)));
526             if (SvWEAKREF(ref)) {
527                 sv_del_backref(target, ref);
528                 SvWEAKREF_off(ref);
529                 SvRV_set(ref, NULL);
530             } else {
531                 SvROK_off(ref);
532                 SvRV_set(ref, NULL);
533                 SvREFCNT_dec_NN(target);
534             }
535         }
536     }
537 }
538
539
540 /* clear any slots in a GV which hold objects - except IO;
541  * called by sv_clean_objs() for each live GV */
542
543 static void
544 do_clean_named_objs(pTHX_ SV *const sv)
545 {
546     SV *obj;
547     assert(SvTYPE(sv) == SVt_PVGV);
548     assert(isGV_with_GP(sv));
549     if (!GvGP(sv))
550         return;
551
552     /* freeing GP entries may indirectly free the current GV;
553      * hold onto it while we mess with the GP slots */
554     SvREFCNT_inc(sv);
555
556     if ( ((obj = GvSV(sv) )) && SvOBJECT(obj)) {
557         DEBUG_D((PerlIO_printf(Perl_debug_log,
558                 "Cleaning named glob SV object:\n "), sv_dump(obj)));
559         GvSV(sv) = NULL;
560         SvREFCNT_dec_NN(obj);
561     }
562     if ( ((obj = MUTABLE_SV(GvAV(sv)) )) && SvOBJECT(obj)) {
563         DEBUG_D((PerlIO_printf(Perl_debug_log,
564                 "Cleaning named glob AV object:\n "), sv_dump(obj)));
565         GvAV(sv) = NULL;
566         SvREFCNT_dec_NN(obj);
567     }
568     if ( ((obj = MUTABLE_SV(GvHV(sv)) )) && SvOBJECT(obj)) {
569         DEBUG_D((PerlIO_printf(Perl_debug_log,
570                 "Cleaning named glob HV object:\n "), sv_dump(obj)));
571         GvHV(sv) = NULL;
572         SvREFCNT_dec_NN(obj);
573     }
574     if ( ((obj = MUTABLE_SV(GvCV(sv)) )) && SvOBJECT(obj)) {
575         DEBUG_D((PerlIO_printf(Perl_debug_log,
576                 "Cleaning named glob CV object:\n "), sv_dump(obj)));
577         GvCV_set(sv, NULL);
578         SvREFCNT_dec_NN(obj);
579     }
580     SvREFCNT_dec_NN(sv); /* undo the inc above */
581 }
582
583 /* clear any IO slots in a GV which hold objects (except stderr, defout);
584  * called by sv_clean_objs() for each live GV */
585
586 static void
587 do_clean_named_io_objs(pTHX_ SV *const sv)
588 {
589     SV *obj;
590     assert(SvTYPE(sv) == SVt_PVGV);
591     assert(isGV_with_GP(sv));
592     if (!GvGP(sv) || sv == (SV*)PL_stderrgv || sv == (SV*)PL_defoutgv)
593         return;
594
595     SvREFCNT_inc(sv);
596     if ( ((obj = MUTABLE_SV(GvIO(sv)) )) && SvOBJECT(obj)) {
597         DEBUG_D((PerlIO_printf(Perl_debug_log,
598                 "Cleaning named glob IO object:\n "), sv_dump(obj)));
599         GvIOp(sv) = NULL;
600         SvREFCNT_dec_NN(obj);
601     }
602     SvREFCNT_dec_NN(sv); /* undo the inc above */
603 }
604
605 /* Void wrapper to pass to visit() */
606 static void
607 do_curse(pTHX_ SV * const sv) {
608     if ((PL_stderrgv && GvGP(PL_stderrgv) && (SV*)GvIO(PL_stderrgv) == sv)
609      || (PL_defoutgv && GvGP(PL_defoutgv) && (SV*)GvIO(PL_defoutgv) == sv))
610         return;
611     (void)curse(sv, 0);
612 }
613
614 /*
615 =for apidoc sv_clean_objs
616
617 Attempt to destroy all objects not yet freed.
618
619 =cut
620 */
621
622 void
623 Perl_sv_clean_objs(pTHX)
624 {
625     GV *olddef, *olderr;
626     PL_in_clean_objs = TRUE;
627     visit(do_clean_objs, SVf_ROK, SVf_ROK);
628     /* Some barnacles may yet remain, clinging to typeglobs.
629      * Run the non-IO destructors first: they may want to output
630      * error messages, close files etc */
631     visit(do_clean_named_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
632     visit(do_clean_named_io_objs, SVt_PVGV|SVpgv_GP, SVTYPEMASK|SVp_POK|SVpgv_GP);
633     /* And if there are some very tenacious barnacles clinging to arrays,
634        closures, or what have you.... */
635     visit(do_curse, SVs_OBJECT, SVs_OBJECT);
636     olddef = PL_defoutgv;
637     PL_defoutgv = NULL; /* disable skip of PL_defoutgv */
638     if (olddef && isGV_with_GP(olddef))
639         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olddef));
640     olderr = PL_stderrgv;
641     PL_stderrgv = NULL; /* disable skip of PL_stderrgv */
642     if (olderr && isGV_with_GP(olderr))
643         do_clean_named_io_objs(aTHX_ MUTABLE_SV(olderr));
644     SvREFCNT_dec(olddef);
645     PL_in_clean_objs = FALSE;
646 }
647
648 /* called by sv_clean_all() for each live SV */
649
650 static void
651 do_clean_all(pTHX_ SV *const sv)
652 {
653     if (sv == (const SV *) PL_fdpid || sv == (const SV *)PL_strtab) {
654         /* don't clean pid table and strtab */
655         return;
656     }
657     DEBUG_D((PerlIO_printf(Perl_debug_log, "Cleaning loops: SV at 0x%" UVxf "\n", PTR2UV(sv)) ));
658     SvFLAGS(sv) |= SVf_BREAK;
659     SvREFCNT_dec_NN(sv);
660 }
661
662 /*
663 =for apidoc sv_clean_all
664
665 Decrement the refcnt of each remaining SV, possibly triggering a
666 cleanup.  This function may have to be called multiple times to free
667 SVs which are in complex self-referential hierarchies.
668
669 =cut
670 */
671
672 I32
673 Perl_sv_clean_all(pTHX)
674 {
675     I32 cleaned;
676     PL_in_clean_all = TRUE;
677     cleaned = visit(do_clean_all, 0,0);
678     return cleaned;
679 }
680
681 /*
682   ARENASETS: a meta-arena implementation which separates arena-info
683   into struct arena_set, which contains an array of struct
684   arena_descs, each holding info for a single arena.  By separating
685   the meta-info from the arena, we recover the 1st slot, formerly
686   borrowed for list management.  The arena_set is about the size of an
687   arena, avoiding the needless malloc overhead of a naive linked-list.
688
689   The cost is 1 arena-set malloc per ~320 arena-mallocs, + the unused
690   memory in the last arena-set (1/2 on average).  In trade, we get
691   back the 1st slot in each arena (ie 1.7% of a CV-arena, less for
692   smaller types).  The recovery of the wasted space allows use of
693   small arenas for large, rare body types, by changing array* fields
694   in body_details_by_type[] below.
695 */
696 struct arena_desc {
697     char       *arena;          /* the raw storage, allocated aligned */
698     size_t      size;           /* its size ~4k typ */
699     svtype      utype;          /* bodytype stored in arena */
700 };
701
702 struct arena_set;
703
704 /* Get the maximum number of elements in set[] such that struct arena_set
705    will fit within PERL_ARENA_SIZE, which is probably just under 4K, and
706    therefore likely to be 1 aligned memory page.  */
707
708 #define ARENAS_PER_SET  ((PERL_ARENA_SIZE - sizeof(struct arena_set*) \
709                           - 2 * sizeof(int)) / sizeof (struct arena_desc))
710
711 struct arena_set {
712     struct arena_set* next;
713     unsigned int   set_size;    /* ie ARENAS_PER_SET */
714     unsigned int   curr;        /* index of next available arena-desc */
715     struct arena_desc set[ARENAS_PER_SET];
716 };
717
718 /*
719 =for apidoc sv_free_arenas
720
721 Deallocate the memory used by all arenas.  Note that all the individual SV
722 heads and bodies within the arenas must already have been freed.
723
724 =cut
725
726 */
727 void
728 Perl_sv_free_arenas(pTHX)
729 {
730     SV* sva;
731     SV* svanext;
732     unsigned int i;
733
734     /* Free arenas here, but be careful about fake ones.  (We assume
735        contiguity of the fake ones with the corresponding real ones.) */
736
737     for (sva = PL_sv_arenaroot; sva; sva = svanext) {
738         svanext = MUTABLE_SV(SvANY(sva));
739         while (svanext && SvFAKE(svanext))
740             svanext = MUTABLE_SV(SvANY(svanext));
741
742         if (!SvFAKE(sva))
743             Safefree(sva);
744     }
745
746     {
747         struct arena_set *aroot = (struct arena_set*) PL_body_arenas;
748
749         while (aroot) {
750             struct arena_set *current = aroot;
751             i = aroot->curr;
752             while (i--) {
753                 assert(aroot->set[i].arena);
754                 Safefree(aroot->set[i].arena);
755             }
756             aroot = aroot->next;
757             Safefree(current);
758         }
759     }
760     PL_body_arenas = 0;
761
762     i = PERL_ARENA_ROOTS_SIZE;
763     while (i--)
764         PL_body_roots[i] = 0;
765
766     PL_sv_arenaroot = 0;
767     PL_sv_root = 0;
768 }
769
770 /*
771   Here are mid-level routines that manage the allocation of bodies out
772   of the various arenas.  There are 4 kinds of arenas:
773
774   1. SV-head arenas, which are discussed and handled above
775   2. regular body arenas
776   3. arenas for reduced-size bodies
777   4. Hash-Entry arenas
778
779   Arena types 2 & 3 are chained by body-type off an array of
780   arena-root pointers, which is indexed by svtype.  Some of the
781   larger/less used body types are malloced singly, since a large
782   unused block of them is wasteful.  Also, several svtypes dont have
783   bodies; the data fits into the sv-head itself.  The arena-root
784   pointer thus has a few unused root-pointers (which may be hijacked
785   later for arena type 4)
786
787   3 differs from 2 as an optimization; some body types have several
788   unused fields in the front of the structure (which are kept in-place
789   for consistency).  These bodies can be allocated in smaller chunks,
790   because the leading fields arent accessed.  Pointers to such bodies
791   are decremented to point at the unused 'ghost' memory, knowing that
792   the pointers are used with offsets to the real memory.
793
794 Allocation of SV-bodies is similar to SV-heads, differing as follows;
795 the allocation mechanism is used for many body types, so is somewhat
796 more complicated, it uses arena-sets, and has no need for still-live
797 SV detection.
798
799 At the outermost level, (new|del)_X*V macros return bodies of the
800 appropriate type.  These macros call either (new|del)_body_type or
801 (new|del)_body_allocated macro pairs, depending on specifics of the
802 type.  Most body types use the former pair, the latter pair is used to
803 allocate body types with "ghost fields".
804
805 "ghost fields" are fields that are unused in certain types, and
806 consequently don't need to actually exist.  They are declared because
807 they're part of a "base type", which allows use of functions as
808 methods.  The simplest examples are AVs and HVs, 2 aggregate types
809 which don't use the fields which support SCALAR semantics.
810
811 For these types, the arenas are carved up into appropriately sized
812 chunks, we thus avoid wasted memory for those unaccessed members.
813 When bodies are allocated, we adjust the pointer back in memory by the
814 size of the part not allocated, so it's as if we allocated the full
815 structure.  (But things will all go boom if you write to the part that
816 is "not there", because you'll be overwriting the last members of the
817 preceding structure in memory.)
818
819 We calculate the correction using the STRUCT_OFFSET macro on the first
820 member present.  If the allocated structure is smaller (no initial NV
821 actually allocated) then the net effect is to subtract the size of the NV
822 from the pointer, to return a new pointer as if an initial NV were actually
823 allocated.  (We were using structures named *_allocated for this, but
824 this turned out to be a subtle bug, because a structure without an NV
825 could have a lower alignment constraint, but the compiler is allowed to
826 optimised accesses based on the alignment constraint of the actual pointer
827 to the full structure, for example, using a single 64 bit load instruction
828 because it "knows" that two adjacent 32 bit members will be 8-byte aligned.)
829
830 This is the same trick as was used for NV and IV bodies.  Ironically it
831 doesn't need to be used for NV bodies any more, because NV is now at
832 the start of the structure.  IV bodies, and also in some builds NV bodies,
833 don't need it either, because they are no longer allocated.
834
835 In turn, the new_body_* allocators call S_new_body(), which invokes
836 new_body_inline macro, which takes a lock, and takes a body off the
837 linked list at PL_body_roots[sv_type], calling Perl_more_bodies() if
838 necessary to refresh an empty list.  Then the lock is released, and
839 the body is returned.
840
841 Perl_more_bodies allocates a new arena, and carves it up into an array of N
842 bodies, which it strings into a linked list.  It looks up arena-size
843 and body-size from the body_details table described below, thus
844 supporting the multiple body-types.
845
846 If PURIFY is defined, or PERL_ARENA_SIZE=0, arenas are not used, and
847 the (new|del)_X*V macros are mapped directly to malloc/free.
848
849 For each sv-type, struct body_details bodies_by_type[] carries
850 parameters which control these aspects of SV handling:
851
852 Arena_size determines whether arenas are used for this body type, and if
853 so, how big they are.  PURIFY or PERL_ARENA_SIZE=0 set this field to
854 zero, forcing individual mallocs and frees.
855
856 Body_size determines how big a body is, and therefore how many fit into
857 each arena.  Offset carries the body-pointer adjustment needed for
858 "ghost fields", and is used in *_allocated macros.
859
860 But its main purpose is to parameterize info needed in
861 Perl_sv_upgrade().  The info here dramatically simplifies the function
862 vs the implementation in 5.8.8, making it table-driven.  All fields
863 are used for this, except for arena_size.
864
865 For the sv-types that have no bodies, arenas are not used, so those
866 PL_body_roots[sv_type] are unused, and can be overloaded.  In
867 something of a special case, SVt_NULL is borrowed for HE arenas;
868 PL_body_roots[HE_SVSLOT=SVt_NULL] is filled by S_more_he, but the
869 bodies_by_type[SVt_NULL] slot is not used, as the table is not
870 available in hv.c.
871
872 */
873
874 struct body_details {
875     U8 body_size;       /* Size to allocate  */
876     U8 copy;            /* Size of structure to copy (may be shorter)  */
877     U8 offset;          /* Size of unalloced ghost fields to first alloced field*/
878     PERL_BITFIELD8 type : 4;        /* We have space for a sanity check. */
879     PERL_BITFIELD8 cant_upgrade : 1;/* Cannot upgrade this type */
880     PERL_BITFIELD8 zero_nv : 1;     /* zero the NV when upgrading from this */
881     PERL_BITFIELD8 arena : 1;       /* Allocated from an arena */
882     U32 arena_size;                 /* Size of arena to allocate */
883 };
884
885 #define ALIGNED_TYPE_NAME(name) name##_aligned
886 #define ALIGNED_TYPE(name)              \
887     typedef union {     \
888         name align_me;                          \
889         NV nv;                          \
890         IV iv;                          \
891     } ALIGNED_TYPE_NAME(name);
892
893 ALIGNED_TYPE(regexp);
894 ALIGNED_TYPE(XPVGV);
895 ALIGNED_TYPE(XPVLV);
896 ALIGNED_TYPE(XPVAV);
897 ALIGNED_TYPE(XPVHV);
898 ALIGNED_TYPE(XPVCV);
899 ALIGNED_TYPE(XPVFM);
900 ALIGNED_TYPE(XPVIO);
901
902 #define HADNV FALSE
903 #define NONV TRUE
904
905
906 #ifdef PURIFY
907 /* With -DPURFIY we allocate everything directly, and don't use arenas.
908    This seems a rather elegant way to simplify some of the code below.  */
909 #define HASARENA FALSE
910 #else
911 #define HASARENA TRUE
912 #endif
913 #define NOARENA FALSE
914
915 /* Size the arenas to exactly fit a given number of bodies.  A count
916    of 0 fits the max number bodies into a PERL_ARENA_SIZE.block,
917    simplifying the default.  If count > 0, the arena is sized to fit
918    only that many bodies, allowing arenas to be used for large, rare
919    bodies (XPVFM, XPVIO) without undue waste.  The arena size is
920    limited by PERL_ARENA_SIZE, so we can safely oversize the
921    declarations.
922  */
923 #define FIT_ARENA0(body_size)                           \
924     ((size_t)(PERL_ARENA_SIZE / body_size) * body_size)
925 #define FIT_ARENAn(count,body_size)                     \
926     ( count * body_size <= PERL_ARENA_SIZE)             \
927     ? count * body_size                                 \
928     : FIT_ARENA0 (body_size)
929 #define FIT_ARENA(count,body_size)                      \
930    (U32)(count                                          \
931     ? FIT_ARENAn (count, body_size)                     \
932     : FIT_ARENA0 (body_size))
933
934 /* Calculate the length to copy. Specifically work out the length less any
935    final padding the compiler needed to add.  See the comment in sv_upgrade
936    for why copying the padding proved to be a bug.  */
937
938 #define copy_length(type, last_member) \
939         STRUCT_OFFSET(type, last_member) \
940         + sizeof (((type*)SvANY((const SV *)0))->last_member)
941
942 static const struct body_details bodies_by_type[] = {
943     /* HEs use this offset for their arena.  */
944     { 0, 0, 0, SVt_NULL, FALSE, NONV, NOARENA, 0 },
945
946     /* IVs are in the head, so the allocation size is 0.  */
947     { 0,
948       sizeof(IV), /* This is used to copy out the IV body.  */
949       STRUCT_OFFSET(XPVIV, xiv_iv), SVt_IV, FALSE, NONV,
950       NOARENA /* IVS don't need an arena  */, 0
951     },
952
953 #if NVSIZE <= IVSIZE
954     { 0, sizeof(NV),
955       STRUCT_OFFSET(XPVNV, xnv_u),
956       SVt_NV, FALSE, HADNV, NOARENA, 0 },
957 #else
958     { sizeof(NV), sizeof(NV),
959       STRUCT_OFFSET(XPVNV, xnv_u),
960       SVt_NV, FALSE, HADNV, HASARENA, FIT_ARENA(0, sizeof(NV)) },
961 #endif
962
963     { sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur),
964       copy_length(XPV, xpv_len) - STRUCT_OFFSET(XPV, xpv_cur),
965       + STRUCT_OFFSET(XPV, xpv_cur),
966       SVt_PV, FALSE, NONV, HASARENA,
967       FIT_ARENA(0, sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur)) },
968
969     { sizeof(XINVLIST) - STRUCT_OFFSET(XPV, xpv_cur),
970       copy_length(XINVLIST, is_offset) - STRUCT_OFFSET(XPV, xpv_cur),
971       + STRUCT_OFFSET(XPV, xpv_cur),
972       SVt_INVLIST, TRUE, NONV, HASARENA,
973       FIT_ARENA(0, sizeof(XINVLIST) - STRUCT_OFFSET(XPV, xpv_cur)) },
974
975     { sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur),
976       copy_length(XPVIV, xiv_u) - STRUCT_OFFSET(XPV, xpv_cur),
977       + STRUCT_OFFSET(XPV, xpv_cur),
978       SVt_PVIV, FALSE, NONV, HASARENA,
979       FIT_ARENA(0, sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur)) },
980
981     { sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur),
982       copy_length(XPVNV, xnv_u) - STRUCT_OFFSET(XPV, xpv_cur),
983       + STRUCT_OFFSET(XPV, xpv_cur),
984       SVt_PVNV, FALSE, HADNV, HASARENA,
985       FIT_ARENA(0, sizeof(XPVNV) - STRUCT_OFFSET(XPV, xpv_cur)) },
986
987     { sizeof(XPVMG), copy_length(XPVMG, xnv_u), 0, SVt_PVMG, FALSE, HADNV,
988       HASARENA, FIT_ARENA(0, sizeof(XPVMG)) },
989
990     { sizeof(ALIGNED_TYPE_NAME(regexp)),
991       sizeof(regexp),
992       0,
993       SVt_REGEXP, TRUE, NONV, HASARENA,
994       FIT_ARENA(0, sizeof(ALIGNED_TYPE_NAME(regexp)))
995     },
996
997     { sizeof(ALIGNED_TYPE_NAME(XPVGV)), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
998       HASARENA, FIT_ARENA(0, sizeof(ALIGNED_TYPE_NAME(XPVGV))) },
999     
1000     { sizeof(ALIGNED_TYPE_NAME(XPVLV)), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
1001       HASARENA, FIT_ARENA(0, sizeof(ALIGNED_TYPE_NAME(XPVLV))) },
1002
1003     { sizeof(ALIGNED_TYPE_NAME(XPVAV)),
1004       copy_length(XPVAV, xav_alloc),
1005       0,
1006       SVt_PVAV, TRUE, NONV, HASARENA,
1007       FIT_ARENA(0, sizeof(ALIGNED_TYPE_NAME(XPVAV))) },
1008
1009     { sizeof(ALIGNED_TYPE_NAME(XPVHV)),
1010       copy_length(XPVHV, xhv_max),
1011       0,
1012       SVt_PVHV, TRUE, NONV, HASARENA,
1013       FIT_ARENA(0, sizeof(ALIGNED_TYPE_NAME(XPVHV))) },
1014
1015     { sizeof(ALIGNED_TYPE_NAME(XPVCV)),
1016       sizeof(XPVCV),
1017       0,
1018       SVt_PVCV, TRUE, NONV, HASARENA,
1019       FIT_ARENA(0, sizeof(ALIGNED_TYPE_NAME(XPVCV))) },
1020
1021     { sizeof(ALIGNED_TYPE_NAME(XPVFM)),
1022       sizeof(XPVFM),
1023       0,
1024       SVt_PVFM, TRUE, NONV, NOARENA,
1025       FIT_ARENA(20, sizeof(ALIGNED_TYPE_NAME(XPVFM))) },
1026
1027     { sizeof(ALIGNED_TYPE_NAME(XPVIO)),
1028       sizeof(XPVIO),
1029       0,
1030       SVt_PVIO, TRUE, NONV, HASARENA,
1031       FIT_ARENA(24, sizeof(ALIGNED_TYPE_NAME(XPVIO))) },
1032 };
1033
1034 #define new_body_allocated(sv_type)             \
1035     (void *)((char *)S_new_body(aTHX_ sv_type)  \
1036              - bodies_by_type[sv_type].offset)
1037
1038 /* return a thing to the free list */
1039
1040 #define del_body(thing, root)                           \
1041     STMT_START {                                        \
1042         void ** const thing_copy = (void **)thing;      \
1043         *thing_copy = *root;                            \
1044         *root = (void*)thing_copy;                      \
1045     } STMT_END
1046
1047 #ifdef PURIFY
1048 #if !(NVSIZE <= IVSIZE)
1049 #  define new_XNV()     safemalloc(sizeof(XPVNV))
1050 #endif
1051 #define new_XPVNV()     safemalloc(sizeof(XPVNV))
1052 #define new_XPVMG()     safemalloc(sizeof(XPVMG))
1053
1054 #define del_XPVGV(p)    safefree(p)
1055
1056 #else /* !PURIFY */
1057
1058 #if !(NVSIZE <= IVSIZE)
1059 #  define new_XNV()     new_body_allocated(SVt_NV)
1060 #endif
1061 #define new_XPVNV()     new_body_allocated(SVt_PVNV)
1062 #define new_XPVMG()     new_body_allocated(SVt_PVMG)
1063
1064 #define del_XPVGV(p)    del_body(p + bodies_by_type[SVt_PVGV].offset,   \
1065                                  &PL_body_roots[SVt_PVGV])
1066
1067 #endif /* PURIFY */
1068
1069 /* no arena for you! */
1070
1071 #define new_NOARENA(details) \
1072         safemalloc((details)->body_size + (details)->offset)
1073 #define new_NOARENAZ(details) \
1074         safecalloc((details)->body_size + (details)->offset, 1)
1075
1076 void *
1077 Perl_more_bodies (pTHX_ const svtype sv_type, const size_t body_size,
1078                   const size_t arena_size)
1079 {
1080     void ** const root = &PL_body_roots[sv_type];
1081     struct arena_desc *adesc;
1082     struct arena_set *aroot = (struct arena_set *) PL_body_arenas;
1083     unsigned int curr;
1084     char *start;
1085     const char *end;
1086     const size_t good_arena_size = Perl_malloc_good_size(arena_size);
1087 #if defined(DEBUGGING)
1088     static bool done_sanity_check;
1089
1090     if (!done_sanity_check) {
1091         unsigned int i = SVt_LAST;
1092
1093         done_sanity_check = TRUE;
1094
1095         while (i--)
1096             assert (bodies_by_type[i].type == i);
1097     }
1098 #endif
1099
1100     assert(arena_size);
1101
1102     /* may need new arena-set to hold new arena */
1103     if (!aroot || aroot->curr >= aroot->set_size) {
1104         struct arena_set *newroot;
1105         Newxz(newroot, 1, struct arena_set);
1106         newroot->set_size = ARENAS_PER_SET;
1107         newroot->next = aroot;
1108         aroot = newroot;
1109         PL_body_arenas = (void *) newroot;
1110         DEBUG_m(PerlIO_printf(Perl_debug_log, "new arenaset %p\n", (void*)aroot));
1111     }
1112
1113     /* ok, now have arena-set with at least 1 empty/available arena-desc */
1114     curr = aroot->curr++;
1115     adesc = &(aroot->set[curr]);
1116     assert(!adesc->arena);
1117     
1118     Newx(adesc->arena, good_arena_size, char);
1119     adesc->size = good_arena_size;
1120     adesc->utype = sv_type;
1121     DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %d added: %p size %" UVuf "\n",
1122                           curr, (void*)adesc->arena, (UV)good_arena_size));
1123
1124     start = (char *) adesc->arena;
1125
1126     /* Get the address of the byte after the end of the last body we can fit.
1127        Remember, this is integer division:  */
1128     end = start + good_arena_size / body_size * body_size;
1129
1130     /* computed count doesn't reflect the 1st slot reservation */
1131 #if defined(MYMALLOC) || defined(HAS_MALLOC_GOOD_SIZE)
1132     DEBUG_m(PerlIO_printf(Perl_debug_log,
1133                           "arena %p end %p arena-size %d (from %d) type %d "
1134                           "size %d ct %d\n",
1135                           (void*)start, (void*)end, (int)good_arena_size,
1136                           (int)arena_size, sv_type, (int)body_size,
1137                           (int)good_arena_size / (int)body_size));
1138 #else
1139     DEBUG_m(PerlIO_printf(Perl_debug_log,
1140                           "arena %p end %p arena-size %d type %d size %d ct %d\n",
1141                           (void*)start, (void*)end,
1142                           (int)arena_size, sv_type, (int)body_size,
1143                           (int)good_arena_size / (int)body_size));
1144 #endif
1145     *root = (void *)start;
1146
1147     while (1) {
1148         /* Where the next body would start:  */
1149         char * const next = start + body_size;
1150
1151         if (next >= end) {
1152             /* This is the last body:  */
1153             assert(next == end);
1154
1155             *(void **)start = 0;
1156             return *root;
1157         }
1158
1159         *(void**) start = (void *)next;
1160         start = next;
1161     }
1162 }
1163
1164 /* grab a new thing from the free list, allocating more if necessary.
1165    The inline version is used for speed in hot routines, and the
1166    function using it serves the rest (unless PURIFY).
1167 */
1168 #define new_body_inline(xpv, sv_type) \
1169     STMT_START { \
1170         void ** const r3wt = &PL_body_roots[sv_type]; \
1171         xpv = (PTR_TBL_ENT_t*) (*((void **)(r3wt))      \
1172           ? *((void **)(r3wt)) : Perl_more_bodies(aTHX_ sv_type, \
1173                                              bodies_by_type[sv_type].body_size,\
1174                                              bodies_by_type[sv_type].arena_size)); \
1175         *(r3wt) = *(void**)(xpv); \
1176     } STMT_END
1177
1178 #ifndef PURIFY
1179
1180 STATIC void *
1181 S_new_body(pTHX_ const svtype sv_type)
1182 {
1183     void *xpv;
1184     new_body_inline(xpv, sv_type);
1185     return xpv;
1186 }
1187
1188 #endif
1189
1190 static const struct body_details fake_rv =
1191     { 0, 0, 0, SVt_IV, FALSE, NONV, NOARENA, 0 };
1192
1193 /*
1194 =for apidoc sv_upgrade
1195
1196 Upgrade an SV to a more complex form.  Generally adds a new body type to the
1197 SV, then copies across as much information as possible from the old body.
1198 It croaks if the SV is already in a more complex form than requested.  You
1199 generally want to use the C<SvUPGRADE> macro wrapper, which checks the type
1200 before calling C<sv_upgrade>, and hence does not croak.  See also
1201 C<L</svtype>>.
1202
1203 =cut
1204 */
1205
1206 void
1207 Perl_sv_upgrade(pTHX_ SV *const sv, svtype new_type)
1208 {
1209     void*       old_body;
1210     void*       new_body;
1211     const svtype old_type = SvTYPE(sv);
1212     const struct body_details *new_type_details;
1213     const struct body_details *old_type_details
1214         = bodies_by_type + old_type;
1215     SV *referent = NULL;
1216
1217     PERL_ARGS_ASSERT_SV_UPGRADE;
1218
1219     if (old_type == new_type)
1220         return;
1221
1222     /* This clause was purposefully added ahead of the early return above to
1223        the shared string hackery for (sort {$a <=> $b} keys %hash), with the
1224        inference by Nick I-S that it would fix other troublesome cases. See
1225        changes 7162, 7163 (f130fd4589cf5fbb24149cd4db4137c8326f49c1 and parent)
1226
1227        Given that shared hash key scalars are no longer PVIV, but PV, there is
1228        no longer need to unshare so as to free up the IVX slot for its proper
1229        purpose. So it's safe to move the early return earlier.  */
1230
1231     if (new_type > SVt_PVMG && SvIsCOW(sv)) {
1232         sv_force_normal_flags(sv, 0);
1233     }
1234
1235     old_body = SvANY(sv);
1236
1237     /* Copying structures onto other structures that have been neatly zeroed
1238        has a subtle gotcha. Consider XPVMG
1239
1240        +------+------+------+------+------+-------+-------+
1241        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |
1242        +------+------+------+------+------+-------+-------+
1243        0      4      8     12     16     20      24      28
1244
1245        where NVs are aligned to 8 bytes, so that sizeof that structure is
1246        actually 32 bytes long, with 4 bytes of padding at the end:
1247
1248        +------+------+------+------+------+-------+-------+------+
1249        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH | ???  |
1250        +------+------+------+------+------+-------+-------+------+
1251        0      4      8     12     16     20      24      28     32
1252
1253        so what happens if you allocate memory for this structure:
1254
1255        +------+------+------+------+------+-------+-------+------+------+...
1256        |     NV      | CUR  | LEN  |  IV  | MAGIC | STASH |  GP  | NAME |
1257        +------+------+------+------+------+-------+-------+------+------+...
1258        0      4      8     12     16     20      24      28     32     36
1259
1260        zero it, then copy sizeof(XPVMG) bytes on top of it? Not quite what you
1261        expect, because you copy the area marked ??? onto GP. Now, ??? may have
1262        started out as zero once, but it's quite possible that it isn't. So now,
1263        rather than a nicely zeroed GP, you have it pointing somewhere random.
1264        Bugs ensue.
1265
1266        (In fact, GP ends up pointing at a previous GP structure, because the
1267        principle cause of the padding in XPVMG getting garbage is a copy of
1268        sizeof(XPVMG) bytes from a XPVGV structure in sv_unglob. Right now
1269        this happens to be moot because XPVGV has been re-ordered, with GP
1270        no longer after STASH)
1271
1272        So we are careful and work out the size of used parts of all the
1273        structures.  */
1274
1275     switch (old_type) {
1276     case SVt_NULL:
1277         break;
1278     case SVt_IV:
1279         if (SvROK(sv)) {
1280             referent = SvRV(sv);
1281             old_type_details = &fake_rv;
1282             if (new_type == SVt_NV)
1283                 new_type = SVt_PVNV;
1284         } else {
1285             if (new_type < SVt_PVIV) {
1286                 new_type = (new_type == SVt_NV)
1287                     ? SVt_PVNV : SVt_PVIV;
1288             }
1289         }
1290         break;
1291     case SVt_NV:
1292         if (new_type < SVt_PVNV) {
1293             new_type = SVt_PVNV;
1294         }
1295         break;
1296     case SVt_PV:
1297         assert(new_type > SVt_PV);
1298         STATIC_ASSERT_STMT(SVt_IV < SVt_PV);
1299         STATIC_ASSERT_STMT(SVt_NV < SVt_PV);
1300         break;
1301     case SVt_PVIV:
1302         break;
1303     case SVt_PVNV:
1304         break;
1305     case SVt_PVMG:
1306         /* Because the XPVMG of PL_mess_sv isn't allocated from the arena,
1307            there's no way that it can be safely upgraded, because perl.c
1308            expects to Safefree(SvANY(PL_mess_sv))  */
1309         assert(sv != PL_mess_sv);
1310         break;
1311     default:
1312         if (UNLIKELY(old_type_details->cant_upgrade))
1313             Perl_croak(aTHX_ "Can't upgrade %s (%" UVuf ") to %" UVuf,
1314                        sv_reftype(sv, 0), (UV) old_type, (UV) new_type);
1315     }
1316
1317     if (UNLIKELY(old_type > new_type))
1318         Perl_croak(aTHX_ "sv_upgrade from type %d down to type %d",
1319                 (int)old_type, (int)new_type);
1320
1321     new_type_details = bodies_by_type + new_type;
1322
1323     SvFLAGS(sv) &= ~SVTYPEMASK;
1324     SvFLAGS(sv) |= new_type;
1325
1326     /* This can't happen, as SVt_NULL is <= all values of new_type, so one of
1327        the return statements above will have triggered.  */
1328     assert (new_type != SVt_NULL);
1329     switch (new_type) {
1330     case SVt_IV:
1331         assert(old_type == SVt_NULL);
1332         SET_SVANY_FOR_BODYLESS_IV(sv);
1333         SvIV_set(sv, 0);
1334         return;
1335     case SVt_NV:
1336         assert(old_type == SVt_NULL);
1337 #if NVSIZE <= IVSIZE
1338         SET_SVANY_FOR_BODYLESS_NV(sv);
1339 #else
1340         SvANY(sv) = new_XNV();
1341 #endif
1342         SvNV_set(sv, 0);
1343         return;
1344     case SVt_PVHV:
1345     case SVt_PVAV:
1346         assert(new_type_details->body_size);
1347
1348 #ifndef PURIFY  
1349         assert(new_type_details->arena);
1350         assert(new_type_details->arena_size);
1351         /* This points to the start of the allocated area.  */
1352         new_body_inline(new_body, new_type);
1353         Zero(new_body, new_type_details->body_size, char);
1354         new_body = ((char *)new_body) - new_type_details->offset;
1355 #else
1356         /* We always allocated the full length item with PURIFY. To do this
1357            we fake things so that arena is false for all 16 types..  */
1358         new_body = new_NOARENAZ(new_type_details);
1359 #endif
1360         SvANY(sv) = new_body;
1361         if (new_type == SVt_PVAV) {
1362             AvMAX(sv)   = -1;
1363             AvFILLp(sv) = -1;
1364             AvREAL_only(sv);
1365             if (old_type_details->body_size) {
1366                 AvALLOC(sv) = 0;
1367             } else {
1368                 /* It will have been zeroed when the new body was allocated.
1369                    Lets not write to it, in case it confuses a write-back
1370                    cache.  */
1371             }
1372         } else {
1373             assert(!SvOK(sv));
1374             SvOK_off(sv);
1375 #ifndef NODEFAULT_SHAREKEYS
1376             HvSHAREKEYS_on(sv);         /* key-sharing on by default */
1377 #endif
1378             /* start with PERL_HASH_DEFAULT_HvMAX+1 buckets: */
1379             HvMAX(sv) = PERL_HASH_DEFAULT_HvMAX;
1380         }
1381
1382         /* SVt_NULL isn't the only thing upgraded to AV or HV.
1383            The target created by newSVrv also is, and it can have magic.
1384            However, it never has SvPVX set.
1385         */
1386         if (old_type == SVt_IV) {
1387             assert(!SvROK(sv));
1388         } else if (old_type >= SVt_PV) {
1389             assert(SvPVX_const(sv) == 0);
1390         }
1391
1392         if (old_type >= SVt_PVMG) {
1393             SvMAGIC_set(sv, ((XPVMG*)old_body)->xmg_u.xmg_magic);
1394             SvSTASH_set(sv, ((XPVMG*)old_body)->xmg_stash);
1395         } else {
1396             sv->sv_u.svu_array = NULL; /* or svu_hash  */
1397         }
1398         break;
1399
1400     case SVt_PVIV:
1401         /* XXX Is this still needed?  Was it ever needed?   Surely as there is
1402            no route from NV to PVIV, NOK can never be true  */
1403         assert(!SvNOKp(sv));
1404         assert(!SvNOK(sv));
1405         /* FALLTHROUGH */
1406     case SVt_PVIO:
1407     case SVt_PVFM:
1408     case SVt_PVGV:
1409     case SVt_PVCV:
1410     case SVt_PVLV:
1411     case SVt_INVLIST:
1412     case SVt_REGEXP:
1413     case SVt_PVMG:
1414     case SVt_PVNV:
1415     case SVt_PV:
1416
1417         assert(new_type_details->body_size);
1418         /* We always allocated the full length item with PURIFY. To do this
1419            we fake things so that arena is false for all 16 types..  */
1420         if(new_type_details->arena) {
1421             /* This points to the start of the allocated area.  */
1422             new_body_inline(new_body, new_type);
1423             Zero(new_body, new_type_details->body_size, char);
1424             new_body = ((char *)new_body) - new_type_details->offset;
1425         } else {
1426             new_body = new_NOARENAZ(new_type_details);
1427         }
1428         SvANY(sv) = new_body;
1429
1430         if (old_type_details->copy) {
1431             /* There is now the potential for an upgrade from something without
1432                an offset (PVNV or PVMG) to something with one (PVCV, PVFM)  */
1433             int offset = old_type_details->offset;
1434             int length = old_type_details->copy;
1435
1436             if (new_type_details->offset > old_type_details->offset) {
1437                 const int difference
1438                     = new_type_details->offset - old_type_details->offset;
1439                 offset += difference;
1440                 length -= difference;
1441             }
1442             assert (length >= 0);
1443                 
1444             Copy((char *)old_body + offset, (char *)new_body + offset, length,
1445                  char);
1446         }
1447
1448 #ifndef NV_ZERO_IS_ALLBITS_ZERO
1449         /* If NV 0.0 is stores as all bits 0 then Zero() already creates a
1450          * correct 0.0 for us.  Otherwise, if the old body didn't have an
1451          * NV slot, but the new one does, then we need to initialise the
1452          * freshly created NV slot with whatever the correct bit pattern is
1453          * for 0.0  */
1454         if (old_type_details->zero_nv && !new_type_details->zero_nv
1455             && !isGV_with_GP(sv))
1456             SvNV_set(sv, 0);
1457 #endif
1458
1459         if (UNLIKELY(new_type == SVt_PVIO)) {
1460             IO * const io = MUTABLE_IO(sv);
1461             GV *iogv = gv_fetchpvs("IO::File::", GV_ADD, SVt_PVHV);
1462
1463             SvOBJECT_on(io);
1464             /* Clear the stashcache because a new IO could overrule a package
1465                name */
1466             DEBUG_o(Perl_deb(aTHX_ "sv_upgrade clearing PL_stashcache\n"));
1467             hv_clear(PL_stashcache);
1468
1469             SvSTASH_set(io, MUTABLE_HV(SvREFCNT_inc(GvHV(iogv))));
1470             IoPAGE_LEN(sv) = 60;
1471         }
1472         if (old_type < SVt_PV) {
1473             /* referent will be NULL unless the old type was SVt_IV emulating
1474                SVt_RV */
1475             sv->sv_u.svu_rv = referent;
1476         }
1477         break;
1478     default:
1479         Perl_croak(aTHX_ "panic: sv_upgrade to unknown type %lu",
1480                    (unsigned long)new_type);
1481     }
1482
1483     /* if this is zero, this is a body-less SVt_NULL, SVt_IV/SVt_RV,
1484        and sometimes SVt_NV */
1485     if (old_type_details->body_size) {
1486 #ifdef PURIFY
1487         safefree(old_body);
1488 #else
1489         /* Note that there is an assumption that all bodies of types that
1490            can be upgraded came from arenas. Only the more complex non-
1491            upgradable types are allowed to be directly malloc()ed.  */
1492         assert(old_type_details->arena);
1493         del_body((void*)((char*)old_body + old_type_details->offset),
1494                  &PL_body_roots[old_type]);
1495 #endif
1496     }
1497 }
1498
1499 /*
1500 =for apidoc sv_backoff
1501
1502 Remove any string offset.  You should normally use the C<SvOOK_off> macro
1503 wrapper instead.
1504
1505 =cut
1506 */
1507
1508 /* prior to 5.000 stable, this function returned the new OOK-less SvFLAGS
1509    prior to 5.23.4 this function always returned 0
1510 */
1511
1512 void
1513 Perl_sv_backoff(SV *const sv)
1514 {
1515     STRLEN delta;
1516     const char * const s = SvPVX_const(sv);
1517
1518     PERL_ARGS_ASSERT_SV_BACKOFF;
1519
1520     assert(SvOOK(sv));
1521     assert(SvTYPE(sv) != SVt_PVHV);
1522     assert(SvTYPE(sv) != SVt_PVAV);
1523
1524     SvOOK_offset(sv, delta);
1525     
1526     SvLEN_set(sv, SvLEN(sv) + delta);
1527     SvPV_set(sv, SvPVX(sv) - delta);
1528     SvFLAGS(sv) &= ~SVf_OOK;
1529     Move(s, SvPVX(sv), SvCUR(sv)+1, char);
1530     return;
1531 }
1532
1533
1534 /* forward declaration */
1535 static void S_sv_uncow(pTHX_ SV * const sv, const U32 flags);
1536
1537
1538 /*
1539 =for apidoc sv_grow
1540
1541 Expands the character buffer in the SV.  If necessary, uses C<sv_unref> and
1542 upgrades the SV to C<SVt_PV>.  Returns a pointer to the character buffer.
1543 Use the C<SvGROW> wrapper instead.
1544
1545 =cut
1546 */
1547
1548
1549 char *
1550 Perl_sv_grow(pTHX_ SV *const sv, STRLEN newlen)
1551 {
1552     char *s;
1553
1554     PERL_ARGS_ASSERT_SV_GROW;
1555
1556     if (SvROK(sv))
1557         sv_unref(sv);
1558     if (SvTYPE(sv) < SVt_PV) {
1559         sv_upgrade(sv, SVt_PV);
1560         s = SvPVX_mutable(sv);
1561     }
1562     else if (SvOOK(sv)) {       /* pv is offset? */
1563         sv_backoff(sv);
1564         s = SvPVX_mutable(sv);
1565         if (newlen > SvLEN(sv))
1566             newlen += 10 * (newlen - SvCUR(sv)); /* avoid copy each time */
1567     }
1568     else
1569     {
1570         if (SvIsCOW(sv)) S_sv_uncow(aTHX_ sv, 0);
1571         s = SvPVX_mutable(sv);
1572     }
1573
1574 #ifdef PERL_COPY_ON_WRITE
1575     /* the new COW scheme uses SvPVX(sv)[SvLEN(sv)-1] (if spare)
1576      * to store the COW count. So in general, allocate one more byte than
1577      * asked for, to make it likely this byte is always spare: and thus
1578      * make more strings COW-able.
1579      *
1580      * Only increment if the allocation isn't MEM_SIZE_MAX,
1581      * otherwise it will wrap to 0.
1582      */
1583     if ( newlen != MEM_SIZE_MAX )
1584         newlen++;
1585 #endif
1586
1587 #if defined(PERL_USE_MALLOC_SIZE) && defined(Perl_safesysmalloc_size)
1588 #define PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1589 #endif
1590
1591     if (newlen > SvLEN(sv)) {           /* need more room? */
1592         STRLEN minlen = SvCUR(sv);
1593         minlen += (minlen >> PERL_STRLEN_EXPAND_SHIFT) + 10;
1594         if (newlen < minlen)
1595             newlen = minlen;
1596 #ifndef PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1597
1598         /* Don't round up on the first allocation, as odds are pretty good that
1599          * the initial request is accurate as to what is really needed */
1600         if (SvLEN(sv)) {
1601             STRLEN rounded = PERL_STRLEN_ROUNDUP(newlen);
1602             if (rounded > newlen)
1603                 newlen = rounded;
1604         }
1605 #endif
1606         if (SvLEN(sv) && s) {
1607             s = (char*)saferealloc(s, newlen);
1608         }
1609         else {
1610             s = (char*)safemalloc(newlen);
1611             if (SvPVX_const(sv) && SvCUR(sv)) {
1612                 Move(SvPVX_const(sv), s, SvCUR(sv), char);
1613             }
1614         }
1615         SvPV_set(sv, s);
1616 #ifdef PERL_UNWARANTED_CHUMMINESS_WITH_MALLOC
1617         /* Do this here, do it once, do it right, and then we will never get
1618            called back into sv_grow() unless there really is some growing
1619            needed.  */
1620         SvLEN_set(sv, Perl_safesysmalloc_size(s));
1621 #else
1622         SvLEN_set(sv, newlen);
1623 #endif
1624     }
1625     return s;
1626 }
1627
1628 /*
1629 =for apidoc sv_setiv
1630 =for apidoc_item sv_setiv_mg
1631
1632 These copy an integer into the given SV, upgrading first if necessary.
1633
1634 They differ only in that C<sv_setiv_mg> handles 'set' magic; C<sv_setiv> does
1635 not.
1636
1637 =cut
1638 */
1639
1640 void
1641 Perl_sv_setiv(pTHX_ SV *const sv, const IV i)
1642 {
1643     PERL_ARGS_ASSERT_SV_SETIV;
1644
1645     SV_CHECK_THINKFIRST_COW_DROP(sv);
1646     switch (SvTYPE(sv)) {
1647     case SVt_NULL:
1648     case SVt_NV:
1649         sv_upgrade(sv, SVt_IV);
1650         break;
1651     case SVt_PV:
1652         sv_upgrade(sv, SVt_PVIV);
1653         break;
1654
1655     case SVt_PVGV:
1656         if (!isGV_with_GP(sv))
1657             break;
1658         /* FALLTHROUGH */
1659     case SVt_PVAV:
1660     case SVt_PVHV:
1661     case SVt_PVCV:
1662     case SVt_PVFM:
1663     case SVt_PVIO:
1664         /* diag_listed_as: Can't coerce %s to %s in %s */
1665         Perl_croak(aTHX_ "Can't coerce %s to integer in %s", sv_reftype(sv,0),
1666                    OP_DESC(PL_op));
1667         NOT_REACHED; /* NOTREACHED */
1668         break;
1669     default: NOOP;
1670     }
1671     (void)SvIOK_only(sv);                       /* validate number */
1672     SvIV_set(sv, i);
1673     SvTAINT(sv);
1674 }
1675
1676 void
1677 Perl_sv_setiv_mg(pTHX_ SV *const sv, const IV i)
1678 {
1679     PERL_ARGS_ASSERT_SV_SETIV_MG;
1680
1681     sv_setiv(sv,i);
1682     SvSETMAGIC(sv);
1683 }
1684
1685 /*
1686 =for apidoc sv_setuv
1687 =for apidoc_item sv_setuv_mg
1688
1689 These copy an unsigned integer into the given SV, upgrading first if necessary.
1690
1691
1692 They differ only in that C<sv_setuv_mg> handles 'set' magic; C<sv_setuv> does
1693 not.
1694
1695 =cut
1696 */
1697
1698 void
1699 Perl_sv_setuv(pTHX_ SV *const sv, const UV u)
1700 {
1701     PERL_ARGS_ASSERT_SV_SETUV;
1702
1703     /* With the if statement to ensure that integers are stored as IVs whenever
1704        possible:
1705        u=1.49  s=0.52  cu=72.49  cs=10.64  scripts=270  tests=20865
1706
1707        without
1708        u=1.35  s=0.47  cu=73.45  cs=11.43  scripts=270  tests=20865
1709
1710        If you wish to remove the following if statement, so that this routine
1711        (and its callers) always return UVs, please benchmark to see what the
1712        effect is. Modern CPUs may be different. Or may not :-)
1713     */
1714     if (u <= (UV)IV_MAX) {
1715        sv_setiv(sv, (IV)u);
1716        return;
1717     }
1718     sv_setiv(sv, 0);
1719     SvIsUV_on(sv);
1720     SvUV_set(sv, u);
1721 }
1722
1723 void
1724 Perl_sv_setuv_mg(pTHX_ SV *const sv, const UV u)
1725 {
1726     PERL_ARGS_ASSERT_SV_SETUV_MG;
1727
1728     sv_setuv(sv,u);
1729     SvSETMAGIC(sv);
1730 }
1731
1732 /*
1733 =for apidoc sv_setnv
1734 =for apidoc_item sv_setnv_mg
1735
1736 These copy a double into the given SV, upgrading first if necessary.
1737
1738 They differ only in that C<sv_setnv_mg> handles 'set' magic; C<sv_setnv> does
1739 not.
1740
1741 =cut
1742 */
1743
1744 void
1745 Perl_sv_setnv(pTHX_ SV *const sv, const NV num)
1746 {
1747     PERL_ARGS_ASSERT_SV_SETNV;
1748
1749     SV_CHECK_THINKFIRST_COW_DROP(sv);
1750     switch (SvTYPE(sv)) {
1751     case SVt_NULL:
1752     case SVt_IV:
1753         sv_upgrade(sv, SVt_NV);
1754         break;
1755     case SVt_PV:
1756     case SVt_PVIV:
1757         sv_upgrade(sv, SVt_PVNV);
1758         break;
1759
1760     case SVt_PVGV:
1761         if (!isGV_with_GP(sv))
1762             break;
1763         /* FALLTHROUGH */
1764     case SVt_PVAV:
1765     case SVt_PVHV:
1766     case SVt_PVCV:
1767     case SVt_PVFM:
1768     case SVt_PVIO:
1769         /* diag_listed_as: Can't coerce %s to %s in %s */
1770         Perl_croak(aTHX_ "Can't coerce %s to number in %s", sv_reftype(sv,0),
1771                    OP_DESC(PL_op));
1772         NOT_REACHED; /* NOTREACHED */
1773         break;
1774     default: NOOP;
1775     }
1776     SvNV_set(sv, num);
1777     (void)SvNOK_only(sv);                       /* validate number */
1778     SvTAINT(sv);
1779 }
1780
1781 void
1782 Perl_sv_setnv_mg(pTHX_ SV *const sv, const NV num)
1783 {
1784     PERL_ARGS_ASSERT_SV_SETNV_MG;
1785
1786     sv_setnv(sv,num);
1787     SvSETMAGIC(sv);
1788 }
1789
1790 /* Return a cleaned-up, printable version of sv, for non-numeric, or
1791  * not incrementable warning display.
1792  * Originally part of S_not_a_number().
1793  * The return value may be != tmpbuf.
1794  */
1795
1796 STATIC const char *
1797 S_sv_display(pTHX_ SV *const sv, char *tmpbuf, STRLEN tmpbuf_size) {
1798     const char *pv;
1799
1800      PERL_ARGS_ASSERT_SV_DISPLAY;
1801
1802      if (DO_UTF8(sv)) {
1803           SV *dsv = newSVpvs_flags("", SVs_TEMP);
1804           pv = sv_uni_display(dsv, sv, 32, UNI_DISPLAY_ISPRINT);
1805      } else {
1806           char *d = tmpbuf;
1807           const char * const limit = tmpbuf + tmpbuf_size - 8;
1808           /* each *s can expand to 4 chars + "...\0",
1809              i.e. need room for 8 chars */
1810         
1811           const char *s = SvPVX_const(sv);
1812           const char * const end = s + SvCUR(sv);
1813           for ( ; s < end && d < limit; s++ ) {
1814                int ch = *s & 0xFF;
1815                if (! isASCII(ch) && !isPRINT_LC(ch)) {
1816                     *d++ = 'M';
1817                     *d++ = '-';
1818
1819                     /* Map to ASCII "equivalent" of Latin1 */
1820                     ch = LATIN1_TO_NATIVE(NATIVE_TO_LATIN1(ch) & 127);
1821                }
1822                if (ch == '\n') {
1823                     *d++ = '\\';
1824                     *d++ = 'n';
1825                }
1826                else if (ch == '\r') {
1827                     *d++ = '\\';
1828                     *d++ = 'r';
1829                }
1830                else if (ch == '\f') {
1831                     *d++ = '\\';
1832                     *d++ = 'f';
1833                }
1834                else if (ch == '\\') {
1835                     *d++ = '\\';
1836                     *d++ = '\\';
1837                }
1838                else if (ch == '\0') {
1839                     *d++ = '\\';
1840                     *d++ = '0';
1841                }
1842                else if (isPRINT_LC(ch))
1843                     *d++ = ch;
1844                else {
1845                     *d++ = '^';
1846                     *d++ = toCTRL(ch);
1847                }
1848           }
1849           if (s < end) {
1850                *d++ = '.';
1851                *d++ = '.';
1852                *d++ = '.';
1853           }
1854           *d = '\0';
1855           pv = tmpbuf;
1856     }
1857
1858     return pv;
1859 }
1860
1861 /* Print an "isn't numeric" warning, using a cleaned-up,
1862  * printable version of the offending string
1863  */
1864
1865 STATIC void
1866 S_not_a_number(pTHX_ SV *const sv)
1867 {
1868      char tmpbuf[64];
1869      const char *pv;
1870
1871      PERL_ARGS_ASSERT_NOT_A_NUMBER;
1872
1873      pv = sv_display(sv, tmpbuf, sizeof(tmpbuf));
1874
1875     if (PL_op)
1876         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1877                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1878                     "Argument \"%s\" isn't numeric in %s", pv,
1879                     OP_DESC(PL_op));
1880     else
1881         Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1882                     /* diag_listed_as: Argument "%s" isn't numeric%s */
1883                     "Argument \"%s\" isn't numeric", pv);
1884 }
1885
1886 STATIC void
1887 S_not_incrementable(pTHX_ SV *const sv) {
1888      char tmpbuf[64];
1889      const char *pv;
1890
1891      PERL_ARGS_ASSERT_NOT_INCREMENTABLE;
1892
1893      pv = sv_display(sv, tmpbuf, sizeof(tmpbuf));
1894
1895      Perl_warner(aTHX_ packWARN(WARN_NUMERIC),
1896                  "Argument \"%s\" treated as 0 in increment (++)", pv);
1897 }
1898
1899 /*
1900 =for apidoc looks_like_number
1901
1902 Test if the content of an SV looks like a number (or is a number).
1903 C<Inf> and C<Infinity> are treated as numbers (so will not issue a
1904 non-numeric warning), even if your C<atof()> doesn't grok them.  Get-magic is
1905 ignored.
1906
1907 =cut
1908 */
1909
1910 I32
1911 Perl_looks_like_number(pTHX_ SV *const sv)
1912 {
1913     const char *sbegin;
1914     STRLEN len;
1915     int numtype;
1916
1917     PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER;
1918
1919     if (SvPOK(sv) || SvPOKp(sv)) {
1920         sbegin = SvPV_nomg_const(sv, len);
1921     }
1922     else
1923         return SvFLAGS(sv) & (SVf_NOK|SVp_NOK|SVf_IOK|SVp_IOK);
1924     numtype = grok_number(sbegin, len, NULL);
1925     return ((numtype & IS_NUMBER_TRAILING)) ? 0 : numtype;
1926 }
1927
1928 STATIC bool
1929 S_glob_2number(pTHX_ GV * const gv)
1930 {
1931     PERL_ARGS_ASSERT_GLOB_2NUMBER;
1932
1933     /* We know that all GVs stringify to something that is not-a-number,
1934         so no need to test that.  */
1935     if (ckWARN(WARN_NUMERIC))
1936     {
1937         SV *const buffer = sv_newmortal();
1938         gv_efullname3(buffer, gv, "*");
1939         not_a_number(buffer);
1940     }
1941     /* We just want something true to return, so that S_sv_2iuv_common
1942         can tail call us and return true.  */
1943     return TRUE;
1944 }
1945
1946 /* Actually, ISO C leaves conversion of UV to IV undefined, but
1947    until proven guilty, assume that things are not that bad... */
1948
1949 /*
1950    NV_PRESERVES_UV:
1951
1952    As 64 bit platforms often have an NV that doesn't preserve all bits of
1953    an IV (an assumption perl has been based on to date) it becomes necessary
1954    to remove the assumption that the NV always carries enough precision to
1955    recreate the IV whenever needed, and that the NV is the canonical form.
1956    Instead, IV/UV and NV need to be given equal rights. So as to not lose
1957    precision as a side effect of conversion (which would lead to insanity
1958    and the dragon(s) in t/op/numconvert.t getting very angry) the intent is
1959    1) to distinguish between IV/UV/NV slots that have a valid conversion cached
1960       where precision was lost, and IV/UV/NV slots that have a valid conversion
1961       which has lost no precision
1962    2) to ensure that if a numeric conversion to one form is requested that
1963       would lose precision, the precise conversion (or differently
1964       imprecise conversion) is also performed and cached, to prevent
1965       requests for different numeric formats on the same SV causing
1966       lossy conversion chains. (lossless conversion chains are perfectly
1967       acceptable (still))
1968
1969
1970    flags are used:
1971    SvIOKp is true if the IV slot contains a valid value
1972    SvIOK  is true only if the IV value is accurate (UV if SvIOK_UV true)
1973    SvNOKp is true if the NV slot contains a valid value
1974    SvNOK  is true only if the NV value is accurate
1975
1976    so
1977    while converting from PV to NV, check to see if converting that NV to an
1978    IV(or UV) would lose accuracy over a direct conversion from PV to
1979    IV(or UV). If it would, cache both conversions, return NV, but mark
1980    SV as IOK NOKp (ie not NOK).
1981
1982    While converting from PV to IV, check to see if converting that IV to an
1983    NV would lose accuracy over a direct conversion from PV to NV. If it
1984    would, cache both conversions, flag similarly.
1985
1986    Before, the SV value "3.2" could become NV=3.2 IV=3 NOK, IOK quite
1987    correctly because if IV & NV were set NV *always* overruled.
1988    Now, "3.2" will become NV=3.2 IV=3 NOK, IOKp, because the flag's meaning
1989    changes - now IV and NV together means that the two are interchangeable:
1990    SvIVX == (IV) SvNVX && SvNVX == (NV) SvIVX;
1991
1992    The benefit of this is that operations such as pp_add know that if
1993    SvIOK is true for both left and right operands, then integer addition
1994    can be used instead of floating point (for cases where the result won't
1995    overflow). Before, floating point was always used, which could lead to
1996    loss of precision compared with integer addition.
1997
1998    * making IV and NV equal status should make maths accurate on 64 bit
1999      platforms
2000    * may speed up maths somewhat if pp_add and friends start to use
2001      integers when possible instead of fp. (Hopefully the overhead in
2002      looking for SvIOK and checking for overflow will not outweigh the
2003      fp to integer speedup)
2004    * will slow down integer operations (callers of SvIV) on "inaccurate"
2005      values, as the change from SvIOK to SvIOKp will cause a call into
2006      sv_2iv each time rather than a macro access direct to the IV slot
2007    * should speed up number->string conversion on integers as IV is
2008      favoured when IV and NV are equally accurate
2009
2010    ####################################################################
2011    You had better be using SvIOK_notUV if you want an IV for arithmetic:
2012    SvIOK is true if (IV or UV), so you might be getting (IV)SvUV.
2013    On the other hand, SvUOK is true iff UV.
2014    ####################################################################
2015
2016    Your mileage will vary depending your CPU's relative fp to integer
2017    performance ratio.
2018 */
2019
2020 #ifndef NV_PRESERVES_UV
2021 #  define IS_NUMBER_UNDERFLOW_IV 1
2022 #  define IS_NUMBER_UNDERFLOW_UV 2
2023 #  define IS_NUMBER_IV_AND_UV    2
2024 #  define IS_NUMBER_OVERFLOW_IV  4
2025 #  define IS_NUMBER_OVERFLOW_UV  5
2026
2027 /* sv_2iuv_non_preserve(): private routine for use by sv_2iv() and sv_2uv() */
2028
2029 /* For sv_2nv these three cases are "SvNOK and don't bother casting"  */
2030 STATIC int
2031 S_sv_2iuv_non_preserve(pTHX_ SV *const sv
2032 #  ifdef DEBUGGING
2033                        , I32 numtype
2034 #  endif
2035                        )
2036 {
2037     PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE;
2038     PERL_UNUSED_CONTEXT;
2039
2040     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));
2041     if (SvNVX(sv) < (NV)IV_MIN) {
2042         (void)SvIOKp_on(sv);
2043         (void)SvNOK_on(sv);
2044         SvIV_set(sv, IV_MIN);
2045         return IS_NUMBER_UNDERFLOW_IV;
2046     }
2047     if (SvNVX(sv) > (NV)UV_MAX) {
2048         (void)SvIOKp_on(sv);
2049         (void)SvNOK_on(sv);
2050         SvIsUV_on(sv);
2051         SvUV_set(sv, UV_MAX);
2052         return IS_NUMBER_OVERFLOW_UV;
2053     }
2054     (void)SvIOKp_on(sv);
2055     (void)SvNOK_on(sv);
2056     /* Can't use strtol etc to convert this string.  (See truth table in
2057        sv_2iv  */
2058     if (SvNVX(sv) <= (UV)IV_MAX) {
2059         SvIV_set(sv, I_V(SvNVX(sv)));
2060         if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2061             SvIOK_on(sv); /* Integer is precise. NOK, IOK */
2062         } else {
2063             /* Integer is imprecise. NOK, IOKp */
2064         }
2065         return SvNVX(sv) < 0 ? IS_NUMBER_UNDERFLOW_UV : IS_NUMBER_IV_AND_UV;
2066     }
2067     SvIsUV_on(sv);
2068     SvUV_set(sv, U_V(SvNVX(sv)));
2069     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2070         if (SvUVX(sv) == UV_MAX) {
2071             /* As we know that NVs don't preserve UVs, UV_MAX cannot
2072                possibly be preserved by NV. Hence, it must be overflow.
2073                NOK, IOKp */
2074             return IS_NUMBER_OVERFLOW_UV;
2075         }
2076         SvIOK_on(sv); /* Integer is precise. NOK, UOK */
2077     } else {
2078         /* Integer is imprecise. NOK, IOKp */
2079     }
2080     return IS_NUMBER_OVERFLOW_IV;
2081 }
2082 #endif /* !NV_PRESERVES_UV*/
2083
2084 /* If numtype is infnan, set the NV of the sv accordingly.
2085  * If numtype is anything else, try setting the NV using Atof(PV). */
2086 static void
2087 S_sv_setnv(pTHX_ SV* sv, int numtype)
2088 {
2089     bool pok = cBOOL(SvPOK(sv));
2090     bool nok = FALSE;
2091 #ifdef NV_INF
2092     if ((numtype & IS_NUMBER_INFINITY)) {
2093         SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -NV_INF : NV_INF);
2094         nok = TRUE;
2095     } else
2096 #endif
2097 #ifdef NV_NAN
2098     if ((numtype & IS_NUMBER_NAN)) {
2099         SvNV_set(sv, NV_NAN);
2100         nok = TRUE;
2101     } else
2102 #endif
2103     if (pok) {
2104         SvNV_set(sv, Atof(SvPVX_const(sv)));
2105         /* Purposefully no true nok here, since we don't want to blow
2106          * away the possible IOK/UV of an existing sv. */
2107     }
2108     if (nok) {
2109         SvNOK_only(sv); /* No IV or UV please, this is pure infnan. */
2110         if (pok)
2111             SvPOK_on(sv); /* PV is okay, though. */
2112     }
2113 }
2114
2115 STATIC bool
2116 S_sv_2iuv_common(pTHX_ SV *const sv)
2117 {
2118     PERL_ARGS_ASSERT_SV_2IUV_COMMON;
2119
2120     if (SvNOKp(sv)) {
2121         /* erm. not sure. *should* never get NOKp (without NOK) from sv_2nv
2122          * without also getting a cached IV/UV from it at the same time
2123          * (ie PV->NV conversion should detect loss of accuracy and cache
2124          * IV or UV at same time to avoid this. */
2125         /* IV-over-UV optimisation - choose to cache IV if possible */
2126
2127         if (SvTYPE(sv) == SVt_NV)
2128             sv_upgrade(sv, SVt_PVNV);
2129
2130         (void)SvIOKp_on(sv);    /* Must do this first, to clear any SvOOK */
2131         /* < not <= as for NV doesn't preserve UV, ((NV)IV_MAX+1) will almost
2132            certainly cast into the IV range at IV_MAX, whereas the correct
2133            answer is the UV IV_MAX +1. Hence < ensures that dodgy boundary
2134            cases go to UV */
2135 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2136         if (Perl_isnan(SvNVX(sv))) {
2137             SvUV_set(sv, 0);
2138             SvIsUV_on(sv);
2139             return FALSE;
2140         }
2141 #endif
2142         if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2143             SvIV_set(sv, I_V(SvNVX(sv)));
2144             if (SvNVX(sv) == (NV) SvIVX(sv)
2145 #ifndef NV_PRESERVES_UV
2146                 && SvIVX(sv) != IV_MIN /* avoid negating IV_MIN below */
2147                 && (((UV)1 << NV_PRESERVES_UV_BITS) >
2148                     (UV)(SvIVX(sv) > 0 ? SvIVX(sv) : -SvIVX(sv)))
2149                 /* Don't flag it as "accurately an integer" if the number
2150                    came from a (by definition imprecise) NV operation, and
2151                    we're outside the range of NV integer precision */
2152 #endif
2153                 ) {
2154                 if (SvNOK(sv))
2155                     SvIOK_on(sv);  /* Can this go wrong with rounding? NWC */
2156                 else {
2157                     /* scalar has trailing garbage, eg "42a" */
2158                 }
2159                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2160                                       "0x%" UVxf " iv(%" NVgf " => %" IVdf ") (precise)\n",
2161                                       PTR2UV(sv),
2162                                       SvNVX(sv),
2163                                       SvIVX(sv)));
2164
2165             } else {
2166                 /* IV not precise.  No need to convert from PV, as NV
2167                    conversion would already have cached IV if it detected
2168                    that PV->IV would be better than PV->NV->IV
2169                    flags already correct - don't set public IOK.  */
2170                 DEBUG_c(PerlIO_printf(Perl_debug_log,
2171                                       "0x%" UVxf " iv(%" NVgf " => %" IVdf ") (imprecise)\n",
2172                                       PTR2UV(sv),
2173                                       SvNVX(sv),
2174                                       SvIVX(sv)));
2175             }
2176             /* Can the above go wrong if SvIVX == IV_MIN and SvNVX < IV_MIN,
2177                but the cast (NV)IV_MIN rounds to a the value less (more
2178                negative) than IV_MIN which happens to be equal to SvNVX ??
2179                Analogous to 0xFFFFFFFFFFFFFFFF rounding up to NV (2**64) and
2180                NV rounding back to 0xFFFFFFFFFFFFFFFF, so UVX == UV(NVX) and
2181                (NV)UVX == NVX are both true, but the values differ. :-(
2182                Hopefully for 2s complement IV_MIN is something like
2183                0x8000000000000000 which will be exact. NWC */
2184         }
2185         else {
2186             SvUV_set(sv, U_V(SvNVX(sv)));
2187             if (
2188                 (SvNVX(sv) == (NV) SvUVX(sv))
2189 #ifndef  NV_PRESERVES_UV
2190                 /* Make sure it's not 0xFFFFFFFFFFFFFFFF */
2191                 /*&& (SvUVX(sv) != UV_MAX) irrelevant with code below */
2192                 && (((UV)1 << NV_PRESERVES_UV_BITS) > SvUVX(sv))
2193                 /* Don't flag it as "accurately an integer" if the number
2194                    came from a (by definition imprecise) NV operation, and
2195                    we're outside the range of NV integer precision */
2196 #endif
2197                 && SvNOK(sv)
2198                 )
2199                 SvIOK_on(sv);
2200             SvIsUV_on(sv);
2201             DEBUG_c(PerlIO_printf(Perl_debug_log,
2202                                   "0x%" UVxf " 2iv(%" UVuf " => %" IVdf ") (as unsigned)\n",
2203                                   PTR2UV(sv),
2204                                   SvUVX(sv),
2205                                   SvUVX(sv)));
2206         }
2207     }
2208     else if (SvPOKp(sv)) {
2209         UV value;
2210         int numtype;
2211         const char *s = SvPVX_const(sv);
2212         const STRLEN cur = SvCUR(sv);
2213
2214         /* short-cut for a single digit string like "1" */
2215
2216         if (cur == 1) {
2217             char c = *s;
2218             if (isDIGIT(c)) {
2219                 if (SvTYPE(sv) < SVt_PVIV)
2220                     sv_upgrade(sv, SVt_PVIV);
2221                 (void)SvIOK_on(sv);
2222                 SvIV_set(sv, (IV)(c - '0'));
2223                 return FALSE;
2224             }
2225         }
2226
2227         numtype = grok_number(s, cur, &value);
2228         /* We want to avoid a possible problem when we cache an IV/ a UV which
2229            may be later translated to an NV, and the resulting NV is not
2230            the same as the direct translation of the initial string
2231            (eg 123.456 can shortcut to the IV 123 with atol(), but we must
2232            be careful to ensure that the value with the .456 is around if the
2233            NV value is requested in the future).
2234         
2235            This means that if we cache such an IV/a UV, we need to cache the
2236            NV as well.  Moreover, we trade speed for space, and do not
2237            cache the NV if we are sure it's not needed.
2238          */
2239
2240         /* SVt_PVNV is one higher than SVt_PVIV, hence this order  */
2241         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2242              == IS_NUMBER_IN_UV) {
2243             /* It's definitely an integer, only upgrade to PVIV */
2244             if (SvTYPE(sv) < SVt_PVIV)
2245                 sv_upgrade(sv, SVt_PVIV);
2246             (void)SvIOK_on(sv);
2247         } else if (SvTYPE(sv) < SVt_PVNV)
2248             sv_upgrade(sv, SVt_PVNV);
2249
2250         if ((numtype & (IS_NUMBER_INFINITY | IS_NUMBER_NAN))) {
2251             if (ckWARN(WARN_NUMERIC) && ((numtype & IS_NUMBER_TRAILING)))
2252                 not_a_number(sv);
2253             S_sv_setnv(aTHX_ sv, numtype);
2254             return FALSE;
2255         }
2256
2257         /* If NVs preserve UVs then we only use the UV value if we know that
2258            we aren't going to call atof() below. If NVs don't preserve UVs
2259            then the value returned may have more precision than atof() will
2260            return, even though value isn't perfectly accurate.  */
2261         if ((numtype & (IS_NUMBER_IN_UV
2262 #ifdef NV_PRESERVES_UV
2263                         | IS_NUMBER_NOT_INT
2264 #endif
2265             )) == IS_NUMBER_IN_UV) {
2266             /* This won't turn off the public IOK flag if it was set above  */
2267             (void)SvIOKp_on(sv);
2268
2269             if (!(numtype & IS_NUMBER_NEG)) {
2270                 /* positive */;
2271                 if (value <= (UV)IV_MAX) {
2272                     SvIV_set(sv, (IV)value);
2273                 } else {
2274                     /* it didn't overflow, and it was positive. */
2275                     SvUV_set(sv, value);
2276                     SvIsUV_on(sv);
2277                 }
2278             } else {
2279                 /* 2s complement assumption  */
2280                 if (value <= (UV)IV_MIN) {
2281                     SvIV_set(sv, value == (UV)IV_MIN
2282                                     ? IV_MIN : -(IV)value);
2283                 } else {
2284                     /* Too negative for an IV.  This is a double upgrade, but
2285                        I'm assuming it will be rare.  */
2286                     if (SvTYPE(sv) < SVt_PVNV)
2287                         sv_upgrade(sv, SVt_PVNV);
2288                     SvNOK_on(sv);
2289                     SvIOK_off(sv);
2290                     SvIOKp_on(sv);
2291                     SvNV_set(sv, -(NV)value);
2292                     SvIV_set(sv, IV_MIN);
2293                 }
2294             }
2295         }
2296         /* For !NV_PRESERVES_UV and IS_NUMBER_IN_UV and IS_NUMBER_NOT_INT we
2297            will be in the previous block to set the IV slot, and the next
2298            block to set the NV slot.  So no else here.  */
2299         
2300         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2301             != IS_NUMBER_IN_UV) {
2302             /* It wasn't an (integer that doesn't overflow the UV). */
2303             S_sv_setnv(aTHX_ sv, numtype);
2304
2305             if (! numtype && ckWARN(WARN_NUMERIC))
2306                 not_a_number(sv);
2307
2308             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2iv(%" NVgf ")\n",
2309                                   PTR2UV(sv), SvNVX(sv)));
2310
2311 #ifdef NV_PRESERVES_UV
2312             (void)SvIOKp_on(sv);
2313             (void)SvNOK_on(sv);
2314 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
2315             if (Perl_isnan(SvNVX(sv))) {
2316                 SvUV_set(sv, 0);
2317                 SvIsUV_on(sv);
2318                 return FALSE;
2319             }
2320 #endif
2321             if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2322                 SvIV_set(sv, I_V(SvNVX(sv)));
2323                 if ((NV)(SvIVX(sv)) == SvNVX(sv)) {
2324                     SvIOK_on(sv);
2325                 } else {
2326                     NOOP;  /* Integer is imprecise. NOK, IOKp */
2327                 }
2328                 /* UV will not work better than IV */
2329             } else {
2330                 if (SvNVX(sv) > (NV)UV_MAX) {
2331                     SvIsUV_on(sv);
2332                     /* Integer is inaccurate. NOK, IOKp, is UV */
2333                     SvUV_set(sv, UV_MAX);
2334                 } else {
2335                     SvUV_set(sv, U_V(SvNVX(sv)));
2336                     /* 0xFFFFFFFFFFFFFFFF not an issue in here, NVs
2337                        NV preservse UV so can do correct comparison.  */
2338                     if ((NV)(SvUVX(sv)) == SvNVX(sv)) {
2339                         SvIOK_on(sv);
2340                     } else {
2341                         NOOP;   /* Integer is imprecise. NOK, IOKp, is UV */
2342                     }
2343                 }
2344                 SvIsUV_on(sv);
2345             }
2346 #else /* NV_PRESERVES_UV */
2347             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2348                 == (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT)) {
2349                 /* The IV/UV slot will have been set from value returned by
2350                    grok_number above.  The NV slot has just been set using
2351                    Atof.  */
2352                 SvNOK_on(sv);
2353                 assert (SvIOKp(sv));
2354             } else {
2355                 if (((UV)1 << NV_PRESERVES_UV_BITS) >
2356                     U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2357                     /* Small enough to preserve all bits. */
2358                     (void)SvIOKp_on(sv);
2359                     SvNOK_on(sv);
2360                     SvIV_set(sv, I_V(SvNVX(sv)));
2361                     if ((NV)(SvIVX(sv)) == SvNVX(sv))
2362                         SvIOK_on(sv);
2363                     /* Assumption: first non-preserved integer is < IV_MAX,
2364                        this NV is in the preserved range, therefore: */
2365                     if (!(U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))
2366                           < (UV)IV_MAX)) {
2367                         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);
2368                     }
2369                 } else {
2370                     /* IN_UV NOT_INT
2371                          0      0       already failed to read UV.
2372                          0      1       already failed to read UV.
2373                          1      0       you won't get here in this case. IV/UV
2374                                         slot set, public IOK, Atof() unneeded.
2375                          1      1       already read UV.
2376                        so there's no point in sv_2iuv_non_preserve() attempting
2377                        to use atol, strtol, strtoul etc.  */
2378 #  ifdef DEBUGGING
2379                     sv_2iuv_non_preserve (sv, numtype);
2380 #  else
2381                     sv_2iuv_non_preserve (sv);
2382 #  endif
2383                 }
2384             }
2385 #endif /* NV_PRESERVES_UV */
2386         /* It might be more code efficient to go through the entire logic above
2387            and conditionally set with SvIOKp_on() rather than SvIOK(), but it
2388            gets complex and potentially buggy, so more programmer efficient
2389            to do it this way, by turning off the public flags:  */
2390         if (!numtype)
2391             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2392         }
2393     }
2394     else {
2395         if (isGV_with_GP(sv))
2396             return glob_2number(MUTABLE_GV(sv));
2397
2398         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2399                 report_uninit(sv);
2400         if (SvTYPE(sv) < SVt_IV)
2401             /* Typically the caller expects that sv_any is not NULL now.  */
2402             sv_upgrade(sv, SVt_IV);
2403         /* Return 0 from the caller.  */
2404         return TRUE;
2405     }
2406     return FALSE;
2407 }
2408
2409 /*
2410 =for apidoc sv_2iv_flags
2411
2412 Return the integer value of an SV, doing any necessary string
2413 conversion.  If C<flags> has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.
2414 Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
2415
2416 =cut
2417 */
2418
2419 IV
2420 Perl_sv_2iv_flags(pTHX_ SV *const sv, const I32 flags)
2421 {
2422     PERL_ARGS_ASSERT_SV_2IV_FLAGS;
2423
2424     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2425          && SvTYPE(sv) != SVt_PVFM);
2426
2427     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2428         mg_get(sv);
2429
2430     if (SvROK(sv)) {
2431         if (SvAMAGIC(sv)) {
2432             SV * tmpstr;
2433             if (flags & SV_SKIP_OVERLOAD)
2434                 return 0;
2435             tmpstr = AMG_CALLunary(sv, numer_amg);
2436             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2437                 return SvIV(tmpstr);
2438             }
2439         }
2440         return PTR2IV(SvRV(sv));
2441     }
2442
2443     if (SvVALID(sv) || isREGEXP(sv)) {
2444         /* FBMs use the space for SvIVX and SvNVX for other purposes, so
2445            must not let them cache IVs.
2446            In practice they are extremely unlikely to actually get anywhere
2447            accessible by user Perl code - the only way that I'm aware of is when
2448            a constant subroutine which is used as the second argument to index.
2449
2450            Regexps have no SvIVX and SvNVX fields.
2451         */
2452         assert(SvPOKp(sv));
2453         {
2454             UV value;
2455             const char * const ptr =
2456                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2457             const int numtype
2458                 = grok_number(ptr, SvCUR(sv), &value);
2459
2460             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2461                 == IS_NUMBER_IN_UV) {
2462                 /* It's definitely an integer */
2463                 if (numtype & IS_NUMBER_NEG) {
2464                     if (value < (UV)IV_MIN)
2465                         return -(IV)value;
2466                 } else {
2467                     if (value < (UV)IV_MAX)
2468                         return (IV)value;
2469                 }
2470             }
2471
2472             /* Quite wrong but no good choices. */
2473             if ((numtype & IS_NUMBER_INFINITY)) {
2474                 return (numtype & IS_NUMBER_NEG) ? IV_MIN : IV_MAX;
2475             } else if ((numtype & IS_NUMBER_NAN)) {
2476                 return 0; /* So wrong. */
2477             }
2478
2479             if (!numtype) {
2480                 if (ckWARN(WARN_NUMERIC))
2481                     not_a_number(sv);
2482             }
2483             return I_V(Atof(ptr));
2484         }
2485     }
2486
2487     if (SvTHINKFIRST(sv)) {
2488         if (SvREADONLY(sv) && !SvOK(sv)) {
2489             if (ckWARN(WARN_UNINITIALIZED))
2490                 report_uninit(sv);
2491             return 0;
2492         }
2493     }
2494
2495     if (!SvIOKp(sv)) {
2496         if (S_sv_2iuv_common(aTHX_ sv))
2497             return 0;
2498     }
2499
2500     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2iv(%" IVdf ")\n",
2501         PTR2UV(sv),SvIVX(sv)));
2502     return SvIsUV(sv) ? (IV)SvUVX(sv) : SvIVX(sv);
2503 }
2504
2505 /*
2506 =for apidoc sv_2uv_flags
2507
2508 Return the unsigned integer value of an SV, doing any necessary string
2509 conversion.  If C<flags> has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.
2510 Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
2511
2512 =for apidoc Amnh||SV_GMAGIC
2513
2514 =cut
2515 */
2516
2517 UV
2518 Perl_sv_2uv_flags(pTHX_ SV *const sv, const I32 flags)
2519 {
2520     PERL_ARGS_ASSERT_SV_2UV_FLAGS;
2521
2522     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2523         mg_get(sv);
2524
2525     if (SvROK(sv)) {
2526         if (SvAMAGIC(sv)) {
2527             SV *tmpstr;
2528             if (flags & SV_SKIP_OVERLOAD)
2529                 return 0;
2530             tmpstr = AMG_CALLunary(sv, numer_amg);
2531             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2532                 return SvUV(tmpstr);
2533             }
2534         }
2535         return PTR2UV(SvRV(sv));
2536     }
2537
2538     if (SvVALID(sv) || isREGEXP(sv)) {
2539         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2540            the same flag bit as SVf_IVisUV, so must not let them cache IVs.  
2541            Regexps have no SvIVX and SvNVX fields. */
2542         assert(SvPOKp(sv));
2543         {
2544             UV value;
2545             const char * const ptr =
2546                 isREGEXP(sv) ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv);
2547             const int numtype
2548                 = grok_number(ptr, SvCUR(sv), &value);
2549
2550             if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2551                 == IS_NUMBER_IN_UV) {
2552                 /* It's definitely an integer */
2553                 if (!(numtype & IS_NUMBER_NEG))
2554                     return value;
2555             }
2556
2557             /* Quite wrong but no good choices. */
2558             if ((numtype & IS_NUMBER_INFINITY)) {
2559                 return UV_MAX; /* So wrong. */
2560             } else if ((numtype & IS_NUMBER_NAN)) {
2561                 return 0; /* So wrong. */
2562             }
2563
2564             if (!numtype) {
2565                 if (ckWARN(WARN_NUMERIC))
2566                     not_a_number(sv);
2567             }
2568             return U_V(Atof(ptr));
2569         }
2570     }
2571
2572     if (SvTHINKFIRST(sv)) {
2573         if (SvREADONLY(sv) && !SvOK(sv)) {
2574             if (ckWARN(WARN_UNINITIALIZED))
2575                 report_uninit(sv);
2576             return 0;
2577         }
2578     }
2579
2580     if (!SvIOKp(sv)) {
2581         if (S_sv_2iuv_common(aTHX_ sv))
2582             return 0;
2583     }
2584
2585     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2uv(%" UVuf ")\n",
2586                           PTR2UV(sv),SvUVX(sv)));
2587     return SvIsUV(sv) ? SvUVX(sv) : (UV)SvIVX(sv);
2588 }
2589
2590 /*
2591 =for apidoc sv_2nv_flags
2592
2593 Return the num value of an SV, doing any necessary string or integer
2594 conversion.  If C<flags> has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.
2595 Normally used via the C<SvNV(sv)> and C<SvNVx(sv)> macros.
2596
2597 =cut
2598 */
2599
2600 NV
2601 Perl_sv_2nv_flags(pTHX_ SV *const sv, const I32 flags)
2602 {
2603     PERL_ARGS_ASSERT_SV_2NV_FLAGS;
2604
2605     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2606          && SvTYPE(sv) != SVt_PVFM);
2607     if (SvGMAGICAL(sv) || SvVALID(sv) || isREGEXP(sv)) {
2608         /* FBMs use the space for SvIVX and SvNVX for other purposes, and use
2609            the same flag bit as SVf_IVisUV, so must not let them cache NVs.
2610            Regexps have no SvIVX and SvNVX fields.  */
2611         const char *ptr;
2612         if (flags & SV_GMAGIC)
2613             mg_get(sv);
2614         if (SvNOKp(sv))
2615             return SvNVX(sv);
2616         if (SvPOKp(sv) && !SvIOKp(sv)) {
2617             ptr = SvPVX_const(sv);
2618             if (!SvIOKp(sv) && ckWARN(WARN_NUMERIC) &&
2619                 !grok_number(ptr, SvCUR(sv), NULL))
2620                 not_a_number(sv);
2621             return Atof(ptr);
2622         }
2623         if (SvIOKp(sv)) {
2624             if (SvIsUV(sv))
2625                 return (NV)SvUVX(sv);
2626             else
2627                 return (NV)SvIVX(sv);
2628         }
2629         if (SvROK(sv)) {
2630             goto return_rok;
2631         }
2632         assert(SvTYPE(sv) >= SVt_PVMG);
2633         /* This falls through to the report_uninit near the end of the
2634            function. */
2635     } else if (SvTHINKFIRST(sv)) {
2636         if (SvROK(sv)) {
2637         return_rok:
2638             if (SvAMAGIC(sv)) {
2639                 SV *tmpstr;
2640                 if (flags & SV_SKIP_OVERLOAD)
2641                     return 0;
2642                 tmpstr = AMG_CALLunary(sv, numer_amg);
2643                 if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2644                     return SvNV(tmpstr);
2645                 }
2646             }
2647             return PTR2NV(SvRV(sv));
2648         }
2649         if (SvREADONLY(sv) && !SvOK(sv)) {
2650             if (ckWARN(WARN_UNINITIALIZED))
2651                 report_uninit(sv);
2652             return 0.0;
2653         }
2654     }
2655     if (SvTYPE(sv) < SVt_NV) {
2656         /* The logic to use SVt_PVNV if necessary is in sv_upgrade.  */
2657         sv_upgrade(sv, SVt_NV);
2658         CLANG_DIAG_IGNORE_STMT(-Wthread-safety);
2659         DEBUG_c({
2660             DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
2661             STORE_LC_NUMERIC_SET_STANDARD();
2662             PerlIO_printf(Perl_debug_log,
2663                           "0x%" UVxf " num(%" NVgf ")\n",
2664                           PTR2UV(sv), SvNVX(sv));
2665             RESTORE_LC_NUMERIC();
2666         });
2667         CLANG_DIAG_RESTORE_STMT;
2668
2669     }
2670     else if (SvTYPE(sv) < SVt_PVNV)
2671         sv_upgrade(sv, SVt_PVNV);
2672     if (SvNOKp(sv)) {
2673         return SvNVX(sv);
2674     }
2675     if (SvIOKp(sv)) {
2676         SvNV_set(sv, SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv));
2677 #ifdef NV_PRESERVES_UV
2678         if (SvIOK(sv))
2679             SvNOK_on(sv);
2680         else
2681             SvNOKp_on(sv);
2682 #else
2683         /* Only set the public NV OK flag if this NV preserves the IV  */
2684         /* Check it's not 0xFFFFFFFFFFFFFFFF */
2685         if (SvIOK(sv) &&
2686             SvIsUV(sv) ? ((SvUVX(sv) != UV_MAX)&&(SvUVX(sv) == U_V(SvNVX(sv))))
2687                        : (SvIVX(sv) == I_V(SvNVX(sv))))
2688             SvNOK_on(sv);
2689         else
2690             SvNOKp_on(sv);
2691 #endif
2692     }
2693     else if (SvPOKp(sv)) {
2694         UV value;
2695         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), &value);
2696         if (!SvIOKp(sv) && !numtype && ckWARN(WARN_NUMERIC))
2697             not_a_number(sv);
2698 #ifdef NV_PRESERVES_UV
2699         if ((numtype & (IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT))
2700             == IS_NUMBER_IN_UV) {
2701             /* It's definitely an integer */
2702             SvNV_set(sv, (numtype & IS_NUMBER_NEG) ? -(NV)value : (NV)value);
2703         } else {
2704             S_sv_setnv(aTHX_ sv, numtype);
2705         }
2706         if (numtype)
2707             SvNOK_on(sv);
2708         else
2709             SvNOKp_on(sv);
2710 #else
2711         SvNV_set(sv, Atof(SvPVX_const(sv)));
2712         /* Only set the public NV OK flag if this NV preserves the value in
2713            the PV at least as well as an IV/UV would.
2714            Not sure how to do this 100% reliably. */
2715         /* if that shift count is out of range then Configure's test is
2716            wonky. We shouldn't be in here with NV_PRESERVES_UV_BITS ==
2717            UV_BITS */
2718         if (((UV)1 << NV_PRESERVES_UV_BITS) >
2719             U_V(SvNVX(sv) > 0 ? SvNVX(sv) : -SvNVX(sv))) {
2720             SvNOK_on(sv); /* Definitely small enough to preserve all bits */
2721         } else if (!(numtype & IS_NUMBER_IN_UV)) {
2722             /* Can't use strtol etc to convert this string, so don't try.
2723                sv_2iv and sv_2uv will use the NV to convert, not the PV.  */
2724             SvNOK_on(sv);
2725         } else {
2726             /* value has been set.  It may not be precise.  */
2727             if ((numtype & IS_NUMBER_NEG) && (value >= (UV)IV_MIN)) {
2728                 /* 2s complement assumption for (UV)IV_MIN  */
2729                 SvNOK_on(sv); /* Integer is too negative.  */
2730             } else {
2731                 SvNOKp_on(sv);
2732                 SvIOKp_on(sv);
2733
2734                 if (numtype & IS_NUMBER_NEG) {
2735                     /* -IV_MIN is undefined, but we should never reach
2736                      * this point with both IS_NUMBER_NEG and value ==
2737                      * (UV)IV_MIN */
2738                     assert(value != (UV)IV_MIN);
2739                     SvIV_set(sv, -(IV)value);
2740                 } else if (value <= (UV)IV_MAX) {
2741                     SvIV_set(sv, (IV)value);
2742                 } else {
2743                     SvUV_set(sv, value);
2744                     SvIsUV_on(sv);
2745                 }
2746
2747                 if (numtype & IS_NUMBER_NOT_INT) {
2748                     /* I believe that even if the original PV had decimals,
2749                        they are lost beyond the limit of the FP precision.
2750                        However, neither is canonical, so both only get p
2751                        flags.  NWC, 2000/11/25 */
2752                     /* Both already have p flags, so do nothing */
2753                 } else {
2754                     const NV nv = SvNVX(sv);
2755                     /* XXX should this spot have NAN_COMPARE_BROKEN, too? */
2756                     if (SvNVX(sv) < (NV)IV_MAX + 0.5) {
2757                         if (SvIVX(sv) == I_V(nv)) {
2758                             SvNOK_on(sv);
2759                         } else {
2760                             /* It had no "." so it must be integer.  */
2761                         }
2762                         SvIOK_on(sv);
2763                     } else {
2764                         /* between IV_MAX and NV(UV_MAX).
2765                            Could be slightly > UV_MAX */
2766
2767                         if (numtype & IS_NUMBER_NOT_INT) {
2768                             /* UV and NV both imprecise.  */
2769                         } else {
2770                             const UV nv_as_uv = U_V(nv);
2771
2772                             if (value == nv_as_uv && SvUVX(sv) != UV_MAX) {
2773                                 SvNOK_on(sv);
2774                             }
2775                             SvIOK_on(sv);
2776                         }
2777                     }
2778                 }
2779             }
2780         }
2781         /* It might be more code efficient to go through the entire logic above
2782            and conditionally set with SvNOKp_on() rather than SvNOK(), but it
2783            gets complex and potentially buggy, so more programmer efficient
2784            to do it this way, by turning off the public flags:  */
2785         if (!numtype)
2786             SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
2787 #endif /* NV_PRESERVES_UV */
2788     }
2789     else {
2790         if (isGV_with_GP(sv)) {
2791             glob_2number(MUTABLE_GV(sv));
2792             return 0.0;
2793         }
2794
2795         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
2796             report_uninit(sv);
2797         assert (SvTYPE(sv) >= SVt_NV);
2798         /* Typically the caller expects that sv_any is not NULL now.  */
2799         /* XXX Ilya implies that this is a bug in callers that assume this
2800            and ideally should be fixed.  */
2801         return 0.0;
2802     }
2803     CLANG_DIAG_IGNORE_STMT(-Wthread-safety);
2804     DEBUG_c({
2805         DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
2806         STORE_LC_NUMERIC_SET_STANDARD();
2807         PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2nv(%" NVgf ")\n",
2808                       PTR2UV(sv), SvNVX(sv));
2809         RESTORE_LC_NUMERIC();
2810     });
2811     CLANG_DIAG_RESTORE_STMT;
2812     return SvNVX(sv);
2813 }
2814
2815 /*
2816 =for apidoc sv_2num
2817
2818 Return an SV with the numeric value of the source SV, doing any necessary
2819 reference or overload conversion.  The caller is expected to have handled
2820 get-magic already.
2821
2822 =cut
2823 */
2824
2825 SV *
2826 Perl_sv_2num(pTHX_ SV *const sv)
2827 {
2828     PERL_ARGS_ASSERT_SV_2NUM;
2829
2830     if (!SvROK(sv))
2831         return sv;
2832     if (SvAMAGIC(sv)) {
2833         SV * const tmpsv = AMG_CALLunary(sv, numer_amg);
2834         TAINT_IF(tmpsv && SvTAINTED(tmpsv));
2835         if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv))))
2836             return sv_2num(tmpsv);
2837     }
2838     return sv_2mortal(newSVuv(PTR2UV(SvRV(sv))));
2839 }
2840
2841 /* int2str_table: lookup table containing string representations of all
2842  * two digit numbers. For example, int2str_table.arr[0] is "00" and
2843  * int2str_table.arr[12*2] is "12".
2844  *
2845  * We are going to read two bytes at a time, so we have to ensure that
2846  * the array is aligned to a 2 byte boundary. That's why it was made a
2847  * union with a dummy U16 member. */
2848 static const union {
2849     char arr[200];
2850     U16 dummy;
2851 } int2str_table = {{
2852     '0', '0', '0', '1', '0', '2', '0', '3', '0', '4', '0', '5', '0', '6',
2853     '0', '7', '0', '8', '0', '9', '1', '0', '1', '1', '1', '2', '1', '3',
2854     '1', '4', '1', '5', '1', '6', '1', '7', '1', '8', '1', '9', '2', '0',
2855     '2', '1', '2', '2', '2', '3', '2', '4', '2', '5', '2', '6', '2', '7',
2856     '2', '8', '2', '9', '3', '0', '3', '1', '3', '2', '3', '3', '3', '4',
2857     '3', '5', '3', '6', '3', '7', '3', '8', '3', '9', '4', '0', '4', '1',
2858     '4', '2', '4', '3', '4', '4', '4', '5', '4', '6', '4', '7', '4', '8',
2859     '4', '9', '5', '0', '5', '1', '5', '2', '5', '3', '5', '4', '5', '5',
2860     '5', '6', '5', '7', '5', '8', '5', '9', '6', '0', '6', '1', '6', '2',
2861     '6', '3', '6', '4', '6', '5', '6', '6', '6', '7', '6', '8', '6', '9',
2862     '7', '0', '7', '1', '7', '2', '7', '3', '7', '4', '7', '5', '7', '6',
2863     '7', '7', '7', '8', '7', '9', '8', '0', '8', '1', '8', '2', '8', '3',
2864     '8', '4', '8', '5', '8', '6', '8', '7', '8', '8', '8', '9', '9', '0',
2865     '9', '1', '9', '2', '9', '3', '9', '4', '9', '5', '9', '6', '9', '7',
2866     '9', '8', '9', '9'
2867 }};
2868
2869 /* uiv_2buf(): private routine for use by sv_2pv_flags(): print an IV or
2870  * UV as a string towards the end of buf, and return pointers to start and
2871  * end of it.
2872  *
2873  * We assume that buf is at least TYPE_CHARS(UV) long.
2874  */
2875
2876 PERL_STATIC_INLINE char *
2877 S_uiv_2buf(char *const buf, const IV iv, UV uv, const int is_uv, char **const peob)
2878 {
2879     char *ptr = buf + TYPE_CHARS(UV);
2880     char * const ebuf = ptr;
2881     int sign;
2882     U16 *word_ptr, *word_table;
2883
2884     PERL_ARGS_ASSERT_UIV_2BUF;
2885
2886     /* ptr has to be properly aligned, because we will cast it to U16* */
2887     assert(PTR2nat(ptr) % 2 == 0);
2888     /* we are going to read/write two bytes at a time */
2889     word_ptr = (U16*)ptr;
2890     word_table = (U16*)int2str_table.arr;
2891
2892     if (UNLIKELY(is_uv))
2893         sign = 0;
2894     else if (iv >= 0) {
2895         uv = iv;
2896         sign = 0;
2897     } else {
2898         /* Using 0- here to silence bogus warning from MS VC */
2899         uv = (UV) (0 - (UV) iv);
2900         sign = 1;
2901     }
2902
2903     while (uv > 99) {
2904         *--word_ptr = word_table[uv % 100];
2905         uv /= 100;
2906     }
2907     ptr = (char*)word_ptr;
2908
2909     if (uv < 10)
2910         *--ptr = (char)uv + '0';
2911     else {
2912         *--word_ptr = word_table[uv];
2913         ptr = (char*)word_ptr;
2914     }
2915
2916     if (sign)
2917         *--ptr = '-';
2918
2919     *peob = ebuf;
2920     return ptr;
2921 }
2922
2923 /* Helper for sv_2pv_flags and sv_vcatpvfn_flags.  If the NV is an
2924  * infinity or a not-a-number, writes the appropriate strings to the
2925  * buffer, including a zero byte.  On success returns the written length,
2926  * excluding the zero byte, on failure (not an infinity, not a nan)
2927  * returns zero, assert-fails on maxlen being too short.
2928  *
2929  * XXX for "Inf", "-Inf", and "NaN", we could have three read-only
2930  * shared string constants we point to, instead of generating a new
2931  * string for each instance. */
2932 STATIC size_t
2933 S_infnan_2pv(NV nv, char* buffer, size_t maxlen, char plus) {
2934     char* s = buffer;
2935     assert(maxlen >= 4);
2936     if (Perl_isinf(nv)) {
2937         if (nv < 0) {
2938             if (maxlen < 5) /* "-Inf\0"  */
2939                 return 0;
2940             *s++ = '-';
2941         } else if (plus) {
2942             *s++ = '+';
2943         }
2944         *s++ = 'I';
2945         *s++ = 'n';
2946         *s++ = 'f';
2947     }
2948     else if (Perl_isnan(nv)) {
2949         *s++ = 'N';
2950         *s++ = 'a';
2951         *s++ = 'N';
2952         /* XXX optionally output the payload mantissa bits as
2953          * "(unsigned)" (to match the nan("...") C99 function,
2954          * or maybe as "(0xhhh...)"  would make more sense...
2955          * provide a format string so that the user can decide?
2956          * NOTE: would affect the maxlen and assert() logic.*/
2957     }
2958     else {
2959       return 0;
2960     }
2961     assert((s == buffer + 3) || (s == buffer + 4));
2962     *s = 0;
2963     return s - buffer;
2964 }
2965
2966 /*
2967 =for apidoc sv_2pv_flags
2968
2969 Returns a pointer to the string value of an SV, and sets C<*lp> to its length.
2970 If flags has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.  Coerces C<sv> to a
2971 string if necessary.  Normally invoked via the C<SvPV_flags> macro.
2972 C<sv_2pv()> and C<sv_2pv_nomg> usually end up here too.
2973
2974 =cut
2975 */
2976
2977 char *
2978 Perl_sv_2pv_flags(pTHX_ SV *const sv, STRLEN *const lp, const U32 flags)
2979 {
2980     char *s;
2981
2982     PERL_ARGS_ASSERT_SV_2PV_FLAGS;
2983
2984     assert (SvTYPE(sv) != SVt_PVAV && SvTYPE(sv) != SVt_PVHV
2985          && SvTYPE(sv) != SVt_PVFM);
2986     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
2987         mg_get(sv);
2988     if (SvROK(sv)) {
2989         if (SvAMAGIC(sv)) {
2990             SV *tmpstr;
2991             if (flags & SV_SKIP_OVERLOAD)
2992                 return NULL;
2993             tmpstr = AMG_CALLunary(sv, string_amg);
2994             TAINT_IF(tmpstr && SvTAINTED(tmpstr));
2995             if (tmpstr && (!SvROK(tmpstr) || (SvRV(tmpstr) != SvRV(sv)))) {
2996                 /* Unwrap this:  */
2997                 /* char *pv = lp ? SvPV(tmpstr, *lp) : SvPV_nolen(tmpstr);
2998                  */
2999
3000                 char *pv;
3001                 if ((SvFLAGS(tmpstr) & (SVf_POK)) == SVf_POK) {
3002                     if (flags & SV_CONST_RETURN) {
3003                         pv = (char *) SvPVX_const(tmpstr);
3004                     } else {
3005                         pv = (flags & SV_MUTABLE_RETURN)
3006                             ? SvPVX_mutable(tmpstr) : SvPVX(tmpstr);
3007                     }
3008                     if (lp)
3009                         *lp = SvCUR(tmpstr);
3010                 } else {
3011                     pv = sv_2pv_flags(tmpstr, lp, flags);
3012                 }
3013                 if (SvUTF8(tmpstr))
3014                     SvUTF8_on(sv);
3015                 else
3016                     SvUTF8_off(sv);
3017                 return pv;
3018             }
3019         }
3020         {
3021             STRLEN len;
3022             char *retval;
3023             char *buffer;
3024             SV *const referent = SvRV(sv);
3025
3026             if (!referent) {
3027                 len = 7;
3028                 retval = buffer = savepvn("NULLREF", len);
3029             } else if (SvTYPE(referent) == SVt_REGEXP &&
3030                        (!(PL_curcop->cop_hints & HINT_NO_AMAGIC) ||
3031                         amagic_is_enabled(string_amg))) {
3032                 REGEXP * const re = (REGEXP *)MUTABLE_PTR(referent);
3033
3034                 assert(re);
3035                         
3036                 /* If the regex is UTF-8 we want the containing scalar to
3037                    have an UTF-8 flag too */
3038                 if (RX_UTF8(re))
3039                     SvUTF8_on(sv);
3040                 else
3041                     SvUTF8_off(sv);     
3042
3043                 if (lp)
3044                     *lp = RX_WRAPLEN(re);
3045  
3046                 return RX_WRAPPED(re);
3047             } else {
3048                 const char *const typestring = sv_reftype(referent, 0);
3049                 const STRLEN typelen = strlen(typestring);
3050                 UV addr = PTR2UV(referent);
3051                 const char *stashname = NULL;
3052                 STRLEN stashnamelen = 0; /* hush, gcc */
3053                 const char *buffer_end;
3054
3055                 if (SvOBJECT(referent)) {
3056                     const HEK *const name = HvNAME_HEK(SvSTASH(referent));
3057
3058                     if (name) {
3059                         stashname = HEK_KEY(name);
3060                         stashnamelen = HEK_LEN(name);
3061
3062                         if (HEK_UTF8(name)) {
3063                             SvUTF8_on(sv);
3064                         } else {
3065                             SvUTF8_off(sv);
3066                         }
3067                     } else {
3068                         stashname = "__ANON__";
3069                         stashnamelen = 8;
3070                     }
3071                     len = stashnamelen + 1 /* = */ + typelen + 3 /* (0x */
3072                         + 2 * sizeof(UV) + 2 /* )\0 */;
3073                 } else {
3074                     len = typelen + 3 /* (0x */
3075                         + 2 * sizeof(UV) + 2 /* )\0 */;
3076                 }
3077
3078                 Newx(buffer, len, char);
3079                 buffer_end = retval = buffer + len;
3080
3081                 /* Working backwards  */
3082                 *--retval = '\0';
3083                 *--retval = ')';
3084                 do {
3085                     *--retval = PL_hexdigit[addr & 15];
3086                 } while (addr >>= 4);
3087                 *--retval = 'x';
3088                 *--retval = '0';
3089                 *--retval = '(';
3090
3091                 retval -= typelen;
3092                 memcpy(retval, typestring, typelen);
3093
3094                 if (stashname) {
3095                     *--retval = '=';
3096                     retval -= stashnamelen;
3097                     memcpy(retval, stashname, stashnamelen);
3098                 }
3099                 /* retval may not necessarily have reached the start of the
3100                    buffer here.  */
3101                 assert (retval >= buffer);
3102
3103                 len = buffer_end - retval - 1; /* -1 for that \0  */
3104             }
3105             if (lp)
3106                 *lp = len;
3107             SAVEFREEPV(buffer);
3108             return retval;
3109         }
3110     }
3111
3112     if (SvPOKp(sv)) {
3113         if (lp)
3114             *lp = SvCUR(sv);
3115         if (flags & SV_MUTABLE_RETURN)
3116             return SvPVX_mutable(sv);
3117         if (flags & SV_CONST_RETURN)
3118             return (char *)SvPVX_const(sv);
3119         return SvPVX(sv);
3120     }
3121
3122     if (SvIOK(sv)) {
3123         /* I'm assuming that if both IV and NV are equally valid then
3124            converting the IV is going to be more efficient */
3125         const U32 isUIOK = SvIsUV(sv);
3126         /* The purpose of this union is to ensure that arr is aligned on
3127            a 2 byte boundary, because that is what uiv_2buf() requires */
3128         union {
3129             char arr[TYPE_CHARS(UV)];
3130             U16 dummy;
3131         } buf;
3132         char *ebuf, *ptr;
3133         STRLEN len;
3134
3135         if (SvTYPE(sv) < SVt_PVIV)
3136             sv_upgrade(sv, SVt_PVIV);
3137         ptr = uiv_2buf(buf.arr, SvIVX(sv), SvUVX(sv), isUIOK, &ebuf);
3138         len = ebuf - ptr;
3139         /* inlined from sv_setpvn */
3140         s = SvGROW_mutable(sv, len + 1);
3141         Move(ptr, s, len, char);
3142         s += len;
3143         *s = '\0';
3144         SvPOK_on(sv);
3145     }
3146     else if (SvNOK(sv)) {
3147         if (SvTYPE(sv) < SVt_PVNV)
3148             sv_upgrade(sv, SVt_PVNV);
3149         if (SvNVX(sv) == 0.0
3150 #if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
3151             && !Perl_isnan(SvNVX(sv))
3152 #endif
3153         ) {
3154             s = SvGROW_mutable(sv, 2);
3155             *s++ = '0';
3156             *s = '\0';
3157         } else {
3158             STRLEN len;
3159             STRLEN size = 5; /* "-Inf\0" */
3160
3161             s = SvGROW_mutable(sv, size);
3162             len = S_infnan_2pv(SvNVX(sv), s, size, 0);
3163             if (len > 0) {
3164                 s += len;
3165                 SvPOK_on(sv);
3166             }
3167             else {
3168                 /* some Xenix systems wipe out errno here */
3169                 dSAVE_ERRNO;
3170
3171                 size =
3172                     1 + /* sign */
3173                     1 + /* "." */
3174                     NV_DIG +
3175                     1 + /* "e" */
3176                     1 + /* sign */
3177                     5 + /* exponent digits */
3178                     1 + /* \0 */
3179                     2; /* paranoia */
3180
3181                 s = SvGROW_mutable(sv, size);
3182 #ifndef USE_LOCALE_NUMERIC
3183                 SNPRINTF_G(SvNVX(sv), s, SvLEN(sv), NV_DIG);
3184
3185                 SvPOK_on(sv);
3186 #else
3187                 {
3188                     bool local_radix;
3189                     DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
3190                     STORE_LC_NUMERIC_SET_TO_NEEDED();
3191
3192                     local_radix = _NOT_IN_NUMERIC_STANDARD;
3193                     if (local_radix && SvCUR(PL_numeric_radix_sv) > 1) {
3194                         size += SvCUR(PL_numeric_radix_sv) - 1;
3195                         s = SvGROW_mutable(sv, size);
3196                     }
3197
3198                     SNPRINTF_G(SvNVX(sv), s, SvLEN(sv), NV_DIG);
3199
3200                     /* If the radix character is UTF-8, and actually is in the
3201                      * output, turn on the UTF-8 flag for the scalar */
3202                     if (   local_radix
3203                         && SvUTF8(PL_numeric_radix_sv)
3204                         && instr(s, SvPVX_const(PL_numeric_radix_sv)))
3205                     {
3206                         SvUTF8_on(sv);
3207                     }
3208
3209                     RESTORE_LC_NUMERIC();
3210                 }
3211
3212                 /* We don't call SvPOK_on(), because it may come to
3213                  * pass that the locale changes so that the
3214                  * stringification we just did is no longer correct.  We
3215                  * will have to re-stringify every time it is needed */
3216 #endif
3217                 RESTORE_ERRNO;
3218             }
3219             while (*s) s++;
3220         }
3221     }
3222     else if (isGV_with_GP(sv)) {
3223         GV *const gv = MUTABLE_GV(sv);
3224         SV *const buffer = sv_newmortal();
3225
3226         gv_efullname3(buffer, gv, "*");
3227
3228         assert(SvPOK(buffer));
3229         if (SvUTF8(buffer))
3230             SvUTF8_on(sv);
3231         else
3232             SvUTF8_off(sv);
3233         if (lp)
3234             *lp = SvCUR(buffer);
3235         return SvPVX(buffer);
3236     }
3237     else {
3238         if (lp)
3239             *lp = 0;
3240         if (flags & SV_UNDEF_RETURNS_NULL)
3241             return NULL;
3242         if (!PL_localizing && ckWARN(WARN_UNINITIALIZED))
3243             report_uninit(sv);
3244         /* Typically the caller expects that sv_any is not NULL now.  */
3245         if (!SvREADONLY(sv) && SvTYPE(sv) < SVt_PV)
3246             sv_upgrade(sv, SVt_PV);
3247         return (char *)"";
3248     }
3249
3250     {
3251         const STRLEN len = s - SvPVX_const(sv);
3252         if (lp) 
3253             *lp = len;
3254         SvCUR_set(sv, len);
3255     }
3256     DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2pv(%s)\n",
3257                           PTR2UV(sv),SvPVX_const(sv)));
3258     if (flags & SV_CONST_RETURN)
3259         return (char *)SvPVX_const(sv);
3260     if (flags & SV_MUTABLE_RETURN)
3261         return SvPVX_mutable(sv);
3262     return SvPVX(sv);
3263 }
3264
3265 /*
3266 =for apidoc sv_copypv
3267 =for apidoc_item sv_copypv_nomg
3268 =for apidoc_item sv_copypv_flags
3269
3270 These copy a stringified representation of the source SV into the
3271 destination SV.  They automatically perform coercion of numeric values into
3272 strings.  Guaranteed to preserve the C<UTF8> flag even from overloaded objects.
3273 Similar in nature to C<sv_2pv[_flags]> but they operate directly on an SV
3274 instead of just the string.  Mostly they use C<L</sv_2pv_flags>> to do the
3275 work, except when that would lose the UTF-8'ness of the PV.
3276
3277 The three forms differ only in whether or not they perform 'get magic' on
3278 C<sv>.  C<sv_copypv_nomg> skips 'get magic'; C<sv_copypv> performs it; and
3279 C<sv_copypv_flags> either performs it (if the C<SV_GMAGIC> bit is set in
3280 C<flags>) or doesn't (if that bit is cleared).
3281
3282 =cut
3283 */
3284
3285 void
3286 Perl_sv_copypv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
3287 {
3288     STRLEN len;
3289     const char *s;
3290
3291     PERL_ARGS_ASSERT_SV_COPYPV_FLAGS;
3292
3293     s = SvPV_flags_const(ssv,len,(flags & SV_GMAGIC));
3294     sv_setpvn(dsv,s,len);
3295     if (SvUTF8(ssv))
3296         SvUTF8_on(dsv);
3297     else
3298         SvUTF8_off(dsv);
3299 }
3300
3301 /*
3302 =for apidoc sv_2pvbyte
3303
3304 Returns a pointer to the byte-encoded representation of the SV, and set C<*lp>
3305 to its length.  If the SV is marked as being encoded as UTF-8, it will
3306 downgrade it to a byte string as a side-effect, if possible.  If the SV cannot
3307 be downgraded, this croaks.
3308
3309 Processes 'get' magic.
3310
3311 Usually accessed via the C<SvPVbyte> macro.
3312
3313 =cut
3314 */
3315
3316 char *
3317 Perl_sv_2pvbyte_flags(pTHX_ SV *sv, STRLEN *const lp, const U32 flags)
3318 {
3319     PERL_ARGS_ASSERT_SV_2PVBYTE_FLAGS;
3320
3321     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
3322         mg_get(sv);
3323     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3324      || isGV_with_GP(sv) || SvROK(sv)) {
3325         SV *sv2 = sv_newmortal();
3326         sv_copypv_nomg(sv2,sv);
3327         sv = sv2;
3328     }
3329     sv_utf8_downgrade_nomg(sv,0);
3330     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3331 }
3332
3333 /*
3334 =for apidoc sv_2pvutf8
3335
3336 Return a pointer to the UTF-8-encoded representation of the SV, and set C<*lp>
3337 to its length.  May cause the SV to be upgraded to UTF-8 as a side-effect.
3338
3339 Usually accessed via the C<SvPVutf8> macro.
3340
3341 =cut
3342 */
3343
3344 char *
3345 Perl_sv_2pvutf8_flags(pTHX_ SV *sv, STRLEN *const lp, const U32 flags)
3346 {
3347     PERL_ARGS_ASSERT_SV_2PVUTF8_FLAGS;
3348
3349     if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
3350         mg_get(sv);
3351     if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
3352      || isGV_with_GP(sv) || SvROK(sv)) {
3353         SV *sv2 = sv_newmortal();
3354         sv_copypv_nomg(sv2,sv);
3355         sv = sv2;
3356     }
3357     sv_utf8_upgrade_nomg(sv);
3358     return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
3359 }
3360
3361
3362 /*
3363 =for apidoc sv_2bool
3364
3365 This macro is only used by C<sv_true()> or its macro equivalent, and only if
3366 the latter's argument is neither C<SvPOK>, C<SvIOK> nor C<SvNOK>.
3367 It calls C<sv_2bool_flags> with the C<SV_GMAGIC> flag.
3368
3369 =for apidoc sv_2bool_flags
3370
3371 This function is only used by C<sv_true()> and friends,  and only if
3372 the latter's argument is neither C<SvPOK>, C<SvIOK> nor C<SvNOK>.  If the flags
3373 contain C<SV_GMAGIC>, then it does an C<mg_get()> first.
3374
3375
3376 =cut
3377 */
3378
3379 bool
3380 Perl_sv_2bool_flags(pTHX_ SV *sv, I32 flags)
3381 {
3382     PERL_ARGS_ASSERT_SV_2BOOL_FLAGS;
3383
3384     restart:
3385     if(flags & SV_GMAGIC) SvGETMAGIC(sv);
3386
3387     if (!SvOK(sv))
3388         return 0;
3389     if (SvROK(sv)) {
3390         if (SvAMAGIC(sv)) {
3391             SV * const tmpsv = AMG_CALLunary(sv, bool__amg);
3392             if (tmpsv && (!SvROK(tmpsv) || (SvRV(tmpsv) != SvRV(sv)))) {
3393                 bool svb;
3394                 sv = tmpsv;
3395                 if(SvGMAGICAL(sv)) {
3396                     flags = SV_GMAGIC;
3397                     goto restart; /* call sv_2bool */
3398                 }
3399                 /* expanded SvTRUE_common(sv, (flags = 0, goto restart)) */
3400                 else if(!SvOK(sv)) {
3401                     svb = 0;
3402                 }
3403                 else if(SvPOK(sv)) {
3404                     svb = SvPVXtrue(sv);
3405                 }
3406                 else if((SvFLAGS(sv) & (SVf_IOK|SVf_NOK))) {
3407                     svb = (SvIOK(sv) && SvIVX(sv) != 0)
3408                         || (SvNOK(sv) && SvNVX(sv) != 0.0);
3409                 }
3410                 else {
3411                     flags = 0;
3412                     goto restart; /* call sv_2bool_nomg */
3413                 }
3414                 return cBOOL(svb);
3415             }
3416         }
3417         assert(SvRV(sv));
3418         return TRUE;
3419     }
3420     if (isREGEXP(sv))
3421         return
3422           RX_WRAPLEN(sv) > 1 || (RX_WRAPLEN(sv) && *RX_WRAPPED(sv) != '0');
3423
3424     if (SvNOK(sv) && !SvPOK(sv))
3425         return SvNVX(sv) != 0.0;
3426
3427     return SvTRUE_common(sv, isGV_with_GP(sv) ? 1 : 0);
3428 }
3429
3430 /*
3431 =for apidoc sv_utf8_upgrade
3432 =for apidoc_item sv_utf8_upgrade_nomg
3433 =for apidoc_item sv_utf8_upgrade_flags
3434 =for apidoc_item sv_utf8_upgrade_flags_grow
3435
3436 These convert the PV of an SV to its UTF-8-encoded form.
3437 The SV is forced to string form if it is not already.
3438 They always set the C<SvUTF8> flag to avoid future validity checks even if the
3439 whole string is the same in UTF-8 as not.
3440 They return the number of bytes in the converted string
3441
3442 The forms differ in just two ways.  The main difference is whether or not they
3443 perform 'get magic' on C<sv>.  C<sv_utf8_upgrade_nomg> skips 'get magic';
3444 C<sv_utf8_upgrade> performs it; and C<sv_utf8_upgrade_flags> and
3445 C<sv_utf8_upgrade_flags_grow> either perform it (if the C<SV_GMAGIC> bit is set
3446 in C<flags>) or don't (if that bit is cleared).
3447
3448 The other difference is that C<sv_utf8_upgrade_flags_grow> has an additional
3449 parameter, C<extra>, which allows the caller to specify an amount of space to
3450 be reserved as spare beyond what is needed for the actual conversion.  This is
3451 used when the caller knows it will soon be needing yet more space, and it is
3452 more efficient to request space from the system in a single call.
3453 This form is otherwise identical to C<sv_utf8_upgrade_flags>.
3454
3455 These are not a general purpose byte encoding to Unicode interface: use the
3456 Encode extension for that.
3457
3458 The C<SV_FORCE_UTF8_UPGRADE> flag is now ignored.
3459
3460 =for apidoc Amnh||SV_GMAGIC|
3461 =for apidoc Amnh||SV_FORCE_UTF8_UPGRADE|
3462
3463 =cut
3464
3465 If the routine itself changes the string, it adds a trailing C<NUL>.  Such a
3466 C<NUL> isn't guaranteed due to having other routines do the work in some input
3467 cases, or if the input is already flagged as being in utf8.
3468
3469 */
3470
3471 STRLEN
3472 Perl_sv_utf8_upgrade_flags_grow(pTHX_ SV *const sv, const I32 flags, STRLEN extra)
3473 {
3474     PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW;
3475
3476     if (sv == &PL_sv_undef)
3477         return 0;
3478     if (!SvPOK_nog(sv)) {
3479         STRLEN len = 0;
3480         if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) {
3481             (void) sv_2pv_flags(sv,&len, flags);
3482             if (SvUTF8(sv)) {
3483                 if (extra) SvGROW(sv, SvCUR(sv) + extra);
3484                 return len;
3485             }
3486         } else {
3487             (void) SvPV_force_flags(sv,len,flags & SV_GMAGIC);
3488         }
3489     }
3490
3491     /* SVt_REGEXP's shouldn't be upgraded to UTF8 - they're already
3492      * compiled and individual nodes will remain non-utf8 even if the
3493      * stringified version of the pattern gets upgraded. Whether the
3494      * PVX of a REGEXP should be grown or we should just croak, I don't
3495      * know - DAPM */
3496     if (SvUTF8(sv) || isREGEXP(sv)) {
3497         if (extra) SvGROW(sv, SvCUR(sv) + extra);
3498         return SvCUR(sv);
3499     }
3500
3501     if (SvIsCOW(sv)) {
3502         S_sv_uncow(aTHX_ sv, 0);
3503     }
3504
3505     if (SvCUR(sv) == 0) {
3506         if (extra) SvGROW(sv, extra + 1); /* Make sure is room for a trailing
3507                                              byte */
3508     } else { /* Assume Latin-1/EBCDIC */
3509         /* This function could be much more efficient if we
3510          * had a FLAG in SVs to signal if there are any variant
3511          * chars in the PV.  Given that there isn't such a flag
3512          * make the loop as fast as possible. */
3513         U8 * s = (U8 *) SvPVX_const(sv);
3514         U8 *t = s;
3515         
3516         if (is_utf8_invariant_string_loc(s, SvCUR(sv), (const U8 **) &t)) {
3517
3518             /* utf8 conversion not needed because all are invariants.  Mark
3519              * as UTF-8 even if no variant - saves scanning loop */
3520             SvUTF8_on(sv);
3521             if (extra) SvGROW(sv, SvCUR(sv) + extra);
3522             return SvCUR(sv);
3523         }
3524
3525         /* Here, there is at least one variant (t points to the first one), so
3526          * the string should be converted to utf8.  Everything from 's' to
3527          * 't - 1' will occupy only 1 byte each on output.
3528          *
3529          * Note that the incoming SV may not have a trailing '\0', as certain
3530          * code in pp_formline can send us partially built SVs.
3531          *
3532          * There are two main ways to convert.  One is to create a new string
3533          * and go through the input starting from the beginning, appending each
3534          * converted value onto the new string as we go along.  Going this
3535          * route, it's probably best to initially allocate enough space in the
3536          * string rather than possibly running out of space and having to
3537          * reallocate and then copy what we've done so far.  Since everything
3538          * from 's' to 't - 1' is invariant, the destination can be initialized
3539          * with these using a fast memory copy.  To be sure to allocate enough
3540          * space, one could use the worst case scenario, where every remaining
3541          * byte expands to two under UTF-8, or one could parse it and count
3542          * exactly how many do expand.
3543          *
3544          * The other way is to unconditionally parse the remainder of the
3545          * string to figure out exactly how big the expanded string will be,
3546          * growing if needed.  Then start at the end of the string and place
3547          * the character there at the end of the unfilled space in the expanded
3548          * one, working backwards until reaching 't'.
3549          *
3550          * The problem with assuming the worst case scenario is that for very
3551          * long strings, we could allocate much more memory than actually
3552          * needed, which can create performance problems.  If we have to parse
3553          * anyway, the second method is the winner as it may avoid an extra
3554          * copy.  The code used to use the first method under some
3555          * circumstances, but now that there is faster variant counting on
3556          * ASCII platforms, the second method is used exclusively, eliminating
3557          * some code that no longer has to be maintained. */
3558
3559         {
3560             /* Count the total number of variants there are.  We can start
3561              * just beyond the first one, which is known to be at 't' */
3562             const Size_t invariant_length = t - s;
3563             U8 * e = (U8 *) SvEND(sv);
3564
3565             /* The length of the left overs, plus 1. */
3566             const Size_t remaining_length_p1 = e - t;
3567
3568             /* We expand by 1 for the variant at 't' and one for each remaining
3569              * variant (we start looking at 't+1') */
3570             Size_t expansion = 1 + variant_under_utf8_count(t + 1, e);
3571
3572             /* +1 = trailing NUL */
3573             Size_t need = SvCUR(sv) + expansion + extra + 1;
3574             U8 * d;
3575
3576             /* Grow if needed */
3577             if (SvLEN(sv) < need) {
3578                 t = invariant_length + (U8*) SvGROW(sv, need);
3579                 e = t + remaining_length_p1;
3580             }
3581             SvCUR_set(sv, invariant_length + remaining_length_p1 + expansion);
3582
3583             /* Set the NUL at the end */
3584             d = (U8 *) SvEND(sv);
3585             *d-- = '\0';
3586
3587             /* Having decremented d, it points to the position to put the
3588              * very last byte of the expanded string.  Go backwards through
3589              * the string, copying and expanding as we go, stopping when we
3590              * get to the part that is invariant the rest of the way down */
3591
3592             e--;
3593             while (e >= t) {
3594                 if (NATIVE_BYTE_IS_INVARIANT(*e)) {
3595                     *d-- = *e;
3596                 } else {
3597                     *d-- = UTF8_EIGHT_BIT_LO(*e);
3598                     *d-- = UTF8_EIGHT_BIT_HI(*e);
3599                 }
3600                 e--;
3601             }
3602
3603             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3604                 /* Update pos. We do it at the end rather than during
3605                  * the upgrade, to avoid slowing down the common case
3606                  * (upgrade without pos).
3607                  * pos can be stored as either bytes or characters.  Since
3608                  * this was previously a byte string we can just turn off
3609                  * the bytes flag. */
3610                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3611                 if (mg) {
3612                     mg->mg_flags &= ~MGf_BYTES;
3613                 }
3614                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3615                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3616             }
3617         }
3618     }
3619
3620     SvUTF8_on(sv);
3621     return SvCUR(sv);
3622 }
3623
3624 /*
3625 =for apidoc sv_utf8_downgrade
3626 =for apidoc_item sv_utf8_downgrade_flags
3627 =for apidoc_item sv_utf8_downgrade_nomg
3628
3629 These attempt to convert the PV of an SV from characters to bytes.  If the PV
3630 contains a character that cannot fit in a byte, this conversion will fail; in
3631 this case, C<FALSE> is returned if C<fail_ok> is true; otherwise they croak.
3632
3633 They are not a general purpose Unicode to byte encoding interface:
3634 use the C<Encode> extension for that.
3635
3636 They differ only in that:
3637
3638 C<sv_utf8_downgrade> processes 'get' magic on C<sv>.
3639
3640 C<sv_utf8_downgrade_nomg> does not.
3641
3642 C<sv_utf8_downgrade_flags> has an additional C<flags> parameter in which you can specify
3643 C<SV_GMAGIC> to process 'get' magic, or leave it cleared to not proccess 'get' magic.
3644
3645 =cut
3646 */
3647
3648 bool
3649 Perl_sv_utf8_downgrade_flags(pTHX_ SV *const sv, const bool fail_ok, const U32 flags)
3650 {
3651     PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE_FLAGS;
3652
3653     if (SvPOKp(sv) && SvUTF8(sv)) {
3654         if (SvCUR(sv)) {
3655             U8 *s;
3656             STRLEN len;
3657             U32 mg_flags = flags & SV_GMAGIC;
3658
3659             if (SvIsCOW(sv)) {
3660                 S_sv_uncow(aTHX_ sv, 0);
3661             }
3662             if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3663                 /* update pos */
3664                 MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3665                 if (mg && mg->mg_len > 0 && mg->mg_flags & MGf_BYTES) {
3666                         mg->mg_len = sv_pos_b2u_flags(sv, mg->mg_len,
3667                                                 mg_flags|SV_CONST_RETURN);
3668                         mg_flags = 0; /* sv_pos_b2u does get magic */
3669                 }
3670                 if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3671                     magic_setutf8(sv,mg); /* clear UTF8 cache */
3672
3673             }
3674             s = (U8 *) SvPV_flags(sv, len, mg_flags);
3675
3676             if (!utf8_to_bytes(s, &len)) {
3677                 if (fail_ok)
3678                     return FALSE;
3679                 else {
3680                     if (PL_op)
3681                         Perl_croak(aTHX_ "Wide character in %s",
3682                                    OP_DESC(PL_op));
3683                     else
3684                         Perl_croak(aTHX_ "Wide character");
3685                 }
3686             }
3687             SvCUR_set(sv, len);
3688         }
3689     }
3690     SvUTF8_off(sv);
3691     return TRUE;
3692 }
3693
3694 /*
3695 =for apidoc sv_utf8_encode
3696
3697 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
3698 flag off so that it looks like octets again.
3699
3700 =cut
3701 */
3702
3703 void
3704 Perl_sv_utf8_encode(pTHX_ SV *const sv)
3705 {
3706     PERL_ARGS_ASSERT_SV_UTF8_ENCODE;
3707
3708     if (SvREADONLY(sv)) {
3709         sv_force_normal_flags(sv, 0);
3710     }
3711     (void) sv_utf8_upgrade(sv);
3712     SvUTF8_off(sv);
3713 }
3714
3715 /*
3716 =for apidoc sv_utf8_decode
3717
3718 If the PV of the SV is an octet sequence in Perl's extended UTF-8
3719 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
3720 so that it looks like a character.  If the PV contains only single-byte
3721 characters, the C<SvUTF8> flag stays off.
3722 Scans PV for validity and returns FALSE if the PV is invalid UTF-8.
3723
3724 =cut
3725 */
3726
3727 bool
3728 Perl_sv_utf8_decode(pTHX_ SV *const sv)
3729 {
3730     PERL_ARGS_ASSERT_SV_UTF8_DECODE;
3731
3732     if (SvPOKp(sv)) {
3733         const U8 *start, *c, *first_variant;
3734
3735         /* The octets may have got themselves encoded - get them back as
3736          * bytes
3737          */
3738         if (!sv_utf8_downgrade(sv, TRUE))
3739             return FALSE;
3740
3741         /* it is actually just a matter of turning the utf8 flag on, but
3742          * we want to make sure everything inside is valid utf8 first.
3743          */
3744         c = start = (const U8 *) SvPVX_const(sv);
3745         if (! is_utf8_invariant_string_loc(c, SvCUR(sv), &first_variant)) {
3746             if (!is_utf8_string(first_variant, SvCUR(sv) - (first_variant -c)))
3747                 return FALSE;
3748             SvUTF8_on(sv);
3749         }
3750         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3751             /* XXX Is this dead code?  XS_utf8_decode calls SvSETMAGIC
3752                    after this, clearing pos.  Does anything on CPAN
3753                    need this? */
3754             /* adjust pos to the start of a UTF8 char sequence */
3755             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
3756             if (mg) {
3757                 I32 pos = mg->mg_len;
3758                 if (pos > 0) {
3759                     for (c = start + pos; c > start; c--) {
3760                         if (UTF8_IS_START(*c))
3761                             break;
3762                     }
3763                     mg->mg_len  = c - start;
3764                 }
3765             }
3766             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
3767                 magic_setutf8(sv,mg); /* clear UTF8 cache */
3768         }
3769     }
3770     return TRUE;
3771 }
3772
3773 /*
3774 =for apidoc sv_setsv
3775
3776 Copies the contents of the source SV C<ssv> into the destination SV
3777 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3778 function if the source SV needs to be reused.  Does not handle 'set' magic on
3779 destination SV.  Calls 'get' magic on source SV.  Loosely speaking, it
3780 performs a copy-by-value, obliterating any previous content of the
3781 destination.
3782
3783 You probably want to use one of the assortment of wrappers, such as
3784 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3785 C<SvSetMagicSV_nosteal>.
3786
3787 =for apidoc sv_setsv_flags
3788
3789 Copies the contents of the source SV C<ssv> into the destination SV
3790 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
3791 function if the source SV needs to be reused.  Does not handle 'set' magic.
3792 Loosely speaking, it performs a copy-by-value, obliterating any previous
3793 content of the destination.
3794 If the C<flags> parameter has the C<SV_GMAGIC> bit set, will C<L</mg_get>> on
3795 C<ssv> if appropriate, else not.  If the C<flags>
3796 parameter has the C<SV_NOSTEAL> bit set then the
3797 buffers of temps will not be stolen.  C<sv_setsv>
3798 and C<sv_setsv_nomg> are implemented in terms of this function.
3799
3800 You probably want to use one of the assortment of wrappers, such as
3801 C<SvSetSV>, C<SvSetSV_nosteal>, C<SvSetMagicSV> and
3802 C<SvSetMagicSV_nosteal>.
3803
3804 This is the primary function for copying scalars, and most other
3805 copy-ish functions and macros use this underneath.
3806
3807 =for apidoc Amnh||SV_NOSTEAL
3808
3809 =cut
3810 */
3811
3812 static void
3813 S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int dtype)
3814 {
3815     I32 mro_changes = 0; /* 1 = method, 2 = isa, 3 = recursive isa */
3816     HV *old_stash = NULL;
3817
3818     PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB;
3819
3820     if (dtype != SVt_PVGV && !isGV_with_GP(dstr)) {
3821         const char * const name = GvNAME(sstr);
3822         const STRLEN len = GvNAMELEN(sstr);
3823         {
3824             if (dtype >= SVt_PV) {
3825                 SvPV_free(dstr);
3826                 SvPV_set(dstr, 0);
3827                 SvLEN_set(dstr, 0);
3828                 SvCUR_set(dstr, 0);
3829             }
3830             SvUPGRADE(dstr, SVt_PVGV);
3831             (void)SvOK_off(dstr);
3832             isGV_with_GP_on(dstr);
3833         }
3834         GvSTASH(dstr) = GvSTASH(sstr);
3835         if (GvSTASH(dstr))
3836             Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
3837         gv_name_set(MUTABLE_GV(dstr), name, len,
3838                         GV_ADD | (GvNAMEUTF8(sstr) ? SVf_UTF8 : 0 ));
3839         SvFAKE_on(dstr);        /* can coerce to non-glob */
3840     }
3841
3842     if(GvGP(MUTABLE_GV(sstr))) {
3843         /* If source has method cache entry, clear it */
3844         if(GvCVGEN(sstr)) {
3845             SvREFCNT_dec(GvCV(sstr));
3846             GvCV_set(sstr, NULL);
3847             GvCVGEN(sstr) = 0;
3848         }
3849         /* If source has a real method, then a method is
3850            going to change */
3851         else if(
3852          GvCV((const GV *)sstr) && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3853         ) {
3854             mro_changes = 1;
3855         }
3856     }
3857
3858     /* If dest already had a real method, that's a change as well */
3859     if(
3860         !mro_changes && GvGP(MUTABLE_GV(dstr)) && GvCVu((const GV *)dstr)
3861      && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3862     ) {
3863         mro_changes = 1;
3864     }
3865
3866     /* We don't need to check the name of the destination if it was not a
3867        glob to begin with. */
3868     if(dtype == SVt_PVGV) {
3869         const char * const name = GvNAME((const GV *)dstr);
3870         const STRLEN len = GvNAMELEN(dstr);
3871         if(memEQs(name, len, "ISA")
3872          /* The stash may have been detached from the symbol table, so
3873             check its name. */
3874          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
3875         )
3876             mro_changes = 2;
3877         else {
3878             if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
3879              || (len == 1 && name[0] == ':')) {
3880                 mro_changes = 3;
3881
3882                 /* Set aside the old stash, so we can reset isa caches on
3883                    its subclasses. */
3884                 if((old_stash = GvHV(dstr)))
3885                     /* Make sure we do not lose it early. */
3886                     SvREFCNT_inc_simple_void_NN(
3887                      sv_2mortal((SV *)old_stash)
3888                     );
3889             }
3890         }
3891
3892         SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
3893     }
3894
3895     /* freeing dstr's GP might free sstr (e.g. *x = $x),
3896      * so temporarily protect it */
3897     ENTER;
3898     SAVEFREESV(SvREFCNT_inc_simple_NN(sstr));
3899     gp_free(MUTABLE_GV(dstr));
3900     GvINTRO_off(dstr);          /* one-shot flag */
3901     GvGP_set(dstr, gp_ref(GvGP(sstr)));
3902     LEAVE;
3903
3904     if (SvTAINTED(sstr))
3905         SvTAINT(dstr);
3906     if (GvIMPORTED(dstr) != GVf_IMPORTED
3907         && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
3908         {
3909             GvIMPORTED_on(dstr);
3910         }
3911     GvMULTI_on(dstr);
3912     if(mro_changes == 2) {
3913       if (GvAV((const GV *)sstr)) {
3914         MAGIC *mg;
3915         SV * const sref = (SV *)GvAV((const GV *)dstr);
3916         if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
3917             if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
3918                 AV * const ary = newAV();
3919                 av_push(ary, mg->mg_obj); /* takes the refcount */
3920                 mg->mg_obj = (SV *)ary;
3921             }
3922             av_push((AV *)mg->mg_obj, SvREFCNT_inc_simple_NN(dstr));
3923         }
3924         else sv_magic(sref, dstr, PERL_MAGIC_isa, NULL, 0);
3925       }
3926       mro_isa_changed_in(GvSTASH(dstr));
3927     }
3928     else if(mro_changes == 3) {
3929         HV * const stash = GvHV(dstr);
3930         if(old_stash ? (HV *)HvENAME_get(old_stash) : stash)
3931             mro_package_moved(
3932                 stash, old_stash,
3933                 (GV *)dstr, 0
3934             );
3935     }
3936     else if(mro_changes) mro_method_changed_in(GvSTASH(dstr));
3937     if (GvIO(dstr) && dtype == SVt_PVGV) {
3938         DEBUG_o(Perl_deb(aTHX_
3939                         "glob_assign_glob clearing PL_stashcache\n"));
3940         /* It's a cache. It will rebuild itself quite happily.
3941            It's a lot of effort to work out exactly which key (or keys)
3942            might be invalidated by the creation of the this file handle.
3943          */
3944         hv_clear(PL_stashcache);
3945     }
3946     return;
3947 }
3948
3949 void
3950 Perl_gv_setref(pTHX_ SV *const dstr, SV *const sstr)
3951 {
3952     SV * const sref = SvRV(sstr);
3953     SV *dref;
3954     const int intro = GvINTRO(dstr);
3955     SV **location;
3956     U8 import_flag = 0;
3957     const U32 stype = SvTYPE(sref);
3958
3959     PERL_ARGS_ASSERT_GV_SETREF;
3960
3961     if (intro) {
3962         GvINTRO_off(dstr);      /* one-shot flag */
3963         GvLINE(dstr) = CopLINE(PL_curcop);
3964         GvEGV(dstr) = MUTABLE_GV(dstr);
3965     }
3966     GvMULTI_on(dstr);
3967     switch (stype) {
3968     case SVt_PVCV:
3969         location = (SV **) &(GvGP(dstr)->gp_cv); /* XXX bypassing GvCV_set */
3970         import_flag = GVf_IMPORTED_CV;
3971         goto common;
3972     case SVt_PVHV:
3973         location = (SV **) &GvHV(dstr);
3974         import_flag = GVf_IMPORTED_HV;
3975         goto common;
3976     case SVt_PVAV:
3977         location = (SV **) &GvAV(dstr);
3978         import_flag = GVf_IMPORTED_AV;
3979         goto common;
3980     case SVt_PVIO:
3981         location = (SV **) &GvIOp(dstr);
3982         goto common;
3983     case SVt_PVFM:
3984         location = (SV **) &GvFORM(dstr);
3985         goto common;
3986     default:
3987         location = &GvSV(dstr);
3988         import_flag = GVf_IMPORTED_SV;
3989     common:
3990         if (intro) {
3991             if (stype == SVt_PVCV) {
3992                 /*if (GvCVGEN(dstr) && (GvCV(dstr) != (const CV *)sref || GvCVGEN(dstr))) {*/
3993                 if (GvCVGEN(dstr)) {
3994                     SvREFCNT_dec(GvCV(dstr));
3995                     GvCV_set(dstr, NULL);
3996                     GvCVGEN(dstr) = 0; /* Switch off cacheness. */
3997                 }
3998             }
3999             /* SAVEt_GVSLOT takes more room on the savestack and has more
4000                overhead in leave_scope than SAVEt_GENERIC_SV.  But for CVs
4001                leave_scope needs access to the GV so it can reset method
4002                caches.  We must use SAVEt_GVSLOT whenever the type is
4003                SVt_PVCV, even if the stash is anonymous, as the stash may
4004                gain a name somehow before leave_scope. */
4005             if (stype == SVt_PVCV) {
4006                 /* There is no save_pushptrptrptr.  Creating it for this
4007                    one call site would be overkill.  So inline the ss add
4008                    routines here. */
4009                 dSS_ADD;
4010                 SS_ADD_PTR(dstr);
4011                 SS_ADD_PTR(location);
4012                 SS_ADD_PTR(SvREFCNT_inc(*location));
4013                 SS_ADD_UV(SAVEt_GVSLOT);
4014                 SS_ADD_END(4);
4015             }
4016             else SAVEGENERICSV(*location);
4017         }
4018         dref = *location;
4019         if (stype == SVt_PVCV && (*location != sref || GvCVGEN(dstr))) {
4020             CV* const cv = MUTABLE_CV(*location);
4021             if (cv) {
4022                 if (!GvCVGEN((const GV *)dstr) &&
4023                     (CvROOT(cv) || CvXSUB(cv)) &&
4024                     /* redundant check that avoids creating the extra SV
4025                        most of the time: */
4026                     (CvCONST(cv) || ckWARN(WARN_REDEFINE)))
4027                     {
4028                         SV * const new_const_sv =
4029                             CvCONST((const CV *)sref)
4030                                  ? cv_const_sv((const CV *)sref)
4031                                  : NULL;
4032                         HV * const stash = GvSTASH((const GV *)dstr);
4033                         report_redefined_cv(
4034                            sv_2mortal(
4035                              stash
4036                                ? Perl_newSVpvf(aTHX_
4037                                     "%" HEKf "::%" HEKf,
4038                                     HEKfARG(HvNAME_HEK(stash)),
4039                                     HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr))))
4040                                : Perl_newSVpvf(aTHX_
4041                                     "%" HEKf,
4042                                     HEKfARG(GvENAME_HEK(MUTABLE_GV(dstr))))
4043                            ),
4044                            cv,
4045                            CvCONST((const CV *)sref) ? &new_const_sv : NULL
4046                         );
4047                     }
4048                 if (!intro)
4049                     cv_ckproto_len_flags(cv, (const GV *)dstr,
4050                                    SvPOK(sref) ? CvPROTO(sref) : NULL,
4051                                    SvPOK(sref) ? CvPROTOLEN(sref) : 0,
4052                                    SvPOK(sref) ? SvUTF8(sref) : 0);
4053             }
4054             GvCVGEN(dstr) = 0; /* Switch off cacheness. */
4055             GvASSUMECV_on(dstr);
4056             if(GvSTASH(dstr)) { /* sub foo { 1 } sub bar { 2 } *bar = \&foo */
4057                 if (intro && GvREFCNT(dstr) > 1) {
4058                     /* temporary remove extra savestack's ref */
4059                     --GvREFCNT(dstr);
4060                     gv_method_changed(dstr);
4061                     ++GvREFCNT(dstr);
4062                 }
4063                 else gv_method_changed(dstr);
4064             }
4065         }
4066         *location = SvREFCNT_inc_simple_NN(sref);
4067         if (import_flag && !(GvFLAGS(dstr) & import_flag)
4068             && CopSTASH_ne(PL_curcop, GvSTASH(dstr))) {
4069             GvFLAGS(dstr) |= import_flag;
4070         }
4071
4072         if (stype == SVt_PVHV) {
4073             const char * const name = GvNAME((GV*)dstr);
4074             const STRLEN len = GvNAMELEN(dstr);
4075             if (
4076                 (
4077                    (len > 1 && name[len-2] == ':' && name[len-1] == ':')
4078                 || (len == 1 && name[0] == ':')
4079                 )
4080              && (!dref || HvENAME_get(dref))
4081             ) {
4082                 mro_package_moved(
4083                     (HV *)sref, (HV *)dref,
4084                     (GV *)dstr, 0
4085                 );
4086             }
4087         }
4088         else if (
4089             stype == SVt_PVAV && sref != dref
4090          && memEQs(GvNAME((GV*)dstr), GvNAMELEN((GV*)dstr), "ISA")
4091          /* The stash may have been detached from the symbol table, so
4092             check its name before doing anything. */
4093          && GvSTASH(dstr) && HvENAME(GvSTASH(dstr))
4094         ) {
4095             MAGIC *mg;
4096             MAGIC * const omg = dref && SvSMAGICAL(dref)
4097                                  ? mg_find(dref, PERL_MAGIC_isa)
4098                                  : NULL;
4099             if (SvSMAGICAL(sref) && (mg = mg_find(sref, PERL_MAGIC_isa))) {
4100                 if (SvTYPE(mg->mg_obj) != SVt_PVAV) {
4101                     AV * const ary = newAV();
4102                     av_push(ary, mg->mg_obj); /* takes the refcount */
4103                     mg->mg_obj = (SV *)ary;
4104                 }
4105                 if (omg) {
4106                     if (SvTYPE(omg->mg_obj) == SVt_PVAV) {
4107                         SV **svp = AvARRAY((AV *)omg->mg_obj);
4108                         I32 items = AvFILLp((AV *)omg->mg_obj) + 1;
4109                         while (items--)
4110                             av_push(
4111                              (AV *)mg->mg_obj,
4112                              SvREFCNT_inc_simple_NN(*svp++)
4113                             );
4114                     }
4115                     else
4116                         av_push(
4117                          (AV *)mg->mg_obj,
4118                          SvREFCNT_inc_simple_NN(omg->mg_obj)
4119                         );
4120                 }
4121                 else
4122                     av_push((AV *)mg->mg_obj,SvREFCNT_inc_simple_NN(dstr));
4123             }
4124             else
4125             {
4126                 SSize_t i;
4127                 sv_magic(
4128                  sref, omg ? omg->mg_obj : dstr, PERL_MAGIC_isa, NULL, 0
4129                 );
4130                 for (i = 0; i <= AvFILL(sref); ++i) {
4131                     SV **elem = av_fetch ((AV*)sref, i, 0);
4132                     if (elem) {
4133                         sv_magic(
4134                           *elem, sref, PERL_MAGIC_isaelem, NULL, i
4135                         );
4136                     }
4137                 }
4138                 mg = mg_find(sref, PERL_MAGIC_isa);
4139             }
4140             /* Since the *ISA assignment could have affected more than
4141                one stash, don't call mro_isa_changed_in directly, but let
4142                magic_clearisa do it for us, as it already has the logic for
4143                dealing with globs vs arrays of globs. */
4144             assert(mg);
4145             Perl_magic_clearisa(aTHX_ NULL, mg);
4146         }
4147         else if (stype == SVt_PVIO) {
4148             DEBUG_o(Perl_deb(aTHX_ "gv_setref clearing PL_stashcache\n"));
4149             /* It's a cache. It will rebuild itself quite happily.
4150                It's a lot of effort to work out exactly which key (or keys)
4151                might be invalidated by the creation of the this file handle.
4152             */
4153             hv_clear(PL_stashcache);
4154         }
4155         break;
4156     }
4157     if (!intro) SvREFCNT_dec(dref);
4158     if (SvTAINTED(sstr))
4159         SvTAINT(dstr);
4160     return;
4161 }
4162
4163
4164
4165
4166 #ifdef PERL_DEBUG_READONLY_COW
4167 # include <sys/mman.h>
4168
4169 # ifndef PERL_MEMORY_DEBUG_HEADER_SIZE
4170 #  define PERL_MEMORY_DEBUG_HEADER_SIZE 0
4171 # endif
4172
4173 void
4174 Perl_sv_buf_to_ro(pTHX_ SV *sv)
4175 {
4176     struct perl_memory_debug_header * const header =
4177         (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4178     const MEM_SIZE len = header->size;
4179     PERL_ARGS_ASSERT_SV_BUF_TO_RO;
4180 # ifdef PERL_TRACK_MEMPOOL
4181     if (!header->readonly) header->readonly = 1;
4182 # endif
4183     if (mprotect(header, len, PROT_READ))
4184         Perl_warn(aTHX_ "mprotect RW for COW string %p %lu failed with %d",
4185                          header, len, errno);
4186 }
4187
4188 static void
4189 S_sv_buf_to_rw(pTHX_ SV *sv)
4190 {
4191     struct perl_memory_debug_header * const header =
4192         (struct perl_memory_debug_header *)(SvPVX(sv)-PERL_MEMORY_DEBUG_HEADER_SIZE);
4193     const MEM_SIZE len = header->size;
4194     PERL_ARGS_ASSERT_SV_BUF_TO_RW;
4195     if (mprotect(header, len, PROT_READ|PROT_WRITE))
4196         Perl_warn(aTHX_ "mprotect for COW string %p %lu failed with %d",
4197                          header, len, errno);
4198 # ifdef PERL_TRACK_MEMPOOL
4199     header->readonly = 0;
4200 # endif
4201 }
4202
4203 #else
4204 # define sv_buf_to_ro(sv)       NOOP
4205 # define sv_buf_to_rw(sv)       NOOP
4206 #endif
4207
4208 void
4209 Perl_sv_setsv_flags(pTHX_ SV *dstr, SV* sstr, const I32 flags)
4210 {
4211     U32 sflags;
4212     int dtype;
4213     svtype stype;
4214     unsigned int both_type;
4215
4216     PERL_ARGS_ASSERT_SV_SETSV_FLAGS;
4217
4218     if (UNLIKELY( sstr == dstr ))
4219         return;
4220
4221     if (UNLIKELY( !sstr ))
4222         sstr = &PL_sv_undef;
4223
4224     stype = SvTYPE(sstr);
4225     dtype = SvTYPE(dstr);
4226     both_type = (stype | dtype);
4227
4228     /* with these values, we can check that both SVs are NULL/IV (and not
4229      * freed) just by testing the or'ed types */
4230     STATIC_ASSERT_STMT(SVt_NULL == 0);
4231     STATIC_ASSERT_STMT(SVt_IV   == 1);
4232     if (both_type <= 1) {
4233         /* both src and dst are UNDEF/IV/RV, so we can do a lot of
4234          * special-casing */
4235         U32 sflags;
4236         U32 new_dflags;
4237         SV *old_rv = NULL;
4238
4239         /* minimal subset of SV_CHECK_THINKFIRST_COW_DROP(dstr) */
4240         if (SvREADONLY(dstr))
4241             Perl_croak_no_modify();
4242         if (SvROK(dstr)) {
4243             if (SvWEAKREF(dstr))
4244                 sv_unref_flags(dstr, 0);
4245             else
4246                 old_rv = SvRV(dstr);
4247         }
4248
4249         assert(!SvGMAGICAL(sstr));
4250         assert(!SvGMAGICAL(dstr));
4251
4252         sflags = SvFLAGS(sstr);
4253         if (sflags & (SVf_IOK|SVf_ROK)) {
4254             SET_SVANY_FOR_BODYLESS_IV(dstr);
4255             new_dflags = SVt_IV;
4256
4257             if (sflags & SVf_ROK) {
4258                 dstr->sv_u.svu_rv = SvREFCNT_inc(SvRV(sstr));
4259                 new_dflags |= SVf_ROK;
4260             }
4261             else {
4262                 /* both src and dst are <= SVt_IV, so sv_any points to the
4263                  * head; so access the head directly
4264                  */
4265                 assert(    &(sstr->sv_u.svu_iv)
4266                         == &(((XPVIV*) SvANY(sstr))->xiv_iv));
4267                 assert(    &(dstr->sv_u.svu_iv)
4268                         == &(((XPVIV*) SvANY(dstr))->xiv_iv));
4269                 dstr->sv_u.svu_iv = sstr->sv_u.svu_iv;
4270                 new_dflags |= (SVf_IOK|SVp_IOK|(sflags & SVf_IVisUV));
4271             }
4272         }
4273         else {
4274             new_dflags = dtype; /* turn off everything except the type */
4275         }
4276         SvFLAGS(dstr) = new_dflags;
4277         SvREFCNT_dec(old_rv);
4278
4279         return;
4280     }
4281
4282     if (UNLIKELY(both_type == SVTYPEMASK)) {
4283         if (SvIS_FREED(dstr)) {
4284             Perl_croak(aTHX_ "panic: attempt to copy value %" SVf
4285                        " to a freed scalar %p", SVfARG(sstr), (void *)dstr);
4286         }
4287         if (SvIS_FREED(sstr)) {
4288             Perl_croak(aTHX_ "panic: attempt to copy freed scalar %p to %p",
4289                        (void*)sstr, (void*)dstr);
4290         }
4291     }
4292
4293
4294
4295     SV_CHECK_THINKFIRST_COW_DROP(dstr);
4296     dtype = SvTYPE(dstr); /* THINKFIRST may have changed type */
4297
4298     /* There's a lot of redundancy below but we're going for speed here */
4299
4300     switch (stype) {
4301     case SVt_NULL:
4302       undef_sstr:
4303         if (LIKELY( dtype != SVt_PVGV && dtype != SVt_PVLV )) {
4304             (void)SvOK_off(dstr);
4305             return;
4306         }
4307         break;
4308     case SVt_IV:
4309         if (SvIOK(sstr)) {
4310             switch (dtype) {
4311             case SVt_NULL:
4312                 /* For performance, we inline promoting to type SVt_IV. */
4313                 /* We're starting from SVt_NULL, so provided that define is
4314                  * actual 0, we don't have to unset any SV type flags
4315                  * to promote to SVt_IV. */
4316                 STATIC_ASSERT_STMT(SVt_NULL == 0);
4317                 SET_SVANY_FOR_BODYLESS_IV(dstr);
4318                 SvFLAGS(dstr) |= SVt_IV;
4319                 break;
4320             case SVt_NV:
4321             case SVt_PV:
4322                 sv_upgrade(dstr, SVt_PVIV);
4323                 break;
4324             case SVt_PVGV:
4325             case SVt_PVLV:
4326                 goto end_of_first_switch;
4327             }
4328             (void)SvIOK_only(dstr);
4329             SvIV_set(dstr,  SvIVX(sstr));
4330             if (SvIsUV(sstr))
4331                 SvIsUV_on(dstr);
4332             /* SvTAINTED can only be true if the SV has taint magic, which in
4333                turn means that the SV type is PVMG (or greater). This is the
4334                case statement for SVt_IV, so this cannot be true (whatever gcov
4335                may say).  */
4336             assert(!SvTAINTED(sstr));
4337             return;
4338         }
4339         if (!SvROK(sstr))
4340             goto undef_sstr;
4341         if (dtype < SVt_PV && dtype != SVt_IV)
4342             sv_upgrade(dstr, SVt_IV);
4343         break;
4344
4345     case SVt_NV:
4346         if (LIKELY( SvNOK(sstr) )) {
4347             switch (dtype) {
4348             case SVt_NULL:
4349             case SVt_IV:
4350                 sv_upgrade(dstr, SVt_NV);
4351                 break;
4352             case SVt_PV:
4353             case SVt_PVIV:
4354                 sv_upgrade(dstr, SVt_PVNV);
4355                 break;
4356             case SVt_PVGV:
4357             case SVt_PVLV:
4358                 goto end_of_first_switch;
4359             }
4360             SvNV_set(dstr, SvNVX(sstr));
4361             (void)SvNOK_only(dstr);
4362             /* SvTAINTED can only be true if the SV has taint magic, which in
4363                turn means that the SV type is PVMG (or greater). This is the
4364                case statement for SVt_NV, so this cannot be true (whatever gcov
4365                may say).  */
4366             assert(!SvTAINTED(sstr));
4367             return;
4368         }
4369         goto undef_sstr;
4370
4371     case SVt_PV:
4372         if (dtype < SVt_PV)
4373             sv_upgrade(dstr, SVt_PV);
4374         break;
4375     case SVt_PVIV:
4376         if (dtype < SVt_PVIV)
4377             sv_upgrade(dstr, SVt_PVIV);
4378         break;
4379     case SVt_PVNV:
4380         if (dtype < SVt_PVNV)
4381             sv_upgrade(dstr, SVt_PVNV);
4382         break;
4383
4384     case SVt_INVLIST:
4385         invlist_clone(sstr, dstr);
4386         break;
4387     default:
4388         {
4389         const char * const type = sv_reftype(sstr,0);
4390         if (PL_op)
4391             /* diag_listed_as: Bizarre copy of %s */
4392             Perl_croak(aTHX_ "Bizarre copy of %s in %s", type, OP_DESC(PL_op));
4393         else
4394             Perl_croak(aTHX_ "Bizarre copy of %s", type);
4395         }
4396         NOT_REACHED; /* NOTREACHED */
4397
4398     case SVt_REGEXP:
4399       upgregexp:
4400         if (dtype < SVt_REGEXP)
4401             sv_upgrade(dstr, SVt_REGEXP);
4402         break;
4403
4404     case SVt_PVLV:
4405     case SVt_PVGV:
4406     case SVt_PVMG:
4407         if (SvGMAGICAL(sstr) && (flags & SV_GMAGIC)) {
4408             mg_get(sstr);
4409             if (SvTYPE(sstr) != stype)
4410                 stype = SvTYPE(sstr);
4411         }
4412         if (isGV_with_GP(sstr) && dtype <= SVt_PVLV) {
4413                     glob_assign_glob(dstr, sstr, dtype);
4414                     return;
4415         }
4416         if (stype == SVt_PVLV)
4417         {
4418             if (isREGEXP(sstr)) goto upgregexp;
4419             SvUPGRADE(dstr, SVt_PVNV);
4420         }
4421         else
4422             SvUPGRADE(dstr, (svtype)stype);
4423     }
4424  end_of_first_switch:
4425
4426     /* dstr may have been upgraded.  */
4427     dtype = SvTYPE(dstr);
4428     sflags = SvFLAGS(sstr);
4429
4430     if (UNLIKELY( dtype == SVt_PVCV )) {
4431         /* Assigning to a subroutine sets the prototype.  */
4432         if (SvOK(sstr)) {
4433             STRLEN len;
4434             const char *const ptr = SvPV_const(sstr, len);
4435
4436             SvGROW(dstr, len + 1);
4437             Copy(ptr, SvPVX(dstr), len + 1, char);
4438             SvCUR_set(dstr, len);
4439             SvPOK_only(dstr);
4440             SvFLAGS(dstr) |= sflags & SVf_UTF8;
4441             CvAUTOLOAD_off(dstr);
4442         } else {
4443             SvOK_off(dstr);
4444         }
4445     }
4446     else if (UNLIKELY(dtype == SVt_PVAV || dtype == SVt_PVHV
4447              || dtype == SVt_PVFM))
4448     {
4449         const char * const type = sv_reftype(dstr,0);
4450         if (PL_op)
4451             /* diag_listed_as: Cannot copy to %s */
4452             Perl_croak(aTHX_ "Cannot copy to %s in %s", type, OP_DESC(PL_op));
4453         else
4454             Perl_croak(aTHX_ "Cannot copy to %s", type);
4455     } else if (sflags & SVf_ROK) {
4456         if (isGV_with_GP(dstr)
4457             && SvTYPE(SvRV(sstr)) == SVt_PVGV && isGV_with_GP(SvRV(sstr))) {
4458             sstr = SvRV(sstr);
4459             if (sstr == dstr) {
4460                 if (GvIMPORTED(dstr) != GVf_IMPORTED
4461                     && CopSTASH_ne(PL_curcop, GvSTASH(dstr)))
4462                 {
4463                     GvIMPORTED_on(dstr);
4464                 }
4465                 GvMULTI_on(dstr);
4466                 return;
4467             }
4468             glob_assign_glob(dstr, sstr, dtype);
4469             return;
4470         }
4471
4472         if (dtype >= SVt_PV) {
4473             if (isGV_with_GP(dstr)) {
4474                 gv_setref(dstr, sstr);
4475                 return;
4476             }
4477             if (SvPVX_const(dstr)) {
4478                 SvPV_free(dstr);
4479                 SvLEN_set(dstr, 0);
4480                 SvCUR_set(dstr, 0);
4481             }
4482         }
4483         (void)SvOK_off(dstr);
4484         SvRV_set(dstr, SvREFCNT_inc(SvRV(sstr)));
4485         SvFLAGS(dstr) |= sflags & SVf_ROK;
4486         assert(!(sflags & SVp_NOK));
4487         assert(!(sflags & SVp_IOK));
4488         assert(!(sflags & SVf_NOK));
4489         assert(!(sflags & SVf_IOK));
4490     }
4491     else if (isGV_with_GP(dstr)) {
4492         if (!(sflags & SVf_OK)) {
4493             Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4494                            "Undefined value assigned to typeglob");
4495         }
4496         else {
4497             GV *gv = gv_fetchsv_nomg(sstr, GV_ADD, SVt_PVGV);
4498             if (dstr != (const SV *)gv) {
4499                 const char * const name = GvNAME((const GV *)dstr);
4500                 const STRLEN len = GvNAMELEN(dstr);
4501                 HV *old_stash = NULL;
4502                 bool reset_isa = FALSE;
4503                 if ((len > 1 && name[len-2] == ':' && name[len-1] == ':')
4504                  || (len == 1 && name[0] == ':')) {
4505                     /* Set aside the old stash, so we can reset isa caches
4506                        on its subclasses. */
4507                     if((old_stash = GvHV(dstr))) {
4508                         /* Make sure we do not lose it early. */
4509                         SvREFCNT_inc_simple_void_NN(
4510                          sv_2mortal((SV *)old_stash)
4511                         );
4512                     }
4513                     reset_isa = TRUE;
4514                 }
4515
4516                 if (GvGP(dstr)) {
4517                     SvREFCNT_inc_simple_void_NN(sv_2mortal(dstr));
4518                     gp_free(MUTABLE_GV(dstr));
4519                 }
4520                 GvGP_set(dstr, gp_ref(GvGP(gv)));
4521
4522                 if (reset_isa) {
4523                     HV * const stash = GvHV(dstr);
4524                     if(
4525                         old_stash ? (HV *)HvENAME_get(old_stash) : stash
4526                     )
4527                         mro_package_moved(
4528                          stash, old_stash,
4529                          (GV *)dstr, 0
4530                         );
4531                 }
4532             }
4533         }
4534     }
4535     else if ((dtype == SVt_REGEXP || dtype == SVt_PVLV)
4536           && (stype == SVt_REGEXP || isREGEXP(sstr))) {
4537         reg_temp_copy((REGEXP*)dstr, (REGEXP*)sstr);
4538     }
4539     else if (sflags & SVp_POK) {
4540         const STRLEN cur = SvCUR(sstr);
4541         const STRLEN len = SvLEN(sstr);
4542
4543         /*
4544          * We have three basic ways to copy the string:
4545          *
4546          *  1. Swipe
4547          *  2. Copy-on-write
4548          *  3. Actual copy
4549          * 
4550          * Which we choose is based on various factors.  The following
4551          * things are listed in order of speed, fastest to slowest:
4552          *  - Swipe
4553          *  - Copying a short string
4554          *  - Copy-on-write bookkeeping
4555          *  - malloc
4556          *  - Copying a long string
4557          * 
4558          * We swipe the string (steal the string buffer) if the SV on the
4559          * rhs is about to be freed anyway (TEMP and refcnt==1).  This is a
4560          * big win on long strings.  It should be a win on short strings if
4561          * SvPVX_const(dstr) has to be allocated.  If not, it should not 
4562          * slow things down, as SvPVX_const(sstr) would have been freed
4563          * soon anyway.
4564          * 
4565          * We also steal the buffer from a PADTMP (operator target) if it
4566          * is â€˜long enough’.  For short strings, a swipe does not help
4567          * here, as it causes more malloc calls the next time the target
4568          * is used.  Benchmarks show that even if SvPVX_const(dstr) has to
4569          * be allocated it is still not worth swiping PADTMPs for short
4570          * strings, as the savings here are small.
4571          * 
4572          * If swiping is not an option, then we see whether it is
4573          * worth using copy-on-write.  If the lhs already has a buf-
4574          * fer big enough and the string is short, we skip it and fall back
4575          * to method 3, since memcpy is faster for short strings than the
4576          * later bookkeeping overhead that copy-on-write entails.
4577
4578          * If the rhs is not a copy-on-write string yet, then we also
4579          * consider whether the buffer is too large relative to the string
4580          * it holds.  Some operations such as readline allocate a large
4581          * buffer in the expectation of reusing it.  But turning such into
4582          * a COW buffer is counter-productive because it increases memory
4583          * usage by making readline allocate a new large buffer the sec-
4584          * ond time round.  So, if the buffer is too large, again, we use
4585          * method 3 (copy).
4586          * 
4587          * Finally, if there is no buffer on the left, or the buffer is too 
4588          * small, then we use copy-on-write and make both SVs share the
4589          * string buffer.
4590          *
4591          */
4592
4593         /* Whichever path we take through the next code, we want this true,
4594            and doing it now facilitates the COW check.  */
4595         (void)SvPOK_only(dstr);
4596
4597         if (
4598                  (              /* Either ... */
4599                                 /* slated for free anyway (and not COW)? */
4600                     (sflags & (SVs_TEMP|SVf_IsCOW)) == SVs_TEMP
4601                                 /* or a swipable TARG */
4602                  || ((sflags &
4603                            (SVs_PADTMP|SVf_READONLY|SVf_PROTECT|SVf_IsCOW))
4604                        == SVs_PADTMP
4605                                 /* whose buffer is worth stealing */
4606                      && CHECK_COWBUF_THRESHOLD(cur,len)
4607                     )
4608                  ) &&
4609                  !(sflags & SVf_OOK) &&   /* and not involved in OOK hack? */
4610                  (!(flags & SV_NOSTEAL)) &&
4611                                         /* and we're allowed to steal temps */
4612                  SvREFCNT(sstr) == 1 &&   /* and no other references to it? */
4613                  len)             /* and really is a string */
4614         {       /* Passes the swipe test.  */
4615             if (SvPVX_const(dstr))      /* we know that dtype >= SVt_PV */
4616                 SvPV_free(dstr);
4617             SvPV_set(dstr, SvPVX_mutable(sstr));
4618             SvLEN_set(dstr, SvLEN(sstr));
4619             SvCUR_set(dstr, SvCUR(sstr));
4620
4621             SvTEMP_off(dstr);
4622             (void)SvOK_off(sstr);       /* NOTE: nukes most SvFLAGS on sstr */
4623             SvPV_set(sstr, NULL);
4624             SvLEN_set(sstr, 0);
4625             SvCUR_set(sstr, 0);
4626             SvTEMP_off(sstr);
4627         }
4628         else if (flags & SV_COW_SHARED_HASH_KEYS
4629               &&
4630 #ifdef PERL_COPY_ON_WRITE
4631                  (sflags & SVf_IsCOW
4632                    ? (!len ||
4633                        (  (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
4634                           /* If this is a regular (non-hek) COW, only so
4635                              many COW "copies" are possible. */
4636                        && CowREFCNT(sstr) != SV_COW_REFCNT_MAX  ))
4637                    : (  (sflags & CAN_COW_MASK) == CAN_COW_FLAGS
4638                      && !(SvFLAGS(dstr) & SVf_BREAK)
4639                      && CHECK_COW_THRESHOLD(cur,len) && cur+1 < len
4640                      && (CHECK_COWBUF_THRESHOLD(cur,len) || SvLEN(dstr) < cur+1)
4641                     ))
4642 #else
4643                  sflags & SVf_IsCOW
4644               && !(SvFLAGS(dstr) & SVf_BREAK)
4645 #endif
4646             ) {
4647             /* Either it's a shared hash key, or it's suitable for
4648                copy-on-write.  */
4649 #ifdef DEBUGGING
4650             if (DEBUG_C_TEST) {
4651                 PerlIO_printf(Perl_debug_log, "Copy on write: sstr --> dstr\n");
4652                 sv_dump(sstr);
4653                 sv_dump(dstr);
4654             }
4655 #endif
4656 #ifdef PERL_ANY_COW
4657             if (!(sflags & SVf_IsCOW)) {
4658                     SvIsCOW_on(sstr);
4659                     CowREFCNT(sstr) = 0;
4660             }
4661 #endif
4662             if (SvPVX_const(dstr)) {    /* we know that dtype >= SVt_PV */
4663                 SvPV_free(dstr);
4664             }
4665
4666 #ifdef PERL_ANY_COW
4667             if (len) {
4668                     if (sflags & SVf_IsCOW) {
4669                         sv_buf_to_rw(sstr);
4670                     }
4671                     CowREFCNT(sstr)++;
4672                     SvPV_set(dstr, SvPVX_mutable(sstr));
4673                     sv_buf_to_ro(sstr);
4674             } else
4675 #endif
4676             {
4677                     /* SvIsCOW_shared_hash */
4678                     DEBUG_C(PerlIO_printf(Perl_debug_log,
4679                                           "Copy on write: Sharing hash\n"));
4680
4681                     assert (SvTYPE(dstr) >= SVt_PV);
4682                     SvPV_set(dstr,
4683                              HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)))));
4684             }
4685             SvLEN_set(dstr, len);
4686             SvCUR_set(dstr, cur);
4687             SvIsCOW_on(dstr);
4688         } else {
4689             /* Failed the swipe test, and we cannot do copy-on-write either.
4690                Have to copy the string.  */
4691             SvGROW(dstr, cur + 1);      /* inlined from sv_setpvn */
4692             Move(SvPVX_const(sstr),SvPVX(dstr),cur,char);
4693             SvCUR_set(dstr, cur);
4694             *SvEND(dstr) = '\0';
4695         }
4696         if (sflags & SVp_NOK) {
4697             SvNV_set(dstr, SvNVX(sstr));
4698         }
4699         if (sflags & SVp_IOK) {
4700             SvIV_set(dstr, SvIVX(sstr));
4701             if (sflags & SVf_IVisUV)
4702                 SvIsUV_on(dstr);
4703         }
4704         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_NOK|SVp_NOK|SVf_UTF8);
4705         {
4706             const MAGIC * const smg = SvVSTRING_mg(sstr);
4707             if (smg) {
4708                 sv_magic(dstr, NULL, PERL_MAGIC_vstring,
4709                          smg->mg_ptr, smg->mg_len);
4710                 SvRMAGICAL_on(dstr);
4711             }
4712         }
4713     }
4714     else if (sflags & (SVp_IOK|SVp_NOK)) {
4715         (void)SvOK_off(dstr);
4716         SvFLAGS(dstr) |= sflags & (SVf_IOK|SVp_IOK|SVf_IVisUV|SVf_NOK|SVp_NOK);
4717         if (sflags & SVp_IOK) {
4718             /* XXXX Do we want to set IsUV for IV(ROK)?  Be extra safe... */
4719             SvIV_set(dstr, SvIVX(sstr));
4720         }
4721         if (sflags & SVp_NOK) {
4722             SvNV_set(dstr, SvNVX(sstr));
4723         }
4724     }
4725     else {
4726         if (isGV_with_GP(sstr)) {
4727             gv_efullname3(dstr, MUTABLE_GV(sstr), "*");
4728         }
4729         else
4730             (void)SvOK_off(dstr);
4731     }
4732     if (SvTAINTED(sstr))
4733         SvTAINT(dstr);
4734 }
4735
4736
4737 /*
4738 =for apidoc sv_set_undef
4739
4740 Equivalent to C<sv_setsv(sv, &PL_sv_undef)>, but more efficient.
4741 Doesn't handle set magic.
4742
4743 The perl equivalent is C<$sv = undef;>. Note that it doesn't free any string
4744 buffer, unlike C<undef $sv>.
4745
4746 Introduced in perl 5.25.12.
4747
4748 =cut
4749 */
4750
4751 void
4752 Perl_sv_set_undef(pTHX_ SV *sv)
4753 {
4754     U32 type = SvTYPE(sv);
4755
4756     PERL_ARGS_ASSERT_SV_SET_UNDEF;
4757
4758     /* shortcut, NULL, IV, RV */
4759
4760     if (type <= SVt_IV) {
4761         assert(!SvGMAGICAL(sv));
4762         if (SvREADONLY(sv)) {
4763             /* does undeffing PL_sv_undef count as modifying a read-only
4764              * variable? Some XS code does this */
4765             if (sv == &PL_sv_undef)
4766                 return;
4767             Perl_croak_no_modify();
4768         }
4769
4770         if (SvROK(sv)) {
4771             if (SvWEAKREF(sv))
4772                 sv_unref_flags(sv, 0);
4773             else {
4774                 SV *rv = SvRV(sv);
4775                 SvFLAGS(sv) = type; /* quickly turn off all flags */
4776                 SvREFCNT_dec_NN(rv);
4777                 return;
4778             }
4779         }
4780         SvFLAGS(sv) = type; /* quickly turn off all flags */
4781         return;
4782     }
4783
4784     if (SvIS_FREED(sv))
4785         Perl_croak(aTHX_ "panic: attempt to undefine a freed scalar %p",
4786             (void *)sv);
4787
4788     SV_CHECK_THINKFIRST_COW_DROP(sv);
4789
4790     if (isGV_with_GP(sv))
4791         Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
4792                        "Undefined value assigned to typeglob");
4793     else
4794         SvOK_off(sv);
4795 }
4796
4797
4798
4799 /*
4800 =for apidoc sv_setsv_mg
4801
4802 Like C<sv_setsv>, but also handles 'set' magic.
4803
4804 =cut
4805 */
4806
4807 void
4808 Perl_sv_setsv_mg(pTHX_ SV *const dstr, SV *const sstr)
4809 {
4810     PERL_ARGS_ASSERT_SV_SETSV_MG;
4811
4812     sv_setsv(dstr,sstr);
4813     SvSETMAGIC(dstr);
4814 }
4815
4816 #ifdef PERL_ANY_COW
4817 #  define SVt_COW SVt_PV
4818 SV *
4819 Perl_sv_setsv_cow(pTHX_ SV *dstr, SV *sstr)
4820 {
4821     STRLEN cur = SvCUR(sstr);
4822     STRLEN len = SvLEN(sstr);
4823     char *new_pv;
4824 #if defined(PERL_DEBUG_READONLY_COW) && defined(PERL_COPY_ON_WRITE)
4825     const bool already = cBOOL(SvIsCOW(sstr));
4826 #endif
4827
4828     PERL_ARGS_ASSERT_SV_SETSV_COW;
4829 #ifdef DEBUGGING
4830     if (DEBUG_C_TEST) {
4831         PerlIO_printf(Perl_debug_log, "Fast copy on write: %p -> %p\n",
4832                       (void*)sstr, (void*)dstr);
4833         sv_dump(sstr);
4834         if (dstr)
4835                     sv_dump(dstr);
4836     }
4837 #endif
4838     if (dstr) {
4839         if (SvTHINKFIRST(dstr))
4840             sv_force_normal_flags(dstr, SV_COW_DROP_PV);
4841         else if (SvPVX_const(dstr))
4842             Safefree(SvPVX_mutable(dstr));
4843     }
4844     else
4845         new_SV(dstr);
4846     SvUPGRADE(dstr, SVt_COW);
4847
4848     assert (SvPOK(sstr));
4849     assert (SvPOKp(sstr));
4850
4851     if (SvIsCOW(sstr)) {
4852
4853         if (SvLEN(sstr) == 0) {
4854             /* source is a COW shared hash key.  */
4855             DEBUG_C(PerlIO_printf(Perl_debug_log,
4856                                   "Fast copy on write: Sharing hash\n"));
4857             new_pv = HEK_KEY(share_hek_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr))));
4858             goto common_exit;
4859         }
4860         assert(SvCUR(sstr)+1 < SvLEN(sstr));
4861         assert(CowREFCNT(sstr) < SV_COW_REFCNT_MAX);
4862     } else {
4863         assert ((SvFLAGS(sstr) & CAN_COW_MASK) == CAN_COW_FLAGS);
4864         SvUPGRADE(sstr, SVt_COW);
4865         SvIsCOW_on(sstr);
4866         DEBUG_C(PerlIO_printf(Perl_debug_log,
4867                               "Fast copy on write: Converting sstr to COW\n"));
4868         CowREFCNT(sstr) = 0;    
4869     }
4870 #  ifdef PERL_DEBUG_READONLY_COW
4871     if (already) sv_buf_to_rw(sstr);
4872 #  endif
4873     CowREFCNT(sstr)++;  
4874     new_pv = SvPVX_mutable(sstr);
4875     sv_buf_to_ro(sstr);
4876
4877   common_exit:
4878     SvPV_set(dstr, new_pv);
4879     SvFLAGS(dstr) = (SVt_COW|SVf_POK|SVp_POK|SVf_IsCOW);
4880     if (SvUTF8(sstr))
4881         SvUTF8_on(dstr);
4882     SvLEN_set(dstr, len);
4883     SvCUR_set(dstr, cur);
4884 #ifdef DEBUGGING
4885     if (DEBUG_C_TEST)
4886                 sv_dump(dstr);
4887 #endif
4888     return dstr;
4889 }
4890 #endif
4891
4892 /*
4893 =for apidoc sv_setpv_bufsize
4894
4895 Sets the SV to be a string of cur bytes length, with at least
4896 len bytes available. Ensures that there is a null byte at SvEND.
4897 Returns a char * pointer to the SvPV buffer.
4898
4899 =cut
4900 */
4901
4902 char *
4903 Perl_sv_setpv_bufsize(pTHX_ SV *const sv, const STRLEN cur, const STRLEN len)
4904 {
4905     char *pv;
4906
4907     PERL_ARGS_ASSERT_SV_SETPV_BUFSIZE;
4908
4909     SV_CHECK_THINKFIRST_COW_DROP(sv);
4910     SvUPGRADE(sv, SVt_PV);
4911     pv = SvGROW(sv, len + 1);
4912     SvCUR_set(sv, cur);
4913     *(SvEND(sv))= '\0';
4914     (void)SvPOK_only_UTF8(sv);                /* validate pointer */
4915
4916     SvTAINT(sv);
4917     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4918     return pv;
4919 }
4920
4921 /*
4922 =for apidoc sv_setpvn
4923
4924 Copies a string (possibly containing embedded C<NUL> characters) into an SV.
4925 The C<len> parameter indicates the number of
4926 bytes to be copied.  If the C<ptr> argument is NULL the SV will become
4927 undefined.  Does not handle 'set' magic.  See C<L</sv_setpvn_mg>>.
4928
4929 The UTF-8 flag is not changed by this function.  A terminating NUL byte is
4930 guaranteed.
4931
4932 =cut
4933 */
4934
4935 void
4936 Perl_sv_setpvn(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4937 {
4938     char *dptr;
4939
4940     PERL_ARGS_ASSERT_SV_SETPVN;
4941
4942     SV_CHECK_THINKFIRST_COW_DROP(sv);
4943     if (isGV_with_GP(sv))
4944         Perl_croak_no_modify();
4945     if (!ptr) {
4946         (void)SvOK_off(sv);
4947         return;
4948     }
4949     else {
4950         /* len is STRLEN which is unsigned, need to copy to signed */
4951         const IV iv = len;
4952         if (iv < 0)
4953             Perl_croak(aTHX_ "panic: sv_setpvn called with negative strlen %"
4954                        IVdf, iv);
4955     }
4956     SvUPGRADE(sv, SVt_PV);
4957
4958     dptr = SvGROW(sv, len + 1);
4959     Move(ptr,dptr,len,char);
4960     dptr[len] = '\0';
4961     SvCUR_set(sv, len);
4962     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
4963     SvTAINT(sv);
4964     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
4965 }
4966
4967 /*
4968 =for apidoc sv_setpvn_mg
4969
4970 Like C<sv_setpvn>, but also handles 'set' magic.
4971
4972 =cut
4973 */
4974
4975 void
4976 Perl_sv_setpvn_mg(pTHX_ SV *const sv, const char *const ptr, const STRLEN len)
4977 {
4978     PERL_ARGS_ASSERT_SV_SETPVN_MG;
4979
4980     sv_setpvn(sv,ptr,len);
4981     SvSETMAGIC(sv);
4982 }
4983
4984 /*
4985 =for apidoc sv_setpv
4986
4987 Copies a string into an SV.  The string must be terminated with a C<NUL>
4988 character, and not contain embeded C<NUL>'s.
4989 Does not handle 'set' magic.  See C<L</sv_setpv_mg>>.
4990
4991 =cut
4992 */
4993
4994 void
4995 Perl_sv_setpv(pTHX_ SV *const sv, const char *const ptr)
4996 {
4997     STRLEN len;
4998
4999     PERL_ARGS_ASSERT_SV_SETPV;
5000
5001     SV_CHECK_THINKFIRST_COW_DROP(sv);
5002     if (!ptr) {
5003         (void)SvOK_off(sv);
5004         return;
5005     }
5006     len = strlen(ptr);
5007     SvUPGRADE(sv, SVt_PV);
5008
5009     SvGROW(sv, len + 1);
5010     Move(ptr,SvPVX(sv),len+1,char);
5011     SvCUR_set(sv, len);
5012     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5013     SvTAINT(sv);
5014     if (SvTYPE(sv) == SVt_PVCV) CvAUTOLOAD_off(sv);
5015 }
5016
5017 /*
5018 =for apidoc sv_setpv_mg
5019
5020 Like C<sv_setpv>, but also handles 'set' magic.
5021
5022 =cut
5023 */
5024
5025 void
5026 Perl_sv_setpv_mg(pTHX_ SV *const sv, const char *const ptr)
5027 {
5028     PERL_ARGS_ASSERT_SV_SETPV_MG;
5029
5030     sv_setpv(sv,ptr);
5031     SvSETMAGIC(sv);
5032 }
5033
5034 void
5035 Perl_sv_sethek(pTHX_ SV *const sv, const HEK *const hek)
5036 {
5037     PERL_ARGS_ASSERT_SV_SETHEK;
5038
5039     if (!hek) {
5040         return;
5041     }
5042
5043     if (HEK_LEN(hek) == HEf_SVKEY) {
5044         sv_setsv(sv, *(SV**)HEK_KEY(hek));
5045         return;
5046     } else {
5047         const int flags = HEK_FLAGS(hek);
5048         if (flags & HVhek_WASUTF8) {
5049             STRLEN utf8_len = HEK_LEN(hek);
5050             char *as_utf8 = (char *)bytes_to_utf8((U8*)HEK_KEY(hek), &utf8_len);
5051             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
5052             SvUTF8_on(sv);
5053             return;
5054         } else if (flags & HVhek_UNSHARED) {
5055             sv_setpvn(sv, HEK_KEY(hek), HEK_LEN(hek));
5056             if (HEK_UTF8(hek))
5057                 SvUTF8_on(sv);
5058             else SvUTF8_off(sv);
5059             return;
5060         }
5061         {
5062             SV_CHECK_THINKFIRST_COW_DROP(sv);
5063             SvUPGRADE(sv, SVt_PV);
5064             SvPV_free(sv);
5065             SvPV_set(sv,(char *)HEK_KEY(share_hek_hek(hek)));
5066             SvCUR_set(sv, HEK_LEN(hek));
5067             SvLEN_set(sv, 0);
5068             SvIsCOW_on(sv);
5069             SvPOK_on(sv);
5070             if (HEK_UTF8(hek))
5071                 SvUTF8_on(sv);
5072             else SvUTF8_off(sv);
5073             return;
5074         }
5075     }
5076 }
5077
5078
5079 /*
5080 =for apidoc sv_usepvn_flags
5081
5082 Tells an SV to use C<ptr> to find its string value.  Normally the
5083 string is stored inside the SV, but sv_usepvn allows the SV to use an
5084 outside string.  C<ptr> should point to memory that was allocated
5085 by L<C<Newx>|perlclib/Memory Management and String Handling>.  It must be
5086 the start of a C<Newx>-ed block of memory, and not a pointer to the
5087 middle of it (beware of L<C<OOK>|perlguts/Offsets> and copy-on-write),
5088 and not be from a non-C<Newx> memory allocator like C<malloc>.  The
5089 string length, C<len>, must be supplied.  By default this function
5090 will C<Renew> (i.e. realloc, move) the memory pointed to by C<ptr>,
5091 so that pointer should not be freed or used by the programmer after
5092 giving it to C<sv_usepvn>, and neither should any pointers from "behind"
5093 that pointer (e.g. ptr + 1) be used.
5094
5095 If S<C<flags & SV_SMAGIC>> is true, will call C<SvSETMAGIC>.  If
5096 S<C<flags & SV_HAS_TRAILING_NUL>> is true, then C<ptr[len]> must be C<NUL>,
5097 and the realloc
5098 will be skipped (i.e. the buffer is actually at least 1 byte longer than
5099 C<len>, and already meets the requirements for storing in C<SvPVX>).
5100
5101 =for apidoc Amnh||SV_SMAGIC
5102 =for apidoc Amnh||SV_HAS_TRAILING_NUL
5103
5104 =cut
5105 */
5106
5107 void
5108 Perl_sv_usepvn_flags(pTHX_ SV *const sv, char *ptr, const STRLEN len, const U32 flags)
5109 {
5110     STRLEN allocate;
5111
5112     PERL_ARGS_ASSERT_SV_USEPVN_FLAGS;
5113
5114     SV_CHECK_THINKFIRST_COW_DROP(sv);
5115     SvUPGRADE(sv, SVt_PV);
5116     if (!ptr) {
5117         (void)SvOK_off(sv);
5118         if (flags & SV_SMAGIC)
5119             SvSETMAGIC(sv);
5120         return;
5121     }
5122     if (SvPVX_const(sv))
5123         SvPV_free(sv);
5124
5125 #ifdef DEBUGGING
5126     if (flags & SV_HAS_TRAILING_NUL)
5127         assert(ptr[len] == '\0');
5128 #endif
5129
5130     allocate = (flags & SV_HAS_TRAILING_NUL)
5131         ? len + 1 :
5132 #ifdef Perl_safesysmalloc_size
5133         len + 1;
5134 #else 
5135         PERL_STRLEN_ROUNDUP(len + 1);
5136 #endif
5137     if (flags & SV_HAS_TRAILING_NUL) {
5138         /* It's long enough - do nothing.
5139            Specifically Perl_newCONSTSUB is relying on this.  */
5140     } else {
5141 #ifdef DEBUGGING
5142         /* Force a move to shake out bugs in callers.  */
5143         char *new_ptr = (char*)safemalloc(allocate);
5144         Copy(ptr, new_ptr, len, char);
5145         PoisonFree(ptr,len,char);
5146         Safefree(ptr);
5147         ptr = new_ptr;
5148 #else
5149         ptr = (char*) saferealloc (ptr, allocate);
5150 #endif
5151     }
5152 #ifdef Perl_safesysmalloc_size
5153     SvLEN_set(sv, Perl_safesysmalloc_size(ptr));
5154 #else
5155     SvLEN_set(sv, allocate);
5156 #endif
5157     SvCUR_set(sv, len);
5158     SvPV_set(sv, ptr);
5159     if (!(flags & SV_HAS_TRAILING_NUL)) {
5160         ptr[len] = '\0';
5161     }
5162     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5163     SvTAINT(sv);
5164     if (flags & SV_SMAGIC)
5165         SvSETMAGIC(sv);
5166 }
5167
5168
5169 static void
5170 S_sv_uncow(pTHX_ SV * const sv, const U32 flags)
5171 {
5172     assert(SvIsCOW(sv));
5173     {
5174 #ifdef PERL_ANY_COW
5175         const char * const pvx = SvPVX_const(sv);
5176         const STRLEN len = SvLEN(sv);
5177         const STRLEN cur = SvCUR(sv);
5178
5179 #ifdef DEBUGGING
5180         if (DEBUG_C_TEST) {
5181                 PerlIO_printf(Perl_debug_log,
5182                               "Copy on write: Force normal %ld\n",
5183                               (long) flags);
5184                 sv_dump(sv);
5185         }
5186 #endif
5187         SvIsCOW_off(sv);
5188 # ifdef PERL_COPY_ON_WRITE
5189         if (len) {
5190             /* Must do this first, since the CowREFCNT uses SvPVX and
5191             we need to write to CowREFCNT, or de-RO the whole buffer if we are
5192             the only owner left of the buffer. */
5193             sv_buf_to_rw(sv); /* NOOP if RO-ing not supported */
5194             {
5195                 U8 cowrefcnt = CowREFCNT(sv);
5196                 if(cowrefcnt != 0) {
5197                     cowrefcnt--;
5198                     CowREFCNT(sv) = cowrefcnt;
5199                     sv_buf_to_ro(sv);
5200                     goto copy_over;
5201                 }
5202             }
5203             /* Else we are the only owner of the buffer. */
5204         }
5205         else
5206 # endif
5207         {
5208             /* This SV doesn't own the buffer, so need to Newx() a new one:  */
5209             copy_over:
5210             SvPV_set(sv, NULL);
5211             SvCUR_set(sv, 0);
5212             SvLEN_set(sv, 0);
5213             if (flags & SV_COW_DROP_PV) {
5214                 /* OK, so we don't need to copy our buffer.  */
5215                 SvPOK_off(sv);
5216             } else {
5217                 SvGROW(sv, cur + 1);
5218                 Move(pvx,SvPVX(sv),cur,char);
5219                 SvCUR_set(sv, cur);
5220                 *SvEND(sv) = '\0';
5221             }
5222             if (! len) {
5223                         unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5224             }
5225 #ifdef DEBUGGING
5226             if (DEBUG_C_TEST)
5227                 sv_dump(sv);
5228 #endif
5229         }
5230 #else
5231             const char * const pvx = SvPVX_const(sv);
5232             const STRLEN len = SvCUR(sv);
5233             SvIsCOW_off(sv);
5234             SvPV_set(sv, NULL);
5235             SvLEN_set(sv, 0);
5236             if (flags & SV_COW_DROP_PV) {
5237                 /* OK, so we don't need to copy our buffer.  */
5238                 SvPOK_off(sv);
5239             } else {
5240                 SvGROW(sv, len + 1);
5241                 Move(pvx,SvPVX(sv),len,char);
5242                 *SvEND(sv) = '\0';
5243             }
5244             unshare_hek(SvSHARED_HEK_FROM_PV(pvx));
5245 #endif
5246     }
5247 }
5248
5249
5250 /*
5251 =for apidoc sv_force_normal_flags
5252
5253 Undo various types of fakery on an SV, where fakery means
5254 "more than" a string: if the PV is a shared string, make
5255 a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
5256 an C<xpvmg>; if we're a copy-on-write scalar, this is the on-write time when
5257 we do the copy, and is also used locally; if this is a
5258 vstring, drop the vstring magic.  If C<SV_COW_DROP_PV> is set
5259 then a copy-on-write scalar drops its PV buffer (if any) and becomes
5260 C<SvPOK_off> rather than making a copy.  (Used where this
5261 scalar is about to be set to some other value.)  In addition,
5262 the C<flags> parameter gets passed to C<sv_unref_flags()>
5263 when unreffing.  C<sv_force_normal> calls this function
5264 with flags set to 0.
5265
5266 This function is expected to be used to signal to perl that this SV is
5267 about to be written to, and any extra book-keeping needs to be taken care
5268 of.  Hence, it croaks on read-only values.
5269
5270 =for apidoc Amnh||SV_COW_DROP_PV
5271
5272 =cut
5273 */
5274
5275 void
5276 Perl_sv_force_normal_flags(pTHX_ SV *const sv, const U32 flags)
5277 {
5278     PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS;
5279
5280     if (SvREADONLY(sv))
5281         Perl_croak_no_modify();
5282     else if (SvIsCOW(sv) && LIKELY(SvTYPE(sv) != SVt_PVHV))
5283         S_sv_uncow(aTHX_ sv, flags);
5284     if (SvROK(sv))
5285         sv_unref_flags(sv, flags);
5286     else if (SvFAKE(sv) && isGV_with_GP(sv))
5287         sv_unglob(sv, flags);
5288     else if (SvFAKE(sv) && isREGEXP(sv)) {
5289         /* Need to downgrade the REGEXP to a simple(r) scalar. This is analogous
5290            to sv_unglob. We only need it here, so inline it.  */
5291         const bool islv = SvTYPE(sv) == SVt_PVLV;
5292         const svtype new_type =
5293           islv ? SVt_NULL : SvMAGIC(sv) || SvSTASH(sv) ? SVt_PVMG : SVt_PV;
5294         SV *const temp = newSV_type(new_type);
5295         regexp *old_rx_body;
5296
5297         if (new_type == SVt_PVMG) {
5298             SvMAGIC_set(temp, SvMAGIC(sv));
5299             SvMAGIC_set(sv, NULL);
5300             SvSTASH_set(temp, SvSTASH(sv));
5301             SvSTASH_set(sv, NULL);
5302         }
5303         if (!islv)
5304             SvCUR_set(temp, SvCUR(sv));
5305         /* Remember that SvPVX is in the head, not the body. */
5306         assert(ReANY((REGEXP *)sv)->mother_re);
5307
5308         if (islv) {
5309             /* LV-as-regex has sv->sv_any pointing to an XPVLV body,
5310              * whose xpvlenu_rx field points to the regex body */
5311             XPV *xpv = (XPV*)(SvANY(sv));
5312             old_rx_body = xpv->xpv_len_u.xpvlenu_rx;
5313             xpv->xpv_len_u.xpvlenu_rx = NULL;
5314         }
5315         else
5316             old_rx_body = ReANY((REGEXP *)sv);
5317
5318         /* Their buffer is already owned by someone else. */
5319         if (flags & SV_COW_DROP_PV) {
5320             /* SvLEN is already 0.  For SVt_REGEXP, we have a brand new
5321                zeroed body.  For SVt_PVLV, we zeroed it above (len field
5322                a union with xpvlenu_rx) */
5323             assert(!SvLEN(islv ? sv : temp));
5324             sv->sv_u.svu_pv = 0;
5325         }
5326         else {
5327             sv->sv_u.svu_pv = savepvn(RX_WRAPPED((REGEXP *)sv), SvCUR(sv));
5328             SvLEN_set(islv ? sv : temp, SvCUR(sv)+1);
5329             SvPOK_on(sv);
5330         }
5331
5332         /* Now swap the rest of the bodies. */
5333
5334         SvFAKE_off(sv);
5335         if (!islv) {
5336             SvFLAGS(sv) &= ~SVTYPEMASK;
5337             SvFLAGS(sv) |= new_type;
5338             SvANY(sv) = SvANY(temp);
5339         }
5340
5341         SvFLAGS(temp) &= ~(SVTYPEMASK);
5342         SvFLAGS(temp) |= SVt_REGEXP|SVf_FAKE;
5343         SvANY(temp) = old_rx_body;
5344
5345         SvREFCNT_dec_NN(temp);
5346     }
5347     else if (SvVOK(sv)) sv_unmagic(sv, PERL_MAGIC_vstring);
5348 }
5349
5350 /*
5351 =for apidoc sv_chop
5352
5353 Efficient removal of characters from the beginning of the string buffer.
5354 C<SvPOK(sv)>, or at least C<SvPOKp(sv)>, must be true and C<ptr> must be a
5355 pointer to somewhere inside the string buffer.  C<ptr> becomes the first
5356 character of the adjusted string.  Uses the C<OOK> hack.  On return, only
5357 C<SvPOK(sv)> and C<SvPOKp(sv)> among the C<OK> flags will be true.
5358
5359 Beware: after this function returns, C<ptr> and SvPVX_const(sv) may no longer
5360 refer to the same chunk of data.
5361
5362 The unfortunate similarity of this function's name to that of Perl's C<chop>
5363 operator is strictly coincidental.  This function works from the left;
5364 C<chop> works from the right.
5365
5366 =cut
5367 */
5368
5369 void
5370 Perl_sv_chop(pTHX_ SV *const sv, const char *const ptr)
5371 {
5372     STRLEN delta;
5373     STRLEN old_delta;
5374     U8 *p;
5375 #ifdef DEBUGGING
5376     const U8 *evacp;
5377     STRLEN evacn;
5378 #endif
5379     STRLEN max_delta;
5380
5381     PERL_ARGS_ASSERT_SV_CHOP;
5382
5383     if (!ptr || !SvPOKp(sv))
5384         return;
5385     delta = ptr - SvPVX_const(sv);
5386     if (!delta) {
5387         /* Nothing to do.  */
5388         return;
5389     }
5390     max_delta = SvLEN(sv) ? SvLEN(sv) : SvCUR(sv);
5391     if (delta > max_delta)
5392         Perl_croak(aTHX_ "panic: sv_chop ptr=%p, start=%p, end=%p",
5393                    ptr, SvPVX_const(sv), SvPVX_const(sv) + max_delta);
5394     /* SvPVX(sv) may move in SV_CHECK_THINKFIRST(sv), so don't use ptr any more */
5395     SV_CHECK_THINKFIRST(sv);
5396     SvPOK_only_UTF8(sv);
5397
5398     if (!SvOOK(sv)) {
5399         if (!SvLEN(sv)) { /* make copy of shared string */
5400             const char *pvx = SvPVX_const(sv);
5401             const STRLEN len = SvCUR(sv);
5402             SvGROW(sv, len + 1);
5403             Move(pvx,SvPVX(sv),len,char);
5404             *SvEND(sv) = '\0';
5405         }
5406         SvOOK_on(sv);
5407         old_delta = 0;
5408     } else {
5409         SvOOK_offset(sv, old_delta);
5410     }
5411     SvLEN_set(sv, SvLEN(sv) - delta);
5412     SvCUR_set(sv, SvCUR(sv) - delta);
5413     SvPV_set(sv, SvPVX(sv) + delta);
5414
5415     p = (U8 *)SvPVX_const(sv);
5416
5417 #ifdef DEBUGGING
5418     /* how many bytes were evacuated?  we will fill them with sentinel
5419        bytes, except for the part holding the new offset of course. */
5420     evacn = delta;
5421     if (old_delta)
5422         evacn += (old_delta < 0x100 ? 1 : 1 + sizeof(STRLEN));
5423     assert(evacn);
5424     assert(evacn <= delta + old_delta);
5425     evacp = p - evacn;
5426 #endif
5427
5428     /* This sets 'delta' to the accumulated value of all deltas so far */
5429     delta += old_delta;
5430     assert(delta);
5431
5432     /* If 'delta' fits in a byte, store it just prior to the new beginning of
5433      * the string; otherwise store a 0 byte there and store 'delta' just prior
5434      * to that, using as many bytes as a STRLEN occupies.  Thus it overwrites a
5435      * portion of the chopped part of the string */
5436     if (delta < 0x100) {
5437         *--p = (U8) delta;
5438     } else {
5439         *--p = 0;
5440         p -= sizeof(STRLEN);
5441         Copy((U8*)&delta, p, sizeof(STRLEN), U8);
5442     }
5443
5444 #ifdef DEBUGGING
5445     /* Fill the preceding buffer with sentinals to verify that no-one is
5446        using it.  */
5447     while (p > evacp) {
5448         --p;
5449         *p = (U8)PTR2UV(p);
5450     }
5451 #endif
5452 }
5453
5454 /*
5455 =for apidoc sv_catpvn
5456
5457 Concatenates the string onto the end of the string which is in the SV.
5458 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
5459 status set, then the bytes appended should be valid UTF-8.
5460 Handles 'get' magic, but not 'set' magic.  See C<L</sv_catpvn_mg>>.
5461
5462 =for apidoc sv_catpvn_flags
5463
5464 Concatenates the string onto the end of the string which is in the SV.  The
5465 C<len> indicates number of bytes to copy.
5466
5467 By default, the string appended is assumed to be valid UTF-8 if the SV has
5468 the UTF-8 status set, and a string of bytes otherwise.  One can force the
5469 appended string to be interpreted as UTF-8 by supplying the C<SV_CATUTF8>
5470 flag, and as bytes by supplying the C<SV_CATBYTES> flag; the SV or the
5471 string appended will be upgraded to UTF-8 if necessary.
5472
5473 If C<flags> has the C<SV_SMAGIC> bit set, will
5474 C<L</mg_set>> on C<dsv> afterwards if appropriate.
5475 C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
5476 in terms of this function.
5477
5478 =for apidoc Amnh||SV_CATUTF8
5479 =for apidoc Amnh||SV_CATBYTES
5480
5481 =cut
5482 */
5483
5484 void
5485 Perl_sv_catpvn_flags(pTHX_ SV *const dsv, const char *sstr, const STRLEN slen, const I32 flags)
5486 {
5487     STRLEN dlen;
5488     const char * const dstr = SvPV_force_flags(dsv, dlen, flags);
5489
5490     PERL_ARGS_ASSERT_SV_CATPVN_FLAGS;
5491     assert((flags & (SV_CATBYTES|SV_CATUTF8)) != (SV_CATBYTES|SV_CATUTF8));
5492
5493     if (!(flags & SV_CATBYTES) || !SvUTF8(dsv)) {
5494       if (flags & SV_CATUTF8 && !SvUTF8(dsv)) {
5495          sv_utf8_upgrade_flags_grow(dsv, 0, slen + 1);
5496          dlen = SvCUR(dsv);
5497       }
5498       else SvGROW(dsv, dlen + slen + 3);
5499       if (sstr == dstr)
5500         sstr = SvPVX_const(dsv);
5501       Move(sstr, SvPVX(dsv) + dlen, slen, char);
5502       SvCUR_set(dsv, SvCUR(dsv) + slen);
5503     }
5504     else {
5505         /* We inline bytes_to_utf8, to avoid an extra malloc. */
5506         const char * const send = sstr + slen;
5507         U8 *d;
5508
5509         /* Something this code does not account for, which I think is
5510            impossible; it would require the same pv to be treated as
5511            bytes *and* utf8, which would indicate a bug elsewhere. */
5512         assert(sstr != dstr);
5513
5514         SvGROW(dsv, dlen + slen * 2 + 3);
5515         d = (U8 *)SvPVX(dsv) + dlen;
5516
5517         while (sstr < send) {
5518             append_utf8_from_native_byte(*sstr, &d);
5519             sstr++;
5520         }
5521         SvCUR_set(dsv, d-(const U8 *)SvPVX(dsv));
5522     }
5523     *SvEND(dsv) = '\0';
5524     (void)SvPOK_only_UTF8(dsv);         /* validate pointer */
5525     SvTAINT(dsv);
5526     if (flags & SV_SMAGIC)
5527         SvSETMAGIC(dsv);
5528 }
5529
5530 /*
5531 =for apidoc sv_catsv
5532
5533 Concatenates the string from SV C<ssv> onto the end of the string in SV
5534 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5535 Handles 'get' magic on both SVs, but no 'set' magic.  See C<L</sv_catsv_mg>>
5536 and C<L</sv_catsv_nomg>>.
5537
5538 =for apidoc sv_catsv_flags
5539
5540 Concatenates the string from SV C<ssv> onto the end of the string in SV
5541 C<dsv>.  If C<ssv> is null, does nothing; otherwise modifies only C<dsv>.
5542 If C<flags> has the C<SV_GMAGIC> bit set, will call C<L</mg_get>> on both SVs if
5543 appropriate.  If C<flags> has the C<SV_SMAGIC> bit set, C<L</mg_set>> will be called on
5544 the modified SV afterward, if appropriate.  C<sv_catsv>, C<sv_catsv_nomg>,
5545 and C<sv_catsv_mg> are implemented in terms of this function.
5546
5547 =cut */
5548
5549 void
5550 Perl_sv_catsv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
5551 {
5552     PERL_ARGS_ASSERT_SV_CATSV_FLAGS;
5553
5554     if (ssv) {
5555         STRLEN slen;
5556         const char *spv = SvPV_flags_const(ssv, slen, flags);
5557         if (flags & SV_GMAGIC)
5558                 SvGETMAGIC(dsv);
5559         sv_catpvn_flags(dsv, spv, slen,
5560                             DO_UTF8(ssv) ? SV_CATUTF8 : SV_CATBYTES);
5561         if (flags & SV_SMAGIC)
5562                 SvSETMAGIC(dsv);
5563     }
5564 }
5565
5566 /*
5567 =for apidoc sv_catpv
5568
5569 Concatenates the C<NUL>-terminated string onto the end of the string which is
5570 in the SV.
5571 If the SV has the UTF-8 status set, then the bytes appended should be
5572 valid UTF-8.  Handles 'get' magic, but not 'set' magic.  See
5573 C<L</sv_catpv_mg>>.
5574
5575 =cut */
5576
5577 void
5578 Perl_sv_catpv(pTHX_ SV *const sv, const char *ptr)
5579 {
5580     STRLEN len;
5581     STRLEN tlen;
5582     char *junk;
5583
5584     PERL_ARGS_ASSERT_SV_CATPV;
5585
5586     if (!ptr)
5587         return;
5588     junk = SvPV_force(sv, tlen);
5589     len = strlen(ptr);
5590     SvGROW(sv, tlen + len + 1);
5591     if (ptr == junk)
5592         ptr = SvPVX_const(sv);
5593     Move(ptr,SvPVX(sv)+tlen,len+1,char);
5594     SvCUR_set(sv, SvCUR(sv) + len);
5595     (void)SvPOK_only_UTF8(sv);          /* validate pointer */
5596     SvTAINT(sv);
5597 }
5598
5599 /*
5600 =for apidoc sv_catpv_flags
5601
5602 Concatenates the C<NUL>-terminated string onto the end of the string which is
5603 in the SV.
5604 If the SV has the UTF-8 status set, then the bytes appended should
5605 be valid UTF-8.  If C<flags> has the C<SV_SMAGIC> bit set, will C<L</mg_set>>
5606 on the modified SV if appropriate.
5607
5608 =cut
5609 */
5610
5611 void
5612 Perl_sv_catpv_flags(pTHX_ SV *dstr, const char *sstr, const I32 flags)
5613 {
5614     PERL_ARGS_ASSERT_SV_CATPV_FLAGS;
5615     sv_catpvn_flags(dstr, sstr, strlen(sstr), flags);
5616 }
5617
5618 /*
5619 =for apidoc sv_catpv_mg
5620
5621 Like C<sv_catpv>, but also handles 'set' magic.
5622
5623 =cut
5624 */
5625
5626 void
5627 Perl_sv_catpv_mg(pTHX_ SV *const sv, const char *const ptr)
5628 {
5629     PERL_ARGS_ASSERT_SV_CATPV_MG;
5630
5631     sv_catpv(sv,ptr);
5632     SvSETMAGIC(sv);
5633 }
5634
5635 /*
5636 =for apidoc newSV
5637
5638 Creates a new SV.  A non-zero C<len> parameter indicates the number of
5639 bytes of preallocated string space the SV should have.  An extra byte for a
5640 trailing C<NUL> is also reserved.  (C<SvPOK> is not set for the SV even if string
5641 space is allocated.)  The reference count for the new SV is set to 1.
5642
5643 In 5.9.3, C<newSV()> replaces the older C<NEWSV()> API, and drops the first
5644 parameter, I<x>, a debug aid which allowed callers to identify themselves.
5645 This aid has been superseded by a new build option, C<PERL_MEM_LOG> (see
5646 L<perlhacktips/PERL_MEM_LOG>).  The older API is still there for use in XS
5647 modules supporting older perls.
5648
5649 =cut
5650 */
5651
5652 SV *
5653 Perl_newSV(pTHX_ const STRLEN len)
5654 {
5655     SV *sv;
5656
5657     new_SV(sv);
5658     if (len) {
5659         sv_grow(sv, len + 1);
5660     }
5661     return sv;
5662 }
5663 /*
5664 =for apidoc sv_magicext
5665
5666 Adds magic to an SV, upgrading it if necessary.  Applies the
5667 supplied C<vtable> and returns a pointer to the magic added.
5668
5669 Note that C<sv_magicext> will allow things that C<sv_magic> will not.
5670 In particular, you can add magic to C<SvREADONLY> SVs, and add more than
5671 one instance of the same C<how>.
5672
5673 If C<namlen> is greater than zero then a C<savepvn> I<copy> of C<name> is
5674 stored, if C<namlen> is zero then C<name> is stored as-is and - as another
5675 special case - if C<(name && namlen == HEf_SVKEY)> then C<name> is assumed
5676 to contain an SV* and is stored as-is with its C<REFCNT> incremented.
5677
5678 (This is now used as a subroutine by C<sv_magic>.)
5679
5680 =cut
5681 */
5682 MAGIC * 
5683 Perl_sv_magicext(pTHX_ SV *const sv, SV *const obj, const int how, 
5684                 const MGVTBL *const vtable, const char *const name, const I32 namlen)
5685 {
5686     MAGIC* mg;
5687
5688     PERL_ARGS_ASSERT_SV_MAGICEXT;
5689
5690     SvUPGRADE(sv, SVt_PVMG);
5691     Newxz(mg, 1, MAGIC);
5692     mg->mg_moremagic = SvMAGIC(sv);
5693     SvMAGIC_set(sv, mg);
5694
5695     /* Sometimes a magic contains a reference loop, where the sv and
5696        object refer to each other.  To prevent a reference loop that
5697        would prevent such objects being freed, we look for such loops
5698        and if we find one we avoid incrementing the object refcount.
5699
5700        Note we cannot do this to avoid self-tie loops as intervening RV must
5701        have its REFCNT incremented to keep it in existence.
5702
5703     */
5704     if (!obj || obj == sv ||
5705         how == PERL_MAGIC_arylen ||
5706         how == PERL_MAGIC_regdata ||
5707         how == PERL_MAGIC_regdatum ||
5708         how == PERL_MAGIC_symtab ||
5709         (SvTYPE(obj) == SVt_PVGV &&
5710             (GvSV(obj) == sv || GvHV(obj) == (const HV *)sv
5711              || GvAV(obj) == (const AV *)sv || GvCV(obj) == (const CV *)sv
5712              || GvIOp(obj) == (const IO *)sv || GvFORM(obj) == (const CV *)sv)))
5713     {
5714         mg->mg_obj = obj;
5715     }
5716     else {
5717         mg->mg_obj = SvREFCNT_inc_simple(obj);
5718         mg->mg_flags |= MGf_REFCOUNTED;
5719     }
5720
5721     /* Normal self-ties simply pass a null object, and instead of
5722        using mg_obj directly, use the SvTIED_obj macro to produce a
5723        new RV as needed.  For glob "self-ties", we are tieing the PVIO
5724        with an RV obj pointing to the glob containing the PVIO.  In
5725        this case, to avoid a reference loop, we need to weaken the
5726        reference.
5727     */
5728
5729     if (how == PERL_MAGIC_tiedscalar && SvTYPE(sv) == SVt_PVIO &&
5730         obj && SvROK(obj) && GvIO(SvRV(obj)) == (const IO *)sv)
5731     {
5732       sv_rvweaken(obj);
5733     }
5734
5735     mg->mg_type = how;
5736     mg->mg_len = namlen;
5737     if (name) {
5738         if (namlen > 0)
5739             mg->mg_ptr = savepvn(name, namlen);
5740         else if (namlen == HEf_SVKEY) {
5741             /* Yes, this is casting away const. This is only for the case of
5742                HEf_SVKEY. I think we need to document this aberation of the
5743                constness of the API, rather than making name non-const, as
5744                that change propagating outwards a long way.  */
5745             mg->mg_ptr = (char*)SvREFCNT_inc_simple_NN((SV *)name);
5746         } else
5747             mg->mg_ptr = (char *) name;
5748     }
5749     mg->mg_virtual = (MGVTBL *) vtable;
5750
5751     mg_magical(sv);
5752     return mg;
5753 }
5754
5755 MAGIC *
5756 Perl_sv_magicext_mglob(pTHX_ SV *sv)
5757 {
5758     PERL_ARGS_ASSERT_SV_MAGICEXT_MGLOB;
5759     if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y') {
5760         /* This sv is only a delegate.  //g magic must be attached to
5761            its target. */
5762         vivify_defelem(sv);
5763         sv = LvTARG(sv);
5764     }
5765     return sv_magicext(sv, NULL, PERL_MAGIC_regex_global,
5766                        &PL_vtbl_mglob, 0, 0);
5767 }
5768
5769 /*
5770 =for apidoc sv_magic
5771
5772 Adds magic to an SV.  First upgrades C<sv> to type C<SVt_PVMG> if
5773 necessary, then adds a new magic item of type C<how> to the head of the
5774 magic list.
5775
5776 See C<L</sv_magicext>> (which C<sv_magic> now calls) for a description of the
5777 handling of the C<name> and C<namlen> arguments.
5778
5779 You need to use C<sv_magicext> to add magic to C<SvREADONLY> SVs and also
5780 to add more than one instance of the same C<how>.
5781
5782 =cut
5783 */
5784
5785 void
5786 Perl_sv_magic(pTHX_ SV *const sv, SV *const obj, const int how,
5787              const char *const name, const I32 namlen)
5788 {
5789     const MGVTBL *vtable;
5790     MAGIC* mg;
5791     unsigned int flags;
5792     unsigned int vtable_index;
5793
5794     PERL_ARGS_ASSERT_SV_MAGIC;
5795
5796     if (how < 0 || (unsigned)how >= C_ARRAY_LENGTH(PL_magic_data)
5797         || ((flags = PL_magic_data[how]),
5798             (vtable_index = flags & PERL_MAGIC_VTABLE_MASK)
5799             > magic_vtable_max))
5800         Perl_croak(aTHX_ "Don't know how to handle magic of type \\%o", how);
5801
5802     /* PERL_MAGIC_ext is reserved for use by extensions not perl internals.
5803        Useful for attaching extension internal data to perl vars.
5804        Note that multiple extensions may clash if magical scalars
5805        etc holding private data from one are passed to another. */
5806
5807     vtable = (vtable_index == magic_vtable_max)
5808         ? NULL : PL_magic_vtables + vtable_index;
5809
5810     if (SvREADONLY(sv)) {
5811         if (
5812             !PERL_MAGIC_TYPE_READONLY_ACCEPTABLE(how)
5813            )
5814         {
5815             Perl_croak_no_modify();
5816         }
5817     }
5818     if (SvMAGICAL(sv) || (how == PERL_MAGIC_taint && SvTYPE(sv) >= SVt_PVMG)) {
5819         if (SvMAGIC(sv) && (mg = mg_find(sv, how))) {
5820             /* sv_magic() refuses to add a magic of the same 'how' as an
5821                existing one
5822              */
5823             if (how == PERL_MAGIC_taint)
5824                 mg->mg_len |= 1;
5825             return;
5826         }
5827     }
5828
5829     /* Force pos to be stored as characters, not bytes. */
5830     if (SvMAGICAL(sv) && DO_UTF8(sv)
5831       && (mg = mg_find(sv, PERL_MAGIC_regex_global))
5832       && mg->mg_len != -1
5833       && mg->mg_flags & MGf_BYTES) {
5834         mg->mg_len = (SSize_t)sv_pos_b2u_flags(sv, (STRLEN)mg->mg_len,
5835                                                SV_CONST_RETURN);
5836         mg->mg_flags &= ~MGf_BYTES;
5837     }
5838
5839     /* Rest of work is done else where */
5840     mg = sv_magicext(sv,obj,how,vtable,name,namlen);
5841
5842     switch (how) {
5843     case PERL_MAGIC_taint:
5844         mg->mg_len = 1;
5845         break;
5846     case PERL_MAGIC_ext:
5847     case PERL_MAGIC_dbfile:
5848         SvRMAGICAL_on(sv);
5849         break;
5850     }
5851 }
5852
5853 static int
5854 S_sv_unmagicext_flags(pTHX_ SV *const sv, const int type, MGVTBL *vtbl, const U32 flags)
5855 {
5856     MAGIC* mg;
5857     MAGIC** mgp;
5858
5859     assert(flags <= 1);
5860
5861     if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
5862         return 0;
5863     mgp = &(((XPVMG*) SvANY(sv))->xmg_u.xmg_magic);
5864     for (mg = *mgp; mg; mg = *mgp) {
5865         const MGVTBL* const virt = mg->mg_virtual;
5866         if (mg->mg_type == type && (!flags || virt == vtbl)) {
5867             *mgp = mg->mg_moremagic;
5868             if (virt && virt->svt_free)
5869                 virt->svt_free(aTHX_ sv, mg);
5870             if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
5871                 if (mg->mg_len > 0)
5872                     Safefree(mg->mg_ptr);
5873                 else if (mg->mg_len == HEf_SVKEY)
5874                     SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
5875                 else if (mg->mg_type == PERL_MAGIC_utf8)
5876                     Safefree(mg->mg_ptr);
5877             }
5878             if (mg->mg_flags & MGf_REFCOUNTED)
5879                 SvREFCNT_dec(mg->mg_obj);
5880             Safefree(mg);
5881         }
5882         else
5883             mgp = &mg->mg_moremagic;
5884     }
5885     if (SvMAGIC(sv)) {
5886         if (SvMAGICAL(sv))      /* if we're under save_magic, wait for restore_magic; */
5887             mg_magical(sv);     /*    else fix the flags now */
5888     }
5889     else
5890         SvMAGICAL_off(sv);
5891
5892     return 0;
5893 }
5894
5895 /*
5896 =for apidoc sv_unmagic
5897
5898 Removes all magic of type C<type> from an SV.
5899
5900 =cut
5901 */
5902
5903 int
5904 Perl_sv_unmagic(pTHX_ SV *const sv, const int type)
5905 {
5906     PERL_ARGS_ASSERT_SV_UNMAGIC;
5907     return S_sv_unmagicext_flags(aTHX_ sv, type, NULL, 0);
5908 }
5909
5910 /*
5911 =for apidoc sv_unmagicext
5912
5913 Removes all magic of type C<type> with the specified C<vtbl> from an SV.
5914
5915 =cut
5916 */
5917
5918 int
5919 Perl_sv_unmagicext(pTHX_ SV *const sv, const int type, MGVTBL *vtbl)
5920 {
5921     PERL_ARGS_ASSERT_SV_UNMAGICEXT;
5922     return S_sv_unmagicext_flags(aTHX_ sv, type, vtbl, 1);
5923 }
5924
5925 /*
5926 =for apidoc sv_rvweaken
5927
5928 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
5929 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
5930 push a back-reference to this RV onto the array of backreferences
5931 associated with that magic.  If the RV is magical, set magic will be
5932 called after the RV is cleared.  Silently ignores C<undef> and warns
5933 on already-weak references.
5934
5935 =cut
5936 */
5937
5938 SV *
5939 Perl_sv_rvweaken(pTHX_ SV *const sv)
5940 {
5941     SV *tsv;
5942
5943     PERL_ARGS_ASSERT_SV_RVWEAKEN;
5944
5945     if (!SvOK(sv))  /* let undefs pass */
5946         return sv;
5947     if (!SvROK(sv))
5948         Perl_croak(aTHX_ "Can't weaken a nonreference");
5949     else if (SvWEAKREF(sv)) {
5950         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is already weak");
5951         return sv;
5952     }
5953     else if (SvREADONLY(sv)) croak_no_modify();
5954     tsv = SvRV(sv);
5955     Perl_sv_add_backref(aTHX_ tsv, sv);
5956     SvWEAKREF_on(sv);
5957     SvREFCNT_dec_NN(tsv);
5958     return sv;
5959 }
5960
5961 /*
5962 =for apidoc sv_rvunweaken
5963
5964 Unweaken a reference: Clear the C<SvWEAKREF> flag on this RV; remove
5965 the backreference to this RV from the array of backreferences
5966 associated with the target SV, increment the refcount of the target.
5967 Silently ignores C<undef> and warns on non-weak references.
5968
5969 =cut
5970 */
5971
5972 SV *
5973 Perl_sv_rvunweaken(pTHX_ SV *const sv)
5974 {
5975     SV *tsv;
5976
5977     PERL_ARGS_ASSERT_SV_RVUNWEAKEN;
5978
5979     if (!SvOK(sv)) /* let undefs pass */
5980         return sv;
5981     if (!SvROK(sv))
5982         Perl_croak(aTHX_ "Can't unweaken a nonreference");
5983     else if (!SvWEAKREF(sv)) {
5984         Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Reference is not weak");
5985         return sv;
5986     }
5987     else if (SvREADONLY(sv)) croak_no_modify();
5988
5989     tsv = SvRV(sv);
5990     SvWEAKREF_off(sv);
5991     SvROK_on(sv);
5992     SvREFCNT_inc_NN(tsv);
5993     Perl_sv_del_backref(aTHX_ tsv, sv);
5994     return sv;
5995 }
5996
5997 /*
5998 =for apidoc sv_get_backrefs
5999
6000 If C<sv> is the target of a weak reference then it returns the back
6001 references structure associated with the sv; otherwise return C<NULL>.
6002
6003 When returning a non-null result the type of the return is relevant. If it
6004 is an AV then the elements of the AV are the weak reference RVs which
6005 point at this item. If it is any other type then the item itself is the
6006 weak reference.
6007
6008 See also C<Perl_sv_add_backref()>, C<Perl_sv_del_backref()>,
6009 C<Perl_sv_kill_backrefs()>
6010
6011 =cut
6012 */
6013
6014 SV *
6015 Perl_sv_get_backrefs(SV *const sv)
6016 {
6017     SV *backrefs= NULL;
6018
6019     PERL_ARGS_ASSERT_SV_GET_BACKREFS;
6020
6021     /* find slot to store array or singleton backref */
6022
6023     if (SvTYPE(sv) == SVt_PVHV) {
6024         if (SvOOK(sv)) {
6025             struct xpvhv_aux * const iter = HvAUX((HV *)sv);
6026             backrefs = (SV *)iter->xhv_backreferences;
6027         }
6028     } else if (SvMAGICAL(sv)) {
6029         MAGIC *mg = mg_find(sv, PERL_MAGIC_backref);
6030         if (mg)
6031             backrefs = mg->mg_obj;
6032     }
6033     return backrefs;
6034 }
6035
6036 /* Give tsv backref magic if it hasn't already got it, then push a
6037  * back-reference to sv onto the array associated with the backref magic.
6038  *
6039  * As an optimisation, if there's only one backref and it's not an AV,
6040  * store it directly in the HvAUX or mg_obj slot, avoiding the need to
6041  * allocate an AV. (Whether the slot holds an AV tells us whether this is
6042  * active.)
6043  */
6044
6045 /* A discussion about the backreferences array and its refcount:
6046  *
6047  * The AV holding the backreferences is pointed to either as the mg_obj of
6048  * PERL_MAGIC_backref, or in the specific case of a HV, from the
6049  * xhv_backreferences field. The array is created with a refcount
6050  * of 2. This means that if during global destruction the array gets
6051  * picked on before its parent to have its refcount decremented by the
6052  * random zapper, it won't actually be freed, meaning it's still there for
6053  * when its parent gets freed.
6054  *
6055  * When the parent SV is freed, the extra ref is killed by
6056  * Perl_sv_kill_backrefs.  The other ref is killed, in the case of magic,
6057  * by mg_free() / MGf_REFCOUNTED, or for a hash, by Perl_hv_kill_backrefs.
6058  *
6059  * When a single backref SV is stored directly, it is not reference
6060  * counted.
6061  */
6062
6063 void
6064 Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv)
6065 {
6066     SV **svp;
6067     AV *av = NULL;
6068     MAGIC *mg = NULL;
6069
6070     PERL_ARGS_ASSERT_SV_ADD_BACKREF;
6071
6072     /* find slot to store array or singleton backref */
6073
6074     if (SvTYPE(tsv) == SVt_PVHV) {
6075         svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
6076     } else {
6077         if (SvMAGICAL(tsv))
6078             mg = mg_find(tsv, PERL_MAGIC_backref);
6079         if (!mg)
6080             mg = sv_magicext(tsv, NULL, PERL_MAGIC_backref, &PL_vtbl_backref, NULL, 0);
6081         svp = &(mg->mg_obj);
6082     }
6083
6084     /* create or retrieve the array */
6085
6086     if (   (!*svp && SvTYPE(sv) == SVt_PVAV)
6087         || (*svp && SvTYPE(*svp) != SVt_PVAV)
6088     ) {
6089         /* create array */
6090         if (mg)
6091             mg->mg_flags |= MGf_REFCOUNTED;
6092         av = newAV();
6093         AvREAL_off(av);
6094         SvREFCNT_inc_simple_void_NN(av);
6095         /* av now has a refcnt of 2; see discussion above */
6096         av_extend(av, *svp ? 2 : 1);
6097         if (*svp) {
6098             /* move single existing backref to the array */
6099             AvARRAY(av)[++AvFILLp(av)] = *svp; /* av_push() */
6100         }
6101         *svp = (SV*)av;
6102     }
6103     else {
6104         av = MUTABLE_AV(*svp);
6105         if (!av) {
6106             /* optimisation: store single backref directly in HvAUX or mg_obj */
6107             *svp = sv;
6108             return;
6109         }
6110         assert(SvTYPE(av) == SVt_PVAV);
6111         if (AvFILLp(av) >= AvMAX(av)) {
6112             av_extend(av, AvFILLp(av)+1);
6113         }
6114     }
6115     /* push new backref */
6116     AvARRAY(av)[++AvFILLp(av)] = sv; /* av_push() */
6117 }
6118
6119 /* delete a back-reference to ourselves from the backref magic associated
6120  * with the SV we point to.
6121  */
6122
6123 void
6124 Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv)
6125 {
6126     SV **svp = NULL;
6127
6128     PERL_ARGS_ASSERT_SV_DEL_BACKREF;
6129
6130     if (SvTYPE(tsv) == SVt_PVHV) {
6131         if (SvOOK(tsv))
6132             svp = (SV**)Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(tsv));
6133     }
6134     else if (SvIS_FREED(tsv) && PL_phase == PERL_PHASE_DESTRUCT) {
6135         /* It's possible for the the last (strong) reference to tsv to have
6136            become freed *before* the last thing holding a weak reference.
6137            If both survive longer than the backreferences array, then when
6138            the referent's reference count drops to 0 and it is freed, it's
6139            not able to chase the backreferences, so they aren't NULLed.
6140
6141            For example, a CV holds a weak reference to its stash. If both the
6142            CV and the stash survive longer than the backreferences array,
6143            and the CV gets picked for the SvBREAK() treatment first,
6144            *and* it turns out that the stash is only being kept alive because
6145            of an our variable in the pad of the CV, then midway during CV
6146            destruction the stash gets freed, but CvSTASH() isn't set to NULL.
6147            It ends up pointing to the freed HV. Hence it's chased in here, and
6148            if this block wasn't here, it would hit the !svp panic just below.
6149
6150            I don't believe that "better" destruction ordering is going to help
6151            here - during global destruction there's always going to be the
6152            chance that something goes out of order. We've tried to make it
6153            foolproof before, and it only resulted in evolutionary pressure on
6154            fools. Which made us look foolish for our hubris. :-(
6155         */
6156         return;
6157     }
6158     else {
6159         MAGIC *const mg
6160             = SvMAGICAL(tsv) ? mg_find(tsv, PERL_MAGIC_backref) : NULL;
6161         svp =  mg ? &(mg->mg_obj) : NULL;
6162     }
6163
6164     if (!svp)
6165         Perl_croak(aTHX_ "panic: del_backref, svp=0");
6166     if (!*svp) {
6167         /* It's possible that sv is being freed recursively part way through the
6168            freeing of tsv. If this happens, the backreferences array of tsv has
6169            already been freed, and so svp will be NULL. If this is the case,
6170            we should not panic. Instead, nothing needs doing, so return.  */
6171         if (PL_phase == PERL_PHASE_DESTRUCT && SvREFCNT(tsv) == 0)
6172             return;
6173         Perl_croak(aTHX_ "panic: del_backref, *svp=%p phase=%s refcnt=%" UVuf,
6174                    (void*)*svp, PL_phase_names[PL_phase], (UV)SvREFCNT(tsv));
6175     }
6176
6177     if (SvTYPE(*svp) == SVt_PVAV) {
6178 #ifdef DEBUGGING
6179         int count = 1;
6180 #endif
6181         AV * const av = (AV*)*svp;
6182         SSize_t fill;
6183         assert(!SvIS_FREED(av));
6184         fill = AvFILLp(av);
6185         assert(fill > -1);
6186         svp = AvARRAY(av);
6187         /* for an SV with N weak references to it, if all those
6188          * weak refs are deleted, then sv_del_backref will be called
6189          * N times and O(N^2) compares will be done within the backref
6190          * array. To ameliorate this potential slowness, we:
6191          * 1) make sure this code is as tight as possible;
6192          * 2) when looking for SV, look for it at both the head and tail of the
6193          *    array first before searching the rest, since some create/destroy
6194          *    patterns will cause the backrefs to be freed in order.
6195          */
6196         if (*svp == sv) {
6197             AvARRAY(av)++;
6198             AvMAX(av)--;
6199         }
6200         else {
6201             SV **p = &svp[fill];
6202             SV *const topsv = *p;
6203             if (topsv != sv) {
6204 #ifdef DEBUGGING
6205                 count = 0;
6206 #endif
6207                 while (--p > svp) {
6208                     if (*p == sv) {
6209                         /* We weren't the last entry.
6210                            An unordered list has this property that you
6211                            can take the last element off the end to fill
6212                            the hole, and it's still an unordered list :-)
6213                         */
6214                         *p = topsv;
6215 #ifdef DEBUGGING
6216                         count++;
6217 #else
6218                         break; /* should only be one */
6219 #endif
6220                     }
6221                 }
6222             }
6223         }
6224         assert(count ==1);
6225         AvFILLp(av) = fill-1;
6226     }
6227     else if (SvIS_FREED(*svp) && PL_phase == PERL_PHASE_DESTRUCT) {
6228         /* freed AV; skip */
6229     }
6230     else {
6231         /* optimisation: only a single backref, stored directly */
6232         if (*svp != sv)
6233             Perl_croak(aTHX_ "panic: del_backref, *svp=%p, sv=%p",
6234                        (void*)*svp, (void*)sv);
6235         *svp = NULL;
6236     }
6237
6238 }
6239
6240 void
6241 Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av)
6242 {
6243     SV **svp;
6244     SV **last;
6245     bool is_array;
6246
6247     PERL_ARGS_ASSERT_SV_KILL_BACKREFS;
6248
6249     if (!av)
6250         return;
6251
6252     /* after multiple passes through Perl_sv_clean_all() for a thingy
6253      * that has badly leaked, the backref array may have gotten freed,
6254      * since we only protect it against 1 round of cleanup */
6255     if (SvIS_FREED(av)) {
6256         if (PL_in_clean_all) /* All is fair */
6257             return;
6258         Perl_croak(aTHX_
6259                    "panic: magic_killbackrefs (freed backref AV/SV)");
6260     }
6261
6262
6263     is_array = (SvTYPE(av) == SVt_PVAV);
6264     if (is_array) {
6265         assert(!SvIS_FREED(av));
6266         svp = AvARRAY(av);
6267         if (svp)
6268             last = svp + AvFILLp(av);
6269     }
6270     else {
6271         /* optimisation: only a single backref, stored directly */
6272         svp = (SV**)&av;
6273         last = svp;
6274     }
6275
6276     if (svp) {
6277         while (svp <= last) {
6278             if (*svp) {
6279                 SV *const referrer = *svp;
6280                 if (SvWEAKREF(referrer)) {
6281                     /* XXX Should we check that it hasn't changed? */
6282                     assert(SvROK(referrer));
6283                     SvRV_set(referrer, 0);
6284                     SvOK_off(referrer);
6285                     SvWEAKREF_off(referrer);
6286                     SvSETMAGIC(referrer);
6287                 } else if (SvTYPE(referrer) == SVt_PVGV ||
6288                            SvTYPE(referrer) == SVt_PVLV) {
6289                     assert(SvTYPE(sv) == SVt_PVHV); /* stash backref */
6290                     /* You lookin' at me?  */
6291                     assert(GvSTASH(referrer));
6292                     assert(GvSTASH(referrer) == (const HV *)sv);
6293                     GvSTASH(referrer) = 0;
6294                 } else if (SvTYPE(referrer) == SVt_PVCV ||
6295                            SvTYPE(referrer) == SVt_PVFM) {
6296                     if (SvTYPE(sv) == SVt_PVHV) { /* stash backref */
6297                         /* You lookin' at me?  */
6298                         assert(CvSTASH(referrer));
6299                         assert(CvSTASH(referrer) == (const HV *)sv);
6300                         SvANY(MUTABLE_CV(referrer))->xcv_stash = 0;
6301                     }
6302                     else {
6303                         assert(SvTYPE(sv) == SVt_PVGV);
6304                         /* You lookin' at me?  */
6305                         assert(CvGV(referrer));
6306                         assert(CvGV(referrer) == (const GV *)sv);
6307                         anonymise_cv_maybe(MUTABLE_GV(sv),
6308                                                 MUTABLE_CV(referrer));
6309                     }
6310
6311                 } else {
6312                     Perl_croak(aTHX_
6313                                "panic: magic_killbackrefs (flags=%" UVxf ")",
6314                                (UV)SvFLAGS(referrer));
6315                 }
6316
6317                 if (is_array)
6318                     *svp = NULL;
6319             }
6320             svp++;
6321         }
6322     }
6323     if (is_array) {
6324         AvFILLp(av) = -1;
6325         SvREFCNT_dec_NN(av); /* remove extra count added by sv_add_backref() */
6326     }
6327     return;
6328 }
6329
6330 /*
6331 =for apidoc sv_insert
6332
6333 Inserts and/or replaces a string at the specified offset/length within the SV.
6334 Similar to the Perl C<substr()> function, with C<littlelen> bytes starting at
6335 C<little> replacing C<len> bytes of the string in C<bigstr> starting at
6336 C<offset>.  Handles get magic.
6337
6338 =for apidoc sv_insert_flags
6339
6340 Same as C<sv_insert>, but the extra C<flags> are passed to the
6341 C<SvPV_force_flags> that applies to C<bigstr>.
6342
6343 =cut
6344 */
6345
6346 void
6347 Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *little, const STRLEN littlelen, const U32 flags)
6348 {
6349     char *big;
6350     char *mid;
6351     char *midend;
6352     char *bigend;
6353     SSize_t i;          /* better be sizeof(STRLEN) or bad things happen */
6354     STRLEN curlen;
6355
6356     PERL_ARGS_ASSERT_SV_INSERT_FLAGS;
6357
6358     SvPV_force_flags(bigstr, curlen, flags);
6359     (void)SvPOK_only_UTF8(bigstr);
6360
6361     if (little >= SvPVX(bigstr) &&
6362         little < SvPVX(bigstr) + (SvLEN(bigstr) ? SvLEN(bigstr) : SvCUR(bigstr))) {
6363         /* little is a pointer to within bigstr, since we can reallocate bigstr,
6364            or little...little+littlelen might overlap offset...offset+len we make a copy
6365         */
6366         little = savepvn(little, littlelen);
6367         SAVEFREEPV(little);
6368     }
6369
6370     if (offset + len > curlen) {
6371         SvGROW(bigstr, offset+len+1);
6372         Zero(SvPVX(bigstr)+curlen, offset+len-curlen, char);
6373         SvCUR_set(bigstr, offset+len);
6374     }
6375
6376     SvTAINT(bigstr);
6377     i = littlelen - len;
6378     if (i > 0) {                        /* string might grow */
6379         big = SvGROW(bigstr, SvCUR(bigstr) + i + 1);
6380         mid = big + offset + len;
6381         midend = bigend = big + SvCUR(bigstr);
6382         bigend += i;
6383         *bigend = '\0';
6384         while (midend > mid)            /* shove everything down */
6385             *--bigend = *--midend;
6386         Move(little,big+offset,littlelen,char);
6387         SvCUR_set(bigstr, SvCUR(bigstr) + i);
6388         SvSETMAGIC(bigstr);
6389         return;
6390     }
6391     else if (i == 0) {
6392         Move(little,SvPVX(bigstr)+offset,len,char);
6393         SvSETMAGIC(bigstr);
6394         return;
6395     }
6396
6397     big = SvPVX(bigstr);
6398     mid = big + offset;
6399     midend = mid + len;
6400     bigend = big + SvCUR(bigstr);
6401
6402     if (midend > bigend)
6403         Perl_croak(aTHX_ "panic: sv_insert, midend=%p, bigend=%p",
6404                    midend, bigend);
6405
6406     if (mid - big > bigend - midend) {  /* faster to shorten from end */
6407         if (littlelen) {
6408             Move(little, mid, littlelen,char);
6409             mid += littlelen;
6410         }
6411         i = bigend - midend;
6412         if (i > 0) {
6413             Move(midend, mid, i,char);
6414             mid += i;
6415         }
6416         *mid = '\0';
6417         SvCUR_set(bigstr, mid - big);
6418     }
6419     else if ((i = mid - big)) { /* faster from front */
6420         midend -= littlelen;
6421         mid = midend;
6422         Move(big, midend - i, i, char);
6423         sv_chop(bigstr,midend-i);
6424         if (littlelen)
6425             Move(little, mid, littlelen,char);
6426     }
6427     else if (littlelen) {
6428         midend -= littlelen;
6429         sv_chop(bigstr,midend);
6430         Move(little,midend,littlelen,char);
6431     }
6432     else {
6433         sv_chop(bigstr,midend);
6434     }
6435     SvSETMAGIC(bigstr);
6436 }
6437
6438 /*
6439 =for apidoc sv_replace
6440
6441 Make the first argument a copy of the second, then delete the original.
6442 The target SV physically takes over ownership of the body of the source SV
6443 and inherits its flags; however, the target keeps any magic it owns,
6444 and any magic in the source is discarded.
6445 Note that this is a rather specialist SV copying operation; most of the
6446 time you'll want to use C<sv_setsv> or one of its many macro front-ends.
6447
6448 =cut
6449 */
6450
6451 void
6452 Perl_sv_replace(pTHX_ SV *const sv, SV *const nsv)
6453 {
6454     const U32 refcnt = SvREFCNT(sv);
6455
6456     PERL_ARGS_ASSERT_SV_REPLACE;
6457
6458     SV_CHECK_THINKFIRST_COW_DROP(sv);
6459     if (SvREFCNT(nsv) != 1) {
6460         Perl_croak(aTHX_ "panic: reference miscount on nsv in sv_replace()"
6461                    " (%" UVuf " != 1)", (UV) SvREFCNT(nsv));
6462     }
6463     if (SvMAGICAL(sv)) {
6464         if (SvMAGICAL(nsv))
6465             mg_free(nsv);
6466         else
6467             sv_upgrade(nsv, SVt_PVMG);
6468         SvMAGIC_set(nsv, SvMAGIC(sv));
6469         SvFLAGS(nsv) |= SvMAGICAL(sv);
6470         SvMAGICAL_off(sv);
6471         SvMAGIC_set(sv, NULL);
6472     }
6473     SvREFCNT(sv) = 0;
6474     sv_clear(sv);
6475     assert(!SvREFCNT(sv));
6476 #ifdef DEBUG_LEAKING_SCALARS
6477     sv->sv_flags  = nsv->sv_flags;
6478     sv->sv_any    = nsv->sv_any;
6479     sv->sv_refcnt = nsv->sv_refcnt;
6480     sv->sv_u      = nsv->sv_u;
6481 #else
6482     StructCopy(nsv,sv,SV);
6483 #endif
6484     if(SvTYPE(sv) == SVt_IV) {
6485         SET_SVANY_FOR_BODYLESS_IV(sv);
6486     }
6487         
6488
6489     SvREFCNT(sv) = refcnt;
6490     SvFLAGS(nsv) |= SVTYPEMASK;         /* Mark as freed */
6491     SvREFCNT(nsv) = 0;
6492     del_SV(nsv);
6493 }
6494
6495 /* We're about to free a GV which has a CV that refers back to us.
6496  * If that CV will outlive us, make it anonymous (i.e. fix up its CvGV
6497  * field) */
6498
6499 STATIC void
6500 S_anonymise_cv_maybe(pTHX_ GV *gv, CV* cv)
6501 {
6502     SV *gvname;
6503     GV *anongv;
6504
6505     PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE;
6506
6507     /* be assertive! */
6508     assert(SvREFCNT(gv) == 0);
6509     assert(isGV(gv) && isGV_with_GP(gv));
6510     assert(GvGP(gv));
6511     assert(!CvANON(cv));
6512     assert(CvGV(cv) == gv);
6513     assert(!CvNAMED(cv));
6514
6515     /* will the CV shortly be freed by gp_free() ? */
6516     if (GvCV(gv) == cv && GvGP(gv)->gp_refcnt < 2 && SvREFCNT(cv) < 2) {
6517         SvANY(cv)->xcv_gv_u.xcv_gv = NULL;
6518         return;
6519     }
6520
6521     /* if not, anonymise: */
6522     gvname = (GvSTASH(gv) && HvNAME(GvSTASH(gv)) && HvENAME(GvSTASH(gv)))
6523                     ? newSVhek(HvENAME_HEK(GvSTASH(gv)))
6524                     : newSVpvn_flags( "__ANON__", 8, 0 );
6525     sv_catpvs(gvname, "::__ANON__");
6526     anongv = gv_fetchsv(gvname, GV_ADDMULTI, SVt_PVCV);
6527     SvREFCNT_dec_NN(gvname);
6528
6529     CvANON_on(cv);
6530     CvCVGV_RC_on(cv);
6531     SvANY(cv)->xcv_gv_u.xcv_gv = MUTABLE_GV(SvREFCNT_inc(anongv));
6532 }
6533
6534
6535 /*
6536 =for apidoc sv_clear
6537
6538 Clear an SV: call any destructors, free up any memory used by the body,
6539 and free the body itself.  The SV's head is I<not> freed, although
6540 its type is set to all 1's so that it won't inadvertently be assumed
6541 to be live during global destruction etc.
6542 This function should only be called when C<REFCNT> is zero.  Most of the time
6543 you'll want to call C<sv_free()> (or its macro wrapper C<SvREFCNT_dec>)
6544 instead.
6545
6546 =cut
6547 */
6548
6549 void
6550 Perl_sv_clear(pTHX_ SV *const orig_sv)
6551 {
6552     HV *stash;
6553     U32 type;
6554     const struct body_details *sv_type_details;
6555     SV* iter_sv = NULL;
6556     SV* next_sv = NULL;
6557     SV *sv = orig_sv;
6558     STRLEN hash_index = 0; /* initialise to make Coverity et al happy.
6559                               Not strictly necessary */
6560
6561     PERL_ARGS_ASSERT_SV_CLEAR;
6562
6563     /* within this loop, sv is the SV currently being freed, and
6564      * iter_sv is the most recent AV or whatever that's being iterated
6565      * over to provide more SVs */
6566
6567     while (sv) {
6568
6569         type = SvTYPE(sv);
6570
6571         assert(SvREFCNT(sv) == 0);
6572         assert(SvTYPE(sv) != (svtype)SVTYPEMASK);
6573
6574         if (type <= SVt_IV) {
6575             /* See the comment in sv.h about the collusion between this
6576              * early return and the overloading of the NULL slots in the
6577              * size table.  */
6578             if (SvROK(sv))
6579                 goto free_rv;
6580             SvFLAGS(sv) &= SVf_BREAK;
6581             SvFLAGS(sv) |= SVTYPEMASK;
6582             goto free_head;
6583         }
6584
6585         /* objs are always >= MG, but pad names use the SVs_OBJECT flag
6586            for another purpose  */
6587         assert(!SvOBJECT(sv) || type >= SVt_PVMG);
6588
6589         if (type >= SVt_PVMG) {
6590             if (SvOBJECT(sv)) {
6591                 if (!curse(sv, 1)) goto get_next_sv;
6592                 type = SvTYPE(sv); /* destructor may have changed it */
6593             }
6594             /* Free back-references before magic, in case the magic calls
6595              * Perl code that has weak references to sv. */
6596             if (type == SVt_PVHV) {
6597                 Perl_hv_kill_backrefs(aTHX_ MUTABLE_HV(sv));
6598                 if (SvMAGIC(sv))
6599                     mg_free(sv);
6600             }
6601             else if (SvMAGIC(sv)) {
6602                 /* Free back-references before other types of magic. */
6603                 sv_unmagic(sv, PERL_MAGIC_backref);
6604                 mg_free(sv);
6605             }
6606             SvMAGICAL_off(sv);
6607         }
6608         switch (type) {
6609             /* case SVt_INVLIST: */
6610         case SVt_PVIO:
6611             if (IoIFP(sv) &&
6612                 IoIFP(sv) != PerlIO_stdin() &&
6613                 IoIFP(sv) != PerlIO_stdout() &&
6614                 IoIFP(sv) != PerlIO_stderr() &&
6615                 !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6616             {
6617                 io_close(MUTABLE_IO(sv), NULL, FALSE,
6618                          (IoTYPE(sv) == IoTYPE_WRONLY ||
6619                           IoTYPE(sv) == IoTYPE_RDWR   ||
6620                           IoTYPE(sv) == IoTYPE_APPEND));
6621             }
6622             if (IoDIRP(sv) && !(IoFLAGS(sv) & IOf_FAKE_DIRP))
6623                 PerlDir_close(IoDIRP(sv));
6624             IoDIRP(sv) = (DIR*)NULL;
6625             Safefree(IoTOP_NAME(sv));
6626             Safefree(IoFMT_NAME(sv));
6627             Safefree(IoBOTTOM_NAME(sv));
6628             if ((const GV *)sv == PL_statgv)
6629                 PL_statgv = NULL;
6630             goto freescalar;
6631         case SVt_REGEXP:
6632             /* FIXME for plugins */
6633             pregfree2((REGEXP*) sv);
6634             goto freescalar;
6635         case SVt_PVCV:
6636         case SVt_PVFM:
6637             cv_undef(MUTABLE_CV(sv));
6638             /* If we're in a stash, we don't own a reference to it.
6639              * However it does have a back reference to us, which needs to
6640              * be cleared.  */
6641             if ((stash = CvSTASH(sv)))
6642                 sv_del_backref(MUTABLE_SV(stash), sv);
6643             goto freescalar;
6644         case SVt_PVHV:
6645             if (HvTOTALKEYS((HV*)sv) > 0) {
6646                 const HEK *hek;
6647                 /* this statement should match the one at the beginning of
6648                  * hv_undef_flags() */
6649                 if (   PL_phase != PERL_PHASE_DESTRUCT
6650                     && (hek = HvNAME_HEK((HV*)sv)))
6651                 {
6652                     if (PL_stashcache) {
6653                         DEBUG_o(Perl_deb(aTHX_
6654                             "sv_clear clearing PL_stashcache for '%" HEKf
6655                             "'\n",
6656                              HEKfARG(hek)));
6657                         (void)hv_deletehek(PL_stashcache,
6658                                            hek, G_DISCARD);
6659                     }
6660                     hv_name_set((HV*)sv, NULL, 0, 0);
6661                 }
6662
6663                 /* save old iter_sv in unused SvSTASH field */
6664                 assert(!SvOBJECT(sv));
6665                 SvSTASH(sv) = (HV*)iter_sv;
6666                 iter_sv = sv;
6667
6668                 /* save old hash_index in unused SvMAGIC field */
6669                 assert(!SvMAGICAL(sv));
6670                 assert(!SvMAGIC(sv));
6671                 ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index = hash_index;
6672                 hash_index = 0;
6673
6674                 next_sv = Perl_hfree_next_entry(aTHX_ (HV*)sv, &hash_index);
6675                 goto get_next_sv; /* process this new sv */
6676             }
6677             /* free empty hash */
6678             Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6679             assert(!HvARRAY((HV*)sv));
6680             break;
6681         case SVt_PVAV:
6682             {
6683                 AV* av = MUTABLE_AV(sv);
6684                 if (PL_comppad == av) {
6685                     PL_comppad = NULL;
6686                     PL_curpad = NULL;
6687                 }
6688                 if (AvREAL(av) && AvFILLp(av) > -1) {
6689                     next_sv = AvARRAY(av)[AvFILLp(av)--];
6690                     /* save old iter_sv in top-most slot of AV,
6691                      * and pray that it doesn't get wiped in the meantime */
6692                     AvARRAY(av)[AvMAX(av)] = iter_sv;
6693                     iter_sv = sv;
6694                     goto get_next_sv; /* process this new sv */
6695                 }
6696                 Safefree(AvALLOC(av));
6697             }
6698
6699             break;
6700         case SVt_PVLV:
6701             if (LvTYPE(sv) == 'T') { /* for tie: return HE to pool */
6702                 SvREFCNT_dec(HeKEY_sv((HE*)LvTARG(sv)));
6703                 HeNEXT((HE*)LvTARG(sv)) = PL_hv_fetch_ent_mh;
6704                 PL_hv_fetch_ent_mh = (HE*)LvTARG(sv);
6705             }
6706             else if (LvTYPE(sv) != 't') /* unless tie: unrefcnted fake SV**  */
6707                 SvREFCNT_dec(LvTARG(sv));
6708             if (isREGEXP(sv)) {
6709                 /* SvLEN points to a regex body. Free the body, then
6710                  * set SvLEN to whatever value was in the now-freed
6711                  * regex body. The PVX buffer is shared by multiple re's
6712                  * and only freed once, by the re whose len in non-null */
6713                 STRLEN len = ReANY(sv)->xpv_len;
6714                 pregfree2((REGEXP*) sv);
6715                 SvLEN_set((sv), len);
6716                 goto freescalar;
6717             }
6718             /* FALLTHROUGH */
6719         case SVt_PVGV:
6720             if (isGV_with_GP(sv)) {
6721                 if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
6722                    && HvENAME_get(stash))
6723                     mro_method_changed_in(stash);
6724                 gp_free(MUTABLE_GV(sv));
6725                 if (GvNAME_HEK(sv))
6726                     unshare_hek(GvNAME_HEK(sv));
6727                 /* If we're in a stash, we don't own a reference to it.
6728                  * However it does have a back reference to us, which
6729                  * needs to be cleared.  */
6730                 if ((stash = GvSTASH(sv)))
6731                         sv_del_backref(MUTABLE_SV(stash), sv);
6732             }
6733             /* FIXME. There are probably more unreferenced pointers to SVs
6734              * in the interpreter struct that we should check and tidy in
6735              * a similar fashion to this:  */
6736             /* See also S_sv_unglob, which does the same thing. */
6737             if ((const GV *)sv == PL_last_in_gv)
6738                 PL_last_in_gv = NULL;
6739             else if ((const GV *)sv == PL_statgv)
6740                 PL_statgv = NULL;
6741             else if ((const GV *)sv == PL_stderrgv)
6742                 PL_stderrgv = NULL;
6743             /* FALLTHROUGH */
6744         case SVt_PVMG:
6745         case SVt_PVNV:
6746         case SVt_PVIV:
6747         case SVt_INVLIST:
6748         case SVt_PV:
6749           freescalar:
6750             /* Don't bother with SvOOK_off(sv); as we're only going to
6751              * free it.  */
6752             if (SvOOK(sv)) {
6753                 STRLEN offset;
6754                 SvOOK_offset(sv, offset);
6755                 SvPV_set(sv, SvPVX_mutable(sv) - offset);
6756                 /* Don't even bother with turning off the OOK flag.  */
6757             }
6758             if (SvROK(sv)) {
6759             free_rv:
6760                 {
6761                     SV * const target = SvRV(sv);
6762                     if (SvWEAKREF(sv))
6763                         sv_del_backref(target, sv);
6764                     else
6765                         next_sv = target;
6766                 }
6767             }
6768 #ifdef PERL_ANY_COW
6769             else if (SvPVX_const(sv)
6770                      && !(SvTYPE(sv) == SVt_PVIO
6771                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6772             {
6773                 if (SvIsCOW(sv)) {
6774 #ifdef DEBUGGING
6775                     if (DEBUG_C_TEST) {
6776                         PerlIO_printf(Perl_debug_log, "Copy on write: clear\n");
6777                         sv_dump(sv);
6778                     }
6779 #endif
6780                     if (SvLEN(sv)) {
6781                         if (CowREFCNT(sv)) {
6782                             sv_buf_to_rw(sv);
6783                             CowREFCNT(sv)--;
6784                             sv_buf_to_ro(sv);
6785                             SvLEN_set(sv, 0);
6786                         }
6787                     } else {
6788                         unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6789                     }
6790
6791                 }
6792                 if (SvLEN(sv)) {
6793                     Safefree(SvPVX_mutable(sv));
6794                 }
6795             }
6796 #else
6797             else if (SvPVX_const(sv) && SvLEN(sv)
6798                      && !(SvTYPE(sv) == SVt_PVIO
6799                      && !(IoFLAGS(sv) & IOf_FAKE_DIRP)))
6800                 Safefree(SvPVX_mutable(sv));
6801             else if (SvPVX_const(sv) && SvIsCOW(sv)) {
6802                 unshare_hek(SvSHARED_HEK_FROM_PV(SvPVX_const(sv)));
6803             }
6804 #endif
6805             break;
6806         case SVt_NV:
6807             break;
6808         }
6809
6810       free_body:
6811
6812         SvFLAGS(sv) &= SVf_BREAK;
6813         SvFLAGS(sv) |= SVTYPEMASK;
6814
6815         sv_type_details = bodies_by_type + type;
6816         if (sv_type_details->arena) {
6817             del_body(((char *)SvANY(sv) + sv_type_details->offset),
6818                      &PL_body_roots[type]);
6819         }
6820         else if (sv_type_details->body_size) {
6821             safefree(SvANY(sv));
6822         }
6823
6824       free_head:
6825         /* caller is responsible for freeing the head of the original sv */
6826         if (sv != orig_sv && !SvREFCNT(sv))
6827             del_SV(sv);
6828
6829         /* grab and free next sv, if any */
6830       get_next_sv:
6831         while (1) {
6832             sv = NULL;
6833             if (next_sv) {
6834                 sv = next_sv;
6835                 next_sv = NULL;
6836             }
6837             else if (!iter_sv) {
6838                 break;
6839             } else if (SvTYPE(iter_sv) == SVt_PVAV) {
6840                 AV *const av = (AV*)iter_sv;
6841                 if (AvFILLp(av) > -1) {
6842                     sv = AvARRAY(av)[AvFILLp(av)--];
6843                 }
6844                 else { /* no more elements of current AV to free */
6845                     sv = iter_sv;
6846                     type = SvTYPE(sv);
6847                     /* restore previous value, squirrelled away */
6848                     iter_sv = AvARRAY(av)[AvMAX(av)];
6849                     Safefree(AvALLOC(av));
6850                     goto free_body;
6851                 }
6852             } else if (SvTYPE(iter_sv) == SVt_PVHV) {
6853                 sv = Perl_hfree_next_entry(aTHX_ (HV*)iter_sv, &hash_index);
6854                 if (!sv && !HvTOTALKEYS((HV *)iter_sv)) {
6855                     /* no more elements of current HV to free */
6856                     sv = iter_sv;
6857                     type = SvTYPE(sv);
6858                     /* Restore previous values of iter_sv and hash_index,
6859                      * squirrelled away */
6860                     assert(!SvOBJECT(sv));
6861                     iter_sv = (SV*)SvSTASH(sv);
6862                     assert(!SvMAGICAL(sv));
6863                     hash_index = ((XPVMG*) SvANY(sv))->xmg_u.xmg_hash_index;
6864 #ifdef DEBUGGING
6865                     /* perl -DA does not like rubbish in SvMAGIC. */
6866                     SvMAGIC_set(sv, 0);
6867 #endif
6868
6869                     /* free any remaining detritus from the hash struct */
6870                     Perl_hv_undef_flags(aTHX_ MUTABLE_HV(sv), HV_NAME_SETALL);
6871                     assert(!HvARRAY((HV*)sv));
6872                     goto free_body;
6873                 }
6874             }
6875
6876             /* unrolled SvREFCNT_dec and sv_free2 follows: */
6877
6878             if (!sv)
6879                 continue;
6880             if (!SvREFCNT(sv)) {
6881                 sv_free(sv);
6882                 continue;
6883             }
6884             if (--(SvREFCNT(sv)))
6885                 continue;
6886 #ifdef DEBUGGING
6887             if (SvTEMP(sv)) {
6888                 Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
6889                          "Attempt to free temp prematurely: SV 0x%" UVxf
6890                          pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
6891                 continue;
6892             }
6893 #endif
6894             if (SvIMMORTAL(sv)) {
6895                 /* make sure SvREFCNT(sv)==0 happens very seldom */
6896                 SvREFCNT(sv) = SvREFCNT_IMMORTAL;
6897                 continue;
6898             }
6899             break;
6900         } /* while 1 */
6901
6902     } /* while sv */
6903 }
6904
6905 /* This routine curses the sv itself, not the object referenced by sv. So
6906    sv does not have to be ROK. */
6907
6908 static bool
6909 S_curse(pTHX_ SV * const sv, const bool check_refcnt) {
6910     PERL_ARGS_ASSERT_CURSE;
6911     assert(SvOBJECT(sv));
6912
6913     if (PL_defstash &&  /* Still have a symbol table? */
6914         SvDESTROYABLE(sv))
6915     {
6916         dSP;
6917         HV* stash;
6918         do {
6919           stash = SvSTASH(sv);
6920           assert(SvTYPE(stash) == SVt_PVHV);
6921           if (HvNAME(stash)) {
6922             CV* destructor = NULL;
6923             struct mro_meta *meta;
6924
6925             assert (SvOOK(stash));
6926
6927             DEBUG_o( Perl_deb(aTHX_ "Looking for DESTROY method for %s\n",
6928                          HvNAME(stash)) );
6929
6930             /* don't make this an initialization above the assert, since it needs
6931                an AUX structure */
6932             meta = HvMROMETA(stash);
6933             if (meta->destroy_gen && meta->destroy_gen == PL_sub_generation) {
6934                 destructor = meta->destroy;
6935                 DEBUG_o( Perl_deb(aTHX_ "Using cached DESTROY method %p for %s\n",
6936                              (void *)destructor, HvNAME(stash)) );
6937             }
6938             else {
6939                 bool autoload = FALSE;
6940                 GV *gv =
6941                     gv_fetchmeth_pvn(stash, S_destroy, S_destroy_len, -1, 0);
6942                 if (gv)
6943                     destructor = GvCV(gv);
6944                 if (!destructor) {
6945                     gv = gv_autoload_pvn(stash, S_destroy, S_destroy_len,
6946                                          GV_AUTOLOAD_ISMETHOD);
6947                     if (gv)
6948                         destructor = GvCV(gv);
6949                     if (destructor)
6950                         autoload = TRUE;
6951                 }
6952                 /* we don't cache AUTOLOAD for DESTROY, since this code
6953                    would then need to set $__PACKAGE__::AUTOLOAD, or the
6954                    equivalent for XS AUTOLOADs */
6955                 if (!autoload) {
6956                     meta->destroy_gen = PL_sub_generation;
6957                     meta->destroy = destructor;
6958
6959                     DEBUG_o( Perl_deb(aTHX_ "Set cached DESTROY method %p for %s\n",
6960                                       (void *)destructor, HvNAME(stash)) );
6961                 }
6962                 else {
6963                     DEBUG_o( Perl_deb(aTHX_ "Not caching AUTOLOAD for DESTROY method for %s\n",
6964                                       HvNAME(stash)) );
6965                 }
6966             }
6967             assert(!destructor || SvTYPE(destructor) == SVt_PVCV);
6968             if (destructor
6969                 /* A constant subroutine can have no side effects, so
6970                    don't bother calling it.  */
6971                 && !CvCONST(destructor)
6972                 /* Don't bother calling an empty destructor or one that
6973                    returns immediately. */
6974                 && (CvISXSUB(destructor)
6975                 || (CvSTART(destructor)
6976                     && (CvSTART(destructor)->op_next->op_type
6977                                         != OP_LEAVESUB)
6978                     && (CvSTART(destructor)->op_next->op_type
6979                                         != OP_PUSHMARK
6980                         || CvSTART(destructor)->op_next->op_next->op_type
6981                                         != OP_RETURN
6982                        )
6983                    ))
6984                )
6985             {
6986                 SV* const tmpref = newRV(sv);
6987                 SvREADONLY_on(tmpref); /* DESTROY() could be naughty */
6988                 ENTER;
6989                 PUSHSTACKi(PERLSI_DESTROY);
6990                 EXTEND(SP, 2);
6991                 PUSHMARK(SP);
6992                 PUSHs(tmpref);
6993                 PUTBACK;
6994                 call_sv(MUTABLE_SV(destructor),
6995                             G_DISCARD|G_EVAL|G_KEEPERR|G_VOID);
6996                 POPSTACK;
6997                 SPAGAIN;
6998                 LEAVE;
6999                 if(SvREFCNT(tmpref) < 2) {
7000                     /* tmpref is not kept alive! */
7001                     SvREFCNT(sv)--;
7002                     SvRV_set(tmpref, NULL);
7003                     SvROK_off(tmpref);
7004                 }
7005                 SvREFCNT_dec_NN(tmpref);
7006             }
7007           }
7008         } while (SvOBJECT(sv) && SvSTASH(sv) != stash);
7009
7010
7011         if (check_refcnt && SvREFCNT(sv)) {
7012             if (PL_in_clean_objs)
7013                 Perl_croak(aTHX_
7014                   "DESTROY created new reference to dead object '%" HEKf "'",
7015                    HEKfARG(HvNAME_HEK(stash)));
7016             /* DESTROY gave object new lease on life */
7017             return FALSE;
7018         }
7019     }
7020
7021     if (SvOBJECT(sv)) {
7022         HV * const stash = SvSTASH(sv);
7023         /* Curse before freeing the stash, as freeing the stash could cause
7024            a recursive call into S_curse. */
7025         SvOBJECT_off(sv);       /* Curse the object. */
7026         SvSTASH_set(sv,0);      /* SvREFCNT_dec may try to read this */
7027         SvREFCNT_dec(stash); /* possibly of changed persuasion */
7028     }
7029     return TRUE;
7030 }
7031
7032 /*
7033 =for apidoc sv_newref
7034
7035 Increment an SV's reference count.  Use the C<SvREFCNT_inc()> wrapper
7036 instead.
7037
7038 =cut
7039 */
7040
7041 SV *
7042 Perl_sv_newref(pTHX_ SV *const sv)
7043 {
7044     PERL_UNUSED_CONTEXT;
7045     if (sv)
7046         (SvREFCNT(sv))++;
7047     return sv;
7048 }
7049
7050 /*
7051 =for apidoc sv_free
7052
7053 Decrement an SV's reference count, and if it drops to zero, call
7054 C<sv_clear> to invoke destructors and free up any memory used by
7055 the body; finally, deallocating the SV's head itself.
7056 Normally called via a wrapper macro C<SvREFCNT_dec>.
7057
7058 =cut
7059 */
7060
7061 void
7062 Perl_sv_free(pTHX_ SV *const sv)
7063 {
7064     SvREFCNT_dec(sv);
7065 }
7066
7067
7068 /* Private helper function for SvREFCNT_dec().
7069  * Called with rc set to original SvREFCNT(sv), where rc == 0 or 1 */
7070
7071 void
7072 Perl_sv_free2(pTHX_ SV *const sv, const U32 rc)
7073 {
7074
7075     PERL_ARGS_ASSERT_SV_FREE2;
7076
7077     if (LIKELY( rc == 1 )) {
7078         /* normal case */
7079         SvREFCNT(sv) = 0;
7080
7081 #ifdef DEBUGGING
7082         if (SvTEMP(sv)) {
7083             Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING),
7084                              "Attempt to free temp prematurely: SV 0x%" UVxf
7085                              pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
7086             return;
7087         }
7088 #endif
7089         if (SvIMMORTAL(sv)) {
7090             /* make sure SvREFCNT(sv)==0 happens very seldom */
7091             SvREFCNT(sv) = SvREFCNT_IMMORTAL;
7092             return;
7093         }
7094         sv_clear(sv);
7095         if (! SvREFCNT(sv)) /* may have have been resurrected */
7096             del_SV(sv);
7097         return;
7098     }
7099
7100     /* handle exceptional cases */
7101
7102     assert(rc == 0);
7103
7104     if (SvFLAGS(sv) & SVf_BREAK)
7105         /* this SV's refcnt has been artificially decremented to
7106          * trigger cleanup */
7107         return;
7108     if (PL_in_clean_all) /* All is fair */
7109         return;
7110     if (SvIMMORTAL(sv)) {
7111         /* make sure SvREFCNT(sv)==0 happens very seldom */
7112         SvREFCNT(sv) = SvREFCNT_IMMORTAL;
7113         return;
7114     }
7115     if (ckWARN_d(WARN_INTERNAL)) {
7116 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
7117         Perl_dump_sv_child(aTHX_ sv);
7118 #else
7119     #ifdef DEBUG_LEAKING_SCALARS
7120         sv_dump(sv);
7121     #endif
7122 #ifdef DEBUG_LEAKING_SCALARS_ABORT
7123         if (PL_warnhook == PERL_WARNHOOK_FATAL
7124             || ckDEAD(packWARN(WARN_INTERNAL))) {
7125             /* Don't let Perl_warner cause us to escape our fate:  */
7126             abort();
7127         }
7128 #endif
7129         /* This may not return:  */
7130         Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
7131                     "Attempt to free unreferenced scalar: SV 0x%" UVxf
7132                     pTHX__FORMAT, PTR2UV(sv) pTHX__VALUE);
7133 #endif
7134     }
7135 #ifdef DEBUG_LEAKING_SCALARS_ABORT
7136     abort();
7137 #endif
7138
7139 }
7140
7141
7142 /*
7143 =for apidoc sv_len
7144
7145 Returns the length of the string in the SV.  Handles magic and type
7146 coercion and sets the UTF8 flag appropriately.  See also C<L</SvCUR>>, which
7147 gives raw access to the C<xpv_cur> slot.
7148
7149 =cut
7150 */
7151
7152 STRLEN
7153 Perl_sv_len(pTHX_ SV *const sv)
7154 {
7155     STRLEN len;
7156
7157     if (!sv)
7158         return 0;
7159
7160     (void)SvPV_const(sv, len);
7161     return len;
7162 }
7163
7164 /*
7165 =for apidoc sv_len_utf8
7166
7167 Returns the number of characters in the string in an SV, counting wide
7168 UTF-8 bytes as a single character.  Handles magic and type coercion.
7169
7170 =cut
7171 */
7172
7173 /*
7174  * The length is cached in PERL_MAGIC_utf8, in the mg_len field.  Also the
7175  * mg_ptr is used, by sv_pos_u2b() and sv_pos_b2u() - see the comments below.
7176  * (Note that the mg_len is not the length of the mg_ptr field.
7177  * This allows the cache to store the character length of the string without
7178  * needing to malloc() extra storage to attach to the mg_ptr.)
7179  *
7180  */
7181
7182 STRLEN
7183 Perl_sv_len_utf8(pTHX_ SV *const sv)
7184 {
7185     if (!sv)
7186         return 0;
7187
7188     SvGETMAGIC(sv);
7189     return sv_len_utf8_nomg(sv);
7190 }
7191
7192 STRLEN
7193 Perl_sv_len_utf8_nomg(pTHX_ SV * const sv)
7194 {
7195     STRLEN len;
7196     const U8 *s = (U8*)SvPV_nomg_const(sv, len);
7197
7198     PERL_ARGS_ASSERT_SV_LEN_UTF8_NOMG;
7199
7200     if (PL_utf8cache && SvUTF8(sv)) {
7201             STRLEN ulen;
7202             MAGIC *mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_utf8) : NULL;
7203
7204             if (mg && (mg->mg_len != -1 || mg->mg_ptr)) {
7205                 if (mg->mg_len != -1)
7206                     ulen = mg->mg_len;
7207                 else {
7208                     /* We can use the offset cache for a headstart.
7209                        The longer value is stored in the first pair.  */
7210                     STRLEN *cache = (STRLEN *) mg->mg_ptr;
7211
7212                     ulen = cache[0] + Perl_utf8_length(aTHX_ s + cache[1],
7213                                                        s + len);
7214                 }
7215                 
7216                 if (PL_utf8cache < 0) {
7217                     const STRLEN real = Perl_utf8_length(aTHX_ s, s + len);
7218                     assert_uft8_cache_coherent("sv_len_utf8", ulen, real, sv);
7219                 }
7220             }
7221             else {
7222                 ulen = Perl_utf8_length(aTHX_ s, s + len);
7223                 utf8_mg_len_cache_update(sv, &mg, ulen);
7224             }
7225             return ulen;
7226     }
7227     return SvUTF8(sv) ? Perl_utf8_length(aTHX_ s, s + len) : len;
7228 }
7229
7230 /* Walk forwards to find the byte corresponding to the passed in UTF-8
7231    offset.  */
7232 static STRLEN
7233 S_sv_pos_u2b_forwards(const U8 *const start, const U8 *const send,
7234                       STRLEN *const uoffset_p, bool *const at_end)
7235 {
7236     const U8 *s = start;
7237     STRLEN uoffset = *uoffset_p;
7238
7239     PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS;
7240
7241     while (s < send && uoffset) {
7242         --uoffset;
7243         s += UTF8SKIP(s);
7244     }
7245     if (s == send) {
7246         *at_end = TRUE;
7247     }
7248     else if (s > send) {
7249         *at_end = TRUE;
7250         /* This is the existing behaviour. Possibly it should be a croak, as
7251            it's actually a bounds error  */
7252         s = send;
7253     }
7254     *uoffset_p -= uoffset;
7255     return s - start;
7256 }
7257
7258 /* Given the length of the string in both bytes and UTF-8 characters, decide
7259    whether to walk forwards or backwards to find the byte corresponding to
7260    the passed in UTF-8 offset.  */
7261 static STRLEN
7262 S_sv_pos_u2b_midway(const U8 *const start, const U8 *send,
7263                     STRLEN uoffset, const STRLEN uend)
7264 {
7265     STRLEN backw = uend - uoffset;
7266
7267     PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY;
7268
7269     if (uoffset < 2 * backw) {
7270         /* The assumption is that going forwards is twice the speed of going
7271            forward (that's where the 2 * backw comes from).
7272            (The real figure of course depends on the UTF-8 data.)  */
7273         const U8 *s = start;
7274
7275         while (s < send && uoffset--)
7276             s += UTF8SKIP(s);
7277         assert (s <= send);
7278         if (s > send)
7279             s = send;
7280         return s - start;
7281     }
7282
7283     while (backw--) {
7284         send--;
7285         while (UTF8_IS_CONTINUATION(*send))
7286             send--;
7287     }
7288     return send - start;
7289 }
7290
7291 /* For the string representation of the given scalar, find the byte
7292    corresponding to the passed in UTF-8 offset.  uoffset0 and boffset0
7293    give another position in the string, *before* the sought offset, which
7294    (which is always true, as 0, 0 is a valid pair of positions), which should
7295    help reduce the amount of linear searching.
7296    If *mgp is non-NULL, it should point to the UTF-8 cache magic, which
7297    will be used to reduce the amount of linear searching. The cache will be
7298    created if necessary, and the found value offered to it for update.  */
7299 static STRLEN
7300 S_sv_pos_u2b_cached(pTHX_ SV *const sv, MAGIC **const mgp, const U8 *const start,
7301                     const U8 *const send, STRLEN uoffset,
7302                     STRLEN uoffset0, STRLEN boffset0)
7303 {
7304     STRLEN boffset = 0; /* Actually always set, but let's keep gcc happy.  */
7305     bool found = FALSE;
7306     bool at_end = FALSE;
7307
7308     PERL_ARGS_ASSERT_SV_POS_U2B_CACHED;
7309
7310     assert (uoffset >= uoffset0);
7311
7312     if (!uoffset)
7313         return 0;
7314
7315     if (!SvREADONLY(sv) && !SvGMAGICAL(sv) && SvPOK(sv)
7316         && PL_utf8cache
7317         && (*mgp || (SvTYPE(sv) >= SVt_PVMG &&
7318                      (*mgp = mg_find(sv, PERL_MAGIC_utf8))))) {
7319         if ((*mgp)->mg_ptr) {
7320             STRLEN *cache = (STRLEN *) (*mgp)->mg_ptr;
7321             if (cache[0] == uoffset) {
7322                 /* An exact match. */
7323                 return cache[1];
7324             }
7325             if (cache[2] == uoffset) {
7326                 /* An exact match. */
7327                 return cache[3];
7328             }
7329
7330             if (cache[0] < uoffset) {
7331                 /* The cache already knows part of the way.   */
7332                 if (cache[0] > uoffset0) {
7333                     /* The cache knows more than the passed in pair  */
7334                     uoffset0 = cache[0];
7335                     boffset0 = cache[1];
7336                 }
7337                 if ((*mgp)->mg_len != -1) {
7338                     /* And we know the end too.  */
7339                     boffset = boffset0
7340                         + sv_pos_u2b_midway(start + boffset0, send,
7341                                               uoffset - uoffset0,
7342                                               (*mgp)->mg_len - uoffset0);
7343                 } else {
7344                     uoffset -= uoffset0;
7345                     boffset = boffset0
7346                         + sv_pos_u2b_forwards(start + boffset0,
7347                                               send, &uoffset, &at_end);
7348                     uoffset += uoffset0;
7349                 }
7350             }
7351             else if (cache[2] < uoffset) {
7352                 /* We're between the two cache entries.  */
7353                 if (cache[2] > uoffset0) {
7354                     /* and the cache knows more than the passed in pair  */
7355                     uoffset0 = cache[2];
7356                     boffset0 = cache[3];
7357                 }
7358
7359                 boffset = boffset0
7360                     + sv_pos_u2b_midway(start + boffset0,
7361                                           start + cache[1],
7362                                           uoffset - uoffset0,
7363                                           cache[0] - uoffset0);
7364             } else {
7365                 boffset = boffset0
7366                     + sv_pos_u2b_midway(start + boffset0,
7367                                           start + cache[3],
7368                                           uoffset - uoffset0,
7369                                           cache[2] - uoffset0);
7370             }
7371             found = TRUE;
7372         }
7373         else if ((*mgp)->mg_len != -1) {
7374             /* If we can take advantage of a passed in offset, do so.  */
7375             /* In fact, offset0 is either 0, or less than offset, so don't
7376                need to worry about the other possibility.  */
7377             boffset = boffset0
7378                 + sv_pos_u2b_midway(start + boffset0, send,
7379                                       uoffset - uoffset0,
7380                                       (*mgp)->mg_len - uoffset0);
7381             found = TRUE;
7382         }
7383     }
7384
7385     if (!found || PL_utf8cache < 0) {
7386         STRLEN real_boffset;
7387         uoffset -= uoffset0;
7388         real_boffset = boffset0 + sv_pos_u2b_forwards(start + boffset0,
7389                                                       send, &uoffset, &at_end);
7390         uoffset += uoffset0;
7391
7392         if (found && PL_utf8cache < 0)
7393             assert_uft8_cache_coherent("sv_pos_u2b_cache", boffset,
7394                                        real_boffset, sv);
7395         boffset = real_boffset;
7396     }
7397
7398     if (PL_utf8cache && !SvGMAGICAL(sv) && SvPOK(sv)) {
7399         if (at_end)
7400             utf8_mg_len_cache_update(sv, mgp, uoffset);
7401         else
7402             utf8_mg_pos_cache_update(sv, mgp, boffset, uoffset, send - start);
7403     }
7404     return boffset;
7405 }
7406
7407
7408 /*
7409 =for apidoc sv_pos_u2b_flags
7410
7411 Converts the offset from a count of UTF-8 chars from
7412 the start of the string, to a count of the equivalent number of bytes; if
7413 C<lenp> is non-zero, it does the same to C<lenp>, but this time starting from
7414 C<offset>, rather than from the start
7415 of the string.  Handles type coercion.
7416 C<flags> is passed to C<SvPV_flags>, and usually should be
7417 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7418
7419 =cut
7420 */
7421
7422 /*
7423  * sv_pos_u2b_flags() uses, like sv_pos_b2u(), the mg_ptr of the potential
7424  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7425  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7426  *
7427  */
7428
7429 STRLEN
7430 Perl_sv_pos_u2b_flags(pTHX_ SV *const sv, STRLEN uoffset, STRLEN *const lenp,
7431                       U32 flags)
7432 {
7433     const U8 *start;
7434     STRLEN len;
7435     STRLEN boffset;
7436
7437     PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS;
7438
7439     start = (U8*)SvPV_flags(sv, len, flags);
7440     if (len) {
7441         const U8 * const send = start + len;
7442         MAGIC *mg = NULL;
7443         boffset = sv_pos_u2b_cached(sv, &mg, start, send, uoffset, 0, 0);
7444
7445         if (lenp
7446             && *lenp /* don't bother doing work for 0, as its bytes equivalent
7447                         is 0, and *lenp is already set to that.  */) {
7448             /* Convert the relative offset to absolute.  */
7449             const STRLEN uoffset2 = uoffset + *lenp;
7450             const STRLEN boffset2
7451                 = sv_pos_u2b_cached(sv, &mg, start, send, uoffset2,
7452                                       uoffset, boffset) - boffset;
7453
7454             *lenp = boffset2;
7455         }
7456     } else {
7457         if (lenp)
7458             *lenp = 0;
7459         boffset = 0;
7460     }
7461
7462     return boffset;
7463 }
7464
7465 /*
7466 =for apidoc sv_pos_u2b
7467
7468 Converts the value pointed to by C<offsetp> from a count of UTF-8 chars from
7469 the start of the string, to a count of the equivalent number of bytes; if
7470 C<lenp> is non-zero, it does the same to C<lenp>, but this time starting from
7471 the offset, rather than from the start of the string.  Handles magic and
7472 type coercion.
7473
7474 Use C<sv_pos_u2b_flags> in preference, which correctly handles strings longer
7475 than 2Gb.
7476
7477 =cut
7478 */
7479
7480 /*
7481  * sv_pos_u2b() uses, like sv_pos_b2u(), the mg_ptr of the potential
7482  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7483  * byte offsets.  See also the comments of S_utf8_mg_pos_cache_update().
7484  *
7485  */
7486
7487 /* This function is subject to size and sign problems */
7488
7489 void
7490 Perl_sv_pos_u2b(pTHX_ SV *const sv, I32 *const offsetp, I32 *const lenp)
7491 {
7492     PERL_ARGS_ASSERT_SV_POS_U2B;
7493
7494     if (lenp) {
7495         STRLEN ulen = (STRLEN)*lenp;
7496         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, &ulen,
7497                                          SV_GMAGIC|SV_CONST_RETURN);
7498         *lenp = (I32)ulen;
7499     } else {
7500         *offsetp = (I32)sv_pos_u2b_flags(sv, (STRLEN)*offsetp, NULL,
7501                                          SV_GMAGIC|SV_CONST_RETURN);
7502     }
7503 }
7504
7505 static void
7506 S_utf8_mg_len_cache_update(pTHX_ SV *const sv, MAGIC **const mgp,
7507                            const STRLEN ulen)
7508 {
7509     PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE;
7510     if (SvREADONLY(sv) || SvGMAGICAL(sv) || !SvPOK(sv))
7511         return;
7512
7513     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7514                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7515         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, &PL_vtbl_utf8, 0, 0);
7516     }
7517     assert(*mgp);
7518
7519     (*mgp)->mg_len = ulen;
7520 }
7521
7522 /* Create and update the UTF8 magic offset cache, with the proffered utf8/
7523    byte length pairing. The (byte) length of the total SV is passed in too,
7524    as blen, because for some (more esoteric) SVs, the call to SvPV_const()
7525    may not have updated SvCUR, so we can't rely on reading it directly.
7526
7527    The proffered utf8/byte length pairing isn't used if the cache already has
7528    two pairs, and swapping either for the proffered pair would increase the
7529    RMS of the intervals between known byte offsets.
7530
7531    The cache itself consists of 4 STRLEN values
7532    0: larger UTF-8 offset
7533    1: corresponding byte offset
7534    2: smaller UTF-8 offset
7535    3: corresponding byte offset
7536
7537    Unused cache pairs have the value 0, 0.
7538    Keeping the cache "backwards" means that the invariant of
7539    cache[0] >= cache[2] is maintained even with empty slots, which means that
7540    the code that uses it doesn't need to worry if only 1 entry has actually
7541    been set to non-zero.  It also makes the "position beyond the end of the
7542    cache" logic much simpler, as the first slot is always the one to start
7543    from.   
7544 */
7545 static void
7546 S_utf8_mg_pos_cache_update(pTHX_ SV *const sv, MAGIC **const mgp, const STRLEN byte,
7547                            const STRLEN utf8, const STRLEN blen)
7548 {
7549     STRLEN *cache;
7550
7551     PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE;
7552
7553     if (SvREADONLY(sv))
7554         return;
7555
7556     if (!*mgp && (SvTYPE(sv) < SVt_PVMG ||
7557                   !(*mgp = mg_find(sv, PERL_MAGIC_utf8)))) {
7558         *mgp = sv_magicext(sv, 0, PERL_MAGIC_utf8, (MGVTBL*)&PL_vtbl_utf8, 0,
7559                            0);
7560         (*mgp)->mg_len = -1;
7561     }
7562     assert(*mgp);
7563
7564     if (!(cache = (STRLEN *)(*mgp)->mg_ptr)) {
7565         Newxz(cache, PERL_MAGIC_UTF8_CACHESIZE * 2, STRLEN);
7566         (*mgp)->mg_ptr = (char *) cache;
7567     }
7568     assert(cache);
7569
7570     if (PL_utf8cache < 0 && SvPOKp(sv)) {
7571         /* SvPOKp() because, if sv is a reference, then SvPVX() is actually
7572            a pointer.  Note that we no longer cache utf8 offsets on refer-
7573            ences, but this check is still a good idea, for robustness.  */
7574         const U8 *start = (const U8 *) SvPVX_const(sv);
7575         const STRLEN realutf8 = utf8_length(start, start + byte);
7576
7577         assert_uft8_cache_coherent("utf8_mg_pos_cache_update", utf8, realutf8,
7578                                    sv);
7579     }
7580
7581     /* Cache is held with the later position first, to simplify the code
7582        that deals with unbounded ends.  */
7583        
7584     ASSERT_UTF8_CACHE(cache);
7585     if (cache[1] == 0) {
7586         /* Cache is totally empty  */
7587         cache[0] = utf8;
7588         cache[1] = byte;
7589     } else if (cache[3] == 0) {
7590         if (byte > cache[1]) {
7591             /* New one is larger, so goes first.  */
7592             cache[2] = cache[0];
7593             cache[3] = cache[1];
7594             cache[0] = utf8;
7595             cache[1] = byte;
7596         } else {
7597             cache[2] = utf8;
7598             cache[3] = byte;
7599         }
7600     } else {
7601 /* float casts necessary? XXX */
7602 #define THREEWAY_SQUARE(a,b,c,d) \
7603             ((float)((d) - (c))) * ((float)((d) - (c))) \
7604             + ((float)((c) - (b))) * ((float)((c) - (b))) \
7605                + ((float)((b) - (a))) * ((float)((b) - (a)))
7606
7607         /* Cache has 2 slots in use, and we know three potential pairs.
7608            Keep the two that give the lowest RMS distance. Do the
7609            calculation in bytes simply because we always know the byte
7610            length.  squareroot has the same ordering as the positive value,
7611            so don't bother with the actual square root.  */
7612         if (byte > cache[1]) {
7613             /* New position is after the existing pair of pairs.  */
7614             const float keep_earlier
7615                 = THREEWAY_SQUARE(0, cache[3], byte, blen);
7616             const float keep_later
7617                 = THREEWAY_SQUARE(0, cache[1], byte, blen);
7618
7619             if (keep_later < keep_earlier) {
7620                 cache[2] = cache[0];
7621                 cache[3] = cache[1];
7622             }
7623             cache[0] = utf8;
7624             cache[1] = byte;
7625         }
7626         else {
7627             const float keep_later = THREEWAY_SQUARE(0, byte, cache[1], blen);
7628             float b, c, keep_earlier;
7629             if (byte > cache[3]) {
7630                 /* New position is between the existing pair of pairs.  */
7631                 b = (float)cache[3];
7632                 c = (float)byte;
7633             } else {
7634                 /* New position is before the existing pair of pairs.  */
7635                 b = (float)byte;
7636                 c = (float)cache[3];
7637             }
7638             keep_earlier = THREEWAY_SQUARE(0, b, c, blen);
7639             if (byte > cache[3]) {
7640                 if (keep_later < keep_earlier) {
7641                     cache[2] = utf8;
7642                     cache[3] = byte;
7643                 }
7644                 else {
7645                     cache[0] = utf8;
7646                     cache[1] = byte;
7647                 }
7648             }
7649             else {
7650                 if (! (keep_later < keep_earlier)) {
7651                     cache[0] = cache[2];
7652                     cache[1] = cache[3];
7653                 }
7654                 cache[2] = utf8;
7655                 cache[3] = byte;
7656             }
7657         }
7658     }
7659     ASSERT_UTF8_CACHE(cache);
7660 }
7661
7662 /* We already know all of the way, now we may be able to walk back.  The same
7663    assumption is made as in S_sv_pos_u2b_midway(), namely that walking
7664    backward is half the speed of walking forward. */
7665 static STRLEN
7666 S_sv_pos_b2u_midway(pTHX_ const U8 *const s, const U8 *const target,
7667                     const U8 *end, STRLEN endu)
7668 {
7669     const STRLEN forw = target - s;
7670     STRLEN backw = end - target;
7671
7672     PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY;
7673
7674     if (forw < 2 * backw) {
7675         return utf8_length(s, target);
7676     }
7677
7678     while (end > target) {
7679         end--;
7680         while (UTF8_IS_CONTINUATION(*end)) {
7681             end--;
7682         }
7683         endu--;
7684     }
7685     return endu;
7686 }
7687
7688 /*
7689 =for apidoc sv_pos_b2u_flags
7690
7691 Converts C<offset> from a count of bytes from the start of the string, to
7692 a count of the equivalent number of UTF-8 chars.  Handles type coercion.
7693 C<flags> is passed to C<SvPV_flags>, and usually should be
7694 C<SV_GMAGIC|SV_CONST_RETURN> to handle magic.
7695
7696 =cut
7697 */
7698
7699 /*
7700  * sv_pos_b2u_flags() uses, like sv_pos_u2b_flags(), the mg_ptr of the
7701  * potential PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8
7702  * and byte offsets.
7703  *
7704  */
7705 STRLEN
7706 Perl_sv_pos_b2u_flags(pTHX_ SV *const sv, STRLEN const offset, U32 flags)
7707 {
7708     const U8* s;
7709     STRLEN len = 0; /* Actually always set, but let's keep gcc happy.  */
7710     STRLEN blen;
7711     MAGIC* mg = NULL;
7712     const U8* send;
7713     bool found = FALSE;
7714
7715     PERL_ARGS_ASSERT_SV_POS_B2U_FLAGS;
7716
7717     s = (const U8*)SvPV_flags(sv, blen, flags);
7718
7719     if (blen < offset)
7720         Perl_croak(aTHX_ "panic: sv_pos_b2u: bad byte offset, blen=%" UVuf
7721                    ", byte=%" UVuf, (UV)blen, (UV)offset);
7722
7723     send = s + offset;
7724
7725     if (!SvREADONLY(sv)
7726         && PL_utf8cache
7727         && SvTYPE(sv) >= SVt_PVMG
7728         && (mg = mg_find(sv, PERL_MAGIC_utf8)))
7729     {
7730         if (mg->mg_ptr) {
7731             STRLEN * const cache = (STRLEN *) mg->mg_ptr;
7732             if (cache[1] == offset) {
7733                 /* An exact match. */
7734                 return cache[0];
7735             }
7736             if (cache[3] == offset) {
7737                 /* An exact match. */
7738                 return cache[2];
7739             }
7740
7741             if (cache[1] < offset) {
7742                 /* We already know part of the way. */
7743                 if (mg->mg_len != -1) {
7744                     /* Actually, we know the end too.  */
7745                     len = cache[0]
7746                         + S_sv_pos_b2u_midway(aTHX_ s + cache[1], send,
7747                                               s + blen, mg->mg_len - cache[0]);
7748                 } else {
7749                     len = cache[0] + utf8_length(s + cache[1], send);
7750                 }
7751             }
7752             else if (cache[3] < offset) {
7753                 /* We're between the two cached pairs, so we do the calculation
7754                    offset by the byte/utf-8 positions for the earlier pair,
7755                    then add the utf-8 characters from the string start to
7756                    there.  */
7757                 len = S_sv_pos_b2u_midway(aTHX_ s + cache[3], send,
7758                                           s + cache[1], cache[0] - cache[2])
7759                     + cache[2];
7760
7761             }
7762             else { /* cache[3] > offset */
7763                 len = S_sv_pos_b2u_midway(aTHX_ s, send, s + cache[3],
7764                                           cache[2]);
7765
7766             }
7767             ASSERT_UTF8_CACHE(cache);
7768             found = TRUE;
7769         } else if (mg->mg_len != -1) {
7770             len = S_sv_pos_b2u_midway(aTHX_ s, send, s + blen, mg->mg_len);
7771             found = TRUE;
7772         }
7773     }
7774     if (!found || PL_utf8cache < 0) {
7775         const STRLEN real_len = utf8_length(s, send);
7776
7777         if (found && PL_utf8cache < 0)
7778             assert_uft8_cache_coherent("sv_pos_b2u", len, real_len, sv);
7779         len = real_len;
7780     }
7781
7782     if (PL_utf8cache) {
7783         if (blen == offset)
7784             utf8_mg_len_cache_update(sv, &mg, len);
7785         else
7786             utf8_mg_pos_cache_update(sv, &mg, offset, len, blen);
7787     }
7788
7789     return len;
7790 }
7791
7792 /*
7793 =for apidoc sv_pos_b2u
7794
7795 Converts the value pointed to by C<offsetp> from a count of bytes from the
7796 start of the string, to a count of the equivalent number of UTF-8 chars.
7797 Handles magic and type coercion.
7798
7799 Use C<sv_pos_b2u_flags> in preference, which correctly handles strings
7800 longer than 2Gb.
7801
7802 =cut
7803 */
7804
7805 /*
7806  * sv_pos_b2u() uses, like sv_pos_u2b(), the mg_ptr of the potential
7807  * PERL_MAGIC_utf8 of the sv to store the mapping between UTF-8 and
7808  * byte offsets.
7809  *
7810  */
7811 void
7812 Perl_sv_pos_b2u(pTHX_ SV *const sv, I32 *const offsetp)
7813 {
7814     PERL_ARGS_ASSERT_SV_POS_B2U;
7815
7816     if (!sv)
7817         return;
7818
7819     *offsetp = (I32)sv_pos_b2u_flags(sv, (STRLEN)*offsetp,
7820                                      SV_GMAGIC|SV_CONST_RETURN);
7821 }
7822
7823 static void
7824 S_assert_uft8_cache_coherent(pTHX_ const char *const func, STRLEN from_cache,
7825                              STRLEN real, SV *const sv)
7826 {
7827     PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT;
7828
7829     /* As this is debugging only code, save space by keeping this test here,
7830        rather than inlining it in all the callers.  */
7831     if (from_cache == real)
7832         return;
7833
7834     /* Need to turn the assertions off otherwise we may recurse infinitely
7835        while printing error messages.  */
7836     SAVEI8(PL_utf8cache);
7837     PL_utf8cache = 0;
7838     Perl_croak(aTHX_ "panic: %s cache %" UVuf " real %" UVuf " for %" SVf,
7839                func, (UV) from_cache, (UV) real, SVfARG(sv));
7840 }
7841
7842 /*
7843 =for apidoc sv_eq
7844
7845 Returns a boolean indicating whether the strings in the two SVs are
7846 identical.  Is UTF-8 and S<C<'use bytes'>> aware, handles get magic, and will
7847 coerce its args to strings if necessary.
7848
7849 =for apidoc sv_eq_flags
7850
7851 Returns a boolean indicating whether the strings in the two SVs are
7852 identical.  Is UTF-8 and S<C<'use bytes'>> aware and coerces its args to strings
7853 if necessary.  If the flags has the C<SV_GMAGIC> bit set, it handles get-magic, too.
7854
7855 =cut
7856 */
7857
7858 I32
7859 Perl_sv_eq_flags(pTHX_ SV *sv1, SV *sv2, const U32 flags)
7860 {
7861     const char *pv1;
7862     STRLEN cur1;
7863     const char *pv2;
7864     STRLEN cur2;
7865
7866     if (!sv1) {
7867         pv1 = "";
7868         cur1 = 0;
7869     }
7870     else {
7871         /* if pv1 and pv2 are the same, second SvPV_const call may
7872          * invalidate pv1 (if we are handling magic), so we may need to
7873          * make a copy */
7874         if (sv1 == sv2 && flags & SV_GMAGIC
7875          && (SvTHINKFIRST(sv1) || SvGMAGICAL(sv1))) {
7876             pv1 = SvPV_const(sv1, cur1);
7877             sv1 = newSVpvn_flags(pv1, cur1, SVs_TEMP | SvUTF8(sv2));
7878         }
7879         pv1 = SvPV_flags_const(sv1, cur1, flags);
7880     }
7881
7882     if (!sv2){
7883         pv2 = "";
7884         cur2 = 0;
7885     }
7886     else
7887         pv2 = SvPV_flags_const(sv2, cur2, flags);
7888
7889     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7890         /* Differing utf8ness.  */
7891         if (SvUTF8(sv1)) {
7892                   /* sv1 is the UTF-8 one  */
7893                   return bytes_cmp_utf8((const U8*)pv2, cur2,
7894                                         (const U8*)pv1, cur1) == 0;
7895         }
7896         else {
7897                   /* sv2 is the UTF-8 one  */
7898                   return bytes_cmp_utf8((const U8*)pv1, cur1,
7899                                         (const U8*)pv2, cur2) == 0;
7900         }
7901     }
7902
7903     if (cur1 == cur2)
7904         return (pv1 == pv2) || memEQ(pv1, pv2, cur1);
7905     else
7906         return 0;
7907 }
7908
7909 /*
7910 =for apidoc sv_cmp
7911
7912 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7913 string in C<sv1> is less than, equal to, or greater than the string in
7914 C<sv2>.  Is UTF-8 and S<C<'use bytes'>> aware, handles get magic, and will
7915 coerce its args to strings if necessary.  See also C<L</sv_cmp_locale>>.
7916
7917 =for apidoc sv_cmp_flags
7918
7919 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
7920 string in C<sv1> is less than, equal to, or greater than the string in
7921 C<sv2>.  Is UTF-8 and S<C<'use bytes'>> aware and will coerce its args to strings
7922 if necessary.  If the flags has the C<SV_GMAGIC> bit set, it handles get magic.  See
7923 also C<L</sv_cmp_locale_flags>>.
7924
7925 =cut
7926 */
7927
7928 I32
7929 Perl_sv_cmp(pTHX_ SV *const sv1, SV *const sv2)
7930 {
7931     return sv_cmp_flags(sv1, sv2, SV_GMAGIC);
7932 }
7933
7934 I32
7935 Perl_sv_cmp_flags(pTHX_ SV *const sv1, SV *const sv2,
7936                   const U32 flags)
7937 {
7938     STRLEN cur1, cur2;
7939     const char *pv1, *pv2;
7940     I32  cmp;
7941     SV *svrecode = NULL;
7942
7943     if (!sv1) {
7944         pv1 = "";
7945         cur1 = 0;
7946     }
7947     else
7948         pv1 = SvPV_flags_const(sv1, cur1, flags);
7949
7950     if (!sv2) {
7951         pv2 = "";
7952         cur2 = 0;
7953     }
7954     else
7955         pv2 = SvPV_flags_const(sv2, cur2, flags);
7956
7957     if (cur1 && cur2 && SvUTF8(sv1) != SvUTF8(sv2) && !IN_BYTES) {
7958         /* Differing utf8ness.  */
7959         if (SvUTF8(sv1)) {
7960                 const int retval = -bytes_cmp_utf8((const U8*)pv2, cur2,
7961                                                    (const U8*)pv1, cur1);
7962                 return retval ? retval < 0 ? -1 : +1 : 0;
7963         }
7964         else {
7965                 const int retval = bytes_cmp_utf8((const U8*)pv1, cur1,
7966                                                   (const U8*)pv2, cur2);
7967                 return retval ? retval < 0 ? -1 : +1 : 0;
7968         }
7969     }
7970
7971     /* Here, if both are non-NULL, then they have the same UTF8ness. */
7972
7973     if (!cur1) {
7974         cmp = cur2 ? -1 : 0;
7975     } else if (!cur2) {
7976         cmp = 1;
7977     } else {
7978         STRLEN shortest_len = cur1 < cur2 ? cur1 : cur2;
7979
7980 #ifdef EBCDIC
7981         if (! DO_UTF8(sv1)) {
7982 #endif
7983             const I32 retval = memcmp((const void*)pv1,
7984                                       (const void*)pv2,
7985                                       shortest_len);
7986             if (retval) {
7987                 cmp = retval < 0 ? -1 : 1;
7988             } else if (cur1 == cur2) {
7989                 cmp = 0;
7990             } else {
7991                 cmp = cur1 < cur2 ? -1 : 1;
7992             }
7993 #ifdef EBCDIC
7994         }
7995         else {  /* Both are to be treated as UTF-EBCDIC */
7996
7997             /* EBCDIC UTF-8 is complicated by the fact that it is based on I8
7998              * which remaps code points 0-255.  We therefore generally have to
7999              * unmap back to the original values to get an accurate comparison.
8000              * But we don't have to do that for UTF-8 invariants, as by
8001              * definition, they aren't remapped, nor do we have to do it for
8002              * above-latin1 code points, as they also aren't remapped.  (This
8003              * code also works on ASCII platforms, but the memcmp() above is
8004              * much faster). */
8005
8006             const char *e = pv1 + shortest_len;
8007
8008             /* Find the first bytes that differ between the two strings */
8009             while (pv1 < e && *pv1 == *pv2) {
8010                 pv1++;
8011                 pv2++;
8012             }
8013
8014
8015             if (pv1 == e) { /* Are the same all the way to the end */
8016                 if (cur1 == cur2) {
8017                     cmp = 0;
8018                 } else {
8019                     cmp = cur1 < cur2 ? -1 : 1;
8020                 }
8021             }
8022             else   /* Here *pv1 and *pv2 are not equal, but all bytes earlier
8023                     * in the strings were.  The current bytes may or may not be
8024                     * at the beginning of a character.  But neither or both are
8025                     * (or else earlier bytes would have been different).  And
8026                     * if we are in the middle of a character, the two
8027                     * characters are comprised of the same number of bytes
8028                     * (because in this case the start bytes are the same, and
8029                     * the start bytes encode the character's length). */
8030                  if (UTF8_IS_INVARIANT(*pv1))
8031             {
8032                 /* If both are invariants; can just compare directly */
8033                 if (UTF8_IS_INVARIANT(*pv2)) {
8034                     cmp = ((U8) *pv1 < (U8) *pv2) ? -1 : 1;
8035                 }
8036                 else   /* Since *pv1 is invariant, it is the whole character,
8037                           which means it is at the beginning of a character.
8038                           That means pv2 is also at the beginning of a
8039                           character (see earlier comment).  Since it isn't
8040                           invariant, it must be a start byte.  If it starts a
8041                           character whose code point is above 255, that
8042                           character is greater than any single-byte char, which
8043                           *pv1 is */
8044                       if (UTF8_IS_ABOVE_LATIN1_START(*pv2))
8045                 {
8046                     cmp = -1;
8047                 }
8048                 else {
8049                     /* Here, pv2 points to a character composed of 2 bytes
8050                      * whose code point is < 256.  Get its code point and
8051                      * compare with *pv1 */
8052                     cmp = ((U8) *pv1 < EIGHT_BIT_UTF8_TO_NATIVE(*pv2, *(pv2 + 1)))
8053                            ?  -1
8054                            : 1;
8055                 }
8056             }
8057             else   /* The code point starting at pv1 isn't a single byte */
8058                  if (UTF8_IS_INVARIANT(*pv2))
8059             {
8060                 /* But here, the code point starting at *pv2 is a single byte,
8061                  * and so *pv1 must begin a character, hence is a start byte.
8062                  * If that character is above 255, it is larger than any
8063                  * single-byte char, which *pv2 is */
8064                 if (UTF8_IS_ABOVE_LATIN1_START(*pv1)) {
8065                     cmp = 1;
8066                 }
8067                 else {
8068                     /* Here, pv1 points to a character composed of 2 bytes
8069                      * whose code point is < 256.  Get its code point and
8070                      * compare with the single byte character *pv2 */
8071                     cmp = (EIGHT_BIT_UTF8_TO_NATIVE(*pv1, *(pv1 + 1)) < (U8) *pv2)
8072                           ?  -1
8073                           : 1;
8074                 }
8075             }
8076             else   /* Here, we've ruled out either *pv1 and *pv2 being
8077                       invariant.  That means both are part of variants, but not
8078                       necessarily at the start of a character */
8079                  if (   UTF8_IS_ABOVE_LATIN1_START(*pv1)
8080                      || UTF8_IS_ABOVE_LATIN1_START(*pv2))
8081             {
8082                 /* Here, at least one is the start of a character, which means
8083                  * the other is also a start byte.  And the code point of at
8084                  * least one of the characters is above 255.  It is a
8085                  * characteristic of UTF-EBCDIC that all start bytes for
8086                  * above-latin1 code points are well behaved as far as code
8087                  * point comparisons go, and all are larger than all other
8088                  * start bytes, so the comparison with those is also well
8089                  * behaved */
8090                 cmp = ((U8) *pv1 < (U8) *pv2) ? -1 : 1;
8091             }
8092             else {
8093                 /* Here both *pv1 and *pv2 are part of variant characters.
8094                  * They could be both continuations, or both start characters.
8095                  * (One or both could even be an illegal start character (for
8096                  * an overlong) which for the purposes of sorting we treat as
8097                  * legal. */
8098                 if (UTF8_IS_CONTINUATION(*pv1)) {
8099
8100                     /* If they are continuations for code points above 255,
8101                      * then comparing the current byte is sufficient, as there
8102                      * is no remapping of these and so the comparison is
8103                      * well-behaved.   We determine if they are such
8104                      * continuations by looking at the preceding byte.  It
8105                      * could be a start byte, from which we can tell if it is
8106                      * for an above 255 code point.  Or it could be a
8107                      * continuation, which means the character occupies at
8108                      * least 3 bytes, so must be above 255.  */
8109                     if (   UTF8_IS_CONTINUATION(*(pv2 - 1))
8110                         || UTF8_IS_ABOVE_LATIN1_START(*(pv2 -1)))
8111                     {
8112                         cmp = ((U8) *pv1 < (U8) *pv2) ? -1 : 1;
8113                         goto cmp_done;
8114                     }
8115
8116                     /* Here, the continuations are for code points below 256;
8117                      * back up one to get to the start byte */
8118                     pv1--;
8119                     pv2--;
8120                 }
8121
8122                 /* We need to get the actual native code point of each of these
8123                  * variants in order to compare them */
8124                 cmp =  (  EIGHT_BIT_UTF8_TO_NATIVE(*pv1, *(pv1 + 1))
8125                         < EIGHT_BIT_UTF8_TO_NATIVE(*pv2, *(pv2 + 1)))
8126                         ? -1
8127                         : 1;
8128             }
8129         }
8130       cmp_done: ;
8131 #endif
8132     }
8133
8134     SvREFCNT_dec(svrecode);
8135
8136     return cmp;
8137 }
8138
8139 /*
8140 =for apidoc sv_cmp_locale
8141
8142 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
8143 S<C<'use bytes'>> aware, handles get magic, and will coerce its args to strings
8144 if necessary.  See also C<L</sv_cmp>>.
8145
8146 =for apidoc sv_cmp_locale_flags
8147
8148 Compares the strings in two SVs in a locale-aware manner.  Is UTF-8 and
8149 S<C<'use bytes'>> aware and will coerce its args to strings if necessary.  If
8150 the flags contain C<SV_GMAGIC>, it handles get magic.  See also
8151 C<L</sv_cmp_flags>>.
8152
8153 =cut
8154 */
8155
8156 I32
8157 Perl_sv_cmp_locale(pTHX_ SV *const sv1, SV *const sv2)
8158 {
8159     return sv_cmp_locale_flags(sv1, sv2, SV_GMAGIC);
8160 }
8161
8162 I32
8163 Perl_sv_cmp_locale_flags(pTHX_ SV *const sv1, SV *const sv2,
8164                          const U32 flags)
8165 {
8166 #ifdef USE_LOCALE_COLLATE
8167
8168     char *pv1, *pv2;
8169     STRLEN len1, len2;
8170     I32 retval;
8171
8172     if (PL_collation_standard)
8173         goto raw_compare;
8174
8175     len1 = len2 = 0;
8176
8177     /* Revert to using raw compare if both operands exist, but either one
8178      * doesn't transform properly for collation */
8179     if (sv1 && sv2) {
8180         pv1 = sv_collxfrm_flags(sv1, &len1, flags);
8181         if (! pv1) {
8182             goto raw_compare;
8183         }
8184         pv2 = sv_collxfrm_flags(sv2, &len2, flags);
8185         if (! pv2) {
8186             goto raw_compare;
8187         }
8188     }
8189     else {
8190         pv1 = sv1 ? sv_collxfrm_flags(sv1, &len1, flags) : (char *) NULL;
8191         pv2 = sv2 ? sv_collxfrm_flags(sv2, &len2, flags) : (char *) NULL;
8192     }
8193
8194     if (!pv1 || !len1) {
8195         if (pv2 && len2)
8196             return -1;
8197         else
8198             goto raw_compare;
8199     }
8200     else {
8201         if (!pv2 || !len2)
8202             return 1;
8203     }
8204
8205     retval = memcmp((void*)pv1, (void*)pv2, len1 < len2 ? len1 : len2);
8206
8207     if (retval)
8208         return retval < 0 ? -1 : 1;
8209
8210     /*
8211      * When the result of collation is equality, that doesn't mean
8212      * that there are no differences -- some locales exclude some
8213      * characters from consideration.  So to avoid false equalities,
8214      * we use the raw string as a tiebreaker.
8215      */
8216
8217   raw_compare:
8218     /* FALLTHROUGH */
8219
8220 #else
8221     PERL_UNUSED_ARG(flags);
8222 #endif /* USE_LOCALE_COLLATE */
8223
8224     return sv_cmp(sv1, sv2);
8225 }
8226
8227
8228 #ifdef USE_LOCALE_COLLATE
8229
8230 /*
8231 =for apidoc sv_collxfrm
8232
8233 This calls C<sv_collxfrm_flags> with the SV_GMAGIC flag.  See
8234 C<L</sv_collxfrm_flags>>.
8235
8236 =for apidoc sv_collxfrm_flags
8237
8238 Add Collate Transform magic to an SV if it doesn't already have it.  If the
8239 flags contain C<SV_GMAGIC>, it handles get-magic.
8240
8241 Any scalar variable may carry C<PERL_MAGIC_collxfrm> magic that contains the
8242 scalar data of the variable, but transformed to such a format that a normal
8243 memory comparison can be used to compare the data according to the locale
8244 settings.
8245
8246 =cut
8247 */
8248
8249 char *
8250 Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp, const I32 flags)
8251 {
8252     MAGIC *mg;
8253
8254     PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS;
8255
8256     mg = SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_collxfrm) : (MAGIC *) NULL;
8257
8258     /* If we don't have collation magic on 'sv', or the locale has changed
8259      * since the last time we calculated it, get it and save it now */
8260     if (!mg || !mg->mg_ptr || *(U32*)mg->mg_ptr != PL_collation_ix) {
8261         const char *s;
8262         char *xf;
8263         STRLEN len, xlen;
8264
8265         /* Free the old space */
8266         if (mg)
8267             Safefree(mg->mg_ptr);
8268
8269         s = SvPV_flags_const(sv, len, flags);
8270         if ((xf = _mem_collxfrm(s, len, &xlen, cBOOL(SvUTF8(sv))))) {
8271             if (! mg) {
8272                 mg = sv_magicext(sv, 0, PERL_MAGIC_collxfrm, &PL_vtbl_collxfrm,
8273                                  0, 0);
8274                 assert(mg);
8275             }
8276             mg->mg_ptr = xf;
8277             mg->mg_len = xlen;
8278         }
8279         else {
8280             if (mg) {
8281                 mg->mg_ptr = NULL;
8282                 mg->mg_len = -1;
8283             }
8284         }
8285     }
8286
8287     if (mg && mg->mg_ptr) {
8288         *nxp = mg->mg_len;
8289         return mg->mg_ptr + sizeof(PL_collation_ix);
8290     }
8291     else {
8292         *nxp = 0;
8293         return NULL;
8294     }
8295 }
8296
8297 #endif /* USE_LOCALE_COLLATE */
8298
8299 static char *
8300 S_sv_gets_append_to_utf8(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8301 {
8302     SV * const tsv = newSV(0);
8303     ENTER;
8304     SAVEFREESV(tsv);
8305     sv_gets(tsv, fp, 0);
8306     sv_utf8_upgrade_nomg(tsv);
8307     SvCUR_set(sv,append);
8308     sv_catsv(sv,tsv);
8309     LEAVE;
8310     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8311 }
8312
8313 static char *
8314 S_sv_gets_read_record(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8315 {
8316     SSize_t bytesread;
8317     const STRLEN recsize = SvUV(SvRV(PL_rs)); /* RsRECORD() guarantees > 0. */
8318       /* Grab the size of the record we're getting */
8319     char *buffer = SvGROW(sv, (STRLEN)(recsize + append + 1)) + append;
8320     
8321     /* Go yank in */
8322 #ifdef __VMS
8323     int fd;
8324     Stat_t st;
8325
8326     /* With a true, record-oriented file on VMS, we need to use read directly
8327      * to ensure that we respect RMS record boundaries.  The user is responsible
8328      * for providing a PL_rs value that corresponds to the FAB$W_MRS (maximum
8329      * record size) field.  N.B. This is likely to produce invalid results on
8330      * varying-width character data when a record ends mid-character.
8331      */
8332     fd = PerlIO_fileno(fp);
8333     if (fd != -1
8334         && PerlLIO_fstat(fd, &st) == 0
8335         && (st.st_fab_rfm == FAB$C_VAR
8336             || st.st_fab_rfm == FAB$C_VFC
8337             || st.st_fab_rfm == FAB$C_FIX)) {
8338
8339         bytesread = PerlLIO_read(fd, buffer, recsize);
8340     }
8341     else /* in-memory file from PerlIO::Scalar
8342           * or not a record-oriented file
8343           */
8344 #endif
8345     {
8346         bytesread = PerlIO_read(fp, buffer, recsize);
8347
8348         /* At this point, the logic in sv_get() means that sv will
8349            be treated as utf-8 if the handle is utf8.
8350         */
8351         if (PerlIO_isutf8(fp) && bytesread > 0) {
8352             char *bend = buffer + bytesread;
8353             char *bufp = buffer;
8354             size_t charcount = 0;
8355             bool charstart = TRUE;
8356             STRLEN skip = 0;
8357
8358             while (charcount < recsize) {
8359                 /* count accumulated characters */
8360                 while (bufp < bend) {
8361                     if (charstart) {
8362                         skip = UTF8SKIP(bufp);
8363                     }
8364                     if (bufp + skip > bend) {
8365                         /* partial at the end */
8366                         charstart = FALSE;
8367                         break;
8368                     }
8369                     else {
8370                         ++charcount;
8371                         bufp += skip;
8372                         charstart = TRUE;
8373                     }
8374                 }
8375
8376                 if (charcount < recsize) {
8377                     STRLEN readsize;
8378                     STRLEN bufp_offset = bufp - buffer;
8379                     SSize_t morebytesread;
8380
8381                     /* originally I read enough to fill any incomplete
8382                        character and the first byte of the next
8383                        character if needed, but if there's many
8384                        multi-byte encoded characters we're going to be
8385                        making a read call for every character beyond
8386                        the original read size.
8387
8388                        So instead, read the rest of the character if
8389                        any, and enough bytes to match at least the
8390                        start bytes for each character we're going to
8391                        read.
8392                     */
8393                     if (charstart)
8394                         readsize = recsize - charcount;
8395                     else 
8396                         readsize = skip - (bend - bufp) + recsize - charcount - 1;
8397                     buffer = SvGROW(sv, append + bytesread + readsize + 1) + append;
8398                     bend = buffer + bytesread;
8399                     morebytesread = PerlIO_read(fp, bend, readsize);
8400                     if (morebytesread <= 0) {
8401                         /* we're done, if we still have incomplete
8402                            characters the check code in sv_gets() will
8403                            warn about them.
8404
8405                            I'd originally considered doing
8406                            PerlIO_ungetc() on all but the lead
8407                            character of the incomplete character, but
8408                            read() doesn't do that, so I don't.
8409                         */
8410                         break;
8411                     }
8412
8413                     /* prepare to scan some more */
8414                     bytesread += morebytesread;
8415                     bend = buffer + bytesread;
8416                     bufp = buffer + bufp_offset;
8417                 }
8418             }
8419         }
8420     }
8421
8422     if (bytesread < 0)
8423         bytesread = 0;
8424     SvCUR_set(sv, bytesread + append);
8425     buffer[bytesread] = '\0';
8426     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8427 }
8428
8429 /*
8430 =for apidoc sv_gets
8431
8432 Get a line from the filehandle and store it into the SV, optionally
8433 appending to the currently-stored string.  If C<append> is not 0, the
8434 line is appended to the SV instead of overwriting it.  C<append> should
8435 be set to the byte offset that the appended string should start at
8436 in the SV (typically, C<SvCUR(sv)> is a suitable choice).
8437
8438 =cut
8439 */
8440
8441 char *
8442 Perl_sv_gets(pTHX_ SV *const sv, PerlIO *const fp, I32 append)
8443 {
8444     const char *rsptr;
8445     STRLEN rslen;
8446     STDCHAR rslast;
8447     STDCHAR *bp;
8448     SSize_t cnt;
8449     int i = 0;
8450     int rspara = 0;
8451
8452     PERL_ARGS_ASSERT_SV_GETS;
8453
8454     if (SvTHINKFIRST(sv))
8455         sv_force_normal_flags(sv, append ? 0 : SV_COW_DROP_PV);
8456     /* XXX. If you make this PVIV, then copy on write can copy scalars read
8457        from <>.
8458        However, perlbench says it's slower, because the existing swipe code
8459        is faster than copy on write.
8460        Swings and roundabouts.  */
8461     SvUPGRADE(sv, SVt_PV);
8462
8463     if (append) {
8464         /* line is going to be appended to the existing buffer in the sv */
8465         if (PerlIO_isutf8(fp)) {
8466             if (!SvUTF8(sv)) {
8467                 sv_utf8_upgrade_nomg(sv);
8468                 sv_pos_u2b(sv,&append,0);
8469             }
8470         } else if (SvUTF8(sv)) {
8471             return S_sv_gets_append_to_utf8(aTHX_ sv, fp, append);
8472         }
8473     }
8474
8475     SvPOK_only(sv);
8476     if (!append) {
8477         /* not appending - "clear" the string by setting SvCUR to 0,
8478          * the pv is still avaiable. */
8479         SvCUR_set(sv,0);
8480     }
8481     if (PerlIO_isutf8(fp))
8482         SvUTF8_on(sv);
8483
8484     if (IN_PERL_COMPILETIME) {
8485         /* we always read code in line mode */
8486         rsptr = "\n";
8487         rslen = 1;
8488     }
8489     else if (RsSNARF(PL_rs)) {
8490         /* If it is a regular disk file use size from stat() as estimate
8491            of amount we are going to read -- may result in mallocing
8492            more memory than we really need if the layers below reduce
8493            the size we read (e.g. CRLF or a gzip layer).
8494          */
8495         Stat_t st;
8496         int fd = PerlIO_fileno(fp);
8497         if (fd >= 0 && (PerlLIO_fstat(fd, &st) == 0) && S_ISREG(st.st_mode))  {
8498             const Off_t offset = PerlIO_tell(fp);
8499             if (offset != (Off_t) -1 && st.st_size + append > offset) {
8500 #ifdef PERL_COPY_ON_WRITE
8501                 /* Add an extra byte for the sake of copy-on-write's
8502                  * buffer reference count. */
8503                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 2));
8504 #else
8505                 (void) SvGROW(sv, (STRLEN)((st.st_size - offset) + append + 1));
8506 #endif
8507             }
8508         }
8509         rsptr = NULL;
8510         rslen = 0;
8511     }
8512     else if (RsRECORD(PL_rs)) {
8513         return S_sv_gets_read_record(aTHX_ sv, fp, append);
8514     }
8515     else if (RsPARA(PL_rs)) {
8516         rsptr = "\n\n";
8517         rslen = 2;
8518         rspara = 1;
8519     }
8520     else {
8521         /* Get $/ i.e. PL_rs into same encoding as stream wants */
8522         if (PerlIO_isutf8(fp)) {
8523             rsptr = SvPVutf8(PL_rs, rslen);
8524         }
8525         else {
8526             if (SvUTF8(PL_rs)) {
8527                 if (!sv_utf8_downgrade(PL_rs, TRUE)) {
8528                     Perl_croak(aTHX_ "Wide character in $/");
8529                 }
8530             }
8531             /* extract the raw pointer to the record separator */
8532             rsptr = SvPV_const(PL_rs, rslen);
8533         }
8534     }
8535
8536     /* rslast is the last character in the record separator
8537      * note we don't use rslast except when rslen is true, so the
8538      * null assign is a placeholder. */
8539     rslast = rslen ? rsptr[rslen - 1] : '\0';
8540
8541     if (rspara) {        /* have to do this both before and after */
8542                          /* to make sure file boundaries work right */
8543         while (1) {
8544             if (PerlIO_eof(fp))
8545                 return 0;
8546             i = PerlIO_getc(fp);
8547             if (i != '\n') {
8548                 if (i == -1)
8549                     return 0;
8550                 PerlIO_ungetc(fp,i);
8551                 break;
8552             }
8553         }
8554     }
8555
8556     /* See if we know enough about I/O mechanism to cheat it ! */
8557
8558     /* This used to be #ifdef test - it is made run-time test for ease
8559        of abstracting out stdio interface. One call should be cheap
8560        enough here - and may even be a macro allowing compile
8561        time optimization.
8562      */
8563
8564     if (PerlIO_fast_gets(fp)) {
8565     /*
8566      * We can do buffer based IO operations on this filehandle.
8567      *
8568      * This means we can bypass a lot of subcalls and process
8569      * the buffer directly, it also means we know the upper bound
8570      * on the amount of data we might read of the current buffer
8571      * into our sv. Knowing this allows us to preallocate the pv
8572      * to be able to hold that maximum, which allows us to simplify
8573      * a lot of logic. */
8574
8575     /*
8576      * We're going to steal some values from the stdio struct
8577      * and put EVERYTHING in the innermost loop into registers.
8578      */
8579     STDCHAR *ptr;       /* pointer into fp's read-ahead buffer */
8580     STRLEN bpx;         /* length of the data in the target sv
8581                            used to fix pointers after a SvGROW */
8582     I32 shortbuffered;  /* If the pv buffer is shorter than the amount
8583                            of data left in the read-ahead buffer.
8584                            If 0 then the pv buffer can hold the full
8585                            amount left, otherwise this is the amount it
8586                            can hold. */
8587
8588     /* Here is some breathtakingly efficient cheating */
8589
8590     /* When you read the following logic resist the urge to think
8591      * of record separators that are 1 byte long. They are an
8592      * uninteresting special (simple) case.
8593      *
8594      * Instead think of record separators which are at least 2 bytes
8595      * long, and keep in mind that we need to deal with such
8596      * separators when they cross a read-ahead buffer boundary.
8597      *
8598      * Also consider that we need to gracefully deal with separators
8599      * that may be longer than a single read ahead buffer.
8600      *
8601      * Lastly do not forget we want to copy the delimiter as well. We
8602      * are copying all data in the file _up_to_and_including_ the separator
8603      * itself.
8604      *
8605      * Now that you have all that in mind here is what is happening below:
8606      *
8607      * 1. When we first enter the loop we do some memory book keeping to see
8608      * how much free space there is in the target SV. (This sub assumes that
8609      * it is operating on the same SV most of the time via $_ and that it is
8610      * going to be able to reuse the same pv buffer each call.) If there is
8611      * "enough" room then we set "shortbuffered" to how much space there is
8612      * and start reading forward.
8613      *
8614      * 2. When we scan forward we copy from the read-ahead buffer to the target
8615      * SV's pv buffer. While we go we watch for the end of the read-ahead buffer,
8616      * and the end of the of pv, as well as for the "rslast", which is the last
8617      * char of the separator.
8618      *
8619      * 3. When scanning forward if we see rslast then we jump backwards in *pv*
8620      * (which has a "complete" record up to the point we saw rslast) and check
8621      * it to see if it matches the separator. If it does we are done. If it doesn't
8622      * we continue on with the scan/copy.
8623      *
8624      * 4. If we run out of read-ahead buffer (cnt goes to 0) then we have to get
8625      * the IO system to read the next buffer. We do this by doing a getc(), which
8626      * returns a single char read (or EOF), and prefills the buffer, and also
8627      * allows us to find out how full the buffer is.  We use this information to
8628      * SvGROW() the sv to the size remaining in the buffer, after which we copy
8629      * the returned single char into the target sv, and then go back into scan
8630      * forward mode.
8631      *
8632      * 5. If we run out of write-buffer then we SvGROW() it by the size of the
8633      * remaining space in the read-buffer.
8634      *
8635      * Note that this code despite its twisty-turny nature is pretty darn slick.
8636      * It manages single byte separators, multi-byte cross boundary separators,
8637      * and cross-read-buffer separators cleanly and efficiently at the cost
8638      * of potentially greatly overallocating the target SV.
8639      *
8640      * Yves
8641      */
8642
8643
8644     /* get the number of bytes remaining in the read-ahead buffer
8645      * on first call on a given fp this will return 0.*/
8646     cnt = PerlIO_get_cnt(fp);
8647
8648     /* make sure we have the room */
8649     if ((I32)(SvLEN(sv) - append) <= cnt + 1) {
8650         /* Not room for all of it
8651            if we are looking for a separator and room for some
8652          */
8653         if (rslen && cnt > 80 && (I32)SvLEN(sv) > append) {
8654             /* just process what we have room for */
8655             shortbuffered = cnt - SvLEN(sv) + append + 1;
8656             cnt -= shortbuffered;
8657         }
8658         else {
8659             /* ensure that the target sv has enough room to hold
8660              * the rest of the read-ahead buffer */
8661             shortbuffered = 0;
8662             /* remember that cnt can be negative */
8663             SvGROW(sv, (STRLEN)(append + (cnt <= 0 ? 2 : (cnt + 1))));
8664         }
8665     }
8666     else {
8667         /* we have enough room to hold the full buffer, lets scream */
8668         shortbuffered = 0;
8669     }
8670
8671     /* extract the pointer to sv's string buffer, offset by append as necessary */
8672     bp = (STDCHAR*)SvPVX_const(sv) + append;  /* move these two too to registers */
8673     /* extract the point to the read-ahead buffer */
8674     ptr = (STDCHAR*)PerlIO_get_ptr(fp);
8675
8676     /* some trace debug output */
8677     DEBUG_P(PerlIO_printf(Perl_debug_log,
8678         "Screamer: entering, ptr=%" UVuf ", cnt=%ld\n",PTR2UV(ptr),(long)cnt));
8679     DEBUG_P(PerlIO_printf(Perl_debug_log,
8680         "Screamer: entering: PerlIO * thinks ptr=%" UVuf ", cnt=%" IVdf ", base=%"
8681          UVuf "\n",
8682                PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8683                PTR2UV(PerlIO_has_base(fp) ? PerlIO_get_base(fp) : 0)));
8684
8685     for (;;) {
8686       screamer:
8687         /* if there is stuff left in the read-ahead buffer */
8688         if (cnt > 0) {
8689             /* if there is a separator */
8690             if (rslen) {
8691                 /* find next rslast */
8692                 STDCHAR *p;
8693
8694                 /* shortcut common case of blank line */
8695                 cnt--;
8696                 if ((*bp++ = *ptr++) == rslast)
8697                     goto thats_all_folks;
8698
8699                 p = (STDCHAR *)memchr(ptr, rslast, cnt);
8700                 if (p) {
8701                     SSize_t got = p - ptr + 1;
8702                     Copy(ptr, bp, got, STDCHAR);
8703                     ptr += got;
8704                     bp  += got;
8705                     cnt -= got;
8706                     goto thats_all_folks;
8707                 }
8708                 Copy(ptr, bp, cnt, STDCHAR);
8709                 ptr += cnt;
8710                 bp  += cnt;
8711                 cnt = 0;
8712             }
8713             else {
8714                 /* no separator, slurp the full buffer */
8715                 Copy(ptr, bp, cnt, char);            /* this     |  eat */
8716                 bp += cnt;                           /* screams  |  dust */
8717                 ptr += cnt;                          /* louder   |  sed :-) */
8718                 cnt = 0;
8719                 assert (!shortbuffered);
8720                 goto cannot_be_shortbuffered;
8721             }
8722         }
8723         
8724         if (shortbuffered) {            /* oh well, must extend */
8725             /* we didnt have enough room to fit the line into the target buffer
8726              * so we must extend the target buffer and keep going */
8727             cnt = shortbuffered;
8728             shortbuffered = 0;
8729             bpx = bp - (STDCHAR*)SvPVX_const(sv); /* box up before relocation */
8730             SvCUR_set(sv, bpx);
8731             /* extned the target sv's buffer so it can hold the full read-ahead buffer */
8732             SvGROW(sv, SvLEN(sv) + append + cnt + 2);
8733             bp = (STDCHAR*)SvPVX_const(sv) + bpx; /* unbox after relocation */
8734             continue;
8735         }
8736
8737     cannot_be_shortbuffered:
8738         /* we need to refill the read-ahead buffer if possible */
8739
8740         DEBUG_P(PerlIO_printf(Perl_debug_log,
8741                              "Screamer: going to getc, ptr=%" UVuf ", cnt=%" IVdf "\n",
8742                               PTR2UV(ptr),(IV)cnt));
8743         PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt); /* deregisterize cnt and ptr */
8744
8745         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8746            "Screamer: pre: FILE * thinks ptr=%" UVuf ", cnt=%" IVdf ", base=%" UVuf "\n",
8747             PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8748             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8749
8750         /*
8751             call PerlIO_getc() to let it prefill the lookahead buffer
8752
8753             This used to call 'filbuf' in stdio form, but as that behaves like
8754             getc when cnt <= 0 we use PerlIO_getc here to avoid introducing
8755             another abstraction.
8756
8757             Note we have to deal with the char in 'i' if we are not at EOF
8758         */
8759         bpx = bp - (STDCHAR*)SvPVX_const(sv);
8760         /* signals might be called here, possibly modifying sv */
8761         i   = PerlIO_getc(fp);          /* get more characters */
8762         bp = (STDCHAR*)SvPVX_const(sv) + bpx;
8763
8764         DEBUG_Pv(PerlIO_printf(Perl_debug_log,
8765            "Screamer: post: FILE * thinks ptr=%" UVuf ", cnt=%" IVdf ", base=%" UVuf "\n",
8766             PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8767             PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8768
8769         /* find out how much is left in the read-ahead buffer, and rextract its pointer */
8770         cnt = PerlIO_get_cnt(fp);
8771         ptr = (STDCHAR*)PerlIO_get_ptr(fp);     /* reregisterize cnt and ptr */
8772         DEBUG_P(PerlIO_printf(Perl_debug_log,
8773             "Screamer: after getc, ptr=%" UVuf ", cnt=%" IVdf "\n",
8774             PTR2UV(ptr),(IV)cnt));
8775
8776         if (i == EOF)                   /* all done for ever? */
8777             goto thats_really_all_folks;
8778
8779         /* make sure we have enough space in the target sv */
8780         bpx = bp - (STDCHAR*)SvPVX_const(sv);   /* box up before relocation */
8781         SvCUR_set(sv, bpx);
8782         SvGROW(sv, bpx + cnt + 2);
8783         bp = (STDCHAR*)SvPVX_const(sv) + bpx;   /* unbox after relocation */
8784
8785         /* copy of the char we got from getc() */
8786         *bp++ = (STDCHAR)i;             /* store character from PerlIO_getc */
8787
8788         /* make sure we deal with the i being the last character of a separator */
8789         if (rslen && (STDCHAR)i == rslast)  /* all done for now? */
8790             goto thats_all_folks;
8791     }
8792
8793   thats_all_folks:
8794     /* check if we have actually found the separator - only really applies
8795      * when rslen > 1 */
8796     if ((rslen > 1 && (STRLEN)(bp - (STDCHAR*)SvPVX_const(sv)) < rslen) ||
8797           memNE((char*)bp - rslen, rsptr, rslen))
8798         goto screamer;                          /* go back to the fray */
8799   thats_really_all_folks:
8800     if (shortbuffered)
8801         cnt += shortbuffered;
8802         DEBUG_P(PerlIO_printf(Perl_debug_log,
8803              "Screamer: quitting, ptr=%" UVuf ", cnt=%" IVdf "\n",PTR2UV(ptr),(IV)cnt));
8804     PerlIO_set_ptrcnt(fp, (STDCHAR*)ptr, cnt);  /* put these back or we're in trouble */
8805     DEBUG_P(PerlIO_printf(Perl_debug_log,
8806         "Screamer: end: FILE * thinks ptr=%" UVuf ", cnt=%" IVdf ", base=%" UVuf
8807         "\n",
8808         PTR2UV(PerlIO_get_ptr(fp)), (IV)PerlIO_get_cnt(fp),
8809         PTR2UV(PerlIO_has_base (fp) ? PerlIO_get_base(fp) : 0)));
8810     *bp = '\0';
8811     SvCUR_set(sv, bp - (STDCHAR*)SvPVX_const(sv));      /* set length */
8812     DEBUG_P(PerlIO_printf(Perl_debug_log,
8813         "Screamer: done, len=%ld, string=|%.*s|\n",
8814         (long)SvCUR(sv),(int)SvCUR(sv),SvPVX_const(sv)));
8815     }
8816    else
8817     {
8818        /*The big, slow, and stupid way. */
8819         STDCHAR buf[8192];
8820
8821       screamer2:
8822         if (rslen) {
8823             const STDCHAR * const bpe = buf + sizeof(buf);
8824             bp = buf;
8825             while ((i = PerlIO_getc(fp)) != EOF && (*bp++ = (STDCHAR)i) != rslast && bp < bpe)
8826                 ; /* keep reading */
8827             cnt = bp - buf;
8828         }
8829         else {
8830             cnt = PerlIO_read(fp,(char*)buf, sizeof(buf));
8831             /* Accommodate broken VAXC compiler, which applies U8 cast to
8832              * both args of ?: operator, causing EOF to change into 255
8833              */
8834             if (cnt > 0)
8835                  i = (U8)buf[cnt - 1];
8836             else
8837                  i = EOF;
8838         }
8839
8840         if (cnt < 0)
8841             cnt = 0;  /* we do need to re-set the sv even when cnt <= 0 */
8842         if (append)
8843             sv_catpvn_nomg(sv, (char *) buf, cnt);
8844         else
8845             sv_setpvn(sv, (char *) buf, cnt);   /* "nomg" is implied */
8846
8847         if (i != EOF &&                 /* joy */
8848             (!rslen ||
8849              SvCUR(sv) < rslen ||
8850              memNE(SvPVX_const(sv) + SvCUR(sv) - rslen, rsptr, rslen)))
8851         {
8852             append = -1;
8853             /*
8854              * If we're reading from a TTY and we get a short read,
8855              * indicating that the user hit his EOF character, we need
8856              * to notice it now, because if we try to read from the TTY
8857              * again, the EOF condition will disappear.
8858              *
8859              * The comparison of cnt to sizeof(buf) is an optimization
8860              * that prevents unnecessary calls to feof().
8861              *
8862              * - jik 9/25/96
8863              */
8864             if (!(cnt < (I32)sizeof(buf) && PerlIO_eof(fp)))
8865                 goto screamer2;
8866         }
8867
8868     }
8869
8870     if (rspara) {               /* have to do this both before and after */
8871         while (i != EOF) {      /* to make sure file boundaries work right */
8872             i = PerlIO_getc(fp);
8873             if (i != '\n') {
8874                 PerlIO_ungetc(fp,i);
8875                 break;
8876             }
8877         }
8878     }
8879
8880     return (SvCUR(sv) - append) ? SvPVX(sv) : NULL;
8881 }
8882
8883 /*
8884 =for apidoc sv_inc
8885
8886 Auto-increment of the value in the SV, doing string to numeric conversion
8887 if necessary.  Handles 'get' magic and operator overloading.
8888
8889 =cut
8890 */
8891
8892 void
8893 Perl_sv_inc(pTHX_ SV *const sv)
8894 {
8895     if (!sv)
8896         return;
8897     SvGETMAGIC(sv);
8898     sv_inc_nomg(sv);
8899 }
8900
8901 /*
8902 =for apidoc sv_inc_nomg
8903
8904 Auto-increment of the value in the SV, doing string to numeric conversion
8905 if necessary.  Handles operator overloading.  Skips handling 'get' magic.
8906
8907 =cut
8908 */
8909
8910 void
8911 Perl_sv_inc_nomg(pTHX_ SV *const sv)
8912 {
8913     char *d;
8914     int flags;
8915
8916     if (!sv)
8917         return;
8918     if (SvTHINKFIRST(sv)) {
8919         if (SvREADONLY(sv)) {
8920                 Perl_croak_no_modify();
8921         }
8922         if (SvROK(sv)) {
8923             IV i;
8924             if (SvAMAGIC(sv) && AMG_CALLunary(sv, inc_amg))
8925                 return;
8926             i = PTR2IV(SvRV(sv));
8927             sv_unref(sv);
8928             sv_setiv(sv, i);
8929         }
8930         else sv_force_normal_flags(sv, 0);
8931     }
8932     flags = SvFLAGS(sv);
8933     if ((flags & (SVp_NOK|SVp_IOK)) == SVp_NOK) {
8934         /* It's (privately or publicly) a float, but not tested as an
8935            integer, so test it to see. */
8936         (void) SvIV(sv);
8937         flags = SvFLAGS(sv);
8938     }
8939     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
8940         /* It's publicly an integer, or privately an integer-not-float */
8941 #ifdef PERL_PRESERVE_IVUV
8942       oops_its_int:
8943 #endif
8944         if (SvIsUV(sv)) {
8945             if (SvUVX(sv) == UV_MAX)
8946                 sv_setnv(sv, UV_MAX_P1);
8947             else {
8948                 (void)SvIOK_only_UV(sv);
8949                 SvUV_set(sv, SvUVX(sv) + 1);
8950             }
8951         } else {
8952             if (SvIVX(sv) == IV_MAX)
8953                 sv_setuv(sv, (UV)IV_MAX + 1);
8954             else {
8955                 (void)SvIOK_only(sv);
8956                 SvIV_set(sv, SvIVX(sv) + 1);
8957             }   
8958         }
8959         return;
8960     }
8961     if (flags & SVp_NOK) {
8962         const NV was = SvNVX(sv);
8963         if (LIKELY(!Perl_isinfnan(was)) &&
8964             NV_OVERFLOWS_INTEGERS_AT != 0.0 &&
8965             was >= NV_OVERFLOWS_INTEGERS_AT) {
8966             /* diag_listed_as: Lost precision when %s %f by 1 */
8967             Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
8968                            "Lost precision when incrementing %" NVff " by 1",
8969                            was);
8970         }
8971         (void)SvNOK_only(sv);
8972         SvNV_set(sv, was + 1.0);
8973         return;
8974     }
8975
8976     /* treat AV/HV/CV/FM/IO and non-fake GVs as immutable */
8977     if (SvTYPE(sv) >= SVt_PVAV || (isGV_with_GP(sv) && !SvFAKE(sv)))
8978         Perl_croak_no_modify();
8979
8980     if (!(flags & SVp_POK) || !*SvPVX_const(sv)) {
8981         if ((flags & SVTYPEMASK) < SVt_PVIV)
8982             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV ? SVt_PVIV : SVt_IV));
8983         (void)SvIOK_only(sv);
8984         SvIV_set(sv, 1);
8985         return;
8986     }
8987     d = SvPVX(sv);
8988     while (isALPHA(*d)) d++;
8989     while (isDIGIT(*d)) d++;
8990     if (d < SvEND(sv)) {
8991         const int numtype = grok_number_flags(SvPVX_const(sv), SvCUR(sv), NULL, PERL_SCAN_TRAILING);
8992 #ifdef PERL_PRESERVE_IVUV
8993         /* Got to punt this as an integer if needs be, but we don't issue
8994            warnings. Probably ought to make the sv_iv_please() that does
8995            the conversion if possible, and silently.  */
8996         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
8997             /* Need to try really hard to see if it's an integer.
8998                9.22337203685478e+18 is an integer.
8999                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
9000                so $a="9.22337203685478e+18"; $a+0; $a++
9001                needs to be the same as $a="9.22337203685478e+18"; $a++
9002                or we go insane. */
9003         
9004             (void) sv_2iv(sv);
9005             if (SvIOK(sv))
9006                 goto oops_its_int;
9007
9008             /* sv_2iv *should* have made this an NV */
9009             if (flags & SVp_NOK) {
9010                 (void)SvNOK_only(sv);
9011                 SvNV_set(sv, SvNVX(sv) + 1.0);
9012                 return;
9013             }
9014             /* I don't think we can get here. Maybe I should assert this
9015                And if we do get here I suspect that sv_setnv will croak. NWC
9016                Fall through. */
9017             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_inc punt failed to convert '%s' to IOK or NOKp, UV=0x%" UVxf " NV=%" NVgf "\n",
9018                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
9019         }
9020 #endif /* PERL_PRESERVE_IVUV */
9021         if (!numtype && ckWARN(WARN_NUMERIC))
9022             not_incrementable(sv);
9023         sv_setnv(sv,Atof(SvPVX_const(sv)) + 1.0);
9024         return;
9025     }
9026     d--;
9027     while (d >= SvPVX_const(sv)) {
9028         if (isDIGIT(*d)) {
9029             if (++*d <= '9')
9030                 return;
9031             *(d--) = '0';
9032         }
9033         else {
9034 #ifdef EBCDIC
9035             /* MKS: The original code here died if letters weren't consecutive.
9036              * at least it didn't have to worry about non-C locales.  The
9037              * new code assumes that ('z'-'a')==('Z'-'A'), letters are
9038              * arranged in order (although not consecutively) and that only
9039              * [A-Za-z] are accepted by isALPHA in the C locale.
9040              */
9041             if (isALPHA_FOLD_NE(*d, 'z')) {
9042                 do { ++*d; } while (!isALPHA(*d));
9043                 return;
9044             }
9045             *(d--) -= 'z' - 'a';
9046 #else
9047             ++*d;
9048             if (isALPHA(*d))
9049                 return;
9050             *(d--) -= 'z' - 'a' + 1;
9051 #endif
9052         }
9053     }
9054     /* oh,oh, the number grew */
9055     SvGROW(sv, SvCUR(sv) + 2);
9056     SvCUR_set(sv, SvCUR(sv) + 1);
9057     for (d = SvPVX(sv) + SvCUR(sv); d > SvPVX_const(sv); d--)
9058         *d = d[-1];
9059     if (isDIGIT(d[1]))
9060         *d = '1';
9061     else
9062         *d = d[1];
9063 }
9064
9065 /*
9066 =for apidoc sv_dec
9067 =for apidoc_item sv_dec_nomg
9068
9069 These auto-decrement the value in the SV, doing string to numeric conversion
9070 if necessary.  They both handle operator overloading.
9071
9072 They differ only in that:
9073
9074 C<sv_dec> handles 'get' magic; C<sv_dec_nomg> skips 'get' magic.
9075
9076 =cut
9077 */
9078
9079 void
9080 Perl_sv_dec(pTHX_ SV *const sv)
9081 {
9082     if (!sv)
9083         return;
9084     SvGETMAGIC(sv);
9085     sv_dec_nomg(sv);
9086 }
9087
9088 void
9089 Perl_sv_dec_nomg(pTHX_ SV *const sv)
9090 {
9091     int flags;
9092
9093     if (!sv)
9094         return;
9095     if (SvTHINKFIRST(sv)) {
9096         if (SvREADONLY(sv)) {
9097                 Perl_croak_no_modify();
9098         }
9099         if (SvROK(sv)) {
9100             IV i;
9101             if (SvAMAGIC(sv) && AMG_CALLunary(sv, dec_amg))
9102                 return;
9103             i = PTR2IV(SvRV(sv));
9104             sv_unref(sv);
9105             sv_setiv(sv, i);
9106         }
9107         else sv_force_normal_flags(sv, 0);
9108     }
9109     /* Unlike sv_inc we don't have to worry about string-never-numbers
9110        and keeping them magic. But we mustn't warn on punting */
9111     flags = SvFLAGS(sv);
9112     if ((flags & SVf_IOK) || ((flags & (SVp_IOK | SVp_NOK)) == SVp_IOK)) {
9113         /* It's publicly an integer, or privately an integer-not-float */
9114 #ifdef PERL_PRESERVE_IVUV
9115       oops_its_int:
9116 #endif
9117         if (SvIsUV(sv)) {
9118             if (SvUVX(sv) == 0) {
9119                 (void)SvIOK_only(sv);
9120                 SvIV_set(sv, -1);
9121             }
9122             else {
9123                 (void)SvIOK_only_UV(sv);
9124                 SvUV_set(sv, SvUVX(sv) - 1);
9125             }   
9126         } else {
9127             if (SvIVX(sv) == IV_MIN) {
9128                 sv_setnv(sv, (NV)IV_MIN);
9129                 goto oops_its_num;
9130             }
9131             else {
9132                 (void)SvIOK_only(sv);
9133                 SvIV_set(sv, SvIVX(sv) - 1);
9134             }   
9135         }
9136         return;
9137     }
9138     if (flags & SVp_NOK) {
9139     oops_its_num:
9140         {
9141             const NV was = SvNVX(sv);
9142             if (LIKELY(!Perl_isinfnan(was)) &&
9143                 NV_OVERFLOWS_INTEGERS_AT != 0.0 &&
9144                 was <= -NV_OVERFLOWS_INTEGERS_AT) {
9145                 /* diag_listed_as: Lost precision when %s %f by 1 */
9146                 Perl_ck_warner(aTHX_ packWARN(WARN_IMPRECISION),
9147                                "Lost precision when decrementing %" NVff " by 1",
9148                                was);
9149             }
9150             (void)SvNOK_only(sv);
9151             SvNV_set(sv, was - 1.0);
9152             return;
9153         }
9154     }
9155
9156     /* treat AV/HV/CV/FM/IO and non-fake GVs as immutable */
9157     if (SvTYPE(sv) >= SVt_PVAV || (isGV_with_GP(sv) && !SvFAKE(sv)))
9158         Perl_croak_no_modify();
9159
9160     if (!(flags & SVp_POK)) {
9161         if ((flags & SVTYPEMASK) < SVt_PVIV)
9162             sv_upgrade(sv, ((flags & SVTYPEMASK) > SVt_IV) ? SVt_PVIV : SVt_IV);
9163         SvIV_set(sv, -1);
9164         (void)SvIOK_only(sv);
9165         return;
9166     }
9167 #ifdef PERL_PRESERVE_IVUV
9168     {
9169         const int numtype = grok_number(SvPVX_const(sv), SvCUR(sv), NULL);
9170         if (numtype && !(numtype & IS_NUMBER_INFINITY)) {
9171             /* Need to try really hard to see if it's an integer.
9172                9.22337203685478e+18 is an integer.
9173                but "9.22337203685478e+18" + 0 is UV=9223372036854779904
9174                so $a="9.22337203685478e+18"; $a+0; $a--
9175                needs to be the same as $a="9.22337203685478e+18"; $a--
9176                or we go insane. */
9177         
9178             (void) sv_2iv(sv);
9179             if (SvIOK(sv))
9180                 goto oops_its_int;
9181
9182             /* sv_2iv *should* have made this an NV */
9183             if (flags & SVp_NOK) {
9184                 (void)SvNOK_only(sv);
9185                 SvNV_set(sv, SvNVX(sv) - 1.0);
9186                 return;
9187             }
9188             /* I don't think we can get here. Maybe I should assert this
9189                And if we do get here I suspect that sv_setnv will croak. NWC
9190                Fall through. */
9191             DEBUG_c(PerlIO_printf(Perl_debug_log,"sv_dec punt failed to convert '%s' to IOK or NOKp, UV=0x%" UVxf " NV=%" NVgf "\n",
9192                                   SvPVX_const(sv), SvIVX(sv), SvNVX(sv)));
9193         }
9194     }
9195 #endif /* PERL_PRESERVE_IVUV */
9196     sv_setnv(sv,Atof(SvPVX_const(sv)) - 1.0);   /* punt */
9197 }
9198
9199 /* this define is used to eliminate a chunk of duplicated but shared logic
9200  * it has the suffix __SV_C to signal that it isnt API, and isnt meant to be
9201  * used anywhere but here - yves
9202  */
9203 #define PUSH_EXTEND_MORTAL__SV_C(AnSv) \
9204     STMT_START {      \
9205         SSize_t ix = ++PL_tmps_ix;              \
9206         if (UNLIKELY(ix >= PL_tmps_max))        \
9207             ix = tmps_grow_p(ix);                       \
9208         PL_tmps_stack[ix] = (AnSv); \
9209     } STMT_END
9210
9211 /*
9212 =for apidoc sv_mortalcopy
9213
9214 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
9215 The new SV is marked as mortal.  It will be destroyed "soon", either by an
9216 explicit call to C<FREETMPS>, or by an implicit call at places such as
9217 statement boundaries.  See also C<L</sv_newmortal>> and C<L</sv_2mortal>>.
9218
9219 =for apidoc sv_mortalcopy_flags
9220
9221 Like C<sv_mortalcopy>, but the extra C<flags> are passed to the
9222 C<sv_setsv_flags>.
9223
9224 =cut
9225 */
9226
9227 /* Make a string that will exist for the duration of the expression
9228  * evaluation.  Actually, it may have to last longer than that, but
9229  * hopefully we won't free it until it has been assigned to a
9230  * permanent location. */
9231
9232 SV *
9233 Perl_sv_mortalcopy_flags(pTHX_ SV *const oldstr, U32 flags)
9234 {
9235     SV *sv;
9236
9237     if (flags & SV_GMAGIC)
9238         SvGETMAGIC(oldstr); /* before new_SV, in case it dies */
9239     new_SV(sv);
9240     sv_setsv_flags(sv,oldstr,flags & ~SV_GMAGIC);
9241     PUSH_EXTEND_MORTAL__SV_C(sv);
9242     SvTEMP_on(sv);
9243     return sv;
9244 }
9245
9246 /*
9247 =for apidoc sv_newmortal
9248
9249 Creates a new null SV which is mortal.  The reference count of the SV is
9250 set to 1.  It will be destroyed "soon", either by an explicit call to
9251 C<FREETMPS>, or by an implicit call at places such as statement boundaries.
9252 See also C<L</sv_mortalcopy>> and C<L</sv_2mortal>>.
9253
9254 =cut
9255 */
9256
9257 SV *
9258 Perl_sv_newmortal(pTHX)
9259 {
9260     SV *sv;
9261
9262     new_SV(sv);
9263     SvFLAGS(sv) = SVs_TEMP;
9264     PUSH_EXTEND_MORTAL__SV_C(sv);
9265     return sv;
9266 }
9267
9268
9269 /*
9270 =for apidoc newSVpvn_flags
9271
9272 Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
9273 characters) into it.  The reference count for the
9274 SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
9275 string.  You are responsible for ensuring that the source string is at least
9276 C<len> bytes long.  If the C<s> argument is NULL the new SV will be undefined.
9277 Currently the only flag bits accepted are C<SVf_UTF8> and C<SVs_TEMP>.
9278 If C<SVs_TEMP> is set, then C<sv_2mortal()> is called on the result before
9279 returning.  If C<SVf_UTF8> is set, C<s>
9280 is considered to be in UTF-8 and the
9281 C<SVf_UTF8> flag will be set on the new SV.
9282 C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
9283
9284     #define newSVpvn_utf8(s, len, u)                    \
9285         newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
9286
9287 =for apidoc Amnh||SVs_TEMP
9288
9289 =cut
9290 */
9291
9292 SV *
9293 Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
9294 {
9295     SV *sv;
9296
9297     /* All the flags we don't support must be zero.
9298        And we're new code so I'm going to assert this from the start.  */
9299     assert(!(flags & ~(SVf_UTF8|SVs_TEMP)));
9300     new_SV(sv);
9301     sv_setpvn(sv,s,len);
9302
9303     /* This code used to do a sv_2mortal(), however we now unroll the call to
9304      * sv_2mortal() and do what it does ourselves here.  Since we have asserted
9305      * that flags can only have the SVf_UTF8 and/or SVs_TEMP flags set above we
9306      * can use it to enable the sv flags directly (bypassing SvTEMP_on), which
9307      * in turn means we dont need to mask out the SVf_UTF8 flag below, which
9308      * means that we eliminate quite a few steps than it looks - Yves
9309      * (explaining patch by gfx) */
9310
9311     SvFLAGS(sv) |= flags;
9312
9313     if(flags & SVs_TEMP){
9314         PUSH_EXTEND_MORTAL__SV_C(sv);
9315     }
9316
9317     return sv;
9318 }
9319
9320 /*
9321 =for apidoc sv_2mortal
9322
9323 Marks an existing SV as mortal.  The SV will be destroyed "soon", either
9324 by an explicit call to C<FREETMPS>, or by an implicit call at places such as
9325 statement boundaries.  C<SvTEMP()> is turned on which means that the SV's
9326 string buffer can be "stolen" if this SV is copied.  See also
9327 C<L</sv_newmortal>> and C<L</sv_mortalcopy>>.
9328
9329 =cut
9330 */
9331
9332 SV *
9333 Perl_sv_2mortal(pTHX_ SV *const sv)
9334 {
9335     if (!sv)
9336         return sv;
9337     if (SvIMMORTAL(sv))
9338         return sv;
9339     PUSH_EXTEND_MORTAL__SV_C(sv);
9340     SvTEMP_on(sv);
9341     return sv;
9342 }
9343
9344 /*
9345 =for apidoc newSVpv
9346
9347 Creates a new SV and copies a string (which may contain C<NUL> (C<\0>)
9348 characters) into it.  The reference count for the
9349 SV is set to 1.  If C<len> is zero, Perl will compute the length using
9350 C<strlen()>, (which means if you use this option, that C<s> can't have embedded
9351 C<NUL> characters and has to have a terminating C<NUL> byte).
9352
9353 This function can cause reliability issues if you are likely to pass in
9354 empty strings that are not null terminated, because it will run
9355 strlen on the string and potentially run past valid memory.
9356
9357 Using L</newSVpvn> is a safer alternative for non C<NUL> terminated strings.
9358 For string literals use L</newSVpvs> instead.  This function will work fine for
9359 C<NUL> terminated strings, but if you want to avoid the if statement on whether
9360 to call C<strlen> use C<newSVpvn> instead (calling C<strlen> yourself).
9361
9362 =cut
9363 */
9364
9365 SV *
9366 Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
9367 {
9368     SV *sv;
9369
9370     new_SV(sv);
9371     sv_setpvn(sv, s, len || s == NULL ? len : strlen(s));
9372     return sv;
9373 }
9374
9375 /*
9376 =for apidoc newSVpvn
9377
9378 Creates a new SV and copies a string into it, which may contain C<NUL> characters
9379 (C<\0>) and other binary data.  The reference count for the SV is set to 1.
9380 Note that if C<len> is zero, Perl will create a zero length (Perl) string.  You
9381 are responsible for ensuring that the source buffer is at least
9382 C<len> bytes long.  If the C<buffer> argument is NULL the new SV will be
9383 undefined.
9384
9385 =cut
9386 */
9387
9388 SV *
9389 Perl_newSVpvn(pTHX_ const char *const buffer, const STRLEN len)
9390 {
9391     SV *sv;
9392     new_SV(sv);
9393     sv_setpvn(sv,buffer,len);
9394     return sv;
9395 }
9396
9397 /*
9398 =for apidoc newSVhek
9399
9400 Creates a new SV from the hash key structure.  It will generate scalars that
9401 point to the shared string table where possible.  Returns a new (undefined)
9402 SV if C<hek> is NULL.
9403
9404 =cut
9405 */
9406
9407 SV *
9408 Perl_newSVhek(pTHX_ const HEK *const hek)
9409 {
9410     if (!hek) {
9411         SV *sv;
9412
9413         new_SV(sv);
9414         return sv;
9415     }
9416
9417     if (HEK_LEN(hek) == HEf_SVKEY) {
9418         return newSVsv(*(SV**)HEK_KEY(hek));
9419     } else {
9420         const int flags = HEK_FLAGS(hek);
9421         if (flags & HVhek_WASUTF8) {
9422             /* Trouble :-)
9423                Andreas would like keys he put in as utf8 to come back as utf8
9424             */
9425             STRLEN utf8_len = HEK_LEN(hek);
9426             SV * const sv = newSV_type(SVt_PV);
9427             char *as_utf8 = (char *)bytes_to_utf8 ((U8*)HEK_KEY(hek), &utf8_len);
9428             /* bytes_to_utf8() allocates a new string, which we can repurpose: */
9429             sv_usepvn_flags(sv, as_utf8, utf8_len, SV_HAS_TRAILING_NUL);
9430             SvUTF8_on (sv);
9431             return sv;
9432         } else if (flags & HVhek_UNSHARED) {
9433             /* A hash that isn't using shared hash keys has to have
9434                the flag in every key so that we know not to try to call
9435                share_hek_hek on it.  */
9436
9437             SV * const sv = newSVpvn (HEK_KEY(hek), HEK_LEN(hek));
9438             if (HEK_UTF8(hek))
9439                 SvUTF8_on (sv);
9440             return sv;
9441         }
9442         /* This will be overwhelminly the most common case.  */
9443         {
9444             /* Inline most of newSVpvn_share(), because share_hek_hek() is far
9445                more efficient than sharepvn().  */
9446             SV *sv;
9447
9448             new_SV(sv);
9449             sv_upgrade(sv, SVt_PV);
9450             SvPV_set(sv, (char *)HEK_KEY(share_hek_hek(hek)));
9451             SvCUR_set(sv, HEK_LEN(hek));
9452             SvLEN_set(sv, 0);
9453             SvIsCOW_on(sv);
9454             SvPOK_on(sv);
9455             if (HEK_UTF8(hek))
9456                 SvUTF8_on(sv);
9457             return sv;
9458         }
9459     }
9460 }
9461
9462 /*
9463 =for apidoc newSVpvn_share
9464
9465 Creates a new SV with its C<SvPVX_const> pointing to a shared string in the string
9466 table.  If the string does not already exist in the table, it is
9467 created first.  Turns on the C<SvIsCOW> flag (or C<READONLY>
9468 and C<FAKE> in 5.16 and earlier).  If the C<hash> parameter
9469 is non-zero, that value is used; otherwise the hash is computed.
9470 The string's hash can later be retrieved from the SV
9471 with the C<SvSHARED_HASH()> macro.  The idea here is
9472 that as the string table is used for shared hash keys these strings will have
9473 C<SvPVX_const == HeKEY> and hash lookup will avoid string compare.
9474
9475 =cut
9476 */
9477
9478 SV *
9479 Perl_newSVpvn_share(pTHX_ const char *src, I32 len, U32 hash)
9480 {
9481     SV *sv;
9482     bool is_utf8 = FALSE;
9483     const char *const orig_src = src;
9484
9485     if (len < 0) {
9486         STRLEN tmplen = -len;
9487         is_utf8 = TRUE;
9488         /* See the note in hv.c:hv_fetch() --jhi */
9489         src = (char*)bytes_from_utf8((const U8*)src, &tmplen, &is_utf8);
9490         len = tmplen;
9491     }
9492     if (!hash)
9493         PERL_HASH(hash, src, len);
9494     new_SV(sv);
9495     /* The logic for this is inlined in S_mro_get_linear_isa_dfs(), so if it
9496        changes here, update it there too.  */
9497     sv_upgrade(sv, SVt_PV);
9498     SvPV_set(sv, sharepvn(src, is_utf8?-len:len, hash));
9499     SvCUR_set(sv, len);
9500     SvLEN_set(sv, 0);
9501     SvIsCOW_on(sv);
9502     SvPOK_on(sv);
9503     if (is_utf8)
9504         SvUTF8_on(sv);
9505     if (src != orig_src)
9506         Safefree(src);
9507     return sv;
9508 }
9509
9510 /*
9511 =for apidoc newSVpv_share
9512
9513 Like C<newSVpvn_share>, but takes a C<NUL>-terminated string instead of a
9514 string/length pair.
9515
9516 =cut
9517 */
9518
9519 SV *
9520 Perl_newSVpv_share(pTHX_ const char *src, U32 hash)
9521 {
9522     return newSVpvn_share(src, strlen(src), hash);
9523 }
9524
9525 #if defined(PERL_IMPLICIT_CONTEXT)
9526
9527 /* pTHX_ magic can't cope with varargs, so this is a no-context
9528  * version of the main function, (which may itself be aliased to us).
9529  * Don't access this version directly.
9530  */
9531
9532 SV *
9533 Perl_newSVpvf_nocontext(const char *const pat, ...)
9534 {
9535     dTHX;
9536     SV *sv;
9537     va_list args;
9538
9539     PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT;
9540
9541     va_start(args, pat);
9542     sv = vnewSVpvf(pat, &args);
9543     va_end(args);
9544     return sv;
9545 }
9546 #endif
9547
9548 /*
9549 =for apidoc newSVpvf
9550
9551 Creates a new SV and initializes it with the string formatted like
9552 C<sv_catpvf>.
9553
9554 =for apidoc newSVpvf_nocontext
9555 Like C<L</newSVpvf>> but does not take a thread context (C<aTHX>) parameter,
9556 so is used in situations where the caller doesn't already have the thread
9557 context.
9558
9559 =for apidoc vnewSVpvf
9560 Like C<L</newSVpvf>> but but the arguments are an encapsulated argument list.
9561
9562 =cut
9563 */
9564
9565 SV *
9566 Perl_newSVpvf(pTHX_ const char *const pat, ...)
9567 {
9568     SV *sv;
9569     va_list args;
9570
9571     PERL_ARGS_ASSERT_NEWSVPVF;
9572
9573     va_start(args, pat);
9574     sv = vnewSVpvf(pat, &args);
9575     va_end(args);
9576     return sv;
9577 }
9578
9579 /* backend for newSVpvf() and newSVpvf_nocontext() */
9580
9581 SV *
9582 Perl_vnewSVpvf(pTHX_ const char *const pat, va_list *const args)
9583 {
9584     SV *sv;
9585
9586     PERL_ARGS_ASSERT_VNEWSVPVF;
9587
9588     new_SV(sv);
9589     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
9590     return sv;
9591 }
9592
9593 /*
9594 =for apidoc newSVnv
9595
9596 Creates a new SV and copies a floating point value into it.
9597 The reference count for the SV is set to 1.
9598
9599 =cut
9600 */
9601
9602 SV *
9603 Perl_newSVnv(pTHX_ const NV n)
9604 {
9605     SV *sv;
9606
9607     new_SV(sv);
9608     sv_setnv(sv,n);
9609     return sv;
9610 }
9611
9612 /*
9613 =for apidoc newSViv
9614
9615 Creates a new SV and copies an integer into it.  The reference count for the
9616 SV is set to 1.
9617
9618 =cut
9619 */
9620
9621 SV *
9622 Perl_newSViv(pTHX_ const IV i)
9623 {
9624     SV *sv;
9625
9626     new_SV(sv);
9627
9628     /* Inlining ONLY the small relevant subset of sv_setiv here
9629      * for performance. Makes a significant difference. */
9630
9631     /* We're starting from SVt_FIRST, so provided that's
9632      * actual 0, we don't have to unset any SV type flags
9633      * to promote to SVt_IV. */
9634     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9635
9636     SET_SVANY_FOR_BODYLESS_IV(sv);
9637     SvFLAGS(sv) |= SVt_IV;
9638     (void)SvIOK_on(sv);
9639
9640     SvIV_set(sv, i);
9641     SvTAINT(sv);
9642
9643     return sv;
9644 }
9645
9646 /*
9647 =for apidoc newSVuv
9648
9649 Creates a new SV and copies an unsigned integer into it.
9650 The reference count for the SV is set to 1.
9651
9652 =cut
9653 */
9654
9655 SV *
9656 Perl_newSVuv(pTHX_ const UV u)
9657 {
9658     SV *sv;
9659
9660     /* Inlining ONLY the small relevant subset of sv_setuv here
9661      * for performance. Makes a significant difference. */
9662
9663     /* Using ivs is more efficient than using uvs - see sv_setuv */
9664     if (u <= (UV)IV_MAX) {
9665         return newSViv((IV)u);
9666     }
9667
9668     new_SV(sv);
9669
9670     /* We're starting from SVt_FIRST, so provided that's
9671      * actual 0, we don't have to unset any SV type flags
9672      * to promote to SVt_IV. */
9673     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9674
9675     SET_SVANY_FOR_BODYLESS_IV(sv);
9676     SvFLAGS(sv) |= SVt_IV;
9677     (void)SvIOK_on(sv);
9678     (void)SvIsUV_on(sv);
9679
9680     SvUV_set(sv, u);
9681     SvTAINT(sv);
9682
9683     return sv;
9684 }
9685
9686 /*
9687 =for apidoc newSV_type
9688
9689 Creates a new SV, of the type specified.  The reference count for the new SV
9690 is set to 1.
9691
9692 =cut
9693 */
9694
9695 SV *
9696 Perl_newSV_type(pTHX_ const svtype type)
9697 {
9698     SV *sv;
9699
9700     new_SV(sv);
9701     ASSUME(SvTYPE(sv) == SVt_FIRST);
9702     if(type != SVt_FIRST)
9703         sv_upgrade(sv, type);
9704     return sv;
9705 }
9706
9707 /*
9708 =for apidoc newRV_noinc
9709
9710 Creates an RV wrapper for an SV.  The reference count for the original
9711 SV is B<not> incremented.
9712
9713 =cut
9714 */
9715
9716 SV *
9717 Perl_newRV_noinc(pTHX_ SV *const tmpRef)
9718 {
9719     SV *sv;
9720
9721     PERL_ARGS_ASSERT_NEWRV_NOINC;
9722
9723     new_SV(sv);
9724
9725     /* We're starting from SVt_FIRST, so provided that's
9726      * actual 0, we don't have to unset any SV type flags
9727      * to promote to SVt_IV. */
9728     STATIC_ASSERT_STMT(SVt_FIRST == 0);
9729
9730     SET_SVANY_FOR_BODYLESS_IV(sv);
9731     SvFLAGS(sv) |= SVt_IV;
9732     SvROK_on(sv);
9733     SvIV_set(sv, 0);
9734
9735     SvTEMP_off(tmpRef);
9736     SvRV_set(sv, tmpRef);
9737
9738     return sv;
9739 }
9740
9741 /* newRV_inc is the official function name to use now.
9742  * newRV_inc is in fact #defined to newRV in sv.h
9743  */
9744
9745 SV *
9746 Perl_newRV(pTHX_ SV *const sv)
9747 {
9748     PERL_ARGS_ASSERT_NEWRV;
9749
9750     return newRV_noinc(SvREFCNT_inc_simple_NN(sv));
9751 }
9752
9753 /*
9754 =for apidoc newSVsv
9755
9756 Creates a new SV which is an exact duplicate of the original SV.
9757 (Uses C<sv_setsv>.)
9758
9759 =for apidoc newSVsv_nomg
9760
9761 Like C<newSVsv> but does not process get magic.
9762
9763 =cut
9764 */
9765
9766 SV *
9767 Perl_newSVsv_flags(pTHX_ SV *const old, I32 flags)
9768 {
9769     SV *sv;
9770
9771     if (!old)
9772         return NULL;
9773     if (SvTYPE(old) == (svtype)SVTYPEMASK) {
9774         Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "semi-panic: attempt to dup freed string");
9775         return NULL;
9776     }
9777     /* Do this here, otherwise we leak the new SV if this croaks. */
9778     if (flags & SV_GMAGIC)
9779         SvGETMAGIC(old);
9780     new_SV(sv);
9781     sv_setsv_flags(sv, old, flags & ~SV_GMAGIC);
9782     return sv;
9783 }
9784
9785 /*
9786 =for apidoc sv_reset
9787
9788 Underlying implementation for the C<reset> Perl function.
9789 Note that the perl-level function is vaguely deprecated.
9790
9791 =cut
9792 */
9793
9794 void
9795 Perl_sv_reset(pTHX_ const char *s, HV *const stash)
9796 {
9797     PERL_ARGS_ASSERT_SV_RESET;
9798
9799     sv_resetpvn(*s ? s : NULL, strlen(s), stash);
9800 }
9801
9802 void
9803 Perl_sv_resetpvn(pTHX_ const char *s, STRLEN len, HV * const stash)
9804 {
9805     char todo[PERL_UCHAR_MAX+1];
9806     const char *send;
9807
9808     if (!stash || SvTYPE(stash) != SVt_PVHV)
9809         return;
9810
9811     if (!s) {           /* reset ?? searches */
9812         MAGIC * const mg = mg_find((const SV *)stash, PERL_MAGIC_symtab);
9813         if (mg) {
9814             const U32 count = mg->mg_len / sizeof(PMOP**);
9815             PMOP **pmp = (PMOP**) mg->mg_ptr;
9816             PMOP *const *const end = pmp + count;
9817
9818             while (pmp < end) {
9819 #ifdef USE_ITHREADS
9820                 SvREADONLY_off(PL_regex_pad[(*pmp)->op_pmoffset]);
9821 #else
9822                 (*pmp)->op_pmflags &= ~PMf_USED;
9823 #endif
9824                 ++pmp;
9825             }
9826         }
9827         return;
9828     }
9829
9830     /* reset variables */
9831
9832     if (!HvARRAY(stash))
9833         return;
9834
9835     Zero(todo, 256, char);
9836     send = s + len;
9837     while (s < send) {
9838         I32 max;
9839         I32 i = (unsigned char)*s;
9840         if (s[1] == '-') {
9841             s += 2;
9842         }
9843         max = (unsigned char)*s++;
9844         for ( ; i <= max; i++) {
9845             todo[i] = 1;
9846         }
9847         for (i = 0; i <= (I32) HvMAX(stash); i++) {
9848             HE *entry;
9849             for (entry = HvARRAY(stash)[i];
9850                  entry;
9851                  entry = HeNEXT(entry))
9852             {
9853                 GV *gv;
9854                 SV *sv;
9855
9856                 if (!todo[(U8)*HeKEY(entry)])
9857                     continue;
9858                 gv = MUTABLE_GV(HeVAL(entry));
9859                 if (!isGV(gv))
9860                     continue;
9861                 sv = GvSV(gv);
9862                 if (sv && !SvREADONLY(sv)) {
9863                     SV_CHECK_THINKFIRST_COW_DROP(sv);
9864                     if (!isGV(sv)) SvOK_off(sv);
9865                 }
9866                 if (GvAV(gv)) {
9867                     av_clear(GvAV(gv));
9868                 }
9869                 if (GvHV(gv) && !HvNAME_get(GvHV(gv))) {
9870                     hv_clear(GvHV(gv));
9871                 }
9872             }
9873         }
9874     }
9875 }
9876
9877 /*
9878 =for apidoc sv_2io
9879
9880 Using various gambits, try to get an IO from an SV: the IO slot if its a
9881 GV; or the recursive result if we're an RV; or the IO slot of the symbol
9882 named after the PV if we're a string.
9883
9884 'Get' magic is ignored on the C<sv> passed in, but will be called on
9885 C<SvRV(sv)> if C<sv> is an RV.
9886
9887 =cut
9888 */
9889
9890 IO*
9891 Perl_sv_2io(pTHX_ SV *const sv)
9892 {
9893     IO* io;
9894     GV* gv;
9895
9896     PERL_ARGS_ASSERT_SV_2IO;
9897
9898     switch (SvTYPE(sv)) {
9899     case SVt_PVIO:
9900         io = MUTABLE_IO(sv);
9901         break;
9902     case SVt_PVGV:
9903     case SVt_PVLV:
9904         if (isGV_with_GP(sv)) {
9905             gv = MUTABLE_GV(sv);
9906             io = GvIO(gv);
9907             if (!io)
9908                 Perl_croak(aTHX_ "Bad filehandle: %" HEKf,
9909                                     HEKfARG(GvNAME_HEK(gv)));
9910             break;
9911         }
9912         /* FALLTHROUGH */
9913     default:
9914         if (!SvOK(sv))
9915             Perl_croak(aTHX_ PL_no_usym, "filehandle");
9916         if (SvROK(sv)) {
9917             SvGETMAGIC(SvRV(sv));
9918             return sv_2io(SvRV(sv));
9919         }
9920         gv = gv_fetchsv_nomg(sv, 0, SVt_PVIO);
9921         if (gv)
9922             io = GvIO(gv);
9923         else
9924             io = 0;
9925         if (!io) {
9926             SV *newsv = sv;
9927             if (SvGMAGICAL(sv)) {
9928                 newsv = sv_newmortal();
9929                 sv_setsv_nomg(newsv, sv);
9930             }
9931             Perl_croak(aTHX_ "Bad filehandle: %" SVf, SVfARG(newsv));
9932         }
9933         break;
9934     }
9935     return io;
9936 }
9937
9938 /*
9939 =for apidoc sv_2cv
9940
9941 Using various gambits, try to get a CV from an SV; in addition, try if
9942 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
9943 The flags in C<lref> are passed to C<gv_fetchsv>.
9944
9945 =cut
9946 */
9947
9948 CV *
9949 Perl_sv_2cv(pTHX_ SV *sv, HV **const st, GV **const gvp, const I32 lref)
9950 {
9951     GV *gv = NULL;
9952     CV *cv = NULL;
9953
9954     PERL_ARGS_ASSERT_SV_2CV;
9955
9956     if (!sv) {
9957         *st = NULL;
9958         *gvp = NULL;
9959         return NULL;
9960     }
9961     switch (SvTYPE(sv)) {
9962     case SVt_PVCV:
9963         *st = CvSTASH(sv);
9964         *gvp = NULL;
9965         return MUTABLE_CV(sv);
9966     case SVt_PVHV:
9967     case SVt_PVAV:
9968         *st = NULL;
9969         *gvp = NULL;
9970         return NULL;
9971     default:
9972         SvGETMAGIC(sv);
9973         if (SvROK(sv)) {
9974             if (SvAMAGIC(sv))
9975                 sv = amagic_deref_call(sv, to_cv_amg);
9976
9977             sv = SvRV(sv);
9978             if (SvTYPE(sv) == SVt_PVCV) {
9979                 cv = MUTABLE_CV(sv);
9980                 *gvp = NULL;
9981                 *st = CvSTASH(cv);
9982                 return cv;
9983             }
9984             else if(SvGETMAGIC(sv), isGV_with_GP(sv))
9985                 gv = MUTABLE_GV(sv);
9986             else
9987                 Perl_croak(aTHX_ "Not a subroutine reference");
9988         }
9989         else if (isGV_with_GP(sv)) {
9990             gv = MUTABLE_GV(sv);
9991         }
9992         else {
9993             gv = gv_fetchsv_nomg(sv, lref, SVt_PVCV);
9994         }
9995         *gvp = gv;
9996         if (!gv) {
9997             *st = NULL;
9998             return NULL;
9999         }
10000         /* Some flags to gv_fetchsv mean don't really create the GV  */
10001         if (!isGV_with_GP(gv)) {
10002             *st = NULL;
10003             return NULL;
10004         }
10005         *st = GvESTASH(gv);
10006         if (lref & ~GV_ADDMG && !GvCVu(gv)) {
10007             /* XXX this is probably not what they think they're getting.
10008              * It has the same effect as "sub name;", i.e. just a forward
10009              * declaration! */
10010             newSTUB(gv,0);
10011         }
10012         return GvCVu(gv);
10013     }
10014 }
10015
10016 /*
10017 =for apidoc sv_true
10018
10019 Returns true if the SV has a true value by Perl's rules.
10020 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
10021 instead use an in-line version.
10022
10023 =cut
10024 */
10025
10026 I32
10027 Perl_sv_true(pTHX_ SV *const sv)
10028 {
10029     if (!sv)
10030         return 0;
10031     if (SvPOK(sv)) {
10032         const XPV* const tXpv = (XPV*)SvANY(sv);
10033         if (tXpv &&
10034                 (tXpv->xpv_cur > 1 ||
10035                 (tXpv->xpv_cur && *sv->sv_u.svu_pv != '0')))
10036             return 1;
10037         else
10038             return 0;
10039     }
10040     else {
10041         if (SvIOK(sv))
10042             return SvIVX(sv) != 0;
10043         else {
10044             if (SvNOK(sv))
10045                 return SvNVX(sv) != 0.0;
10046             else
10047                 return sv_2bool(sv);
10048         }
10049     }
10050 }
10051
10052 /*
10053 =for apidoc sv_pvn_force
10054
10055 Get a sensible string out of the SV somehow.
10056 A private implementation of the C<SvPV_force> macro for compilers which
10057 can't cope with complex macro expressions.  Always use the macro instead.
10058
10059 =for apidoc sv_pvn_force_flags
10060
10061 Get a sensible string out of the SV somehow.
10062 If C<flags> has the C<SV_GMAGIC> bit set, will C<L</mg_get>> on C<sv> if
10063 appropriate, else not.  C<sv_pvn_force> and C<sv_pvn_force_nomg> are
10064 implemented in terms of this function.
10065 You normally want to use the various wrapper macros instead: see
10066 C<L</SvPV_force>> and C<L</SvPV_force_nomg>>.
10067
10068 =cut
10069 */
10070
10071 char *
10072 Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const U32 flags)
10073 {
10074     PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS;
10075
10076     if (flags & SV_GMAGIC) SvGETMAGIC(sv);
10077     if (SvTHINKFIRST(sv) && (!SvROK(sv) || SvREADONLY(sv)))
10078         sv_force_normal_flags(sv, 0);
10079
10080     if (SvPOK(sv)) {
10081         if (lp)
10082             *lp = SvCUR(sv);
10083     }
10084     else {
10085         char *s;
10086         STRLEN len;
10087  
10088         if (SvTYPE(sv) > SVt_PVLV
10089             || isGV_with_GP(sv))
10090             /* diag_listed_as: Can't coerce %s to %s in %s */
10091             Perl_croak(aTHX_ "Can't coerce %s to string in %s", sv_reftype(sv,0),
10092                 OP_DESC(PL_op));
10093         s = sv_2pv_flags(sv, &len, flags &~ SV_GMAGIC);
10094         if (!s) {
10095           s = (char *)"";
10096         }
10097         if (lp)
10098             *lp = len;
10099
10100         if (SvTYPE(sv) < SVt_PV ||
10101             s != SvPVX_const(sv)) {     /* Almost, but not quite, sv_setpvn() */
10102             if (SvROK(sv))
10103                 sv_unref(sv);
10104             SvUPGRADE(sv, SVt_PV);              /* Never FALSE */
10105             SvGROW(sv, len + 1);
10106             Move(s,SvPVX(sv),len,char);
10107             SvCUR_set(sv, len);
10108             SvPVX(sv)[len] = '\0';
10109         }
10110         if (!SvPOK(sv)) {
10111             SvPOK_on(sv);               /* validate pointer */
10112             SvTAINT(sv);
10113             DEBUG_c(PerlIO_printf(Perl_debug_log, "0x%" UVxf " 2pv(%s)\n",
10114                                   PTR2UV(sv),SvPVX_const(sv)));
10115         }
10116     }
10117     (void)SvPOK_only_UTF8(sv);
10118     return SvPVX_mutable(sv);
10119 }
10120
10121 /*
10122 =for apidoc sv_pvbyten_force
10123
10124 The backend for the C<SvPVbytex_force> macro.  Always use the macro
10125 instead.  If the SV cannot be downgraded from UTF-8, this croaks.
10126
10127 =cut
10128 */
10129
10130 char *
10131 Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp)
10132 {
10133     PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE;
10134
10135     sv_pvn_force(sv,lp);
10136     sv_utf8_downgrade(sv,0);
10137     *lp = SvCUR(sv);
10138     return SvPVX(sv);
10139 }
10140
10141 /*
10142 =for apidoc sv_pvutf8n_force
10143
10144 The backend for the C<SvPVutf8x_force> macro.  Always use the macro
10145 instead.
10146
10147 =cut
10148 */
10149
10150 char *
10151 Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp)
10152 {
10153     PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE;
10154
10155     sv_pvn_force(sv,0);
10156     sv_utf8_upgrade_nomg(sv);
10157     *lp = SvCUR(sv);
10158     return SvPVX(sv);
10159 }
10160
10161 /*
10162 =for apidoc sv_reftype
10163
10164 Returns a string describing what the SV is a reference to.
10165
10166 If ob is true and the SV is blessed, the string is the class name,
10167 otherwise it is the type of the SV, "SCALAR", "ARRAY" etc.
10168
10169 =cut
10170 */
10171
10172 const char *
10173 Perl_sv_reftype(pTHX_ const SV *const sv, const int ob)
10174 {
10175     PERL_ARGS_ASSERT_SV_REFTYPE;
10176     if (ob && SvOBJECT(sv)) {
10177         return SvPV_nolen_const(sv_ref(NULL, sv, ob));
10178     }
10179     else {
10180         /* WARNING - There is code, for instance in mg.c, that assumes that
10181          * the only reason that sv_reftype(sv,0) would return a string starting
10182          * with 'L' or 'S' is that it is a LVALUE or a SCALAR.
10183          * Yes this a dodgy way to do type checking, but it saves practically reimplementing
10184          * this routine inside other subs, and it saves time.
10185          * Do not change this assumption without searching for "dodgy type check" in
10186          * the code.
10187          * - Yves */
10188         switch (SvTYPE(sv)) {
10189         case SVt_NULL:
10190         case SVt_IV:
10191         case SVt_NV:
10192         case SVt_PV:
10193         case SVt_PVIV:
10194         case SVt_PVNV:
10195         case SVt_PVMG:
10196                                 if (SvVOK(sv))
10197                                     return "VSTRING";
10198                                 if (SvROK(sv))
10199                                     return "REF";
10200                                 else
10201                                     return "SCALAR";
10202
10203         case SVt_PVLV:          return (char *)  (SvROK(sv) ? "REF"
10204                                 /* tied lvalues should appear to be
10205                                  * scalars for backwards compatibility */
10206                                 : (isALPHA_FOLD_EQ(LvTYPE(sv), 't'))
10207                                     ? "SCALAR" : "LVALUE");
10208         case SVt_PVAV:          return "ARRAY";
10209         case SVt_PVHV:          return "HASH";
10210         case SVt_PVCV:          return "CODE";
10211         case SVt_PVGV:          return (char *) (isGV_with_GP(sv)
10212                                     ? "GLOB" : "SCALAR");
10213         case SVt_PVFM:          return "FORMAT";
10214         case SVt_PVIO:          return "IO";
10215         case SVt_INVLIST:       return "INVLIST";
10216         case SVt_REGEXP:        return "REGEXP";
10217         default:                return "UNKNOWN";
10218         }
10219     }
10220 }
10221
10222 /*
10223 =for apidoc sv_ref
10224
10225 Returns a SV describing what the SV passed in is a reference to.
10226
10227 dst can be a SV to be set to the description or NULL, in which case a
10228 mortal SV is returned.
10229
10230 If ob is true and the SV is blessed, the description is the class
10231 name, otherwise it is the type of the SV, "SCALAR", "ARRAY" etc.
10232
10233 =cut
10234 */
10235
10236 SV *
10237 Perl_sv_ref(pTHX_ SV *dst, const SV *const sv, const int ob)
10238 {
10239     PERL_ARGS_ASSERT_SV_REF;
10240
10241     if (!dst)
10242         dst = sv_newmortal();
10243
10244     if (ob && SvOBJECT(sv)) {
10245         HvNAME_get(SvSTASH(sv))
10246                     ? sv_sethek(dst, HvNAME_HEK(SvSTASH(sv)))
10247                     : sv_setpvs(dst, "__ANON__");
10248     }
10249     else {
10250         const char * reftype = sv_reftype(sv, 0);
10251         sv_setpv(dst, reftype);
10252     }
10253     return dst;
10254 }
10255
10256 /*
10257 =for apidoc sv_isobject
10258
10259 Returns a boolean indicating whether the SV is an RV pointing to a blessed
10260 object.  If the SV is not an RV, or if the object is not blessed, then this
10261 will return false.
10262
10263 =cut
10264 */
10265
10266 int
10267 Perl_sv_isobject(pTHX_ SV *sv)
10268 {
10269     if (!sv)
10270         return 0;
10271     SvGETMAGIC(sv);
10272     if (!SvROK(sv))
10273         return 0;
10274     sv = SvRV(sv);
10275     if (!SvOBJECT(sv))
10276         return 0;
10277     return 1;
10278 }
10279
10280 /*
10281 =for apidoc sv_isa
10282
10283 Returns a boolean indicating whether the SV is blessed into the specified
10284 class.
10285
10286 This does not check for subtypes or method overloading. Use C<sv_isa_sv> to
10287 verify an inheritance relationship in the same way as the C<isa> operator by
10288 respecting any C<isa()> method overloading; or C<sv_derived_from_sv> to test
10289 directly on the actual object type.
10290
10291 =cut
10292 */
10293
10294 int
10295 Perl_sv_isa(pTHX_ SV *sv, const char *const name)
10296 {
10297     const char *hvname;
10298
10299     PERL_ARGS_ASSERT_SV_ISA;
10300
10301     if (!sv)
10302         return 0;
10303     SvGETMAGIC(sv);
10304     if (!SvROK(sv))
10305         return 0;
10306     sv = SvRV(sv);
10307     if (!SvOBJECT(sv))
10308         return 0;
10309     hvname = HvNAME_get(SvSTASH(sv));
10310     if (!hvname)
10311         return 0;
10312
10313     return strEQ(hvname, name);
10314 }
10315
10316 /*
10317 =for apidoc newSVrv
10318
10319 Creates a new SV for the existing RV, C<rv>, to point to.  If C<rv> is not an
10320 RV then it will be upgraded to one.  If C<classname> is non-null then the new
10321 SV will be blessed in the specified package.  The new SV is returned and its
10322 reference count is 1.  The reference count 1 is owned by C<rv>. See also
10323 newRV_inc() and newRV_noinc() for creating a new RV properly.
10324
10325 =cut
10326 */
10327
10328 SV*
10329 Perl_newSVrv(pTHX_ SV *const rv, const char *const classname)
10330 {
10331     SV *sv;
10332
10333     PERL_ARGS_ASSERT_NEWSVRV;
10334
10335     new_SV(sv);
10336
10337     SV_CHECK_THINKFIRST_COW_DROP(rv);
10338
10339     if (UNLIKELY( SvTYPE(rv) >= SVt_PVMG )) {
10340         const U32 refcnt = SvREFCNT(rv);
10341         SvREFCNT(rv) = 0;
10342         sv_clear(rv);
10343         SvFLAGS(rv) = 0;
10344         SvREFCNT(rv) = refcnt;
10345
10346         sv_upgrade(rv, SVt_IV);
10347     } else if (SvROK(rv)) {
10348         SvREFCNT_dec(SvRV(rv));
10349     } else {
10350         prepare_SV_for_RV(rv);
10351     }
10352
10353     SvOK_off(rv);
10354     SvRV_set(rv, sv);
10355     SvROK_on(rv);
10356
10357     if (classname) {
10358         HV* const stash = gv_stashpv(classname, GV_ADD);
10359         (void)sv_bless(rv, stash);
10360     }
10361     return sv;
10362 }
10363
10364 SV *
10365 Perl_newSVavdefelem(pTHX_ AV *av, SSize_t ix, bool extendible)
10366 {
10367     SV * const lv = newSV_type(SVt_PVLV);
10368     PERL_ARGS_ASSERT_NEWSVAVDEFELEM;
10369     LvTYPE(lv) = 'y';
10370     sv_magic(lv, NULL, PERL_MAGIC_defelem, NULL, 0);
10371     LvTARG(lv) = SvREFCNT_inc_simple_NN(av);
10372     LvSTARGOFF(lv) = ix;
10373     LvTARGLEN(lv) = extendible ? 1 : (STRLEN)UV_MAX;
10374     return lv;
10375 }
10376
10377 /*
10378 =for apidoc sv_setref_pv
10379
10380 Copies a pointer into a new SV, optionally blessing the SV.  The C<rv>
10381 argument will be upgraded to an RV.  That RV will be modified to point to
10382 the new SV.  If the C<pv> argument is C<NULL>, then C<PL_sv_undef> will be placed
10383 into the SV.  The C<classname> argument indicates the package for the
10384 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10385 will have a reference count of 1, and the RV will be returned.
10386
10387 Do not use with other Perl types such as HV, AV, SV, CV, because those
10388 objects will become corrupted by the pointer copy process.
10389
10390 Note that C<sv_setref_pvn> copies the string while this copies the pointer.
10391
10392 =cut
10393 */
10394
10395 SV*
10396 Perl_sv_setref_pv(pTHX_ SV *const rv, const char *const classname, void *const pv)
10397 {
10398     PERL_ARGS_ASSERT_SV_SETREF_PV;
10399
10400     if (!pv) {
10401         sv_set_undef(rv);
10402         SvSETMAGIC(rv);
10403     }
10404     else
10405         sv_setiv(newSVrv(rv,classname), PTR2IV(pv));
10406     return rv;
10407 }
10408
10409 /*
10410 =for apidoc sv_setref_iv
10411
10412 Copies an integer into a new SV, optionally blessing the SV.  The C<rv>
10413 argument will be upgraded to an RV.  That RV will be modified to point to
10414 the new SV.  The C<classname> argument indicates the package for the
10415 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10416 will have a reference count of 1, and the RV will be returned.
10417
10418 =cut
10419 */
10420
10421 SV*
10422 Perl_sv_setref_iv(pTHX_ SV *const rv, const char *const classname, const IV iv)
10423 {
10424     PERL_ARGS_ASSERT_SV_SETREF_IV;
10425
10426     sv_setiv(newSVrv(rv,classname), iv);
10427     return rv;
10428 }
10429
10430 /*
10431 =for apidoc sv_setref_uv
10432
10433 Copies an unsigned integer into a new SV, optionally blessing the SV.  The C<rv>
10434 argument will be upgraded to an RV.  That RV will be modified to point to
10435 the new SV.  The C<classname> argument indicates the package for the
10436 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10437 will have a reference count of 1, and the RV will be returned.
10438
10439 =cut
10440 */
10441
10442 SV*
10443 Perl_sv_setref_uv(pTHX_ SV *const rv, const char *const classname, const UV uv)
10444 {
10445     PERL_ARGS_ASSERT_SV_SETREF_UV;
10446
10447     sv_setuv(newSVrv(rv,classname), uv);
10448     return rv;
10449 }
10450
10451 /*
10452 =for apidoc sv_setref_nv
10453
10454 Copies a double into a new SV, optionally blessing the SV.  The C<rv>
10455 argument will be upgraded to an RV.  That RV will be modified to point to
10456 the new SV.  The C<classname> argument indicates the package for the
10457 blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
10458 will have a reference count of 1, and the RV will be returned.
10459
10460 =cut
10461 */
10462
10463 SV*
10464 Perl_sv_setref_nv(pTHX_ SV *const rv, const char *const classname, const NV nv)
10465 {
10466     PERL_ARGS_ASSERT_SV_SETREF_NV;
10467
10468     sv_setnv(newSVrv(rv,classname), nv);
10469     return rv;
10470 }
10471
10472 /*
10473 =for apidoc sv_setref_pvn
10474
10475 Copies a string into a new SV, optionally blessing the SV.  The length of the
10476 string must be specified with C<n>.  The C<rv> argument will be upgraded to
10477 an RV.  That RV will be modified to point to the new SV.  The C<classname>
10478 argument indicates the package for the blessing.  Set C<classname> to
10479 C<NULL> to avoid the blessing.  The new SV will have a reference count
10480 of 1, and the RV will be returned.
10481
10482 Note that C<sv_setref_pv> copies the pointer while this copies the string.
10483
10484 =cut
10485 */
10486
10487 SV*
10488 Perl_sv_setref_pvn(pTHX_ SV *const rv, const char *const classname,
10489                    const char *const pv, const STRLEN n)
10490 {
10491     PERL_ARGS_ASSERT_SV_SETREF_PVN;
10492
10493     sv_setpvn(newSVrv(rv,classname), pv, n);
10494     return rv;
10495 }
10496
10497 /*
10498 =for apidoc sv_bless
10499
10500 Blesses an SV into a specified package.  The SV must be an RV.  The package
10501 must be designated by its stash (see C<L</gv_stashpv>>).  The reference count
10502 of the SV is unaffected.
10503
10504 =cut
10505 */
10506
10507 SV*
10508 Perl_sv_bless(pTHX_ SV *const sv, HV *const stash)
10509 {
10510     SV *tmpRef;
10511     HV *oldstash = NULL;
10512
10513     PERL_ARGS_ASSERT_SV_BLESS;
10514
10515     SvGETMAGIC(sv);
10516     if (!SvROK(sv))
10517         Perl_croak(aTHX_ "Can't bless non-reference value");
10518     tmpRef = SvRV(sv);
10519     if (SvFLAGS(tmpRef) & (SVs_OBJECT|SVf_READONLY|SVf_PROTECT)) {
10520         if (SvREADONLY(tmpRef))
10521             Perl_croak_no_modify();
10522         if (SvOBJECT(tmpRef)) {
10523             oldstash = SvSTASH(tmpRef);
10524         }
10525     }
10526     SvOBJECT_on(tmpRef);
10527     SvUPGRADE(tmpRef, SVt_PVMG);
10528     SvSTASH_set(tmpRef, MUTABLE_HV(SvREFCNT_inc_simple(stash)));
10529     SvREFCNT_dec(oldstash);
10530
10531     if(SvSMAGICAL(tmpRef))
10532         if(mg_find(tmpRef, PERL_MAGIC_ext) || mg_find(tmpRef, PERL_MAGIC_uvar))
10533             mg_set(tmpRef);
10534
10535
10536
10537     return sv;
10538 }
10539
10540 /* Downgrades a PVGV to a PVMG. If it's actually a PVLV, we leave the type
10541  * as it is after unglobbing it.
10542  */
10543
10544 PERL_STATIC_INLINE void
10545 S_sv_unglob(pTHX_ SV *const sv, U32 flags)
10546 {
10547     void *xpvmg;
10548     HV *stash;
10549     SV * const temp = flags & SV_COW_DROP_PV ? NULL : sv_newmortal();
10550
10551     PERL_ARGS_ASSERT_SV_UNGLOB;
10552
10553     assert(SvTYPE(sv) == SVt_PVGV || SvTYPE(sv) == SVt_PVLV);
10554     SvFAKE_off(sv);
10555     if (!(flags & SV_COW_DROP_PV))
10556         gv_efullname3(temp, MUTABLE_GV(sv), "*");
10557
10558     SvREFCNT_inc_simple_void_NN(sv_2mortal(sv));
10559     if (GvGP(sv)) {
10560         if(GvCVu((const GV *)sv) && (stash = GvSTASH(MUTABLE_GV(sv)))
10561            && HvNAME_get(stash))
10562             mro_method_changed_in(stash);
10563         gp_free(MUTABLE_GV(sv));
10564     }
10565     if (GvSTASH(sv)) {
10566         sv_del_backref(MUTABLE_SV(GvSTASH(sv)), sv);
10567         GvSTASH(sv) = NULL;
10568     }
10569     GvMULTI_off(sv);
10570     if (GvNAME_HEK(sv)) {
10571         unshare_hek(GvNAME_HEK(sv));
10572     }
10573     isGV_with_GP_off(sv);
10574
10575     if(SvTYPE(sv) == SVt_PVGV) {
10576         /* need to keep SvANY(sv) in the right arena */
10577         xpvmg = new_XPVMG();
10578         StructCopy(SvANY(sv), xpvmg, XPVMG);
10579         del_XPVGV(SvANY(sv));
10580         SvANY(sv) = xpvmg;
10581
10582         SvFLAGS(sv) &= ~SVTYPEMASK;
10583         SvFLAGS(sv) |= SVt_PVMG;
10584     }
10585
10586     /* Intentionally not calling any local SET magic, as this isn't so much a
10587        set operation as merely an internal storage change.  */
10588     if (flags & SV_COW_DROP_PV) SvOK_off(sv);
10589     else sv_setsv_flags(sv, temp, 0);
10590
10591     if ((const GV *)sv == PL_last_in_gv)
10592         PL_last_in_gv = NULL;
10593     else if ((const GV *)sv == PL_statgv)
10594         PL_statgv = NULL;
10595 }
10596
10597 /*
10598 =for apidoc sv_unref_flags
10599
10600 Unsets the RV status of the SV, and decrements the reference count of
10601 whatever was being referenced by the RV.  This can almost be thought of
10602 as a reversal of C<newSVrv>.  The C<cflags> argument can contain
10603 C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
10604 (otherwise the decrementing is conditional on the reference count being
10605 different from one or the reference being a readonly SV).
10606 See C<L</SvROK_off>>.
10607
10608 =for apidoc Amnh||SV_IMMEDIATE_UNREF
10609
10610 =cut
10611 */
10612
10613 void
10614 Perl_sv_unref_flags(pTHX_ SV *const ref, const U32 flags)
10615 {
10616     SV* const target = SvRV(ref);
10617
10618     PERL_ARGS_ASSERT_SV_UNREF_FLAGS;
10619
10620     if (SvWEAKREF(ref)) {
10621         sv_del_backref(target, ref);
10622         SvWEAKREF_off(ref);
10623         SvRV_set(ref, NULL);
10624         return;
10625     }
10626     SvRV_set(ref, NULL);
10627     SvROK_off(ref);
10628     /* You can't have a || SvREADONLY(target) here, as $a = $$a, where $a was
10629        assigned to as BEGIN {$a = \"Foo"} will fail.  */
10630     if (SvREFCNT(target) != 1 || (flags & SV_IMMEDIATE_UNREF))
10631         SvREFCNT_dec_NN(target);
10632     else /* XXX Hack, but hard to make $a=$a->[1] work otherwise */
10633         sv_2mortal(target);     /* Schedule for freeing later */
10634 }
10635
10636 /*
10637 =for apidoc sv_untaint
10638
10639 Untaint an SV.  Use C<SvTAINTED_off> instead.
10640
10641 =cut
10642 */
10643
10644 void
10645 Perl_sv_untaint(pTHX_ SV *const sv)
10646 {
10647     PERL_ARGS_ASSERT_SV_UNTAINT;
10648     PERL_UNUSED_CONTEXT;
10649
10650     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
10651         MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
10652         if (mg)
10653             mg->mg_len &= ~1;
10654     }
10655 }
10656
10657 /*
10658 =for apidoc sv_tainted
10659
10660 Test an SV for taintedness.  Use C<SvTAINTED> instead.
10661
10662 =cut
10663 */
10664
10665 bool
10666 Perl_sv_tainted(pTHX_ SV *const sv)
10667 {
10668     PERL_ARGS_ASSERT_SV_TAINTED;
10669     PERL_UNUSED_CONTEXT;
10670
10671     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
10672         const MAGIC * const mg = mg_find(sv, PERL_MAGIC_taint);
10673         if (mg && (mg->mg_len & 1) )
10674             return TRUE;
10675     }
10676     return FALSE;
10677 }
10678
10679 #ifndef NO_MATHOMS  /* Can't move these to mathoms.c because call uiv_2buf(),
10680                        private to this file */
10681
10682 /*
10683 =for apidoc sv_setpviv
10684
10685 Copies an integer into the given SV, also updating its string value.
10686 Does not handle 'set' magic.  See C<L</sv_setpviv_mg>>.
10687
10688 =cut
10689 */
10690
10691 void
10692 Perl_sv_setpviv(pTHX_ SV *const sv, const IV iv)
10693 {
10694     /* The purpose of this union is to ensure that arr is aligned on
10695        a 2 byte boundary, because that is what uiv_2buf() requires */
10696     union {
10697         char arr[TYPE_CHARS(UV)];
10698         U16 dummy;
10699     } buf;
10700     char *ebuf;
10701     char * const ptr = uiv_2buf(buf.arr, iv, 0, 0, &ebuf);
10702
10703     PERL_ARGS_ASSERT_SV_SETPVIV;
10704
10705     sv_setpvn(sv, ptr, ebuf - ptr);
10706 }
10707
10708 /*
10709 =for apidoc sv_setpviv_mg
10710
10711 Like C<sv_setpviv>, but also handles 'set' magic.
10712
10713 =cut
10714 */
10715
10716 void
10717 Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
10718 {
10719     PERL_ARGS_ASSERT_SV_SETPVIV_MG;
10720
10721     GCC_DIAG_IGNORE_STMT(-Wdeprecated-declarations);
10722
10723     sv_setpviv(sv, iv);
10724
10725     GCC_DIAG_RESTORE_STMT;
10726
10727     SvSETMAGIC(sv);
10728 }
10729
10730 #endif  /* NO_MATHOMS */
10731
10732 #if defined(PERL_IMPLICIT_CONTEXT)
10733
10734 /* pTHX_ magic can't cope with varargs, so this is a no-context
10735  * version of the main function, (which may itself be aliased to us).
10736  * Don't access this version directly.
10737  */
10738
10739 void
10740 Perl_sv_setpvf_nocontext(SV *const sv, const char *const pat, ...)
10741 {
10742     dTHX;
10743     va_list args;
10744
10745     PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT;
10746
10747     va_start(args, pat);
10748     sv_vsetpvf(sv, pat, &args);
10749     va_end(args);
10750 }
10751
10752 /* pTHX_ magic can't cope with varargs, so this is a no-context
10753  * version of the main function, (which may itself be aliased to us).
10754  * Don't access this version directly.
10755  */
10756
10757 void
10758 Perl_sv_setpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10759 {
10760     dTHX;
10761     va_list args;
10762
10763     PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT;
10764
10765     va_start(args, pat);
10766     sv_vsetpvf_mg(sv, pat, &args);
10767     va_end(args);
10768 }
10769 #endif
10770
10771 /*
10772 =for apidoc sv_setpvf
10773
10774 Works like C<sv_catpvf> but copies the text into the SV instead of
10775 appending it.  Does not handle 'set' magic.  See C<L</sv_setpvf_mg>>.
10776
10777 =for apidoc sv_setpvf_nocontext
10778 Like C<L</sv_setpvf>> but does not take a thread context (C<aTHX>) parameter,
10779 so is used in situations where the caller doesn't already have the thread
10780 context.
10781
10782 =cut
10783 */
10784
10785 void
10786 Perl_sv_setpvf(pTHX_ SV *const sv, const char *const pat, ...)
10787 {
10788     va_list args;
10789
10790     PERL_ARGS_ASSERT_SV_SETPVF;
10791
10792     va_start(args, pat);
10793     sv_vsetpvf(sv, pat, &args);
10794     va_end(args);
10795 }
10796
10797 /*
10798 =for apidoc sv_vsetpvf
10799
10800 Works like C<sv_vcatpvf> but copies the text into the SV instead of
10801 appending it.  Does not handle 'set' magic.  See C<L</sv_vsetpvf_mg>>.
10802
10803 Usually used via its frontend C<sv_setpvf>.
10804
10805 =cut
10806 */
10807
10808 void
10809 Perl_sv_vsetpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10810 {
10811     PERL_ARGS_ASSERT_SV_VSETPVF;
10812
10813     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10814 }
10815
10816 /*
10817 =for apidoc sv_setpvf_mg
10818
10819 Like C<sv_setpvf>, but also handles 'set' magic.
10820
10821 =for apidoc sv_setpvf_mg_nocontext
10822 Like C<L</sv_setpvf_mg>>, but does not take a thread context (C<aTHX>)
10823 parameter, so is used in situations where the caller doesn't already have the
10824 thread context.
10825
10826 =cut
10827 */
10828
10829 void
10830 Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10831 {
10832     va_list args;
10833
10834     PERL_ARGS_ASSERT_SV_SETPVF_MG;
10835
10836     va_start(args, pat);
10837     sv_vsetpvf_mg(sv, pat, &args);
10838     va_end(args);
10839 }
10840
10841 /*
10842 =for apidoc sv_vsetpvf_mg
10843
10844 Like C<sv_vsetpvf>, but also handles 'set' magic.
10845
10846 Usually used via its frontend C<sv_setpvf_mg>.
10847
10848 =cut
10849 */
10850
10851 void
10852 Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10853 {
10854     PERL_ARGS_ASSERT_SV_VSETPVF_MG;
10855
10856     sv_vsetpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10857     SvSETMAGIC(sv);
10858 }
10859
10860 #if defined(PERL_IMPLICIT_CONTEXT)
10861
10862 /* pTHX_ magic can't cope with varargs, so this is a no-context
10863  * version of the main function, (which may itself be aliased to us).
10864  * Don't access this version directly.
10865  */
10866
10867 void
10868 Perl_sv_catpvf_nocontext(SV *const sv, const char *const pat, ...)
10869 {
10870     dTHX;
10871     va_list args;
10872
10873     PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT;
10874
10875     va_start(args, pat);
10876     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10877     va_end(args);
10878 }
10879
10880 /* pTHX_ magic can't cope with varargs, so this is a no-context
10881  * version of the main function, (which may itself be aliased to us).
10882  * Don't access this version directly.
10883  */
10884
10885 void
10886 Perl_sv_catpvf_mg_nocontext(SV *const sv, const char *const pat, ...)
10887 {
10888     dTHX;
10889     va_list args;
10890
10891     PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT;
10892
10893     va_start(args, pat);
10894     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10895     SvSETMAGIC(sv);
10896     va_end(args);
10897 }
10898 #endif
10899
10900 /*
10901 =for apidoc sv_catpvf
10902
10903 Processes its arguments like C<sprintf>, and appends the formatted
10904 output to an SV.  As with C<sv_vcatpvfn> called with a non-null C-style
10905 variable argument list, argument reordering is not supported.
10906 If the appended data contains "wide" characters
10907 (including, but not limited to, SVs with a UTF-8 PV formatted with C<%s>,
10908 and characters >255 formatted with C<%c>), the original SV might get
10909 upgraded to UTF-8.  Handles 'get' magic, but not 'set' magic.  See
10910 C<L</sv_catpvf_mg>>.  If the original SV was UTF-8, the pattern should be
10911 valid UTF-8; if the original SV was bytes, the pattern should be too.
10912
10913 =for apidoc sv_catpvf_nocontext
10914 Like C<L</sv_catpvf>> but does not take a thread context (C<aTHX>) parameter,
10915 so is used in situations where the caller doesn't already have the thread
10916 context.
10917
10918 =cut */
10919
10920 void
10921 Perl_sv_catpvf(pTHX_ SV *const sv, const char *const pat, ...)
10922 {
10923     va_list args;
10924
10925     PERL_ARGS_ASSERT_SV_CATPVF;
10926
10927     va_start(args, pat);
10928     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10929     va_end(args);
10930 }
10931
10932 /*
10933 =for apidoc sv_vcatpvf
10934
10935 Processes its arguments like C<sv_vcatpvfn> called with a non-null C-style
10936 variable argument list, and appends the formatted output
10937 to an SV.  Does not handle 'set' magic.  See C<L</sv_vcatpvf_mg>>.
10938
10939 Usually used via its frontend C<sv_catpvf>.
10940
10941 =cut
10942 */
10943
10944 void
10945 Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10946 {
10947     PERL_ARGS_ASSERT_SV_VCATPVF;
10948
10949     sv_vcatpvfn_flags(sv, pat, strlen(pat), args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10950 }
10951
10952 /*
10953 =for apidoc sv_catpvf_mg
10954
10955 Like C<sv_catpvf>, but also handles 'set' magic.
10956
10957 =for apidoc sv_catpvf_mg_nocontext
10958 Like C<L</sv_catpvf_mg>> but does not take a thread context (C<aTHX>) parameter,
10959 so is used in situations where the caller doesn't already have the thread
10960 context.
10961
10962 =cut
10963 */
10964
10965 void
10966 Perl_sv_catpvf_mg(pTHX_ SV *const sv, const char *const pat, ...)
10967 {
10968     va_list args;
10969
10970     PERL_ARGS_ASSERT_SV_CATPVF_MG;
10971
10972     va_start(args, pat);
10973     sv_vcatpvfn_flags(sv, pat, strlen(pat), &args, NULL, 0, NULL, SV_GMAGIC|SV_SMAGIC);
10974     SvSETMAGIC(sv);
10975     va_end(args);
10976 }
10977
10978 /*
10979 =for apidoc sv_vcatpvf_mg
10980
10981 Like C<sv_vcatpvf>, but also handles 'set' magic.
10982
10983 Usually used via its frontend C<sv_catpvf_mg>.
10984
10985 =cut
10986 */
10987
10988 void
10989 Perl_sv_vcatpvf_mg(pTHX_ SV *const sv, const char *const pat, va_list *const args)
10990 {
10991     PERL_ARGS_ASSERT_SV_VCATPVF_MG;
10992
10993     sv_vcatpvfn(sv, pat, strlen(pat), args, NULL, 0, NULL);
10994     SvSETMAGIC(sv);
10995 }
10996
10997 /*
10998 =for apidoc sv_vsetpvfn
10999
11000 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
11001 appending it.
11002
11003 Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
11004
11005 =cut
11006 */
11007
11008 void
11009 Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
11010                  va_list *const args, SV **const svargs, const Size_t sv_count, bool *const maybe_tainted)
11011 {
11012     PERL_ARGS_ASSERT_SV_VSETPVFN;
11013
11014     SvPVCLEAR(sv);
11015     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, sv_count, maybe_tainted, 0);
11016 }
11017
11018
11019 /* simplified inline Perl_sv_catpvn_nomg() when you know the SV's SvPOK */
11020
11021 PERL_STATIC_INLINE void
11022 S_sv_catpvn_simple(pTHX_ SV *const sv, const char* const buf, const STRLEN len)
11023 {
11024     STRLEN const need = len + SvCUR(sv) + 1;
11025     char *end;
11026
11027     /* can't wrap as both len and SvCUR() are allocated in
11028      * memory and together can't consume all the address space
11029      */
11030     assert(need > len);
11031
11032     assert(SvPOK(sv));
11033     SvGROW(sv, need);
11034     end = SvEND(sv);
11035     Copy(buf, end, len, char);
11036     end += len;
11037     *end = '\0';
11038     SvCUR_set(sv, need - 1);
11039 }
11040
11041
11042 /*
11043  * Warn of missing argument to sprintf. The value used in place of such
11044  * arguments should be &PL_sv_no; an undefined value would yield
11045  * inappropriate "use of uninit" warnings [perl #71000].
11046  */
11047 STATIC void
11048 S_warn_vcatpvfn_missing_argument(pTHX) {
11049     if (ckWARN(WARN_MISSING)) {
11050         Perl_warner(aTHX_ packWARN(WARN_MISSING), "Missing argument in %s",
11051                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
11052     }
11053 }
11054
11055
11056 static void
11057 S_croak_overflow()
11058 {
11059     dTHX;
11060     Perl_croak(aTHX_ "Integer overflow in format string for %s",
11061                     (PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn"));
11062 }
11063
11064
11065 /* Given an int i from the next arg (if args is true) or an sv from an arg
11066  * (if args is false), try to extract a STRLEN-ranged value from the arg,
11067  * with overflow checking.
11068  * Sets *neg to true if the value was negative (untouched otherwise.
11069  * Returns the absolute value.
11070  * As an extra margin of safety, it croaks if the returned value would
11071  * exceed the maximum value of a STRLEN / 4.
11072  */
11073
11074 static STRLEN
11075 S_sprintf_arg_num_val(pTHX_ va_list *const args, int i, SV *sv, bool *neg)
11076 {
11077     IV iv;
11078
11079     if (args) {
11080         iv = i;
11081         goto do_iv;
11082     }
11083
11084     if (!sv)
11085         return 0;
11086
11087     SvGETMAGIC(sv);
11088
11089     if (UNLIKELY(SvIsUV(sv))) {
11090         UV uv = SvUV_nomg(sv);
11091         if (uv > IV_MAX)
11092             S_croak_overflow();
11093         iv = uv;
11094     }
11095     else {
11096         iv = SvIV_nomg(sv);
11097       do_iv:
11098         if (iv < 0) {
11099             if (iv < -IV_MAX)
11100                 S_croak_overflow();
11101             iv = -iv;
11102             *neg = TRUE;
11103         }
11104     }
11105
11106     if (iv > (IV)(((STRLEN)~0) / 4))
11107         S_croak_overflow();
11108
11109     return (STRLEN)iv;
11110 }
11111
11112 /* Read in and return a number. Updates *pattern to point to the char
11113  * following the number. Expects the first char to 1..9.
11114  * Croaks if the number exceeds 1/4 of the maximum value of STRLEN.
11115  * This is a belt-and-braces safety measure to complement any
11116  * overflow/wrap checks done in the main body of sv_vcatpvfn_flags.
11117  * It means that e.g. on a 32-bit system the width/precision can't be more
11118  * than 1G, which seems reasonable.
11119  */
11120
11121 STATIC STRLEN
11122 S_expect_number(pTHX_ const char **const pattern)
11123 {
11124     STRLEN var;
11125
11126     PERL_ARGS_ASSERT_EXPECT_NUMBER;
11127
11128     assert(inRANGE(**pattern, '1', '9'));
11129
11130     var = *(*pattern)++ - '0';
11131     while (isDIGIT(**pattern)) {
11132         /* if var * 10 + 9 would exceed 1/4 max strlen, croak */
11133         if (var > ((((STRLEN)~0) / 4 - 9) / 10))
11134             S_croak_overflow();
11135         var = var * 10 + (*(*pattern)++ - '0');
11136     }
11137     return var;
11138 }
11139
11140 /* Implement a fast "%.0f": given a pointer to the end of a buffer (caller
11141  * ensures it's big enough), back fill it with the rounded integer part of
11142  * nv. Returns ptr to start of string, and sets *len to its length.
11143  * Returns NULL if not convertible.
11144  */
11145
11146 STATIC char *
11147 S_F0convert(NV nv, char *const endbuf, STRLEN *const len)
11148 {
11149     const int neg = nv < 0;
11150     UV uv;
11151
11152     PERL_ARGS_ASSERT_F0CONVERT;
11153
11154     assert(!Perl_isinfnan(nv));
11155     if (neg)
11156         nv = -nv;
11157     if (nv != 0.0 && nv < UV_MAX) {
11158         char *p = endbuf;
11159         uv = (UV)nv;
11160         if (uv != nv) {
11161             nv += 0.5;
11162             uv = (UV)nv;
11163             if (uv & 1 && uv == nv)
11164                 uv--;                   /* Round to even */
11165         }
11166         do {
11167             const unsigned dig = uv % 10;
11168             *--p = '0' + dig;
11169         } while (uv /= 10);
11170         if (neg)
11171             *--p = '-';
11172         *len = endbuf - p;
11173         return p;
11174     }
11175     return NULL;
11176 }
11177
11178
11179 /* XXX maybe_tainted is never assigned to, so the doc above is lying. */
11180
11181 void
11182 Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
11183                  va_list *const args, SV **const svargs, const Size_t sv_count, bool *const maybe_tainted)
11184 {
11185     PERL_ARGS_ASSERT_SV_VCATPVFN;
11186
11187     sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, sv_count, maybe_tainted, SV_GMAGIC|SV_SMAGIC);
11188 }
11189
11190
11191 /* For the vcatpvfn code, we need a long double target in case
11192  * HAS_LONG_DOUBLE, even without USE_LONG_DOUBLE, so that we can printf
11193  * with long double formats, even without NV being long double.  But we
11194  * call the target 'fv' instead of 'nv', since most of the time it is not
11195  * (most compilers these days recognize "long double", even if only as a
11196  * synonym for "double").
11197 */
11198 #if defined(HAS_LONG_DOUBLE) && LONG_DOUBLESIZE > DOUBLESIZE && \
11199         defined(PERL_PRIgldbl) && !defined(USE_QUADMATH)
11200 #  define VCATPVFN_FV_GF PERL_PRIgldbl
11201 #  if defined(__VMS) && defined(__ia64) && defined(__IEEE_FLOAT)
11202        /* Work around breakage in OTS$CVT_FLOAT_T_X */
11203 #    define VCATPVFN_NV_TO_FV(nv,fv)                    \
11204             STMT_START {                                \
11205                 double _dv = nv;                        \
11206                 fv = Perl_isnan(_dv) ? LDBL_QNAN : _dv; \
11207             } STMT_END
11208 #  else
11209 #    define VCATPVFN_NV_TO_FV(nv,fv) (fv)=(nv)
11210 #  endif
11211    typedef long double vcatpvfn_long_double_t;
11212 #else
11213 #  define VCATPVFN_FV_GF NVgf
11214 #  define VCATPVFN_NV_TO_FV(nv,fv) (fv)=(nv)
11215    typedef NV vcatpvfn_long_double_t;
11216 #endif
11217
11218 #ifdef LONGDOUBLE_DOUBLEDOUBLE
11219 /* The first double can be as large as 2**1023, or '1' x '0' x 1023.
11220  * The second double can be as small as 2**-1074, or '0' x 1073 . '1'.
11221  * The sum of them can be '1' . '0' x 2096 . '1', with implied radix point
11222  * after the first 1023 zero bits.
11223  *
11224  * XXX The 2098 is quite large (262.25 bytes) and therefore some sort
11225  * of dynamically growing buffer might be better, start at just 16 bytes
11226  * (for example) and grow only when necessary.  Or maybe just by looking
11227  * at the exponents of the two doubles? */
11228 #  define DOUBLEDOUBLE_MAXBITS 2098
11229 #endif
11230
11231 /* vhex will contain the values (0..15) of the hex digits ("nybbles"
11232  * of 4 bits); 1 for the implicit 1, and the mantissa bits, four bits
11233  * per xdigit.  For the double-double case, this can be rather many.
11234  * The non-double-double-long-double overshoots since all bits of NV
11235  * are not mantissa bits, there are also exponent bits. */
11236 #ifdef LONGDOUBLE_DOUBLEDOUBLE
11237 #  define VHEX_SIZE (3+DOUBLEDOUBLE_MAXBITS/4)
11238 #else
11239 #  define VHEX_SIZE (1+(NVSIZE * 8)/4)
11240 #endif
11241
11242 /* If we do not have a known long double format, (including not using
11243  * long doubles, or long doubles being equal to doubles) then we will
11244  * fall back to the ldexp/frexp route, with which we can retrieve at
11245  * most as many bits as our widest unsigned integer type is.  We try
11246  * to get a 64-bit unsigned integer even if we are not using a 64-bit UV.
11247  *
11248  * (If you want to test the case of UVSIZE == 4, NVSIZE == 8,
11249  *  set the MANTISSATYPE to int and the MANTISSASIZE to 4.)
11250  */
11251 #if defined(HAS_QUAD) && defined(Uquad_t)
11252 #  define MANTISSATYPE Uquad_t
11253 #  define MANTISSASIZE 8
11254 #else
11255 #  define MANTISSATYPE UV
11256 #  define MANTISSASIZE UVSIZE
11257 #endif
11258
11259 #if defined(DOUBLE_LITTLE_ENDIAN) || defined(LONGDOUBLE_LITTLE_ENDIAN)
11260 #  define HEXTRACT_LITTLE_ENDIAN
11261 #elif defined(DOUBLE_BIG_ENDIAN) || defined(LONGDOUBLE_BIG_ENDIAN)
11262 #  define HEXTRACT_BIG_ENDIAN
11263 #else
11264 #  define HEXTRACT_MIX_ENDIAN
11265 #endif
11266
11267 /* S_hextract() is a helper for S_format_hexfp, for extracting
11268  * the hexadecimal values (for %a/%A).  The nv is the NV where the value
11269  * are being extracted from (either directly from the long double in-memory
11270  * presentation, or from the uquad computed via frexp+ldexp).  frexp also
11271  * is used to update the exponent.  The subnormal is set to true
11272  * for IEEE 754 subnormals/denormals (including the x86 80-bit format).
11273  * The vhex is the pointer to the beginning of the output buffer of VHEX_SIZE.
11274  *
11275  * The tricky part is that S_hextract() needs to be called twice:
11276  * the first time with vend as NULL, and the second time with vend as
11277  * the pointer returned by the first call.  What happens is that on
11278  * the first round the output size is computed, and the intended
11279  * extraction sanity checked.  On the second round the actual output
11280  * (the extraction of the hexadecimal values) takes place.
11281  * Sanity failures cause fatal failures during both rounds. */
11282 STATIC U8*
11283 S_hextract(pTHX_ const NV nv, int* exponent, bool *subnormal,
11284            U8* vhex, U8* vend)
11285 {
11286     U8* v = vhex;
11287     int ix;
11288     int ixmin = 0, ixmax = 0;
11289
11290     /* XXX Inf/NaN are not handled here, since it is
11291      * assumed they are to be output as "Inf" and "NaN". */
11292
11293     /* These macros are just to reduce typos, they have multiple
11294      * repetitions below, but usually only one (or sometimes two)
11295      * of them is really being used. */
11296     /* HEXTRACT_OUTPUT() extracts the high nybble first. */
11297 #define HEXTRACT_OUTPUT_HI(ix) (*v++ = nvp[ix] >> 4)
11298 #define HEXTRACT_OUTPUT_LO(ix) (*v++ = nvp[ix] & 0xF)
11299 #define HEXTRACT_OUTPUT(ix) \
11300     STMT_START { \
11301       HEXTRACT_OUTPUT_HI(ix); HEXTRACT_OUTPUT_LO(ix); \
11302    } STMT_END
11303 #define HEXTRACT_COUNT(ix, c) \
11304     STMT_START { \
11305       v += c; if (ix < ixmin) ixmin = ix; else if (ix > ixmax) ixmax = ix; \
11306    } STMT_END
11307 #define HEXTRACT_BYTE(ix) \
11308     STMT_START { \
11309       if (vend) HEXTRACT_OUTPUT(ix); else HEXTRACT_COUNT(ix, 2); \
11310    } STMT_END
11311 #define HEXTRACT_LO_NYBBLE(ix) \
11312     STMT_START { \
11313       if (vend) HEXTRACT_OUTPUT_LO(ix); else HEXTRACT_COUNT(ix, 1); \
11314    } STMT_END
11315     /* HEXTRACT_TOP_NYBBLE is just convenience disguise,
11316      * to make it look less odd when the top bits of a NV
11317      * are extracted using HEXTRACT_LO_NYBBLE: the highest
11318      * order bits can be in the "low nybble" of a byte. */
11319 #define HEXTRACT_TOP_NYBBLE(ix) HEXTRACT_LO_NYBBLE(ix)
11320 #define HEXTRACT_BYTES_LE(a, b) \
11321     for (ix = a; ix >= b; ix--) { HEXTRACT_BYTE(ix); }
11322 #define HEXTRACT_BYTES_BE(a, b) \
11323     for (ix = a; ix <= b; ix++) { HEXTRACT_BYTE(ix); }
11324 #define HEXTRACT_GET_SUBNORMAL(nv) *subnormal = Perl_fp_class_denorm(nv)
11325 #define HEXTRACT_IMPLICIT_BIT(nv) \
11326     STMT_START { \
11327         if (!*subnormal) { \
11328             if (vend) *v++ = ((nv) == 0.0) ? 0 : 1; else v++; \
11329         } \
11330    } STMT_END
11331
11332 /* Most formats do.  Those which don't should undef this.
11333  *
11334  * But also note that IEEE 754 subnormals do not have it, or,
11335  * expressed alternatively, their implicit bit is zero. */
11336 #define HEXTRACT_HAS_IMPLICIT_BIT
11337
11338 /* Many formats do.  Those which don't should undef this. */
11339 #define HEXTRACT_HAS_TOP_NYBBLE
11340
11341     /* HEXTRACTSIZE is the maximum number of xdigits. */
11342 #if defined(USE_LONG_DOUBLE) && defined(LONGDOUBLE_DOUBLEDOUBLE)
11343 #  define HEXTRACTSIZE (2+DOUBLEDOUBLE_MAXBITS/4)
11344 #else
11345 #  define HEXTRACTSIZE 2 * NVSIZE
11346 #endif
11347
11348     const U8* vmaxend = vhex + HEXTRACTSIZE;
11349
11350     assert(HEXTRACTSIZE <= VHEX_SIZE);
11351
11352     PERL_UNUSED_VAR(ix); /* might happen */
11353     (void)Perl_frexp(PERL_ABS(nv), exponent);
11354     *subnormal = FALSE;
11355     if (vend && (vend <= vhex || vend > vmaxend)) {
11356         /* diag_listed_as: Hexadecimal float: internal error (%s) */
11357         Perl_croak(aTHX_ "Hexadecimal float: internal error (entry)");
11358     }
11359     {
11360         /* First check if using long doubles. */
11361 #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE)
11362 #  if LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN
11363         /* Used in e.g. VMS and HP-UX IA-64, e.g. -0.1L:
11364          * 9a 99 99 99 99 99 99 99 99 99 99 99 99 99 fb bf */
11365         /* The bytes 13..0 are the mantissa/fraction,
11366          * the 15,14 are the sign+exponent. */
11367         const U8* nvp = (const U8*)(&nv);
11368         HEXTRACT_GET_SUBNORMAL(nv);
11369         HEXTRACT_IMPLICIT_BIT(nv);
11370 #    undef HEXTRACT_HAS_TOP_NYBBLE
11371         HEXTRACT_BYTES_LE(13, 0);
11372 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN
11373         /* Used in e.g. Solaris Sparc and HP-UX PA-RISC, e.g. -0.1L:
11374          * bf fb 99 99 99 99 99 99 99 99 99 99 99 99 99 9a */
11375         /* The bytes 2..15 are the mantissa/fraction,
11376          * the 0,1 are the sign+exponent. */
11377         const U8* nvp = (const U8*)(&nv);
11378         HEXTRACT_GET_SUBNORMAL(nv);
11379         HEXTRACT_IMPLICIT_BIT(nv);
11380 #    undef HEXTRACT_HAS_TOP_NYBBLE
11381         HEXTRACT_BYTES_BE(2, 15);
11382 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN
11383         /* x86 80-bit "extended precision", 64 bits of mantissa / fraction /
11384          * significand, 15 bits of exponent, 1 bit of sign.  No implicit bit.
11385          * NVSIZE can be either 12 (ILP32, Solaris x86) or 16 (LP64, Linux
11386          * and OS X), meaning that 2 or 6 bytes are empty padding. */
11387         /* The bytes 0..1 are the sign+exponent,
11388          * the bytes 2..9 are the mantissa/fraction. */
11389         const U8* nvp = (const U8*)(&nv);
11390 #    undef HEXTRACT_HAS_IMPLICIT_BIT
11391 #    undef HEXTRACT_HAS_TOP_NYBBLE
11392         HEXTRACT_GET_SUBNORMAL(nv);
11393         HEXTRACT_BYTES_LE(7, 0);
11394 #  elif LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN
11395         /* Does this format ever happen? (Wikipedia says the Motorola
11396          * 6888x math coprocessors used format _like_ this but padded
11397          * to 96 bits with 16 unused bits between the exponent and the
11398          * mantissa.) */
11399         const U8* nvp = (const U8*)(&nv);
11400 #    undef HEXTRACT_HAS_IMPLICIT_BIT
11401 #    undef HEXTRACT_HAS_TOP_NYBBLE
11402         HEXTRACT_GET_SUBNORMAL(nv);
11403         HEXTRACT_BYTES_BE(0, 7);
11404 #  else
11405 #    define HEXTRACT_FALLBACK
11406         /* Double-double format: two doubles next to each other.
11407          * The first double is the high-order one, exactly like
11408          * it would be for a "lone" double.  The second double
11409          * is shifted down using the exponent so that that there
11410          * are no common bits.  The tricky part is that the value
11411          * of the double-double is the SUM of the two doubles and
11412          * the second one can be also NEGATIVE.
11413          *
11414          * Because of this tricky construction the bytewise extraction we
11415          * use for the other long double formats doesn't work, we must
11416          * extract the values bit by bit.
11417          *
11418          * The little-endian double-double is used .. somewhere?
11419          *
11420          * The big endian double-double is used in e.g. PPC/Power (AIX)
11421          * and MIPS (SGI).
11422          *
11423          * The mantissa bits are in two separate stretches, e.g. for -0.1L:
11424          * 9a 99 99 99 99 99 59 bc 9a 99 99 99 99 99 b9 3f (LE)
11425          * 3f b9 99 99 99 99 99 9a bc 59 99 99 99 99 99 9a (BE)
11426          */
11427 #  endif
11428 #else /* #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE) */
11429         /* Using normal doubles, not long doubles.
11430          *
11431          * We generate 4-bit xdigits (nybble/nibble) instead of 8-bit
11432          * bytes, since we might need to handle printf precision, and
11433          * also need to insert the radix. */
11434 #  if NVSIZE == 8
11435 #    ifdef HEXTRACT_LITTLE_ENDIAN
11436         /* 0 1 2 3 4 5 6 7 (MSB = 7, LSB = 0, 6+7 = exponent+sign) */
11437         const U8* nvp = (const U8*)(&nv);
11438         HEXTRACT_GET_SUBNORMAL(nv);
11439         HEXTRACT_IMPLICIT_BIT(nv);
11440         HEXTRACT_TOP_NYBBLE(6);
11441         HEXTRACT_BYTES_LE(5, 0);
11442 #    elif defined(HEXTRACT_BIG_ENDIAN)
11443         /* 7 6 5 4 3 2 1 0 (MSB = 7, LSB = 0, 6+7 = exponent+sign) */
11444         const U8* nvp = (const U8*)(&nv);
11445         HEXTRACT_GET_SUBNORMAL(nv);
11446         HEXTRACT_IMPLICIT_BIT(nv);
11447         HEXTRACT_TOP_NYBBLE(1);
11448         HEXTRACT_BYTES_BE(2, 7);
11449 #    elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_LE_BE
11450         /* 4 5 6 7 0 1 2 3 (MSB = 7, LSB = 0, 6:7 = nybble:exponent:sign) */
11451         const U8* nvp = (const U8*)(&nv);
11452         HEXTRACT_GET_SUBNORMAL(nv);
11453         HEXTRACT_IMPLICIT_BIT(nv);
11454         HEXTRACT_TOP_NYBBLE(2); /* 6 */
11455         HEXTRACT_BYTE(1); /* 5 */
11456         HEXTRACT_BYTE(0); /* 4 */
11457         HEXTRACT_BYTE(7); /* 3 */
11458         HEXTRACT_BYTE(6); /* 2 */
11459         HEXTRACT_BYTE(5); /* 1 */
11460         HEXTRACT_BYTE(4); /* 0 */
11461 #    elif DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_BE_LE
11462         /* 3 2 1 0 7 6 5 4 (MSB = 7, LSB = 0, 7:6 = sign:exponent:nybble) */
11463         const U8* nvp = (const U8*)(&nv);
11464         HEXTRACT_GET_SUBNORMAL(nv);
11465         HEXTRACT_IMPLICIT_BIT(nv);
11466         HEXTRACT_TOP_NYBBLE(5); /* 6 */
11467         HEXTRACT_BYTE(6); /* 5 */
11468         HEXTRACT_BYTE(7); /* 4 */
11469         HEXTRACT_BYTE(0); /* 3 */
11470         HEXTRACT_BYTE(1); /* 2 */
11471         HEXTRACT_BYTE(2); /* 1 */
11472         HEXTRACT_BYTE(3); /* 0 */
11473 #    else
11474 #      define HEXTRACT_FALLBACK
11475 #    endif
11476 #  else
11477 #    define HEXTRACT_FALLBACK
11478 #  endif
11479 #endif /* #if defined(USE_LONG_DOUBLE) && (NVSIZE > DOUBLESIZE) #else */
11480
11481 #ifdef HEXTRACT_FALLBACK
11482         HEXTRACT_GET_SUBNORMAL(nv);
11483 #  undef HEXTRACT_HAS_TOP_NYBBLE /* Meaningless, but consistent. */
11484         /* The fallback is used for the double-double format, and
11485          * for unknown long double formats, and for unknown double
11486          * formats, or in general unknown NV formats. */
11487         if (nv == (NV)0.0) {
11488             if (vend)
11489                 *v++ = 0;
11490             else
11491                 v++;
11492             *exponent = 0;
11493         }
11494         else {
11495             NV d = nv < 0 ? -nv : nv;
11496             NV e = (NV)1.0;
11497             U8 ha = 0x0; /* hexvalue accumulator */
11498             U8 hd = 0x8; /* hexvalue digit */
11499
11500             /* Shift d and e (and update exponent) so that e <= d < 2*e,
11501              * this is essentially manual frexp(). Multiplying by 0.5 and
11502              * doubling should be lossless in binary floating point. */
11503
11504             *exponent = 1;
11505
11506             while (e > d) {
11507                 e *= (NV)0.5;
11508                 (*exponent)--;
11509             }
11510             /* Now d >= e */
11511
11512             while (d >= e + e) {
11513                 e += e;
11514                 (*exponent)++;
11515             }
11516             /* Now e <= d < 2*e */
11517
11518             /* First extract the leading hexdigit (the implicit bit). */
11519             if (d >= e) {
11520                 d -= e;
11521                 if (vend)
11522                     *v++ = 1;
11523                 else
11524                     v++;
11525             }
11526             else {
11527                 if (vend)
11528                     *v++ = 0;
11529                 else
11530                     v++;
11531             }
11532             e *= (NV)0.5;
11533
11534             /* Then extract the remaining hexdigits. */
11535             while (d > (NV)0.0) {
11536                 if (d >= e) {
11537                     ha |= hd;
11538                     d -= e;
11539                 }
11540                 if (hd == 1) {
11541                     /* Output or count in groups of four bits,
11542                      * that is, when the hexdigit is down to one. */
11543                     if (vend)
11544                         *v++ = ha;
11545                     else
11546                         v++;
11547                     /* Reset the hexvalue. */
11548                     ha = 0x0;
11549                     hd = 0x8;
11550                 }
11551                 else
11552                     hd >>= 1;
11553                 e *= (NV)0.5;
11554             }
11555
11556             /* Flush possible pending hexvalue. */
11557             if (ha) {
11558                 if (vend)
11559                     *v++ = ha;
11560                 else
11561                     v++;
11562             }
11563         }
11564 #endif
11565     }
11566     /* Croak for various reasons: if the output pointer escaped the
11567      * output buffer, if the extraction index escaped the extraction
11568      * buffer, or if the ending output pointer didn't match the
11569      * previously computed value. */
11570     if (v <= vhex || v - vhex >= VHEX_SIZE ||
11571         /* For double-double the ixmin and ixmax stay at zero,
11572          * which is convenient since the HEXTRACTSIZE is tricky
11573          * for double-double. */
11574         ixmin < 0 || ixmax >= NVSIZE ||
11575         (vend && v != vend)) {
11576         /* diag_listed_as: Hexadecimal float: internal error (%s) */
11577         Perl_croak(aTHX_ "Hexadecimal float: internal error (overflow)");
11578     }
11579     return v;
11580 }
11581
11582
11583 /* S_format_hexfp(): helper function for Perl_sv_vcatpvfn_flags().
11584  *
11585  * Processes the %a/%A hexadecimal floating-point format, since the
11586  * built-in snprintf()s which are used for most of the f/p formats, don't
11587  * universally handle %a/%A.
11588  * Populates buf of length bufsize, and returns the length of the created
11589  * string.
11590  * The rest of the args have the same meaning as the local vars of the
11591  * same name within Perl_sv_vcatpvfn_flags().
11592  *
11593  * The caller's determination of IN_LC(LC_NUMERIC), passed as in_lc_numeric,
11594  * is used to ensure we do the right thing when we need to access the locale's
11595  * numeric radix.
11596  *
11597  * It requires the caller to make buf large enough.
11598  */
11599
11600 static STRLEN
11601 S_format_hexfp(pTHX_ char * const buf, const STRLEN bufsize, const char c,
11602                     const NV nv, const vcatpvfn_long_double_t fv,
11603                     bool has_precis, STRLEN precis, STRLEN width,
11604                     bool alt, char plus, bool left, bool fill, bool in_lc_numeric)
11605 {
11606     /* Hexadecimal floating point. */
11607     char* p = buf;
11608     U8 vhex[VHEX_SIZE];
11609     U8* v = vhex; /* working pointer to vhex */
11610     U8* vend; /* pointer to one beyond last digit of vhex */
11611     U8* vfnz = NULL; /* first non-zero */
11612     U8* vlnz = NULL; /* last non-zero */
11613     U8* v0 = NULL; /* first output */
11614     const bool lower = (c == 'a');
11615     /* At output the values of vhex (up to vend) will
11616      * be mapped through the xdig to get the actual
11617      * human-readable xdigits. */
11618     const char* xdig = PL_hexdigit;
11619     STRLEN zerotail = 0; /* how many extra zeros to append */
11620     int exponent = 0; /* exponent of the floating point input */
11621     bool hexradix = FALSE; /* should we output the radix */
11622     bool subnormal = FALSE; /* IEEE 754 subnormal/denormal */
11623     bool negative = FALSE;
11624     STRLEN elen;
11625
11626     /* XXX: NaN, Inf -- though they are printed as "NaN" and "Inf".
11627      *
11628      * For example with denormals, (assuming the vanilla
11629      * 64-bit double): the exponent is zero. 1xp-1074 is
11630      * the smallest denormal and the smallest double, it
11631      * could be output also as 0x0.0000000000001p-1022 to
11632      * match its internal structure. */
11633
11634     vend = S_hextract(aTHX_ nv, &exponent, &subnormal, vhex, NULL);
11635     S_hextract(aTHX_ nv, &exponent, &subnormal, vhex, vend);
11636
11637 #if NVSIZE > DOUBLESIZE
11638 #  ifdef HEXTRACT_HAS_IMPLICIT_BIT
11639     /* In this case there is an implicit bit,
11640      * and therefore the exponent is shifted by one. */
11641     exponent--;
11642 #  elif defined(NV_X86_80_BIT)
11643     if (subnormal) {
11644         /* The subnormals of the x86-80 have a base exponent of -16382,
11645          * (while the physical exponent bits are zero) but the frexp()
11646          * returned the scientific-style floating exponent.  We want
11647          * to map the last one as:
11648          * -16831..-16384 -> -16382 (the last normal is 0x1p-16382)
11649          * -16835..-16388 -> -16384
11650          * since we want to keep the first hexdigit
11651          * as one of the [8421]. */
11652         exponent = -4 * ( (exponent + 1) / -4) - 2;
11653     } else {
11654         exponent -= 4;
11655     }
11656     /* TBD: other non-implicit-bit platforms than the x86-80. */
11657 #  endif
11658 #endif
11659
11660     negative = fv < 0 || Perl_signbit(nv);
11661     if (negative)
11662         *p++ = '-';
11663     else if (plus)
11664         *p++ = plus;
11665     *p++ = '0';
11666     if (lower) {
11667         *p++ = 'x';
11668     }
11669     else {
11670         *p++ = 'X';
11671         xdig += 16; /* Use uppercase hex. */
11672     }
11673
11674     /* Find the first non-zero xdigit. */
11675     for (v = vhex; v < vend; v++) {
11676         if (*v) {
11677             vfnz = v;
11678             break;
11679         }
11680     }
11681
11682     if (vfnz) {
11683         /* Find the last non-zero xdigit. */
11684         for (v = vend - 1; v >= vhex; v--) {
11685             if (*v) {
11686                 vlnz = v;
11687                 break;
11688             }
11689         }
11690
11691 #if NVSIZE == DOUBLESIZE
11692         if (fv != 0.0)
11693             exponent--;
11694 #endif
11695
11696         if (subnormal) {
11697 #ifndef NV_X86_80_BIT
11698           if (vfnz[0] > 1) {
11699             /* IEEE 754 subnormals (but not the x86 80-bit):
11700              * we want "normalize" the subnormal,
11701              * so we need to right shift the hex nybbles
11702              * so that the output of the subnormal starts
11703              * from the first true bit.  (Another, equally
11704              * valid, policy would be to dump the subnormal
11705              * nybbles as-is, to display the "physical" layout.) */
11706             int i, n;
11707             U8 *vshr;
11708             /* Find the ceil(log2(v[0])) of
11709              * the top non-zero nybble. */
11710             for (i = vfnz[0], n = 0; i > 1; i >>= 1, n++) { }
11711             assert(n < 4);
11712             assert(vlnz);
11713             vlnz[1] = 0;
11714             for (vshr = vlnz; vshr >= vfnz; vshr--) {
11715               vshr[1] |= (vshr[0] & (0xF >> (4 - n))) << (4 - n);
11716               vshr[0] >>= n;
11717             }
11718             if (vlnz[1]) {
11719               vlnz++;
11720             }
11721           }
11722 #endif
11723           v0 = vfnz;
11724         } else {
11725           v0 = vhex;
11726         }
11727
11728         if (has_precis) {
11729             U8* ve = (subnormal ? vlnz + 1 : vend);
11730             SSize_t vn = ve - v0;
11731             assert(vn >= 1);
11732             if (precis < (Size_t)(vn - 1)) {
11733                 bool overflow = FALSE;
11734                 if (v0[precis + 1] < 0x8) {
11735                     /* Round down, nothing to do. */
11736                 } else if (v0[precis + 1] > 0x8) {
11737                     /* Round up. */
11738                     v0[precis]++;
11739                     overflow = v0[precis] > 0xF;
11740                     v0[precis] &= 0xF;
11741                 } else { /* v0[precis] == 0x8 */
11742                     /* Half-point: round towards the one
11743                      * with the even least-significant digit:
11744                      * 08 -> 0  88 -> 8
11745                      * 18 -> 2  98 -> a
11746                      * 28 -> 2  a8 -> a
11747                      * 38 -> 4  b8 -> c
11748                      * 48 -> 4  c8 -> c
11749                      * 58 -> 6  d8 -> e
11750                      * 68 -> 6  e8 -> e
11751                      * 78 -> 8  f8 -> 10 */
11752                     if ((v0[precis] & 0x1)) {
11753                         v0[precis]++;
11754                     }
11755                     overflow = v0[precis] > 0xF;
11756                     v0[precis] &= 0xF;
11757                 }
11758
11759                 if (overflow) {
11760                     for (v = v0 + precis - 1; v >= v0; v--) {
11761                         (*v)++;
11762                         overflow = *v > 0xF;
11763                         (*v) &= 0xF;
11764                         if (!overflow) {
11765                             break;
11766                         }
11767                     }
11768                     if (v == v0 - 1 && overflow) {
11769                         /* If the overflow goes all the
11770                          * way to the front, we need to
11771                          * insert 0x1 in front, and adjust
11772                          * the exponent. */
11773                         Move(v0, v0 + 1, vn - 1, char);
11774                         *v0 = 0x1;
11775                         exponent += 4;
11776                     }
11777                 }
11778
11779                 /* The new effective "last non zero". */
11780                 vlnz = v0 + precis;
11781             }
11782             else {
11783                 zerotail =
11784                   subnormal ? precis - vn + 1 :
11785                   precis - (vlnz - vhex);
11786             }
11787         }
11788
11789         v = v0;
11790         *p++ = xdig[*v++];
11791
11792         /* If there are non-zero xdigits, the radix
11793          * is output after the first one. */
11794         if (vfnz < vlnz) {
11795           hexradix = TRUE;
11796         }
11797     }
11798     else {
11799         *p++ = '0';
11800         exponent = 0;
11801         zerotail = has_precis ? precis : 0;
11802     }
11803
11804     /* The radix is always output if precis, or if alt. */
11805     if ((has_precis && precis > 0) || alt) {
11806       hexradix = TRUE;
11807     }
11808
11809     if (hexradix) {
11810 #ifndef USE_LOCALE_NUMERIC
11811         *p++ = '.';
11812 #else
11813         if (in_lc_numeric) {
11814             STRLEN n;
11815             WITH_LC_NUMERIC_SET_TO_NEEDED_IN(TRUE, {
11816                 const char* r = SvPV(PL_numeric_radix_sv, n);
11817                 Copy(r, p, n, char);
11818             });
11819             p += n;
11820         }
11821         else {
11822             *p++ = '.';
11823         }
11824 #endif
11825     }
11826
11827     if (vlnz) {
11828         while (v <= vlnz)
11829             *p++ = xdig[*v++];
11830     }
11831
11832     if (zerotail > 0) {
11833       while (zerotail--) {
11834         *p++ = '0';
11835       }
11836     }
11837
11838     elen = p - buf;
11839
11840     /* sanity checks */
11841     if (elen >= bufsize || width >= bufsize)
11842         /* diag_listed_as: Hexadecimal float: internal error (%s) */
11843         Perl_croak(aTHX_ "Hexadecimal float: internal error (overflow)");
11844
11845     elen += my_snprintf(p, bufsize - elen,
11846                         "%c%+d", lower ? 'p' : 'P',
11847                         exponent);
11848
11849     if (elen < width) {
11850         STRLEN gap = (STRLEN)(width - elen);
11851         if (left) {
11852             /* Pad the back with spaces. */
11853             memset(buf + elen, ' ', gap);
11854         }
11855         else if (fill) {
11856             /* Insert the zeros after the "0x" and the
11857              * the potential sign, but before the digits,
11858              * otherwise we end up with "0000xH.HHH...",
11859              * when we want "0x000H.HHH..."  */
11860             STRLEN nzero = gap;
11861             char* zerox = buf + 2;
11862             STRLEN nmove = elen - 2;
11863             if (negative || plus) {
11864                 zerox++;
11865                 nmove--;
11866             }
11867             Move(zerox, zerox + nzero, nmove, char);
11868             memset(zerox, fill ? '0' : ' ', nzero);
11869         }
11870         else {
11871             /* Move it to the right. */
11872             Move(buf, buf + gap,
11873                  elen, char);
11874             /* Pad the front with spaces. */
11875             memset(buf, ' ', gap);
11876         }
11877         elen = width;
11878     }
11879     return elen;
11880 }
11881
11882 /*
11883 =for apidoc sv_vcatpvfn
11884 =for apidoc_item sv_vcatpvfn_flags
11885
11886 These process their arguments like C<L<vsprintf(3)>> and append the formatted output
11887 to an SV.  They use an array of SVs if the C-style variable argument list is
11888 missing (C<NULL>). Argument reordering (using format specifiers like C<%2$d> or
11889 C<%*2$d>) is supported only when using an array of SVs; using a C-style
11890 C<va_list> argument list with a format string that uses argument reordering
11891 will yield an exception.
11892
11893 When running with taint checks enabled, they indicate via C<maybe_tainted> if
11894 results are untrustworthy (often due to the use of locales).
11895
11896 They assume that C<pat> has the same utf8-ness as C<sv>.  It's the caller's
11897 responsibility to ensure that this is so.
11898
11899 They differ in that C<sv_vcatpvfn_flags> has a C<flags> parameter in which you
11900 can set or clear the C<SV_GMAGIC> and/or S<SV_SMAGIC> flags, to specify which
11901 magic to handle or not handle; whereas plain C<sv_vcatpvfn> always specifies
11902 both 'get' and 'set' magic.
11903
11904 They are usually used via one of the frontends C<sv_vcatpvf> and
11905 C<sv_vcatpvf_mg>.
11906
11907 =cut
11908 */
11909
11910
11911 void
11912 Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen,
11913                        va_list *const args, SV **const svargs, const Size_t sv_count, bool *const maybe_tainted,
11914                        const U32 flags)
11915 {
11916     const char *fmtstart; /* character following the current '%' */
11917     const char *q;        /* current position within format */
11918     const char *patend;
11919     STRLEN origlen;
11920     Size_t svix = 0;
11921     static const char nullstr[] = "(null)";
11922     bool has_utf8 = DO_UTF8(sv);    /* has the result utf8? */
11923     const bool pat_utf8 = has_utf8; /* the pattern is in utf8? */
11924     /* Times 4: a decimal digit takes more than 3 binary digits.
11925      * NV_DIG: mantissa takes that many decimal digits.
11926      * Plus 32: Playing safe. */
11927     char ebuf[IV_DIG * 4 + NV_DIG + 32];
11928     bool no_redundant_warning = FALSE; /* did we use any explicit format parameter index? */
11929 #ifdef USE_LOCALE_NUMERIC
11930     bool have_in_lc_numeric = FALSE;
11931 #endif
11932     /* we never change this unless USE_LOCALE_NUMERIC */
11933     bool in_lc_numeric = FALSE;
11934
11935     PERL_ARGS_ASSERT_SV_VCATPVFN_FLAGS;
11936     PERL_UNUSED_ARG(maybe_tainted);
11937
11938     if (flags & SV_GMAGIC)
11939         SvGETMAGIC(sv);
11940
11941     /* no matter what, this is a string now */
11942     (void)SvPV_force_nomg(sv, origlen);
11943
11944     /* the code that scans for flags etc following a % relies on
11945      * a '\0' being present to avoid falling off the end. Ideally that
11946      * should be fixed */
11947     assert(pat[patlen] == '\0');
11948
11949
11950     /* Special-case "", "%s", "%-p" (SVf - see below) and "%.0f".
11951      * In each case, if there isn't the correct number of args, instead
11952      * fall through to the main code to handle the issuing of any
11953      * warnings etc.
11954      */
11955
11956     if (patlen == 0 && (args || sv_count == 0))
11957         return;
11958
11959     if (patlen <= 4 && pat[0] == '%' && (args || sv_count == 1)) {
11960
11961         /* "%s" */
11962         if (patlen == 2 && pat[1] == 's') {
11963             if (args) {
11964                 const char * const s = va_arg(*args, char*);
11965                 sv_catpv_nomg(sv, s ? s : nullstr);
11966             }
11967             else {
11968                 /* we want get magic on the source but not the target.
11969                  * sv_catsv can't do that, though */
11970                 SvGETMAGIC(*svargs);
11971                 sv_catsv_nomg(sv, *svargs);
11972             }
11973             return;
11974         }
11975
11976         /* "%-p" */
11977         if (args) {
11978             if (patlen == 3  && pat[1] == '-' && pat[2] == 'p') {
11979                 SV *asv = MUTABLE_SV(va_arg(*args, void*));
11980                 sv_catsv_nomg(sv, asv);
11981                 return;
11982             }
11983         }
11984 #if !defined(USE_LONG_DOUBLE) && !defined(USE_QUADMATH)
11985         /* special-case "%.0f" */
11986         else if (   patlen == 4
11987                  && pat[1] == '.' && pat[2] == '0' && pat[3] == 'f')
11988         {
11989             const NV nv = SvNV(*svargs);
11990             if (LIKELY(!Perl_isinfnan(nv))) {
11991                 STRLEN l;
11992                 char *p;
11993
11994                 if ((p = F0convert(nv, ebuf + sizeof ebuf, &l))) {
11995                     sv_catpvn_nomg(sv, p, l);
11996                     return;
11997                 }
11998             }
11999         }
12000 #endif /* !USE_LONG_DOUBLE */
12001     }
12002
12003
12004     patend = (char*)pat + patlen;
12005     for (fmtstart = pat; fmtstart < patend; fmtstart = q) {
12006         char intsize     = 0;         /* size qualifier in "%hi..." etc */
12007         bool alt         = FALSE;     /* has      "%#..."    */
12008         bool left        = FALSE;     /* has      "%-..."    */
12009         bool fill        = FALSE;     /* has      "%0..."    */
12010         char plus        = 0;         /* has      "%+..."    */
12011         STRLEN width     = 0;         /* value of "%NNN..."  */
12012         bool has_precis  = FALSE;     /* has      "%.NNN..." */
12013         STRLEN precis    = 0;         /* value of "%.NNN..." */
12014         int base         = 0;         /* base to print in, e.g. 8 for %o */
12015         UV uv            = 0;         /* the value to print of int-ish args */
12016
12017         bool vectorize   = FALSE;     /* has      "%v..."    */
12018         bool vec_utf8    = FALSE;     /* SvUTF8(vec arg)     */
12019         const U8 *vecstr = NULL;      /* SvPVX(vec arg)      */
12020         STRLEN veclen    = 0;         /* SvCUR(vec arg)      */
12021         const char *dotstr = NULL;    /* separator string for %v */
12022         STRLEN dotstrlen;             /* length of separator string for %v */
12023
12024         Size_t efix      = 0;         /* explicit format parameter index */
12025         const Size_t osvix  = svix;   /* original index in case of bad fmt */
12026
12027         SV *argsv        = NULL;
12028         bool is_utf8     = FALSE;     /* is this item utf8?   */
12029         bool arg_missing = FALSE;     /* give "Missing argument" warning */
12030         char esignbuf[4];             /* holds sign prefix, e.g. "-0x" */
12031         STRLEN esignlen  = 0;         /* length of e.g. "-0x" */
12032         STRLEN zeros     = 0;         /* how many '0' to prepend */
12033
12034         const char *eptr = NULL;      /* the address of the element string */
12035         STRLEN elen      = 0;         /* the length  of the element string */
12036
12037         char c;                       /* the actual format ('d', s' etc) */
12038
12039
12040         /* echo everything up to the next format specification */
12041         for (q = fmtstart; q < patend && *q != '%'; ++q)
12042             {};
12043
12044         if (q > fmtstart) {
12045             if (has_utf8 && !pat_utf8) {
12046                 /* upgrade and copy the bytes of fmtstart..q-1 to utf8 on
12047                  * the fly */
12048                 const char *p;
12049                 char *dst;
12050                 STRLEN need = SvCUR(sv) + (q - fmtstart) + 1;
12051
12052                 for (p = fmtstart; p < q; p++)
12053                     if (!NATIVE_BYTE_IS_INVARIANT(*p))
12054                         need++;
12055                 SvGROW(sv, need);
12056
12057                 dst = SvEND(sv);
12058                 for (p = fmtstart; p < q; p++)
12059                     append_utf8_from_native_byte((U8)*p, (U8**)&dst);
12060                 *dst = '\0';
12061                 SvCUR_set(sv, need - 1);
12062             }
12063             else
12064                 S_sv_catpvn_simple(aTHX_ sv, fmtstart, q - fmtstart);
12065         }
12066         if (q++ >= patend)
12067             break;
12068
12069         fmtstart = q; /* fmtstart is char following the '%' */
12070
12071 /*
12072     We allow format specification elements in this order:
12073         \d+\$              explicit format parameter index
12074         [-+ 0#]+           flags
12075         v|\*(\d+\$)?v      vector with optional (optionally specified) arg
12076         0                  flag (as above): repeated to allow "v02"     
12077         \d+|\*(\d+\$)?     width using optional (optionally specified) arg
12078         \.(\d*|\*(\d+\$)?) precision using optional (optionally specified) arg
12079         [hlqLV]            size
12080     [%bcdefginopsuxDFOUX] format (mandatory)
12081 */
12082
12083         if (inRANGE(*q, '1', '9')) {
12084             width = expect_number(&q);
12085             if (*q == '$') {
12086                 if (args)
12087                     Perl_croak_nocontext(
12088                         "Cannot yet reorder sv_vcatpvfn() arguments from va_list");
12089                 ++q;
12090                 efix = (Size_t)width;
12091                 width = 0;
12092                 no_redundant_warning = TRUE;
12093             } else {
12094                 goto gotwidth;
12095             }
12096         }
12097
12098         /* FLAGS */
12099
12100         while (*q) {
12101             switch (*q) {
12102             case ' ':
12103             case '+':
12104                 if (plus == '+' && *q == ' ') /* '+' over ' ' */
12105                     q++;
12106                 else
12107                     plus = *q++;
12108                 continue;
12109
12110             case '-':
12111                 left = TRUE;
12112                 q++;
12113                 continue;
12114
12115             case '0':
12116                 fill = TRUE;
12117                 q++;
12118                 continue;
12119
12120             case '#':
12121                 alt = TRUE;
12122                 q++;
12123                 continue;
12124
12125             default:
12126                 break;
12127             }
12128             break;
12129         }
12130
12131       /* at this point we can expect one of:
12132        *
12133        *  123  an explicit width
12134        *  *    width taken from next arg
12135        *  *12$ width taken from 12th arg
12136        *       or no width
12137        *
12138        * But any width specification may be preceded by a v, in one of its
12139        * forms:
12140        *        v
12141        *        *v
12142        *        *12$v
12143        * So an asterisk may be either a width specifier or a vector
12144        * separator arg specifier, and we don't know which initially
12145        */
12146
12147       tryasterisk:
12148         if (*q == '*') {
12149             STRLEN ix; /* explicit width/vector separator index */
12150             q++;
12151             if (inRANGE(*q, '1', '9')) {
12152                 ix = expect_number(&q);
12153                 if (*q++ == '$') {
12154                     if (args)
12155                         Perl_croak_nocontext(
12156                             "Cannot yet reorder sv_vcatpvfn() arguments from va_list");
12157                     no_redundant_warning = TRUE;
12158                 } else
12159                     goto unknown;
12160             }
12161             else
12162                 ix = 0;
12163
12164             if (*q == 'v') {
12165                 SV *vecsv;
12166                 /* The asterisk was for  *v, *NNN$v: vectorizing, but not
12167                  * with the default "." */
12168                 q++;
12169                 if (vectorize)
12170                     goto unknown;
12171                 if (args)
12172                     vecsv = va_arg(*args, SV*);
12173                 else {
12174                     ix = ix ? ix - 1 : svix++;
12175                     vecsv = ix < sv_count ? svargs[ix]
12176                                        : (arg_missing = TRUE, &PL_sv_no);
12177                 }
12178                 dotstr = SvPV_const(vecsv, dotstrlen);
12179                 /* Keep the DO_UTF8 test *after* the SvPV call, else things go
12180                    bad with tied or overloaded values that return UTF8.  */
12181                 if (DO_UTF8(vecsv))
12182                     is_utf8 = TRUE;
12183                 else if (has_utf8) {
12184                     vecsv = sv_mortalcopy(vecsv);
12185                     sv_utf8_upgrade(vecsv);
12186                     dotstr = SvPV_const(vecsv, dotstrlen);
12187                     is_utf8 = TRUE;
12188                 }
12189                 vectorize = TRUE;
12190                 goto tryasterisk;
12191             }
12192
12193             /* the asterisk specified a width */
12194             {
12195                 int i = 0;
12196                 SV *width_sv = NULL;
12197                 if (args)
12198                     i = va_arg(*args, int);
12199                 else {
12200                     ix = ix ? ix - 1 : svix++;
12201                     width_sv = (ix < sv_count) ? svargs[ix]
12202                                       : (arg_missing = TRUE, (SV*)NULL);
12203                 }
12204                 width = S_sprintf_arg_num_val(aTHX_ args, i, width_sv, &left);
12205             }
12206         }
12207         else if (*q == 'v') {
12208             q++;
12209             if (vectorize)
12210                 goto unknown;
12211             vectorize = TRUE;
12212             dotstr = ".";
12213             dotstrlen = 1;
12214             goto tryasterisk;
12215
12216         }
12217         else {
12218         /* explicit width? */
12219             if(*q == '0') {
12220                 fill = TRUE;
12221                 q++;
12222             }
12223             if (inRANGE(*q, '1', '9'))
12224                 width = expect_number(&q);
12225         }
12226
12227       gotwidth:
12228
12229         /* PRECISION */
12230
12231         if (*q == '.') {
12232             q++;
12233             if (*q == '*') {
12234                 STRLEN ix; /* explicit precision index */
12235                 q++;
12236                 if (inRANGE(*q, '1', '9')) {
12237                     ix = expect_number(&q);
12238                     if (*q++ == '$') {
12239                         if (args)
12240                             Perl_croak_nocontext(
12241                                 "Cannot yet reorder sv_vcatpvfn() arguments from va_list");
12242                         no_redundant_warning = TRUE;
12243                     } else
12244                         goto unknown;
12245                 }
12246                 else
12247                     ix = 0;
12248
12249                 {
12250                     int i = 0;
12251                     SV *width_sv = NULL;
12252                     bool neg = FALSE;
12253
12254                     if (args)
12255                         i = va_arg(*args, int);
12256                     else {
12257                         ix = ix ? ix - 1 : svix++;
12258                         width_sv = (ix < sv_count) ? svargs[ix]
12259                                           : (arg_missing = TRUE, (SV*)NULL);
12260                     }
12261                     precis = S_sprintf_arg_num_val(aTHX_ args, i, width_sv, &neg);
12262                     has_precis = !neg;
12263                     /* ignore negative precision */
12264                     if (!has_precis)
12265                         precis = 0;
12266                 }
12267             }
12268             else {
12269                 /* although it doesn't seem documented, this code has long
12270                  * behaved so that:
12271                  *   no digits following the '.' is treated like '.0'
12272                  *   the number may be preceded by any number of zeroes,
12273                  *      e.g. "%.0001f", which is the same as "%.1f"
12274                  * so I've kept that behaviour. DAPM May 2017
12275                  */
12276                 while (*q == '0')
12277                     q++;
12278                 precis = inRANGE(*q, '1', '9') ? expect_number(&q) : 0;
12279                 has_precis = TRUE;
12280             }
12281         }
12282
12283         /* SIZE */
12284
12285         switch (*q) {
12286 #ifdef WIN32
12287         case 'I':                       /* Ix, I32x, and I64x */
12288 #  ifdef USE_64_BIT_INT
12289             if (q[1] == '6' && q[2] == '4') {
12290                 q += 3;
12291                 intsize = 'q';
12292                 break;
12293             }
12294 #  endif
12295             if (q[1] == '3' && q[2] == '2') {
12296                 q += 3;
12297                 break;
12298             }
12299 #  ifdef USE_64_BIT_INT
12300             intsize = 'q';
12301 #  endif
12302             q++;
12303             break;
12304 #endif
12305 #if (IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)) || \
12306     (IVSIZE == 4 && !defined(HAS_LONG_DOUBLE))
12307         case 'L':                       /* Ld */
12308             /* FALLTHROUGH */
12309 #  ifdef USE_QUADMATH
12310         case 'Q':
12311             /* FALLTHROUGH */
12312 #  endif
12313 #  if IVSIZE >= 8
12314         case 'q':                       /* qd */
12315 #  endif
12316             intsize = 'q';
12317             q++;
12318             break;
12319 #endif
12320         case 'l':
12321             ++q;
12322 #if (IVSIZE >= 8 || defined(HAS_LONG_DOUBLE)) || \
12323     (IVSIZE == 4 && !defined(HAS_LONG_DOUBLE))
12324             if (*q == 'l') {    /* lld, llf */
12325                 intsize = 'q';
12326                 ++q;
12327             }
12328             else
12329 #endif
12330                 intsize = 'l';
12331             break;
12332         case 'h':
12333             if (*++q == 'h') {  /* hhd, hhu */
12334                 intsize = 'c';
12335                 ++q;
12336             }
12337             else
12338                 intsize = 'h';
12339             break;
12340         case 'V':
12341         case 'z':
12342         case 't':
12343         case 'j':
12344             intsize = *q++;
12345             break;
12346         }
12347
12348         /* CONVERSION */
12349
12350         c = *q++; /* c now holds the conversion type */
12351
12352         /* '%' doesn't have an arg, so skip arg processing */
12353         if (c == '%') {
12354             eptr = q - 1;
12355             elen = 1;
12356             if (vectorize)
12357                 goto unknown;
12358             goto string;
12359         }
12360
12361         if (vectorize && !memCHRs("BbDdiOouUXx", c))
12362             goto unknown;
12363
12364         /* get next arg (individual branches do their own va_arg()
12365          * handling for the args case) */
12366
12367         if (!args) {
12368             efix = efix ? efix - 1 : svix++;
12369             argsv = efix < sv_count ? svargs[efix]
12370                                  : (arg_missing = TRUE, &PL_sv_no);
12371         }
12372
12373
12374         switch (c) {
12375
12376             /* STRINGS */
12377
12378         case 's':
12379             if (args) {
12380                 eptr = va_arg(*args, char*);
12381                 if (eptr)
12382                     if (has_precis)
12383                         elen = my_strnlen(eptr, precis);
12384                     else
12385                         elen = strlen(eptr);
12386                 else {
12387                     eptr = (char *)nullstr;
12388                     elen = sizeof nullstr - 1;
12389                 }
12390             }
12391             else {
12392                 eptr = SvPV_const(argsv, elen);
12393                 if (DO_UTF8(argsv)) {
12394                     STRLEN old_precis = precis;
12395                     if (has_precis && precis < elen) {
12396                         STRLEN ulen = sv_or_pv_len_utf8(argsv, eptr, elen);
12397                         STRLEN p = precis > ulen ? ulen : precis;
12398                         precis = sv_or_pv_pos_u2b(argsv, eptr, p, 0);
12399                                                         /* sticks at end */
12400                     }
12401                     if (width) { /* fudge width (can't fudge elen) */
12402                         if (has_precis && precis < elen)
12403                             width += precis - old_precis;
12404                         else
12405                             width +=
12406                                 elen - sv_or_pv_len_utf8(argsv,eptr,elen);
12407                     }
12408                     is_utf8 = TRUE;
12409                 }
12410             }
12411
12412         string:
12413             if (has_precis && precis < elen)
12414                 elen = precis;
12415             break;
12416
12417             /* INTEGERS */
12418
12419         case 'p':
12420             if (alt)
12421                 goto unknown;
12422
12423             /* %p extensions:
12424              *
12425              * "%...p" is normally treated like "%...x", except that the
12426              * number to print is the SV's address (or a pointer address
12427              * for C-ish sprintf).
12428              *
12429              * However, the C-ish sprintf variant allows a few special
12430              * extensions. These are currently:
12431              *
12432              * %-p       (SVf)  Like %s, but gets the string from an SV*
12433              *                  arg rather than a char* arg.
12434              *                  (This was previously %_).
12435              *
12436              * %-<num>p         Ditto but like %.<num>s (i.e. num is max width)
12437              *
12438              * %2p       (HEKf) Like %s, but using the key string in a HEK
12439              *
12440              * %3p       (HEKf256) Ditto but like %.256s
12441              *
12442              * %d%lu%4p  (UTF8f) A utf8 string. Consumes 3 args:
12443              *                       (cBOOL(utf8), len, string_buf).
12444              *                   It's handled by the "case 'd'" branch
12445              *                   rather than here.
12446              *
12447              * %<num>p   where num is 1 or > 4: reserved for future
12448              *           extensions. Warns, but then is treated as a
12449              *           general %p (print hex address) format.
12450              */
12451
12452             if (   args
12453                 && !intsize
12454                 && !fill
12455                 && !plus
12456                 && !has_precis
12457                     /* not %*p or %*1$p - any width was explicit */
12458                 && q[-2] != '*'
12459                 && q[-2] != '$'
12460             ) {
12461                 if (left) {                     /* %-p (SVf), %-NNNp */
12462                     if (width) {
12463                         precis = width;
12464                         has_precis = TRUE;
12465                     }
12466                     argsv = MUTABLE_SV(va_arg(*args, void*));
12467                     eptr = SvPV_const(argsv, elen);
12468                     if (DO_UTF8(argsv))
12469                         is_utf8 = TRUE;
12470                     width = 0;
12471                     goto string;
12472                 }
12473                 else if (width == 2 || width == 3) {    /* HEKf, HEKf256 */
12474                     HEK * const hek = va_arg(*args, HEK *);
12475                     eptr = HEK_KEY(hek);
12476                     elen = HEK_LEN(hek);
12477                     if (HEK_UTF8(hek))
12478                         is_utf8 = TRUE;
12479                     if (width == 3) {
12480                         precis = 256;
12481                         has_precis = TRUE;
12482                     }
12483                     width = 0;
12484                     goto string;
12485                 }
12486                 else if (width) {
12487                     Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
12488                          "internal %%<num>p might conflict with future printf extensions");
12489                 }
12490             }
12491
12492             /* treat as normal %...p */
12493
12494             uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
12495             base = 16;
12496             goto do_integer;
12497
12498         case 'c':
12499             /* Ignore any size specifiers, since they're not documented as
12500              * being allowed for %c (ideally we should warn on e.g. '%hc').
12501              * Setting a default intsize, along with a positive
12502              * (which signals unsigned) base, causes, for C-ish use, the
12503              * va_arg to be interpreted as an unsigned int, when it's
12504              * actually signed, which will convert -ve values to high +ve
12505              * values. Note that unlike the libc %c, values > 255 will
12506              * convert to high unicode points rather than being truncated
12507              * to 8 bits. For perlish use, it will do SvUV(argsv), which
12508              * will again convert -ve args to high -ve values.
12509              */
12510             intsize = 0;
12511             base = 1; /* special value that indicates we're doing a 'c' */
12512             goto get_int_arg_val;
12513
12514         case 'D':
12515 #ifdef IV_IS_QUAD
12516             intsize = 'q';
12517 #else
12518             intsize = 'l';
12519 #endif
12520             base = -10;
12521             goto get_int_arg_val;
12522
12523         case 'd':
12524             /* probably just a plain %d, but it might be the start of the
12525              * special UTF8f format, which usually looks something like
12526              * "%d%lu%4p" (the lu may vary by platform)
12527              */
12528             assert((UTF8f)[0] == 'd');
12529             assert((UTF8f)[1] == '%');
12530
12531              if (   args              /* UTF8f only valid for C-ish sprintf */
12532                  && q == fmtstart + 1 /* plain %d, not %....d */
12533                  && patend >= fmtstart + sizeof(UTF8f) - 1 /* long enough */
12534                  && *q == '%'
12535                  && strnEQ(q + 1, UTF8f + 2, sizeof(UTF8f) - 3))
12536             {
12537                 /* The argument has already gone through cBOOL, so the cast
12538                    is safe. */
12539                 is_utf8 = (bool)va_arg(*args, int);
12540                 elen = va_arg(*args, UV);
12541                 /* if utf8 length is larger than 0x7ffff..., then it might
12542                  * have been a signed value that wrapped */
12543                 if (elen  > ((~(STRLEN)0) >> 1)) {
12544                     assert(0); /* in DEBUGGING build we want to crash */
12545                     elen = 0; /* otherwise we want to treat this as an empty string */
12546                 }
12547                 eptr = va_arg(*args, char *);
12548                 q += sizeof(UTF8f) - 2;
12549                 goto string;
12550             }
12551
12552             /* FALLTHROUGH */
12553         case 'i':
12554             base = -10;
12555             goto get_int_arg_val;
12556
12557         case 'U':
12558 #ifdef IV_IS_QUAD
12559             intsize = 'q';
12560 #else
12561             intsize = 'l';
12562 #endif
12563             /* FALLTHROUGH */
12564         case 'u':
12565             base = 10;
12566             goto get_int_arg_val;
12567
12568         case 'B':
12569         case 'b':
12570             base = 2;
12571             goto get_int_arg_val;
12572
12573         case 'O':
12574 #ifdef IV_IS_QUAD
12575             intsize = 'q';
12576 #else
12577             intsize = 'l';
12578 #endif
12579             /* FALLTHROUGH */
12580         case 'o':
12581             base = 8;
12582             goto get_int_arg_val;
12583
12584         case 'X':
12585         case 'x':
12586             base = 16;
12587
12588           get_int_arg_val:
12589
12590             if (vectorize) {
12591                 STRLEN ulen;
12592                 SV *vecsv;
12593
12594                 if (base < 0) {
12595                     base = -base;
12596                     if (plus)
12597                          esignbuf[esignlen++] = plus;
12598                 }
12599
12600                 /* initialise the vector string to iterate over */
12601
12602                 vecsv = args ? va_arg(*args, SV*) : argsv;
12603
12604                 /* if this is a version object, we need to convert
12605                  * back into v-string notation and then let the
12606                  * vectorize happen normally
12607                  */
12608                 if (sv_isobject(vecsv) && sv_derived_from(vecsv, "version")) {
12609                     if ( hv_existss(MUTABLE_HV(SvRV(vecsv)), "alpha") ) {
12610                         Perl_ck_warner_d(aTHX_ packWARN(WARN_PRINTF),
12611                         "vector argument not supported with alpha versions");
12612                         vecsv = &PL_sv_no;
12613                     }
12614                     else {
12615                         vecstr = (U8*)SvPV_const(vecsv,veclen);
12616                         vecsv = sv_newmortal();
12617                         scan_vstring((char *)vecstr, (char *)vecstr + veclen,
12618                                      vecsv);
12619                     }
12620                 }
12621                 vecstr = (U8*)SvPV_const(vecsv, veclen);
12622                 vec_utf8 = DO_UTF8(vecsv);
12623
12624               /* This is the re-entry point for when we're iterating
12625                * over the individual characters of a vector arg */
12626               vector:
12627                 if (!veclen)
12628                     goto done_valid_conversion;
12629                 if (vec_utf8)
12630                     uv = utf8n_to_uvchr(vecstr, veclen, &ulen,
12631                                         UTF8_ALLOW_ANYUV);
12632                 else {
12633                     uv = *vecstr;
12634                     ulen = 1;
12635                 }
12636                 vecstr += ulen;
12637                 veclen -= ulen;
12638             }
12639             else {
12640                 /* test arg for inf/nan. This can trigger an unwanted
12641                  * 'str' overload, so manually force 'num' overload first
12642                  * if necessary */
12643                 if (argsv) {
12644                     SvGETMAGIC(argsv);
12645                     if (UNLIKELY(SvAMAGIC(argsv)))
12646                         argsv = sv_2num(argsv);
12647                     if (UNLIKELY(isinfnansv(argsv)))
12648                         goto handle_infnan_argsv;
12649                 }
12650
12651                 if (base < 0) {
12652                     /* signed int type */
12653                     IV iv;
12654                     base = -base;
12655                     if (args) {
12656                         switch (intsize) {
12657                         case 'c':  iv = (char)va_arg(*args, int);  break;
12658                         case 'h':  iv = (short)va_arg(*args, int); break;
12659                         case 'l':  iv = va_arg(*args, long);       break;
12660                         case 'V':  iv = va_arg(*args, IV);         break;
12661                         case 'z':  iv = va_arg(*args, SSize_t);    break;
12662 #ifdef HAS_PTRDIFF_T
12663                         case 't':  iv = va_arg(*args, ptrdiff_t);  break;
12664 #endif
12665                         default:   iv = va_arg(*args, int);        break;
12666                         case 'j':  iv = (IV) va_arg(*args, PERL_INTMAX_T); break;
12667                         case 'q':
12668 #if IVSIZE >= 8
12669                                    iv = va_arg(*args, Quad_t);     break;
12670 #else
12671                                    goto unknown;
12672 #endif
12673                         }
12674                     }
12675                     else {
12676                         /* assign to tiv then cast to iv to work around
12677                          * 2003 GCC cast bug (gnu.org bugzilla #13488) */
12678                         IV tiv = SvIV_nomg(argsv);
12679                         switch (intsize) {
12680                         case 'c':  iv = (char)tiv;   break;
12681                         case 'h':  iv = (short)tiv;  break;
12682                         case 'l':  iv = (long)tiv;   break;
12683                         case 'V':
12684                         default:   iv = tiv;         break;
12685                         case 'q':
12686 #if IVSIZE >= 8
12687                                    iv = (Quad_t)tiv; break;
12688 #else
12689                                    goto unknown;
12690 #endif
12691                         }
12692                     }
12693
12694                     /* now convert iv to uv */
12695                     if (iv >= 0) {
12696                         uv = iv;
12697                         if (plus)
12698                             esignbuf[esignlen++] = plus;
12699                     }
12700                     else {
12701                         /* Using 0- here to silence bogus warning from MS VC */
12702                         uv = (UV) (0 - (UV) iv);
12703                         esignbuf[esignlen++] = '-';
12704                     }
12705                 }
12706                 else {
12707                     /* unsigned int type */
12708                     if (args) {
12709                         switch (intsize) {
12710                         case 'c': uv = (unsigned char)va_arg(*args, unsigned);
12711                                   break;
12712                         case 'h': uv = (unsigned short)va_arg(*args, unsigned);
12713                                   break;
12714                         case 'l': uv = va_arg(*args, unsigned long); break;
12715                         case 'V': uv = va_arg(*args, UV);            break;
12716                         case 'z': uv = va_arg(*args, Size_t);        break;
12717 #ifdef HAS_PTRDIFF_T
12718                                   /* will sign extend, but there is no
12719                                    * uptrdiff_t, so oh well */
12720                         case 't': uv = va_arg(*args, ptrdiff_t);     break;
12721 #endif
12722                         case 'j': uv = (UV) va_arg(*args, PERL_UINTMAX_T); break;
12723                         default:  uv = va_arg(*args, unsigned);      break;
12724                         case 'q':
12725 #if IVSIZE >= 8
12726                                   uv = va_arg(*args, Uquad_t);       break;
12727 #else
12728                                   goto unknown;
12729 #endif
12730                         }
12731                     }
12732                     else {
12733                         /* assign to tiv then cast to iv to work around
12734                          * 2003 GCC cast bug (gnu.org bugzilla #13488) */
12735                         UV tuv = SvUV_nomg(argsv);
12736                         switch (intsize) {
12737                         case 'c': uv = (unsigned char)tuv;  break;
12738                         case 'h': uv = (unsigned short)tuv; break;
12739                         case 'l': uv = (unsigned long)tuv;  break;
12740                         case 'V':
12741                         default:  uv = tuv;                 break;
12742                         case 'q':
12743 #if IVSIZE >= 8
12744                                   uv = (Uquad_t)tuv;        break;
12745 #else
12746                                   goto unknown;
12747 #endif
12748                         }
12749                     }
12750                 }
12751             }
12752
12753         do_integer:
12754             {
12755                 char *ptr = ebuf + sizeof ebuf;
12756                 unsigned dig;
12757                 zeros = 0;
12758
12759                 switch (base) {
12760                 case 16:
12761                     {
12762                     const char * const p =
12763                             (c == 'X') ? PL_hexdigit + 16 : PL_hexdigit;
12764
12765                         do {
12766                             dig = uv & 15;
12767                             *--ptr = p[dig];
12768                         } while (uv >>= 4);
12769                         if (alt && *ptr != '0') {
12770                             esignbuf[esignlen++] = '0';
12771                             esignbuf[esignlen++] = c;  /* 'x' or 'X' */
12772                         }
12773                         break;
12774                     }
12775                 case 8:
12776                     do {
12777                         dig = uv & 7;
12778                         *--ptr = '0' + dig;
12779                     } while (uv >>= 3);
12780                     if (alt && *ptr != '0')
12781                         *--ptr = '0';
12782                     break;
12783                 case 2:
12784                     do {
12785                         dig = uv & 1;
12786                         *--ptr = '0' + dig;
12787                     } while (uv >>= 1);
12788                     if (alt && *ptr != '0') {
12789                         esignbuf[esignlen++] = '0';
12790                         esignbuf[esignlen++] = c; /* 'b' or 'B' */
12791                     }
12792                     break;
12793
12794                 case 1:
12795                     /* special-case: base 1 indicates a 'c' format:
12796                      * we use the common code for extracting a uv,
12797                      * but handle that value differently here than
12798                      * all the other int types */
12799                     if ((uv > 255 ||
12800                          (!UVCHR_IS_INVARIANT(uv) && SvUTF8(sv)))
12801                         && !IN_BYTES)
12802                     {
12803                         STATIC_ASSERT_STMT(sizeof(ebuf) >= UTF8_MAXBYTES + 1);
12804                         eptr = ebuf;
12805                         elen = uvchr_to_utf8((U8*)eptr, uv) - (U8*)ebuf;
12806                         is_utf8 = TRUE;
12807                     }
12808                     else {
12809                         eptr = ebuf;
12810                         ebuf[0] = (char)uv;
12811                         elen = 1;
12812                     }
12813                     goto string;
12814
12815                 default:                /* it had better be ten or less */
12816                     do {
12817                         dig = uv % base;
12818                         *--ptr = '0' + dig;
12819                     } while (uv /= base);
12820                     break;
12821                 }
12822                 elen = (ebuf + sizeof ebuf) - ptr;
12823                 eptr = ptr;
12824                 if (has_precis) {
12825                     if (precis > elen)
12826                         zeros = precis - elen;
12827                     else if (precis == 0 && elen == 1 && *eptr == '0'
12828                              && !(base == 8 && alt)) /* "%#.0o" prints "0" */
12829                         elen = 0;
12830
12831                     /* a precision nullifies the 0 flag. */
12832                     fill = FALSE;
12833                 }
12834             }
12835             break;
12836
12837             /* FLOATING POINT */
12838
12839         case 'F':
12840             c = 'f';            /* maybe %F isn't supported here */
12841             /* FALLTHROUGH */
12842         case 'e': case 'E':
12843         case 'f':
12844         case 'g': case 'G':
12845         case 'a': case 'A':
12846
12847         {
12848             STRLEN float_need; /* what PL_efloatsize needs to become */
12849             bool hexfp;        /* hexadecimal floating point? */
12850
12851             vcatpvfn_long_double_t fv;
12852             NV                     nv;
12853
12854             /* This is evil, but floating point is even more evil */
12855
12856             /* for SV-style calling, we can only get NV
12857                for C-style calling, we assume %f is double;
12858                for simplicity we allow any of %Lf, %llf, %qf for long double
12859             */
12860             switch (intsize) {
12861             case 'V':
12862 #if defined(USE_LONG_DOUBLE) || defined(USE_QUADMATH)
12863                 intsize = 'q';
12864 #endif
12865                 break;
12866 /* [perl #20339] - we should accept and ignore %lf rather than die */
12867             case 'l':
12868                 /* FALLTHROUGH */
12869             default:
12870 #if defined(USE_LONG_DOUBLE) || defined(USE_QUADMATH)
12871                 intsize = args ? 0 : 'q';
12872 #endif
12873                 break;
12874             case 'q':
12875 #if defined(HAS_LONG_DOUBLE)
12876                 break;
12877 #else
12878                 /* FALLTHROUGH */
12879 #endif
12880             case 'c':
12881             case 'h':
12882             case 'z':
12883             case 't':
12884             case 'j':
12885                 goto unknown;
12886             }
12887
12888             /* Now we need (long double) if intsize == 'q', else (double). */
12889             if (args) {
12890                 /* Note: do not pull NVs off the va_list with va_arg()
12891                  * (pull doubles instead) because if you have a build
12892                  * with long doubles, you would always be pulling long
12893                  * doubles, which would badly break anyone using only
12894                  * doubles (i.e. the majority of builds). In other
12895                  * words, you cannot mix doubles and long doubles.
12896                  * The only case where you can pull off long doubles
12897                  * is when the format specifier explicitly asks so with
12898                  * e.g. "%Lg". */
12899 #ifdef USE_QUADMATH
12900                 fv = intsize == 'q' ?
12901                     va_arg(*args, NV) : va_arg(*args, double);
12902                 nv = fv;
12903 #elif LONG_DOUBLESIZE > DOUBLESIZE
12904                 if (intsize == 'q') {
12905                     fv = va_arg(*args, long double);
12906                     nv = fv;
12907                 } else {
12908                     nv = va_arg(*args, double);
12909                     VCATPVFN_NV_TO_FV(nv, fv);
12910                 }
12911 #else
12912                 nv = va_arg(*args, double);
12913                 fv = nv;
12914 #endif
12915             }
12916             else
12917             {
12918                 SvGETMAGIC(argsv);
12919                 /* we jump here if an int-ish format encountered an
12920                  * infinite/Nan argsv. After setting nv/fv, it falls
12921                  * into the isinfnan block which follows */
12922               handle_infnan_argsv:
12923                 nv = SvNV_nomg(argsv);
12924                 VCATPVFN_NV_TO_FV(nv, fv);
12925             }
12926
12927             if (Perl_isinfnan(nv)) {
12928                 if (c == 'c')
12929                     Perl_croak(aTHX_ "Cannot printf %" NVgf " with '%c'",
12930                            SvNV_nomg(argsv), (int)c);
12931
12932                 elen = S_infnan_2pv(nv, ebuf, sizeof(ebuf), plus);
12933                 assert(elen);
12934                 eptr = ebuf;
12935                 zeros     = 0;
12936                 esignlen  = 0;
12937                 dotstrlen = 0;
12938                 break;
12939             }
12940
12941             /* special-case "%.0f" */
12942             if (   c == 'f'
12943                 && !precis
12944                 && has_precis
12945                 && !(width || left || plus || alt)
12946                 && !fill
12947                 && intsize != 'q'
12948                 && ((eptr = F0convert(nv, ebuf + sizeof ebuf, &elen)))
12949             )
12950                 goto float_concat;
12951
12952             /* Determine the buffer size needed for the various
12953              * floating-point formats.
12954              *
12955              * The basic possibilities are:
12956              *
12957              *               <---P--->
12958              *    %f 1111111.123456789
12959              *    %e       1.111111123e+06
12960              *    %a     0x1.0f4471f9bp+20
12961              *    %g        1111111.12
12962              *    %g        1.11111112e+15
12963              *
12964              * where P is the value of the precision in the format, or 6
12965              * if not specified. Note the two possible output formats of
12966              * %g; in both cases the number of significant digits is <=
12967              * precision.
12968              *
12969              * For most of the format types the maximum buffer size needed
12970              * is precision, plus: any leading 1 or 0x1, the radix
12971              * point, and an exponent.  The difficult one is %f: for a
12972              * large positive exponent it can have many leading digits,
12973              * which needs to be calculated specially. Also %a is slightly
12974              * different in that in the absence of a specified precision,
12975              * it uses as many digits as necessary to distinguish
12976              * different values.
12977              *
12978              * First, here are the constant bits. For ease of calculation
12979              * we over-estimate the needed buffer size, for example by
12980              * assuming all formats have an exponent and a leading 0x1.
12981              *
12982              * Also for production use, add a little extra overhead for
12983              * safety's sake. Under debugging don't, as it means we're
12984              * more likely to quickly spot issues during development.
12985              */
12986
12987             float_need =     1  /* possible unary minus */
12988                           +  4  /* "0x1" plus very unlikely carry */
12989                           +  1  /* default radix point '.' */
12990                           +  2  /* "e-", "p+" etc */
12991                           +  6  /* exponent: up to 16383 (quad fp) */
12992 #ifndef DEBUGGING
12993                           + 20  /* safety net */
12994 #endif
12995                           +  1; /* \0 */
12996
12997
12998             /* determine the radix point len, e.g. length(".") in "1.2" */
12999 #ifdef USE_LOCALE_NUMERIC
13000             /* note that we may either explicitly use PL_numeric_radix_sv
13001              * below, or implicitly, via an snprintf() variant.
13002              * Note also things like ps_AF.utf8 which has
13003              * "\N{ARABIC DECIMAL SEPARATOR} as a radix point */
13004             if (! have_in_lc_numeric) {
13005                 in_lc_numeric = IN_LC(LC_NUMERIC);
13006                 have_in_lc_numeric = TRUE;
13007             }
13008
13009             if (in_lc_numeric) {
13010                 WITH_LC_NUMERIC_SET_TO_NEEDED_IN(TRUE, {
13011                     /* this can't wrap unless PL_numeric_radix_sv is a string
13012                      * consuming virtually all the 32-bit or 64-bit address
13013                      * space
13014                      */
13015                     float_need += (SvCUR(PL_numeric_radix_sv) - 1);
13016
13017                     /* floating-point formats only get utf8 if the radix point
13018                      * is utf8. All other characters in the string are < 128
13019                      * and so can be safely appended to both a non-utf8 and utf8
13020                      * string as-is.
13021                      * Note that this will convert the output to utf8 even if
13022                      * the radix point didn't get output.
13023                      */
13024                     if (SvUTF8(PL_numeric_radix_sv) && !has_utf8) {
13025                         sv_utf8_upgrade(sv);
13026                         has_utf8 = TRUE;
13027                     }
13028                 });
13029             }
13030 #endif
13031
13032             hexfp = FALSE;
13033
13034             if (isALPHA_FOLD_EQ(c, 'f')) {
13035                 /* Determine how many digits before the radix point
13036                  * might be emitted.  frexp() (or frexpl) has some
13037                  * unspecified behaviour for nan/inf/-inf, so lucky we've
13038                  * already handled them above */
13039                 STRLEN digits;
13040                 int i = PERL_INT_MIN;
13041                 (void)Perl_frexp((NV)fv, &i);
13042                 if (i == PERL_INT_MIN)
13043                     Perl_die(aTHX_ "panic: frexp: %" VCATPVFN_FV_GF, fv);
13044
13045                 if (i > 0) {
13046                     digits = BIT_DIGITS(i);
13047                     /* this can't overflow. 'digits' will only be a few
13048                      * thousand even for the largest floating-point types.
13049                      * And up until now float_need is just some small
13050                      * constants plus radix len, which can't be in
13051                      * overflow territory unless the radix SV is consuming
13052                      * over 1/2 the address space */
13053                     assert(float_need < ((STRLEN)~0) - digits);
13054                     float_need += digits;
13055                 }
13056             }
13057             else if (UNLIKELY(isALPHA_FOLD_EQ(c, 'a'))) {
13058                 hexfp = TRUE;
13059                 if (!has_precis) {
13060                     /* %a in the absence of precision may print as many
13061                      * digits as needed to represent the entire mantissa
13062                      * bit pattern.
13063                      * This estimate seriously overshoots in most cases,
13064                      * but better the undershooting.  Firstly, all bytes
13065                      * of the NV are not mantissa, some of them are
13066                      * exponent.  Secondly, for the reasonably common
13067                      * long doubles case, the "80-bit extended", two
13068                      * or six bytes of the NV are unused. Also, we'll
13069                      * still pick up an extra +6 from the default
13070                      * precision calculation below. */
13071                     STRLEN digits =
13072 #ifdef LONGDOUBLE_DOUBLEDOUBLE
13073                         /* For the "double double", we need more.
13074                          * Since each double has their own exponent, the
13075                          * doubles may float (haha) rather far from each
13076                          * other, and the number of required bits is much
13077                          * larger, up to total of DOUBLEDOUBLE_MAXBITS bits.
13078                          * See the definition of DOUBLEDOUBLE_MAXBITS.
13079                          *
13080                          * Need 2 hexdigits for each byte. */
13081                         (DOUBLEDOUBLE_MAXBITS/8 + 1) * 2;
13082 #else
13083                         NVSIZE * 2; /* 2 hexdigits for each byte */
13084 #endif
13085                     /* see "this can't overflow" comment above */
13086                     assert(float_need < ((STRLEN)~0) - digits);
13087                     float_need += digits;
13088                 }
13089             }
13090             /* special-case "%.<number>g" if it will fit in ebuf */
13091             else if (c == 'g'
13092                 && precis   /* See earlier comment about buggy Gconvert
13093                                when digits, aka precis, is 0  */
13094                 && has_precis
13095                 /* check, in manner not involving wrapping, that it will
13096                  * fit in ebuf  */
13097                 && float_need < sizeof(ebuf)
13098                 && sizeof(ebuf) - float_need > precis
13099                 && !(width || left || plus || alt)
13100                 && !fill
13101                 && intsize != 'q'
13102             ) {
13103                 WITH_LC_NUMERIC_SET_TO_NEEDED_IN(in_lc_numeric,
13104                     SNPRINTF_G(fv, ebuf, sizeof(ebuf), precis)
13105                 );
13106                 elen = strlen(ebuf);
13107                 eptr = ebuf;
13108                 goto float_concat;
13109             }
13110
13111
13112             {
13113                 STRLEN pr = has_precis ? precis : 6; /* known default */
13114                 /* this probably can't wrap, since precis is limited
13115                  * to 1/4 address space size, but better safe than sorry
13116                  */
13117                 if (float_need >= ((STRLEN)~0) - pr)
13118                     croak_memory_wrap();
13119                 float_need += pr;
13120             }
13121
13122             if (float_need < width)
13123                 float_need = width;
13124
13125             if (float_need > INT_MAX) {
13126                 /* snprintf() returns an int, and we use that return value,
13127                    so die horribly if the expected size is too large for int
13128                 */
13129                 Perl_croak(aTHX_ "Numeric format result too large");
13130             }
13131
13132             if (PL_efloatsize <= float_need) {
13133                 /* PL_efloatbuf should be at least 1 greater than
13134                  * float_need to allow a trailing \0 to be returned by
13135                  * snprintf().  If we need to grow, overgrow for the
13136                  * benefit of future generations */
13137                 const STRLEN extra = 0x20;
13138                 if (float_need >= ((STRLEN)~0) - extra)
13139                     croak_memory_wrap();
13140                 float_need += extra;
13141                 Safefree(PL_efloatbuf);
13142                 PL_efloatsize = float_need;
13143                 Newx(PL_efloatbuf, PL_efloatsize, char);
13144                 PL_efloatbuf[0] = '\0';
13145             }
13146
13147             if (UNLIKELY(hexfp)) {
13148                 elen = S_format_hexfp(aTHX_ PL_efloatbuf, PL_efloatsize, c,
13149                                 nv, fv, has_precis, precis, width,
13150                                 alt, plus, left, fill, in_lc_numeric);
13151             }
13152             else {
13153                 char *ptr = ebuf + sizeof ebuf;
13154                 *--ptr = '\0';
13155                 *--ptr = c;
13156 #if defined(USE_QUADMATH)
13157                 if (intsize == 'q') {
13158                     /* "g" -> "Qg" */
13159                     *--ptr = 'Q';
13160                 }
13161                 /* FIXME: what to do if HAS_LONG_DOUBLE but not PERL_PRIfldbl? */
13162 #elif defined(HAS_LONG_DOUBLE) && defined(PERL_PRIfldbl)
13163                 /* Note that this is HAS_LONG_DOUBLE and PERL_PRIfldbl,
13164                  * not USE_LONG_DOUBLE and NVff.  In other words,
13165                  * this needs to work without USE_LONG_DOUBLE. */
13166                 if (intsize == 'q') {
13167                     /* Copy the one or more characters in a long double
13168                      * format before the 'base' ([efgEFG]) character to
13169                      * the format string. */
13170                     static char const ldblf[] = PERL_PRIfldbl;
13171                     char const *p = ldblf + sizeof(ldblf) - 3;
13172                     while (p >= ldblf) { *--ptr = *p--; }
13173                 }
13174 #endif
13175                 if (has_precis) {
13176                     base = precis;
13177                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
13178                     *--ptr = '.';
13179                 }
13180                 if (width) {
13181                     base = width;
13182                     do { *--ptr = '0' + (base % 10); } while (base /= 10);
13183                 }
13184                 if (fill)
13185                     *--ptr = '0';
13186                 if (left)
13187                     *--ptr = '-';
13188                 if (plus)
13189                     *--ptr = plus;
13190                 if (alt)
13191                     *--ptr = '#';
13192                 *--ptr = '%';
13193
13194                 /* No taint.  Otherwise we are in the strange situation
13195                  * where printf() taints but print($float) doesn't.
13196                  * --jhi */
13197
13198                 /* hopefully the above makes ptr a very constrained format
13199                  * that is safe to use, even though it's not literal */
13200                 GCC_DIAG_IGNORE_STMT(-Wformat-nonliteral);
13201 #ifdef USE_QUADMATH
13202                 {
13203                     if (!quadmath_format_valid(ptr))
13204                         Perl_croak_nocontext("panic: quadmath invalid format \"%s\"", ptr);
13205                     WITH_LC_NUMERIC_SET_TO_NEEDED_IN(in_lc_numeric,
13206                         elen = quadmath_snprintf(PL_efloatbuf, PL_efloatsize,
13207                                                  ptr, nv);
13208                     );
13209                     if ((IV)elen == -1) {
13210                         Perl_croak_nocontext("panic: quadmath_snprintf failed, format \"%s\"", ptr);
13211                     }
13212                 }
13213 #elif defined(HAS_LONG_DOUBLE)
13214                 WITH_LC_NUMERIC_SET_TO_NEEDED_IN(in_lc_numeric,
13215                     elen = ((intsize == 'q')
13216                             ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, fv)
13217                             : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)fv))
13218                 );
13219 #else
13220                 WITH_LC_NUMERIC_SET_TO_NEEDED_IN(in_lc_numeric,
13221                     elen = my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, fv)
13222                 );
13223 #endif
13224                 GCC_DIAG_RESTORE_STMT;
13225             }
13226
13227             eptr = PL_efloatbuf;
13228
13229           float_concat:
13230
13231             /* Since floating-point formats do their own formatting and
13232              * padding, we skip the main block of code at the end of this
13233              * loop which handles appending eptr to sv, and do our own
13234              * stripped-down version */
13235
13236             assert(!zeros);
13237             assert(!esignlen);
13238             assert(elen);
13239             assert(elen >= width);
13240
13241             S_sv_catpvn_simple(aTHX_ sv, eptr, elen);
13242
13243             goto done_valid_conversion;
13244         }
13245
13246             /* SPECIAL */
13247
13248         case 'n':
13249             {
13250                 STRLEN len;
13251                 /* XXX ideally we should warn if any flags etc have been
13252                  * set, e.g. "%-4.5n" */
13253                 /* XXX if sv was originally non-utf8 with a char in the
13254                  * range 0x80-0xff, then if it got upgraded, we should
13255                  * calculate char len rather than byte len here */
13256                 len = SvCUR(sv) - origlen;
13257                 if (args) {
13258                     int i = (len > PERL_INT_MAX) ? PERL_INT_MAX : (int)len;
13259
13260                     switch (intsize) {
13261                     case 'c':  *(va_arg(*args, char*))      = i; break;
13262                     case 'h':  *(va_arg(*args, short*))     = i; break;
13263                     default:   *(va_arg(*args, int*))       = i; break;
13264                     case 'l':  *(va_arg(*args, long*))      = i; break;
13265                     case 'V':  *(va_arg(*args, IV*))        = i; break;
13266                     case 'z':  *(va_arg(*args, SSize_t*))   = i; break;
13267 #ifdef HAS_PTRDIFF_T
13268                     case 't':  *(va_arg(*args, ptrdiff_t*)) = i; break;
13269 #endif
13270                     case 'j':  *(va_arg(*args, PERL_INTMAX_T*)) = i; break;
13271                     case 'q':
13272 #if IVSIZE >= 8
13273                                *(va_arg(*args, Quad_t*))    = i; break;
13274 #else
13275                                goto unknown;
13276 #endif
13277                     }
13278                 }
13279                 else {
13280                     if (arg_missing)
13281                         Perl_croak_nocontext(
13282                             "Missing argument for %%n in %s",
13283                                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
13284                     sv_setuv_mg(argsv, has_utf8
13285                         ? (UV)utf8_length((U8*)SvPVX(sv), (U8*)SvEND(sv))
13286                         : (UV)len);
13287                 }
13288                 goto done_valid_conversion;
13289             }
13290
13291             /* UNKNOWN */
13292
13293         default:
13294       unknown:
13295             if (!args
13296                 && (PL_op->op_type == OP_PRTF || PL_op->op_type == OP_SPRINTF)
13297                 && ckWARN(WARN_PRINTF))
13298             {
13299                 SV * const msg = sv_newmortal();
13300                 Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %sprintf: ",
13301                           (PL_op->op_type == OP_PRTF) ? "" : "s");
13302                 if (fmtstart < patend) {
13303                     const char * const fmtend = q < patend ? q : patend;
13304                     const char * f;
13305                     sv_catpvs(msg, "\"%");
13306                     for (f = fmtstart; f < fmtend; f++) {
13307                         if (isPRINT(*f)) {
13308                             sv_catpvn_nomg(msg, f, 1);
13309                         } else {
13310                             Perl_sv_catpvf(aTHX_ msg,
13311                                            "\\%03" UVof, (UV)*f & 0xFF);
13312                         }
13313                     }
13314                     sv_catpvs(msg, "\"");
13315                 } else {
13316                     sv_catpvs(msg, "end of string");
13317                 }
13318                 Perl_warner(aTHX_ packWARN(WARN_PRINTF), "%" SVf, SVfARG(msg)); /* yes, this is reentrant */
13319             }
13320
13321             /* mangled format: output the '%', then continue from the
13322              * character following that */
13323             sv_catpvn_nomg(sv, fmtstart-1, 1);
13324             q = fmtstart;
13325             svix = osvix;
13326             /* Any "redundant arg" warning from now onwards will probably
13327              * just be misleading, so don't bother. */
13328             no_redundant_warning = TRUE;
13329             continue;   /* not "break" */
13330         }
13331
13332         if (is_utf8 != has_utf8) {
13333             if (is_utf8) {
13334                 if (SvCUR(sv))
13335                     sv_utf8_upgrade(sv);
13336             }
13337             else {
13338                 const STRLEN old_elen = elen;
13339                 SV * const nsv = newSVpvn_flags(eptr, elen, SVs_TEMP);
13340                 sv_utf8_upgrade(nsv);
13341                 eptr = SvPVX_const(nsv);
13342                 elen = SvCUR(nsv);
13343
13344                 if (width) { /* fudge width (can't fudge elen) */
13345                     width += elen - old_elen;
13346                 }
13347                 is_utf8 = TRUE;
13348             }
13349         }
13350
13351
13352         /* append esignbuf, filler, zeros, eptr and dotstr to sv */
13353
13354         {
13355             STRLEN need, have, gap;
13356             STRLEN i;
13357             char *s;
13358
13359             /* signed value that's wrapped? */
13360             assert(elen  <= ((~(STRLEN)0) >> 1));
13361
13362             /* if zeros is non-zero, then it represents filler between
13363              * elen and precis. So adding elen and zeros together will
13364              * always be <= precis, and the addition can never wrap */
13365             assert(!zeros || (precis > elen && precis - elen == zeros));
13366             have = elen + zeros;
13367
13368             if (have >= (((STRLEN)~0) - esignlen))
13369                 croak_memory_wrap();
13370             have += esignlen;
13371
13372             need = (have > width ? have : width);
13373             gap = need - have;
13374
13375             if (need >= (((STRLEN)~0) - (SvCUR(sv) + 1)))
13376                 croak_memory_wrap();
13377             need += (SvCUR(sv) + 1);
13378
13379             SvGROW(sv, need);
13380
13381             s = SvEND(sv);
13382
13383             if (left) {
13384                 for (i = 0; i < esignlen; i++)
13385                     *s++ = esignbuf[i];
13386                 for (i = zeros; i; i--)
13387                     *s++ = '0';
13388                 Copy(eptr, s, elen, char);
13389                 s += elen;
13390                 for (i = gap; i; i--)
13391                     *s++ = ' ';
13392             }
13393             else {
13394                 if (fill) {
13395                     for (i = 0; i < esignlen; i++)
13396                         *s++ = esignbuf[i];
13397                     assert(!zeros);
13398                     zeros = gap;
13399                 }
13400                 else {
13401                     for (i = gap; i; i--)
13402                         *s++ = ' ';
13403                     for (i = 0; i < esignlen; i++)
13404                         *s++ = esignbuf[i];
13405                 }
13406
13407                 for (i = zeros; i; i--)
13408                     *s++ = '0';
13409                 Copy(eptr, s, elen, char);
13410                 s += elen;
13411             }
13412
13413             *s = '\0';
13414             SvCUR_set(sv, s - SvPVX_const(sv));
13415
13416             if (is_utf8)
13417                 has_utf8 = TRUE;
13418             if (has_utf8)
13419                 SvUTF8_on(sv);
13420         }
13421
13422         if (vectorize && veclen) {
13423             /* we append the vector separator separately since %v isn't
13424              * very common: don't slow down the general case by adding
13425              * dotstrlen to need etc */
13426             sv_catpvn_nomg(sv, dotstr, dotstrlen);
13427             esignlen = 0;
13428             goto vector; /* do next iteration */
13429         }
13430
13431       done_valid_conversion:
13432
13433         if (arg_missing)
13434             S_warn_vcatpvfn_missing_argument(aTHX);
13435     }
13436
13437     /* Now that we've consumed all our printf format arguments (svix)
13438      * do we have things left on the stack that we didn't use?
13439      */
13440     if (!no_redundant_warning && sv_count >= svix + 1 && ckWARN(WARN_REDUNDANT)) {
13441         Perl_warner(aTHX_ packWARN(WARN_REDUNDANT), "Redundant argument in %s",
13442                 PL_op ? OP_DESC(PL_op) : "sv_vcatpvfn()");
13443     }
13444
13445     if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
13446         /* while we shouldn't set the cache, it may have been previously
13447            set in the caller, so clear it */
13448         MAGIC *mg = mg_find(sv, PERL_MAGIC_utf8);
13449         if (mg)
13450             magic_setutf8(sv,mg); /* clear UTF8 cache */
13451     }
13452     SvTAINT(sv);
13453 }
13454
13455 /* =========================================================================
13456
13457 =for apidoc_section Embedding and Interpreter Cloning
13458
13459 =cut
13460
13461 All the macros and functions in this section are for the private use of
13462 the main function, perl_clone().
13463
13464 The foo_dup() functions make an exact copy of an existing foo thingy.
13465 During the course of a cloning, a hash table is used to map old addresses
13466 to new addresses.  The table is created and manipulated with the
13467 ptr_table_* functions.
13468
13469  * =========================================================================*/
13470
13471
13472 #if defined(USE_ITHREADS)
13473
13474 /* XXX Remove this so it doesn't have to go thru the macro and return for nothing */
13475 #ifndef GpREFCNT_inc
13476 #  define GpREFCNT_inc(gp)      ((gp) ? (++(gp)->gp_refcnt, (gp)) : (GP*)NULL)
13477 #endif
13478
13479
13480 /* Certain cases in Perl_ss_dup have been merged, by relying on the fact
13481    that currently av_dup, gv_dup and hv_dup are the same as sv_dup.
13482    If this changes, please unmerge ss_dup.
13483    Likewise, sv_dup_inc_multiple() relies on this fact.  */
13484 #define sv_dup_inc_NN(s,t)      SvREFCNT_inc_NN(sv_dup_inc(s,t))
13485 #define av_dup(s,t)     MUTABLE_AV(sv_dup((const SV *)s,t))
13486 #define av_dup_inc(s,t) MUTABLE_AV(sv_dup_inc((const SV *)s,t))
13487 #define hv_dup(s,t)     MUTABLE_HV(sv_dup((const SV *)s,t))
13488 #define hv_dup_inc(s,t) MUTABLE_HV(sv_dup_inc((const SV *)s,t))
13489 #define cv_dup(s,t)     MUTABLE_CV(sv_dup((const SV *)s,t))
13490 #define cv_dup_inc(s,t) MUTABLE_CV(sv_dup_inc((const SV *)s,t))
13491 #define io_dup(s,t)     MUTABLE_IO(sv_dup((const SV *)s,t))
13492 #define io_dup_inc(s,t) MUTABLE_IO(sv_dup_inc((const SV *)s,t))
13493 #define gv_dup(s,t)     MUTABLE_GV(sv_dup((const SV *)s,t))
13494 #define gv_dup_inc(s,t) MUTABLE_GV(sv_dup_inc((const SV *)s,t))
13495 #define SAVEPV(p)       ((p) ? savepv(p) : NULL)
13496 #define SAVEPVN(p,n)    ((p) ? savepvn(p,n) : NULL)
13497
13498 /* clone a parser */
13499
13500 yy_parser *
13501 Perl_parser_dup(pTHX_ const yy_parser *const proto, CLONE_PARAMS *const param)
13502 {
13503     yy_parser *parser;
13504
13505     PERL_ARGS_ASSERT_PARSER_DUP;
13506
13507     if (!proto)
13508         return NULL;
13509
13510     /* look for it in the table first */
13511     parser = (yy_parser *)ptr_table_fetch(PL_ptr_table, proto);
13512     if (parser)
13513         return parser;
13514
13515     /* create anew and remember what it is */
13516     Newxz(parser, 1, yy_parser);
13517     ptr_table_store(PL_ptr_table, proto, parser);
13518
13519     /* XXX eventually, just Copy() most of the parser struct ? */
13520
13521     parser->lex_brackets = proto->lex_brackets;
13522     parser->lex_casemods = proto->lex_casemods;
13523     parser->lex_brackstack = savepvn(proto->lex_brackstack,
13524                     (proto->lex_brackets < 120 ? 120 : proto->lex_brackets));
13525     parser->lex_casestack = savepvn(proto->lex_casestack,
13526                     (proto->lex_casemods < 12 ? 12 : proto->lex_casemods));
13527     parser->lex_defer   = proto->lex_defer;
13528     parser->lex_dojoin  = proto->lex_dojoin;
13529     parser->lex_formbrack = proto->lex_formbrack;
13530     parser->lex_inpat   = proto->lex_inpat;
13531     parser->lex_inwhat  = proto->lex_inwhat;
13532     parser->lex_op      = proto->lex_op;
13533     parser->lex_repl    = sv_dup_inc(proto->lex_repl, param);
13534     parser->lex_starts  = proto->lex_starts;
13535     parser->lex_stuff   = sv_dup_inc(proto->lex_stuff, param);
13536     parser->multi_close = proto->multi_close;
13537     parser->multi_open  = proto->multi_open;
13538     parser->multi_start = proto->multi_start;
13539     parser->multi_end   = proto->multi_end;
13540     parser->preambled   = proto->preambled;
13541     parser->lex_super_state = proto->lex_super_state;
13542     parser->lex_sub_inwhat  = proto->lex_sub_inwhat;
13543     parser->lex_sub_op  = proto->lex_sub_op;
13544     parser->lex_sub_repl= sv_dup_inc(proto->lex_sub_repl, param);
13545     parser->linestr     = sv_dup_inc(proto->linestr, param);
13546     parser->expect      = proto->expect;
13547     parser->copline     = proto->copline;
13548     parser->last_lop_op = proto->last_lop_op;
13549     parser->lex_state   = proto->lex_state;
13550     parser->rsfp        = fp_dup(proto->rsfp, '<', param);
13551     /* rsfp_filters entries have fake IoDIRP() */
13552     parser->rsfp_filters= av_dup_inc(proto->rsfp_filters, param);
13553     parser->in_my       = proto->in_my;
13554     parser->in_my_stash = hv_dup(proto->in_my_stash, param);
13555     parser->error_count = proto->error_count;
13556     parser->sig_elems   = proto->sig_elems;
13557     parser->sig_optelems= proto->sig_optelems;
13558     parser->sig_slurpy  = proto->sig_slurpy;
13559     parser->recheck_utf8_validity = proto->recheck_utf8_validity;
13560
13561     {
13562         char * const ols = SvPVX(proto->linestr);
13563         char * const ls  = SvPVX(parser->linestr);
13564
13565         parser->bufptr      = ls + (proto->bufptr >= ols ?
13566                                     proto->bufptr -  ols : 0);
13567         parser->oldbufptr   = ls + (proto->oldbufptr >= ols ?
13568                                     proto->oldbufptr -  ols : 0);
13569         parser->oldoldbufptr= ls + (proto->oldoldbufptr >= ols ?
13570                                     proto->oldoldbufptr -  ols : 0);
13571         parser->linestart   = ls + (proto->linestart >= ols ?
13572                                     proto->linestart -  ols : 0);
13573         parser->last_uni    = ls + (proto->last_uni >= ols ?
13574                                     proto->last_uni -  ols : 0);
13575         parser->last_lop    = ls + (proto->last_lop >= ols ?
13576                                     proto->last_lop -  ols : 0);
13577
13578         parser->bufend      = ls + SvCUR(parser->linestr);
13579     }
13580
13581     Copy(proto->tokenbuf, parser->tokenbuf, 256, char);
13582
13583
13584     Copy(proto->nextval, parser->nextval, 5, YYSTYPE);
13585     Copy(proto->nexttype, parser->nexttype, 5,  I32);
13586     parser->nexttoke    = proto->nexttoke;
13587
13588     /* XXX should clone saved_curcop here, but we aren't passed
13589      * proto_perl; so do it in perl_clone_using instead */
13590
13591     return parser;
13592 }
13593
13594
13595 /* duplicate a file handle */
13596
13597 PerlIO *
13598 Perl_fp_dup(pTHX_ PerlIO *const fp, const char type, CLONE_PARAMS *const param)
13599 {
13600     PerlIO *ret;
13601
13602     PERL_ARGS_ASSERT_FP_DUP;
13603     PERL_UNUSED_ARG(type);
13604
13605     if (!fp)
13606         return (PerlIO*)NULL;
13607
13608     /* look for it in the table first */
13609     ret = (PerlIO*)ptr_table_fetch(PL_ptr_table, fp);
13610     if (ret)
13611         return ret;
13612
13613     /* create anew and remember what it is */
13614 #ifdef __amigaos4__
13615     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE|PERLIO_DUP_FD);
13616 #else
13617     ret = PerlIO_fdupopen(aTHX_ fp, param, PERLIO_DUP_CLONE);
13618 #endif
13619     ptr_table_store(PL_ptr_table, fp, ret);
13620     return ret;
13621 }
13622
13623 /* duplicate a directory handle */
13624
13625 DIR *
13626 Perl_dirp_dup(pTHX_ DIR *const dp, CLONE_PARAMS *const param)
13627 {
13628     DIR *ret;
13629
13630 #if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
13631     DIR *pwd;
13632     const Direntry_t *dirent;
13633     char smallbuf[256]; /* XXX MAXPATHLEN, surely? */
13634     char *name = NULL;
13635     STRLEN len = 0;
13636     long pos;
13637 #endif
13638
13639     PERL_UNUSED_CONTEXT;
13640     PERL_ARGS_ASSERT_DIRP_DUP;
13641
13642     if (!dp)
13643         return (DIR*)NULL;
13644
13645     /* look for it in the table first */
13646     ret = (DIR*)ptr_table_fetch(PL_ptr_table, dp);
13647     if (ret)
13648         return ret;
13649
13650 #if defined(HAS_FCHDIR) && defined(HAS_TELLDIR) && defined(HAS_SEEKDIR)
13651
13652     PERL_UNUSED_ARG(param);
13653
13654     /* create anew */
13655
13656     /* open the current directory (so we can switch back) */
13657     if (!(pwd = PerlDir_open("."))) return (DIR *)NULL;
13658
13659     /* chdir to our dir handle and open the present working directory */
13660     if (fchdir(my_dirfd(dp)) < 0 || !(ret = PerlDir_open("."))) {
13661         PerlDir_close(pwd);
13662         return (DIR *)NULL;
13663     }
13664     /* Now we should have two dir handles pointing to the same dir. */
13665
13666     /* Be nice to the calling code and chdir back to where we were. */
13667     /* XXX If this fails, then what? */
13668     PERL_UNUSED_RESULT(fchdir(my_dirfd(pwd)));
13669
13670     /* We have no need of the pwd handle any more. */
13671     PerlDir_close(pwd);
13672
13673 #ifdef DIRNAMLEN
13674 # define d_namlen(d) (d)->d_namlen
13675 #else
13676 # define d_namlen(d) strlen((d)->d_name)
13677 #endif
13678     /* Iterate once through dp, to get the file name at the current posi-
13679        tion. Then step back. */
13680     pos = PerlDir_tell(dp);
13681     if ((dirent = PerlDir_read(dp))) {
13682         len = d_namlen(dirent);
13683         if (len > sizeof(dirent->d_name) && sizeof(dirent->d_name) > PTRSIZE) {
13684             /* If the len is somehow magically longer than the
13685              * maximum length of the directory entry, even though
13686              * we could fit it in a buffer, we could not copy it
13687              * from the dirent.  Bail out. */
13688             PerlDir_close(ret);
13689             return (DIR*)NULL;
13690         }
13691         if (len <= sizeof smallbuf) name = smallbuf;
13692         else Newx(name, len, char);
13693         Move(dirent->d_name, name, len, char);
13694     }
13695     PerlDir_seek(dp, pos);
13696
13697     /* Iterate through the new dir handle, till we find a file with the
13698        right name. */
13699     if (!dirent) /* just before the end */
13700         for(;;) {
13701             pos = PerlDir_tell(ret);
13702             if (PerlDir_read(ret)) continue; /* not there yet */
13703             PerlDir_seek(ret, pos); /* step back */
13704             break;
13705         }
13706     else {
13707         const long pos0 = PerlDir_tell(ret);
13708         for(;;) {
13709             pos = PerlDir_tell(ret);
13710             if ((dirent = PerlDir_read(ret))) {
13711                 if (len == (STRLEN)d_namlen(dirent)
13712                     && memEQ(name, dirent->d_name, len)) {
13713                     /* found it */
13714                     PerlDir_seek(ret, pos); /* step back */
13715                     break;
13716                 }
13717                 /* else we are not there yet; keep iterating */
13718             }
13719             else { /* This is not meant to happen. The best we can do is
13720                       reset the iterator to the beginning. */
13721                 PerlDir_seek(ret, pos0);
13722                 break;
13723             }
13724         }
13725     }
13726 #undef d_namlen
13727
13728     if (name && name != smallbuf)
13729         Safefree(name);
13730 #endif
13731
13732 #ifdef WIN32
13733     ret = win32_dirp_dup(dp, param);
13734 #endif
13735
13736     /* pop it in the pointer table */
13737     if (ret)
13738         ptr_table_store(PL_ptr_table, dp, ret);
13739
13740     return ret;
13741 }
13742
13743 /* duplicate a typeglob */
13744
13745 GP *
13746 Perl_gp_dup(pTHX_ GP *const gp, CLONE_PARAMS *const param)
13747 {
13748     GP *ret;
13749
13750     PERL_ARGS_ASSERT_GP_DUP;
13751
13752     if (!gp)
13753         return (GP*)NULL;
13754     /* look for it in the table first */
13755     ret = (GP*)ptr_table_fetch(PL_ptr_table, gp);
13756     if (ret)
13757         return ret;
13758
13759     /* create anew and remember what it is */
13760     Newxz(ret, 1, GP);
13761     ptr_table_store(PL_ptr_table, gp, ret);
13762
13763     /* clone */
13764     /* ret->gp_refcnt must be 0 before any other dups are called. We're relying
13765        on Newxz() to do this for us.  */
13766     ret->gp_sv          = sv_dup_inc(gp->gp_sv, param);
13767     ret->gp_io          = io_dup_inc(gp->gp_io, param);
13768     ret->gp_form        = cv_dup_inc(gp->gp_form, param);
13769     ret->gp_av          = av_dup_inc(gp->gp_av, param);
13770     ret->gp_hv          = hv_dup_inc(gp->gp_hv, param);
13771     ret->gp_egv = gv_dup(gp->gp_egv, param);/* GvEGV is not refcounted */
13772     ret->gp_cv          = cv_dup_inc(gp->gp_cv, param);
13773     ret->gp_cvgen       = gp->gp_cvgen;
13774     ret->gp_line        = gp->gp_line;
13775     ret->gp_file_hek    = hek_dup(gp->gp_file_hek, param);
13776     return ret;
13777 }
13778
13779 /* duplicate a chain of magic */
13780
13781 MAGIC *
13782 Perl_mg_dup(pTHX_ MAGIC *mg, CLONE_PARAMS *const param)
13783 {
13784     MAGIC *mgret = NULL;
13785     MAGIC **mgprev_p = &mgret;
13786
13787     PERL_ARGS_ASSERT_MG_DUP;
13788
13789     for (; mg; mg = mg->mg_moremagic) {
13790         MAGIC *nmg;
13791
13792         if ((param->flags & CLONEf_JOIN_IN)
13793                 && mg->mg_type == PERL_MAGIC_backref)
13794             /* when joining, we let the individual SVs add themselves to
13795              * backref as needed. */
13796             continue;
13797
13798         Newx(nmg, 1, MAGIC);
13799         *mgprev_p = nmg;
13800         mgprev_p = &(nmg->mg_moremagic);
13801
13802         /* There was a comment "XXX copy dynamic vtable?" but as we don't have
13803            dynamic vtables, I'm not sure why Sarathy wrote it. The comment dates
13804            from the original commit adding Perl_mg_dup() - revision 4538.
13805            Similarly there is the annotation "XXX random ptr?" next to the
13806            assignment to nmg->mg_ptr.  */
13807         *nmg = *mg;
13808
13809         /* FIXME for plugins
13810         if (nmg->mg_type == PERL_MAGIC_qr) {
13811             nmg->mg_obj = MUTABLE_SV(CALLREGDUPE((REGEXP*)nmg->mg_obj, param));
13812         }
13813         else
13814         */
13815         nmg->mg_obj = (nmg->mg_flags & MGf_REFCOUNTED)
13816                           ? nmg->mg_type == PERL_MAGIC_backref
13817                                 /* The backref AV has its reference
13818                                  * count deliberately bumped by 1 */
13819                                 ? SvREFCNT_inc(av_dup_inc((const AV *)
13820                                                     nmg->mg_obj, param))
13821                                 : sv_dup_inc(nmg->mg_obj, param)
13822                           : (nmg->mg_type == PERL_MAGIC_regdatum ||
13823                              nmg->mg_type == PERL_MAGIC_regdata)
13824                                   ? nmg->mg_obj
13825                                   : sv_dup(nmg->mg_obj, param);
13826
13827         if (nmg->mg_ptr && nmg->mg_type != PERL_MAGIC_regex_global) {
13828             if (nmg->mg_len > 0) {
13829                 nmg->mg_ptr     = SAVEPVN(nmg->mg_ptr, nmg->mg_len);
13830                 if (nmg->mg_type == PERL_MAGIC_overload_table &&
13831                         AMT_AMAGIC((AMT*)nmg->mg_ptr))
13832                 {
13833                     AMT * const namtp = (AMT*)nmg->mg_ptr;
13834                     sv_dup_inc_multiple((SV**)(namtp->table),
13835                                         (SV**)(namtp->table), NofAMmeth, param);
13836                 }
13837             }
13838             else if (nmg->mg_len == HEf_SVKEY)
13839                 nmg->mg_ptr = (char*)sv_dup_inc((const SV *)nmg->mg_ptr, param);
13840         }
13841         if ((nmg->mg_flags & MGf_DUP) && nmg->mg_virtual && nmg->mg_virtual->svt_dup) {
13842             nmg->mg_virtual->svt_dup(aTHX_ nmg, param);
13843         }
13844     }
13845     return mgret;
13846 }
13847
13848 #endif /* USE_ITHREADS */
13849
13850 struct ptr_tbl_arena {
13851     struct ptr_tbl_arena *next;
13852     struct ptr_tbl_ent array[1023/3]; /* as ptr_tbl_ent has 3 pointers.  */
13853 };
13854
13855 /* create a new pointer-mapping table */
13856
13857 PTR_TBL_t *
13858 Perl_ptr_table_new(pTHX)
13859 {
13860     PTR_TBL_t *tbl;
13861     PERL_UNUSED_CONTEXT;
13862
13863     Newx(tbl, 1, PTR_TBL_t);
13864     tbl->tbl_max        = 511;
13865     tbl->tbl_items      = 0;
13866     tbl->tbl_arena      = NULL;
13867     tbl->tbl_arena_next = NULL;
13868     tbl->tbl_arena_end  = NULL;
13869     Newxz(tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*);
13870     return tbl;
13871 }
13872
13873 #define PTR_TABLE_HASH(ptr) \
13874   ((PTR2UV(ptr) >> 3) ^ (PTR2UV(ptr) >> (3 + 7)) ^ (PTR2UV(ptr) >> (3 + 17)))
13875
13876 /* map an existing pointer using a table */
13877
13878 STATIC PTR_TBL_ENT_t *
13879 S_ptr_table_find(PTR_TBL_t *const tbl, const void *const sv)
13880 {
13881     PTR_TBL_ENT_t *tblent;
13882     const UV hash = PTR_TABLE_HASH(sv);
13883
13884     PERL_ARGS_ASSERT_PTR_TABLE_FIND;
13885
13886     tblent = tbl->tbl_ary[hash & tbl->tbl_max];
13887     for (; tblent; tblent = tblent->next) {
13888         if (tblent->oldval == sv)
13889             return tblent;
13890     }
13891     return NULL;
13892 }
13893
13894 void *
13895 Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
13896 {
13897     PTR_TBL_ENT_t const *const tblent = ptr_table_find(tbl, sv);
13898
13899     PERL_ARGS_ASSERT_PTR_TABLE_FETCH;
13900     PERL_UNUSED_CONTEXT;
13901
13902     return tblent ? tblent->newval : NULL;
13903 }
13904
13905 /* add a new entry to a pointer-mapping table 'tbl'.  In hash terms, 'oldsv' is
13906  * the key; 'newsv' is the value.  The names "old" and "new" are specific to
13907  * the core's typical use of ptr_tables in thread cloning. */
13908
13909 void
13910 Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *const oldsv, void *const newsv)
13911 {
13912     PTR_TBL_ENT_t *tblent = ptr_table_find(tbl, oldsv);
13913
13914     PERL_ARGS_ASSERT_PTR_TABLE_STORE;
13915     PERL_UNUSED_CONTEXT;
13916
13917     if (tblent) {
13918         tblent->newval = newsv;
13919     } else {
13920         const UV entry = PTR_TABLE_HASH(oldsv) & tbl->tbl_max;
13921
13922         if (tbl->tbl_arena_next == tbl->tbl_arena_end) {
13923             struct ptr_tbl_arena *new_arena;
13924
13925             Newx(new_arena, 1, struct ptr_tbl_arena);
13926             new_arena->next = tbl->tbl_arena;
13927             tbl->tbl_arena = new_arena;
13928             tbl->tbl_arena_next = new_arena->array;
13929             tbl->tbl_arena_end = C_ARRAY_END(new_arena->array);
13930         }
13931
13932         tblent = tbl->tbl_arena_next++;
13933
13934         tblent->oldval = oldsv;
13935         tblent->newval = newsv;
13936         tblent->next = tbl->tbl_ary[entry];
13937         tbl->tbl_ary[entry] = tblent;
13938         tbl->tbl_items++;
13939         if (tblent->next && tbl->tbl_items > tbl->tbl_max)
13940             ptr_table_split(tbl);
13941     }
13942 }
13943
13944 /* double the hash bucket size of an existing ptr table */
13945
13946 void
13947 Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl)
13948 {
13949     PTR_TBL_ENT_t **ary = tbl->tbl_ary;
13950     const UV oldsize = tbl->tbl_max + 1;
13951     UV newsize = oldsize * 2;
13952     UV i;
13953
13954     PERL_ARGS_ASSERT_PTR_TABLE_SPLIT;
13955     PERL_UNUSED_CONTEXT;
13956
13957     Renew(ary, newsize, PTR_TBL_ENT_t*);
13958     Zero(&ary[oldsize], newsize-oldsize, PTR_TBL_ENT_t*);
13959     tbl->tbl_max = --newsize;
13960     tbl->tbl_ary = ary;
13961     for (i=0; i < oldsize; i++, ary++) {
13962         PTR_TBL_ENT_t **entp = ary;
13963         PTR_TBL_ENT_t *ent = *ary;
13964         PTR_TBL_ENT_t **curentp;
13965         if (!ent)
13966             continue;
13967         curentp = ary + oldsize;
13968         do {
13969             if ((newsize & PTR_TABLE_HASH(ent->oldval)) != i) {
13970                 *entp = ent->next;
13971                 ent->next = *curentp;
13972                 *curentp = ent;
13973             }
13974             else
13975                 entp = &ent->next;
13976             ent = *entp;
13977         } while (ent);
13978     }
13979 }
13980
13981 /* remove all the entries from a ptr table */
13982 /* Deprecated - will be removed post 5.14 */
13983
13984 void
13985 Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
13986 {
13987     PERL_UNUSED_CONTEXT;
13988     if (tbl && tbl->tbl_items) {
13989         struct ptr_tbl_arena *arena = tbl->tbl_arena;
13990
13991         Zero(tbl->tbl_ary, tbl->tbl_max + 1, struct ptr_tbl_ent *);
13992
13993         while (arena) {
13994             struct ptr_tbl_arena *next = arena->next;
13995
13996             Safefree(arena);
13997             arena = next;
13998         };
13999
14000         tbl->tbl_items = 0;
14001         tbl->tbl_arena = NULL;
14002         tbl->tbl_arena_next = NULL;
14003         tbl->tbl_arena_end = NULL;
14004     }
14005 }
14006
14007 /* clear and free a ptr table */
14008
14009 void
14010 Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl)
14011 {
14012     struct ptr_tbl_arena *arena;
14013
14014     PERL_UNUSED_CONTEXT;
14015
14016     if (!tbl) {
14017         return;
14018     }
14019
14020     arena = tbl->tbl_arena;
14021
14022     while (arena) {
14023         struct ptr_tbl_arena *next = arena->next;
14024
14025         Safefree(arena);
14026         arena = next;
14027     }
14028
14029     Safefree(tbl->tbl_ary);
14030     Safefree(tbl);
14031 }
14032
14033 #if defined(USE_ITHREADS)
14034
14035 void
14036 Perl_rvpv_dup(pTHX_ SV *const dstr, const SV *const sstr, CLONE_PARAMS *const param)
14037 {
14038     PERL_ARGS_ASSERT_RVPV_DUP;
14039
14040     assert(!isREGEXP(sstr));
14041     if (SvROK(sstr)) {
14042         if (SvWEAKREF(sstr)) {
14043             SvRV_set(dstr, sv_dup(SvRV_const(sstr), param));
14044             if (param->flags & CLONEf_JOIN_IN) {
14045                 /* if joining, we add any back references individually rather
14046                  * than copying the whole backref array */
14047                 Perl_sv_add_backref(aTHX_ SvRV(dstr), dstr);
14048             }
14049         }
14050         else
14051             SvRV_set(dstr, sv_dup_inc(SvRV_const(sstr), param));
14052     }
14053     else if (SvPVX_const(sstr)) {
14054         /* Has something there */
14055         if (SvLEN(sstr)) {
14056             /* Normal PV - clone whole allocated space */
14057             SvPV_set(dstr, SAVEPVN(SvPVX_const(sstr), SvLEN(sstr)-1));
14058             /* sstr may not be that normal, but actually copy on write.
14059                But we are a true, independent SV, so:  */
14060             SvIsCOW_off(dstr);
14061         }
14062         else {
14063             /* Special case - not normally malloced for some reason */
14064             if (isGV_with_GP(sstr)) {
14065                 /* Don't need to do anything here.  */
14066             }
14067             else if ((SvIsCOW(sstr))) {
14068                 /* A "shared" PV - clone it as "shared" PV */
14069                 SvPV_set(dstr,
14070                          HEK_KEY(hek_dup(SvSHARED_HEK_FROM_PV(SvPVX_const(sstr)),
14071                                          param)));
14072             }
14073             else {
14074                 /* Some other special case - random pointer */
14075                 SvPV_set(dstr, (char *) SvPVX_const(sstr));             
14076             }
14077         }
14078     }
14079     else {
14080         /* Copy the NULL */
14081         SvPV_set(dstr, NULL);
14082     }
14083 }
14084
14085 /* duplicate a list of SVs. source and dest may point to the same memory.  */
14086 static SV **
14087 S_sv_dup_inc_multiple(pTHX_ SV *const *source, SV **dest,
14088                       SSize_t items, CLONE_PARAMS *const param)
14089 {
14090     PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE;
14091
14092     while (items-- > 0) {
14093         *dest++ = sv_dup_inc(*source++, param);
14094     }
14095
14096     return dest;
14097 }
14098
14099 /* duplicate an SV of any type (including AV, HV etc) */
14100
14101 static SV *
14102 S_sv_dup_common(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
14103 {
14104     SV *dstr;
14105
14106     PERL_ARGS_ASSERT_SV_DUP_COMMON;
14107
14108     if (SvTYPE(sstr) == (svtype)SVTYPEMASK) {
14109 #ifdef DEBUG_LEAKING_SCALARS_ABORT
14110         abort();
14111 #endif
14112         return NULL;
14113     }
14114     /* look for it in the table first */
14115     dstr = MUTABLE_SV(ptr_table_fetch(PL_ptr_table, sstr));
14116     if (dstr)
14117         return dstr;
14118
14119     if(param->flags & CLONEf_JOIN_IN) {
14120         /** We are joining here so we don't want do clone
14121             something that is bad **/
14122         if (SvTYPE(sstr) == SVt_PVHV) {
14123             const HEK * const hvname = HvNAME_HEK(sstr);
14124             if (hvname) {
14125                 /** don't clone stashes if they already exist **/
14126                 dstr = MUTABLE_SV(gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
14127                                                 HEK_UTF8(hvname) ? SVf_UTF8 : 0));
14128                 ptr_table_store(PL_ptr_table, sstr, dstr);
14129                 return dstr;
14130             }
14131         }
14132         else if (SvTYPE(sstr) == SVt_PVGV && !SvFAKE(sstr)) {
14133             HV *stash = GvSTASH(sstr);
14134             const HEK * hvname;
14135             if (stash && (hvname = HvNAME_HEK(stash))) {
14136                 /** don't clone GVs if they already exist **/
14137                 SV **svp;
14138                 stash = gv_stashpvn(HEK_KEY(hvname), HEK_LEN(hvname),
14139                                     HEK_UTF8(hvname) ? SVf_UTF8 : 0);
14140                 svp = hv_fetch(
14141                         stash, GvNAME(sstr),
14142                         GvNAMEUTF8(sstr)
14143                             ? -GvNAMELEN(sstr)
14144                             :  GvNAMELEN(sstr),
14145                         0
14146                       );
14147                 if (svp && *svp && SvTYPE(*svp) == SVt_PVGV) {
14148                     ptr_table_store(PL_ptr_table, sstr, *svp);
14149                     return *svp;
14150                 }
14151             }
14152         }
14153     }
14154
14155     /* create anew and remember what it is */
14156     new_SV(dstr);
14157
14158 #ifdef DEBUG_LEAKING_SCALARS
14159     dstr->sv_debug_optype = sstr->sv_debug_optype;
14160     dstr->sv_debug_line = sstr->sv_debug_line;
14161     dstr->sv_debug_inpad = sstr->sv_debug_inpad;
14162     dstr->sv_debug_parent = (SV*)sstr;
14163     FREE_SV_DEBUG_FILE(dstr);
14164     dstr->sv_debug_file = savesharedpv(sstr->sv_debug_file);
14165 #endif
14166
14167     ptr_table_store(PL_ptr_table, sstr, dstr);
14168
14169     /* clone */
14170     SvFLAGS(dstr)       = SvFLAGS(sstr);
14171     SvFLAGS(dstr)       &= ~SVf_OOK;            /* don't propagate OOK hack */
14172     SvREFCNT(dstr)      = 0;                    /* must be before any other dups! */
14173
14174 #ifdef DEBUGGING
14175     if (SvANY(sstr) && PL_watch_pvx && SvPVX_const(sstr) == PL_watch_pvx)
14176         PerlIO_printf(Perl_debug_log, "watch at %p hit, found string \"%s\"\n",
14177                       (void*)PL_watch_pvx, SvPVX_const(sstr));
14178 #endif
14179
14180     /* don't clone objects whose class has asked us not to */
14181     if (SvOBJECT(sstr)
14182      && ! (SvFLAGS(SvSTASH(sstr)) & SVphv_CLONEABLE))
14183     {
14184         SvFLAGS(dstr) = 0;
14185         return dstr;
14186     }
14187
14188     switch (SvTYPE(sstr)) {
14189     case SVt_NULL:
14190         SvANY(dstr)     = NULL;
14191         break;
14192     case SVt_IV:
14193         SET_SVANY_FOR_BODYLESS_IV(dstr);
14194         if(SvROK(sstr)) {
14195             Perl_rvpv_dup(aTHX_ dstr, sstr, param);
14196         } else {
14197             SvIV_set(dstr, SvIVX(sstr));
14198         }
14199         break;
14200     case SVt_NV:
14201 #if NVSIZE <= IVSIZE
14202         SET_SVANY_FOR_BODYLESS_NV(dstr);
14203 #else
14204         SvANY(dstr)     = new_XNV();
14205 #endif
14206         SvNV_set(dstr, SvNVX(sstr));
14207         break;
14208     default:
14209         {
14210             /* These are all the types that need complex bodies allocating.  */
14211             void *new_body;
14212             const svtype sv_type = SvTYPE(sstr);
14213             const struct body_details *const sv_type_details
14214                 = bodies_by_type + sv_type;
14215
14216             switch (sv_type) {
14217             default:
14218                 Perl_croak(aTHX_ "Bizarre SvTYPE [%" IVdf "]", (IV)SvTYPE(sstr));
14219                 NOT_REACHED; /* NOTREACHED */
14220                 break;
14221
14222             case SVt_PVGV:
14223             case SVt_PVIO:
14224             case SVt_PVFM:
14225             case SVt_PVHV:
14226             case SVt_PVAV:
14227             case SVt_PVCV:
14228             case SVt_PVLV:
14229             case SVt_REGEXP:
14230             case SVt_PVMG:
14231             case SVt_PVNV:
14232             case SVt_PVIV:
14233             case SVt_INVLIST:
14234             case SVt_PV:
14235                 assert(sv_type_details->body_size);
14236                 if (sv_type_details->arena) {
14237                     new_body_inline(new_body, sv_type);
14238                     new_body
14239                         = (void*)((char*)new_body - sv_type_details->offset);
14240                 } else {
14241                     new_body = new_NOARENA(sv_type_details);
14242                 }
14243             }
14244             assert(new_body);
14245             SvANY(dstr) = new_body;
14246
14247 #ifndef PURIFY
14248             Copy(((char*)SvANY(sstr)) + sv_type_details->offset,
14249                  ((char*)SvANY(dstr)) + sv_type_details->offset,
14250                  sv_type_details->copy, char);
14251 #else
14252             Copy(((char*)SvANY(sstr)),
14253                  ((char*)SvANY(dstr)),
14254                  sv_type_details->body_size + sv_type_details->offset, char);
14255 #endif
14256
14257             if (sv_type != SVt_PVAV && sv_type != SVt_PVHV
14258                 && !isGV_with_GP(dstr)
14259                 && !isREGEXP(dstr)
14260                 && !(sv_type == SVt_PVIO && !(IoFLAGS(dstr) & IOf_FAKE_DIRP)))
14261                 Perl_rvpv_dup(aTHX_ dstr, sstr, param);
14262
14263             /* The Copy above means that all the source (unduplicated) pointers
14264                are now in the destination.  We can check the flags and the
14265                pointers in either, but it's possible that there's less cache
14266                missing by always going for the destination.
14267                FIXME - instrument and check that assumption  */
14268             if (sv_type >= SVt_PVMG) {
14269                 if (SvMAGIC(dstr))
14270                     SvMAGIC_set(dstr, mg_dup(SvMAGIC(dstr), param));
14271                 if (SvOBJECT(dstr) && SvSTASH(dstr))
14272                     SvSTASH_set(dstr, hv_dup_inc(SvSTASH(dstr), param));
14273                 else SvSTASH_set(dstr, 0); /* don't copy DESTROY cache */
14274             }
14275
14276             /* The cast silences a GCC warning about unhandled types.  */
14277             switch ((int)sv_type) {
14278             case SVt_PV:
14279                 break;
14280             case SVt_PVIV:
14281                 break;
14282             case SVt_PVNV:
14283                 break;
14284             case SVt_PVMG:
14285                 break;
14286             case SVt_REGEXP:
14287               duprex:
14288                 /* FIXME for plugins */
14289                 re_dup_guts((REGEXP*) sstr, (REGEXP*) dstr, param);
14290                 break;
14291             case SVt_PVLV:
14292                 /* XXX LvTARGOFF sometimes holds PMOP* when DEBUGGING */
14293                 if (LvTYPE(dstr) == 't') /* for tie: unrefcnted fake (SV**) */
14294                     LvTARG(dstr) = dstr;
14295                 else if (LvTYPE(dstr) == 'T') /* for tie: fake HE */
14296                     LvTARG(dstr) = MUTABLE_SV(he_dup((HE*)LvTARG(dstr), 0, param));
14297                 else
14298                     LvTARG(dstr) = sv_dup_inc(LvTARG(dstr), param);
14299                 if (isREGEXP(sstr)) goto duprex;
14300                 /* FALLTHROUGH */
14301             case SVt_PVGV:
14302                 /* non-GP case already handled above */
14303                 if(isGV_with_GP(sstr)) {
14304                     GvNAME_HEK(dstr) = hek_dup(GvNAME_HEK(dstr), param);
14305                     /* Don't call sv_add_backref here as it's going to be
14306                        created as part of the magic cloning of the symbol
14307                        table--unless this is during a join and the stash
14308                        is not actually being cloned.  */
14309                     /* Danger Will Robinson - GvGP(dstr) isn't initialised
14310                        at the point of this comment.  */
14311                     GvSTASH(dstr) = hv_dup(GvSTASH(dstr), param);
14312                     if (param->flags & CLONEf_JOIN_IN)
14313                         Perl_sv_add_backref(aTHX_ MUTABLE_SV(GvSTASH(dstr)), dstr);
14314                     GvGP_set(dstr, gp_dup(GvGP(sstr), param));
14315                     (void)GpREFCNT_inc(GvGP(dstr));
14316                 }
14317                 break;
14318             case SVt_PVIO:
14319                 /* PL_parser->rsfp_filters entries have fake IoDIRP() */
14320                 if(IoFLAGS(dstr) & IOf_FAKE_DIRP) {
14321                     /* I have no idea why fake dirp (rsfps)
14322                        should be treated differently but otherwise
14323                        we end up with leaks -- sky*/
14324                     IoTOP_GV(dstr)      = gv_dup_inc(IoTOP_GV(dstr), param);
14325                     IoFMT_GV(dstr)      = gv_dup_inc(IoFMT_GV(dstr), param);
14326                     IoBOTTOM_GV(dstr)   = gv_dup_inc(IoBOTTOM_GV(dstr), param);
14327                 } else {
14328                     IoTOP_GV(dstr)      = gv_dup(IoTOP_GV(dstr), param);
14329                     IoFMT_GV(dstr)      = gv_dup(IoFMT_GV(dstr), param);
14330                     IoBOTTOM_GV(dstr)   = gv_dup(IoBOTTOM_GV(dstr), param);
14331                     if (IoDIRP(dstr)) {
14332                         IoDIRP(dstr)    = dirp_dup(IoDIRP(dstr), param);
14333                     } else {
14334                         NOOP;
14335                         /* IoDIRP(dstr) is already a copy of IoDIRP(sstr)  */
14336                     }
14337                     IoIFP(dstr) = fp_dup(IoIFP(sstr), IoTYPE(dstr), param);
14338                 }
14339                 if (IoOFP(dstr) == IoIFP(sstr))
14340                     IoOFP(dstr) = IoIFP(dstr);
14341                 else
14342                     IoOFP(dstr) = fp_dup(IoOFP(dstr), IoTYPE(dstr), param);
14343                 IoTOP_NAME(dstr)        = SAVEPV(IoTOP_NAME(dstr));
14344                 IoFMT_NAME(dstr)        = SAVEPV(IoFMT_NAME(dstr));
14345                 IoBOTTOM_NAME(dstr)     = SAVEPV(IoBOTTOM_NAME(dstr));
14346                 break;
14347             case SVt_PVAV:
14348                 /* avoid cloning an empty array */
14349                 if (AvARRAY((const AV *)sstr) && AvFILLp((const AV *)sstr) >= 0) {
14350                     SV **dst_ary, **src_ary;
14351                     SSize_t items = AvFILLp((const AV *)sstr) + 1;
14352
14353                     src_ary = AvARRAY((const AV *)sstr);
14354                     Newx(dst_ary, AvMAX((const AV *)sstr)+1, SV*);
14355                     ptr_table_store(PL_ptr_table, src_ary, dst_ary);
14356                     AvARRAY(MUTABLE_AV(dstr)) = dst_ary;
14357                     AvALLOC((const AV *)dstr) = dst_ary;
14358                     if (AvREAL((const AV *)sstr)) {
14359                         dst_ary = sv_dup_inc_multiple(src_ary, dst_ary, items,
14360                                                       param);
14361                     }
14362                     else {
14363                         while (items-- > 0)
14364                             *dst_ary++ = sv_dup(*src_ary++, param);
14365                     }
14366                     items = AvMAX((const AV *)sstr) - AvFILLp((const AV *)sstr);
14367                     while (items-- > 0) {
14368                         *dst_ary++ = NULL;
14369                     }
14370                 }
14371                 else {
14372                     AvARRAY(MUTABLE_AV(dstr))   = NULL;
14373                     AvALLOC((const AV *)dstr)   = (SV**)NULL;
14374                     AvMAX(  (const AV *)dstr)   = -1;
14375                     AvFILLp((const AV *)dstr)   = -1;
14376                 }
14377                 break;
14378             case SVt_PVHV:
14379                 if (HvARRAY((const HV *)sstr)) {
14380                     STRLEN i = 0;
14381                     const bool sharekeys = !!HvSHAREKEYS(sstr);
14382                     XPVHV * const dxhv = (XPVHV*)SvANY(dstr);
14383                     XPVHV * const sxhv = (XPVHV*)SvANY(sstr);
14384                     char *darray;
14385                     Newx(darray, PERL_HV_ARRAY_ALLOC_BYTES(dxhv->xhv_max+1)
14386                         + (SvOOK(sstr) ? sizeof(struct xpvhv_aux) : 0),
14387                         char);
14388                     HvARRAY(dstr) = (HE**)darray;
14389                     while (i <= sxhv->xhv_max) {
14390                         const HE * const source = HvARRAY(sstr)[i];
14391                         HvARRAY(dstr)[i] = source
14392                             ? he_dup(source, sharekeys, param) : 0;
14393                         ++i;
14394                     }
14395                     if (SvOOK(sstr)) {
14396                         const struct xpvhv_aux * const saux = HvAUX(sstr);
14397                         struct xpvhv_aux * const daux = HvAUX(dstr);
14398                         /* This flag isn't copied.  */
14399                         SvOOK_on(dstr);
14400
14401                         if (saux->xhv_name_count) {
14402                             HEK ** const sname = saux->xhv_name_u.xhvnameu_names;
14403                             const I32 count
14404                              = saux->xhv_name_count < 0
14405                                 ? -saux->xhv_name_count
14406                                 :  saux->xhv_name_count;
14407                             HEK **shekp = sname + count;
14408                             HEK **dhekp;
14409                             Newx(daux->xhv_name_u.xhvnameu_names, count, HEK *);
14410                             dhekp = daux->xhv_name_u.xhvnameu_names + count;
14411                             while (shekp-- > sname) {
14412                                 dhekp--;
14413                                 *dhekp = hek_dup(*shekp, param);
14414                             }
14415                         }
14416                         else {
14417                             daux->xhv_name_u.xhvnameu_name
14418                                 = hek_dup(saux->xhv_name_u.xhvnameu_name,
14419                                           param);
14420                         }
14421                         daux->xhv_name_count = saux->xhv_name_count;
14422
14423                         daux->xhv_aux_flags = saux->xhv_aux_flags;
14424 #ifdef PERL_HASH_RANDOMIZE_KEYS
14425                         daux->xhv_rand = saux->xhv_rand;
14426                         daux->xhv_last_rand = saux->xhv_last_rand;
14427 #endif
14428                         daux->xhv_riter = saux->xhv_riter;
14429                         daux->xhv_eiter = saux->xhv_eiter
14430                             ? he_dup(saux->xhv_eiter,
14431                                         cBOOL(HvSHAREKEYS(sstr)), param) : 0;
14432                         /* backref array needs refcnt=2; see sv_add_backref */
14433                         daux->xhv_backreferences =
14434                             (param->flags & CLONEf_JOIN_IN)
14435                                 /* when joining, we let the individual GVs and
14436                                  * CVs add themselves to backref as
14437                                  * needed. This avoids pulling in stuff
14438                                  * that isn't required, and simplifies the
14439                                  * case where stashes aren't cloned back
14440                                  * if they already exist in the parent
14441                                  * thread */
14442                             ? NULL
14443                             : saux->xhv_backreferences
14444                                 ? (SvTYPE(saux->xhv_backreferences) == SVt_PVAV)
14445                                     ? MUTABLE_AV(SvREFCNT_inc(
14446                                           sv_dup_inc((const SV *)
14447                                             saux->xhv_backreferences, param)))
14448                                     : MUTABLE_AV(sv_dup((const SV *)
14449                                             saux->xhv_backreferences, param))
14450                                 : 0;
14451
14452                         daux->xhv_mro_meta = saux->xhv_mro_meta
14453                             ? mro_meta_dup(saux->xhv_mro_meta, param)
14454                             : 0;
14455
14456                         /* Record stashes for possible cloning in Perl_clone(). */
14457                         if (HvNAME(sstr))
14458                             av_push(param->stashes, dstr);
14459                     }
14460                 }
14461                 else
14462                     HvARRAY(MUTABLE_HV(dstr)) = NULL;
14463                 break;
14464             case SVt_PVCV:
14465                 if (!(param->flags & CLONEf_COPY_STACKS)) {
14466                     CvDEPTH(dstr) = 0;
14467                 }
14468                 /* FALLTHROUGH */
14469             case SVt_PVFM:
14470                 /* NOTE: not refcounted */
14471                 SvANY(MUTABLE_CV(dstr))->xcv_stash =
14472                     hv_dup(CvSTASH(dstr), param);
14473                 if ((param->flags & CLONEf_JOIN_IN) && CvSTASH(dstr))
14474                     Perl_sv_add_backref(aTHX_ MUTABLE_SV(CvSTASH(dstr)), dstr);
14475                 if (!CvISXSUB(dstr)) {
14476                     OP_REFCNT_LOCK;
14477                     CvROOT(dstr) = OpREFCNT_inc(CvROOT(dstr));
14478                     OP_REFCNT_UNLOCK;
14479                     CvSLABBED_off(dstr);
14480                 } else if (CvCONST(dstr)) {
14481                     CvXSUBANY(dstr).any_ptr =
14482                         sv_dup_inc((const SV *)CvXSUBANY(dstr).any_ptr, param);
14483                 }
14484                 assert(!CvSLABBED(dstr));
14485                 if (CvDYNFILE(dstr)) CvFILE(dstr) = SAVEPV(CvFILE(dstr));
14486                 if (CvNAMED(dstr))
14487                     SvANY((CV *)dstr)->xcv_gv_u.xcv_hek =
14488                         hek_dup(CvNAME_HEK((CV *)sstr), param);
14489                 /* don't dup if copying back - CvGV isn't refcounted, so the
14490                  * duped GV may never be freed. A bit of a hack! DAPM */
14491                 else
14492                   SvANY(MUTABLE_CV(dstr))->xcv_gv_u.xcv_gv =
14493                     CvCVGV_RC(dstr)
14494                     ? gv_dup_inc(CvGV(sstr), param)
14495                     : (param->flags & CLONEf_JOIN_IN)
14496                         ? NULL
14497                         : gv_dup(CvGV(sstr), param);
14498
14499                 if (!CvISXSUB(sstr)) {
14500                     PADLIST * padlist = CvPADLIST(sstr);
14501                     if(padlist)
14502                         padlist = padlist_dup(padlist, param);
14503                     CvPADLIST_set(dstr, padlist);
14504                 } else
14505 /* unthreaded perl can't sv_dup so we dont support unthreaded's CvHSCXT */
14506                     PoisonPADLIST(dstr);
14507
14508                 CvOUTSIDE(dstr) =
14509                     CvWEAKOUTSIDE(sstr)
14510                     ? cv_dup(    CvOUTSIDE(dstr), param)
14511                     : cv_dup_inc(CvOUTSIDE(dstr), param);
14512                 break;
14513             }
14514         }
14515     }
14516
14517     return dstr;
14518  }
14519
14520 SV *
14521 Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
14522 {
14523     PERL_ARGS_ASSERT_SV_DUP_INC;
14524     return sstr ? SvREFCNT_inc(sv_dup_common(sstr, param)) : NULL;
14525 }
14526
14527 SV *
14528 Perl_sv_dup(pTHX_ const SV *const sstr, CLONE_PARAMS *const param)
14529 {
14530     SV *dstr = sstr ? sv_dup_common(sstr, param) : NULL;
14531     PERL_ARGS_ASSERT_SV_DUP;
14532
14533     /* Track every SV that (at least initially) had a reference count of 0.
14534        We need to do this by holding an actual reference to it in this array.
14535        If we attempt to cheat, turn AvREAL_off(), and store only pointers
14536        (akin to the stashes hash, and the perl stack), we come unstuck if
14537        a weak reference (or other SV legitimately SvREFCNT() == 0 for this
14538        thread) is manipulated in a CLONE method, because CLONE runs before the
14539        unreferenced array is walked to find SVs still with SvREFCNT() == 0
14540        (and fix things up by giving each a reference via the temps stack).
14541        Instead, during CLONE, if the 0-referenced SV has SvREFCNT_inc() and
14542        then SvREFCNT_dec(), it will be cleaned up (and added to the free list)
14543        before the walk of unreferenced happens and a reference to that is SV
14544        added to the temps stack. At which point we have the same SV considered
14545        to be in use, and free to be re-used. Not good.
14546     */
14547     if (dstr && !(param->flags & CLONEf_COPY_STACKS) && !SvREFCNT(dstr)) {
14548         assert(param->unreferenced);
14549         av_push(param->unreferenced, SvREFCNT_inc(dstr));
14550     }
14551
14552     return dstr;
14553 }
14554
14555 /* duplicate a context */
14556
14557 PERL_CONTEXT *
14558 Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
14559 {
14560     PERL_CONTEXT *ncxs;
14561
14562     PERL_ARGS_ASSERT_CX_DUP;
14563
14564     if (!cxs)
14565         return (PERL_CONTEXT*)NULL;
14566
14567     /* look for it in the table first */
14568     ncxs = (PERL_CONTEXT*)ptr_table_fetch(PL_ptr_table, cxs);
14569     if (ncxs)
14570         return ncxs;
14571
14572     /* create anew and remember what it is */
14573     Newx(ncxs, max + 1, PERL_CONTEXT);
14574     ptr_table_store(PL_ptr_table, cxs, ncxs);
14575     Copy(cxs, ncxs, max + 1, PERL_CONTEXT);
14576
14577     while (ix >= 0) {
14578         PERL_CONTEXT * const ncx = &ncxs[ix];
14579         if (CxTYPE(ncx) == CXt_SUBST) {
14580             Perl_croak(aTHX_ "Cloning substitution context is unimplemented");
14581         }
14582         else {
14583             ncx->blk_oldcop = (COP*)any_dup(ncx->blk_oldcop, param->proto_perl);
14584             switch (CxTYPE(ncx)) {
14585             case CXt_SUB:
14586                 ncx->blk_sub.cv         = cv_dup_inc(ncx->blk_sub.cv, param);
14587                 if(CxHASARGS(ncx)){
14588                     ncx->blk_sub.savearray = av_dup_inc(ncx->blk_sub.savearray,param);
14589                 } else {
14590                     ncx->blk_sub.savearray = NULL;
14591                 }
14592                 ncx->blk_sub.prevcomppad = (PAD*)ptr_table_fetch(PL_ptr_table,
14593                                            ncx->blk_sub.prevcomppad);
14594                 break;
14595             case CXt_EVAL:
14596                 ncx->blk_eval.old_namesv = sv_dup_inc(ncx->blk_eval.old_namesv,
14597                                                       param);
14598                 /* XXX should this sv_dup_inc? Or only if CxEVAL_TXT_REFCNTED ???? */
14599                 ncx->blk_eval.cur_text  = sv_dup(ncx->blk_eval.cur_text, param);
14600                 ncx->blk_eval.cv = cv_dup(ncx->blk_eval.cv, param);
14601                 /* XXX what to do with cur_top_env ???? */
14602                 break;
14603             case CXt_LOOP_LAZYSV:
14604                 ncx->blk_loop.state_u.lazysv.end
14605                     = sv_dup_inc(ncx->blk_loop.state_u.lazysv.end, param);
14606                 /* Fallthrough: duplicate lazysv.cur by using the ary.ary
14607                    duplication code instead.
14608                    We are taking advantage of (1) av_dup_inc and sv_dup_inc
14609                    actually being the same function, and (2) order
14610                    equivalence of the two unions.
14611                    We can assert the later [but only at run time :-(]  */
14612                 assert ((void *) &ncx->blk_loop.state_u.ary.ary ==
14613                         (void *) &ncx->blk_loop.state_u.lazysv.cur);
14614                 /* FALLTHROUGH */
14615             case CXt_LOOP_ARY:
14616                 ncx->blk_loop.state_u.ary.ary
14617                     = av_dup_inc(ncx->blk_loop.state_u.ary.ary, param);
14618                 /* FALLTHROUGH */
14619             case CXt_LOOP_LIST:
14620             case CXt_LOOP_LAZYIV:
14621                 /* code common to all 'for' CXt_LOOP_* types */
14622                 ncx->blk_loop.itersave =
14623                                     sv_dup_inc(ncx->blk_loop.itersave, param);
14624                 if (CxPADLOOP(ncx)) {
14625                     PADOFFSET off = ncx->blk_loop.itervar_u.svp
14626                                     - &CX_CURPAD_SV(ncx->blk_loop, 0);
14627                     ncx->blk_loop.oldcomppad =
14628                                     (PAD*)ptr_table_fetch(PL_ptr_table,
14629                                                 ncx->blk_loop.oldcomppad);
14630                     ncx->blk_loop.itervar_u.svp =
14631                                     &CX_CURPAD_SV(ncx->blk_loop, off);
14632                 }
14633                 else {
14634                     /* this copies the GV if CXp_FOR_GV, or the SV for an
14635                      * alias (for \$x (...)) - relies on gv_dup being the
14636                      * same as sv_dup */
14637                     ncx->blk_loop.itervar_u.gv
14638                         = gv_dup((const GV *)ncx->blk_loop.itervar_u.gv,
14639                                     param);
14640                 }
14641                 break;
14642             case CXt_LOOP_PLAIN:
14643                 break;
14644             case CXt_FORMAT:
14645                 ncx->blk_format.prevcomppad =
14646                         (PAD*)ptr_table_fetch(PL_ptr_table,
14647                                            ncx->blk_format.prevcomppad);
14648                 ncx->blk_format.cv      = cv_dup_inc(ncx->blk_format.cv, param);
14649                 ncx->blk_format.gv      = gv_dup(ncx->blk_format.gv, param);
14650                 ncx->blk_format.dfoutgv = gv_dup_inc(ncx->blk_format.dfoutgv,
14651                                                      param);
14652                 break;
14653             case CXt_GIVEN:
14654                 ncx->blk_givwhen.defsv_save =
14655                                 sv_dup_inc(ncx->blk_givwhen.defsv_save, param);
14656                 break;
14657             case CXt_BLOCK:
14658             case CXt_NULL:
14659             case CXt_WHEN:
14660                 break;
14661             }
14662         }
14663         --ix;
14664     }
14665     return ncxs;
14666 }
14667
14668 /* duplicate a stack info structure */
14669
14670 PERL_SI *
14671 Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
14672 {
14673     PERL_SI *nsi;
14674
14675     PERL_ARGS_ASSERT_SI_DUP;
14676
14677     if (!si)
14678         return (PERL_SI*)NULL;
14679
14680     /* look for it in the table first */
14681     nsi = (PERL_SI*)ptr_table_fetch(PL_ptr_table, si);
14682     if (nsi)
14683         return nsi;
14684
14685     /* create anew and remember what it is */
14686     Newx(nsi, 1, PERL_SI);
14687     ptr_table_store(PL_ptr_table, si, nsi);
14688
14689     nsi->si_stack       = av_dup_inc(si->si_stack, param);
14690     nsi->si_cxix        = si->si_cxix;
14691     nsi->si_cxsubix     = si->si_cxsubix;
14692     nsi->si_cxmax       = si->si_cxmax;
14693     nsi->si_cxstack     = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
14694     nsi->si_type        = si->si_type;
14695     nsi->si_prev        = si_dup(si->si_prev, param);
14696     nsi->si_next        = si_dup(si->si_next, param);
14697     nsi->si_markoff     = si->si_markoff;
14698 #if defined DEBUGGING && !defined DEBUGGING_RE_ONLY
14699     nsi->si_stack_hwm   = 0;
14700 #endif
14701
14702     return nsi;
14703 }
14704
14705 #define POPINT(ss,ix)   ((ss)[--(ix)].any_i32)
14706 #define TOPINT(ss,ix)   ((ss)[ix].any_i32)
14707 #define POPLONG(ss,ix)  ((ss)[--(ix)].any_long)
14708 #define TOPLONG(ss,ix)  ((ss)[ix].any_long)
14709 #define POPIV(ss,ix)    ((ss)[--(ix)].any_iv)
14710 #define TOPIV(ss,ix)    ((ss)[ix].any_iv)
14711 #define POPUV(ss,ix)    ((ss)[--(ix)].any_uv)
14712 #define TOPUV(ss,ix)    ((ss)[ix].any_uv)
14713 #define POPBOOL(ss,ix)  ((ss)[--(ix)].any_bool)
14714 #define TOPBOOL(ss,ix)  ((ss)[ix].any_bool)
14715 #define POPPTR(ss,ix)   ((ss)[--(ix)].any_ptr)
14716 #define TOPPTR(ss,ix)   ((ss)[ix].any_ptr)
14717 #define POPDPTR(ss,ix)  ((ss)[--(ix)].any_dptr)
14718 #define TOPDPTR(ss,ix)  ((ss)[ix].any_dptr)
14719 #define POPDXPTR(ss,ix) ((ss)[--(ix)].any_dxptr)
14720 #define TOPDXPTR(ss,ix) ((ss)[ix].any_dxptr)
14721
14722 /* XXXXX todo */
14723 #define pv_dup_inc(p)   SAVEPV(p)
14724 #define pv_dup(p)       SAVEPV(p)
14725 #define svp_dup_inc(p,pp)       any_dup(p,pp)
14726
14727 /* map any object to the new equivent - either something in the
14728  * ptr table, or something in the interpreter structure
14729  */
14730
14731 void *
14732 Perl_any_dup(pTHX_ void *v, const PerlInterpreter *proto_perl)
14733 {
14734     void *ret;
14735
14736     PERL_ARGS_ASSERT_ANY_DUP;
14737
14738     if (!v)
14739         return (void*)NULL;
14740
14741     /* look for it in the table first */
14742     ret = ptr_table_fetch(PL_ptr_table, v);
14743     if (ret)
14744         return ret;
14745
14746     /* see if it is part of the interpreter structure */
14747     if (v >= (void*)proto_perl && v < (void*)(proto_perl+1))
14748         ret = (void*)(((char*)aTHX) + (((char*)v) - (char*)proto_perl));
14749     else {
14750         ret = v;
14751     }
14752
14753     return ret;
14754 }
14755
14756 /* duplicate the save stack */
14757
14758 ANY *
14759 Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl, CLONE_PARAMS* param)
14760 {
14761     ANY * const ss      = proto_perl->Isavestack;
14762     const I32 max       = proto_perl->Isavestack_max + SS_MAXPUSH;
14763     I32 ix              = proto_perl->Isavestack_ix;
14764     ANY *nss;
14765     const SV *sv;
14766     const GV *gv;
14767     const AV *av;
14768     const HV *hv;
14769     void* ptr;
14770     int intval;
14771     long longval;
14772     GP *gp;
14773     IV iv;
14774     I32 i;
14775     char *c = NULL;
14776     void (*dptr) (void*);
14777     void (*dxptr) (pTHX_ void*);
14778
14779     PERL_ARGS_ASSERT_SS_DUP;
14780
14781     Newx(nss, max, ANY);
14782
14783     while (ix > 0) {
14784         const UV uv = POPUV(ss,ix);
14785         const U8 type = (U8)uv & SAVE_MASK;
14786
14787         TOPUV(nss,ix) = uv;
14788         switch (type) {
14789         case SAVEt_CLEARSV:
14790         case SAVEt_CLEARPADRANGE:
14791             break;
14792         case SAVEt_HELEM:               /* hash element */
14793         case SAVEt_SV:                  /* scalar reference */
14794             sv = (const SV *)POPPTR(ss,ix);
14795             TOPPTR(nss,ix) = SvREFCNT_inc(sv_dup_inc(sv, param));
14796             /* FALLTHROUGH */
14797         case SAVEt_ITEM:                        /* normal string */
14798         case SAVEt_GVSV:                        /* scalar slot in GV */
14799             sv = (const SV *)POPPTR(ss,ix);
14800             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14801             if (type == SAVEt_SV)
14802                 break;
14803             /* FALLTHROUGH */
14804         case SAVEt_FREESV:
14805         case SAVEt_MORTALIZESV:
14806         case SAVEt_READONLY_OFF:
14807             sv = (const SV *)POPPTR(ss,ix);
14808             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14809             break;
14810         case SAVEt_FREEPADNAME:
14811             ptr = POPPTR(ss,ix);
14812             TOPPTR(nss,ix) = padname_dup((PADNAME *)ptr, param);
14813             PadnameREFCNT((PADNAME *)TOPPTR(nss,ix))++;
14814             break;
14815         case SAVEt_SHARED_PVREF:                /* char* in shared space */
14816             c = (char*)POPPTR(ss,ix);
14817             TOPPTR(nss,ix) = savesharedpv(c);
14818             ptr = POPPTR(ss,ix);
14819             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14820             break;
14821         case SAVEt_GENERIC_SVREF:               /* generic sv */
14822         case SAVEt_SVREF:                       /* scalar reference */
14823             sv = (const SV *)POPPTR(ss,ix);
14824             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14825             if (type == SAVEt_SVREF)
14826                 SvREFCNT_inc_simple_void((SV *)TOPPTR(nss,ix));
14827             ptr = POPPTR(ss,ix);
14828             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
14829             break;
14830         case SAVEt_GVSLOT:              /* any slot in GV */
14831             sv = (const SV *)POPPTR(ss,ix);
14832             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14833             ptr = POPPTR(ss,ix);
14834             TOPPTR(nss,ix) = svp_dup_inc((SV**)ptr, proto_perl);/* XXXXX */
14835             sv = (const SV *)POPPTR(ss,ix);
14836             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14837             break;
14838         case SAVEt_HV:                          /* hash reference */
14839         case SAVEt_AV:                          /* array reference */
14840             sv = (const SV *) POPPTR(ss,ix);
14841             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
14842             /* FALLTHROUGH */
14843         case SAVEt_COMPPAD:
14844         case SAVEt_NSTAB:
14845             sv = (const SV *) POPPTR(ss,ix);
14846             TOPPTR(nss,ix) = sv_dup(sv, param);
14847             break;
14848         case SAVEt_INT:                         /* int reference */
14849             ptr = POPPTR(ss,ix);
14850             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14851             intval = (int)POPINT(ss,ix);
14852             TOPINT(nss,ix) = intval;
14853             break;
14854         case SAVEt_LONG:                        /* long reference */
14855             ptr = POPPTR(ss,ix);
14856             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14857             longval = (long)POPLONG(ss,ix);
14858             TOPLONG(nss,ix) = longval;
14859             break;
14860         case SAVEt_I32:                         /* I32 reference */
14861             ptr = POPPTR(ss,ix);
14862             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14863             i = POPINT(ss,ix);
14864             TOPINT(nss,ix) = i;
14865             break;
14866         case SAVEt_IV:                          /* IV reference */
14867         case SAVEt_STRLEN:                      /* STRLEN/size_t ref */
14868             ptr = POPPTR(ss,ix);
14869             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14870             iv = POPIV(ss,ix);
14871             TOPIV(nss,ix) = iv;
14872             break;
14873         case SAVEt_TMPSFLOOR:
14874             iv = POPIV(ss,ix);
14875             TOPIV(nss,ix) = iv;
14876             break;
14877         case SAVEt_HPTR:                        /* HV* reference */
14878         case SAVEt_APTR:                        /* AV* reference */
14879         case SAVEt_SPTR:                        /* SV* reference */
14880             ptr = POPPTR(ss,ix);
14881             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14882             sv = (const SV *)POPPTR(ss,ix);
14883             TOPPTR(nss,ix) = sv_dup(sv, param);
14884             break;
14885         case SAVEt_VPTR:                        /* random* reference */
14886             ptr = POPPTR(ss,ix);
14887             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14888             /* FALLTHROUGH */
14889         case SAVEt_INT_SMALL:
14890         case SAVEt_I32_SMALL:
14891         case SAVEt_I16:                         /* I16 reference */
14892         case SAVEt_I8:                          /* I8 reference */
14893         case SAVEt_BOOL:
14894             ptr = POPPTR(ss,ix);
14895             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14896             break;
14897         case SAVEt_GENERIC_PVREF:               /* generic char* */
14898         case SAVEt_PPTR:                        /* char* reference */
14899             ptr = POPPTR(ss,ix);
14900             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
14901             c = (char*)POPPTR(ss,ix);
14902             TOPPTR(nss,ix) = pv_dup(c);
14903             break;
14904         case SAVEt_GP:                          /* scalar reference */
14905             gp = (GP*)POPPTR(ss,ix);
14906             TOPPTR(nss,ix) = gp = gp_dup(gp, param);
14907             (void)GpREFCNT_inc(gp);
14908             gv = (const GV *)POPPTR(ss,ix);
14909             TOPPTR(nss,ix) = gv_dup_inc(gv, param);
14910             break;
14911         case SAVEt_FREEOP:
14912             ptr = POPPTR(ss,ix);
14913             if (ptr && (((OP*)ptr)->op_private & OPpREFCOUNTED)) {
14914                 /* these are assumed to be refcounted properly */
14915                 OP *o;
14916                 switch (((OP*)ptr)->op_type) {
14917                 case OP_LEAVESUB:
14918                 case OP_LEAVESUBLV:
14919                 case OP_LEAVEEVAL:
14920                 case OP_LEAVE:
14921                 case OP_SCOPE:
14922                 case OP_LEAVEWRITE:
14923                     TOPPTR(nss,ix) = ptr;
14924                     o = (OP*)ptr;
14925                     OP_REFCNT_LOCK;
14926                     (void) OpREFCNT_inc(o);
14927                     OP_REFCNT_UNLOCK;
14928                     break;
14929                 default:
14930                     TOPPTR(nss,ix) = NULL;
14931                     break;
14932                 }
14933             }
14934             else
14935                 TOPPTR(nss,ix) = NULL;
14936             break;
14937         case SAVEt_FREECOPHH:
14938             ptr = POPPTR(ss,ix);
14939             TOPPTR(nss,ix) = cophh_copy((COPHH *)ptr);
14940             break;
14941         case SAVEt_ADELETE:
14942             av = (const AV *)POPPTR(ss,ix);
14943             TOPPTR(nss,ix) = av_dup_inc(av, param);
14944             i = POPINT(ss,ix);
14945             TOPINT(nss,ix) = i;
14946             break;
14947         case SAVEt_DELETE:
14948             hv = (const HV *)POPPTR(ss,ix);
14949             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
14950             i = POPINT(ss,ix);
14951             TOPINT(nss,ix) = i;
14952             /* FALLTHROUGH */
14953         case SAVEt_FREEPV:
14954             c = (char*)POPPTR(ss,ix);
14955             TOPPTR(nss,ix) = pv_dup_inc(c);
14956             break;
14957         case SAVEt_STACK_POS:           /* Position on Perl stack */
14958             i = POPINT(ss,ix);
14959             TOPINT(nss,ix) = i;
14960             break;
14961         case SAVEt_DESTRUCTOR:
14962             ptr = POPPTR(ss,ix);
14963             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
14964             dptr = POPDPTR(ss,ix);
14965             TOPDPTR(nss,ix) = DPTR2FPTR(void (*)(void*),
14966                                         any_dup(FPTR2DPTR(void *, dptr),
14967                                                 proto_perl));
14968             break;
14969         case SAVEt_DESTRUCTOR_X:
14970             ptr = POPPTR(ss,ix);
14971             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);  /* XXX quite arbitrary */
14972             dxptr = POPDXPTR(ss,ix);
14973             TOPDXPTR(nss,ix) = DPTR2FPTR(void (*)(pTHX_ void*),
14974                                          any_dup(FPTR2DPTR(void *, dxptr),
14975                                                  proto_perl));
14976             break;
14977         case SAVEt_REGCONTEXT:
14978         case SAVEt_ALLOC:
14979             ix -= uv >> SAVE_TIGHT_SHIFT;
14980             break;
14981         case SAVEt_AELEM:               /* array element */
14982             sv = (const SV *)POPPTR(ss,ix);
14983             TOPPTR(nss,ix) = SvREFCNT_inc(sv_dup_inc(sv, param));
14984             iv = POPIV(ss,ix);
14985             TOPIV(nss,ix) = iv;
14986             av = (const AV *)POPPTR(ss,ix);
14987             TOPPTR(nss,ix) = av_dup_inc(av, param);
14988             break;
14989         case SAVEt_OP:
14990             ptr = POPPTR(ss,ix);
14991             TOPPTR(nss,ix) = ptr;
14992             break;
14993         case SAVEt_HINTS_HH:
14994             hv = (const HV *)POPPTR(ss,ix);
14995             TOPPTR(nss,ix) = hv_dup_inc(hv, param);
14996             /* FALLTHROUGH */
14997         case SAVEt_HINTS:
14998             ptr = POPPTR(ss,ix);
14999             ptr = cophh_copy((COPHH*)ptr);
15000             TOPPTR(nss,ix) = ptr;
15001             i = POPINT(ss,ix);
15002             TOPINT(nss,ix) = i;
15003             break;
15004         case SAVEt_PADSV_AND_MORTALIZE:
15005             longval = (long)POPLONG(ss,ix);
15006             TOPLONG(nss,ix) = longval;
15007             ptr = POPPTR(ss,ix);
15008             TOPPTR(nss,ix) = any_dup(ptr, proto_perl);
15009             sv = (const SV *)POPPTR(ss,ix);
15010             TOPPTR(nss,ix) = sv_dup_inc(sv, param);
15011             break;
15012         case SAVEt_SET_SVFLAGS:
15013             i = POPINT(ss,ix);
15014             TOPINT(nss,ix) = i;
15015             i = POPINT(ss,ix);
15016             TOPINT(nss,ix) = i;
15017             sv = (const SV *)POPPTR(ss,ix);
15018             TOPPTR(nss,ix) = sv_dup(sv, param);
15019             break;
15020         case SAVEt_COMPILE_WARNINGS:
15021             ptr = POPPTR(ss,ix);
15022             TOPPTR(nss,ix) = DUP_WARNINGS((STRLEN*)ptr);
15023             break;
15024         case SAVEt_PARSER:
15025             ptr = POPPTR(ss,ix);
15026             TOPPTR(nss,ix) = parser_dup((const yy_parser*)ptr, param);
15027             break;
15028         default:
15029             Perl_croak(aTHX_
15030                        "panic: ss_dup inconsistency (%" IVdf ")", (IV) type);
15031         }
15032     }
15033
15034     return nss;
15035 }
15036
15037
15038 /* if sv is a stash, call $class->CLONE_SKIP(), and set the SVphv_CLONEABLE
15039  * flag to the result. This is done for each stash before cloning starts,
15040  * so we know which stashes want their objects cloned */
15041
15042 static void
15043 do_mark_cloneable_stash(pTHX_ SV *const sv)
15044 {
15045     const HEK * const hvname = HvNAME_HEK((const HV *)sv);
15046     if (hvname) {
15047         GV* const cloner = gv_fetchmethod_autoload(MUTABLE_HV(sv), "CLONE_SKIP", 0);
15048         SvFLAGS(sv) |= SVphv_CLONEABLE; /* clone objects by default */
15049         if (cloner && GvCV(cloner)) {
15050             dSP;
15051             UV status;
15052
15053             ENTER;
15054             SAVETMPS;
15055             PUSHMARK(SP);
15056             mXPUSHs(newSVhek(hvname));
15057             PUTBACK;
15058             call_sv(MUTABLE_SV(GvCV(cloner)), G_SCALAR);
15059             SPAGAIN;
15060             status = POPu;
15061             PUTBACK;
15062             FREETMPS;
15063             LEAVE;
15064             if (status)
15065                 SvFLAGS(sv) &= ~SVphv_CLONEABLE;
15066         }
15067     }
15068 }
15069
15070
15071
15072 /*
15073 =for apidoc perl_clone
15074
15075 Create and return a new interpreter by cloning the current one.
15076
15077 C<perl_clone> takes these flags as parameters:
15078
15079 C<CLONEf_COPY_STACKS> - is used to, well, copy the stacks also,
15080 without it we only clone the data and zero the stacks,
15081 with it we copy the stacks and the new perl interpreter is
15082 ready to run at the exact same point as the previous one.
15083 The pseudo-fork code uses C<COPY_STACKS> while the
15084 threads->create doesn't.
15085
15086 C<CLONEf_KEEP_PTR_TABLE> -
15087 C<perl_clone> keeps a ptr_table with the pointer of the old
15088 variable as a key and the new variable as a value,
15089 this allows it to check if something has been cloned and not
15090 clone it again, but rather just use the value and increase the
15091 refcount.
15092 If C<KEEP_PTR_TABLE> is not set then C<perl_clone> will kill the ptr_table
15093 using the function S<C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>>.
15094 A reason to keep it around is if you want to dup some of your own
15095 variables which are outside the graph that perl scans.
15096
15097 C<CLONEf_CLONE_HOST> -
15098 This is a win32 thing, it is ignored on unix, it tells perl's
15099 win32host code (which is c++) to clone itself, this is needed on
15100 win32 if you want to run two threads at the same time,
15101 if you just want to do some stuff in a separate perl interpreter
15102 and then throw it away and return to the original one,
15103 you don't need to do anything.
15104
15105 =cut
15106 */
15107
15108 /* XXX the above needs expanding by someone who actually understands it ! */
15109 EXTERN_C PerlInterpreter *
15110 perl_clone_host(PerlInterpreter* proto_perl, UV flags);
15111
15112 PerlInterpreter *
15113 perl_clone(PerlInterpreter *proto_perl, UV flags)
15114 {
15115 #ifdef PERL_IMPLICIT_SYS
15116
15117     PERL_ARGS_ASSERT_PERL_CLONE;
15118
15119    /* perlhost.h so we need to call into it
15120    to clone the host, CPerlHost should have a c interface, sky */
15121
15122 #ifndef __amigaos4__
15123    if (flags & CLONEf_CLONE_HOST) {
15124        return perl_clone_host(proto_perl,flags);
15125    }
15126 #endif
15127    return perl_clone_using(proto_perl, flags,
15128                             proto_perl->IMem,
15129                             proto_perl->IMemShared,
15130                             proto_perl->IMemParse,
15131                             proto_perl->IEnv,
15132                             proto_perl->IStdIO,
15133                             proto_perl->ILIO,
15134                             proto_perl->IDir,
15135                             proto_perl->ISock,
15136                             proto_perl->IProc);
15137 }
15138
15139 PerlInterpreter *
15140 perl_clone_using(PerlInterpreter *proto_perl, UV flags,
15141                  struct IPerlMem* ipM, struct IPerlMem* ipMS,
15142                  struct IPerlMem* ipMP, struct IPerlEnv* ipE,
15143                  struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
15144                  struct IPerlDir* ipD, struct IPerlSock* ipS,
15145                  struct IPerlProc* ipP)
15146 {
15147     /* XXX many of the string copies here can be optimized if they're
15148      * constants; they need to be allocated as common memory and just
15149      * their pointers copied. */
15150
15151     IV i;
15152     CLONE_PARAMS clone_params;
15153     CLONE_PARAMS* const param = &clone_params;
15154
15155     PerlInterpreter * const my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
15156
15157     PERL_ARGS_ASSERT_PERL_CLONE_USING;
15158 #else           /* !PERL_IMPLICIT_SYS */
15159     IV i;
15160     CLONE_PARAMS clone_params;
15161     CLONE_PARAMS* param = &clone_params;
15162     PerlInterpreter * const my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
15163
15164     PERL_ARGS_ASSERT_PERL_CLONE;
15165 #endif          /* PERL_IMPLICIT_SYS */
15166
15167     /* for each stash, determine whether its objects should be cloned */
15168     S_visit(proto_perl, do_mark_cloneable_stash, SVt_PVHV, SVTYPEMASK);
15169     PERL_SET_THX(my_perl);
15170
15171 #ifdef DEBUGGING
15172     PoisonNew(my_perl, 1, PerlInterpreter);
15173     PL_op = NULL;
15174     PL_curcop = NULL;
15175     PL_defstash = NULL; /* may be used by perl malloc() */
15176     PL_markstack = 0;
15177     PL_scopestack = 0;
15178     PL_scopestack_name = 0;
15179     PL_savestack = 0;
15180     PL_savestack_ix = 0;
15181     PL_savestack_max = -1;
15182     PL_sig_pending = 0;
15183     PL_parser = NULL;
15184     Zero(&PL_debug_pad, 1, struct perl_debug_pad);
15185     Zero(&PL_padname_undef, 1, PADNAME);
15186     Zero(&PL_padname_const, 1, PADNAME);
15187 #  ifdef DEBUG_LEAKING_SCALARS
15188     PL_sv_serial = (((UV)my_perl >> 2) & 0xfff) * 1000000;
15189 #  endif
15190 #  ifdef PERL_TRACE_OPS
15191     Zero(PL_op_exec_cnt, OP_max+2, UV);
15192 #  endif
15193 #else   /* !DEBUGGING */
15194     Zero(my_perl, 1, PerlInterpreter);
15195 #endif  /* DEBUGGING */
15196
15197 #ifdef PERL_IMPLICIT_SYS
15198     /* host pointers */
15199     PL_Mem              = ipM;
15200     PL_MemShared        = ipMS;
15201     PL_MemParse         = ipMP;
15202     PL_Env              = ipE;
15203     PL_StdIO            = ipStd;
15204     PL_LIO              = ipLIO;
15205     PL_Dir              = ipD;
15206     PL_Sock             = ipS;
15207     PL_Proc             = ipP;
15208 #endif          /* PERL_IMPLICIT_SYS */
15209
15210
15211     param->flags = flags;
15212     /* Nothing in the core code uses this, but we make it available to
15213        extensions (using mg_dup).  */
15214     param->proto_perl = proto_perl;
15215     /* Likely nothing will use this, but it is initialised to be consistent
15216        with Perl_clone_params_new().  */
15217     param->new_perl = my_perl;
15218     param->unreferenced = NULL;
15219
15220
15221     INIT_TRACK_MEMPOOL(my_perl->Imemory_debug_header, my_perl);
15222
15223     PL_body_arenas = NULL;
15224     Zero(&PL_body_roots, 1, PL_body_roots);
15225     
15226     PL_sv_count         = 0;
15227     PL_sv_root          = NULL;
15228     PL_sv_arenaroot     = NULL;
15229
15230     PL_debug            = proto_perl->Idebug;
15231
15232     /* dbargs array probably holds garbage */
15233     PL_dbargs           = NULL;
15234
15235     PL_compiling = proto_perl->Icompiling;
15236
15237     /* pseudo environmental stuff */
15238     PL_origargc         = proto_perl->Iorigargc;
15239     PL_origargv         = proto_perl->Iorigargv;
15240
15241 #ifndef NO_TAINT_SUPPORT
15242     /* Set tainting stuff before PerlIO_debug can possibly get called */
15243     PL_tainting         = proto_perl->Itainting;
15244     PL_taint_warn       = proto_perl->Itaint_warn;
15245 #else
15246     PL_tainting         = FALSE;
15247     PL_taint_warn       = FALSE;
15248 #endif
15249
15250     PL_minus_c          = proto_perl->Iminus_c;
15251
15252     PL_localpatches     = proto_perl->Ilocalpatches;
15253     PL_splitstr         = proto_perl->Isplitstr;
15254     PL_minus_n          = proto_perl->Iminus_n;
15255     PL_minus_p          = proto_perl->Iminus_p;
15256     PL_minus_l          = proto_perl->Iminus_l;
15257     PL_minus_a          = proto_perl->Iminus_a;
15258     PL_minus_E          = proto_perl->Iminus_E;
15259     PL_minus_F          = proto_perl->Iminus_F;
15260     PL_doswitches       = proto_perl->Idoswitches;
15261     PL_dowarn           = proto_perl->Idowarn;
15262 #ifdef PERL_SAWAMPERSAND
15263     PL_sawampersand     = proto_perl->Isawampersand;
15264 #endif
15265     PL_unsafe           = proto_perl->Iunsafe;
15266     PL_perldb           = proto_perl->Iperldb;
15267     PL_perl_destruct_level = proto_perl->Iperl_destruct_level;
15268     PL_exit_flags       = proto_perl->Iexit_flags;
15269
15270     /* XXX time(&PL_basetime) when asked for? */
15271     PL_basetime         = proto_perl->Ibasetime;
15272
15273     PL_maxsysfd         = proto_perl->Imaxsysfd;
15274     PL_statusvalue      = proto_perl->Istatusvalue;
15275 #ifdef __VMS
15276     PL_statusvalue_vms  = proto_perl->Istatusvalue_vms;
15277 #else
15278     PL_statusvalue_posix = proto_perl->Istatusvalue_posix;
15279 #endif
15280
15281     /* RE engine related */
15282     PL_regmatch_slab    = NULL;
15283     PL_reg_curpm        = NULL;
15284
15285     PL_sub_generation   = proto_perl->Isub_generation;
15286
15287     /* funky return mechanisms */
15288     PL_forkprocess      = proto_perl->Iforkprocess;
15289
15290     /* internal state */
15291     PL_main_start       = proto_perl->Imain_start;
15292     PL_eval_root        = proto_perl->Ieval_root;
15293     PL_eval_start       = proto_perl->Ieval_start;
15294
15295     PL_filemode         = proto_perl->Ifilemode;
15296     PL_lastfd           = proto_perl->Ilastfd;
15297     PL_oldname          = proto_perl->Ioldname;         /* XXX not quite right */
15298     PL_gensym           = proto_perl->Igensym;
15299
15300     PL_laststatval      = proto_perl->Ilaststatval;
15301     PL_laststype        = proto_perl->Ilaststype;
15302     PL_mess_sv          = NULL;
15303
15304     PL_profiledata      = NULL;
15305
15306     PL_generation       = proto_perl->Igeneration;
15307
15308     PL_in_clean_objs    = proto_perl->Iin_clean_objs;
15309     PL_in_clean_all     = proto_perl->Iin_clean_all;
15310
15311     PL_delaymagic_uid   = proto_perl->Idelaymagic_uid;
15312     PL_delaymagic_euid  = proto_perl->Idelaymagic_euid;
15313     PL_delaymagic_gid   = proto_perl->Idelaymagic_gid;
15314     PL_delaymagic_egid  = proto_perl->Idelaymagic_egid;
15315     PL_nomemok          = proto_perl->Inomemok;
15316     PL_an               = proto_perl->Ian;
15317     PL_evalseq          = proto_perl->Ievalseq;
15318     PL_origenviron      = proto_perl->Iorigenviron;     /* XXX not quite right */
15319     PL_origalen         = proto_perl->Iorigalen;
15320
15321     PL_sighandlerp      = proto_perl->Isighandlerp;
15322     PL_sighandler1p     = proto_perl->Isighandler1p;
15323     PL_sighandler3p     = proto_perl->Isighandler3p;
15324
15325     PL_runops           = proto_perl->Irunops;
15326
15327     PL_subline          = proto_perl->Isubline;
15328
15329     PL_cv_has_eval      = proto_perl->Icv_has_eval;
15330
15331 #ifdef USE_LOCALE_COLLATE
15332     PL_collation_ix     = proto_perl->Icollation_ix;
15333     PL_collation_standard       = proto_perl->Icollation_standard;
15334     PL_collxfrm_base    = proto_perl->Icollxfrm_base;
15335     PL_collxfrm_mult    = proto_perl->Icollxfrm_mult;
15336     PL_strxfrm_max_cp   = proto_perl->Istrxfrm_max_cp;
15337 #endif /* USE_LOCALE_COLLATE */
15338
15339 #ifdef USE_LOCALE_NUMERIC
15340     PL_numeric_standard = proto_perl->Inumeric_standard;
15341     PL_numeric_underlying       = proto_perl->Inumeric_underlying;
15342     PL_numeric_underlying_is_standard   = proto_perl->Inumeric_underlying_is_standard;
15343 #endif /* !USE_LOCALE_NUMERIC */
15344
15345     /* Did the locale setup indicate UTF-8? */
15346     PL_utf8locale       = proto_perl->Iutf8locale;
15347     PL_in_utf8_CTYPE_locale = proto_perl->Iin_utf8_CTYPE_locale;
15348     PL_in_utf8_COLLATE_locale = proto_perl->Iin_utf8_COLLATE_locale;
15349     my_strlcpy(PL_locale_utf8ness, proto_perl->Ilocale_utf8ness, sizeof(PL_locale_utf8ness));
15350 #if defined(USE_ITHREADS) && ! defined(USE_THREAD_SAFE_LOCALE)
15351     PL_lc_numeric_mutex_depth = 0;
15352 #endif
15353     /* Unicode features (see perlrun/-C) */
15354     PL_unicode          = proto_perl->Iunicode;
15355
15356     /* Pre-5.8 signals control */
15357     PL_signals          = proto_perl->Isignals;
15358
15359     /* times() ticks per second */
15360     PL_clocktick        = proto_perl->Iclocktick;
15361
15362     /* Recursion stopper for PerlIO_find_layer */
15363     PL_in_load_module   = proto_perl->Iin_load_module;
15364
15365     /* Not really needed/useful since the reenrant_retint is "volatile",
15366      * but do it for consistency's sake. */
15367     PL_reentrant_retint = proto_perl->Ireentrant_retint;
15368
15369     /* Hooks to shared SVs and locks. */
15370     PL_sharehook        = proto_perl->Isharehook;
15371     PL_lockhook         = proto_perl->Ilockhook;
15372     PL_unlockhook       = proto_perl->Iunlockhook;
15373     PL_threadhook       = proto_perl->Ithreadhook;
15374     PL_destroyhook      = proto_perl->Idestroyhook;
15375     PL_signalhook       = proto_perl->Isignalhook;
15376
15377     PL_globhook         = proto_perl->Iglobhook;
15378
15379     PL_srand_called     = proto_perl->Isrand_called;
15380     Copy(&(proto_perl->Irandom_state), &PL_random_state, 1, PL_RANDOM_STATE_TYPE);
15381
15382     if (flags & CLONEf_COPY_STACKS) {
15383         /* next allocation will be PL_tmps_stack[PL_tmps_ix+1] */
15384         PL_tmps_ix              = proto_perl->Itmps_ix;
15385         PL_tmps_max             = proto_perl->Itmps_max;
15386         PL_tmps_floor           = proto_perl->Itmps_floor;
15387
15388         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
15389          * NOTE: unlike the others! */
15390         PL_scopestack_ix        = proto_perl->Iscopestack_ix;
15391         PL_scopestack_max       = proto_perl->Iscopestack_max;
15392
15393         /* next SSPUSHFOO() sets PL_savestack[PL_savestack_ix]
15394          * NOTE: unlike the others! */
15395         PL_savestack_ix         = proto_perl->Isavestack_ix;
15396         PL_savestack_max        = proto_perl->Isavestack_max;
15397     }
15398
15399     PL_start_env        = proto_perl->Istart_env;       /* XXXXXX */
15400     PL_top_env          = &PL_start_env;
15401
15402     PL_op               = proto_perl->Iop;
15403
15404     PL_Sv               = NULL;
15405     PL_Xpv              = (XPV*)NULL;
15406     my_perl->Ina        = proto_perl->Ina;
15407
15408     PL_statcache        = proto_perl->Istatcache;
15409
15410 #ifndef NO_TAINT_SUPPORT
15411     PL_tainted          = proto_perl->Itainted;
15412 #else
15413     PL_tainted          = FALSE;
15414 #endif
15415     PL_curpm            = proto_perl->Icurpm;   /* XXX No PMOP ref count */
15416
15417     PL_chopset          = proto_perl->Ichopset; /* XXX never deallocated */
15418
15419     PL_restartjmpenv    = proto_perl->Irestartjmpenv;
15420     PL_restartop        = proto_perl->Irestartop;
15421     PL_in_eval          = proto_perl->Iin_eval;
15422     PL_delaymagic       = proto_perl->Idelaymagic;
15423     PL_phase            = proto_perl->Iphase;
15424     PL_localizing       = proto_perl->Ilocalizing;
15425
15426     PL_hv_fetch_ent_mh  = NULL;
15427     PL_modcount         = proto_perl->Imodcount;
15428     PL_lastgotoprobe    = NULL;
15429     PL_dumpindent       = proto_perl->Idumpindent;
15430
15431     PL_efloatbuf        = NULL;         /* reinits on demand */
15432     PL_efloatsize       = 0;                    /* reinits on demand */
15433
15434     /* regex stuff */
15435
15436     PL_colorset         = 0;            /* reinits PL_colors[] */
15437     /*PL_colors[6]      = {0,0,0,0,0,0};*/
15438
15439     /* Pluggable optimizer */
15440     PL_peepp            = proto_perl->Ipeepp;
15441     PL_rpeepp           = proto_perl->Irpeepp;
15442     /* op_free() hook */
15443     PL_opfreehook       = proto_perl->Iopfreehook;
15444
15445 #ifdef USE_REENTRANT_API
15446     /* XXX: things like -Dm will segfault here in perlio, but doing
15447      *  PERL_SET_CONTEXT(proto_perl);
15448      * breaks too many other things
15449      */
15450     Perl_reentrant_init(aTHX);
15451 #endif
15452
15453     /* create SV map for pointer relocation */
15454     PL_ptr_table = ptr_table_new();
15455
15456     /* initialize these special pointers as early as possible */
15457     init_constants();
15458     ptr_table_store(PL_ptr_table, &proto_perl->Isv_undef, &PL_sv_undef);
15459     ptr_table_store(PL_ptr_table, &proto_perl->Isv_no, &PL_sv_no);
15460     ptr_table_store(PL_ptr_table, &proto_perl->Isv_zero, &PL_sv_zero);
15461     ptr_table_store(PL_ptr_table, &proto_perl->Isv_yes, &PL_sv_yes);
15462     ptr_table_store(PL_ptr_table, &proto_perl->Ipadname_const,
15463                     &PL_padname_const);
15464
15465     /* create (a non-shared!) shared string table */
15466     PL_strtab           = newHV();
15467     HvSHAREKEYS_off(PL_strtab);
15468     hv_ksplit(PL_strtab, HvTOTALKEYS(proto_perl->Istrtab));
15469     ptr_table_store(PL_ptr_table, proto_perl->Istrtab, PL_strtab);
15470
15471     Zero(PL_sv_consts, SV_CONSTS_COUNT, SV*);
15472
15473     /* This PV will be free'd special way so must set it same way op.c does */
15474     PL_compiling.cop_file    = savesharedpv(PL_compiling.cop_file);
15475     ptr_table_store(PL_ptr_table, proto_perl->Icompiling.cop_file, PL_compiling.cop_file);
15476
15477     ptr_table_store(PL_ptr_table, &proto_perl->Icompiling, &PL_compiling);
15478     PL_compiling.cop_warnings = DUP_WARNINGS(PL_compiling.cop_warnings);
15479     CopHINTHASH_set(&PL_compiling, cophh_copy(CopHINTHASH_get(&PL_compiling)));
15480     PL_curcop           = (COP*)any_dup(proto_perl->Icurcop, proto_perl);
15481
15482     param->stashes      = newAV();  /* Setup array of objects to call clone on */
15483     /* This makes no difference to the implementation, as it always pushes
15484        and shifts pointers to other SVs without changing their reference
15485        count, with the array becoming empty before it is freed. However, it
15486        makes it conceptually clear what is going on, and will avoid some
15487        work inside av.c, filling slots between AvFILL() and AvMAX() with
15488        &PL_sv_undef, and SvREFCNT_dec()ing those.  */
15489     AvREAL_off(param->stashes);
15490
15491     if (!(flags & CLONEf_COPY_STACKS)) {
15492         param->unreferenced = newAV();
15493     }
15494
15495 #ifdef PERLIO_LAYERS
15496     /* Clone PerlIO tables as soon as we can handle general xx_dup() */
15497     PerlIO_clone(aTHX_ proto_perl, param);
15498 #endif
15499
15500     PL_envgv            = gv_dup_inc(proto_perl->Ienvgv, param);
15501     PL_incgv            = gv_dup_inc(proto_perl->Iincgv, param);
15502     PL_hintgv           = gv_dup_inc(proto_perl->Ihintgv, param);
15503     PL_origfilename     = SAVEPV(proto_perl->Iorigfilename);
15504     PL_xsubfilename     = proto_perl->Ixsubfilename;
15505     PL_diehook          = sv_dup_inc(proto_perl->Idiehook, param);
15506     PL_warnhook         = sv_dup_inc(proto_perl->Iwarnhook, param);
15507
15508     /* switches */
15509     PL_patchlevel       = sv_dup_inc(proto_perl->Ipatchlevel, param);
15510     PL_inplace          = SAVEPV(proto_perl->Iinplace);
15511     PL_e_script         = sv_dup_inc(proto_perl->Ie_script, param);
15512
15513     /* magical thingies */
15514
15515     SvPVCLEAR(PERL_DEBUG_PAD(0));        /* For regex debugging. */
15516     SvPVCLEAR(PERL_DEBUG_PAD(1));        /* ext/re needs these */
15517     SvPVCLEAR(PERL_DEBUG_PAD(2));        /* even without DEBUGGING. */
15518
15519    
15520     /* Clone the regex array */
15521     /* ORANGE FIXME for plugins, probably in the SV dup code.
15522        newSViv(PTR2IV(CALLREGDUPE(
15523        INT2PTR(REGEXP *, SvIVX(regex)), param))))
15524     */
15525     PL_regex_padav = av_dup_inc(proto_perl->Iregex_padav, param);
15526     PL_regex_pad = AvARRAY(PL_regex_padav);
15527
15528     PL_stashpadmax      = proto_perl->Istashpadmax;
15529     PL_stashpadix       = proto_perl->Istashpadix ;
15530     Newx(PL_stashpad, PL_stashpadmax, HV *);
15531     {
15532         PADOFFSET o = 0;
15533         for (; o < PL_stashpadmax; ++o)
15534             PL_stashpad[o] = hv_dup(proto_perl->Istashpad[o], param);
15535     }
15536
15537     /* shortcuts to various I/O objects */
15538     PL_ofsgv            = gv_dup_inc(proto_perl->Iofsgv, param);
15539     PL_stdingv          = gv_dup(proto_perl->Istdingv, param);
15540     PL_stderrgv         = gv_dup(proto_perl->Istderrgv, param);
15541     PL_defgv            = gv_dup(proto_perl->Idefgv, param);
15542     PL_argvgv           = gv_dup_inc(proto_perl->Iargvgv, param);
15543     PL_argvoutgv        = gv_dup(proto_perl->Iargvoutgv, param);
15544     PL_argvout_stack    = av_dup_inc(proto_perl->Iargvout_stack, param);
15545
15546     /* shortcuts to regexp stuff */
15547     PL_replgv           = gv_dup_inc(proto_perl->Ireplgv, param);
15548
15549     /* shortcuts to misc objects */
15550     PL_errgv            = gv_dup(proto_perl->Ierrgv, param);
15551
15552     /* shortcuts to debugging objects */
15553     PL_DBgv             = gv_dup_inc(proto_perl->IDBgv, param);
15554     PL_DBline           = gv_dup_inc(proto_perl->IDBline, param);
15555     PL_DBsub            = gv_dup_inc(proto_perl->IDBsub, param);
15556     PL_DBsingle         = sv_dup(proto_perl->IDBsingle, param);
15557     PL_DBtrace          = sv_dup(proto_perl->IDBtrace, param);
15558     PL_DBsignal         = sv_dup(proto_perl->IDBsignal, param);
15559     Copy(proto_perl->IDBcontrol, PL_DBcontrol, DBVARMG_COUNT, IV);
15560
15561     /* symbol tables */
15562     PL_defstash         = hv_dup_inc(proto_perl->Idefstash, param);
15563     PL_curstash         = hv_dup_inc(proto_perl->Icurstash, param);
15564     PL_debstash         = hv_dup(proto_perl->Idebstash, param);
15565     PL_globalstash      = hv_dup(proto_perl->Iglobalstash, param);
15566     PL_curstname        = sv_dup_inc(proto_perl->Icurstname, param);
15567
15568     PL_beginav          = av_dup_inc(proto_perl->Ibeginav, param);
15569     PL_beginav_save     = av_dup_inc(proto_perl->Ibeginav_save, param);
15570     PL_checkav_save     = av_dup_inc(proto_perl->Icheckav_save, param);
15571     PL_unitcheckav      = av_dup_inc(proto_perl->Iunitcheckav, param);
15572     PL_unitcheckav_save = av_dup_inc(proto_perl->Iunitcheckav_save, param);
15573     PL_endav            = av_dup_inc(proto_perl->Iendav, param);
15574     PL_checkav          = av_dup_inc(proto_perl->Icheckav, param);
15575     PL_initav           = av_dup_inc(proto_perl->Iinitav, param);
15576     PL_savebegin        = proto_perl->Isavebegin;
15577
15578     PL_isarev           = hv_dup_inc(proto_perl->Iisarev, param);
15579
15580     /* subprocess state */
15581     PL_fdpid            = av_dup_inc(proto_perl->Ifdpid, param);
15582
15583     if (proto_perl->Iop_mask)
15584         PL_op_mask      = SAVEPVN(proto_perl->Iop_mask, PL_maxo);
15585     else
15586         PL_op_mask      = NULL;
15587     /* PL_asserting        = proto_perl->Iasserting; */
15588
15589     /* current interpreter roots */
15590     PL_main_cv          = cv_dup_inc(proto_perl->Imain_cv, param);
15591     OP_REFCNT_LOCK;
15592     PL_main_root        = OpREFCNT_inc(proto_perl->Imain_root);
15593     OP_REFCNT_UNLOCK;
15594
15595     /* runtime control stuff */
15596     PL_curcopdb         = (COP*)any_dup(proto_perl->Icurcopdb, proto_perl);
15597
15598     PL_preambleav       = av_dup_inc(proto_perl->Ipreambleav, param);
15599
15600     PL_ors_sv           = sv_dup_inc(proto_perl->Iors_sv, param);
15601
15602     /* interpreter atexit processing */
15603     PL_exitlistlen      = proto_perl->Iexitlistlen;
15604     if (PL_exitlistlen) {
15605         Newx(PL_exitlist, PL_exitlistlen, PerlExitListEntry);
15606         Copy(proto_perl->Iexitlist, PL_exitlist, PL_exitlistlen, PerlExitListEntry);
15607     }
15608     else
15609         PL_exitlist     = (PerlExitListEntry*)NULL;
15610
15611     PL_my_cxt_size = proto_perl->Imy_cxt_size;
15612     if (PL_my_cxt_size) {
15613         Newx(PL_my_cxt_list, PL_my_cxt_size, void *);
15614         Copy(proto_perl->Imy_cxt_list, PL_my_cxt_list, PL_my_cxt_size, void *);
15615     }
15616     else {
15617         PL_my_cxt_list  = (void**)NULL;
15618     }
15619     PL_modglobal        = hv_dup_inc(proto_perl->Imodglobal, param);
15620     PL_custom_op_names  = hv_dup_inc(proto_perl->Icustom_op_names,param);
15621     PL_custom_op_descs  = hv_dup_inc(proto_perl->Icustom_op_descs,param);
15622     PL_custom_ops       = hv_dup_inc(proto_perl->Icustom_ops, param);
15623
15624     PL_compcv                   = cv_dup(proto_perl->Icompcv, param);
15625
15626     PAD_CLONE_VARS(proto_perl, param);
15627
15628 #ifdef HAVE_INTERP_INTERN
15629     sys_intern_dup(&proto_perl->Isys_intern, &PL_sys_intern);
15630 #endif
15631
15632     PL_DBcv             = cv_dup(proto_perl->IDBcv, param);
15633
15634 #ifdef PERL_USES_PL_PIDSTATUS
15635     PL_pidstatus        = newHV();                      /* XXX flag for cloning? */
15636 #endif
15637     PL_osname           = SAVEPV(proto_perl->Iosname);
15638     PL_parser           = parser_dup(proto_perl->Iparser, param);
15639
15640     /* XXX this only works if the saved cop has already been cloned */
15641     if (proto_perl->Iparser) {
15642         PL_parser->saved_curcop = (COP*)any_dup(
15643                                     proto_perl->Iparser->saved_curcop,
15644                                     proto_perl);
15645     }
15646
15647     PL_subname          = sv_dup_inc(proto_perl->Isubname, param);
15648
15649 #if   defined(USE_POSIX_2008_LOCALE)      \
15650  &&   defined(USE_THREAD_SAFE_LOCALE)     \
15651  && ! defined(HAS_QUERYLOCALE)
15652     for (i = 0; i < (int) C_ARRAY_LENGTH(PL_curlocales); i++) {
15653         PL_curlocales[i] = savepv("."); /* An illegal value */
15654     }
15655 #endif
15656 #ifdef USE_LOCALE_CTYPE
15657     /* Should we warn if uses locale? */
15658     PL_warn_locale      = sv_dup_inc(proto_perl->Iwarn_locale, param);
15659 #endif
15660
15661 #ifdef USE_LOCALE_COLLATE
15662     PL_collation_name   = SAVEPV(proto_perl->Icollation_name);
15663 #endif /* USE_LOCALE_COLLATE */
15664
15665 #ifdef USE_LOCALE_NUMERIC
15666     PL_numeric_name     = SAVEPV(proto_perl->Inumeric_name);
15667     PL_numeric_radix_sv = sv_dup_inc(proto_perl->Inumeric_radix_sv, param);
15668
15669 #  if defined(HAS_POSIX_2008_LOCALE)
15670     PL_underlying_numeric_obj = NULL;
15671 #  endif
15672 #endif /* !USE_LOCALE_NUMERIC */
15673
15674 #ifdef HAS_MBRLEN
15675     PL_mbrlen_ps = proto_perl->Imbrlen_ps;
15676 #endif
15677 #ifdef HAS_MBRTOWC
15678     PL_mbrtowc_ps = proto_perl->Imbrtowc_ps;
15679 #endif
15680 #ifdef HAS_WCRTOMB
15681     PL_wcrtomb_ps = proto_perl->Iwcrtomb_ps;
15682 #endif
15683
15684     PL_langinfo_buf = NULL;
15685     PL_langinfo_bufsize = 0;
15686
15687     PL_setlocale_buf = NULL;
15688     PL_setlocale_bufsize = 0;
15689
15690     /* Unicode inversion lists */
15691
15692     PL_AboveLatin1            = sv_dup_inc(proto_perl->IAboveLatin1, param);
15693     PL_Assigned_invlist       = sv_dup_inc(proto_perl->IAssigned_invlist, param);
15694     PL_GCB_invlist            = sv_dup_inc(proto_perl->IGCB_invlist, param);
15695     PL_HasMultiCharFold       = sv_dup_inc(proto_perl->IHasMultiCharFold, param);
15696     PL_InMultiCharFold        = sv_dup_inc(proto_perl->IInMultiCharFold, param);
15697     PL_Latin1                 = sv_dup_inc(proto_perl->ILatin1, param);
15698     PL_LB_invlist             = sv_dup_inc(proto_perl->ILB_invlist, param);
15699     PL_SB_invlist             = sv_dup_inc(proto_perl->ISB_invlist, param);
15700     PL_SCX_invlist            = sv_dup_inc(proto_perl->ISCX_invlist, param);
15701     PL_UpperLatin1            = sv_dup_inc(proto_perl->IUpperLatin1, param);
15702     PL_in_some_fold           = sv_dup_inc(proto_perl->Iin_some_fold, param);
15703     PL_utf8_foldclosures      = sv_dup_inc(proto_perl->Iutf8_foldclosures, param);
15704     PL_utf8_idcont            = sv_dup_inc(proto_perl->Iutf8_idcont, param);
15705     PL_utf8_idstart           = sv_dup_inc(proto_perl->Iutf8_idstart, param);
15706     PL_utf8_perl_idcont       = sv_dup_inc(proto_perl->Iutf8_perl_idcont, param);
15707     PL_utf8_perl_idstart      = sv_dup_inc(proto_perl->Iutf8_perl_idstart, param);
15708     PL_utf8_xidcont           = sv_dup_inc(proto_perl->Iutf8_xidcont, param);
15709     PL_utf8_xidstart          = sv_dup_inc(proto_perl->Iutf8_xidstart, param);
15710     PL_WB_invlist             = sv_dup_inc(proto_perl->IWB_invlist, param);
15711     for (i = 0; i < POSIX_CC_COUNT; i++) {
15712         PL_XPosix_ptrs[i]     = sv_dup_inc(proto_perl->IXPosix_ptrs[i], param);
15713         if (i != _CC_CASED && i != _CC_VERTSPACE) {
15714             PL_Posix_ptrs[i]  = sv_dup_inc(proto_perl->IPosix_ptrs[i], param);
15715         }
15716     }
15717     PL_Posix_ptrs[_CC_CASED]  = PL_Posix_ptrs[_CC_ALPHA];
15718     PL_Posix_ptrs[_CC_VERTSPACE] = NULL;
15719
15720     PL_utf8_toupper           = sv_dup_inc(proto_perl->Iutf8_toupper, param);
15721     PL_utf8_totitle           = sv_dup_inc(proto_perl->Iutf8_totitle, param);
15722     PL_utf8_tolower           = sv_dup_inc(proto_perl->Iutf8_tolower, param);
15723     PL_utf8_tofold            = sv_dup_inc(proto_perl->Iutf8_tofold, param);
15724     PL_utf8_tosimplefold      = sv_dup_inc(proto_perl->Iutf8_tosimplefold, param);
15725     PL_utf8_charname_begin    = sv_dup_inc(proto_perl->Iutf8_charname_begin, param);
15726     PL_utf8_charname_continue = sv_dup_inc(proto_perl->Iutf8_charname_continue, param);
15727     PL_utf8_mark              = sv_dup_inc(proto_perl->Iutf8_mark, param);
15728     PL_InBitmap               = sv_dup_inc(proto_perl->IInBitmap, param);
15729     PL_CCC_non0_non230        = sv_dup_inc(proto_perl->ICCC_non0_non230, param);
15730     PL_Private_Use            = sv_dup_inc(proto_perl->IPrivate_Use, param);
15731
15732 #if 0
15733     PL_seen_deprecated_macro = hv_dup_inc(proto_perl->Iseen_deprecated_macro, param);
15734 #endif
15735
15736     if (proto_perl->Ipsig_pend) {
15737         Newxz(PL_psig_pend, SIG_SIZE, int);
15738     }
15739     else {
15740         PL_psig_pend    = (int*)NULL;
15741     }
15742
15743     if (proto_perl->Ipsig_name) {
15744         Newx(PL_psig_name, 2 * SIG_SIZE, SV*);
15745         sv_dup_inc_multiple(proto_perl->Ipsig_name, PL_psig_name, 2 * SIG_SIZE,
15746                             param);
15747         PL_psig_ptr = PL_psig_name + SIG_SIZE;
15748     }
15749     else {
15750         PL_psig_ptr     = (SV**)NULL;
15751         PL_psig_name    = (SV**)NULL;
15752     }
15753
15754     if (flags & CLONEf_COPY_STACKS) {
15755         Newx(PL_tmps_stack, PL_tmps_max, SV*);
15756         sv_dup_inc_multiple(proto_perl->Itmps_stack, PL_tmps_stack,
15757                             PL_tmps_ix+1, param);
15758
15759         /* next PUSHMARK() sets *(PL_markstack_ptr+1) */
15760         i = proto_perl->Imarkstack_max - proto_perl->Imarkstack;
15761         Newx(PL_markstack, i, I32);
15762         PL_markstack_max        = PL_markstack + (proto_perl->Imarkstack_max
15763                                                   - proto_perl->Imarkstack);
15764         PL_markstack_ptr        = PL_markstack + (proto_perl->Imarkstack_ptr
15765                                                   - proto_perl->Imarkstack);
15766         Copy(proto_perl->Imarkstack, PL_markstack,
15767              PL_markstack_ptr - PL_markstack + 1, I32);
15768
15769         /* next push_scope()/ENTER sets PL_scopestack[PL_scopestack_ix]
15770          * NOTE: unlike the others! */
15771         Newx(PL_scopestack, PL_scopestack_max, I32);
15772         Copy(proto_perl->Iscopestack, PL_scopestack, PL_scopestack_ix, I32);
15773
15774 #ifdef DEBUGGING
15775         Newx(PL_scopestack_name, PL_scopestack_max, const char *);
15776         Copy(proto_perl->Iscopestack_name, PL_scopestack_name, PL_scopestack_ix, const char *);
15777 #endif
15778         /* reset stack AV to correct length before its duped via
15779          * PL_curstackinfo */
15780         AvFILLp(proto_perl->Icurstack) =
15781                             proto_perl->Istack_sp - proto_perl->Istack_base;
15782
15783         /* NOTE: si_dup() looks at PL_markstack */
15784         PL_curstackinfo         = si_dup(proto_perl->Icurstackinfo, param);
15785
15786         /* PL_curstack          = PL_curstackinfo->si_stack; */
15787         PL_curstack             = av_dup(proto_perl->Icurstack, param);
15788         PL_mainstack            = av_dup(proto_perl->Imainstack, param);
15789
15790         /* next PUSHs() etc. set *(PL_stack_sp+1) */
15791         PL_stack_base           = AvARRAY(PL_curstack);
15792         PL_stack_sp             = PL_stack_base + (proto_perl->Istack_sp
15793                                                    - proto_perl->Istack_base);
15794         PL_stack_max            = PL_stack_base + AvMAX(PL_curstack);
15795
15796         /*Newxz(PL_savestack, PL_savestack_max, ANY);*/
15797         PL_savestack            = ss_dup(proto_perl, param);
15798     }
15799     else {
15800         init_stacks();
15801         ENTER;                  /* perl_destruct() wants to LEAVE; */
15802     }
15803
15804     PL_statgv           = gv_dup(proto_perl->Istatgv, param);
15805     PL_statname         = sv_dup_inc(proto_perl->Istatname, param);
15806
15807     PL_rs               = sv_dup_inc(proto_perl->Irs, param);
15808     PL_last_in_gv       = gv_dup(proto_perl->Ilast_in_gv, param);
15809     PL_defoutgv         = gv_dup_inc(proto_perl->Idefoutgv, param);
15810     PL_toptarget        = sv_dup_inc(proto_perl->Itoptarget, param);
15811     PL_bodytarget       = sv_dup_inc(proto_perl->Ibodytarget, param);
15812     PL_formtarget       = sv_dup(proto_perl->Iformtarget, param);
15813
15814     PL_errors           = sv_dup_inc(proto_perl->Ierrors, param);
15815
15816     PL_sortcop          = (OP*)any_dup(proto_perl->Isortcop, proto_perl);
15817     PL_firstgv          = gv_dup_inc(proto_perl->Ifirstgv, param);
15818     PL_secondgv         = gv_dup_inc(proto_perl->Isecondgv, param);
15819
15820     PL_stashcache       = newHV();
15821
15822     PL_watchaddr        = (char **) ptr_table_fetch(PL_ptr_table,
15823                                             proto_perl->Iwatchaddr);
15824     PL_watchok          = PL_watchaddr ? * PL_watchaddr : NULL;
15825     if (PL_debug && PL_watchaddr) {
15826         PerlIO_printf(Perl_debug_log,
15827           "WATCHING: %" UVxf " cloned as %" UVxf " with value %" UVxf "\n",
15828           PTR2UV(proto_perl->Iwatchaddr), PTR2UV(PL_watchaddr),
15829           PTR2UV(PL_watchok));
15830     }
15831
15832     PL_registered_mros  = hv_dup_inc(proto_perl->Iregistered_mros, param);
15833     PL_blockhooks       = av_dup_inc(proto_perl->Iblockhooks, param);
15834
15835     /* Call the ->CLONE method, if it exists, for each of the stashes
15836        identified by sv_dup() above.
15837     */
15838     while(av_count(param->stashes) != 0) {
15839         HV* const stash = MUTABLE_HV(av_shift(param->stashes));
15840         GV* const cloner = gv_fetchmethod_autoload(stash, "CLONE", 0);
15841         if (cloner && GvCV(cloner)) {
15842             dSP;
15843             ENTER;
15844             SAVETMPS;
15845             PUSHMARK(SP);
15846             mXPUSHs(newSVhek(HvNAME_HEK(stash)));
15847             PUTBACK;
15848             call_sv(MUTABLE_SV(GvCV(cloner)), G_DISCARD);
15849             FREETMPS;
15850             LEAVE;
15851         }
15852     }
15853
15854     if (!(flags & CLONEf_KEEP_PTR_TABLE)) {
15855         ptr_table_free(PL_ptr_table);
15856         PL_ptr_table = NULL;
15857     }
15858
15859     if (!(flags & CLONEf_COPY_STACKS)) {
15860         unreferenced_to_tmp_stack(param->unreferenced);
15861     }
15862
15863     SvREFCNT_dec(param->stashes);
15864
15865     /* orphaned? eg threads->new inside BEGIN or use */
15866     if (PL_compcv && ! SvREFCNT(PL_compcv)) {
15867         SvREFCNT_inc_simple_void(PL_compcv);
15868         SAVEFREESV(PL_compcv);
15869     }
15870
15871     return my_perl;
15872 }
15873
15874 static void
15875 S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced)
15876 {
15877     PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK;
15878     
15879     if (AvFILLp(unreferenced) > -1) {
15880         SV **svp = AvARRAY(unreferenced);
15881         SV **const last = svp + AvFILLp(unreferenced);
15882         SSize_t count = 0;
15883
15884         do {
15885             if (SvREFCNT(*svp) == 1)
15886                 ++count;
15887         } while (++svp <= last);
15888
15889         EXTEND_MORTAL(count);
15890         svp = AvARRAY(unreferenced);
15891
15892         do {
15893             if (SvREFCNT(*svp) == 1) {
15894                 /* Our reference is the only one to this SV. This means that
15895                    in this thread, the scalar effectively has a 0 reference.
15896                    That doesn't work (cleanup never happens), so donate our
15897                    reference to it onto the save stack. */
15898                 PL_tmps_stack[++PL_tmps_ix] = *svp;
15899             } else {
15900                 /* As an optimisation, because we are already walking the
15901                    entire array, instead of above doing either
15902                    SvREFCNT_inc(*svp) or *svp = &PL_sv_undef, we can instead
15903                    release our reference to the scalar, so that at the end of
15904                    the array owns zero references to the scalars it happens to
15905                    point to. We are effectively converting the array from
15906                    AvREAL() on to AvREAL() off. This saves the av_clear()
15907                    (triggered by the SvREFCNT_dec(unreferenced) below) from
15908                    walking the array a second time.  */
15909                 SvREFCNT_dec(*svp);
15910             }
15911
15912         } while (++svp <= last);
15913         AvREAL_off(unreferenced);
15914     }
15915     SvREFCNT_dec_NN(unreferenced);
15916 }
15917
15918 void
15919 Perl_clone_params_del(CLONE_PARAMS *param)
15920 {
15921     PerlInterpreter *const was = PERL_GET_THX;
15922     PerlInterpreter *const to = param->new_perl;
15923     dTHXa(to);
15924
15925     PERL_ARGS_ASSERT_CLONE_PARAMS_DEL;
15926
15927     if (was != to) {
15928         PERL_SET_THX(to);
15929     }
15930
15931     SvREFCNT_dec(param->stashes);
15932     if (param->unreferenced)
15933         unreferenced_to_tmp_stack(param->unreferenced);
15934
15935     Safefree(param);
15936
15937     if (was != to) {
15938         PERL_SET_THX(was);
15939     }
15940 }
15941
15942 CLONE_PARAMS *
15943 Perl_clone_params_new(PerlInterpreter *const from, PerlInterpreter *const to)
15944 {
15945     /* Need to play this game, as newAV() can call safesysmalloc(), and that
15946        does a dTHX; to get the context from thread local storage.
15947        FIXME - under PERL_CORE Newx(), Safefree() and friends should expand to
15948        a version that passes in my_perl.  */
15949     PerlInterpreter *const was = PERL_GET_THX;
15950     CLONE_PARAMS *param;
15951
15952     PERL_ARGS_ASSERT_CLONE_PARAMS_NEW;
15953
15954     if (was != to) {
15955         PERL_SET_THX(to);
15956     }
15957
15958     /* Given that we've set the context, we can do this unshared.  */
15959     Newx(param, 1, CLONE_PARAMS);
15960
15961     param->flags = 0;
15962     param->proto_perl = from;
15963     param->new_perl = to;
15964     param->stashes = (AV *)Perl_newSV_type(to, SVt_PVAV);
15965     AvREAL_off(param->stashes);
15966     param->unreferenced = (AV *)Perl_newSV_type(to, SVt_PVAV);
15967
15968     if (was != to) {
15969         PERL_SET_THX(was);
15970     }
15971     return param;
15972 }
15973
15974 #endif /* USE_ITHREADS */
15975
15976 void
15977 Perl_init_constants(pTHX)
15978 {
15979
15980     SvREFCNT(&PL_sv_undef)      = SvREFCNT_IMMORTAL;
15981     SvFLAGS(&PL_sv_undef)       = SVf_READONLY|SVf_PROTECT|SVt_NULL;
15982     SvANY(&PL_sv_undef)         = NULL;
15983
15984     SvANY(&PL_sv_no)            = new_XPVNV();
15985     SvREFCNT(&PL_sv_no)         = SvREFCNT_IMMORTAL;
15986     SvFLAGS(&PL_sv_no)          = SVt_PVNV|SVf_READONLY|SVf_PROTECT
15987                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
15988                                   |SVp_POK|SVf_POK;
15989
15990     SvANY(&PL_sv_yes)           = new_XPVNV();
15991     SvREFCNT(&PL_sv_yes)        = SvREFCNT_IMMORTAL;
15992     SvFLAGS(&PL_sv_yes)         = SVt_PVNV|SVf_READONLY|SVf_PROTECT
15993                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
15994                                   |SVp_POK|SVf_POK;
15995
15996     SvANY(&PL_sv_zero)          = new_XPVNV();
15997     SvREFCNT(&PL_sv_zero)       = SvREFCNT_IMMORTAL;
15998     SvFLAGS(&PL_sv_zero)        = SVt_PVNV|SVf_READONLY|SVf_PROTECT
15999                                   |SVp_IOK|SVf_IOK|SVp_NOK|SVf_NOK
16000                                   |SVp_POK|SVf_POK
16001                                   |SVs_PADTMP;
16002
16003     SvPV_set(&PL_sv_no, (char*)PL_No);
16004     SvCUR_set(&PL_sv_no, 0);
16005     SvLEN_set(&PL_sv_no, 0);
16006     SvIV_set(&PL_sv_no, 0);
16007     SvNV_set(&PL_sv_no, 0);
16008
16009     SvPV_set(&PL_sv_yes, (char*)PL_Yes);
16010     SvCUR_set(&PL_sv_yes, 1);
16011     SvLEN_set(&PL_sv_yes, 0);
16012     SvIV_set(&PL_sv_yes, 1);
16013     SvNV_set(&PL_sv_yes, 1);
16014
16015     SvPV_set(&PL_sv_zero, (char*)PL_Zero);
16016     SvCUR_set(&PL_sv_zero, 1);
16017     SvLEN_set(&PL_sv_zero, 0);
16018     SvIV_set(&PL_sv_zero, 0);
16019     SvNV_set(&PL_sv_zero, 0);
16020
16021     PadnamePV(&PL_padname_const) = (char *)PL_No;
16022
16023     assert(SvIMMORTAL_INTERP(&PL_sv_yes));
16024     assert(SvIMMORTAL_INTERP(&PL_sv_undef));
16025     assert(SvIMMORTAL_INTERP(&PL_sv_no));
16026     assert(SvIMMORTAL_INTERP(&PL_sv_zero));
16027
16028     assert(SvIMMORTAL(&PL_sv_yes));
16029     assert(SvIMMORTAL(&PL_sv_undef));
16030     assert(SvIMMORTAL(&PL_sv_no));
16031     assert(SvIMMORTAL(&PL_sv_zero));
16032
16033     assert( SvIMMORTAL_TRUE(&PL_sv_yes));
16034     assert(!SvIMMORTAL_TRUE(&PL_sv_undef));
16035     assert(!SvIMMORTAL_TRUE(&PL_sv_no));
16036     assert(!SvIMMORTAL_TRUE(&PL_sv_zero));
16037
16038     assert( SvTRUE_nomg_NN(&PL_sv_yes));
16039     assert(!SvTRUE_nomg_NN(&PL_sv_undef));
16040     assert(!SvTRUE_nomg_NN(&PL_sv_no));
16041     assert(!SvTRUE_nomg_NN(&PL_sv_zero));
16042 }
16043
16044 /*
16045 =for apidoc_section Unicode Support
16046
16047 =for apidoc sv_recode_to_utf8
16048
16049 C<encoding> is assumed to be an C<Encode> object, on entry the PV
16050 of C<sv> is assumed to be octets in that encoding, and C<sv>
16051 will be converted into Unicode (and UTF-8).
16052
16053 If C<sv> already is UTF-8 (or if it is not C<POK>), or if C<encoding>
16054 is not a reference, nothing is done to C<sv>.  If C<encoding> is not
16055 an C<Encode::XS> Encoding object, bad things will happen.
16056 (See F<cpan/Encode/encoding.pm> and L<Encode>.)
16057
16058 The PV of C<sv> is returned.
16059
16060 =cut */
16061
16062 char *
16063 Perl_sv_recode_to_utf8(pTHX_ SV *sv, SV *encoding)
16064 {
16065     PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8;
16066
16067     if (SvPOK(sv) && !SvUTF8(sv) && !IN_BYTES && SvROK(encoding)) {
16068         SV *uni;
16069         STRLEN len;
16070         const char *s;
16071         dSP;
16072         SV *nsv = sv;
16073         ENTER;
16074         PUSHSTACK;
16075         SAVETMPS;
16076         if (SvPADTMP(nsv)) {
16077             nsv = sv_newmortal();
16078             SvSetSV_nosteal(nsv, sv);
16079         }
16080         save_re_context();
16081         PUSHMARK(sp);
16082         EXTEND(SP, 3);
16083         PUSHs(encoding);
16084         PUSHs(nsv);
16085 /*
16086   NI-S 2002/07/09
16087   Passing sv_yes is wrong - it needs to be or'ed set of constants
16088   for Encode::XS, while UTf-8 decode (currently) assumes a true value means
16089   remove converted chars from source.
16090
16091   Both will default the value - let them.
16092
16093         XPUSHs(&PL_sv_yes);
16094 */
16095         PUTBACK;
16096         call_method("decode", G_SCALAR);
16097         SPAGAIN;
16098         uni = POPs;
16099         PUTBACK;
16100         s = SvPV_const(uni, len);
16101         if (s != SvPVX_const(sv)) {
16102             SvGROW(sv, len + 1);
16103             Move(s, SvPVX(sv), len + 1, char);
16104             SvCUR_set(sv, len);
16105         }
16106         FREETMPS;
16107         POPSTACK;
16108         LEAVE;
16109         if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
16110             /* clear pos and any utf8 cache */
16111             MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
16112             if (mg)
16113                 mg->mg_len = -1;
16114             if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
16115                 magic_setutf8(sv,mg); /* clear UTF8 cache */
16116         }
16117         SvUTF8_on(sv);
16118         return SvPVX(sv);
16119     }
16120     return SvPOKp(sv) ? SvPVX(sv) : NULL;
16121 }
16122
16123 /*
16124 =for apidoc sv_cat_decode
16125
16126 C<encoding> is assumed to be an C<Encode> object, the PV of C<ssv> is
16127 assumed to be octets in that encoding and decoding the input starts
16128 from the position which S<C<(PV + *offset)>> pointed to.  C<dsv> will be
16129 concatenated with the decoded UTF-8 string from C<ssv>.  Decoding will terminate
16130 when the string C<tstr> appears in decoding output or the input ends on
16131 the PV of C<ssv>.  The value which C<offset> points will be modified
16132 to the last input position on C<ssv>.
16133
16134 Returns TRUE if the terminator was found, else returns FALSE.
16135
16136 =cut */
16137
16138 bool
16139 Perl_sv_cat_decode(pTHX_ SV *dsv, SV *encoding,
16140                    SV *ssv, int *offset, char *tstr, int tlen)
16141 {
16142     bool ret = FALSE;
16143
16144     PERL_ARGS_ASSERT_SV_CAT_DECODE;
16145
16146     if (SvPOK(ssv) && SvPOK(dsv) && SvROK(encoding)) {
16147         SV *offsv;
16148         dSP;
16149         ENTER;
16150         SAVETMPS;
16151         save_re_context();
16152         PUSHMARK(sp);
16153         EXTEND(SP, 6);
16154         PUSHs(encoding);
16155         PUSHs(dsv);
16156         PUSHs(ssv);
16157         offsv = newSViv(*offset);
16158         mPUSHs(offsv);
16159         mPUSHp(tstr, tlen);
16160         PUTBACK;
16161         call_method("cat_decode", G_SCALAR);
16162         SPAGAIN;
16163         ret = SvTRUE(TOPs);
16164         *offset = SvIV(offsv);
16165         PUTBACK;
16166         FREETMPS;
16167         LEAVE;
16168     }
16169     else
16170         Perl_croak(aTHX_ "Invalid argument to sv_cat_decode");
16171     return ret;
16172
16173 }
16174
16175 /* ---------------------------------------------------------------------
16176  *
16177  * support functions for report_uninit()
16178  */
16179
16180 /* the maxiumum size of array or hash where we will scan looking
16181  * for the undefined element that triggered the warning */
16182
16183 #define FUV_MAX_SEARCH_SIZE 1000
16184
16185 /* Look for an entry in the hash whose value has the same SV as val;
16186  * If so, return a mortal copy of the key. */
16187
16188 STATIC SV*
16189 S_find_hash_subscript(pTHX_ const HV *const hv, const SV *const val)
16190 {
16191     HE **array;
16192     I32 i;
16193
16194     PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT;
16195
16196     if (!hv || SvMAGICAL(hv) || !HvARRAY(hv) ||
16197                         (HvTOTALKEYS(hv) > FUV_MAX_SEARCH_SIZE))
16198         return NULL;
16199
16200     array = HvARRAY(hv);
16201
16202     for (i=HvMAX(hv); i>=0; i--) {
16203         HE *entry;
16204         for (entry = array[i]; entry; entry = HeNEXT(entry)) {
16205             if (HeVAL(entry) != val)
16206                 continue;
16207             if (    HeVAL(entry) == &PL_sv_undef ||
16208                     HeVAL(entry) == &PL_sv_placeholder)
16209                 continue;
16210             if (!HeKEY(entry))
16211                 return NULL;
16212             if (HeKLEN(entry) == HEf_SVKEY)
16213                 return sv_mortalcopy(HeKEY_sv(entry));
16214             return sv_2mortal(newSVhek(HeKEY_hek(entry)));
16215         }
16216     }
16217     return NULL;
16218 }
16219
16220 /* Look for an entry in the array whose value has the same SV as val;
16221  * If so, return the index, otherwise return -1. */
16222
16223 STATIC SSize_t
16224 S_find_array_subscript(pTHX_ const AV *const av, const SV *const val)
16225 {
16226     PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT;
16227
16228     if (!av || SvMAGICAL(av) || !AvARRAY(av) ||
16229                         (AvFILLp(av) > FUV_MAX_SEARCH_SIZE))
16230         return -1;
16231
16232     if (val != &PL_sv_undef) {
16233         SV ** const svp = AvARRAY(av);
16234         SSize_t i;
16235
16236         for (i=AvFILLp(av); i>=0; i--)
16237             if (svp[i] == val)
16238                 return i;
16239     }
16240     return -1;
16241 }
16242
16243 /* varname(): return the name of a variable, optionally with a subscript.
16244  * If gv is non-zero, use the name of that global, along with gvtype (one
16245  * of "$", "@", "%"); otherwise use the name of the lexical at pad offset
16246  * targ.  Depending on the value of the subscript_type flag, return:
16247  */
16248
16249 #define FUV_SUBSCRIPT_NONE      1       /* "@foo"          */
16250 #define FUV_SUBSCRIPT_ARRAY     2       /* "$foo[aindex]"  */
16251 #define FUV_SUBSCRIPT_HASH      3       /* "$foo{keyname}" */
16252 #define FUV_SUBSCRIPT_WITHIN    4       /* "within @foo"   */
16253
16254 SV*
16255 Perl_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ,
16256         const SV *const keyname, SSize_t aindex, int subscript_type)
16257 {
16258
16259     SV * const name = sv_newmortal();
16260     if (gv && isGV(gv)) {
16261         char buffer[2];
16262         buffer[0] = gvtype;
16263         buffer[1] = 0;
16264
16265         /* as gv_fullname4(), but add literal '^' for $^FOO names  */
16266
16267         gv_fullname4(name, gv, buffer, 0);
16268
16269         if ((unsigned int)SvPVX(name)[1] <= 26) {
16270             buffer[0] = '^';
16271             buffer[1] = SvPVX(name)[1] + 'A' - 1;
16272
16273             /* Swap the 1 unprintable control character for the 2 byte pretty
16274                version - ie substr($name, 1, 1) = $buffer; */
16275             sv_insert(name, 1, 1, buffer, 2);
16276         }
16277     }
16278     else {
16279         CV * const cv = gv ? ((CV *)gv) : find_runcv(NULL);
16280         PADNAME *sv;
16281
16282         assert(!cv || SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM);
16283
16284         if (!cv || !CvPADLIST(cv))
16285             return NULL;
16286         sv = padnamelist_fetch(PadlistNAMES(CvPADLIST(cv)), targ);
16287         sv_setpvn(name, PadnamePV(sv), PadnameLEN(sv));
16288         SvUTF8_on(name);
16289     }
16290
16291     if (subscript_type == FUV_SUBSCRIPT_HASH) {
16292         SV * const sv = newSV(0);
16293         STRLEN len;
16294         const char * const pv = SvPV_nomg_const((SV*)keyname, len);
16295
16296         *SvPVX(name) = '$';
16297         Perl_sv_catpvf(aTHX_ name, "{%s}",
16298             pv_pretty(sv, pv, len, 32, NULL, NULL,
16299                     PERL_PV_PRETTY_DUMP | PERL_PV_ESCAPE_UNI_DETECT ));
16300         SvREFCNT_dec_NN(sv);
16301     }
16302     else if (subscript_type == FUV_SUBSCRIPT_ARRAY) {
16303         *SvPVX(name) = '$';
16304         Perl_sv_catpvf(aTHX_ name, "[%" IVdf "]", (IV)aindex);
16305     }
16306     else if (subscript_type == FUV_SUBSCRIPT_WITHIN) {
16307         /* We know that name has no magic, so can use 0 instead of SV_GMAGIC */
16308         Perl_sv_insert_flags(aTHX_ name, 0, 0,  STR_WITH_LEN("within "), 0);
16309     }
16310
16311     return name;
16312 }
16313
16314
16315 /*
16316 =apidoc_section Warning and Dieing
16317 =for apidoc find_uninit_var
16318
16319 Find the name of the undefined variable (if any) that caused the operator
16320 to issue a "Use of uninitialized value" warning.
16321 If match is true, only return a name if its value matches C<uninit_sv>.
16322 So roughly speaking, if a unary operator (such as C<OP_COS>) generates a
16323 warning, then following the direct child of the op may yield an
16324 C<OP_PADSV> or C<OP_GV> that gives the name of the undefined variable.  On the
16325 other hand, with C<OP_ADD> there are two branches to follow, so we only print
16326 the variable name if we get an exact match.
16327 C<desc_p> points to a string pointer holding the description of the op.
16328 This may be updated if needed.
16329
16330 The name is returned as a mortal SV.
16331
16332 Assumes that C<PL_op> is the OP that originally triggered the error, and that
16333 C<PL_comppad>/C<PL_curpad> points to the currently executing pad.
16334
16335 =cut
16336 */
16337
16338 STATIC SV *
16339 S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
16340                   bool match, const char **desc_p)
16341 {
16342     SV *sv;
16343     const GV *gv;
16344     const OP *o, *o2, *kid;
16345
16346     PERL_ARGS_ASSERT_FIND_UNINIT_VAR;
16347
16348     if (!obase || (match && (!uninit_sv || uninit_sv == &PL_sv_undef ||
16349                             uninit_sv == &PL_sv_placeholder)))
16350         return NULL;
16351
16352     switch (obase->op_type) {
16353
16354     case OP_UNDEF:
16355         /* undef should care if its args are undef - any warnings
16356          * will be from tied/magic vars */
16357         break;
16358
16359     case OP_RV2AV:
16360     case OP_RV2HV:
16361     case OP_PADAV:
16362     case OP_PADHV:
16363       {
16364         const bool pad  = (    obase->op_type == OP_PADAV
16365                             || obase->op_type == OP_PADHV
16366                             || obase->op_type == OP_PADRANGE
16367                           );
16368
16369         const bool hash = (    obase->op_type == OP_PADHV
16370                             || obase->op_type == OP_RV2HV
16371                             || (obase->op_type == OP_PADRANGE
16372                                 && SvTYPE(PAD_SVl(obase->op_targ)) == SVt_PVHV)
16373                           );
16374         SSize_t index = 0;
16375         SV *keysv = NULL;
16376         int subscript_type = FUV_SUBSCRIPT_WITHIN;
16377
16378         if (pad) { /* @lex, %lex */
16379             sv = PAD_SVl(obase->op_targ);
16380             gv = NULL;
16381         }
16382         else {
16383             if (cUNOPx(obase)->op_first->op_type == OP_GV) {
16384             /* @global, %global */
16385                 gv = cGVOPx_gv(cUNOPx(obase)->op_first);
16386                 if (!gv)
16387                     break;
16388                 sv = hash ? MUTABLE_SV(GvHV(gv)): MUTABLE_SV(GvAV(gv));
16389             }
16390             else if (obase == PL_op) /* @{expr}, %{expr} */
16391                 return find_uninit_var(cUNOPx(obase)->op_first,
16392                                                 uninit_sv, match, desc_p);
16393             else /* @{expr}, %{expr} as a sub-expression */
16394                 return NULL;
16395         }
16396
16397         /* attempt to find a match within the aggregate */
16398         if (hash) {
16399             keysv = find_hash_subscript((const HV*)sv, uninit_sv);
16400             if (keysv)
16401                 subscript_type = FUV_SUBSCRIPT_HASH;
16402         }
16403         else {
16404             index = find_array_subscript((const AV *)sv, uninit_sv);
16405             if (index >= 0)
16406                 subscript_type = FUV_SUBSCRIPT_ARRAY;
16407         }
16408
16409         if (match && subscript_type == FUV_SUBSCRIPT_WITHIN)
16410             break;
16411
16412         return varname(gv, (char)(hash ? '%' : '@'), obase->op_targ,
16413                                     keysv, index, subscript_type);
16414       }
16415
16416     case OP_RV2SV:
16417         if (cUNOPx(obase)->op_first->op_type == OP_GV) {
16418             /* $global */
16419             gv = cGVOPx_gv(cUNOPx(obase)->op_first);
16420             if (!gv || !GvSTASH(gv))
16421                 break;
16422             if (match && (GvSV(gv) != uninit_sv))
16423                 break;
16424             return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
16425         }
16426         /* ${expr} */
16427         return find_uninit_var(cUNOPx(obase)->op_first, uninit_sv, 1, desc_p);
16428
16429     case OP_PADSV:
16430         if (match && PAD_SVl(obase->op_targ) != uninit_sv)
16431             break;
16432         return varname(NULL, '$', obase->op_targ,
16433                                     NULL, 0, FUV_SUBSCRIPT_NONE);
16434
16435     case OP_GVSV:
16436         gv = cGVOPx_gv(obase);
16437         if (!gv || (match && GvSV(gv) != uninit_sv) || !GvSTASH(gv))
16438             break;
16439         return varname(gv, '$', 0, NULL, 0, FUV_SUBSCRIPT_NONE);
16440
16441     case OP_AELEMFAST_LEX:
16442         if (match) {
16443             SV **svp;
16444             AV *av = MUTABLE_AV(PAD_SV(obase->op_targ));
16445             if (!av || SvRMAGICAL(av))
16446                 break;
16447             svp = av_fetch(av, (I8)obase->op_private, FALSE);
16448             if (!svp || *svp != uninit_sv)
16449                 break;
16450         }
16451         return varname(NULL, '$', obase->op_targ,
16452                        NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
16453     case OP_AELEMFAST:
16454         {
16455             gv = cGVOPx_gv(obase);
16456             if (!gv)
16457                 break;
16458             if (match) {
16459                 SV **svp;
16460                 AV *const av = GvAV(gv);
16461                 if (!av || SvRMAGICAL(av))
16462                     break;
16463                 svp = av_fetch(av, (I8)obase->op_private, FALSE);
16464                 if (!svp || *svp != uninit_sv)
16465                     break;
16466             }
16467             return varname(gv, '$', 0,
16468                     NULL, (I8)obase->op_private, FUV_SUBSCRIPT_ARRAY);
16469         }
16470         NOT_REACHED; /* NOTREACHED */
16471
16472     case OP_EXISTS:
16473         o = cUNOPx(obase)->op_first;
16474         if (!o || o->op_type != OP_NULL ||
16475                 ! (o->op_targ == OP_AELEM || o->op_targ == OP_HELEM))
16476             break;
16477         return find_uninit_var(cBINOPo->op_last, uninit_sv, match, desc_p);
16478
16479     case OP_AELEM:
16480     case OP_HELEM:
16481     {
16482         bool negate = FALSE;
16483
16484         if (PL_op == obase)
16485             /* $a[uninit_expr] or $h{uninit_expr} */
16486             return find_uninit_var(cBINOPx(obase)->op_last,
16487                                                 uninit_sv, match, desc_p);
16488
16489         gv = NULL;
16490         o = cBINOPx(obase)->op_first;
16491         kid = cBINOPx(obase)->op_last;
16492
16493         /* get the av or hv, and optionally the gv */
16494         sv = NULL;
16495         if  (o->op_type == OP_PADAV || o->op_type == OP_PADHV) {
16496             sv = PAD_SV(o->op_targ);
16497         }
16498         else if ((o->op_type == OP_RV2AV || o->op_type == OP_RV2HV)
16499                 && cUNOPo->op_first->op_type == OP_GV)
16500         {
16501             gv = cGVOPx_gv(cUNOPo->op_first);
16502             if (!gv)
16503                 break;
16504             sv = o->op_type
16505                 == OP_RV2HV ? MUTABLE_SV(GvHV(gv)) : MUTABLE_SV(GvAV(gv));
16506         }
16507         if (!sv)
16508             break;
16509
16510         if (kid && kid->op_type == OP_NEGATE) {
16511             negate = TRUE;
16512             kid = cUNOPx(kid)->op_first;
16513         }
16514
16515         if (kid && kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid))) {
16516             /* index is constant */
16517             SV* kidsv;
16518             if (negate) {
16519                 kidsv = newSVpvs_flags("-", SVs_TEMP);
16520                 sv_catsv(kidsv, cSVOPx_sv(kid));
16521             }
16522             else
16523                 kidsv = cSVOPx_sv(kid);
16524             if (match) {
16525                 if (SvMAGICAL(sv))
16526                     break;
16527                 if (obase->op_type == OP_HELEM) {
16528                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), kidsv, 0, 0);
16529                     if (!he || HeVAL(he) != uninit_sv)
16530                         break;
16531                 }
16532                 else {
16533                     SV * const  opsv = cSVOPx_sv(kid);
16534                     const IV  opsviv = SvIV(opsv);
16535                     SV * const * const svp = av_fetch(MUTABLE_AV(sv),
16536                         negate ? - opsviv : opsviv,
16537                         FALSE);
16538                     if (!svp || *svp != uninit_sv)
16539                         break;
16540                 }
16541             }
16542             if (obase->op_type == OP_HELEM)
16543                 return varname(gv, '%', o->op_targ,
16544                             kidsv, 0, FUV_SUBSCRIPT_HASH);
16545             else
16546                 return varname(gv, '@', o->op_targ, NULL,
16547                     negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
16548                     FUV_SUBSCRIPT_ARRAY);
16549         }
16550         else {
16551             /* index is an expression;
16552              * attempt to find a match within the aggregate */
16553             if (obase->op_type == OP_HELEM) {
16554                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
16555                 if (keysv)
16556                     return varname(gv, '%', o->op_targ,
16557                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
16558             }
16559             else {
16560                 const SSize_t index
16561                     = find_array_subscript((const AV *)sv, uninit_sv);
16562                 if (index >= 0)
16563                     return varname(gv, '@', o->op_targ,
16564                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
16565             }
16566             if (match)
16567                 break;
16568             return varname(gv,
16569                 (char)((o->op_type == OP_PADAV || o->op_type == OP_RV2AV)
16570                 ? '@' : '%'),
16571                 o->op_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
16572         }
16573         NOT_REACHED; /* NOTREACHED */
16574     }
16575
16576     case OP_MULTIDEREF: {
16577         /* If we were executing OP_MULTIDEREF when the undef warning
16578          * triggered, then it must be one of the index values within
16579          * that triggered it. If not, then the only possibility is that
16580          * the value retrieved by the last aggregate index might be the
16581          * culprit. For the former, we set PL_multideref_pc each time before
16582          * using an index, so work though the item list until we reach
16583          * that point. For the latter, just work through the entire item
16584          * list; the last aggregate retrieved will be the candidate.
16585          * There is a third rare possibility: something triggered
16586          * magic while fetching an array/hash element. Just display
16587          * nothing in this case.
16588          */
16589
16590         /* the named aggregate, if any */
16591         PADOFFSET agg_targ = 0;
16592         GV       *agg_gv   = NULL;
16593         /* the last-seen index */
16594         UV        index_type;
16595         PADOFFSET index_targ;
16596         GV       *index_gv;
16597         IV        index_const_iv = 0; /* init for spurious compiler warn */
16598         SV       *index_const_sv;
16599         int       depth = 0;  /* how many array/hash lookups we've done */
16600
16601         UNOP_AUX_item *items = cUNOP_AUXx(obase)->op_aux;
16602         UNOP_AUX_item *last = NULL;
16603         UV actions = items->uv;
16604         bool is_hv;
16605
16606         if (PL_op == obase) {
16607             last = PL_multideref_pc;
16608             assert(last >= items && last <= items + items[-1].uv);
16609         }
16610
16611         assert(actions);
16612
16613         while (1) {
16614             is_hv = FALSE;
16615             switch (actions & MDEREF_ACTION_MASK) {
16616
16617             case MDEREF_reload:
16618                 actions = (++items)->uv;
16619                 continue;
16620
16621             case MDEREF_HV_padhv_helem:               /* $lex{...} */
16622                 is_hv = TRUE;
16623                 /* FALLTHROUGH */
16624             case MDEREF_AV_padav_aelem:               /* $lex[...] */
16625                 agg_targ = (++items)->pad_offset;
16626                 agg_gv = NULL;
16627                 break;
16628
16629             case MDEREF_HV_gvhv_helem:                /* $pkg{...} */
16630                 is_hv = TRUE;
16631                 /* FALLTHROUGH */
16632             case MDEREF_AV_gvav_aelem:                /* $pkg[...] */
16633                 agg_targ = 0;
16634                 agg_gv = (GV*)UNOP_AUX_item_sv(++items);
16635                 assert(isGV_with_GP(agg_gv));
16636                 break;
16637
16638             case MDEREF_HV_gvsv_vivify_rv2hv_helem:   /* $pkg->{...} */
16639             case MDEREF_HV_padsv_vivify_rv2hv_helem:  /* $lex->{...} */
16640                 ++items;
16641                 /* FALLTHROUGH */
16642             case MDEREF_HV_pop_rv2hv_helem:           /* expr->{...} */
16643             case MDEREF_HV_vivify_rv2hv_helem:        /* vivify, ->{...} */
16644                 agg_targ = 0;
16645                 agg_gv   = NULL;
16646                 is_hv    = TRUE;
16647                 break;
16648
16649             case MDEREF_AV_gvsv_vivify_rv2av_aelem:   /* $pkg->[...] */
16650             case MDEREF_AV_padsv_vivify_rv2av_aelem:  /* $lex->[...] */
16651                 ++items;
16652                 /* FALLTHROUGH */
16653             case MDEREF_AV_pop_rv2av_aelem:           /* expr->[...] */
16654             case MDEREF_AV_vivify_rv2av_aelem:        /* vivify, ->[...] */
16655                 agg_targ = 0;
16656                 agg_gv   = NULL;
16657             } /* switch */
16658
16659             index_targ     = 0;
16660             index_gv       = NULL;
16661             index_const_sv = NULL;
16662
16663             index_type = (actions & MDEREF_INDEX_MASK);
16664             switch (index_type) {
16665             case MDEREF_INDEX_none:
16666                 break;
16667             case MDEREF_INDEX_const:
16668                 if (is_hv)
16669                     index_const_sv = UNOP_AUX_item_sv(++items)
16670                 else
16671                     index_const_iv = (++items)->iv;
16672                 break;
16673             case MDEREF_INDEX_padsv:
16674                 index_targ = (++items)->pad_offset;
16675                 break;
16676             case MDEREF_INDEX_gvsv:
16677                 index_gv = (GV*)UNOP_AUX_item_sv(++items);
16678                 assert(isGV_with_GP(index_gv));
16679                 break;
16680             }
16681
16682             if (index_type != MDEREF_INDEX_none)
16683                 depth++;
16684
16685             if (   index_type == MDEREF_INDEX_none
16686                 || (actions & MDEREF_FLAG_last)
16687                 || (last && items >= last)
16688             )
16689                 break;
16690
16691             actions >>= MDEREF_SHIFT;
16692         } /* while */
16693
16694         if (PL_op == obase) {
16695             /* most likely index was undef */
16696
16697             *desc_p = (    (actions & MDEREF_FLAG_last)
16698                         && (obase->op_private
16699                                 & (OPpMULTIDEREF_EXISTS|OPpMULTIDEREF_DELETE)))
16700                         ?
16701                             (obase->op_private & OPpMULTIDEREF_EXISTS)
16702                                 ? "exists"
16703                                 : "delete"
16704                         : is_hv ? "hash element" : "array element";
16705             assert(index_type != MDEREF_INDEX_none);
16706             if (index_gv) {
16707                 if (GvSV(index_gv) == uninit_sv)
16708                     return varname(index_gv, '$', 0, NULL, 0,
16709                                                     FUV_SUBSCRIPT_NONE);
16710                 else
16711                     return NULL;
16712             }
16713             if (index_targ) {
16714                 if (PL_curpad[index_targ] == uninit_sv)
16715                     return varname(NULL, '$', index_targ,
16716                                     NULL, 0, FUV_SUBSCRIPT_NONE);
16717                 else
16718                     return NULL;
16719             }
16720             /* If we got to this point it was undef on a const subscript,
16721              * so magic probably involved, e.g. $ISA[0]. Give up. */
16722             return NULL;
16723         }
16724
16725         /* the SV returned by pp_multideref() was undef, if anything was */
16726
16727         if (depth != 1)
16728             break;
16729
16730         if (agg_targ)
16731             sv = PAD_SV(agg_targ);
16732         else if (agg_gv) {
16733             sv = is_hv ? MUTABLE_SV(GvHV(agg_gv)) : MUTABLE_SV(GvAV(agg_gv));
16734             if (!sv)
16735                 break;
16736             }
16737         else
16738             break;
16739
16740         if (index_type == MDEREF_INDEX_const) {
16741             if (match) {
16742                 if (SvMAGICAL(sv))
16743                     break;
16744                 if (is_hv) {
16745                     HE* he = hv_fetch_ent(MUTABLE_HV(sv), index_const_sv, 0, 0);
16746                     if (!he || HeVAL(he) != uninit_sv)
16747                         break;
16748                 }
16749                 else {
16750                     SV * const * const svp =
16751                             av_fetch(MUTABLE_AV(sv), index_const_iv, FALSE);
16752                     if (!svp || *svp != uninit_sv)
16753                         break;
16754                 }
16755             }
16756             return is_hv
16757                 ? varname(agg_gv, '%', agg_targ,
16758                                 index_const_sv, 0,    FUV_SUBSCRIPT_HASH)
16759                 : varname(agg_gv, '@', agg_targ,
16760                                 NULL, index_const_iv, FUV_SUBSCRIPT_ARRAY);
16761         }
16762         else {
16763             /* index is an var */
16764             if (is_hv) {
16765                 SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
16766                 if (keysv)
16767                     return varname(agg_gv, '%', agg_targ,
16768                                                 keysv, 0, FUV_SUBSCRIPT_HASH);
16769             }
16770             else {
16771                 const SSize_t index
16772                     = find_array_subscript((const AV *)sv, uninit_sv);
16773                 if (index >= 0)
16774                     return varname(agg_gv, '@', agg_targ,
16775                                         NULL, index, FUV_SUBSCRIPT_ARRAY);
16776             }
16777             /* look for an element not found */
16778             if (!SvMAGICAL(sv)) {
16779                 SV *index_sv = NULL;
16780                 if (index_targ) {
16781                     index_sv = PL_curpad[index_targ];
16782                 }
16783                 else if (index_gv) {
16784                     index_sv = GvSV(index_gv);
16785                 }
16786                 if (index_sv && !SvMAGICAL(index_sv) && !SvROK(index_sv)) {
16787                     if (is_hv) {
16788                         HE *he = hv_fetch_ent(MUTABLE_HV(sv), index_sv, 0, 0);
16789                         if (!he) {
16790                             return varname(agg_gv, '%', agg_targ,
16791                                            index_sv, 0, FUV_SUBSCRIPT_HASH);
16792                         }
16793                     }
16794                     else {
16795                         SSize_t index = SvIV(index_sv);
16796                         SV * const * const svp =
16797                             av_fetch(MUTABLE_AV(sv), index, FALSE);
16798                         if (!svp) {
16799                             return varname(agg_gv, '@', agg_targ,
16800                                            NULL, index, FUV_SUBSCRIPT_ARRAY);
16801                         }
16802                     }
16803                 }
16804             }
16805             if (match)
16806                 break;
16807             return varname(agg_gv,
16808                 is_hv ? '%' : '@',
16809                 agg_targ, NULL, 0, FUV_SUBSCRIPT_WITHIN);
16810         }
16811         NOT_REACHED; /* NOTREACHED */
16812     }
16813
16814     case OP_AASSIGN:
16815         /* only examine RHS */
16816         return find_uninit_var(cBINOPx(obase)->op_first, uninit_sv,
16817                                                                 match, desc_p);
16818
16819     case OP_OPEN:
16820         o = cUNOPx(obase)->op_first;
16821         if (   o->op_type == OP_PUSHMARK
16822            || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)
16823         )
16824             o = OpSIBLING(o);
16825
16826         if (!OpHAS_SIBLING(o)) {
16827             /* one-arg version of open is highly magical */
16828
16829             if (o->op_type == OP_GV) { /* open FOO; */
16830                 gv = cGVOPx_gv(o);
16831                 if (match && GvSV(gv) != uninit_sv)
16832                     break;
16833                 return varname(gv, '$', 0,
16834                             NULL, 0, FUV_SUBSCRIPT_NONE);
16835             }
16836             /* other possibilities not handled are:
16837              * open $x; or open my $x;  should return '${*$x}'
16838              * open expr;               should return '$'.expr ideally
16839              */
16840              break;
16841         }
16842         match = 1;
16843         goto do_op;
16844
16845     /* ops where $_ may be an implicit arg */
16846     case OP_TRANS:
16847     case OP_TRANSR:
16848     case OP_SUBST:
16849     case OP_MATCH:
16850         if ( !(obase->op_flags & OPf_STACKED)) {
16851             if (uninit_sv == DEFSV)
16852                 return newSVpvs_flags("$_", SVs_TEMP);
16853             else if (obase->op_targ
16854                   && uninit_sv == PAD_SVl(obase->op_targ))
16855                 return varname(NULL, '$', obase->op_targ, NULL, 0,
16856                                FUV_SUBSCRIPT_NONE);
16857         }
16858         goto do_op;
16859
16860     case OP_PRTF:
16861     case OP_PRINT:
16862     case OP_SAY:
16863         match = 1; /* print etc can return undef on defined args */
16864         /* skip filehandle as it can't produce 'undef' warning  */
16865         o = cUNOPx(obase)->op_first;
16866         if ((obase->op_flags & OPf_STACKED)
16867             &&
16868                (   o->op_type == OP_PUSHMARK
16869                || (o->op_type == OP_NULL && o->op_targ == OP_PUSHMARK)))
16870             o = OpSIBLING(OpSIBLING(o));
16871         goto do_op2;
16872
16873
16874     case OP_ENTEREVAL: /* could be eval $undef or $x='$undef'; eval $x */
16875     case OP_CUSTOM: /* XS or custom code could trigger random warnings */
16876
16877         /* the following ops are capable of returning PL_sv_undef even for
16878          * defined arg(s) */
16879
16880     case OP_BACKTICK:
16881     case OP_PIPE_OP:
16882     case OP_FILENO:
16883     case OP_BINMODE:
16884     case OP_TIED:
16885     case OP_GETC:
16886     case OP_SYSREAD:
16887     case OP_SEND:
16888     case OP_IOCTL:
16889     case OP_SOCKET:
16890     case OP_SOCKPAIR:
16891     case OP_BIND:
16892     case OP_CONNECT:
16893     case OP_LISTEN:
16894     case OP_ACCEPT:
16895     case OP_SHUTDOWN:
16896     case OP_SSOCKOPT:
16897     case OP_GETPEERNAME:
16898     case OP_FTRREAD:
16899     case OP_FTRWRITE:
16900     case OP_FTREXEC:
16901     case OP_FTROWNED:
16902     case OP_FTEREAD:
16903     case OP_FTEWRITE:
16904     case OP_FTEEXEC:
16905     case OP_FTEOWNED:
16906     case OP_FTIS:
16907     case OP_FTZERO:
16908     case OP_FTSIZE:
16909     case OP_FTFILE:
16910     case OP_FTDIR:
16911     case OP_FTLINK:
16912     case OP_FTPIPE:
16913     case OP_FTSOCK:
16914     case OP_FTBLK:
16915     case OP_FTCHR:
16916     case OP_FTTTY:
16917     case OP_FTSUID:
16918     case OP_FTSGID:
16919     case OP_FTSVTX:
16920     case OP_FTTEXT:
16921     case OP_FTBINARY:
16922     case OP_FTMTIME:
16923     case OP_FTATIME:
16924     case OP_FTCTIME:
16925     case OP_READLINK:
16926     case OP_OPEN_DIR:
16927     case OP_READDIR:
16928     case OP_TELLDIR:
16929     case OP_SEEKDIR:
16930     case OP_REWINDDIR:
16931     case OP_CLOSEDIR:
16932     case OP_GMTIME:
16933     case OP_ALARM:
16934     case OP_SEMGET:
16935     case OP_GETLOGIN:
16936     case OP_SUBSTR:
16937     case OP_AEACH:
16938     case OP_EACH:
16939     case OP_SORT:
16940     case OP_CALLER:
16941     case OP_DOFILE:
16942     case OP_PROTOTYPE:
16943     case OP_NCMP:
16944     case OP_SMARTMATCH:
16945     case OP_UNPACK:
16946     case OP_SYSOPEN:
16947     case OP_SYSSEEK:
16948         match = 1;
16949         goto do_op;
16950
16951     case OP_ENTERSUB:
16952     case OP_GOTO:
16953         /* XXX tmp hack: these two may call an XS sub, and currently
16954           XS subs don't have a SUB entry on the context stack, so CV and
16955           pad determination goes wrong, and BAD things happen. So, just
16956           don't try to determine the value under those circumstances.
16957           Need a better fix at dome point. DAPM 11/2007 */
16958         break;
16959
16960     case OP_FLIP:
16961     case OP_FLOP:
16962     {
16963         GV * const gv = gv_fetchpvs(".", GV_NOTQUAL, SVt_PV);
16964         if (gv && GvSV(gv) == uninit_sv)
16965             return newSVpvs_flags("$.", SVs_TEMP);
16966         goto do_op;
16967     }
16968
16969     case OP_POS:
16970         /* def-ness of rval pos() is independent of the def-ness of its arg */
16971         if ( !(obase->op_flags & OPf_MOD))
16972             break;
16973         /* FALLTHROUGH */
16974
16975     case OP_SCHOMP:
16976     case OP_CHOMP:
16977         if (SvROK(PL_rs) && uninit_sv == SvRV(PL_rs))
16978             return newSVpvs_flags("${$/}", SVs_TEMP);
16979         /* FALLTHROUGH */
16980
16981     default:
16982     do_op:
16983         if (!(obase->op_flags & OPf_KIDS))
16984             break;
16985         o = cUNOPx(obase)->op_first;
16986         
16987     do_op2:
16988         if (!o)
16989             break;
16990
16991         /* This loop checks all the kid ops, skipping any that cannot pos-
16992          * sibly be responsible for the uninitialized value; i.e., defined
16993          * constants and ops that return nothing.  If there is only one op
16994          * left that is not skipped, then we *know* it is responsible for
16995          * the uninitialized value.  If there is more than one op left, we
16996          * have to look for an exact match in the while() loop below.
16997          * Note that we skip padrange, because the individual pad ops that
16998          * it replaced are still in the tree, so we work on them instead.
16999          */
17000         o2 = NULL;
17001         for (kid=o; kid; kid = OpSIBLING(kid)) {
17002             const OPCODE type = kid->op_type;
17003             if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
17004               || (type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
17005               || (type == OP_PUSHMARK)
17006               || (type == OP_PADRANGE)
17007             )
17008             continue;
17009
17010             if (o2) { /* more than one found */
17011                 o2 = NULL;
17012                 break;
17013             }
17014             o2 = kid;
17015         }
17016         if (o2)
17017             return find_uninit_var(o2, uninit_sv, match, desc_p);
17018
17019         /* scan all args */
17020         while (o) {
17021             sv = find_uninit_var(o, uninit_sv, 1, desc_p);
17022             if (sv)
17023                 return sv;
17024             o = OpSIBLING(o);
17025         }
17026         break;
17027     }
17028     return NULL;
17029 }
17030
17031
17032 /*
17033 =for apidoc report_uninit
17034
17035 Print appropriate "Use of uninitialized variable" warning.
17036
17037 =cut
17038 */
17039
17040 void
17041 Perl_report_uninit(pTHX_ const SV *uninit_sv)
17042 {
17043     const char *desc = NULL;
17044     SV* varname = NULL;
17045
17046     if (PL_op) {
17047         desc = PL_op->op_type == OP_STRINGIFY && PL_op->op_folded
17048                 ? "join or string"
17049                 : PL_op->op_type == OP_MULTICONCAT
17050                     && (PL_op->op_private & OPpMULTICONCAT_FAKE)
17051                 ? "sprintf"
17052                 : OP_DESC(PL_op);
17053         if (uninit_sv && PL_curpad) {
17054             varname = find_uninit_var(PL_op, uninit_sv, 0, &desc);
17055             if (varname)
17056                 sv_insert(varname, 0, 0, " ", 1);
17057         }
17058     }
17059     else if (PL_curstackinfo->si_type == PERLSI_SORT && cxstack_ix == 0)
17060         /* we've reached the end of a sort block or sub,
17061          * and the uninit value is probably what that code returned */
17062         desc = "sort";
17063
17064     /* PL_warn_uninit_sv is constant */
17065     GCC_DIAG_IGNORE_STMT(-Wformat-nonliteral);
17066     if (desc)
17067         /* diag_listed_as: Use of uninitialized value%s */
17068         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit_sv,
17069                 SVfARG(varname ? varname : &PL_sv_no),
17070                 " in ", desc);
17071     else
17072         Perl_warner(aTHX_ packWARN(WARN_UNINITIALIZED), PL_warn_uninit,
17073                 "", "", "");
17074     GCC_DIAG_RESTORE_STMT;
17075 }
17076
17077 /*
17078  * ex: set ts=8 sts=4 sw=4 et:
17079  */